comparison gen/toobj.cpp @ 155:7f92f477ff53 trunk

[svn r171] starting to move IR data from AST nodes into IRState; started with IrFunction
author ChristianK
date Tue, 29 Apr 2008 21:33:50 +0200
parents 4c577c2b7229
children ccd07d9f2ce9
comparison
equal deleted inserted replaced
154:5cb946f323d2 155:7f92f477ff53
175 if (gIR->ctors.empty()) 175 if (gIR->ctors.empty())
176 return NULL; 176 return NULL;
177 177
178 size_t n = gIR->ctors.size(); 178 size_t n = gIR->ctors.size();
179 if (n == 1) 179 if (n == 1)
180 return gIR->ctors[0]->irFunc->func; 180 return gIR->irFunc[gIR->ctors[0]]->func;
181 181
182 std::string name("_D"); 182 std::string name("_D");
183 name.append(gIR->dmodule->mangle()); 183 name.append(gIR->dmodule->mangle());
184 name.append("6__ctorZ"); 184 name.append("6__ctorZ");
185 185
190 190
191 llvm::BasicBlock* bb = new llvm::BasicBlock("entry", fn); 191 llvm::BasicBlock* bb = new llvm::BasicBlock("entry", fn);
192 LLVMBuilder builder(bb); 192 LLVMBuilder builder(bb);
193 193
194 for (size_t i=0; i<n; i++) { 194 for (size_t i=0; i<n; i++) {
195 llvm::Function* f = gIR->ctors[i]->irFunc->func; 195 llvm::Function* f = gIR->irFunc[gIR->ctors[i]]->func;
196 llvm::CallInst* call = builder.CreateCall(f,""); 196 llvm::CallInst* call = builder.CreateCall(f,"");
197 call->setCallingConv(llvm::CallingConv::Fast); 197 call->setCallingConv(llvm::CallingConv::Fast);
198 } 198 }
199 199
200 builder.CreateRetVoid(); 200 builder.CreateRetVoid();
208 if (gIR->dtors.empty()) 208 if (gIR->dtors.empty())
209 return NULL; 209 return NULL;
210 210
211 size_t n = gIR->dtors.size(); 211 size_t n = gIR->dtors.size();
212 if (n == 1) 212 if (n == 1)
213 return gIR->dtors[0]->irFunc->func; 213 return gIR->irFunc[gIR->dtors[0]]->func;
214 214
215 std::string name("_D"); 215 std::string name("_D");
216 name.append(gIR->dmodule->mangle()); 216 name.append(gIR->dmodule->mangle());
217 name.append("6__dtorZ"); 217 name.append("6__dtorZ");
218 218
223 223
224 llvm::BasicBlock* bb = new llvm::BasicBlock("entry", fn); 224 llvm::BasicBlock* bb = new llvm::BasicBlock("entry", fn);
225 LLVMBuilder builder(bb); 225 LLVMBuilder builder(bb);
226 226
227 for (size_t i=0; i<n; i++) { 227 for (size_t i=0; i<n; i++) {
228 llvm::Function* f = gIR->dtors[i]->irFunc->func; 228 llvm::Function* f = gIR->irFunc[gIR->dtors[i]]->func;
229 llvm::CallInst* call = builder.CreateCall(f,""); 229 llvm::CallInst* call = builder.CreateCall(f,"");
230 call->setCallingConv(llvm::CallingConv::Fast); 230 call->setCallingConv(llvm::CallingConv::Fast);
231 } 231 }
232 232
233 builder.CreateRetVoid(); 233 builder.CreateRetVoid();
241 if (gIR->unitTests.empty()) 241 if (gIR->unitTests.empty())
242 return NULL; 242 return NULL;
243 243
244 size_t n = gIR->unitTests.size(); 244 size_t n = gIR->unitTests.size();
245 if (n == 1) 245 if (n == 1)
246 return gIR->unitTests[0]->irFunc->func; 246 return gIR->irFunc[gIR->unitTests[0]]->func;
247 247
248 std::string name("_D"); 248 std::string name("_D");
249 name.append(gIR->dmodule->mangle()); 249 name.append(gIR->dmodule->mangle());
250 name.append("10__unittestZ"); 250 name.append("10__unittestZ");
251 251
256 256
257 llvm::BasicBlock* bb = new llvm::BasicBlock("entry", fn); 257 llvm::BasicBlock* bb = new llvm::BasicBlock("entry", fn);
258 LLVMBuilder builder(bb); 258 LLVMBuilder builder(bb);
259 259
260 for (size_t i=0; i<n; i++) { 260 for (size_t i=0; i<n; i++) {
261 llvm::Function* f = gIR->unitTests[i]->irFunc->func; 261 llvm::Function* f = gIR->irFunc[gIR->unitTests[i]]->func;
262 llvm::CallInst* call = builder.CreateCall(f,""); 262 llvm::CallInst* call = builder.CreateCall(f,"");
263 call->setCallingConv(llvm::CallingConv::Fast); 263 call->setCallingConv(llvm::CallingConv::Fast);
264 } 264 }
265 265
266 builder.CreateRetVoid(); 266 builder.CreateRetVoid();