~ chicken-r7rs (master) 603550c9343a5f865fa84efda783926ba8fb547b


commit 603550c9343a5f865fa84efda783926ba8fb547b
Author:     felix <felix@call-with-current-continuation.org>
AuthorDate: Sun Jun 16 22:04:05 2013 +0000
Commit:     Evan Hanson <evhan@foldling.org>
CommitDate: Sun Jun 16 22:04:05 2013 +0000

    Added eval + environment (only very basic testing done in the moment)

diff --git a/r7rs.setup b/r7rs.setup
index 2c65b9d..9ba36d7 100644
--- a/r7rs.setup
+++ b/r7rs.setup
@@ -1,8 +1,10 @@
 ;; -*- Scheme -*-
-(use make)
+
+
+(use make srfi-1)
 
 (define scheme-modules
-  '("base" "process-context"))		;XXX
+  '("base" "process-context" "eval"))		;XXX
 
 (make (("r7rs-compile-time.so" ("r7rs-compile-time.scm" "r7rs-compile-time-module.scm")
 	(compile -s -O3 -d1 r7rs-compile-time-module.scm -J -o r7rs-compile-time.so)
@@ -31,8 +33,11 @@
 
 (install-extension
  'r7rs
- '("r7rs.so" "r7rs.import.so" 
+ `("r7rs.so" "r7rs.import.so" 
    "r7rs-compile-time.so" "r7rs-compile-time.import.so"
-   "scheme.base.so" "scheme.base.import.so"
-   "scheme.process-context.so" "scheme.process-context.import.so")
+   ,@(append-map
+      (lambda (mod)
+	(list (string-append "scheme." mod ".so")
+	      (string-append "scheme." mod ".import.so")))
+      scheme-modules))
  '((version "0.0.1")))
diff --git a/scheme.eval.scm b/scheme.eval.scm
new file mode 100644
index 0000000..fc32f01
--- /dev/null
+++ b/scheme.eval.scm
@@ -0,0 +1,23 @@
+(module scheme.eval (eval
+		     environment)
+
+  (import scheme chicken)
+  (use r7rs-compile-time)
+
+;;;
+;;; 6.12. Environments and evaluation
+;;;
+
+  (define (environment . specs)
+    (let ((name (gensym "environment-module-")))
+      ;; create module...
+      (eval `(module ,name ()
+	       ,@(map (lambda (spec)
+			`(import ,(fixup-import/export-spec spec 'environment)))
+		      specs)))
+      (let ((env (module-environment name)))
+	;; ...and remove it right away
+	(set! ##sys#module-table (##sys#delq (assq name ##sys#module-table) ##sys#module-table))
+	env)))
+
+)
Trap