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 bracedInitalizerList : public AST {
215 public:
217 };
218
224
231
232 class marcoDescriptor : public AST {
233 public:
235 };
236
244
250
251 class basicLiterals : public AST {
252 public:
254
255 lexer::token &get();
256 };
257
258 class identifier : public AST {
259 public:
261
262 lexer::token &get();
263 };
264
266 public:
269
270 identifier &getId() const;
271
272 typeSpec &getSpec() const;
273 };
274
275 class defTemplateArgSpec : public AST {
276 public:
279
280 identifier &getId() const;
281 };
282
283 class defTemplateArg : public AST {
284 public:
286
288 };
289
290 class templateArgSpec : public AST {
291 public:
293
294 typeSpec &get() const;
295 };
296
297 class templateArg : public AST {
298 public:
300
302 };
303
304 class invocationArguments : public AST {
305 public:
307
308 vec<rExpr *> &get();
309 };
310
317
318 class funcTypeSpec : public AST {
319 public:
322
324
325 typeSpec &getResultType() const;
326 };
327
328 class typeSpec : public AST {
329 public:
330 enum class typeSpecKind : int16_t {
331 Member,
332 Func,
333 Null,
334 Elipsis,
336 } kind; // 0 is member 1 is func 2 is null, 3 is elipsis, 4 is decltypeExpr
341 bool isNull;
343
345
346 funcTypeSpec &getTypeSpec() const;
347 };
348
349 class subscript : public AST {
350 public:
353
354 bool isInvocation() const;
355
356 bool isSubscript() const;
357
358 rExpr &getExpr() const;
359 };
360
362 public:
365
366 identifier &getId() const;
367
368 templateArg &getArg() const;
369
370 bool hasTemplateArg() const;
371 };
372
374 public:
377
378 identifier &getId() const;
379
380 defTemplateArg &getArg() const;
381
382 bool hasDefTemplateArg() const;
383 };
384
385 class subscriptExpr : public AST {
386 public:
389
390 bool isIdentifier() const;
391
393 };
394
395 class memberExpr : public AST {
396 public:
398
400 };
401
408
409 class primary : public AST {
410 public:
411 // 0 is memberExpr 1 is basicLiterals 2 is rExpr, 3 is typeIdExpression, 4 is dynCastExpression, 5 is newExpression, 6 is lambdaExpr, 7 is
412 // funcExpr
434
435 memberExpr &getMemberExpr() const;
436
437 basicLiterals &getLiterals() const;
438
439 rExpr &getExpr() const;
440 };
441
442 class abstractExpr : public AST {
443 public:
447
448 primary &getLhs() const;
449
451
453 };
454
455 class uniqueExpr : public AST {
456 public:
459
461
462 abstractExpr &getLhs() const;
463
464 operator bool() const;
465 };
466
467 class leftExpr : public AST {
468 public:
472
474
475 uniqueExpr &getLhs() const;
476
477 rExpr &getRhs() const;
478
479 bool hasRhs() const;
480 };
481
482 class mulExpr : public AST {
483 public:
486
488
490
491 operator bool() const;
492 };
493
494 class addExpr : public AST {
495 public:
498
500
502
503 operator bool() const;
504 };
505
506 class shiftExpr : public AST {
507 public:
510
512
514
515 operator bool() const;
516 };
517
518 class relationalExpr : public AST {
519 public:
522
524
526
527 operator bool() const;
528 };
529
530 class equalityExpr : public AST {
531 public:
534
536
538
539 operator bool() const;
540 };
541
542 class andExpr : public AST {
543 public:
546
548
550
551 operator bool() const;
552 };
553
554 class exclusiveExpr : public AST {
555 public:
558
560
562
563 operator bool() const;
564 };
565
566 class inclusiveExpr : public AST {
567 public:
570
572
574
575 operator bool() const;
576 };
577
578 class logicalAndExpr : public AST {
579 public:
582
584
586
587 operator bool() const;
588 };
589
590 class logicalOrExpr : public AST {
591 public:
594
596
598
599 operator bool() const;
600 };
601
602 class rExpr : public AST {
603 public:
605
606 logicalOrExpr &getExpr() const;
607 };
608
609 class useStmt : public AST {
610 public:
613
615
617 };
618
619 class decltypeExpr : public AST {
620 public:
622 };
623
640
641 class interfaceDefInnerPair : public AST {
642 public:
643 // member var
645
647
648 // method
650
652
653 bool isMethod();
654 };
655
662
672
673 class structDefInnerPair : public AST {
674 public:
675 // 0 is member 1 is constructor 2 is method, 3 is finalizer
676 int8_t kind;
678 // member var
680 // constructor
682 // method
684 // finalizer
686
688
690
692
694 };
695
702
712
713 class dataStructDefStmt : public AST {
714 public:
717
718 identifier &getId();
719
721 };
722
723 class implInnerPair : public AST {
724 public:
725 // constructor
727 // method
729 // finalizer
731
733
735
737
738 bool isConstructor() const;
739
740 bool isFinalizer() const;
741
742 bool isMethod() const;
743 };
744
745 class implInner : public AST {
746 public:
748
750 };
751
766
767 class letAssignmentPairLHS : public AST {
768 public:
769 enum class vKind : int16_t { identifier, list } kind;
771 vec<lexer::token> list; // like [..., a, b, c] [a, b, c, ...], [a, b, c]
772 };
773
774 class letAssignmentPair : public AST {
775 public:
779
781
782 rExpr &getRhs();
783 };
784
785 class letStmt : public AST {
786 public:
788
790 };
791
833
834 class ifStmt : public AST {
835 public:
836 struct ifBlock {
839
840 rExpr &getCond();
841
843 };
844
848
850
852
854
855 bool hasElseBlock() const;
856 };
857
858 class whileStmt : public AST {
859 public:
862
863 rExpr &getCond();
864
866 };
867
883
884 class forEachStmt : public AST {
885 public:
889
891
893
895 };
896
897 class returnStmt : public AST {
898 public:
900
901 rExpr &getValue();
902
903 bool hasValue() const;
904 };
905
906 class continueStmt : public AST {};
907
908 class breakStmt : public AST {};
909
951
965
982
990
991 class finalizerDecl : public AST {
992 public:
993 };
994
1005
1006 class finalizerDef : public AST {
1007 public:
1009
1011 };
1012
1013 class codeBlock : public AST {
1014 public:
1016
1018 };
1019
1020 class hoshiModule : public AST {
1021 public:
1023
1025 };
1026
1035
1042
1043 class importDecl : public AST {
1044 public:
1047 };
1048
1049 class throwStmt : public AST {
1050 public:
1052 };
1053
1054 class catchParam : public AST {
1055 public:
1059 };
1060
1067
1068 class typeIdExpression : public AST {
1069 public:
1072 };
1073
1074 class dynCastExpression : public AST {
1075 public:
1078 };
1079
1081 public:
1083 };
1084
1090
1091 class enumerationPair : public AST {
1092 public:
1094 lexer::token value; // optional
1095 };
1096
1097 class yieldStmt : public AST {
1098 public:
1100 };
1101
1110
1111 class conceptStmt : public AST {
1112 public:
1113 enum class Kind {
1117
1125 };
1126
1127 class satisfyStmt : public AST {
1128 public:
1130 };
1131
1136
1137 void finalizeAST(satisfyClause *ptr);
1138
1139 void finalizeAST(satisfyStmt *ptr);
1140
1141 void finalizeAST(conceptStmt *ptr);
1142
1143 void finalizeAST(conceptDefinition *ptr);
1144
1145 void finalizeAST(exportDecl *ptr);
1146
1147 void finalizeAST(importInner *ptr);
1148
1149 void finalizeAST(importDecl *ptr);
1150
1152
1153 void finalizeAST(hoshiModule *ptr);
1154
1155 void finalizeAST(leftExpr *ptr);
1156
1157 void finalizeAST(basicLiterals *ptr);
1158
1159 void finalizeAST(identifier *ptr);
1160
1161 void finalizeAST(typeSpec *ptr);
1162
1164
1166
1167 void finalizeAST(defTemplateArg *ptr);
1168
1169 void finalizeAST(templateArgSpec *ptr);
1170
1171 void finalizeAST(templateArg *ptr);
1172
1174
1176
1177 void finalizeAST(funcTypeSpec *ptr);
1178
1179 void finalizeAST(subscript *ptr);
1180
1182
1184
1185 void finalizeAST(subscriptExpr *ptr);
1186
1187 void finalizeAST(memberExpr *ptr);
1188
1189 void finalizeAST(primary *ptr);
1190
1191 void finalizeAST(decltypeExpr *ptr);
1192
1193 void finalizeAST(uniqueExpr *ptr);
1194
1195 void finalizeAST(mulExpr *ptr);
1196
1197 void finalizeAST(addExpr *ptr);
1198
1199 void finalizeAST(shiftExpr *ptr);
1200
1201 void finalizeAST(relationalExpr *ptr);
1202
1203 void finalizeAST(equalityExpr *ptr);
1204
1205 void finalizeAST(andExpr *ptr);
1206
1207 void finalizeAST(exclusiveExpr *ptr);
1208
1209 void finalizeAST(inclusiveExpr *ptr);
1210
1211 void finalizeAST(logicalAndExpr *ptr);
1212
1213 void finalizeAST(logicalOrExpr *ptr);
1214
1215 void finalizeAST(rExpr *ptr);
1216
1217 void finalizeAST(codeBlock *ptr);
1218
1219 void finalizeAST(useStmt *ptr);
1220
1221 void finalizeAST(funcDefStmt *ptr);
1222
1223 void finalizeAST(interfaceDefInner *ptr);
1224
1226
1227 void finalizeAST(interfaceDefStmt *ptr);
1228
1230
1231 void finalizeAST(structDefInner *ptr);
1232
1233 void finalizeAST(structDefStmt *ptr);
1234
1235 void finalizeAST(implInnerPair *ptr);
1236
1237 void finalizeAST(implInner *ptr);
1238
1239 void finalizeAST(implStmt *ptr);
1240
1241 void finalizeAST(letAssignmentPair *ptr);
1242
1243 void finalizeAST(letStmt *ptr);
1244
1245 void finalizeAST(globalStmt *ptr);
1246
1247 void finalizeAST(ifStmt *ptr);
1248
1249 void finalizeAST(whileStmt *ptr);
1250
1251 void finalizeAST(forStmt *ptr);
1252
1253 void finalizeAST(forEachStmt *ptr);
1254
1255 void finalizeAST(returnStmt *ptr);
1256
1257 void finalizeAST(continueStmt *ptr);
1258
1259 void finalizeAST(breakStmt *ptr);
1260
1261 void finalizeAST(inCodeBlockStmt *ptr);
1262
1263 void finalizeAST(innerMethodDecl *ptr);
1264
1265 void finalizeAST(innerMethodDef *ptr);
1266
1267 void finalizeAST(constructorDecl *ptr);
1268
1269 void finalizeAST(constructorDef *ptr);
1270
1271 void finalizeAST(tryCatchStmt *ptr);
1272
1273 void finalizeAST(catchParam *ptr);
1274
1275 void finalizeAST(throwStmt *ptr);
1276
1277 void finalizeAST(dynCastExpression *ptr);
1278
1279 void finalizeAST(typeIdExpression *ptr);
1280
1281 void finalizeAST(newExpression *ptr);
1282
1283 void finalizeAST(abstractExpr *ptr);
1284
1285 void finalizeAST(lambdaExpr *ptr);
1286
1288
1289 void finalizeAST(marcoPair *ptr);
1290
1291 void finalizeAST(marcoDescriptor *ptr);
1292
1293 void finalizeAST(typeAliasStmt *ptr);
1294
1295 void finalizeAST(finalizerDef *ptr);
1296
1297 void finalizeAST(finalizerDecl *ptr);
1298
1299 void finalizeAST(funcExpr *ptr);
1300
1302
1304
1305 void finalizeAST(enumerationPair *ptr);
1306
1308
1309 void finalizeAST(yieldStmt *ptr);
1310} // namespace yoi
1311#endif // HOSHI_LANG_AST_HPP
1312#pragma clang diagnostic pop
yoi::indexT getColumn()
Definition ast.cpp:1037
lexer::token token
Definition ast.hpp:16
yoi::lexer::token & getToken()
Definition ast.cpp:1083
yoi::indexT getLine()
Definition ast.cpp:1041
std::tuple< yoi::indexT, yoi::indexT > getLocation()
Definition ast.cpp:1029
externModuleAccessExpression * rhs
Definition ast.hpp:446
externModuleAccessExpression & getRhs() const
Definition ast.cpp:1145
primary & getLhs() const
Definition ast.cpp:1139
primary * lhs
Definition ast.hpp:444
lexer::token op
Definition ast.hpp:445
lexer::token & getOp()
Definition ast.cpp:1142
vec< mulExpr * > terms
Definition ast.hpp:496
vec< lexer::token > ops
Definition ast.hpp:497
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:545
vec< lexer::token > & getOp()
Definition ast.cpp:203
vec< equalityExpr * > terms
Definition ast.hpp:544
lexer::token node
Definition ast.hpp:253
lexer::token & get()
Definition ast.cpp:8
yoi::vec< yoi::rExpr * > exprs
Definition ast.hpp:216
codeBlock * block
Definition ast.hpp:1058
identifier * name
Definition ast.hpp:1057
typeSpec * type
Definition ast.hpp:1056
vec< inCodeBlockStmt * > & getStmts()
Definition ast.cpp:471
vec< inCodeBlockStmt * > stmts
Definition ast.hpp:1015
yoi::vec< identifierWithTypeSpec * > algebraParams
Definition ast.hpp:1106
yoi::vec< lexer::token > typeParams
Definition ast.hpp:1105
yoi::vec< conceptStmt * > conceptBlock
Definition ast.hpp:1108
lexer::token name
Definition ast.hpp:1104
union yoi::conceptStmt::ConceptStmtValue value
enum yoi::conceptStmt::Kind kind
defTemplateArg * tempArgs
Definition ast.hpp:985
definitionArguments & getArgs()
Definition ast.cpp:983
definitionArguments * args
Definition ast.hpp:986
codeBlock * block
Definition ast.hpp:999
codeBlock & getBlock()
Definition ast.cpp:991
templateArg * tempArgs
Definition ast.hpp:997
definitionArguments & getArgs()
Definition ast.cpp:987
definitionArguments * args
Definition ast.hpp:998
structDefInner * inner
Definition ast.hpp:716
identifier & getId()
Definition ast.cpp:335
structDefInner & getInner()
Definition ast.cpp:339
identifier * id
Definition ast.hpp:715
rExpr * expr
Definition ast.hpp:621
satisfyClause * satisfyCondition
Definition ast.hpp:278
identifier & getId() const
Definition ast.cpp:24
identifier * id
Definition ast.hpp:277
vec< defTemplateArgSpec * > & get()
Definition ast.cpp:27
vec< defTemplateArgSpec * > spec
Definition ast.hpp:285
vec< identifierWithTypeSpec * > spec
Definition ast.hpp:313
vec< identifierWithTypeSpec * > & get()
Definition ast.cpp:43
vec< enumerationPair * > values
Definition ast.hpp:1088
lexer::token value
Definition ast.hpp:1094
identifier * name
Definition ast.hpp:1093
vec< relationalExpr * > & getTerms()
Definition ast.cpp:187
vec< relationalExpr * > terms
Definition ast.hpp:532
vec< lexer::token > ops
Definition ast.hpp:533
vec< lexer::token > & getOp()
Definition ast.cpp:191
vec< andExpr * > & getTerms()
Definition ast.cpp:211
vec< lexer::token > ops
Definition ast.hpp:557
vec< lexer::token > & getOp()
Definition ast.cpp:215
vec< andExpr * > terms
Definition ast.hpp:556
typeSpec * from
Definition ast.hpp:1039
identifier * as
Definition ast.hpp:1040
yoi::vec< lexer::token > attrs
Definition ast.hpp:1038
vec< identifierWithTemplateArg * > & getTerms()
Definition ast.cpp:999
vec< identifierWithTemplateArg * > terms
Definition ast.hpp:1029
codeBlock * block
Definition ast.hpp:1008
codeBlock & getBlock()
Definition ast.cpp:1189
codeBlock * block
Definition ast.hpp:888
rExpr * container
Definition ast.hpp:887
codeBlock & getBlock()
Definition ast.cpp:451
identifier * var
Definition ast.hpp:886
rExpr & getContainer()
Definition ast.cpp:447
identifier & getVar()
Definition ast.cpp:443
codeBlock * block
Definition ast.hpp:873
inCodeBlockStmt * afterStmt
Definition ast.hpp:872
codeBlock & getBlock()
Definition ast.cpp:439
inCodeBlockStmt * initStmt
Definition ast.hpp:870
rExpr & getCond()
Definition ast.cpp:431
rExpr * cond
Definition ast.hpp:871
inCodeBlockStmt & getAfterStmt()
Definition ast.cpp:435
inCodeBlockStmt & getInitStmt()
Definition ast.cpp:427
codeBlock * block
Definition ast.hpp:630
typeSpec & getResultType()
Definition ast.cpp:279
codeBlock & getBlock()
Definition ast.cpp:283
identifierWithDefTemplateArg * id
Definition ast.hpp:627
definitionArguments & getArgs()
Definition ast.cpp:275
typeSpec * resultType
Definition ast.hpp:629
identifierWithDefTemplateArg & getId()
Definition ast.cpp:271
yoi::vec< lexer::token > attrs
Definition ast.hpp:626
definitionArguments * args
Definition ast.hpp:628
externModuleAccessExpression * name
Definition ast.hpp:247
unnamedDefinitionArguments * args
Definition ast.hpp:248
typeSpec * resultType
Definition ast.hpp:321
unnamedDefinitionArguments & getArgs() const
Definition ast.cpp:47
typeSpec & getResultType() const
Definition ast.cpp:51
unnamedDefinitionArguments * args
Definition ast.hpp:320
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:809
vec< globalStmt * > & getStmts()
Definition ast.cpp:995
vec< globalStmt * > stmts
Definition ast.hpp:1022
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:260
lexer::token & get()
Definition ast.cpp:12
vec< ifBlock > elifB
Definition ast.hpp:846
vec< ifBlock > & getElifBlock()
Definition ast.cpp:407
codeBlock & getElseBlock()
Definition ast.cpp:411
codeBlock * elseB
Definition ast.hpp:847
ifBlock & getIfBlock()
Definition ast.cpp:403
ifBlock ifB
Definition ast.hpp:845
bool hasElseBlock() const
Definition ast.cpp:415
bool isFinalizer() const
Definition ast.cpp:1201
bool isMethod() const
Definition ast.cpp:1197
innerMethodDef * met
Definition ast.hpp:728
innerMethodDef & getMethod()
Definition ast.cpp:347
finalizerDef * finalizer
Definition ast.hpp:730
finalizerDef & getFinalizer()
Definition ast.cpp:1205
constructorDef * con
Definition ast.hpp:726
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:747
bool isImplForStmt()
Definition ast.cpp:367
implInner * inner
Definition ast.hpp:756
implInner & getInner()
Definition ast.cpp:371
externModuleAccessExpression & getInterfaceId()
Definition ast.cpp:359
externModuleAccessExpression & getStructId()
Definition ast.cpp:363
externModuleAccessExpression * structName
Definition ast.hpp:755
externModuleAccessExpression * interfaceName
Definition ast.hpp:754
lexer::token from_path
Definition ast.hpp:1046
innerMethodDecl * inner
Definition ast.hpp:1045
union yoi::inCodeBlockStmt::vValue value
vKind & getKind()
Definition ast.cpp:463
enum yoi::inCodeBlockStmt::vKind kind
marcoDescriptor * marco
Definition ast.hpp:928
vValue & getValue()
Definition ast.cpp:467
vec< lexer::token > ops
Definition ast.hpp:569
vec< exclusiveExpr * > terms
Definition ast.hpp:568
vec< lexer::token > & getOp()
Definition ast.cpp:227
vec< exclusiveExpr * > & getTerms()
Definition ast.cpp:223
typeSpec & getResultType()
Definition ast.cpp:963
definitionArguments & getArgs()
Definition ast.cpp:959
typeSpec * resultType
Definition ast.hpp:957
yoi::vec< lexer::token > attrs
Definition ast.hpp:954
identifierWithDefTemplateArg * name
Definition ast.hpp:955
definitionArguments * args
Definition ast.hpp:956
identifierWithDefTemplateArg & getName()
Definition ast.cpp:955
codeBlock * block
Definition ast.hpp:972
typeSpec & getResultType()
Definition ast.cpp:975
identifierWithTemplateArg & getName()
Definition ast.cpp:967
codeBlock & getBlock()
Definition ast.cpp:979
definitionArguments & getArgs()
Definition ast.cpp:971
typeSpec * resultType
Definition ast.hpp:971
yoi::vec< lexer::token > attrs
Definition ast.hpp:968
definitionArguments * args
Definition ast.hpp:970
identifierWithTemplateArg * name
Definition ast.hpp:969
innerMethodDecl * method
Definition ast.hpp:649
innerMethodDecl & getMethod()
Definition ast.cpp:295
identifierWithTypeSpec & getVar()
Definition ast.cpp:287
identifierWithTypeSpec * var
Definition ast.hpp:644
vec< interfaceDefInnerPair * > & getInner()
Definition ast.cpp:299
vec< interfaceDefInnerPair * > inner
Definition ast.hpp:658
identifierWithDefTemplateArg * id
Definition ast.hpp:665
identifierWithDefTemplateArg & getId()
Definition ast.cpp:303
interfaceDefInner & getInner()
Definition ast.cpp:307
interfaceDefInner * inner
Definition ast.hpp:666
vec< rExpr * > & get()
Definition ast.cpp:39
vec< rExpr * > arg
Definition ast.hpp:306
codeBlock * block
Definition ast.hpp:242
typeSpec * resultType
Definition ast.hpp:241
vec< yoi::identifier * > captures
Definition ast.hpp:239
definitionArguments * args
Definition ast.hpp:240
rExpr * rhs
Definition ast.hpp:471
uniqueExpr & getLhs() const
Definition ast.cpp:127
lexer::token op
Definition ast.hpp:469
uniqueExpr * lhs
Definition ast.hpp:470
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:771
enum yoi::letAssignmentPairLHS::vKind kind
letAssignmentPairLHS * lhs
Definition ast.hpp:776
letAssignmentPairLHS & getLhs()
Definition ast.cpp:375
typeSpec * type
Definition ast.hpp:777
vec< letAssignmentPair * > & getTerms()
Definition ast.cpp:383
vec< letAssignmentPair * > terms
Definition ast.hpp:787
vec< lexer::token > ops
Definition ast.hpp:581
vec< lexer::token > & getOp()
Definition ast.cpp:239
vec< inclusiveExpr * > terms
Definition ast.hpp:580
vec< inclusiveExpr * > & getTerms()
Definition ast.cpp:235
vec< lexer::token > ops
Definition ast.hpp:593
vec< logicalAndExpr * > & getTerms()
Definition ast.cpp:247
vec< lexer::token > & getOp()
Definition ast.cpp:251
vec< logicalAndExpr * > terms
Definition ast.hpp:592
yoi::vec< marcoPair * > pairs
Definition ast.hpp:234
lexer::token identifier
Definition ast.hpp:227
lexer::token rhs
Definition ast.hpp:229
lexer::token constraint
Definition ast.hpp:228
vec< subscriptExpr * > & getTerms()
Definition ast.cpp:95
vec< subscriptExpr * > terms
Definition ast.hpp:397
vec< leftExpr * > terms
Definition ast.hpp:484
vec< lexer::token > ops
Definition ast.hpp:485
vec< lexer::token > & getOp()
Definition ast.cpp:143
vec< leftExpr * > & getTerms()
Definition ast.cpp:139
subscript * length
Definition ast.hpp:405
invocationArguments * args
Definition ast.hpp:406
externModuleAccessExpression * type
Definition ast.hpp:404
lambdaExpr * lambda
Definition ast.hpp:430
enum yoi::primary::primaryKind kind
funcExpr * func
Definition ast.hpp:431
memberExpr * member
Definition ast.hpp:424
rExpr & getExpr() const
Definition ast.cpp:107
decltypeExpr * decltypeExpr
Definition ast.hpp:433
rExpr * expr
Definition ast.hpp:426
memberExpr & getMemberExpr() const
Definition ast.cpp:99
basicLiterals * literals
Definition ast.hpp:425
newExpression * newExpr
Definition ast.hpp:429
bracedInitalizerList * bracedInitalizer
Definition ast.hpp:432
basicLiterals & getLiterals() const
Definition ast.cpp:103
typeIdExpression * typeId
Definition ast.hpp:427
dynCastExpression * dynCast
Definition ast.hpp:428
logicalOrExpr * expr
Definition ast.hpp:604
logicalOrExpr & getExpr() const
Definition ast.cpp:259
vec< lexer::token > ops
Definition ast.hpp:521
vec< shiftExpr * > & getTerms()
Definition ast.cpp:175
vec< shiftExpr * > terms
Definition ast.hpp:520
vec< lexer::token > & getOp()
Definition ast.cpp:179
rExpr * value
Definition ast.hpp:899
rExpr & getValue()
Definition ast.cpp:455
bool hasValue() const
Definition ast.cpp:459
yoi::vec< externModuleAccessExpression * > emaes
Definition ast.hpp:1134
externModuleAccessExpression * emae
Definition ast.hpp:1129
vec< lexer::token > ops
Definition ast.hpp:509
vec< lexer::token > & getOp()
Definition ast.cpp:167
vec< addExpr * > terms
Definition ast.hpp:508
vec< addExpr * > & getTerms()
Definition ast.cpp:163
innerMethodDecl * method
Definition ast.hpp:683
enum yoi::structDefInnerPair::Modifier modifier
innerMethodDecl & getMethod()
Definition ast.cpp:319
constructorDecl & getConstructor()
Definition ast.cpp:315
constructorDecl * con
Definition ast.hpp:681
identifierWithTypeSpec & getVar()
Definition ast.cpp:311
finalizerDecl * finalizer
Definition ast.hpp:685
finalizerDecl & getFinalizer()
Definition ast.cpp:1193
identifierWithTypeSpec * var
Definition ast.hpp:679
vec< structDefInnerPair * > & getInner()
Definition ast.cpp:323
vec< structDefInnerPair * > inner
Definition ast.hpp:698
structDefInner * inner
Definition ast.hpp:706
identifierWithDefTemplateArg * id
Definition ast.hpp:705
identifierWithDefTemplateArg & getId()
Definition ast.cpp:327
structDefInner & getInner()
Definition ast.cpp:331
vec< subscript * > & getSubscript()
Definition ast.cpp:1079
vec< subscript * > subscriptVal
Definition ast.hpp:388
bool isIdentifier() const
Definition ast.cpp:91
identifierWithTemplateArg * id
Definition ast.hpp:387
bool isInvocation() const
Definition ast.cpp:1075
rExpr & getExpr() const
Definition ast.cpp:63
rExpr * expr
Definition ast.hpp:351
bool isSubscript() const
Definition ast.cpp:1071
invocationArguments * args
Definition ast.hpp:352
typeSpec * spec
Definition ast.hpp:292
typeSpec & get() const
Definition ast.cpp:31
vec< templateArgSpec * > spec
Definition ast.hpp:299
vec< templateArgSpec * > & get()
Definition ast.cpp:35
rExpr * expr
Definition ast.hpp:1051
vec< catchParam * > catchParams
Definition ast.hpp:1064
codeBlock * tryBlock
Definition ast.hpp:1063
codeBlock * finallyBlock
Definition ast.hpp:1065
yoi::identifierWithDefTemplateArg * lhs
Definition ast.hpp:221
yoi::typeSpec * rhs
Definition ast.hpp:222
typeSpec * type
Definition ast.hpp:1070
decltypeExpr * decltypeExpression
Definition ast.hpp:340
yoi::vec< uint64_t > * arraySubscript
Definition ast.hpp:342
funcTypeSpec & getTypeSpec() const
Definition ast.cpp:59
externModuleAccessExpression * member
Definition ast.hpp:337
funcTypeSpec * func
Definition ast.hpp:338
enum yoi::typeSpec::typeSpecKind kind
typeSpec * elipsis
Definition ast.hpp:339
bool isNull
Definition ast.hpp:341
externModuleAccessExpression & getMemberExpr() const
Definition ast.cpp:55
abstractExpr & getLhs() const
Definition ast.cpp:115
lexer::token op
Definition ast.hpp:457
lexer::token & getOp()
Definition ast.cpp:111
abstractExpr * lhs
Definition ast.hpp:458
vec< typeSpec * > types
Definition ast.hpp:1082
identifier * name
Definition ast.hpp:611
identifier & getName()
Definition ast.cpp:263
lexer::token path
Definition ast.hpp:612
lexer::token & getPath()
Definition ast.cpp:267
codeBlock * block
Definition ast.hpp:861
codeBlock & getBlock()
Definition ast.cpp:423
rExpr & getCond()
Definition ast.cpp:419
rExpr * cond
Definition ast.hpp:860
rExpr * expr
Definition ast.hpp:1099
std::vector< t > vec
Definition def.hpp:53
void finalizeAST(funcTypeSpec *ptr)
Definition ast.cpp:475
uint64_t indexT
Definition def.hpp:51
codeBlock * block
Definition ast.hpp:838
codeBlock & getBlock()
Definition ast.cpp:399
rExpr & getCond()
Definition ast.cpp:395
dataStructDefStmt * dataStructDefStmtVal
Definition ast.hpp:815
enumerationDefinition * enumerationDefVal
Definition ast.hpp:822
useStmt * useStmtVal
Definition ast.hpp:812
implStmt * implStmtVal
Definition ast.hpp:816
interfaceDefStmt * interfaceDefStmtVal
Definition ast.hpp:813
letStmt * letStmtVal
Definition ast.hpp:817
conceptDefinition * conceptDefVal
Definition ast.hpp:823
funcDefStmt * funcDefStmtVal
Definition ast.hpp:818
typeAliasStmt * typeAliasStmtVal
Definition ast.hpp:821
exportDecl * exportDeclVal
Definition ast.hpp:820
structDefStmt * structDefStmtVal
Definition ast.hpp:814
importDecl * importDeclVal
Definition ast.hpp:819
forEachStmt * forEachStmtVal
Definition ast.hpp:933
returnStmt * returnStmtVal
Definition ast.hpp:934
continueStmt * continueStmtVal
Definition ast.hpp:935