Mercurial > projects > dil
changeset 636:15a0f37caabe
Added more visit() methods to dil.semantic.SemanticPass1.
author | Aziz K?ksal <aziz.koeksal@gmail.com> |
---|---|
date | Mon, 14 Jan 2008 00:21:13 +0100 |
parents | b2fc028d8b55 |
children | fe66cecb6ec9 |
files | trunk/src/dil/ast/Node.d trunk/src/dil/semantic/Pass1.d |
diffstat | 2 files changed, 135 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/trunk/src/dil/ast/Node.d Sun Jan 13 21:53:01 2008 +0100 +++ b/trunk/src/dil/ast/Node.d Mon Jan 14 00:21:13 2008 +0100 @@ -85,6 +85,11 @@ return null; } + Class to(Class)() + { + return cast(Class)cast(void*)this; + } + static bool isDoxygenComment(Token* token) { // Doxygen: '/+!' '/*!' '//!' return token.type == TOK.Comment && token.start[2] == '!';
--- a/trunk/src/dil/semantic/Pass1.d Sun Jan 13 21:53:01 2008 +0100 +++ b/trunk/src/dil/semantic/Pass1.d Mon Jan 14 00:21:13 2008 +0100 @@ -21,29 +21,146 @@ { Scope scop; - /+Scope enterScope(Symbol s) + void enterScope(ScopeSymbol s) { - return null; - }+/ + scop = scop.enter(s); + } + + void exitScope() + { + scop = scop.exit(); + } override { - Declaration visit(ClassDeclaration c) + Declaration visit(Declarations d) + { + foreach (node; d.children) + { + assert(node.category == NodeCategory.Declaration); + visitD(node.to!(Declaration)); + } + return d; + } + + Declaration visit(IllegalDeclaration) + { assert(0, "semantic pass on invalid AST"); return null; } + Declaration visit(EmptyDeclaration) + { return null; } + Declaration visit(ModuleDeclaration) + { return null; } + Declaration visit(ImportDeclaration) + { return null; } + Declaration visit(AliasDeclaration) + { return null; } + Declaration visit(TypedefDeclaration) + { return null; } + Declaration visit(EnumDeclaration) + { return null; } + Declaration visit(EnumMember) + { return null; } + + Declaration visit(ClassDeclaration d) { - if (c.symbol) + if (d.symbol) + return null; + d.symbol = new Class(d.name, d); + // Insert into current scope. + scop.insert(d.symbol, d.name); + enterScope(d.symbol); + // Continue semantic analysis. + d.decls && visitD(d.decls); + exitScope(); + return d; + } + + Declaration visit(InterfaceDeclaration d) + { + if (d.symbol) return null; - c.symbol = new Class(c.name, c); + d.symbol = new dil.semantic.Symbols.Interface(d.name, d); + // Insert into current scope. + scop.insert(d.symbol, d.name); + enterScope(d.symbol); + // Continue semantic analysis. + d.decls && visitD(d.decls); + exitScope(); + return d; + } + + Declaration visit(StructDeclaration d) + { + if (d.symbol) + return null; + d.symbol = new Struct(d.name, d); // Insert into current scope. - scop.insert(c.symbol, c.name); - // Enter a new scope. - this.scop = this.scop.enter(c.symbol); + scop.insert(d.symbol, d.name); + enterScope(d.symbol); + // Continue semantic analysis. + d.decls && visitD(d.decls); + exitScope(); + return d; + } + + Declaration visit(UnionDeclaration d) + { + if (d.symbol) + return null; + d.symbol = new Union(d.name, d); + // Insert into current scope. + scop.insert(d.symbol, d.name); + enterScope(d.symbol); // Continue semantic analysis. - c.decls && visitD(c.decls); - // Exit scope. - this.scop = scop.exit(); - return c; + d.decls && visitD(d.decls); + exitScope(); + return d; } + Declaration visit(ConstructorDeclaration) + { return null; } + Declaration visit(StaticConstructorDeclaration) + { return null; } + Declaration visit(DestructorDeclaration) + { return null; } + Declaration visit(StaticDestructorDeclaration) + { return null; } + Declaration visit(FunctionDeclaration) + { return null; } + Declaration visit(VariableDeclaration) + { return null; } + Declaration visit(InvariantDeclaration) + { return null; } + Declaration visit(UnittestDeclaration) + { return null; } + Declaration visit(DebugDeclaration) + { return null; } + Declaration visit(VersionDeclaration) + { return null; } + Declaration visit(StaticIfDeclaration) + { return null; } + Declaration visit(StaticAssertDeclaration) + { return null; } + Declaration visit(TemplateDeclaration) + { return null; } + Declaration visit(NewDeclaration) + { return null; } + Declaration visit(DeleteDeclaration) + { return null; } + Declaration visit(AttributeDeclaration) + { return null; } + Declaration visit(ProtectionDeclaration) + { return null; } + Declaration visit(StorageClassDeclaration) + { return null; } + Declaration visit(LinkageDeclaration) + { return null; } + Declaration visit(AlignDeclaration) + { return null; } + Declaration visit(PragmaDeclaration) + { return null; } + Declaration visit(MixinDeclaration) + { return null; } + Expression visit(CommaExpression e) { if (!e.type)