assemble.rkt is typechecking

This commit is contained in:
Danny Yoo 2011-02-20 17:08:26 -05:00
parent 0d74f2f9f1
commit bdeab40f34
2 changed files with 15 additions and 12 deletions

View File

@ -30,7 +30,7 @@
(cons first-block-label (collect-general-jump-targets stmts))])
(let: loop : (Listof BasicBlock)
([name : Symbol first-block-label]
[acc : (Listof Statement) '()]
[acc : (Listof UnlabeledStatement) '()]
[basic-blocks : (Listof BasicBlock) '()]
[stmts : (Listof Statement) stmts]
[last-stmt-goto? : Boolean #f])
@ -209,7 +209,7 @@
;; assemble-stmt: stmt -> string
(: assemble-stmt (Statement -> String))
(: assemble-stmt (UnlabeledStatement -> String))
(define (assemble-stmt stmt)
(cond
[(AssignImmediateStatement? stmt)

View File

@ -32,15 +32,18 @@
;; instruction sequences
(define-type Statement (U Symbol ;; label
AssignImmediateStatement
AssignPrimOpStatement
PerformStatement
TestStatement
BranchLabelStatement
GotoStatement
SaveStatement
RestoreStatement))
(define-type UnlabeledStatement (U
AssignImmediateStatement
AssignPrimOpStatement
PerformStatement
TestStatement
BranchLabelStatement
GotoStatement
SaveStatement
RestoreStatement))
(define-type Statement (U UnlabeledStatement
Symbol ;; label
))
(define-struct: AssignImmediateStatement ([target : Symbol]
[value : (U Const Reg Label)])
#:transparent)
@ -104,4 +107,4 @@
(define-struct: BasicBlock ([name : Symbol]
[stmts : (Listof Statement)]) #:transparent)
[stmts : (Listof UnlabeledStatement)]) #:transparent)