~ 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