annotate trunk/src/dil/ast/DefaultVisitor.d @ 689:8e38774d562b

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