Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir_def/src/path/lower.rs')
-rw-r--r--crates/hir_def/src/path/lower.rs17
1 files changed, 6 insertions, 11 deletions
diff --git a/crates/hir_def/src/path/lower.rs b/crates/hir_def/src/path/lower.rs
index b08708bd28..c84cd50ce6 100644
--- a/crates/hir_def/src/path/lower.rs
+++ b/crates/hir_def/src/path/lower.rs
@@ -70,18 +70,13 @@ pub(super) fn lower_path(mut path: ast::Path, ctx: &LowerCtx) -> Option<Path> {
}
// <T as Trait<A>>::Foo desugars to Trait<Self=T, A>::Foo
Some(trait_ref) => {
- let path = Path::from_src(trait_ref.path()?, ctx)?;
- let mod_path = (*path.mod_path).clone();
- let num_segments = path.mod_path.segments.len();
+ let Path { mod_path, generic_args: path_generic_args, .. } =
+ Path::from_src(trait_ref.path()?, ctx)?;
+ let num_segments = mod_path.segments.len();
kind = mod_path.kind;
- let mut prefix_segments = mod_path.segments;
- prefix_segments.reverse();
- segments.extend(prefix_segments);
-
- let mut prefix_args = path.generic_args;
- prefix_args.reverse();
- generic_args.extend(prefix_args);
+ segments.extend(mod_path.segments.iter().cloned().rev());
+ generic_args.extend(path_generic_args.iter().cloned().rev());
// Insert the type reference (T in the above example) as Self parameter for the trait
let last_segment =
@@ -139,7 +134,7 @@ pub(super) fn lower_path(mut path: ast::Path, ctx: &LowerCtx) -> Option<Path> {
}
let mod_path = Interned::new(ModPath::from_segments(kind, segments));
- return Some(Path { type_anchor, mod_path, generic_args });
+ return Some(Path { type_anchor, mod_path, generic_args: generic_args.into() });
fn qualifier(path: &ast::Path) -> Option<ast::Path> {
if let Some(q) = path.qualifier() {