11//! Transforms `ast::Expr` into an equivalent `hir_def::expr::Expr`
22//! representation.
33
4- use std:: { collections :: HashMap , mem, sync:: Arc } ;
4+ use std:: { mem, sync:: Arc } ;
55
66use either:: Either ;
77use hir_expand:: {
@@ -10,6 +10,8 @@ use hir_expand::{
1010 name:: { name, AsName , Name } ,
1111 ExpandError , HirFileId , InFile ,
1212} ;
13+ use la_arena:: Arena ;
14+ use profile:: Count ;
1315use rustc_hash:: FxHashMap ;
1416use syntax:: {
1517 ast:: {
@@ -26,8 +28,8 @@ use crate::{
2628 builtin_type:: { BuiltinFloat , BuiltinInt , BuiltinUint } ,
2729 db:: DefDatabase ,
2830 expr:: {
29- Array , BindingAnnotation , Expr , ExprId , FloatTypeWrapper , Label , LabelId , Literal ,
30- MatchArm , Pat , PatId , RecordFieldPat , RecordLitField , Statement ,
31+ dummy_expr_id , Array , BindingAnnotation , Expr , ExprId , FloatTypeWrapper , Label , LabelId ,
32+ Literal , MatchArm , Pat , PatId , RecordFieldPat , RecordLitField , Statement ,
3133 } ,
3234 intern:: Interned ,
3335 item_scope:: BuiltinShadowMode ,
@@ -80,7 +82,24 @@ pub(super) fn lower(
8082 params : Option < ast:: ParamList > ,
8183 body : Option < ast:: Expr > ,
8284) -> ( Body , BodySourceMap ) {
83- ExprCollector :: new ( db, expander) . collect ( params, body)
85+ ExprCollector {
86+ db,
87+ source_map : BodySourceMap :: default ( ) ,
88+ body : Body {
89+ exprs : Arena :: default ( ) ,
90+ pats : Arena :: default ( ) ,
91+ labels : Arena :: default ( ) ,
92+ params : Vec :: new ( ) ,
93+ body_expr : dummy_expr_id ( ) ,
94+ block_scopes : Vec :: new ( ) ,
95+ _c : Count :: new ( ) ,
96+ or_pats : Default :: default ( ) ,
97+ } ,
98+ expander,
99+ name_to_pat_grouping : Default :: default ( ) ,
100+ is_lowering_inside_or_pat : false ,
101+ }
102+ . collect ( params, body)
84103}
85104
86105struct ExprCollector < ' a > {
@@ -93,18 +112,7 @@ struct ExprCollector<'a> {
93112 is_lowering_inside_or_pat : bool ,
94113}
95114
96- impl < ' a > ExprCollector < ' a > {
97- pub ( crate ) fn new ( db : & ' a dyn DefDatabase , expander : Expander ) -> Self {
98- Self {
99- db,
100- expander,
101- body : Body :: default ( ) ,
102- source_map : BodySourceMap :: default ( ) ,
103- name_to_pat_grouping : HashMap :: default ( ) ,
104- is_lowering_inside_or_pat : false ,
105- }
106- }
107-
115+ impl ExprCollector < ' _ > {
108116 fn collect (
109117 mut self ,
110118 param_list : Option < ast:: ParamList > ,
@@ -681,6 +689,7 @@ impl<'a> ExprCollector<'a> {
681689 } ;
682690 let prev_def_map = mem:: replace ( & mut self . expander . def_map , def_map) ;
683691 let prev_local_module = mem:: replace ( & mut self . expander . module , module) ;
692+
684693 let mut statements: Vec < _ > =
685694 block. statements ( ) . filter_map ( |s| self . collect_stmt ( s) ) . collect ( ) ;
686695 let tail = block. tail_expr ( ) . and_then ( |e| self . maybe_collect_expr ( e) ) ;
0 commit comments