# HG changeset patch # User Eldar Insafutdinov # Date 1283196476 -3600 # Node ID 39648eb578f63e946ee9ba87cbfb328ddf7dfa24 # Parent 23280d154c5b8eb14a11cf68a5ffdd5d65ed05b4 more Expressions work diff -r 23280d154c5b -r 39648eb578f6 dmd/Array.d --- a/dmd/Array.d Mon Aug 30 19:58:14 2010 +0400 +++ b/dmd/Array.d Mon Aug 30 20:27:56 2010 +0100 @@ -210,6 +210,13 @@ return _data; } + + + @property T *ptr() + { + return _data; + } + @property final size_t allocdim() { return _allocdim; diff -r 23280d154c5b -r 39648eb578f6 dmd/ArrayExp.d --- a/dmd/ArrayExp.d Mon Aug 30 19:58:14 2010 +0400 +++ b/dmd/ArrayExp.d Mon Aug 30 20:27:56 2010 +0100 @@ -51,7 +51,7 @@ // Convert to IndexExp if (arguments.dim != 1) error("only one index allowed to index %s", t1.toChars()); - e = new IndexExp(loc, e1, cast(Expression)arguments.data[0]); + e = new IndexExp(loc, e1, arguments[0]); return e.semantic(sc); } diff -r 23280d154c5b -r 39648eb578f6 dmd/ArrayInitializer.d --- a/dmd/ArrayInitializer.d Mon Aug 30 19:58:14 2010 +0400 +++ b/dmd/ArrayInitializer.d Mon Aug 30 20:27:56 2010 +0100 @@ -129,7 +129,7 @@ type = Type.terror; for (size_t i = 0; i < value.dim; i++) { - if (index.data[i]) + if (index[i]) goto Laa; } @@ -153,7 +153,7 @@ /* It's possibly an associative array initializer */ Initializer iz = cast(Initializer)value.data[0]; - Expression indexinit = cast(Expression)index.data[0]; + Expression indexinit = index[0]; if (iz && indexinit) { Type t = iz.inferType(sc); @@ -206,19 +206,19 @@ edim = value.dim; for (size_t i = 0, j = 0; i < value.dim; i++, j++) { - if (index.data[i]) - j = cast(uint)(cast(Expression)index.data[i]).toInteger(); + if (index[i]) + j = cast(uint)(index[i].toInteger()); if (j >= edim) edim = j + 1; } } - Expressions elements = new Expressions(); + auto elements = new Expressions(); elements.setDim(edim); for (size_t i = 0, j = 0; i < value.dim; i++, j++) { - if (index.data[i]) - j = cast(uint)(cast(Expression)index.data[i]).toInteger(); + if (index[i]) + j = cast(uint)(index[i].toInteger()); assert(j < edim); Initializer iz = cast(Initializer)value.data[i]; if (!iz) @@ -237,7 +237,7 @@ Expression init = null; for (size_t i = 0; i < edim; i++) { - if (!elements.data[i]) + if (!elements[i]) { if (!type) goto Lno; @@ -292,7 +292,7 @@ Expression idx; Initializer val; - idx = cast(Expression)index.data[i]; + idx = index[i]; if (idx) length = cast(uint)idx.toInteger(); //printf("\tindex[%d] = %p, length = %u, dim = %u\n", i, idx, length, dim); diff -r 23280d154c5b -r 39648eb578f6 dmd/ArrayLiteralExp.d --- a/dmd/ArrayLiteralExp.d Mon Aug 30 19:58:14 2010 +0400 +++ b/dmd/ArrayLiteralExp.d Mon Aug 30 20:27:56 2010 +0100 @@ -66,20 +66,16 @@ return this; // Run semantic() on each element - for (int i = 0; i < elements.dim; i++) + foreach (ref Expression e; elements) { - e = elements.data[i]; e = e.semantic(sc); assert(e.type); - elements[i] = e; } expandTuples(elements); - for (int i = 0; i < elements.dim; i++) + foreach (size_t i, Expression e; elements) { - e = cast(Expression)elements.data[i]; - if (!e.type) error("%s has no value", e.toChars()); @@ -104,10 +100,10 @@ if (!committed && e.op == TOKstring) { - StringExp se = cast(StringExp)e; + auto se = cast(StringExp)e; se.committed = 0; } - elements.data[i] = e; + elements[i] = e; } if (!t0) @@ -193,9 +189,8 @@ { bool f = false; - for (size_t i = 0; i < elements.dim; i++) + foreach (e; elements) { - Expression e = cast(Expression)elements.data[i]; f |= e.checkSideEffect(2); } if (flag == 0 && f == false) @@ -217,7 +212,7 @@ buf.printf("A%u", dim); for (size_t i = 0; i < dim; i++) { - Expression e = cast(Expression)elements.data[i]; + auto e = elements[i]; e.toMangleBuffer(buf); } } @@ -265,10 +260,9 @@ result = MATCHnomatch; } - for (int i = 0; i < elements.dim; i++) + foreach (e; elements) { - Expression e = cast(Expression)elements.data[i]; - MATCH m = cast(MATCH)e.implicitConvTo(tb.nextOf()); + auto m = cast(MATCH)e.implicitConvTo(tb.nextOf()); if (m < result) result = m; // remember worst match if (result == MATCHnomatch) @@ -334,10 +328,8 @@ d = null; pdtend = &d; - for (int i = 0; i < elements.dim; i++) + foreach (e; elements) { - Expression e = cast(Expression)elements.data[i]; - pdtend = e.toDt(pdtend); } Type t = type.toBasetype(); diff -r 23280d154c5b -r 39648eb578f6 dmd/AssignExp.d --- a/dmd/AssignExp.d Mon Aug 30 19:58:14 2010 +0400 +++ b/dmd/AssignExp.d Mon Aug 30 20:27:56 2010 +0100 @@ -124,7 +124,7 @@ if (1 || !global.params.useDeprecated) error("operator [] assignment overload with opIndex(i, value) illegal, use opIndexAssign(value, i)"); - e = new CallExp(loc, e, cast(Expression)ae.arguments.data[0], e2); + e = new CallExp(loc, e, ae.arguments[0], e2); e = e.semantic(sc); return e; } diff -r 23280d154c5b -r 39648eb578f6 dmd/AssocArrayLiteralExp.d --- 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; diff -r 23280d154c5b -r 39648eb578f6 dmd/BinExp.d --- a/dmd/BinExp.d Mon Aug 30 19:58:14 2010 +0400 +++ b/dmd/BinExp.d Mon Aug 30 20:27:56 2010 +0100 @@ -1141,13 +1141,13 @@ return EXP_CANT_INTERPRET; } // Get old element - Expression vie = cast(Expression)(ae.elements.data[elemi]); + auto vie = ae.elements[elemi]; if (vie.op != TOKstructliteral) return EXP_CANT_INTERPRET; // Work out which field needs to be changed - StructLiteralExp se = cast(StructLiteralExp)vie; - VarDeclaration vf = (cast(DotVarExp)e1).var.isVarDeclaration(); + auto se = cast(StructLiteralExp)vie; + auto vf = (cast(DotVarExp)e1).var.isVarDeclaration(); if (!vf) return EXP_CANT_INTERPRET; diff -r 23280d154c5b -r 39648eb578f6 dmd/CallExp.d --- a/dmd/CallExp.d Mon Aug 30 19:58:14 2010 +0400 +++ b/dmd/CallExp.d Mon Aug 30 20:27:56 2010 +0100 @@ -108,8 +108,8 @@ auto arguments = new Expressions(); arguments.setDim(2); - arguments.data[0] = earg1; - arguments.data[1] = earg2; + arguments[0] = earg1; + arguments[1] = earg2; this.arguments = arguments; } @@ -174,12 +174,12 @@ error("expected key as argument to aa.remove()"); goto Lagain; } - Expression key = cast(Expression)arguments.data[0]; + auto key = arguments[0]; key = key.semantic(sc); key = resolveProperties(sc, key); key.rvalue(); - TypeAArray taa = cast(TypeAArray)dotid.e1.type.toBasetype(); + auto taa = cast(TypeAArray)dotid.e1.type.toBasetype(); key = key.implicitCastTo(sc, taa.index); return new RemoveExp(loc, dotid.e1, key); @@ -874,7 +874,7 @@ // Inline .dup if (fd.ident == Id.adDup && arguments && arguments.dim == 2) { - e = cast(Expression)arguments.data[1]; + e = arguments[1]; e = e.interpret(istate); if (e !is EXP_CANT_INTERPRET) { @@ -907,10 +907,8 @@ /* If any of the arguments have side effects, this expression does */ - for (size_t i = 0; i < arguments.dim; i++) + foreach (e; arguments) { - Expression e = cast(Expression)arguments.data[i]; - if (e.checkSideEffect(2)) return true; } @@ -990,7 +988,7 @@ if (fd && fd.ident == Id.alloca && !fd.fbody && fd.linkage == LINK.LINKc && arguments && arguments.dim == 1) { - Expression arg = cast(Expression)arguments.data[0]; + auto arg = arguments[0]; arg = arg.optimize(WANT.WANTvalue); if (arg.isConst() && arg.type.isintegral()) { @@ -1060,10 +1058,8 @@ /* If any of the arguments can throw, then this expression can throw */ - for (size_t i = 0; i < arguments.dim; i++) + foreach (e; arguments) { - Expression e = cast(Expression)arguments.data[i]; - if (e && e.canThrow()) return true; } diff -r 23280d154c5b -r 39648eb578f6 dmd/DotIdExp.d --- a/dmd/DotIdExp.d Mon Aug 30 19:58:14 2010 +0400 +++ b/dmd/DotIdExp.d Mon Aug 30 20:27:56 2010 +0100 @@ -146,10 +146,10 @@ exps.setDim(te.exps.dim); for (int i = 0; i < exps.dim; i++) { - Expression ee = cast(Expression)te.exps.data[i]; + auto ee = te.exps[i]; ee = ee.semantic(sc); ee = new DotIdExp(e.loc, ee, Id.offsetof); - exps.data[i] = ee; + exps[i] = ee; } e = new TupleExp(loc, exps); e = e.semantic(sc); diff -r 23280d154c5b -r 39648eb578f6 dmd/ForeachStatement.d --- a/dmd/ForeachStatement.d Mon Aug 30 19:58:14 2010 +0400 +++ b/dmd/ForeachStatement.d Mon Aug 30 20:27:56 2010 +0100 @@ -175,7 +175,7 @@ Expression e; Type t; if (te) - e = cast(Expression)te.exps.data[k]; + e = te.exps[k]; else t = Argument.getNth(tuple.arguments, k).type; diff -r 23280d154c5b -r 39648eb578f6 dmd/FuncDeclaration.d --- a/dmd/FuncDeclaration.d Mon Aug 30 19:58:14 2010 +0400 +++ b/dmd/FuncDeclaration.d Mon Aug 30 20:27:56 2010 +0100 @@ -2369,7 +2369,7 @@ for (size_t i = 0; i < dim; i++) { - Expression earg = cast(Expression)arguments.data[i]; + Expression earg = arguments[i]; Argument arg = Argument.getNth(tf.parameters, i); if (arg.storageClass & (STCout | STCref)) @@ -2529,7 +2529,7 @@ for (size_t i = 0; i < dim; i++) { auto v = cast(VarDeclaration)parameters[i]; - v.value = cast(Expression)vsave.data[i]; + v.value = vsave[i]; } if (istate && !isNested()) @@ -2541,7 +2541,7 @@ { if (auto v = cast(VarDeclaration)s3) { - v.value = cast(Expression)valueSaves.data[i]; + v.value = valueSaves[i]; //printf("\trestoring [%d] %s = %s\n", i, v.toChars(), v.value ? v.value.toChars() : ""); } } @@ -2778,7 +2778,7 @@ { auto vfrom = cast(VarDeclaration)parameters[i]; VarDeclaration vto; - Expression arg = cast(Expression)arguments.data[i]; + Expression arg = arguments[i]; ExpInitializer ei; VarExp ve; diff -r 23280d154c5b -r 39648eb578f6 dmd/InlineDoState.d --- a/dmd/InlineDoState.d Mon Aug 30 19:58:14 2010 +0400 +++ b/dmd/InlineDoState.d Mon Aug 30 20:27:56 2010 +0100 @@ -33,10 +33,8 @@ newa = new Expressions(); newa.setDim(a.dim); - for (int i = 0; i < a.dim; i++) + foreach (size_t i, Expression e; a) { - Expression e = cast(Expression)a.data[i]; - if (e) { e = e.doInline(ids); diff -r 23280d154c5b -r 39648eb578f6 dmd/NewExp.d --- a/dmd/NewExp.d Mon Aug 30 19:58:14 2010 +0400 +++ b/dmd/NewExp.d Mon Aug 30 20:27:56 2010 +0100 @@ -347,7 +347,7 @@ break; } - Expression arg = cast(Expression)arguments.data[j]; + auto arg = arguments[j]; arg = resolveProperties(sc, arg); arg = arg.implicitCastTo(sc, Type.tsize_t); arg = arg.optimize(WANTvalue); @@ -384,23 +384,17 @@ // Optimize parameters if (newargs) { - for (size_t i = 0; i < newargs.dim; i++) + foreach (ref Expression e; newargs) { - Expression e = cast(Expression)newargs.data[i]; - e = e.optimize(WANTvalue); - newargs[i] = e; } } if (arguments) { - for (size_t i = 0; i < arguments.dim; i++) + foreach (ref Expression e; arguments) { - Expression e = cast(Expression)arguments.data[i]; - e = e.optimize(WANTvalue); - arguments[i] = e; } } return this; @@ -668,7 +662,7 @@ if (arguments.dim == 1) { // Single dimension array allocations - Expression arg = cast(Expression)arguments.data[0]; // gives array length + auto arg = arguments[0]; // gives array length e = arg.toElem(irs); ulong elemsize = tda.next.size(); @@ -681,9 +675,8 @@ { // Multidimensional array allocations e = el_long(TYint, arguments.dim); - for (size_t i = 0; i < arguments.dim; i++) + foreach (Expression arg; arguments) { - Expression arg = cast(Expression)arguments.data[i]; // gives array length e = el_param(arg.toElem(irs), e); assert(t.ty == Tarray); t = t.nextOf(); diff -r 23280d154c5b -r 39648eb578f6 dmd/PragmaDeclaration.d --- a/dmd/PragmaDeclaration.d Mon Aug 30 19:58:14 2010 +0400 +++ b/dmd/PragmaDeclaration.d Mon Aug 30 20:27:56 2010 +0100 @@ -53,15 +53,13 @@ { if (args) { - for (size_t i = 0; i < args.dim; i++) + foreach (e; args) { - Expression e = cast(Expression)args.data[i]; - e = e.semantic(sc); e = e.optimize(WANTvalue | WANTinterpret); if (e.op == TOKstring) { - StringExp se = cast(StringExp)e; + auto se = cast(StringExp)e; writef("%s", se.toChars()[1..$-3] /*se.len, cast(char*)se.string_*/); } else @@ -158,9 +156,8 @@ writef("pragma %s", ident.toChars()); if (args) { - for (size_t i = 0; i < args.dim; i++) + foreach (size_t i, Expression e; args) { - Expression e = cast(Expression)args.data[i]; e = e.semantic(sc); e = e.optimize(WANTvalue | WANTinterpret); if (i == 0) @@ -245,11 +242,11 @@ { assert(args && args.dim == 1); - Expression e = cast(Expression)args.data[0]; + auto e = args[0]; assert(e.op == TOKstring); - StringExp se = cast(StringExp)e; + auto se = cast(StringExp)e; char* name = cast(char*)GC.malloc(se.len + 1); memcpy(name, se.string_, se.len); name[se.len] = 0; @@ -273,7 +270,7 @@ else if (ident == Id.startaddress) { assert(args && args.dim == 1); - Expression e = cast(Expression)args.data[0]; + auto e = args[0]; Dsymbol sa = getDsymbol(e); FuncDeclaration f = sa.isFuncDeclaration(); assert(f); diff -r 23280d154c5b -r 39648eb578f6 dmd/StructLiteralExp.d --- a/dmd/StructLiteralExp.d Mon Aug 30 19:58:14 2010 +0400 +++ b/dmd/StructLiteralExp.d Mon Aug 30 20:27:56 2010 +0100 @@ -165,7 +165,7 @@ { //printf("\ti = %d\n", i); assert(i < elements.dim); - e = cast(Expression)elements.data[i]; + e = elements[i]; if (e) { //writef("e = %s, e.type = %s\n", e.toChars(), e.type.toChars()); @@ -180,7 +180,7 @@ Expressions z = new Expressions; z.setDim(length); for (int q = 0; q < length; ++q) - z.data[q] = e.copy(); + z[q] = e.copy(); e = new ArrayLiteralExp(loc, z); e.type = type; } @@ -206,7 +206,7 @@ if (offset == v.offset && type.size() == v.type.size()) { - Expression e = cast(Expression)elements.data[i]; + auto e = elements[i]; if (e) { return i; @@ -386,9 +386,8 @@ { bool f = 0; - for (size_t i = 0; i < elements.dim; i++) + foreach (e; elements) { - Expression e = cast(Expression)elements.data[i]; if (!e) continue; @@ -413,7 +412,7 @@ buf.printf("S%u", dim); for (size_t i = 0; i < dim; i++) { - Expression e = cast(Expression)elements.data[i]; + auto e = elements[i]; if (e) e.toMangleBuffer(buf); else diff -r 23280d154c5b -r 39648eb578f6 dmd/TemplateDeclaration.d --- a/dmd/TemplateDeclaration.d Mon Aug 30 19:58:14 2010 +0400 +++ b/dmd/TemplateDeclaration.d Mon Aug 30 20:27:56 2010 +0100 @@ -822,7 +822,7 @@ t.objects.setDim(tuple_dim); for (size_t i = 0; i < tuple_dim; i++) { - Expression farg = cast(Expression)fargs.data[fptupindex + i]; + auto farg = fargs[fptupindex + i]; t.objects.data[i] = cast(void*)farg.type; } declareParameter(paramscope, tp, t); @@ -893,7 +893,7 @@ } else { - Expression farg = cast(Expression)fargs.data[i]; + auto farg = fargs[i]; static if (false) { printf("\tfarg.type = %s\n", farg.type.toChars()); printf("\tfparam.type = %s\n", fparam.type.toChars()); @@ -968,7 +968,7 @@ TypeArray ta = cast(TypeArray)tb; for (; i < nfargs; i++) { - Expression arg = cast(Expression)fargs.data[i]; + auto arg = fargs[i]; assert(arg); MATCH m; /* If lazy array of delegates, diff -r 23280d154c5b -r 39648eb578f6 dmd/TemplateInstance.d --- a/dmd/TemplateInstance.d Mon Aug 30 19:58:14 2010 +0400 +++ b/dmd/TemplateInstance.d Mon Aug 30 20:27:56 2010 +0100 @@ -912,7 +912,7 @@ if (ea.op == TOKtuple) { // Expand tuple - TupleExp te = cast(TupleExp)ea; + auto te = cast(TupleExp)ea; size_t dim = te.exps.dim; tiargs.remove(j); if (dim) diff -r 23280d154c5b -r 39648eb578f6 dmd/TraitsExp.d --- a/dmd/TraitsExp.d Mon Aug 30 19:58:14 2010 +0400 +++ b/dmd/TraitsExp.d Mon Aug 30 20:27:56 2010 +0100 @@ -309,7 +309,7 @@ /* Skip if already present in exps[] */ for (size_t j = 0; j < exps.dim; j++) - { StringExp se2 = cast(StringExp)exps.data[j]; + { auto se2 = cast(StringExp)exps[j]; if (strcmp(toStringz(str), cast(char*)se2.string_) == 0) goto Lnext; } diff -r 23280d154c5b -r 39648eb578f6 dmd/TupleExp.d --- a/dmd/TupleExp.d Mon Aug 30 19:58:14 2010 +0400 +++ b/dmd/TupleExp.d Mon Aug 30 20:27:56 2010 +0100 @@ -126,12 +126,12 @@ return 1; if ((cast(Expression)o).op == TOKtuple) { - TupleExp te = cast(TupleExp)o; + auto te = cast(TupleExp)o; if (exps.dim != te.exps.dim) return 0; for (size_t i = 0; i < exps.dim; i++) - { Expression e1 = cast(Expression)exps.data[i]; - Expression e2 = cast(Expression)te.exps.data[i]; + { auto e1 = exps[i]; + auto e2 = te.exps[i]; if (!e1.equals(e2)) return 0; @@ -150,21 +150,19 @@ return this; // Run semantic() on each argument - for (size_t i = 0; i < exps.dim; i++) - { Expression e = cast(Expression)exps.data[i]; - + foreach (ref Expression e; exps) + { e = e.semantic(sc); if (!e.type) { error("%s has no value", e.toChars()); e.type = Type.terror; } - exps[i] = e; } expandTuples(exps); if (0 && exps.dim == 1) { - return cast(Expression)exps.data[0]; + return exps[0]; } type = new TypeTuple(exps); type = type.semantic(loc, sc); @@ -186,8 +184,8 @@ override void checkEscape() { - for (size_t i = 0; i < exps.dim; i++) - { Expression e = cast(Expression)exps.data[i]; + foreach(e; exps) + { e.checkEscape(); } } @@ -196,9 +194,8 @@ { bool f = false; - for (int i = 0; i < exps.dim; i++) - { Expression e = cast(Expression)exps.data[i]; - + foreach(e; exps) + { f |= e.checkSideEffect(2); } if (flag == 0 && f == 0) @@ -208,12 +205,9 @@ override Expression optimize(int result) { - for (size_t i = 0; i < exps.dim; i++) + foreach(ref Expression e; exps) { - Expression e = cast(Expression)exps.data[i]; - e = e.optimize(WANTvalue | (result & WANTinterpret)); - exps[i] = e; } return this; } diff -r 23280d154c5b -r 39648eb578f6 dmd/expression/Index.d --- a/dmd/expression/Index.d Mon Aug 30 19:58:14 2010 +0400 +++ b/dmd/expression/Index.d Mon Aug 30 20:27:56 2010 +0100 @@ -48,8 +48,8 @@ } else if (e1.op == TOKarrayliteral && !e1.checkSideEffect(2)) { - ArrayLiteralExp ale = cast(ArrayLiteralExp)e1; - e = cast(Expression)ale.elements.data[cast(uint)i]; + auto ale = cast(ArrayLiteralExp)e1; + e = ale.elements[cast(uint)i]; e.type = type; } } @@ -59,14 +59,14 @@ if (e1.op == TOKarrayliteral && !e1.checkSideEffect(2)) { - ArrayLiteralExp ale = cast(ArrayLiteralExp)e1; + auto ale = cast(ArrayLiteralExp)e1; if (i >= ale.elements.dim) { e2.error("array index %ju is out of bounds %s[0 .. %u]", i, e1.toChars(), ale.elements.dim); } else { - e = cast(Expression)ale.elements.data[cast(uint)i]; + e = ale.elements[cast(uint)i]; e.type = type; } } @@ -79,13 +79,13 @@ for (size_t i = ae.keys.dim; i;) { i--; - Expression ekey = cast(Expression)ae.keys.data[i]; + auto ekey = ae.keys[i]; Expression ex = Equal(TOKequal, Type.tbool, ekey, e2); if (ex is EXP_CANT_INTERPRET) return ex; if (ex.isBool(true)) { - e = cast(Expression)ae.values.data[i]; + e = ae.values[i]; e.type = type; break; } diff -r 23280d154c5b -r 39648eb578f6 dmd/expression/Slice.d --- a/dmd/expression/Slice.d Mon Aug 30 19:58:14 2010 +0400 +++ b/dmd/expression/Slice.d Mon Aug 30 20:27:56 2010 +0100 @@ -72,9 +72,9 @@ { auto elements = new Expressions(); elements.setDim(cast(uint)(iupr - ilwr)); - memcpy(elements.data, - es1.elements.data + ilwr, - cast(uint)(iupr - ilwr) * (*es1.elements.data).sizeof); + memcpy(elements.ptr, + es1.elements.ptr + ilwr, + cast(uint)(iupr - ilwr) * (*es1.elements.ptr).sizeof); e = new ArrayLiteralExp(e1.loc, elements); e.type = type; }