Mercurial > projects > ddmd
diff dmd/TupleExp.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 | 3482c73a991b |
line wrap: on
line diff
--- 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; }