comparison gen/toir.cpp @ 458:121624c14053

Fixed AA Rvalue-only access (like indexing an AA return value immediately).
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Sat, 02 Aug 2008 22:35:24 +0200
parents 30ef3c7bddca
children 3a5d6ff8c70f
comparison
equal deleted inserted replaced
457:d82ebdba4191 458:121624c14053
1032 DtoArrayBoundsCheck(loc, l, r, false); 1032 DtoArrayBoundsCheck(loc, l, r, false);
1033 arrptr = DtoArrayPtr(l); 1033 arrptr = DtoArrayPtr(l);
1034 arrptr = DtoGEP1(arrptr,r->getRVal()); 1034 arrptr = DtoGEP1(arrptr,r->getRVal());
1035 } 1035 }
1036 else if (e1type->ty == Taarray) { 1036 else if (e1type->ty == Taarray) {
1037 return DtoAAIndex(loc, type, l, r); 1037 return DtoAAIndex(loc, type, l, r, modifiable);
1038 } 1038 }
1039 else { 1039 else {
1040 Logger::println("invalid index exp! e1type: %s", e1type->toChars()); 1040 Logger::println("invalid index exp! e1type: %s", e1type->toChars());
1041 assert(0); 1041 assert(0);
1042 } 1042 }
2253 2253
2254 Logger::println("(%u) aa[%s] = %s", i, ekey->toChars(), eval->toChars()); 2254 Logger::println("(%u) aa[%s] = %s", i, ekey->toChars(), eval->toChars());
2255 2255
2256 // index 2256 // index
2257 DValue* key = ekey->toElem(p); 2257 DValue* key = ekey->toElem(p);
2258 DValue* mem = DtoAAIndex(loc, vtype, aa, key); 2258 DValue* mem = DtoAAIndex(loc, vtype, aa, key, true);
2259 2259
2260 // store 2260 // store
2261 DValue* val = eval->toElem(p); 2261 DValue* val = eval->toElem(p);
2262 DtoAssign(loc, mem, val); 2262 DtoAssign(loc, mem, val);
2263 } 2263 }