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))])
|
(cons first-block-label (collect-general-jump-targets stmts))])
|
||||||
(let: loop : (Listof BasicBlock)
|
(let: loop : (Listof BasicBlock)
|
||||||
([name : Symbol first-block-label]
|
([name : Symbol first-block-label]
|
||||||
[acc : (Listof Statement) '()]
|
[acc : (Listof UnlabeledStatement) '()]
|
||||||
[basic-blocks : (Listof BasicBlock) '()]
|
[basic-blocks : (Listof BasicBlock) '()]
|
||||||
[stmts : (Listof Statement) stmts]
|
[stmts : (Listof Statement) stmts]
|
||||||
[last-stmt-goto? : Boolean #f])
|
[last-stmt-goto? : Boolean #f])
|
||||||
|
@ -209,7 +209,7 @@
|
||||||
|
|
||||||
|
|
||||||
;; assemble-stmt: stmt -> string
|
;; assemble-stmt: stmt -> string
|
||||||
(: assemble-stmt (Statement -> String))
|
(: assemble-stmt (UnlabeledStatement -> String))
|
||||||
(define (assemble-stmt stmt)
|
(define (assemble-stmt stmt)
|
||||||
(cond
|
(cond
|
||||||
[(AssignImmediateStatement? stmt)
|
[(AssignImmediateStatement? stmt)
|
||||||
|
|
|
@ -32,15 +32,18 @@
|
||||||
|
|
||||||
|
|
||||||
;; instruction sequences
|
;; instruction sequences
|
||||||
(define-type Statement (U Symbol ;; label
|
(define-type UnlabeledStatement (U
|
||||||
AssignImmediateStatement
|
AssignImmediateStatement
|
||||||
AssignPrimOpStatement
|
AssignPrimOpStatement
|
||||||
PerformStatement
|
PerformStatement
|
||||||
TestStatement
|
TestStatement
|
||||||
BranchLabelStatement
|
BranchLabelStatement
|
||||||
GotoStatement
|
GotoStatement
|
||||||
SaveStatement
|
SaveStatement
|
||||||
RestoreStatement))
|
RestoreStatement))
|
||||||
|
(define-type Statement (U UnlabeledStatement
|
||||||
|
Symbol ;; label
|
||||||
|
))
|
||||||
(define-struct: AssignImmediateStatement ([target : Symbol]
|
(define-struct: AssignImmediateStatement ([target : Symbol]
|
||||||
[value : (U Const Reg Label)])
|
[value : (U Const Reg Label)])
|
||||||
#:transparent)
|
#:transparent)
|
||||||
|
@ -104,4 +107,4 @@
|
||||||
|
|
||||||
|
|
||||||
(define-struct: BasicBlock ([name : Symbol]
|
(define-struct: BasicBlock ([name : Symbol]
|
||||||
[stmts : (Listof Statement)]) #:transparent)
|
[stmts : (Listof UnlabeledStatement)]) #:transparent)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user