commit 1035eb35d84701079d4d060e4651d580910a80c6 parent f3790d8c8a4fef0d9366ad4bfa556620d70e4179 Author: Matthew Flatt <mflatt@racket-lang.org> Date: Thu, 18 Mar 2010 14:43:38 +0000 better error reporting when a top-level form is wrong svn: r18575 original commit: 92487ed9e201c5da4210741e77b56a6e4ab6a8bb Diffstat:
| M | collects/scribble/doclang.ss | | | 38 | +++++++++++++++++++++++++++++++++++++- |
1 file changed, 37 insertions(+), 1 deletion(-)
diff --git a/collects/scribble/doclang.ss b/collects/scribble/doclang.ss @@ -59,4 +59,40 @@ #%provide)))) #`(begin #,expanded (doc-begin m-id post-process exprs . body))] [_else - #`(doc-begin m-id post-process (#,expanded . exprs) . body)])))]))])) + #`(doc-begin m-id post-process + ((pre-part #,expanded body1) . exprs) + . body)])))]))])) + +(define-syntax (pre-part stx) + (syntax-case stx () + [(_ s e) + (if (string? (syntax-e #'s)) + #'s + (with-syntax ([src (syntax-source #'e)] + [line (syntax-line #'e)] + [col (syntax-column #'e)] + [pos (syntax-position #'e)] + [span (syntax-column #'e)]) + #'(check-pre-part e (vector 'src 'line 'col 'pos 'span))))])) + +(define (check-pre-part v s) + (if (pre-part? v) + v + (error + (format + "~a: not valid in document body (need a pre-part for decode) in: ~e" + (cond + [(and (vector-ref s 0) + (vector-ref s 1)) + (format "~a:~a:~a" + (vector-ref s 0) + (vector-ref s 1) + (vector-ref s 2))] + [(and (vector-ref s 0) + (vector-ref s 3)) + (format "~a:::~a" + (vector-ref s 0) + (vector-ref s 1) + (vector-ref s 3))] + [else 'document]) + v))))