From a907bce6573608288b393cf2364702ad3506805a Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Thu, 17 Feb 2011 14:06:08 +0100 Subject: peg: more syntax helper cleanup * module/ice-9/peg.scm (single-filter, push-not-null!): Use syntax-rules, and move outside the eval-when. --- module/ice-9/peg.scm | 31 ++++++++++++++++--------------- 1 file 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) -- cgit v1.2.1