aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/hir/tree
diff options
context:
space:
mode:
authorMarc Poulhiès <dkm@kataplop.net>2023-06-29 20:45:25 +0200
committerArthur Cohen <arthur.cohen@embecosm.com>2024-01-16 18:49:30 +0100
commit0cecd8278901c32b0326f32105f63ed481bae0c9 (patch)
tree2e005f051e82b499579f6ee62c6d8aebd2d08300 /gcc/rust/hir/tree
parent16510f1c74d30c2ce4d3134db52199484c3c79e2 (diff)
downloadgcc-0cecd8278901c32b0326f32105f63ed481bae0c9.zip
gcc-0cecd8278901c32b0326f32105f63ed481bae0c9.tar.gz
gcc-0cecd8278901c32b0326f32105f63ed481bae0c9.tar.bz2
gccrs: FullVisitable abstract class
Introduce FullVisitable class. HIR nodes implementing the FullVisitor interface should inherit from this class. gcc/rust/ChangeLog: * hir/tree/rust-hir.h (class FullVisitable): New. (class Stmt): Adjust with new class. (class Expr): Likewise. (class Pattern): Likewise. (class Type): Likewise. (class TypeParamBound): Likewise. (class GenericParam): Likewise. (class TraitItem): Likewise. (class ImplItem): Likewise. Signed-off-by: Marc Poulhiès <dkm@kataplop.net>
Diffstat (limited to 'gcc/rust/hir/tree')
-rw-r--r--gcc/rust/hir/tree/rust-hir.h45
1 files changed, 27 insertions, 18 deletions
diff --git a/gcc/rust/hir/tree/rust-hir.h b/gcc/rust/hir/tree/rust-hir.h
index b4a9616..8b60d10 100644
--- a/gcc/rust/hir/tree/rust-hir.h
+++ b/gcc/rust/hir/tree/rust-hir.h
@@ -65,6 +65,12 @@ public:
: inner_attrs (std::move (inner_attrs)){};
};
+class FullVisitable
+{
+public:
+ virtual void accept_vis (HIRFullVisitor &vis) = 0;
+};
+
// forward decl for use in token tree method
class Token;
@@ -155,9 +161,11 @@ public:
/* Base statement abstract class. Note that most "statements" are not allowed in
* top-level module scope - only a subclass of statements called "items" are. */
-class Stmt : public Node
+class Stmt : public Node, public FullVisitable
{
public:
+ using FullVisitable::accept_vis;
+
// Unique pointer custom clone function
std::unique_ptr<Stmt> clone_stmt () const
{
@@ -170,7 +178,6 @@ public:
virtual std::string as_string () const = 0;
- virtual void accept_vis (HIRFullVisitor &vis) = 0;
virtual void accept_vis (HIRStmtVisitor &vis) = 0;
virtual Location get_locus () const = 0;
@@ -253,8 +260,11 @@ protected:
class ExprWithoutBlock;
// Base expression HIR node - abstract
-class Expr : public Node
+class Expr : public Node, public FullVisitable
{
+public:
+ using FullVisitable::accept_vis;
+
protected:
AST::AttrVec outer_attrs;
Analysis::NodeMapping mappings;
@@ -322,7 +332,6 @@ public:
virtual ExprType get_expression_type () const = 0;
virtual void accept_vis (HIRExpressionVisitor &vis) = 0;
- virtual void accept_vis (HIRFullVisitor &vis) = 0;
protected:
// Constructor
@@ -374,9 +383,11 @@ public:
};
// Pattern base HIR node
-class Pattern : public Node
+class Pattern : public Node, public FullVisitable
{
public:
+ using FullVisitable::accept_vis;
+
enum PatternType
{
PATH,
@@ -407,7 +418,6 @@ public:
virtual std::string as_string () const = 0;
- virtual void accept_vis (HIRFullVisitor &vis) = 0;
virtual void accept_vis (HIRPatternVisitor &vis) = 0;
virtual Analysis::NodeMapping get_pattern_mappings () const = 0;
@@ -425,9 +435,10 @@ protected:
class TraitBound;
// Base class for types as represented in HIR - abstract
-class Type : public Node
+class Type : public Node, public FullVisitable
{
public:
+ using FullVisitable::accept_vis;
// Unique pointer custom clone function
std::unique_ptr<Type> clone_type () const
{
@@ -450,7 +461,6 @@ public:
/* as pointer, shouldn't require definition beforehand, only forward
* declaration. */
- virtual void accept_vis (HIRFullVisitor &vis) = 0;
virtual void accept_vis (HIRTypeVisitor &vis) = 0;
virtual Analysis::NodeMapping get_mappings () const { return mappings; }
@@ -497,9 +507,10 @@ protected:
/* Abstract base class representing a type param bound - Lifetime and TraitBound
* extends it */
-class TypeParamBound
+class TypeParamBound : public FullVisitable
{
public:
+ using FullVisitable::accept_vis;
enum BoundType
{
LIFETIME,
@@ -516,8 +527,6 @@ public:
virtual std::string as_string () const = 0;
- virtual void accept_vis (HIRFullVisitor &vis) = 0;
-
virtual Analysis::NodeMapping get_mappings () const = 0;
virtual Location get_locus () const = 0;
@@ -590,9 +599,11 @@ protected:
/* Base generic parameter in HIR. Abstract - can be represented by a Lifetime or
* Type param */
-class GenericParam
+class GenericParam : public FullVisitable
{
public:
+ using FullVisitable::accept_vis;
+
virtual ~GenericParam () {}
enum class GenericKind
@@ -610,8 +621,6 @@ public:
virtual std::string as_string () const = 0;
- virtual void accept_vis (HIRFullVisitor &vis) = 0;
-
virtual Location get_locus () const = 0;
Analysis::NodeMapping get_mappings () const { return mappings; }
@@ -768,9 +777,10 @@ private:
};
// Item used in trait declarations - abstract base class
-class TraitItem : public Node
+class TraitItem : public Node, public FullVisitable
{
public:
+ using FullVisitable::accept_vis;
enum TraitItemKind
{
FUNC,
@@ -800,7 +810,6 @@ public:
virtual std::string as_string () const = 0;
virtual void accept_vis (HIRTraitItemVisitor &vis) = 0;
- virtual void accept_vis (HIRFullVisitor &vis) = 0;
virtual const std::string trait_identifier () const = 0;
@@ -814,9 +823,10 @@ public:
virtual const AST::AttrVec &get_outer_attrs () const = 0;
};
-class ImplItem : public Node
+class ImplItem : public Node, public FullVisitable
{
public:
+ using FullVisitable::accept_vis;
enum ImplItemType
{
FUNCTION,
@@ -837,7 +847,6 @@ public:
virtual std::string as_string () const = 0;
virtual void accept_vis (HIRImplVisitor &vis) = 0;
- virtual void accept_vis (HIRFullVisitor &vis) = 0;
virtual void accept_vis (HIRStmtVisitor &vis) = 0;
virtual Analysis::NodeMapping get_impl_mappings () const = 0;