comparison sema/Visitor.d @ 94:48bb2287c035 new_gen

Added Modules. Right now it's very simple - will grow with time and need.
author Anders Johnsen <skabet@gmail.com>
date Tue, 06 May 2008 16:24:14 +0200
parents 9e90694f5da0
children 857f0d530789
comparison
equal deleted inserted replaced
93:621cedba53ea 94:48bb2287c035
1 module sema.Visitor; 1 module sema.Visitor;
2 2
3 import tango.io.Stdout; 3 import tango.io.Stdout;
4 4
5 public 5 public
6 import ast.Decl, 6 import ast.Module,
7 ast.Decl,
7 ast.Stmt, 8 ast.Stmt,
8 ast.Exp; 9 ast.Exp;
9 10
10 import lexer.Token; 11 import lexer.Token;
11 12
12 class Visitor(FinalT = int, DeclT = FinalT, StmtT = DeclT, ExpT = StmtT) 13 class Visitor(FinalT = int, ModuleT = FinalT, DeclT = ModuleT, StmtT = DeclT, ExpT = StmtT)
13 { 14 {
14 public: 15 public:
15 FinalT visit(Decl[] decls) 16 FinalT visit(Module m)
16 { 17 {
17 foreach (decl; decls) 18 visitModule(m);
19 static if (is(FinalT == void))
20 return;
21 else
22 return FinalT.init;
23 }
24
25 ModuleT visitModule(Module m)
26 {
27 foreach (decl; m.decls)
18 visitDecl(decl); 28 visitDecl(decl);
19 static if (is(FinalT == void)) 29 static if (is(ModuleT == void))
20 return; 30 return;
21 else 31 else
22 return FinalT.init; 32 return ModuleT.init;
23 } 33 }
24 34
25 DeclT visitDecl(Decl decl) 35 DeclT visitDecl(Decl decl)
26 { 36 {
27 switch(decl.declType) 37 switch(decl.declType)