~ chicken-core (chicken-5) 3a12b8a371f9f524a4d1f447504e47c4617298a8
commit 3a12b8a371f9f524a4d1f447504e47c4617298a8
Author: Evan Hanson <evhan@foldling.org>
AuthorDate: Sat Jan 2 11:31:31 2016 +1300
Commit: Evan Hanson <evhan@foldling.org>
CommitDate: Tue Mar 8 22:52:32 2016 +1300
Add syntax unit mappings
Removes unit version checking from chicken-install, which didn't work
anyway. Makes core unit lists constant and private to eval.scm.
Avoids implicitly loading compiler-specific units such as
chicken-ffi-syntax. Instead, we raise an error if the user tries to load
one explicitly.
diff --git a/chicken-install.scm b/chicken-install.scm
index 2ddd30a8..870885e5 100644
--- a/chicken-install.scm
+++ b/chicken-install.scm
@@ -225,24 +225,18 @@
+default-repository-files+)))
(define (ext-version x)
- (cond ((or (eq? x 'chicken)
- (equal? x "chicken")
- (let ((xs (->string x)))
- (or (member xs ##sys#core-library-units)
- (member xs ##sys#core-syntax-units))))
- (chicken-version) )
- ;; Duplication of (extension-information) to get custom
- ;; prefix. This should be fixed.
- ((let* ((ep (##sys#canonicalize-extension-path x 'ext-version))
+ (cond ((or (eq? x 'chicken) (equal? x "chicken"))
+ (chicken-version))
+ ((let* ((ep (##sys#canonicalize-extension-path x 'ext-version))
(sf (make-pathname (repo-path) ep "setup-info")))
(and (file-exists? sf)
(with-input-from-file sf read))) =>
- (lambda (info)
- (let ((a (assq 'version info)))
- (if a
- (->string (cadr a))
- "0.0.0"))))
- (else #f)))
+ (lambda (info)
+ (let ((a (assq 'version info)))
+ (if a
+ (->string (cadr a))
+ "0.0.0"))))
+ (else #f)))
(define (meta-dependencies meta)
(append
diff --git a/eval.scm b/eval.scm
index 9782cd08..6a15f57c 100644
--- a/eval.scm
+++ b/eval.scm
@@ -75,10 +75,13 @@
(define-foreign-variable install-lib-name c-string "C_INSTALL_LIB_NAME")
(define-constant core-chicken-modules
- '((chicken.data-structures . data-structures)
+ '((chicken . chicken-syntax)
+ (chicken.data-structures . data-structures)
(chicken.eval . eval)
(chicken.extras . extras)
(chicken.files . files)
+ (chicken.foreign . chicken-ffi-syntax)
+ (chicken.internal . internal)
(chicken.irregex . irregex)
(chicken.lolevel . lolevel)
(chicken.ports . ports)
@@ -86,10 +89,10 @@
(chicken.tcp . tcp)
(chicken.utils . utils)))
-(define ##sys#core-library-units
+(define-constant core-library-units
`(srfi-4 . ,(map cdr core-chicken-modules)))
-(define ##sys#core-syntax-units
+(define-constant core-syntax-units
'(chicken-syntax chicken-ffi-syntax))
(define ##sys#explicit-library-modules '())
@@ -1205,23 +1208,26 @@
(define load-extension
(let ((string->symbol string->symbol))
(lambda (id loc #!optional (err? #t))
+ (define (fail message)
+ (and err? (##sys#error loc message id)))
(cond ((string? id) (set! id (string->symbol id)))
- (else (##sys#check-symbol id loc)) )
- (let ([p (##sys#canonicalize-extension-path id loc)])
- (cond ((member p loaded-extensions))
- ((or (memq id ##sys#core-library-units)
- (memq id ##sys#core-syntax-units))
+ (else (##sys#check-symbol id loc)))
+ (let ((p (##sys#canonicalize-extension-path id loc)))
+ (cond ((##sys#get id '##core#unit))
+ ((member p loaded-extensions))
+ ((memq id core-syntax-units)
+ (fail "cannot load core library"))
+ ((memq id core-library-units)
(or (load-library-0 id #f)
- (and err?
- (##sys#error loc "cannot load core library" id))))
+ (fail "cannot load core library")))
(else
- (let ([id2 (##sys#find-extension p #f)])
+ (let ((id2 (##sys#find-extension p #f)))
(cond (id2
(load/internal id2 #f)
(set! loaded-extensions (cons p loaded-extensions))
#t)
- (err? (##sys#error loc "cannot load extension" id))
- (else #f) ) ) ) ) ) ) ) )
+ (else
+ (fail "cannot load extension"))))))))))
(define (require . ids)
(for-each (cut load-extension <> 'require) ids))
@@ -1264,7 +1270,7 @@
`(##core#begin
,x
,@(if (and imp? (or (not builtin?) (##sys#current-module)))
- `((import ,id)) ;XXX make hygienic
+ `((import-syntax ,id)) ; XXX make hygienic
'())))
(define (doit id #!optional (impid id))
(cond ((or (memq id builtin-features)
@@ -1272,7 +1278,9 @@
(values (impform '(##core#undefined) impid #t) #t id))
((and (not comp?) (##sys#feature? id))
(values (impform '(##core#undefined) impid #f) #t id))
- ((memq id ##sys#core-library-units)
+ ((memq id core-syntax-units)
+ (values (impform '(##core#undefined) impid #t) #t id))
+ ((memq id core-library-units)
(values
(impform
(if comp?
@@ -1280,14 +1288,6 @@
`(##sys#load-library ',id #f) )
impid #f)
#t id) )
- ((memq id ##sys#core-syntax-units)
- (values
- (impform
- (if comp?
- `(##core#declare (uses ,id))
- `(##sys#load-library ',id #f) )
- impid #t)
- #t id) )
((memq id ##sys#explicit-library-modules)
(let* ((info (extension-information/internal id 'require-extension))
(nr (and info (assq 'import-only info)))
Trap