gccrs: Remove obsolete classes and functions.
[official-gcc.git] / gcc / rust / util / rust-attributes.h
blobd78ab0b33196b1ca0b989166909f991035242ec1
1 // Copyright (C) 2020-2024 Free Software Foundation, Inc.
3 // This file is part of GCC.
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.
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.
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 #ifndef RUST_ATTRIBUTES_H
19 #define RUST_ATTRIBUTES_H
21 #include "rust-ast.h"
22 #include "rust-system.h"
23 #include "rust-ast-visitor.h"
25 namespace Rust {
26 namespace Analysis {
28 enum CompilerPass
30 UNKNOWN,
32 EXPANSION,
33 NAME_RESOLUTION,
34 HIR_LOWERING,
35 TYPE_CHECK,
36 STATIC_ANALYSIS,
37 CODE_GENERATION
40 struct BuiltinAttrDefinition
42 std::string name;
43 CompilerPass handler;
45 static BuiltinAttrDefinition get_error ()
47 return BuiltinAttrDefinition{"", UNKNOWN};
50 static BuiltinAttrDefinition &error_node ()
52 static BuiltinAttrDefinition error_node = get_error ();
53 return error_node;
56 bool is_error () const { return name.empty (); }
59 class BuiltinAttributeMappings
61 public:
62 static BuiltinAttributeMappings *get ();
64 const BuiltinAttrDefinition &
65 lookup_builtin (const std::string &attr_name) const;
67 private:
68 BuiltinAttributeMappings ();
70 std::map<std::string, const BuiltinAttrDefinition> mappings;
73 /**
74 * Checks the validity of various attributes. The goal of this visitor is to
75 * make sure that attributes are applied in allowed contexts, for example to
76 * make sure that #[inline] is only applied to functions and closures, as well
77 * as checking the "arguments" or input given to these attributes, making sure
78 * it is appropriate and valid.
80 class AttributeChecker : public AST::DefaultASTVisitor
82 public:
83 AttributeChecker ();
85 /**
86 * Check all the attributes of all the items of a crate
88 void go (AST::Crate &crate);
90 private:
91 using AST::DefaultASTVisitor::visit;
92 /* Check the validity of a given attribute */
93 void check_attribute (const AST::Attribute &attribute);
95 /* Check the validity of all given attributes */
96 void check_attributes (const AST::AttrVec &attributes);
98 // rust-ast.h
99 void visit (AST::Crate &crate) override;
100 void visit (AST::Token &tok) override;
101 void visit (AST::DelimTokenTree &delim_tok_tree) override;
102 void visit (AST::AttrInputMetaItemContainer &input) override;
103 void visit (AST::IdentifierExpr &ident_expr) override;
104 void visit (AST::Lifetime &lifetime) override;
105 void visit (AST::LifetimeParam &lifetime_param) override;
106 void visit (AST::ConstGenericParam &const_param) override;
108 // rust-path.h
109 void visit (AST::PathInExpression &path) override;
110 void visit (AST::TypePathSegment &segment) override;
111 void visit (AST::TypePathSegmentGeneric &segment) override;
112 void visit (AST::TypePathSegmentFunction &segment) override;
113 void visit (AST::TypePath &path) override;
114 void visit (AST::QualifiedPathInExpression &path) override;
115 void visit (AST::QualifiedPathInType &path) override;
117 // rust-expr.h
118 void visit (AST::LiteralExpr &expr) override;
119 void visit (AST::AttrInputLiteral &attr_input) override;
120 void visit (AST::AttrInputMacro &attr_input) override;
121 void visit (AST::MetaItemLitExpr &meta_item) override;
122 void visit (AST::MetaItemPathLit &meta_item) override;
123 void visit (AST::BorrowExpr &expr) override;
124 void visit (AST::DereferenceExpr &expr) override;
125 void visit (AST::ErrorPropagationExpr &expr) override;
126 void visit (AST::NegationExpr &expr) override;
127 void visit (AST::ArithmeticOrLogicalExpr &expr) override;
128 void visit (AST::ComparisonExpr &expr) override;
129 void visit (AST::LazyBooleanExpr &expr) override;
130 void visit (AST::TypeCastExpr &expr) override;
131 void visit (AST::AssignmentExpr &expr) override;
132 void visit (AST::CompoundAssignmentExpr &expr) override;
133 void visit (AST::GroupedExpr &expr) override;
134 void visit (AST::ArrayElemsValues &elems) override;
135 void visit (AST::ArrayElemsCopied &elems) override;
136 void visit (AST::ArrayExpr &expr) override;
137 void visit (AST::ArrayIndexExpr &expr) override;
138 void visit (AST::TupleExpr &expr) override;
139 void visit (AST::TupleIndexExpr &expr) override;
140 void visit (AST::StructExprStruct &expr) override;
141 void visit (AST::StructExprFieldIdentifier &field) override;
142 void visit (AST::StructExprFieldIdentifierValue &field) override;
143 void visit (AST::StructExprFieldIndexValue &field) override;
144 void visit (AST::StructExprStructFields &expr) override;
145 void visit (AST::StructExprStructBase &expr) override;
146 void visit (AST::CallExpr &expr) override;
147 void visit (AST::MethodCallExpr &expr) override;
148 void visit (AST::FieldAccessExpr &expr) override;
149 void visit (AST::ClosureExprInner &expr) override;
150 void visit (AST::BlockExpr &expr) override;
151 void visit (AST::ClosureExprInnerTyped &expr) override;
152 void visit (AST::ContinueExpr &expr) override;
153 void visit (AST::BreakExpr &expr) override;
154 void visit (AST::RangeFromToExpr &expr) override;
155 void visit (AST::RangeFromExpr &expr) override;
156 void visit (AST::RangeToExpr &expr) override;
157 void visit (AST::RangeFullExpr &expr) override;
158 void visit (AST::RangeFromToInclExpr &expr) override;
159 void visit (AST::RangeToInclExpr &expr) override;
160 void visit (AST::ReturnExpr &expr) override;
161 void visit (AST::LoopExpr &expr) override;
162 void visit (AST::WhileLoopExpr &expr) override;
163 void visit (AST::WhileLetLoopExpr &expr) override;
164 void visit (AST::ForLoopExpr &expr) override;
165 void visit (AST::IfExpr &expr) override;
166 void visit (AST::IfExprConseqElse &expr) override;
167 void visit (AST::IfLetExpr &expr) override;
168 void visit (AST::IfLetExprConseqElse &expr) override;
169 void visit (AST::MatchExpr &expr) override;
170 void visit (AST::AwaitExpr &expr) override;
171 void visit (AST::AsyncBlockExpr &expr) override;
173 // rust-item.h
174 void visit (AST::TypeParam &param) override;
175 void visit (AST::LifetimeWhereClauseItem &item) override;
176 void visit (AST::TypeBoundWhereClauseItem &item) override;
177 void visit (AST::Module &module) override;
178 void visit (AST::ExternCrate &crate) override;
179 void visit (AST::UseTreeGlob &use_tree) override;
180 void visit (AST::UseTreeList &use_tree) override;
181 void visit (AST::UseTreeRebind &use_tree) override;
182 void visit (AST::UseDeclaration &use_decl) override;
183 void visit (AST::Function &function) override;
184 void visit (AST::TypeAlias &type_alias) override;
185 void visit (AST::StructStruct &struct_item) override;
186 void visit (AST::TupleStruct &tuple_struct) override;
187 void visit (AST::EnumItem &item) override;
188 void visit (AST::EnumItemTuple &item) override;
189 void visit (AST::EnumItemStruct &item) override;
190 void visit (AST::EnumItemDiscriminant &item) override;
191 void visit (AST::Enum &enum_item) override;
192 void visit (AST::Union &union_item) override;
193 void visit (AST::ConstantItem &const_item) override;
194 void visit (AST::StaticItem &static_item) override;
195 void visit (AST::TraitItemConst &item) override;
196 void visit (AST::TraitItemType &item) override;
197 void visit (AST::Trait &trait) override;
198 void visit (AST::InherentImpl &impl) override;
199 void visit (AST::TraitImpl &impl) override;
200 void visit (AST::ExternalTypeItem &item) override;
201 void visit (AST::ExternalStaticItem &item) override;
202 void visit (AST::ExternalFunctionItem &item) override;
203 void visit (AST::ExternBlock &block) override;
205 // rust-macro.h
206 void visit (AST::MacroMatchFragment &match) override;
207 void visit (AST::MacroMatchRepetition &match) override;
208 void visit (AST::MacroMatcher &matcher) override;
209 void visit (AST::MacroRulesDefinition &rules_def) override;
210 void visit (AST::MacroInvocation &macro_invoc) override;
211 void visit (AST::MetaItemPath &meta_item) override;
212 void visit (AST::MetaItemSeq &meta_item) override;
213 void visit (AST::MetaWord &meta_item) override;
214 void visit (AST::MetaNameValueStr &meta_item) override;
215 void visit (AST::MetaListPaths &meta_item) override;
216 void visit (AST::MetaListNameValueStr &meta_item) override;
218 // rust-pattern.h
219 void visit (AST::LiteralPattern &pattern) override;
220 void visit (AST::IdentifierPattern &pattern) override;
221 void visit (AST::WildcardPattern &pattern) override;
222 void visit (AST::RestPattern &pattern) override;
223 // void visit(RangePatternBound& bound) override;
224 void visit (AST::RangePatternBoundLiteral &bound) override;
225 void visit (AST::RangePatternBoundPath &bound) override;
226 void visit (AST::RangePatternBoundQualPath &bound) override;
227 void visit (AST::RangePattern &pattern) override;
228 void visit (AST::ReferencePattern &pattern) override;
229 // void visit(StructPatternField& field) override;
230 void visit (AST::StructPatternFieldTuplePat &field) override;
231 void visit (AST::StructPatternFieldIdentPat &field) override;
232 void visit (AST::StructPatternFieldIdent &field) override;
233 void visit (AST::StructPattern &pattern) override;
234 // void visit(TupleStructItems& tuple_items) override;
235 void visit (AST::TupleStructItemsNoRange &tuple_items) override;
236 void visit (AST::TupleStructItemsRange &tuple_items) override;
237 void visit (AST::TupleStructPattern &pattern) override;
238 // void visit(TuplePatternItems& tuple_items) override;
239 void visit (AST::TuplePatternItemsMultiple &tuple_items) override;
240 void visit (AST::TuplePatternItemsRanged &tuple_items) override;
241 void visit (AST::TuplePattern &pattern) override;
242 void visit (AST::GroupedPattern &pattern) override;
243 void visit (AST::SlicePattern &pattern) override;
244 void visit (AST::AltPattern &pattern) override;
246 // rust-stmt.h
247 void visit (AST::EmptyStmt &stmt) override;
248 void visit (AST::LetStmt &stmt) override;
249 void visit (AST::ExprStmt &stmt) override;
251 // rust-type.h
252 void visit (AST::TraitBound &bound) override;
253 void visit (AST::ImplTraitType &type) override;
254 void visit (AST::TraitObjectType &type) override;
255 void visit (AST::ParenthesisedType &type) override;
256 void visit (AST::ImplTraitTypeOneBound &type) override;
257 void visit (AST::TraitObjectTypeOneBound &type) override;
258 void visit (AST::TupleType &type) override;
259 void visit (AST::NeverType &type) override;
260 void visit (AST::RawPointerType &type) override;
261 void visit (AST::ReferenceType &type) override;
262 void visit (AST::ArrayType &type) override;
263 void visit (AST::SliceType &type) override;
264 void visit (AST::InferredType &type) override;
265 void visit (AST::BareFunctionType &type) override;
266 void visit (AST::FunctionParam &param) override;
267 void visit (AST::VariadicParam &param) override;
268 void visit (AST::SelfParam &param) override;
271 } // namespace Analysis
272 } // namespace Rust
274 #endif /* ! RUST_ATTRIBUTES_H */