annotate gcc/d/dmd/dsymbol.h @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 1830386684a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
145
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
1
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
2 /* Compiler implementation of the D programming language
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
3 * Copyright (C) 1999-2019 by The D Language Foundation, All Rights Reserved
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
4 * written by Walter Bright
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
5 * http://www.digitalmars.com
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
6 * Distributed under the Boost Software License, Version 1.0.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
7 * http://www.boost.org/LICENSE_1_0.txt
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
8 * https://github.com/dlang/dmd/blob/master/src/dmd/dsymbol.h
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
9 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
10
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
11 #pragma once
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
12
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
13 #include "root/root.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
14 #include "root/stringtable.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
15
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
16 #include "globals.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
17 #include "arraytypes.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
18 #include "visitor.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
19
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
20 class Identifier;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
21 struct Scope;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
22 class DsymbolTable;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
23 class Declaration;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
24 class ThisDeclaration;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
25 class TypeInfoDeclaration;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
26 class TupleDeclaration;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
27 class AliasDeclaration;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
28 class AggregateDeclaration;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
29 class EnumDeclaration;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
30 class ClassDeclaration;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
31 class InterfaceDeclaration;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
32 class StructDeclaration;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
33 class UnionDeclaration;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
34 class FuncDeclaration;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
35 class FuncAliasDeclaration;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
36 class OverDeclaration;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
37 class FuncLiteralDeclaration;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
38 class CtorDeclaration;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
39 class PostBlitDeclaration;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
40 class DtorDeclaration;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
41 class StaticCtorDeclaration;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
42 class StaticDtorDeclaration;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
43 class SharedStaticCtorDeclaration;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
44 class SharedStaticDtorDeclaration;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
45 class InvariantDeclaration;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
46 class UnitTestDeclaration;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
47 class NewDeclaration;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
48 class VarDeclaration;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
49 class AttribDeclaration;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
50 class Package;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
51 class Module;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
52 class Import;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
53 class Type;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
54 class TypeTuple;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
55 class WithStatement;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
56 class LabelDsymbol;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
57 class ScopeDsymbol;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
58 class ForwardingScopeDsymbol;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
59 class TemplateDeclaration;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
60 class TemplateInstance;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
61 class TemplateMixin;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
62 class ForwardingAttribDeclaration;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
63 class Nspace;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
64 class EnumMember;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
65 class WithScopeSymbol;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
66 class ArrayScopeSymbol;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
67 class SymbolDeclaration;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
68 class Expression;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
69 class DeleteDeclaration;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
70 class OverloadSet;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
71 struct AA;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
72 #ifdef IN_GCC
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
73 typedef union tree_node Symbol;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
74 #else
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
75 struct Symbol;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
76 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
77
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
78 struct Ungag
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
79 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
80 unsigned oldgag;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
81
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
82 Ungag(unsigned old) : oldgag(old) {}
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
83 ~Ungag() { global.gag = oldgag; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
84 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
85
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
86 enum PROTKIND
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
87 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
88 PROTundefined,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
89 PROTnone, // no access
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
90 PROTprivate,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
91 PROTpackage,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
92 PROTprotected,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
93 PROTpublic,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
94 PROTexport
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
95 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
96
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
97 struct Prot
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
98 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
99 PROTKIND kind;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
100 Package *pkg;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
101
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
102 Prot();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
103 Prot(PROTKIND kind);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
104
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
105 bool isMoreRestrictiveThan(const Prot other) const;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
106 bool operator==(const Prot& other) const;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
107 bool isSubsetOf(const Prot& other) const;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
108 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
109
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
110 // in hdrgen.c
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
111 void protectionToBuffer(OutBuffer *buf, Prot prot);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
112 const char *protectionToChars(PROTKIND kind);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
113
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
114 /* State of symbol in winding its way through the passes of the compiler
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
115 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
116 enum PASS
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
117 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
118 PASSinit, // initial state
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
119 PASSsemantic, // semantic() started
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
120 PASSsemanticdone, // semantic() done
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
121 PASSsemantic2, // semantic2() started
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
122 PASSsemantic2done, // semantic2() done
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
123 PASSsemantic3, // semantic3() started
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
124 PASSsemantic3done, // semantic3() done
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
125 PASSinline, // inline started
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
126 PASSinlinedone, // inline done
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
127 PASSobj // toObjFile() run
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
128 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
129
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
130 /* Flags for symbol search
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
131 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
132 enum
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
133 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
134 IgnoreNone = 0x00, // default
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
135 IgnorePrivateImports = 0x01, // don't search private imports
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
136 IgnoreErrors = 0x02, // don't give error messages
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
137 IgnoreAmbiguous = 0x04, // return NULL if ambiguous
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
138 SearchLocalsOnly = 0x08, // only look at locals (don't search imports)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
139 SearchImportsOnly = 0x10, // only look in imports
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
140 SearchUnqualifiedModule = 0x20, // the module scope search is unqualified,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
141 // meaning don't search imports in that scope,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
142 // because qualified module searches search
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
143 // their imports
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
144 IgnoreSymbolVisibility = 0x80 // also find private and package protected symbols
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
145 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
146
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
147 typedef int (*Dsymbol_apply_ft_t)(Dsymbol *, void *);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
148
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
149 class Dsymbol : public RootObject
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
150 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
151 public:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
152 Identifier *ident;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
153 Dsymbol *parent;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
154 Symbol *csym; // symbol for code generator
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
155 Symbol *isym; // import version of csym
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
156 const utf8_t *comment; // documentation comment for this Dsymbol
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
157 Loc loc; // where defined
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
158 Scope *_scope; // !=NULL means context to use for semantic()
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
159 const utf8_t *prettystring;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
160 bool errors; // this symbol failed to pass semantic()
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
161 PASS semanticRun;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
162 DeprecatedDeclaration *depdecl; // customized deprecation message
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
163 UserAttributeDeclaration *userAttribDecl; // user defined attributes
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
164 UnitTestDeclaration *ddocUnittest; // !=NULL means there's a ddoc unittest associated with this symbol (only use this with ddoc)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
165
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
166 Dsymbol();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
167 Dsymbol(Identifier *);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
168 static Dsymbol *create(Identifier *);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
169 const char *toChars();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
170 virtual const char *toPrettyCharsHelper(); // helper to print fully qualified (template) arguments
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
171 Loc& getLoc();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
172 const char *locToChars();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
173 bool equals(RootObject *o);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
174 bool isAnonymous();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
175 void error(Loc loc, const char *format, ...);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
176 void error(const char *format, ...);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
177 void deprecation(Loc loc, const char *format, ...);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
178 void deprecation(const char *format, ...);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
179 void checkDeprecated(Loc loc, Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
180 Module *getModule();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
181 Module *getAccessModule();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
182 Dsymbol *pastMixin();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
183 Dsymbol *pastMixinAndNspace();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
184 Dsymbol *toParent();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
185 Dsymbol *toParent2();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
186 Dsymbol *toParent3();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
187 TemplateInstance *isInstantiated();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
188 TemplateInstance *isSpeculative();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
189 Ungag ungagSpeculative();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
190
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
191 // kludge for template.isSymbol()
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
192 int dyncast() const { return DYNCAST_DSYMBOL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
193
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
194 static Dsymbols *arraySyntaxCopy(Dsymbols *a);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
195
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
196 virtual Identifier *getIdent();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
197 virtual const char *toPrettyChars(bool QualifyTypes = false);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
198 virtual const char *kind() const;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
199 virtual Dsymbol *toAlias(); // resolve real symbol
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
200 virtual Dsymbol *toAlias2();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
201 virtual int apply(Dsymbol_apply_ft_t fp, void *param);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
202 virtual void addMember(Scope *sc, ScopeDsymbol *sds);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
203 virtual void setScope(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
204 virtual void importAll(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
205 virtual void semantic(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
206 virtual void semantic2(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
207 virtual void semantic3(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
208 virtual Dsymbol *search(const Loc &loc, Identifier *ident, int flags = IgnoreNone);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
209 Dsymbol *search_correct(Identifier *id);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
210 Dsymbol *searchX(Loc loc, Scope *sc, RootObject *id);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
211 virtual bool overloadInsert(Dsymbol *s);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
212 virtual d_uns64 size(Loc loc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
213 virtual bool isforwardRef();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
214 virtual AggregateDeclaration *isThis(); // is a 'this' required to access the member
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
215 virtual bool isExport() const; // is Dsymbol exported?
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
216 virtual bool isImportedSymbol() const; // is Dsymbol imported?
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
217 virtual bool isDeprecated(); // is Dsymbol deprecated?
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
218 virtual bool isOverloadable();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
219 virtual LabelDsymbol *isLabel(); // is this a LabelDsymbol?
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
220 AggregateDeclaration *isMember(); // is this a member of an AggregateDeclaration?
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
221 AggregateDeclaration *isMember2(); // is this a member of an AggregateDeclaration?
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
222 ClassDeclaration *isClassMember(); // is this a member of a ClassDeclaration?
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
223 virtual Type *getType(); // is this a type?
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
224 virtual bool needThis(); // need a 'this' pointer?
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
225 virtual Prot prot();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
226 virtual Dsymbol *syntaxCopy(Dsymbol *s); // copy only syntax trees
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
227 virtual bool oneMember(Dsymbol **ps, Identifier *ident);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
228 static bool oneMembers(Dsymbols *members, Dsymbol **ps, Identifier *ident);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
229 virtual void setFieldOffset(AggregateDeclaration *ad, unsigned *poffset, bool isunion);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
230 virtual bool hasPointers();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
231 virtual bool hasStaticCtorOrDtor();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
232 virtual void addLocalClass(ClassDeclarations *) { }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
233 virtual void checkCtorConstInit() { }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
234
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
235 virtual void addComment(const utf8_t *comment);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
236
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
237 bool inNonRoot();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
238
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
239 // Eliminate need for dynamic_cast
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
240 virtual Package *isPackage() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
241 virtual Module *isModule() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
242 virtual EnumMember *isEnumMember() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
243 virtual TemplateDeclaration *isTemplateDeclaration() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
244 virtual TemplateInstance *isTemplateInstance() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
245 virtual TemplateMixin *isTemplateMixin() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
246 virtual ForwardingAttribDeclaration *isForwardingAttribDeclaration() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
247 virtual Nspace *isNspace() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
248 virtual Declaration *isDeclaration() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
249 virtual StorageClassDeclaration *isStorageClassDeclaration(){ return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
250 virtual ThisDeclaration *isThisDeclaration() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
251 virtual TypeInfoDeclaration *isTypeInfoDeclaration() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
252 virtual TupleDeclaration *isTupleDeclaration() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
253 virtual AliasDeclaration *isAliasDeclaration() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
254 virtual AggregateDeclaration *isAggregateDeclaration() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
255 virtual FuncDeclaration *isFuncDeclaration() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
256 virtual FuncAliasDeclaration *isFuncAliasDeclaration() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
257 virtual OverDeclaration *isOverDeclaration() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
258 virtual FuncLiteralDeclaration *isFuncLiteralDeclaration() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
259 virtual CtorDeclaration *isCtorDeclaration() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
260 virtual PostBlitDeclaration *isPostBlitDeclaration() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
261 virtual DtorDeclaration *isDtorDeclaration() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
262 virtual StaticCtorDeclaration *isStaticCtorDeclaration() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
263 virtual StaticDtorDeclaration *isStaticDtorDeclaration() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
264 virtual SharedStaticCtorDeclaration *isSharedStaticCtorDeclaration() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
265 virtual SharedStaticDtorDeclaration *isSharedStaticDtorDeclaration() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
266 virtual InvariantDeclaration *isInvariantDeclaration() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
267 virtual UnitTestDeclaration *isUnitTestDeclaration() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
268 virtual NewDeclaration *isNewDeclaration() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
269 virtual VarDeclaration *isVarDeclaration() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
270 virtual ClassDeclaration *isClassDeclaration() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
271 virtual StructDeclaration *isStructDeclaration() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
272 virtual UnionDeclaration *isUnionDeclaration() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
273 virtual InterfaceDeclaration *isInterfaceDeclaration() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
274 virtual ScopeDsymbol *isScopeDsymbol() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
275 virtual ForwardingScopeDsymbol *isForwardingScopeDsymbol() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
276 virtual WithScopeSymbol *isWithScopeSymbol() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
277 virtual ArrayScopeSymbol *isArrayScopeSymbol() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
278 virtual Import *isImport() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
279 virtual EnumDeclaration *isEnumDeclaration() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
280 virtual DeleteDeclaration *isDeleteDeclaration() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
281 virtual SymbolDeclaration *isSymbolDeclaration() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
282 virtual AttribDeclaration *isAttribDeclaration() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
283 virtual AnonDeclaration *isAnonDeclaration() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
284 virtual OverloadSet *isOverloadSet() { return NULL; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
285 virtual void accept(Visitor *v) { v->visit(this); }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
286 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
287
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
288 // Dsymbol that generates a scope
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
289
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
290 class ScopeDsymbol : public Dsymbol
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
291 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
292 public:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
293 Dsymbols *members; // all Dsymbol's in this scope
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
294 DsymbolTable *symtab; // members[] sorted into table
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
295 unsigned endlinnum; // the linnumber of the statement after the scope (0 if unknown)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
296
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
297 private:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
298 Dsymbols *importedScopes; // imported Dsymbol's
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
299 PROTKIND *prots; // array of PROTKIND, one for each import
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
300
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
301 BitArray accessiblePackages, privateAccessiblePackages;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
302
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
303 public:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
304 ScopeDsymbol();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
305 ScopeDsymbol(Identifier *id);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
306 Dsymbol *syntaxCopy(Dsymbol *s);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
307 Dsymbol *search(const Loc &loc, Identifier *ident, int flags = SearchLocalsOnly);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
308 OverloadSet *mergeOverloadSet(Identifier *ident, OverloadSet *os, Dsymbol *s);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
309 virtual void importScope(Dsymbol *s, Prot protection);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
310 void addAccessiblePackage(Package *p, Prot protection);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
311 virtual bool isPackageAccessible(Package *p, Prot protection, int flags = 0);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
312 bool isforwardRef();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
313 static void multiplyDefined(Loc loc, Dsymbol *s1, Dsymbol *s2);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
314 const char *kind() const;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
315 FuncDeclaration *findGetMembers();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
316 virtual Dsymbol *symtabInsert(Dsymbol *s);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
317 virtual Dsymbol *symtabLookup(Dsymbol *s, Identifier *id);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
318 bool hasStaticCtorOrDtor();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
319
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
320 static size_t dim(Dsymbols *members);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
321 static Dsymbol *getNth(Dsymbols *members, size_t nth, size_t *pn = NULL);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
322
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
323 ScopeDsymbol *isScopeDsymbol() { return this; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
324 void semantic(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
325 void accept(Visitor *v) { v->visit(this); }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
326 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
327
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
328 // With statement scope
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
329
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
330 class WithScopeSymbol : public ScopeDsymbol
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
331 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
332 public:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
333 WithStatement *withstate;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
334
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
335 WithScopeSymbol(WithStatement *withstate);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
336 Dsymbol *search(const Loc &loc, Identifier *ident, int flags = SearchLocalsOnly);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
337
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
338 WithScopeSymbol *isWithScopeSymbol() { return this; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
339 void accept(Visitor *v) { v->visit(this); }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
340 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
341
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
342 // Array Index/Slice scope
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
343
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
344 class ArrayScopeSymbol : public ScopeDsymbol
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
345 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
346 public:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
347 Expression *exp; // IndexExp or SliceExp
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
348 TypeTuple *type; // for tuple[length]
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
349 TupleDeclaration *td; // for tuples of objects
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
350 Scope *sc;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
351
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
352 ArrayScopeSymbol(Scope *sc, Expression *e);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
353 ArrayScopeSymbol(Scope *sc, TypeTuple *t);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
354 ArrayScopeSymbol(Scope *sc, TupleDeclaration *td);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
355 Dsymbol *search(const Loc &loc, Identifier *ident, int flags = IgnoreNone);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
356
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
357 ArrayScopeSymbol *isArrayScopeSymbol() { return this; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
358 void accept(Visitor *v) { v->visit(this); }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
359 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
360
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
361 // Overload Sets
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
362
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
363 class OverloadSet : public Dsymbol
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
364 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
365 public:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
366 Dsymbols a; // array of Dsymbols
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
367
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
368 OverloadSet(Identifier *ident, OverloadSet *os = NULL);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
369 void push(Dsymbol *s);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
370 OverloadSet *isOverloadSet() { return this; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
371 const char *kind() const;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
372 void accept(Visitor *v) { v->visit(this); }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
373 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
374
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
375 // Forwarding ScopeDsymbol
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
376
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
377 class ForwardingScopeDsymbol : public ScopeDsymbol
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
378 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
379 ScopeDsymbol *forward;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
380
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
381 Dsymbol *symtabInsert(Dsymbol *s);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
382 Dsymbol *symtabLookup(Dsymbol *s, Identifier *id);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
383 void importScope(Dsymbol *s, Prot protection);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
384 void semantic(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
385 const char *kind() const;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
386
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
387 ForwardingScopeDsymbol *isForwardingScopeDsymbol() { return this; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
388 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
389
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
390 // Table of Dsymbol's
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
391
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
392 class DsymbolTable : public RootObject
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
393 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
394 public:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
395 AA *tab;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
396
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
397 DsymbolTable();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
398
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
399 // Look up Identifier. Return Dsymbol if found, NULL if not.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
400 Dsymbol *lookup(Identifier const * const ident);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
401
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
402 // Insert Dsymbol in table. Return NULL if already there.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
403 Dsymbol *insert(Dsymbol *s);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
404
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
405 // Look for Dsymbol in table. If there, return it. If not, insert s and return that.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
406 Dsymbol *update(Dsymbol *s);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
407 Dsymbol *insert(Identifier const * const ident, Dsymbol *s); // when ident and s are not the same
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
408 };