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: