summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoah Lavine <nlavine@haverford.edu>2011-01-30 16:07:34 -0500
committerAndy Wingo <wingo@pobox.com>2011-03-24 21:10:02 +0100
commit28ff0654096b93c1e281ab3e89279b8caf7b80ef (patch)
treed91724d552e3ddb6d3dda54cd411e32f9debce27
parentbcff6088e44e21577b66f2d1e978aae1ceddf02b (diff)
downloadguile-28ff0654096b93c1e281ab3e89279b8caf7b80ef.tar.gz
peg: lower datum->syntax in cg-peg-any case
* module/ice-9/peg.scm (cg-peg-any): Datum->syntax here... (peg-sexp-compile): ...instead of here.
-rw-r--r--module/ice-9/peg.scm15
1 files changed, 8 insertions, 7 deletions
diff --git a/module/ice-9/peg.scm b/module/ice-9/peg.scm
index 261a53e42..a2f4ca999 100644
--- a/module/ice-9/peg.scm
+++ b/module/ice-9/peg.scm
@@ -173,11 +173,13 @@
;; Generates code for matching any character.
;; E.g.: (cg-peg-any syntax 'body)
(define (cg-peg-any for-syntax accum)
- (safe-bind
- (str strlen at)
- (cggl for-syntax str strlen at
- (cggr for-syntax accum
- 'cg-peg-any `(substring ,str ,at (+ ,at 1)) `(+ ,at 1)))))
+ (let ((str (syntax str))
+ (strlen (syntax strlen))
+ (at (syntax at)))
+ (datum->syntax for-syntax
+ (cggl for-syntax str strlen at
+ (cggr for-syntax accum
+ 'cg-peg-any `(substring ,str ,at (+ ,at 1)) `(+ ,at 1))))))
;; Generates code for matching a range of characters between start and end.
;; E.g.: (cg-range syntax #\a #\z 'body)
@@ -217,8 +219,7 @@
((string? match) (cg-string for-syntax match (baf accum)))
((symbol? match) ;; either peg-any or a nonterminal
(cond
- ((eq? match 'peg-any) (datum->syntax for-syntax
- (cg-peg-any for-syntax (baf accum))))
+ ((eq? match 'peg-any) (cg-peg-any for-syntax (baf accum)))
;; if match is any other symbol it's a nonterminal, so just return it
(#t (datum->syntax for-syntax match))))
((or (not (list? match)) (null? match))