1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-01 12:20:26 +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) (define (cg-string for-syntax match accum)
(let ((mlen (string-length match))) (let ((mlen (string-length match)))
#`(lambda (str len pos) #`(lambda (str len pos)
(and (<= (+ pos #,mlen) len) (let ((end (+ pos #,mlen)))
(string= str #,match pos (+ pos #,mlen)) (and (<= end len)
#,(cggr for-syntax accum 'cg-string match (string= str #,match pos end)
#`(+ pos #,mlen)))))) #,(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. ;; Generates code for matching any character.
;; E.g.: (cg-peg-any syntax 'body) ;; E.g.: (cg-peg-any syntax 'body)