Skip to content

Commit c0bf494

Browse files
Support the new lowering of format_args!()
1 parent fd8f92d commit c0bf494

File tree

4 files changed

+523
-105
lines changed

4 files changed

+523
-105
lines changed

src/tools/rust-analyzer/crates/hir-def/src/expr_store/lower.rs

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,8 @@ pub struct ExprCollector<'db> {
432432

433433
awaitable_context: Option<Awaitable>,
434434
krate: base_db::Crate,
435+
436+
name_generator_index: usize,
435437
}
436438

437439
#[derive(Clone, Debug)]
@@ -537,9 +539,16 @@ impl<'db> ExprCollector<'db> {
537539
current_block_legacy_macro_defs_count: FxHashMap::default(),
538540
outer_impl_trait: false,
539541
krate,
542+
name_generator_index: 0,
540543
}
541544
}
542545

546+
fn generate_new_name(&mut self) -> Name {
547+
let index = self.name_generator_index;
548+
self.name_generator_index += 1;
549+
Name::generate_new_name(index)
550+
}
551+
543552
#[inline]
544553
pub(crate) fn lang_items(&self) -> &'db LangItems {
545554
self.lang_items.get_or_init(|| crate::lang_item::lang_items(self.db, self.def_map.krate()))
@@ -1638,9 +1647,8 @@ impl<'db> ExprCollector<'db> {
16381647
/// and save the `<new_label>` to use it as a break target for desugaring of the `?` operator.
16391648
fn desugar_try_block(&mut self, e: BlockExpr) -> ExprId {
16401649
let try_from_output = self.lang_path(self.lang_items().TryTraitFromOutput);
1641-
let label = self.alloc_label_desugared(Label {
1642-
name: Name::generate_new_name(self.store.labels.len()),
1643-
});
1650+
let label = self.generate_new_name();
1651+
let label = self.alloc_label_desugared(Label { name: label });
16441652
let old_label = self.current_try_block_label.replace(label);
16451653

16461654
let ptr = AstPtr::new(&e).upcast();
@@ -1768,7 +1776,7 @@ impl<'db> ExprCollector<'db> {
17681776
this.collect_expr_opt(e.loop_body().map(|it| it.into()))
17691777
}),
17701778
};
1771-
let iter_name = Name::generate_new_name(self.store.exprs.len());
1779+
let iter_name = self.generate_new_name();
17721780
let iter_expr = self.alloc_expr(Expr::Path(Path::from(iter_name.clone())), syntax_ptr);
17731781
let iter_expr_mut = self.alloc_expr(
17741782
Expr::Ref { expr: iter_expr, rawness: Rawness::Ref, mutability: Mutability::Mut },
@@ -1829,7 +1837,7 @@ impl<'db> ExprCollector<'db> {
18291837
let try_branch = self.alloc_expr(try_branch.map_or(Expr::Missing, Expr::Path), syntax_ptr);
18301838
let expr = self
18311839
.alloc_expr(Expr::Call { callee: try_branch, args: Box::new([operand]) }, syntax_ptr);
1832-
let continue_name = Name::generate_new_name(self.store.bindings.len());
1840+
let continue_name = self.generate_new_name();
18331841
let continue_binding = self.alloc_binding(
18341842
continue_name.clone(),
18351843
BindingAnnotation::Unannotated,
@@ -1847,7 +1855,7 @@ impl<'db> ExprCollector<'db> {
18471855
guard: None,
18481856
expr: self.alloc_expr(Expr::Path(Path::from(continue_name)), syntax_ptr),
18491857
};
1850-
let break_name = Name::generate_new_name(self.store.bindings.len());
1858+
let break_name = self.generate_new_name();
18511859
let break_binding =
18521860
self.alloc_binding(break_name.clone(), BindingAnnotation::Unannotated, HygieneId::ROOT);
18531861
let break_bpat = self.alloc_pat_desugared(Pat::Bind { id: break_binding, subpat: None });
@@ -2628,9 +2636,17 @@ impl<'db> ExprCollector<'db> {
26282636
fn ty_rel_lang_path(
26292637
&self,
26302638
lang: Option<impl Into<LangItemTarget>>,
2631-
relative_name: Name,
2639+
relative_name: Symbol,
26322640
) -> Option<Path> {
2633-
Some(Path::LangItem(lang?.into(), Some(relative_name)))
2641+
Some(Path::LangItem(lang?.into(), Some(Name::new_symbol_root(relative_name))))
2642+
}
2643+
2644+
fn ty_rel_lang_path_expr(
2645+
&self,
2646+
lang: Option<impl Into<LangItemTarget>>,
2647+
relative_name: Symbol,
2648+
) -> Expr {
2649+
self.ty_rel_lang_path(lang, relative_name).map_or(Expr::Missing, Expr::Path)
26342650
}
26352651
}
26362652

0 commit comments

Comments
 (0)