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

Reply via email to