@@ -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