From 102d022f5352fee8c9efae5805f2bc7d2562769b Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Fri, 18 Feb 2011 11:03:26 +0100 Subject: [PATCH] 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. --- module/ice-9/peg.scm | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/module/ice-9/peg.scm b/module/ice-9/peg.scm index 555ad854f..fb2692f5f 100644 --- a/module/ice-9/peg.scm +++ b/module/ice-9/peg.scm @@ -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)