aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/ast/rust-ast.h
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/rust/ast/rust-ast.h')
-rw-r--r--gcc/rust/ast/rust-ast.h63
1 files changed, 31 insertions, 32 deletions
diff --git a/gcc/rust/ast/rust-ast.h b/gcc/rust/ast/rust-ast.h
index 35c3f7a..e5cadb6 100644
--- a/gcc/rust/ast/rust-ast.h
+++ b/gcc/rust/ast/rust-ast.h
@@ -1446,8 +1446,30 @@ protected:
}
};
+class AssociatedItem : public Visitable
+{
+protected:
+ // Clone function implementation as pure virtual method
+ virtual AssociatedItem *clone_associated_item_impl () const = 0;
+
+public:
+ virtual ~AssociatedItem () {}
+
+ std::unique_ptr<AssociatedItem> clone_associated_item () const
+ {
+ return std::unique_ptr<AssociatedItem> (clone_associated_item_impl ());
+ }
+
+ virtual std::string as_string () const = 0;
+
+ virtual void mark_for_strip () = 0;
+ virtual bool is_marked_for_strip () const = 0;
+
+ virtual location_t get_locus () const = 0;
+};
+
// Item used in trait declarations - abstract base class
-class TraitItem : public Visitable
+class TraitItem : virtual public AssociatedItem
{
protected:
TraitItem (location_t locus)
@@ -1455,73 +1477,50 @@ protected:
{}
// Clone function implementation as pure virtual method
- virtual TraitItem *clone_trait_item_impl () const = 0;
+ virtual TraitItem *clone_associated_item_impl () const override = 0;
NodeId node_id;
location_t locus;
public:
- virtual ~TraitItem () {}
-
// Unique pointer custom clone function
std::unique_ptr<TraitItem> clone_trait_item () const
{
- return std::unique_ptr<TraitItem> (clone_trait_item_impl ());
+ return std::unique_ptr<TraitItem> (clone_associated_item_impl ());
}
- virtual std::string as_string () const = 0;
-
- virtual void mark_for_strip () = 0;
- virtual bool is_marked_for_strip () const = 0;
-
NodeId get_node_id () const { return node_id; }
location_t get_locus () const { return locus; }
};
/* Abstract base class for items used within an inherent impl block (the impl
* name {} one) */
-class InherentImplItem : public Visitable
+class InherentImplItem : virtual public AssociatedItem
{
protected:
// Clone function implementation as pure virtual method
- virtual InherentImplItem *clone_inherent_impl_item_impl () const = 0;
+ virtual InherentImplItem *clone_associated_item_impl () const override = 0;
public:
- virtual ~InherentImplItem () {}
-
// Unique pointer custom clone function
std::unique_ptr<InherentImplItem> clone_inherent_impl_item () const
{
- return std::unique_ptr<InherentImplItem> (clone_inherent_impl_item_impl ());
+ return std::unique_ptr<InherentImplItem> (clone_associated_item_impl ());
}
-
- virtual std::string as_string () const = 0;
-
- virtual void mark_for_strip () = 0;
- virtual bool is_marked_for_strip () const = 0;
-
- virtual location_t get_locus () const = 0;
};
// Abstract base class for items used in a trait impl
-class TraitImplItem : public Visitable
+class TraitImplItem : virtual public AssociatedItem
{
protected:
- virtual TraitImplItem *clone_trait_impl_item_impl () const = 0;
+ virtual TraitImplItem *clone_associated_item_impl () const override = 0;
public:
- virtual ~TraitImplItem (){};
-
// Unique pointer custom clone function
std::unique_ptr<TraitImplItem> clone_trait_impl_item () const
{
- return std::unique_ptr<TraitImplItem> (clone_trait_impl_item_impl ());
+ return std::unique_ptr<TraitImplItem> (clone_associated_item_impl ());
}
-
- virtual std::string as_string () const = 0;
-
- virtual void mark_for_strip () = 0;
- virtual bool is_marked_for_strip () const = 0;
};
// Abstract base class for an item used inside an extern block