From 99b4da8fb2098762c9d51ee5cc92b1db971bbe1d Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Tue, 28 May 2013 11:07:02 -0400 Subject: [PATCH] Rewrite tree-il pre-post-order in terms of (ice-9 match) * module/language/tree-il.scm (pre-post-order): Re-implement in terms of (ice-9 match), so that we standardize on one matcher (more or less). --- module/language/tree-il.scm | 55 +++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/module/language/tree-il.scm b/module/language/tree-il.scm index 0a5b72ae9..4e01df933 100644 --- a/module/language/tree-il.scm +++ b/module/language/tree-il.scm @@ -19,6 +19,7 @@ (define-module (language tree-il) #:use-module (srfi srfi-1) #:use-module (srfi srfi-11) + #:use-module (ice-9 match) #:use-module (system base pmatch) #:use-module (system base syntax) #:export (tree-il-src @@ -532,85 +533,85 @@ This is an implementation of `foldts' as described by Andy Wingo in (define (pre-post-order pre post x) (let lp ((x x)) (post - (record-case (pre x) - (( src) + (match (pre x) + (($ src) (make-void src)) - (( src exp) + (($ src exp) (make-const src exp)) - (( src name) + (($ src name) (make-primitive-ref src name)) - (( src name gensym) + (($ src name gensym) (make-lexical-ref src name gensym)) - (( src name gensym exp) + (($ src name gensym exp) (make-lexical-set src name gensym (lp exp))) - (( src mod name public?) + (($ src mod name public?) (make-module-ref src mod name public?)) - (( src mod name public? exp) + (($ src mod name public? exp) (make-module-set src mod name public? (lp exp))) - (( src name) + (($ src name) (make-toplevel-ref src name)) - (( src name exp) + (($ src name exp) (make-toplevel-set src name (lp exp))) - (( src name exp) + (($ src name exp) (make-toplevel-define src name (lp exp))) - (( src test consequent alternate) + (($ src test consequent alternate) (make-conditional src (lp test) (lp consequent) (lp alternate))) - (( src proc args) + (($ src proc args) (make-call src (lp proc) (map lp args))) - (( src name args) + (($ src name args) (make-primcall src name (map lp args))) - (( src head tail) + (($ src head tail) (make-seq src (lp head) (lp tail))) - (( src meta body) + (($ src meta body) (make-lambda src meta (and body (lp body)))) - (( src req opt rest kw inits gensyms body alternate) + (($ src req opt rest kw inits gensyms body alternate) (make-lambda-case src req opt rest kw (map lp inits) gensyms (lp body) (and alternate (lp alternate)))) - (( src names gensyms vals body) + (($ src names gensyms vals body) (make-let src names gensyms (map lp vals) (lp body))) - (( src in-order? names gensyms vals body) + (($ src in-order? names gensyms vals body) (make-letrec src in-order? names gensyms (map lp vals) (lp body))) - (( src names gensyms vals body) + (($ src names gensyms vals body) (make-fix src names gensyms (map lp vals) (lp body))) - (( src exp body) + (($ src exp body) (make-let-values src (lp exp) (lp body))) - (( src winder pre body post unwinder) + (($ src winder pre body post unwinder) (make-dynwind src (lp winder) (lp pre) (lp body) (lp post) (lp unwinder))) - (( src fluids vals body) + (($ src fluids vals body) (make-dynlet src (map lp fluids) (map lp vals) (lp body))) - (( src fluid) + (($ src fluid) (make-dynref src (lp fluid))) - (( src fluid exp) + (($ src fluid exp) (make-dynset src (lp fluid) (lp exp))) - (( src tag body handler) + (($ src tag body handler) (make-prompt src (lp tag) (lp body) (lp handler))) - (( src tag args tail) + (($ src tag args tail) (make-abort src (lp tag) (map lp args) (lp tail))))))) (define (post-order f x)