annotate trunk/src/dil/ast/DefaultVisitor.d @ 786:3b34f6a95a27

Added and revised documenation comments.
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Sun, 24 Feb 2008 02:41:11 +0100
parents 5e3ef1b2011c
children 5fe89bb8cbdd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
642
be45f982ee3e Added module dil.ast.DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
1 /++
be45f982ee3e Added module dil.ast.DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
2 Author: Aziz Köksal
be45f982ee3e Added module dil.ast.DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
3 License: GPL3
be45f982ee3e Added module dil.ast.DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
4 +/
be45f982ee3e Added module dil.ast.DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
5 module dil.ast.DefaultVisitor;
be45f982ee3e Added module dil.ast.DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
6
643
3bd947eb72c2 Added module cmd.ASTStats.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 642
diff changeset
7 import dil.ast.Visitor;
3bd947eb72c2 Added module cmd.ASTStats.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 642
diff changeset
8
642
be45f982ee3e Added module dil.ast.DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
9 import dil.ast.Node;
be45f982ee3e Added module dil.ast.DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
10 import dil.ast.Declarations,
be45f982ee3e Added module dil.ast.DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
11 dil.ast.Expressions,
be45f982ee3e Added module dil.ast.DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
12 dil.ast.Statements,
be45f982ee3e Added module dil.ast.DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
13 dil.ast.Types,
be45f982ee3e Added module dil.ast.DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
14 dil.ast.Parameters;
666
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
15 import common;
642
be45f982ee3e Added module dil.ast.DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
16
769
5e3ef1b2011c Added and improved documentation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 766
diff changeset
17 /// This huge template function, when instantiated for a certain node class,
5e3ef1b2011c Added and improved documentation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 766
diff changeset
18 /// generates a body of calls to visit() on the subnodes.
666
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
19 returnType!(T.stringof) visitDefault(T)(T t)
642
be45f982ee3e Added module dil.ast.DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
20 {
666
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
21 assert(t !is null, "node passed to visitDefault() is null");
667
1ac758cd952a Fixed a few things in DefaultVisitor.d and Pass1.d
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 666
diff changeset
22 //Stdout(t).newline;
666
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
23
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
24 alias t d, s, e, n; // Variable aliases of t.
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
25
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
26 static if (is(T : Declaration))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
27 {
666
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
28 alias T D;
680
6b3e397229c5 Renamed Statements, Declarations and EnumMember.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 673
diff changeset
29 static if (is(D == CompoundDeclaration))
696
c67d2c3c0b3d Wrote code for SemanticPass2.visit(ImportExpression).
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 695
diff changeset
30 foreach (decl; d.decls)
c67d2c3c0b3d Wrote code for SemanticPass2.visit(ImportExpression).
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 695
diff changeset
31 visitD(decl);
667
1ac758cd952a Fixed a few things in DefaultVisitor.d and Pass1.d
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 666
diff changeset
32 //EmptyDeclaration,
1ac758cd952a Fixed a few things in DefaultVisitor.d and Pass1.d
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 666
diff changeset
33 //IllegalDeclaration,
1ac758cd952a Fixed a few things in DefaultVisitor.d and Pass1.d
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 666
diff changeset
34 //ModuleDeclaration have no subnodes.
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
35 static if (is(D == AliasDeclaration) ||
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
36 is(D == TypedefDeclaration))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
37 visitD(d.decl);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
38 static if (is(D == EnumDeclaration))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
39 {
667
1ac758cd952a Fixed a few things in DefaultVisitor.d and Pass1.d
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 666
diff changeset
40 d.baseType && visitT(d.baseType);
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
41 foreach (member; d.members)
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
42 visitD(member);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
43 }
680
6b3e397229c5 Renamed Statements, Declarations and EnumMember.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 673
diff changeset
44 static if (is(D == EnumMemberDeclaration))
667
1ac758cd952a Fixed a few things in DefaultVisitor.d and Pass1.d
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 666
diff changeset
45 d.value && visitE(d.value);
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
46 static if (is(D == ClassDeclaration) || is( D == InterfaceDeclaration))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
47 {
766
0af3b145a405 Revised TemplateParameterList parsing functions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 765
diff changeset
48 // visitN(d.tparams);
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
49 foreach (base; d.bases)
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
50 visitT(base);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
51 d.decls && visitD(d.decls);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
52 }
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
53 static if (is(D == StructDeclaration) || is(D == UnionDeclaration))
766
0af3b145a405 Revised TemplateParameterList parsing functions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 765
diff changeset
54 // visitN(d.tparams),
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
55 d.decls && visitD(d.decls);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
56 static if (is(D == ConstructorDeclaration))
668
a1f8d8f2db38 Renamed some identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 667
diff changeset
57 visitN(d.params), visitS(d.funcBody);
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
58 static if (is(D == StaticConstructorDeclaration) ||
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
59 is(D == DestructorDeclaration) ||
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
60 is(D == StaticDestructorDeclaration) ||
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
61 is(D == InvariantDeclaration) ||
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
62 is(D == UnittestDeclaration))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
63 visitS(d.funcBody);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
64 static if (is(D == FunctionDeclaration))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
65 visitT(d.returnType),
766
0af3b145a405 Revised TemplateParameterList parsing functions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 765
diff changeset
66 // visitN(d.tparams),
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
67 visitN(d.params),
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
68 visitS(d.funcBody);
673
64fec49651cf Renamed VariableDeclaration to VariablesDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 672
diff changeset
69 static if (is(D == VariablesDeclaration))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
70 {
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
71 d.typeNode && visitT(d.typeNode);
683
1ae72234db26 Implemented some methods in SemanticPass1.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 682
diff changeset
72 foreach(init; d.inits)
1ae72234db26 Implemented some methods in SemanticPass1.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 682
diff changeset
73 init && visitE(init);
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
74 }
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
75 static if (is(D == DebugDeclaration) || is(D == VersionDeclaration))
672
d422e5f2f3ea Added '--asttable' option to command 'statistics'.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 671
diff changeset
76 d.decls && visitD(d.decls),
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
77 d.elseDecls && visitD(d.elseDecls);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
78 static if (is(D == StaticIfDeclaration))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
79 visitE(d.condition),
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
80 visitD(d.ifDecls),
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
81 d.elseDecls && visitD(d.elseDecls);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
82 static if (is(D == StaticAssertDeclaration))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
83 visitE(d.condition),
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
84 d.message && visitE(d.message);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
85 static if (is(D == TemplateDeclaration))
766
0af3b145a405 Revised TemplateParameterList parsing functions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 765
diff changeset
86 visitN(d.tparams),
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
87 visitD(d.decls);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
88 static if (is(D == NewDeclaration) || is(D == DeleteDeclaration))
668
a1f8d8f2db38 Renamed some identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 667
diff changeset
89 visitN(d.params),
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
90 visitS(d.funcBody);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
91 static if (is(D == ProtectionDeclaration) ||
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
92 is(D == StorageClassDeclaration) ||
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
93 is(D == LinkageDeclaration) ||
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
94 is(D == AlignDeclaration))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
95 visitD(d.decls);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
96 static if (is(D == PragmaDeclaration))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
97 {
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
98 foreach (arg; d.args)
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
99 visitE(arg);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
100 visitD(d.decls);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
101 }
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
102 static if (is(D == MixinDeclaration))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
103 d.templateExpr ? visitE(d.templateExpr) : visitE(d.argument);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
104 }
666
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
105 else
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
106 static if (is(T : Expression))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
107 {
666
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
108 alias T E;
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
109 static if (is(E == IllegalExpression))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
110 {}
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
111 else
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
112 static if (is(E : CondExpression))
694
19a34b69cc7d Renamed some members of BinaryExpression and QualifiedType.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 689
diff changeset
113 visitE(e.condition), visitE(e.lhs), visitE(e.rhs);
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
114 else
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
115 static if (is(E : BinaryExpression))
694
19a34b69cc7d Renamed some members of BinaryExpression and QualifiedType.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 689
diff changeset
116 visitE(e.lhs), visitE(e.rhs);
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
117 else
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
118 static if (is(E : UnaryExpression))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
119 {
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
120 static if (is(E == CastExpression))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
121 visitT(e.type);
667
1ac758cd952a Fixed a few things in DefaultVisitor.d and Pass1.d
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 666
diff changeset
122 visitE(e.e); // Visit member in base class UnaryExpression.
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
123 static if (is(E == IndexExpression))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
124 foreach (arg; e.args)
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
125 visitE(arg);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
126 static if (is(E == SliceExpression))
667
1ac758cd952a Fixed a few things in DefaultVisitor.d and Pass1.d
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 666
diff changeset
127 e.left && (visitE(e.left), visitE(e.right));
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
128 static if (is(E == AsmPostBracketExpression))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
129 visitE(e.e2);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
130 }
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
131 else
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
132 {
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
133 static if (is(E == NewExpression))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
134 {
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
135 foreach (arg; e.newArgs)
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
136 visitE(arg);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
137 visitT(e.type);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
138 foreach (arg; e.ctorArgs)
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
139 visitE(arg);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
140 }
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
141 static if (is(E == NewAnonClassExpression))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
142 {
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
143 foreach (arg; e.newArgs)
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
144 visitE(arg);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
145 foreach (base; e.bases)
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
146 visitT(base);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
147 foreach (arg; e.ctorArgs)
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
148 visitE(arg);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
149 visitD(e.decls);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
150 }
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
151 static if (is(E == AsmBracketExpression))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
152 visitE(e.e);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
153 static if (is(E == TemplateInstanceExpression))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
154 e.targs && visitN(e.targs);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
155 static if (is(E == ArrayLiteralExpression))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
156 foreach (value; e.values)
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
157 visitE(value);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
158 static if (is(E == AArrayLiteralExpression))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
159 foreach (i, key; e.keys)
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
160 visitE(key), visitE(e.values[i]);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
161 static if (is(E == AssertExpression))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
162 visitE(e.expr), e.msg && visitE(e.msg);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
163 static if (is(E == MixinExpression) ||
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
164 is(E == ImportExpression))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
165 visitE(e.expr);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
166 static if (is(E == TypeofExpression) ||
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
167 is(E == TypeDotIdExpression) ||
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
168 is(E == TypeidExpression))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
169 visitT(e.type);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
170 static if (is(E == IsExpression))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
171 visitT(e.type), e.specType && visitT(e.specType),
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
172 e.tparams && visitN(e.tparams);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
173 static if (is(E == FunctionLiteralExpression))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
174 e.returnType && visitT(e.returnType),
668
a1f8d8f2db38 Renamed some identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 667
diff changeset
175 e.params && visitN(e.params),
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
176 visitS(e.funcBody);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
177 static if (is(E == ParenExpression))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
178 visitE(e.next);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
179 static if (is(E == TraitsExpression))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
180 visitN(e.targs);
667
1ac758cd952a Fixed a few things in DefaultVisitor.d and Pass1.d
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 666
diff changeset
181 // VoidInitializer has no subnodes.
695
170ddcdc9711 Renamed VoidInitializer, ArrayInitializer and StructInitializer.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 694
diff changeset
182 static if (is(E == ArrayInitExpression))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
183 foreach (i, key; e.keys)
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
184 key && visitE(key), visitE(e.values[i]);
695
170ddcdc9711 Renamed VoidInitializer, ArrayInitializer and StructInitializer.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 694
diff changeset
185 static if (is(E == StructInitExpression))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
186 foreach (value; e.values)
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
187 visitE(value);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
188 }
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
189 }
666
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
190 else
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
191 static if (is(T : Statement))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
192 {
666
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
193 alias T S;
680
6b3e397229c5 Renamed Statements, Declarations and EnumMember.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 673
diff changeset
194 static if (is(S == CompoundStatement))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
195 foreach (node; s.children)
667
1ac758cd952a Fixed a few things in DefaultVisitor.d and Pass1.d
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 666
diff changeset
196 visitS(cast(Statement)cast(void*)node);
1ac758cd952a Fixed a few things in DefaultVisitor.d and Pass1.d
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 666
diff changeset
197 //IllegalStatement has no subnodes.
682
7541c64fc423 Renamed FunctionBody, CatchBody and FinallyBody.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 681
diff changeset
198 static if (is(S == FuncBodyStatement))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
199 s.funcBody && visitS(s.funcBody),
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
200 s.inBody && visitS(s.inBody),
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
201 s.outBody && visitS(s.outBody);
662
73bac90f90b2 Fixed visit() method for Statements in DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 660
diff changeset
202 static if (is(S == ScopeStatement) || is(S == LabeledStatement))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
203 visitS(s.s);
662
73bac90f90b2 Fixed visit() method for Statements in DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 660
diff changeset
204 static if (is(S == ExpressionStatement))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
205 visitE(s.e);
662
73bac90f90b2 Fixed visit() method for Statements in DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 660
diff changeset
206 static if (is(S == DeclarationStatement))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
207 visitD(s.decl);
662
73bac90f90b2 Fixed visit() method for Statements in DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 660
diff changeset
208 static if (is(S == IfStatement))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
209 {
662
73bac90f90b2 Fixed visit() method for Statements in DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 660
diff changeset
210 s.variable ? cast(Node)visitS(s.variable) : visitE(s.condition);
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
211 visitS(s.ifBody), s.elseBody && visitS(s.elseBody);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
212 }
662
73bac90f90b2 Fixed visit() method for Statements in DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 660
diff changeset
213 static if (is(S == WhileStatement))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
214 visitE(s.condition), visitS(s.whileBody);
662
73bac90f90b2 Fixed visit() method for Statements in DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 660
diff changeset
215 static if (is(S == DoWhileStatement))
73bac90f90b2 Fixed visit() method for Statements in DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 660
diff changeset
216 visitS(s.doBody), visitE(s.condition);
73bac90f90b2 Fixed visit() method for Statements in DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 660
diff changeset
217 static if (is(S == ForStatement))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
218 s.init && visitS(s.init),
662
73bac90f90b2 Fixed visit() method for Statements in DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 660
diff changeset
219 s.condition && visitE(s.condition),
73bac90f90b2 Fixed visit() method for Statements in DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 660
diff changeset
220 s.increment && visitE(s.increment),
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
221 visitS(s.forBody);
662
73bac90f90b2 Fixed visit() method for Statements in DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 660
diff changeset
222 static if (is(S == ForeachStatement))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
223 visitN(s.params), visitE(s.aggregate), visitS(s.forBody);
662
73bac90f90b2 Fixed visit() method for Statements in DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 660
diff changeset
224 static if (is(S == ForeachRangeStatement))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
225 visitN(s.params), visitE(s.lower), visitE(s.upper), visitS(s.forBody);
662
73bac90f90b2 Fixed visit() method for Statements in DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 660
diff changeset
226 static if (is(S == SwitchStatement))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
227 visitE(s.condition), visitS(s.switchBody);
662
73bac90f90b2 Fixed visit() method for Statements in DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 660
diff changeset
228 static if (is(S == CaseStatement))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
229 {
662
73bac90f90b2 Fixed visit() method for Statements in DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 660
diff changeset
230 foreach (value; s.values)
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
231 visitE(value);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
232 visitS(s.caseBody);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
233 }
662
73bac90f90b2 Fixed visit() method for Statements in DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 660
diff changeset
234 static if (is(S == DefaultStatement))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
235 visitS(s.defaultBody);
667
1ac758cd952a Fixed a few things in DefaultVisitor.d and Pass1.d
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 666
diff changeset
236 //ContinueStatement,
1ac758cd952a Fixed a few things in DefaultVisitor.d and Pass1.d
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 666
diff changeset
237 //BreakStatement have no subnodes.
662
73bac90f90b2 Fixed visit() method for Statements in DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 660
diff changeset
238 static if (is(S == ReturnStatement))
667
1ac758cd952a Fixed a few things in DefaultVisitor.d and Pass1.d
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 666
diff changeset
239 s.e && visitE(s.e);
662
73bac90f90b2 Fixed visit() method for Statements in DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 660
diff changeset
240 static if (is(S == GotoStatement))
73bac90f90b2 Fixed visit() method for Statements in DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 660
diff changeset
241 s.caseExpr && visitE(s.caseExpr);
73bac90f90b2 Fixed visit() method for Statements in DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 660
diff changeset
242 static if (is(S == WithStatement))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
243 visitE(s.e), visitS(s.withBody);
662
73bac90f90b2 Fixed visit() method for Statements in DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 660
diff changeset
244 static if (is(S == SynchronizedStatement))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
245 s.e && visitE(s.e), visitS(s.syncBody);
662
73bac90f90b2 Fixed visit() method for Statements in DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 660
diff changeset
246 static if (is(S == TryStatement))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
247 {
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
248 visitS(s.tryBody);
682
7541c64fc423 Renamed FunctionBody, CatchBody and FinallyBody.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 681
diff changeset
249 foreach (catchBody; s.catchBodies)
7541c64fc423 Renamed FunctionBody, CatchBody and FinallyBody.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 681
diff changeset
250 visitS(catchBody);
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
251 s.finallyBody && visitS(s.finallyBody);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
252 }
682
7541c64fc423 Renamed FunctionBody, CatchBody and FinallyBody.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 681
diff changeset
253 static if (is(S == CatchStatement))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
254 s.param && visitN(s.param), visitS(s.catchBody);
682
7541c64fc423 Renamed FunctionBody, CatchBody and FinallyBody.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 681
diff changeset
255 static if (is(S == FinallyStatement))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
256 visitS(s.finallyBody);
662
73bac90f90b2 Fixed visit() method for Statements in DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 660
diff changeset
257 static if (is(S == ScopeGuardStatement))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
258 visitS(s.scopeBody);
662
73bac90f90b2 Fixed visit() method for Statements in DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 660
diff changeset
259 static if (is(S == ThrowStatement))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
260 visitE(s.e);
662
73bac90f90b2 Fixed visit() method for Statements in DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 660
diff changeset
261 static if (is(S == VolatileStatement))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
262 s.volatileBody && visitS(s.volatileBody);
681
95a3c28c0f64 Renamed AsmStatement->AsmBlockStatement and AsnInstruction->AsmStatement.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 680
diff changeset
263 static if (is(S == AsmBlockStatement))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
264 visitS(s.statements);
681
95a3c28c0f64 Renamed AsmStatement->AsmBlockStatement and AsnInstruction->AsmStatement.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 680
diff changeset
265 static if (is(S == AsmStatement))
666
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
266 foreach (op; s.operands)
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
267 visitE(op);
667
1ac758cd952a Fixed a few things in DefaultVisitor.d and Pass1.d
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 666
diff changeset
268 //AsmAlignStatement has no subnodes.
662
73bac90f90b2 Fixed visit() method for Statements in DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 660
diff changeset
269 static if (is(S == PragmaStatement))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
270 {
666
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
271 foreach (arg; s.args)
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
272 visitE(arg);
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
273 visitS(s.pragmaBody);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
274 }
662
73bac90f90b2 Fixed visit() method for Statements in DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 660
diff changeset
275 static if (is(S == MixinStatement))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
276 visitE(s.templateExpr);
662
73bac90f90b2 Fixed visit() method for Statements in DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 660
diff changeset
277 static if (is(S == StaticIfStatement))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
278 visitE(s.condition), visitS(s.ifBody), s.elseBody && visitS(s.elseBody);
662
73bac90f90b2 Fixed visit() method for Statements in DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 660
diff changeset
279 static if (is(S == StaticAssertStatement))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
280 visitE(s.condition), s.message && visitE(s.message);
662
73bac90f90b2 Fixed visit() method for Statements in DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 660
diff changeset
281 static if (is(S == DebugStatement) || is(S == VersionStatement))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
282 visitS(s.mainBody), s.elseBody && visitS(s.elseBody);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
283 }
666
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
284 else
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
285 static if (is(T : TypeNode))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
286 {
671
f1325a4506de Removed enum TID from dil.ast.Types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 668
diff changeset
287 //IllegalType,
667
1ac758cd952a Fixed a few things in DefaultVisitor.d and Pass1.d
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 666
diff changeset
288 //IntegralType,
1ac758cd952a Fixed a few things in DefaultVisitor.d and Pass1.d
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 666
diff changeset
289 //IdentifierType have no subnodes.
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
290 static if (is(T == QualifiedType))
694
19a34b69cc7d Renamed some members of BinaryExpression and QualifiedType.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 689
diff changeset
291 visitT(t.lhs), visitT(t.rhs);
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
292 static if (is(T == TypeofType))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
293 visitE(t.e);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
294 static if (is(T == TemplateInstanceType))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
295 t.targs && visitN(t.targs);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
296 static if (is(T == PointerType))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
297 visitT(t.next);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
298 static if (is(T == ArrayType))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
299 {
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
300 visitT(t.next);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
301 if (t.assocType)
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
302 visitT(t.assocType);
689
8e38774d562b Added some methods to ArrayType.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
303 else if (t.e1)
8e38774d562b Added some methods to ArrayType.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
304 visitE(t.e1), t.e2 && visitE(t.e2);
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
305 }
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
306 static if (is(T == FunctionType) || is(T == DelegateType))
668
a1f8d8f2db38 Renamed some identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 667
diff changeset
307 visitT(t.returnType), visitN(t.params);
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
308 static if (is(T == CFuncPointerType))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
309 visitT(t.next), t.params && visitN(t.params);
666
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
310 static if (is(T == ModuleScopeType) ||
668
a1f8d8f2db38 Renamed some identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 667
diff changeset
311 is(T == BaseClassType) ||
666
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
312 is(T == ConstType) ||
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
313 is(T == InvariantType))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
314 visitT(t.next);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
315 }
666
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
316 else
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
317 static if (is(T == Parameter))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
318 {
666
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
319 n.type && visitT(n.type);
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
320 n.defValue && visitE(n.defValue);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
321 }
666
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
322 else
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
323 static if (is(T == Parameters) ||
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
324 is(T == TemplateParameters) ||
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
325 is(T == TemplateArguments))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
326 {
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
327 foreach (node; n.children)
666
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
328 visitN(node);
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
329 }
666
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
330 else
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
331 static if (is(T : TemplateParameter))
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
332 {
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
333 static if (is(N == TemplateAliasParameter) ||
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
334 is(N == TemplateTypeParameter) ||
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
335 is(N == TemplateThisParameter))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
336 n.specType && visitN(n.specType),
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
337 n.defType && visitN(n.defType);
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
338 static if (is(N == TemplateValueParameter))
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
339 visitT(n.valueType),
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
340 n.specValue && visitN(n.specValue),
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
341 n.defValue && visitN(n.defValue);
667
1ac758cd952a Fixed a few things in DefaultVisitor.d and Pass1.d
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 666
diff changeset
342 //TemplateTupleParameter has no subnodes.
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
343 }
666
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
344 else
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
345 assert(0, "Missing default visit method for: "~t.classinfo.name);
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
346 return t;
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
347 }
660
085bac570c7e Implemented class DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 655
diff changeset
348
769
5e3ef1b2011c Added and improved documentation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 766
diff changeset
349 /// Generates the default visit methods.
5e3ef1b2011c Added and improved documentation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 766
diff changeset
350 ///
5e3ef1b2011c Added and improved documentation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 766
diff changeset
351 /// E.g:
5e3ef1b2011c Added and improved documentation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 766
diff changeset
352 /// ---
5e3ef1b2011c Added and improved documentation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 766
diff changeset
353 /// private mixin .visitDefault!(ClassDeclaration) _ClassDeclaration;
5e3ef1b2011c Added and improved documentation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 766
diff changeset
354 /// override returnType!("ClassDeclaration") visit(ClassDeclaration node)
5e3ef1b2011c Added and improved documentation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 766
diff changeset
355 /// { return _ClassDeclaration.visitDefault(node); }
5e3ef1b2011c Added and improved documentation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 766
diff changeset
356 /// ---
666
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
357 char[] generateDefaultVisitMethods()
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
358 {
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
359 char[] text;
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
360 foreach (className; classNames)
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
361 text ~= "private mixin .visitDefault!("~className~") _"~className~";\n"
786
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 769
diff changeset
362 "override returnType!(\""~className~"\") visit("~className~" node)"
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 769
diff changeset
363 "{return _"~className~".visitDefault(node);}\n";
666
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
364 return text;
642
be45f982ee3e Added module dil.ast.DefaultVisitor.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
365 }
666
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
366 // pragma(msg, generateDefaultVisitMethods());
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
367
786
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 769
diff changeset
368 /// This class provides default methods for
3b34f6a95a27 Added and revised documenation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 769
diff changeset
369 /// traversing nodes and their sub-nodes.
666
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
370 class DefaultVisitor : Visitor
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
371 {
668
a1f8d8f2db38 Renamed some identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 667
diff changeset
372 // Comment out if too many errors are shown.
666
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
373 mixin(generateDefaultVisitMethods());
8d96a7b50982 Revamped DefaultVisitor class.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 662
diff changeset
374 }