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 4004, Mon Jun 20 12:07:38 2016 UTC revision 4005, Mon Jun 20 12:34:46 2016 UTC
# Line 99  Line 99 
99                    str (getBaseTy ty);                    str (getBaseTy ty);
100                    pp (true, ty, optVar)                    pp (true, ty, optVar)
101                  end                  end
102              fun ppTy' ty = ppTy (ty, NONE)
103            fun ppAttrs [] = ()            fun ppAttrs [] = ()
104              | ppAttrs attrs = (              | ppAttrs attrs = (
105                  ppList {pp=str, sep=sp, l = attrs};                  ppList {pp=str, sep=sp, l = attrs};
# Line 224  Line 225 
225                        PP.openVBox strm indent0;                        PP.openVBox strm indent0;
226                          inHBox (fn () => (                          inHBox (fn () => (
227                            str "struct"; sp(); str name;                            str "struct"; sp(); str name;
228                            Option.map (fn tys => (str "<"; str ">")) args;                            Option.map
229                                (fn tys => (str "<"; ppCommaList {pp=ppTy', l=tys}; str ">"))
230                                  args;
231                            Option.map (fn base => (sp(); str ":"; sp(); str base)) from;                            Option.map (fn base => (sp(); str ":"; sp(); str base)) from;
232                            sp(); str "{"));                            sp(); str "{"));
233                          PP.openVBox strm indent;                          PP.openVBox strm indent;
# Line 238  Line 241 
241                    | CL.D_Template(params, dcl) => let                    | CL.D_Template(params, dcl) => let
242                        fun ppParam (CL.TypeParam name) = (str "typename"; sp(); str name)                        fun ppParam (CL.TypeParam name) = (str "typename"; sp(); str name)
243                          | ppParam (CL.ConstParam(ty, name)) = (                          | ppParam (CL.ConstParam(ty, name)) = (
244                              str "const"; sp(); ppTy (ty, NONE); sp(); str name)                              str "const"; sp(); ppTy' ty; sp(); str name)
245                        in                        in
246                          if inClass then PP.newline strm else ();                          if inClass then PP.newline strm else ();
247                          PP.openVBox strm indent0;                          PP.openVBox strm indent0;
# Line 246  Line 249 
249                              str "template"; sp(); str "<";                              str "template"; sp(); str "<";
250                              ppCommaList {pp = ppParam, l = params};                              ppCommaList {pp = ppParam, l = params};
251                              str ">"));                              str ">"));
252                              PP.newline strm;
253                            ppDecl (inClass, dcl);                            ppDecl (inClass, dcl);
254                          PP.closeBox strm                          PP.closeBox strm
255                        end                        end
256                    | CL.D_Typedef(name, ty) => (                    | CL.D_Typedef(name, ty) => (
257                        if inClass then PP.newline strm else ();                        if inClass then PP.newline strm else ();
258                        inHBox (fn () => (                        inHBox (fn () => (
259                          str "using"; sp(); str name; sp(); str"="; sp(); ppTy(ty, NONE); str ";")))                          str "using"; sp(); str name; sp(); str"="; sp(); ppTy' ty; str ";")))
260                    | CL.D_Namespace(name, dcls) => (                    | CL.D_Namespace(name, dcls) => (
261                        if inClass then raise Fail "unexpected namespace inside class decl" else ();                        if inClass then raise Fail "unexpected namespace inside class decl" else ();
262                        PP.openVBox strm indent0;                        PP.openVBox strm indent0;
# Line 306  Line 310 
310                        str "}")                        str "}")
311                    | CL.I_Cons(ty, args) => (                    | CL.I_Cons(ty, args) => (
312                        PP.openHVBox strm indent;                        PP.openHVBox strm indent;
313                          ppTy(ty, NONE); ppArgs args; str ";";                          ppTy' ty; ppArgs args; str ";";
314                        PP.closeBox strm)                        PP.closeBox strm)
315                  (* end case *))                  (* end case *))
316            and ppBlock stms = (            and ppBlock stms = (
# Line 386  Line 390 
390                    | CL.E_TApply(f, tys, args) => (                    | CL.E_TApply(f, tys, args) => (
391                        str f; str "<";                        str f; str "<";
392                        ppCommaList {                        ppCommaList {
393                            pp = fn ty => (PP.openHBox strm; ppTy(ty, NONE); PP.closeBox strm),                            pp = fn ty => (PP.openHBox strm; ppTy' ty; PP.closeBox strm),
394                            l = tys                            l = tys
395                          };                          };
396                        str ">"; ppArgs args)                        str ">"; ppArgs args)
397                    | CL.E_Cons(ty, args) => (ppTy(ty, NONE); ppArgs args)                    | CL.E_Cons(ty, args) => (ppTy' ty; ppArgs args)
398                    | CL.E_New(ty, args) => (                    | CL.E_New(ty, args) => (
399                        str "new"; sp(); ppTy(ty, NONE);                        str "new"; sp(); ppTy' ty;
400                        case (ty, args)                        case (ty, args)
401                         of (CL.T_Named ty, []) => str ty                         of (CL.T_Named ty, []) => str ty
402                          | (CL.T_Template _, []) => ppTy(ty, NONE)                          | (CL.T_Template _, []) => ppTy' ty
403                          | (CL.T_Named ty, args) => (str ty; ppArgs args)                          | (CL.T_Named ty, args) => (str ty; ppArgs args)
404                          | (CL.T_Template _, args) => (ppTy(ty, NONE); ppArgs args)                          | (CL.T_Template _, args) => (ppTy' ty; ppArgs args)
405                          | (ty, []) => ppTy(ty, NONE)                          | (ty, []) => ppTy' ty
406                          | _ => raise Fail "bogus new"                          | _ => raise Fail "bogus new"
407                        (* end case *))                        (* end case *))
408                    | CL.E_Subscript(e1, e2) => (ppExp e1; str "["; ppExp e2; str "]")                    | CL.E_Subscript(e1, e2) => (ppExp e1; str "["; ppExp e2; str "]")
409                    | CL.E_Select(e, f) => (ppExp e; str "."; str f)                    | CL.E_Select(e, f) => (ppExp e; str "."; str f)
410                    | CL.E_Indirect(e, f) => (ppExp e; str "->"; str f)                    | CL.E_Indirect(e, f) => (ppExp e; str "->"; str f)
411                    | CL.E_Cast(ty, e) => (str "("; ppTy(ty, NONE); str ")"; ppExp e)                    | CL.E_Cast(ty, e) => (str "("; ppTy' ty; str ")"; ppExp e)
412                    | CL.E_XCast(c, ty, e) => (                    | CL.E_XCast(c, ty, e) => (
413                        str c; str "<"; ppTy(ty, NONE); str ">("; ppExp e; str ")")                        str c; str "<"; ppTy' ty; str ">("; ppExp e; str ")")
414                    | CL.E_Vec(ty, args) => (                    | CL.E_Vec(ty, args) => (
415                      (* GCC vector syntax: "__extension__ (ty){a, b, ...}" *)                      (* GCC vector syntax: "__extension__ (ty){a, b, ...}" *)
416                        str "__extension__"; sp(); str "("; ppTy(ty, NONE); str ")";                        str "__extension__"; sp(); str "("; ppTy' ty; str ")";
417                        str "{";                        str "{";
418                        PP.openHOVBox strm indent;                        PP.openHOVBox strm indent;
419                          PP.cut strm;                          PP.cut strm;
# Line 446  Line 450 
450                    | CL.E_Bool b => str(Bool.toString b)                    | CL.E_Bool b => str(Bool.toString b)
451                    | CL.E_Str s => str(concat["\"", String.toCString s, "\""])                    | CL.E_Str s => str(concat["\"", String.toCString s, "\""])
452                    | CL.E_Char c => str(concat["'", Char.toCString c, "'"])                    | CL.E_Char c => str(concat["'", Char.toCString c, "'"])
453                    | CL.E_Sizeof ty => (str "sizeof("; ppTy(ty, NONE); str ")")                    | CL.E_Sizeof ty => (str "sizeof("; ppTy' ty; str ")")
454                  (* end case *))                  (* end case *))
455            and ppArgs args = (            and ppArgs args = (
456                  str "(";                  str "(";

Legend:
Removed from v.4004  
changed lines
  Added in v.4005

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