aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/hir/rust-ast-lower-pattern.cc
diff options
context:
space:
mode:
authorPierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>2024-02-22 18:55:53 +0100
committerP-E-P <32375388+P-E-P@users.noreply.github.com>2024-03-13 11:58:12 +0000
commit75dc00584e0e7a73ddcbef358abae24762b27bcd (patch)
tree3fe9451d4e13f681abf77959819acddc03d32b25 /gcc/rust/hir/rust-ast-lower-pattern.cc
parent843d7d7b46133fc471ed51d165a979c5af059aea (diff)
downloadgcc-75dc00584e0e7a73ddcbef358abae24762b27bcd.zip
gcc-75dc00584e0e7a73ddcbef358abae24762b27bcd.tar.gz
gcc-75dc00584e0e7a73ddcbef358abae24762b27bcd.tar.bz2
Replace unique_ptr references with references
This kind of double indirection is pointless and prone to error. This commit change the api of all getters from the AST to use references directly instead of references to unique pointers. gcc/rust/ChangeLog: * ast/rust-ast-collector.cc (TokenCollector::visit): Remove reference to unique pointer and replace it with a direct reference to the wrapped data. * ast/rust-ast.cc (VariadicParam::as_string): Likewise. (BlockExpr::normalize_tail_expr): Likewise. * ast/rust-expr.h: Likewise and add pointer getter in order to allow pointer reseat. * ast/rust-item.h: Likewise and add pointer getter for reseat. * ast/rust-path.h: Likewise. * ast/rust-pattern.h: Likewise. * ast/rust-stmt.h: Likewise. * ast/rust-type.h: Likewise. * expand/rust-cfg-strip.cc (CfgStrip::maybe_strip_struct_fields): Remove references to unique pointers and replace it with direct references to the wrapped object. (CfgStrip::maybe_strip_tuple_fields): Likewise. (CfgStrip::maybe_strip_generic_args): Likewise. (CfgStrip::maybe_strip_qualified_path_type): Likewise. (CfgStrip::visit): Likewise. * expand/rust-expand-visitor.cc (ExpandVisitor::maybe_expand_expr): Likewise. (ExpandVisitor::maybe_expand_type): Likewise. (ExpandVisitor::visit): Likewise. * expand/rust-expand-visitor.h: Likewise. * hir/rust-ast-lower-base.cc (ASTLoweringBase::lower_binding): Likewise. (ASTLoweringBase::lower_generic_args): Likewise. (ASTLoweringBase::lower_self): Likewise. (ASTLoweringBase::lower_type_no_bounds): Likewise. (ASTLoweringBase::lower_bound): Likewise. (ASTLoweringBase::lower_range_pattern_bound): Likewise. * hir/rust-ast-lower-base.h: Likewise. * hir/rust-ast-lower-block.h: Likewise. * hir/rust-ast-lower-enumitem.h: Likewise. * hir/rust-ast-lower-expr.cc (ASTLoweringExpr::translate): Likewise. (ASTLoweringExpr::visit): Likewise. * hir/rust-ast-lower-expr.h: Likewise. * hir/rust-ast-lower-extern.h: Likewise. * hir/rust-ast-lower-implitem.cc (ASTLowerImplItem::translate): Likewise. (ASTLowerImplItem::visit): Likewise. (ASTLowerTraitItem::translate): Likewise. (ASTLowerTraitItem::visit): Likewise. * hir/rust-ast-lower-implitem.h: Likewise. * hir/rust-ast-lower-item.cc (ASTLoweringItem::translate): Likewise. (ASTLoweringItem::visit): Likewise. * hir/rust-ast-lower-item.h: Likewise. * hir/rust-ast-lower-pattern.cc (ASTLoweringPattern::translate): Likewise. (ASTLoweringPattern::visit): Likewise. * hir/rust-ast-lower-pattern.h: Likewise. * hir/rust-ast-lower-stmt.cc (ASTLoweringStmt::visit): Likewise. * hir/rust-ast-lower-struct-field-expr.h: Likewise. * hir/rust-ast-lower-type.cc (ASTLowerTypePath::visit): Likewise. (ASTLowerQualifiedPathInType::visit): Likewise. (ASTLoweringType::translate): Likewise. (ASTLoweringType::visit): Likewise. (ASTLowerGenericParam::translate): Likewise. (ASTLowerGenericParam::visit): Likewise. (ASTLoweringTypeBounds::translate): Likewise. (ASTLoweringTypeBounds::visit): Likewise. (ASTLowerWhereClauseItem::visit): Likewise. * hir/rust-ast-lower-type.h: Likewise. * hir/rust-ast-lower.cc (ASTLowering::go): Likewise. (ASTLoweringBlock::visit): Likewise. (ASTLoweringIfBlock::visit): Likewise. (ASTLoweringIfLetBlock::visit): Likewise. (ASTLowerStructExprField::visit): Likewise. (ASTLoweringExprWithBlock::visit): Likewise. (ASTLoweringBase::lower_qual_path_type): Likewise. (ASTLoweringBase::lower_closure_param): Likewise. * resolve/rust-ast-resolve-base.cc (ResolverBase::resolve_visibility): Likewise. * resolve/rust-ast-resolve-expr.cc (ResolveExpr::go): Likewise. (ResolveExpr::visit): Likewise. (ResolveExpr::resolve_closure_param): Likewise. * resolve/rust-ast-resolve-expr.h: Likewise. * resolve/rust-ast-resolve-implitem.h: Likewise. * resolve/rust-ast-resolve-item.cc (ResolveTraitItems::visit): Likewise. (ResolveItem::go): Likewise. (ResolveItem::visit): Likewise. (ResolveItem::resolve_impl_item): Likewise. (ResolveItem::resolve_extern_item): Likewise. (ResolveImplItems::go): Likewise. (ResolveExternItem::go): Likewise. (ResolveExternItem::visit): Likewise. * resolve/rust-ast-resolve-item.h: Likewise. * resolve/rust-ast-resolve-path.cc (ResolvePath::go): Likewise. (ResolvePath::resolve_path): Likewise. * resolve/rust-ast-resolve-path.h: Likewise. * resolve/rust-ast-resolve-pattern.cc (PatternDeclaration::go): Likewise. (PatternDeclaration::visit): Likewise. (resolve_range_pattern_bound): Likewise. * resolve/rust-ast-resolve-pattern.h: Likewise. * resolve/rust-ast-resolve-stmt.cc (ResolveStmt::visit): Likewise. * resolve/rust-ast-resolve-stmt.h: Likewise. * resolve/rust-ast-resolve-struct-expr-field.cc (ResolveStructExprField::go): Likewise. (ResolveStructExprField::visit): Likewise. * resolve/rust-ast-resolve-struct-expr-field.h: Likewise. * resolve/rust-ast-resolve-toplevel.h: Likewise. * resolve/rust-ast-resolve-type.cc (ResolveType::visit): Likewise. (ResolveRelativeTypePath::go): Likewise. (ResolveRelativeQualTypePath::resolve_qual_seg): Likewise. (ResolveTypeToCanonicalPath::go): Likewise. (ResolveTypeToCanonicalPath::visit): Likewise. (ResolveGenericArgs::resolve_disambiguated_generic): Likewise. (ResolveGenericArgs::go): Likewise. * resolve/rust-ast-resolve-type.h: Likewise. * resolve/rust-ast-resolve.cc (NameResolution::go): Likewise. * resolve/rust-default-resolver.cc (DefaultResolver::visit): Likewise. * resolve/rust-early-name-resolver.cc (EarlyNameResolver::resolve_qualified_path_type): Likewise. (EarlyNameResolver::visit): Likewise. * resolve/rust-toplevel-name-resolver-2.0.cc (TopLevel::visit): Likewise. * checks/errors/rust-ast-validation.cc: Likewise. Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Diffstat (limited to 'gcc/rust/hir/rust-ast-lower-pattern.cc')
-rw-r--r--gcc/rust/hir/rust-ast-lower-pattern.cc54
1 files changed, 25 insertions, 29 deletions
diff --git a/gcc/rust/hir/rust-ast-lower-pattern.cc b/gcc/rust/hir/rust-ast-lower-pattern.cc
index d534b82..96266dc 100644
--- a/gcc/rust/hir/rust-ast-lower-pattern.cc
+++ b/gcc/rust/hir/rust-ast-lower-pattern.cc
@@ -25,17 +25,17 @@ namespace HIR {
ASTLoweringPattern::ASTLoweringPattern () : translated (nullptr) {}
HIR::Pattern *
-ASTLoweringPattern::translate (AST::Pattern *pattern, bool is_let_top_level)
+ASTLoweringPattern::translate (AST::Pattern &pattern, bool is_let_top_level)
{
ASTLoweringPattern resolver;
resolver.is_let_top_level = is_let_top_level;
- pattern->accept_vis (resolver);
+ pattern.accept_vis (resolver);
rust_assert (resolver.translated != nullptr);
resolver.mappings->insert_hir_pattern (resolver.translated);
resolver.mappings->insert_location (
- resolver.translated->get_mappings ().get_hirid (), pattern->get_locus ());
+ resolver.translated->get_mappings ().get_hirid (), pattern.get_locus ());
return resolver.translated;
}
@@ -60,18 +60,18 @@ ASTLoweringPattern::visit (AST::IdentifierPattern &pattern)
void
ASTLoweringPattern::visit (AST::PathInExpression &pattern)
{
- translated = ASTLowerPathInExpression::translate (&pattern);
+ translated = ASTLowerPathInExpression::translate (pattern);
}
void
ASTLoweringPattern::visit (AST::TupleStructPattern &pattern)
{
HIR::PathInExpression *path
- = ASTLowerPathInExpression::translate (&pattern.get_path ());
+ = ASTLowerPathInExpression::translate (pattern.get_path ());
TupleStructItems *lowered = nullptr;
auto &items = pattern.get_items ();
- switch (items->get_item_type ())
+ switch (items.get_item_type ())
{
case AST::TupleStructItems::RANGE: {
// TODO
@@ -81,13 +81,12 @@ ASTLoweringPattern::visit (AST::TupleStructPattern &pattern)
case AST::TupleStructItems::NO_RANGE: {
AST::TupleStructItemsNoRange &items_no_range
- = static_cast<AST::TupleStructItemsNoRange &> (*items.get ());
+ = static_cast<AST::TupleStructItemsNoRange &> (items);
std::vector<std::unique_ptr<HIR::Pattern>> patterns;
for (auto &inner_pattern : items_no_range.get_patterns ())
{
- HIR::Pattern *p
- = ASTLoweringPattern::translate (inner_pattern.get ());
+ HIR::Pattern *p = ASTLoweringPattern::translate (*inner_pattern);
patterns.push_back (std::unique_ptr<HIR::Pattern> (p));
}
@@ -109,7 +108,7 @@ void
ASTLoweringPattern::visit (AST::StructPattern &pattern)
{
HIR::PathInExpression *path
- = ASTLowerPathInExpression::translate (&pattern.get_path ());
+ = ASTLowerPathInExpression::translate (pattern.get_path ());
auto &raw_elems = pattern.get_struct_pattern_elems ();
rust_assert (!raw_elems.has_etc ());
@@ -121,7 +120,7 @@ ASTLoweringPattern::visit (AST::StructPattern &pattern)
switch (field->get_item_type ())
{
case AST::StructPatternField::ItemType::TUPLE_PAT: {
- AST::StructPatternFieldTuplePat &tuple
+ auto &tuple
= static_cast<AST::StructPatternFieldTuplePat &> (*field);
auto crate_num = mappings->get_current_crate ();
@@ -130,8 +129,8 @@ ASTLoweringPattern::visit (AST::StructPattern &pattern)
crate_num),
UNKNOWN_LOCAL_DEFID);
- std::unique_ptr<HIR::Pattern> pat (ASTLoweringPattern::translate (
- tuple.get_index_pattern ().get ()));
+ std::unique_ptr<HIR::Pattern> pat (
+ ASTLoweringPattern::translate (tuple.get_index_pattern ()));
f = new HIR::StructPatternFieldTuplePat (mapping,
tuple.get_index (),
@@ -151,8 +150,8 @@ ASTLoweringPattern::visit (AST::StructPattern &pattern)
crate_num),
UNKNOWN_LOCAL_DEFID);
- std::unique_ptr<HIR::Pattern> pat (ASTLoweringPattern::translate (
- ident.get_ident_pattern ().get ()));
+ std::unique_ptr<HIR::Pattern> pat (
+ ASTLoweringPattern::translate (ident.get_ident_pattern ()));
f = new HIR::StructPatternFieldIdentPat (mapping,
ident.get_identifier (),
@@ -214,20 +213,19 @@ void
ASTLoweringPattern::visit (AST::TuplePattern &pattern)
{
std::unique_ptr<HIR::TuplePatternItems> items;
- switch (pattern.get_items ()->get_pattern_type ())
+ switch (pattern.get_items ().get_pattern_type ())
{
case AST::TuplePatternItems::TuplePatternItemType::MULTIPLE: {
AST::TuplePatternItemsMultiple &ref
- = *static_cast<AST::TuplePatternItemsMultiple *> (
- pattern.get_items ().get ());
+ = static_cast<AST::TuplePatternItemsMultiple &> (
+ pattern.get_items ());
items = lower_tuple_pattern_multiple (ref);
}
break;
case AST::TuplePatternItems::TuplePatternItemType::RANGED: {
AST::TuplePatternItemsRanged &ref
- = *static_cast<AST::TuplePatternItemsRanged *> (
- pattern.get_items ().get ());
+ = static_cast<AST::TuplePatternItemsRanged &> (pattern.get_items ());
items = lower_tuple_pattern_ranged (ref);
}
break;
@@ -258,10 +256,8 @@ ASTLoweringPattern::visit (AST::LiteralPattern &pattern)
void
ASTLoweringPattern::visit (AST::RangePattern &pattern)
{
- auto upper_bound
- = lower_range_pattern_bound (pattern.get_upper_bound ().get ());
- auto lower_bound
- = lower_range_pattern_bound (pattern.get_lower_bound ().get ());
+ auto upper_bound = lower_range_pattern_bound (pattern.get_upper_bound ());
+ auto lower_bound = lower_range_pattern_bound (pattern.get_lower_bound ());
auto crate_num = mappings->get_current_crate ();
Analysis::NodeMapping mapping (crate_num, pattern.get_node_id (),
@@ -277,7 +273,7 @@ void
ASTLoweringPattern::visit (AST::GroupedPattern &pattern)
{
is_let_top_level = false;
- pattern.get_pattern_in_parens ()->accept_vis (*this);
+ pattern.get_pattern_in_parens ().accept_vis (*this);
}
void
@@ -289,7 +285,7 @@ ASTLoweringPattern::visit (AST::ReferencePattern &pattern)
UNKNOWN_LOCAL_DEFID);
HIR::Pattern *inner
- = ASTLoweringPattern::translate (pattern.get_referenced_pattern ().get ());
+ = ASTLoweringPattern::translate (pattern.get_referenced_pattern ());
translated
= new HIR::ReferencePattern (mapping, std::unique_ptr<HIR::Pattern> (inner),
@@ -315,7 +311,7 @@ ASTLoweringPattern::visit (AST::SlicePattern &pattern)
std::vector<std::unique_ptr<HIR::Pattern>> items;
for (auto &p : pattern.get_items ())
{
- HIR::Pattern *item = ASTLoweringPattern::translate (p.get ());
+ HIR::Pattern *item = ASTLoweringPattern::translate (*p);
items.push_back (std::unique_ptr<HIR::Pattern> (item));
}
@@ -340,8 +336,8 @@ ASTLoweringPattern::visit (AST::AltPattern &pattern)
for (auto &alt : pattern.get_alts ())
{
- alts.push_back (std::unique_ptr<HIR::Pattern> (
- ASTLoweringPattern::translate (alt.get ())));
+ alts.push_back (
+ std::unique_ptr<HIR::Pattern> (ASTLoweringPattern::translate (*alt)));
}
translated