0
|
1 module dmd.Initializer;
|
|
2
|
|
3 import dmd.Loc;
|
|
4 import dmd.Scope;
|
|
5 import dmd.Type;
|
79
|
6 import dmd.Util;
|
0
|
7 import dmd.ArrayTypes;
|
|
8 import dmd.Expression;
|
|
9 import dmd.OutBuffer;
|
|
10 import dmd.HdrGenState;
|
|
11 import dmd.VoidInitializer;
|
|
12 import dmd.StructInitializer;
|
|
13 import dmd.ArrayInitializer;
|
|
14 import dmd.ExpInitializer;
|
|
15
|
|
16 import dmd.backend.dt_t;
|
|
17
|
|
18 class Initializer
|
|
19 {
|
|
20 Loc loc;
|
|
21
|
|
22 this(Loc loc)
|
|
23 {
|
|
24 this.loc = loc;
|
|
25 }
|
|
26
|
|
27 Initializer syntaxCopy()
|
|
28 {
|
79
|
29 return this;
|
0
|
30 }
|
|
31
|
|
32 Initializer semantic(Scope sc, Type t)
|
|
33 {
|
79
|
34 return this;
|
0
|
35 }
|
|
36
|
|
37 Type inferType(Scope sc)
|
|
38 {
|
79
|
39 error(loc, "cannot infer type from initializer");
|
|
40 halt();
|
|
41 return Type.terror;
|
0
|
42 }
|
|
43
|
79
|
44 abstract Expression toExpression();
|
|
45
|
0
|
46 abstract void toCBuffer(OutBuffer buf, HdrGenState* hgs);
|
79
|
47
|
0
|
48 string toChars()
|
|
49 {
|
79
|
50 OutBuffer buf;
|
|
51 HdrGenState hgs;
|
|
52
|
|
53 buf = new OutBuffer();
|
|
54 toCBuffer(buf, &hgs);
|
|
55 return buf.toChars();
|
|
56 }
|
|
57
|
|
58 static Initializers arraySyntaxCopy(Initializers ai)
|
|
59 {
|
|
60 Initializers a = null;
|
|
61
|
|
62 if (ai)
|
|
63 {
|
|
64 a = new Initializers();
|
|
65 a.setDim(ai.dim);
|
|
66 for (int i = 0; i < a.dim; i++)
|
|
67 { Initializer e = cast(Initializer)ai.data[i];
|
|
68
|
|
69 e = e.syntaxCopy();
|
|
70 a.data[i] = cast(void*) e;
|
|
71 }
|
|
72 }
|
|
73 return a;
|
|
74 }
|
|
75
|
|
76 dt_t* toDt()
|
|
77 {
|
0
|
78 assert(false);
|
|
79 }
|
|
80
|
79
|
81 VoidInitializer isVoidInitializer() { return null; }
|
0
|
82
|
|
83 StructInitializer isStructInitializer() { return null; }
|
|
84
|
|
85 ArrayInitializer isArrayInitializer() { return null; }
|
|
86
|
|
87 ExpInitializer isExpInitializer() { return null; }
|
|
88 } |