mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-05-20 22:29:16 +02:00
defining load on source files in scheme
This commit is contained in:
parent
20c62ffe4a
commit
c468e328a5
2 changed files with 22 additions and 1 deletions
|
@ -956,6 +956,27 @@
|
||||||
(let ((thunk (compile x (if (pair? o) (car o) (interaction-environment)))))
|
(let ((thunk (compile x (if (pair? o) (car o) (interaction-environment)))))
|
||||||
(if (procedure? thunk) (thunk) (raise thunk))))
|
(if (procedure? thunk) (thunk) (raise thunk))))
|
||||||
|
|
||||||
|
(define (load base . o)
|
||||||
|
(let* ((env (if (pair? o) (car o) (interaction-environment)))
|
||||||
|
(file (find-module-file base))
|
||||||
|
(len (and file (string-length file)))
|
||||||
|
(ext *shared-object-extension*)
|
||||||
|
(ext-len (string-length ext)))
|
||||||
|
(cond
|
||||||
|
((not file)
|
||||||
|
(error "couldn't find file" base))
|
||||||
|
((and (> len ext-len 0) (equal? ext (substring file (- len ext-len))))
|
||||||
|
(%load file env))
|
||||||
|
(else
|
||||||
|
(call-with-input-file file
|
||||||
|
(lambda (in)
|
||||||
|
(let lp ()
|
||||||
|
(let ((x (read in)))
|
||||||
|
(cond
|
||||||
|
((not (eof-object? x))
|
||||||
|
(eval x env)
|
||||||
|
(lp)))))))))))
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; promises
|
;; promises
|
||||||
|
|
||||||
|
|
|
@ -167,7 +167,7 @@ _FN0(_I(SEXP_ENV), "make-environment", 0, sexp_make_env_op),
|
||||||
_FN1(_I(SEXP_ENV), _I(SEXP_FIXNUM), "null-environment", 0, sexp_make_null_env_op),
|
_FN1(_I(SEXP_ENV), _I(SEXP_FIXNUM), "null-environment", 0, sexp_make_null_env_op),
|
||||||
_FN1(_I(SEXP_ENV), _I(SEXP_FIXNUM), "scheme-report-environment", 0, sexp_make_standard_env_op),
|
_FN1(_I(SEXP_ENV), _I(SEXP_FIXNUM), "scheme-report-environment", 0, sexp_make_standard_env_op),
|
||||||
_FN2OPTP(_I(SEXP_OBJECT), _I(SEXP_OBJECT), _I(SEXP_ENV), "compile", (sexp)"interaction-environment", sexp_compile_op),
|
_FN2OPTP(_I(SEXP_OBJECT), _I(SEXP_OBJECT), _I(SEXP_ENV), "compile", (sexp)"interaction-environment", sexp_compile_op),
|
||||||
_FN2OPTP(SEXP_VOID, _I(SEXP_STRING), _I(SEXP_ENV), "load", (sexp)"interaction-environment", sexp_load_op),
|
_FN2OPTP(SEXP_VOID, _I(SEXP_STRING), _I(SEXP_ENV), "%load", (sexp)"interaction-environment", sexp_load_op),
|
||||||
_FN4(SEXP_VOID, _I(SEXP_ENV), _I(SEXP_ENV), _I(SEXP_OBJECT), "%import", 0, sexp_env_import_op),
|
_FN4(SEXP_VOID, _I(SEXP_ENV), _I(SEXP_ENV), _I(SEXP_OBJECT), "%import", 0, sexp_env_import_op),
|
||||||
_FN2OPTP(SEXP_VOID, _I(SEXP_EXCEPTION), _I(SEXP_OPORT), "print-exception", (sexp)"current-error-port", sexp_print_exception_op),
|
_FN2OPTP(SEXP_VOID, _I(SEXP_EXCEPTION), _I(SEXP_OPORT), "print-exception", (sexp)"current-error-port", sexp_print_exception_op),
|
||||||
_FN1OPTP(SEXP_VOID, _I(SEXP_OPORT), "print-stack-trace", (sexp)"current-error-port", sexp_stack_trace_op),
|
_FN1OPTP(SEXP_VOID, _I(SEXP_OPORT), "print-stack-trace", (sexp)"current-error-port", sexp_stack_trace_op),
|
||||||
|
|
Loading…
Add table
Reference in a new issue