1 // Copyright (C) 2020-2023 Free Software Foundation, Inc.
2
3 // This file is part of GCC.
4
5 // GCC is free software; you can redistribute it and/or modify it under
6 // the terms of the GNU General Public License as published by the Free
7 // Software Foundation; either version 3, or (at your option) any later
8 // version.
9
10 // GCC is distributed in the hope that it will be useful, but WITHOUT ANY
11 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13 // for more details.
14
15 // You should have received a copy of the GNU General Public License
16 // along with GCC; see the file COPYING3. If not see
17 // <http://www.gnu.org/licenses/>.
18
19 #ifndef RUST_AST_FULL_DECLS_H
20 #define RUST_AST_FULL_DECLS_H
21
22 // Forward declarations for all AST classes. Useful for not having to include
23 // all definitions.
24
25 namespace Rust {
26 namespace AST {
27 // rust-ast.h
28 class AttrInput;
29 class TokenTree;
30 class MacroMatch;
31 class Token;
32 struct Literal;
33 class DelimTokenTree;
34 class PathSegment;
35 class SimplePathSegment;
36 class SimplePath;
37 struct Attribute;
38 class MetaItemInner;
39 class AttrInputMetaItemContainer;
40 class MetaItem;
41 class Stmt;
42 class Item;
43 class Expr;
44 class ExprWithoutBlock;
45 class IdentifierExpr;
46 class Pattern;
47 class Type;
48 class TypeNoBounds;
49 class TypeParamBound;
50 class Lifetime;
51 class GenericParam;
52 class LifetimeParam;
53 class ConstGenericParam;
54 class TraitItem;
55 class InherentImplItem;
56 class TraitImplItem;
57 struct Crate;
58 class PathExpr;
59
60 // rust-path.h
61 class PathIdentSegment;
62 struct GenericArgsBinding;
63 struct GenericArgs;
64 class PathExprSegment;
65 class PathPattern;
66 class PathInExpression;
67 class TypePathSegment;
68 class TypePathSegmentGeneric;
69 struct TypePathFunction;
70 class TypePathSegmentFunction;
71 class TypePath;
72 struct QualifiedPathType;
73 class QualifiedPathInExpression;
74 class QualifiedPathInType;
75
76 // rust-expr.h
77 class ExprWithBlock;
78 class LiteralExpr;
79 class AttrInputLiteral;
80 class MetaItemLitExpr;
81 class MetaItemPathLit;
82 class OperatorExpr;
83 class BorrowExpr;
84 class DereferenceExpr;
85 class ErrorPropagationExpr;
86 class NegationExpr;
87 class ArithmeticOrLogicalExpr;
88 class ComparisonExpr;
89 class LazyBooleanExpr;
90 class TypeCastExpr;
91 class AssignmentExpr;
92 class CompoundAssignmentExpr;
93 class GroupedExpr;
94 class ArrayElems;
95 class ArrayElemsValues;
96 class ArrayElemsCopied;
97 class ArrayExpr;
98 class ArrayIndexExpr;
99 class TupleExpr;
100 class TupleIndexExpr;
101 class StructExpr;
102 class StructExprStruct;
103 struct StructBase;
104 class StructExprField;
105 class StructExprFieldIdentifier;
106 class StructExprFieldWithVal;
107 class StructExprFieldIdentifierValue;
108 class StructExprFieldIndexValue;
109 class StructExprStructFields;
110 class StructExprStructBase;
111 class CallExpr;
112 class MethodCallExpr;
113 class FieldAccessExpr;
114 struct ClosureParam;
115 class ClosureExpr;
116 class ClosureExprInner;
117 class BlockExpr;
118 class ClosureExprInnerTyped;
119 class ContinueExpr;
120 class BreakExpr;
121 class RangeExpr;
122 class RangeFromToExpr;
123 class RangeFromExpr;
124 class RangeToExpr;
125 class RangeFullExpr;
126 class RangeFromToInclExpr;
127 class RangeToInclExpr;
128 class ReturnExpr;
129 class UnsafeBlockExpr;
130 class LoopLabel;
131 class BaseLoopExpr;
132 class LoopExpr;
133 class WhileLoopExpr;
134 class WhileLetLoopExpr;
135 class ForLoopExpr;
136 class IfExpr;
137 class IfExprConseqElse;
138 class IfExprConseqIf;
139 class IfLetExpr;
140 class IfExprConseqIfLet;
141 class IfLetExprConseqElse;
142 class IfLetExprConseqIf;
143 class IfLetExprConseqIfLet;
144 struct MatchArm;
145 // class MatchCase;
146 // class MatchCaseBlockExpr;
147 // class MatchCaseExpr;
148 struct MatchCase;
149 class MatchExpr;
150 class AwaitExpr;
151 class AsyncBlockExpr;
152 class InlineAsm;
153
154 // rust-stmt.h
155 class EmptyStmt;
156 class LetStmt;
157 class ExprStmt;
158 class ExprStmtWithoutBlock;
159 class ExprStmtWithBlock;
160
161 // rust-item.h
162 class TypeParam;
163 class WhereClauseItem;
164 class LifetimeWhereClauseItem;
165 class TypeBoundWhereClauseItem;
166 struct WhereClause;
167 struct SelfParam;
168 struct FunctionQualifiers;
169 struct FunctionParam;
170 struct Visibility;
171 class Method;
172 class VisItem;
173 class Module;
174 class ExternCrate;
175 class UseTree;
176 class UseTreeGlob;
177 class UseTreeList;
178 class UseTreeRebind;
179 class UseDeclaration;
180 class Function;
181 class TypeAlias;
182 class Struct;
183 struct StructField;
184 class StructStruct;
185 struct TupleField;
186 class TupleStruct;
187 class EnumItem;
188 class EnumItemTuple;
189 class EnumItemStruct;
190 class EnumItemDiscriminant;
191 class Enum;
192 class Union;
193 class ConstantItem;
194 class StaticItem;
195 struct TraitFunctionDecl;
196 class TraitItemFunc;
197 struct TraitMethodDecl;
198 class TraitItemMethod;
199 class TraitItemConst;
200 class TraitItemType;
201 class Trait;
202 class Impl;
203 class InherentImpl;
204 class TraitImpl;
205 class ExternalItem;
206 class ExternalStaticItem;
207 struct NamedFunctionParam;
208 class ExternalFunctionItem;
209 class ExternBlock;
210
211 // rust-macro.h
212 class MacroMatchFragment;
213 class MacroMatchRepetition;
214 class MacroMatcher;
215 struct MacroTranscriber;
216 struct MacroRule;
217 class MacroRulesDefinition;
218 class MacroInvocation;
219 class MetaItemPath;
220 class MetaItemSeq;
221 class MetaWord;
222 class MetaNameValueStr;
223 class MetaListPaths;
224 class MetaListNameValueStr;
225
226 // rust-pattern.h
227 class LiteralPattern;
228 class IdentifierPattern;
229 class WildcardPattern;
230 class RangePatternBound;
231 class RangePatternBoundLiteral;
232 class RangePatternBoundPath;
233 class RangePatternBoundQualPath;
234 class RangePattern;
235 class ReferencePattern;
236 struct StructPatternEtc;
237 class StructPatternField;
238 class StructPatternFieldTuplePat;
239 class StructPatternFieldIdentPat;
240 class StructPatternFieldIdent;
241 struct StructPatternElements;
242 class StructPattern;
243 class TupleStructItems;
244 class TupleStructItemsNoRange;
245 class TupleStructItemsRange;
246 class TupleStructPattern;
247 class TuplePatternItems;
248 class TuplePatternItemsMultiple;
249 class TuplePatternItemsRanged;
250 class TuplePattern;
251 class GroupedPattern;
252 class SlicePattern;
253 class AltPattern;
254
255 // rust-type.h
256 class TraitBound;
257 class ImplTraitType;
258 class TraitObjectType;
259 class ParenthesisedType;
260 class ImplTraitTypeOneBound;
261 class TraitObjectTypeOneBound;
262 class TupleType;
263 class NeverType;
264 class RawPointerType;
265 class ReferenceType;
266 class ArrayType;
267 class SliceType;
268 class InferredType;
269 struct MaybeNamedParam;
270 class BareFunctionType;
271 } // namespace AST
272 } // namespace Rust
273
274 #endif