* added an load-handler procedure that defaults to calling
chi-library-top. * changed definition of load to use load-handler
This commit is contained in:
parent
cc2f391a6f
commit
35600203f9
BIN
src/ikarus.boot
BIN
src/ikarus.boot
Binary file not shown.
|
@ -5192,12 +5192,84 @@
|
||||||
(parameterize ([assembler-output #f])
|
(parameterize ([assembler-output #f])
|
||||||
(expand x))))
|
(expand x))))
|
||||||
|
|
||||||
|
(define compile-core-expr-to-port
|
||||||
|
(lambda (expr port)
|
||||||
|
(fasl-write (compile-core-expr->code expr) port)))
|
||||||
|
|
||||||
|
(define (compile-core-expr x)
|
||||||
|
(let ([code (compile-core-expr->code x)])
|
||||||
|
($code->closure code)))
|
||||||
|
|
||||||
|
(primitive-set! 'compile-core-expr-to-port compile-core-expr-to-port)
|
||||||
|
|
||||||
|
(primitive-set! 'assembler-output (make-parameter #f))
|
||||||
|
(primitive-set! 'compile
|
||||||
|
(lambda (x)
|
||||||
|
(let ([code
|
||||||
|
(if (code? x)
|
||||||
|
x
|
||||||
|
(compile-expr->code x))])
|
||||||
|
(let ([proc ($code->closure code)])
|
||||||
|
(proc)))))
|
||||||
|
|
||||||
|
|
||||||
|
(primitive-set! 'eval-core
|
||||||
|
(lambda (x) ((compile-core-expr x))))
|
||||||
|
|
||||||
|
(primitive-set! 'eval
|
||||||
|
(lambda (x)
|
||||||
|
(compile x)))
|
||||||
|
|
||||||
|
(primitive-set! 'load-handler
|
||||||
|
(lambda (x)
|
||||||
|
(chi-top-library x)
|
||||||
|
(void)))
|
||||||
|
|
||||||
|
))
|
||||||
|
|
||||||
|
#!eof junk
|
||||||
|
|
||||||
|
(define compile-file
|
||||||
|
(lambda (input-file output-file . rest)
|
||||||
|
(let ([ip (open-input-file input-file)]
|
||||||
|
[op (apply open-output-file output-file rest)])
|
||||||
|
(let f ()
|
||||||
|
(let ([x (read ip)])
|
||||||
|
(unless (eof-object? x)
|
||||||
|
(fasl-write (compile-expr->code x) op)
|
||||||
|
(f))))
|
||||||
|
(close-input-port ip)
|
||||||
|
(close-output-port op))))
|
||||||
|
(primitive-set! 'compile-file compile-file)
|
||||||
|
|
||||||
;(include "libaltcogen.ss")
|
;(include "libaltcogen.ss")
|
||||||
(define alt-cogen
|
(define alt-cogen
|
||||||
(lambda args
|
(lambda args
|
||||||
(error 'alt-cogen "disabled for now")))
|
(error 'alt-cogen "disabled for now")))
|
||||||
|
|
||||||
|
(define alt-compile-file
|
||||||
|
(lambda (input-file output-file . rest)
|
||||||
|
(let ([ip (open-input-file input-file)]
|
||||||
|
[op (apply open-output-file output-file rest)])
|
||||||
|
(let f ()
|
||||||
|
(let ([x (read ip)])
|
||||||
|
(unless (eof-object? x)
|
||||||
|
(fasl-write (alt-compile-expr x) op)
|
||||||
|
(f))))
|
||||||
|
(close-input-port ip)
|
||||||
|
(close-output-port op))))
|
||||||
|
|
||||||
|
|
||||||
|
(primitive-set! 'alt-compile-file alt-compile-file)
|
||||||
|
|
||||||
|
(primitive-set! 'alt-compile
|
||||||
|
(lambda (x)
|
||||||
|
(let ([code
|
||||||
|
(if (code? x)
|
||||||
|
x
|
||||||
|
(alt-compile-expr x))])
|
||||||
|
(let ([proc ($code->closure code)])
|
||||||
|
(proc)))))
|
||||||
|
|
||||||
(define (alt-compile-expr expr)
|
(define (alt-compile-expr expr)
|
||||||
(let* ([p (parameterize ([assembler-output #f])
|
(let* ([p (parameterize ([assembler-output #f])
|
||||||
|
@ -5231,70 +5303,3 @@
|
||||||
#f))
|
#f))
|
||||||
ls*)])
|
ls*)])
|
||||||
(car code*)))))
|
(car code*)))))
|
||||||
|
|
||||||
|
|
||||||
(define compile-core-expr-to-port
|
|
||||||
(lambda (expr port)
|
|
||||||
(fasl-write (compile-core-expr->code expr) port)))
|
|
||||||
|
|
||||||
(define compile-file
|
|
||||||
(lambda (input-file output-file . rest)
|
|
||||||
(let ([ip (open-input-file input-file)]
|
|
||||||
[op (apply open-output-file output-file rest)])
|
|
||||||
(let f ()
|
|
||||||
(let ([x (read ip)])
|
|
||||||
(unless (eof-object? x)
|
|
||||||
(fasl-write (compile-expr->code x) op)
|
|
||||||
(f))))
|
|
||||||
(close-input-port ip)
|
|
||||||
(close-output-port op))))
|
|
||||||
|
|
||||||
(define alt-compile-file
|
|
||||||
(lambda (input-file output-file . rest)
|
|
||||||
(let ([ip (open-input-file input-file)]
|
|
||||||
[op (apply open-output-file output-file rest)])
|
|
||||||
(let f ()
|
|
||||||
(let ([x (read ip)])
|
|
||||||
(unless (eof-object? x)
|
|
||||||
(fasl-write (alt-compile-expr x) op)
|
|
||||||
(f))))
|
|
||||||
(close-input-port ip)
|
|
||||||
(close-output-port op))))
|
|
||||||
|
|
||||||
(define (compile-core-expr x)
|
|
||||||
(let ([code (compile-core-expr->code x)])
|
|
||||||
($code->closure code)))
|
|
||||||
|
|
||||||
(primitive-set! 'compile-core-expr-to-port compile-core-expr-to-port)
|
|
||||||
|
|
||||||
(primitive-set! 'compile-file compile-file)
|
|
||||||
(primitive-set! 'alt-compile-file alt-compile-file)
|
|
||||||
(primitive-set! 'assembler-output (make-parameter #f))
|
|
||||||
(primitive-set! 'compile
|
|
||||||
(lambda (x)
|
|
||||||
(let ([code
|
|
||||||
(if (code? x)
|
|
||||||
x
|
|
||||||
(compile-expr->code x))])
|
|
||||||
(let ([proc ($code->closure code)])
|
|
||||||
(proc)))))
|
|
||||||
|
|
||||||
(primitive-set! 'alt-compile
|
|
||||||
(lambda (x)
|
|
||||||
(let ([code
|
|
||||||
(if (code? x)
|
|
||||||
x
|
|
||||||
(alt-compile-expr x))])
|
|
||||||
(let ([proc ($code->closure code)])
|
|
||||||
(proc)))))
|
|
||||||
|
|
||||||
(primitive-set! 'eval-core
|
|
||||||
(lambda (x) ((compile-core-expr x))))
|
|
||||||
|
|
||||||
(primitive-set! 'eval
|
|
||||||
(lambda (x)
|
|
||||||
(compile x)))
|
|
||||||
|
|
||||||
|
|
||||||
))
|
|
||||||
|
|
||||||
|
|
|
@ -405,6 +405,7 @@
|
||||||
[eval eval-label (core-prim . eval)]
|
[eval eval-label (core-prim . eval)]
|
||||||
[eval-core eval-core-label (core-prim . eval-core)]
|
[eval-core eval-core-label (core-prim . eval-core)]
|
||||||
[load load-label (core-prim . load)]
|
[load load-label (core-prim . load)]
|
||||||
|
[load-handler load-handler-label (core-prim . load-handler)]
|
||||||
[assembler-output assembler-output-label (core-prim . assembler-output)]
|
[assembler-output assembler-output-label (core-prim . assembler-output)]
|
||||||
[expand expand-label (core-prim . expand)]
|
[expand expand-label (core-prim . expand)]
|
||||||
[fasl-write fasl-write-label (core-prim . fasl-write)]
|
[fasl-write fasl-write-label (core-prim . fasl-write)]
|
||||||
|
|
|
@ -790,24 +790,24 @@
|
||||||
x)))
|
x)))
|
||||||
(let ()
|
(let ()
|
||||||
(define read-and-eval
|
(define read-and-eval
|
||||||
(lambda (p eval)
|
(lambda (p eval-proc)
|
||||||
(let ([x (my-read p)])
|
(let ([x (my-read p)])
|
||||||
(unless (eof-object? x)
|
(unless (eof-object? x)
|
||||||
(eval x)
|
(eval-proc x)
|
||||||
(read-and-eval p eval)))))
|
(read-and-eval p eval-proc)))))
|
||||||
(primitive-set! 'load
|
(primitive-set! 'load
|
||||||
(case-lambda
|
(case-lambda
|
||||||
[(x) (load x eval)]
|
[(x) (load x load-handler)]
|
||||||
[(x eval)
|
[(x eval-proc)
|
||||||
(unless (string? x)
|
(unless (string? x)
|
||||||
(error 'load "~s is not a string" x))
|
(error 'load "~s is not a string" x))
|
||||||
(unless (procedure? eval)
|
(unless (procedure? eval-proc)
|
||||||
(error 'load "~s is not a procedure" eval))
|
(error 'load "~s is not a procedure" eval-proc))
|
||||||
(let ([p (open-input-file x)])
|
(let ([p (open-input-file x)])
|
||||||
(let ([x (read-initial p)])
|
(let ([x (read-initial p)])
|
||||||
(unless (eof-object? x)
|
(unless (eof-object? x)
|
||||||
(eval x)
|
(eval-proc x)
|
||||||
(read-and-eval p eval)))
|
(read-and-eval p eval-proc)))
|
||||||
(close-input-port p))])))
|
(close-input-port p))])))
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue