Compare commits
2 Commits
4c67b0f18d
...
df520e99ca
| Author | SHA1 | Date |
|---|---|---|
|
|
df520e99ca | |
|
|
85dbf65800 |
|
|
@ -7,7 +7,7 @@
|
||||||
(define (explicate-control sexp)
|
(define (explicate-control sexp)
|
||||||
(match sexp
|
(match sexp
|
||||||
[`(program ,info ,exp)
|
[`(program ,info ,exp)
|
||||||
`(program ,info ,(explicate-control-tail exp))]))
|
`(program ,info ((start . ,(explicate-control-tail exp))))]))
|
||||||
|
|
||||||
; after a remove-complex-opera*, all expressions
|
; after a remove-complex-opera*, all expressions
|
||||||
; are compatible with C0
|
; are compatible with C0
|
||||||
|
|
|
||||||
|
|
@ -26,34 +26,39 @@
|
||||||
(test-eq
|
(test-eq
|
||||||
(pass (list-ref programs 0))
|
(pass (list-ref programs 0))
|
||||||
`(program ()
|
`(program ()
|
||||||
(return (+ 2 3))))
|
((start .
|
||||||
|
(return (+ 2 3))))))
|
||||||
|
|
||||||
(test-eq
|
(test-eq
|
||||||
(pass (list-ref programs 1))
|
(pass (list-ref programs 1))
|
||||||
`(program ()
|
`(program ()
|
||||||
|
((start .
|
||||||
(seq (assign tmp.1 (- 2))
|
(seq (assign tmp.1 (- 2))
|
||||||
(return (+ tmp.1 3)))))
|
(return (+ tmp.1 3)))))))
|
||||||
|
|
||||||
(test-eq
|
(test-eq
|
||||||
(pass (list-ref programs 2))
|
(pass (list-ref programs 2))
|
||||||
`(program ()
|
`(program ()
|
||||||
|
((start .
|
||||||
(seq (assign x.1 20)
|
(seq (assign x.1 20)
|
||||||
(seq (assign x.2 22)
|
(seq (assign x.2 22)
|
||||||
(seq (assign y.1 (+ x.1 x.2))
|
(seq (assign y.1 (+ x.1 x.2))
|
||||||
(return y.1))))))
|
(return y.1))))))))
|
||||||
|
|
||||||
(test-eq
|
(test-eq
|
||||||
(pass (list-ref programs 3))
|
(pass (list-ref programs 3))
|
||||||
`(program ()
|
`(program ()
|
||||||
|
((start .
|
||||||
(seq (assign a.1 42)
|
(seq (assign a.1 42)
|
||||||
(seq (assign b.1 a.1)
|
(seq (assign b.1 a.1)
|
||||||
(return b.1)))))
|
(return b.1)))))))
|
||||||
|
|
||||||
(test-eq
|
(test-eq
|
||||||
(pass (list-ref programs 4))
|
(pass (list-ref programs 4))
|
||||||
`(program ()
|
`(program ()
|
||||||
|
((start .
|
||||||
(seq (assign tmp.1 (- 1))
|
(seq (assign tmp.1 (- 1))
|
||||||
(seq (assign x.1 (+ tmp.1 2))
|
(seq (assign x.1 (+ tmp.1 2))
|
||||||
(seq (assign tmp.2 (+ x.1 2))
|
(seq (assign tmp.2 (+ x.1 2))
|
||||||
(seq (assign tmp.3 (+ 4 5))
|
(seq (assign tmp.3 (+ 4 5))
|
||||||
(return (+ tmp.2 tmp.3))))))))
|
(return (+ tmp.2 tmp.3))))))))))
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
#lang racket
|
||||||
|
|
||||||
|
(require "uncover-locals.scm")
|
||||||
|
(require "test-util.scm")
|
||||||
|
|
||||||
|
(define programs
|
||||||
|
(list
|
||||||
|
`(program ()
|
||||||
|
((start . (seq (assign x.1 20) (seq (assign x.2 3) (return (+ x.1 x.2)))))))))
|
||||||
|
|
||||||
|
(test-eq
|
||||||
|
(cadr (uncover-locals (list-ref programs 0)))
|
||||||
|
`(locals . (x.1 x.2)))
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
#lang racket
|
||||||
|
|
||||||
|
(provide uncover-locals)
|
||||||
|
|
||||||
|
(define (uncover-locals p)
|
||||||
|
(match p
|
||||||
|
[`(program ,data ,c0-blocks)
|
||||||
|
`(program ,(append data (cons `locals (uncover-locals-blocks c0-blocks))) c0-blocks)]))
|
||||||
|
|
||||||
|
(define (uncover-locals-blocks c0-blocks)
|
||||||
|
(if (empty? c0-blocks)
|
||||||
|
`()
|
||||||
|
(append (uncover-locals-block (car c0-blocks)) (uncover-locals-blocks (cdr c0-blocks)))))
|
||||||
|
|
||||||
|
(define (uncover-locals-block c0-block)
|
||||||
|
(match c0-block
|
||||||
|
[`(,label . ,tail) (uncover-locals-tail tail)]))
|
||||||
|
|
||||||
|
(define (uncover-locals-tail c0-tail)
|
||||||
|
(match c0-tail
|
||||||
|
[`(return ,exp) `()]
|
||||||
|
[`(seq (assign ,var ,exp) ,next) (cons var (uncover-locals-tail next))]))
|
||||||
Loading…
Reference in New Issue