Mercurial > projects > ldc
annotate dmd/init.h @ 1585:29b0f2d11c92
Updated C binding to be more up to date with LLVM.
author | tomas@localhost.localdomain |
---|---|
date | Thu, 22 Oct 2009 13:30:30 +0200 |
parents | 1860414bf3b7 |
children |
rev | line source |
---|---|
1 | 1 |
2 // Compiler implementation of the D programming language | |
3 // Copyright (c) 1999-2007 by Digital Mars | |
4 // All Rights Reserved | |
5 // written by Walter Bright | |
6 // http://www.digitalmars.com | |
7 // License for redistribution is by either the Artistic License | |
8 // in artistic.txt, or the GNU General Public License in gnu.txt. | |
9 // See the included readme.txt for details. | |
10 | |
11 #ifndef INIT_H | |
12 #define INIT_H | |
13 | |
14 #include "root.h" | |
15 | |
16 #include "mars.h" | |
17 #include "arraytypes.h" | |
18 | |
19 struct Identifier; | |
20 struct Expression; | |
21 struct Scope; | |
22 struct Type; | |
23 struct dt_t; | |
24 struct AggregateDeclaration; | |
25 struct VoidInitializer; | |
19 | 26 struct StructInitializer; |
1 | 27 struct ArrayInitializer; |
28 struct ExpInitializer; | |
29 #ifdef _DH | |
30 struct HdrGenState; | |
31 #endif | |
32 | |
33 struct Initializer : Object | |
34 { | |
35 Loc loc; | |
36 | |
37 Initializer(Loc loc); | |
38 virtual Initializer *syntaxCopy(); | |
39 virtual Initializer *semantic(Scope *sc, Type *t); | |
40 virtual Type *inferType(Scope *sc); | |
41 virtual Expression *toExpression() = 0; | |
42 virtual void toCBuffer(OutBuffer *buf, HdrGenState *hgs) = 0; | |
43 char *toChars(); | |
44 | |
45 static Initializers *arraySyntaxCopy(Initializers *ai); | |
46 | |
1146
1860414bf3b7
* Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents:
1133
diff
changeset
|
47 #if IN_DMD |
1 | 48 virtual dt_t *toDt(); |
1146
1860414bf3b7
* Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents:
1133
diff
changeset
|
49 #endif |
1 | 50 |
51 virtual VoidInitializer *isVoidInitializer() { return NULL; } | |
19 | 52 virtual StructInitializer *isStructInitializer() { return NULL; } |
1 | 53 virtual ArrayInitializer *isArrayInitializer() { return NULL; } |
54 virtual ExpInitializer *isExpInitializer() { return NULL; } | |
55 }; | |
56 | |
57 struct VoidInitializer : Initializer | |
58 { | |
59 Type *type; // type that this will initialize to | |
60 | |
61 VoidInitializer(Loc loc); | |
62 Initializer *syntaxCopy(); | |
63 Initializer *semantic(Scope *sc, Type *t); | |
64 Expression *toExpression(); | |
65 void toCBuffer(OutBuffer *buf, HdrGenState *hgs); | |
66 | |
1146
1860414bf3b7
* Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents:
1133
diff
changeset
|
67 #if IN_DMD |
1 | 68 dt_t *toDt(); |
1146
1860414bf3b7
* Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents:
1133
diff
changeset
|
69 #endif |
1 | 70 |
71 virtual VoidInitializer *isVoidInitializer() { return this; } | |
72 }; | |
73 | |
74 struct StructInitializer : Initializer | |
75 { | |
76 Identifiers field; // of Identifier *'s | |
77 Initializers value; // parallel array of Initializer *'s | |
78 | |
79 Array vars; // parallel array of VarDeclaration *'s | |
80 AggregateDeclaration *ad; // which aggregate this is for | |
81 | |
82 StructInitializer(Loc loc); | |
83 Initializer *syntaxCopy(); | |
84 void addInit(Identifier *field, Initializer *value); | |
85 Initializer *semantic(Scope *sc, Type *t); | |
86 Expression *toExpression(); | |
87 void toCBuffer(OutBuffer *buf, HdrGenState *hgs); | |
88 | |
1146
1860414bf3b7
* Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents:
1133
diff
changeset
|
89 #if IN_DMD |
1 | 90 dt_t *toDt(); |
1146
1860414bf3b7
* Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents:
1133
diff
changeset
|
91 #endif |
1 | 92 |
1133
eeb8b95ea92e
Cleanup DMD 1.041 merge.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents:
19
diff
changeset
|
93 StructInitializer *isStructInitializer() { return this; } |
1 | 94 }; |
95 | |
96 struct ArrayInitializer : Initializer | |
97 { | |
98 Expressions index; // indices | |
99 Initializers value; // of Initializer *'s | |
100 unsigned dim; // length of array being initialized | |
101 Type *type; // type that array will be used to initialize | |
102 int sem; // !=0 if semantic() is run | |
103 | |
104 ArrayInitializer(Loc loc); | |
105 Initializer *syntaxCopy(); | |
106 void addInit(Expression *index, Initializer *value); | |
107 Initializer *semantic(Scope *sc, Type *t); | |
108 Type *inferType(Scope *sc); | |
109 Expression *toExpression(); | |
110 Initializer *toAssocArrayInitializer(); | |
111 void toCBuffer(OutBuffer *buf, HdrGenState *hgs); | |
112 | |
1146
1860414bf3b7
* Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents:
1133
diff
changeset
|
113 #if IN_DMD |
1 | 114 dt_t *toDt(); |
115 dt_t *toDtBit(); // for bit arrays | |
1146
1860414bf3b7
* Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents:
1133
diff
changeset
|
116 #endif |
1 | 117 |
118 ArrayInitializer *isArrayInitializer() { return this; } | |
119 }; | |
120 | |
121 struct ExpInitializer : Initializer | |
122 { | |
123 Expression *exp; | |
124 | |
125 ExpInitializer(Loc loc, Expression *exp); | |
126 Initializer *syntaxCopy(); | |
127 Initializer *semantic(Scope *sc, Type *t); | |
128 Type *inferType(Scope *sc); | |
129 Expression *toExpression(); | |
130 void toCBuffer(OutBuffer *buf, HdrGenState *hgs); | |
131 | |
1146
1860414bf3b7
* Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents:
1133
diff
changeset
|
132 #if IN_DMD |
1 | 133 dt_t *toDt(); |
1146
1860414bf3b7
* Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents:
1133
diff
changeset
|
134 #endif |
1 | 135 |
136 virtual ExpInitializer *isExpInitializer() { return this; } | |
137 }; | |
138 | |
139 #endif |