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