Mercurial > projects > ddmd
annotate dmd/Initializer.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 | e3afd1303184 |
children |
rev | line source |
---|---|
0 | 1 module dmd.Initializer; |
2 | |
114 | 3 import dmd.common; |
0 | 4 import dmd.Loc; |
5 import dmd.Scope; | |
6 import dmd.Type; | |
79 | 7 import dmd.Util; |
0 | 8 import dmd.ArrayTypes; |
9 import dmd.Expression; | |
10 import dmd.OutBuffer; | |
11 import dmd.HdrGenState; | |
12 import dmd.VoidInitializer; | |
13 import dmd.StructInitializer; | |
14 import dmd.ArrayInitializer; | |
15 import dmd.ExpInitializer; | |
16 | |
17 import dmd.backend.dt_t; | |
18 | |
178 | 19 import dmd.TObject; |
20 | |
187
b0d41ff5e0df
Added expandability scheme outlined in http://www.dsource.org/forums/viewtopic.php?t=5659&sid=6f2150ff5b0bffcd47512a6a7608d218
Abscissa
parents:
178
diff
changeset
|
21 import dmd.DDMDExtensions; |
b0d41ff5e0df
Added expandability scheme outlined in http://www.dsource.org/forums/viewtopic.php?t=5659&sid=6f2150ff5b0bffcd47512a6a7608d218
Abscissa
parents:
178
diff
changeset
|
22 |
178 | 23 class Initializer : TObject |
0 | 24 { |
187
b0d41ff5e0df
Added expandability scheme outlined in http://www.dsource.org/forums/viewtopic.php?t=5659&sid=6f2150ff5b0bffcd47512a6a7608d218
Abscissa
parents:
178
diff
changeset
|
25 mixin insertMemberExtension!(typeof(this)); |
b0d41ff5e0df
Added expandability scheme outlined in http://www.dsource.org/forums/viewtopic.php?t=5659&sid=6f2150ff5b0bffcd47512a6a7608d218
Abscissa
parents:
178
diff
changeset
|
26 |
0 | 27 Loc loc; |
28 | |
29 this(Loc loc) | |
30 { | |
178 | 31 register(); |
0 | 32 this.loc = loc; |
33 } | |
34 | |
35 Initializer syntaxCopy() | |
36 { | |
79 | 37 return this; |
0 | 38 } |
39 | |
40 Initializer semantic(Scope sc, Type t) | |
41 { | |
79 | 42 return this; |
0 | 43 } |
44 | |
45 Type inferType(Scope sc) | |
46 { | |
79 | 47 error(loc, "cannot infer type from initializer"); |
48 return Type.terror; | |
0 | 49 } |
50 | |
79 | 51 abstract Expression toExpression(); |
52 | |
0 | 53 abstract void toCBuffer(OutBuffer buf, HdrGenState* hgs); |
79 | 54 |
0 | 55 string toChars() |
56 { | |
79 | 57 OutBuffer buf; |
58 HdrGenState hgs; | |
59 | |
60 buf = new OutBuffer(); | |
61 toCBuffer(buf, &hgs); | |
62 return buf.toChars(); | |
63 } | |
64 | |
65 static Initializers arraySyntaxCopy(Initializers ai) | |
66 { | |
67 Initializers a = null; | |
68 | |
69 if (ai) | |
70 { | |
71 a = new Initializers(); | |
72 a.setDim(ai.dim); | |
73 for (int i = 0; i < a.dim; i++) | |
127
9ee9b55452cb
Identifiers, Initializers -> Vector
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents:
114
diff
changeset
|
74 { Initializer e = ai[i]; |
79 | 75 |
76 e = e.syntaxCopy(); | |
127
9ee9b55452cb
Identifiers, Initializers -> Vector
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents:
114
diff
changeset
|
77 a[i] = e; |
79 | 78 } |
79 } | |
80 return a; | |
81 } | |
82 | |
83 dt_t* toDt() | |
84 { | |
0 | 85 assert(false); |
86 } | |
87 | |
79 | 88 VoidInitializer isVoidInitializer() { return null; } |
0 | 89 |
90 StructInitializer isStructInitializer() { return null; } | |
91 | |
92 ArrayInitializer isArrayInitializer() { return null; } | |
93 | |
94 ExpInitializer isExpInitializer() { return null; } | |
95 } |