From 03b2a0eae87d4f05e4c2baccc455da96fa1f7dd4 Mon Sep 17 00:00:00 2001 From: Danny Yoo Date: Sun, 20 Feb 2011 14:58:38 -0500 Subject: [PATCH] making instructions explicit types so we can get better error trapping. --- assemble.rkt | 4 ++-- cm.rkt => compile.rkt | 1 - typed-structs.rkt | 31 ++++++++++++++++++++++++++++--- 3 files changed, 30 insertions(+), 6 deletions(-) rename cm.rkt => compile.rkt (99%) diff --git a/assemble.rkt b/assemble.rkt index d3a8fcb..65e2399 100644 --- a/assemble.rkt +++ b/assemble.rkt @@ -1,5 +1,5 @@ -#lang racket/base -(require "structs.rkt" +#lang typed/racket/base +(require "typed-structs.rkt" racket/string racket/list) diff --git a/cm.rkt b/compile.rkt similarity index 99% rename from cm.rkt rename to compile.rkt index f2d34cc..d915252 100644 --- a/cm.rkt +++ b/compile.rkt @@ -1,7 +1,6 @@ #lang typed/racket/base (require "typed-structs.rkt" - #;"assemble.rkt" racket/list) (provide compile) diff --git a/typed-structs.rkt b/typed-structs.rkt index 72e575c..6dd098c 100644 --- a/typed-structs.rkt +++ b/typed-structs.rkt @@ -31,10 +31,31 @@ ;; instruction sequences +(define-type Statement (U Symbol ;; label + AssignStatement + PerformStatement + TestStatement + BranchStatement + GotoStatement + SaveStatement + RestoreStatement)) +(define-struct: AssignStatement () #:transparent) +(define-struct: PerformStatement () #:transparent) +(define-struct: TestStatement () #:transparent) +(define-struct: BranchStatement () #:transparent) +(define-struct: GotoStatement () #:transparent) +(define-struct: SaveStatement () #:transparent) +(define-struct: RestoreStatement () #:transparent) + + + + + + (define-type InstructionSequence (U Symbol instruction-sequence)) (define-struct: instruction-sequence ([needs : (Listof Symbol)] [modifies : (Listof Symbol)] - [statements : (Listof Any)]) #:transparent) + [statements : (Listof Statement)]) #:transparent) (define empty-instruction-sequence (make-instruction-sequence '() '() '())) (: make-label (Symbol -> Symbol)) @@ -53,7 +74,7 @@ (define (registers-modified s) (if (symbol? s) '() (instruction-sequence-modifies s))) -(: statements (InstructionSequence -> (Listof Any))) +(: statements (InstructionSequence -> (Listof Statement))) (define (statements s) (if (symbol? s) (list s) (instruction-sequence-statements s))) @@ -63,4 +84,8 @@ (define-type Target Symbol) ;; Linkage -(define-type Linkage (U 'return 'next Symbol)) \ No newline at end of file +(define-type Linkage (U 'return 'next Symbol)) + + + +(define-struct: basic-block ([name : Symbol] [stmts : (Listof Statement)]) #:transparent)