comparison dmd/AddAssignExp.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 9e39c7de8438
children e3afd1303184
comparison
equal deleted inserted replaced
129:010eb8f0e18d 130:60bb0fe4563e
5 import dmd.BinExp; 5 import dmd.BinExp;
6 import dmd.Loc; 6 import dmd.Loc;
7 import dmd.Expression; 7 import dmd.Expression;
8 import dmd.Scope; 8 import dmd.Scope;
9 import dmd.InterState; 9 import dmd.InterState;
10 import dmd.Argument; 10 import dmd.Parameter;
11 import dmd.STC; 11 import dmd.STC;
12 import dmd.OutBuffer; 12 import dmd.OutBuffer;
13 import dmd.ArrayTypes; 13 import dmd.ArrayTypes;
14 import dmd.Identifier; 14 import dmd.Identifier;
15 import dmd.IRState; 15 import dmd.IRState;
19 import dmd.AddExp; 19 import dmd.AddExp;
20 import dmd.CastExp; 20 import dmd.CastExp;
21 import dmd.AssignExp; 21 import dmd.AssignExp;
22 import dmd.Global; 22 import dmd.Global;
23 import dmd.Id; 23 import dmd.Id;
24 import dmd.ArrayLengthExp;
24 25
25 import dmd.backend.OPER; 26 import dmd.backend.OPER;
26 import dmd.backend.elem; 27 import dmd.backend.elem;
27 28
28 class AddAssignExp : BinExp 29 class AddAssignExp : BinExp
47 return e; 48 return e;
48 49
49 Type tb1 = e1.type.toBasetype(); 50 Type tb1 = e1.type.toBasetype();
50 Type tb2 = e2.type.toBasetype(); 51 Type tb2 = e2.type.toBasetype();
51 52
53 if (e1.op == TOKarraylength)
54 {
55 e = ArrayLengthExp.rewriteOpAssign(this);
56 e = e.semantic(sc);
57 return e;
58 }
59
52 if (e1.op == TOK.TOKslice) 60 if (e1.op == TOK.TOKslice)
53 { 61 {
54 typeCombine(sc); 62 typeCombine(sc);
55 type = e1.type; 63 type = e1.type;
56 return arrayOp(sc); 64 return arrayOp(sc);
149 override void buildArrayIdent(OutBuffer buf, Expressions arguments) 157 override void buildArrayIdent(OutBuffer buf, Expressions arguments)
150 { 158 {
151 AssignExp_buildArrayIdent(buf, arguments, "Add"); 159 AssignExp_buildArrayIdent(buf, arguments, "Add");
152 } 160 }
153 161
154 override Expression buildArrayLoop(Arguments fparams) 162 override Expression buildArrayLoop(Parameters fparams)
155 { 163 {
156 return AssignExp_buildArrayLoop!(typeof(this))(fparams); 164 return AssignExp_buildArrayLoop!(typeof(this))(fparams);
157 } 165 }
158 166
159 override Identifier opId() /* For operator overloading */ 167 override Identifier opId() /* For operator overloading */