Adding include-shared-optionally.

This commit is contained in:
Alex Shinn 2015-02-13 19:02:48 +09:00
parent ed4cef9294
commit b6fb51f1f2

View file

@ -141,7 +141,7 @@
(let ((env (if (pair? o) (car o) (make-environment))) (let ((env (if (pair? o) (car o) (make-environment)))
(meta (module-meta-data mod)) (meta (module-meta-data mod))
(dir (module-name-prefix name))) (dir (module-name-prefix name)))
(define (load-modules files extension fold?) (define (load-modules files extension fold? . o)
(for-each (for-each
(lambda (f) (lambda (f)
(let ((f (string-append dir f extension))) (let ((f (string-append dir f extension)))
@ -154,6 +154,7 @@
(load in env))) (load in env)))
(else (else
(load path env))))) (load path env)))))
((and (pair? o) (car o)) ((car o)))
(else (error "couldn't find include" f))))) (else (error "couldn't find include" f)))))
files)) files))
;; catch cyclic references ;; catch cyclic references
@ -193,6 +194,9 @@
(load-modules (cdr x) "" #t)) (load-modules (cdr x) "" #t))
((include-shared) ((include-shared)
(load-modules (cdr x) *shared-object-extension* #f)) (load-modules (cdr x) *shared-object-extension* #f))
((include-shared-optionally)
(load-modules (list (cadr x)) *shared-object-extension* #f
(lambda () (load-modules (cddr x) "" #f))))
((body begin) ((body begin)
(for-each (lambda (expr) (eval expr env)) (cdr x))) (for-each (lambda (expr) (eval expr env)) (cdr x)))
((error) ((error)
@ -366,6 +370,7 @@
(define-meta-primitive include) (define-meta-primitive include)
(define-meta-primitive include-ci) (define-meta-primitive include-ci)
(define-meta-primitive include-shared) (define-meta-primitive include-shared)
(define-meta-primitive include-shared-optionally)
(define-meta-primitive body) (define-meta-primitive body)
(define-meta-primitive begin) (define-meta-primitive begin)