Mercurial > projects > ldc
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 } |