*/
#if !BOOT
-scm *
-define (scm *x, scm *a)
+SCM
+define_env (SCM e, SCM a)
{
- scm *e;
- scm *name = cadr (x);
- if (name->type != PAIR)
- e = builtin_eval (caddr (x), cons (cons (cadr (x), cadr (x)), a));
+ return vm_call (vm_define_env, e, cell_undefined, a);
+}
+
+SCM
+vm_define_env ()
+{
+ SCM x;
+ r2 = cadr (r1);
+ if (TYPE (r2) != PAIR)
+ x = eval_env (caddr (r1), cons (cons (cadr (r1), cadr (r1)), r0));
else {
- name = car (name);
- scm *p = pairlis (cadr (x), cadr (x), a);
- cache_invalidate_range (p, a);
- e = builtin_eval (make_lambda (cdadr (x), cddr (x)), p);
+ r2 = car (r2);
+ SCM p = pairlis (cadr (r1), cadr (r1), r0);
+ x = eval_env (make_lambda (cdadr (r1), cddr (r1)), p);
}
- if (eq_p (car (x), &symbol_define_macro) == &scm_t)
- e = make_macro (name, e);
- scm *entry = cons (name, e);
- scm *aa = cons (entry, &scm_nil);
- set_cdr_x (aa, cdr (a));
- set_cdr_x (a, aa);
- scm *cl = assq (&scm_closure, a);
+ if (eq_p (car (r1), cell_symbol_define_macro) == cell_t)
+ x = make_macro (r2, x);
+
+ SCM entry = cons (r2, x);
+ SCM aa = cons (entry, cell_nil);
+ set_cdr_x (aa, cdr (r0));
+ set_cdr_x (r0, aa);
+ SCM cl = assq (cell_closure, r0);
set_cdr_x (cl, aa);
return entry;
}
#else // BOOT
-scm*define (scm *x, scm *a){}
+SCM define_env (SCM r1, SCM a){}
+SCM vm_define_env (SCM r1, SCM a){}
#endif
-scm *
-define_macro (scm *x, scm *a)
+SCM
+define_macro (SCM r1, SCM a)
{
}