comparison gen/toobj.cpp @ 98:6789050b5ad1 trunk

[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.
author lindquist
date Wed, 14 Nov 2007 23:39:10 +0100
parents ce7ed8f59b99
children 5071469303d4
comparison
equal deleted inserted replaced
97:c4e161556a21 98:6789050b5ad1
86 // process module members 86 // process module members
87 for (int k=0; k < members->dim; k++) { 87 for (int k=0; k < members->dim; k++) {
88 Dsymbol* dsym = (Dsymbol*)(members->data[k]); 88 Dsymbol* dsym = (Dsymbol*)(members->data[k]);
89 assert(dsym); 89 assert(dsym);
90 dsym->toObjFile(); 90 dsym->toObjFile();
91 }
92
93 // check if there are queued function definitions, if so process their bodies now
94 if (!ir.funcQueue.empty()) {
95 size_t n = ir.funcQueue.size();
96 for (size_t i=0; i<n; ++i) {
97 ir.funcQueue[i]->toObjFile();
98 }
91 } 99 }
92 100
93 // generate ModuleInfo 101 // generate ModuleInfo
94 genmoduleinfo(); 102 genmoduleinfo();
95 103
478 // generate member function definitions 486 // generate member function definitions
479 gIR->topstruct().queueFuncs = false; 487 gIR->topstruct().queueFuncs = false;
480 IRStruct::FuncDeclVector& mfs = gIR->topstruct().funcs; 488 IRStruct::FuncDeclVector& mfs = gIR->topstruct().funcs;
481 size_t n = mfs.size(); 489 size_t n = mfs.size();
482 for (size_t i=0; i<n; ++i) { 490 for (size_t i=0; i<n; ++i) {
483 mfs[i]->toObjFile(); 491 //mfs[i]->toObjFile();
492 gIR->funcQueue.push_back(mfs[i]);
484 } 493 }
485 494
486 llvmDModule = gIR->dmodule; 495 llvmDModule = gIR->dmodule;
487 496
488 gIR->structs.pop_back(); 497 gIR->structs.pop_back();
691 // generate member functions 700 // generate member functions
692 gIR->topstruct().queueFuncs = false; 701 gIR->topstruct().queueFuncs = false;
693 IRStruct::FuncDeclVector& mfs = gIR->topstruct().funcs; 702 IRStruct::FuncDeclVector& mfs = gIR->topstruct().funcs;
694 size_t n = mfs.size(); 703 size_t n = mfs.size();
695 for (size_t i=0; i<n; ++i) { 704 for (size_t i=0; i<n; ++i) {
696 mfs[i]->toObjFile(); 705 //mfs[i]->toObjFile();
706 gIR->funcQueue.push_back(mfs[i]);
697 } 707 }
698 } 708 }
699 709
700 gIR->classes.pop_back(); 710 gIR->classes.pop_back();
701 gIR->structs.pop_back(); 711 gIR->structs.pop_back();