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 2644, Thu May 29 15:38:32 2014 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 33  Line 34 
34            val str = PP.string strm            val str = PP.string strm
35            fun sp () = PP.space strm 1            fun sp () = PP.space strm 1
36            fun inHBox f = (PP.openHBox strm; f(); PP.closeBox strm)            fun inHBox f = (PP.openHBox strm; f(); PP.closeBox strm)
37            fun ppComLn s = (            fun ppCom s = inHBox (fn () => (str "// "; str s))
38                  inHBox (fn () => (str "// "; str s));            fun ppComLn s = (ppCom s; PP.newline strm)
                 PP.newline strm)  
39            fun ppList {pp, sep, l} = let            fun ppList {pp, sep, l} = let
40                  fun ppList' [] = ()                  fun ppList' [] = ()
41                    | ppList' [x] = pp x                    | ppList' [x] = pp x
# Line 89  Line 89 
89                  ppList {pp=str, sep=sp, l = attrs};                  ppList {pp=str, sep=sp, l = attrs};
90                  sp())                  sp())
91            fun ppDecl dcl = (case dcl            fun ppDecl dcl = (case dcl
92                   of CL.D_Comment l => List.app ppComLn l                   of CL.D_Pragma l => (
93                          inHBox (fn () => (
94                            str "#pragma";
95                            List.app (fn s => (sp(); str s)) l));
96                          PP.newline strm)
97                      | CL.D_Comment l => List.app ppComLn l
98                    | CL.D_Verbatim l => List.app str l                    | CL.D_Verbatim l => List.app str l
99                    | CL.D_Var(attrs, ty, x, optInit) => (                    | CL.D_Var(attrs, ty, x, optInit) => (
100                        inHBox (fn () => (                        inHBox (fn () => (
# Line 101  Line 106 
106                          (* end case *);                          (* end case *);
107                          str ";"));                          str ";"));
108                        PP.newline strm)                        PP.newline strm)
109                      | CL.D_Proto(attrs, ty, f, params) => (
110                          inHBox (fn () => (
111                            ppAttrs attrs;
112                            ppTy(ty, SOME f);
113                            sp(); str "(";
114                            ppList {pp=ppParam, sep=fn () => (str ","; sp()), l=params};
115                            str ");"));
116                          PP.newline strm)
117                    | CL.D_Func(attrs, ty, f, params, body) => (                    | CL.D_Func(attrs, ty, f, params, body) => (
118                          PP.openVBox strm indent0;
119                        inHBox (fn () => (                        inHBox (fn () => (
120                          ppAttrs attrs;                          ppAttrs attrs;
121                          ppTy(ty, SOME f);                          ppTy(ty, SOME f);
# Line 109  Line 123 
123                          ppList {pp=ppParam, sep=fn () => (str ","; sp()), l=params};                          ppList {pp=ppParam, sep=fn () => (str ","; sp()), l=params};
124                          str ")"));                          str ")"));
125                        PP.newline strm;                        PP.newline strm;
126                        ppBlock (case body of CL.S_Block stms => stms | stm => [stm]))                          ppBlock (case body of CL.S_Block stms => stms | stm => [stm]);
127                    | CL.D_StructDef(fields, tyName) => (                        PP.closeBox strm;
128                          PP.newline strm)
129                      | CL.D_StructDef(SOME name, fields, NONE) => (
130                          PP.openVBox strm indent0;
131                            inHBox (fn () => (str "struct"; sp(); str name; sp(); str "{"));
132                            PP.openVBox strm indent;
133                              List.app (fn (ty, x) => (
134                                  PP.newline strm;
135                                  inHBox (fn () => (ppTy(ty, SOME x); str ";"))))
136                                fields;
137                            PP.closeBox strm;
138                            PP.newline strm;
139                            str "};";
140                          PP.closeBox strm;
141                          PP.newline strm)
142                      | CL.D_StructDef(optStruct, fields, SOME tyName) => (
143                          PP.openVBox strm indent0;
144                        str "typedef struct {";                        str "typedef struct {";
145                        PP.openVBox strm indent;                        PP.openVBox strm indent;
146                          List.app (fn (ty, x) => (                          List.app (fn (ty, x) => (
# Line 120  Line 150 
150                        PP.closeBox strm;                        PP.closeBox strm;
151                        PP.newline strm;                        PP.newline strm;
152                        inHBox (fn () => (str "}"; sp(); str tyName; str ";"));                        inHBox (fn () => (str "}"; sp(); str tyName; str ";"));
153                            PP.closeBox strm;
154                        PP.newline strm)                        PP.newline strm)
155                  (* end case *))                  (* end case *))
156            and ppParam (CL.PARAM(attrs, ty, x)) = (            and ppParam (CL.PARAM(attrs, ty, x)) = (
# Line 152  Line 183 
183            and ppBlock stms =  (            and ppBlock stms =  (
184                  str "{";                  str "{";
185                  PP.openVBox strm indent;                  PP.openVBox strm indent;
186                    PP.newline strm;                    List.app (fn stm => (PP.newline strm; ppStm stm)) stms;
                   List.app ppStm stms;  
187                  PP.closeBox strm;                  PP.closeBox strm;
188                  str "}"; PP.newline strm)                  PP.newline strm;
189                    str "}")
190            and ppStm stm = (case stm            and ppStm stm = (case stm
191                   of CL.S_Block stms => ppBlock stms                   of CL.S_Block stms => ppBlock stms
192                    | CL.S_Comment l => List.app ppComLn l                    | CL.S_Comment l => List.app ppCom l
193                    | CL.S_Decl(attrs, ty, x, NONE) => (                    | CL.S_Verbatim [] => ()
194                        inHBox (fn () => (                    | CL.S_Verbatim (stm::stms) => (
195                          str stm;
196                          List.app (fn stm => (PP.newline strm; str stm)) stms)
197                      | CL.S_Decl(attrs, ty, x, NONE) => inHBox (fn () => (
198                          ppAttrs attrs;                          ppAttrs attrs;
199                          ppTy(ty, SOME x); str ";"));                        ppTy(ty, SOME x); str ";"))
200                        PP.newline strm)                    | CL.S_Decl(attrs, ty, x, SOME e) => inHBox (fn () => (
                   | CL.S_Decl(attrs,ty, x, SOME e) => (  
                       inHBox (fn () => (  
201                          ppAttrs attrs;                          ppAttrs attrs;
202                          ppTy(ty, SOME x); sp(); str "="; sp(); ppInit e; str ";"));                        ppTy(ty, SOME x); sp(); str "="; sp(); ppInit e; str ";"))
203                        PP.newline strm)                    | CL.S_Exp e => inHBox (fn () => (ppExp e; str ";"))
                   | CL.S_Exp e => (  
                       inHBox (fn () => (ppExp e; str ";"));  
                       PP.newline strm)  
204                    | CL.S_If(e, blk, CL.S_Block[]) =>                    | CL.S_If(e, blk, CL.S_Block[]) =>
205                        inHBox (fn () => (str "if"; sp(); ppExp e; ppStms blk))                        inHBox (fn () => (str "if"; sp(); ppExp e; ppStms blk))
206                    | CL.S_If(e, blk1, blk2) => (                    | CL.S_If(e, blk1, blk2) => (
207                        inHBox (fn () => (str "if"; sp(); ppExp e)); ppStms blk1;                        PP.openVBox strm indent0;
208                        str "else"; ppStms blk2)                          inHBox (fn () => (str "if"; sp(); ppExp e; ppStms blk1));
209                    | CL.S_While(e, blk) => (                          PP.newline strm;
210                        inHBox (fn () => (str "while"; sp(); ppExp e)); ppStms blk)                          inHBox (fn () => (str "else"; ppStms blk2));
211                    | CL.S_DoWhile(blk, e) => (                        PP.closeBox strm)
212                        str "do"; sp(); ppStms blk;                    | CL.S_While(e, blk) =>
213                        inHBox (fn () => (str "while"; sp(); ppExp e; str ";")))                        inHBox (fn () => (str "while"; sp(); ppExp e; ppStms blk))
214                      | CL.S_DoWhile(blk, e) =>
215                          inHBox (fn () => (
216                            str "do"; ppStms blk; sp(); str "while"; sp(); ppExp e))
217                    | CL.S_For(inits, cond, incrs, blk) => let                    | CL.S_For(inits, cond, incrs, blk) => let
218                        fun ppInit (ty, x, e) = inHBox (fn () => (                        fun ppInit (ty, x, e) = inHBox (fn () => (
219                              ppTy(ty, SOME x);                              ppTy(ty, SOME x);
# Line 193  Line 225 
225                            ppList {pp = ppInit, sep = fn () => str ",", l = inits};                            ppList {pp = ppInit, sep = fn () => str ",", l = inits};
226                            str ";"; sp();                            str ";"; sp();
227                            ppExp cond; str ";"; sp();                            ppExp cond; str ";"; sp();
228                            ppList {pp = ppExp, sep = fn () => str ",", l = incrs}));                            ppList {pp = ppExp, sep = fn () => str ",", l = incrs};
229                            str ")";                            str ")";
230                          ppStms blk                            ppStms blk))
231                        end                        end
232                    | CL.S_Call(f, args) => (                    | CL.S_Call(f, args) => inHBox (fn () => (str f; ppArgs args; str ";"))
233                        inHBox (fn () => (str f; ppArgs args; str ";"));                    | CL.S_Return(SOME e) => inHBox (fn () => (str "return"; sp(); ppExp e; str ";"))
234                        PP.newline strm)                    | CL.S_Return _ => str "return;"
235                    | CL.S_Return(SOME e) => (                    | CL.S_Break => str "break;"
236                        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)  
237                  (* end case *))                  (* end case *))
238            and ppStms (CL.S_Block stms) = (sp(); ppBlock stms)            and ppStms (CL.S_Block stms) = (sp(); ppBlock stms)
239              | ppStms stm = (              | ppStms stm = (
240                  PP.openVBox strm indent;                  PP.openHOVBox strm indent;
241                    PP.newline strm;                    sp ();
242                    ppStm stm;                    ppStm stm;
243                  PP.closeBox strm)                  PP.closeBox strm)
244            and ppExp e = (case e            and ppExp e = (case e

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

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