annotate gcc/d/dmd/attrib.h @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents
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/attrib.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 "dsymbol.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
14
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
15 class Expression;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
16 class Statement;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
17 class LabelDsymbol;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
18 class Initializer;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
19 class Module;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
20 class Condition;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
21 class StaticForeach;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
22
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
23 /**************************************************************/
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
24
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
25 class AttribDeclaration : public Dsymbol
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
26 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
27 public:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
28 Dsymbols *decl; // array of Dsymbol's
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
29
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
30 AttribDeclaration(Dsymbols *decl);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
31 virtual Dsymbols *include(Scope *sc, ScopeDsymbol *sds);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
32 int apply(Dsymbol_apply_ft_t fp, void *param);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
33 static Scope *createNewScope(Scope *sc,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
34 StorageClass newstc, LINK linkage, CPPMANGLE cppmangle, Prot protection,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
35 int explicitProtection, AlignDeclaration *aligndecl, PINLINE inlining);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
36 virtual Scope *newScope(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
37 void addMember(Scope *sc, ScopeDsymbol *sds);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
38 void setScope(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
39 void importAll(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
40 void semantic(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
41 void semantic2(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
42 void semantic3(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
43 void addComment(const utf8_t *comment);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
44 const char *kind() const;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
45 bool oneMember(Dsymbol **ps, Identifier *ident);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
46 void setFieldOffset(AggregateDeclaration *ad, unsigned *poffset, bool isunion);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
47 bool hasPointers();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
48 bool hasStaticCtorOrDtor();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
49 void checkCtorConstInit();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
50 void addLocalClass(ClassDeclarations *);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
51 AttribDeclaration *isAttribDeclaration() { return this; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
52
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
53 void accept(Visitor *v) { v->visit(this); }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
54 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
55
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
56 class StorageClassDeclaration : public AttribDeclaration
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
57 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
58 public:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
59 StorageClass stc;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
60
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
61 StorageClassDeclaration(StorageClass stc, Dsymbols *decl);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
62 Dsymbol *syntaxCopy(Dsymbol *s);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
63 Scope *newScope(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
64 bool oneMember(Dsymbol **ps, Identifier *ident);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
65 void addMember(Scope *sc, ScopeDsymbol *sds);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
66 StorageClassDeclaration *isStorageClassDeclaration() { return this; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
67
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
68 void accept(Visitor *v) { v->visit(this); }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
69 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
70
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
71 class DeprecatedDeclaration : public StorageClassDeclaration
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
72 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
73 public:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
74 Expression *msg;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
75 const char *msgstr;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
76
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
77 DeprecatedDeclaration(Expression *msg, Dsymbols *decl);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
78 Dsymbol *syntaxCopy(Dsymbol *s);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
79 Scope *newScope(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
80 void setScope(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
81 void semantic2(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
82 const char *getMessage();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
83 void accept(Visitor *v) { v->visit(this); }
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 class LinkDeclaration : public AttribDeclaration
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
87 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
88 public:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
89 LINK linkage;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
90
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
91 LinkDeclaration(LINK p, Dsymbols *decl);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
92 static LinkDeclaration *create(LINK p, Dsymbols *decl);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
93 Dsymbol *syntaxCopy(Dsymbol *s);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
94 Scope *newScope(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
95 const char *toChars();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
96 void accept(Visitor *v) { v->visit(this); }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
97 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
98
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
99 class CPPMangleDeclaration : public AttribDeclaration
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
100 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
101 public:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
102 CPPMANGLE cppmangle;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
103
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
104 CPPMangleDeclaration(CPPMANGLE p, Dsymbols *decl);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
105 Dsymbol *syntaxCopy(Dsymbol *s);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
106 Scope *newScope(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
107 const char *toChars();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
108 void accept(Visitor *v) { v->visit(this); }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
109 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
110
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
111 class ProtDeclaration : public AttribDeclaration
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
112 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
113 public:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
114 Prot protection;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
115 Identifiers* pkg_identifiers;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
116
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
117 ProtDeclaration(Loc loc, Prot p, Dsymbols *decl);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
118 ProtDeclaration(Loc loc, Identifiers* pkg_identifiers, Dsymbols *decl);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
119
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
120 Dsymbol *syntaxCopy(Dsymbol *s);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
121 Scope *newScope(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
122 void addMember(Scope *sc, ScopeDsymbol *sds);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
123 const char *kind() const;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
124 const char *toPrettyChars(bool unused);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
125 void accept(Visitor *v) { v->visit(this); }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
126 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
127
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
128 class AlignDeclaration : public AttribDeclaration
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
129 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
130 public:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
131 Expression *ealign;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
132 structalign_t salign;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
133
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
134 AlignDeclaration(Loc loc, Expression *ealign, Dsymbols *decl);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
135 Dsymbol *syntaxCopy(Dsymbol *s);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
136 Scope *newScope(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
137 void semantic2(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
138 structalign_t getAlignment(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
139 void accept(Visitor *v) { v->visit(this); }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
140 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
141
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
142 class AnonDeclaration : public AttribDeclaration
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
143 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
144 public:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
145 bool isunion;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
146 int sem; // 1 if successful semantic()
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
147 unsigned anonoffset; // offset of anonymous struct
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
148 unsigned anonstructsize; // size of anonymous struct
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
149 unsigned anonalignsize; // size of anonymous struct for alignment purposes
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
150
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
151 AnonDeclaration(Loc loc, bool isunion, Dsymbols *decl);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
152 Dsymbol *syntaxCopy(Dsymbol *s);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
153 void setScope(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
154 void semantic(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
155 void setFieldOffset(AggregateDeclaration *ad, unsigned *poffset, bool isunion);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
156 const char *kind() const;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
157 AnonDeclaration *isAnonDeclaration() { return this; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
158 void accept(Visitor *v) { v->visit(this); }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
159 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
160
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
161 class PragmaDeclaration : public AttribDeclaration
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
162 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
163 public:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
164 Expressions *args; // array of Expression's
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
165
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
166 PragmaDeclaration(Loc loc, Identifier *ident, Expressions *args, Dsymbols *decl);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
167 Dsymbol *syntaxCopy(Dsymbol *s);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
168 Scope *newScope(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
169 void semantic(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
170 const char *kind() const;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
171 void accept(Visitor *v) { v->visit(this); }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
172 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
173
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
174 class ConditionalDeclaration : public AttribDeclaration
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
175 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
176 public:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
177 Condition *condition;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
178 Dsymbols *elsedecl; // array of Dsymbol's for else block
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
179
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
180 ConditionalDeclaration(Condition *condition, Dsymbols *decl, Dsymbols *elsedecl);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
181 Dsymbol *syntaxCopy(Dsymbol *s);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
182 bool oneMember(Dsymbol **ps, Identifier *ident);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
183 Dsymbols *include(Scope *sc, ScopeDsymbol *sds);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
184 void addComment(const utf8_t *comment);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
185 void setScope(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
186 void accept(Visitor *v) { v->visit(this); }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
187 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
188
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
189 class StaticIfDeclaration : public ConditionalDeclaration
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
190 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
191 public:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
192 ScopeDsymbol *scopesym;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
193 bool addisdone;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
194
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
195 StaticIfDeclaration(Condition *condition, Dsymbols *decl, Dsymbols *elsedecl);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
196 Dsymbol *syntaxCopy(Dsymbol *s);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
197 Dsymbols *include(Scope *sc, ScopeDsymbol *sds);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
198 void addMember(Scope *sc, ScopeDsymbol *sds);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
199 void setScope(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
200 void importAll(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
201 void semantic(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
202 const char *kind() const;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
203 void accept(Visitor *v) { v->visit(this); }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
204 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
205
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
206 class StaticForeachDeclaration : public ConditionalDeclaration
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
207 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
208 public:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
209 StaticForeach *sfe;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
210 ScopeDsymbol *scopesym;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
211 bool cached;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
212 Dsymbols *cache;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
213
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
214 Dsymbol *syntaxCopy(Dsymbol *s);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
215 bool oneMember(Dsymbol **ps, Identifier *ident);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
216 Dsymbols *include(Scope *sc, ScopeDsymbol *sds);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
217 void addMember(Scope *sc, ScopeDsymbol *sds);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
218 void addComment(const utf8_t *comment);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
219 void setScope(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
220 void importAll(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
221 void semantic(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
222 const char *kind() const;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
223 void accept(Visitor *v) { v->visit(this); }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
224 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
225
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
226 class ForwardingAttribDeclaration : AttribDeclaration
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
227 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
228 public:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
229 ForwardingScopeDsymbol *sym;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
230
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
231 Scope *newScope(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
232 void addMember(Scope *sc, ScopeDsymbol *sds);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
233 ForwardingAttribDeclaration *isForwardingAttribDeclaration() { return this; }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
234 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
235
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
236 // Mixin declarations
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
237
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
238 class CompileDeclaration : public AttribDeclaration
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
239 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
240 public:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
241 Expression *exp;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
242
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
243 ScopeDsymbol *scopesym;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
244 bool compiled;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
245
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
246 CompileDeclaration(Loc loc, Expression *exp);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
247 Dsymbol *syntaxCopy(Dsymbol *s);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
248 void addMember(Scope *sc, ScopeDsymbol *sds);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
249 void setScope(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
250 void compileIt(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
251 void semantic(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
252 const char *kind() const;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
253 void accept(Visitor *v) { v->visit(this); }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
254 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
255
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
256 /**
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
257 * User defined attributes look like:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
258 * @(args, ...)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
259 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
260 class UserAttributeDeclaration : public AttribDeclaration
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
261 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
262 public:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
263 Expressions *atts;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
264
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
265 UserAttributeDeclaration(Expressions *atts, Dsymbols *decl);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
266 Dsymbol *syntaxCopy(Dsymbol *s);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
267 Scope *newScope(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
268 void setScope(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
269 void semantic(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
270 void semantic2(Scope *sc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
271 static Expressions *concat(Expressions *udas1, Expressions *udas2);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
272 Expressions *getAttributes();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
273 const char *kind() const;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
274 void accept(Visitor *v) { v->visit(this); }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
275 };