annotate trunk/src/dil/ast/Node.d @ 580:fa6d3c52757d

Moved SyntaxTree.d to new package 'ast'.
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Sat, 05 Jan 2008 17:49:55 +0100
parents trunk/src/dil/SyntaxTree.d@c9579ea87228
children 39fac5531b85
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
142
50251b408965 - Added module SyntaxTree.
aziz
parents:
diff changeset
1 /++
50251b408965 - Added module SyntaxTree.
aziz
parents:
diff changeset
2 Author: Aziz Köksal
249
32d354584b28 - Upgraded license notices to GPL3.
aziz
parents: 242
diff changeset
3 License: GPL3
142
50251b408965 - Added module SyntaxTree.
aziz
parents:
diff changeset
4 +/
580
fa6d3c52757d Moved SyntaxTree.d to new package 'ast'.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 543
diff changeset
5 module dil.ast.Node;
327
a48a987f7515 - Added package dil to import declarations.
aziz
parents: 326
diff changeset
6 import dil.Token;
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 374
diff changeset
7 import common;
142
50251b408965 - Added module SyntaxTree.
aziz
parents:
diff changeset
8
275
e8de572e4d01 - Changed enum NodeType to NodeCategory.
aziz
parents: 249
diff changeset
9 enum NodeCategory
142
50251b408965 - Added module SyntaxTree.
aziz
parents:
diff changeset
10 {
50251b408965 - Added module SyntaxTree.
aziz
parents:
diff changeset
11 Declaration,
50251b408965 - Added module SyntaxTree.
aziz
parents:
diff changeset
12 Statement,
50251b408965 - Added module SyntaxTree.
aziz
parents:
diff changeset
13 Expression,
242
7ec7ad8df9da - Changed type of member tok in class BinaryExpression to Token*.
aziz
parents: 189
diff changeset
14 Type,
7ec7ad8df9da - Changed type of member tok in class BinaryExpression to Token*.
aziz
parents: 189
diff changeset
15 Other
142
50251b408965 - Added module SyntaxTree.
aziz
parents:
diff changeset
16 }
50251b408965 - Added module SyntaxTree.
aziz
parents:
diff changeset
17
276
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
18 enum NodeKind
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
19 {
278
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
20 // Declarations:
305
df237b3b5f09 - Added class Declarations.
aziz
parents: 292
diff changeset
21 Declarations,
278
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
22 EmptyDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
23 IllegalDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
24 ModuleDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
25 ImportDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
26 AliasDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
27 TypedefDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
28 EnumDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
29 ClassDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
30 InterfaceDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
31 StructDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
32 UnionDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
33 ConstructorDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
34 StaticConstructorDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
35 DestructorDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
36 StaticDestructorDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
37 FunctionDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
38 VariableDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
39 InvariantDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
40 UnittestDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
41 DebugDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
42 VersionDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
43 StaticIfDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
44 StaticAssertDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
45 TemplateDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
46 NewDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
47 DeleteDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
48 AttributeDeclaration,
490
47be6bfe39cd Refactored code and added new modules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 489
diff changeset
49 ProtectionDeclaration,
495
b60450804b6e Attributes are evaluated during the parsing phase now.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 492
diff changeset
50 StorageClassDeclaration,
b60450804b6e Attributes are evaluated during the parsing phase now.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 492
diff changeset
51 LinkageDeclaration,
278
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
52 AlignDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
53 PragmaDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
54 MixinDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
55
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
56 // Statements:
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
57 Statements,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
58 IllegalStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
59 EmptyStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
60 ScopeStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
61 LabeledStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
62 ExpressionStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
63 DeclarationStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
64 IfStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
65 ConditionalStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
66 WhileStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
67 DoWhileStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
68 ForStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
69 ForeachStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
70 ForeachRangeStatement, // D2.0
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
71 SwitchStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
72 CaseStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
73 DefaultStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
74 ContinueStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
75 BreakStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
76 ReturnStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
77 GotoStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
78 WithStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
79 SynchronizedStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
80 TryStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
81 CatchBody,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
82 FinallyBody,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
83 ScopeGuardStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
84 ThrowStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
85 VolatileStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
86 AsmStatement,
285
104343e0f097 - Started implementation of asm statements parser.
aziz
parents: 281
diff changeset
87 AsmInstruction,
374
6d22f0b6a674 - Added class AsmAlignStatement.
aziz
parents: 359
diff changeset
88 AsmAlignStatement,
285
104343e0f097 - Started implementation of asm statements parser.
aziz
parents: 281
diff changeset
89 IllegalAsmInstruction,
278
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
90 PragmaStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
91 MixinStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
92 StaticIfStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
93 StaticAssertStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
94 DebugStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
95 VersionStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
96
277
38a68e534a3b - Made classes Declaration, Expression and Statement abstract.
aziz
parents: 276
diff changeset
97 // Expressions:
276
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
98 EmptyExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
99 BinaryExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
100 CondExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
101 CommaExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
102 OrOrExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
103 AndAndExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
104 OrExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
105 XorExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
106 AndExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
107 CmpExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
108 EqualExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
109 IdentityExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
110 RelExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
111 InExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
112 LShiftExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
113 RShiftExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
114 URShiftExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
115 PlusExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
116 MinusExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
117 CatExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
118 MulExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
119 DivExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
120 ModExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
121 AssignExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
122 LShiftAssignExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
123 RShiftAssignExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
124 URShiftAssignExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
125 OrAssignExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
126 AndAssignExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
127 PlusAssignExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
128 MinusAssignExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
129 DivAssignExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
130 MulAssignExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
131 ModAssignExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
132 XorAssignExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
133 CatAssignExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
134 UnaryExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
135 AddressExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
136 PreIncrExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
137 PreDecrExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
138 PostIncrExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
139 PostDecrExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
140 DerefExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
141 SignExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
142 NotExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
143 CompExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
144 PostDotListExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
145 CallExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
146 NewExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
147 NewAnonClassExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
148 DeleteExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
149 CastExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
150 IndexExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
151 SliceExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
152 PrimaryExpressio,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
153 IdentifierExpression,
312
fa0b6f32c1ae - Added Special to enum TOK.
aziz
parents: 309
diff changeset
154 SpecialTokenExpression,
488
cfb3805768b6 Added DotExpression and DotType.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 409
diff changeset
155 DotExpression,
276
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
156 DotListExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
157 TemplateInstanceExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
158 ThisExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
159 SuperExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
160 NullExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
161 DollarExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
162 BoolExpression,
399
ff1d11c27061 Renamed some Expression classes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 391
diff changeset
163 IntExpression,
ff1d11c27061 Renamed some Expression classes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 391
diff changeset
164 RealExpression,
543
c9579ea87228 Added ComplexExpression to enum NodeKind and setToks() to Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 516
diff changeset
165 ComplexExpression,
399
ff1d11c27061 Renamed some Expression classes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 391
diff changeset
166 CharExpression,
ff1d11c27061 Renamed some Expression classes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 391
diff changeset
167 StringExpression,
276
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
168 ArrayLiteralExpression,
399
ff1d11c27061 Renamed some Expression classes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 391
diff changeset
169 AArrayLiteralExpression,
276
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
170 AssertExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
171 MixinExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
172 ImportExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
173 TypeofExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
174 TypeDotIdExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
175 TypeidExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
176 IsExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
177 FunctionLiteralExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
178 TraitsExpression, // D2.0
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
179 VoidInitializer,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
180 ArrayInitializer,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
181 StructInitializer,
287
211bdd69397d - Added classes AsmTypeExpression, AsmOffsetExpression, AsmSegExpression, AsmPostBracketExpression and AsmBracketExpression.
aziz
parents: 285
diff changeset
182 AsmTypeExpression,
211bdd69397d - Added classes AsmTypeExpression, AsmOffsetExpression, AsmSegExpression, AsmPostBracketExpression and AsmBracketExpression.
aziz
parents: 285
diff changeset
183 AsmOffsetExpression,
211bdd69397d - Added classes AsmTypeExpression, AsmOffsetExpression, AsmSegExpression, AsmPostBracketExpression and AsmBracketExpression.
aziz
parents: 285
diff changeset
184 AsmSegExpression,
211bdd69397d - Added classes AsmTypeExpression, AsmOffsetExpression, AsmSegExpression, AsmPostBracketExpression and AsmBracketExpression.
aziz
parents: 285
diff changeset
185 AsmPostBracketExpression,
211bdd69397d - Added classes AsmTypeExpression, AsmOffsetExpression, AsmSegExpression, AsmPostBracketExpression and AsmBracketExpression.
aziz
parents: 285
diff changeset
186 AsmBracketExpression,
288
833b301497f4 - Added classes AsmLocalSizeExpression and AsmRegisterExpression.
aziz
parents: 287
diff changeset
187 AsmLocalSizeExpression,
833b301497f4 - Added classes AsmLocalSizeExpression and AsmRegisterExpression.
aziz
parents: 287
diff changeset
188 AsmRegisterExpression,
277
38a68e534a3b - Made classes Declaration, Expression and Statement abstract.
aziz
parents: 276
diff changeset
189
281
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
190 // Types:
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
191 IntegralType,
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
192 UndefinedType,
488
cfb3805768b6 Added DotExpression and DotType.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 409
diff changeset
193 DotType,
281
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
194 DotListType,
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
195 IdentifierType,
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
196 TypeofType,
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
197 TemplateInstanceType,
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
198 PointerType,
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
199 ArrayType,
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
200 FunctionType,
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
201 DelegateType,
409
38fccd2640eb Added code for parsing C function pointer declarations.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 406
diff changeset
202 CFuncPointerType,
281
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
203 ConstType, // D2.0
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
204 InvariantType, // D2.0
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
205
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
206 // Other:
278
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
207 FunctionBody,
281
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
208 Parameter,
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
209 Parameters,
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
210 BaseClass,
340
1accb3013bd2 - Changed class TemplateParameter to an abstract class.
aziz
parents: 327
diff changeset
211 TemplateAliasParameter,
1accb3013bd2 - Changed class TemplateParameter to an abstract class.
aziz
parents: 327
diff changeset
212 TemplateTypeParameter,
492
9c208925a3d4 Added module ImportParser and new stuff from DMD2.008.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 490
diff changeset
213 TemplateThisParameter, // D2.0
340
1accb3013bd2 - Changed class TemplateParameter to an abstract class.
aziz
parents: 327
diff changeset
214 TemplateValueParameter,
1accb3013bd2 - Changed class TemplateParameter to an abstract class.
aziz
parents: 327
diff changeset
215 TemplateTupleParameter,
281
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
216 TemplateParameters,
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
217 TemplateArguments,
406
e242f0ee2d27 Added class EnumMember.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 399
diff changeset
218 EnumMember,
276
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
219 }
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
220
281
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
221 /// This string is mixed into the constructor of a class that inherits from Node.
276
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
222 const string set_kind = `this.kind = mixin("NodeKind." ~ typeof(this).stringof);`;
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
223
516
433d51c18524 Renamed template Cast to TryCast.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 495
diff changeset
224 Class TryCast(Class)(Node n)
309
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents: 305
diff changeset
225 {
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents: 305
diff changeset
226 assert(n !is null);
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents: 305
diff changeset
227 if (n.kind == mixin("NodeKind." ~ typeof(Class).stringof))
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents: 305
diff changeset
228 return cast(Class)cast(void*)n;
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents: 305
diff changeset
229 return null;
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents: 305
diff changeset
230 }
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents: 305
diff changeset
231
495
b60450804b6e Attributes are evaluated during the parsing phase now.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 492
diff changeset
232 Class CastTo(Class)(Node n)
b60450804b6e Attributes are evaluated during the parsing phase now.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 492
diff changeset
233 {
b60450804b6e Attributes are evaluated during the parsing phase now.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 492
diff changeset
234 assert(n !is null && n.kind == mixin("NodeKind." ~ typeof(Class).stringof));
b60450804b6e Attributes are evaluated during the parsing phase now.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 492
diff changeset
235 return cast(Class)cast(void*)n;
b60450804b6e Attributes are evaluated during the parsing phase now.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 492
diff changeset
236 }
b60450804b6e Attributes are evaluated during the parsing phase now.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 492
diff changeset
237
142
50251b408965 - Added module SyntaxTree.
aziz
parents:
diff changeset
238 class Node
50251b408965 - Added module SyntaxTree.
aziz
parents:
diff changeset
239 {
275
e8de572e4d01 - Changed enum NodeType to NodeCategory.
aziz
parents: 249
diff changeset
240 NodeCategory category;
276
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
241 NodeKind kind;
292
076152e945e0 - Added member Node[] children to class Node.
aziz
parents: 288
diff changeset
242 Node[] children;
189
b1060d432e5e - Added some members to class Node.
aziz
parents: 142
diff changeset
243 Token* begin, end;
b1060d432e5e - Added some members to class Node.
aziz
parents: 142
diff changeset
244
275
e8de572e4d01 - Changed enum NodeType to NodeCategory.
aziz
parents: 249
diff changeset
245 this(NodeCategory category)
142
50251b408965 - Added module SyntaxTree.
aziz
parents:
diff changeset
246 {
275
e8de572e4d01 - Changed enum NodeType to NodeCategory.
aziz
parents: 249
diff changeset
247 this.category = category;
142
50251b408965 - Added module SyntaxTree.
aziz
parents:
diff changeset
248 }
189
b1060d432e5e - Added some members to class Node.
aziz
parents: 142
diff changeset
249
b1060d432e5e - Added some members to class Node.
aziz
parents: 142
diff changeset
250 void setTokens(Token* begin, Token* end)
b1060d432e5e - Added some members to class Node.
aziz
parents: 142
diff changeset
251 {
b1060d432e5e - Added some members to class Node.
aziz
parents: 142
diff changeset
252 this.begin = begin;
b1060d432e5e - Added some members to class Node.
aziz
parents: 142
diff changeset
253 this.end = end;
b1060d432e5e - Added some members to class Node.
aziz
parents: 142
diff changeset
254 }
489
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
255
543
c9579ea87228 Added ComplexExpression to enum NodeKind and setToks() to Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 516
diff changeset
256 Class setToks(Class)(Class node)
c9579ea87228 Added ComplexExpression to enum NodeKind and setToks() to Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 516
diff changeset
257 {
c9579ea87228 Added ComplexExpression to enum NodeKind and setToks() to Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 516
diff changeset
258 node.setTokens(this.begin, this.end);
c9579ea87228 Added ComplexExpression to enum NodeKind and setToks() to Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 516
diff changeset
259 return node;
c9579ea87228 Added ComplexExpression to enum NodeKind and setToks() to Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 516
diff changeset
260 }
c9579ea87228 Added ComplexExpression to enum NodeKind and setToks() to Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 516
diff changeset
261
489
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
262 void addChild(Node child)
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
263 {
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
264 assert(child !is null, "failed in " ~ this.classinfo.name);
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
265 this.children ~= child;
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
266 }
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
267
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
268 void addOptChild(Node child)
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
269 {
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
270 child is null || addChild(child);
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
271 }
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
272
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
273 void addChildren(Node[] children)
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
274 {
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
275 assert(children !is null && delegate{
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
276 foreach (child; children)
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
277 if (child is null)
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
278 return false;
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
279 return true; }(),
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
280 "failed in " ~ this.classinfo.name
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
281 );
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
282 this.children ~= children;
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
283 }
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
284
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
285 void addOptChildren(Node[] children)
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
286 {
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
287 children is null || addChildren(children);
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
288 }
142
50251b408965 - Added module SyntaxTree.
aziz
parents:
diff changeset
289 }