peg: cg-string does not use cggr
authorAndy Wingo <wingo@pobox.com>
Fri, 18 Feb 2011 10:03:26 +0000 (11:03 +0100)
committerAndy Wingo <wingo@pobox.com>
Wed, 16 Jan 2013 09:11:39 +0000 (10:11 +0100)
* module/ice-9/peg.scm (cg-string): Don't use cggr.  Interesting to see
  what it actually generates.

module/ice-9/peg.scm

index 555ad85..fb2692f 100644 (file)
@@ -144,10 +144,15 @@ return EXP."
 (define (cg-string for-syntax match accum)
   (let ((mlen (string-length match)))
     #`(lambda (str len pos)
-        (and (<= (+ pos #,mlen) len)
-             (string= str #,match pos (+ pos #,mlen))
-             #,(cggr for-syntax accum 'cg-string match
-                     #`(+ pos #,mlen))))))
+        (let ((end (+ pos #,mlen)))
+          (and (<= end len)
+               (string= str #,match pos end)
+               #,(case accum
+                   ((all) #`(list end (list 'cg-string #,match)))
+                   ((name) #`(list end 'cg-string))
+                   ((body) #`(list end #,match))
+                   ((none) #`(list end '()))
+                   (else (error "bad accum" accum))))))))
 
 ;; Generates code for matching any character.
 ;; E.g.: (cg-peg-any syntax 'body)