annotate dmd/SymOffExp.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 af724d3510d7
children cd48cb899aee
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: 64
diff changeset
1 module dmd.SymOffExp;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 64
diff changeset
2
114
e28b18c23469 added a module dmd.common for commonly used stuff
Trass3r
parents: 108
diff changeset
3 import dmd.common;
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 64
diff changeset
4 import dmd.Expression;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 64
diff changeset
5 import dmd.Declaration;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 64
diff changeset
6 import dmd.MATCH;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 64
diff changeset
7 import dmd.Type;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 64
diff changeset
8 import dmd.OutBuffer;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 64
diff changeset
9 import dmd.Loc;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 64
diff changeset
10 import dmd.Scope;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 64
diff changeset
11 import dmd.InlineDoState;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 64
diff changeset
12 import dmd.HdrGenState;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 64
diff changeset
13 import dmd.backend.dt_t;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
14 import dmd.SymbolExp;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
15 import dmd.VarDeclaration;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
16 import dmd.DelegateExp;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
17 import dmd.ThisExp;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
18 import dmd.FuncDeclaration;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
19 import dmd.IntegerExp;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
20 import dmd.ErrorExp;
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 64
diff changeset
21 import dmd.TY;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
22 import dmd.TOK;
135
af1bebfd96a4 dmd 2.038
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 130
diff changeset
23 import dmd.STC;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
24
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
25 import dmd.backend.Symbol;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
26 import dmd.backend.Util;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
27 import dmd.backend.TYM;
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 64
diff changeset
28
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
29 class SymOffExp : SymbolExp
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
30 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
31 uint offset;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
32
73
ef02e2e203c2 Updating to dmd2.033
korDen
parents: 72
diff changeset
33 this(Loc loc, Declaration var, uint offset, bool hasOverloads = false)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
34 {
178
e3afd1303184 Many small bugs fixed
korDen
parents: 174
diff changeset
35 register();
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
36 super(loc, TOK.TOKsymoff, SymOffExp.sizeof, var, hasOverloads);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
37
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
38 this.offset = offset;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
39 VarDeclaration v = var.isVarDeclaration();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
40 if (v && v.needThis())
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
41 error("need 'this' for address of %s", v.toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
42 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
43
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 64
diff changeset
44 override Expression semantic(Scope sc)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
45 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
46 version(LOGSEMANTIC) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
47 printf("SymOffExp::semantic('%s')\n", toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
48 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
49 //var.semantic(sc);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
50 if (!type)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
51 type = var.type.pointerTo();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
52 VarDeclaration v = var.isVarDeclaration();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
53 if (v)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
54 v.checkNestedReference(sc, loc);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
55 return this;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
56 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
57
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 64
diff changeset
58 override void checkEscape()
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
59 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
60 VarDeclaration v = var.isVarDeclaration();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
61 if (v)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
62 {
135
af1bebfd96a4 dmd 2.038
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 130
diff changeset
63 if (!v.isDataseg() && !(v.storage_class & (STC.STCref | STC.STCout)))
130
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 129
diff changeset
64 { /* BUG: This should be allowed:
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 129
diff changeset
65 * void foo()
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 129
diff changeset
66 * { int a;
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 129
diff changeset
67 * int* bar() { return &a; }
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 129
diff changeset
68 * }
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 129
diff changeset
69 */
135
af1bebfd96a4 dmd 2.038
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 130
diff changeset
70 error("escaping reference to local %s", v.toChars());
130
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 129
diff changeset
71 }
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
72 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
73 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
74
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 64
diff changeset
75 override void toCBuffer(OutBuffer buf, HdrGenState* hgs)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
76 {
174
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 135
diff changeset
77 if (offset)
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 135
diff changeset
78 buf.printf("(& %s+%s)", var.toChars(), offset); ///
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 135
diff changeset
79 else
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 135
diff changeset
80 buf.printf("& %s", var.toChars());
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
81 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
82
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 64
diff changeset
83 override int isConst()
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
84 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
85 return 2;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
86 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
87
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 64
diff changeset
88 override bool isBool(bool result)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
89 {
129
010eb8f0e18d further work on dmd test suite
korDen
parents: 114
diff changeset
90 return result;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
91 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
92
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 64
diff changeset
93 override Expression doInline(InlineDoState ids)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
94 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
95 int i;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
96
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
97 //printf("SymOffExp.doInline(%s)\n", toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
98 for (i = 0; i < ids.from.dim; i++)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
99 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
100 if (var is cast(Declaration)ids.from.data[i])
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
101 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
102 SymOffExp se = cast(SymOffExp)copy();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
103
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
104 se.var = cast(Declaration)ids.to.data[i];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
105 return se;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
106 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
107 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
108 return this;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
109 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
110
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 64
diff changeset
111 override MATCH implicitConvTo(Type t)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
112 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
113 static if (false) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
114 printf("SymOffExp::implicitConvTo(this=%s, type=%s, t=%s)\n", toChars(), type.toChars(), t.toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
115 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
116 MATCH result = type.implicitConvTo(t);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
117 //printf("\tresult = %d\n", result);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
118
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
119 if (result == MATCHnomatch)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
120 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
121 // Look for pointers to functions where the functions are overloaded.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
122 FuncDeclaration f;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
123
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
124 t = t.toBasetype();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
125 if (type.ty == Tpointer && type.nextOf().ty == Tfunction &&
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
126 (t.ty == Tpointer || t.ty == Tdelegate) && t.nextOf().ty == Tfunction)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
127 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
128 f = var.isFuncDeclaration();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
129 if (f)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
130 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
131 f = f.overloadExactMatch(t.nextOf());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
132 if (f)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
133 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
134 if ((t.ty == Tdelegate && (f.needThis() || f.isNested())) ||
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
135 (t.ty == Tpointer && !(f.needThis() || f.isNested())))
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
136 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
137 result = MATCHexact;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
138 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
139 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
140 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
141 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
142 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
143 //printf("\tresult = %d\n", result);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
144 return result;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
145 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
146
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 64
diff changeset
147 override Expression castTo(Scope sc, Type t)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
148 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
149 static if (false) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
150 printf("SymOffExp::castTo(this=%s, type=%s, t=%s)\n", toChars(), type.toChars(), t.toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
151 }
73
ef02e2e203c2 Updating to dmd2.033
korDen
parents: 72
diff changeset
152 if (type == t && !hasOverloads)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
153 return this;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
154
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
155 Expression e;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
156 Type tb = t.toBasetype();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
157 Type typeb = type.toBasetype();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
158
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
159 if (tb != typeb)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
160 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
161 // Look for pointers to functions where the functions are overloaded.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
162 FuncDeclaration f;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
163
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
164 if (hasOverloads &&
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
165 typeb.ty == Tpointer && typeb.nextOf().ty == Tfunction &&
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
166 (tb.ty == Tpointer || tb.ty == Tdelegate) && tb.nextOf().ty == Tfunction)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
167 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
168 f = var.isFuncDeclaration();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
169 if (f)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
170 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
171 f = f.overloadExactMatch(tb.nextOf());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
172 if (f)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
173 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
174 if (tb.ty == Tdelegate)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
175 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
176 if (f.needThis() && hasThis(sc))
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
177 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
178 e = new DelegateExp(loc, new ThisExp(loc), f);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
179 e = e.semantic(sc);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
180 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
181 else if (f.isNested())
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
182 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
183 e = new DelegateExp(loc, new IntegerExp(0), f);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
184 e = e.semantic(sc);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
185 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
186 else if (f.needThis())
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
187 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
188 error("no 'this' to create delegate for %s", f.toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
189 e = new ErrorExp();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
190 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
191 else
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
192 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
193 error("cannot cast from function pointer to delegate");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
194 e = new ErrorExp();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
195 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
196 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
197 else
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
198 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
199 e = new SymOffExp(loc, f, 0);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
200 e.type = t;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
201 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
202 version (DMDV2) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
203 f.tookAddressOf++;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
204 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
205 return e;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
206 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
207 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
208 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
209 e = Expression.castTo(sc, t);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
210 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
211 else
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
212 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
213 e = copy();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
214 e.type = t;
73
ef02e2e203c2 Updating to dmd2.033
korDen
parents: 72
diff changeset
215 (cast(SymOffExp)e).hasOverloads = false;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
216 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
217 return e;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
218 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
219
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 64
diff changeset
220 override void scanForNestedRef(Scope sc)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
221 {
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 64
diff changeset
222 //printf("SymOffExp.scanForNestedRef(%s)\n", toChars());
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 64
diff changeset
223 VarDeclaration v = var.isVarDeclaration();
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 64
diff changeset
224 if (v)
64
4290d870944a More fixes
korDen
parents: 0
diff changeset
225 v.checkNestedReference(sc, Loc(0));
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
226 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
227
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 64
diff changeset
228 override dt_t** toDt(dt_t** pdt)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
229 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
230 //printf("SymOffExp.toDt('%s')\n", var.toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
231 assert(var);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
232 if (!(var.isDataseg() || var.isCodeseg()) ||
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
233 var.needThis() ||
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
234 var.isThreadlocal()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
235 )
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
236 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
237 debug writef("SymOffExp.toDt()\n");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
238 error("non-constant expression %s", toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
239 return pdt;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
240 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
241
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
242 Symbol* s = var.toSymbol();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
243 return dtxoff(pdt, s, offset, TYnptr);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
244 }
108
6da99741178e e2ir.c changes, mainly accounts for static arrays being value types now
Trass3r
parents: 73
diff changeset
245
6da99741178e e2ir.c changes, mainly accounts for static arrays being value types now
Trass3r
parents: 73
diff changeset
246 static if (false)
6da99741178e e2ir.c changes, mainly accounts for static arrays being value types now
Trass3r
parents: 73
diff changeset
247 {
6da99741178e e2ir.c changes, mainly accounts for static arrays being value types now
Trass3r
parents: 73
diff changeset
248 override elem* toElem(IRState* irs)
6da99741178e e2ir.c changes, mainly accounts for static arrays being value types now
Trass3r
parents: 73
diff changeset
249 {
6da99741178e e2ir.c changes, mainly accounts for static arrays being value types now
Trass3r
parents: 73
diff changeset
250 assert(false); // this function is #if 0'ed out in dmd
6da99741178e e2ir.c changes, mainly accounts for static arrays being value types now
Trass3r
parents: 73
diff changeset
251 }
6da99741178e e2ir.c changes, mainly accounts for static arrays being value types now
Trass3r
parents: 73
diff changeset
252 }
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
253 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
254