Mercurial > projects > ddmd
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 */ |