implement macros and dotted pairs

This commit is contained in:
Lobo 2026-01-11 22:17:36 -03:00
parent 44237a650d
commit 83fce46449
9 changed files with 68 additions and 15 deletions

View file

@ -223,6 +223,30 @@ O prim_fn(In *in, O args, O env) {
return BOX(hdr);
}
O prim_mac(In *in, O args, O env) {
O params = nextarg(&args);
O body = args;
I mark = gc_rootmark(&in->gc);
gc_addroot(&in->gc, &params);
gc_addroot(&in->gc, &env);
gc_addroot(&in->gc, &body);
O progn = symbol_make(in, "progn");
O body_form = pair_make(in, progn, body);
gc_addroot(&in->gc, &body_form);
Gh *hdr = gc_alloc(&in->gc, sizeof(Gh) + sizeof(Cl));
hdr->type = TYPE_MAC;
Cl *cl = (Cl *)(hdr + 1);
cl->args = params;
cl->env = env;
cl->body = body_form;
gc_rootreset(&in->gc, mark);
return BOX(hdr);
}
O prim_gc(In *in, O args, O env) {
(void)in;
(void)args;