Mercurial > projects > ldc
comparison gen/toobj.c @ 64:b688ad419f8c trunk
[svn r68] Added support for multi-dimensional static arrays.
Several bugfixes to array support.
author | lindquist |
---|---|
date | Thu, 25 Oct 2007 12:09:13 +0200 |
parents | 2c39b5292cf3 |
children | f918f3e2e99e |
comparison
equal
deleted
inserted
replaced
63:2c39b5292cf3 | 64:b688ad419f8c |
---|---|
33 | 33 |
34 #include "gen/irstate.h" | 34 #include "gen/irstate.h" |
35 #include "gen/elem.h" | 35 #include "gen/elem.h" |
36 #include "gen/logger.h" | 36 #include "gen/logger.h" |
37 #include "gen/tollvm.h" | 37 #include "gen/tollvm.h" |
38 #include "gen/arrays.h" | |
38 | 39 |
39 ////////////////////////////////////////////////////////////////////////////////////////// | 40 ////////////////////////////////////////////////////////////////////////////////////////// |
40 | 41 |
41 void | 42 void |
42 Module::genobjfile() | 43 Module::genobjfile() |
544 _init = ts->sym->llvmInitZ; | 545 _init = ts->sym->llvmInitZ; |
545 } | 546 } |
546 // array single value init | 547 // array single value init |
547 else if (llvm::isa<llvm::ArrayType>(_type)) | 548 else if (llvm::isa<llvm::ArrayType>(_type)) |
548 { | 549 { |
549 const llvm::ArrayType* at = llvm::cast<llvm::ArrayType>(_type); | 550 _init = LLVM_DtoConstantStaticArray(_type, _init); |
550 if (at->getElementType() == _init->getType()) { | |
551 std::vector<llvm::Constant*> initvals; | |
552 initvals.resize(at->getNumElements(), _init); | |
553 _init = llvm::ConstantArray::get(at, initvals); | |
554 } | |
555 else { | |
556 assert(0); | |
557 } | |
558 } | 551 } |
559 else { | 552 else { |
560 Logger::cout() << "Unexpected initializer type: " << *_type << '\n'; | 553 Logger::cout() << "Unexpected initializer type: " << *_type << '\n'; |
561 //assert(0); | 554 //assert(0); |
562 } | 555 } |
563 } | 556 } |
564 | 557 |
558 Logger::cout() << "final init = " << *_init << '\n'; | |
565 gvar->setInitializer(_init); | 559 gvar->setInitializer(_init); |
566 } | 560 } |
567 | 561 |
568 llvmDModule = gIR->dmodule; | 562 llvmDModule = gIR->dmodule; |
569 | 563 |