[svn r102] Further delayed emission of function bodies to avoid problems with circular-forward-references.

Now uses the DMD _adEq(void[], void[], TypeInfo) runtime function for array equality comparison.
This commit is contained in:
Tomas Lindquist Olsen
2007-11-14 23:39:10 +01:00
parent 46d8929fb6
commit 302015d7e8
13 changed files with 163 additions and 120 deletions

View File

@@ -90,6 +90,14 @@ Module::genobjfile()
dsym->toObjFile();
}
// check if there are queued function definitions, if so process their bodies now
if (!ir.funcQueue.empty()) {
size_t n = ir.funcQueue.size();
for (size_t i=0; i<n; ++i) {
ir.funcQueue[i]->toObjFile();
}
}
// generate ModuleInfo
genmoduleinfo();
@@ -480,7 +488,8 @@ void StructDeclaration::toObjFile()
IRStruct::FuncDeclVector& mfs = gIR->topstruct().funcs;
size_t n = mfs.size();
for (size_t i=0; i<n; ++i) {
mfs[i]->toObjFile();
//mfs[i]->toObjFile();
gIR->funcQueue.push_back(mfs[i]);
}
llvmDModule = gIR->dmodule;
@@ -693,7 +702,8 @@ void ClassDeclaration::toObjFile()
IRStruct::FuncDeclVector& mfs = gIR->topstruct().funcs;
size_t n = mfs.size();
for (size_t i=0; i<n; ++i) {
mfs[i]->toObjFile();
//mfs[i]->toObjFile();
gIR->funcQueue.push_back(mfs[i]);
}
}