hoshi-lang dev
Yet another programming language
Loading...
Searching...
No Matches
ast.hpp
Go to the documentation of this file.
1#include <cstdint>
2#pragma clang diagnostic push
3#pragma ide diagnostic ignored "modernize-use-nodiscard"
4#pragma ide diagnostic ignored "google-explicit-constructor"
5//
6// Created by XIaokang00010 on 2023/1/24.
7//
8#ifndef HOSHI_LANG_AST_HPP
9#define HOSHI_LANG_AST_HPP
10
11#include "lexer.hpp"
12#include <share/def.hpp>
13
14namespace yoi {
15 class AST {
17
18 public:
19 AST();
20
22
23 std::tuple<yoi::indexT, yoi::indexT> getLocation();
24
26
28
30 };
31
32 class hoshiModule;
33
34 class innerMethodDef;
35
36 class constructorDef;
37
38 class innerMethodDecl;
39
40 class constructorDecl;
41
42 class subscript;
43
44 class basicLiterals;
45
46 class identifier;
47
49
51
52 class defTemplateArg;
53
54 class templateArgSpec;
55
56 class templateArg;
57
59
61
62 class funcTypeSpec;
63
64 class typeSpec;
65
66 class subscript;
67
69
71
72 class subscriptExpr;
73
74 class memberExpr;
75
76 class decltypeExpr;
77
78 class primary;
79
80 class uniqueExpr;
81
82 class mulExpr;
83
84 class addExpr;
85
86 class shiftExpr;
87
88 class relationalExpr;
89
90 class equalityExpr;
91
92 class andExpr;
93
94 class exclusiveExpr;
95
96 class inclusiveExpr;
97
98 class logicalAndExpr;
99
100 class logicalOrExpr;
101
102 class rExpr;
103
104 class codeBlock;
105
106 class useStmt;
107
108 class funcDefStmt;
109
111
112 class interfaceDefInner;
113
114 class interfaceDefStmt;
115
116 class structDefInnerPair;
117
118 class structDefInner;
119
120 class structDefStmt;
121
122 class dataStructDefStmt;
123
124 class implInnerPair;
125
126 class implInner;
127
128 class implStmt;
129
130 class letAssignmentPair;
131
132 class letStmt;
133
134 class globalStmt;
135
136 class ifStmt;
137
138 class whileStmt;
139
140 class forStmt;
141
142 class forEachStmt;
143
144 class returnStmt;
145
146 class continueStmt;
147
148 class breakStmt;
149
150 class inCodeBlockStmt;
151
152 class codeBlock;
153
154 class leftExpr;
155
157
158 class exportDecl;
159
160 class importDecl;
161
162 class importInner;
163
164 class throwStmt;
165
166 class catchParam;
167
168 class tryCatchStmt;
169
170 class dynCastExpression;
171
172 class typeIdExpression;
173
174 class newExpression;
175
176 class abstractExpr;
177
178 class lambdaExpr;
179
181
182 class marcoPair;
183
184 class marcoDescriptor;
185
186 class typeAliasStmt;
187
188 class finalizerDef;
189
190 class finalizerDecl;
191
192 class funcExpr;
193
195
197
198 class enumerationPair;
199
201
202 class yieldStmt;
203
204 class decltypeExpr;
205
206 class conceptDefinition;
207
208 class conceptStmt;
209
210 class satisfyStmt;
211
212 class satisfyClause;
213
214 class lambdaCapture;
215
216 class bracedInitalizerList : public AST {
217 public:
219 };
220
226
233
234 class marcoDescriptor : public AST {
235 public:
237 };
238
244
245 class basicLiterals : public AST {
246 public:
248
249 lexer::token &get();
250 };
251
252 class identifier : public AST {
253 public:
255
256 lexer::token &get();
257 };
258
260 public:
263
264 identifier &getId() const;
265
266 typeSpec &getSpec() const;
267 };
268
269 class defTemplateArgSpec : public AST {
270 public:
273
274 identifier &getId() const;
275 };
276
277 class defTemplateArg : public AST {
278 public:
280
282 };
283
284 class templateArgSpec : public AST {
285 public:
287
288 typeSpec &get() const;
289 };
290
291 class templateArg : public AST {
292 public:
294
296 };
297
298 class invocationArguments : public AST {
299 public:
301
302 vec<rExpr *> &get();
303 };
304
311
312 class funcTypeSpec : public AST {
313 public:
316
318
319 typeSpec &getResultType() const;
320 };
321
322 class typeSpec : public AST {
323 public:
324 enum class typeSpecKind : int16_t {
325 Member,
326 Func,
327 Null,
328 Elipsis,
330 } kind; // 0 is member 1 is func 2 is null, 3 is elipsis, 4 is decltypeExpr
335 bool isNull;
337
339
340 funcTypeSpec &getTypeSpec() const;
341 };
342
343 class subscript : public AST {
344 public:
347
348 bool isInvocation() const;
349
350 bool isSubscript() const;
351
352 rExpr &getExpr() const;
353 };
354
356 public:
359
360 identifier &getId() const;
361
362 templateArg &getArg() const;
363
364 bool hasTemplateArg() const;
365 };
366
368 public:
371
372 identifier &getId() const;
373
374 defTemplateArg &getArg() const;
375
376 bool hasDefTemplateArg() const;
377 };
378
379 class subscriptExpr : public AST {
380 public:
383
384 bool isIdentifier() const;
385
387 };
388
389 class memberExpr : public AST {
390 public:
392
394 };
395
402
403 class primary : public AST {
404 public:
405 // 0 is memberExpr 1 is basicLiterals 2 is rExpr, 3 is typeIdExpression, 4 is dynCastExpression, 5 is newExpression, 6 is lambdaExpr, 7 is
406 // funcExpr
428
429 memberExpr &getMemberExpr() const;
430
431 basicLiterals &getLiterals() const;
432
433 rExpr &getExpr() const;
434 };
435
436 class abstractExpr : public AST {
437 public:
441
442 primary &getLhs() const;
443
445
447 };
448
449 class uniqueExpr : public AST {
450 public:
453
455
456 abstractExpr &getLhs() const;
457
458 operator bool() const;
459 };
460
461 class leftExpr : public AST {
462 public:
466
468
469 uniqueExpr &getLhs() const;
470
471 rExpr &getRhs() const;
472
473 bool hasRhs() const;
474 };
475
476 class mulExpr : public AST {
477 public:
480
482
484
485 operator bool() const;
486 };
487
488 class addExpr : public AST {
489 public:
492
494
496
497 operator bool() const;
498 };
499
500 class shiftExpr : public AST {
501 public:
504
506
508
509 operator bool() const;
510 };
511
512 class relationalExpr : public AST {
513 public:
516
518
520
521 operator bool() const;
522 };
523
524 class equalityExpr : public AST {
525 public:
528
530
532
533 operator bool() const;
534 };
535
536 class andExpr : public AST {
537 public:
540
542
544
545 operator bool() const;
546 };
547
548 class exclusiveExpr : public AST {
549 public:
552
554
556
557 operator bool() const;
558 };
559
560 class inclusiveExpr : public AST {
561 public:
564
566
568
569 operator bool() const;
570 };
571
572 class logicalAndExpr : public AST {
573 public:
576
578
580
581 operator bool() const;
582 };
583
584 class logicalOrExpr : public AST {
585 public:
588
590
592
593 operator bool() const;
594 };
595
596 class rExpr : public AST {
597 public:
599
600 logicalOrExpr &getExpr() const;
601 };
602
603 class useStmt : public AST {
604 public:
607
609
611 };
612
613 class decltypeExpr : public AST {
614 public:
616 };
617
634
635 class interfaceDefInnerPair : public AST {
636 public:
637 // member var
639
641
642 // method
644
646
647 bool isMethod();
648 };
649
656
666
667 class structDefInnerPair : public AST {
668 public:
669 // 0 is member 1 is constructor 2 is method, 3 is finalizer
670 int8_t kind;
672 // member var
674 // constructor
676 // method
678 // finalizer
680
682
684
686
688 };
689
695
703
710
720
721 class dataStructDefStmt : public AST {
722 public:
725
726 identifier &getId();
727
729 };
730
731 class implInnerPair : public AST {
732 public:
733 // constructor
735 // method
737 // finalizer
739
741
743
745
746 bool isConstructor() const;
747
748 bool isFinalizer() const;
749
750 bool isMethod() const;
751 };
752
753 class implInner : public AST {
754 public:
756
758 };
759
774
775 class letAssignmentPairLHS : public AST {
776 public:
777 enum class vKind : int16_t { identifier, list } kind;
779 vec<lexer::token> list; // like [..., a, b, c] [a, b, c, ...], [a, b, c]
780 };
781
782 class letAssignmentPair : public AST {
783 public:
787
789
790 rExpr &getRhs();
791 };
792
793 class letStmt : public AST {
794 public:
796
798 };
799
841
842 class ifStmt : public AST {
843 public:
844 struct ifBlock {
847
848 rExpr &getCond();
849
851 };
852
856
858
860
862
863 bool hasElseBlock() const;
864 };
865
866 class whileStmt : public AST {
867 public:
870
871 rExpr &getCond();
872
874 };
875
891
892 class forEachStmt : public AST {
893 public:
897
899
901
903 };
904
905 class returnStmt : public AST {
906 public:
908
909 rExpr &getValue();
910
911 bool hasValue() const;
912 };
913
914 class continueStmt : public AST {};
915
916 class breakStmt : public AST {};
917
959
973
990
998
999 class finalizerDecl : public AST {
1000 public:
1001 };
1002
1013
1014 class finalizerDef : public AST {
1015 public:
1017
1019 };
1020
1021 class codeBlock : public AST {
1022 public:
1024 // Set by the parser from the closing brace; AST's base token is the opening brace.
1027
1029 };
1030
1031 class hoshiModule : public AST {
1032 public:
1034
1036 };
1037
1046
1053
1054 class importDecl : public AST {
1055 public:
1058 };
1059
1060 class throwStmt : public AST {
1061 public:
1063 };
1064
1065 class catchParam : public AST {
1066 public:
1070 };
1071
1078
1079 class typeIdExpression : public AST {
1080 public:
1083 };
1084
1085 class dynCastExpression : public AST {
1086 public:
1089 };
1090
1092 public:
1094 };
1095
1101
1102 class enumerationPair : public AST {
1103 public:
1105 lexer::token value; // optional
1106 };
1107
1108 class yieldStmt : public AST {
1109 public:
1111 };
1112
1121
1122 class conceptStmt : public AST {
1123 public:
1124 enum class Kind {
1128
1136 };
1137
1138 class satisfyStmt : public AST {
1139 public:
1141 };
1142
1147
1148 void finalizeAST(satisfyClause *ptr);
1149
1150 void finalizeAST(satisfyStmt *ptr);
1151
1152 void finalizeAST(conceptStmt *ptr);
1153
1154 void finalizeAST(conceptDefinition *ptr);
1155
1156 void finalizeAST(exportDecl *ptr);
1157
1158 void finalizeAST(importInner *ptr);
1159
1160 void finalizeAST(importDecl *ptr);
1161
1163
1164 void finalizeAST(hoshiModule *ptr);
1165
1166 void finalizeAST(leftExpr *ptr);
1167
1168 void finalizeAST(basicLiterals *ptr);
1169
1170 void finalizeAST(identifier *ptr);
1171
1172 void finalizeAST(typeSpec *ptr);
1173
1175
1177
1178 void finalizeAST(defTemplateArg *ptr);
1179
1180 void finalizeAST(templateArgSpec *ptr);
1181
1182 void finalizeAST(templateArg *ptr);
1183
1185
1187
1188 void finalizeAST(funcTypeSpec *ptr);
1189
1190 void finalizeAST(subscript *ptr);
1191
1193
1195
1196 void finalizeAST(subscriptExpr *ptr);
1197
1198 void finalizeAST(memberExpr *ptr);
1199
1200 void finalizeAST(primary *ptr);
1201
1202 void finalizeAST(decltypeExpr *ptr);
1203
1204 void finalizeAST(uniqueExpr *ptr);
1205
1206 void finalizeAST(mulExpr *ptr);
1207
1208 void finalizeAST(addExpr *ptr);
1209
1210 void finalizeAST(shiftExpr *ptr);
1211
1212 void finalizeAST(relationalExpr *ptr);
1213
1214 void finalizeAST(equalityExpr *ptr);
1215
1216 void finalizeAST(andExpr *ptr);
1217
1218 void finalizeAST(exclusiveExpr *ptr);
1219
1220 void finalizeAST(inclusiveExpr *ptr);
1221
1222 void finalizeAST(logicalAndExpr *ptr);
1223
1224 void finalizeAST(logicalOrExpr *ptr);
1225
1226 void finalizeAST(rExpr *ptr);
1227
1228 void finalizeAST(codeBlock *ptr);
1229
1230 void finalizeAST(useStmt *ptr);
1231
1232 void finalizeAST(funcDefStmt *ptr);
1233
1234 void finalizeAST(interfaceDefInner *ptr);
1235
1237
1238 void finalizeAST(interfaceDefStmt *ptr);
1239
1241
1242 void finalizeAST(structDefInner *ptr);
1243
1244 void finalizeAST(structDefStmt *ptr);
1245
1246 void finalizeAST(implInnerPair *ptr);
1247
1248 void finalizeAST(implInner *ptr);
1249
1250 void finalizeAST(implStmt *ptr);
1251
1252 void finalizeAST(letAssignmentPair *ptr);
1253
1254 void finalizeAST(letStmt *ptr);
1255
1256 void finalizeAST(globalStmt *ptr);
1257
1258 void finalizeAST(ifStmt *ptr);
1259
1260 void finalizeAST(whileStmt *ptr);
1261
1262 void finalizeAST(forStmt *ptr);
1263
1264 void finalizeAST(forEachStmt *ptr);
1265
1266 void finalizeAST(returnStmt *ptr);
1267
1268 void finalizeAST(continueStmt *ptr);
1269
1270 void finalizeAST(breakStmt *ptr);
1271
1272 void finalizeAST(inCodeBlockStmt *ptr);
1273
1274 void finalizeAST(innerMethodDecl *ptr);
1275
1276 void finalizeAST(innerMethodDef *ptr);
1277
1278 void finalizeAST(constructorDecl *ptr);
1279
1280 void finalizeAST(constructorDef *ptr);
1281
1282 void finalizeAST(tryCatchStmt *ptr);
1283
1284 void finalizeAST(catchParam *ptr);
1285
1286 void finalizeAST(throwStmt *ptr);
1287
1288 void finalizeAST(dynCastExpression *ptr);
1289
1290 void finalizeAST(typeIdExpression *ptr);
1291
1292 void finalizeAST(newExpression *ptr);
1293
1294 void finalizeAST(abstractExpr *ptr);
1295
1296 void finalizeAST(lambdaExpr *ptr);
1297
1299
1300 void finalizeAST(marcoPair *ptr);
1301
1302 void finalizeAST(marcoDescriptor *ptr);
1303
1304 void finalizeAST(typeAliasStmt *ptr);
1305
1306 void finalizeAST(finalizerDef *ptr);
1307
1308 void finalizeAST(finalizerDecl *ptr);
1309
1310 void finalizeAST(funcExpr *ptr);
1311
1313
1315
1316 void finalizeAST(enumerationPair *ptr);
1317
1319
1320 void finalizeAST(yieldStmt *ptr);
1321
1322 void finalizeAST(lambdaCapture *ptr);
1323} // namespace yoi
1324#endif // HOSHI_LANG_AST_HPP
1325#pragma clang diagnostic pop
yoi::indexT getColumn()
Definition ast.cpp:1042
lexer::token token
Definition ast.hpp:16
yoi::lexer::token & getToken()
Definition ast.cpp:1088
yoi::indexT getLine()
Definition ast.cpp:1046
std::tuple< yoi::indexT, yoi::indexT > getLocation()
Definition ast.cpp:1034
externModuleAccessExpression * rhs
Definition ast.hpp:440
externModuleAccessExpression & getRhs() const
Definition ast.cpp:1150
primary & getLhs() const
Definition ast.cpp:1144
primary * lhs
Definition ast.hpp:438
lexer::token op
Definition ast.hpp:439
lexer::token & getOp()
Definition ast.cpp:1147
vec< mulExpr * > terms
Definition ast.hpp:490
vec< lexer::token > ops
Definition ast.hpp:491
vec< mulExpr * > & getTerms()
Definition ast.cpp:151
vec< lexer::token > & getOp()
Definition ast.cpp:155
vec< equalityExpr * > & getTerms()
Definition ast.cpp:199
vec< lexer::token > ops
Definition ast.hpp:539
vec< lexer::token > & getOp()
Definition ast.cpp:203
vec< equalityExpr * > terms
Definition ast.hpp:538
lexer::token node
Definition ast.hpp:247
lexer::token & get()
Definition ast.cpp:8
yoi::vec< yoi::rExpr * > exprs
Definition ast.hpp:218
codeBlock * block
Definition ast.hpp:1069
identifier * name
Definition ast.hpp:1068
typeSpec * type
Definition ast.hpp:1067
yoi::indexT endLine
Definition ast.hpp:1025
vec< inCodeBlockStmt * > & getStmts()
Definition ast.cpp:471
vec< inCodeBlockStmt * > stmts
Definition ast.hpp:1023
yoi::indexT endColumn
Definition ast.hpp:1026
yoi::vec< identifierWithTypeSpec * > algebraParams
Definition ast.hpp:1117
yoi::vec< lexer::token > typeParams
Definition ast.hpp:1116
yoi::vec< conceptStmt * > conceptBlock
Definition ast.hpp:1119
lexer::token name
Definition ast.hpp:1115
union yoi::conceptStmt::ConceptStmtValue value
enum yoi::conceptStmt::Kind kind
defTemplateArg * tempArgs
Definition ast.hpp:993
definitionArguments & getArgs()
Definition ast.cpp:988
definitionArguments * args
Definition ast.hpp:994
codeBlock * block
Definition ast.hpp:1007
codeBlock & getBlock()
Definition ast.cpp:996
templateArg * tempArgs
Definition ast.hpp:1005
definitionArguments & getArgs()
Definition ast.cpp:992
definitionArguments * args
Definition ast.hpp:1006
structDefInner * inner
Definition ast.hpp:724
identifier & getId()
Definition ast.cpp:335
structDefInner & getInner()
Definition ast.cpp:339
identifier * id
Definition ast.hpp:723
rExpr * expr
Definition ast.hpp:615
satisfyClause * satisfyCondition
Definition ast.hpp:272
identifier & getId() const
Definition ast.cpp:24
identifier * id
Definition ast.hpp:271
vec< defTemplateArgSpec * > & get()
Definition ast.cpp:27
vec< defTemplateArgSpec * > spec
Definition ast.hpp:279
vec< identifierWithTypeSpec * > spec
Definition ast.hpp:307
vec< identifierWithTypeSpec * > & get()
Definition ast.cpp:43
vec< enumerationPair * > values
Definition ast.hpp:1099
lexer::token value
Definition ast.hpp:1105
identifier * name
Definition ast.hpp:1104
vec< relationalExpr * > & getTerms()
Definition ast.cpp:187
vec< relationalExpr * > terms
Definition ast.hpp:526
vec< lexer::token > ops
Definition ast.hpp:527
vec< lexer::token > & getOp()
Definition ast.cpp:191
vec< andExpr * > & getTerms()
Definition ast.cpp:211
vec< lexer::token > ops
Definition ast.hpp:551
vec< lexer::token > & getOp()
Definition ast.cpp:215
vec< andExpr * > terms
Definition ast.hpp:550
typeSpec * from
Definition ast.hpp:1050
identifier * as
Definition ast.hpp:1051
yoi::vec< lexer::token > attrs
Definition ast.hpp:1049
vec< identifierWithTemplateArg * > & getTerms()
Definition ast.cpp:1004
vec< identifierWithTemplateArg * > terms
Definition ast.hpp:1040
codeBlock * block
Definition ast.hpp:1016
codeBlock & getBlock()
Definition ast.cpp:1194
codeBlock * block
Definition ast.hpp:896
rExpr * container
Definition ast.hpp:895
codeBlock & getBlock()
Definition ast.cpp:451
identifier * var
Definition ast.hpp:894
rExpr & getContainer()
Definition ast.cpp:447
identifier & getVar()
Definition ast.cpp:443
codeBlock * block
Definition ast.hpp:881
inCodeBlockStmt * afterStmt
Definition ast.hpp:880
codeBlock & getBlock()
Definition ast.cpp:439
inCodeBlockStmt * initStmt
Definition ast.hpp:878
rExpr & getCond()
Definition ast.cpp:431
rExpr * cond
Definition ast.hpp:879
inCodeBlockStmt & getAfterStmt()
Definition ast.cpp:435
inCodeBlockStmt & getInitStmt()
Definition ast.cpp:427
codeBlock * block
Definition ast.hpp:624
typeSpec & getResultType()
Definition ast.cpp:279
codeBlock & getBlock()
Definition ast.cpp:283
identifierWithDefTemplateArg * id
Definition ast.hpp:621
definitionArguments & getArgs()
Definition ast.cpp:275
typeSpec * resultType
Definition ast.hpp:623
identifierWithDefTemplateArg & getId()
Definition ast.cpp:271
yoi::vec< lexer::token > attrs
Definition ast.hpp:620
definitionArguments * args
Definition ast.hpp:622
externModuleAccessExpression * name
Definition ast.hpp:241
unnamedDefinitionArguments * args
Definition ast.hpp:242
typeSpec * resultType
Definition ast.hpp:315
unnamedDefinitionArguments & getArgs() const
Definition ast.cpp:47
typeSpec & getResultType() const
Definition ast.cpp:51
unnamedDefinitionArguments * args
Definition ast.hpp:314
vValue & getValue()
Definition ast.cpp:391
vKind & getKind()
Definition ast.cpp:387
union yoi::globalStmt::vValue value
enum yoi::globalStmt::vKind kind
marcoDescriptor * marco
Definition ast.hpp:817
vec< globalStmt * > & getStmts()
Definition ast.cpp:1000
vec< globalStmt * > stmts
Definition ast.hpp:1033
defTemplateArg & getArg() const
Definition ast.cpp:83
identifier & getId() const
Definition ast.cpp:79
identifier & getId() const
Definition ast.cpp:67
bool hasTemplateArg() const
Definition ast.cpp:75
templateArg & getArg() const
Definition ast.cpp:71
identifier & getId() const
Definition ast.cpp:16
typeSpec & getSpec() const
Definition ast.cpp:20
lexer::token node
Definition ast.hpp:254
lexer::token & get()
Definition ast.cpp:12
vec< ifBlock > elifB
Definition ast.hpp:854
vec< ifBlock > & getElifBlock()
Definition ast.cpp:407
codeBlock & getElseBlock()
Definition ast.cpp:411
codeBlock * elseB
Definition ast.hpp:855
ifBlock & getIfBlock()
Definition ast.cpp:403
ifBlock ifB
Definition ast.hpp:853
bool hasElseBlock() const
Definition ast.cpp:415
bool isFinalizer() const
Definition ast.cpp:1206
bool isMethod() const
Definition ast.cpp:1202
innerMethodDef * met
Definition ast.hpp:736
innerMethodDef & getMethod()
Definition ast.cpp:347
finalizerDef * finalizer
Definition ast.hpp:738
finalizerDef & getFinalizer()
Definition ast.cpp:1210
constructorDef * con
Definition ast.hpp:734
constructorDef & getConstructor()
Definition ast.cpp:343
bool isConstructor() const
Definition ast.cpp:351
vec< implInnerPair * > & getInner()
Definition ast.cpp:355
vec< implInnerPair * > inner
Definition ast.hpp:755
bool isImplForStmt()
Definition ast.cpp:367
implInner * inner
Definition ast.hpp:764
implInner & getInner()
Definition ast.cpp:371
externModuleAccessExpression & getInterfaceId()
Definition ast.cpp:359
externModuleAccessExpression & getStructId()
Definition ast.cpp:363
externModuleAccessExpression * structName
Definition ast.hpp:763
externModuleAccessExpression * interfaceName
Definition ast.hpp:762
lexer::token from_path
Definition ast.hpp:1057
innerMethodDecl * inner
Definition ast.hpp:1056
union yoi::inCodeBlockStmt::vValue value
vKind & getKind()
Definition ast.cpp:463
enum yoi::inCodeBlockStmt::vKind kind
marcoDescriptor * marco
Definition ast.hpp:936
vValue & getValue()
Definition ast.cpp:467
vec< lexer::token > ops
Definition ast.hpp:563
vec< exclusiveExpr * > terms
Definition ast.hpp:562
vec< lexer::token > & getOp()
Definition ast.cpp:227
vec< exclusiveExpr * > & getTerms()
Definition ast.cpp:223
typeSpec & getResultType()
Definition ast.cpp:968
definitionArguments & getArgs()
Definition ast.cpp:964
typeSpec * resultType
Definition ast.hpp:965
yoi::vec< lexer::token > attrs
Definition ast.hpp:962
identifierWithDefTemplateArg * name
Definition ast.hpp:963
definitionArguments * args
Definition ast.hpp:964
identifierWithDefTemplateArg & getName()
Definition ast.cpp:960
codeBlock * block
Definition ast.hpp:980
typeSpec & getResultType()
Definition ast.cpp:980
identifierWithTemplateArg & getName()
Definition ast.cpp:972
codeBlock & getBlock()
Definition ast.cpp:984
definitionArguments & getArgs()
Definition ast.cpp:976
typeSpec * resultType
Definition ast.hpp:979
yoi::vec< lexer::token > attrs
Definition ast.hpp:976
definitionArguments * args
Definition ast.hpp:978
identifierWithTemplateArg * name
Definition ast.hpp:977
innerMethodDecl * method
Definition ast.hpp:643
innerMethodDecl & getMethod()
Definition ast.cpp:295
identifierWithTypeSpec & getVar()
Definition ast.cpp:287
identifierWithTypeSpec * var
Definition ast.hpp:638
vec< interfaceDefInnerPair * > & getInner()
Definition ast.cpp:299
vec< interfaceDefInnerPair * > inner
Definition ast.hpp:652
identifierWithDefTemplateArg * id
Definition ast.hpp:659
identifierWithDefTemplateArg & getId()
Definition ast.cpp:303
interfaceDefInner & getInner()
Definition ast.cpp:307
interfaceDefInner * inner
Definition ast.hpp:660
vec< rExpr * > & get()
Definition ast.cpp:39
vec< rExpr * > arg
Definition ast.hpp:300
structDefInnerPair::Modifier attr
Definition ast.hpp:692
yoi::identifier * identifier
Definition ast.hpp:693
codeBlock * block
Definition ast.hpp:701
vec< yoi::lambdaCapture * > captures
Definition ast.hpp:698
typeSpec * resultType
Definition ast.hpp:700
definitionArguments * args
Definition ast.hpp:699
rExpr * rhs
Definition ast.hpp:465
uniqueExpr & getLhs() const
Definition ast.cpp:127
lexer::token op
Definition ast.hpp:463
uniqueExpr * lhs
Definition ast.hpp:464
lexer::token & getOp()
Definition ast.cpp:123
rExpr & getRhs() const
Definition ast.cpp:131
bool hasRhs() const
Definition ast.cpp:135
vec< lexer::token > list
Definition ast.hpp:779
enum yoi::letAssignmentPairLHS::vKind kind
letAssignmentPairLHS * lhs
Definition ast.hpp:784
letAssignmentPairLHS & getLhs()
Definition ast.cpp:375
typeSpec * type
Definition ast.hpp:785
vec< letAssignmentPair * > & getTerms()
Definition ast.cpp:383
vec< letAssignmentPair * > terms
Definition ast.hpp:795
vec< lexer::token > ops
Definition ast.hpp:575
vec< lexer::token > & getOp()
Definition ast.cpp:239
vec< inclusiveExpr * > terms
Definition ast.hpp:574
vec< inclusiveExpr * > & getTerms()
Definition ast.cpp:235
vec< lexer::token > ops
Definition ast.hpp:587
vec< logicalAndExpr * > & getTerms()
Definition ast.cpp:247
vec< lexer::token > & getOp()
Definition ast.cpp:251
vec< logicalAndExpr * > terms
Definition ast.hpp:586
yoi::vec< marcoPair * > pairs
Definition ast.hpp:236
lexer::token identifier
Definition ast.hpp:229
lexer::token rhs
Definition ast.hpp:231
lexer::token constraint
Definition ast.hpp:230
vec< subscriptExpr * > & getTerms()
Definition ast.cpp:95
vec< subscriptExpr * > terms
Definition ast.hpp:391
vec< leftExpr * > terms
Definition ast.hpp:478
vec< lexer::token > ops
Definition ast.hpp:479
vec< lexer::token > & getOp()
Definition ast.cpp:143
vec< leftExpr * > & getTerms()
Definition ast.cpp:139
subscript * length
Definition ast.hpp:399
invocationArguments * args
Definition ast.hpp:400
externModuleAccessExpression * type
Definition ast.hpp:398
lambdaExpr * lambda
Definition ast.hpp:424
enum yoi::primary::primaryKind kind
funcExpr * func
Definition ast.hpp:425
memberExpr * member
Definition ast.hpp:418
rExpr & getExpr() const
Definition ast.cpp:107
decltypeExpr * decltypeExpr
Definition ast.hpp:427
rExpr * expr
Definition ast.hpp:420
memberExpr & getMemberExpr() const
Definition ast.cpp:99
basicLiterals * literals
Definition ast.hpp:419
newExpression * newExpr
Definition ast.hpp:423
bracedInitalizerList * bracedInitalizer
Definition ast.hpp:426
basicLiterals & getLiterals() const
Definition ast.cpp:103
typeIdExpression * typeId
Definition ast.hpp:421
dynCastExpression * dynCast
Definition ast.hpp:422
logicalOrExpr * expr
Definition ast.hpp:598
logicalOrExpr & getExpr() const
Definition ast.cpp:259
vec< lexer::token > ops
Definition ast.hpp:515
vec< shiftExpr * > & getTerms()
Definition ast.cpp:175
vec< shiftExpr * > terms
Definition ast.hpp:514
vec< lexer::token > & getOp()
Definition ast.cpp:179
rExpr * value
Definition ast.hpp:907
rExpr & getValue()
Definition ast.cpp:455
bool hasValue() const
Definition ast.cpp:459
yoi::vec< externModuleAccessExpression * > emaes
Definition ast.hpp:1145
externModuleAccessExpression * emae
Definition ast.hpp:1140
vec< lexer::token > ops
Definition ast.hpp:503
vec< lexer::token > & getOp()
Definition ast.cpp:167
vec< addExpr * > terms
Definition ast.hpp:502
vec< addExpr * > & getTerms()
Definition ast.cpp:163
innerMethodDecl * method
Definition ast.hpp:677
enum yoi::structDefInnerPair::Modifier modifier
innerMethodDecl & getMethod()
Definition ast.cpp:319
constructorDecl & getConstructor()
Definition ast.cpp:315
constructorDecl * con
Definition ast.hpp:675
identifierWithTypeSpec & getVar()
Definition ast.cpp:311
finalizerDecl * finalizer
Definition ast.hpp:679
finalizerDecl & getFinalizer()
Definition ast.cpp:1198
identifierWithTypeSpec * var
Definition ast.hpp:673
vec< structDefInnerPair * > & getInner()
Definition ast.cpp:323
vec< structDefInnerPair * > inner
Definition ast.hpp:706
structDefInner * inner
Definition ast.hpp:714
identifierWithDefTemplateArg * id
Definition ast.hpp:713
identifierWithDefTemplateArg & getId()
Definition ast.cpp:327
structDefInner & getInner()
Definition ast.cpp:331
vec< subscript * > & getSubscript()
Definition ast.cpp:1084
vec< subscript * > subscriptVal
Definition ast.hpp:382
bool isIdentifier() const
Definition ast.cpp:91
identifierWithTemplateArg * id
Definition ast.hpp:381
bool isInvocation() const
Definition ast.cpp:1080
rExpr & getExpr() const
Definition ast.cpp:63
rExpr * expr
Definition ast.hpp:345
bool isSubscript() const
Definition ast.cpp:1076
invocationArguments * args
Definition ast.hpp:346
typeSpec * spec
Definition ast.hpp:286
typeSpec & get() const
Definition ast.cpp:31
vec< templateArgSpec * > spec
Definition ast.hpp:293
vec< templateArgSpec * > & get()
Definition ast.cpp:35
rExpr * expr
Definition ast.hpp:1062
vec< catchParam * > catchParams
Definition ast.hpp:1075
codeBlock * tryBlock
Definition ast.hpp:1074
codeBlock * finallyBlock
Definition ast.hpp:1076
yoi::identifierWithDefTemplateArg * lhs
Definition ast.hpp:223
yoi::typeSpec * rhs
Definition ast.hpp:224
typeSpec * type
Definition ast.hpp:1081
decltypeExpr * decltypeExpression
Definition ast.hpp:334
yoi::vec< uint64_t > * arraySubscript
Definition ast.hpp:336
funcTypeSpec & getTypeSpec() const
Definition ast.cpp:59
externModuleAccessExpression * member
Definition ast.hpp:331
funcTypeSpec * func
Definition ast.hpp:332
enum yoi::typeSpec::typeSpecKind kind
typeSpec * elipsis
Definition ast.hpp:333
bool isNull
Definition ast.hpp:335
externModuleAccessExpression & getMemberExpr() const
Definition ast.cpp:55
abstractExpr & getLhs() const
Definition ast.cpp:115
lexer::token op
Definition ast.hpp:451
lexer::token & getOp()
Definition ast.cpp:111
abstractExpr * lhs
Definition ast.hpp:452
vec< typeSpec * > types
Definition ast.hpp:1093
identifier * name
Definition ast.hpp:605
identifier & getName()
Definition ast.cpp:263
lexer::token path
Definition ast.hpp:606
lexer::token & getPath()
Definition ast.cpp:267
codeBlock * block
Definition ast.hpp:869
codeBlock & getBlock()
Definition ast.cpp:423
rExpr & getCond()
Definition ast.cpp:419
rExpr * cond
Definition ast.hpp:868
rExpr * expr
Definition ast.hpp:1110
std::vector< t > vec
Definition def.hpp:56
void finalizeAST(funcTypeSpec *ptr)
Definition ast.cpp:475
uint64_t indexT
Definition def.hpp:54
codeBlock * block
Definition ast.hpp:846
codeBlock & getBlock()
Definition ast.cpp:399
rExpr & getCond()
Definition ast.cpp:395
dataStructDefStmt * dataStructDefStmtVal
Definition ast.hpp:823
enumerationDefinition * enumerationDefVal
Definition ast.hpp:830
useStmt * useStmtVal
Definition ast.hpp:820
implStmt * implStmtVal
Definition ast.hpp:824
interfaceDefStmt * interfaceDefStmtVal
Definition ast.hpp:821
letStmt * letStmtVal
Definition ast.hpp:825
conceptDefinition * conceptDefVal
Definition ast.hpp:831
funcDefStmt * funcDefStmtVal
Definition ast.hpp:826
typeAliasStmt * typeAliasStmtVal
Definition ast.hpp:829
exportDecl * exportDeclVal
Definition ast.hpp:828
structDefStmt * structDefStmtVal
Definition ast.hpp:822
importDecl * importDeclVal
Definition ast.hpp:827
forEachStmt * forEachStmtVal
Definition ast.hpp:941
returnStmt * returnStmtVal
Definition ast.hpp:942
continueStmt * continueStmtVal
Definition ast.hpp:943