From df78aec1a2772ecb205284324c9472abfda4abf2 Mon Sep 17 00:00:00 2001 From: Kushal Pal Date: Fri, 26 Jan 2024 13:21:37 +0530 Subject: [PATCH] Remove obsolete classes and functions. Trait functions now use AST::Function class, so classes AST::TraitItemFunc, AST::TraitItemMethod, AST::TraitFunctionDecl, AST::TraitMethodDecl and their related functions can be removed. gcc/rust/ChangeLog: * ast/rust-ast-collector.cc (TokenCollector::visit): Remove obsolete classes and functions. * ast/rust-ast-collector.h: Likewise. * ast/rust-ast-full-decls.h (class TraitFunctionDecl): Likewise. (class TraitItemFunc): Likewise. (class TraitMethodDecl): Likewise. (class TraitItemMethod): Likewise. * ast/rust-ast-visitor.cc (DefaultASTVisitor::visit): Likewise. * ast/rust-ast-visitor.h: Likewise. * ast/rust-ast.cc (TraitItemFunc::TraitItemFunc): Likewise. (TraitItemFunc::operator=): Likewise. (TraitItemFunc::as_string): Likewise. (TraitFunctionDecl::as_string): Likewise. (TraitItemMethod::TraitItemMethod): Likewise. (TraitItemMethod::operator=): Likewise. (TraitItemMethod::as_string): Likewise. (TraitMethodDecl::as_string): Likewise. (TraitItemFunc::accept_vis): Likewise. (TraitItemMethod::accept_vis): Likewise. * ast/rust-item.h (class TraitFunctionDecl): Likewise. (class TraitItemFunc): Likewise. (class TraitMethodDecl): Likewise. (class TraitItemMethod): Likewise. * checks/errors/rust-ast-validation.cc (ASTValidation::visit): Likewise. * checks/errors/rust-ast-validation.h: Likewise. * checks/errors/rust-feature-gate.h: Likewise. * expand/rust-cfg-strip.cc (CfgStrip::maybe_strip_trait_function_decl): Likewise. (CfgStrip::maybe_strip_trait_method_decl): Likewise. (CfgStrip::visit): Likewise. * expand/rust-cfg-strip.h: Likewise. * expand/rust-derive.h: Likewise. * expand/rust-expand-visitor.cc (ExpandVisitor::expand_trait_function_decl): Likewise. (ExpandVisitor::expand_trait_method_decl): Likewise. (ExpandVisitor::visit): Likewise. * expand/rust-expand-visitor.h: Likewise. * hir/rust-ast-lower-base.cc (ASTLoweringBase::visit): Likewise. * hir/rust-ast-lower-base.h: Likewise. * hir/rust-ast-lower-implitem.cc (ASTLowerTraitItem::visit): Likewise. * hir/rust-ast-lower-implitem.h: Likewise. * resolve/rust-ast-resolve-base.cc (ResolverBase::visit): Likewise. * resolve/rust-ast-resolve-base.h: Likewise. * resolve/rust-ast-resolve-implitem.h (visit): Likewise. * resolve/rust-ast-resolve-item.cc (ResolveTraitItems::visit): Likewise. * resolve/rust-ast-resolve-item.h: Likewise. * resolve/rust-default-resolver.cc (DefaultResolver::visit): Likewise. * resolve/rust-default-resolver.h: Likewise. * resolve/rust-toplevel-name-resolver-2.0.cc (TopLevel::visit): Likewise. * resolve/rust-toplevel-name-resolver-2.0.h: Likewise. * util/rust-attributes.cc (AttributeChecker::visit): Likewise. * util/rust-attributes.h: Likewise. Signed-off-by: Kushal Pal --- gcc/rust/ast/rust-ast-collector.cc | 34 -- gcc/rust/ast/rust-ast-collector.h | 2 - gcc/rust/ast/rust-ast-full-decls.h | 4 - gcc/rust/ast/rust-ast-visitor.cc | 45 -- gcc/rust/ast/rust-ast-visitor.h | 6 - gcc/rust/ast/rust-ast.cc | 209 --------- gcc/rust/ast/rust-item.h | 406 ------------------ gcc/rust/checks/errors/rust-ast-validation.cc | 17 - gcc/rust/checks/errors/rust-ast-validation.h | 1 - gcc/rust/checks/errors/rust-feature-gate.h | 2 - gcc/rust/expand/rust-cfg-strip.cc | 105 ----- gcc/rust/expand/rust-cfg-strip.h | 4 - gcc/rust/expand/rust-derive.h | 2 - gcc/rust/expand/rust-expand-visitor.cc | 54 --- gcc/rust/expand/rust-expand-visitor.h | 4 - gcc/rust/hir/rust-ast-lower-base.cc | 6 - gcc/rust/hir/rust-ast-lower-base.h | 2 - gcc/rust/hir/rust-ast-lower-implitem.cc | 159 ------- gcc/rust/hir/rust-ast-lower-implitem.h | 2 - gcc/rust/resolve/rust-ast-resolve-base.cc | 8 - gcc/rust/resolve/rust-ast-resolve-base.h | 2 - gcc/rust/resolve/rust-ast-resolve-implitem.h | 40 -- gcc/rust/resolve/rust-ast-resolve-item.cc | 155 ------- gcc/rust/resolve/rust-ast-resolve-item.h | 2 - gcc/rust/resolve/rust-default-resolver.cc | 8 - gcc/rust/resolve/rust-default-resolver.h | 2 - .../rust-toplevel-name-resolver-2.0.cc | 10 - .../resolve/rust-toplevel-name-resolver-2.0.h | 1 - gcc/rust/util/rust-attributes.cc | 8 - gcc/rust/util/rust-attributes.h | 2 - 30 files changed, 1302 deletions(-) diff --git a/gcc/rust/ast/rust-ast-collector.cc b/gcc/rust/ast/rust-ast-collector.cc index d5a98f1ccc78..fb0e6f9be1d3 100644 --- a/gcc/rust/ast/rust-ast-collector.cc +++ b/gcc/rust/ast/rust-ast-collector.cc @@ -1948,23 +1948,6 @@ TokenCollector::visit_function_common (std::unique_ptr &return_type, } } -void -TokenCollector::visit (TraitItemFunc &item) -{ - auto func = item.get_trait_function_decl (); - auto id = func.get_identifier ().as_string (); - - push (Rust::Token::make (FN_KW, item.get_locus ())); - push (Rust::Token::make_identifier (UNDEF_LOCATION, std::move (id))); - push (Rust::Token::make (LEFT_PAREN, UNDEF_LOCATION)); - - visit_items_joined_by_separator (func.get_function_params ()); - - push (Rust::Token::make (RIGHT_PAREN, UNDEF_LOCATION)); - - visit_function_common (func.get_return_type (), item.get_definition ()); -} - void TokenCollector::visit (SelfParam ¶m) { @@ -1987,23 +1970,6 @@ TokenCollector::visit (SelfParam ¶m) } } -void -TokenCollector::visit (TraitItemMethod &item) -{ - auto method = item.get_trait_method_decl (); - auto id = method.get_identifier ().as_string (); - - push (Rust::Token::make (FN_KW, item.get_locus ())); - push (Rust::Token::make_identifier (UNDEF_LOCATION, std::move (id))); - push (Rust::Token::make (LEFT_PAREN, UNDEF_LOCATION)); - - visit_items_joined_by_separator (method.get_function_params (), COMMA); - - push (Rust::Token::make (RIGHT_PAREN, UNDEF_LOCATION)); - - visit_function_common (method.get_return_type (), item.get_definition ()); -} - void TokenCollector::visit (TraitItemConst &item) { diff --git a/gcc/rust/ast/rust-ast-collector.h b/gcc/rust/ast/rust-ast-collector.h index 55c13d103d05..246411fa15f9 100644 --- a/gcc/rust/ast/rust-ast-collector.h +++ b/gcc/rust/ast/rust-ast-collector.h @@ -325,9 +325,7 @@ class TokenCollector : public ASTVisitor void visit (Union &union_item); void visit (ConstantItem &const_item); void visit (StaticItem &static_item); - void visit (TraitItemFunc &item); void visit (SelfParam ¶m); - void visit (TraitItemMethod &item); void visit (TraitItemConst &item); void visit (TraitItemType &item); void visit (Trait &trait); diff --git a/gcc/rust/ast/rust-ast-full-decls.h b/gcc/rust/ast/rust-ast-full-decls.h index 07b3c3cd3569..e0fe7b646cd3 100644 --- a/gcc/rust/ast/rust-ast-full-decls.h +++ b/gcc/rust/ast/rust-ast-full-decls.h @@ -193,10 +193,6 @@ class Enum; class Union; class ConstantItem; class StaticItem; -class TraitFunctionDecl; -class TraitItemFunc; -class TraitMethodDecl; -class TraitItemMethod; class TraitItemConst; class TraitItemType; class Trait; diff --git a/gcc/rust/ast/rust-ast-visitor.cc b/gcc/rust/ast/rust-ast-visitor.cc index 586570377aa0..cb7ba846c39e 100644 --- a/gcc/rust/ast/rust-ast-visitor.cc +++ b/gcc/rust/ast/rust-ast-visitor.cc @@ -911,51 +911,6 @@ DefaultASTVisitor::visit (AST::StaticItem &static_item) visit (static_item.get_expr ()); } -void -DefaultASTVisitor::visit (AST::TraitFunctionDecl &decl) -{ - visit (decl.get_qualifiers ()); - for (auto &generic : decl.get_generic_params ()) - visit (generic); - visit (decl.get_where_clause ()); - for (auto ¶m : decl.get_function_params ()) - visit (param); - if (decl.has_return_type ()) - visit (decl.get_return_type ()); -} - -void -DefaultASTVisitor::visit (AST::TraitItemFunc &item) -{ - visit_outer_attrs (item); - visit (item.get_trait_function_decl ()); - if (item.has_definition ()) - visit (item.get_definition ()); -} - -void -DefaultASTVisitor::visit (AST::TraitMethodDecl &decl) -{ - visit (decl.get_qualifiers ()); - for (auto &generic : decl.get_generic_params ()) - visit (generic); - visit (decl.get_where_clause ()); - visit (decl.get_self_param ()); - for (auto ¶m : decl.get_function_params ()) - visit (param); - if (decl.has_return_type ()) - visit (decl.get_return_type ()); -} - -void -DefaultASTVisitor::visit (AST::TraitItemMethod &item) -{ - visit_outer_attrs (item); - visit (item.get_trait_method_decl ()); - if (item.has_definition ()) - visit (item.get_definition ()); -} - void DefaultASTVisitor::visit (AST::TraitItemConst &item) { diff --git a/gcc/rust/ast/rust-ast-visitor.h b/gcc/rust/ast/rust-ast-visitor.h index 8ea118bc3fa2..2ec57cb4de4c 100644 --- a/gcc/rust/ast/rust-ast-visitor.h +++ b/gcc/rust/ast/rust-ast-visitor.h @@ -156,8 +156,6 @@ class ASTVisitor virtual void visit (Union &union_item) = 0; virtual void visit (ConstantItem &const_item) = 0; virtual void visit (StaticItem &static_item) = 0; - virtual void visit (TraitItemFunc &item) = 0; - virtual void visit (TraitItemMethod &item) = 0; virtual void visit (TraitItemConst &item) = 0; virtual void visit (TraitItemType &item) = 0; virtual void visit (Trait &trait) = 0; @@ -330,8 +328,6 @@ class DefaultASTVisitor : public ASTVisitor virtual void visit (AST::Union &union_item) override; virtual void visit (AST::ConstantItem &const_item) override; virtual void visit (AST::StaticItem &static_item) override; - virtual void visit (AST::TraitItemFunc &item) override; - virtual void visit (AST::TraitItemMethod &item) override; virtual void visit (AST::TraitItemConst &item) override; virtual void visit (AST::TraitItemType &item) override; virtual void visit (AST::Trait &trait) override; @@ -420,8 +416,6 @@ class DefaultASTVisitor : public ASTVisitor virtual void visit (AST::WhereClause &where); virtual void visit (AST::StructField &field); virtual void visit (AST::TupleField &field); - virtual void visit (AST::TraitFunctionDecl &decl); - virtual void visit (AST::TraitMethodDecl &decl); virtual void visit (AST::NamedFunctionParam ¶m); virtual void visit (AST::MacroRule &rule); virtual void visit (AST::MacroInvocData &data); diff --git a/gcc/rust/ast/rust-ast.cc b/gcc/rust/ast/rust-ast.cc index afc06bc9097f..c1853968c80c 100644 --- a/gcc/rust/ast/rust-ast.cc +++ b/gcc/rust/ast/rust-ast.cc @@ -3049,203 +3049,6 @@ NamedFunctionParam::as_string () const return str; } -TraitItemFunc::TraitItemFunc (TraitItemFunc const &other) - : TraitItem (other.locus), outer_attrs (other.outer_attrs), decl (other.decl) -{ - node_id = other.node_id; - - // guard to prevent null dereference - if (other.block_expr != nullptr) - block_expr = other.block_expr->clone_block_expr (); -} - -TraitItemFunc & -TraitItemFunc::operator= (TraitItemFunc const &other) -{ - TraitItem::operator= (other); - outer_attrs = other.outer_attrs; - decl = other.decl; - locus = other.locus; - node_id = other.node_id; - - // guard to prevent null dereference - if (other.block_expr != nullptr) - block_expr = other.block_expr->clone_block_expr (); - else - block_expr = nullptr; - - return *this; -} -std::string -TraitItemFunc::as_string () const -{ - std::string str = append_attributes (outer_attrs, OUTER); - - str += "\n" + decl.as_string (); - - str += "\n Definition (block expr): "; - if (has_definition ()) - str += block_expr->as_string (); - else - str += "none"; - - return str; -} - -std::string -TraitFunctionDecl::as_string () const -{ - std::string str - = qualifiers.as_string () + "fn " + function_name.as_string (); - - // generic params - str += "\n Generic params: "; - if (generic_params.empty ()) - { - str += "none"; - } - else - { - for (const auto ¶m : generic_params) - { - // DEBUG: null pointer check - if (param == nullptr) - { - rust_debug ( - "something really terrible has gone wrong - null pointer " - "generic param in trait function decl."); - return "NULL_POINTER_MARK"; - } - - str += "\n " + param->as_string (); - } - } - - str += "\n Function params: "; - if (has_params ()) - { - for (const auto ¶m : function_params) - str += "\n " + param->as_string (); - } - else - { - str += "none"; - } - - str += "\n Return type: "; - if (has_return_type ()) - str += return_type->as_string (); - else - str += "none (void)"; - - str += "\n Where clause: "; - if (has_where_clause ()) - str += where_clause.as_string (); - else - str += "none"; - - return str; -} - -TraitItemMethod::TraitItemMethod (TraitItemMethod const &other) - : TraitItem (other.locus), outer_attrs (other.outer_attrs), decl (other.decl) -{ - node_id = other.node_id; - - // guard to prevent null dereference - if (other.block_expr != nullptr) - block_expr = other.block_expr->clone_block_expr (); -} - -TraitItemMethod & -TraitItemMethod::operator= (TraitItemMethod const &other) -{ - TraitItem::operator= (other); - outer_attrs = other.outer_attrs; - decl = other.decl; - locus = other.locus; - node_id = other.node_id; - - // guard to prevent null dereference - if (other.block_expr != nullptr) - block_expr = other.block_expr->clone_block_expr (); - else - block_expr = nullptr; - - return *this; -} - -std::string -TraitItemMethod::as_string () const -{ - std::string str = append_attributes (outer_attrs, OUTER); - - str += "\n" + decl.as_string (); - - str += "\n Definition (block expr): "; - if (has_definition ()) - str += block_expr->as_string (); - else - str += "none"; - - return str; -} - -std::string -TraitMethodDecl::as_string () const -{ - std::string str - = qualifiers.as_string () + "fn " + function_name.as_string (); - - // generic params - str += "\n Generic params: "; - if (generic_params.empty ()) - { - str += "none"; - } - else - { - for (const auto ¶m : generic_params) - { - // DEBUG: null pointer check - if (param == nullptr) - { - rust_debug ( - "something really terrible has gone wrong - null pointer " - "generic param in trait function decl."); - return "NULL_POINTER_MARK"; - } - - str += "\n " + param->as_string (); - } - } - - str += "\n Function params: "; - if (has_params ()) - { - for (const auto ¶m : function_params) - str += "\n " + param->as_string (); - } - else - { - str += "none"; - } - - str += "\n Return type: "; - if (has_return_type ()) - str += return_type->as_string (); - else - str += "none (void)"; - - str += "\n Where clause: "; - if (has_where_clause ()) - str += where_clause.as_string (); - else - str += "none"; - - return str; -} - std::string TraitItemConst::as_string () const { @@ -5017,18 +4820,6 @@ StaticItem::accept_vis (ASTVisitor &vis) vis.visit (*this); } -void -TraitItemFunc::accept_vis (ASTVisitor &vis) -{ - vis.visit (*this); -} - -void -TraitItemMethod::accept_vis (ASTVisitor &vis) -{ - vis.visit (*this); -} - void TraitItemConst::accept_vis (ASTVisitor &vis) { diff --git a/gcc/rust/ast/rust-item.h b/gcc/rust/ast/rust-item.h index 309f5ed1f698..9a16d677c0dc 100644 --- a/gcc/rust/ast/rust-item.h +++ b/gcc/rust/ast/rust-item.h @@ -2531,412 +2531,6 @@ class StaticItem : public VisItem } }; -// Function declaration in traits -class TraitFunctionDecl -{ - // TODO: delete and replace with Function decl item? no as no body in this. - FunctionQualifiers qualifiers; - Identifier function_name; - - // bool has_generics; - // Generics generic_params; - std::vector> generic_params; // inlined - - // bool has_params; - // FunctionParams function_params; - std::vector> function_params; // inlined - - // bool has_return_type; - std::unique_ptr return_type; - - // bool has_where_clause; - WhereClause where_clause; - - // should this store location info? - -public: - // Returns whether function decl has generic parameters. - bool has_generics () const { return !generic_params.empty (); } - - // Returns whether function decl has regular parameters. - bool has_params () const { return !function_params.empty (); } - - // Returns whether function has return type (otherwise is void). - bool has_return_type () const { return return_type != nullptr; } - - // Returns whether function has a where clause. - bool has_where_clause () const { return !where_clause.is_empty (); } - - Identifier get_identifier () const { return function_name; } - - // Mega-constructor - TraitFunctionDecl (Identifier function_name, FunctionQualifiers qualifiers, - std::vector> generic_params, - std::vector> function_params, - std::unique_ptr return_type, - WhereClause where_clause) - : qualifiers (std::move (qualifiers)), - function_name (std::move (function_name)), - generic_params (std::move (generic_params)), - function_params (std::move (function_params)), - return_type (std::move (return_type)), - where_clause (std::move (where_clause)) - {} - - // Copy constructor with clone - TraitFunctionDecl (TraitFunctionDecl const &other) - : qualifiers (other.qualifiers), function_name (other.function_name), - where_clause (other.where_clause) - { - // guard to prevent nullptr dereference - if (other.return_type != nullptr) - return_type = other.return_type->clone_type (); - - generic_params.reserve (other.generic_params.size ()); - for (const auto &e : other.generic_params) - generic_params.push_back (e->clone_generic_param ()); - - function_params.reserve (other.function_params.size ()); - for (const auto &e : other.function_params) - function_params.push_back (e->clone_param ()); - } - - ~TraitFunctionDecl () = default; - - // Overloaded assignment operator with clone - TraitFunctionDecl &operator= (TraitFunctionDecl const &other) - { - function_name = other.function_name; - qualifiers = other.qualifiers; - where_clause = other.where_clause; - - // guard to prevent nullptr dereference - if (other.return_type != nullptr) - return_type = other.return_type->clone_type (); - else - return_type = nullptr; - - generic_params.reserve (other.generic_params.size ()); - for (const auto &e : other.generic_params) - generic_params.push_back (e->clone_generic_param ()); - - function_params.reserve (other.function_params.size ()); - for (const auto &e : other.function_params) - function_params.push_back (e->clone_param ()); - - return *this; - } - - // move constructors - TraitFunctionDecl (TraitFunctionDecl &&other) = default; - TraitFunctionDecl &operator= (TraitFunctionDecl &&other) = default; - - std::string as_string () const; - - // Invalid if function name is empty, so base stripping on that. - void mark_for_strip () { function_name = {""}; } - bool is_marked_for_strip () const { return function_name.empty (); } - - // TODO: this mutable getter seems really dodgy. Think up better way. - std::vector> &get_function_params () - { - return function_params; - } - const std::vector> &get_function_params () const - { - return function_params; - } - - std::vector> &get_generic_params () - { - return generic_params; - } - const std::vector> &get_generic_params () const - { - return generic_params; - } - - // TODO: is this better? Or is a "vis_block" better? - std::unique_ptr &get_return_type () { return return_type; } - - // TODO: is this better? Or is a "vis_block" better? - WhereClause &get_where_clause () { return where_clause; } - - FunctionQualifiers get_qualifiers () const { return qualifiers; } - FunctionQualifiers &get_qualifiers () { return qualifiers; } -}; - -// Actual trait item function declaration within traits -class TraitItemFunc : public TraitItem -{ - std::vector outer_attrs; - TraitFunctionDecl decl; - std::unique_ptr block_expr; - -public: - // Returns whether function has a definition or is just a declaration. - bool has_definition () const { return block_expr != nullptr; } - - TraitItemFunc (TraitFunctionDecl decl, std::unique_ptr block_expr, - std::vector outer_attrs, location_t locus) - : TraitItem (locus), outer_attrs (std::move (outer_attrs)), - decl (std::move (decl)), block_expr (std::move (block_expr)) - {} - - // Copy constructor with clone - TraitItemFunc (TraitItemFunc const &other); - - // Overloaded assignment operator to clone - - TraitItemFunc &operator= (TraitItemFunc const &other); - - // move constructors - TraitItemFunc (TraitItemFunc &&other) = default; - TraitItemFunc &operator= (TraitItemFunc &&other) = default; - - std::string as_string () const override; - - void accept_vis (ASTVisitor &vis) override; - - // Invalid if trait decl is empty, so base stripping on that. - void mark_for_strip () override { decl.mark_for_strip (); } - bool is_marked_for_strip () const override - { - return decl.is_marked_for_strip (); - } - - // TODO: this mutable getter seems really dodgy. Think up better way. - std::vector &get_outer_attrs () { return outer_attrs; } - const std::vector &get_outer_attrs () const { return outer_attrs; } - - // TODO: is this better? Or is a "vis_block" better? - std::unique_ptr &get_definition () { return block_expr; } - - // TODO: is this better? Or is a "vis_block" better? - TraitFunctionDecl &get_trait_function_decl () - { - // TODO: maybe only allow access if not marked for strip? - return decl; - } - -protected: - // Clone function implementation as (not pure) virtual method - TraitItemFunc *clone_associated_item_impl () const override - { - return new TraitItemFunc (*this); - } -}; - -// Method declaration within traits -class TraitMethodDecl -{ - // TODO: delete and replace with Function decl item? no as no body. - FunctionQualifiers qualifiers; - Identifier function_name; - - // bool has_generics; - // Generics generic_params; - std::vector> generic_params; // inlined - - // bool has_params; - // FunctionParams function_params; - std::vector> function_params; // inlined - - // bool has_return_type; - std::unique_ptr return_type; - - // bool has_where_clause; - WhereClause where_clause; - - // should this store location info? - -public: - // Returns whether method decl has generic parameters. - bool has_generics () const { return !generic_params.empty (); } - - // Returns whether method decl has regular parameters. - bool has_params () const { return !function_params.empty (); } - - // Returns whether method has return type (otherwise is void). - bool has_return_type () const { return return_type != nullptr; } - - // Returns whether method has a where clause. - bool has_where_clause () const { return !where_clause.is_empty (); } - - Identifier get_identifier () const { return function_name; } - - // Mega-constructor - TraitMethodDecl (Identifier function_name, FunctionQualifiers qualifiers, - std::vector> generic_params, - std::vector> function_params, - std::unique_ptr return_type, WhereClause where_clause) - : qualifiers (std::move (qualifiers)), - function_name (std::move (function_name)), - generic_params (std::move (generic_params)), - function_params (std::move (function_params)), - return_type (std::move (return_type)), - where_clause (std::move (where_clause)) - {} - - // Copy constructor with clone - TraitMethodDecl (TraitMethodDecl const &other) - : qualifiers (other.qualifiers), function_name (other.function_name), - where_clause (other.where_clause) - { - // guard to prevent nullptr dereference - if (other.return_type != nullptr) - return_type = other.return_type->clone_type (); - - generic_params.reserve (other.generic_params.size ()); - for (const auto &e : other.generic_params) - generic_params.push_back (e->clone_generic_param ()); - - function_params.reserve (other.function_params.size ()); - for (const auto &e : other.function_params) - function_params.push_back (e->clone_param ()); - } - - ~TraitMethodDecl () = default; - - // Overloaded assignment operator with clone - TraitMethodDecl &operator= (TraitMethodDecl const &other) - { - function_name = other.function_name; - qualifiers = other.qualifiers; - where_clause = other.where_clause; - - // guard to prevent nullptr dereference - if (other.return_type != nullptr) - return_type = other.return_type->clone_type (); - else - return_type = nullptr; - - generic_params.reserve (other.generic_params.size ()); - for (const auto &e : other.generic_params) - generic_params.push_back (e->clone_generic_param ()); - - function_params.reserve (other.function_params.size ()); - for (const auto &e : other.function_params) - function_params.push_back (e->clone_param ()); - - return *this; - } - - // move constructors - TraitMethodDecl (TraitMethodDecl &&other) = default; - TraitMethodDecl &operator= (TraitMethodDecl &&other) = default; - - std::string as_string () const; - - // Invalid if method name is empty, so base stripping on that. - void mark_for_strip () { function_name = {""}; } - bool is_marked_for_strip () const { return function_name.empty (); } - - // TODO: this mutable getter seems really dodgy. Think up better way. - std::vector> &get_function_params () - { - return function_params; - } - const std::vector> &get_function_params () const - { - return function_params; - } - - std::vector> &get_generic_params () - { - return generic_params; - } - const std::vector> &get_generic_params () const - { - return generic_params; - } - - // TODO: is this better? Or is a "vis_block" better? - std::unique_ptr &get_return_type () { return return_type; } - - // TODO: is this better? Or is a "vis_block" better? - WhereClause &get_where_clause () { return where_clause; } - - bool has_self () const - { - return !function_params.empty () && function_params[0]->is_self (); - } - - std::unique_ptr &get_self_param () - { - rust_assert (has_self ()); - return function_params[0]; - } - const std::unique_ptr &get_self_param () const - { - rust_assert (has_self ()); - return function_params[0]; - } - - FunctionQualifiers get_qualifiers () const { return qualifiers; } - - FunctionQualifiers &get_qualifiers () { return qualifiers; } -}; - -// Actual trait item method declaration within traits -class TraitItemMethod : public TraitItem -{ - std::vector outer_attrs; - TraitMethodDecl decl; - std::unique_ptr block_expr; - -public: - // Returns whether method has a definition or is just a declaration. - bool has_definition () const { return block_expr != nullptr; } - - TraitItemMethod (TraitMethodDecl decl, std::unique_ptr block_expr, - std::vector outer_attrs, location_t locus) - : TraitItem (locus), outer_attrs (std::move (outer_attrs)), - decl (std::move (decl)), block_expr (std::move (block_expr)) - {} - - // Copy constructor with clone - TraitItemMethod (TraitItemMethod const &other); - // Overloaded assignment operator to clone - TraitItemMethod &operator= (TraitItemMethod const &other); - - // move constructors - TraitItemMethod (TraitItemMethod &&other) = default; - TraitItemMethod &operator= (TraitItemMethod &&other) = default; - - std::string as_string () const override; - - void accept_vis (ASTVisitor &vis) override; - - // Invalid if trait decl is empty, so base stripping on that. - void mark_for_strip () override { decl.mark_for_strip (); } - bool is_marked_for_strip () const override - { - return decl.is_marked_for_strip (); - } - - // TODO: this mutable getter seems really dodgy. Think up better way. - std::vector &get_outer_attrs () { return outer_attrs; } - const std::vector &get_outer_attrs () const { return outer_attrs; } - - // TODO: is this better? Or is a "vis_block" better? - TraitMethodDecl &get_trait_method_decl () - { - // TODO: maybe only allow access if not marked for strip? - return decl; - } - - // TODO: is this better? Or is a "vis_block" better? - std::unique_ptr &get_definition () { return block_expr; } - -protected: - // Clone function implementation as (not pure) virtual method - TraitItemMethod *clone_associated_item_impl () const override - { - return new TraitItemMethod (*this); - } -}; - // Constant item within traits class TraitItemConst : public TraitItem { diff --git a/gcc/rust/checks/errors/rust-ast-validation.cc b/gcc/rust/checks/errors/rust-ast-validation.cc index d1c8273a0b3f..d57b7cb70fee 100644 --- a/gcc/rust/checks/errors/rust-ast-validation.cc +++ b/gcc/rust/checks/errors/rust-ast-validation.cc @@ -140,23 +140,6 @@ ASTValidation::visit (AST::Function &function) AST::ContextualASTVisitor::visit (function); } -void -ASTValidation::visit (AST::TraitFunctionDecl &decl) -{ - const auto &qualifiers = decl.get_qualifiers (); - - if (context.back () == Context::TRAIT) - { - // may change soon - if (qualifiers.is_async ()) - rust_error_at (decl.get_identifier ().get_locus (), ErrorCode::E0706, - "functions in traits cannot be declared %"); - if (qualifiers.is_const ()) - rust_error_at (decl.get_identifier ().get_locus (), ErrorCode::E0379, - "functions in traits cannot be declared %"); - } -} - void ASTValidation::visit (AST::Trait &trait) { diff --git a/gcc/rust/checks/errors/rust-ast-validation.h b/gcc/rust/checks/errors/rust-ast-validation.h index 963357f86cd8..01d923ceff33 100644 --- a/gcc/rust/checks/errors/rust-ast-validation.h +++ b/gcc/rust/checks/errors/rust-ast-validation.h @@ -42,7 +42,6 @@ class ASTValidation : public AST::ContextualASTVisitor virtual void visit (AST::Union &item); virtual void visit (AST::Function &function); virtual void visit (AST::Trait &trait); - virtual void visit (AST::TraitFunctionDecl &decl); }; } // namespace Rust diff --git a/gcc/rust/checks/errors/rust-feature-gate.h b/gcc/rust/checks/errors/rust-feature-gate.h index a6380854bc36..7a70e81dfaa5 100644 --- a/gcc/rust/checks/errors/rust-feature-gate.h +++ b/gcc/rust/checks/errors/rust-feature-gate.h @@ -125,8 +125,6 @@ class FeatureGate : public AST::DefaultASTVisitor void visit (AST::Union &union_item) override {} void visit (AST::ConstantItem &const_item) override {} void visit (AST::StaticItem &static_item) override {} - void visit (AST::TraitItemFunc &item) override {} - void visit (AST::TraitItemMethod &item) override {} void visit (AST::TraitItemConst &item) override {} void visit (AST::TraitItemType &item) override {} void visit (AST::Trait &trait) override {} diff --git a/gcc/rust/expand/rust-cfg-strip.cc b/gcc/rust/expand/rust-cfg-strip.cc index bbb8d8c350a5..3f668c00002e 100644 --- a/gcc/rust/expand/rust-cfg-strip.cc +++ b/gcc/rust/expand/rust-cfg-strip.cc @@ -375,56 +375,6 @@ CfgStrip::maybe_strip_where_clause (AST::WhereClause &where_clause) item->accept_vis (*this); } -void -CfgStrip::maybe_strip_trait_function_decl (AST::TraitFunctionDecl &decl) -{ - // just expand sub-stuff - can't actually strip generic params themselves - for (auto ¶m : decl.get_generic_params ()) - param->accept_vis (*this); - - /* strip function parameters if required - this is specifically - * allowed by spec */ - maybe_strip_function_params (decl.get_function_params ()); - - if (decl.has_return_type ()) - { - auto &return_type = decl.get_return_type (); - return_type->accept_vis (*this); - - if (return_type->is_marked_for_strip ()) - rust_error_at (return_type->get_locus (), - "cannot strip type in this position"); - } - - if (decl.has_where_clause ()) - maybe_strip_where_clause (decl.get_where_clause ()); -} - -void -CfgStrip::maybe_strip_trait_method_decl (AST::TraitMethodDecl &decl) -{ - // just expand sub-stuff - can't actually strip generic params themselves - for (auto ¶m : decl.get_generic_params ()) - param->accept_vis (*this); - - /* strip function parameters if required - this is specifically - * allowed by spec */ - maybe_strip_function_params (decl.get_function_params ()); - - if (decl.has_return_type ()) - { - auto &return_type = decl.get_return_type (); - return_type->accept_vis (*this); - - if (return_type->is_marked_for_strip ()) - rust_error_at (return_type->get_locus (), - "cannot strip type in this position"); - } - - if (decl.has_where_clause ()) - maybe_strip_where_clause (decl.get_where_clause ()); -} - void CfgStrip::visit (AST::IdentifierExpr &ident_expr) { @@ -2080,61 +2030,6 @@ CfgStrip::visit (AST::StaticItem &static_item) "cannot strip expression in this position - outer " "attributes not allowed"); } -void -CfgStrip::visit (AST::TraitItemFunc &item) -{ - // initial test based on outer attrs - expand_cfg_attrs (item.get_outer_attrs ()); - if (fails_cfg_with_expand (item.get_outer_attrs ())) - { - item.mark_for_strip (); - return; - } - - maybe_strip_trait_function_decl (item.get_trait_function_decl ()); - - AST::DefaultASTVisitor::visit (item); - - if (item.has_definition ()) - { - /* strip any internal sub-expressions - expression itself isn't - * allowed to have external attributes in this position so can't be - * stripped. */ - auto &block = item.get_definition (); - if (block->is_marked_for_strip ()) - rust_error_at (block->get_locus (), - "cannot strip block expression in this " - "position - outer attributes not allowed"); - } -} - -void -CfgStrip::visit (AST::TraitItemMethod &item) -{ - // initial test based on outer attrs - expand_cfg_attrs (item.get_outer_attrs ()); - if (fails_cfg_with_expand (item.get_outer_attrs ())) - { - item.mark_for_strip (); - return; - } - - maybe_strip_trait_method_decl (item.get_trait_method_decl ()); - - AST::DefaultASTVisitor::visit (item); - - if (item.has_definition ()) - { - /* strip any internal sub-expressions - expression itself isn't - * allowed to have external attributes in this position so can't be - * stripped. */ - auto &block = item.get_definition (); - if (block->is_marked_for_strip ()) - rust_error_at (block->get_locus (), - "cannot strip block expression in this " - "position - outer attributes not allowed"); - } -} void CfgStrip::visit (AST::TraitItemConst &item) diff --git a/gcc/rust/expand/rust-cfg-strip.h b/gcc/rust/expand/rust-cfg-strip.h index 06e85e1e89d6..f1c5d42505ce 100644 --- a/gcc/rust/expand/rust-cfg-strip.h +++ b/gcc/rust/expand/rust-cfg-strip.h @@ -42,8 +42,6 @@ class CfgStrip : public AST::DefaultASTVisitor void maybe_strip_closure_params (std::vector ¶ms); void maybe_strip_self_param (AST::SelfParam &self_param); void maybe_strip_where_clause (AST::WhereClause &where_clause); - void maybe_strip_trait_function_decl (AST::TraitFunctionDecl &decl); - void maybe_strip_trait_method_decl (AST::TraitMethodDecl &decl); /** * maybe_strip a set of values, erasing them if they are marked for strip. @@ -145,8 +143,6 @@ class CfgStrip : public AST::DefaultASTVisitor void visit (AST::Union &union_item) override; void visit (AST::ConstantItem &const_item) override; void visit (AST::StaticItem &static_item) override; - void visit (AST::TraitItemFunc &item) override; - void visit (AST::TraitItemMethod &item) override; void visit (AST::TraitItemConst &item) override; void visit (AST::TraitItemType &item) override; void visit (AST::Trait &trait) override; diff --git a/gcc/rust/expand/rust-derive.h b/gcc/rust/expand/rust-derive.h index d5c8b44442dd..1531d81f57c1 100644 --- a/gcc/rust/expand/rust-derive.h +++ b/gcc/rust/expand/rust-derive.h @@ -159,8 +159,6 @@ class DeriveVisitor : public AST::ASTVisitor virtual void visit (EnumItemDiscriminant &item) override final{}; virtual void visit (ConstantItem &const_item) override final{}; virtual void visit (StaticItem &static_item) override final{}; - virtual void visit (TraitItemFunc &item) override final{}; - virtual void visit (TraitItemMethod &item) override final{}; virtual void visit (TraitItemConst &item) override final{}; virtual void visit (TraitItemType &item) override final{}; virtual void visit (Trait &trait) override final{}; diff --git a/gcc/rust/expand/rust-expand-visitor.cc b/gcc/rust/expand/rust-expand-visitor.cc index bc0149ca99d8..e42715b865f3 100644 --- a/gcc/rust/expand/rust-expand-visitor.cc +++ b/gcc/rust/expand/rust-expand-visitor.cc @@ -437,42 +437,6 @@ ExpandVisitor::expand_where_clause (AST::WhereClause &where_clause) visit (item); } -void -ExpandVisitor::expand_trait_function_decl (AST::TraitFunctionDecl &decl) -{ - // just expand sub-stuff - can't actually strip generic params themselves - for (auto ¶m : decl.get_generic_params ()) - visit (param); - - /* strip function parameters if required - this is specifically - * allowed by spec */ - expand_function_params (decl.get_function_params ()); - - if (decl.has_return_type ()) - maybe_expand_type (decl.get_return_type ()); - - if (decl.has_where_clause ()) - expand_where_clause (decl.get_where_clause ()); -} - -void -ExpandVisitor::expand_trait_method_decl (AST::TraitMethodDecl &decl) -{ - for (auto ¶m : decl.get_generic_params ()) - visit (param); - - /* strip function parameters if required - this is specifically - * allowed by spec */ - expand_function_params (decl.get_function_params ()); - - if (decl.has_return_type ()) - - maybe_expand_type (decl.get_return_type ()); - - if (decl.has_where_clause ()) - expand_where_clause (decl.get_where_clause ()); -} - void ExpandVisitor::visit (AST::Crate &crate) { @@ -862,24 +826,6 @@ ExpandVisitor::visit (AST::StaticItem &static_item) maybe_expand_expr (static_item.get_expr ()); } -void -ExpandVisitor::visit (AST::TraitItemFunc &item) -{ - expand_trait_function_decl (item.get_trait_function_decl ()); - - if (item.has_definition ()) - visit (item.get_definition ()); -} - -void -ExpandVisitor::visit (AST::TraitItemMethod &item) -{ - expand_trait_method_decl (item.get_trait_method_decl ()); - - if (item.has_definition ()) - visit (item.get_definition ()); -} - void ExpandVisitor::visit (AST::TraitItemConst &const_item) { diff --git a/gcc/rust/expand/rust-expand-visitor.h b/gcc/rust/expand/rust-expand-visitor.h index bae9b0f8fa5a..8f61db659c37 100644 --- a/gcc/rust/expand/rust-expand-visitor.h +++ b/gcc/rust/expand/rust-expand-visitor.h @@ -86,8 +86,6 @@ class ExpandVisitor : public AST::DefaultASTVisitor // FIXME: Add documentation void expand_closure_params (std::vector ¶ms); void expand_where_clause (AST::WhereClause &where_clause); - void expand_trait_function_decl (AST::TraitFunctionDecl &decl); - void expand_trait_method_decl (AST::TraitMethodDecl &decl); /** * Expand a set of values, erasing them if they are marked for strip, and @@ -248,8 +246,6 @@ class ExpandVisitor : public AST::DefaultASTVisitor void visit (AST::Union &union_item) override; void visit (AST::ConstantItem &const_item) override; void visit (AST::StaticItem &static_item) override; - void visit (AST::TraitItemFunc &item) override; - void visit (AST::TraitItemMethod &item) override; void visit (AST::TraitItemConst &item) override; void visit (AST::Trait &trait) override; void visit (AST::InherentImpl &impl) override; diff --git a/gcc/rust/hir/rust-ast-lower-base.cc b/gcc/rust/hir/rust-ast-lower-base.cc index 36188d59b808..9527e2f41b6b 100644 --- a/gcc/rust/hir/rust-ast-lower-base.cc +++ b/gcc/rust/hir/rust-ast-lower-base.cc @@ -321,12 +321,6 @@ void ASTLoweringBase::visit (AST::StaticItem &) {} void -ASTLoweringBase::visit (AST::TraitItemFunc &) -{} -void -ASTLoweringBase::visit (AST::TraitItemMethod &) -{} -void ASTLoweringBase::visit (AST::TraitItemConst &) {} void diff --git a/gcc/rust/hir/rust-ast-lower-base.h b/gcc/rust/hir/rust-ast-lower-base.h index e38e5d6922d5..e7beccea9e6d 100644 --- a/gcc/rust/hir/rust-ast-lower-base.h +++ b/gcc/rust/hir/rust-ast-lower-base.h @@ -177,8 +177,6 @@ class ASTLoweringBase : public AST::ASTVisitor virtual void visit (AST::Union &union_item); virtual void visit (AST::ConstantItem &const_item); virtual void visit (AST::StaticItem &static_item); - virtual void visit (AST::TraitItemFunc &item); - virtual void visit (AST::TraitItemMethod &item); virtual void visit (AST::TraitItemConst &item); virtual void visit (AST::TraitItemType &item); virtual void visit (AST::Trait &trait); diff --git a/gcc/rust/hir/rust-ast-lower-implitem.cc b/gcc/rust/hir/rust-ast-lower-implitem.cc index 77230e7a8bfa..399c3fb81797 100644 --- a/gcc/rust/hir/rust-ast-lower-implitem.cc +++ b/gcc/rust/hir/rust-ast-lower-implitem.cc @@ -313,165 +313,6 @@ ASTLowerTraitItem::visit (AST::Function &func) } } -void -ASTLowerTraitItem::visit (AST::TraitItemFunc &func) -{ - AST::TraitFunctionDecl &ref = func.get_trait_function_decl (); - std::vector > where_clause_items; - HIR::WhereClause where_clause (std::move (where_clause_items)); - HIR::FunctionQualifiers qualifiers - = lower_qualifiers (func.get_trait_function_decl ().get_qualifiers ()); - - std::vector > generic_params; - if (ref.has_generics ()) - { - generic_params = lower_generic_params (ref.get_generic_params ()); - } - - std::unique_ptr return_type - = ref.has_return_type () ? std::unique_ptr ( - ASTLoweringType::translate (ref.get_return_type ().get ())) - : nullptr; - - std::vector function_params; - for (auto &p : ref.get_function_params ()) - { - if (p->is_variadic () || p->is_self ()) - continue; - - auto param = static_cast (p.get ()); - - auto translated_pattern = std::unique_ptr ( - ASTLoweringPattern::translate (param->get_pattern ().get ())); - auto translated_type = std::unique_ptr ( - ASTLoweringType::translate (param->get_type ().get ())); - - auto crate_num = mappings->get_current_crate (); - Analysis::NodeMapping mapping (crate_num, param->get_node_id (), - mappings->get_next_hir_id (crate_num), - UNKNOWN_LOCAL_DEFID); - - auto hir_param - = HIR::FunctionParam (mapping, std::move (translated_pattern), - std::move (translated_type), param->get_locus ()); - function_params.push_back (std::move (hir_param)); - } - - HIR::TraitFunctionDecl decl (ref.get_identifier (), std::move (qualifiers), - std::move (generic_params), - HIR::SelfParam::error (), - std::move (function_params), - std::move (return_type), - std::move (where_clause)); - bool terminated = false; - std::unique_ptr block_expr - = func.has_definition () ? std::unique_ptr ( - ASTLoweringBlock::translate (func.get_definition ().get (), - &terminated)) - : nullptr; - - auto crate_num = mappings->get_current_crate (); - Analysis::NodeMapping mapping (crate_num, func.get_node_id (), - mappings->get_next_hir_id (crate_num), - mappings->get_next_localdef_id (crate_num)); - - HIR::TraitItemFunc *trait_item - = new HIR::TraitItemFunc (mapping, std::move (decl), std::move (block_expr), - func.get_outer_attrs (), func.get_locus ()); - translated = trait_item; - - // add the mappings for the function params at the end - for (auto ¶m : trait_item->get_decl ().get_function_params ()) - { - mappings->insert_hir_param (¶m); - mappings->insert_location (mapping.get_hirid (), param.get_locus ()); - } -} - -void -ASTLowerTraitItem::visit (AST::TraitItemMethod &method) -{ - AST::TraitMethodDecl &ref = method.get_trait_method_decl (); - - std::vector > where_clause_items; - HIR::WhereClause where_clause (std::move (where_clause_items)); - HIR::FunctionQualifiers qualifiers - = lower_qualifiers (method.get_trait_method_decl ().get_qualifiers ()); - - std::vector > generic_params; - if (ref.has_generics ()) - { - generic_params = lower_generic_params (ref.get_generic_params ()); - } - - std::unique_ptr return_type - = ref.has_return_type () ? std::unique_ptr ( - ASTLoweringType::translate (ref.get_return_type ().get ())) - : nullptr; - - HIR::SelfParam self_param = lower_self (ref.get_self_param ()); - - std::vector function_params; - for (auto &p : ref.get_function_params ()) - { - if (p->is_variadic () || p->is_self ()) - continue; - - auto param = static_cast (p.get ()); - - auto translated_pattern = std::unique_ptr ( - ASTLoweringPattern::translate (param->get_pattern ().get ())); - auto translated_type = std::unique_ptr ( - ASTLoweringType::translate (param->get_type ().get ())); - - auto crate_num = mappings->get_current_crate (); - Analysis::NodeMapping mapping (crate_num, param->get_node_id (), - mappings->get_next_hir_id (crate_num), - UNKNOWN_LOCAL_DEFID); - - auto hir_param - = HIR::FunctionParam (mapping, std::move (translated_pattern), - std::move (translated_type), param->get_locus ()); - function_params.push_back (hir_param); - } - - HIR::TraitFunctionDecl decl (ref.get_identifier (), std::move (qualifiers), - std::move (generic_params), - std::move (self_param), - std::move (function_params), - std::move (return_type), - std::move (where_clause)); - - bool terminated = false; - std::unique_ptr block_expr - = method.has_definition () ? std::unique_ptr ( - ASTLoweringBlock::translate (method.get_definition ().get (), - &terminated)) - : nullptr; - - auto crate_num = mappings->get_current_crate (); - Analysis::NodeMapping mapping (crate_num, method.get_node_id (), - mappings->get_next_hir_id (crate_num), - mappings->get_next_localdef_id (crate_num)); - - HIR::TraitItemFunc *trait_item - = new HIR::TraitItemFunc (mapping, std::move (decl), std::move (block_expr), - method.get_outer_attrs (), method.get_locus ()); - translated = trait_item; - - // insert mappings for self - mappings->insert_hir_self_param (&self_param); - mappings->insert_location (self_param.get_mappings ().get_hirid (), - self_param.get_locus ()); - - // add the mappings for the function params at the end - for (auto ¶m : trait_item->get_decl ().get_function_params ()) - { - mappings->insert_hir_param (¶m); - mappings->insert_location (mapping.get_hirid (), param.get_locus ()); - } -} - void ASTLowerTraitItem::visit (AST::TraitItemConst &constant) { diff --git a/gcc/rust/hir/rust-ast-lower-implitem.h b/gcc/rust/hir/rust-ast-lower-implitem.h index 9b017f9597d5..81b053a76f83 100644 --- a/gcc/rust/hir/rust-ast-lower-implitem.h +++ b/gcc/rust/hir/rust-ast-lower-implitem.h @@ -49,8 +49,6 @@ class ASTLowerTraitItem : public ASTLoweringBase public: static HIR::TraitItem *translate (AST::AssociatedItem *item); void visit (AST::Function &func) override; - void visit (AST::TraitItemFunc &func) override; - void visit (AST::TraitItemMethod &method) override; void visit (AST::TraitItemConst &constant) override; void visit (AST::TraitItemType &type) override; diff --git a/gcc/rust/resolve/rust-ast-resolve-base.cc b/gcc/rust/resolve/rust-ast-resolve-base.cc index 994a57a001f3..fa7c3ba9ab98 100644 --- a/gcc/rust/resolve/rust-ast-resolve-base.cc +++ b/gcc/rust/resolve/rust-ast-resolve-base.cc @@ -402,14 +402,6 @@ void ResolverBase::visit (AST::StaticItem &) {} -void -ResolverBase::visit (AST::TraitItemFunc &) -{} - -void -ResolverBase::visit (AST::TraitItemMethod &) -{} - void ResolverBase::visit (AST::TraitItemConst &) {} diff --git a/gcc/rust/resolve/rust-ast-resolve-base.h b/gcc/rust/resolve/rust-ast-resolve-base.h index 145fc463de53..a19e1bc8ea64 100644 --- a/gcc/rust/resolve/rust-ast-resolve-base.h +++ b/gcc/rust/resolve/rust-ast-resolve-base.h @@ -126,8 +126,6 @@ class ResolverBase : public AST::ASTVisitor void visit (AST::Union &); void visit (AST::ConstantItem &); void visit (AST::StaticItem &); - void visit (AST::TraitItemFunc &); - void visit (AST::TraitItemMethod &); void visit (AST::TraitItemConst &); void visit (AST::TraitItemType &); void visit (AST::Trait &); diff --git a/gcc/rust/resolve/rust-ast-resolve-implitem.h b/gcc/rust/resolve/rust-ast-resolve-implitem.h index 87a2713db55d..1abaa00d8622 100644 --- a/gcc/rust/resolve/rust-ast-resolve-implitem.h +++ b/gcc/rust/resolve/rust-ast-resolve-implitem.h @@ -130,46 +130,6 @@ class ResolveTopLevelTraitItems : public ResolverBase mappings->insert_canonical_path (function.get_node_id (), cpath); } - void visit (AST::TraitItemFunc &function) override - { - auto decl = CanonicalPath::new_seg ( - function.get_node_id (), - function.get_trait_function_decl ().get_identifier ().as_string ()); - auto path = prefix.append (decl); - auto cpath = canonical_prefix.append (decl); - - resolver->get_name_scope ().insert ( - path, function.get_node_id (), function.get_locus (), false, - Rib::ItemType::Function, - [&] (const CanonicalPath &, NodeId, location_t locus) -> void { - rich_location r (line_table, function.get_locus ()); - r.add_range (locus); - rust_error_at (r, "redefined multiple times"); - }); - - mappings->insert_canonical_path (function.get_node_id (), cpath); - } - - void visit (AST::TraitItemMethod &method) override - { - auto decl = CanonicalPath::new_seg ( - method.get_node_id (), - method.get_trait_method_decl ().get_identifier ().as_string ()); - auto path = prefix.append (decl); - auto cpath = canonical_prefix.append (decl); - - resolver->get_name_scope ().insert ( - path, method.get_node_id (), method.get_locus (), false, - Rib::ItemType::Function, - [&] (const CanonicalPath &, NodeId, location_t locus) -> void { - rich_location r (line_table, method.get_locus ()); - r.add_range (locus); - rust_error_at (r, "redefined multiple times"); - }); - - mappings->insert_canonical_path (method.get_node_id (), cpath); - } - void visit (AST::TraitItemConst &constant) override { auto decl diff --git a/gcc/rust/resolve/rust-ast-resolve-item.cc b/gcc/rust/resolve/rust-ast-resolve-item.cc index d9901534f33f..3aba117f77c9 100644 --- a/gcc/rust/resolve/rust-ast-resolve-item.cc +++ b/gcc/rust/resolve/rust-ast-resolve-item.cc @@ -146,161 +146,6 @@ ResolveTraitItems::visit (AST::TraitItemType &type) ResolveTypeBound::go (bound.get ()); } -void -ResolveTraitItems::visit (AST::TraitItemFunc &func) -{ - auto decl = CanonicalPath::new_seg ( - func.get_node_id (), - func.get_trait_function_decl ().get_identifier ().as_string ()); - auto path = prefix.append (decl); - auto cpath = canonical_prefix.append (decl); - mappings->insert_canonical_path (func.get_node_id (), cpath); - - NodeId scope_node_id = func.get_node_id (); - resolver->get_name_scope ().push (scope_node_id); - resolver->get_type_scope ().push (scope_node_id); - resolver->get_label_scope ().push (scope_node_id); - resolver->push_new_name_rib (resolver->get_name_scope ().peek ()); - resolver->push_new_type_rib (resolver->get_type_scope ().peek ()); - resolver->push_new_label_rib (resolver->get_type_scope ().peek ()); - - AST::TraitFunctionDecl &function = func.get_trait_function_decl (); - if (function.has_generics ()) - for (auto &generic : function.get_generic_params ()) - ResolveGenericParam::go (generic.get (), prefix, canonical_prefix); - - if (function.has_return_type ()) - ResolveType::go (function.get_return_type ().get ()); - - std::vector bindings - = {PatternBinding (PatternBoundCtx::Product, std::set ())}; - - // we make a new scope so the names of parameters are resolved and shadowed - // correctly - for (auto &p : function.get_function_params ()) - { - if (p->is_variadic ()) - { - auto param = static_cast (p.get ()); - PatternDeclaration::go (param->get_pattern ().get (), - Rib::ItemType::Param, bindings); - } - else if (p->is_self ()) - { - auto param = static_cast (p.get ()); - ResolveType::go (param->get_type ().get ()); - } - else - { - auto param = static_cast (p.get ()); - ResolveType::go (param->get_type ().get ()); - PatternDeclaration::go (param->get_pattern ().get (), - Rib::ItemType::Param, bindings); - } - } - - if (function.has_where_clause ()) - ResolveWhereClause::Resolve (function.get_where_clause ()); - - // trait items have an optional body - if (func.has_definition ()) - ResolveExpr::go (func.get_definition ().get (), path, cpath); - - resolver->get_name_scope ().pop (); - resolver->get_type_scope ().pop (); - resolver->get_label_scope ().pop (); -} - -void -ResolveTraitItems::visit (AST::TraitItemMethod &func) -{ - auto decl = CanonicalPath::new_seg ( - func.get_node_id (), - func.get_trait_method_decl ().get_identifier ().as_string ()); - auto path = prefix.append (decl); - auto cpath = canonical_prefix.append (decl); - mappings->insert_canonical_path (func.get_node_id (), cpath); - - NodeId scope_node_id = func.get_node_id (); - resolver->get_name_scope ().push (scope_node_id); - resolver->get_type_scope ().push (scope_node_id); - resolver->get_label_scope ().push (scope_node_id); - resolver->push_new_name_rib (resolver->get_name_scope ().peek ()); - resolver->push_new_type_rib (resolver->get_type_scope ().peek ()); - resolver->push_new_label_rib (resolver->get_type_scope ().peek ()); - - AST::TraitMethodDecl &function = func.get_trait_method_decl (); - if (function.has_generics ()) - for (auto &generic : function.get_generic_params ()) - ResolveGenericParam::go (generic.get (), prefix, canonical_prefix); - - if (function.has_return_type ()) - ResolveType::go (function.get_return_type ().get ()); - - // self turns into (self: Self) as a function param - std::vector bindings - = {PatternBinding (PatternBoundCtx::Product, std::set ())}; - - // we make a new scope so the names of parameters are resolved and shadowed - // correctly - for (auto &p : function.get_function_params ()) - { - if (p->is_variadic ()) - { - auto param = static_cast (p.get ()); - PatternDeclaration::go (param->get_pattern ().get (), - Rib::ItemType::Param, bindings); - } - else if (p->is_self ()) - { - auto param = static_cast (p.get ()); - // FIXME: which location should be used for Rust::Identifier `self`? - AST::IdentifierPattern self_pattern ( - param->get_node_id (), {"self"}, param->get_locus (), - param->get_has_ref (), param->get_is_mut (), - std::unique_ptr (nullptr)); - - PatternDeclaration::go (&self_pattern, Rib::ItemType::Param); - - if (param->has_type ()) - { - // This shouldn't happen the parser should already error for this - rust_assert (!param->get_has_ref ()); - ResolveType::go (param->get_type ().get ()); - } - else - { - // here we implicitly make self have a type path of Self - std::vector> segments; - segments.push_back (std::unique_ptr ( - new AST::TypePathSegment ("Self", false, param->get_locus ()))); - - AST::TypePath self_type_path (std::move (segments), - param->get_locus ()); - ResolveType::go (&self_type_path); - } - } - else - { - auto param = static_cast (p.get ()); - ResolveType::go (param->get_type ().get ()); - PatternDeclaration::go (param->get_pattern ().get (), - Rib::ItemType::Param, bindings); - } - } - - if (function.has_where_clause ()) - ResolveWhereClause::Resolve (function.get_where_clause ()); - - // trait items have an optional body - if (func.has_definition ()) - ResolveExpr::go (func.get_definition ().get (), path, cpath); - - resolver->get_name_scope ().pop (); - resolver->get_type_scope ().pop (); - resolver->get_label_scope ().pop (); -} - void ResolveTraitItems::visit (AST::TraitItemConst &constant) { diff --git a/gcc/rust/resolve/rust-ast-resolve-item.h b/gcc/rust/resolve/rust-ast-resolve-item.h index cc4d7b133667..b1595e3367b7 100644 --- a/gcc/rust/resolve/rust-ast-resolve-item.h +++ b/gcc/rust/resolve/rust-ast-resolve-item.h @@ -37,8 +37,6 @@ class ResolveTraitItems : public ResolverBase void visit (AST::Function &type) override; void visit (AST::TraitItemType &type) override; - void visit (AST::TraitItemFunc &func) override; - void visit (AST::TraitItemMethod &func) override; void visit (AST::TraitItemConst &constant) override; private: diff --git a/gcc/rust/resolve/rust-default-resolver.cc b/gcc/rust/resolve/rust-default-resolver.cc index ab4d5e8b70dc..b11635356573 100644 --- a/gcc/rust/resolve/rust-default-resolver.cc +++ b/gcc/rust/resolve/rust-default-resolver.cc @@ -402,14 +402,6 @@ DefaultResolver::visit (AST::StaticItem &item) ctx.scoped (Rib::Kind::ConstantItem, item.get_node_id (), expr_vis); } -void -DefaultResolver::visit (AST::TraitItemFunc &) -{} - -void -DefaultResolver::visit (AST::TraitItemMethod &) -{} - void DefaultResolver::visit (AST::TraitItemConst &) {} diff --git a/gcc/rust/resolve/rust-default-resolver.h b/gcc/rust/resolve/rust-default-resolver.h index 20dbff8e110f..d508ff3ac79e 100644 --- a/gcc/rust/resolve/rust-default-resolver.h +++ b/gcc/rust/resolve/rust-default-resolver.h @@ -114,8 +114,6 @@ class DefaultResolver : public AST::DefaultASTVisitor void visit (AST::EnumItemDiscriminant &); void visit (AST::ConstantItem &); void visit (AST::StaticItem &); - void visit (AST::TraitItemFunc &); - void visit (AST::TraitItemMethod &); void visit (AST::TraitItemConst &); void visit (AST::TraitItemType &); void visit (AST::ExternalTypeItem &); diff --git a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc index 46113a8a46b3..af7766d7b964 100644 --- a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc +++ b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc @@ -228,16 +228,6 @@ TopLevel::visit (AST::StaticItem &static_item) ctx.scoped (Rib::Kind::Item, static_item.get_node_id (), sub_vis); } -void -TopLevel::visit (AST::TraitItemFunc &item) -{ - auto def_vis - = [this, &item] () { item.get_definition ()->accept_vis (*this); }; - - if (item.has_definition ()) - ctx.scoped (Rib::Kind::Function, item.get_node_id (), def_vis); -} - void TopLevel::visit (AST::StructStruct &struct_item) { diff --git a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h index 996899b0848f..f1943ee1398d 100644 --- a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h +++ b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h @@ -65,7 +65,6 @@ class TopLevel : public DefaultResolver void visit (AST::Function &function) override; void visit (AST::BlockExpr &expr) override; void visit (AST::StaticItem &static_item) override; - void visit (AST::TraitItemFunc &item) override; void visit (AST::StructStruct &struct_item) override; void visit (AST::TupleStruct &tuple_struct) override; void visit (AST::EnumItem &variant) override; diff --git a/gcc/rust/util/rust-attributes.cc b/gcc/rust/util/rust-attributes.cc index 4975f10890f5..dc72c578f827 100644 --- a/gcc/rust/util/rust-attributes.cc +++ b/gcc/rust/util/rust-attributes.cc @@ -730,14 +730,6 @@ AttributeChecker::visit (AST::StaticItem &item) check_proc_macro_non_function (item.get_outer_attrs ()); } -void -AttributeChecker::visit (AST::TraitItemFunc &) -{} - -void -AttributeChecker::visit (AST::TraitItemMethod &) -{} - void AttributeChecker::visit (AST::TraitItemConst &) {} diff --git a/gcc/rust/util/rust-attributes.h b/gcc/rust/util/rust-attributes.h index 5853661d6912..05848220cad8 100644 --- a/gcc/rust/util/rust-attributes.h +++ b/gcc/rust/util/rust-attributes.h @@ -192,8 +192,6 @@ class AttributeChecker : public AST::DefaultASTVisitor void visit (AST::Union &union_item) override; void visit (AST::ConstantItem &const_item) override; void visit (AST::StaticItem &static_item) override; - void visit (AST::TraitItemFunc &item) override; - void visit (AST::TraitItemMethod &item) override; void visit (AST::TraitItemConst &item) override; void visit (AST::TraitItemType &item) override; void visit (AST::Trait &trait) override;