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());