Mercurial > projects > ldc
comparison gen/statements.cpp @ 109:5ab8e92611f9 trunk
[svn r113] Added initial support for associative arrays (AAs).
Fixed some problems with the string runtime support functions.
Fixed initialization of array of structs.
Fixed slice assignment where LHS is slice but RHS is dynamic array.
Fixed problems with result of assignment expressions.
Fixed foreach problems with key type mismatches.
author | lindquist |
---|---|
date | Wed, 21 Nov 2007 04:13:15 +0100 |
parents | 288fe1029e1f |
children | 9c79b61fb638 |
comparison
equal
deleted
inserted
replaced
108:288fe1029e1f | 109:5ab8e92611f9 |
---|---|
126 { | 126 { |
127 static int esi = 0; | 127 static int esi = 0; |
128 Logger::println("ExpStatement::toIR(%d): %s", esi++, toChars()); | 128 Logger::println("ExpStatement::toIR(%d): %s", esi++, toChars()); |
129 LOG_SCOPE; | 129 LOG_SCOPE; |
130 | 130 |
131 // if (global.params.symdebug) | 131 if (global.params.symdebug) |
132 // DtoDwarfStopPoint(loc.linnum); | 132 DtoDwarfStopPoint(loc.linnum); |
133 | 133 |
134 if (exp != 0) { | 134 if (exp != 0) { |
135 elem* e = exp->toElem(p); | 135 elem* e = exp->toElem(p); |
136 delete e; | 136 delete e; |
137 } | 137 } |
727 } | 727 } |
728 } | 728 } |
729 else | 729 else |
730 { | 730 { |
731 assert(0 && "aggregate type is not Tarray or Tsarray"); | 731 assert(0 && "aggregate type is not Tarray or Tsarray"); |
732 } | |
733 | |
734 if (niters->getType() != keytype) | |
735 { | |
736 size_t sz1 = gTargetData->getTypeSize(niters->getType()); | |
737 size_t sz2 = gTargetData->getTypeSize(keytype); | |
738 if (sz1 < sz2) | |
739 niters = gIR->ir->CreateZExt(niters, keytype, "foreachtrunckey"); | |
740 else if (sz1 > sz2) | |
741 niters = gIR->ir->CreateTrunc(niters, keytype, "foreachtrunckey"); | |
742 else | |
743 niters = gIR->ir->CreateBitCast(niters, keytype, "foreachtrunckey"); | |
732 } | 744 } |
733 | 745 |
734 llvm::Constant* delta = 0; | 746 llvm::Constant* delta = 0; |
735 if (op == TOKforeach) { | 747 if (op == TOKforeach) { |
736 new llvm::StoreInst(zerokey, keyvar, p->scopebb()); | 748 new llvm::StoreInst(zerokey, keyvar, p->scopebb()); |