diff options
| author | LLLL Colonq <llll@colonq> | 2026-09-06 17:40:51 -0400 |
|---|---|---|
| committer | LLLL Colonq <llll@colonq> | 2026-09-06 17:40:51 -0400 |
| commit | 71bfa9094a4a25f762d681bb07f79f92a95dbb87 (patch) | |
| tree | 1b7ff31dad86e072a37e4270e762a5e0f12f87ac /pit/src/library.c | |
| parent | 843ea34efc2c5ea10edc4d534304f8287f97fbbc (diff) | |
pit: Fix evaluator bug
Diffstat (limited to 'pit/src/library.c')
| -rw-r--r-- | pit/src/library.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/pit/src/library.c b/pit/src/library.c index b911321..10f56f4 100644 --- a/pit/src/library.c +++ b/pit/src/library.c @@ -257,9 +257,7 @@ static pit_value impl_error(pit_runtime *rt, pit_value args, void *data) { } static pit_value impl_eval(pit_runtime *rt, pit_value args, void *data) { (void) data; - // TODO - return PIT_NIL; - // return pit_eval(rt, pit_value_cons_car(rt, args)); + return pit_vm_eval(rt, pit_compile(rt, pit_value_cons_car(rt, args))); } static pit_value impl_eq_p(pit_runtime *rt, pit_value args, void *data) { (void) data; @@ -679,6 +677,12 @@ static pit_value impl_div(pit_runtime *rt, pit_value args, void *data) { } return pit_value_integer_new(rt, total); } +static pit_value impl_mod(pit_runtime *rt, pit_value args, void *data) { + (void) data; + i64 x = pit_value_as_integer(rt, pit_value_cons_car(rt, args)); + i64 y = pit_value_as_integer(rt, pit_value_cons_car(rt, pit_value_cons_cdr(rt, args))); + return pit_value_integer_new(rt, x % y); +} static pit_value impl_not(pit_runtime *rt, pit_value args, void *data) { (void) data; if (pit_value_cons_car(rt, args) == PIT_NIL) { @@ -831,6 +835,7 @@ void pit_install_library_essential(pit_runtime *rt) { pit_symtab_fset(rt, pit_symtab_intern_cstr(rt, "-"), pit_value_nativefunc_new(rt, impl_sub)); pit_symtab_fset(rt, pit_symtab_intern_cstr(rt, "*"), pit_value_nativefunc_new(rt, impl_mul)); pit_symtab_fset(rt, pit_symtab_intern_cstr(rt, "/"), pit_value_nativefunc_new(rt, impl_div)); + pit_symtab_fset(rt, pit_symtab_intern_cstr(rt, "%"), pit_value_nativefunc_new(rt, impl_mod)); /* booleans */ pit_symtab_fset(rt, pit_symtab_intern_cstr(rt, "not"), pit_value_nativefunc_new(rt, impl_not)); /* comparisons */ |
