Mercurial > projects > dang
view sema/ObjectOriented.d @ 195:4e1a7265d620
Made a BuildTypes pass, to give all exp's a type.
author | Anders Johnsen <skabet@gmail.com> |
---|---|
date | Tue, 29 Jul 2008 15:50:24 +0200 |
parents | 7982eb63c0eb |
children |
line wrap: on
line source
module sema.ObjectOriented; import sema.Visitor, sema.Symbol, sema.DType; import tango.io.Stdout, Array = tango.core.Array; import basic.SourceLocation, basic.Message; class ObjectOriented : Visitor!(void) { this(MessageHandler messages) { this.messages = messages; } override void visit(Module[] m) { super.visit(m); ClassDecl[] visitBaseClass(ClassDecl current, ClassDecl[] visited) { visited ~= current; foreach (d ; current.baseClasses) if (d.type.isClass) if(Array.find(visited, (cast(ClassDecl)d.getSymbol.decl)) - visited.length) assert(0,"Circulair base class"); else return visitBaseClass((cast(ClassDecl)d.getSymbol.decl), visited); return visited; } while (classes.length) { ClassDecl current = classes[$-1]; ClassDecl[] visited; visited = visitBaseClass(current, visited); foreach (v; visited) classes.length = Array.remove(classes, v); } } override void visitClassDecl(ClassDecl decl) { classes ~= decl; } ClassDecl[] classNoBase; ClassDecl[] classes; MessageHandler messages; } class FindClassNoBase : Visitor!(void) { override void visitClassDecl(ClassDecl decl) { } ClassDecl[] classes; }