annotate dmd/template.h @ 650:aa6a0b7968f7

Added test case for bug #100 Removed dubious check for not emitting static private global in other modules without access. This should be handled properly somewhere else, it's causing unresolved global errors for stuff that should work (in MiniD)
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Sun, 05 Oct 2008 17:28:15 +0200
parents d4e95db0e62b
children eef8ac26c66c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
1
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
2 // Compiler implementation of the D programming language
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
3 // Copyright (c) 1999-2006 by Digital Mars
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
4 // All Rights Reserved
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
5 // written by Walter Bright
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
6 // http://www.digitalmars.com
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
7 // License for redistribution is by either the Artistic License
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
8 // in artistic.txt, or the GNU General Public License in gnu.txt.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
9 // See the included readme.txt for details.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
10
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
11 #ifndef DMD_TEMPLATE_H
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
12 #define DMD_TEMPLATE_H
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
13
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
14 #ifdef __DMC__
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
15 #pragma once
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
16 #endif /* __DMC__ */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
17
527
cecfee2d01a8 Added support for overloaded intrinsics.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 336
diff changeset
18 #include <string>
cecfee2d01a8 Added support for overloaded intrinsics.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 336
diff changeset
19
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
20 #include "root.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
21 #include "arraytypes.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
22 #include "dsymbol.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
23 #include "mtype.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
24
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
25
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
26 struct OutBuffer;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
27 struct Identifier;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
28 struct TemplateInstance;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
29 struct TemplateParameter;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
30 struct TemplateTypeParameter;
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 321
diff changeset
31 struct TemplateThisParameter;
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
32 struct TemplateValueParameter;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
33 struct TemplateAliasParameter;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
34 struct TemplateTupleParameter;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
35 struct Type;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
36 struct TypeTypeof;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
37 struct Scope;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
38 struct Expression;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
39 struct AliasDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
40 struct FuncDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
41 struct HdrGenState;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
42 enum MATCH;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
43
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
44 struct Tuple : Object
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
45 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
46 Objects objects;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
47
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
48 int dyncast() { return DYNCAST_TUPLE; } // kludge for template.isType()
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
49 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
50
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
51
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
52 struct TemplateDeclaration : ScopeDsymbol
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
53 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
54 TemplateParameters *parameters; // array of TemplateParameter's
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
55
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
56 TemplateParameters *origParameters; // originals for Ddoc
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
57
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 321
diff changeset
58 Array instances; // array of TemplateInstance's
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
59
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
60 TemplateDeclaration *overnext; // next overloaded TemplateDeclaration
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
61 TemplateDeclaration *overroot; // first in overnext list
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
62
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
63 Scope *scope;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
64 Dsymbol *onemember; // if !=NULL then one member of this template
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
65
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
66 TemplateDeclaration(Loc loc, Identifier *id, TemplateParameters *parameters, Array *decldefs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
67 Dsymbol *syntaxCopy(Dsymbol *);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
68 void semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
69 int overloadInsert(Dsymbol *s);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
70 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 321
diff changeset
71 const char *kind();
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
72 char *toChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
73
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
74 void emitComment(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
75 // void toDocBuffer(OutBuffer *buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
76
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
77 MATCH matchWithInstance(TemplateInstance *ti, Objects *atypes, int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
78 int leastAsSpecialized(TemplateDeclaration *td2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
79
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
80 MATCH deduceFunctionTemplateMatch(Objects *targsi, Expressions *fargs, Objects *dedargs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
81 FuncDeclaration *deduceFunctionTemplate(Scope *sc, Loc loc, Objects *targsi, Expressions *fargs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
82 void declareParameter(Scope *sc, TemplateParameter *tp, Object *o);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
83
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
84 TemplateDeclaration *isTemplateDeclaration() { return this; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
85
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
86 TemplateTupleParameter *isVariadic();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
87 int isOverloadable();
527
cecfee2d01a8 Added support for overloaded intrinsics.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 336
diff changeset
88
cecfee2d01a8 Added support for overloaded intrinsics.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 336
diff changeset
89 // LLVMDC
cecfee2d01a8 Added support for overloaded intrinsics.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 336
diff changeset
90 std::string intrinsicName;
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
91 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
92
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
93 struct TemplateParameter
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
94 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
95 /* For type-parameter:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
96 * template Foo(ident) // specType is set to NULL
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
97 * template Foo(ident : specType)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
98 * For value-parameter:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
99 * template Foo(valType ident) // specValue is set to NULL
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
100 * template Foo(valType ident : specValue)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
101 * For alias-parameter:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
102 * template Foo(alias ident)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
103 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
104
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
105 Loc loc;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
106 Identifier *ident;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
107
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
108 Declaration *sparam;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
109
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
110 TemplateParameter(Loc loc, Identifier *ident);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
111
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
112 virtual TemplateTypeParameter *isTemplateTypeParameter();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
113 virtual TemplateValueParameter *isTemplateValueParameter();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
114 virtual TemplateAliasParameter *isTemplateAliasParameter();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
115 virtual TemplateTupleParameter *isTemplateTupleParameter();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
116
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
117 virtual TemplateParameter *syntaxCopy() = 0;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
118 virtual void declareParameter(Scope *sc) = 0;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
119 virtual void semantic(Scope *) = 0;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
120 virtual void print(Object *oarg, Object *oded) = 0;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
121 virtual void toCBuffer(OutBuffer *buf, HdrGenState *hgs) = 0;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
122 virtual Object *specialization() = 0;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
123 virtual Object *defaultArg(Scope *sc) = 0;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
124
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
125 /* If TemplateParameter's match as far as overloading goes.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
126 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
127 virtual int overloadMatch(TemplateParameter *) = 0;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
128
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
129 /* Match actual argument against parameter.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
130 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
131 virtual MATCH matchArg(Scope *sc, Objects *tiargs, int i, TemplateParameters *parameters, Objects *dedtypes, Declaration **psparam) = 0;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
132
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
133 /* Create dummy argument based on parameter.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
134 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
135 virtual void *dummyArg() = 0;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
136 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
137
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
138 struct TemplateTypeParameter : TemplateParameter
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
139 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
140 /* Syntax:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
141 * ident : specType = defaultType
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
142 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
143 Type *specType; // type parameter: if !=NULL, this is the type specialization
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
144 Type *defaultType;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
145
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
146 TemplateTypeParameter(Loc loc, Identifier *ident, Type *specType, Type *defaultType);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
147
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
148 TemplateTypeParameter *isTemplateTypeParameter();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
149 TemplateParameter *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
150 void declareParameter(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
151 void semantic(Scope *);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
152 void print(Object *oarg, Object *oded);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
153 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
154 Object *specialization();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
155 Object *defaultArg(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
156 int overloadMatch(TemplateParameter *);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
157 MATCH matchArg(Scope *sc, Objects *tiargs, int i, TemplateParameters *parameters, Objects *dedtypes, Declaration **psparam);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
158 void *dummyArg();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
159 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
160
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 321
diff changeset
161 #if DMDV2
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 321
diff changeset
162 struct TemplateThisParameter : TemplateTypeParameter
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 321
diff changeset
163 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 321
diff changeset
164 /* Syntax:
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 321
diff changeset
165 * this ident : specType = defaultType
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 321
diff changeset
166 */
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 321
diff changeset
167 Type *specType; // type parameter: if !=NULL, this is the type specialization
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 321
diff changeset
168 Type *defaultType;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 321
diff changeset
169
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 321
diff changeset
170 TemplateThisParameter(Loc loc, Identifier *ident, Type *specType, Type *defaultType);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 321
diff changeset
171
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 321
diff changeset
172 TemplateThisParameter *isTemplateThisParameter();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 321
diff changeset
173 TemplateParameter *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 321
diff changeset
174 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 321
diff changeset
175 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 321
diff changeset
176 #endif
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 321
diff changeset
177
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
178 struct TemplateValueParameter : TemplateParameter
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
179 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
180 /* Syntax:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
181 * valType ident : specValue = defaultValue
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
182 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
183
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
184 Type *valType;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
185 Expression *specValue;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
186 Expression *defaultValue;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
187
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
188 static Expression *edummy;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
189
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
190 TemplateValueParameter(Loc loc, Identifier *ident, Type *valType, Expression *specValue, Expression *defaultValue);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
191
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
192 TemplateValueParameter *isTemplateValueParameter();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
193 TemplateParameter *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
194 void declareParameter(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
195 void semantic(Scope *);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
196 void print(Object *oarg, Object *oded);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
197 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
198 Object *specialization();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
199 Object *defaultArg(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
200 int overloadMatch(TemplateParameter *);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
201 MATCH matchArg(Scope *sc, Objects *tiargs, int i, TemplateParameters *parameters, Objects *dedtypes, Declaration **psparam);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
202 void *dummyArg();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
203 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
204
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
205 struct TemplateAliasParameter : TemplateParameter
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
206 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
207 /* Syntax:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
208 * ident : specAlias = defaultAlias
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
209 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
210
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
211 Type *specAliasT;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
212 Dsymbol *specAlias;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
213
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
214 Type *defaultAlias;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
215
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
216 static Dsymbol *sdummy;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
217
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
218 TemplateAliasParameter(Loc loc, Identifier *ident, Type *specAliasT, Type *defaultAlias);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
219
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
220 TemplateAliasParameter *isTemplateAliasParameter();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
221 TemplateParameter *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
222 void declareParameter(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
223 void semantic(Scope *);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
224 void print(Object *oarg, Object *oded);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
225 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
226 Object *specialization();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
227 Object *defaultArg(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
228 int overloadMatch(TemplateParameter *);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
229 MATCH matchArg(Scope *sc, Objects *tiargs, int i, TemplateParameters *parameters, Objects *dedtypes, Declaration **psparam);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
230 void *dummyArg();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
231 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
232
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
233 struct TemplateTupleParameter : TemplateParameter
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
234 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
235 /* Syntax:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
236 * ident ...
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
237 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
238
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
239 TemplateTupleParameter(Loc loc, Identifier *ident);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
240
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
241 TemplateTupleParameter *isTemplateTupleParameter();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
242 TemplateParameter *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
243 void declareParameter(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
244 void semantic(Scope *);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
245 void print(Object *oarg, Object *oded);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
246 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
247 Object *specialization();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
248 Object *defaultArg(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
249 int overloadMatch(TemplateParameter *);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
250 MATCH matchArg(Scope *sc, Objects *tiargs, int i, TemplateParameters *parameters, Objects *dedtypes, Declaration **psparam);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
251 void *dummyArg();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
252 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
253
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
254 struct TemplateInstance : ScopeDsymbol
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
255 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
256 /* Given:
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
257 * foo!(args) =>
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
258 * name = foo
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
259 * tiargs = args
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
260 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
261 Identifier *name;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
262 //Array idents;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
263 Objects *tiargs; // Array of Types/Expressions of template
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
264 // instance arguments [int*, char, 10*10]
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
265
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
266 Objects tdtypes; // Array of Types/Expressions corresponding
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
267 // to TemplateDeclaration.parameters
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
268 // [int, char, 100]
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
269
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
270 TemplateDeclaration *tempdecl; // referenced by foo.bar.abc
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
271 TemplateInstance *inst; // refer to existing instance
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
272 ScopeDsymbol *argsym; // argument symbol table
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
273 AliasDeclaration *aliasdecl; // !=NULL if instance is an alias for its
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
274 // sole member
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
275 WithScopeSymbol *withsym; // if a member of a with statement
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
276 int semanticdone; // has semantic() been done?
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 321
diff changeset
277 int semantictiargsdone; // has semanticTiargs() been done?
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
278 int nest; // for recursion detection
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
279 int havetempdecl; // 1 if used second constructor
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
280 Dsymbol *isnested; // if referencing local symbols, this is the context
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
281 int errors; // 1 if compiled with errors
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
282 #ifdef IN_GCC
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
283 /* On some targets, it is necessary to know whether a symbol
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
284 will be emitted in the output or not before the symbol
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
285 is used. This can be different from getModule(). */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
286 Module * objFileModule;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
287 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
288
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
289 TemplateInstance(Loc loc, Identifier *temp_id);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
290 TemplateInstance(Loc loc, TemplateDeclaration *tempdecl, Objects *tiargs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
291 static Objects *arraySyntaxCopy(Objects *objs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
292 Dsymbol *syntaxCopy(Dsymbol *);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
293 void semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
294 void semantic2(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
295 void semantic3(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
296 void inlineScan();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
297 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
298 Dsymbol *toAlias(); // resolve real symbol
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 321
diff changeset
299 const char *kind();
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
300 int oneMember(Dsymbol **ps);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
301 char *toChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
302 char *mangle();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
303
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 321
diff changeset
304 void toObjFile(int multiobj); // compile to .obj file
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
305
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
306 // Internal
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
307 static void semanticTiargs(Loc loc, Scope *sc, Objects *tiargs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
308 void semanticTiargs(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
309 TemplateDeclaration *findTemplateDeclaration(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
310 TemplateDeclaration *findBestMatch(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
311 void declareParameters(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
312 int isNested(Objects *tiargs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
313 Identifier *genIdent();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
314
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
315 TemplateInstance *isTemplateInstance() { return this; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
316 AliasDeclaration *isAliasDeclaration();
561
d4e95db0e62b Introducing template instantiation traces for static asserts and errors within templates.
Christian Kamm <kamm incasoftware de>
parents: 527
diff changeset
317
d4e95db0e62b Introducing template instantiation traces for static asserts and errors within templates.
Christian Kamm <kamm incasoftware de>
parents: 527
diff changeset
318 // LLVMDC
d4e95db0e62b Introducing template instantiation traces for static asserts and errors within templates.
Christian Kamm <kamm incasoftware de>
parents: 527
diff changeset
319 TemplateInstance *tinst; // enclosing template instance
d4e95db0e62b Introducing template instantiation traces for static asserts and errors within templates.
Christian Kamm <kamm incasoftware de>
parents: 527
diff changeset
320 void printInstantiationTrace();
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
321 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
322
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
323 struct TemplateMixin : TemplateInstance
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
324 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
325 Array *idents;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
326 Type *tqual;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
327
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
328 Scope *scope; // for forward referencing
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
329
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
330 TemplateMixin(Loc loc, Identifier *ident, Type *tqual, Array *idents, Objects *tiargs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
331 Dsymbol *syntaxCopy(Dsymbol *s);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
332 void semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
333 void semantic2(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
334 void semantic3(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
335 void inlineScan();
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 321
diff changeset
336 const char *kind();
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
337 int oneMember(Dsymbol **ps);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
338 int hasPointers();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
339 char *toChars();
321
571959608194 [svn r342] Fix DMD bug 2206.
ChristianK
parents: 159
diff changeset
340 char *mangle();
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
341 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
342
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 321
diff changeset
343 void toObjFile(int multiobj); // compile to .obj file
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
344
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
345 TemplateMixin *isTemplateMixin() { return this; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
346 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
347
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
348 Expression *isExpression(Object *o);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
349 Dsymbol *isDsymbol(Object *o);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
350 Type *isType(Object *o);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
351 Tuple *isTuple(Object *o);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
352 Type *getType(Object *o);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
353 Dsymbol *getDsymbol(Object *o);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
354
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
355 void ObjectToCBuffer(OutBuffer *buf, HdrGenState *hgs, Object *oarg);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
356
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 130
diff changeset
357 #endif /* DMD_TEMPLATE_H */