diff options
author | Andy Wingo <wingo@pobox.com> | 2011-02-17 14:06:08 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2013-01-16 10:11:36 +0100 |
commit | a907bce6573608288b393cf2364702ad3506805a (patch) | |
tree | 55d39e8eb39a8571c35b73589411f3c642453ca6 | |
parent | bb7ff21a7702581caac5027f51c08f962e115958 (diff) | |
download | guile-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.scm | 31 |
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) |