Mercurial > projects > ldc
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(); |