Mercurial > projects > dang
view sema/ObjectOriented.d @ 168:7982eb63c0eb
Some changes to get function overloading to work. Also class inherit works now - to some extend. needs vtables and all the complex stuff of it.
author | Anders Johnsen <skabet@gmail.com> |
---|---|
date | Thu, 24 Jul 2008 12:06:48 +0200 |
parents | |
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; }