annotate sema/Visitor.d @ 185:7b274cfdc1dc

Added support for array literals. Codegen is broken, though.
author Anders Johnsen <skabet@gmail.com>
date Fri, 25 Jul 2008 12:18:05 +0200
parents dc9bf56b7ace
children 08f68d684047
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
1 module sema.Visitor;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
2
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
3 import tango.io.Stdout;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
4
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
5 public
94
48bb2287c035 Added Modules. Right now it's very simple - will grow with time and need.
Anders Johnsen <skabet@gmail.com>
parents: 83
diff changeset
6 import ast.Module,
48bb2287c035 Added Modules. Right now it's very simple - will grow with time and need.
Anders Johnsen <skabet@gmail.com>
parents: 83
diff changeset
7 ast.Decl,
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
8 ast.Stmt,
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
9 ast.Exp;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
10
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
11 import lexer.Token;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
12
94
48bb2287c035 Added Modules. Right now it's very simple - will grow with time and need.
Anders Johnsen <skabet@gmail.com>
parents: 83
diff changeset
13 class Visitor(FinalT = int, ModuleT = FinalT, DeclT = ModuleT, StmtT = DeclT, ExpT = StmtT)
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
14 {
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
15 public:
101
fea8d61a2451 First step(the other first was a bad one) toward imports. You can now compile two files that use eachother - given that they both are in the command line. Right now it's only root sturcts and methods you can use(i guess...?)
Anders Johnsen <skabet@gmail.com>
parents: 99
diff changeset
16 FinalT visit(Module[] modules)
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
17 {
101
fea8d61a2451 First step(the other first was a bad one) toward imports. You can now compile two files that use eachother - given that they both are in the command line. Right now it's only root sturcts and methods you can use(i guess...?)
Anders Johnsen <skabet@gmail.com>
parents: 99
diff changeset
18 foreach(m ; modules)
fea8d61a2451 First step(the other first was a bad one) toward imports. You can now compile two files that use eachother - given that they both are in the command line. Right now it's only root sturcts and methods you can use(i guess...?)
Anders Johnsen <skabet@gmail.com>
parents: 99
diff changeset
19 visitModule(m);
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
20 static if (is(FinalT == void))
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
21 return;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
22 else
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
23 return FinalT.init;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
24 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
25
94
48bb2287c035 Added Modules. Right now it's very simple - will grow with time and need.
Anders Johnsen <skabet@gmail.com>
parents: 83
diff changeset
26 ModuleT visitModule(Module m)
48bb2287c035 Added Modules. Right now it's very simple - will grow with time and need.
Anders Johnsen <skabet@gmail.com>
parents: 83
diff changeset
27 {
48bb2287c035 Added Modules. Right now it's very simple - will grow with time and need.
Anders Johnsen <skabet@gmail.com>
parents: 83
diff changeset
28 foreach (decl; m.decls)
48bb2287c035 Added Modules. Right now it's very simple - will grow with time and need.
Anders Johnsen <skabet@gmail.com>
parents: 83
diff changeset
29 visitDecl(decl);
48bb2287c035 Added Modules. Right now it's very simple - will grow with time and need.
Anders Johnsen <skabet@gmail.com>
parents: 83
diff changeset
30 static if (is(ModuleT == void))
48bb2287c035 Added Modules. Right now it's very simple - will grow with time and need.
Anders Johnsen <skabet@gmail.com>
parents: 83
diff changeset
31 return;
48bb2287c035 Added Modules. Right now it's very simple - will grow with time and need.
Anders Johnsen <skabet@gmail.com>
parents: 83
diff changeset
32 else
48bb2287c035 Added Modules. Right now it's very simple - will grow with time and need.
Anders Johnsen <skabet@gmail.com>
parents: 83
diff changeset
33 return ModuleT.init;
48bb2287c035 Added Modules. Right now it's very simple - will grow with time and need.
Anders Johnsen <skabet@gmail.com>
parents: 83
diff changeset
34 }
48bb2287c035 Added Modules. Right now it's very simple - will grow with time and need.
Anders Johnsen <skabet@gmail.com>
parents: 83
diff changeset
35
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
36 DeclT visitDecl(Decl decl)
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
37 {
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
38 switch(decl.declType)
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
39 {
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
40 case DeclType.FuncDecl:
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
41 return visitFuncDecl(cast(FuncDecl)decl);
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
42 case DeclType.VarDecl:
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
43 return visitVarDecl(cast(VarDecl)decl);
99
857f0d530789 Imports and improved module statement
Anders Halager <halager@gmail.com>
parents: 94
diff changeset
44 case DeclType.ImportDecl:
857f0d530789 Imports and improved module statement
Anders Halager <halager@gmail.com>
parents: 94
diff changeset
45 return visitImportDecl(cast(ImportDecl)decl);
22
e331e4e816e4 now handling structs to some extend
johnsen@johnsen-laptop
parents: 11
diff changeset
46 case DeclType.StructDecl:
e331e4e816e4 now handling structs to some extend
johnsen@johnsen-laptop
parents: 11
diff changeset
47 return visitStructDecl(cast(StructDecl)decl);
144
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
48 case DeclType.ClassDecl:
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
49 return visitClassDecl(cast(ClassDecl)decl);
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
50 case DeclType.InterfaceDecl:
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
51 return visitInterfaceDecl(cast(InterfaceDecl)decl);
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
52 default:
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
53 throw new Exception("Unknown declaration type");
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
54 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
55 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
56
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
57 StmtT visitStmt(Stmt stmt)
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
58 {
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
59 switch(stmt.stmtType)
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
60 {
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
61 case StmtType.Return:
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
62 return visitReturnStmt(cast(ReturnStmt)stmt);
44
495188f9078e Big update - Moving towards a better, more seperated parser
Anders Halager <halager@gmail.com>
parents: 37
diff changeset
63 case StmtType.Compound:
495188f9078e Big update - Moving towards a better, more seperated parser
Anders Halager <halager@gmail.com>
parents: 37
diff changeset
64 return visitCompoundStmt(cast(CompoundStatement)stmt);
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
65 case StmtType.Decl:
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
66 return visitDeclStmt(cast(DeclStmt)stmt);
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
67 case StmtType.Exp:
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
68 return visitExpStmt(cast(ExpStmt)stmt);
5
2c5a8f4c254a Added very simple if support.
Anders Halager <halager@gmail.com>
parents: 1
diff changeset
69 case StmtType.If:
2c5a8f4c254a Added very simple if support.
Anders Halager <halager@gmail.com>
parents: 1
diff changeset
70 return visitIfStmt(cast(IfStmt)stmt);
11
642c6a998fd9 Support for while statements and fixed scope for if
Anders Halager <halager@gmail.com>
parents: 5
diff changeset
71 case StmtType.While:
642c6a998fd9 Support for while statements and fixed scope for if
Anders Halager <halager@gmail.com>
parents: 5
diff changeset
72 return visitWhileStmt(cast(WhileStmt)stmt);
149
393a1f47a6d2 For loops in AST and sema. Should have correct scope and such now.
Anders Johnsen <skabet@gmail.com>
parents: 144
diff changeset
73 case StmtType.For:
393a1f47a6d2 For loops in AST and sema. Should have correct scope and such now.
Anders Johnsen <skabet@gmail.com>
parents: 144
diff changeset
74 return visitForStmt(cast(ForStmt)stmt);
36
ce17bea8e9bd Switch statements support
Anders Halager <halager@gmail.com>
parents: 28
diff changeset
75 case StmtType.Switch:
ce17bea8e9bd Switch statements support
Anders Halager <halager@gmail.com>
parents: 28
diff changeset
76 return visitSwitchStmt(cast(SwitchStmt)stmt);
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
77 default:
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
78 throw new Exception("Unknown statement type");
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
79 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
80 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
81
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
82 ExpT visitExp(Exp exp)
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
83 {
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
84 switch(exp.expType)
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
85 {
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
86 case ExpType.Binary:
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
87 return visitBinaryExp(cast(BinaryExp)exp);
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
88 case ExpType.IntegerLit:
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
89 return visitIntegerLit(cast(IntegerLit)exp);
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
90 case ExpType.Negate:
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
91 return visitNegateExp(cast(NegateExp)exp);
78
ad956143dcdc Parse and gen for dereferences
Anders Halager <halager@gmail.com>
parents: 68
diff changeset
92 case ExpType.Deref:
ad956143dcdc Parse and gen for dereferences
Anders Halager <halager@gmail.com>
parents: 68
diff changeset
93 return visitDerefExp(cast(DerefExp)exp);
176
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
94 case ExpType.AddressOfExp:
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
95 return visitAddressOfExp(cast(AddressOfExp)exp);
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
96 case ExpType.AssignExp:
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
97 return visitAssignExp(cast(AssignExp)exp);
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
98 case ExpType.CallExp:
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
99 return visitCallExp(cast(CallExp)exp);
68
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 63
diff changeset
100 case ExpType.CastExp:
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 63
diff changeset
101 return visitCastExp(cast(CastExp)exp);
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
102 case ExpType.Identifier:
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
103 return visitIdentifier(cast(Identifier)exp);
172
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 162
diff changeset
104 case ExpType.IdentifierTypeExp:
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 162
diff changeset
105 return visitIdentifier(cast(Identifier)exp);
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 162
diff changeset
106 case ExpType.PointerTypeExp:
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 162
diff changeset
107 return visitPointerTypeExp(cast(PointerTypeExp)exp);
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 162
diff changeset
108 case ExpType.StaticArrayTypeExp:
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 162
diff changeset
109 return visitStaticArrayTypeExp(cast(StaticArrayTypeExp)exp);
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 162
diff changeset
110 case ExpType.FunctionTypeExp:
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 162
diff changeset
111 return visitFunctionTypeExp(cast(FunctionTypeExp)exp);
106
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents: 102
diff changeset
112 case ExpType.StringExp:
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents: 102
diff changeset
113 return visitStringExp(cast(StringExp)exp);
83
9e90694f5da0 Parse array indexing, and allow reading from arrays
Anders Halager <halager@gmail.com>
parents: 82
diff changeset
114 case ExpType.Index:
9e90694f5da0 Parse array indexing, and allow reading from arrays
Anders Halager <halager@gmail.com>
parents: 82
diff changeset
115 return visitIndexExp(cast(IndexExp)exp);
55
79cb0afafabe Now structs are somewhat useable to use.
Anders Johnsen <skabet@gmail.com>
parents: 46
diff changeset
116 case ExpType.MemberReference:
79cb0afafabe Now structs are somewhat useable to use.
Anders Johnsen <skabet@gmail.com>
parents: 46
diff changeset
117 return visitMemberReference(cast(MemberReference)exp);
158
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 149
diff changeset
118 case ExpType.NewExp:
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 149
diff changeset
119 return visitNewExp(cast(NewExp)exp);
185
7b274cfdc1dc Added support for array literals. Codegen is broken, though.
Anders Johnsen <skabet@gmail.com>
parents: 176
diff changeset
120 case ExpType.ArrayLiteralExp:
7b274cfdc1dc Added support for array literals. Codegen is broken, though.
Anders Johnsen <skabet@gmail.com>
parents: 176
diff changeset
121 return visitArrayLiteralExp(cast(ArrayLiteralExp)exp);
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
122 default:
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
123 throw new Exception("Unknown expression type");
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
124 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
125 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
126
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
127 // Declarations:
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
128 DeclT visitVarDecl(VarDecl d)
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
129 {
63
9f8131676242 Now Decl's have a DType type(), and should use varType and returnType to get the old type id
Anders Halager <halager@gmail.com>
parents: 55
diff changeset
130 visitExp(d.varType);
82
06dda301ea61 Can declare outside functions and call c-functions
Anders Johnsen <skabet@gmail.com>
parents: 81
diff changeset
131 if(d.identifier)
06dda301ea61 Can declare outside functions and call c-functions
Anders Johnsen <skabet@gmail.com>
parents: 81
diff changeset
132 visitExp(d.identifier);
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
133 if (d.init)
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
134 visitExp(d.init);
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
135
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
136 static if (is(DeclT == void))
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
137 return;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
138 else
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
139 return DeclT.init;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
140 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
141
99
857f0d530789 Imports and improved module statement
Anders Halager <halager@gmail.com>
parents: 94
diff changeset
142 DeclT visitImportDecl(ImportDecl d)
857f0d530789 Imports and improved module statement
Anders Halager <halager@gmail.com>
parents: 94
diff changeset
143 {
857f0d530789 Imports and improved module statement
Anders Halager <halager@gmail.com>
parents: 94
diff changeset
144 visitIdentifier(d.name);
857f0d530789 Imports and improved module statement
Anders Halager <halager@gmail.com>
parents: 94
diff changeset
145 visitIdentifier(d.aliasedName);
857f0d530789 Imports and improved module statement
Anders Halager <halager@gmail.com>
parents: 94
diff changeset
146 foreach (id; d.packages)
857f0d530789 Imports and improved module statement
Anders Halager <halager@gmail.com>
parents: 94
diff changeset
147 visitIdentifier(id);
857f0d530789 Imports and improved module statement
Anders Halager <halager@gmail.com>
parents: 94
diff changeset
148 foreach (ids; d.explicitSymbols)
857f0d530789 Imports and improved module statement
Anders Halager <halager@gmail.com>
parents: 94
diff changeset
149 {
857f0d530789 Imports and improved module statement
Anders Halager <halager@gmail.com>
parents: 94
diff changeset
150 visitIdentifier(ids[0]);
857f0d530789 Imports and improved module statement
Anders Halager <halager@gmail.com>
parents: 94
diff changeset
151 visitIdentifier(ids[1]);
857f0d530789 Imports and improved module statement
Anders Halager <halager@gmail.com>
parents: 94
diff changeset
152 }
857f0d530789 Imports and improved module statement
Anders Halager <halager@gmail.com>
parents: 94
diff changeset
153
857f0d530789 Imports and improved module statement
Anders Halager <halager@gmail.com>
parents: 94
diff changeset
154 static if (is(DeclT == void))
857f0d530789 Imports and improved module statement
Anders Halager <halager@gmail.com>
parents: 94
diff changeset
155 return;
857f0d530789 Imports and improved module statement
Anders Halager <halager@gmail.com>
parents: 94
diff changeset
156 else
857f0d530789 Imports and improved module statement
Anders Halager <halager@gmail.com>
parents: 94
diff changeset
157 return DeclT.init;
857f0d530789 Imports and improved module statement
Anders Halager <halager@gmail.com>
parents: 94
diff changeset
158 }
857f0d530789 Imports and improved module statement
Anders Halager <halager@gmail.com>
parents: 94
diff changeset
159
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
160 DeclT visitFuncDecl(FuncDecl f)
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
161 {
63
9f8131676242 Now Decl's have a DType type(), and should use varType and returnType to get the old type id
Anders Halager <halager@gmail.com>
parents: 55
diff changeset
162 visitExp(f.returnType);
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
163 visitExp(f.identifier);
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
164 foreach (arg; f.funcArgs)
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
165 visitDecl(arg);
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
166 foreach (stmt; f.statements)
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
167 visitStmt(stmt);
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
168
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
169 static if (is(DeclT == void))
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
170 return;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
171 else
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
172 return DeclT.init;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
173 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
174
22
e331e4e816e4 now handling structs to some extend
johnsen@johnsen-laptop
parents: 11
diff changeset
175 DeclT visitStructDecl(StructDecl s)
e331e4e816e4 now handling structs to some extend
johnsen@johnsen-laptop
parents: 11
diff changeset
176 {
e331e4e816e4 now handling structs to some extend
johnsen@johnsen-laptop
parents: 11
diff changeset
177 visitExp(s.identifier);
e331e4e816e4 now handling structs to some extend
johnsen@johnsen-laptop
parents: 11
diff changeset
178
102
cd066f3b539a Parsing methods in structs - error on semantics though.
Anders Johnsen <skabet@gmail.com>
parents: 101
diff changeset
179 foreach (arg; s.decls)
22
e331e4e816e4 now handling structs to some extend
johnsen@johnsen-laptop
parents: 11
diff changeset
180 visitDecl(arg);
e331e4e816e4 now handling structs to some extend
johnsen@johnsen-laptop
parents: 11
diff changeset
181
e331e4e816e4 now handling structs to some extend
johnsen@johnsen-laptop
parents: 11
diff changeset
182 static if (is(DeclT == void))
e331e4e816e4 now handling structs to some extend
johnsen@johnsen-laptop
parents: 11
diff changeset
183 return;
e331e4e816e4 now handling structs to some extend
johnsen@johnsen-laptop
parents: 11
diff changeset
184 else
e331e4e816e4 now handling structs to some extend
johnsen@johnsen-laptop
parents: 11
diff changeset
185 return DeclT.init;
e331e4e816e4 now handling structs to some extend
johnsen@johnsen-laptop
parents: 11
diff changeset
186 }
e331e4e816e4 now handling structs to some extend
johnsen@johnsen-laptop
parents: 11
diff changeset
187
144
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
188 DeclT visitClassDecl(ClassDecl s)
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
189 {
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
190 visitExp(s.identifier);
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
191
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
192 foreach (arg; s.decls)
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
193 visitDecl(arg);
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
194
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
195 foreach (arg; s.baseClasses)
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
196 visitExp(arg);
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
197
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
198 static if (is(DeclT == void))
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
199 return;
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
200 else
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
201 return DeclT.init;
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
202 }
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
203
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
204 DeclT visitInterfaceDecl(InterfaceDecl s)
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
205 {
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
206 visitExp(s.identifier);
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
207
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
208 foreach (arg; s.decls)
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
209 visitDecl(arg);
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
210
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
211 foreach (arg; s.baseClasses)
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
212 visitExp(arg);
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
213
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
214 static if (is(DeclT == void))
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
215 return;
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
216 else
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
217 return DeclT.init;
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
218 }
6e6355fb5f0f - Parsing nested attributes.
Anders Johnsen <skabet@gmail.com>
parents: 143
diff changeset
219
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
220 // Statements:
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
221 StmtT visitReturnStmt(ReturnStmt s)
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
222 {
37
858b9805843d Bug-fixes
Anders Halager <halager@gmail.com>
parents: 36
diff changeset
223 if (s.exp)
858b9805843d Bug-fixes
Anders Halager <halager@gmail.com>
parents: 36
diff changeset
224 visitExp(s.exp);
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
225 static if (is(StmtT == void))
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
226 return;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
227 else
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
228 return StmtT.init;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
229 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
230
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
231 StmtT visitDeclStmt(DeclStmt d)
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
232 {
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
233 visitDecl(d.decl);
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
234 static if (is(StmtT == void))
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
235 return;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
236 else
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
237 return StmtT.init;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
238 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
239
44
495188f9078e Big update - Moving towards a better, more seperated parser
Anders Halager <halager@gmail.com>
parents: 37
diff changeset
240 StmtT visitCompoundStmt(CompoundStatement c)
495188f9078e Big update - Moving towards a better, more seperated parser
Anders Halager <halager@gmail.com>
parents: 37
diff changeset
241 {
495188f9078e Big update - Moving towards a better, more seperated parser
Anders Halager <halager@gmail.com>
parents: 37
diff changeset
242 foreach (stmt; c.statements)
495188f9078e Big update - Moving towards a better, more seperated parser
Anders Halager <halager@gmail.com>
parents: 37
diff changeset
243 visitStmt(stmt);
495188f9078e Big update - Moving towards a better, more seperated parser
Anders Halager <halager@gmail.com>
parents: 37
diff changeset
244 static if (is(StmtT == void))
495188f9078e Big update - Moving towards a better, more seperated parser
Anders Halager <halager@gmail.com>
parents: 37
diff changeset
245 return;
495188f9078e Big update - Moving towards a better, more seperated parser
Anders Halager <halager@gmail.com>
parents: 37
diff changeset
246 else
495188f9078e Big update - Moving towards a better, more seperated parser
Anders Halager <halager@gmail.com>
parents: 37
diff changeset
247 return StmtT.init;
495188f9078e Big update - Moving towards a better, more seperated parser
Anders Halager <halager@gmail.com>
parents: 37
diff changeset
248 }
495188f9078e Big update - Moving towards a better, more seperated parser
Anders Halager <halager@gmail.com>
parents: 37
diff changeset
249
5
2c5a8f4c254a Added very simple if support.
Anders Halager <halager@gmail.com>
parents: 1
diff changeset
250 StmtT visitIfStmt(IfStmt s)
2c5a8f4c254a Added very simple if support.
Anders Halager <halager@gmail.com>
parents: 1
diff changeset
251 {
2c5a8f4c254a Added very simple if support.
Anders Halager <halager@gmail.com>
parents: 1
diff changeset
252 visitExp(s.cond);
45
9bc660cbdbec If statements are back
Anders Halager <halager@gmail.com>
parents: 44
diff changeset
253 visitStmt(s.then_body);
9bc660cbdbec If statements are back
Anders Halager <halager@gmail.com>
parents: 44
diff changeset
254 if (s.else_body !is null)
9bc660cbdbec If statements are back
Anders Halager <halager@gmail.com>
parents: 44
diff changeset
255 visitStmt(s.else_body);
11
642c6a998fd9 Support for while statements and fixed scope for if
Anders Halager <halager@gmail.com>
parents: 5
diff changeset
256 static if (is(StmtT == void))
642c6a998fd9 Support for while statements and fixed scope for if
Anders Halager <halager@gmail.com>
parents: 5
diff changeset
257 return;
642c6a998fd9 Support for while statements and fixed scope for if
Anders Halager <halager@gmail.com>
parents: 5
diff changeset
258 else
642c6a998fd9 Support for while statements and fixed scope for if
Anders Halager <halager@gmail.com>
parents: 5
diff changeset
259 return StmtT.init;
642c6a998fd9 Support for while statements and fixed scope for if
Anders Halager <halager@gmail.com>
parents: 5
diff changeset
260 }
642c6a998fd9 Support for while statements and fixed scope for if
Anders Halager <halager@gmail.com>
parents: 5
diff changeset
261
642c6a998fd9 Support for while statements and fixed scope for if
Anders Halager <halager@gmail.com>
parents: 5
diff changeset
262 StmtT visitWhileStmt(WhileStmt s)
642c6a998fd9 Support for while statements and fixed scope for if
Anders Halager <halager@gmail.com>
parents: 5
diff changeset
263 {
642c6a998fd9 Support for while statements and fixed scope for if
Anders Halager <halager@gmail.com>
parents: 5
diff changeset
264 visitExp(s.cond);
46
90fb4fdfefdd While is back
Anders Halager <halager@gmail.com>
parents: 45
diff changeset
265 visitStmt(s.whileBody);
5
2c5a8f4c254a Added very simple if support.
Anders Halager <halager@gmail.com>
parents: 1
diff changeset
266 static if (is(StmtT == void))
2c5a8f4c254a Added very simple if support.
Anders Halager <halager@gmail.com>
parents: 1
diff changeset
267 return;
2c5a8f4c254a Added very simple if support.
Anders Halager <halager@gmail.com>
parents: 1
diff changeset
268 else
2c5a8f4c254a Added very simple if support.
Anders Halager <halager@gmail.com>
parents: 1
diff changeset
269 return StmtT.init;
2c5a8f4c254a Added very simple if support.
Anders Halager <halager@gmail.com>
parents: 1
diff changeset
270 }
149
393a1f47a6d2 For loops in AST and sema. Should have correct scope and such now.
Anders Johnsen <skabet@gmail.com>
parents: 144
diff changeset
271
393a1f47a6d2 For loops in AST and sema. Should have correct scope and such now.
Anders Johnsen <skabet@gmail.com>
parents: 144
diff changeset
272 StmtT visitForStmt(ForStmt s)
393a1f47a6d2 For loops in AST and sema. Should have correct scope and such now.
Anders Johnsen <skabet@gmail.com>
parents: 144
diff changeset
273 {
162
0f38f1a0f06f Fixed symbol for a functions members.
Anders Johnsen <skabet@gmail.com>
parents: 158
diff changeset
274 if(s.init)
0f38f1a0f06f Fixed symbol for a functions members.
Anders Johnsen <skabet@gmail.com>
parents: 158
diff changeset
275 visitStmt(s.init);
0f38f1a0f06f Fixed symbol for a functions members.
Anders Johnsen <skabet@gmail.com>
parents: 158
diff changeset
276 if(s.cond)
0f38f1a0f06f Fixed symbol for a functions members.
Anders Johnsen <skabet@gmail.com>
parents: 158
diff changeset
277 visitExp(s.cond);
0f38f1a0f06f Fixed symbol for a functions members.
Anders Johnsen <skabet@gmail.com>
parents: 158
diff changeset
278 if(s.incre)
0f38f1a0f06f Fixed symbol for a functions members.
Anders Johnsen <skabet@gmail.com>
parents: 158
diff changeset
279 visitExp(s.incre);
149
393a1f47a6d2 For loops in AST and sema. Should have correct scope and such now.
Anders Johnsen <skabet@gmail.com>
parents: 144
diff changeset
280 visitStmt(s.forBody);
393a1f47a6d2 For loops in AST and sema. Should have correct scope and such now.
Anders Johnsen <skabet@gmail.com>
parents: 144
diff changeset
281 static if (is(StmtT == void))
393a1f47a6d2 For loops in AST and sema. Should have correct scope and such now.
Anders Johnsen <skabet@gmail.com>
parents: 144
diff changeset
282 return;
393a1f47a6d2 For loops in AST and sema. Should have correct scope and such now.
Anders Johnsen <skabet@gmail.com>
parents: 144
diff changeset
283 else
393a1f47a6d2 For loops in AST and sema. Should have correct scope and such now.
Anders Johnsen <skabet@gmail.com>
parents: 144
diff changeset
284 return StmtT.init;
393a1f47a6d2 For loops in AST and sema. Should have correct scope and such now.
Anders Johnsen <skabet@gmail.com>
parents: 144
diff changeset
285 }
5
2c5a8f4c254a Added very simple if support.
Anders Halager <halager@gmail.com>
parents: 1
diff changeset
286
36
ce17bea8e9bd Switch statements support
Anders Halager <halager@gmail.com>
parents: 28
diff changeset
287 StmtT visitSwitchStmt(SwitchStmt s)
ce17bea8e9bd Switch statements support
Anders Halager <halager@gmail.com>
parents: 28
diff changeset
288 {
ce17bea8e9bd Switch statements support
Anders Halager <halager@gmail.com>
parents: 28
diff changeset
289 visitExp(s.cond);
ce17bea8e9bd Switch statements support
Anders Halager <halager@gmail.com>
parents: 28
diff changeset
290 foreach(stmt; s.defaultBlock)
ce17bea8e9bd Switch statements support
Anders Halager <halager@gmail.com>
parents: 28
diff changeset
291 visitStmt(stmt);
ce17bea8e9bd Switch statements support
Anders Halager <halager@gmail.com>
parents: 28
diff changeset
292 foreach (c; s.cases)
ce17bea8e9bd Switch statements support
Anders Halager <halager@gmail.com>
parents: 28
diff changeset
293 {
ce17bea8e9bd Switch statements support
Anders Halager <halager@gmail.com>
parents: 28
diff changeset
294 foreach(lit; c.values)
143
d76cc5cad4fc Added partial support for switches.
Anders Johnsen <skabet@gmail.com>
parents: 136
diff changeset
295 visitExp(lit);
36
ce17bea8e9bd Switch statements support
Anders Halager <halager@gmail.com>
parents: 28
diff changeset
296 foreach(stmt; c.stmts)
ce17bea8e9bd Switch statements support
Anders Halager <halager@gmail.com>
parents: 28
diff changeset
297 visitStmt(stmt);
ce17bea8e9bd Switch statements support
Anders Halager <halager@gmail.com>
parents: 28
diff changeset
298 }
ce17bea8e9bd Switch statements support
Anders Halager <halager@gmail.com>
parents: 28
diff changeset
299 static if (is(StmtT == void))
ce17bea8e9bd Switch statements support
Anders Halager <halager@gmail.com>
parents: 28
diff changeset
300 return;
ce17bea8e9bd Switch statements support
Anders Halager <halager@gmail.com>
parents: 28
diff changeset
301 else
ce17bea8e9bd Switch statements support
Anders Halager <halager@gmail.com>
parents: 28
diff changeset
302 return StmtT.init;
ce17bea8e9bd Switch statements support
Anders Halager <halager@gmail.com>
parents: 28
diff changeset
303 }
ce17bea8e9bd Switch statements support
Anders Halager <halager@gmail.com>
parents: 28
diff changeset
304
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
305 StmtT visitExpStmt(ExpStmt s)
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
306 {
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
307 visitExp(s.exp);
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
308 static if (is(StmtT == void))
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
309 return;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
310 else
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
311 return StmtT.init;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
312 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
313
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
314 // Expressions:
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
315 ExpT visitAssignExp(AssignExp exp)
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
316 {
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
317 visitExp(exp.identifier);
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
318 visitExp(exp.exp);
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
319 static if (is(ExpT == void))
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
320 return;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
321 else
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
322 return ExpT.init;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
323 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
324
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
325 ExpT visitBinaryExp(BinaryExp exp)
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
326 {
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
327 visitExp(exp.left);
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
328 visitExp(exp.right);
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
329 static if (is(ExpT == void))
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
330 return;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
331 else
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
332 return ExpT.init;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
333 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
334
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
335 ExpT visitCallExp(CallExp exp)
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
336 {
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
337 visitExp(exp.exp);
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
338 foreach (arg; exp.args)
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
339 visitExp(arg);
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
340 static if (is(ExpT == void))
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
341 return;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
342 else
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
343 return ExpT.init;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
344 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
345
68
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 63
diff changeset
346 ExpT visitCastExp(CastExp exp)
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 63
diff changeset
347 {
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 63
diff changeset
348 visitExp(exp.castType);
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 63
diff changeset
349 visitExp(exp.exp);
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 63
diff changeset
350 static if (is(ExpT == void))
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 63
diff changeset
351 return;
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 63
diff changeset
352 else
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 63
diff changeset
353 return ExpT.init;
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 63
diff changeset
354 }
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 63
diff changeset
355
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
356 ExpT visitNegateExp(NegateExp exp)
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
357 {
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
358 visitExp(exp.exp);
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
359 static if (is(ExpT == void))
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
360 return;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
361 else
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
362 return ExpT.init;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
363 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
364
78
ad956143dcdc Parse and gen for dereferences
Anders Halager <halager@gmail.com>
parents: 68
diff changeset
365 ExpT visitDerefExp(DerefExp exp)
ad956143dcdc Parse and gen for dereferences
Anders Halager <halager@gmail.com>
parents: 68
diff changeset
366 {
ad956143dcdc Parse and gen for dereferences
Anders Halager <halager@gmail.com>
parents: 68
diff changeset
367 visitExp(exp.exp);
ad956143dcdc Parse and gen for dereferences
Anders Halager <halager@gmail.com>
parents: 68
diff changeset
368 static if (is(ExpT == void))
ad956143dcdc Parse and gen for dereferences
Anders Halager <halager@gmail.com>
parents: 68
diff changeset
369 return;
ad956143dcdc Parse and gen for dereferences
Anders Halager <halager@gmail.com>
parents: 68
diff changeset
370 else
ad956143dcdc Parse and gen for dereferences
Anders Halager <halager@gmail.com>
parents: 68
diff changeset
371 return ExpT.init;
ad956143dcdc Parse and gen for dereferences
Anders Halager <halager@gmail.com>
parents: 68
diff changeset
372 }
ad956143dcdc Parse and gen for dereferences
Anders Halager <halager@gmail.com>
parents: 68
diff changeset
373
176
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
374 ExpT visitAddressOfExp(AddressOfExp exp)
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
375 {
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
376 visitExp(exp.exp);
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
377 static if (is(ExpT == void))
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
378 return;
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
379 else
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
380 return ExpT.init;
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
381 }
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
382
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
383 ExpT visitIntegerLit(IntegerLit exp)
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
384 {
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
385 static if (is(ExpT == void))
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
386 return;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
387 else
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
388 return ExpT.init;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
389 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
390
106
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents: 102
diff changeset
391 ExpT visitStringExp(StringExp exp)
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents: 102
diff changeset
392 {
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents: 102
diff changeset
393 static if (is(ExpT == void))
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents: 102
diff changeset
394 return;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents: 102
diff changeset
395 else
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents: 102
diff changeset
396 return ExpT.init;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents: 102
diff changeset
397 }
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents: 102
diff changeset
398
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
399 ExpT visitIdentifier(Identifier exp)
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
400 {
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
401 static if (is(ExpT == void))
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
402 return;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
403 else
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
404 return ExpT.init;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
405 }
28
69464d465284 Now supporting structs - both read and write. Still a few errors though, so watch out.
Anders Johnsen <skabet@gmail.com>
parents: 22
diff changeset
406
172
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 162
diff changeset
407 ExpT visitPointerTypeExp(PointerTypeExp exp)
77
13eea2c4e60d Now able of --ast-dump-code with Pointer types and also codeGen int* x;
Anders Johnsen <skabet@gmail.com>
parents: 68
diff changeset
408 {
13eea2c4e60d Now able of --ast-dump-code with Pointer types and also codeGen int* x;
Anders Johnsen <skabet@gmail.com>
parents: 68
diff changeset
409 visitExp(exp.pointerOf);
13eea2c4e60d Now able of --ast-dump-code with Pointer types and also codeGen int* x;
Anders Johnsen <skabet@gmail.com>
parents: 68
diff changeset
410
13eea2c4e60d Now able of --ast-dump-code with Pointer types and also codeGen int* x;
Anders Johnsen <skabet@gmail.com>
parents: 68
diff changeset
411 static if (is(ExpT == void))
13eea2c4e60d Now able of --ast-dump-code with Pointer types and also codeGen int* x;
Anders Johnsen <skabet@gmail.com>
parents: 68
diff changeset
412 return;
13eea2c4e60d Now able of --ast-dump-code with Pointer types and also codeGen int* x;
Anders Johnsen <skabet@gmail.com>
parents: 68
diff changeset
413 else
13eea2c4e60d Now able of --ast-dump-code with Pointer types and also codeGen int* x;
Anders Johnsen <skabet@gmail.com>
parents: 68
diff changeset
414 return ExpT.init;
13eea2c4e60d Now able of --ast-dump-code with Pointer types and also codeGen int* x;
Anders Johnsen <skabet@gmail.com>
parents: 68
diff changeset
415 }
13eea2c4e60d Now able of --ast-dump-code with Pointer types and also codeGen int* x;
Anders Johnsen <skabet@gmail.com>
parents: 68
diff changeset
416
172
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 162
diff changeset
417 ExpT visitStaticArrayTypeExp(StaticArrayTypeExp exp)
81
110c7e1c4ca2 Now you can declare array
Anders Johnsen <skabet@gmail.com>
parents: 79
diff changeset
418 {
110c7e1c4ca2 Now you can declare array
Anders Johnsen <skabet@gmail.com>
parents: 79
diff changeset
419 visitExp(exp.arrayOf);
110c7e1c4ca2 Now you can declare array
Anders Johnsen <skabet@gmail.com>
parents: 79
diff changeset
420
110c7e1c4ca2 Now you can declare array
Anders Johnsen <skabet@gmail.com>
parents: 79
diff changeset
421 static if (is(ExpT == void))
110c7e1c4ca2 Now you can declare array
Anders Johnsen <skabet@gmail.com>
parents: 79
diff changeset
422 return;
110c7e1c4ca2 Now you can declare array
Anders Johnsen <skabet@gmail.com>
parents: 79
diff changeset
423 else
110c7e1c4ca2 Now you can declare array
Anders Johnsen <skabet@gmail.com>
parents: 79
diff changeset
424 return ExpT.init;
110c7e1c4ca2 Now you can declare array
Anders Johnsen <skabet@gmail.com>
parents: 79
diff changeset
425 }
110c7e1c4ca2 Now you can declare array
Anders Johnsen <skabet@gmail.com>
parents: 79
diff changeset
426
172
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 162
diff changeset
427 ExpT visitFunctionTypeExp(FunctionTypeExp exp)
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 162
diff changeset
428 {
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 162
diff changeset
429 visitExp(exp.returnType);
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 162
diff changeset
430
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 162
diff changeset
431 foreach (decl ; exp.decls)
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 162
diff changeset
432 visitDecl(decl);
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 162
diff changeset
433
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 162
diff changeset
434 static if (is(ExpT == void))
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 162
diff changeset
435 return;
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 162
diff changeset
436 else
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 162
diff changeset
437 return ExpT.init;
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 162
diff changeset
438 }
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 162
diff changeset
439
83
9e90694f5da0 Parse array indexing, and allow reading from arrays
Anders Halager <halager@gmail.com>
parents: 82
diff changeset
440 ExpT visitIndexExp(IndexExp exp)
9e90694f5da0 Parse array indexing, and allow reading from arrays
Anders Halager <halager@gmail.com>
parents: 82
diff changeset
441 {
9e90694f5da0 Parse array indexing, and allow reading from arrays
Anders Halager <halager@gmail.com>
parents: 82
diff changeset
442 visitExp(exp.target);
9e90694f5da0 Parse array indexing, and allow reading from arrays
Anders Halager <halager@gmail.com>
parents: 82
diff changeset
443 visitExp(exp.index);
9e90694f5da0 Parse array indexing, and allow reading from arrays
Anders Halager <halager@gmail.com>
parents: 82
diff changeset
444
9e90694f5da0 Parse array indexing, and allow reading from arrays
Anders Halager <halager@gmail.com>
parents: 82
diff changeset
445 static if (is(ExpT == void))
9e90694f5da0 Parse array indexing, and allow reading from arrays
Anders Halager <halager@gmail.com>
parents: 82
diff changeset
446 return;
9e90694f5da0 Parse array indexing, and allow reading from arrays
Anders Halager <halager@gmail.com>
parents: 82
diff changeset
447 else
9e90694f5da0 Parse array indexing, and allow reading from arrays
Anders Halager <halager@gmail.com>
parents: 82
diff changeset
448 return ExpT.init;
9e90694f5da0 Parse array indexing, and allow reading from arrays
Anders Halager <halager@gmail.com>
parents: 82
diff changeset
449 }
9e90694f5da0 Parse array indexing, and allow reading from arrays
Anders Halager <halager@gmail.com>
parents: 82
diff changeset
450
55
79cb0afafabe Now structs are somewhat useable to use.
Anders Johnsen <skabet@gmail.com>
parents: 46
diff changeset
451 ExpT visitMemberReference(MemberReference mem)
28
69464d465284 Now supporting structs - both read and write. Still a few errors though, so watch out.
Anders Johnsen <skabet@gmail.com>
parents: 22
diff changeset
452 {
69464d465284 Now supporting structs - both read and write. Still a few errors though, so watch out.
Anders Johnsen <skabet@gmail.com>
parents: 22
diff changeset
453 visitExp(mem.target);
69464d465284 Now supporting structs - both read and write. Still a few errors though, so watch out.
Anders Johnsen <skabet@gmail.com>
parents: 22
diff changeset
454 visitExp(mem.child);
69464d465284 Now supporting structs - both read and write. Still a few errors though, so watch out.
Anders Johnsen <skabet@gmail.com>
parents: 22
diff changeset
455
69464d465284 Now supporting structs - both read and write. Still a few errors though, so watch out.
Anders Johnsen <skabet@gmail.com>
parents: 22
diff changeset
456 static if (is(ExpT == void))
69464d465284 Now supporting structs - both read and write. Still a few errors though, so watch out.
Anders Johnsen <skabet@gmail.com>
parents: 22
diff changeset
457 return;
69464d465284 Now supporting structs - both read and write. Still a few errors though, so watch out.
Anders Johnsen <skabet@gmail.com>
parents: 22
diff changeset
458 else
69464d465284 Now supporting structs - both read and write. Still a few errors though, so watch out.
Anders Johnsen <skabet@gmail.com>
parents: 22
diff changeset
459 return ExpT.init;
69464d465284 Now supporting structs - both read and write. Still a few errors though, so watch out.
Anders Johnsen <skabet@gmail.com>
parents: 22
diff changeset
460 }
158
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 149
diff changeset
461
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 149
diff changeset
462 ExpT visitNewExp(NewExp n)
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 149
diff changeset
463 {
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 149
diff changeset
464 visitExp(n.newType);
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 149
diff changeset
465
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 149
diff changeset
466 foreach( a ; n.a_args )
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 149
diff changeset
467 visitExp(a);
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 149
diff changeset
468
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 149
diff changeset
469 foreach( c ; n.c_args )
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 149
diff changeset
470 visitExp(c);
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 149
diff changeset
471
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 149
diff changeset
472 static if (is(ExpT == void))
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 149
diff changeset
473 return;
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 149
diff changeset
474 else
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 149
diff changeset
475 return ExpT.init;
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 149
diff changeset
476 }
185
7b274cfdc1dc Added support for array literals. Codegen is broken, though.
Anders Johnsen <skabet@gmail.com>
parents: 176
diff changeset
477
7b274cfdc1dc Added support for array literals. Codegen is broken, though.
Anders Johnsen <skabet@gmail.com>
parents: 176
diff changeset
478 ExpT visitArrayLiteralExp(ArrayLiteralExp a)
7b274cfdc1dc Added support for array literals. Codegen is broken, though.
Anders Johnsen <skabet@gmail.com>
parents: 176
diff changeset
479 {
7b274cfdc1dc Added support for array literals. Codegen is broken, though.
Anders Johnsen <skabet@gmail.com>
parents: 176
diff changeset
480 foreach( e ; a.exps )
7b274cfdc1dc Added support for array literals. Codegen is broken, though.
Anders Johnsen <skabet@gmail.com>
parents: 176
diff changeset
481 visitExp(e);
7b274cfdc1dc Added support for array literals. Codegen is broken, though.
Anders Johnsen <skabet@gmail.com>
parents: 176
diff changeset
482
7b274cfdc1dc Added support for array literals. Codegen is broken, though.
Anders Johnsen <skabet@gmail.com>
parents: 176
diff changeset
483 static if (is(ExpT == void))
7b274cfdc1dc Added support for array literals. Codegen is broken, though.
Anders Johnsen <skabet@gmail.com>
parents: 176
diff changeset
484 return;
7b274cfdc1dc Added support for array literals. Codegen is broken, though.
Anders Johnsen <skabet@gmail.com>
parents: 176
diff changeset
485 else
7b274cfdc1dc Added support for array literals. Codegen is broken, though.
Anders Johnsen <skabet@gmail.com>
parents: 176
diff changeset
486 return ExpT.init;
7b274cfdc1dc Added support for array literals. Codegen is broken, though.
Anders Johnsen <skabet@gmail.com>
parents: 176
diff changeset
487 }
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
488 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
489