Mercurial > projects > ddmd
comparison dmd/AssocArrayLiteralExp.d @ 84:be2ab491772e
Expressions -> Vector!Expression
author | Eldar Insafutdinov <e.insafutdinov@gmail.com> |
---|---|
date | Mon, 30 Aug 2010 16:12:19 +0100 |
parents | 2e2a5c3f943a |
children | 39648eb578f6 |
comparison
equal
deleted
inserted
replaced
83:ee670dd808a8 | 84:be2ab491772e |
---|---|
63 Expression value = cast(Expression)values.data[i]; | 63 Expression value = cast(Expression)values.data[i]; |
64 | 64 |
65 key = key.semantic(sc); | 65 key = key.semantic(sc); |
66 value = value.semantic(sc); | 66 value = value.semantic(sc); |
67 | 67 |
68 keys.data[i] = cast(void *)key; | 68 keys.data[i] = key; |
69 values.data[i] = cast(void *)value; | 69 values.data[i] = value; |
70 } | 70 } |
71 expandTuples(keys); | 71 expandTuples(keys); |
72 expandTuples(values); | 72 expandTuples(values); |
73 if (keys.dim != values.dim) | 73 if (keys.dim != values.dim) |
74 { | 74 { |
89 | 89 |
90 if (!tkey) | 90 if (!tkey) |
91 tkey = key.type; | 91 tkey = key.type; |
92 else | 92 else |
93 key = key.implicitCastTo(sc, tkey); | 93 key = key.implicitCastTo(sc, tkey); |
94 keys.data[i] = cast(void *)key; | 94 keys.data[i] = key; |
95 | 95 |
96 if (!tvalue) | 96 if (!tvalue) |
97 tvalue = value.type; | 97 tvalue = value.type; |
98 else | 98 else |
99 value = value.implicitCastTo(sc, tvalue); | 99 value = value.implicitCastTo(sc, tvalue); |
100 values.data[i] = cast(void *)value; | 100 values.data[i] = value; |
101 } | 101 } |
102 | 102 |
103 if (!tkey) | 103 if (!tkey) |
104 tkey = Type.tvoid; | 104 tkey = Type.tvoid; |
105 if (!tvalue) | 105 if (!tvalue) |
226 for (size_t i = 0; i < keys.dim; i++) | 226 for (size_t i = 0; i < keys.dim; i++) |
227 { | 227 { |
228 Expression e = cast(Expression)keys.data[i]; | 228 Expression e = cast(Expression)keys.data[i]; |
229 | 229 |
230 e = e.optimize(WANTvalue | (result & WANTinterpret)); | 230 e = e.optimize(WANTvalue | (result & WANTinterpret)); |
231 keys.data[i] = cast(void*)e; | 231 keys.data[i] = e; |
232 | 232 |
233 e = cast(Expression)values.data[i]; | 233 e = cast(Expression)values.data[i]; |
234 e = e.optimize(WANTvalue | (result & WANTinterpret)); | 234 e = e.optimize(WANTvalue | (result & WANTinterpret)); |
235 values.data[i] = cast(void*)e; | 235 values.data[i] = e; |
236 } | 236 } |
237 return this; | 237 return this; |
238 } | 238 } |
239 | 239 |
240 override Expression interpret(InterState istate) | 240 override Expression interpret(InterState istate) |
259 */ | 259 */ |
260 if (ex != ekey) | 260 if (ex != ekey) |
261 { | 261 { |
262 if (keysx == keys) | 262 if (keysx == keys) |
263 keysx = cast(Expressions)keys.copy(); | 263 keysx = cast(Expressions)keys.copy(); |
264 keysx.data[i] = cast(void*)ex; | 264 keysx.data[i] = ex; |
265 } | 265 } |
266 | 266 |
267 ex = evalue.interpret(istate); | 267 ex = evalue.interpret(istate); |
268 if (ex is EXP_CANT_INTERPRET) | 268 if (ex is EXP_CANT_INTERPRET) |
269 goto Lerr; | 269 goto Lerr; |
271 /* If any changes, do Copy On Write | 271 /* If any changes, do Copy On Write |
272 */ | 272 */ |
273 if (ex != evalue) | 273 if (ex != evalue) |
274 { | 274 { |
275 if (valuesx == values) | 275 if (valuesx == values) |
276 valuesx = cast(Expressions)values.copy(); | 276 valuesx = values.copy(); |
277 valuesx.data[i] = cast(void*)ex; | 277 valuesx.data[i] = ex; |
278 } | 278 } |
279 } | 279 } |
280 | 280 |
281 if (keysx != keys) | 281 if (keysx != keys) |
282 expandTuples(keysx); | 282 expandTuples(keysx); |
373 assert(keys.dim == values.dim); | 373 assert(keys.dim == values.dim); |
374 for (size_t i = 0; i < keys.dim; i++) | 374 for (size_t i = 0; i < keys.dim; i++) |
375 { | 375 { |
376 Expression ex = cast(Expression)values.data[i]; | 376 Expression ex = cast(Expression)values.data[i]; |
377 ex = ex.castTo(sc, tb.nextOf()); | 377 ex = ex.castTo(sc, tb.nextOf()); |
378 e.values.data[i] = cast(void*)ex; | 378 e.values.data[i] = ex; |
379 | 379 |
380 ex = cast(Expression)keys.data[i]; | 380 ex = cast(Expression)keys.data[i]; |
381 ex = ex.castTo(sc, (cast(TypeAArray)tb).index); | 381 ex = ex.castTo(sc, (cast(TypeAArray)tb).index); |
382 e.keys.data[i] = cast(void*)ex; | 382 e.keys.data[i] = ex; |
383 } | 383 } |
384 e.type = t; | 384 e.type = t; |
385 return e; | 385 return e; |
386 } | 386 } |
387 L1: | 387 L1: |