Permalink
Browse files

Modify the src-pos error reporting in parser-tools to better show the…

… token context.

Addresses PR 9924.
  • Loading branch information...
1 parent bc479b4 commit 9b86d4452fc4e1be823e12373aac2d5f432006da @dyoo committed Feb 26, 2013
Showing with 14 additions and 2 deletions.
  1. +14 −2 collects/parser-tools/yacc.rkt
@@ -228,17 +228,29 @@
"(or/c symbol? token?)"
0
tok))))
+
+ ;; well-formed-position-token?: any -> boolean
+ ;; Returns true if pt is a position token whose position-token-token
+ ;; is itself a token or a symbol.
+ ;; This is meant to help raise more precise error messages when
+ ;; a tokenizer produces an erroneous position-token wrapped twice.
+ ;; (as often happens when omitting return-without-pos).
+ (define (well-formed-position-token? pt)
+ (and (position-token? pt)
+ (let ([t (position-token-token pt)])
+ (or (symbol? t)
+ (token? t)))))
;; extract-src-pos : position-token -> symbol any any any
(define (extract-src-pos ip)
(cond
- ((position-token? ip)
+ ((well-formed-position-token? ip)
(extract-helper (position-token-token ip)
(position-token-start-pos ip)
(position-token-end-pos ip)))
(else
(raise-argument-error 'parser
- "position-token?"
+ "well-formed-position-token?"
0
ip))))

0 comments on commit 9b86d44

Please sign in to comment.