add compile-toplevel and evaluate conditions to eval-case
authorAndy Wingo <wingo@pobox.com>
Mon, 19 May 2008 10:26:20 +0000 (12:26 +0200)
committerAndy Wingo <wingo@pobox.com>
Sat, 2 Aug 2008 10:30:03 +0000 (12:30 +0200)
* ice-9/boot-9.scm (eval-case): Define two more conditions:
  compile-toplevel and evaluate, as common lisp and chez scheme do.
  (defmacro, define-option-interface, define-macro, define-syntax-macro)
  (define-module, use-modules, use-syntax, define-public)
  (defmacro-public, export, re-export): Add `compile-toplevel' to all
  uses of eval-case.

ice-9/boot-9.scm

index 0de82b4..8e2aeef 100644 (file)
 ;; (eval-case ((situation*) forms)* (else forms)?)
 ;;
 ;; Evaluate certain code based on the situation that eval-case is used
-;; in.  The only defined situation right now is `load-toplevel' which
-;; triggers for code evaluated at the top-level, for example from the
-;; REPL or when loading a file.
+;; in. There are three situations defined. `load-toplevel' triggers for
+;; code evaluated at the top-level, for example from the REPL or when
+;; loading a file. `compile-toplevel' triggers for code compiled at the
+;; toplevel. `execute' triggers during execution of code not at the top
+;; level.
 
 (define eval-case
   (procedure->memoizing-macro
          (lambda (name parms . body)
            (let ((transformer `(lambda ,parms ,@body)))
              `(eval-case
-               ((load-toplevel)
+                ((load-toplevel compile-toplevel)
                 (define ,name (defmacro:transformer ,transformer)))
                (else
                 (error "defmacro can only be used at the top level")))))))
@@ -2265,8 +2267,8 @@ module '(ice-9 q) '(make-q q-length))}."
            (define ,(caddr options/enable/disable)
              ,(make-disable interface))
            (defmacro ,(caaddr option-group) (opt val)
-             `(,,(car options/enable/disable)
-               (append (,,(car options/enable/disable))
+             `(,',(car options/enable/disable)
+               (append (,',(car options/enable/disable))
                        (list ',opt ,val))))))))))
 
 (define-option-interface
@@ -2707,7 +2709,7 @@ module '(ice-9 q) '(make-q q-length))}."
             (car rest)
             `(lambda ,(cdr first) ,@rest))))
     `(eval-case
-      ((load-toplevel)
+      ((load-toplevel compile-toplevel)
        (define ,name (defmacro:transformer ,transformer)))
       (else
        (error "define-macro can only be used at the top level")))))
@@ -2720,7 +2722,7 @@ module '(ice-9 q) '(make-q q-length))}."
             (car rest)
             `(lambda ,(cdr first) ,@rest))))
     `(eval-case
-      ((load-toplevel)
+      ((load-toplevel compile-toplevel)
        (define ,name (defmacro:syntax-transformer ,transformer)))
       (else
        (error "define-syntax-macro can only be used at the top level")))))
@@ -2835,7 +2837,7 @@ module '(ice-9 q) '(make-q q-length))}."
 
 (defmacro define-module args
   `(eval-case
-    ((load-toplevel)
+    ((load-toplevel compile-toplevel)
      (let ((m (process-define-module
               (list ,@(compile-define-module-args args)))))
        (set-current-module m)
@@ -2860,7 +2862,7 @@ module '(ice-9 q) '(make-q q-length))}."
 
 (defmacro use-modules modules
   `(eval-case
-    ((load-toplevel)
+    ((load-toplevel compile-toplevel)
      (process-use-modules
       (list ,@(map (lambda (m)
                     `(list ,@(compile-interface-spec m)))
@@ -2871,7 +2873,7 @@ module '(ice-9 q) '(make-q q-length))}."
 
 (defmacro use-syntax (spec)
   `(eval-case
-    ((load-toplevel)
+    ((load-toplevel compile-toplevel)
      ,@(if (pair? spec)
           `((process-use-modules (list
                                   (list ,@(compile-interface-spec spec))))
@@ -2901,7 +2903,7 @@ module '(ice-9 q) '(make-q q-length))}."
     (let ((name (defined-name (car args))))
       `(begin
         (define-private ,@args)
-        (eval-case ((load-toplevel) (export ,name))))))))
+        (eval-case ((load-toplevel compile-toplevel) (export ,name))))))))
 
 (defmacro defmacro-public args
   (define (syntax)
@@ -2916,7 +2918,7 @@ module '(ice-9 q) '(make-q q-length))}."
    (#t
     (let ((name (defined-name (car args))))
       `(begin
-        (eval-case ((load-toplevel) (export-syntax ,name)))
+        (eval-case ((load-toplevel compile-toplevel) (export-syntax ,name)))
         (defmacro ,@args))))))
 
 ;; Export a local variable
@@ -2955,7 +2957,7 @@ module '(ice-9 q) '(make-q q-length))}."
 
 (defmacro export names
   `(eval-case
-    ((load-toplevel)
+    ((load-toplevel compile-toplevel)
      (call-with-deferred-observers
       (lambda ()
        (module-export! (current-module) ',names))))
@@ -2964,7 +2966,7 @@ module '(ice-9 q) '(make-q q-length))}."
 
 (defmacro re-export names
   `(eval-case
-    ((load-toplevel)
+    ((load-toplevel compile-toplevel)
      (call-with-deferred-observers
       (lambda ()
        (module-re-export! (current-module) ',names))))