~ 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