3 static struct Expr get_scope_value_impl(struct Expr scope, struct Expr name)
6 struct Expr value = assoc(name, scope.cons->car);
7 return nil_p(value) ? get_scope_value_impl(scope.cons->cdr, name) : value;
13 struct Expr get_scope_value(const struct Scope *scope, struct Expr name)
15 return get_scope_value_impl(scope->expr, name);
18 static struct Expr set_scope_value_impl(Gc *gc, struct Expr scope, struct Expr name, struct Expr value)
21 if (!nil_p(assoc(name, scope.cons->car)) || nil_p(scope.cons->cdr)) {
23 CONS(gc, CONS(gc, name, value), scope.cons->car),
28 set_scope_value_impl(gc, scope.cons->cdr, name, value));
32 CONS(gc, CONS(gc, name, value), NIL(gc)),
37 void set_scope_value(Gc *gc, struct Scope *scope, struct Expr name, struct Expr value)
39 scope->expr = set_scope_value_impl(gc, scope->expr, name, value);