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());