(@, @@): New macros.
authorMarius Vollmer <mvo@zagadka.de>
Mon, 17 Nov 2003 00:28:03 +0000 (00:28 +0000)
committerMarius Vollmer <mvo@zagadka.de>
Mon, 17 Nov 2003 00:28:03 +0000 (00:28 +0000)
ice-9/boot-9.scm

index 512b476..3989f69 100644 (file)
 
 (define load load-module)
 
+;; The following macro allows one to write, for example,
+;;
+;;    (@ (ice-9 pretty-print) pretty-print)
+;;
+;; to refer directly to the pretty-print variable in module (ice-9
+;; pretty-print).  It works by looking up the variable and inserting
+;; it directly into the code.  This is understood by the evaluator.
+;; Indeed, all references to global variables are memoized into such
+;; variable objects.
+
+(define-macro (@ mod-name var-name)
+  (let ((var (module-variable (resolve-interface mod-name) var-name)))
+    (if (not var)
+       (error "no such public variable" (list '@ mod-name var-name)))
+    var))
+
+;; The '@@' macro is like '@' but it can also access bindings that
+;; have not been explicitely exported.
+
+(define-macro (@@ mod-name var-name)
+  (let ((var (module-variable (resolve-module mod-name) var-name)))
+    (if (not var)
+       (error "no such variable" (list '@@ mod-name var-name)))
+    var))
+
 \f
 ;;; {Parameters}
 ;;;