diff options
Diffstat (limited to 'MoonParser/moon_ast.h')
-rw-r--r-- | MoonParser/moon_ast.h | 589 |
1 files changed, 588 insertions, 1 deletions
diff --git a/MoonParser/moon_ast.h b/MoonParser/moon_ast.h index 942a2b6..4da4b8d 100644 --- a/MoonParser/moon_ast.h +++ b/MoonParser/moon_ast.h | |||
@@ -1,4 +1,591 @@ | |||
1 | #pragma once | 1 | #pragma once |
2 | 2 | ||
3 | #include "parserlib.hpp" | 3 | #include "moon_parser.h" |
4 | 4 | ||
5 | template<class Facet> | ||
6 | struct deletable_facet : Facet | ||
7 | { | ||
8 | template<class ...Args> | ||
9 | deletable_facet(Args&& ...args): Facet(std::forward<Args>(args)...) {} | ||
10 | ~deletable_facet() {} | ||
11 | }; | ||
12 | typedef std::wstring_convert<deletable_facet<std::codecvt<char32_t, char, std::mbstate_t>>, char32_t> Converter; | ||
13 | |||
14 | std::string& trim(std::string& s); | ||
15 | |||
16 | class AstLeaf : public ast_node | ||
17 | { | ||
18 | public: | ||
19 | const std::string& getValue(); | ||
20 | private: | ||
21 | std::string _value; | ||
22 | }; | ||
23 | |||
24 | #define AST_LEAF(type) \ | ||
25 | extern rule type; \ | ||
26 | class type##_t : public AstLeaf \ | ||
27 | { \ | ||
28 | public: \ | ||
29 | virtual int get_type() override { return ast_type<type##_t>(); } | ||
30 | |||
31 | #define AST_NODE(type) \ | ||
32 | extern rule type; \ | ||
33 | class type##_t : public ast_container \ | ||
34 | { \ | ||
35 | public: \ | ||
36 | virtual int get_type() override { return ast_type<type##_t>(); } | ||
37 | |||
38 | #define AST_END(type) \ | ||
39 | }; | ||
40 | |||
41 | AST_LEAF(Num) | ||
42 | virtual void visit(void* ud) override; | ||
43 | AST_END(Num) | ||
44 | |||
45 | AST_LEAF(_Name) | ||
46 | virtual void visit(void* ud) override; | ||
47 | AST_END(_Name) | ||
48 | |||
49 | AST_NODE(Name) | ||
50 | ast_ptr<_Name_t> name; | ||
51 | virtual void visit(void* ud) override; | ||
52 | AST_END(Name) | ||
53 | |||
54 | AST_LEAF(self) | ||
55 | virtual void visit(void* ud) override; | ||
56 | AST_END(self) | ||
57 | |||
58 | AST_NODE(self_name) | ||
59 | ast_ptr<_Name_t> name; | ||
60 | virtual void visit(void* ud) override; | ||
61 | AST_END(self_name) | ||
62 | |||
63 | AST_LEAF(self_class) | ||
64 | virtual void visit(void* ud) override; | ||
65 | AST_END(self_class) | ||
66 | |||
67 | AST_NODE(self_class_name) | ||
68 | ast_ptr<_Name_t> name; | ||
69 | virtual void visit(void* ud) override; | ||
70 | AST_END(self_class_name) | ||
71 | |||
72 | AST_NODE(SelfName) | ||
73 | ast_ptr<ast_node> name; // self_class_name_t | self_class_t | self_name_t | self_t | ||
74 | virtual void visit(void* ud) override; | ||
75 | AST_END(SelfName) | ||
76 | |||
77 | AST_NODE(KeyName) | ||
78 | ast_ptr<ast_node> name; // SelfName_t | _Name_t | ||
79 | virtual void visit(void* ud) override; | ||
80 | AST_END(KeyName) | ||
81 | |||
82 | AST_LEAF(VarArg) | ||
83 | virtual void visit(void* ud) override; | ||
84 | AST_END(VarArg) | ||
85 | |||
86 | AST_LEAF(local_flag) | ||
87 | AST_END(local_flag) | ||
88 | |||
89 | AST_LEAF(Seperator) | ||
90 | AST_END(Seperator) | ||
91 | |||
92 | AST_NODE(NameList) | ||
93 | ast_ptr<Seperator_t> sep; | ||
94 | ast_list<Name_t> names; | ||
95 | |||
96 | virtual void visit(void* ud) override; | ||
97 | AST_END(NameList) | ||
98 | |||
99 | AST_NODE(Local) | ||
100 | ast_ptr<ast_node> name; // local_flag_t | NameList_t | ||
101 | AST_END(Local) | ||
102 | |||
103 | AST_NODE(colon_import_name) | ||
104 | ast_ptr<Name_t> name; | ||
105 | AST_END(colon_import_name) | ||
106 | |||
107 | class Exp_t; | ||
108 | |||
109 | AST_NODE(ImportName) | ||
110 | ast_ptr<ast_node> name; // colon_import_name_t | Name_t | ||
111 | AST_END(ImportName) | ||
112 | |||
113 | AST_NODE(Import) | ||
114 | ast_ptr<Seperator_t> sep; | ||
115 | ast_list<ImportName_t> names; | ||
116 | ast_ptr<Exp_t> exp; | ||
117 | virtual void visit(void* ud) override; | ||
118 | AST_END(Import) | ||
119 | |||
120 | AST_NODE(ExpListLow) | ||
121 | ast_ptr<Seperator_t> sep; | ||
122 | ast_list<Exp_t> exprs; | ||
123 | virtual void visit(void* ud) override; | ||
124 | AST_END(ExpListLow) | ||
125 | |||
126 | AST_NODE(ExpList) | ||
127 | ast_ptr<Seperator_t> sep; | ||
128 | ast_list<Exp_t> exprs; | ||
129 | virtual void visit(void* ud) override; | ||
130 | AST_END(ExpList) | ||
131 | |||
132 | AST_NODE(Return) | ||
133 | ast_ptr<ExpListLow_t, true> valueList; | ||
134 | virtual void visit(void* ud) override; | ||
135 | AST_END(Return) | ||
136 | |||
137 | class Assign_t; | ||
138 | class Body_t; | ||
139 | |||
140 | AST_NODE(With) | ||
141 | ast_ptr<ExpList_t> valueList; | ||
142 | ast_ptr<Assign_t, true> assigns; | ||
143 | ast_ptr<Body_t> body; | ||
144 | virtual void visit(void* ud) override; | ||
145 | AST_END(With) | ||
146 | |||
147 | AST_NODE(SwitchCase) | ||
148 | ast_ptr<ExpList_t> valueList; | ||
149 | ast_ptr<Body_t> body; | ||
150 | AST_END(SwitchCase) | ||
151 | |||
152 | AST_NODE(Switch) | ||
153 | ast_ptr<Exp_t> target; | ||
154 | ast_ptr<Seperator_t> sep; | ||
155 | ast_list<SwitchCase_t> branches; | ||
156 | ast_ptr<Body_t, true> lastBranch; | ||
157 | AST_END(Switch) | ||
158 | |||
159 | AST_NODE(IfCond) | ||
160 | ast_ptr<Exp_t> condition; | ||
161 | ast_ptr<Assign_t, true> assign; | ||
162 | AST_END(IfCond) | ||
163 | |||
164 | AST_NODE(IfElseIf) | ||
165 | ast_ptr<IfCond_t> condition; | ||
166 | ast_ptr<Body_t> body; | ||
167 | AST_END(IfElseIf) | ||
168 | |||
169 | AST_NODE(If) | ||
170 | ast_ptr<IfCond_t> firstCondition; | ||
171 | ast_ptr<Body_t> firstBody; | ||
172 | ast_ptr<Seperator_t> sep; | ||
173 | ast_list<IfElseIf_t> branches; | ||
174 | ast_ptr<Body_t, true> lastBranch; | ||
175 | AST_END(If) | ||
176 | |||
177 | AST_NODE(Unless) | ||
178 | ast_ptr<IfCond_t> firstCondition; | ||
179 | ast_ptr<Body_t> firstBody; | ||
180 | ast_ptr<Seperator_t> sep; | ||
181 | ast_list<IfElseIf_t> branches; | ||
182 | ast_ptr<Body_t, true> lastBranch; | ||
183 | AST_END(Unless) | ||
184 | |||
185 | AST_NODE(While) | ||
186 | ast_ptr<Exp_t> condition; | ||
187 | ast_ptr<Body_t> body; | ||
188 | AST_END(While) | ||
189 | |||
190 | AST_NODE(for_step_value) | ||
191 | ast_ptr<Exp_t> value; | ||
192 | AST_END(for_step_value) | ||
193 | |||
194 | AST_NODE(For) | ||
195 | ast_ptr<Name_t> varName; | ||
196 | ast_ptr<Exp_t> startValue; | ||
197 | ast_ptr<Exp_t> stopValue; | ||
198 | ast_ptr<for_step_value_t, true> stepValue; | ||
199 | ast_ptr<Body_t> body; | ||
200 | AST_END(For) | ||
201 | |||
202 | class AssignableNameList_t; | ||
203 | |||
204 | AST_NODE(ForEach) | ||
205 | ast_ptr<AssignableNameList_t> nameList; | ||
206 | ast_ptr<ast_node> loopValue; // Exp_t | ExpList_t | ||
207 | ast_ptr<Body_t> body; | ||
208 | AST_END(ForEach) | ||
209 | |||
210 | AST_NODE(Do) | ||
211 | ast_ptr<Body_t> body; | ||
212 | AST_END(Do) | ||
213 | |||
214 | class CompInner_t; | ||
215 | |||
216 | AST_NODE(Comprehension) | ||
217 | ast_ptr<Exp_t> value; | ||
218 | ast_ptr<CompInner_t> forLoop; | ||
219 | AST_END(Comprehension) | ||
220 | |||
221 | AST_NODE(comp_value) | ||
222 | ast_ptr<Exp_t> value; | ||
223 | AST_END(comp_value) | ||
224 | |||
225 | AST_NODE(TblComprehension) | ||
226 | ast_ptr<Exp_t> key; | ||
227 | ast_ptr<comp_value_t, true> value; | ||
228 | ast_ptr<CompInner_t> forLoop; | ||
229 | AST_END(TblComprehension) | ||
230 | |||
231 | AST_NODE(star_exp) | ||
232 | ast_ptr<Exp_t> value; | ||
233 | AST_END(star_exp) | ||
234 | |||
235 | AST_NODE(CompForEach) | ||
236 | ast_ptr<AssignableNameList_t> nameList; | ||
237 | ast_ptr<ast_node> loopValue; // star_exp_t | Exp_t | ||
238 | AST_END(CompForEach) | ||
239 | |||
240 | AST_NODE(CompFor) | ||
241 | ast_ptr<Name_t> varName; | ||
242 | ast_ptr<Exp_t> startValue; | ||
243 | ast_ptr<Exp_t> stopValue; | ||
244 | ast_ptr<for_step_value_t, true> stepValue; | ||
245 | AST_END(CompFor) | ||
246 | |||
247 | AST_NODE(CompClause) | ||
248 | ast_ptr<ast_node> nestExp; // CompFor_t | CompForEach_t | Exp_t | ||
249 | AST_END(CompClause) | ||
250 | |||
251 | AST_NODE(CompInner) | ||
252 | ast_ptr<ast_node> compFor; // CompFor_t | CompForEach_t | ||
253 | ast_ptr<Seperator_t> sep; | ||
254 | ast_list<CompClause_t> clauses; | ||
255 | AST_END(CompInner) | ||
256 | |||
257 | class TableBlock_t; | ||
258 | |||
259 | AST_NODE(Assign) | ||
260 | ast_ptr<ast_node> value; // With_t | If_t | Switch_t | TableBlock_t | ExpListLow_t | ||
261 | AST_END(Assign) | ||
262 | |||
263 | AST_LEAF(update_op) | ||
264 | AST_END(update_op) | ||
265 | |||
266 | AST_NODE(Update) | ||
267 | ast_ptr<update_op_t> op; | ||
268 | ast_ptr<Exp_t> value; | ||
269 | AST_END(Update) | ||
270 | |||
271 | AST_LEAF(BinaryOperator) | ||
272 | AST_END(BinaryOperator) | ||
273 | |||
274 | class Chain_t; | ||
275 | |||
276 | AST_NODE(Assignable) | ||
277 | ast_ptr<ast_node> item; // Chain_t | Name_t | SelfName_t | ||
278 | AST_END(Assignable) | ||
279 | |||
280 | class Value_t; | ||
281 | |||
282 | AST_NODE(exp_op_value) | ||
283 | ast_ptr<BinaryOperator_t> op; | ||
284 | ast_ptr<Value_t> value; | ||
285 | AST_END(exp_op_value) | ||
286 | |||
287 | AST_NODE(Exp) | ||
288 | ast_ptr<Value_t> value; | ||
289 | ast_list<exp_op_value_t> opValues; | ||
290 | AST_END(Exp) | ||
291 | |||
292 | AST_NODE(Callable) | ||
293 | ast_ptr<ast_node> item; // Name_t | SelfName_t | VarArg_t | Parens_t | ||
294 | AST_END(Callable) | ||
295 | |||
296 | class InvokeArgs_t; | ||
297 | |||
298 | AST_NODE(ChainValue) | ||
299 | ast_ptr<ast_node> caller; // Chain_t | Callable_t | ||
300 | ast_ptr<InvokeArgs_t, true> arguments; | ||
301 | AST_END(ChainValue) | ||
302 | |||
303 | class KeyValue_t; | ||
304 | |||
305 | AST_NODE(simple_table) | ||
306 | ast_ptr<Seperator_t> sep; | ||
307 | ast_list<KeyValue_t> pairs; | ||
308 | AST_END(simple_table) | ||
309 | |||
310 | class String_t; | ||
311 | |||
312 | AST_NODE(SimpleValue) | ||
313 | ast_ptr<ast_node> value; /* | ||
314 | const_value_t | | ||
315 | If_t | Unless_t | Switch_t | With_t | ClassDecl_t | ForEach_t | For_t | While_t | Do_t | | ||
316 | unary_exp_t | | ||
317 | TblComprehension_t | TableLit_t | Comprehension_t | FunLit_t | Num_t; | ||
318 | */ | ||
319 | AST_END(SimpleValue) | ||
320 | |||
321 | AST_NODE(Chain) | ||
322 | ast_ptr<ast_node> item; // chain_call_t | chain_item_t | chain_dot_chain_t | ColonChain_t | ||
323 | AST_END(Chain) | ||
324 | |||
325 | AST_NODE(Value) | ||
326 | ast_ptr<ast_node> item; // SimpleValue_t | simple_table_t | ChainValue_t | String_t | ||
327 | ast_node* getFlattened(); | ||
328 | AST_END(Value) | ||
329 | |||
330 | AST_LEAF(LuaString) | ||
331 | AST_END(LuaString) | ||
332 | |||
333 | AST_LEAF(SingleString) | ||
334 | AST_END(SingleString) | ||
335 | |||
336 | AST_LEAF(double_string_inner) | ||
337 | AST_END(double_string_inner) | ||
338 | |||
339 | AST_NODE(double_string_content) | ||
340 | ast_ptr<ast_node> content; // double_string_inner_t | Exp_t | ||
341 | AST_END(double_string_content) | ||
342 | |||
343 | AST_NODE(DoubleString) | ||
344 | ast_ptr<Seperator_t> sep; | ||
345 | ast_list<double_string_content_t> segments; | ||
346 | AST_END(DoubleString) | ||
347 | |||
348 | AST_NODE(String) | ||
349 | ast_ptr<ast_node> str; // DoubleString_t | SingleString_t | LuaString_t | ||
350 | AST_END(String) | ||
351 | |||
352 | AST_NODE(Parens) | ||
353 | ast_ptr<Exp_t> expr; | ||
354 | AST_END(Parens) | ||
355 | |||
356 | AST_NODE(FnArgs) | ||
357 | ast_ptr<Seperator_t> sep; | ||
358 | ast_list<Exp_t> args; | ||
359 | AST_END(FnArgs) | ||
360 | |||
361 | class ChainItems_t; | ||
362 | |||
363 | AST_NODE(chain_call) | ||
364 | ast_ptr<ast_node> caller; // Callable_t | String_t | ||
365 | ast_ptr<ChainItems_t> chain; | ||
366 | AST_END(chain_call) | ||
367 | |||
368 | AST_NODE(chain_item) | ||
369 | ast_ptr<ChainItems_t> chain; | ||
370 | AST_END(chain_item) | ||
371 | |||
372 | AST_NODE(DotChainItem) | ||
373 | ast_ptr<_Name_t> name; | ||
374 | AST_END(DotChainItem) | ||
375 | |||
376 | AST_NODE(ColonChainItem) | ||
377 | ast_ptr<_Name_t> name; | ||
378 | AST_END(ColonChainItem) | ||
379 | |||
380 | AST_NODE(chain_dot_chain) | ||
381 | ast_ptr<DotChainItem_t> caller; | ||
382 | ast_ptr<ChainItems_t, true> chain; | ||
383 | AST_END(chain_dot_chain) | ||
384 | |||
385 | class ColonChain_t; | ||
386 | class Invoke_t; | ||
387 | class Slice_t; | ||
388 | |||
389 | AST_NODE(ChainItem) | ||
390 | ast_ptr<ast_node> item; // Invoke_t | DotChainItem_t | Slice_t | [Exp_t] | ||
391 | AST_END(ChainItem) | ||
392 | |||
393 | AST_NODE(ChainItems) | ||
394 | ast_ptr<Seperator_t> sep; | ||
395 | ast_list<ChainItem_t> simpleChain; | ||
396 | ast_ptr<ColonChain_t, true> colonChain; | ||
397 | AST_END(ChainItems) | ||
398 | |||
399 | AST_NODE(invoke_chain) | ||
400 | ast_ptr<Invoke_t> invoke; | ||
401 | ast_ptr<ChainItems_t, true> chain; | ||
402 | AST_END(invoke_chain) | ||
403 | |||
404 | AST_NODE(ColonChain) | ||
405 | ast_ptr<ColonChainItem_t> colonChain; | ||
406 | ast_ptr<invoke_chain_t, true> invokeChain; | ||
407 | AST_END(ColonChain) | ||
408 | |||
409 | AST_LEAF(default_value) | ||
410 | AST_END(default_value) | ||
411 | |||
412 | AST_NODE(Slice) | ||
413 | ast_ptr<ast_node> startValue; // Exp_t | default_value_t | ||
414 | ast_ptr<ast_node> stopValue; // Exp_t | default_value_t | ||
415 | ast_ptr<ast_node> stepValue; // Exp_t | default_value_t | ||
416 | AST_END(Slice) | ||
417 | |||
418 | AST_NODE(Invoke) | ||
419 | ast_ptr<ast_node> argument; // FnArgs_t | SingleString_t | DoubleString_t | LuaString_t | ||
420 | AST_END(Invoke) | ||
421 | |||
422 | class KeyValue_t; | ||
423 | |||
424 | AST_NODE(TableValue) | ||
425 | ast_ptr<ast_node> value; // KeyValue_t | Exp_t | ||
426 | AST_END(TableValue) | ||
427 | |||
428 | AST_NODE(TableLit) | ||
429 | ast_ptr<Seperator_t> sep; | ||
430 | ast_list<TableValue_t> values; | ||
431 | AST_END(TableLit) | ||
432 | |||
433 | AST_NODE(TableBlock) | ||
434 | ast_ptr<Seperator_t> sep; | ||
435 | ast_list<KeyValue_t> values; | ||
436 | AST_END(TableBlock) | ||
437 | |||
438 | AST_NODE(class_member_list) | ||
439 | ast_ptr<Seperator_t> sep; | ||
440 | ast_list<KeyValue_t> values; | ||
441 | AST_END(class_member_list) | ||
442 | |||
443 | AST_NODE(ClassLine) | ||
444 | ast_ptr<ast_node> content; // class_member_list_t | Statement_t | Exp_t | ||
445 | AST_END(ClassLine) | ||
446 | |||
447 | AST_NODE(ClassBlock) | ||
448 | ast_ptr<Seperator_t> sep; | ||
449 | ast_list<ClassLine_t> lines; | ||
450 | AST_END(ClassBlock) | ||
451 | |||
452 | AST_NODE(ClassDecl) | ||
453 | ast_ptr<Assignable_t, true> name; | ||
454 | ast_ptr<Exp_t, true> extend; | ||
455 | ast_ptr<ClassBlock_t, true> body; | ||
456 | AST_END(ClassDecl) | ||
457 | |||
458 | AST_NODE(export_values) | ||
459 | ast_ptr<NameList_t> nameList; | ||
460 | ast_ptr<ExpListLow_t, true> valueList; | ||
461 | AST_END(export_values) | ||
462 | |||
463 | AST_LEAF(export_op) | ||
464 | AST_END(export_op) | ||
465 | |||
466 | AST_NODE(Export) | ||
467 | ast_ptr<ast_node> item; // ClassDecl_t | export_op_t | export_values_t | ||
468 | AST_END(Export) | ||
469 | |||
470 | AST_NODE(variable_pair) | ||
471 | ast_ptr<Name_t> name; | ||
472 | AST_END(variable_pair) | ||
473 | |||
474 | AST_NODE(normal_pair) | ||
475 | ast_ptr<ast_node> key; // KeyName_t | [Exp_t] | DoubleString_t | SingleString_t | ||
476 | ast_ptr<ast_node> value; // Exp_t | TableBlock_t | ||
477 | AST_END(normal_pair) | ||
478 | |||
479 | AST_NODE(KeyValue) | ||
480 | ast_ptr<ast_node> item; // variable_pair_t | normal_pair_t | ||
481 | AST_END(KeyValue) | ||
482 | |||
483 | AST_NODE(FnArgDef) | ||
484 | ast_ptr<ast_node> name; // Name_t | SelfName_t | ||
485 | ast_ptr<Exp_t, true> defaultValue; | ||
486 | AST_END(FnArgDef) | ||
487 | |||
488 | AST_NODE(FnArgDefList) | ||
489 | ast_ptr<Seperator_t> sep; | ||
490 | ast_list<FnArgDef_t> definitions; | ||
491 | ast_ptr<VarArg_t, true> varArg; | ||
492 | AST_END(FnArgDefList) | ||
493 | |||
494 | AST_NODE(outer_var_shadow) | ||
495 | ast_ptr<NameList_t, true> varList; | ||
496 | AST_END(outer_var_shadow) | ||
497 | |||
498 | AST_NODE(FnArgsDef) | ||
499 | ast_ptr<FnArgDefList_t, true> defList; | ||
500 | ast_ptr<outer_var_shadow_t, true> shadowOption; | ||
501 | AST_END(FnArgsDef) | ||
502 | |||
503 | AST_LEAF(fn_arrow) | ||
504 | AST_END(fn_arrow) | ||
505 | |||
506 | AST_NODE(FunLit) | ||
507 | ast_ptr<FnArgsDef_t, true> argsDef; | ||
508 | ast_ptr<fn_arrow_t> arrow; | ||
509 | ast_ptr<Body_t, true> body; | ||
510 | AST_END(FunLit) | ||
511 | |||
512 | AST_NODE(NameOrDestructure) | ||
513 | ast_ptr<ast_node> item; // Name_t | TableLit_t | ||
514 | AST_END(NameOrDestructure) | ||
515 | |||
516 | AST_NODE(AssignableNameList) | ||
517 | ast_ptr<Seperator_t> sep; | ||
518 | ast_list<NameOrDestructure_t> items; | ||
519 | AST_END(AssignableNameList) | ||
520 | |||
521 | AST_NODE(ArgBlock) | ||
522 | ast_ptr<Seperator_t> sep; | ||
523 | ast_list<Exp_t> arguments; | ||
524 | AST_END(ArgBlock) | ||
525 | |||
526 | AST_NODE(invoke_args_with_table) | ||
527 | ast_ptr<ArgBlock_t, true> argBlock; | ||
528 | ast_ptr<TableBlock_t, true> tableBlock; | ||
529 | AST_END(invoke_args_with_table) | ||
530 | |||
531 | AST_NODE(InvokeArgs) | ||
532 | ast_ptr<ExpList_t, true> argsList; | ||
533 | ast_ptr<invoke_args_with_table_t, true> argsTableBlock; | ||
534 | ast_ptr<TableBlock_t, true> tableBlock; | ||
535 | AST_END(InvokeArgs) | ||
536 | |||
537 | AST_LEAF(const_value) | ||
538 | AST_END(const_value) | ||
539 | |||
540 | AST_NODE(unary_exp) | ||
541 | ast_ptr<Exp_t> item; | ||
542 | AST_END(unary_exp) | ||
543 | |||
544 | AST_NODE(Assignment) | ||
545 | ast_ptr<ExpList_t> assignable; | ||
546 | ast_ptr<ast_node> target; // Update_t | Assign_t | ||
547 | AST_END(Assignment) | ||
548 | |||
549 | AST_NODE(if_else_line) | ||
550 | ast_ptr<Exp_t> condition; | ||
551 | ast_ptr<ast_node> elseExpr; // Exp_t | default_value_t | ||
552 | AST_END(if_else_line) | ||
553 | |||
554 | AST_NODE(unless_line) | ||
555 | ast_ptr<Exp_t> condition; | ||
556 | AST_END(unless_line) | ||
557 | |||
558 | AST_NODE(statement_appendix) | ||
559 | ast_ptr<ast_node> item; // if_else_line_t | unless_line_t | CompInner_t | ||
560 | AST_END(statement_appendix) | ||
561 | |||
562 | AST_LEAF(BreakLoop) | ||
563 | AST_END(BreakLoop) | ||
564 | |||
565 | AST_NODE(Statement) | ||
566 | ast_ptr<ast_node> content; /* | ||
567 | Import_t | While_t | With_t | For_t | ForEach_t | | ||
568 | Switch_t | Return_t | Local_t | Export_t | BreakLoop_t | | ||
569 | Assignment_t | ExpList_t | ||
570 | */ | ||
571 | ast_ptr<statement_appendix_t, true> appendix; | ||
572 | AST_END(Statement) | ||
573 | |||
574 | class Block_t; | ||
575 | |||
576 | AST_NODE(Body) | ||
577 | ast_ptr<ast_node> content; // Block | Statement | ||
578 | AST_END(Body) | ||
579 | |||
580 | AST_NODE(Line) | ||
581 | ast_ptr<Statement_t, true> statment; | ||
582 | AST_END(Line) | ||
583 | |||
584 | AST_NODE(Block) | ||
585 | ast_ptr<Seperator_t> sep; | ||
586 | ast_list<Line_t> lines; | ||
587 | AST_END(Block) | ||
588 | |||
589 | AST_NODE(BlockEnd) | ||
590 | ast_ptr<Block_t> block; | ||
591 | AST_END(BlockEnd) | ||