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 197, Mon Aug 2 20:51:47 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 80  Line 80 
80    
81      and ppArgs (ppStrm, args) = ppList ppVar ("(", ",", ")") (ppStrm, args)      and ppArgs (ppStrm, args) = ppList ppVar ("(", ",", ")") (ppStrm, args)
82    
83      fun ppBlock (ppStrm, stms) = let      fun ppBlock (ppStrm, vars, S.Block stms) = let
84            fun sp () = PP.space ppStrm 1            fun sp () = PP.space ppStrm 1
85            fun nl () = PP.newline ppStrm            fun nl () = PP.newline ppStrm
86            val string = PP.string ppStrm            val string = PP.string ppStrm
87            fun var x = string(Var.nameOf x)            fun var x = string(Var.uniqueNameOf x)
88            fun ppStmt stmt = (case stmt            fun ppStmt stmt = (case stmt
89                   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[]) => (  
90                        PP.openHBox ppStrm;                        PP.openHBox ppStrm;
91                          string "if"; sp(); ppExp(ppStrm, e);                          var x; sp(); string "="; sp(); ppExp(ppStrm, e); string ";";
92                          sp(); ppBlock (ppStrm, stms);                        PP.closeBox ppStrm;
93                        PP.closeBox ppStrm)                        nl())
94                    | AST.S_IfThenElse(e, s1, AST.S_Block[]) => (                    | S.S_IfThenElse(x, S.Block[s1], S.Block[]) => (
95                        PP.openVBox ppStrm indent;                        PP.openVBox ppStrm indent;
96                          PP.openHBox ppStrm;                          PP.openHBox ppStrm;
97                            string "if"; sp(); ppExp(ppStrm, e);                            string "if"; sp(); ppVar(ppStrm, x);
98                          PP.closeBox ppStrm;                          PP.closeBox ppStrm;
99                          nl();                          nl();
100                          ppStmt s1;                          ppStmt s1;
101                        PP.closeBox ppStrm;                        PP.closeBox ppStrm;
102                        nl())                        nl())
103                    | AST.S_IfThenElse(e, AST.S_Block stms1, AST.S_Block stms2) => (                    | S.S_IfThenElse(x, blk, S.Block[]) => (
104                        PP.openHBox ppStrm;                        PP.openHBox ppStrm;
105                          string "if"; sp(); ppExp(ppStrm, e);                          string "if"; sp(); ppVar(ppStrm, x);
106                          sp(); ppBlock (ppStrm, stms1);                          sp(); ppBlock (ppStrm, [], blk);
                       PP.closeBox ppStrm;  
                       PP.openHBox ppStrm;  
                         string "else"; sp(); ppBlock (ppStrm, stms2);  
107                        PP.closeBox ppStrm)                        PP.closeBox ppStrm)
108                    | 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) => (  
109                        PP.openVBox ppStrm indent;                        PP.openVBox ppStrm indent;
110                          PP.openHBox ppStrm;                          PP.openHBox ppStrm;
111                            string "if"; sp(); ppExp(ppStrm, e);                            string "if"; sp(); ppVar(ppStrm, x);
112                          PP.closeBox ppStrm;                          PP.closeBox ppStrm;
113                          nl();                          nl();
114                          ppStmt s1;                          ppStmt s1;
# Line 126  Line 119 
119                          ppStmt s2;                          ppStmt s2;
120                        PP.closeBox ppStrm;                        PP.closeBox ppStrm;
121                        nl())                        nl())
122                    | AST.S_Assign(x, e) => (                    | S.S_IfThenElse(x, blk1, blk2) => (
123                        PP.openHBox ppStrm;                        PP.openHBox ppStrm;
124                          var x; sp(); string "="; sp(); ppExp(ppStrm, e); string ";";                          string "if"; sp(); ppVar(ppStrm, x);
125                            sp(); ppBlock (ppStrm, [], blk1);
126                        PP.closeBox ppStrm;                        PP.closeBox ppStrm;
127                        nl())                        PP.openHBox ppStrm;
128                    | AST.S_New(actor, args) => (                          string "else"; sp(); ppBlock (ppStrm, [], blk2);
129                          PP.closeBox ppStrm)
130                      | S.S_New(actor, args) => (
131                        PP.openHBox ppStrm;                        PP.openHBox ppStrm;
132                          string "new"; sp(); string(Atom.toString actor); sp();                          string "new"; sp(); string(Atom.toString actor); sp();
133                          ppArgs (ppStrm, args); string ";";                          ppArgs (ppStrm, args); string ";";
134                        PP.closeBox ppStrm;                        PP.closeBox ppStrm;
135                        nl())                        nl())
136                    | AST.S_Die => (string "die;"; nl())                    | S.S_Die => (string "die;"; nl())
137                    | AST.S_Stabilize => (string "stabilize;"; nl())                    | S.S_Stabilize => (string "stabilize;"; nl())
138                  (* end case *))                  (* end case *))
139            in            in
140              PP.openVBox ppStrm (PP.Abs 0);              PP.openVBox ppStrm (PP.Abs 0);
141                string "{"; nl();                string "{"; nl();
142                PP.openVBox ppStrm indent;                PP.openVBox ppStrm indent;
143                    List.app (fn vdcl => (ppVarDecl ppStrm vdcl; nl())) vars;
144                  List.app ppStmt stms;                  List.app ppStmt stms;
145                PP.closeBox ppStrm;                PP.closeBox ppStrm;
146                string "}"; nl();                string "}"; nl();
147              PP.closeBox ppStrm              PP.closeBox ppStrm
148            end            end
149    
150      fun ppActor (ppStrm, S.Actor{name, params, state, stateInit, methods}) = let      fun ppActor ppStrm (S.Actor{name, params, state, stateInit, methods}) = let
151            fun sp () = PP.space ppStrm 1            fun sp () = PP.space ppStrm 1
152            fun nl () = PP.newline ppStrm            fun nl () = PP.newline ppStrm
153            val string = PP.string ppStrm            val string = PP.string ppStrm
154            fun var x = string(Var.nameOf x)            fun var x = string(Var.nameOf x)
155            fun ppMethod (AST.M_Method(name, AST.S_Block stms)) = (            fun ppMethod (S.Method(name, body)) = (
156                  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]))  
157            in            in
158              PP.openHBox ppStrm;              PP.openHBox ppStrm;
159                string "actor"; sp(); string(Atom.toString name); sp();                string "actor"; sp(); string(Atom.toString name); sp();
# Line 168  Line 163 
163              nl();              nl();
164              PP.openVBox ppStrm indent;              PP.openVBox ppStrm indent;
165                string "{";                string "{";
166                List.app (fn vdcl => (nl(); ppStateVarDecl ppStrm vdcl)) state;                ppBlock (ppStrm, state, stateInit);
167                List.app ppMethod methods;                List.app ppMethod methods;
168              PP.closeBox ppStrm;              PP.closeBox ppStrm;
169              nl();              nl();
# Line 179  Line 174 
174            val ppStrm = PP.openOut {dst = outS, wid = 120}            val ppStrm = PP.openOut {dst = outS, wid = 120}
175            in            in
176              PP.openVBox ppStrm (PP.Abs 0);              PP.openVBox ppStrm (PP.Abs 0);
177                PP.string ppStrm "/* Program start */"; PP.newline ppStrm;                PP.string ppStrm "/* Simplified Program start */"; PP.newline ppStrm;
178                List.app (ppDecl ppStrm) decls;                ppBlock (ppStrm, globals, globalInit);
179                  List.app (ppActor ppStrm) actors;
180                PP.string ppStrm "/* Program end */"; PP.newline ppStrm;                PP.string ppStrm "/* Program end */"; PP.newline ppStrm;
181              PP.closeBox ppStrm;              PP.closeBox ppStrm;
182              PP.closeStream ppStrm              PP.closeStream ppStrm

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

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