Mercurial > projects > ddmd
diff dmd/AssignExp.d @ 12:832f71e6f96c
*Exp and *AssignExp arrayOp implementation added (might be a bit incomplete)
Some unittest-specific functions implemented
author | korDen |
---|---|
date | Mon, 12 Apr 2010 15:13:00 +0400 |
parents | 10317f0c89a5 |
children | cab4c37afb89 |
line wrap: on
line diff
--- a/dmd/AssignExp.d Wed Mar 31 16:29:36 2010 +0400 +++ b/dmd/AssignExp.d Mon Apr 12 15:13:00 2010 +0400 @@ -4,8 +4,10 @@ import dmd.Identifier; import dmd.backend.elem; import dmd.InterState; +import dmd.Argument; import dmd.IndexExp; import dmd.CallExp; +import dmd.CastExp; import dmd.TypeSArray; import dmd.StructLiteralExp; import dmd.ArrayLengthExp; @@ -379,12 +381,31 @@ void buildArrayIdent(OutBuffer buf, Expressions arguments) { - assert(false); + /* Evaluate assign expressions right to left + */ + e2.buildArrayIdent(buf, arguments); + e1.buildArrayIdent(buf, arguments); + buf.writestring("Assign"); } Expression buildArrayLoop(Arguments fparams) { - assert(false); + /* Evaluate assign expressions right to left + */ + Expression ex2 = e2.buildArrayLoop(fparams); + version (DMDV2) { + /* Need the cast because: + * b = c + p[i]; + * where b is a byte fails because (c + p[i]) is an int + * which cannot be implicitly cast to byte. + */ + ex2 = new CastExp(Loc(0), ex2, e1.type.nextOf()); + } + Expression ex1 = e1.buildArrayLoop(fparams); + Argument param = cast(Argument)fparams.data[0]; + param.storageClass = STCundefined; + Expression e = new AssignExp(Loc(0), ex1, ex2); + return e; } elem* toElem(IRState* irs)