Mercurial > projects > ddmd
diff dmd/AssocArrayLiteralExp.d @ 90:39648eb578f6
more Expressions work
author | Eldar Insafutdinov <e.insafutdinov@gmail.com> |
---|---|
date | Mon, 30 Aug 2010 20:27:56 +0100 |
parents | be2ab491772e |
children | 6da99741178e |
line wrap: on
line diff
--- a/dmd/AssocArrayLiteralExp.d Mon Aug 30 19:58:14 2010 +0400 +++ b/dmd/AssocArrayLiteralExp.d Mon Aug 30 20:27:56 2010 +0100 @@ -59,14 +59,14 @@ // Run semantic() on each element for (size_t i = 0; i < keys.dim; i++) - { Expression key = cast(Expression)keys.data[i]; - Expression value = cast(Expression)values.data[i]; + { auto key = keys[i]; + auto value = values[i]; key = key.semantic(sc); value = value.semantic(sc); - keys.data[i] = key; - values.data[i] = value; + keys[i] = key; + values[i] = value; } expandTuples(keys); expandTuples(values); @@ -77,8 +77,8 @@ values.setDim(0); } for (size_t i = 0; i < keys.dim; i++) - { Expression key = cast(Expression)keys.data[i]; - Expression value = cast(Expression)values.data[i]; + { auto key = keys[i]; + auto value = values[i]; if (!key.type) error("%s has no value", key.toChars()); @@ -91,13 +91,13 @@ tkey = key.type; else key = key.implicitCastTo(sc, tkey); - keys.data[i] = key; + keys[i] = key; if (!tvalue) tvalue = value.type; else value = value.implicitCastTo(sc, tvalue); - values.data[i] = value; + values[i] = value; } if (!tkey) @@ -125,7 +125,7 @@ e = el_long(TYint, dim); for (size_t i = 0; i < dim; i++) { - Expression el = cast(Expression)keys.data[i]; + auto el = keys[i]; for (int j = 0; j < 2; j++) { @@ -139,13 +139,13 @@ //printf("[%d] %s\n", i, el.toChars()); //elem_print(ep); e = el_param(ep, e); - el = cast(Expression)values.data[i]; + el = values[i]; } } Type t = type.toBasetype().mutableOf(); assert(t.ty == Taarray); - TypeAArray ta = cast(TypeAArray)t; + auto ta = cast(TypeAArray)t; /* Unfortunately, the hash function for Aa (array of chars) is custom and * different from Axa and Aya, which get the generic hash function. @@ -175,8 +175,8 @@ bool f = false; for (size_t i = 0; i < keys.dim; i++) - { Expression key = cast(Expression)keys.data[i]; - Expression value = cast(Expression)values.data[i]; + { auto key = keys[i]; + auto value = values[i]; f |= key.checkSideEffect(2); f |= value.checkSideEffect(2); @@ -190,8 +190,8 @@ { buf.writeByte('['); for (size_t i = 0; i < keys.dim; i++) - { Expression key = cast(Expression)keys.data[i]; - Expression value = cast(Expression)values.data[i]; + { auto key = keys[i]; + auto value = values[i]; if (i) buf.writeByte(','); @@ -207,8 +207,8 @@ size_t dim = keys.dim; buf.printf("A%u", dim); for (size_t i = 0; i < dim; i++) - { Expression key = cast(Expression)keys.data[i]; - Expression value = cast(Expression)values.data[i]; + { auto key = keys[i]; + auto value = values[i]; key.toMangleBuffer(buf); value.toMangleBuffer(buf); @@ -223,16 +223,14 @@ override Expression optimize(int result) { assert(keys.dim == values.dim); - for (size_t i = 0; i < keys.dim; i++) + foreach (size_t i, Expression e; keys) { - Expression e = cast(Expression)keys.data[i]; - e = e.optimize(WANTvalue | (result & WANTinterpret)); - keys.data[i] = e; + keys[i] = e; - e = cast(Expression)values.data[i]; + e = values[i]; e = e.optimize(WANTvalue | (result & WANTinterpret)); - values.data[i] = e; + values[i] = e; } return this; } @@ -247,8 +245,8 @@ } for (size_t i = 0; i < keys.dim; i++) { - Expression ekey = cast(Expression)keys.data[i]; - Expression evalue = cast(Expression)values.data[i]; + auto ekey = keys[i]; + auto evalue = values[i]; Expression ex; ex = ekey.interpret(istate); @@ -261,7 +259,7 @@ { if (keysx == keys) keysx = cast(Expressions)keys.copy(); - keysx.data[i] = ex; + keysx[i] = ex; } ex = evalue.interpret(istate); @@ -274,7 +272,7 @@ { if (valuesx == values) valuesx = values.copy(); - valuesx.data[i] = ex; + valuesx[i] = ex; } } @@ -289,11 +287,11 @@ */ for (size_t i = 1; i < keysx.dim; i++) { - Expression ekey = cast(Expression)keysx.data[i - 1]; + auto ekey = keysx[i - 1]; for (size_t j = i; j < keysx.dim; j++) { - Expression ekey2 = cast(Expression)keysx.data[j]; + auto ekey2 = keysx[j]; Expression ex = Equal(TOKequal, Type.tbool, ekey, ekey2); if (ex is EXP_CANT_INTERPRET) goto Lerr; @@ -339,13 +337,13 @@ { for (size_t i = 0; i < keys.dim; i++) { - Expression e = cast(Expression)keys.data[i]; - MATCH m = cast(MATCH)e.implicitConvTo((cast(TypeAArray)tb).index); + auto e = keys[i]; + auto m = cast(MATCH)e.implicitConvTo((cast(TypeAArray)tb).index); if (m < result) result = m; // remember worst match if (result == MATCHnomatch) break; // no need to check for worse - e = cast(Expression)values.data[i]; + e = values[i]; m = cast(MATCH)e.implicitConvTo(tb.nextOf()); if (m < result) result = m; // remember worst match @@ -373,13 +371,13 @@ assert(keys.dim == values.dim); for (size_t i = 0; i < keys.dim; i++) { - Expression ex = cast(Expression)values.data[i]; + auto ex = values[i]; ex = ex.castTo(sc, tb.nextOf()); - e.values.data[i] = ex; + e.values[i] = ex; - ex = cast(Expression)keys.data[i]; + ex = keys[i]; ex = ex.castTo(sc, (cast(TypeAArray)tb).index); - e.keys.data[i] = ex; + e.keys[i] = ex; } e.type = t; return e;