From ebe2f98aa53ef5ac7c0097f8fd87c9a713b50e07 Mon Sep 17 00:00:00 2001 From: Pierre-Emmanuel Patry Date: Wed, 25 Oct 2023 16:53:59 +0200 Subject: [PATCH] Add some reference getter Visitor pattern requires a getter to children using a mutable reference. gcc/rust/ChangeLog: * ast/rust-ast.h: Add some missing mutable reference getters. * ast/rust-expr.h: Likewise. * ast/rust-item.h: Likewise. * ast/rust-path.h: Likewise. Signed-off-by: Pierre-Emmanuel Patry --- gcc/rust/ast/rust-ast.h | 4 ++++ gcc/rust/ast/rust-expr.h | 6 ++++++ gcc/rust/ast/rust-item.h | 22 +++++++++++++++++++--- gcc/rust/ast/rust-path.h | 2 ++ 4 files changed, 31 insertions(+), 3 deletions(-) diff --git a/gcc/rust/ast/rust-ast.h b/gcc/rust/ast/rust-ast.h index 8b3f6fef8802..26c47436ce14 100644 --- a/gcc/rust/ast/rust-ast.h +++ b/gcc/rust/ast/rust-ast.h @@ -1408,6 +1408,10 @@ class LifetimeParam : public GenericParam public: Lifetime get_lifetime () const { return lifetime; } + Lifetime &get_lifetime () { return lifetime; } + + Attribute &get_outer_attribute () { return outer_attr; } + // Returns whether the lifetime param has any lifetime bounds. bool has_lifetime_bounds () const { return !lifetime_bounds.empty (); } diff --git a/gcc/rust/ast/rust-expr.h b/gcc/rust/ast/rust-expr.h index bd59f81b562f..f0d663bf6caa 100644 --- a/gcc/rust/ast/rust-expr.h +++ b/gcc/rust/ast/rust-expr.h @@ -226,6 +226,8 @@ public: LiteralExpr get_literal () const { return lit_expr; } + LiteralExpr &get_literal () { return lit_expr; } + void accept_vis (ASTVisitor &vis) override; bool check_cfg_predicate (const Session &session) const override; @@ -256,8 +258,12 @@ public: SimplePath get_path () const { return path; } + SimplePath &get_path () { return path; } + LiteralExpr get_literal () const { return lit; } + LiteralExpr &get_literal () { return lit; } + std::string as_string () const override { return path.as_string () + " = " + lit.as_string (); diff --git a/gcc/rust/ast/rust-item.h b/gcc/rust/ast/rust-item.h index bcc33dc01a95..ac16b5574356 100644 --- a/gcc/rust/ast/rust-item.h +++ b/gcc/rust/ast/rust-item.h @@ -77,6 +77,8 @@ public: // Returns whether the type param has an outer attribute. bool has_outer_attribute () const { return !outer_attr.is_empty (); } + Attribute &get_outer_attribute () { return outer_attr; } + TypeParam (Identifier type_representation, location_t locus = UNDEF_LOCATION, std::vector> type_param_bounds = std::vector> (), @@ -472,6 +474,7 @@ public: bool get_is_mut () const { return is_mut; } Lifetime get_lifetime () const { return lifetime; } + Lifetime &get_lifetime () { return lifetime; } NodeId get_node_id () const { return node_id; } @@ -915,7 +918,9 @@ public: location_t get_locus () const override final { return locus; } - FunctionQualifiers get_qualifiers () { return qualifiers; } + FunctionQualifiers get_qualifiers () const { return qualifiers; } + + FunctionQualifiers &get_qualifiers () { return qualifiers; } Visibility &get_visibility () { return vis; } const Visibility &get_visibility () const { return vis; } @@ -1299,6 +1304,8 @@ public: return path; } + SimplePath &get_path () { return path; } + /* TODO: find way to ensure only PATH_PREFIXED glob_type has path - factory * methods? */ protected: @@ -1389,6 +1396,8 @@ public: return path; } + SimplePath &get_path () { return path; } + std::vector> &get_trees () { return trees; } const std::vector> &get_trees () const @@ -1451,6 +1460,8 @@ public: return path; } + SimplePath &get_path () { return path; } + const Identifier &get_identifier () const { rust_assert (has_identifier ()); @@ -1677,6 +1688,8 @@ public: const FunctionQualifiers &get_qualifiers () const { return qualifiers; } + FunctionQualifiers &get_qualifiers () { return qualifiers; } + Identifier get_function_name () const { return function_name; } // TODO: is this better? Or is a "vis_block" better? @@ -2921,7 +2934,8 @@ public: // TODO: is this better? Or is a "vis_block" better? WhereClause &get_where_clause () { return where_clause; } - FunctionQualifiers get_qualifiers () { return qualifiers; } + FunctionQualifiers get_qualifiers () const { return qualifiers; } + FunctionQualifiers &get_qualifiers () { return qualifiers; } }; // Actual trait item function declaration within traits @@ -3137,7 +3151,9 @@ public: SelfParam &get_self_param () { return self_param; } const SelfParam &get_self_param () const { return self_param; } - FunctionQualifiers get_qualifiers () { return qualifiers; } + FunctionQualifiers get_qualifiers () const { return qualifiers; } + + FunctionQualifiers &get_qualifiers () { return qualifiers; } }; // Actual trait item method declaration within traits diff --git a/gcc/rust/ast/rust-path.h b/gcc/rust/ast/rust-path.h index 7ac9cddeaf83..d133ba924fa7 100644 --- a/gcc/rust/ast/rust-path.h +++ b/gcc/rust/ast/rust-path.h @@ -350,6 +350,8 @@ public: const Identifier &get_name () const { return name; } + Attribute &get_outer_attribute () { return outer_attr; } + std::unique_ptr &get_type () { rust_assert (has_type ()); -- 2.43.5