mes: Single environment lookup for variables, SICP chapter 3.
[mes.git] / module / mes / module.mes
index 8e6fba854a14a3ece01ee667de8238c934922a92..d6aa76775b77ae4c8cea9450c5cde8ce4472df51 100644 (file)
   (string-append (string-join (map symbol->string o) "/") ".mes"))
 
 (define *modules* '(mes/base-0.mes))
-(define (mes-load-module-env module a)
-  (push! *input-ports* (current-input-port))
-  (set-current-input-port (open-input-file (string-append %moduledir (module->file module))))
-  (let ((x (core:eval (append2 (cons 'begin (read-input-file-env a))
-                               '((current-module)))
-                      a)))
-    (set-current-input-port (pop! *input-ports*))
-    x))
-
 (define-macro (mes-use-module module)
   (list 'if (list not (list memq (list string->symbol (module->file module)) '*modules*))
         (list
                     (list core:display-error ";;; already loaded: ")
                     (list core:display-error (list 'quote module))
                     (list core:display-error "\n")))))
+
+(define *input-ports* '())
+(define-macro (push! stack o)
+  (cons
+   'begin
+   (list
+    (list 'set! stack (list cons o stack))
+    stack)))
+(define-macro (pop! stack)
+  (list 'let (list (list 'o (list car stack)))
+        (list 'set! stack (list cdr stack))
+        'o))
+(define (mes-load-module-env module a)
+  (push! *input-ports* (current-input-port))
+  (set-current-input-port (open-input-file (string-append %moduledir (module->file module))))
+  (let ((x (core:eval (append2 (cons 'begin (read-input-file-env a))
+                               '((current-module)))
+                      a)))
+    (set-current-input-port (pop! *input-ports*))
+    x))
+(define (mes-load-module-env module a)
+  (core:display-error "loading:") (core:write-error (string-append %moduledir (module->file module))) (core:display-error "\n")
+  (primitive-load (string-append %moduledir (module->file module)))
+  (core:display-error "dun\n")
+  )