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

SCM Repository

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

Diff of /branches/staging/src/compiler/cl-target/print-as-cl.sml

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

trunk/src/compiler/cl-target/print-as-cl.sml revision 1640, Wed Nov 16 02:19:51 2011 UTC branches/staging/src/compiler/cl-target/print-as-cl.sml revision 2152, Sun Feb 17 19:39:37 2013 UTC
# Line 23  Line 23 
23    
24      type strm = PP.stream      type strm = PP.stream
25    
26        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 89  Line 90 
90                  ppList {pp=str, sep=sp, l = attrs};                  ppList {pp=str, sep=sp, l = attrs};
91                  sp())                  sp())
92            fun ppDecl dcl = (case dcl            fun ppDecl dcl = (case dcl
93                   of CL.D_Comment l => List.app ppComLn l                   of CL.D_Pragma l => (
94                          inHBox (fn () => (
95                            str "#pragma";
96                            List.app (fn s => (sp(); str s)) l));
97                          PP.newline strm)
98                      | CL.D_Comment l => List.app ppComLn l
99                    | CL.D_Verbatim l => List.app str l                    | CL.D_Verbatim l => List.app str l
100                    | CL.D_Var(attrs, ty, x, optInit) => (                    | CL.D_Var(attrs, ty, x, optInit) => (
101                        inHBox (fn () => (                        inHBox (fn () => (
# Line 101  Line 107 
107                          (* end case *);                          (* end case *);
108                          str ";"));                          str ";"));
109                        PP.newline strm)                        PP.newline strm)
110                      | CL.D_Proto(attrs, ty, f, params) => (
111                          inHBox (fn () => (
112                            ppAttrs attrs;
113                            ppTy(ty, SOME f);
114                            sp(); str "(";
115                            ppList {pp=ppParam, sep=fn () => (str ","; sp()), l=params};
116                            str ");"));
117                          PP.newline strm)
118                    | CL.D_Func(attrs, ty, f, params, body) => (                    | CL.D_Func(attrs, ty, f, params, body) => (
119                          PP.openVBox strm indent0;
120                        inHBox (fn () => (                        inHBox (fn () => (
121                          ppAttrs attrs;                          ppAttrs attrs;
122                          ppTy(ty, SOME f);                          ppTy(ty, SOME f);
# Line 109  Line 124 
124                          ppList {pp=ppParam, sep=fn () => (str ","; sp()), l=params};                          ppList {pp=ppParam, sep=fn () => (str ","; sp()), l=params};
125                          str ")"));                          str ")"));
126                        PP.newline strm;                        PP.newline strm;
127                        ppBlock (case body of CL.S_Block stms => stms | stm => [stm]))                          ppBlock (case body of CL.S_Block stms => stms | stm => [stm]);
128                    | CL.D_StructDef(fields, tyName) => (                        PP.closeBox strm;
129                          PP.newline strm)
130                      | CL.D_StructDef(SOME name, fields, NONE) => (
131                          PP.openVBox strm indent0;
132                            inHBox (fn () => (str "struct"; sp(); str name; sp(); str "{"));
133                            PP.openVBox strm indent;
134                              List.app (fn (ty, x) => (
135                                  PP.newline strm;
136                                  inHBox (fn () => (ppTy(ty, SOME x); str ";"))))
137                                fields;
138                            PP.closeBox strm;
139                            PP.newline strm;
140                            str "};";
141                          PP.closeBox strm;
142                          PP.newline strm)
143                      | CL.D_StructDef(optStruct, fields, SOME tyName) => (
144                          PP.openVBox strm indent0;
145                        str "typedef struct {";                        str "typedef struct {";
146                        PP.openVBox strm indent;                        PP.openVBox strm indent;
147                          List.app (fn (ty, x) => (                          List.app (fn (ty, x) => (
# Line 120  Line 151 
151                        PP.closeBox strm;                        PP.closeBox strm;
152                        PP.newline strm;                        PP.newline strm;
153                        inHBox (fn () => (str "}"; sp(); str tyName; str ";"));                        inHBox (fn () => (str "}"; sp(); str tyName; str ";"));
154                            PP.closeBox strm;
155                        PP.newline strm)                        PP.newline strm)
156                  (* end case *))                  (* end case *))
157            and ppParam (CL.PARAM(attrs, ty, x)) = (            and ppParam (CL.PARAM(attrs, ty, x)) = (
# Line 152  Line 184 
184            and ppBlock stms =  (            and ppBlock stms =  (
185                  str "{";                  str "{";
186                  PP.openVBox strm indent;                  PP.openVBox strm indent;
187                    PP.newline strm;                    List.app (fn stm => (PP.newline strm; ppStm stm)) stms;
                   List.app ppStm stms;  
188                  PP.closeBox strm;                  PP.closeBox strm;
189                  str "}"; PP.newline strm)                  PP.newline strm;
190                    str "}")
191            and ppStm stm = (case stm            and ppStm stm = (case stm
192                   of CL.S_Block stms => ppBlock stms                   of CL.S_Block stms => ppBlock stms
193                    | CL.S_Comment l => List.app ppComLn l                    | CL.S_Comment l => List.app ppComLn l
194                    | CL.S_Decl(attrs, ty, x, NONE) => (                    | CL.S_Verbatim [] => ()
195                        inHBox (fn () => (                    | CL.S_Verbatim (stm::stms) => (
196                          str stm;
197                          List.app (fn stm => (PP.newline strm; str stm)) stms)
198                      | CL.S_Decl(attrs, ty, x, NONE) => inHBox (fn () => (
199                          ppAttrs attrs;                          ppAttrs attrs;
200                          ppTy(ty, SOME x); str ";"));                        ppTy(ty, SOME x); str ";"))
201                        PP.newline strm)                    | CL.S_Decl(attrs, ty, x, SOME e) => inHBox (fn () => (
                   | CL.S_Decl(attrs,ty, x, SOME e) => (  
                       inHBox (fn () => (  
202                          ppAttrs attrs;                          ppAttrs attrs;
203                          ppTy(ty, SOME x); sp(); str "="; sp(); ppInit e; str ";"));                        ppTy(ty, SOME x); sp(); str "="; sp(); ppInit e; str ";"))
204                        PP.newline strm)                    | CL.S_Exp e => inHBox (fn () => (ppExp e; str ";"))
                   | CL.S_Exp e => (  
                       inHBox (fn () => (ppExp e; str ";"));  
                       PP.newline strm)  
205                    | CL.S_If(e, blk, CL.S_Block[]) =>                    | CL.S_If(e, blk, CL.S_Block[]) =>
206                        inHBox (fn () => (str "if"; sp(); ppExp e; ppStms blk))                        inHBox (fn () => (str "if"; sp(); ppExp e; ppStms blk))
207                    | CL.S_If(e, blk1, blk2) => (                    | CL.S_If(e, blk1, blk2) => (
208                        inHBox (fn () => (str "if"; sp(); ppExp e)); ppStms blk1;                        PP.openVBox strm indent0;
209                        str "else"; ppStms blk2)                          inHBox (fn () => (str "if"; sp(); ppExp e; ppStms blk1));
210                    | CL.S_While(e, blk) => (                          PP.newline strm;
211                        inHBox (fn () => (str "while"; sp(); ppExp e)); ppStms blk)                          inHBox (fn () => (str "else"; ppStms blk2));
212                    | CL.S_DoWhile(blk, e) => (                        PP.closeBox strm)
213                        str "do"; sp(); ppStms blk;                    | CL.S_While(e, blk) =>
214                        inHBox (fn () => (str "while"; sp(); ppExp e; str ";")))                        inHBox (fn () => (str "while"; sp(); ppExp e; ppStms blk))
215                      | CL.S_DoWhile(blk, e) =>
216                          inHBox (fn () => (
217                            str "do"; ppStms blk; sp(); str "while"; sp(); ppExp e))
218                    | CL.S_For(inits, cond, incrs, blk) => let                    | CL.S_For(inits, cond, incrs, blk) => let
219                        fun ppInit (ty, x, e) = inHBox (fn () => (                        fun ppInit (ty, x, e) = inHBox (fn () => (
220                              ppTy(ty, SOME x);                              ppTy(ty, SOME x);
# Line 193  Line 226 
226                            ppList {pp = ppInit, sep = fn () => str ",", l = inits};                            ppList {pp = ppInit, sep = fn () => str ",", l = inits};
227                            str ";"; sp();                            str ";"; sp();
228                            ppExp cond; str ";"; sp();                            ppExp cond; str ";"; sp();
229                            ppList {pp = ppExp, sep = fn () => str ",", l = incrs}));                            ppList {pp = ppExp, sep = fn () => str ",", l = incrs};
230                            str ")";                            str ")";
231                          ppStms blk                            ppStms blk))
232                        end                        end
233                    | CL.S_Call(f, args) => (                    | CL.S_Call(f, args) => inHBox (fn () => (str f; ppArgs args; str ";"))
234                        inHBox (fn () => (str f; ppArgs args; str ";"));                    | CL.S_Return(SOME e) => inHBox (fn () => (str "return"; sp(); ppExp e; str ";"))
235                        PP.newline strm)                    | CL.S_Return _ => str "return;"
236                    | CL.S_Return(SOME e) => (                    | CL.S_Break => str "break;"
237                        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)  
238                  (* end case *))                  (* end case *))
239            and ppStms (CL.S_Block stms) = (sp(); ppBlock stms)            and ppStms (CL.S_Block stms) = (sp(); ppBlock stms)
240              | ppStms stm = (              | ppStms stm = (
241                  PP.openVBox strm indent;                  PP.openHOVBox strm indent;
242                    PP.newline strm;                    sp ();
243                    ppStm stm;                    ppStm stm;
244                  PP.closeBox strm)                  PP.closeBox strm)
245            and ppExp e = (case e            and ppExp e = (case e

Legend:
Removed from v.1640  
changed lines
  Added in v.2152

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