Support backslash in string.
[mes.git] / define.c
index fd6c87e336d706de39e37b2dbe1c6ac32e64eb16..315211977436b4f0566df928b8ef52a3b342f12f 100644 (file)
--- a/define.c
+++ b/define.c
  */
 
 #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)
 {
 }