1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-01 04:10:18 +02:00

peg: cg-string does not use cggr

* module/ice-9/peg.scm (cg-string): Don't use cggr.  Interesting to see
  what it actually generates.
This commit is contained in:
Andy Wingo 2011-02-18 11:03:26 +01:00
parent 67ac87f96d
commit 102d022f53

View 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)