Mercurial > projects > ddmd
diff dmd/SliceExp.d @ 130:60bb0fe4563e
dmdfe 2.037 first main iteration
author | Eldar Insafutdinov <e.insafutdinov@gmail.com> |
---|---|
date | Thu, 09 Sep 2010 22:51:44 +0100 |
parents | 1765f3ef917d |
children | af1bebfd96a4 |
line wrap: on
line diff
--- a/dmd/SliceExp.d Sun Sep 05 15:32:22 2010 +0400 +++ b/dmd/SliceExp.d Thu Sep 09 22:51:44 2010 +0100 @@ -31,7 +31,7 @@ import dmd.VarDeclaration; import dmd.ErrorExp; import dmd.TypeExp; -import dmd.Argument; +import dmd.Parameter; import dmd.ExpInitializer; import dmd.IRState; import dmd.InlineDoState; @@ -200,7 +200,7 @@ else if (e1.op == TOKtype) // slicing a type tuple { tup = cast(TypeTuple)t; - length = Argument.dim(tup.arguments); + length = Parameter.dim(tup.arguments); } else assert(0); @@ -223,11 +223,11 @@ } else { - auto args = new Arguments; + auto args = new Parameters; args.reserve(j2 - j1); for (size_t i = j1; i < j2; i++) { - auto arg = Argument.getNth(tup.arguments, i); + auto arg = Parameter.getNth(tup.arguments, i); args.push(arg); } e = new TypeExp(e1.loc, new TypeTuple(args)); @@ -379,36 +379,26 @@ override elem* toElem(IRState* irs) { - elem* e; - Type t1; - //printf("SliceExp.toElem()\n"); - t1 = e1.type.toBasetype(); - e = e1.toElem(irs); + auto t1 = e1.type.toBasetype(); + auto e = e1.toElem(irs); if (lwr) { - elem* elwr; - elem* elwr2; - elem* eupr; - elem* eptr; - elem* einit; - int sz; + auto einit = resolveLengthVar(lengthVar, &e, t1); + + int sz = cast(uint)t1.nextOf().size(); - einit = resolveLengthVar(lengthVar, &e, t1); - - sz = cast(uint)t1.nextOf().size(); + auto elwr = lwr.toElem(irs); + auto eupr = upr.toElem(irs); - elwr = lwr.toElem(irs); - eupr = upr.toElem(irs); - - elwr2 = el_same(&elwr); + auto elwr2 = el_same(&elwr); // Create an array reference where: // length is (upr - lwr) // pointer is (ptr + lwr*sz) // Combine as (length pair ptr) - if (global.params.useArrayBounds) + if (irs.arrayBoundsCheck()) { // Checks (unsigned compares): // upr <= array.length @@ -470,7 +460,7 @@ } } - eptr = array_toPtr(e1.type, e); + auto eptr = array_toPtr(e1.type, e); elem *elength = el_bin(OPmin, TYint, eupr, elwr2); eptr = el_bin(OPadd, TYnptr, eptr, el_bin(OPmul, TYint, el_copytree(elwr2), el_long(TYint, sz))); @@ -509,10 +499,10 @@ arguments.shift(this); } - override Expression buildArrayLoop(Arguments fparams) + override Expression buildArrayLoop(Parameters fparams) { Identifier id = Identifier.generateId("p", fparams.dim); - auto param = new Argument(STCconst, type, id, null); + auto param = new Parameter(STCconst, type, id, null); fparams.shift(param); Expression e = new IdentifierExp(Loc(0), id); Expressions arguments = new Expressions();