diff --git a/src/ikarus.boot b/src/ikarus.boot index a6e6f77..c7a4877 100644 Binary files a/src/ikarus.boot and b/src/ikarus.boot differ diff --git a/src/libcafe.ss b/src/libcafe.ss index 6fadb94..f2a22b4 100644 --- a/src/libcafe.ss +++ b/src/libcafe.ss @@ -99,8 +99,7 @@ description: (define default-cafe-eval (lambda (x) - (chi-top-library x) - (void))) + (chi-top-library x))) (primitive-set! 'new-cafe (case-lambda diff --git a/src/library-manager.ss b/src/library-manager.ss index 456f90d..2e73809 100644 --- a/src/library-manager.ss +++ b/src/library-manager.ss @@ -410,6 +410,7 @@ [command-line-arguments command-line-arguments-label (core-prim . command-line-arguments)] [list*->code* list*->code*-label (core-prim . list*->code*)] [install-library install-library-label (core-prim . install-library)] + [eval-top-level eval-top-level-label (core-prim . eval-top-level)] ;;; record/mid-level [record? record?-label (core-prim . record?)] [make-record-type make-record-type-label (core-prim . make-record-type)] diff --git a/src/libsyntax.ss b/src/libsyntax.ss index b2c4769..493e683 100644 --- a/src/libsyntax.ss +++ b/src/libsyntax.ss @@ -1575,6 +1575,13 @@ [(core-macro) (let ([transformer (core-macro-transformer value)]) (transformer e r mr))] + [(global) + (let* ([loc value] + [lib (imported-loc->library loc)]) + (unless lib + (syntax-error e "BUG: cannot find defining library")) + ((run-collector) lib) + (build-global-reference no-source loc))] [(core-prim) (let ([name value]) (build-primref no-source name))] @@ -2068,7 +2075,8 @@ (strip x '())))) (primitive-set! 'syntax-dispatch syntax-dispatch) (primitive-set! 'boot-library-expand boot-library-expander) - (primitive-set! 'chi-top-library run-library-expander)) + (primitive-set! 'chi-top-library run-library-expander) + (primitive-set! 'eval-top-level run-library-expander)) diff --git a/src/libtokenizer.ss b/src/libtokenizer.ss index 7641b98..847ac90 100644 --- a/src/libtokenizer.ss +++ b/src/libtokenizer.ss @@ -791,8 +791,7 @@ (let () (define load-handler (lambda (x) - (chi-top-library x) - (void))) + (chi-top-library x))) (define read-and-eval (lambda (p eval-proc) (let ([x (my-read p)])