annotate trunk/src/dil/SyntaxTree.d @ 495:b60450804b6e

Attributes are evaluated during the parsing phase now. Renamed parseDeclarationDefinitionsBlock to parseDeclarationDefinitionsBody. Renamed parseDeclaration to parseVariableOrFunction. Removed class Linkage, renamed parseLinkage to parseLinkageType and modified it so that it returns a value from enum LinkageType. Fix in parseStorageAttribute(): class invariants are recognized now. Modified parseAlignAttribute() so that returns an uint - the alignment size. Removed classes AttributeStatement and ExternStatement. Using Declarations instead in parseAttributeStatement(). Added LinkageType to module Enums. Added StorageClassDeclaration and renamed ExternDeclaration to LinkageDeclaration.
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Sat, 08 Dec 2007 22:20:34 +0100
parents 9c208925a3d4
children 433d51c18524
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 +/
326
4a7359b88c11 - Added package 'dil' to module declarations.
aziz
parents: 325
diff changeset
5 module dil.SyntaxTree;
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,
ff1d11c27061 Renamed some Expression classes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 391
diff changeset
165 CharExpression,
ff1d11c27061 Renamed some Expression classes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 391
diff changeset
166 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
167 ArrayLiteralExpression,
399
ff1d11c27061 Renamed some Expression classes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 391
diff changeset
168 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
169 AssertExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
170 MixinExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
171 ImportExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
172 TypeofExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
173 TypeDotIdExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
174 TypeidExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
175 IsExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
176 FunctionLiteralExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
177 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
178 VoidInitializer,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
179 ArrayInitializer,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
180 StructInitializer,
287
211bdd69397d - Added classes AsmTypeExpression, AsmOffsetExpression, AsmSegExpression, AsmPostBracketExpression and AsmBracketExpression.
aziz
parents: 285
diff changeset
181 AsmTypeExpression,
211bdd69397d - Added classes AsmTypeExpression, AsmOffsetExpression, AsmSegExpression, AsmPostBracketExpression and AsmBracketExpression.
aziz
parents: 285
diff changeset
182 AsmOffsetExpression,
211bdd69397d - Added classes AsmTypeExpression, AsmOffsetExpression, AsmSegExpression, AsmPostBracketExpression and AsmBracketExpression.
aziz
parents: 285
diff changeset
183 AsmSegExpression,
211bdd69397d - Added classes AsmTypeExpression, AsmOffsetExpression, AsmSegExpression, AsmPostBracketExpression and AsmBracketExpression.
aziz
parents: 285
diff changeset
184 AsmPostBracketExpression,
211bdd69397d - Added classes AsmTypeExpression, AsmOffsetExpression, AsmSegExpression, AsmPostBracketExpression and AsmBracketExpression.
aziz
parents: 285
diff changeset
185 AsmBracketExpression,
288
833b301497f4 - Added classes AsmLocalSizeExpression and AsmRegisterExpression.
aziz
parents: 287
diff changeset
186 AsmLocalSizeExpression,
833b301497f4 - Added classes AsmLocalSizeExpression and AsmRegisterExpression.
aziz
parents: 287
diff changeset
187 AsmRegisterExpression,
277
38a68e534a3b - Made classes Declaration, Expression and Statement abstract.
aziz
parents: 276
diff changeset
188
281
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
189 // Types:
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
190 IntegralType,
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
191 UndefinedType,
488
cfb3805768b6 Added DotExpression and DotType.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 409
diff changeset
192 DotType,
281
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
193 DotListType,
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
194 IdentifierType,
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
195 TypeofType,
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
196 TemplateInstanceType,
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
197 PointerType,
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
198 ArrayType,
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
199 FunctionType,
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
200 DelegateType,
409
38fccd2640eb Added code for parsing C function pointer declarations.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 406
diff changeset
201 CFuncPointerType,
281
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
202 ConstType, // D2.0
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
203 InvariantType, // D2.0
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
204
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
205 // Other:
278
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
206 FunctionBody,
281
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
207 Parameter,
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
208 Parameters,
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
209 BaseClass,
340
1accb3013bd2 - Changed class TemplateParameter to an abstract class.
aziz
parents: 327
diff changeset
210 TemplateAliasParameter,
1accb3013bd2 - Changed class TemplateParameter to an abstract class.
aziz
parents: 327
diff changeset
211 TemplateTypeParameter,
492
9c208925a3d4 Added module ImportParser and new stuff from DMD2.008.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 490
diff changeset
212 TemplateThisParameter, // D2.0
340
1accb3013bd2 - Changed class TemplateParameter to an abstract class.
aziz
parents: 327
diff changeset
213 TemplateValueParameter,
1accb3013bd2 - Changed class TemplateParameter to an abstract class.
aziz
parents: 327
diff changeset
214 TemplateTupleParameter,
281
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
215 TemplateParameters,
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
216 TemplateArguments,
406
e242f0ee2d27 Added class EnumMember.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 399
diff changeset
217 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
218 }
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
219
281
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
220 /// 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
221 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
222
309
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents: 305
diff changeset
223 Class Cast(Class)(Node n)
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents: 305
diff changeset
224 {
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents: 305
diff changeset
225 assert(n !is null);
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents: 305
diff changeset
226 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
227 return cast(Class)cast(void*)n;
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents: 305
diff changeset
228 return null;
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents: 305
diff changeset
229 }
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents: 305
diff changeset
230
495
b60450804b6e Attributes are evaluated during the parsing phase now.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 492
diff changeset
231 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
232 {
b60450804b6e Attributes are evaluated during the parsing phase now.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 492
diff changeset
233 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
234 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
235 }
b60450804b6e Attributes are evaluated during the parsing phase now.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 492
diff changeset
236
142
50251b408965 - Added module SyntaxTree.
aziz
parents:
diff changeset
237 class Node
50251b408965 - Added module SyntaxTree.
aziz
parents:
diff changeset
238 {
275
e8de572e4d01 - Changed enum NodeType to NodeCategory.
aziz
parents: 249
diff changeset
239 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
240 NodeKind kind;
292
076152e945e0 - Added member Node[] children to class Node.
aziz
parents: 288
diff changeset
241 Node[] children;
189
b1060d432e5e - Added some members to class Node.
aziz
parents: 142
diff changeset
242 Token* begin, end;
b1060d432e5e - Added some members to class Node.
aziz
parents: 142
diff changeset
243
275
e8de572e4d01 - Changed enum NodeType to NodeCategory.
aziz
parents: 249
diff changeset
244 this(NodeCategory category)
142
50251b408965 - Added module SyntaxTree.
aziz
parents:
diff changeset
245 {
275
e8de572e4d01 - Changed enum NodeType to NodeCategory.
aziz
parents: 249
diff changeset
246 this.category = category;
142
50251b408965 - Added module SyntaxTree.
aziz
parents:
diff changeset
247 }
189
b1060d432e5e - Added some members to class Node.
aziz
parents: 142
diff changeset
248
b1060d432e5e - Added some members to class Node.
aziz
parents: 142
diff changeset
249 void setTokens(Token* begin, Token* end)
b1060d432e5e - Added some members to class Node.
aziz
parents: 142
diff changeset
250 {
b1060d432e5e - Added some members to class Node.
aziz
parents: 142
diff changeset
251 this.begin = begin;
b1060d432e5e - Added some members to class Node.
aziz
parents: 142
diff changeset
252 this.end = end;
b1060d432e5e - Added some members to class Node.
aziz
parents: 142
diff changeset
253 }
489
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
254
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
255 void addChild(Node child)
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
256 {
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
257 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
258 this.children ~= child;
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
259 }
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
260
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
261 void addOptChild(Node child)
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
262 {
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
263 child is null || addChild(child);
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
264 }
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
265
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
266 void addChildren(Node[] children)
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 assert(children !is null && delegate{
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
269 foreach (child; children)
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
270 if (child is null)
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
271 return false;
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
272 return true; }(),
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
273 "failed in " ~ this.classinfo.name
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 this.children ~= children;
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
276 }
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
277
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
278 void addOptChildren(Node[] children)
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
279 {
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
280 children is null || addChildren(children);
a7291d3ee9d7 Refactored classes that inherit from Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 488
diff changeset
281 }
142
50251b408965 - Added module SyntaxTree.
aziz
parents:
diff changeset
282 }