]>
Commit | Line | Data |
---|---|---|
83ffe9cd | 1 | // Copyright (C) 2020-2023 Free Software Foundation, Inc. |
5b981e9c JP |
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_VISITOR_H | |
20 | #define RUST_AST_VISITOR_H | |
21 | // Visitor base for AST | |
22 | ||
23 | // full include not required - only forward decls | |
24 | #include "rust-ast-full-decls.h" | |
25 | ||
26 | namespace Rust { | |
27 | namespace AST { | |
28 | /* Pure abstract class that provides an interface for accessing different | |
29 | * classes of the AST. */ | |
30 | class ASTVisitor | |
31 | { | |
32 | public: | |
33 | // only concrete class overloads are required | |
34 | ||
35 | // rust-ast.h | |
36 | // virtual void visit(AttrInput& attr_input) = 0; | |
37 | // virtual void visit(TokenTree& token_tree) = 0; | |
38 | // virtual void visit(MacroMatch& macro_match) = 0; | |
39 | virtual void visit (Token &tok) = 0; | |
40 | virtual void visit (DelimTokenTree &delim_tok_tree) = 0; | |
41 | virtual void visit (AttrInputMetaItemContainer &input) = 0; | |
42 | // virtual void visit(MetaItem& meta_item) = 0; | |
43 | // virtual void visit(Stmt& stmt) = 0; | |
44 | // virtual void visit(Expr& expr) = 0; | |
45 | virtual void visit (IdentifierExpr &ident_expr) = 0; | |
46 | // virtual void visit(Pattern& pattern) = 0; | |
47 | // virtual void visit(Type& type) = 0; | |
48 | // virtual void visit(TypeParamBound& type_param_bound) = 0; | |
49 | virtual void visit (Lifetime &lifetime) = 0; | |
50 | // virtual void visit(GenericParam& generic_param) = 0; | |
51 | virtual void visit (LifetimeParam &lifetime_param) = 0; | |
52 | virtual void visit (ConstGenericParam &const_param) = 0; | |
53 | // virtual void visit(TraitItem& trait_item) = 0; | |
54 | // virtual void visit(InherentImplItem& inherent_impl_item) = 0; | |
55 | // virtual void visit(TraitImplItem& trait_impl_item) = 0; | |
56 | ||
57 | // rust-path.h | |
58 | virtual void visit (PathInExpression &path) = 0; | |
59 | virtual void visit (TypePathSegment &segment) = 0; | |
60 | virtual void visit (TypePathSegmentGeneric &segment) = 0; | |
61 | virtual void visit (TypePathSegmentFunction &segment) = 0; | |
62 | virtual void visit (TypePath &path) = 0; | |
63 | virtual void visit (QualifiedPathInExpression &path) = 0; | |
64 | virtual void visit (QualifiedPathInType &path) = 0; | |
65 | ||
66 | // rust-expr.h | |
67 | virtual void visit (LiteralExpr &expr) = 0; | |
68 | virtual void visit (AttrInputLiteral &attr_input) = 0; | |
69 | virtual void visit (MetaItemLitExpr &meta_item) = 0; | |
70 | virtual void visit (MetaItemPathLit &meta_item) = 0; | |
71 | virtual void visit (BorrowExpr &expr) = 0; | |
72 | virtual void visit (DereferenceExpr &expr) = 0; | |
73 | virtual void visit (ErrorPropagationExpr &expr) = 0; | |
74 | virtual void visit (NegationExpr &expr) = 0; | |
75 | virtual void visit (ArithmeticOrLogicalExpr &expr) = 0; | |
76 | virtual void visit (ComparisonExpr &expr) = 0; | |
77 | virtual void visit (LazyBooleanExpr &expr) = 0; | |
78 | virtual void visit (TypeCastExpr &expr) = 0; | |
79 | virtual void visit (AssignmentExpr &expr) = 0; | |
80 | virtual void visit (CompoundAssignmentExpr &expr) = 0; | |
81 | virtual void visit (GroupedExpr &expr) = 0; | |
82 | // virtual void visit(ArrayElems& elems) = 0; | |
83 | virtual void visit (ArrayElemsValues &elems) = 0; | |
84 | virtual void visit (ArrayElemsCopied &elems) = 0; | |
85 | virtual void visit (ArrayExpr &expr) = 0; | |
86 | virtual void visit (ArrayIndexExpr &expr) = 0; | |
87 | virtual void visit (TupleExpr &expr) = 0; | |
88 | virtual void visit (TupleIndexExpr &expr) = 0; | |
89 | virtual void visit (StructExprStruct &expr) = 0; | |
90 | // virtual void visit(StructExprField& field) = 0; | |
91 | virtual void visit (StructExprFieldIdentifier &field) = 0; | |
92 | virtual void visit (StructExprFieldIdentifierValue &field) = 0; | |
93 | virtual void visit (StructExprFieldIndexValue &field) = 0; | |
94 | virtual void visit (StructExprStructFields &expr) = 0; | |
95 | virtual void visit (StructExprStructBase &expr) = 0; | |
96 | virtual void visit (CallExpr &expr) = 0; | |
97 | virtual void visit (MethodCallExpr &expr) = 0; | |
98 | virtual void visit (FieldAccessExpr &expr) = 0; | |
99 | virtual void visit (ClosureExprInner &expr) = 0; | |
100 | virtual void visit (BlockExpr &expr) = 0; | |
101 | virtual void visit (ClosureExprInnerTyped &expr) = 0; | |
102 | virtual void visit (ContinueExpr &expr) = 0; | |
103 | virtual void visit (BreakExpr &expr) = 0; | |
104 | virtual void visit (RangeFromToExpr &expr) = 0; | |
105 | virtual void visit (RangeFromExpr &expr) = 0; | |
106 | virtual void visit (RangeToExpr &expr) = 0; | |
107 | virtual void visit (RangeFullExpr &expr) = 0; | |
108 | virtual void visit (RangeFromToInclExpr &expr) = 0; | |
109 | virtual void visit (RangeToInclExpr &expr) = 0; | |
110 | virtual void visit (ReturnExpr &expr) = 0; | |
111 | virtual void visit (UnsafeBlockExpr &expr) = 0; | |
112 | virtual void visit (LoopExpr &expr) = 0; | |
113 | virtual void visit (WhileLoopExpr &expr) = 0; | |
114 | virtual void visit (WhileLetLoopExpr &expr) = 0; | |
115 | virtual void visit (ForLoopExpr &expr) = 0; | |
116 | virtual void visit (IfExpr &expr) = 0; | |
117 | virtual void visit (IfExprConseqElse &expr) = 0; | |
118 | virtual void visit (IfExprConseqIf &expr) = 0; | |
119 | virtual void visit (IfExprConseqIfLet &expr) = 0; | |
120 | virtual void visit (IfLetExpr &expr) = 0; | |
121 | virtual void visit (IfLetExprConseqElse &expr) = 0; | |
122 | virtual void visit (IfLetExprConseqIf &expr) = 0; | |
123 | virtual void visit (IfLetExprConseqIfLet &expr) = 0; | |
124 | // virtual void visit(MatchCase& match_case) = 0; | |
125 | // virtual void visit (MatchCaseBlockExpr &match_case) = 0; | |
126 | // virtual void visit (MatchCaseExpr &match_case) = 0; | |
127 | virtual void visit (MatchExpr &expr) = 0; | |
128 | virtual void visit (AwaitExpr &expr) = 0; | |
129 | virtual void visit (AsyncBlockExpr &expr) = 0; | |
130 | ||
131 | // rust-item.h | |
132 | virtual void visit (TypeParam ¶m) = 0; | |
133 | // virtual void visit(WhereClauseItem& item) = 0; | |
134 | virtual void visit (LifetimeWhereClauseItem &item) = 0; | |
135 | virtual void visit (TypeBoundWhereClauseItem &item) = 0; | |
136 | virtual void visit (Method &method) = 0; | |
137 | virtual void visit (Module &module) = 0; | |
138 | virtual void visit (ExternCrate &crate) = 0; | |
139 | // virtual void visit(UseTree& use_tree) = 0; | |
140 | virtual void visit (UseTreeGlob &use_tree) = 0; | |
141 | virtual void visit (UseTreeList &use_tree) = 0; | |
142 | virtual void visit (UseTreeRebind &use_tree) = 0; | |
143 | virtual void visit (UseDeclaration &use_decl) = 0; | |
144 | virtual void visit (Function &function) = 0; | |
145 | virtual void visit (TypeAlias &type_alias) = 0; | |
146 | virtual void visit (StructStruct &struct_item) = 0; | |
147 | virtual void visit (TupleStruct &tuple_struct) = 0; | |
148 | virtual void visit (EnumItem &item) = 0; | |
149 | virtual void visit (EnumItemTuple &item) = 0; | |
150 | virtual void visit (EnumItemStruct &item) = 0; | |
151 | virtual void visit (EnumItemDiscriminant &item) = 0; | |
152 | virtual void visit (Enum &enum_item) = 0; | |
153 | virtual void visit (Union &union_item) = 0; | |
154 | virtual void visit (ConstantItem &const_item) = 0; | |
155 | virtual void visit (StaticItem &static_item) = 0; | |
156 | virtual void visit (TraitItemFunc &item) = 0; | |
157 | virtual void visit (TraitItemMethod &item) = 0; | |
158 | virtual void visit (TraitItemConst &item) = 0; | |
159 | virtual void visit (TraitItemType &item) = 0; | |
160 | virtual void visit (Trait &trait) = 0; | |
161 | virtual void visit (InherentImpl &impl) = 0; | |
162 | virtual void visit (TraitImpl &impl) = 0; | |
163 | // virtual void visit(ExternalItem& item) = 0; | |
164 | virtual void visit (ExternalStaticItem &item) = 0; | |
165 | virtual void visit (ExternalFunctionItem &item) = 0; | |
166 | virtual void visit (ExternBlock &block) = 0; | |
167 | ||
168 | // rust-macro.h | |
169 | virtual void visit (MacroMatchFragment &match) = 0; | |
170 | virtual void visit (MacroMatchRepetition &match) = 0; | |
171 | virtual void visit (MacroMatcher &matcher) = 0; | |
172 | virtual void visit (MacroRulesDefinition &rules_def) = 0; | |
173 | virtual void visit (MacroInvocation ¯o_invoc) = 0; | |
174 | virtual void visit (MetaItemPath &meta_item) = 0; | |
175 | virtual void visit (MetaItemSeq &meta_item) = 0; | |
176 | virtual void visit (MetaWord &meta_item) = 0; | |
177 | virtual void visit (MetaNameValueStr &meta_item) = 0; | |
178 | virtual void visit (MetaListPaths &meta_item) = 0; | |
179 | virtual void visit (MetaListNameValueStr &meta_item) = 0; | |
180 | ||
181 | // rust-pattern.h | |
182 | virtual void visit (LiteralPattern &pattern) = 0; | |
183 | virtual void visit (IdentifierPattern &pattern) = 0; | |
184 | virtual void visit (WildcardPattern &pattern) = 0; | |
185 | // virtual void visit(RangePatternBound& bound) = 0; | |
186 | virtual void visit (RangePatternBoundLiteral &bound) = 0; | |
187 | virtual void visit (RangePatternBoundPath &bound) = 0; | |
188 | virtual void visit (RangePatternBoundQualPath &bound) = 0; | |
189 | virtual void visit (RangePattern &pattern) = 0; | |
190 | virtual void visit (ReferencePattern &pattern) = 0; | |
191 | // virtual void visit(StructPatternField& field) = 0; | |
192 | virtual void visit (StructPatternFieldTuplePat &field) = 0; | |
193 | virtual void visit (StructPatternFieldIdentPat &field) = 0; | |
194 | virtual void visit (StructPatternFieldIdent &field) = 0; | |
195 | virtual void visit (StructPattern &pattern) = 0; | |
196 | // virtual void visit(TupleStructItems& tuple_items) = 0; | |
197 | virtual void visit (TupleStructItemsNoRange &tuple_items) = 0; | |
198 | virtual void visit (TupleStructItemsRange &tuple_items) = 0; | |
199 | virtual void visit (TupleStructPattern &pattern) = 0; | |
200 | // virtual void visit(TuplePatternItems& tuple_items) = 0; | |
201 | virtual void visit (TuplePatternItemsMultiple &tuple_items) = 0; | |
202 | virtual void visit (TuplePatternItemsRanged &tuple_items) = 0; | |
203 | virtual void visit (TuplePattern &pattern) = 0; | |
204 | virtual void visit (GroupedPattern &pattern) = 0; | |
205 | virtual void visit (SlicePattern &pattern) = 0; | |
206 | ||
207 | // rust-stmt.h | |
208 | virtual void visit (EmptyStmt &stmt) = 0; | |
209 | virtual void visit (LetStmt &stmt) = 0; | |
210 | virtual void visit (ExprStmtWithoutBlock &stmt) = 0; | |
211 | virtual void visit (ExprStmtWithBlock &stmt) = 0; | |
212 | ||
213 | // rust-type.h | |
214 | virtual void visit (TraitBound &bound) = 0; | |
215 | virtual void visit (ImplTraitType &type) = 0; | |
216 | virtual void visit (TraitObjectType &type) = 0; | |
217 | virtual void visit (ParenthesisedType &type) = 0; | |
218 | virtual void visit (ImplTraitTypeOneBound &type) = 0; | |
219 | virtual void visit (TraitObjectTypeOneBound &type) = 0; | |
220 | virtual void visit (TupleType &type) = 0; | |
221 | virtual void visit (NeverType &type) = 0; | |
222 | virtual void visit (RawPointerType &type) = 0; | |
223 | virtual void visit (ReferenceType &type) = 0; | |
224 | virtual void visit (ArrayType &type) = 0; | |
225 | virtual void visit (SliceType &type) = 0; | |
226 | virtual void visit (InferredType &type) = 0; | |
227 | virtual void visit (BareFunctionType &type) = 0; | |
228 | ||
229 | // TODO: rust-cond-compilation.h visiting? not currently used | |
230 | }; | |
231 | } // namespace AST | |
232 | } // namespace Rust | |
233 | ||
234 | #endif |