annotate dmd/AliasDeclaration.d @ 187:b0d41ff5e0df

Added expandability scheme outlined in http://www.dsource.org/forums/viewtopic.php?t=5659&sid=6f2150ff5b0bffcd47512a6a7608d218
author Abscissa
date Tue, 07 Jun 2011 23:37:34 -0400
parents cd48cb899aee
children
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
187
b0d41ff5e0df Added expandability scheme outlined in http://www.dsource.org/forums/viewtopic.php?t=5659&sid=6f2150ff5b0bffcd47512a6a7608d218
Abscissa
parents: 179
diff changeset
22 import dmd.DDMDExtensions;
b0d41ff5e0df Added expandability scheme outlined in http://www.dsource.org/forums/viewtopic.php?t=5659&sid=6f2150ff5b0bffcd47512a6a7608d218
Abscissa
parents: 179
diff changeset
23
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
24 class AliasDeclaration : Declaration
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
25 {
187
b0d41ff5e0df Added expandability scheme outlined in http://www.dsource.org/forums/viewtopic.php?t=5659&sid=6f2150ff5b0bffcd47512a6a7608d218
Abscissa
parents: 179
diff changeset
26 mixin insertMemberExtension!(typeof(this));
b0d41ff5e0df Added expandability scheme outlined in http://www.dsource.org/forums/viewtopic.php?t=5659&sid=6f2150ff5b0bffcd47512a6a7608d218
Abscissa
parents: 179
diff changeset
27
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
28 Dsymbol aliassym;
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
29 Dsymbol overnext; // next in overload list
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
30 int inSemantic;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
31
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
32 this(Loc loc, Identifier ident, Type type)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
33 {
178
e3afd1303184 Many small bugs fixed
korDen
parents: 174
diff changeset
34 register();
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
35 super(ident);
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
36
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
37 //printf("AliasDeclaration(id = '%s', type = %p)\n", id.toChars(), type);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
38 //printf("type = '%s'\n", type.toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
39 this.loc = loc;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
40 this.type = type;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
41 this.aliassym = null;
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
42 version (_DH) {
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
43 this.htype = null;
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
44 this.haliassym = null;
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
45 }
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
46
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
47 assert(type);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
48 }
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
49
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
50 this(Loc loc, Identifier id, Dsymbol s)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
51 {
178
e3afd1303184 Many small bugs fixed
korDen
parents: 174
diff changeset
52 register();
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
53 super(id);
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
54
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
55 //printf("AliasDeclaration(id = '%s', s = %p)\n", id->toChars(), s);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
56 assert(s !is this); /// huh?
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
57 this.loc = loc;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
58 this.type = null;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
59 this.aliassym = s;
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
60 version (_DH) {
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
61 this.htype = null;
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
62 this.haliassym = null;
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
63 }
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
64 assert(s);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
65 }
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
66
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 16
diff changeset
67 override Dsymbol syntaxCopy(Dsymbol s)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
68 {
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
69 //printf("AliasDeclaration::syntaxCopy()\n");
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
70 assert(!s);
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
71 AliasDeclaration sa;
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
72 if (type)
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
73 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
74 else
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
75 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
76 version (_DH) {
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
77 // Syntax copy for header file
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
78 if (!htype) // Don't overwrite original
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
79 { 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
80 { htype = type.syntaxCopy();
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
81 sa.htype = type.syntaxCopy();
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
82 }
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
83 }
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
84 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
85 sa.htype = htype.syntaxCopy();
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
86 if (!haliassym)
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
87 { if (aliassym)
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
88 { haliassym = aliassym.syntaxCopy(s);
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
89 sa.haliassym = aliassym.syntaxCopy(s);
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
90 }
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
91 }
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
92 else
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
93 sa.haliassym = haliassym.syntaxCopy(s);
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
94 } // version (_DH)
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
95 return sa;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
96 }
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
97
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 16
diff changeset
98 override void semantic(Scope sc)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
99 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
100 //printf("AliasDeclaration.semantic() %s\n", toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
101 if (aliassym)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
102 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
103 if (aliassym.isTemplateInstance())
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
104 aliassym.semantic(sc);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
105 return;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
106 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
107 this.inSemantic = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
108
135
af1bebfd96a4 dmd 2.038
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 114
diff changeset
109 version(DMDV1) { // don't really know why this is here
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
110 if (storage_class & STC.STCconst)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
111 error("cannot be const");
135
af1bebfd96a4 dmd 2.038
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 114
diff changeset
112 }
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
113 storage_class |= sc.stc & STC.STCdeprecated;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
114
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
115 // Given:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
116 // alias foo.bar.abc def;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
117 // it is not knowable from the syntax whether this is an alias
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
118 // for a type or an alias for a symbol. It is up to the semantic()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
119 // pass to distinguish.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
120 // If it is a type, then type is set and getType() will return that
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
121 // type. If it is a symbol, then aliassym is set and type is null -
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
122 // toAlias() will return aliasssym.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
123
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
124 Dsymbol s;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
125 Type t;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
126 Expression e;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
127
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
128 /* This section is needed because resolve() will:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
129 * const x = 3;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
130 * alias x y;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
131 * try to alias y to 3.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
132 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
133 s = type.toDsymbol(sc);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
134 if (s && ((s.getType() && type.equals(s.getType())) || s.isEnumMember()))
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
135 goto L2; // it's a symbolic alias
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
136
98
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
137 ///version (DMDV2) {
135
af1bebfd96a4 dmd 2.038
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 114
diff changeset
138 type = type.addStorageClass(storage_class);
179
cd48cb899aee Updated to dmd2.040
korDen
parents: 178
diff changeset
139 if (storage_class & (STC.STCref | STCnothrow | STCpure | STCdisable))
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
140 { // For 'ref' to be attached to function types, and picked
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
141 // up by Type.resolve(), it has to go into sc.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
142 sc = sc.push();
179
cd48cb899aee Updated to dmd2.040
korDen
parents: 178
diff changeset
143 sc.stc |= storage_class & (STCref | STCnothrow | STCpure | STCshared | STCdisable);
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
144 type.resolve(loc, sc, &e, &t, &s);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
145 sc = sc.pop();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
146 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
147 else
98
5c859d5fbe27 and more
Trass3r
parents: 79
diff changeset
148 /// #endif
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
149 type.resolve(loc, sc, &e, &t, &s);
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
150 if (s)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
151 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
152 goto L2;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
153 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
154 else if (e)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
155 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
156 // Try to convert Expression to Dsymbol
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
157 s = getDsymbol(e);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
158 if (s)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
159 goto L2;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
160
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
161 error("cannot alias an expression %s", e.toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
162 t = e.type;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
163 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
164 else if (t)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
165 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
166 type = t;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
167 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
168 if (overnext)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
169 ScopeDsymbol.multiplyDefined(Loc(0), this, overnext);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
170 this.inSemantic = 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
171 return;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
172
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
173 L2:
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
174 //printf("alias is a symbol %s %s\n", s.kind(), s.toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
175 type = null;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
176 VarDeclaration v = s.isVarDeclaration();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
177 if (v && v.linkage == LINK.LINKdefault)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
178 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
179 error("forward reference of %s", v.toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
180 s = null;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
181 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
182 else
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
183 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
184 FuncDeclaration f = s.toAlias().isFuncDeclaration();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
185 if (f)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
186 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
187 if (overnext)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
188 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
189 FuncAliasDeclaration fa = new FuncAliasDeclaration(f);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
190 if (!fa.overloadInsert(overnext))
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
191 ScopeDsymbol.multiplyDefined(Loc(0), f, overnext);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
192 overnext = null;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
193 s = fa;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
194 s.parent = sc.parent;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
195 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
196 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
197 if (overnext)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
198 ScopeDsymbol.multiplyDefined(Loc(0), s, overnext);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
199 if (s == this)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
200 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
201 assert(global.errors);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
202 s = null;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
203 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
204 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
205 //printf("setting aliassym %p to %p\n", this, s);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
206 aliassym = s;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
207 this.inSemantic = 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
208 }
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
209
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 16
diff changeset
210 override bool overloadInsert(Dsymbol s)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
211 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
212 /* Don't know yet what the aliased symbol is, so assume it can
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
213 * be overloaded and check later for correctness.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
214 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
215
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
216 //printf("AliasDeclaration.overloadInsert('%s')\n", s.toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
217 if (overnext is null)
79
43073c7c7769 updated to 2.035
Trass3r
parents: 72
diff changeset
218 {
43073c7c7769 updated to 2.035
Trass3r
parents: 72
diff changeset
219 static if (true)
43073c7c7769 updated to 2.035
Trass3r
parents: 72
diff changeset
220 {
43073c7c7769 updated to 2.035
Trass3r
parents: 72
diff changeset
221 if (s is this)
43073c7c7769 updated to 2.035
Trass3r
parents: 72
diff changeset
222 return true;
43073c7c7769 updated to 2.035
Trass3r
parents: 72
diff changeset
223 }
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
224 overnext = s;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
225 return true;
79
43073c7c7769 updated to 2.035
Trass3r
parents: 72
diff changeset
226
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
227 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
228 else
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
229 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
230 return overnext.overloadInsert(s);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
231 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
232 }
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
233
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 16
diff changeset
234 override string kind()
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
235 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
236 return "alias";
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
237 }
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
238
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 16
diff changeset
239 override Type getType()
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
240 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
241 return type;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
242 }
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
243
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 16
diff changeset
244 override Dsymbol toAlias()
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
245 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
246 //printf("AliasDeclaration::toAlias('%s', this = %p, aliassym = %p, kind = '%s')\n", toChars(), this, aliassym, aliassym ? aliassym->kind() : "");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
247 assert(this !is aliassym);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
248 //static int count; if (++count == 10) *(char*)0=0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
249 if (inSemantic)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
250 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
251 error("recursive alias declaration");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
252 aliassym = new TypedefDeclaration(loc, ident, Type.terror, null);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
253 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
254
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
255 Dsymbol s = aliassym ? aliassym.toAlias() : this;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
256 return s;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
257 }
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
258
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 16
diff changeset
259 override void toCBuffer(OutBuffer buf, HdrGenState* hgs)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
260 {
174
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 135
diff changeset
261 buf.writestring("alias ");
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 135
diff changeset
262 /// static if (false) { // && _DH
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 135
diff changeset
263 /// if (hgs.hdrgen)
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 135
diff changeset
264 /// {
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 135
diff changeset
265 /// if (haliassym)
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 135
diff changeset
266 /// {
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 135
diff changeset
267 /// haliassym.toCBuffer(buf, hgs);
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 135
diff changeset
268 /// buf.writeByte(' ');
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 135
diff changeset
269 /// buf.writestring(ident.toChars());
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 135
diff changeset
270 /// }
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 135
diff changeset
271 /// else
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 135
diff changeset
272 /// htype.toCBuffer(buf, ident, hgs);
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 135
diff changeset
273 /// }
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 135
diff changeset
274 /// else
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 135
diff changeset
275 /// }
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 135
diff changeset
276 {
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 135
diff changeset
277 if (aliassym)
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 135
diff changeset
278 {
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 135
diff changeset
279 aliassym.toCBuffer(buf, hgs);
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 135
diff changeset
280 buf.writeByte(' ');
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 135
diff changeset
281 buf.writestring(ident.toChars());
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 135
diff changeset
282 }
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 135
diff changeset
283 else
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 135
diff changeset
284 type.toCBuffer(buf, ident, hgs);
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 135
diff changeset
285 }
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 135
diff changeset
286 buf.writeByte(';');
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 135
diff changeset
287 buf.writenl();
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
288 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
289
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
290 version (_DH) {
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
291 Type htype;
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
292 Dsymbol haliassym;
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
293 }
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 16
diff changeset
294 override void toDocBuffer(OutBuffer buf)
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
295 {
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
296 assert(false);
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
297 }
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
298
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 16
diff changeset
299 override AliasDeclaration isAliasDeclaration() { return this; }
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
300 }