Mercurial > projects > dang
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) |