Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Diff of /branches/vis15/src/compiler/tree-ir/tree-pp.sml
ViewVC logotype

Diff of /branches/vis15/src/compiler/tree-ir/tree-pp.sml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3768, Mon Apr 18 22:20:53 2016 UTC revision 3857, Sat May 14 14:13:04 2016 UTC
# Line 21  Line 21 
21    end = struct    end = struct
22    
23      structure IR = TreeIR      structure IR = TreeIR
24      structure Op = IR.Op      structure Ty = TreeTypes
25      structure Var = IR.Var      structure Op = TreeOps
26      structure Ty = IR.Ty      structure Var = TreeVar
27        structure GVar = TreeGlobalVar
28        structure SVar = TreeStateVar
29    
30      fun indent (outS, i) = TextIO.output(outS, StringCvt.padLeft #" " i "")      fun indent (outS, i) = TextIO.output(outS, StringCvt.padLeft #" " i "")
31      fun incIndent (outS, i) = (outS, i+2)      fun incIndent (outS, i) = (outS, i+2)
# Line 43  Line 45 
45                  in                  in
46                    lp :: argToS(args, rp :: l)                    lp :: argToS(args, rp :: l)
47                  end                  end
48            and toS (IR.E_Global x, l) = "::" :: IR.GlobalVar.toString x :: l            and toS (IR.E_Global x, l) = GVar.toString x :: l
49              | toS (IR.E_State x, l) = IR.StateVar.toString x :: l              | toS (IR.E_State(NONE, x), l) = "self." :: SVar.toString x :: l
50                | toS (IR.E_State(SOME e, fld), l) = toS (e, "." :: SVar.toString fld :: l)
51              | toS (IR.E_Var x, l) = Var.name x :: l              | toS (IR.E_Var x, l) = Var.name x :: l
52              | toS (IR.E_Lit lit, l) = Literal.toString lit :: l              | toS (IR.E_Lit lit, l) = Literal.toString lit :: l
53              | toS (IR.E_Op(rator, args), l) = Op.toString rator :: argsToS ("(", args, ")", l)              | toS (IR.E_Op(rator, args), l) = Op.toString rator :: argsToS ("(", args, ")", l)
54                | toS (IR.E_Vec args, l) = argsToS ("#[", args, "]", l)
55              | toS (IR.E_Cons(args, ty), l) =              | toS (IR.E_Cons(args, ty), l) =
56                  "<" :: Ty.toString ty :: ">" :: argsToS ("[", args, "]", l)                  "<" :: Ty.toString ty :: ">" :: argsToS ("[", args, "]", l)
57              | toS (IR.E_Seq(args, ty), l) =              | toS (IR.E_Seq(args, ty), l) =
58                  "<" :: Ty.toString ty :: ">" :: argsToS ("{", args, "}", l)                  "<" :: Ty.toString ty :: ">" :: argsToS ("{", args, "}", l)
59              | toS (IR.E_Pack es, l) = "PACK" :: argsToS ("(", es, ")", l)              | toS (IR.E_Pack(_, es), l) = "PACK" :: argsToS ("(", es, ")", l)
60                | toS (IR.E_VLoad(layout, e, i), l) =
61                    "LOAD_"  :: Int.toString i :: "(" :: toS(e, ")" :: l)
62            in            in
63              String.concat (toS (e, []))              String.concat (toS (e, []))
64            end            end
# Line 62  Line 68 
68            ]            ]
69    
70      fun ppGlobalDecl out x = prln (out, [      fun ppGlobalDecl out x = prln (out, [
71              if IR.GlobalVar.isInput x then "input " else "",              if GVar.isInput x then "input " else "",
72              Ty.toString(IR.GlobalVar.ty x), " ", IR.GlobalVar.name x, ";\n"              Ty.toString(GVar.ty x), " ", GVar.name x, ";\n"
73            ])            ])
74    
75      fun ppVarDecl out x = prln (out, [Ty.toString(Var.ty x), " ", Var.name x, ";\n"])      fun ppVarDecl out x = prln (out, [Ty.toString(Var.ty x), " ", Var.name x, ";\n"])
# Line 76  Line 82 
82              | ppParams (x::r) = (              | ppParams (x::r) = (
83                  prl(out, [Ty.toString (Var.ty x), " ", Var.name x, ","]);                  prl(out, [Ty.toString (Var.ty x), " ", Var.name x, ","]);
84                  ppParams r)                  ppParams r)
85            fun ppSVarDecl (IR.SV{varying, output, name, ty, ...}) = let            fun ppSVarDecl sv = let
86                  val v = if varying then "varying " else ""                  val v = if SVar.isVarying sv then "varying " else ""
87                  val out = if output then "output " else ""                  val out = if SVar.isOutput sv then "output " else ""
88                  in                  in
89                    prln (out', [v, out, Ty.toString ty, " ", name, ";\n"])                    prln (out', [v, out, Ty.toString(SVar.ty sv), " ", SVar.name sv, ";\n"])
90                  end                  end
91            in            in
92              prln (out, ["strand ", Atom.toString name, " ("]);              prln (out, ["strand ", Atom.toString name, " ("]);
# Line 103  Line 109 
109            val out' = incIndent out            val out' = incIndent out
110            in            in
111              pr (out, "{\n");              pr (out, "{\n");
112              List.app (ppVarDecl out') locals;              List.app (ppVarDecl out') (!locals);
113              List.app (fn stm => ppStm(out', stm)) body;              List.app (fn stm => ppStm(out', stm)) body;
114              indent out; pr (out, "}")              indent out; pr (out, "}")
115            end            end
# Line 114  Line 120 
120                  in                  in
121                    List.app (fn s => prln(out, ["// ", s, "\n"])) text                    List.app (fn s => prln(out, ["// ", s, "\n"])) text
122                  end                  end
123              | IR.S_Unpack([], e) => raise Fail "empty lhs for Unpack"              | IR.S_Assign(true, x, e) =>
124              | IR.S_Unpack(x::xs, e) => (                  prln(out, [Ty.toString(Var.ty x), " ", Var.name x, " = ", expToString e, ";\n"])
125                | IR.S_Assign(false, x, e) => prln(out, [Var.name x, " = ", expToString e, ";\n"])
126                | IR.S_MAssign([], e) => prln(out, [expToString e, ";\n"])
127                | IR.S_MAssign([x], e) => prln(out, [Var.name x, " = ", expToString e, ";\n"])
128                | IR.S_MAssign(x::xs, e) => (
129                  prln(out, ["(", Var.name x]);                  prln(out, ["(", Var.name x]);
130                  List.app (fn x => prl(out, [",", Var.name x])) xs;                  List.app (fn x => prl(out, [",", Var.name x])) xs;
131                  prl (out, [") = UNPACK(", expToString e, ");\n"]))                  prl (out, [") = ", expToString e, ";\n"]))
132              | IR.S_Assign(x, e) => prln(out, [Var.name x, " = ", expToString e, ";\n"])              | IR.S_GAssign(x, e) => prln(out, [GVar.name x, " = ", expToString e, ";\n"])
             | IR.S_GAssign(x, e) => prln(out, [IR.GlobalVar.name x, " = ", expToString e, ";\n"])  
133              | IR.S_IfThen(cond, blk) => (              | IR.S_IfThen(cond, blk) => (
134                  prln (out, ["if (", expToString cond, ") "]);                  prln (out, ["if (", expToString cond, ") "]);
135                  ppBlock (out, blk);                  ppBlock (out, blk);
# Line 144  Line 153 
153                    ])                    ])
154              | IR.S_Input(x, name, desc, NONE) =>              | IR.S_Input(x, name, desc, NONE) =>
155                  prln (out, [                  prln (out, [
156                      IR.GlobalVar.name x, " = input<", Ty.toString(IR.GlobalVar.ty x), "> (\"",                      GVar.name x, " = input<", Ty.toString(GVar.ty x), "> (\"",
157                      String.toString name, "\",\"", descToString desc, "\");\n"                      String.toString name, "\",\"", descToString desc, "\");\n"
158                    ])                    ])
159              | IR.S_Input(x, name, desc, SOME dflt) =>              | IR.S_Input(x, name, desc, SOME dflt) =>
160                  prln (out, [                  prln (out, [
161                      IR.GlobalVar.name x, " = input<", Ty.toString(IR.GlobalVar.ty x), "> (\"",                      GVar.name x, " = input<", Ty.toString(GVar.ty x), "> (\"",
162                      String.toString name, "\",\"", descToString desc, "\",",                      String.toString name, "\",\"", descToString desc, "\",",
163                      expToString dflt, ");\n"                      expToString dflt, ");\n"
164                    ])                    ])
165              | IR.S_InputNrrd(x, name, desc, NONE) =>              | IR.S_InputNrrd(x, name, desc, NONE) =>
166                  prln (out, [                  prln (out, [
167                      IR.GlobalVar.name x, " = input-nrrd<", Ty.toString(IR.GlobalVar.ty x), "> (\"",                      GVar.name x, " = input-nrrd<", Ty.toString(GVar.ty x), "> (\"",
168                      String.toString name, "\",\"", descToString desc, "\");\n"                      String.toString name, "\",\"", descToString desc, "\");\n"
169                    ])                    ])
170              | IR.S_InputNrrd(x, name, desc, SOME dflt) =>              | IR.S_InputNrrd(x, name, desc, SOME dflt) =>
171                  prln (out, [                  prln (out, [
172                      IR.GlobalVar.name x, " = input-nrrd<", Ty.toString(IR.GlobalVar.ty x), "> (\"",                      GVar.name x, " = input-nrrd<", Ty.toString(GVar.ty x), "> (\"",
173                      String.toString name, "\",\"", descToString desc, "\",\"",                      String.toString name, "\",\"", descToString desc, "\",\"",
174                      String.toString dflt, "\");\n"                      String.toString dflt, "\");\n"
175                    ])                    ])
176              | IR.S_New(strand, args) =>              | IR.S_New(strand, args) =>
177                  prln (out, [argsToString("new "^Atom.toString strand, args), ";\n"])                  prln (out, [argsToString("new "^Atom.toString strand, args), ";\n"])
178              | IR.S_Save(x, rhs) =>              | IR.S_Save(x, rhs) =>
179                  prln (out, [IR.StateVar.toString x, " = ", expToString rhs, ";\n"])                  prln (out, [SVar.toString x, " = ", expToString rhs, ";\n"])
180              | IR.S_Exit es => prln (out, [argsToString("exit", es), ";\n"])              | IR.S_Exit => prln (out, ["exit;\n"])
181              | IR.S_Print(_, es) => prln (out, [argsToString("print", es), ";\n"])              | IR.S_Print(_, es) => prln (out, [argsToString("print", es), ";\n"])
182            (* return functions for methods *)            (* return functions for methods *)
183              | IR.S_Active => prln (out, ["active;\n"])              | IR.S_Active => prln (out, ["active;\n"])

Legend:
Removed from v.3768  
changed lines
  Added in v.3857

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0