~ 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