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

SCM Repository

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

Diff of /branches/vis15/src/compiler/simple/simple-pp.sml

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

revision 3450, Fri Nov 20 22:08:20 2015 UTC revision 3451, Sat Nov 21 21:11:21 2015 UTC
# Line 50  Line 50 
50              ppList ppTyArg ("<", ";", ">") (ppStrm, mvs)              ppList ppTyArg ("<", ";", ">") (ppStrm, mvs)
51            end            end
52    
53      fun ppVar (ppStrm, x) = PP.string ppStrm (SimpleVar.uniqueNameOf x)      fun ppVar (ppStrm, x) = PP.string ppStrm (V.uniqueNameOf x)
54    
55      fun ppVarDecl ppStrm = let      fun ppVarDecl ppStrm = let
56            fun sp () = PP.space ppStrm 1            fun sp () = PP.space ppStrm 1
# Line 58  Line 58 
58            in            in
59              fn x => (              fn x => (
60                PP.openHBox ppStrm;                PP.openHBox ppStrm;
61                  case SimpleVar.kindOf x                  case V.kindOf x
62                   of V.ConstVar => (string "const"; sp()) (* do we need this? *)                   of V.ConstVar => (string "const"; sp()) (* do we need this? *)
63                    | V.InputVar => (string "input"; sp())                    | V.InputVar => (string "input"; sp())
64                    | V.StrandOutputVar => (string "output"; sp())                    | V.StrandOutputVar => (string "output"; sp())
65                    | _ => ()                    | _ => ()
66                  (* end case *);                  (* end case *);
67                  string(Ty.toString(SimpleVar.typeOf x)); sp(); string(SimpleVar.uniqueNameOf x); string ";";                  string(Ty.toString(V.typeOf x)); sp(); string(V.uniqueNameOf x); string ";";
68                PP.closeBox ppStrm)                PP.closeBox ppStrm)
69            end            end
70    
# Line 114  Line 114 
114                  case stmt                  case stmt
115                   of S.S_Var x => (                   of S.S_Var x => (
116                        PP.openHBox ppStrm;                        PP.openHBox ppStrm;
117                          string(Ty.toString(SimpleVar.typeOf x)); sp(); var x; string ";";                          string(Ty.toString(V.typeOf x)); sp(); var x; string ";";
118                        PP.closeBox ppStrm)                        PP.closeBox ppStrm)
119                    | S.S_Assign(x, e) => (                    | S.S_Assign(x, e) => (
120                        PP.openHBox ppStrm;                        PP.openHBox ppStrm;
121                          var x; sp(); string "="; sp(); ppExp(ppStrm, e); string ";";                          var x; sp(); string "="; sp(); ppExp(ppStrm, e); string ";";
122                        PP.closeBox ppStrm)                        PP.closeBox ppStrm)
                   | S.S_IfThenElse(x, S.Block[s1], S.Block[]) => (  
                       PP.openVBox ppStrm indent;  
                         PP.openHBox ppStrm;  
                           string "if"; sp(); ppVar(ppStrm, x);  
                         PP.closeBox ppStrm;  
                         ppStmt s1;  
                       PP.closeBox ppStrm)  
123                    | S.S_IfThenElse(x, blk, S.Block[]) => (                    | S.S_IfThenElse(x, blk, S.Block[]) => (
124                        PP.openHBox ppStrm;                        PP.openHBox ppStrm;
125                          string "if"; sp(); ppVar(ppStrm, x);                          string "if"; sp(); ppVar(ppStrm, x);
126                          sp(); ppBlock (ppStrm, [], blk);                          sp(); ppBlock (ppStrm, [], blk);
127                        PP.closeBox ppStrm)                        PP.closeBox ppStrm)
                   | S.S_IfThenElse(x, S.Block[s1], S.Block[s2]) => (  
                       PP.openVBox ppStrm indent;  
                         PP.openHBox ppStrm;  
                           string "if"; sp(); ppVar(ppStrm, x);  
                         PP.closeBox ppStrm;  
                         ppStmt s1;  
                       PP.closeBox ppStrm;  
                       nl();  
                       PP.openVBox ppStrm indent;  
                         string "else";  
                         ppStmt s2;  
                       PP.closeBox ppStrm)  
128                    | S.S_IfThenElse(x, blk1, blk2) => (                    | S.S_IfThenElse(x, blk1, blk2) => (
129                        PP.openHBox ppStrm;                        PP.openHBox ppStrm;
130                          string "if"; sp(); ppVar(ppStrm, x);                          string "if"; sp(); ppVar(ppStrm, x);
# Line 152  Line 133 
133                        PP.openHBox ppStrm;                        PP.openHBox ppStrm;
134                          sp(); string "else"; sp(); ppBlock (ppStrm, [], blk2);                          sp(); string "else"; sp(); ppBlock (ppStrm, [], blk2);
135                        PP.closeBox ppStrm)                        PP.closeBox ppStrm)
136                      | S.S_Foreach(x, xs, blk) => (
137                          PP.openHBox ppStrm;
138                            string "foreach"; sp(); ppVar(ppStrm, x);
139                            sp(); string "in"; ppVar(ppStrm, x);
140                            sp(); ppBlock (ppStrm, [], blk);
141                          PP.closeBox ppStrm)
142                    | S.S_New(strand, args) => (                    | S.S_New(strand, args) => (
143                        PP.openHBox ppStrm;                        PP.openHBox ppStrm;
144                          string "new"; sp(); string(Atom.toString strand); sp();                          string "new"; sp(); string(Atom.toString strand); sp();
# Line 185  Line 172 
172            val string = PP.string ppStrm            val string = PP.string ppStrm
173            in            in
174              ppList              ppList
175                (fn (_, x) => (string(Ty.toString(SimpleVar.typeOf x)); sp(); ppVar (ppStrm, x)))                (fn (_, x) => (string(Ty.toString(V.typeOf x)); sp(); ppVar (ppStrm, x)))
176                ("(", ",", ")")                ("(", ",", ")")
177                (ppStrm, params)                (ppStrm, params)
178            end            end
# Line 198  Line 185 
185            in            in
186              PP.openHBox ppStrm;              PP.openHBox ppStrm;
187                string "function"; sp();                string "function"; sp();
188                string(Ty.toString(Ty.rngOf(SimpleVar.typeOf f)));                string(Ty.toString(Ty.rngOf(V.typeOf f)));
189                sp(); var f; sp(); ppParams (ppStrm, params);                sp(); var f; sp(); ppParams (ppStrm, params);
190              PP.closeBox ppStrm;              PP.closeBox ppStrm;
191              nl();              nl();
# Line 206  Line 193 
193              nl()              nl()
194            end            end
195    
     fun ppInit (ppStrm, S.Initially{isArray, rangeInit, iters, create}) = let  
           fun sp () = PP.space ppStrm 1  
           fun nl () = PP.newline ppStrm  
           val string = PP.string ppStrm  
           fun var x = ppVar (ppStrm, x)  
           val label = if isArray then "Array" else "Collection"  
           fun ppIters [] = let  
                 val S.C_Create{argInit, name, args} = create  
                 in  
                   ppBlock (ppStrm, [], argInit); nl();  
                   PP.openHBox ppStrm;  
                     string "new"; sp(); string(Atom.toString name);  
                     ppArgs (ppStrm, args); string ";";  
                   PP.closeBox ppStrm  
                 end  
             | ppIters ({param, lo, hi} :: iters) = (  
                 PP.openVBox ppStrm indent;  
                   PP.openHBox ppStrm;  
                     string "for"; sp();  
                     string(Ty.toString(SimpleVar.typeOf param)); sp(); var param;  
                     sp(); string "="; sp(); var lo; sp(); string ".."; sp(); var hi;  
                   PP.closeBox ppStrm;  
                   nl();  
                   ppIters iters;  
                 PP.closeBox ppStrm)  
           in  
             PP.openVBox ppStrm indent;  
               string label; nl();  
               ppBlock (ppStrm, [], rangeInit); nl();  
               ppIters iters;  
             PP.closeBox ppStrm;  
             nl()  
           end  
196    
197      fun ppStrand ppStrm (S.Strand{name, params, state, stateInit, methods}) = let      fun ppStrand (ppStrm, S.Strand{name, params, state, stateInit, initM, updateM, stabilizeM}) = let
198            fun sp () = PP.space ppStrm 1            fun sp () = PP.space ppStrm 1
199            fun nl () = PP.newline ppStrm            fun nl () = PP.newline ppStrm
200            val string = PP.string ppStrm            val string = PP.string ppStrm
201            fun var x = ppVar (ppStrm, x)            fun var x = ppVar (ppStrm, x)
202            fun ppMethod (S.Method(name, body)) = (            fun ppMethod name body = (
203                  nl(); string(StrandUtil.nameToString name); nl(); ppBlock (ppStrm, [], body))                  nl(); string name; sp(); ppBlock (ppStrm, [], body))
204            in            in
205              PP.openHBox ppStrm;              PP.openHBox ppStrm;
206                string "strand"; sp(); string(Atom.toString name); sp();                string "strand"; sp(); string(Atom.toString name); sp();
# Line 256  Line 210 
210              PP.openVBox ppStrm indent;              PP.openVBox ppStrm indent;
211                string "{";                string "{";
212                ppBlock (ppStrm, state, stateInit);                ppBlock (ppStrm, state, stateInit);
213                List.app ppMethod methods;                Option.app (ppMethod "initially") initM;
214                  ppMethod "update" updateM;
215                  Option.app (ppMethod "stabilize") stabilizeM;
216              PP.closeBox ppStrm;              PP.closeBox ppStrm;
217              nl();              nl();
218              string "}";  nl()              string "}";  nl()
219            end            end
220    
221        fun initToString (S.DynSeq name) = String.concat["load(\"", name, "\")"]
222          | initToString (S.Proxy(name, _)) = String.concat["image(\"", name, "\")"]
223          | initToString (S.Image info) = ImageInfo.toString info
224    
225      fun ppInput ppStrm = let      fun ppInput ppStrm = let
226            fun sp () = PP.space ppStrm 1            fun sp () = PP.space ppStrm 1
227            fun nl () = PP.newline ppStrm            fun nl () = PP.newline ppStrm
228            val string = PP.string ppStrm            val string = PP.string ppStrm
229            fun var x = ppVar (ppStrm, x)            fun var x = ppVar (ppStrm, x)
230            fun pp (x, Inputs.INP{name, desc, init, ...}) = (            fun pp (S.INP{var, desc, init}) = (
231                  PP.openHBox ppStrm;                  PP.openHBox ppStrm;
232                    string "input"; sp();                    string "input"; sp();
233                    string(Ty.toString(SimpleVar.typeOf x)); sp();                    string(Ty.toString(V.typeOf var)); sp();
234                    ppVar (ppStrm, x); string ": ";                    ppVar (ppStrm, var);
                   string name;  
235                    case desc                    case desc
236                     of SOME desc => string(concat["(\"", desc, "\")"])                     of SOME desc => string(concat["(\"", desc, "\")"])
237                      | NONE => ()                      | NONE => ()
# Line 280  Line 239 
239                    case init                    case init
240                     of SOME init => (                     of SOME init => (
241                          sp(); string "="; sp();                          sp(); string "="; sp();
242                          string(Inputs.initToString init); string ";")                          string(initToString init); string ";")
243                      | NONE => string ";"                      | NONE => string ";"
244                    (* end case *);                    (* end case *);
245                    nl();                    nl();
# Line 289  Line 248 
248              pp              pp
249            end            end
250    
251      fun output (outS, msg, prog) = let      fun output (outS, message, prog) = let
252            val S.Program{props, inputDefaults, inputs, globals, globalInit, funcs, strands, init} = prog            val S.Program{
253                      props, inputs, globals, funcs, init,
254                      strand, create, update
255                    } = prog
256            val ppStrm = PP.openOut {dst = outS, wid = 120}            val ppStrm = PP.openOut {dst = outS, wid = 120}
257              fun sp () = PP.space ppStrm 1
258            fun nl () = PP.newline ppStrm            fun nl () = PP.newline ppStrm
259              val string = PP.string ppStrm
260              fun ppTopBlock (prefix, SOME blk) = (
261                    PP.openHBox ppStrm;
262                      string prefix; sp();
263                      ppBlock (ppStrm, [], blk);
264                    PP.closeBox ppStrm)
265                | ppTopBlock _ = ()
266            in            in
267              PP.openVBox ppStrm (PP.Abs 0);              PP.openVBox ppStrm (PP.Abs 0);
268                PP.string ppStrm (concat[                PP.string ppStrm (concat[
269                    "/* Simplified Program (after ", msg, ") start */"                    "/* Simplified Program (after ", message, ") start */"
270                  ]); nl();                  ]); nl();
271                PP.openHBox ppStrm;                PP.openHBox ppStrm;
272                  PP.string ppStrm "properties:";                  PP.string ppStrm "properties:";
273                  PP.space ppStrm 1;                  sp();
274                  PP.string ppStrm (Properties.propsToString props);                  string (Properties.propsToString props);
275                  PP.newline ppStrm;                  PP.newline ppStrm;
276                PP.closeBox ppStrm;                PP.closeBox ppStrm;
               ppBlock (ppStrm, [], inputDefaults);  
               nl();  
277                List.app (ppInput ppStrm) inputs;                List.app (ppInput ppStrm) inputs;
278                List.app (ppFunc ppStrm) funcs;                List.app (ppFunc ppStrm) funcs;
279                ppBlock (ppStrm, globals, globalInit);                ppTopBlock ("initially", SOME init);
280                nl();                ppStrand (ppStrm, strand);
281                ppInit (ppStrm, init);                if Properties.hasProp Properties.StrandArray props
282                List.app (ppStrand ppStrm) strands;                  then ppTopBlock ("grid", SOME create)
283                PP.string ppStrm "/* Program end */"; PP.newline ppStrm;                  else ppTopBlock ("collection", SOME create);
284                  ppTopBlock ("update", update);
285                  string "/* Program end */"; PP.newline ppStrm;
286              PP.closeBox ppStrm;              PP.closeBox ppStrm;
287              PP.closeStream ppStrm              PP.closeStream ppStrm
288            end            end

Legend:
Removed from v.3450  
changed lines
  Added in v.3451

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