assemble.rkt is typechecking
This commit is contained in:
parent
0d74f2f9f1
commit
bdeab40f34
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue
Block a user