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

SCM Repository

[diderot] Diff of /trunk/src/compiler/simplify/simple-pp.sml
ViewVC logotype

Diff of /trunk/src/compiler/simplify/simple-pp.sml

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

revision 172, Sat Jul 24 15:37:08 2010 UTC revision 227, Wed Aug 4 05:27:13 2010 UTC
# Line 43  Line 43 
43              ppList ppTyArg ("<", ";", ">") (ppStrm, mvs)              ppList ppTyArg ("<", ";", ">") (ppStrm, mvs)
44            end            end
45    
46      fun ppVar ppStrm x = PP.string ppStrm (Var.uniqueNameOf x)      fun ppVar (ppStrm, x) = PP.string ppStrm (Var.uniqueNameOf x)
47    
48      fun ppVarDecl ppStrm = let      fun ppVarDecl ppStrm = let
49            fun sp () = PP.space ppStrm 1            fun sp () = PP.space ppStrm 1
# Line 73  Line 73 
73                        var f; ppTyArgs (ppStrm, mvs); sp(); ppArgs (ppStrm, args))                        var f; ppTyArgs (ppStrm, mvs); sp(); ppArgs (ppStrm, args))
74                    | S.E_Cons es => (                    | S.E_Cons es => (
75                        ppList ppVar ("[", ",", "]") (ppStrm, es))                        ppList ppVar ("[", ",", "]") (ppStrm, es))
76                      | S.E_Input(argName, NONE) =>
77                          string(concat["input(\"", argName, "\")"])
78                      | S.E_Input(argName, SOME default) => (
79                          string "inputWithDefault"; string "(";
80                          string (concat["\"", argName, "\""]); string ","; sp();
81                          var default; string ")")
82                      | S.E_Field fld => (
83                          string "field"; sp(); string(FieldDef.toString fld))
84                      | S.E_LoadImage info => (
85                          string "load"; sp(); string(ImageInfo.toString info))
86                  (* end case *))                  (* end case *))
87            in            in
88              pp e              pp e
# Line 80  Line 90 
90    
91      and ppArgs (ppStrm, args) = ppList ppVar ("(", ",", ")") (ppStrm, args)      and ppArgs (ppStrm, args) = ppList ppVar ("(", ",", ")") (ppStrm, args)
92    
93      fun ppBlock (ppStrm, stms) = let      fun ppBlock (ppStrm, vars, S.Block stms) = let
94            fun sp () = PP.space ppStrm 1            fun sp () = PP.space ppStrm 1
95            fun nl () = PP.newline ppStrm            fun nl () = PP.newline ppStrm
96            val string = PP.string ppStrm            val string = PP.string ppStrm
97            fun var x = string(Var.nameOf x)            fun var x = string(Var.uniqueNameOf x)
98            fun ppStmt stmt = (case stmt            fun ppStmt stmt = (
99                   of AST.S_Block stms => ppBlock (ppStrm, stms)                  nl();
100                    | AST.S_Decl vdcl => (ppVarDecl ppStrm vdcl; nl())                  case stmt
101                    | AST.S_IfThenElse(e, AST.S_Block stms, AST.S_Block[]) => (                   of S.S_Assign(x, e) => (
102                        PP.openHBox ppStrm;                        PP.openHBox ppStrm;
103                          string "if"; sp(); ppExp(ppStrm, e);                          var x; sp(); string "="; sp(); ppExp(ppStrm, e); string ";";
                         sp(); ppBlock (ppStrm, stms);  
104                        PP.closeBox ppStrm)                        PP.closeBox ppStrm)
105                    | AST.S_IfThenElse(e, s1, AST.S_Block[]) => (                    | S.S_IfThenElse(x, S.Block[s1], S.Block[]) => (
106                        PP.openVBox ppStrm indent;                        PP.openVBox ppStrm indent;
107                          PP.openHBox ppStrm;                          PP.openHBox ppStrm;
108                            string "if"; sp(); ppExp(ppStrm, e);                            string "if"; sp(); ppVar(ppStrm, x);
109                          PP.closeBox ppStrm;                          PP.closeBox ppStrm;
110                          nl();                          nl();
111                          ppStmt s1;                          ppStmt s1;
112                        PP.closeBox ppStrm;                        PP.closeBox ppStrm)
113                        nl())                    | S.S_IfThenElse(x, blk, S.Block[]) => (
                   | AST.S_IfThenElse(e, AST.S_Block stms1, AST.S_Block stms2) => (  
                       PP.openHBox ppStrm;  
                         string "if"; sp(); ppExp(ppStrm, e);  
                         sp(); ppBlock (ppStrm, stms1);  
                       PP.closeBox ppStrm;  
114                        PP.openHBox ppStrm;                        PP.openHBox ppStrm;
115                          string "else"; sp(); ppBlock (ppStrm, stms2);                          string "if"; sp(); ppVar(ppStrm, x);
116                            sp(); ppBlock (ppStrm, [], blk);
117                        PP.closeBox ppStrm)                        PP.closeBox ppStrm)
118                    | AST.S_IfThenElse(e, AST.S_Block stms1, s2) => raise Fail "FIXME"                    | S.S_IfThenElse(x, S.Block[s1], S.Block[s2]) => (
                   | AST.S_IfThenElse(e, s1, AST.S_Block stms2) => raise Fail "FIXME"  
                   | AST.S_IfThenElse(e, s1, s2) => (  
119                        PP.openVBox ppStrm indent;                        PP.openVBox ppStrm indent;
120                          PP.openHBox ppStrm;                          PP.openHBox ppStrm;
121                            string "if"; sp(); ppExp(ppStrm, e);                            string "if"; sp(); ppVar(ppStrm, x);
122                          PP.closeBox ppStrm;                          PP.closeBox ppStrm;
123                          nl();                          nl();
124                          ppStmt s1;                          ppStmt s1;
# Line 124  Line 127 
127                        PP.openVBox ppStrm indent;                        PP.openVBox ppStrm indent;
128                          string "else"; nl();                          string "else"; nl();
129                          ppStmt s2;                          ppStmt s2;
130                        PP.closeBox ppStrm;                        PP.closeBox ppStrm)
131                        nl())                    | S.S_IfThenElse(x, blk1, blk2) => (
                   | AST.S_Assign(x, e) => (  
132                        PP.openHBox ppStrm;                        PP.openHBox ppStrm;
133                          var x; sp(); string "="; sp(); ppExp(ppStrm, e); string ";";                          string "if"; sp(); ppVar(ppStrm, x);
134                            sp(); ppBlock (ppStrm, [], blk1);
135                        PP.closeBox ppStrm;                        PP.closeBox ppStrm;
136                        nl())                        PP.openHBox ppStrm;
137                    | AST.S_New(actor, args) => (                          string "else"; sp(); ppBlock (ppStrm, [], blk2);
138                          PP.closeBox ppStrm)
139                      | S.S_New(actor, args) => (
140                        PP.openHBox ppStrm;                        PP.openHBox ppStrm;
141                          string "new"; sp(); string(Atom.toString actor); sp();                          string "new"; sp(); string(Atom.toString actor); sp();
142                          ppArgs (ppStrm, args); string ";";                          ppArgs (ppStrm, args); string ";";
143                        PP.closeBox ppStrm;                        PP.closeBox ppStrm)
144                        nl())                    | S.S_Die => string "die;"
145                    | AST.S_Die => (string "die;"; nl())                    | S.S_Stabilize => string "stabilize;"
                   | AST.S_Stabilize => (string "stabilize;"; nl())  
146                  (* end case *))                  (* end case *))
147            in            in
148              PP.openVBox ppStrm (PP.Abs 0);              PP.openVBox ppStrm (PP.Abs 0);
149                string "{"; nl();                string "{";
150                PP.openVBox ppStrm indent;                PP.openVBox ppStrm indent;
151                    List.app (fn vdcl => (nl(); ppVarDecl ppStrm vdcl)) vars;
152                  List.app ppStmt stms;                  List.app ppStmt stms;
153                PP.closeBox ppStrm;                PP.closeBox ppStrm;
154                string "}"; nl();                nl(); string "}";
155              PP.closeBox ppStrm              PP.closeBox ppStrm
156            end            end
157    
158      fun ppActor (ppStrm, S.Actor{name, params, state, stateInit, methods}) = let      fun ppActor ppStrm (S.Actor{name, params, state, stateInit, methods}) = let
159            fun sp () = PP.space ppStrm 1            fun sp () = PP.space ppStrm 1
160            fun nl () = PP.newline ppStrm            fun nl () = PP.newline ppStrm
161            val string = PP.string ppStrm            val string = PP.string ppStrm
162            fun var x = string(Var.nameOf x)            fun var x = string(Var.nameOf x)
163            fun ppMethod (AST.M_Method(name, AST.S_Block stms)) = (            fun ppMethod (S.Method(name, body)) = (
164                  nl(); string(Atom.toString name); nl(); ppBlock (ppStrm, stms))                  nl(); string(Atom.toString name); nl(); ppBlock (ppStrm, [], body))
             | ppMethod (AST.M_Method(name, stm)) = (  
                 nl(); string(Atom.toString name); nl(); ppBlock (ppStrm, [stm]))  
165            in            in
166              PP.openHBox ppStrm;              PP.openHBox ppStrm;
167                string "actor"; sp(); string(Atom.toString name); sp();                string "actor"; sp(); string(Atom.toString name); sp();
# Line 168  Line 171 
171              nl();              nl();
172              PP.openVBox ppStrm indent;              PP.openVBox ppStrm indent;
173                string "{";                string "{";
174                List.app (fn vdcl => (nl(); ppStateVarDecl ppStrm vdcl)) state;                ppBlock (ppStrm, state, stateInit);
175                List.app ppMethod methods;                List.app ppMethod methods;
176              PP.closeBox ppStrm;              PP.closeBox ppStrm;
177              nl();              nl();
178              string "}";  nl()              string "}";  nl()
179            end            end
180    
181      fun output (outS, S.Program{globals, globalInit, actors}) = let      fun output (outS, S.Program{globals, staticInit, globalInit, actors}) = let
182            val ppStrm = PP.openOut {dst = outS, wid = 120}            val ppStrm = PP.openOut {dst = outS, wid = 120}
183              fun nl () = PP.newline ppStrm
184            in            in
185              PP.openVBox ppStrm (PP.Abs 0);              PP.openVBox ppStrm (PP.Abs 0);
186                PP.string ppStrm "/* Program start */"; PP.newline ppStrm;                PP.string ppStrm "/* Simplified Program start */"; nl();
187                List.app (ppDecl ppStrm) decls;                case staticInit
188                   of S.Block[] => ppBlock (ppStrm, globals, globalInit)
189                    | _ => (
190                        ppBlock (ppStrm, globals, staticInit); nl();
191                        ppBlock (ppStrm, [], globalInit))
192                  (* end case *);
193                  nl();
194                  List.app (ppActor ppStrm) actors;
195                PP.string ppStrm "/* Program end */"; PP.newline ppStrm;                PP.string ppStrm "/* Program end */"; PP.newline ppStrm;
196              PP.closeBox ppStrm;              PP.closeBox ppStrm;
197              PP.closeStream ppStrm              PP.closeStream ppStrm

Legend:
Removed from v.172  
changed lines
  Added in v.227

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