From: Pierre-Emmanuel Patry <[email protected]>
Use RawPath instead of vector of segments.
gcc/rust/ChangeLog:
* backend/rust-compile-struct-field-expr.cc
(CompileStructExprField::visit):
Update call site.
* hir/rust-ast-lower-expr.cc (ASTLoweringExpr::visit): Likewise.
* hir/rust-ast-lower.cc (ASTLowerPathInExpression::visit): Likewise.
(ASTLowerQualPathInExpression::visit): Likewise.
* hir/tree/rust-hir-path.cc (PathInExpression::PathInExpression): Use
RawPath for constructor.
* hir/tree/rust-hir-path.h: Use RawPath within PathPattern.
* typecheck/rust-hir-type-check-struct.cc (TypeCheckStructExpr::visit):
Update call site.
Signed-off-by: Pierre-Emmanuel Patry <[email protected]>
---
This change was merged into the gccrs repository and is posted here for
upstream visibility and potential drive-by review, as requested by GCC
release managers.
Each commit email contains a link to its details on github from where you can
find the Pull-Request and associated discussions.
Commit on github:
https://github.com/Rust-GCC/gccrs/commit/bb4b3a7ba7048ec6e93a02cb0c5e053f028bd076
The commit has NOT been mentioned in any issue.
The commit has been mentioned in the following pull-request(s):
- https://github.com/Rust-GCC/gccrs/pull/5044
.../backend/rust-compile-struct-field-expr.cc | 4 ++--
gcc/rust/hir/rust-ast-lower-expr.cc | 5 +++--
gcc/rust/hir/rust-ast-lower.cc | 13 +++++++++----
gcc/rust/hir/tree/rust-hir-path.cc | 9 ++++-----
gcc/rust/hir/tree/rust-hir-path.h | 15 ++++++---------
gcc/rust/typecheck/rust-hir-type-check-struct.cc | 4 ++--
6 files changed, 26 insertions(+), 24 deletions(-)
diff --git a/gcc/rust/backend/rust-compile-struct-field-expr.cc
b/gcc/rust/backend/rust-compile-struct-field-expr.cc
index 104e51b67..9036440f6 100644
--- a/gcc/rust/backend/rust-compile-struct-field-expr.cc
+++ b/gcc/rust/backend/rust-compile-struct-field-expr.cc
@@ -72,8 +72,8 @@ CompileStructExprField::visit (HIR::StructExprFieldIdentifier
&field)
HIR::PathIdentSegment ident_seg (field.get_field_name ().as_string ());
HIR::PathExprSegment seg (mappings_copy1, ident_seg, field.get_locus (),
HIR::GenericArgs::create_empty ());
- HIR::PathInExpression expr (mappings_copy2, {seg}, field.get_locus (), false,
- {});
+ RawPath<HIR::PathExprSegment> path ({seg}, false);
+ HIR::PathInExpression expr (mappings_copy2, path, field.get_locus (), {});
translated = CompileExpr::Compile (expr, ctx);
}
diff --git a/gcc/rust/hir/rust-ast-lower-expr.cc
b/gcc/rust/hir/rust-ast-lower-expr.cc
index 58dfe6d3b..0b7509566 100644
--- a/gcc/rust/hir/rust-ast-lower-expr.cc
+++ b/gcc/rust/hir/rust-ast-lower-expr.cc
@@ -299,8 +299,9 @@ ASTLoweringExpr::visit (AST::IdentifierExpr &expr)
HIR::PathIdentSegment ident_seg (expr.get_ident ().as_string ());
HIR::PathExprSegment seg (mapping1, ident_seg, expr.get_locus (),
HIR::GenericArgs::create_empty ());
- translated = new HIR::PathInExpression (mapping2, {seg}, expr.get_locus (),
- false, expr.get_outer_attrs ());
+ RawPath<HIR::PathExprSegment> path ({seg}, false);
+ translated = new HIR::PathInExpression (mapping2, path, expr.get_locus (),
+ expr.get_outer_attrs ());
}
void
diff --git a/gcc/rust/hir/rust-ast-lower.cc b/gcc/rust/hir/rust-ast-lower.cc
index 9f1d95424..d777039dc 100644
--- a/gcc/rust/hir/rust-ast-lower.cc
+++ b/gcc/rust/hir/rust-ast-lower.cc
@@ -490,9 +490,11 @@ ASTLowerPathInExpression::visit (AST::PathInExpression
&expr)
mappings.hir.path_expr_segments.insert (lowered_seg);
}
- translated = new HIR::PathInExpression (mapping, std::move (path_segments),
- expr.get_locus (),
- expr.has_opening_scope_resolution ());
+ RawPath<HIR::PathExprSegment> path (std::move (path_segments),
+ expr.has_opening_scope_resolution ());
+
+ translated
+ = new HIR::PathInExpression (mapping, std::move (path), expr.get_locus ());
}
HIR::QualifiedPathType
@@ -534,13 +536,16 @@ ASTLowerQualPathInExpression::visit
(AST::QualifiedPathInExpression &expr)
mappings.hir.path_expr_segments.insert (lowered_seg);
}
+ RawPath<HIR::PathExprSegment> hir_path{path_segments,
+ expr.has_opening_scope_resolution ()};
+
auto crate_num = mappings.crate.get_current_crate ();
Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
mappings.get_next_hir_id (crate_num),
UNKNOWN_LOCAL_DEFID);
translated = new HIR::QualifiedPathInExpression (mapping, qual_path_type,
- std::move (path_segments),
+ std::move (hir_path),
expr.get_locus (),
expr.get_outer_attrs ());
}
diff --git a/gcc/rust/hir/tree/rust-hir-path.cc
b/gcc/rust/hir/tree/rust-hir-path.cc
index cfdec9a08..8f5dec819 100644
--- a/gcc/rust/hir/tree/rust-hir-path.cc
+++ b/gcc/rust/hir/tree/rust-hir-path.cc
@@ -145,11 +145,10 @@ PathPattern::iterate_path_segments (std::function<bool
(PathExprSegment &)> cb)
}
PathInExpression::PathInExpression (Analysis::NodeMapping mappings,
- std::vector<PathExprSegment> path_segments,
+ RawPath<PathExprSegment> path,
location_t locus,
- bool has_opening_scope_resolution,
std::vector<AST::Attribute> outer_attrs)
- : PathPattern (std::move (path_segments), has_opening_scope_resolution),
+ : PathPattern (path),
PathExpr (std::move (mappings), std::move (outer_attrs)), locus (locus)
{}
@@ -363,9 +362,9 @@ QualifiedPathType::get_trait_generic_args ()
QualifiedPathInExpression::QualifiedPathInExpression (
Analysis::NodeMapping mappings, QualifiedPathType qual_path_type,
- std::vector<PathExprSegment> path_segments, location_t locus,
+ RawPath<PathExprSegment> path, location_t locus,
std::vector<AST::Attribute> outer_attrs)
- : PathPattern (std::move (path_segments), false),
+ : PathPattern (std::move (path)),
PathExpr (std::move (mappings), std::move (outer_attrs)),
path_type (std::move (qual_path_type)), locus (locus)
{}
diff --git a/gcc/rust/hir/tree/rust-hir-path.h
b/gcc/rust/hir/tree/rust-hir-path.h
index ea1dab27d..c912faaa0 100644
--- a/gcc/rust/hir/tree/rust-hir-path.h
+++ b/gcc/rust/hir/tree/rust-hir-path.h
@@ -260,10 +260,9 @@ private:
Kind kind;
protected:
- PathPattern (std::vector<PathExprSegment> segments,
- bool has_opening_scope_resolution)
- : RawPath (std::move (segments), has_opening_scope_resolution),
- lang_item (tl::nullopt), kind (Kind::Segmented)
+ PathPattern (RawPath<PathExprSegment> path)
+ : RawPath (std::move (path)), lang_item (tl::nullopt),
+ kind (Kind::Segmented)
{}
PathPattern (LangItem::Kind lang_item)
@@ -359,9 +358,8 @@ public:
// Constructor
PathInExpression (Analysis::NodeMapping mappings,
- std::vector<PathExprSegment> path_segments,
+ RawPath<PathExprSegment> path,
location_t locus = UNDEF_LOCATION,
- bool has_opening_scope_resolution = false,
std::vector<AST::Attribute> outer_attrs
= std::vector<AST::Attribute> ());
@@ -374,8 +372,7 @@ public:
// Creates an error state path in expression.
static PathInExpression create_error ()
{
- return PathInExpression (Analysis::NodeMapping::get_error (),
- std::vector<PathExprSegment> ());
+ return PathInExpression (Analysis::NodeMapping::get_error (), {});
}
// Returns whether path in expression is in an error state.
@@ -784,7 +781,7 @@ public:
QualifiedPathInExpression (Analysis::NodeMapping mappings,
QualifiedPathType qual_path_type,
- std::vector<PathExprSegment> path_segments,
+ RawPath<PathExprSegment> path,
location_t locus = UNDEF_LOCATION,
std::vector<AST::Attribute> outer_attrs
= std::vector<AST::Attribute> ());
diff --git a/gcc/rust/typecheck/rust-hir-type-check-struct.cc
b/gcc/rust/typecheck/rust-hir-type-check-struct.cc
index eb871c488..080244310 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-struct.cc
+++ b/gcc/rust/typecheck/rust-hir-type-check-struct.cc
@@ -386,8 +386,8 @@ TypeCheckStructExpr::visit (HIR::StructExprFieldIdentifier
&field)
HIR::PathIdentSegment ident_seg (field.get_field_name ().as_string ());
HIR::PathExprSegment seg (mappings_copy1, ident_seg, field.get_locus (),
HIR::GenericArgs::create_empty ());
- HIR::PathInExpression expr (mappings_copy2, {seg}, field.get_locus (), false,
- {});
+ RawPath<HIR::PathExprSegment> path ({seg}, false);
+ HIR::PathInExpression expr (mappings_copy2, path, field.get_locus (), {});
TyTy::BaseType *value = TypeCheckExpr::Resolve (expr);
location_t value_locus = expr.get_locus ();
--
2.56.0