summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2011-02-17 14:06:08 +0100
committerAndy Wingo <wingo@pobox.com>2013-01-16 10:11:36 +0100
commita907bce6573608288b393cf2364702ad3506805a (patch)
tree55d39e8eb39a8571c35b73589411f3c642453ca6
parentbb7ff21a7702581caac5027f51c08f962e115958 (diff)
downloadguile-a907bce6573608288b393cf2364702ad3506805a.tar.gz
peg: more syntax helper cleanup
* module/ice-9/peg.scm (single-filter, push-not-null!): Use syntax-rules, and move outside the eval-when.
-rw-r--r--module/ice-9/peg.scm31
1 files changed, 16 insertions, 15 deletions
diff --git a/module/ice-9/peg.scm b/module/ice-9/peg.scm
index 831a78e28..ebea740ab 100644
--- a/module/ice-9/peg.scm
+++ b/module/ice-9/peg.scm
@@ -48,7 +48,7 @@
(syntax-rules ()
((_ test stmt stmt* ...)
(let lp ()
- (or action
+ (or test
(begin stmt stmt* ... (lp)))))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -70,6 +70,21 @@
((_ lst obj)
(set! lst (cons obj lst)))))
+;; If SYM is a list of one element, return (car SYM), else return SYM.
+(define-syntax single-filter
+ (syntax-rules ()
+ ((_ exp)
+ (pmatch exp
+ ((,elt) elt)
+ (,elts elts)))))
+
+;; If OBJ is non-null, push it onto LST, otherwise do nothing.
+(define-syntax push-not-null!
+ (syntax-rules ()
+ ((_ lst obj)
+ (if (not (null? obj))
+ (push! lst obj)))))
+
(eval-when (compile load eval)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -213,20 +228,6 @@
(else (datum->syntax for-syntax
(error-val `(peg-sexp-compile-error-3 ,match ,accum))))))
-;;;;; Convenience macros for making sure things come out in a readable form.
-;; If SYM is a list of one element, return (car SYM), else return SYM.
-(define-syntax single-filter
- (lambda (x)
- (syntax-case x ()
- ((_ sym)
- #'(if (single? sym) (car sym) sym)))))
-;; If OBJ is non-null, push it onto LST, otherwise do nothing.
-(define-syntax push-not-null!
- (lambda (x)
- (syntax-case x ()
- ((_ lst obj)
- #'(if (not (null? obj)) (push! lst obj))))))
-
;; Top-level function builder for AND. Reduces to a call to CG-AND-INT.
(define (cg-and for-syntax arglst accum)
#`(lambda (str strlen at)