diff --git a/src/ikarus.boot b/src/ikarus.boot index a614d80..b3615f3 100644 Binary files a/src/ikarus.boot and b/src/ikarus.boot differ diff --git a/src/ikarus.load.ss b/src/ikarus.load.ss new file mode 100644 index 0000000..2e404fb --- /dev/null +++ b/src/ikarus.load.ss @@ -0,0 +1,30 @@ + +(library (ikarus load) + (export load) + (import + (except (ikarus) load) + (only (ikarus reader) read-initial)) + + (define load-handler + (lambda (x) + (eval-top-level x))) + (define read-and-eval + (lambda (p eval-proc) + (let ([x (read p)]) + (unless (eof-object? x) + (eval-proc x) + (read-and-eval p eval-proc))))) + (define load + (case-lambda + [(x) (load x load-handler)] + [(x eval-proc) + (unless (string? x) + (error 'load "~s is not a string" x)) + (unless (procedure? eval-proc) + (error 'load "~s is not a procedure" eval-proc)) + (let ([p (open-input-file x)]) + (let ([x (read-initial p)]) + (unless (eof-object? x) + (eval-proc x) + (read-and-eval p eval-proc))) + (close-input-port p))]))) diff --git a/src/ikarus.reader.ss b/src/ikarus.reader.ss index d632954..7f116ee 100644 --- a/src/ikarus.reader.ss +++ b/src/ikarus.reader.ss @@ -1,9 +1,9 @@ (library (ikarus reader) - (export read read-token comment-handler load) + (export read read-initial read-token comment-handler) (import (ikarus system $chars) - (except (ikarus) read read-token comment-handler load)) + (except (ikarus) read read-token comment-handler)) (define delimiter? (lambda (c) @@ -785,29 +785,5 @@ (error 'comment-handler "~s is not a procedure" x)) x))) - (module (load) - (define load-handler - (lambda (x) - (eval-top-level x))) - (define read-and-eval - (lambda (p eval-proc) - (let ([x (my-read p)]) - (unless (eof-object? x) - (eval-proc x) - (read-and-eval p eval-proc))))) - (define load - (case-lambda - [(x) (load x load-handler)] - [(x eval-proc) - (unless (string? x) - (error 'load "~s is not a string" x)) - (unless (procedure? eval-proc) - (error 'load "~s is not a procedure" eval-proc)) - (let ([p (open-input-file x)]) - (let ([x (read-initial p)]) - (unless (eof-object? x) - (eval-proc x) - (read-and-eval p eval-proc))) - (close-input-port p))]))) ) diff --git a/src/makefile.ss b/src/makefile.ss index b8c8663..944d52a 100755 --- a/src/makefile.ss +++ b/src/makefile.ss @@ -56,6 +56,7 @@ "ikarus.compiler.ss" "ikarus.library-manager.ss" "ikarus.syntax.ss" + "ikarus.load.ss" "ikarus.pretty-print.ss" "ikarus.cafe.ss" "ikarus.posix.ss"