Added events for lift-to-let
Added rename-tracking to macro hiding svn: r4339 original commit: 4c41e5515d03ddd02e3e709056be8d8ae565ea2f
This commit is contained in:
parent
1c1a9c1e88
commit
89ccab4d4b
|
@ -6,9 +6,11 @@
|
||||||
;; - a PRule
|
;; - a PRule
|
||||||
;; - (make-mrule syntax syntax Transformation Derivation)
|
;; - (make-mrule syntax syntax Transformation Derivation)
|
||||||
;; - (make-lift-deriv syntax syntax Derivation syntax Derivation)
|
;; - (make-lift-deriv syntax syntax Derivation syntax Derivation)
|
||||||
|
;; - (make-lift/let-deriv syntax syntax Derivation syntax Derivation)
|
||||||
(define-struct deriv (e1 e2) #f)
|
(define-struct deriv (e1 e2) #f)
|
||||||
(define-struct (mrule deriv) (transformation next) #f)
|
(define-struct (mrule deriv) (transformation next) #f)
|
||||||
(define-struct (lift-deriv deriv) (first lift-stx second) #f)
|
(define-struct (lift-deriv deriv) (first lift-stx second) #f)
|
||||||
|
(define-struct (lift/let-deriv deriv) (first lift-stx second) #f)
|
||||||
|
|
||||||
;; A Transformation is
|
;; A Transformation is
|
||||||
;; (make-transformation syntax syntax (listof identifier) syntax syntax (listof LocalAction))
|
;; (make-transformation syntax syntax (listof identifier) syntax syntax (listof LocalAction))
|
||||||
|
@ -85,9 +87,9 @@
|
||||||
|
|
||||||
;; A Subterm is one of
|
;; A Subterm is one of
|
||||||
;; - (make-s:subterm Path Derivation)
|
;; - (make-s:subterm Path Derivation)
|
||||||
|
;; - (make-s:rename Path Syntax Syntax)
|
||||||
(define-struct s:subterm (path deriv) #f)
|
(define-struct s:subterm (path deriv) #f)
|
||||||
|
(define-struct s:rename (path before after) #f)
|
||||||
|
|
||||||
|
|
||||||
;; A ListDerivation is (make-lderiv Syntaxes Syntaxes (listof Derivation))
|
;; A ListDerivation is (make-lderiv Syntaxes Syntaxes (listof Derivation))
|
||||||
(define-struct lderiv (es1 es2 derivs) #f)
|
(define-struct lderiv (es1 es2 derivs) #f)
|
||||||
|
|
|
@ -77,6 +77,20 @@
|
||||||
(let ([initial (deriv-e1 $1)]
|
(let ([initial (deriv-e1 $1)]
|
||||||
[final (and (deriv? $3) (deriv-e2 $3))])
|
[final (and (deriv? $3) (deriv-e2 $3))])
|
||||||
(make-lift-deriv initial final $1 $2 $3))])
|
(make-lift-deriv initial final $1 $2 $3))])
|
||||||
|
|
||||||
|
|
||||||
|
;; Expand/LetLifts
|
||||||
|
;; Expand/LetLifts Answer = Derivation (I)
|
||||||
|
;; Used for expand_lift_to_let (rhs of define-syntaxes, mostly)
|
||||||
|
(EE/LetLifts
|
||||||
|
(#:no-wrap)
|
||||||
|
[((? EE)) $1]
|
||||||
|
[((? EE/LetLifts+)) $1])
|
||||||
|
(EE/LetLifts+
|
||||||
|
[(EE lift/let-loop (? EE/LetLifts))
|
||||||
|
(let ([initial (deriv-e1 $1)]
|
||||||
|
[final (and (deriv? $3) (deriv-e2 $3))])
|
||||||
|
(make-lift/let-deriv initial final $1 $2 $3))])
|
||||||
|
|
||||||
;; Evaluation
|
;; Evaluation
|
||||||
(Eval
|
(Eval
|
||||||
|
@ -133,7 +147,7 @@
|
||||||
(make-local-lift (car $1) (cdr $1))]
|
(make-local-lift (car $1) (cdr $1))]
|
||||||
[(lift-statement)
|
[(lift-statement)
|
||||||
(make-local-lift-end $1)]
|
(make-local-lift-end $1)]
|
||||||
[(phase-up (? EE/Lifts))
|
[(phase-up (? EE/LetLifts))
|
||||||
(make-local-bind $2)])
|
(make-local-bind $2)])
|
||||||
|
|
||||||
;; Multiple calls to local-expand
|
;; Multiple calls to local-expand
|
||||||
|
@ -240,7 +254,7 @@
|
||||||
(ModulePass1/Prim
|
(ModulePass1/Prim
|
||||||
[(enter-prim prim-define-values ! exit-prim)
|
[(enter-prim prim-define-values ! exit-prim)
|
||||||
(make-p:define-values $1 $4 null #f)]
|
(make-p:define-values $1 $4 null #f)]
|
||||||
[(enter-prim prim-define-syntaxes ! phase-up (? EE/Lifts) exit-prim)
|
[(enter-prim prim-define-syntaxes ! phase-up (? EE/LetLifts) exit-prim)
|
||||||
(make-p:define-syntaxes $1 $6 null $5)]
|
(make-p:define-syntaxes $1 $6 null $5)]
|
||||||
[(enter-prim prim-require ! exit-prim)
|
[(enter-prim prim-require ! exit-prim)
|
||||||
(make-p:require $1 $4 null)]
|
(make-p:require $1 $4 null)]
|
||||||
|
@ -276,7 +290,7 @@
|
||||||
;; Definitions
|
;; Definitions
|
||||||
(PrimDefineSyntaxes
|
(PrimDefineSyntaxes
|
||||||
(#:args e1 e2 rs)
|
(#:args e1 e2 rs)
|
||||||
[(prim-define-syntaxes ! (? EE/Lifts))
|
[(prim-define-syntaxes ! (? EE/LetLifts))
|
||||||
(make-p:define-syntaxes e1 e2 rs $3)])
|
(make-p:define-syntaxes e1 e2 rs $3)])
|
||||||
|
|
||||||
(PrimDefineValues
|
(PrimDefineValues
|
||||||
|
@ -447,7 +461,7 @@
|
||||||
|
|
||||||
;; BindSyntaxes Answer = Derivation
|
;; BindSyntaxes Answer = Derivation
|
||||||
(BindSyntaxes
|
(BindSyntaxes
|
||||||
[(phase-up (? EE/Lifts) Eval) $2])
|
[(phase-up (? EE/LetLifts) Eval) $2])
|
||||||
|
|
||||||
;; NextBindSyntaxess Answer = (list-of Derivation)
|
;; NextBindSyntaxess Answer = (list-of Derivation)
|
||||||
(NextBindSyntaxess
|
(NextBindSyntaxess
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
EOF ; .
|
EOF ; .
|
||||||
syntax-error ; exn
|
syntax-error ; exn
|
||||||
lift-loop ; syntax
|
lift-loop ; syntax
|
||||||
|
lift/let-loop ; syntax
|
||||||
lift-end-loop ; syntax
|
lift-end-loop ; syntax
|
||||||
lift ; (cons syntax id)
|
lift ; (cons syntax id)
|
||||||
lift-statement ; syntax
|
lift-statement ; syntax
|
||||||
|
@ -128,6 +129,7 @@
|
||||||
(133 . ,token-local-post)
|
(133 . ,token-local-post)
|
||||||
(134 . ,token-lift-statement)
|
(134 . ,token-lift-statement)
|
||||||
(135 . ,token-lift-end-loop)
|
(135 . ,token-lift-end-loop)
|
||||||
|
(136 . ,token-lift/let-loop)
|
||||||
))
|
))
|
||||||
|
|
||||||
(define (tokenize sig-n val pos)
|
(define (tokenize sig-n val pos)
|
||||||
|
|
|
@ -51,6 +51,12 @@
|
||||||
[first deriv?]
|
[first deriv?]
|
||||||
[lift-stx syntax?]
|
[lift-stx syntax?]
|
||||||
[second (anyq deriv?)]))
|
[second (anyq deriv?)]))
|
||||||
|
(struct (lift/let-deriv deriv)
|
||||||
|
([e1 syntax?]
|
||||||
|
[e2 syntax/f]
|
||||||
|
[first deriv?]
|
||||||
|
[lift-stx syntax?]
|
||||||
|
[second (anyq deriv?)]))
|
||||||
(struct transformation
|
(struct transformation
|
||||||
([e1 syntax?]
|
([e1 syntax?]
|
||||||
[e2 syntax/f]
|
[e2 syntax/f]
|
||||||
|
@ -86,6 +92,7 @@
|
||||||
(provide ;(struct deriv (e1 e2))
|
(provide ;(struct deriv (e1 e2))
|
||||||
;(struct mrule (transformation next))
|
;(struct mrule (transformation next))
|
||||||
;(struct lift-deriv (first lift-stx second))
|
;(struct lift-deriv (first lift-stx second))
|
||||||
|
;(struct lift/let-deriv (first lift-stx second))
|
||||||
|
|
||||||
;(struct transformation (e1 e2 resolves me1 me2 locals))
|
;(struct transformation (e1 e2 resolves me1 me2 locals))
|
||||||
|
|
||||||
|
@ -127,6 +134,7 @@
|
||||||
|
|
||||||
(struct p:synth (subterms))
|
(struct p:synth (subterms))
|
||||||
(struct s:subterm (path deriv))
|
(struct s:subterm (path deriv))
|
||||||
|
(struct s:rename (path before after))
|
||||||
|
|
||||||
;(struct lderiv (es1 es2 derivs))
|
;(struct lderiv (es1 es2 derivs))
|
||||||
(struct bderiv (es1 es2 pass1 trans pass2))
|
(struct bderiv (es1 es2 pass1 trans pass2))
|
||||||
|
|
|
@ -105,8 +105,8 @@
|
||||||
[#:bind (?formals* . ?body*) renames]
|
[#:bind (?formals* . ?body*) renames]
|
||||||
[#:pattern (?lambda ?formals . ?body)]
|
[#:pattern (?lambda ?formals . ?body)]
|
||||||
[#:rename (syntax/skeleton e1 (?lambda ?formals* . ?body*))
|
[#:rename (syntax/skeleton e1 (?lambda ?formals* . ?body*))
|
||||||
#'?formals #'?formals*
|
#'?formals #'?formals*
|
||||||
"Rename formal parameters"]
|
"Rename formal parameters"]
|
||||||
[Block ?body body])]
|
[Block ?body body])]
|
||||||
[(struct p:case-lambda (e1 e2 rs renames+bodies))
|
[(struct p:case-lambda (e1 e2 rs renames+bodies))
|
||||||
#;
|
#;
|
||||||
|
@ -221,7 +221,7 @@
|
||||||
(if exn
|
(if exn
|
||||||
(list (stumble term exn))
|
(list (stumble term exn))
|
||||||
null))]
|
null))]
|
||||||
[(pair? subterms)
|
[(s:subterm? (car subterms))
|
||||||
(let* ([subterm0 (car subterms)]
|
(let* ([subterm0 (car subterms)]
|
||||||
[path0 (s:subterm-path subterm0)]
|
[path0 (s:subterm-path subterm0)]
|
||||||
[deriv0 (s:subterm-deriv subterm0)])
|
[deriv0 (s:subterm-deriv subterm0)])
|
||||||
|
@ -229,7 +229,15 @@
|
||||||
(append (with-context ctx
|
(append (with-context ctx
|
||||||
(reductions deriv0))
|
(reductions deriv0))
|
||||||
(loop (path-replace term path0 (deriv-e2 deriv0))
|
(loop (path-replace term path0 (deriv-e2 deriv0))
|
||||||
(cdr subterms)))))]))]
|
(cdr subterms)))))]
|
||||||
|
[(s:rename? (car subterms))
|
||||||
|
(let* ([subterm0 (car subterms)])
|
||||||
|
;; FIXME: add renaming steps?
|
||||||
|
;; FIXME: if so, coalesce?
|
||||||
|
(loop (path-replace term
|
||||||
|
(s:rename-path subterm0)
|
||||||
|
(s:rename-after subterm0))
|
||||||
|
(cdr subterms)))]))]
|
||||||
|
|
||||||
;; FIXME
|
;; FIXME
|
||||||
[(IntQ p:rename (e1 e2 rs rename inner))
|
[(IntQ p:rename (e1 e2 rs rename inner))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user