[honu] always keep parsing a unary operator

This commit is contained in:
Jon Rafkind 2012-04-23 17:17:58 -06:00
parent 4799d08022
commit 40a3161570

View File

@ -418,24 +418,25 @@
#f)]) #f)])
(do-parse unparsed precedence left parsed)) (do-parse unparsed precedence left parsed))
;; if we have a unary transformer then we have to keep parsing
#; (if unary-transformer
(if current
(values (left current) stream)
(do-parse #'(rest ...) new-precedence (do-parse #'(rest ...) new-precedence
(lambda (stuff) (lambda (stuff)
(if current (define right (parse-all stuff))
(if binary-transformer (define output (unary-transformer right))
(left (binary-transformer current stuff)) ;; apply the left function because
(error '#'head "cannot be used as a binary operator")) ;; we just went ahead with parsing without
(if unary-transformer ;; caring about precedence
(left (unary-transformer stuff)) (with-syntax ([out (left (parse-all output))])
(error '#'head "cannot be used as a unary operator")))) #'out))
#f) #f))
(values (left current) stream) ;; otherwise we have a binary transformer (or no transformer..??)
#; ;; so we must have made a recursive call to parse, just return the
(do-parse #'(head rest ...) ;; left hand
0 (values (left current) stream))
(lambda (x) x) )]
(left final)))]
#; #;
[(stopper? #'head) [(stopper? #'head)