Mercurial > projects > ldc
comparison gen/structs.cpp @ 132:1700239cab2e trunk
[svn r136] MAJOR UNSTABLE UPDATE!!!
Initial commit after moving to Tango instead of Phobos.
Lots of bugfixes...
This build is not suitable for most things.
author | lindquist |
---|---|
date | Fri, 11 Jan 2008 17:57:40 +0100 |
parents | 9c79b61fb638 |
children | 44a95ac7368a |
comparison
equal
deleted
inserted
replaced
131:5825d48b27d1 | 132:1700239cab2e |
---|---|
169 void DtoResolveStruct(StructDeclaration* sd) | 169 void DtoResolveStruct(StructDeclaration* sd) |
170 { | 170 { |
171 if (sd->llvmResolved) return; | 171 if (sd->llvmResolved) return; |
172 sd->llvmResolved = true; | 172 sd->llvmResolved = true; |
173 | 173 |
174 Logger::println("DtoResolveStruct(%s)", sd->toChars()); | 174 Logger::println("DtoResolveStruct(%s): %s", sd->toChars(), sd->loc.toChars()); |
175 LOG_SCOPE; | 175 LOG_SCOPE; |
176 | 176 |
177 TypeStruct* ts = (TypeStruct*)DtoDType(sd->type); | 177 TypeStruct* ts = (TypeStruct*)DtoDType(sd->type); |
178 | 178 |
179 IRStruct* irstruct = new IRStruct(ts); | 179 IRStruct* irstruct = new IRStruct(ts); |
180 sd->llvmIRStruct = irstruct; | 180 sd->llvmIRStruct = irstruct; |
181 gIR->structs.push_back(irstruct); | 181 gIR->structs.push_back(irstruct); |
182 | 182 |
183 for (int k=0; k < sd->members->dim; k++) { | 183 Array* arr = &sd->fields; |
184 for (int k=0; k < arr->dim; k++) { | |
185 VarDeclaration* v = (VarDeclaration*)(arr->data[k]); | |
186 v->toObjFile(); | |
187 } | |
188 | |
189 /*for (int k=0; k < sd->members->dim; k++) { | |
184 Dsymbol* dsym = (Dsymbol*)(sd->members->data[k]); | 190 Dsymbol* dsym = (Dsymbol*)(sd->members->data[k]); |
185 dsym->toObjFile(); | 191 dsym->toObjFile(); |
186 } | 192 }*/ |
187 | 193 |
188 Logger::println("doing struct fields"); | 194 Logger::println("doing struct fields"); |
189 | 195 |
190 const llvm::StructType* structtype = 0; | 196 const llvm::StructType* structtype = 0; |
191 std::vector<const llvm::Type*> fieldtypes; | 197 std::vector<const llvm::Type*> fieldtypes; |
291 void DtoDeclareStruct(StructDeclaration* sd) | 297 void DtoDeclareStruct(StructDeclaration* sd) |
292 { | 298 { |
293 if (sd->llvmDeclared) return; | 299 if (sd->llvmDeclared) return; |
294 sd->llvmDeclared = true; | 300 sd->llvmDeclared = true; |
295 | 301 |
296 Logger::println("DtoDeclareStruct(%s)", sd->toChars()); | 302 Logger::println("DtoDeclareStruct(%s): %s", sd->toChars(), sd->loc.toChars()); |
297 LOG_SCOPE; | 303 LOG_SCOPE; |
298 | 304 |
299 TypeStruct* ts = (TypeStruct*)DtoDType(sd->type); | 305 TypeStruct* ts = (TypeStruct*)DtoDType(sd->type); |
300 | 306 |
301 std::string initname("_D"); | 307 std::string initname("_D"); |
316 void DtoConstInitStruct(StructDeclaration* sd) | 322 void DtoConstInitStruct(StructDeclaration* sd) |
317 { | 323 { |
318 if (sd->llvmInitialized) return; | 324 if (sd->llvmInitialized) return; |
319 sd->llvmInitialized = true; | 325 sd->llvmInitialized = true; |
320 | 326 |
321 Logger::println("DtoConstInitStruct(%s)", sd->toChars()); | 327 Logger::println("DtoConstInitStruct(%s): %s", sd->toChars(), sd->loc.toChars()); |
322 LOG_SCOPE; | 328 LOG_SCOPE; |
323 | 329 |
324 IRStruct* irstruct = sd->llvmIRStruct; | 330 IRStruct* irstruct = sd->llvmIRStruct; |
325 gIR->structs.push_back(irstruct); | 331 gIR->structs.push_back(irstruct); |
326 | 332 |
388 void DtoDefineStruct(StructDeclaration* sd) | 394 void DtoDefineStruct(StructDeclaration* sd) |
389 { | 395 { |
390 if (sd->llvmDefined) return; | 396 if (sd->llvmDefined) return; |
391 sd->llvmDefined = true; | 397 sd->llvmDefined = true; |
392 | 398 |
393 Logger::println("DtoDefineStruct(%s)", sd->toChars()); | 399 Logger::println("DtoDefineStruct(%s): %s", sd->toChars(), sd->loc.toChars()); |
394 LOG_SCOPE; | 400 LOG_SCOPE; |
395 | 401 |
396 assert(sd->type->ty == Tstruct); | 402 assert(sd->type->ty == Tstruct); |
397 TypeStruct* ts = (TypeStruct*)sd->type; | 403 TypeStruct* ts = (TypeStruct*)sd->type; |
398 sd->llvmInit->setInitializer(sd->llvmConstInit); | 404 sd->llvmInit->setInitializer(sd->llvmConstInit); |