diff --git a/lib/ikarus.boot b/lib/ikarus.boot index 203590e..b7342d2 100644 Binary files a/lib/ikarus.boot and b/lib/ikarus.boot differ diff --git a/lib/libtokenizer.ss b/lib/libtokenizer.ss index d16a9b0..3bbbc9d 100644 --- a/lib/libtokenizer.ss +++ b/lib/libtokenizer.ss @@ -672,21 +672,25 @@ x))) (let () (define read-and-eval - (lambda (p) + (lambda (p eval) (let ([x (read p)]) (unless (eof-object? x) (eval x) - (read-and-eval p))))) + (read-and-eval p eval))))) (primitive-set! 'load - (lambda (x) - (unless (string? x) - (error 'load "~s is not a string" x)) - (let ([p (open-input-file x)]) - (let ([x (read-initial p)]) - (unless (eof-object? x) - (eval x) - (read-and-eval p))) - (close-input-port p))))) + (case-lambda + [(x) (load x eval)] + [(x eval) + (unless (string? x) + (error 'load "~s is not a string" x)) + (unless (procedure? eval) + (error 'load "~s is not a procedure" eval)) + (let ([p (open-input-file x)]) + (let ([x (read-initial p)]) + (unless (eof-object? x) + (eval x) + (read-and-eval p eval))) + (close-input-port p))]))) )