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 221, Tue Aug 3 20:13:55 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                  (* end case *))                  (* end case *))
85            in            in
86              pp e              pp e
# Line 80  Line 88 
88    
89      and ppArgs (ppStrm, args) = ppList ppVar ("(", ",", ")") (ppStrm, args)      and ppArgs (ppStrm, args) = ppList ppVar ("(", ",", ")") (ppStrm, args)
90    
91      fun ppBlock (ppStrm, stms) = let      fun ppBlock (ppStrm, vars, S.Block stms) = let
92            fun sp () = PP.space ppStrm 1            fun sp () = PP.space ppStrm 1
93            fun nl () = PP.newline ppStrm            fun nl () = PP.newline ppStrm
94            val string = PP.string ppStrm            val string = PP.string ppStrm
95            fun var x = string(Var.nameOf x)            fun var x = string(Var.uniqueNameOf x)
96            fun ppStmt stmt = (case stmt            fun ppStmt stmt = (case stmt
97                   of AST.S_Block stms => ppBlock (ppStrm, stms)                   of S.S_Assign(x, e) => (
                   | AST.S_Decl vdcl => (ppVarDecl ppStrm vdcl; nl())  
                   | AST.S_IfThenElse(e, AST.S_Block stms, AST.S_Block[]) => (  
98                        PP.openHBox ppStrm;                        PP.openHBox ppStrm;
99                          string "if"; sp(); ppExp(ppStrm, e);                          var x; sp(); string "="; sp(); ppExp(ppStrm, e); string ";";
100                          sp(); ppBlock (ppStrm, stms);                        PP.closeBox ppStrm;
101                        PP.closeBox ppStrm)                        nl())
102                    | AST.S_IfThenElse(e, s1, AST.S_Block[]) => (                    | S.S_IfThenElse(x, S.Block[s1], S.Block[]) => (
103                        PP.openVBox ppStrm indent;                        PP.openVBox ppStrm indent;
104                          PP.openHBox ppStrm;                          PP.openHBox ppStrm;
105                            string "if"; sp(); ppExp(ppStrm, e);                            string "if"; sp(); ppVar(ppStrm, x);
106                          PP.closeBox ppStrm;                          PP.closeBox ppStrm;
107                          nl();                          nl();
108                          ppStmt s1;                          ppStmt s1;
109                        PP.closeBox ppStrm;                        PP.closeBox ppStrm;
110                        nl())                        nl())
111                    | AST.S_IfThenElse(e, AST.S_Block stms1, AST.S_Block stms2) => (                    | S.S_IfThenElse(x, blk, S.Block[]) => (
112                        PP.openHBox ppStrm;                        PP.openHBox ppStrm;
113                          string "if"; sp(); ppExp(ppStrm, e);                          string "if"; sp(); ppVar(ppStrm, x);
114                          sp(); ppBlock (ppStrm, stms1);                          sp(); ppBlock (ppStrm, [], blk);
                       PP.closeBox ppStrm;  
                       PP.openHBox ppStrm;  
                         string "else"; sp(); ppBlock (ppStrm, stms2);  
115                        PP.closeBox ppStrm)                        PP.closeBox ppStrm)
116                    | 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) => (  
117                        PP.openVBox ppStrm indent;                        PP.openVBox ppStrm indent;
118                          PP.openHBox ppStrm;                          PP.openHBox ppStrm;
119                            string "if"; sp(); ppExp(ppStrm, e);                            string "if"; sp(); ppVar(ppStrm, x);
120                          PP.closeBox ppStrm;                          PP.closeBox ppStrm;
121                          nl();                          nl();
122                          ppStmt s1;                          ppStmt s1;
# Line 126  Line 127 
127                          ppStmt s2;                          ppStmt s2;
128                        PP.closeBox ppStrm;                        PP.closeBox ppStrm;
129                        nl())                        nl())
130                    | AST.S_Assign(x, e) => (                    | S.S_IfThenElse(x, blk1, blk2) => (
131                        PP.openHBox ppStrm;                        PP.openHBox ppStrm;
132                          var x; sp(); string "="; sp(); ppExp(ppStrm, e); string ";";                          string "if"; sp(); ppVar(ppStrm, x);
133                            sp(); ppBlock (ppStrm, [], blk1);
134                        PP.closeBox ppStrm;                        PP.closeBox ppStrm;
135                        nl())                        PP.openHBox ppStrm;
136                    | AST.S_New(actor, args) => (                          string "else"; sp(); ppBlock (ppStrm, [], blk2);
137                          PP.closeBox ppStrm)
138                      | S.S_New(actor, args) => (
139                        PP.openHBox ppStrm;                        PP.openHBox ppStrm;
140                          string "new"; sp(); string(Atom.toString actor); sp();                          string "new"; sp(); string(Atom.toString actor); sp();
141                          ppArgs (ppStrm, args); string ";";                          ppArgs (ppStrm, args); string ";";
142                        PP.closeBox ppStrm;                        PP.closeBox ppStrm;
143                        nl())                        nl())
144                    | AST.S_Die => (string "die;"; nl())                    | S.S_Die => (string "die;"; nl())
145                    | AST.S_Stabilize => (string "stabilize;"; nl())                    | S.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 "{"; nl();
150                PP.openVBox ppStrm indent;                PP.openVBox ppStrm indent;
151                    List.app (fn vdcl => (ppVarDecl ppStrm vdcl; nl())) vars;
152                  List.app ppStmt stms;                  List.app ppStmt stms;
153                PP.closeBox ppStrm;                PP.closeBox ppStrm;
154                string "}"; nl();                string "}"; nl();
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();
# Line 179  Line 182 
182            val ppStrm = PP.openOut {dst = outS, wid = 120}            val ppStrm = PP.openOut {dst = outS, wid = 120}
183            in            in
184              PP.openVBox ppStrm (PP.Abs 0);              PP.openVBox ppStrm (PP.Abs 0);
185                PP.string ppStrm "/* Program start */"; PP.newline ppStrm;                PP.string ppStrm "/* Simplified Program start */"; PP.newline ppStrm;
186                List.app (ppDecl ppStrm) decls;                ppBlock (ppStrm, globals, globalInit);
187                  List.app (ppActor ppStrm) actors;
188                PP.string ppStrm "/* Program end */"; PP.newline ppStrm;                PP.string ppStrm "/* Program end */"; PP.newline ppStrm;
189              PP.closeBox ppStrm;              PP.closeBox ppStrm;
190              PP.closeStream ppStrm              PP.closeStream ppStrm

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

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