annotate dmd/dsymbol.h @ 1351:8d501abecd24

Initial (but disabled) fix for ticket #294 , the actual part that fixes the bug is in a #if 0 block as I'm afraid it will cause regressions. I'm most likely not going to be around tonight, and maybe not tomorrow as well, so I'm pushing it in case someone wants to run some serious testing/investigate the problem noted in llvmhelpers.cpp : realignOffset .
author Tomas Lindquist Olsen <tomas.l.olsen gmail com>
date Thu, 14 May 2009 17:20:17 +0200
parents dbe4af57b240
children 46f6365a50d7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
1
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
2 // Compiler implementation of the D programming language
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 173
diff changeset
3 // Copyright (c) 1999-2008 by Digital Mars
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
4 // All Rights Reserved
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
5 // written by Walter Bright
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
6 // http://www.digitalmars.com
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
7 // License for redistribution is by either the Artistic License
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
8 // in artistic.txt, or the GNU General Public License in gnu.txt.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
9 // See the included readme.txt for details.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
10
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
11 #ifndef DMD_DSYMBOL_H
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
12 #define DMD_DSYMBOL_H
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
13
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
14 #ifdef __DMC__
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
15 #pragma once
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
16 #endif /* __DMC__ */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
17
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
18 #include "root.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
19 #include "stringtable.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
20
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
21 #include "mars.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
22 #include "arraytypes.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
23
173
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents: 159
diff changeset
24 // llvm
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
25 #include "../ir/irdsymbol.h"
173
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents: 159
diff changeset
26
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
27 struct Identifier;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
28 struct Scope;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
29 struct DsymbolTable;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
30 struct Declaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
31 struct TupleDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
32 struct TypedefDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
33 struct AliasDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
34 struct AggregateDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
35 struct EnumDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
36 struct ClassDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
37 struct InterfaceDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
38 struct StructDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
39 struct UnionDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
40 struct FuncDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
41 struct FuncAliasDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
42 struct FuncLiteralDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
43 struct CtorDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
44 struct DtorDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
45 struct StaticCtorDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
46 struct StaticDtorDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
47 struct InvariantDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
48 struct UnitTestDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
49 struct NewDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
50 struct VarDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
51 struct AttribDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
52 struct Package;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
53 struct Module;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
54 struct Import;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
55 struct Type;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
56 struct TypeTuple;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
57 struct WithStatement;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
58 struct LabelDsymbol;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
59 struct ScopeDsymbol;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
60 struct TemplateDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
61 struct TemplateInstance;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
62 struct TemplateMixin;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
63 struct EnumMember;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
64 struct ScopeDsymbol;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
65 struct WithScopeSymbol;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
66 struct ArrayScopeSymbol;
913
29c0d1194033 Fix #198 and #199 by making CTFE on static struct initializers work.
Christian Kamm <kamm incasoftware de>
parents: 443
diff changeset
67 struct StaticStructInitDeclaration;
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
68 struct Expression;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
69 struct DeleteDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
70 struct HdrGenState;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
71 struct TypeInfoDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
72 struct ClassInfoDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
73
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
74 #if IN_DMD
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
75 struct Symbol;
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
76 #endif
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
77
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
78 #if IN_GCC
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
79 union tree_node;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
80 typedef union tree_node TYPE;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
81 #else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
82 struct TYPE;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
83 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
84
173
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents: 159
diff changeset
85 // llvm
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
86 #if IN_LLVM
1147
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
87 struct Ir;
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
88 struct IrSymbol;
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
89 namespace llvm
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
90 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
91 class Value;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
92 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
93 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
94
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
95 enum PROT
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
96 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
97 PROTundefined,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
98 PROTnone, // no access
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
99 PROTprivate,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
100 PROTpackage,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
101 PROTprotected,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
102 PROTpublic,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
103 PROTexport,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
104 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
105
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
106
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
107 struct Dsymbol : Object
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
108 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
109 Identifier *ident;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
110 Identifier *c_ident;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
111 Dsymbol *parent;
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
112 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
113 Symbol *csym; // symbol for code generator
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
114 Symbol *isym; // import version of csym
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
115 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
116 unsigned char *comment; // documentation comment for this Dsymbol
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
117 Loc loc; // where defined
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
118
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
119 Dsymbol();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
120 Dsymbol(Identifier *);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
121 char *toChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
122 char *toPrettyChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
123 char *locToChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
124 int equals(Object *o);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
125 int isAnonymous();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
126 void error(Loc loc, const char *format, ...);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
127 void error(const char *format, ...);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
128 void checkDeprecated(Loc loc, Scope *sc);
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 913
diff changeset
129 Module *getModule(); // module where declared
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 913
diff changeset
130 Module *getCompilationModule(); // possibly different for templates
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
131 Dsymbol *pastMixin();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
132 Dsymbol *toParent();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
133 Dsymbol *toParent2();
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 173
diff changeset
134 TemplateInstance *inTemplateInstance();
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
135
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
136 int dyncast() { return DYNCAST_DSYMBOL; } // kludge for template.isSymbol()
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
137
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
138 static Array *arraySyntaxCopy(Array *a);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
139
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 173
diff changeset
140 virtual const char *kind();
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
141 virtual Dsymbol *toAlias(); // resolve real symbol
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
142 virtual int addMember(Scope *sc, ScopeDsymbol *s, int memnum);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
143 virtual void semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
144 virtual void semantic2(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
145 virtual void semantic3(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
146 virtual void inlineScan();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
147 virtual Dsymbol *search(Loc loc, Identifier *ident, int flags);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
148 Dsymbol *searchX(Loc loc, Scope *sc, Identifier *id);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
149 virtual int overloadInsert(Dsymbol *s);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
150 #ifdef _DH
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
151 char *toHChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
152 virtual void toHBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
153 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
154 virtual void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
155 virtual void toDocBuffer(OutBuffer *buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
156 virtual unsigned size(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
157 virtual int isforwardRef();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
158 virtual void defineRef(Dsymbol *s);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
159 virtual AggregateDeclaration *isThis(); // is a 'this' required to access the member
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
160 virtual ClassDeclaration *isClassMember(); // are we a member of a class?
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
161 virtual int isExport(); // is Dsymbol exported?
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 173
diff changeset
162 virtual int isImportedSymbol(); // is Dsymbol imported?
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
163 virtual int isDeprecated(); // is Dsymbol deprecated?
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
164 virtual LabelDsymbol *isLabel(); // is this a LabelDsymbol?
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
165 virtual AggregateDeclaration *isMember(); // is this symbol a member of an AggregateDeclaration?
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
166 virtual Type *getType(); // is this a type?
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
167 virtual char *mangle();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
168 virtual int needThis(); // need a 'this' pointer?
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
169 virtual enum PROT prot();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
170 virtual Dsymbol *syntaxCopy(Dsymbol *s); // copy only syntax trees
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
171 virtual int oneMember(Dsymbol **ps);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
172 static int oneMembers(Array *members, Dsymbol **ps);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
173 virtual int hasPointers();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
174 virtual void addLocalClass(ClassDeclarations *) { }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
175 virtual void checkCtorConstInit() { }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
176
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
177 virtual void addComment(unsigned char *comment);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
178 virtual void emitComment(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
179 void emitDitto(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
180
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
181 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
182 // Backend
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
183
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
184 virtual Symbol *toSymbol(); // to backend symbol
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 173
diff changeset
185 virtual void toObjFile(int multiobj); // compile to .obj file
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
186 virtual int cvMember(unsigned char *p); // emit cv debug info for member
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
187
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
188 Symbol *toImport(); // to backend import symbol
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
189 static Symbol *toImport(Symbol *s); // to backend import symbol
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
190
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
191 Symbol *toSymbolX(const char *prefix, int sclass, TYPE *t, const char *suffix); // helper
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
192 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
193
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
194 // Eliminate need for dynamic_cast
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
195 virtual Package *isPackage() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
196 virtual Module *isModule() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
197 virtual EnumMember *isEnumMember() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
198 virtual TemplateDeclaration *isTemplateDeclaration() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
199 virtual TemplateInstance *isTemplateInstance() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
200 virtual TemplateMixin *isTemplateMixin() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
201 virtual Declaration *isDeclaration() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
202 virtual TupleDeclaration *isTupleDeclaration() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
203 virtual TypedefDeclaration *isTypedefDeclaration() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
204 virtual AliasDeclaration *isAliasDeclaration() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
205 virtual AggregateDeclaration *isAggregateDeclaration() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
206 virtual FuncDeclaration *isFuncDeclaration() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
207 virtual FuncAliasDeclaration *isFuncAliasDeclaration() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
208 virtual FuncLiteralDeclaration *isFuncLiteralDeclaration() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
209 virtual CtorDeclaration *isCtorDeclaration() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
210 virtual DtorDeclaration *isDtorDeclaration() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
211 virtual StaticCtorDeclaration *isStaticCtorDeclaration() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
212 virtual StaticDtorDeclaration *isStaticDtorDeclaration() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
213 virtual InvariantDeclaration *isInvariantDeclaration() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
214 virtual UnitTestDeclaration *isUnitTestDeclaration() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
215 virtual NewDeclaration *isNewDeclaration() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
216 virtual VarDeclaration *isVarDeclaration() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
217 virtual ClassDeclaration *isClassDeclaration() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
218 virtual StructDeclaration *isStructDeclaration() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
219 virtual UnionDeclaration *isUnionDeclaration() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
220 virtual InterfaceDeclaration *isInterfaceDeclaration() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
221 virtual ScopeDsymbol *isScopeDsymbol() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
222 virtual WithScopeSymbol *isWithScopeSymbol() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
223 virtual ArrayScopeSymbol *isArrayScopeSymbol() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
224 virtual Import *isImport() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
225 virtual EnumDeclaration *isEnumDeclaration() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
226 #ifdef _DH
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
227 virtual DeleteDeclaration *isDeleteDeclaration() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
228 #endif
913
29c0d1194033 Fix #198 and #199 by making CTFE on static struct initializers work.
Christian Kamm <kamm incasoftware de>
parents: 443
diff changeset
229 virtual StaticStructInitDeclaration *isStaticStructInitDeclaration() { return NULL; }
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
230 virtual AttribDeclaration *isAttribDeclaration() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
231 virtual TypeInfoDeclaration* isTypeInfoDeclaration() { return NULL; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
232 virtual ClassInfoDeclaration* isClassInfoDeclaration() { return NULL; }
443
44f08170f4ef Removed tango from the repository and instead added a runtime dir with the files needed to patch and build tango from svn.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 336
diff changeset
233
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
234 #if IN_LLVM
1147
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
235 /// Codegen traversal
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
236 virtual void codegen(Ir* ir);
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
237
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
238 // llvm stuff
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
239 int llvmInternal;
443
44f08170f4ef Removed tango from the repository and instead added a runtime dir with the files needed to patch and build tango from svn.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 336
diff changeset
240
173
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents: 159
diff changeset
241 IrDsymbol ir;
1147
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
242 IrSymbol* irsym;
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
243 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
244 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
245
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
246 // Dsymbol that generates a scope
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
247
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
248 struct ScopeDsymbol : Dsymbol
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
249 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
250 Array *members; // all Dsymbol's in this scope
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
251 DsymbolTable *symtab; // members[] sorted into table
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
252
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
253 Array *imports; // imported ScopeDsymbol's
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
254 unsigned char *prots; // PROT for each import
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
255
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
256 ScopeDsymbol();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
257 ScopeDsymbol(Identifier *id);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
258 Dsymbol *syntaxCopy(Dsymbol *s);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
259 Dsymbol *search(Loc loc, Identifier *ident, int flags);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
260 void importScope(ScopeDsymbol *s, enum PROT protection);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
261 int isforwardRef();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
262 void defineRef(Dsymbol *s);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
263 static void multiplyDefined(Loc loc, Dsymbol *s1, Dsymbol *s2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
264 Dsymbol *nameCollision(Dsymbol *s);
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 173
diff changeset
265 const char *kind();
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
266
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
267 void emitMemberComments(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
268
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
269 ScopeDsymbol *isScopeDsymbol() { return this; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
270 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
271
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
272 // With statement scope
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
273
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
274 struct WithScopeSymbol : ScopeDsymbol
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
275 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
276 WithStatement *withstate;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
277
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
278 WithScopeSymbol(WithStatement *withstate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
279 Dsymbol *search(Loc loc, Identifier *ident, int flags);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
280
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
281 WithScopeSymbol *isWithScopeSymbol() { return this; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
282 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
283
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
284 // Array Index/Slice scope
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
285
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
286 struct ArrayScopeSymbol : ScopeDsymbol
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
287 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
288 Expression *exp; // IndexExp or SliceExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
289 TypeTuple *type; // for tuple[length]
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
290 TupleDeclaration *td; // for tuples of objects
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
291
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
292 ArrayScopeSymbol(Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
293 ArrayScopeSymbol(TypeTuple *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
294 ArrayScopeSymbol(TupleDeclaration *td);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
295 Dsymbol *search(Loc loc, Identifier *ident, int flags);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
296
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
297 ArrayScopeSymbol *isArrayScopeSymbol() { return this; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
298 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
299
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
300 // Table of Dsymbol's
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
301
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
302 struct DsymbolTable : Object
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
303 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
304 StringTable *tab;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
305
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
306 DsymbolTable();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
307 ~DsymbolTable();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
308
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
309 // Look up Identifier. Return Dsymbol if found, NULL if not.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
310 Dsymbol *lookup(Identifier *ident);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
311
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
312 // Insert Dsymbol in table. Return NULL if already there.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
313 Dsymbol *insert(Dsymbol *s);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
314
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
315 // Look for Dsymbol in table. If there, return it. If not, insert s and return that.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
316 Dsymbol *update(Dsymbol *s);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
317 Dsymbol *insert(Identifier *ident, Dsymbol *s); // when ident and s are not the same
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
318 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
319
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
320 #endif /* DMD_DSYMBOL_H */