~ chicken-core (chicken-5) 11fc480e512bc098a46ddd09a7930d62cfd7b96b
commit 11fc480e512bc098a46ddd09a7930d62cfd7b96b
Author: Evan Hanson <evhan@foldling.org>
AuthorDate: Thu Oct 8 18:01:46 2015 +1300
Commit: Peter Bex <peter@more-magic.net>
CommitDate: Mon Nov 2 21:29:01 2015 +0100
Restructure import expansion for nicer errors on missing libraries
This gives a nicer error when a module isn't found, reporting that
e.g. module "a.b.c" couldn't be found, rather than just "b".
diff --git a/modules.scm b/modules.scm
index 9e662f5a..4e6c4df3 100644
--- a/modules.scm
+++ b/modules.scm
@@ -608,9 +608,9 @@
(else
(let ((head (car spec))
(imports (cddr spec)))
- (let-values (((name form impv imps impi) (import-spec (cadr spec))))
- (cond ((c %only head)
- (##sys#check-syntax loc spec '(_ _ . #(symbol 0)))
+ (cond ((c %only head)
+ (##sys#check-syntax loc spec '(_ _ . #(symbol 0)))
+ (let-values (((name form impv imps impi) (import-spec (cadr spec))))
(let ((ids (map resolve imports)))
(let loop ((ids ids) (v '()) (s '()) (missing '()))
(cond ((null? ids)
@@ -626,9 +626,10 @@
(lambda (a)
(loop (cdr ids) v (cons a s) missing)))
(else
- (loop (cdr ids) v s (cons (car ids) missing)))))))
- ((c %except head)
- (##sys#check-syntax loc spec '(_ _ . #(symbol 0)))
+ (loop (cdr ids) v s (cons (car ids) missing))))))))
+ ((c %except head)
+ (##sys#check-syntax loc spec '(_ _ . #(symbol 0)))
+ (let-values (((name form impv imps impi) (import-spec (cadr spec))))
(let ((ids (map resolve imports)))
(let loop ((impv impv) (v '()) (ids imports))
(cond ((null? impv)
@@ -648,9 +649,10 @@
(lambda (id)
(loop (cdr impv) v (delete (car id) ids eq?))))
(else
- (loop (cdr impv) (cons (car impv) v) ids))))))
- ((c %rename head)
- (##sys#check-syntax loc spec '(_ _ . #((symbol symbol) 0)))
+ (loop (cdr impv) (cons (car impv) v) ids)))))))
+ ((c %rename head)
+ (##sys#check-syntax loc spec '(_ _ . #((symbol symbol) 0)))
+ (let-values (((name form impv imps impi) (import-spec (cadr spec))))
(let loop ((impv impv) (v '()) (ids imports))
(cond ((null? impv)
(let loop ((imps imps) (s '()) (ids ids))
@@ -673,18 +675,19 @@
(cons (cons (cadr a) (cdar impv)) v)
(delete a ids eq?))))
(else
- (loop (cdr impv) (cons (car impv) v) ids)))))
- ((c %prefix head)
- (##sys#check-syntax loc spec '(_ _ _))
+ (loop (cdr impv) (cons (car impv) v) ids))))))
+ ((c %prefix head)
+ (##sys#check-syntax loc spec '(_ _ _))
+ (let-values (((name form impv imps impi) (import-spec (cadr spec))))
(let ((pref (caddr spec)))
(define (ren imp)
(cons
(##sys#string->symbol
(##sys#string-append (tostr pref) (##sys#symbol->string (car imp))))
(cdr imp) ) )
- (values name `(,head ,form ,pref) (map ren impv) (map ren imps) impi)))
- (else
- (import-name (chicken.core#library-id spec)))))))))
+ (values name `(,head ,form ,pref) (map ren impv) (map ren imps) impi))))
+ (else
+ (import-name (chicken.core#library-id spec))))))))
(##sys#check-syntax loc x '(_ . #(_ 1)))
(let ((cm (##sys#current-module)))
(for-each
Trap