~ chicken-core (chicken-5) 6e02eff32288cdd47a5d998751ac9534f655f27a
commit 6e02eff32288cdd47a5d998751ac9534f655f27a Author: Evan Hanson <evhan@foldling.org> AuthorDate: Sun Jul 12 19:34:49 2015 +1200 Commit: Peter Bex <peter@more-magic.net> CommitDate: Mon Nov 2 21:29:01 2015 +0100 Process library lists when ##sys#doing-the-right-thing diff --git a/eval.scm b/eval.scm index 926a9e9d..03c7171c 100644 --- a/eval.scm +++ b/eval.scm @@ -77,8 +77,13 @@ (define-foreign-variable uses-soname? bool "C_USES_SONAME") (define-foreign-variable install-lib-name c-string "C_INSTALL_LIB_NAME") +;; Core units under the "chicken" module namespace. +(define ##sys#core-chicken-modules + '(eval extras lolevel utils files tcp irregex posix data-structures ports)) + +;; Core units outside the "chicken" module namespace. (define ##sys#core-library-modules - '(eval extras lolevel utils files tcp irregex posix srfi-4 data-structures ports)) + `(srfi-4 . ,##sys#core-chicken-modules)) (define ##sys#core-syntax-modules '(chicken-syntax chicken-ffi-syntax)) @@ -1298,12 +1303,26 @@ ,@(if (and imp? (or (not builtin?) (##sys#current-module))) `((import ,id)) ;XXX make hygienic '()))) + + ;; 1 => "srfi-1" (define (srfi-id n) (if (fixnum? n) (##sys#intern-symbol (##sys#string-append "srfi-" (##sys#number->string n))) (##sys#syntax-error-hook 'require-extension "invalid SRFI number" n))) - (define (doit id impid) + + ;; (foo bar baz) => "foo.bar.baz" + (define (library-id lib) + (define (library-part->string id) + (cond ((symbol? id) (##sys#symbol->string id)) + ((number? id) (##sys#number->string id)) + ((##sys#error "invalid extension specifier" lib)))) + (do ((lib (cdr lib) (cdr lib)) + (str (library-part->string (car lib)) + (string-append str "." (library-part->string (car lib))))) + ((null? lib) (##sys#intern-symbol str)))) + + (define (doit id #!optional (impid id)) (cond ((or (memq id builtin-features) (and comp? (memq id builtin-features/compiled))) (values (impform '(##core#undefined) impid #t) #t id)) @@ -1376,7 +1395,7 @@ `(##core#begin ,@(map (lambda (n) (let ((rid (srfi-id n))) - (let-values (((exp f2 _) (doit rid rid))) + (let-values (((exp f2 _) (doit rid))) (set! f (or f f2)) exp))) (cdr id))))) @@ -1388,10 +1407,16 @@ (doit (srfi-id (cadr id2)) id) (follow (cadr id2))) (doit id2 id)))) - (else (##sys#error "invalid extension specifier" id) ) ) ) + ((chicken) + (if (memq (cadr id) ##sys#core-chicken-modules) + (doit (cadr id) (library-id id)) + (doit (library-id id)))) + (else + (doit (library-id id))))) ((symbol? id) - (doit id id)) - (else (##sys#error "invalid extension specifier" id) ) ) ))) + (doit id)) + (else + (##sys#error "invalid extension specifier" id)))))) ;;; Convert string into valid C-identifier:Trap