Mercurial > projects > ldc
comparison gen/tollvm.c @ 21:8d45266bbabe trunk
[svn r25] * Fixed a lot of problems with string literals
* Fixed slice-slice copying assignment
author | lindquist |
---|---|
date | Thu, 04 Oct 2007 07:01:15 +0200 |
parents | c05ef76f1c20 |
children | 25bb577878e8 |
comparison
equal
deleted
inserted
replaced
20:42bf2eb2973b | 21:8d45266bbabe |
---|---|
801 | 801 |
802 ////////////////////////////////////////////////////////////////////////////////////////// | 802 ////////////////////////////////////////////////////////////////////////////////////////// |
803 | 803 |
804 llvm::Constant* LLVM_DtoInitializer(Type* type, Initializer* init) | 804 llvm::Constant* LLVM_DtoInitializer(Type* type, Initializer* init) |
805 { | 805 { |
806 llvm::Constant* _init = 0; | 806 llvm::Constant* _init = 0; // may return zero |
807 if (!init) | 807 if (!init) |
808 { | 808 { |
809 Logger::println("default initializer"); | |
809 elem* e = type->defaultInit()->toElem(gIR); | 810 elem* e = type->defaultInit()->toElem(gIR); |
810 if (!e->inplace && !e->isNull()) { | 811 if (!e->inplace && !e->isNull()) { |
811 _init = llvm::cast<llvm::Constant>(e->getValue()); | 812 _init = llvm::cast<llvm::Constant>(e->getValue()); |
812 } | 813 } |
813 delete e; | 814 delete e; |
814 } | 815 } |
815 else if (ExpInitializer* ex = init->isExpInitializer()) | 816 else if (ExpInitializer* ex = init->isExpInitializer()) |
816 { | 817 { |
818 Logger::println("expression initializer"); | |
817 elem* e = ex->exp->toElem(gIR); | 819 elem* e = ex->exp->toElem(gIR); |
818 if (!e->inplace && !e->isNull()) { | 820 if (!e->inplace && !e->isNull()) { |
819 _init = llvm::cast<llvm::Constant>(e->getValue()); | 821 _init = llvm::cast<llvm::Constant>(e->getValue()); |
820 } | 822 } |
821 delete e; | 823 delete e; |
822 } | 824 } |
823 else if (StructInitializer* si = init->isStructInitializer()) | 825 else if (StructInitializer* si = init->isStructInitializer()) |
824 { | 826 { |
827 Logger::println("struct initializer"); | |
825 _init = LLVM_DtoStructInitializer(si); | 828 _init = LLVM_DtoStructInitializer(si); |
826 } | 829 } |
827 else if (ArrayInitializer* ai = init->isArrayInitializer()) | 830 else if (ArrayInitializer* ai = init->isArrayInitializer()) |
828 { | 831 { |
832 Logger::println("array initializer"); | |
829 _init = LLVM_DtoArrayInitializer(ai); | 833 _init = LLVM_DtoArrayInitializer(ai); |
830 } | 834 } |
831 else if (init->isVoidInitializer()) | 835 else if (init->isVoidInitializer()) |
832 { | 836 { |
837 Logger::println("void initializer"); | |
833 const llvm::Type* ty = LLVM_DtoType(type); | 838 const llvm::Type* ty = LLVM_DtoType(type); |
834 _init = llvm::Constant::getNullValue(ty); | 839 _init = llvm::Constant::getNullValue(ty); |
835 } | 840 } |
836 else { | 841 else { |
837 Logger::println("unsupported initializer: %s", init->toChars()); | 842 Logger::println("unsupported initializer: %s", init->toChars()); |