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

SCM Repository

[diderot] Diff of /branches/staging/src/compiler/c-util/print-as-c.sml
ViewVC logotype

Diff of /branches/staging/src/compiler/c-util/print-as-c.sml

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

revision 1930, Tue Jun 26 13:13:39 2012 UTC revision 2115, Sat Jan 12 15:52:27 2013 UTC
# Line 26  Line 26 
26      val indent0 = (PP.Abs 0)      val indent0 = (PP.Abs 0)
27      val indent = (PP.Abs 4)     (* standard indentation amount *)      val indent = (PP.Abs 4)     (* standard indentation amount *)
28    
29      fun new outs = PP.openOut {dst = outs, wid = 90}      fun new outs = PP.openOut {dst = outs, wid = 120}
30    
31      val close = PP.closeStream      val close = PP.closeStream
32    
# Line 120  Line 120 
120                            str ")"));                            str ")"));
121                          PP.newline strm;                          PP.newline strm;
122                          ppBlock (case body of CL.S_Block stms => stms | stm => [stm]);                          ppBlock (case body of CL.S_Block stms => stms | stm => [stm]);
123                        PP.closeBox strm)                        PP.closeBox strm;
124                          PP.newline strm)
125                    | CL.D_StructDef(SOME name, fields, NONE) => (                    | CL.D_StructDef(SOME name, fields, NONE) => (
126                        PP.openVBox strm indent0;                        PP.openVBox strm indent0;
127                          inHBox (fn () => (str "struct"; sp(); str name; sp(); str "{"));                          inHBox (fn () => (str "struct"; sp(); str name; sp(); str "{"));
# Line 178  Line 179 
179            and ppBlock stms =  (            and ppBlock stms =  (
180                  str "{";                  str "{";
181                  PP.openVBox strm indent;                  PP.openVBox strm indent;
182                    PP.newline strm;                    List.app (fn stm => (PP.newline strm; ppStm stm)) stms;
                   List.app ppStm stms;  
183                  PP.closeBox strm;                  PP.closeBox strm;
184                  str "}"; PP.newline strm)                  PP.newline strm;
185                    str "}")
186            and ppStm stm = (case stm            and ppStm stm = (case stm
187                   of CL.S_Block stms => ppBlock stms                   of CL.S_Block stms => ppBlock stms
188                    | CL.S_Comment l => List.app ppComLn l                    | CL.S_Comment l => List.app ppComLn l
189                    | CL.S_Decl(attrs, ty, x, NONE) => (                    | CL.S_Decl(attrs, ty, x, NONE) => inHBox (fn () => (
                       inHBox ( fn () => (  
190                          ppAttrs attrs;                          ppAttrs attrs;
191                          ppTy(ty, SOME x); str ";"));                        ppTy(ty, SOME x); str ";"))
192                        PP.newline strm)                    | CL.S_Decl(attrs, ty, x, SOME e) => inHBox (fn () => (
                   | CL.S_Decl(attrs, ty, x, SOME e) => (  
                       inHBox (fn () => (  
193                          ppAttrs attrs;                          ppAttrs attrs;
194                          ppTy(ty, SOME x); sp(); str "="; sp(); ppInit e; str ";"));                        ppTy(ty, SOME x); sp(); str "="; sp(); ppInit e; str ";"))
195                        PP.newline strm)                    | CL.S_Exp e => inHBox (fn () => (ppExp e; str ";"))
                   | CL.S_Exp e => (  
                       inHBox (fn () => (ppExp e; str ";"));  
                       PP.newline strm)  
196                    | CL.S_If(e, blk, CL.S_Block[]) =>                    | CL.S_If(e, blk, CL.S_Block[]) =>
197                        inHBox (fn () => (str "if"; sp(); ppExp e; ppStms blk))                        inHBox (fn () => (str "if"; sp(); ppExp e; ppStms blk))
198                    | CL.S_If(e, blk1, blk2) => (                    | CL.S_If(e, blk1, blk2) => (
199                        inHBox (fn () => (str "if"; sp(); ppExp e)); ppStms blk1;                        PP.openVBox strm indent0;
200                        str "else"; ppStms blk2)                          inHBox (fn () => (str "if"; sp(); ppExp e; ppStms blk1));
201                    | CL.S_While(e, blk) => (                          PP.newline strm;
202                        inHBox (fn () => (str "while"; sp(); ppExp e)); ppStms blk)                          inHBox (fn () => (str "else"; ppStms blk2));
203                    | CL.S_DoWhile(blk, e) => (                        PP.closeBox strm)
204                        str "do"; sp(); ppStms blk;                    | CL.S_While(e, blk) =>
205                        inHBox (fn () => (str "while"; sp(); ppExp e)))                        inHBox (fn () => (str "while"; sp(); ppExp e; ppStms blk))
206                      | CL.S_DoWhile(blk, e) =>
207                          inHBox (fn () => (
208                            str "do"; ppStms blk; sp(); str "while"; sp(); ppExp e))
209                    | CL.S_For(inits, cond, incrs, blk) => let                    | CL.S_For(inits, cond, incrs, blk) => let
210                        fun ppInit (ty, x, e) = inHBox (fn () => (                        fun ppInit (ty, x, e) = inHBox (fn () => (
211                              ppTy(ty, SOME x);                              ppTy(ty, SOME x);
# Line 219  Line 217 
217                            ppList {pp = ppInit, sep = fn () => str ",", l = inits};                            ppList {pp = ppInit, sep = fn () => str ",", l = inits};
218                            str ";"; sp();                            str ";"; sp();
219                            ppExp cond; str ";"; sp();                            ppExp cond; str ";"; sp();
220                            ppList {pp = ppExp, sep = fn () => str ",", l = incrs}));                            ppList {pp = ppExp, sep = fn () => str ",", l = incrs};
221                            str ")";                            str ")";
222                          ppStms blk                            ppStms blk))
223                        end                        end
224                    | CL.S_Call(f, args) => (                    | CL.S_Call(f, args) => inHBox (fn () => (str f; ppArgs args; str ";"))
225                        inHBox (fn () => (str f; ppArgs args; str ";"));                    | CL.S_Return(SOME e) => inHBox (fn () => (str "return"; sp(); ppExp e; str ";"))
226                        PP.newline strm)                    | CL.S_Return _ => str "return;"
227                    | CL.S_Return(SOME e) => (                    | CL.S_Break => str "break;"
228                        inHBox (fn () => (str "return"; sp(); ppExp e; str ";"));                    | CL.S_Continue => str "continue;"
                       PP.newline strm)  
                   | CL.S_Return _ => (str "return;"; PP.newline strm)  
                   | CL.S_Break => (str "break;"; PP.newline strm)  
                   | CL.S_Continue => (str "continue;"; PP.newline strm)  
229                  (* end case *))                  (* end case *))
230            and ppStms (CL.S_Block stms) = (sp(); ppBlock stms)            and ppStms (CL.S_Block stms) = (sp(); ppBlock stms)
231              | ppStms stm = (              | ppStms stm = (
232                  PP.openVBox strm indent;                  PP.openHOVBox strm indent;
233                    PP.newline strm;                    sp ();
234                    ppStm stm;                    ppStm stm;
235                  PP.closeBox strm)                  PP.closeBox strm)
236            and ppExp e = (case e            and ppExp e = (case e

Legend:
Removed from v.1930  
changed lines
  Added in v.2115

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