~ 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-eachTrap