]> Joshua Wise's Git repositories - snipe.git/blobdiff - trans/tree.sml
Initial import of l5c
[snipe.git] / trans / tree.sml
index 1cfc4eb7670904079027a932209cfd46fa628633..dbd0efc335dbd8b57deafab808daac8f536700b2 100644 (file)
@@ -1,68 +1,72 @@
-(* L1 Compiler
+(* L3 Compiler
  * IR Trees
  * Author: Kaustuv Chaudhuri <kaustuv+@cs.cmu.edu>
  * Modified: Alex Vaynberg <alv@andrew.cmu.edu>
  * Modified: Frank Pfenning <fp@cs.cmu.edu>
+ * Modified: Joshua Wise <jwise>
+ * Modified: Chris Lu <czl>
  *)
 
 signature TREE =
 sig
+  datatype binop = ADD | SUB | MUL | DIV | MOD | LSH | RSH | LOGOR | LOGAND | BITOR | BITAND | BITXOR | NEQ | EQ | LT | GT | LE | GE | BE
+  datatype unop = NEG | BITNOT | BANG
 
-  datatype binop = ADD | SUB | MUL | DIV | MOD
+  type Blarg = int
 
   datatype exp = 
       CONST of Word32.word
     | TEMP of Temp.temp
+    | ARG of Blarg * Temp.size (* I am j4cbo *)
     | BINOP of binop * exp * exp
+    | UNOP of unop * exp
+    | CALL of Ast.ident * (exp * Temp.size) list * Temp.size
+    | MEMORY of exp * Temp.size
+    | ALLOC of exp
+    | COND of exp * exp * exp
+    | STMVAR of stm list * exp
+    | NULLPTR
   and stm =
       MOVE of exp * exp
-    | RETURN of exp
+    | RETURN of exp * Temp.size
+    | EFFECT of exp
+    | LABEL of Label.label
+    | JUMPIFN of exp * Label.label
+    | JUMP of Label.label
+  and func =
+      FUNCTION of Ast.ident * stm list
 
-  type program = stm list
-
-  structure Print :
-  sig
-    val pp_exp : exp -> string
-    val pp_stm : stm -> string
-    val pp_program : program -> string
-  end
+  type program = func list
 end
 
 structure Tree :> TREE =
 struct
+  datatype binop = ADD | SUB | MUL | DIV | MOD | LSH | RSH | LOGOR | LOGAND | BITOR | BITAND | BITXOR | NEQ | EQ | LT | GT | LE | GE | BE
+  datatype unop = NEG | BITNOT | BANG
 
-  datatype binop = ADD | SUB | MUL | DIV | MOD
+  type Blarg = int
 
   datatype exp = 
       CONST of Word32.word
     | TEMP of Temp.temp
+    | ARG of Blarg * Temp.size (* I am j4cbo *)
     | BINOP of binop * exp * exp
+    | UNOP of unop * exp
+    | CALL of Ast.ident * (exp * Temp.size) list * Temp.size
+    | MEMORY of exp * Temp.size
+    | ALLOC of exp
+    | COND of exp * exp * exp
+    | STMVAR of stm list * exp
+    | NULLPTR
   and stm =
       MOVE of exp * exp
-    | RETURN of exp
-
-  type program = stm list
-
-  structure Print = 
-  struct
-
-    fun pp_binop ADD = "+"
-      | pp_binop SUB = "-"
-      | pp_binop MUL = "*"
-      | pp_binop DIV = "/"
-      | pp_binop MOD = "%"
-
-    fun pp_exp (CONST(x)) = Word32Signed.toString x
-      | pp_exp (TEMP(t)) = Temp.name t
-      | pp_exp (BINOP (binop, e1, e2)) =
-         "(" ^ pp_exp e1 ^ " " ^ pp_binop binop ^ " " ^ pp_exp e2 ^ ")"
-
-    fun pp_stm (MOVE (e1,e2)) =
-         pp_exp e1 ^ "  <--  " ^ pp_exp e2
-      | pp_stm (RETURN e) =
-         "return " ^ pp_exp e
+    | RETURN of exp * Temp.size
+    | EFFECT of exp
+    | LABEL of Label.label
+    | JUMPIFN of exp * Label.label
+    | JUMP of Label.label
+  and func =
+      FUNCTION of Ast.ident * stm list
 
-    fun pp_program (nil) = ""
-      | pp_program (stm::stms) = pp_stm stm ^ "\n" ^ pp_program stms
-  end
+  type program = func list
 end
This page took 0.024911 seconds and 4 git commands to generate.