diff --git a/gcc/rust/ast/rust-ast.h b/gcc/rust/ast/rust-ast.h index 0d853e744c76..4d910b4a8619 100644 --- a/gcc/rust/ast/rust-ast.h +++ b/gcc/rust/ast/rust-ast.h @@ -1179,6 +1179,12 @@ class Item : public Stmt ExternBlock, }; + // Returns whether the item is generated by a derive attribute. + bool is_derived () const { return derived; } + + // Sets the item as derived. + void set_derived () { derived = true; } + virtual Kind get_item_kind () const = 0; // Unique pointer custom clone function @@ -1212,6 +1218,9 @@ class Item : public Stmt * statement clone return item clone. Hopefully won't affect performance too * much. */ Item *clone_stmt_impl () const final override { return clone_item_impl (); } + +private: + bool derived = false; }; // Item that supports visibility - abstract base class diff --git a/gcc/rust/hir/rust-ast-lower-base.cc b/gcc/rust/hir/rust-ast-lower-base.cc index b07ac0c07500..1a0d20abe824 100644 --- a/gcc/rust/hir/rust-ast-lower-base.cc +++ b/gcc/rust/hir/rust-ast-lower-base.cc @@ -1010,7 +1010,8 @@ ASTLoweringBase::lower_extern_block (AST::ExternBlock &extern_block) = new HIR::ExternBlock (mapping, abi, std::move (extern_items), std::move (vis), extern_block.get_inner_attrs (), extern_block.get_outer_attrs (), - extern_block.get_locus ()); + extern_block.get_locus (), + extern_block.is_derived ()); mappings.insert_hir_extern_block (hir_extern_block); diff --git a/gcc/rust/hir/rust-ast-lower-enumitem.h b/gcc/rust/hir/rust-ast-lower-enumitem.h index 1b9534564251..3b72445df227 100644 --- a/gcc/rust/hir/rust-ast-lower-enumitem.h +++ b/gcc/rust/hir/rust-ast-lower-enumitem.h @@ -64,7 +64,8 @@ class ASTLoweringEnumItem : public ASTLoweringBase "visibility qualifier %qs not allowed on enum item", item.get_visibility ().as_string ().c_str ()); translated = new HIR::EnumItem (mapping, item.get_identifier (), - item.get_outer_attrs (), item.get_locus ()); + item.get_outer_attrs (), item.get_locus (), + item.is_derived ()); } void visit (AST::EnumItemTuple &item) override @@ -100,7 +101,7 @@ class ASTLoweringEnumItem : public ASTLoweringBase translated = new HIR::EnumItemTuple (mapping, item.get_identifier (), std::move (fields), item.get_outer_attrs (), - item.get_locus ()); + item.get_locus (), item.is_derived ()); } void visit (AST::EnumItemStruct &item) override @@ -141,7 +142,7 @@ class ASTLoweringEnumItem : public ASTLoweringBase translated = new HIR::EnumItemStruct (mapping, item.get_identifier (), std::move (fields), item.get_outer_attrs (), - item.get_locus ()); + item.get_locus (), item.is_derived ()); } void visit (AST::EnumItemDiscriminant &item) override @@ -161,7 +162,7 @@ class ASTLoweringEnumItem : public ASTLoweringBase = new HIR::EnumItemDiscriminant (mapping, item.get_identifier (), std::unique_ptr (expr), item.get_outer_attrs (), - item.get_locus ()); + item.get_locus (), item.is_derived ()); } private: diff --git a/gcc/rust/hir/rust-ast-lower-implitem.cc b/gcc/rust/hir/rust-ast-lower-implitem.cc index fc9fe1ace4a9..e18d6dce9b89 100644 --- a/gcc/rust/hir/rust-ast-lower-implitem.cc +++ b/gcc/rust/hir/rust-ast-lower-implitem.cc @@ -76,7 +76,7 @@ ASTLowerImplItem::visit (AST::TypeAlias &alias) std::move (generic_params), std::move (where_clause), std::unique_ptr (existing_type), std::move (vis), alias.get_outer_attrs (), - alias.get_locus ()); + alias.get_locus (), alias.is_derived ()); translated = type_alias; item_cast = type_alias; @@ -99,8 +99,8 @@ ASTLowerImplItem::visit (AST::ConstantItem &constant) = new HIR::ConstantItem (mapping, constant.get_identifier (), vis, std::unique_ptr (type), std::unique_ptr (expr), - constant.get_outer_attrs (), - constant.get_locus ()); + constant.get_outer_attrs (), constant.get_locus (), + constant.is_derived ()); translated = translated_constant; item_cast = translated_constant; @@ -188,7 +188,8 @@ ASTLowerImplItem::visit (AST::Function &function) std::move (function_params), std::move (return_type), std::move (where_clause), std::move (function_body), std::move (vis), function.get_outer_attrs (), - std::move (self_param), defaultness, locus); + std::move (self_param), defaultness, locus, + function.is_derived ()); if (fn->is_method ()) { diff --git a/gcc/rust/hir/rust-ast-lower-item.cc b/gcc/rust/hir/rust-ast-lower-item.cc index 4e5a747b2a98..b6db86345afc 100644 --- a/gcc/rust/hir/rust-ast-lower-item.cc +++ b/gcc/rust/hir/rust-ast-lower-item.cc @@ -81,7 +81,7 @@ ASTLoweringItem::visit (AST::Module &module) translated = new HIR::Module (mapping, module.get_name (), module.get_locus (), - std::move (items), std::move (vis), + std::move (items), module.is_derived (), std::move (vis), std::move (inner_attrs), std::move (outer_attrs)); mappings.insert_module (static_cast (translated)); } @@ -117,7 +117,7 @@ ASTLoweringItem::visit (AST::TypeAlias &alias) std::move (generic_params), std::move (where_clause), std::unique_ptr (existing_type), std::move (vis), alias.get_outer_attrs (), - alias.get_locus ()); + alias.get_locus (), alias.is_derived ()); } void @@ -172,7 +172,8 @@ ASTLoweringItem::visit (AST::TupleStruct &struct_decl) std::move (generic_params), std::move (where_clause), vis, struct_decl.get_outer_attrs (), - struct_decl.get_locus ()); + struct_decl.get_locus (), + struct_decl.is_derived ()); } void @@ -232,7 +233,8 @@ ASTLoweringItem::visit (AST::StructStruct &struct_decl) std::move (generic_params), std::move (where_clause), is_unit, vis, struct_decl.get_outer_attrs (), - struct_decl.get_locus ()); + struct_decl.get_locus (), + struct_decl.is_derived ()); } void @@ -275,7 +277,7 @@ ASTLoweringItem::visit (AST::Enum &enum_decl) = new HIR::Enum (mapping, enum_decl.get_identifier (), vis, std::move (generic_params), std::move (where_clause), std::move (items), enum_decl.get_outer_attrs (), - enum_decl.get_locus ()); + enum_decl.get_locus (), enum_decl.is_derived ()); translated = hir_enum; for (auto &variant : hir_enum->get_variants ()) { @@ -337,7 +339,7 @@ ASTLoweringItem::visit (AST::Union &union_decl) = new HIR::Union (mapping, union_decl.get_identifier (), vis, std::move (generic_params), std::move (where_clause), std::move (variants), union_decl.get_outer_attrs (), - union_decl.get_locus ()); + union_decl.get_locus (), union_decl.is_derived ()); } void @@ -358,7 +360,8 @@ ASTLoweringItem::visit (AST::StaticItem &var) : Mutability::Imm, std::unique_ptr (type), std::unique_ptr (expr), vis, - var.get_outer_attrs (), var.get_locus ()); + var.get_outer_attrs (), var.get_locus (), + var.is_derived ()); } void @@ -376,11 +379,12 @@ ASTLoweringItem::visit (AST::ConstantItem &constant) mappings.get_next_hir_id (crate_num), mappings.get_next_localdef_id (crate_num)); - translated = new HIR::ConstantItem (mapping, constant.get_identifier (), vis, - std::unique_ptr (type), - std::unique_ptr (expr), - constant.get_outer_attrs (), - constant.get_locus ()); + translated + = new HIR::ConstantItem (mapping, constant.get_identifier (), vis, + std::unique_ptr (type), + std::unique_ptr (expr), + constant.get_outer_attrs (), constant.get_locus (), + constant.is_derived ()); } void @@ -463,7 +467,8 @@ ASTLoweringItem::visit (AST::Function &function) std::move (function_params), std::move (return_type), std::move (where_clause), std::move (function_body), std::move (vis), function.get_outer_attrs (), - tl::nullopt, defaultness, locus); + tl::nullopt, defaultness, locus, + function.is_derived ()); // add the mappings for the function params at the end for (auto ¶m : fn->get_function_params ()) @@ -620,7 +625,8 @@ ASTLoweringItem::visit (AST::Trait &trait) = new HIR::Trait (mapping, trait.get_identifier (), trait_unsafety, std::move (generic_params), std::move (type_param_bounds), where_clause, std::move (trait_items), vis, - trait.get_outer_attrs (), trait.get_locus ()); + trait.get_outer_attrs (), trait.get_locus (), + trait.is_derived ()); if (trait.is_auto ()) mappings.insert_auto_trait (hir_trait); diff --git a/gcc/rust/hir/tree/rust-hir-item.cc b/gcc/rust/hir/tree/rust-hir-item.cc index 1406e7aeb515..63f4843eb64f 100644 --- a/gcc/rust/hir/tree/rust-hir-item.cc +++ b/gcc/rust/hir/tree/rust-hir-item.cc @@ -232,9 +232,9 @@ VisItem::VisItem (VisItem const &other) Module::Module (Analysis::NodeMapping mappings, Identifier module_name, location_t locus, std::vector> items, - Visibility visibility, AST::AttrVec inner_attrs, - AST::AttrVec outer_attrs) - : VisItem (std::move (mappings), std::move (visibility), + bool is_derived, Visibility visibility, + AST::AttrVec inner_attrs, AST::AttrVec outer_attrs) + : VisItem (std::move (mappings), is_derived, std::move (visibility), std::move (outer_attrs)), WithInnerAttrs (std::move (inner_attrs)), module_name (module_name), locus (locus), items (std::move (items)) @@ -268,8 +268,9 @@ Function::Function (Analysis::NodeMapping mappings, Identifier function_name, std::unique_ptr return_type, WhereClause where_clause, std::unique_ptr function_body, Visibility vis, AST::AttrVec outer_attrs, tl::optional self, - Defaultness defaultness, location_t locus) - : VisItem (std::move (mappings), std::move (vis), std::move (outer_attrs)), + Defaultness defaultness, location_t locus, bool is_derived) + : VisItem (std::move (mappings), is_derived, std::move (vis), + std::move (outer_attrs)), qualifiers (std::move (qualifiers)), function_name (std::move (function_name)), generic_params (std::move (generic_params)), @@ -330,8 +331,10 @@ TypeAlias::TypeAlias (Analysis::NodeMapping mappings, Identifier new_type_name, std::vector> generic_params, WhereClause where_clause, std::unique_ptr existing_type, Visibility vis, - AST::AttrVec outer_attrs, location_t locus) - : VisItem (std::move (mappings), std::move (vis), std::move (outer_attrs)), + AST::AttrVec outer_attrs, location_t locus, + bool is_derived) + : VisItem (std::move (mappings), is_derived, std::move (vis), + std::move (outer_attrs)), new_type_name (std::move (new_type_name)), generic_params (std::move (generic_params)), where_clause (std::move (where_clause)), @@ -420,34 +423,36 @@ TupleStruct::TupleStruct ( Identifier struct_name, std::vector> generic_params, WhereClause where_clause, Visibility vis, AST::AttrVec outer_attrs, - location_t locus) + location_t locus, bool is_derived) : Struct (std::move (mappings), std::move (struct_name), std::move (generic_params), std::move (where_clause), - std::move (vis), locus, std::move (outer_attrs)), + std::move (vis), locus, is_derived, std::move (outer_attrs)), fields (std::move (fields)) {} EnumItem::EnumItem (Analysis::NodeMapping mappings, Identifier variant_name, - AST::AttrVec outer_attrs, location_t locus) - : Item (std::move (mappings), std::move (outer_attrs)), + AST::AttrVec outer_attrs, location_t locus, bool is_derived) + : Item (std::move (mappings), is_derived, std::move (outer_attrs)), variant_name (std::move (variant_name)), locus (locus) {} EnumItemTuple::EnumItemTuple (Analysis::NodeMapping mappings, Identifier variant_name, std::vector tuple_fields, - AST::AttrVec outer_attrs, location_t locus) + AST::AttrVec outer_attrs, location_t locus, + bool is_derived) : EnumItem (std::move (mappings), std::move (variant_name), - std::move (outer_attrs), locus), + std::move (outer_attrs), locus, is_derived), tuple_fields (std::move (tuple_fields)) {} EnumItemStruct::EnumItemStruct (Analysis::NodeMapping mappings, Identifier variant_name, std::vector struct_fields, - AST::AttrVec outer_attrs, location_t locus) + AST::AttrVec outer_attrs, location_t locus, + bool is_derived) : EnumItem (std::move (mappings), std::move (variant_name), - std::move (outer_attrs), locus), + std::move (outer_attrs), locus, is_derived), struct_fields (std::move (struct_fields)) {} @@ -455,9 +460,9 @@ EnumItemDiscriminant::EnumItemDiscriminant (Analysis::NodeMapping mappings, Identifier variant_name, std::unique_ptr expr, AST::AttrVec outer_attrs, - location_t locus) + location_t locus, bool is_derived) : EnumItem (std::move (mappings), std::move (variant_name), - std::move (outer_attrs), locus), + std::move (outer_attrs), locus, is_derived), expression (std::move (expr)) {} @@ -481,8 +486,9 @@ Enum::Enum (Analysis::NodeMapping mappings, Identifier enum_name, std::vector> generic_params, WhereClause where_clause, std::vector> items, - AST::AttrVec outer_attrs, location_t locus) - : VisItem (std::move (mappings), std::move (vis), std::move (outer_attrs)), + AST::AttrVec outer_attrs, location_t locus, bool is_derived) + : VisItem (std::move (mappings), is_derived, std::move (vis), + std::move (outer_attrs)), enum_name (std::move (enum_name)), generic_params (std::move (generic_params)), where_clause (std::move (where_clause)), items (std::move (items)), @@ -525,8 +531,9 @@ Union::Union (Analysis::NodeMapping mappings, Identifier union_name, Visibility vis, std::vector> generic_params, WhereClause where_clause, std::vector variants, - AST::AttrVec outer_attrs, location_t locus) - : VisItem (std::move (mappings), std::move (vis), std::move (outer_attrs)), + AST::AttrVec outer_attrs, location_t locus, bool is_derived) + : VisItem (std::move (mappings), is_derived, std::move (vis), + std::move (outer_attrs)), union_name (std::move (union_name)), generic_params (std::move (generic_params)), where_clause (std::move (where_clause)), variants (std::move (variants)), @@ -562,8 +569,10 @@ Union::operator= (Union const &other) ConstantItem::ConstantItem (Analysis::NodeMapping mappings, Identifier ident, Visibility vis, std::unique_ptr type, std::unique_ptr const_expr, - AST::AttrVec outer_attrs, location_t locus) - : VisItem (std::move (mappings), std::move (vis), std::move (outer_attrs)), + AST::AttrVec outer_attrs, location_t locus, + bool is_derived) + : VisItem (std::move (mappings), is_derived, std::move (vis), + std::move (outer_attrs)), identifier (std::move (ident)), type (std::move (type)), const_expr (std::move (const_expr)), locus (locus) {} @@ -589,8 +598,10 @@ ConstantItem::operator= (ConstantItem const &other) StaticItem::StaticItem (Analysis::NodeMapping mappings, Identifier name, Mutability mut, std::unique_ptr type, std::unique_ptr expr, Visibility vis, - AST::AttrVec outer_attrs, location_t locus) - : VisItem (std::move (mappings), std::move (vis), std::move (outer_attrs)), + AST::AttrVec outer_attrs, location_t locus, + bool is_derived) + : VisItem (std::move (mappings), is_derived, std::move (vis), + std::move (outer_attrs)), mut (mut), name (std::move (name)), type (std::move (type)), expr (std::move (expr)), locus (locus) {} @@ -754,8 +765,10 @@ Trait::Trait (Analysis::NodeMapping mappings, Identifier name, std::vector> type_param_bounds, WhereClause where_clause, std::vector> trait_items, - Visibility vis, AST::AttrVec outer_attrs, location_t locus) - : VisItem (std::move (mappings), std::move (vis), std::move (outer_attrs)), + Visibility vis, AST::AttrVec outer_attrs, location_t locus, + bool is_derived) + : VisItem (std::move (mappings), is_derived, std::move (vis), + std::move (outer_attrs)), unsafety (unsafety), name (std::move (name)), generic_params (std::move (generic_params)), type_param_bounds (std::move (type_param_bounds)), @@ -811,8 +824,10 @@ ImplBlock::ImplBlock (Analysis::NodeMapping mappings, std::unique_ptr trait_ref, WhereClause where_clause, BoundPolarity polarity, Visibility vis, AST::AttrVec inner_attrs, - AST::AttrVec outer_attrs, location_t locus, bool unsafe) - : VisItem (std::move (mappings), std::move (vis), std::move (outer_attrs)), + AST::AttrVec outer_attrs, location_t locus, bool unsafe, + bool is_derived) + : VisItem (std::move (mappings), is_derived, std::move (vis), + std::move (outer_attrs)), WithInnerAttrs (std::move (inner_attrs)), generic_params (std::move (generic_params)), impl_type (std::move (impl_type)), trait_ref (std::move (trait_ref)), @@ -993,8 +1008,10 @@ ExternalTypeItem::ExternalTypeItem (ExternalTypeItem const &other) ExternBlock::ExternBlock ( Analysis::NodeMapping mappings, ABI abi, std::vector> extern_items, Visibility vis, - AST::AttrVec inner_attrs, AST::AttrVec outer_attrs, location_t locus) - : VisItem (std::move (mappings), std::move (vis), std::move (outer_attrs)), + AST::AttrVec inner_attrs, AST::AttrVec outer_attrs, location_t locus, + bool is_derived) + : VisItem (std::move (mappings), is_derived, std::move (vis), + std::move (outer_attrs)), WithInnerAttrs (std::move (inner_attrs)), abi (abi), extern_items (std::move (extern_items)), locus (locus) {} diff --git a/gcc/rust/hir/tree/rust-hir-item.h b/gcc/rust/hir/tree/rust-hir-item.h index d9df6029c5ac..92871a6ce629 100644 --- a/gcc/rust/hir/tree/rust-hir-item.h +++ b/gcc/rust/hir/tree/rust-hir-item.h @@ -75,11 +75,15 @@ class Item : public Stmt, public WithOuterAttrs bool is_item () const override final { return true; } + // Returns whether the item is generated by a derive attribute. + bool is_derived () const { return derived; } + protected: // Constructor - Item (Analysis::NodeMapping mappings, + Item (Analysis::NodeMapping mappings, bool is_derived, AST::AttrVec outer_attribs = AST::AttrVec ()) - : Stmt (std::move (mappings)), WithOuterAttrs (std::move (outer_attribs)) + : Stmt (std::move (mappings)), WithOuterAttrs (std::move (outer_attribs)), + derived (is_derived) {} // Clone function implementation as pure virtual method @@ -89,6 +93,9 @@ class Item : public Stmt, public WithOuterAttrs * statement clone return item clone. Hopefully won't affect performance too * much. */ Item *clone_stmt_impl () const override { return clone_item_impl (); } + +private: + bool derived; }; // A type generic parameter (as opposed to a lifetime generic parameter) @@ -500,9 +507,9 @@ class VisItem : public Item protected: // Visibility constructor - VisItem (Analysis::NodeMapping mappings, Visibility visibility, - AST::AttrVec outer_attrs = AST::AttrVec ()) - : Item (std::move (mappings), std::move (outer_attrs)), + VisItem (Analysis::NodeMapping mappings, bool is_derived, + Visibility visibility, AST::AttrVec outer_attrs = AST::AttrVec ()) + : Item (std::move (mappings), is_derived, std::move (outer_attrs)), visibility (std::move (visibility)) {} @@ -550,7 +557,7 @@ class Module : public VisItem, public WithInnerAttrs // Full constructor Module (Analysis::NodeMapping mappings, Identifier module_name, location_t locus, std::vector> items, - Visibility visibility = Visibility::create_error (), + bool is_derived, Visibility visibility = Visibility::create_error (), AST::AttrVec inner_attrs = AST::AttrVec (), AST::AttrVec outer_attrs = AST::AttrVec ()); @@ -620,8 +627,9 @@ class ExternCrate : public VisItem // Constructor ExternCrate (Analysis::NodeMapping mappings, std::string referenced_crate, Visibility visibility, AST::AttrVec outer_attrs, - location_t locus, std::string as_clause_name = std::string ()) - : VisItem (std::move (mappings), std::move (visibility), + location_t locus, bool is_derived, + std::string as_clause_name = std::string ()) + : VisItem (std::move (mappings), is_derived, std::move (visibility), std::move (outer_attrs)), referenced_crate (std::move (referenced_crate)), as_clause_name (std::move (as_clause_name)), locus (locus) @@ -883,8 +891,8 @@ class UseDeclaration : public VisItem UseDeclaration (Analysis::NodeMapping mappings, std::unique_ptr use_tree, Visibility visibility, - AST::AttrVec outer_attrs, location_t locus) - : VisItem (std::move (mappings), std::move (visibility), + AST::AttrVec outer_attrs, location_t locus, bool is_derived) + : VisItem (std::move (mappings), is_derived, std::move (visibility), std::move (outer_attrs)), use_tree (std::move (use_tree)), locus (locus) {} @@ -993,7 +1001,7 @@ class Function : public VisItem, public ImplItem std::unique_ptr return_type, WhereClause where_clause, std::unique_ptr function_body, Visibility vis, AST::AttrVec outer_attrs, tl::optional self, - Defaultness defaultness, location_t locus); + Defaultness defaultness, location_t locus, bool is_derived); // Copy constructor with clone Function (Function const &other); @@ -1107,7 +1115,8 @@ class TypeAlias : public VisItem, public ImplItem TypeAlias (Analysis::NodeMapping mappings, Identifier new_type_name, std::vector> generic_params, WhereClause where_clause, std::unique_ptr existing_type, - Visibility vis, AST::AttrVec outer_attrs, location_t locus); + Visibility vis, AST::AttrVec outer_attrs, location_t locus, + bool is_derived); // Copy constructor TypeAlias (TypeAlias const &other); @@ -1209,8 +1218,9 @@ class Struct : public VisItem Struct (Analysis::NodeMapping mappings, Identifier struct_name, std::vector> generic_params, WhereClause where_clause, Visibility vis, location_t locus, - AST::AttrVec outer_attrs = AST::AttrVec ()) - : VisItem (std::move (mappings), std::move (vis), std::move (outer_attrs)), + bool is_derived, AST::AttrVec outer_attrs = AST::AttrVec ()) + : VisItem (std::move (mappings), is_derived, std::move (vis), + std::move (outer_attrs)), struct_name (std::move (struct_name)), generic_params (std::move (generic_params)), where_clause (std::move (where_clause)), locus (locus) @@ -1313,10 +1323,10 @@ class StructStruct : public Struct Identifier struct_name, std::vector> generic_params, WhereClause where_clause, bool is_unit, Visibility vis, - AST::AttrVec outer_attrs, location_t locus) + AST::AttrVec outer_attrs, location_t locus, bool is_derived) : Struct (std::move (mappings), std::move (struct_name), std::move (generic_params), std::move (where_clause), - std::move (vis), locus, std::move (outer_attrs)), + std::move (vis), locus, is_derived, std::move (outer_attrs)), fields (std::move (fields)), is_unit (is_unit) {} @@ -1324,10 +1334,10 @@ class StructStruct : public Struct StructStruct (Analysis::NodeMapping mappings, Identifier struct_name, std::vector> generic_params, WhereClause where_clause, Visibility vis, - AST::AttrVec outer_attrs, location_t locus) + AST::AttrVec outer_attrs, location_t locus, bool is_derived) : Struct (std::move (mappings), std::move (struct_name), std::move (generic_params), std::move (where_clause), - std::move (vis), locus, std::move (outer_attrs)), + std::move (vis), locus, is_derived, std::move (outer_attrs)), is_unit (true) {} // TODO: can a unit struct have generic fields? assuming yes for now. @@ -1427,7 +1437,7 @@ class TupleStruct : public Struct Identifier struct_name, std::vector> generic_params, WhereClause where_clause, Visibility vis, - AST::AttrVec outer_attrs, location_t locus); + AST::AttrVec outer_attrs, location_t locus, bool is_derived); void accept_vis (HIRFullVisitor &vis) override; void accept_vis (HIRStmtVisitor &vis) override; @@ -1472,7 +1482,7 @@ class EnumItem : public Item }; EnumItem (Analysis::NodeMapping mappings, Identifier variant_name, - AST::AttrVec outer_attrs, location_t locus); + AST::AttrVec outer_attrs, location_t locus, bool is_derived); // Unique pointer custom clone function std::unique_ptr clone_enum_item () const @@ -1515,7 +1525,7 @@ class EnumItemTuple : public EnumItem EnumItemTuple (Analysis::NodeMapping mappings, Identifier variant_name, std::vector tuple_fields, AST::AttrVec outer_attrs, - location_t locus); + location_t locus, bool is_derived); std::string as_string () const override; @@ -1549,7 +1559,7 @@ class EnumItemStruct : public EnumItem EnumItemStruct (Analysis::NodeMapping mappings, Identifier variant_name, std::vector struct_fields, - AST::AttrVec outer_attrs, location_t locus); + AST::AttrVec outer_attrs, location_t locus, bool is_derived); std::string as_string () const override; @@ -1574,7 +1584,7 @@ class EnumItemDiscriminant : public EnumItem public: EnumItemDiscriminant (Analysis::NodeMapping mappings, Identifier variant_name, std::unique_ptr expr, AST::AttrVec outer_attrs, - location_t locus); + location_t locus, bool is_derived); // Copy constructor with clone EnumItemDiscriminant (EnumItemDiscriminant const &other); @@ -1644,7 +1654,7 @@ class Enum : public VisItem Enum (Analysis::NodeMapping mappings, Identifier enum_name, Visibility vis, std::vector> generic_params, WhereClause where_clause, std::vector> items, - AST::AttrVec outer_attrs, location_t locus); + AST::AttrVec outer_attrs, location_t locus, bool is_derived); // TODO: constructor with less arguments @@ -1720,7 +1730,7 @@ class Union : public VisItem Union (Analysis::NodeMapping mappings, Identifier union_name, Visibility vis, std::vector> generic_params, WhereClause where_clause, std::vector variants, - AST::AttrVec outer_attrs, location_t locus); + AST::AttrVec outer_attrs, location_t locus, bool is_derived); // copy constructor with vector clone Union (Union const &other); @@ -1770,7 +1780,7 @@ class ConstantItem : public VisItem, public ImplItem ConstantItem (Analysis::NodeMapping mappings, Identifier ident, Visibility vis, std::unique_ptr type, std::unique_ptr const_expr, AST::AttrVec outer_attrs, - location_t locus); + location_t locus, bool is_derived); ConstantItem (ConstantItem const &other); @@ -1855,7 +1865,8 @@ class StaticItem : public VisItem StaticItem (Analysis::NodeMapping mappings, Identifier name, Mutability mut, std::unique_ptr type, std::unique_ptr expr, - Visibility vis, AST::AttrVec outer_attrs, location_t locus); + Visibility vis, AST::AttrVec outer_attrs, location_t locus, + bool is_derived); // Copy constructor with clone StaticItem (StaticItem const &other); @@ -2224,7 +2235,7 @@ class Trait : public VisItem std::vector> type_param_bounds, WhereClause where_clause, std::vector> trait_items, Visibility vis, - AST::AttrVec outer_attrs, location_t locus); + AST::AttrVec outer_attrs, location_t locus, bool is_derived); // Copy constructor with vector clone Trait (Trait const &other); @@ -2289,7 +2300,8 @@ class ImplBlock : public VisItem, public WithInnerAttrs std::unique_ptr impl_type, std::unique_ptr trait_ref, WhereClause where_clause, BoundPolarity polarity, Visibility vis, AST::AttrVec inner_attrs, - AST::AttrVec outer_attrs, location_t locus, bool unsafe = false); + AST::AttrVec outer_attrs, location_t locus, bool unsafe = false, + bool is_derived = false); ImplBlock (ImplBlock const &other); @@ -2630,7 +2642,7 @@ class ExternBlock : public VisItem, public WithInnerAttrs ExternBlock (Analysis::NodeMapping mappings, ABI abi, std::vector> extern_items, Visibility vis, AST::AttrVec inner_attrs, - AST::AttrVec outer_attrs, location_t locus); + AST::AttrVec outer_attrs, location_t locus, bool is_derived); // Copy constructor with vector clone ExternBlock (ExternBlock const &other);