23 lines
644 B
Scheme
23 lines
644 B
Scheme
#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))]))
|