annotate dmd/AssocArrayLiteralExp.d @ 178:e3afd1303184

Many small bugs fixed Made all classes derive from TObject to detect memory leaks (functionality is disabled for now) Began work on overriding backend memory allocations (to avoid memory leaks)
author korDen
date Sun, 17 Oct 2010 07:42:00 +0400
parents 60bb0fe4563e
children b0d41ff5e0df
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
1 module dmd.AssocArrayLiteralExp;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
2
114
e28b18c23469 added a module dmd.common for commonly used stuff
Trass3r
parents: 109
diff changeset
3 import dmd.common;
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
4 import dmd.Expression;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
5 import dmd.GlobalExpressions;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
6 import dmd.WANT;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
7 import dmd.expression.Equal;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
8 import dmd.backend.elem;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
9 import dmd.InterState;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
10 import dmd.MATCH;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
11 import dmd.Type;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
12 import dmd.TypeAArray;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
13 import dmd.OutBuffer;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
14 import dmd.Loc;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
15 import dmd.Scope;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
16 import dmd.InlineCostState;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
17 import dmd.IRState;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
18 import dmd.TY;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
19 import dmd.InlineDoState;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
20 import dmd.HdrGenState;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
21 import dmd.InlineScanState;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
22 import dmd.ArrayTypes;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
23 import dmd.TOK;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
24 import dmd.PREC;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
25 import dmd.expression.Util;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
26 import dmd.backend.Util;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
27 import dmd.backend.TYM;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
28 import dmd.backend.mTY;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
29 import dmd.backend.OPER;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
30 import dmd.backend.RTLSYM;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
31
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
32 class AssocArrayLiteralExp : Expression
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
33 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
34 Expressions keys;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
35 Expressions values;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
36
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
37 this(Loc loc, Expressions keys, Expressions values)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
38 {
178
e3afd1303184 Many small bugs fixed
korDen
parents: 130
diff changeset
39 register();
e3afd1303184 Many small bugs fixed
korDen
parents: 130
diff changeset
40
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
41 super(loc, TOK.TOKassocarrayliteral, this.sizeof);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
42 assert(keys.dim == values.dim);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
43 this.keys = keys;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
44 this.values = values;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
45 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
46
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
47 override Expression syntaxCopy()
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
48 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
49 return new AssocArrayLiteralExp(loc,
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
50 arraySyntaxCopy(keys), arraySyntaxCopy(values));
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
51 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
52
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
53 override Expression semantic(Scope sc)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
54 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
55 Expression e;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
56
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
57 version (LOGSEMANTIC) {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
58 printf("AssocArrayLiteralExp.semantic('%s')\n", toChars());
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
59 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
60
109
ceda59b4d255 expression.c changes, now only ddoc should be left
Trass3r
parents: 108
diff changeset
61 if (type)
ceda59b4d255 expression.c changes, now only ddoc should be left
Trass3r
parents: 108
diff changeset
62 return this;
ceda59b4d255 expression.c changes, now only ddoc should be left
Trass3r
parents: 108
diff changeset
63
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
64 // Run semantic() on each element
130
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 114
diff changeset
65 arrayExpressionSemantic(keys, sc);
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 114
diff changeset
66 arrayExpressionSemantic(values, sc);
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
67 expandTuples(keys);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
68 expandTuples(values);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
69 if (keys.dim != values.dim)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
70 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
71 error("number of keys is %u, must match number of values %u", keys.dim, values.dim);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
72 keys.setDim(0);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
73 values.setDim(0);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
74 }
130
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 114
diff changeset
75
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 114
diff changeset
76 Type tkey;
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 114
diff changeset
77 Type tvalue;
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 114
diff changeset
78 keys = arrayExpressionToCommonType(sc, keys, &tkey);
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 114
diff changeset
79 values = arrayExpressionToCommonType(sc, values, &tvalue);
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 114
diff changeset
80
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
81 type = new TypeAArray(tvalue, tkey);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
82 type = type.semantic(loc, sc);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
83 return this;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
84 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
85
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
86 override bool isBool(bool result)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
87 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
88 size_t dim = keys.dim;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
89 return result ? (dim != 0) : (dim == 0);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
90 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
91
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
92 override elem* toElem(IRState* irs)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
93 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
94 elem* e;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
95 size_t dim;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
96
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
97 //printf("AssocArrayLiteralExp.toElem() %s\n", toChars());
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
98 dim = keys.dim;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
99 e = el_long(TYint, dim);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
100 for (size_t i = 0; i < dim; i++)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
101 {
90
39648eb578f6 more Expressions work
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 84
diff changeset
102 auto el = keys[i];
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
103
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
104 for (int j = 0; j < 2; j++)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
105 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
106 elem* ep = el.toElem(irs);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
107
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
108 if (tybasic(ep.Ety) == TYstruct || tybasic(ep.Ety) == TYarray)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
109 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
110 ep = el_una(OPstrpar, TYstruct, ep);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
111 ep.Enumbytes = cast(uint)el.type.size();
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
112 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
113 //printf("[%d] %s\n", i, el.toChars());
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
114 //elem_print(ep);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
115 e = el_param(ep, e);
90
39648eb578f6 more Expressions work
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 84
diff changeset
116 el = values[i];
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
117 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
118 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
119
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
120 Type t = type.toBasetype().mutableOf();
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
121 assert(t.ty == Taarray);
90
39648eb578f6 more Expressions work
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 84
diff changeset
122 auto ta = cast(TypeAArray)t;
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
123
108
6da99741178e e2ir.c changes, mainly accounts for static arrays being value types now
Trass3r
parents: 90
diff changeset
124 static if(false)
6da99741178e e2ir.c changes, mainly accounts for static arrays being value types now
Trass3r
parents: 90
diff changeset
125 {
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
126 /* Unfortunately, the hash function for Aa (array of chars) is custom and
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
127 * different from Axa and Aya, which get the generic hash function.
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
128 * So, rewrite the type of the AArray so that if it's key type
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
129 * is an array of const or invariant, make it an array of mutable.
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
130 */
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
131 Type tkey = ta.index.toBasetype();
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
132 if (tkey.ty == Tarray)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
133 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
134 tkey = tkey.nextOf().mutableOf().arrayOf();
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
135 tkey = tkey.semantic(Loc(0), null);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
136 ta = new TypeAArray(ta.nextOf(), tkey);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
137 ta = cast(TypeAArray)ta.merge();
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
138 }
108
6da99741178e e2ir.c changes, mainly accounts for static arrays being value types now
Trass3r
parents: 90
diff changeset
139 }
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
140
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
141 e = el_param(e, ta.getTypeInfo(null).toElem(irs));
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
142
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
143 // call _d_assocarrayliteralT(ti, dim, ...)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
144 e = el_bin(OPcall,TYnptr,el_var(rtlsym[RTLSYM_ASSOCARRAYLITERALT]),e);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
145
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
146 el_setLoc(e,loc);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
147 return e;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
148 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
149
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
150 override bool checkSideEffect(int flag)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
151 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
152 bool f = false;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
153
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
154 for (size_t i = 0; i < keys.dim; i++)
90
39648eb578f6 more Expressions work
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 84
diff changeset
155 { auto key = keys[i];
39648eb578f6 more Expressions work
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 84
diff changeset
156 auto value = values[i];
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
157
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
158 f |= key.checkSideEffect(2);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
159 f |= value.checkSideEffect(2);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
160 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
161 if (flag == 0 && f == 0)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
162 Expression.checkSideEffect(0);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
163 return f;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
164 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
165
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
166 override void toCBuffer(OutBuffer buf, HdrGenState* hgs)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
167 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
168 buf.writeByte('[');
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
169 for (size_t i = 0; i < keys.dim; i++)
90
39648eb578f6 more Expressions work
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 84
diff changeset
170 { auto key = keys[i];
39648eb578f6 more Expressions work
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 84
diff changeset
171 auto value = values[i];
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
172
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
173 if (i)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
174 buf.writeByte(',');
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
175 expToCBuffer(buf, hgs, key, PREC.PREC_assign);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
176 buf.writeByte(':');
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
177 expToCBuffer(buf, hgs, value, PREC.PREC_assign);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
178 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
179 buf.writeByte(']');
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
180 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
181
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
182 override void toMangleBuffer(OutBuffer buf)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
183 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
184 size_t dim = keys.dim;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
185 buf.printf("A%u", dim);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
186 for (size_t i = 0; i < dim; i++)
90
39648eb578f6 more Expressions work
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 84
diff changeset
187 { auto key = keys[i];
39648eb578f6 more Expressions work
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 84
diff changeset
188 auto value = values[i];
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
189
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
190 key.toMangleBuffer(buf);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
191 value.toMangleBuffer(buf);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
192 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
193 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
194
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
195 override void scanForNestedRef(Scope sc)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
196 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
197 assert(false);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
198 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
199
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
200 override Expression optimize(int result)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
201 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
202 assert(keys.dim == values.dim);
90
39648eb578f6 more Expressions work
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 84
diff changeset
203 foreach (size_t i, Expression e; keys)
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
204 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
205 e = e.optimize(WANTvalue | (result & WANTinterpret));
90
39648eb578f6 more Expressions work
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 84
diff changeset
206 keys[i] = e;
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
207
90
39648eb578f6 more Expressions work
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 84
diff changeset
208 e = values[i];
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
209 e = e.optimize(WANTvalue | (result & WANTinterpret));
90
39648eb578f6 more Expressions work
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 84
diff changeset
210 values[i] = e;
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
211 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
212 return this;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
213 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
214
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
215 override Expression interpret(InterState istate)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
216 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
217 Expressions keysx = keys;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
218 Expressions valuesx = values;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
219
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
220 version (LOG) {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
221 printf("AssocArrayLiteralExp.interpret() %s\n", toChars());
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
222 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
223 for (size_t i = 0; i < keys.dim; i++)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
224 {
90
39648eb578f6 more Expressions work
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 84
diff changeset
225 auto ekey = keys[i];
39648eb578f6 more Expressions work
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 84
diff changeset
226 auto evalue = values[i];
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
227 Expression ex;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
228
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
229 ex = ekey.interpret(istate);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
230 if (ex is EXP_CANT_INTERPRET)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
231 goto Lerr;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
232
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
233 /* If any changes, do Copy On Write
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
234 */
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
235 if (ex != ekey)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
236 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
237 if (keysx == keys)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
238 keysx = cast(Expressions)keys.copy();
90
39648eb578f6 more Expressions work
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 84
diff changeset
239 keysx[i] = ex;
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
240 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
241
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
242 ex = evalue.interpret(istate);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
243 if (ex is EXP_CANT_INTERPRET)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
244 goto Lerr;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
245
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
246 /* If any changes, do Copy On Write
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
247 */
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
248 if (ex != evalue)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
249 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
250 if (valuesx == values)
84
be2ab491772e Expressions -> Vector!Expression
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 72
diff changeset
251 valuesx = values.copy();
90
39648eb578f6 more Expressions work
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 84
diff changeset
252 valuesx[i] = ex;
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
253 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
254 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
255
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
256 if (keysx != keys)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
257 expandTuples(keysx);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
258 if (valuesx != values)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
259 expandTuples(valuesx);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
260 if (keysx.dim != valuesx.dim)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
261 goto Lerr;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
262
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
263 /* Remove duplicate keys
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
264 */
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
265 for (size_t i = 1; i < keysx.dim; i++)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
266 {
90
39648eb578f6 more Expressions work
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 84
diff changeset
267 auto ekey = keysx[i - 1];
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
268
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
269 for (size_t j = i; j < keysx.dim; j++)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
270 {
90
39648eb578f6 more Expressions work
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 84
diff changeset
271 auto ekey2 = keysx[j];
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
272 Expression ex = Equal(TOKequal, Type.tbool, ekey, ekey2);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
273 if (ex is EXP_CANT_INTERPRET)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
274 goto Lerr;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
275 if (ex.isBool(true)) // if a match
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
276 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
277 // Remove ekey
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
278 if (keysx == keys)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
279 keysx = cast(Expressions)keys.copy();
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
280 if (valuesx == values)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
281 valuesx = cast(Expressions)values.copy();
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
282 keysx.remove(i - 1);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
283 valuesx.remove(i - 1);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
284 i -= 1; // redo the i'th iteration
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
285 break;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
286 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
287 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
288 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
289
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
290 if (keysx != keys || valuesx != values)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
291 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
292 AssocArrayLiteralExp ae;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
293 ae = new AssocArrayLiteralExp(loc, keysx, valuesx);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
294 ae.type = type;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
295 return ae;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
296 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
297 return this;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
298
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
299 Lerr:
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
300 if (keysx != keys)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
301 delete keysx;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
302 if (valuesx != values)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
303 delete values;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
304 return EXP_CANT_INTERPRET;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
305 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
306
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
307 override MATCH implicitConvTo(Type t)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
308 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
309 MATCH result = MATCHexact;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
310
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
311 Type typeb = type.toBasetype();
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
312 Type tb = t.toBasetype();
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
313 if (tb.ty == Taarray && typeb.ty == Taarray)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
314 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
315 for (size_t i = 0; i < keys.dim; i++)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
316 {
90
39648eb578f6 more Expressions work
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 84
diff changeset
317 auto e = keys[i];
39648eb578f6 more Expressions work
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 84
diff changeset
318 auto m = cast(MATCH)e.implicitConvTo((cast(TypeAArray)tb).index);
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
319 if (m < result)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
320 result = m; // remember worst match
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
321 if (result == MATCHnomatch)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
322 break; // no need to check for worse
90
39648eb578f6 more Expressions work
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 84
diff changeset
323 e = values[i];
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
324 m = cast(MATCH)e.implicitConvTo(tb.nextOf());
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
325 if (m < result)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
326 result = m; // remember worst match
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
327 if (result == MATCHnomatch)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
328 break; // no need to check for worse
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
329 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
330 return result;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
331 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
332 else
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
333 return Expression.implicitConvTo(t);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
334 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
335
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
336 override Expression castTo(Scope sc, Type t)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
337 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
338 if (type == t)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
339 return this;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
340 AssocArrayLiteralExp e = this;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
341 Type typeb = type.toBasetype();
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
342 Type tb = t.toBasetype();
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
343 if (tb.ty == Taarray && typeb.ty == Taarray && tb.nextOf().toBasetype().ty != Tvoid)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
344 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
345 e = cast(AssocArrayLiteralExp)copy();
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
346 e.keys = cast(Expressions)keys.copy();
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
347 e.values = cast(Expressions)values.copy();
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
348 assert(keys.dim == values.dim);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
349 for (size_t i = 0; i < keys.dim; i++)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
350 {
90
39648eb578f6 more Expressions work
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 84
diff changeset
351 auto ex = values[i];
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
352 ex = ex.castTo(sc, tb.nextOf());
90
39648eb578f6 more Expressions work
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 84
diff changeset
353 e.values[i] = ex;
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
354
90
39648eb578f6 more Expressions work
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 84
diff changeset
355 ex = keys[i];
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
356 ex = ex.castTo(sc, (cast(TypeAArray)tb).index);
90
39648eb578f6 more Expressions work
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 84
diff changeset
357 e.keys[i] = ex;
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
358 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
359 e.type = t;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
360 return e;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
361 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
362 L1:
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
363 return e.Expression.castTo(sc, t);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
364 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
365
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
366 override bool canThrow()
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
367 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
368 return true;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
369 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
370
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
371 override int inlineCost(InlineCostState* ics)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
372 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
373 assert(false);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
374 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
375
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
376 override Expression doInline(InlineDoState ids)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
377 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
378 assert(false);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
379 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
380
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
381 override Expression inlineScan(InlineScanState* iss)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
382 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
383 assert(false);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
384 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
385 }