//one arg: exp static cellpoint let_vals(void) { args_push(args_ref(1)); reg = let_bindings(); stack_push(&vars_stack, NIL); while (is_false(is_null(reg))){ check_bindings("let", car(reg), args_ref(1)); stack_push(&vars_stack, cons(car(cdr(car(reg))), stack_pop(&vars_stack))); reg = cdr(reg); } args_push(stack_pop(&vars_stack)); reg = reverse(); args_pop(1); return reg; }
object *let_arguments(object *exp) { return bindings_arguments(let_bindings(exp)); }
object *let_parameters(object *exp) { return bindings_parameters(let_bindings(exp)); }
static value_t *e_let(env_t *env, expr_t *expr) { env_new_scope(&env); list_iterate(let_bindings(expr), add_binding_i, env); return e_expr(env, let_body(expr)); }
static inline object *let_values(object *exp) { return bindings_values(let_bindings(exp)); }
static pSlipObject let_arguments(pSlip gd, pSlipObject exp) { return bindings_arguments(gd, let_bindings(exp)); }
static pSlipObject let_parameters(pSlip gd, pSlipObject exp) { return bindings_parameters(gd, let_bindings(exp)); }