Mercurial > projects > ddmd
annotate dmd/Initializer.d @ 178:e3afd1303184
Many small bugs fixed
Made all classes derive from TObject to detect memory leaks (functionality is disabled for now)
Began work on overriding backend memory allocations (to avoid memory leaks)
author | korDen |
---|---|
date | Sun, 17 Oct 2010 07:42:00 +0400 |
parents | 60bb0fe4563e |
children | b0d41ff5e0df |
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 | |
21 class Initializer : TObject | |
0 | 22 { |
23 Loc loc; | |
24 | |
25 this(Loc loc) | |
26 { | |
178 | 27 register(); |
0 | 28 this.loc = loc; |
29 } | |
30 | |
31 Initializer syntaxCopy() | |
32 { | |
79 | 33 return this; |
0 | 34 } |
35 | |
36 Initializer semantic(Scope sc, Type t) | |
37 { | |
79 | 38 return this; |
0 | 39 } |
40 | |
41 Type inferType(Scope sc) | |
42 { | |
79 | 43 error(loc, "cannot infer type from initializer"); |
44 return Type.terror; | |
0 | 45 } |
46 | |
79 | 47 abstract Expression toExpression(); |
48 | |
0 | 49 abstract void toCBuffer(OutBuffer buf, HdrGenState* hgs); |
79 | 50 |
0 | 51 string toChars() |
52 { | |
79 | 53 OutBuffer buf; |
54 HdrGenState hgs; | |
55 | |
56 buf = new OutBuffer(); | |
57 toCBuffer(buf, &hgs); | |
58 return buf.toChars(); | |
59 } | |
60 | |
61 static Initializers arraySyntaxCopy(Initializers ai) | |
62 { | |
63 Initializers a = null; | |
64 | |
65 if (ai) | |
66 { | |
67 a = new Initializers(); | |
68 a.setDim(ai.dim); | |
69 for (int i = 0; i < a.dim; i++) | |
127
9ee9b55452cb
Identifiers, Initializers -> Vector
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents:
114
diff
changeset
|
70 { Initializer e = ai[i]; |
79 | 71 |
72 e = e.syntaxCopy(); | |
127
9ee9b55452cb
Identifiers, Initializers -> Vector
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents:
114
diff
changeset
|
73 a[i] = e; |
79 | 74 } |
75 } | |
76 return a; | |
77 } | |
78 | |
79 dt_t* toDt() | |
80 { | |
0 | 81 assert(false); |
82 } | |
83 | |
79 | 84 VoidInitializer isVoidInitializer() { return null; } |
0 | 85 |
86 StructInitializer isStructInitializer() { return null; } | |
87 | |
88 ArrayInitializer isArrayInitializer() { return null; } | |
89 | |
90 ExpInitializer isExpInitializer() { return null; } | |
91 } |