Mercurial > projects > ldc
comparison gen/classes.cpp @ 1244:e1b0c5c74c58
Resolve all base classes, including interfaces (!) before resolving the class itself.
author | Tomas Lindquist Olsen <tomas.l.olsen gmail.com> |
---|---|
date | Fri, 17 Apr 2009 03:01:43 +0200 |
parents | ff1b4cc2e9be |
children | 7c1b55db4ff3 |
comparison
equal
deleted
inserted
replaced
1243:9c2dbbdd34f8 | 1244:e1b0c5c74c58 |
---|---|
26 // FIXME: this needs to be cleaned up | 26 // FIXME: this needs to be cleaned up |
27 | 27 |
28 void DtoResolveClass(ClassDeclaration* cd) | 28 void DtoResolveClass(ClassDeclaration* cd) |
29 { | 29 { |
30 // make sure the base classes are processed first | 30 // make sure the base classes are processed first |
31 if (cd->baseClass) | 31 ArrayIter<BaseClass> base_iter(cd->baseclasses); |
32 cd->baseClass->codegen(Type::sir); | 32 while (base_iter.more()) |
33 { | |
34 BaseClass* bc = base_iter.get(); | |
35 if (bc) | |
36 { | |
37 bc->base->codegen(Type::sir); | |
38 } | |
39 base_iter.next(); | |
40 } | |
33 | 41 |
34 if (cd->ir.resolved) return; | 42 if (cd->ir.resolved) return; |
35 cd->ir.resolved = true; | 43 cd->ir.resolved = true; |
36 | 44 |
37 Logger::println("DtoResolveClass(%s): %s", cd->toPrettyChars(), cd->loc.toChars()); | 45 Logger::println("DtoResolveClass(%s): %s", cd->toPrettyChars(), cd->loc.toChars()); |