~ chicken-core (chicken-5) 8b25ee067396446c6f7ca5d36f5adb04c6f165c5
commit 8b25ee067396446c6f7ca5d36f5adb04c6f165c5 Author: felix <felix@z.(none)> AuthorDate: Fri Mar 25 09:13:11 2011 +0100 Commit: felix <felix@z.(none)> CommitDate: Fri Mar 25 09:13:11 2011 +0100 fixed functor tests and incorrect syntax check; better error message for mismatch diff --git a/expand.scm b/expand.scm index 77ac7ca8..968709ad 100644 --- a/expand.scm +++ b/expand.scm @@ -1313,7 +1313,7 @@ (##sys#er-transformer (lambda (x r c) (let ((len (length x))) - (##sys#check-syntax 'module x '(_ symbol _ . #(_ 1))) + (##sys#check-syntax 'module x '(_ symbol _ . #(_ 0))) (cond ((and (fx>= len 4) (c (r '=) (caddr x))) (let* ((x (##sys#strip-syntax x)) (name (cadr x)) diff --git a/modules.scm b/modules.scm index 0c13f7d2..d60560e2 100644 --- a/modules.scm +++ b/modules.scm @@ -368,7 +368,7 @@ (define (##sys#find-export sym mod indirect) (let ((exports (module-export-list mod))) - (let loop ((xl (if (eq? #t exports) (module-exists-list mod) exports))) + (let loop ((xl (if (eq? #t exports) (module-exist-list mod) exports))) (cond ((null? xl) #f) ((eq? sym (car xl))) ((pair? (car xl)) @@ -773,7 +773,9 @@ (when (pair? missing) (##sys#syntax-error-hook 'module - (string-append - "argument module `" (symbol->string mname) "' does not match required signature " + (apply + string-append + "argument module `" (symbol->string mname) "' does not match required signature\n" "in instantiation `" (symbol->string name) "' of functor `" - (symbol->string fname) "'"))))))) + (symbol->string fname) "', because the following required exports are missing:\n" + (map (lambda (s) (string-append "\n " (symbol->string s))) missing)))))))) diff --git a/tests/functor-tests.scm b/tests/functor-tests.scm index 6db7b14a..1b307fd5 100644 --- a/tests/functor-tests.scm +++ b/tests/functor-tests.scm @@ -69,7 +69,7 @@ (import (rename test-q2 (list->queue l2q2) (queue->list q2l2))) (import (rename test-q3 (list->queue l2q3) (queue->list q2l3))) -(define long-list (list-tabulate 1000 identity)) +(define long-list (list-tabulate (cond-expand (csi 500) (else 1000)) identity)) (print "Queue representation #1:") (time (q2l1 (l2q1 long-list))) @@ -92,35 +92,41 @@ ;; Test for errors +#+csi +(begin + (module m1 ()) (test-error "argument mismatch" - (module m2 = (breadth-first m1))) + (eval '(module m2 = (breadth-first m1)))) (test-error "undefined module" - (module m2 = (breadth-first hunoz))) + (eval '(module m2 = (breadth-first hunoz)))) (test-error "undefined interface" - (module m2 HUNOZ)) + (eval '(module m2 HUNOZ))) (test-error "undefined interface in functor" - (functor (f1 (X HUNOZ)) ())) + (eval '(functor (f1 (X HUNOZ)) ()))) (test-error "undefined interface in functor result" - (functor (f1 (X ())) HUNOZ)) + (eval '(functor (f1 (X ())) HUNOZ))) + +) ;; Test alternative instantiation syntax: (functor (frob (X (yibble))) * - (import chicken X) yibble) + (import chicken X) + yibble) -(test-equal? +(test-equal "alternative functor instantiation syntax" (module yabble = frob (import scheme) (define yibble 99)) 99) diff --git a/tests/test.scm b/tests/test.scm index c16de6a5..e1f57b71 100644 --- a/tests/test.scm +++ b/tests/test.scm @@ -85,7 +85,8 @@ ((_ name expr) (run-equal name - (lambda () (handle-exceptions ex *fail-token* expr)) *fail-token* eq?) ) + (lambda () (handle-exceptions ex *fail-token* expr)) + *fail-token* eq?) ) ((_ expr) (test-error 'expr expr)))) (define-syntax test-assertTrap