aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/hir
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2023-06-21 11:04:04 -0700
committerIan Lance Taylor <iant@golang.org>2023-06-21 11:04:04 -0700
commit97e31a0a2a2d2273687fcdb4e5416aab1a2186e1 (patch)
treed5c1cae4de436a0fe54a5f0a2a197d309f3d654c /gcc/rust/hir
parent6612f4f8cb9b0d5af18ec69ad04e56debc3e6ced (diff)
parent577223aebc7acdd31e62b33c1682fe54a622ae27 (diff)
downloadgcc-97e31a0a2a2d2273687fcdb4e5416aab1a2186e1.zip
gcc-97e31a0a2a2d2273687fcdb4e5416aab1a2186e1.tar.gz
gcc-97e31a0a2a2d2273687fcdb4e5416aab1a2186e1.tar.bz2
Merge from trunk revision 577223aebc7acdd31e62b33c1682fe54a622ae27.
Diffstat (limited to 'gcc/rust/hir')
-rw-r--r--gcc/rust/hir/rust-ast-lower-base.cc3
-rw-r--r--gcc/rust/hir/rust-ast-lower-base.h1
-rw-r--r--gcc/rust/hir/rust-ast-lower-expr.cc2
-rw-r--r--gcc/rust/hir/rust-ast-lower-pattern.cc35
-rw-r--r--gcc/rust/hir/rust-ast-lower-pattern.h2
-rw-r--r--gcc/rust/hir/rust-ast-lower-type.cc2
-rw-r--r--gcc/rust/hir/rust-hir-dump.cc3
-rw-r--r--gcc/rust/hir/rust-hir-dump.h1
-rw-r--r--gcc/rust/hir/tree/rust-hir-expr.h2
-rw-r--r--gcc/rust/hir/tree/rust-hir-full-decls.h1
-rw-r--r--gcc/rust/hir/tree/rust-hir-item.h17
-rw-r--r--gcc/rust/hir/tree/rust-hir-path.h4
-rw-r--r--gcc/rust/hir/tree/rust-hir-pattern.h94
-rw-r--r--gcc/rust/hir/tree/rust-hir-visitor.h3
-rw-r--r--gcc/rust/hir/tree/rust-hir.cc (renamed from gcc/rust/hir/tree/rust-hir-full-test.cc)17
-rw-r--r--gcc/rust/hir/tree/rust-hir.h2
16 files changed, 88 insertions, 101 deletions
diff --git a/gcc/rust/hir/rust-ast-lower-base.cc b/gcc/rust/hir/rust-ast-lower-base.cc
index 3379572..5d7b5d2 100644
--- a/gcc/rust/hir/rust-ast-lower-base.cc
+++ b/gcc/rust/hir/rust-ast-lower-base.cc
@@ -461,6 +461,9 @@ ASTLoweringBase::visit (AST::GroupedPattern &)
void
ASTLoweringBase::visit (AST::SlicePattern &)
{}
+void
+ASTLoweringBase::visit (AST::AltPattern &)
+{}
// rust-stmt.h
void
diff --git a/gcc/rust/hir/rust-ast-lower-base.h b/gcc/rust/hir/rust-ast-lower-base.h
index 1af44aa..85343aa 100644
--- a/gcc/rust/hir/rust-ast-lower-base.h
+++ b/gcc/rust/hir/rust-ast-lower-base.h
@@ -231,6 +231,7 @@ public:
virtual void visit (AST::TuplePattern &pattern);
virtual void visit (AST::GroupedPattern &pattern);
virtual void visit (AST::SlicePattern &pattern);
+ virtual void visit (AST::AltPattern &pattern);
// rust-stmt.h
virtual void visit (AST::EmptyStmt &stmt);
diff --git a/gcc/rust/hir/rust-ast-lower-expr.cc b/gcc/rust/hir/rust-ast-lower-expr.cc
index df4ba9d..50c2eae 100644
--- a/gcc/rust/hir/rust-ast-lower-expr.cc
+++ b/gcc/rust/hir/rust-ast-lower-expr.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2020-2022 Free Software Foundation, Inc.
+// Copyright (C) 2020-2023 Free Software Foundation, Inc.
// This file is part of GCC.
diff --git a/gcc/rust/hir/rust-ast-lower-pattern.cc b/gcc/rust/hir/rust-ast-lower-pattern.cc
index 30a1882..1961c74 100644
--- a/gcc/rust/hir/rust-ast-lower-pattern.cc
+++ b/gcc/rust/hir/rust-ast-lower-pattern.cc
@@ -243,5 +243,40 @@ ASTLoweringPattern::visit (AST::RangePattern &pattern)
std::move (upper_bound), pattern.get_locus ());
}
+void
+ASTLoweringPattern::visit (AST::GroupedPattern &pattern)
+{
+ pattern.get_pattern_in_parens ()->accept_vis (*this);
+}
+
+void
+ASTLoweringPattern::visit (AST::ReferencePattern &pattern)
+{
+ auto crate_num = mappings->get_current_crate ();
+ Analysis::NodeMapping mapping (crate_num, pattern.get_node_id (),
+ mappings->get_next_hir_id (crate_num),
+ UNKNOWN_LOCAL_DEFID);
+
+ HIR::Pattern *inner
+ = ASTLoweringPattern::translate (pattern.get_referenced_pattern ().get ());
+
+ translated
+ = new HIR::ReferencePattern (mapping, std::unique_ptr<HIR::Pattern> (inner),
+ pattern.get_is_mut () ? Mutability::Mut
+ : Mutability::Imm,
+ pattern.get_locus ());
+
+ if (pattern.is_double_reference ())
+ {
+ Analysis::NodeMapping mapping2 (crate_num, pattern.get_node_id (),
+ mappings->get_next_hir_id (crate_num),
+ UNKNOWN_LOCAL_DEFID);
+ translated
+ = new HIR::ReferencePattern (mapping2,
+ std::unique_ptr<HIR::Pattern> (translated),
+ Mutability::Imm, pattern.get_locus ());
+ }
+}
+
} // namespace HIR
} // namespace Rust
diff --git a/gcc/rust/hir/rust-ast-lower-pattern.h b/gcc/rust/hir/rust-ast-lower-pattern.h
index 8b191d5..2d175a2 100644
--- a/gcc/rust/hir/rust-ast-lower-pattern.h
+++ b/gcc/rust/hir/rust-ast-lower-pattern.h
@@ -39,6 +39,8 @@ public:
void visit (AST::TuplePattern &pattern) override;
void visit (AST::LiteralPattern &pattern) override;
void visit (AST::RangePattern &pattern) override;
+ void visit (AST::GroupedPattern &pattern) override;
+ void visit (AST::ReferencePattern &pattern) override;
private:
ASTLoweringPattern ();
diff --git a/gcc/rust/hir/rust-ast-lower-type.cc b/gcc/rust/hir/rust-ast-lower-type.cc
index 92a14f4..9ea22b0 100644
--- a/gcc/rust/hir/rust-ast-lower-type.cc
+++ b/gcc/rust/hir/rust-ast-lower-type.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2020-2022 Free Software Foundation, Inc.
+// Copyright (C) 2020-2023 Free Software Foundation, Inc.
// This file is part of GCC.
diff --git a/gcc/rust/hir/rust-hir-dump.cc b/gcc/rust/hir/rust-hir-dump.cc
index 875e1dd..10720c4 100644
--- a/gcc/rust/hir/rust-hir-dump.cc
+++ b/gcc/rust/hir/rust-hir-dump.cc
@@ -457,9 +457,6 @@ void
Dump::visit (TuplePattern &)
{}
void
-Dump::visit (GroupedPattern &)
-{}
-void
Dump::visit (SlicePattern &)
{}
diff --git a/gcc/rust/hir/rust-hir-dump.h b/gcc/rust/hir/rust-hir-dump.h
index 8715a95..b66e6b1 100644
--- a/gcc/rust/hir/rust-hir-dump.h
+++ b/gcc/rust/hir/rust-hir-dump.h
@@ -163,7 +163,6 @@ private:
virtual void visit (TuplePatternItemsMultiple &) override;
virtual void visit (TuplePatternItemsRanged &) override;
virtual void visit (TuplePattern &) override;
- virtual void visit (GroupedPattern &) override;
virtual void visit (SlicePattern &) override;
virtual void visit (EmptyStmt &) override;
diff --git a/gcc/rust/hir/tree/rust-hir-expr.h b/gcc/rust/hir/tree/rust-hir-expr.h
index cc88442..bf10351 100644
--- a/gcc/rust/hir/tree/rust-hir-expr.h
+++ b/gcc/rust/hir/tree/rust-hir-expr.h
@@ -23,7 +23,7 @@
#include "rust-ast-full-decls.h"
#include "rust-hir.h"
#include "rust-hir-path.h"
-#include "operator.h"
+#include "rust-operators.h"
namespace Rust {
namespace HIR {
diff --git a/gcc/rust/hir/tree/rust-hir-full-decls.h b/gcc/rust/hir/tree/rust-hir-full-decls.h
index 7870a54..30adda6 100644
--- a/gcc/rust/hir/tree/rust-hir-full-decls.h
+++ b/gcc/rust/hir/tree/rust-hir-full-decls.h
@@ -206,7 +206,6 @@ class TuplePatternItems;
class TuplePatternItemsMultiple;
class TuplePatternItemsRanged;
class TuplePattern;
-class GroupedPattern;
class SlicePattern;
// rust-type.h
diff --git a/gcc/rust/hir/tree/rust-hir-item.h b/gcc/rust/hir/tree/rust-hir-item.h
index f7bf1f8..03e1f71 100644
--- a/gcc/rust/hir/tree/rust-hir-item.h
+++ b/gcc/rust/hir/tree/rust-hir-item.h
@@ -1226,6 +1226,11 @@ public:
SelfParam &get_self_param () { return self; }
+ std::string get_impl_item_name () const override final
+ {
+ return get_function_name ();
+ }
+
protected:
/* Use covariance to implement clone function as returning this object
* rather than base */
@@ -1345,6 +1350,11 @@ public:
return get_mappings ();
};
+ std::string get_impl_item_name () const override final
+ {
+ return get_new_type_name ();
+ }
+
protected:
/* Use covariance to implement clone function as returning this object
* rather than base */
@@ -2116,7 +2126,7 @@ public:
Expr *get_expr () { return const_expr.get (); }
- std::string get_identifier () { return identifier; }
+ std::string get_identifier () const { return identifier; }
Analysis::NodeMapping get_impl_mappings () const override
{
@@ -2130,6 +2140,11 @@ public:
ItemKind get_item_kind () const override { return ItemKind::Constant; }
+ std::string get_impl_item_name () const override final
+ {
+ return get_identifier ();
+ }
+
protected:
/* Use covariance to implement clone function as returning this object
* rather than base */
diff --git a/gcc/rust/hir/tree/rust-hir-path.h b/gcc/rust/hir/tree/rust-hir-path.h
index 17eedb8..740de93 100644
--- a/gcc/rust/hir/tree/rust-hir-path.h
+++ b/gcc/rust/hir/tree/rust-hir-path.h
@@ -105,9 +105,11 @@ public:
std::string as_string () const;
- Identifier get_identifier () const { return identifier; }
+ Identifier &get_identifier () { return identifier; }
+ const Identifier &get_identifier () const { return identifier; }
std::unique_ptr<Type> &get_type () { return type; }
+ const std::unique_ptr<Type> &get_type () const { return type; }
Location get_locus () const { return locus; }
};
diff --git a/gcc/rust/hir/tree/rust-hir-pattern.h b/gcc/rust/hir/tree/rust-hir-pattern.h
index 80fa9b7..1b08ab8 100644
--- a/gcc/rust/hir/tree/rust-hir-pattern.h
+++ b/gcc/rust/hir/tree/rust-hir-pattern.h
@@ -424,7 +424,6 @@ protected:
// HIR node for pattern based on dereferencing the pointers given
class ReferencePattern : public Pattern
{
- bool has_two_amps;
Mutability mut;
std::unique_ptr<Pattern> pattern;
Location locus;
@@ -435,16 +434,15 @@ public:
ReferencePattern (Analysis::NodeMapping mappings,
std::unique_ptr<Pattern> pattern, Mutability reference_mut,
- bool ref_has_two_amps, Location locus)
- : has_two_amps (ref_has_two_amps), mut (reference_mut),
- pattern (std::move (pattern)), locus (locus), mappings (mappings)
+ Location locus)
+ : mut (reference_mut), pattern (std::move (pattern)), locus (locus),
+ mappings (mappings)
{}
// Copy constructor requires clone
ReferencePattern (ReferencePattern const &other)
- : has_two_amps (other.has_two_amps), mut (other.mut),
- pattern (other.pattern->clone_pattern ()), locus (other.locus),
- mappings (other.mappings)
+ : mut (other.mut), pattern (other.pattern->clone_pattern ()),
+ locus (other.locus), mappings (other.mappings)
{}
// Overload assignment operator to clone
@@ -452,7 +450,6 @@ public:
{
pattern = other.pattern->clone_pattern ();
mut = other.mut;
- has_two_amps = other.has_two_amps;
locus = other.locus;
mappings = other.mappings;
@@ -1145,6 +1142,24 @@ public:
return TuplePatternItemType::RANGED;
}
+ std::vector<std::unique_ptr<Pattern> > &get_lower_patterns ()
+ {
+ return lower_patterns;
+ }
+ const std::vector<std::unique_ptr<Pattern> > &get_lower_patterns () const
+ {
+ return lower_patterns;
+ }
+
+ std::vector<std::unique_ptr<Pattern> > &get_upper_patterns ()
+ {
+ return upper_patterns;
+ }
+ const std::vector<std::unique_ptr<Pattern> > &get_upper_patterns () const
+ {
+ return upper_patterns;
+ }
+
protected:
/* Use covariance to implement clone function as returning this object rather
* than base */
@@ -1215,69 +1230,6 @@ protected:
}
};
-// HIR node representing a pattern in parentheses, used to control precedence
-class GroupedPattern : public Pattern
-{
- std::unique_ptr<Pattern> pattern_in_parens;
- Location locus;
- Analysis::NodeMapping mappings;
-
-public:
- std::string as_string () const override
- {
- return "(" + pattern_in_parens->as_string () + ")";
- }
-
- GroupedPattern (Analysis::NodeMapping mappings,
- std::unique_ptr<Pattern> pattern_in_parens, Location locus)
- : pattern_in_parens (std::move (pattern_in_parens)), locus (locus),
- mappings (mappings)
- {}
-
- // Copy constructor uses clone
- GroupedPattern (GroupedPattern const &other)
- : pattern_in_parens (other.pattern_in_parens->clone_pattern ()),
- locus (other.locus), mappings (other.mappings)
- {}
-
- // Overload assignment operator to clone
- GroupedPattern &operator= (GroupedPattern const &other)
- {
- pattern_in_parens = other.pattern_in_parens->clone_pattern ();
- locus = other.locus;
- mappings = other.mappings;
-
- return *this;
- }
-
- // default move semantics
- GroupedPattern (GroupedPattern &&other) = default;
- GroupedPattern &operator= (GroupedPattern &&other) = default;
-
- Location get_locus () const override { return locus; }
-
- void accept_vis (HIRFullVisitor &vis) override;
- void accept_vis (HIRPatternVisitor &vis) override;
-
- Analysis::NodeMapping get_pattern_mappings () const override final
- {
- return mappings;
- }
-
- PatternType get_pattern_type () const override final
- {
- return PatternType::GROUPED;
- }
-
-protected:
- /* Use covariance to implement clone function as returning this object rather
- * than base */
- GroupedPattern *clone_pattern_impl () const override
- {
- return new GroupedPattern (*this);
- }
-};
-
// HIR node representing patterns that can match slices and arrays
class SlicePattern : public Pattern
{
diff --git a/gcc/rust/hir/tree/rust-hir-visitor.h b/gcc/rust/hir/tree/rust-hir-visitor.h
index ba6cad7..a635f90 100644
--- a/gcc/rust/hir/tree/rust-hir-visitor.h
+++ b/gcc/rust/hir/tree/rust-hir-visitor.h
@@ -138,7 +138,6 @@ public:
virtual void visit (TuplePatternItemsMultiple &tuple_items) = 0;
virtual void visit (TuplePatternItemsRanged &tuple_items) = 0;
virtual void visit (TuplePattern &pattern) = 0;
- virtual void visit (GroupedPattern &pattern) = 0;
virtual void visit (SlicePattern &pattern) = 0;
virtual void visit (EmptyStmt &stmt) = 0;
virtual void visit (LetStmt &stmt) = 0;
@@ -290,7 +289,6 @@ public:
virtual void visit (TuplePatternItemsMultiple &) override {}
virtual void visit (TuplePatternItemsRanged &) override {}
virtual void visit (TuplePattern &) override {}
- virtual void visit (GroupedPattern &) override {}
virtual void visit (SlicePattern &) override {}
virtual void visit (EmptyStmt &) override {}
@@ -470,7 +468,6 @@ public:
class HIRPatternVisitor
{
public:
- virtual void visit (GroupedPattern &) = 0;
virtual void visit (IdentifierPattern &) = 0;
virtual void visit (LiteralPattern &) = 0;
virtual void visit (PathInExpression &) = 0;
diff --git a/gcc/rust/hir/tree/rust-hir-full-test.cc b/gcc/rust/hir/tree/rust-hir.cc
index 230b7f7..0ddb841 100644
--- a/gcc/rust/hir/tree/rust-hir-full-test.cc
+++ b/gcc/rust/hir/tree/rust-hir.cc
@@ -2583,11 +2583,6 @@ ReferencePattern::as_string () const
{
std::string str ("&");
- if (has_two_amps)
- {
- str += "&";
- }
-
if (is_mut ())
{
str += "mut ";
@@ -4477,12 +4472,6 @@ TuplePattern::accept_vis (HIRFullVisitor &vis)
}
void
-GroupedPattern::accept_vis (HIRFullVisitor &vis)
-{
- vis.visit (*this);
-}
-
-void
SlicePattern::accept_vis (HIRFullVisitor &vis)
{
vis.visit (*this);
@@ -4609,12 +4598,6 @@ EmptyStmt::accept_vis (HIRStmtVisitor &vis)
}
void
-GroupedPattern::accept_vis (HIRPatternVisitor &vis)
-{
- vis.visit (*this);
-}
-
-void
WildcardPattern::accept_vis (HIRPatternVisitor &vis)
{
vis.visit (*this);
diff --git a/gcc/rust/hir/tree/rust-hir.h b/gcc/rust/hir/tree/rust-hir.h
index 314aafb..28f1f21 100644
--- a/gcc/rust/hir/tree/rust-hir.h
+++ b/gcc/rust/hir/tree/rust-hir.h
@@ -839,6 +839,8 @@ public:
virtual ImplItemType get_impl_item_type () const = 0;
+ virtual std::string get_impl_item_name () const = 0;
+
protected:
// Clone function implementation as pure virtual method
virtual ImplItem *clone_inherent_impl_item_impl () const = 0;