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))]) (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)

View File

@ -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)