diff options
author | Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com> | 2023-11-12 21:44:07 +0100 |
---|---|---|
committer | P-E-P <32375388+P-E-P@users.noreply.github.com> | 2023-11-14 18:27:16 +0000 |
commit | fe0d34c277965251b120f0dfa1d3f153ef02dbe5 (patch) | |
tree | abca97dadfbb4f68d7b87a90e1c7faf4849b7138 /gcc/rust/parse/rust-parse.h | |
parent | ca5ccfc43ce8ea8e6426ee3a664eb6cfb6a97675 (diff) | |
download | gcc-fe0d34c277965251b120f0dfa1d3f153ef02dbe5.zip gcc-fe0d34c277965251b120f0dfa1d3f153ef02dbe5.tar.gz gcc-fe0d34c277965251b120f0dfa1d3f153ef02dbe5.tar.bz2 |
Rework function special parameters
Make self param and variadic param Param, introduce Param class and make
function parameters param too.
Self can now be represented as a standard parameter and is thus no longer
required as a separate function attribute.
Prevent self pointers and allow self in standard functions during parsing
so they could be rejected at a later stage.
gcc/rust/ChangeLog:
* ast/rust-ast-collector.cc (TokenCollector::visit): Add visitor for
VariadicParam and remove Self parameter visitor from Function visit.
* expand/rust-cfg-strip.cc (CfgStrip::maybe_strip_self_param): Remove
function.
(CfgStrip::maybe_strip_trait_method_decl): Remove self parameter visit.
(CfgStrip::maybe_strip_function_params): Handle new function
parameters.
(CfgStrip::visit): Handle VariadicParam, SelfParam and FunctionParam.
* expand/rust-expand-visitor.cc (ExpandVisitor::expand_self_param):
Remove function.
(ExpandVisitor::expand_trait_method_decl): Do not visit self parameter.
(ExpandVisitor::visit): Add visit for VariadicParam, FunctionParam and
SelfParam.
(ExpandVisitor::expand_function_params): Visit parameters instead.
* expand/rust-expand-visitor.h: Update function prototypes.
* resolve/rust-ast-resolve-item.cc (ResolveItem::visit): Update visit
with new parameters.
(ResolveTraitItems::visit): Likewise.
* resolve/rust-early-name-resolver.cc (EarlyNameResolver::visit):
Update visit functions with the new visitor functions for VariadicParam
SelfParam and FunctionParam.
* resolve/rust-early-name-resolver.h: Update function prototypes.
* ast/rust-ast-visitor.cc (DefaultASTVisitor::visit): Update visitor
according to the new function parameter structures.
* ast/rust-ast-visitor.h: Update prototypes and add visitor virtual
functions for SelfParam, FunctionParam and VariadicParam.
* ast/rust-ast.cc (Function::Function): Move constructor in
implementation instead of header.
(Function::operator=): Likewise.
(Function::as_string): Update function with pointer dereference.
(VariadicParam::as_string): Likewise.
(TraitFunctionDecl::as_string): Likewise.
(TraitMethodDecl::as_string): Likewise.
(FunctionParam::accept_vis): Add function for visitor.
(SelfParam::accept_vis): Likewise.
(VariadicParam::accept_vis): Likewise.
(TraitItemFunc::TraitItemFunc): Move constructor to implementation
file.
(TraitItemFunc::operator=): Likewise.
(TraitItemMethod::TraitItemMethod): Likewise.
(TraitItemMethod::operator=): Likewise.
* ast/rust-item.h (class Function): Remove self optional member.
(class TraitMethodDecl): Likewise.
(class TraitFunctionDecl): Likewise.
(class Param): Add abstract parameter class.
(class SelfParam): Inherit from Param and remove parameter common
members.
(class FunctionParam): Likewise.
(class VariadicParam): Likewise.
(struct Visibility): Move structure declaration.
(class VisItem): Likewise.
* checks/errors/rust-ast-validation.cc (ASTValidation::visit): Add
a self parameter check during AST validation.
* checks/errors/rust-ast-validation.h: Add function prototype.
* expand/rust-derive-clone.cc (DeriveClone::clone_fn): Update function
constructor.
* hir/rust-ast-lower-base.cc (ASTLoweringBase::lower_self): Rework
function for the new parameters.
(ASTLoweringBase::visit): Add visit functions for VariadicParam,
FunctionParam and SelfParam.
* hir/rust-ast-lower-base.h: Update function prototypes.
* parse/rust-parse-impl.h (Parser::parse_function): Update function
according to new function representation.
(Parser::parse_function_param): Return vector of abstract param instead
of FunctionParam.
(Parser::parse_method): Update according to new representation.
(Parser::parse_trait_item): Likewise.
(Parser::parse_self_param): Error out with
self pointers and prevent the lexer from eating regular function
parameters. Update return type.
* parse/rust-parse.h: Update function return types.
* ast/rust-ast-collector.h: Add VariadicParam visit prototype.
* ast/rust-ast.h (struct Visibility): Move struct declaration.
(class VisItem): Likewise.
* ast/rust-expr.h: Update included files.
* checks/errors/rust-feature-gate.h: Add visitor functions for
SelfParam, FunctionParam and VariadicParam.
* expand/rust-cfg-strip.h: Update function prototypes.
* expand/rust-derive.h: Likewise.
* hir/rust-ast-lower-implitem.h: Handle special arguments.
* hir/rust-ast-lower-item.cc (ASTLoweringItem::visit): Likewise.
* metadata/rust-export-metadata.cc (ExportContext::emit_function):
Likewise.
* resolve/rust-ast-resolve-base.cc (ResolverBase::visit): Add visitor
functions.
* resolve/rust-ast-resolve-base.h: Update prototypes.
* resolve/rust-ast-resolve-stmt.h: Handle new parameter kind.
* resolve/rust-default-resolver.cc (DefaultResolver::visit): Likewise.
* resolve/rust-default-resolver.h: Update prototype.
* util/rust-attributes.cc (AttributeChecker::visit): Add visitor
functions for SelfParam and VariadicParam.
* util/rust-attributes.h: Add visit prototypes.
Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Diffstat (limited to 'gcc/rust/parse/rust-parse.h')
-rw-r--r-- | gcc/rust/parse/rust-parse.h | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/gcc/rust/parse/rust-parse.h b/gcc/rust/parse/rust-parse.h index 3ff9b99..9e924e0 100644 --- a/gcc/rust/parse/rust-parse.h +++ b/gcc/rust/parse/rust-parse.h @@ -164,7 +164,7 @@ public: std::unique_ptr<AST::InherentImplItem> parse_inherent_impl_item (); std::unique_ptr<AST::TraitImplItem> parse_trait_impl_item (); AST::PathInExpression parse_path_in_expression (); - std::vector<std::unique_ptr<AST::LifetimeParam> > parse_lifetime_params (); + std::vector<std::unique_ptr<AST::LifetimeParam>> parse_lifetime_params (); AST::Visibility parse_visibility (); std::unique_ptr<AST::IdentifierPattern> parse_identifier_pattern (); std::unique_ptr<AST::Token> parse_identifier_or_keyword_token (); @@ -246,17 +246,17 @@ private: std::unique_ptr<AST::Function> parse_function (AST::Visibility vis, AST::AttrVec outer_attrs); AST::FunctionQualifiers parse_function_qualifiers (); - std::vector<std::unique_ptr<AST::GenericParam> > + std::vector<std::unique_ptr<AST::GenericParam>> parse_generic_params_in_angles (); template <typename EndTokenPred> - std::vector<std::unique_ptr<AST::GenericParam> > + std::vector<std::unique_ptr<AST::GenericParam>> parse_generic_params (EndTokenPred is_end_token); template <typename EndTokenPred> std::unique_ptr<AST::GenericParam> parse_generic_param (EndTokenPred is_end_token); template <typename EndTokenPred> - std::vector<std::unique_ptr<AST::LifetimeParam> > + std::vector<std::unique_ptr<AST::LifetimeParam>> parse_lifetime_params (EndTokenPred is_end_token); std::vector<AST::LifetimeParam> parse_lifetime_params_objs (); template <typename EndTokenPred> @@ -268,15 +268,15 @@ private: std::string error_msg = "failed to parse generic param in generic params") -> std::vector<decltype (parsing_function ())>; AST::LifetimeParam parse_lifetime_param (); - std::vector<std::unique_ptr<AST::TypeParam> > parse_type_params (); + std::vector<std::unique_ptr<AST::TypeParam>> parse_type_params (); template <typename EndTokenPred> - std::vector<std::unique_ptr<AST::TypeParam> > + std::vector<std::unique_ptr<AST::TypeParam>> parse_type_params (EndTokenPred is_end_token); std::unique_ptr<AST::TypeParam> parse_type_param (); template <typename EndTokenPred> - std::vector<AST::FunctionParam> + std::vector<std::unique_ptr<AST::Param>> parse_function_params (EndTokenPred is_end_token); - AST::FunctionParam parse_function_param (); + std::unique_ptr<AST::Param> parse_function_param (); std::unique_ptr<AST::Type> parse_function_return_type (); AST::WhereClause parse_where_clause (); std::unique_ptr<AST::WhereClauseItem> parse_where_clause_item (); @@ -286,9 +286,9 @@ private: parse_type_bound_where_clause_item (); std::vector<AST::LifetimeParam> parse_for_lifetimes (); template <typename EndTokenPred> - std::vector<std::unique_ptr<AST::TypeParamBound> > + std::vector<std::unique_ptr<AST::TypeParamBound>> parse_type_param_bounds (EndTokenPred is_end_token); - std::vector<std::unique_ptr<AST::TypeParamBound> > parse_type_param_bounds (); + std::vector<std::unique_ptr<AST::TypeParamBound>> parse_type_param_bounds (); std::unique_ptr<AST::TypeParamBound> parse_type_param_bound (); std::unique_ptr<AST::TraitBound> parse_trait_bound (); std::vector<AST::Lifetime> parse_lifetime_bounds (); @@ -317,9 +317,9 @@ private: AST::TupleField parse_tuple_field (); std::unique_ptr<AST::Enum> parse_enum (AST::Visibility vis, AST::AttrVec outer_attrs); - std::vector<std::unique_ptr<AST::EnumItem> > parse_enum_items (); + std::vector<std::unique_ptr<AST::EnumItem>> parse_enum_items (); template <typename EndTokenPred> - std::vector<std::unique_ptr<AST::EnumItem> > + std::vector<std::unique_ptr<AST::EnumItem>> parse_enum_items (EndTokenPred is_end_token); std::unique_ptr<AST::EnumItem> parse_enum_item (); std::unique_ptr<AST::Union> parse_union (AST::Visibility vis, @@ -334,7 +334,7 @@ private: parse_trait_type (AST::AttrVec outer_attrs); std::unique_ptr<AST::TraitItemConst> parse_trait_const (AST::AttrVec outer_attrs); - AST::SelfParam parse_self_param (); + std::unique_ptr<AST::Param> parse_self_param (); std::unique_ptr<AST::Impl> parse_impl (AST::Visibility vis, AST::AttrVec outer_attrs); std::unique_ptr<AST::InherentImplItem> @@ -594,7 +594,7 @@ private: parse_match_expr (AST::AttrVec outer_attrs = AST::AttrVec (), location_t pratt_parsed_loc = UNKNOWN_LOCATION); AST::MatchArm parse_match_arm (); - std::vector<std::unique_ptr<AST::Pattern> > + std::vector<std::unique_ptr<AST::Pattern>> parse_match_arm_patterns (TokenId end_token_id); std::unique_ptr<AST::Expr> parse_labelled_loop_expr (const_TokenPtr tok, AST::AttrVec outer_attrs @@ -692,7 +692,7 @@ public: // Parse items without parsing an entire crate. This function is the main // parsing loop of AST::Crate::parse_crate(). - std::vector<std::unique_ptr<AST::Item> > parse_items (); + std::vector<std::unique_ptr<AST::Item>> parse_items (); // Main entry point for parser. std::unique_ptr<AST::Crate> parse_crate (); |