comparison 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
comparison
equal deleted inserted replaced
166:9cfa33517526 168:7982eb63c0eb
1 module sema.ObjectOriented;
2
3 import sema.Visitor,
4 sema.Symbol,
5 sema.DType;
6
7 import tango.io.Stdout,
8 Array = tango.core.Array;
9
10 import basic.SourceLocation,
11 basic.Message;
12
13 class ObjectOriented : Visitor!(void)
14 {
15 this(MessageHandler messages)
16 {
17 this.messages = messages;
18 }
19
20 override void visit(Module[] m)
21 {
22 super.visit(m);
23
24 ClassDecl[] visitBaseClass(ClassDecl current, ClassDecl[] visited)
25 {
26 visited ~= current;
27 foreach (d ; current.baseClasses)
28 if (d.type.isClass)
29 if(Array.find(visited,
30 (cast(ClassDecl)d.getSymbol.decl)) - visited.length)
31 assert(0,"Circulair base class");
32 else
33 return visitBaseClass((cast(ClassDecl)d.getSymbol.decl), visited);
34 return visited;
35 }
36
37 while (classes.length)
38 {
39 ClassDecl current = classes[$-1];
40 ClassDecl[] visited;
41 visited = visitBaseClass(current, visited);
42 foreach (v; visited)
43 classes.length = Array.remove(classes, v);
44 }
45 }
46
47 override void visitClassDecl(ClassDecl decl)
48 {
49 classes ~= decl;
50 }
51
52 ClassDecl[] classNoBase;
53 ClassDecl[] classes;
54 MessageHandler messages;
55 }
56
57 class FindClassNoBase : Visitor!(void)
58 {
59 override void visitClassDecl(ClassDecl decl)
60 {
61 }
62
63 ClassDecl[] classes;
64 }