Charj: add automatic forward declarations for class variables
[charm.git] / src / langs / charj / src / charj / translator / Charj.stg
1 group Charj;
2
3 charjSource_ci(basename, pd, ids, tds, debug) ::=
4 <<
5
6 // interface for <basename>
7 <tds>
8
9 >>
10
11
12 charjSource_h(basename, pd, ids, tds, debug) ::=
13 <<
14 #ifndef __<basename>__
15 #define __<basename>__
16
17 /**************************************************************************
18  * WARNING                                                                *
19  **************************************************************************
20  * This is a machine generated header file.                               *
21  * It is not meant to be edited by hand and may be overwritten by charjc. *
22  **************************************************************************/
23
24 <ids>
25 <tds>
26
27 #endif // __<basename>__
28
29 >>
30
31
32 charjSource_cc(basename, pd, ids, tds, debug) ::=
33 <<
34 #include "<basename>.h"
35
36 <ids>
37 <tds>
38
39 >>
40
41 importDeclaration_cc_h(inc_id, use_id) ::= 
42 <<
43 #include \<<inc_id>\>
44 using <use_id>;
45 >>
46
47 classExtends_ci(type) ::= "<type>"
48
49
50 classExtends_cc_h(type) ::= "#include \<<type>.h\>"
51
52
53 interfaceExtends(ts) ::=
54 <<
55 : public <ts; separator=", public ">
56 >>
57
58 classDeclaration_h(sym, ident, ext, csds) ::=
59 <<
60 <sym.IncludeString>
61 <sym.MemberTypeNames:{name| class <name>;
62 }>
63 <classDeclaration_h_cont(pds = sym.packageNames, sym = sym, ident = ident, ext = ext, csds = csds)>
64 >>
65
66 classDeclaration_h_cont(pds, sym, ident, ext, csds) ::=
67 <<
68 <if(first(pds))>namespace <first(pds)>
69 {
70     <classDeclaration_h_cont(pds = rest(pds), sym = sym, ident = ident, ext = ext, csds = csds)>
71 } // namespace <first(pds)>
72 <else>
73 <if(ext)>
74 class <ident> : public <ext> {
75 <else>
76 class <ident> {
77 <endif>
78
79     <csds; separator="\n\n">
80 };
81 <endif>
82 >>
83
84
85 classDeclaration_cc(sym, ident, ext, csds) ::=
86 <<
87 <sym.IncludeString>
88 <classDeclaration_cc_cont(pds = sym.packageNames, sym = sym, ident = ident, ext = ext, csds = csds)>
89 >>
90
91 classDeclaration_cc_cont(pds, sym, ident, ext, csds) ::=
92 <<
93 <if(first(pds))>namespace <first(pds)>
94 {
95     <classDeclaration_cc_cont(pds = rest(pds), sym = sym, ident = ident, ext = ext, csds = csds)>
96 } // namespace <first(pds)>
97 <else>
98 <csds; separator="\n\n">
99 <endif>
100 >>
101
102
103 chareDeclaration_cc(sym, ident, ext, csds) ::=
104 <<
105 #include "<ident>.decl.h"
106 <chareDeclaration_cc_cont(pds = sym.packageNames, sym = sym, ident = ident, ext = ext, csds = csds)>
107 #include "<ident>.def.h"
108 >>
109
110 chareDeclaration_cc_cont(pds, sym, ident, ext, csds) ::=
111 <<
112 <if(first(pds))>namespace <first(pds)>
113 {
114     <chareDeclaration_cc_cont(pds = rest(pds), sym = sym, ident = ident, ext = ext, csds = csds)>
115 } // namespace <first(pds)>
116 <else>
117 <csds; separator="\n\n">
118 <endif>
119 >>
120
121 chareDeclaration_h(sym, ident, ext, csds) ::=
122 <<
123 #include "<ident>.decl.h"
124 <chareDeclaration_h_cont(pds = sym.packageNames, sym = sym, ident = ident, ext = ext, csds = csds)>
125 >>
126
127 chareDeclaration_h_cont(pds, sym, ident, ext, csds) ::=
128 <<
129 <if(first(pds))>namespace <first(pds)>
130 {
131     <chareDeclaration_h_cont(pds = rest(pds), sym = sym, ident = ident, ext = ext, csds = csds)>
132 } // namespace <first(pds)>
133 <else>
134 <if(ext)>/* superclass: <ext> */<endif>
135 class <ident>: public CBase_<ident> {
136     <csds; separator="\n">
137 };
138 <endif>
139 >>
140
141 chareDeclaration_ci(sym, chareType, arrayDim, ident, ext, csds) ::=
142 <<
143 module <ident> {
144 <if(ext)>
145     extern module <ext>;
146 <endif>
147     <chareDeclaration_ci_cont(pds = sym.packageNames, chareType = chareType, arrayDim = arrayDim, ident = ident, ext = ext, csds = csds)>
148 }
149 >>
150
151
152 chareDeclaration_ci_cont(pds, sym, chareType, arrayDim, ident, ext, csds) ::=
153 <<
154 <if(first(pds))>namespace <first(pds)>
155 {
156     <chareDeclaration_ci_cont(pds = rest(pds), sym = sym, chareType = chareType, arrayDim = arrayDim, ident = ident, ext = ext, csds = csds)>
157 } // namespace <first(pds)>
158 <else>
159 <chareType><if(arrayDim)> [<arrayDim>]<endif> <ident><if(ext)> : <ext><endif> {
160     <csds; separator="\n">
161 };
162 <endif>
163 >>
164
165 funcMethodDecl_h(modl, gtpl, ty, id, fpl, adl, block) ::=
166 <<
167 <if(first(modl))><modl; separator=" ">: <endif><ty><gtpl> <id><fpl><adl>;
168 >>
169
170
171 funcMethodDecl_ci(modl, gtpl, ty, id, fpl, adl, block) ::=
172 <<
173 entry <ty><gtpl> <id><fpl><adl>;
174 >>
175
176
177 funcMethodDecl_cc(sym, modl, gtpl, ty, id, fpl, adl, block) ::=
178 <<
179 <ty><gtpl> <sym.Name>::<id><fpl><adl>
180 <block>
181 >>
182
183
184 ctorDecl_ci(modl, gtpl, id, fpl, block) ::=
185 <<
186 entry void<gtpl> <id><fpl>;
187 >>
188
189
190 ctorDecl_h(modl, gtpl, id, fpl, block) ::=
191 <<
192 <if(modl)><modl>:<endif><gtpl> <id><fpl>;
193 >>
194
195
196 ctorDecl_cc(modl, gtpl, id, fpl, block) ::=
197 <<
198 <gtpl> <id>::<id><fpl>
199 <block>
200 >>
201
202
203 block_cc(bsl) ::=
204 <<
205 {
206     <bsl; separator="\n">
207 }
208 >>
209
210
211 embed_cc(str, blk) ::=
212 <<
213 // begin embedded block: <str>
214 <blk>
215 // end embedded block: <str>
216 >>
217
218
219 class_var_decl(modl, type, declList) ::=
220 <<
221 <if(modl)><modl>:<else>public:<endif> <type> <declList>;
222 >>
223
224
225 var_decl_list(var_decls) ::=
226 <<
227 <var_decls; separator=", ">
228 >>
229
230
231 var_decl(id, initializer) ::=
232 <<
233 <id><if(initializer)> = <initializer><endif>
234 >>
235
236
237 var_decl_id(id, array_decl_list) ::=
238 <<
239 <id><if(array_decl_list)> <array_decl_list><endif>
240 >>
241
242
243 var_id_decl(id, adl) ::=
244 <<
245 <id><if(adl)> <adl><endif>
246 >>
247
248
249 mod_list(mods) ::=
250 <<
251 <if(mods)><mods; separator=" "><endif>
252 >>
253
254
255 local_mod_list(mods) ::=
256 <<
257 <if(mods)><mods; separator=" "><endif>
258 >>
259  
260
261 local_var_decl(modList, type, declList) ::=
262 <<
263 <if(modList)>
264 <modList> <type> <declList>;
265 <else>
266 <type> <declList>;
267 <endif>
268 >>
269
270
271 simple_type(typeID, arrDeclList) ::=
272 <<
273 <typeID><arrDeclList>
274 >>
275
276
277 obj_type(typeID, arrDeclList) ::=
278 <<
279 <typeID><arrDeclList>
280 >>
281
282 pointer_type(typeID, arrDeclList) ::=
283 <<
284 <typeID>*<arrDeclList>
285 >>
286
287 reference_type(typeID, arrDeclList) ::=
288 <<
289 <typeID>&<arrDeclList>
290 >>
291
292
293 typeIdent(typeID, generics) ::=
294 <<
295 <typeID><generics>
296 >>
297
298
299 generic_arg_list(types) ::=
300 <<
301 \<<types>\>
302 >>
303
304
305 formal_param_list(sdecl, vdecl) ::=
306 <<
307 <if(vdecl)>
308 (<sdecl; separator=", ">, <vdecl>)
309 <else>
310 (<sdecl; separator=", ">)
311 <endif>
312 >>
313
314
315 formal_param_decl(modList, type, declID) ::=
316 <<
317 <if(modList)><modList> <endif><type> <declID>
318 >>
319
320
321 assert(cond, msg) ::=
322 <<
323 <if(msg)>
324 CkAssert(<cond> && <msg>);
325 <else>
326 CkAssert(<cond>);
327 <endif>
328 >>
329
330
331 if(cond, then, else_) ::=
332 <<
333 if <cond> <then><if(else_)> else <else_><endif>
334 >>
335
336
337 for(initializer, cond, update, body) ::=
338 <<
339 for (<if(initializer)><initializer><else>;<endif> <cond>; <update; separator=", ">) <body>
340 >>
341
342 while(cond, body) ::=
343 <<
344 while <cond> <body>
345 >>
346
347 dowhile(cond, body) ::=
348 <<
349 do <body> while <cond>;
350 >>
351
352
353 switch(expr, labels) ::=
354 <<
355 switch <expr> {
356     <labels>
357 }
358 >>
359
360 return(val) ::=
361 <<
362 return<if(val)> <val><endif>;
363 >>
364
365 label(text, stmt) ::=
366 <<
367 <text>: <stmt>
368 >>
369
370 case(expr, block) ::=
371 <<
372 case <expr>: <block>
373 >>
374
375 method_call(primary, generic_types, args) ::=
376 <<
377 <if(generic_types)>
378 <primary>\<<generic_types>\>(<args>)
379 <else>
380 <primary>(<args>)
381 <endif>
382 >>
383
384
385 array_construction_with_init(array_decls, initializer) ::=
386 <<
387 <array_decls> = {<initializer>};
388 >>
389
390
391 array_construction(exprs, array_decls) ::=
392 <<
393 [<exprs; separator="][">]<array_decls>
394 >> 
395
396
397 arguments(exprs) ::=
398 <<
399 <exprs; separator=", ">
400 >>
401
402