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

SCM Repository

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

Diff of /branches/vis15/src/compiler/cxx-util/print-as-cxx.sml

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

revision 3998, Sun Jun 19 17:12:03 2016 UTC revision 3999, Sun Jun 19 17:36:57 2016 UTC
# Line 35  Line 35 
35              | RawTypes.RT_Double => "double"              | RawTypes.RT_Double => "double"
36            (* end case *))            (* end case *))
37    
38      fun output (strm, decl) = let      fun output (_, CL.D_Verbatim[]) = ()
39          | output (strm, decl) = let
40            val str = PP.string strm            val str = PP.string strm
41            fun sp () = PP.space strm 1            fun sp () = PP.space strm 1
42            fun inHBox f = (PP.openHBox strm; f(); PP.closeBox strm)            fun inHBox f = (PP.openHBox strm; f(); PP.closeBox strm)
# Line 104  Line 105 
105                  sp())                  sp())
106            fun ppDecl (inClass, dcl) = (case dcl            fun ppDecl (inClass, dcl) = (case dcl
107                   of CL.D_Pragma l => (                   of CL.D_Pragma l => (
108                          if inClass then PP.newline strm else ();
109                        inHBox (fn () => (                        inHBox (fn () => (
110                          str "#pragma";                          str "#pragma";
111                          List.app (fn s => (sp(); str s)) l));                          List.app (fn s => (sp(); str s)) l)))
                       PP.newline strm)  
112                    | CL.D_Comment l => List.app ppComLn l                    | CL.D_Comment l => List.app ppComLn l
113                    | CL.D_Verbatim l => List.app str l                    | CL.D_Verbatim [] => ()
114                      | CL.D_Verbatim l => (if inClass then PP.newline strm else (); List.app str l)
115                    | CL.D_Var(attrs, ty, x, optInit) => (                    | CL.D_Var(attrs, ty, x, optInit) => (
116                          if inClass then PP.newline strm else ();
117                        inHBox (fn () => (                        inHBox (fn () => (
118                          ppAttrs attrs;                          ppAttrs attrs;
119                          ppTy (ty, SOME x);                          ppTy (ty, SOME x);
# Line 118  Line 121 
121                           of SOME init => (sp(); str "="; sp(); ppInit init)                           of SOME init => (sp(); str "="; sp(); ppInit init)
122                            | NONE => ()                            | NONE => ()
123                          (* end case *);                          (* end case *);
124                          str ";"));                          str ";")))
                       PP.newline strm)  
125                    | CL.D_Proto(attrs, ty, f, params) => (                    | CL.D_Proto(attrs, ty, f, params) => (
126                          if inClass then PP.newline strm else ();
127                        inHBox (fn () => (                        inHBox (fn () => (
128                          ppAttrs attrs;                          ppAttrs attrs;
129                          ppTy(ty, SOME f);                          ppTy(ty, SOME f);
130                          sp(); str "(";                          sp(); str "(";
131                          ppCommaList {pp=ppParam, l=params};                          ppCommaList {pp=ppParam, l=params};
132                          str ");"));                          str ");")))
                       PP.newline strm)  
133                    | CL.D_Func(attrs, ty, f, params, body) => (                    | CL.D_Func(attrs, ty, f, params, body) => (
134                          if inClass then PP.newline strm else ();
135                        PP.openVBox strm indent0;                        PP.openVBox strm indent0;
136                          inHBox (fn () => (                          inHBox (fn () => (
137                            ppAttrs attrs;                            ppAttrs attrs;
# Line 136  Line 139 
139                            sp(); str "(";                            sp(); str "(";
140                            ppCommaList {pp=ppParam, l=params};                            ppCommaList {pp=ppParam, l=params};
141                            str ")"));                            str ")"));
142                          PP.newline strm;                          if inClass then PP.newline strm else ();
143                          ppBody body;                          ppBody body;
144                        PP.closeBox strm;                        PP.closeBox strm)
                       PP.newline strm)  
145                    | CL.D_Constr(attrs, namespace, cls, params, inits, body) => (                    | CL.D_Constr(attrs, namespace, cls, params, inits, body) => (
146                          if inClass then PP.newline strm else ();
147                        PP.openVBox strm indent0;                        PP.openVBox strm indent0;
148                          PP.openHBox strm;                          PP.openHBox strm;
149                            ppAttrs attrs;                            ppAttrs attrs;
# Line 169  Line 172 
172                              | NONE => ()                              | NONE => ()
173                            (* end case *);                            (* end case *);
174                          (* NOTE: HBox has been closed *)                          (* NOTE: HBox has been closed *)
175                        PP.closeBox strm;                        PP.closeBox strm)
                       PP.newline strm)  
176                    | CL.D_Destr(attrs, namespace, cls, body) => (                    | CL.D_Destr(attrs, namespace, cls, body) => (
177                          if inClass then PP.newline strm else ();
178                        PP.openVBox strm indent0;                        PP.openVBox strm indent0;
179                          PP.openHBox strm;                          PP.openHBox strm;
180                            ppAttrs attrs;                            ppAttrs attrs;
# Line 179  Line 182 
182                              then (str "~"; str cls)                              then (str "~"; str cls)
183                              else (                              else (
184                                Option.app (fn ns => (str ns; str "::")) namespace;                                Option.app (fn ns => (str ns; str "::")) namespace;
185                                str "~"; str cls; str "::"; str cls);                                str cls; str "::"; str "~"; str cls);
186                            sp();                            sp();
187                            case body                            case body
188                             of NONE => (str "();"; PP.closeBox strm)                             of NONE => (str "();"; PP.closeBox strm)
# Line 188  Line 191 
191                                  str "()"; PP.closeBox strm; PP.newline strm; ppBody body)                                  str "()"; PP.closeBox strm; PP.newline strm; ppBody body)
192                            (* end case *);                            (* end case *);
193                          (* NOTE: HBox has been closed *)                          (* NOTE: HBox has been closed *)
194                        PP.closeBox strm;                        PP.closeBox strm)
                       PP.newline strm)  
195                    | CL.D_StructDef(SOME name, fields, NONE) => (                    | CL.D_StructDef(SOME name, fields, NONE) => (
196                          if inClass then PP.newline strm else ();
197                        PP.openVBox strm indent0;                        PP.openVBox strm indent0;
198                          inHBox (fn () => (str "struct"; sp(); str name; sp(); str "{"));                          inHBox (fn () => (str "struct"; sp(); str name; sp(); str "{"));
199                          PP.openVBox strm indent;                          PP.openVBox strm indent;
# Line 201  Line 204 
204                          PP.closeBox strm;                          PP.closeBox strm;
205                          PP.newline strm;                          PP.newline strm;
206                          str "};";                          str "};";
207                        PP.closeBox strm;                        PP.closeBox strm)
                       PP.newline strm)  
208                    | CL.D_StructDef(optStruct, fields, SOME tyName) => (                    | CL.D_StructDef(optStruct, fields, SOME tyName) => (
209                          if inClass then PP.newline strm else ();
210                        PP.openVBox strm indent0;                        PP.openVBox strm indent0;
211                          str "typedef struct {";                          str "typedef struct {";
212                          PP.openVBox strm indent;                          PP.openVBox strm indent;
# Line 214  Line 217 
217                          PP.closeBox strm;                          PP.closeBox strm;
218                          PP.newline strm;                          PP.newline strm;
219                          inHBox (fn () => (str "}"; sp(); str tyName; str ";"));                          inHBox (fn () => (str "}"; sp(); str tyName; str ";"));
220                          PP.closeBox strm;                        PP.closeBox strm)
                       PP.newline strm)  
221                    | CL.D_StructDef(NONE, _, NONE) => raise Fail "unamed struct"                    | CL.D_StructDef(NONE, _, NONE) => raise Fail "unamed struct"
222                    | CL.D_ClassDef{name, args, from, public, protected=[], private=[]} => (                    | CL.D_ClassDef{name, args, from, public, protected=[], private=[]} => (
223                          if inClass then PP.newline strm else ();
224                        PP.openVBox strm indent0;                        PP.openVBox strm indent0;
225                          inHBox (fn () => (                          inHBox (fn () => (
226                            str "struct"; sp(); str name;                            str "struct"; sp(); str name;
# Line 225  Line 228 
228                            Option.map (fn base => (sp(); str ":"; sp(); str base)) from;                            Option.map (fn base => (sp(); str ":"; sp(); str base)) from;
229                            sp(); str "{"));                            sp(); str "{"));
230                          PP.openVBox strm indent;                          PP.openVBox strm indent;
                           PP.newline strm;  
231                            List.app (fn dcl => ppDecl (true, dcl)) public;                            List.app (fn dcl => ppDecl (true, dcl)) public;
232                          PP.closeBox strm;                          PP.closeBox strm;
233                          PP.newline strm;                          PP.newline strm;
234                          str "};";                          str "};";
235                        PP.closeBox strm;                        PP.closeBox strm)
                       PP.newline strm)  
236                    | CL.D_ClassDef{name, args, from, public, protected, private} =>                    | CL.D_ClassDef{name, args, from, public, protected, private} =>
237                        raise Fail "FIXME: ClassDef"                        raise Fail "FIXME: ClassDef"
238                    | CL.D_Template(params, dcl) => let                    | CL.D_Template(params, dcl) => let
# Line 239  Line 240 
240                          | ppParam (CL.ConstParam(ty, name)) = (                          | ppParam (CL.ConstParam(ty, name)) = (
241                              str "const"; sp(); ppTy (ty, NONE); sp(); str name)                              str "const"; sp(); ppTy (ty, NONE); sp(); str name)
242                        in                        in
243                            if inClass then PP.newline strm else ();
244                          PP.openVBox strm indent0;                          PP.openVBox strm indent0;
245                            inHBox (fn () => (                            inHBox (fn () => (
246                              str "template"; sp(); str "<";                              str "template"; sp(); str "<";
247                              ppCommaList {pp = ppParam, l = params};                              ppCommaList {pp = ppParam, l = params};
248                              str ">"));                              str ">"));
                           PP.newline strm;  
249                            ppDecl (inClass, dcl);                            ppDecl (inClass, dcl);
250                          PP.closeBox strm                          PP.closeBox strm
251                        end                        end
252                    | CL.D_Typedef(name, ty) => (                    | CL.D_Typedef(name, ty) => (
253                          if inClass then PP.newline strm else ();
254                        inHBox (fn () => (                        inHBox (fn () => (
255                          str "using"; sp(); str name; sp(); str"="; sp(); ppTy(ty, NONE); str ";"));                          str "using"; sp(); str name; sp(); str"="; sp(); ppTy(ty, NONE); str ";")))
                       PP.newline strm)  
256                    | CL.D_Namespace(name, dcls) => (                    | CL.D_Namespace(name, dcls) => (
257                        if inClass then raise Fail "unexpected namespace inside class decl" else ();                        if inClass then raise Fail "unexpected namespace inside class decl" else ();
258                        PP.openVBox strm indent0;                        PP.openVBox strm indent0;
259                          inHBox (fn () => (str "namespace"; sp(); str name; sp(); str "{"));                          inHBox (fn () => (str "namespace"; sp(); str name; sp(); str "{"));
260                          PP.openVBox strm indent;                          PP.openVBox strm indent;
261                            List.app (fn dcl => (PP.newline strm; ppDecl(false, dcl))) dcls;                            List.app
262                                (fn CL.D_Verbatim[] => ()
263                                  | dcl => (PP.newline strm; ppDecl(false, dcl))
264                                ) dcls;
265                          PP.closeBox strm;                          PP.closeBox strm;
266                          PP.newline strm;                          PP.newline strm;
267                          inHBox (fn () => (str "}"; sp(); str("// namespace " ^ name)));                          inHBox (fn () => (str "}"; sp(); str("// namespace " ^ name)));
268                          PP.closeBox strm;                        PP.closeBox strm)
                       PP.newline strm)  
269                  (* end case *))                  (* end case *))
270            and ppBody (CL.S_Block stms) = ppBlock stms            and ppBody (CL.S_Block stms) = ppBlock stms
271              | ppBody stm = ppBlock [stm]              | ppBody stm = ppBlock [stm]
# Line 456  Line 459 
459                    str ")";                    str ")";
460                  PP.closeBox strm)                  PP.closeBox strm)
461            in            in
462              ppDecl (false, decl)              PP.openVBox strm indent0;
463                  ppDecl (false, decl);
464                  PP.newline strm;
465                PP.closeBox strm
466            end            end
467    
468    end    end

Legend:
Removed from v.3998  
changed lines
  Added in v.3999

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