annotate dmd/DotIdExp.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 9d194c848e3a
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: 0
diff changeset
1 module dmd.DotIdExp;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
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: 0
diff changeset
4 import dmd.Expression;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
5 import dmd.Identifier;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
6 import dmd.IntegerExp;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
7 import dmd.Type;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
8 import dmd.TY;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
9 import dmd.ScopeExp;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
10 import dmd.StringExp;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
11 import dmd.PtrExp;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
12 import dmd.TypePointer;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
13 import dmd.Dsymbol;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
14 import dmd.EnumMember;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
15 import dmd.VarDeclaration;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
16 import dmd.ThisExp;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
17 import dmd.DotVarExp;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
18 import dmd.VarExp;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
19 import dmd.CommaExp;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
20 import dmd.FuncDeclaration;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
21 import dmd.OverloadSet;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
22 import dmd.OverExp;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
23 import dmd.TypeExp;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
24 import dmd.TupleDeclaration;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
25 import dmd.ScopeDsymbol;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
26 import dmd.Import;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
27 import dmd.Id;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
28 import dmd.TupleExp;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
29 import dmd.ArrayTypes;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
30 import dmd.UnaExp;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
31 import dmd.OutBuffer;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
32 import dmd.Loc;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
33 import dmd.Scope;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
34 import dmd.TOK;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
35 import dmd.HdrGenState;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
36 import dmd.ClassDeclaration;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
37 import dmd.StructDeclaration;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
38 import dmd.AggregateDeclaration;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
39 import dmd.DotExp;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
40 import dmd.Global;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
41 import dmd.IdentifierExp;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
42 import dmd.CallExp;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
43 import dmd.PREC;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
44
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
45 import dmd.expression.Util;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
46
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
47 class DotIdExp : UnaExp
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
48 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
49 Identifier ident;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
50
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
51 this(Loc loc, Expression e, Identifier ident)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
52 {
178
e3afd1303184 Many small bugs fixed
korDen
parents: 136
diff changeset
53 register();
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
54 super(loc, TOK.TOKdot, DotIdExp.sizeof, e);
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
55 this.ident = ident;
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: 0
diff changeset
58 override Expression semantic(Scope sc)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
59 {
130
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 114
diff changeset
60 // Indicate we didn't come from CallExp::semantic()
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 114
diff changeset
61 return semantic(sc, 0);
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 114
diff changeset
62 }
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 114
diff changeset
63
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 114
diff changeset
64 Expression semantic(Scope sc, int flag)
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 114
diff changeset
65 {
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
66 Expression e;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
67 Expression eleft;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
68 Expression eright;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
69
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
70 version (LOGSEMANTIC) {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
71 printf("DotIdExp.semantic(this = %p, '%s')\n", this, toChars());
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
72 //printf("e1.op = %d, '%s'\n", e1.op, Token.toChars(e1.op));
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
73 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
74
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
75 //{ static int z; fflush(stdout); if (++z == 10) *(char*)0=0; }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
76
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
77 static if (false) {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
78 /* Don't do semantic analysis if we'll be converting
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
79 * it to a string.
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
80 */
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
81 if (ident == Id.stringof)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
82 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
83 char *s = e1.toChars();
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
84 e = new StringExp(loc, s, strlen(s), 'c');
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
85 e = e.semantic(sc);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
86 return e;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
87 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
88 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
89
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
90 /* Special case: rewrite this.id and super.id
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
91 * to be classtype.id and baseclasstype.id
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
92 * if we have no this pointer.
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
93 */
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
94 if ((e1.op == TOK.TOKthis || e1.op == TOK.TOKsuper) && !hasThis(sc))
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
95 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
96 ClassDeclaration cd;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
97 StructDeclaration sd;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
98 AggregateDeclaration ad;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
99
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
100 ad = sc.getStructClassScope();
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
101 if (ad)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
102 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
103 cd = ad.isClassDeclaration();
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
104 if (cd)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
105 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
106 if (e1.op == TOK.TOKthis)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
107 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
108 e = typeDotIdExp(loc, cd.type, ident);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
109 return e.semantic(sc);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
110 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
111 else if (cd.baseClass && e1.op == TOK.TOKsuper)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
112 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
113 e = typeDotIdExp(loc, cd.baseClass.type, ident);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
114 return e.semantic(sc);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
115 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
116 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
117 else
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
118 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
119 sd = ad.isStructDeclaration();
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
120 if (sd)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
121 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
122 if (e1.op == TOK.TOKthis)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
123 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
124 e = typeDotIdExp(loc, sd.type, ident);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
125 return e.semantic(sc);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
126 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
127 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
128 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
129 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
130 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
131
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
132 UnaExp.semantic(sc);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
133
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
134 if (e1.op == TOK.TOKdotexp)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
135 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
136 DotExp de = cast(DotExp)e1;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
137 eleft = de.e1;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
138 eright = de.e2;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
139 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
140 else
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
141 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
142 e1 = resolveProperties(sc, e1);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
143 eleft = null;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
144 eright = e1;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
145 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
146
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
147 version (DMDV2) {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
148 if (e1.op == TOK.TOKtuple && ident == Id.offsetof)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
149 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
150 /* 'distribute' the .offsetof to each of the tuple elements.
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
151 */
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
152 TupleExp te = cast(TupleExp)e1;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
153 Expressions exps = new Expressions();
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
154 exps.setDim(te.exps.dim);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
155 for (int i = 0; i < exps.dim; i++)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
156 {
90
39648eb578f6 more Expressions work
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 84
diff changeset
157 auto ee = te.exps[i];
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
158 ee = ee.semantic(sc);
136
9d194c848e3a fixed a few null reference bugs, thx sagitario
Trass3r
parents: 130
diff changeset
159 ee = new DotIdExp(ee.loc, ee, Id.offsetof);
90
39648eb578f6 more Expressions work
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 84
diff changeset
160 exps[i] = ee;
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
161 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
162 e = new TupleExp(loc, exps);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
163 e = e.semantic(sc);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
164 return e;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
165 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
166 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
167
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
168 if (e1.op == TOK.TOKtuple && ident == Id.length)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
169 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
170 TupleExp te = cast(TupleExp)e1;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
171 e = new IntegerExp(loc, te.exps.dim, Type.tsize_t);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
172 return e;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
173 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
174
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
175 if (e1.op == TOK.TOKdottd)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
176 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
177 error("template %s does not have property %s", e1.toChars(), ident.toChars());
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
178 return e1;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
179 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
180
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
181 if (!e1.type)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
182 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
183 error("expression %s does not have property %s", e1.toChars(), ident.toChars());
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
184 return e1;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
185 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
186
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
187 Type t1b = e1.type.toBasetype();
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
188
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
189 if (eright.op == TOK.TOKimport) // also used for template alias's
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
190 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
191 ScopeExp ie = cast(ScopeExp)eright;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
192
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
193 /* Disable access to another module's private imports.
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
194 * The check for 'is sds our current module' is because
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
195 * the current module should have access to its own imports.
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
196 */
130
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 114
diff changeset
197 Dsymbol s = ie.sds.search(loc, ident, //0);
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
198 (ie.sds.isModule() && ie.sds != sc.module_) ? 1 : 0);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
199 if (s)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
200 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
201 s = s.toAlias();
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
202 checkDeprecated(sc, s);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
203
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
204 EnumMember em = s.isEnumMember();
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
205 if (em)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
206 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
207 e = em.value;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
208 e = e.semantic(sc);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
209 return e;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
210 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
211
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
212 VarDeclaration v = s.isVarDeclaration();
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
213 if (v)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
214 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
215 //printf("DotIdExp. Identifier '%s' is a variable, type '%s'\n", toChars(), v.type.toChars());
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
216 if (v.inuse)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
217 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
218 error("circular reference to '%s'", v.toChars());
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
219 type = Type.tint32;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
220 return this;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
221 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
222 type = v.type;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
223 if (v.needThis())
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
224 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
225 if (!eleft)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
226 eleft = new ThisExp(loc);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
227 e = new DotVarExp(loc, eleft, v);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
228 e = e.semantic(sc);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
229 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
230 else
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
231 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
232 e = new VarExp(loc, v);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
233 if (eleft)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
234 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
235 e = new CommaExp(loc, eleft, e);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
236 e.type = v.type;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
237 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
238 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
239 return e.deref();
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
240 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
241
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
242 FuncDeclaration f = s.isFuncDeclaration();
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
243 if (f)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
244 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
245 //printf("it's a function\n");
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
246 if (f.needThis())
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
247 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
248 if (!eleft)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
249 eleft = new ThisExp(loc);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
250 e = new DotVarExp(loc, eleft, f);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
251 e = e.semantic(sc);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
252 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
253 else
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
254 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
255 e = new VarExp(loc, f, 1);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
256 if (eleft)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
257 { e = new CommaExp(loc, eleft, e);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
258 e.type = f.type;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
259 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
260 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
261 return e;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
262 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
263 version (DMDV2) {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
264 OverloadSet o = s.isOverloadSet();
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
265 if (o)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
266 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
267 //printf("'%s' is an overload set\n", o.toChars());
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
268 return new OverExp(o);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
269 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
270 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
271
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
272 Type t = s.getType();
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
273 if (t)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
274 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
275 return new TypeExp(loc, t);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
276 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
277
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
278 TupleDeclaration tup = s.isTupleDeclaration();
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
279 if (tup)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
280 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
281 if (eleft)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
282 error("cannot have e.tuple");
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
283 e = new TupleExp(loc, tup);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
284 e = e.semantic(sc);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
285 return e;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
286 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
287
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
288 ScopeDsymbol sds = s.isScopeDsymbol();
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
289 if (sds)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
290 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
291 //printf("it's a ScopeDsymbol\n");
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
292 e = new ScopeExp(loc, sds);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
293 e = e.semantic(sc);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
294 if (eleft)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
295 e = new DotExp(loc, eleft, e);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
296 return e;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
297 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
298
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
299 Import imp = s.isImport();
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
300 if (imp)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
301 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
302 ScopeExp iee = new ScopeExp(loc, imp.pkg);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
303 return iee.semantic(sc);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
304 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
305
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
306 // BUG: handle other cases like in IdentifierExp.semantic()
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
307 version (DEBUG) {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
308 printf("s = '%s', kind = '%s'\n", s.toChars(), s.kind());
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
309 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
310 assert(0);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
311 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
312 else if (ident is Id.stringof_)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
313 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
314 string ss = ie.toChars();
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
315 e = new StringExp(loc, ss, 'c');
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
316 e = e.semantic(sc);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
317 return e;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
318 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
319 error("undefined identifier %s", toChars());
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
320 type = Type.tvoid;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
321 return this;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
322 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
323 else if (t1b.ty == TY.Tpointer &&
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
324 ident !is Id.init_ && ident !is Id.__sizeof &&
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
325 ident !is Id.alignof_ && ident !is Id.offsetof &&
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
326 ident !is Id.mangleof_ && ident !is Id.stringof_)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
327 { /* Rewrite:
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
328 * p.ident
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
329 * as:
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
330 * (*p).ident
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
331 */
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
332 e = new PtrExp(loc, e1);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
333 e.type = (cast(TypePointer)t1b).next;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
334 return e.type.dotExp(sc, e, ident);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
335 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
336 ///version (DMDV2) {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
337 else if (t1b.ty == TY.Tarray ||
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
338 t1b.ty == TY.Tsarray ||
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
339 t1b.ty == TY.Taarray)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
340 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
341 /* If ident is not a valid property, rewrite:
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
342 * e1.ident
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
343 * as:
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
344 * .ident(e1)
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
345 */
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
346 uint errors = global.errors;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
347 global.gag++;
109
ceda59b4d255 expression.c changes, now only ddoc should be left
Trass3r
parents: 90
diff changeset
348 Type t1 = e1.type;
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
349 e = e1.type.dotExp(sc, e1, ident);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
350 global.gag--;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
351 if (errors != global.errors) // if failed to find the property
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
352 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
353 global.errors = errors;
109
ceda59b4d255 expression.c changes, now only ddoc should be left
Trass3r
parents: 90
diff changeset
354 e1.type = t1; // kludge to restore type
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
355 e = new DotIdExp(loc, new IdentifierExp(loc, Id.empty), ident);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
356 e = new CallExp(loc, e, e1);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
357 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
358 e = e.semantic(sc);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
359 return e;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
360 }
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
361 ///}
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
362 else
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
363 {
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
364 e = e1.type.dotExp(sc, e1, ident);
130
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 114
diff changeset
365 if (!(flag && e.op == TOK.TOKdotti)) // let CallExp::semantic() handle this
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 114
diff changeset
366 e = e.semantic(sc);
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
367 return e;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
368 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
369 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
370
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
371 override void toCBuffer(OutBuffer buf, HdrGenState* hgs)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
372 {
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
373 //printf("DotIdExp.toCBuffer()\n");
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
374 expToCBuffer(buf, hgs, e1, PREC.PREC_primary);
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
375 buf.writeByte('.');
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
376 buf.writestring(ident.toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
377 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
378
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
379 override void dump(int i)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
380 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
381 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
382 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
383 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
384