diff options
author | Mark H Weaver <mhw@netris.org> | 2013-12-19 13:22:50 -0500 |
---|---|---|
committer | Mark H Weaver <mhw@netris.org> | 2014-01-09 17:43:53 -0500 |
commit | 0e18163366c2f2a0caecde18241dbd7987b4db7c (patch) | |
tree | 54b62c783506a8024fc2873f1997ca8783095cb0 /test-suite | |
parent | 1624e149f75747310c9ce15db7db5324a538f8f8 (diff) | |
download | guile-0e18163366c2f2a0caecde18241dbd7987b4db7c.tar.gz |
Implement R7RS 'syntax-error'.
* module/ice-9/psyntax.scm (syntax-error): New macro.
(syntax-rules): Handle 'syntax-error' templates specially
for improved error reporting.
* module/ice-9/psyntax-pp.scm: Regenerate.
* doc/ref/api-macros.texi (Syntax Rules): Add new subsection "Reporting
Syntax Errors in Macros".
* test-suite/tests/syntax.test: Add tests.
Diffstat (limited to 'test-suite')
-rw-r--r-- | test-suite/tests/syntax.test | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/test-suite/tests/syntax.test b/test-suite/tests/syntax.test index c68a66a58..5c2a703d8 100644 --- a/test-suite/tests/syntax.test +++ b/test-suite/tests/syntax.test @@ -1211,6 +1211,47 @@ (define-syntax bar (foo x y z)) (bar a b c)))) +(with-test-prefix "syntax-error" + + (pass-if-syntax-error "outside of macro without args" + "test error" + (eval '(syntax-error "test error") + (interaction-environment))) + + (pass-if-syntax-error "outside of macro with args" + "test error x \\(y z\\)" + (eval '(syntax-error "test error" x (y z)) + (interaction-environment))) + + (pass-if-equal "within macro" + '(simple-let + "expected an identifier but got (z1 z2)" + (simple-let ((y (* x x)) + ((z1 z2) (values x x))) + (+ y 1))) + (catch 'syntax-error + (lambda () + (eval '(let () + (define-syntax simple-let + (syntax-rules () + ((_ (head ... ((x . y) val) . tail) + body1 body2 ...) + (syntax-error + "expected an identifier but got" + (x . y))) + ((_ ((name val) ...) body1 body2 ...) + ((lambda (name ...) body1 body2 ...) + val ...)))) + (define (foo x) + (simple-let ((y (* x x)) + ((z1 z2) (values x x))) + (+ y 1))) + foo) + (interaction-environment)) + (error "expected syntax-error exception")) + (lambda (k who what where form . maybe-subform) + (list who what form))))) + (with-test-prefix "syntax-case" (pass-if-syntax-error "duplicate pattern variable" |