~ chicken-r7rs (master) /scheme.eval.scm
Trap1(module scheme.eval (eval environment)2 (import (rename scheme (eval %eval)))3 (import chicken.base chicken.type)4 (import r7rs-library)56;;;7;;; 6.12. Environments and evaluation8;;;910 (: eval (* (struct environment) -> *))1112 (define (eval expr env) (%eval expr env))1314 (: environment (#!rest list -> (struct environment)))1516 (define (environment . specs)17 (let ((name (gensym "environment-module-")))18 (define (delmod)19 (and-let* ((modp (assq name ##sys#module-table)))20 (set! ##sys#module-table (##sys#delq modp ##sys#module-table))))21 (dynamic-wind22 void23 (lambda ()24 ;; create module...25 (%eval `(module ,name ()26 (import r7rs) ; for `import`27 ,@(map (lambda (spec)28 `(import ,(fixup-import/export-spec spec 'environment)))29 specs)))30 (let ((mod (##sys#find-module name)))31 (##sys#make-structure 'environment32 (cons 'import specs)33 (let ((env (##sys#slot mod 13)))34 (append (car env) (cdr env))) ; combine env and syntax bindings35 #t)))36 ;; ...and remove it right away37 delmod)))3839)