diff options
| author | LLLL Colonq <llll@colonq> | 2025-09-21 05:44:05 -0400 |
|---|---|---|
| committer | LLLL Colonq <llll@colonq> | 2025-09-21 05:44:05 -0400 |
| commit | 5c1404b6fd35a5eef9724dd197cdc645b7673e4c (patch) | |
| tree | 7b074a62200cb0eb3472d90d84b8303df7a792d1 /src/main.c | |
| parent | 6530799bb08a1e2e367d12972fdd4210243ebb39 (diff) | |
Native special forms / macros
Diffstat (limited to 'src/main.c')
| -rw-r--r-- | src/main.c | 13 |
1 files changed, 13 insertions, 0 deletions
@@ -11,6 +11,18 @@ pit_value test_print(pit_runtime *rt, pit_value args) { return x; } +pit_value test_if(pit_runtime *rt, pit_value args) { + pit_value cform = pit_car(rt, args); + pit_value tform = pit_car(rt, pit_cdr(rt, args)); + pit_value eform = pit_car(rt, pit_cdr(rt, pit_cdr(rt, args))); + pit_value c = pit_eval(rt, cform); + if (c != PIT_NIL) { + return pit_eval(rt, tform); + } else { + return pit_eval(rt, eform); + } +} + pit_value test_add(pit_runtime *rt, pit_value args) { i64 x = pit_as_integer(rt, pit_car(rt, args)); i64 y = pit_as_integer(rt, pit_car(rt, pit_cdr(rt, args))); @@ -31,6 +43,7 @@ int main(int argc, char **argv) { pit_fset(rt, pit_intern_cstr(rt, "print"), pit_nativefunc_new(rt, test_print)); pit_fset(rt, pit_intern_cstr(rt, "+"), pit_nativefunc_new(rt, test_add)); pit_fset(rt, pit_intern_cstr(rt, "-"), pit_nativefunc_new(rt, test_sub)); + pit_mset(rt, pit_intern_cstr(rt, "if"), pit_nativefunc_new(rt, test_if)); pit_lexer *lex = pit_lex_file(argv[1]); |
