diff options
author | Noah Lavine <nlavine@haverford.edu> | 2011-01-30 16:07:34 -0500 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2011-03-24 21:10:02 +0100 |
commit | 28ff0654096b93c1e281ab3e89279b8caf7b80ef (patch) | |
tree | d91724d552e3ddb6d3dda54cd411e32f9debce27 | |
parent | bcff6088e44e21577b66f2d1e978aae1ceddf02b (diff) | |
download | guile-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.scm | 15 |
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)) |