diff --git a/explicate-control.scm b/explicate-control.scm index dd9043a..63d7d85 100644 --- a/explicate-control.scm +++ b/explicate-control.scm @@ -7,7 +7,7 @@ (define (explicate-control sexp) (match sexp [`(program ,info ,exp) - `(program ,info ,(explicate-control-tail exp))])) + `(program ,info ((start . ,(explicate-control-tail exp))))])) ; after a remove-complex-opera*, all expressions ; are compatible with C0 diff --git a/test-explicate-control.scm b/test-explicate-control.scm index 1fc4636..0b40fc9 100644 --- a/test-explicate-control.scm +++ b/test-explicate-control.scm @@ -5,7 +5,7 @@ (require "explicate-control.scm") (require "c2.scm") -(define programs +(define programs (list `(program () (+ 2 3)) `(program () (+ (- 2) 3)) @@ -19,41 +19,46 @@ `(program () (+ (let ([x (+ (- 1) 2)]) (+ x 2)) (+ 4 5))))) - + (define (pass program) (explicate-control (remove-complex-opera* program))) (test-eq (pass (list-ref programs 0)) `(program () - (return (+ 2 3)))) + ((start . + (return (+ 2 3)))))) (test-eq (pass (list-ref programs 1)) `(program () - (seq (assign tmp.1 (- 2)) - (return (+ tmp.1 3))))) + ((start . + (seq (assign tmp.1 (- 2)) + (return (+ tmp.1 3))))))) (test-eq (pass (list-ref programs 2)) `(program () - (seq (assign x.1 20) - (seq (assign x.2 22) - (seq (assign y.1 (+ x.1 x.2)) - (return y.1)))))) + ((start . + (seq (assign x.1 20) + (seq (assign x.2 22) + (seq (assign y.1 (+ x.1 x.2)) + (return y.1)))))))) (test-eq (pass (list-ref programs 3)) `(program () - (seq (assign a.1 42) - (seq (assign b.1 a.1) - (return b.1))))) + ((start . + (seq (assign a.1 42) + (seq (assign b.1 a.1) + (return b.1))))))) (test-eq (pass (list-ref programs 4)) `(program () - (seq (assign tmp.1 (- 1)) - (seq (assign x.1 (+ tmp.1 2)) - (seq (assign tmp.2 (+ x.1 2)) - (seq (assign tmp.3 (+ 4 5)) - (return (+ tmp.2 tmp.3)))))))) + ((start . + (seq (assign tmp.1 (- 1)) + (seq (assign x.1 (+ tmp.1 2)) + (seq (assign tmp.2 (+ x.1 2)) + (seq (assign tmp.3 (+ 4 5)) + (return (+ tmp.2 tmp.3))))))))))