annotate trunk/src/dil/ast/Node.d @ 618:07946b379006

Refactored the way dot expressions are parsed. DotExpression is a binary expression now. Added ModuleScopeExpression. Removed some obsolete expression classes. Added QualifiedType and ModuleScopeType. Removed some obsolete type node classes. Added genAnonymousID() to IdTable. Removed obsolete parser functions. Improved Node.getDocComments(). Added semantic() methods to some declaration classes.
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Fri, 11 Jan 2008 00:42:35 +0100
parents 7034d3f9e40c
children b2fc028d8b55
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;
596
39fac5531b85 Moved dil.Token to dil.lexer.Token.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 580
diff changeset
6
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
596
39fac5531b85 Moved dil.Token to dil.lexer.Token.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 580
diff changeset
9 public import dil.lexer.Token;
39fac5531b85 Moved dil.Token to dil.lexer.Token.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 580
diff changeset
10
275
e8de572e4d01 - Changed enum NodeType to NodeCategory.
aziz
parents: 249
diff changeset
11 enum NodeCategory
142
50251b408965 - Added module SyntaxTree.
aziz
parents:
diff changeset
12 {
50251b408965 - Added module SyntaxTree.
aziz
parents:
diff changeset
13 Declaration,
50251b408965 - Added module SyntaxTree.
aziz
parents:
diff changeset
14 Statement,
50251b408965 - Added module SyntaxTree.
aziz
parents:
diff changeset
15 Expression,
242
7ec7ad8df9da - Changed type of member tok in class BinaryExpression to Token*.
aziz
parents: 189
diff changeset
16 Type,
7ec7ad8df9da - Changed type of member tok in class BinaryExpression to Token*.
aziz
parents: 189
diff changeset
17 Other
142
50251b408965 - Added module SyntaxTree.
aziz
parents:
diff changeset
18 }
50251b408965 - Added module SyntaxTree.
aziz
parents:
diff changeset
19
276
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
20 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
21 {
278
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
22 // Declarations:
305
df237b3b5f09 - Added class Declarations.
aziz
parents: 292
diff changeset
23 Declarations,
278
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
24 EmptyDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
25 IllegalDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
26 ModuleDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
27 ImportDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
28 AliasDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
29 TypedefDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
30 EnumDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
31 ClassDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
32 InterfaceDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
33 StructDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
34 UnionDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
35 ConstructorDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
36 StaticConstructorDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
37 DestructorDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
38 StaticDestructorDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
39 FunctionDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
40 VariableDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
41 InvariantDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
42 UnittestDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
43 DebugDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
44 VersionDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
45 StaticIfDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
46 StaticAssertDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
47 TemplateDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
48 NewDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
49 DeleteDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
50 AttributeDeclaration,
490
47be6bfe39cd Refactored code and added new modules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 489
diff changeset
51 ProtectionDeclaration,
495
b60450804b6e Attributes are evaluated during the parsing phase now.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 492
diff changeset
52 StorageClassDeclaration,
b60450804b6e Attributes are evaluated during the parsing phase now.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 492
diff changeset
53 LinkageDeclaration,
278
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
54 AlignDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
55 PragmaDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
56 MixinDeclaration,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
57
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
58 // Statements:
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
59 Statements,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
60 IllegalStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
61 EmptyStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
62 ScopeStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
63 LabeledStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
64 ExpressionStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
65 DeclarationStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
66 IfStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
67 ConditionalStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
68 WhileStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
69 DoWhileStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
70 ForStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
71 ForeachStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
72 ForeachRangeStatement, // D2.0
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
73 SwitchStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
74 CaseStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
75 DefaultStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
76 ContinueStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
77 BreakStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
78 ReturnStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
79 GotoStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
80 WithStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
81 SynchronizedStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
82 TryStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
83 CatchBody,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
84 FinallyBody,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
85 ScopeGuardStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
86 ThrowStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
87 VolatileStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
88 AsmStatement,
285
104343e0f097 - Started implementation of asm statements parser.
aziz
parents: 281
diff changeset
89 AsmInstruction,
374
6d22f0b6a674 - Added class AsmAlignStatement.
aziz
parents: 359
diff changeset
90 AsmAlignStatement,
285
104343e0f097 - Started implementation of asm statements parser.
aziz
parents: 281
diff changeset
91 IllegalAsmInstruction,
278
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
92 PragmaStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
93 MixinStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
94 StaticIfStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
95 StaticAssertStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
96 DebugStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
97 VersionStatement,
e5a6b56c7716 - Moved declarations in enum NodeKind to the top.
aziz
parents: 277
diff changeset
98
277
38a68e534a3b - Made classes Declaration, Expression and Statement abstract.
aziz
parents: 276
diff changeset
99 // 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
100 EmptyExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
101 BinaryExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
102 CondExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
103 CommaExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
104 OrOrExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
105 AndAndExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
106 OrExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
107 XorExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
108 AndExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
109 CmpExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
110 EqualExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
111 IdentityExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
112 RelExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
113 InExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
114 LShiftExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
115 RShiftExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
116 URShiftExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
117 PlusExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
118 MinusExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
119 CatExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
120 MulExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
121 DivExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
122 ModExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
123 AssignExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
124 LShiftAssignExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
125 RShiftAssignExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
126 URShiftAssignExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
127 OrAssignExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
128 AndAssignExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
129 PlusAssignExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
130 MinusAssignExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
131 DivAssignExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
132 MulAssignExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
133 ModAssignExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
134 XorAssignExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
135 CatAssignExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
136 UnaryExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
137 AddressExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
138 PreIncrExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
139 PreDecrExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
140 PostIncrExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
141 PostDecrExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
142 DerefExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
143 SignExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
144 NotExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
145 CompExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
146 CallExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
147 NewExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
148 NewAnonClassExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
149 DeleteExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
150 CastExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
151 IndexExpression,
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
152 SliceExpression,
618
07946b379006 Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 613
diff changeset
153 ModuleScopeExpression,
276
d6b2f7616ca5 - Added enum NodeKind to classify different nodes in the AST. Correspondingly added member 'kind' to class Node.
aziz
parents: 275
diff changeset
154 IdentifierExpression,
312
fa0b6f32c1ae - Added Special to enum TOK.
aziz
parents: 309
diff changeset
155 SpecialTokenExpression,
488
cfb3805768b6 Added DotExpression and DotType.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 409
diff changeset
156 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
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:
618
07946b379006 Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 613
diff changeset
191 UndefinedType,
281
c1fcfbce9499 - BaseClass inherits from Node now.
aziz
parents: 278
diff changeset
192 IntegralType,
618
07946b379006 Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 613
diff changeset
193 QualifiedType,
07946b379006 Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 613
diff changeset
194 ModuleScopeType,
281
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 }
612
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
289
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
290 static bool isDoxygenComment(Token* token)
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
291 { // Doxygen: '/+!' '/*!' '//!'
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
292 return token.type == TOK.Comment && token.start[2] == '!';
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
293 }
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
294
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
295 static bool isDDocComment(Token* token)
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
296 { // DDOC: '/++' '/**' '///'
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
297 return token.type == TOK.Comment && token.start[1] == token.start[2];
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
298 }
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
299
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
300 /++
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
301 Returns the surrounding documentation comment tokens.
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
302 Note: this function works correctly only if
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
303 the source text is syntactically correct.
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
304 +/
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
305 Token*[] getDocComments(bool function(Token*) isDocComment = &isDDocComment)
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
306 {
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
307 Token*[] comments;
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
308 // Get preceding comments.
613
7034d3f9e40c Fixed Node.getDocComments().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 612
diff changeset
309 auto token = begin;
612
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
310 // Scan backwards until we hit another declaration.
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
311 while (1)
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
312 {
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
313 token = token.prev;
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
314 if (token.type == TOK.LBrace ||
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
315 token.type == TOK.RBrace ||
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
316 token.type == TOK.Semicolon ||
618
07946b379006 Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 613
diff changeset
317 token.type == TOK.HEAD ||
07946b379006 Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 613
diff changeset
318 (kind == NodeKind.EnumMember && token.type == TOK.Comma))
612
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
319 break;
618
07946b379006 Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 613
diff changeset
320
612
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
321 if (token.type == TOK.Comment)
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
322 {
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
323 // Check that this comment doesn't belong to the previous declaration.
618
07946b379006 Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 613
diff changeset
324 if (kind == NodeKind.EnumMember && token.type == TOK.Comma)
07946b379006 Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 613
diff changeset
325 break;
612
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
326 switch (token.prev.type)
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
327 {
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
328 case TOK.Semicolon, TOK.RBrace:
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
329 break;
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
330 default:
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
331 if (isDocComment(token))
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
332 comments ~= token;
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
333 }
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
334 }
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
335 }
613
7034d3f9e40c Fixed Node.getDocComments().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 612
diff changeset
336 // Get single comment to the right.
7034d3f9e40c Fixed Node.getDocComments().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 612
diff changeset
337 token = end.next;
618
07946b379006 Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 613
diff changeset
338 if (token.type == TOK.Comment && isDocComment(token))
07946b379006 Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 613
diff changeset
339 comments ~= token;
07946b379006 Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 613
diff changeset
340 else if (kind == NodeKind.EnumMember)
07946b379006 Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 613
diff changeset
341 {
07946b379006 Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 613
diff changeset
342 token = end.nextNWS;
07946b379006 Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 613
diff changeset
343 if (token.type == TOK.Comma)
07946b379006 Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 613
diff changeset
344 {
07946b379006 Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 613
diff changeset
345 token = token.next;
07946b379006 Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 613
diff changeset
346 if (token.type == TOK.Comment && isDocComment(token))
07946b379006 Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 613
diff changeset
347 comments ~= token;
07946b379006 Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 613
diff changeset
348 }
07946b379006 Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 613
diff changeset
349 }
612
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
350 return comments;
c65b11c2074c Added getDocComments() to class Node.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 596
diff changeset
351 }
142
50251b408965 - Added module SyntaxTree.
aziz
parents:
diff changeset
352 }