From bdeab40f34c18367a4b9782349cb1e2e8af04bc2 Mon Sep 17 00:00:00 2001 From: Danny Yoo Date: Sun, 20 Feb 2011 17:08:26 -0500 Subject: [PATCH] assemble.rkt is typechecking --- assemble.rkt | 4 ++-- typed-structs.rkt | 23 +++++++++++++---------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/assemble.rkt b/assemble.rkt index 721421e..cba1910 100644 --- a/assemble.rkt +++ b/assemble.rkt @@ -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) diff --git a/typed-structs.rkt b/typed-structs.rkt index 0f8b7cc..9efb901 100644 --- a/typed-structs.rkt +++ b/typed-structs.rkt @@ -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)