feat(repl): add the rest of the Nums

This commit is contained in:
rvcas 2021-05-30 23:42:02 -04:00
parent 5ae269659a
commit 216a945e28

View file

@ -79,19 +79,26 @@ fn jit_to_ast_help<'a>(
) )
} }
Layout::Builtin(Builtin::Usize) => Ok(run_jit_function!(lib, main_fn_name, usize, |num| { Layout::Builtin(Builtin::Usize) => Ok(run_jit_function!(lib, main_fn_name, usize, |num| {
num_to_ast(env, nat_to_ast(env.arena, num), content) num_to_ast(env, number_literal_to_ast(env.arena, num), content)
})), })),
Layout::Builtin(Builtin::Int16) => {
Ok(run_jit_function!(lib, main_fn_name, i16, |num| num_to_ast(
env,
number_literal_to_ast(env.arena, num),
content
)))
}
Layout::Builtin(Builtin::Int32) => { Layout::Builtin(Builtin::Int32) => {
Ok(run_jit_function!(lib, main_fn_name, i32, |num| num_to_ast( Ok(run_jit_function!(lib, main_fn_name, i32, |num| num_to_ast(
env, env,
i32_to_ast(env.arena, num), number_literal_to_ast(env.arena, num),
content content
))) )))
} }
Layout::Builtin(Builtin::Int64) => { Layout::Builtin(Builtin::Int64) => {
Ok(run_jit_function!(lib, main_fn_name, i64, |num| num_to_ast( Ok(run_jit_function!(lib, main_fn_name, i64, |num| num_to_ast(
env, env,
i64_to_ast(env.arena, num), number_literal_to_ast(env.arena, num),
content content
))) )))
} }
@ -100,13 +107,20 @@ fn jit_to_ast_help<'a>(
lib, lib,
main_fn_name, main_fn_name,
i128, i128,
|num| num_to_ast(env, i128_to_ast(env.arena, num), content) |num| num_to_ast(env, number_literal_to_ast(env.arena, num), content)
)) ))
} }
Layout::Builtin(Builtin::Float32) => {
Ok(run_jit_function!(lib, main_fn_name, f32, |num| num_to_ast(
env,
number_literal_to_ast(env.arena, num),
content
)))
}
Layout::Builtin(Builtin::Float64) => { Layout::Builtin(Builtin::Float64) => {
Ok(run_jit_function!(lib, main_fn_name, f64, |num| num_to_ast( Ok(run_jit_function!(lib, main_fn_name, f64, |num| num_to_ast(
env, env,
f64_to_ast(env.arena, num), number_literal_to_ast(env.arena, num),
content content
))) )))
} }
@ -272,15 +286,30 @@ fn ptr_to_ast<'a>(
content: &Content, content: &Content,
) -> Expr<'a> { ) -> Expr<'a> {
match layout { match layout {
Layout::Builtin(Builtin::Int128) => {
let num = unsafe { *(ptr as *const i128) };
num_to_ast(env, number_literal_to_ast(env.arena, num), content)
}
Layout::Builtin(Builtin::Int64) => { Layout::Builtin(Builtin::Int64) => {
let num = unsafe { *(ptr as *const i64) }; let num = unsafe { *(ptr as *const i64) };
num_to_ast(env, i64_to_ast(env.arena, num), content) num_to_ast(env, number_literal_to_ast(env.arena, num), content)
}
Layout::Builtin(Builtin::Int32) => {
let num = unsafe { *(ptr as *const i32) };
num_to_ast(env, number_literal_to_ast(env.arena, num), content)
}
Layout::Builtin(Builtin::Int16) => {
let num = unsafe { *(ptr as *const i16) };
num_to_ast(env, number_literal_to_ast(env.arena, num), content)
} }
Layout::Builtin(Builtin::Usize) => { Layout::Builtin(Builtin::Usize) => {
let num = unsafe { *(ptr as *const usize) }; let num = unsafe { *(ptr as *const usize) };
num_to_ast(env, nat_to_ast(env.arena, num), content) num_to_ast(env, number_literal_to_ast(env.arena, num), content)
} }
Layout::Builtin(Builtin::Int1) => { Layout::Builtin(Builtin::Int1) => {
// TODO: bits are not as expected here. // TODO: bits are not as expected here.
@ -292,7 +321,12 @@ fn ptr_to_ast<'a>(
Layout::Builtin(Builtin::Float64) => { Layout::Builtin(Builtin::Float64) => {
let num = unsafe { *(ptr as *const f64) }; let num = unsafe { *(ptr as *const f64) };
num_to_ast(env, f64_to_ast(env.arena, num), content) num_to_ast(env, number_literal_to_ast(env.arena, num), content)
}
Layout::Builtin(Builtin::Float32) => {
let num = unsafe { *(ptr as *const f32) };
num_to_ast(env, number_literal_to_ast(env.arena, num), content)
} }
Layout::Builtin(Builtin::EmptyList) => Expr::List { Layout::Builtin(Builtin::EmptyList) => Expr::List {
items: &[], items: &[],
@ -855,29 +889,7 @@ fn num_to_ast<'a>(env: &Env<'a, '_>, num_expr: Expr<'a>, content: &Content) -> E
/// This is centralized in case we want to format it differently later, /// This is centralized in case we want to format it differently later,
/// e.g. adding underscores for large numbers /// e.g. adding underscores for large numbers
fn nat_to_ast(arena: &Bump, num: usize) -> Expr<'_> { fn number_literal_to_ast<T: std::fmt::Display>(arena: &Bump, num: T) -> Expr<'_> {
Expr::Num(arena.alloc(format!("{}", num)))
}
/// This is centralized in case we want to format it differently later,
/// e.g. adding underscores for large numbers
fn i64_to_ast(arena: &Bump, num: i64) -> Expr<'_> {
Expr::Num(arena.alloc(format!("{}", num)))
}
fn i32_to_ast(arena: &Bump, num: i32) -> Expr<'_> {
Expr::Num(arena.alloc(format!("{}", num)))
}
/// This is centralized in case we want to format it differently later,
/// e.g. adding underscores for large numbers
fn i128_to_ast(arena: &Bump, num: i128) -> Expr<'_> {
Expr::Num(arena.alloc(format!("{}", num)))
}
/// This is centralized in case we want to format it differently later,
/// e.g. adding underscores for large numbers
fn f64_to_ast(arena: &Bump, num: f64) -> Expr<'_> {
Expr::Num(arena.alloc(format!("{}", num))) Expr::Num(arena.alloc(format!("{}", num)))
} }