annotate dmd/AliasDeclaration.d @ 132:c494af1dba80

Fixes for dmd 2.037
author Eldar Insafutdinov <e.insafutdinov@gmail.com>
date Fri, 10 Sep 2010 19:14:09 +0100
parents e28b18c23469
children af1bebfd96a4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1 module dmd.AliasDeclaration;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
2
114
e28b18c23469 added a module dmd.common for commonly used stuff
Trass3r
parents: 98
diff changeset
3 import dmd.common;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
4 import dmd.LINK;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
5 import dmd.Declaration;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
6 import dmd.TypedefDeclaration;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
7 import dmd.VarDeclaration;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
8 import dmd.FuncDeclaration;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
9 import dmd.FuncAliasDeclaration;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
10 import dmd.Dsymbol;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
11 import dmd.ScopeDsymbol;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
12 import dmd.Loc;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
13 import dmd.Identifier;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
14 import dmd.Type;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
15 import dmd.OutBuffer;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
16 import dmd.HdrGenState;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
17 import dmd.Scope;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
18 import dmd.STC;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
19 import dmd.Expression;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
20 import dmd.Global;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
21
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
22 class AliasDeclaration : Declaration
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
23 {
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
24 Dsymbol aliassym;
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
25 Dsymbol overnext; // next in overload list
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
26 int inSemantic;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
27
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
28 this(Loc loc, Identifier ident, Type type)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
29 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
30 super(ident);
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
31
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
32 //printf("AliasDeclaration(id = '%s', type = %p)\n", id.toChars(), type);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
33 //printf("type = '%s'\n", type.toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
34 this.loc = loc;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
35 this.type = type;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
36 this.aliassym = null;
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
37 version (_DH) {
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
38 this.htype = null;
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
39 this.haliassym = null;
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
40 }
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
41
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
42 assert(type);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
43 }
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
44
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
45 this(Loc loc, Identifier id, Dsymbol s)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
46 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
47 super(id);
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
48
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
49 //printf("AliasDeclaration(id = '%s', s = %p)\n", id->toChars(), s);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
50 assert(s !is this); /// huh?
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
51 this.loc = loc;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
52 this.type = null;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
53 this.aliassym = s;
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
54 version (_DH) {
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
55 this.htype = null;
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
56 this.haliassym = null;
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
57 }
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
58 assert(s);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
59 }
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
60
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 16
diff changeset
61 override Dsymbol syntaxCopy(Dsymbol s)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
62 {
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
63 //printf("AliasDeclaration::syntaxCopy()\n");
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
64 assert(!s);
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
65 AliasDeclaration sa;
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
66 if (type)
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
67 sa = new AliasDeclaration(loc, ident, type.syntaxCopy());
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
68 else
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
69 sa = new AliasDeclaration(loc, ident, aliassym.syntaxCopy(null));
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
70 version (_DH) {
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
71 // Syntax copy for header file
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
72 if (!htype) // Don't overwrite original
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
73 { if (type) // Make copy for both old and new instances
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
74 { htype = type.syntaxCopy();
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
75 sa.htype = type.syntaxCopy();
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
76 }
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
77 }
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
78 else // Make copy of original for new instance
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
79 sa.htype = htype.syntaxCopy();
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
80 if (!haliassym)
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
81 { if (aliassym)
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
82 { haliassym = aliassym.syntaxCopy(s);
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
83 sa.haliassym = aliassym.syntaxCopy(s);
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
84 }
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
85 }
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
86 else
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
87 sa.haliassym = haliassym.syntaxCopy(s);
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
88 } // version (_DH)
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
89 return sa;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
90 }
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
91
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 16
diff changeset
92 override void semantic(Scope sc)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
93 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
94 //printf("AliasDeclaration.semantic() %s\n", toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
95 if (aliassym)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
96 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
97 if (aliassym.isTemplateInstance())
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
98 aliassym.semantic(sc);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
99 return;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
100 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
101 this.inSemantic = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
102
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
103 if (storage_class & STC.STCconst)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
104 error("cannot be const");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
105
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
106 storage_class |= sc.stc & STC.STCdeprecated;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
107
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
108 // Given:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
109 // alias foo.bar.abc def;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
110 // it is not knowable from the syntax whether this is an alias
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
111 // for a type or an alias for a symbol. It is up to the semantic()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
112 // pass to distinguish.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
113 // If it is a type, then type is set and getType() will return that
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
114 // type. If it is a symbol, then aliassym is set and type is null -
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
115 // toAlias() will return aliasssym.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
116
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
117 Dsymbol s;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
118 Type t;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
119 Expression e;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
120
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
121 /* This section is needed because resolve() will:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
122 * const x = 3;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
123 * alias x y;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
124 * try to alias y to 3.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
125 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
126 s = type.toDsymbol(sc);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
127 if (s && ((s.getType() && type.equals(s.getType())) || s.isEnumMember()))
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
128 goto L2; // it's a symbolic alias
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
129
98
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
130 ///version (DMDV2) {
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
131 if (storage_class & (STC.STCref | STCnothrow | STCpure))
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
132 { // For 'ref' to be attached to function types, and picked
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
133 // up by Type.resolve(), it has to go into sc.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
134 sc = sc.push();
98
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
135 sc.stc |= storage_class & (STCref | STCnothrow | STCpure);
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
136 type.resolve(loc, sc, &e, &t, &s);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
137 sc = sc.pop();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
138 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
139 else
98
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
140 /// #endif
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
141 type.resolve(loc, sc, &e, &t, &s);
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
142 if (s)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
143 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
144 goto L2;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
145 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
146 else if (e)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
147 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
148 // Try to convert Expression to Dsymbol
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
149 s = getDsymbol(e);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
150 if (s)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
151 goto L2;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
152
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
153 error("cannot alias an expression %s", e.toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
154 t = e.type;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
155 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
156 else if (t)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
157 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
158 type = t;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
159 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
160 if (overnext)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
161 ScopeDsymbol.multiplyDefined(Loc(0), this, overnext);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
162 this.inSemantic = 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
163 return;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
164
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
165 L2:
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
166 //printf("alias is a symbol %s %s\n", s.kind(), s.toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
167 type = null;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
168 VarDeclaration v = s.isVarDeclaration();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
169 if (v && v.linkage == LINK.LINKdefault)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
170 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
171 error("forward reference of %s", v.toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
172 s = null;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
173 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
174 else
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
175 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
176 FuncDeclaration f = s.toAlias().isFuncDeclaration();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
177 if (f)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
178 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
179 if (overnext)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
180 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
181 FuncAliasDeclaration fa = new FuncAliasDeclaration(f);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
182 if (!fa.overloadInsert(overnext))
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
183 ScopeDsymbol.multiplyDefined(Loc(0), f, overnext);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
184 overnext = null;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
185 s = fa;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
186 s.parent = sc.parent;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
187 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
188 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
189 if (overnext)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
190 ScopeDsymbol.multiplyDefined(Loc(0), s, overnext);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
191 if (s == this)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
192 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
193 assert(global.errors);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
194 s = null;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
195 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
196 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
197 //printf("setting aliassym %p to %p\n", this, s);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
198 aliassym = s;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
199 this.inSemantic = 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
200 }
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
201
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 16
diff changeset
202 override bool overloadInsert(Dsymbol s)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
203 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
204 /* Don't know yet what the aliased symbol is, so assume it can
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
205 * be overloaded and check later for correctness.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
206 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
207
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
208 //printf("AliasDeclaration.overloadInsert('%s')\n", s.toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
209 if (overnext is null)
79
43073c7c7769 updated to 2.035
Trass3r
parents: 72
diff changeset
210 {
43073c7c7769 updated to 2.035
Trass3r
parents: 72
diff changeset
211 static if (true)
43073c7c7769 updated to 2.035
Trass3r
parents: 72
diff changeset
212 {
43073c7c7769 updated to 2.035
Trass3r
parents: 72
diff changeset
213 if (s is this)
43073c7c7769 updated to 2.035
Trass3r
parents: 72
diff changeset
214 return true;
43073c7c7769 updated to 2.035
Trass3r
parents: 72
diff changeset
215 }
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
216 overnext = s;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
217 return true;
79
43073c7c7769 updated to 2.035
Trass3r
parents: 72
diff changeset
218
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
219 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
220 else
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
221 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
222 return overnext.overloadInsert(s);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
223 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
224 }
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
225
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 16
diff changeset
226 override string kind()
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
227 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
228 return "alias";
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
229 }
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
230
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 16
diff changeset
231 override Type getType()
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
232 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
233 return type;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
234 }
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
235
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 16
diff changeset
236 override Dsymbol toAlias()
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
237 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
238 //printf("AliasDeclaration::toAlias('%s', this = %p, aliassym = %p, kind = '%s')\n", toChars(), this, aliassym, aliassym ? aliassym->kind() : "");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
239 assert(this !is aliassym);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
240 //static int count; if (++count == 10) *(char*)0=0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
241 if (inSemantic)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
242 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
243 error("recursive alias declaration");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
244 aliassym = new TypedefDeclaration(loc, ident, Type.terror, null);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
245 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
246
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
247 Dsymbol s = aliassym ? aliassym.toAlias() : this;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
248 return s;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
249 }
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
250
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 16
diff changeset
251 override void toCBuffer(OutBuffer buf, HdrGenState* hgs)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
252 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
253 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
254 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
255
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
256 version (_DH) {
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
257 Type htype;
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
258 Dsymbol haliassym;
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
259 }
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 16
diff changeset
260 override void toDocBuffer(OutBuffer buf)
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
261 {
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
262 assert(false);
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
263 }
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
264
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 16
diff changeset
265 override AliasDeclaration isAliasDeclaration() { return this; }
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
266 }