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 4027, Wed Jun 22 17:38:35 2016 UTC revision 4028, Wed Jun 22 21:15:36 2016 UTC
# Line 50  Line 50 
50                    ppList' l                    ppList' l
51                  end                  end
52            fun ppCommaList {pp, l} = ppList {pp = pp, sep = fn () => (str ","; sp()), l = l}            fun ppCommaList {pp, l} = ppList {pp = pp, sep = fn () => (str ","; sp()), l = l}
53            fun ppTy (ty, optVar) = let            fun ppQName (scopes, name) = let
54                    fun ppQ [] = str name
55                      | ppQ (CL.SC_Namespace ns :: scopes) = (str ns; str "::"; ppQ scopes)
56                      | ppQ (CL.SC_Type ty :: scopes) = (ppTy (ty, NONE); str "::"; ppQ scopes)
57                    in
58                      inHBox (fn () => ppQ scopes)
59                    end
60              and ppTy (ty, optVar) = let
61                  fun getBaseTy (CL.T_Num rty) = rawTyName rty                  fun getBaseTy (CL.T_Num rty) = rawTyName rty
62                    | getBaseTy (CL.T_Const(CL.T_Num rty)) = "const " ^ rawTyName rty                    | getBaseTy (CL.T_Const(CL.T_Num rty)) = "const " ^ rawTyName rty
63                    | getBaseTy (CL.T_Const(CL.T_Named ty)) = "const " ^ ty                    | getBaseTy (CL.T_Const(CL.T_Named ty)) = "const " ^ ty
# Line 67  Line 74 
74                        concat[attr, " ", getBaseTy ty]                        concat[attr, " ", getBaseTy ty]
75                  fun ppVar (isFirst, SOME x) = (                  fun ppVar (isFirst, SOME x) = (
76                        if isFirst then sp() else ();                        if isFirst then sp() else ();
77                        str x)                        ppQName x)
78                    | ppVar _ = ()                    | ppVar _ = ()
79                  fun pp (isFirst, CL.T_Const(CL.T_Num _), optVar) = ppVar (isFirst, optVar)                  fun pp (isFirst, CL.T_Const(CL.T_Num _), optVar) = ppVar (isFirst, optVar)
80                    | pp (isFirst, CL.T_Const(CL.T_Named _), optVar) = ppVar (isFirst, optVar)                    | pp (isFirst, CL.T_Const(CL.T_Named _), optVar) = ppVar (isFirst, optVar)
# Line 113  Line 120 
120                    | CL.D_Comment l => List.app ppComLn l                    | CL.D_Comment l => List.app ppComLn l
121                    | CL.D_Verbatim [] => ()                    | CL.D_Verbatim [] => ()
122                    | CL.D_Verbatim l => (if inClass then PP.newline strm else (); List.app str l)                    | CL.D_Verbatim l => (if inClass then PP.newline strm else (); List.app str l)
123                    | CL.D_Var(attrs, ty, x, optInit) => (                    | CL.D_Var(attrs, ty, scopes, x, optInit) => (
124                        if inClass then PP.newline strm else ();                        if inClass then PP.newline strm else ();
125                        inHBox (fn () => (                        inHBox (fn () => (
126                          ppAttrs attrs;                          ppAttrs attrs;
127                          ppTy (ty, SOME x);                          ppTy (ty, SOME(scopes, x));
128                          case optInit                          case optInit
129                           of SOME init => (sp(); str "="; sp(); ppInit init)                           of SOME init => (sp(); str "="; sp(); ppInit init)
130                            | NONE => ()                            | NONE => ()
# Line 127  Line 134 
134                        if inClass then PP.newline strm else ();                        if inClass then PP.newline strm else ();
135                        inHBox (fn () => (                        inHBox (fn () => (
136                          ppAttrs attrs;                          ppAttrs attrs;
137                          ppTy(ty, SOME f);                          ppTy(ty, SOME([], f));
138                          sp(); str "(";                          sp(); str "(";
139                          ppCommaList {pp=ppParam, l=params};                          ppCommaList {pp=ppParam, l=params};
140                          str ");")))                          str ");")))
141                    | CL.D_Func(attrs, ty, f, params, body) => (                    | CL.D_Func(attrs, ty, scopes, f, params, body) => (
142                        if inClass then PP.newline strm else ();                        if inClass then PP.newline strm else ();
143                        PP.openVBox strm indent0;                        PP.openVBox strm indent0;
144                          inHBox (fn () => (                          inHBox (fn () => (
145                            ppAttrs attrs;                            ppAttrs attrs;
146                            ppTy(ty, SOME f);                            ppTy' ty;
147                              sp (); ppQName (scopes, f);
148                            sp(); str "(";                            sp(); str "(";
149                            ppCommaList {pp=ppParam, l=params};                            ppCommaList {pp=ppParam, l=params};
150                            str ")"));                            str ")"));
151                          if inClass then PP.newline strm else ();                          if inClass then PP.newline strm else ();
152                          ppBody body;                          ppBody body;
153                        PP.closeBox strm)                        PP.closeBox strm)
154                    | CL.D_Constr(attrs, namespace, cls, params, inits, body) => (                    | CL.D_Constr(attrs, scopes, cls, params, initsAndBody) => (
155                        if inClass then PP.newline strm else ();                        if inClass then PP.newline strm else ();
156                        PP.openVBox strm indent0;                        PP.openVBox strm indent0;
157                          PP.openHBox strm;                          PP.openHBox strm;
158                            ppAttrs attrs;                            ppAttrs attrs;
159                            if inClass                            if inClass
160                              then str cls                              then str cls
161                              else (                              else ppQName (scopes, cls);
                               Option.app (fn ns => (str ns; str "::")) namespace;  
                               str cls; str "::"; str cls);  
162                            sp(); str "(";                            sp(); str "(";
163                            ppCommaList {pp=ppParam, l=params};                            ppCommaList {pp=ppParam, l=params};
164                            if Option.isNone body then str ");" else str ")";                            if Option.isNone initsAndBody then str ");" else str ")";
165                            case body                            case initsAndBody
166                             of SOME(CL.S_Block[]) => (                             of SOME(inits, CL.S_Block[]) => (
167                                  if List.null inits                                  if List.null inits
168                                    then (sp(); str "{ }"; PP.closeBox strm)                                    then (sp(); str "{ }"; PP.closeBox strm)
169                                    else (                                    else (
# Line 169  Line 175 
175                                      PP.closeBox strm;                                      PP.closeBox strm;
176                                      PP.newline strm;                                      PP.newline strm;
177                                      str"{ }"))                                      str"{ }"))
178                              | SOME body => (                              | SOME(inits, body) => (
179                                  PP.closeBox strm;                                  PP.closeBox strm;
180                                  if List.null inits                                  if List.null inits
181                                    then ()                                    then ()
# Line 185  Line 191 
191                            (* end case *);                            (* end case *);
192                          (* NOTE: HBox has been closed *)                          (* NOTE: HBox has been closed *)
193                        PP.closeBox strm)                        PP.closeBox strm)
194                    | CL.D_Destr(attrs, namespace, cls, body) => (                    | CL.D_Destr(attrs, scopes, cls, body) => (
195                        if inClass then PP.newline strm else ();                        if inClass then PP.newline strm else ();
196                        PP.openVBox strm indent0;                        PP.openVBox strm indent0;
197                          PP.openHBox strm;                          PP.openHBox strm;
198                            ppAttrs attrs;                            ppAttrs attrs;
199                            if inClass                            if inClass
200                              then (str "~"; str cls)                              then str("~" ^ cls)
201                              else (                              else ppQName (scopes, "~" ^ cls);
                               Option.app (fn ns => (str ns; str "::")) namespace;  
                               str cls; str "::"; str "~"; str cls);  
202                            sp();                            sp();
203                            case body                            case body
204                             of NONE => (str "();"; PP.closeBox strm)                             of NONE => (str "();"; PP.closeBox strm)
# Line 211  Line 215 
215                          PP.openVBox strm indent;                          PP.openVBox strm indent;
216                            List.app (fn (ty, x) => (                            List.app (fn (ty, x) => (
217                                PP.newline strm;                                PP.newline strm;
218                                inHBox (fn () => (ppTy(ty, SOME x); str ";"))))                                inHBox (fn () => (ppTy(ty, SOME([], x)); str ";"))))
219                              fields;                              fields;
220                          PP.closeBox strm;                          PP.closeBox strm;
221                          PP.newline strm;                          PP.newline strm;
# Line 224  Line 228 
228                          PP.openVBox strm indent;                          PP.openVBox strm indent;
229                            List.app (fn (ty, x) => (                            List.app (fn (ty, x) => (
230                                PP.newline strm;                                PP.newline strm;
231                                inHBox (fn () => (ppTy(ty, SOME x); str ";"))))                                inHBox (fn () => (ppTy(ty, SOME([], x)); str ";"))))
232                              fields;                              fields;
233                          PP.closeBox strm;                          PP.closeBox strm;
234                          PP.newline strm;                          PP.newline strm;
# Line 286  Line 290 
290              | ppBody stm = ppBlock [stm]              | ppBody stm = ppBlock [stm]
291            and ppParam (CL.PARAM(attrs, ty, x)) = (            and ppParam (CL.PARAM(attrs, ty, x)) = (
292                  ppAttrs attrs;                  ppAttrs attrs;
293                  ppTy(ty, SOME(CL.varToString x)))                  ppTy(ty, SOME([], CL.varToString x)))
294            and ppInit init = (case init            and ppInit init = (case init
295                   of CL.I_Exp e => ppExp e                   of CL.I_Exp e => ppExp e
296                    | CL.I_Exps fields => (                    | CL.I_Exps fields => (
# Line 340  Line 344 
344                        List.app (fn stm => (PP.newline strm; str stm)) stms)                        List.app (fn stm => (PP.newline strm; str stm)) stms)
345                    | CL.S_Decl(attrs, ty, x, NONE) => inHBox (fn () => (                    | CL.S_Decl(attrs, ty, x, NONE) => inHBox (fn () => (
346                        ppAttrs attrs;                        ppAttrs attrs;
347                        ppTy(ty, SOME x); str ";"))                        ppTy(ty, SOME([], x)); str ";"))
348                    | CL.S_Decl(attrs, ty, x, SOME e) => inHBox (fn () => (                    | CL.S_Decl(attrs, ty, x, SOME e) => inHBox (fn () => (
349                        ppAttrs attrs;                        ppAttrs attrs;
350                        ppTy(ty, SOME x); sp(); str "="; sp(); ppInit e; str ";"))                        ppTy(ty, SOME([], x)); sp(); str "="; sp(); ppInit e; str ";"))
351                    | CL.S_Exp e => inHBox (fn () => (ppExp e; str ";"))                    | CL.S_Exp e => inHBox (fn () => (ppExp e; str ";"))
352                    | CL.S_If(e, blk, CL.S_Block[]) =>                    | CL.S_If(e, blk, CL.S_Block[]) =>
353                        inHBox (fn () => (str "if"; sp(); ppExp e; ppStmAsBlock blk))                        inHBox (fn () => (str "if"; sp(); ppExp e; ppStmAsBlock blk))
# Line 368  Line 372 
372                        str "for"; sp(); str "(";                        str "for"; sp(); str "(";
373                        case dcls                        case dcls
374                         of (x, e)::rest => (                         of (x, e)::rest => (
375                              ppTy(ty, SOME x); sp(); str "="; sp(); ppExp e;                              ppTy(ty, SOME([], x)); sp(); str "="; sp(); ppExp e;
376                              List.app                              List.app
377                                (fn (x, e) => (str ","; sp(); str x; sp(); str "="; sp(); ppExp e))                                (fn (x, e) => (str ","; sp(); str x; sp(); str "="; sp(); ppExp e))
378                                  rest)                                  rest)

Legend:
Removed from v.4027  
changed lines
  Added in v.4028

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