@@ -1784,23 +1784,32 @@ impl ExprCollector<'_> {
17841784 self . collect_macro_call ( call, macro_ptr, true , |this, expanded_pat| {
17851785 this. collect_pat_opt ( expanded_pat, binding_list)
17861786 } ) ;
1787- self . source_map . pat_map . insert ( src, pat) ;
1787+ self . source_map . pat_map . insert ( src, pat. into ( ) ) ;
17881788 return pat;
17891789 }
17901790 None => Pat :: Missing ,
17911791 } ,
17921792 // FIXME: implement in a way that also builds source map and calculates assoc resolutions in type inference.
17931793 ast:: Pat :: RangePat ( p) => {
1794- let mut range_part_lower = |p : Option < ast:: Pat > | {
1795- p. and_then ( |it| match & it {
1796- ast:: Pat :: LiteralPat ( it) => {
1797- Some ( Box :: new ( LiteralOrConst :: Literal ( pat_literal_to_hir ( it) ?. 0 ) ) )
1798- }
1799- pat @ ( ast:: Pat :: IdentPat ( _) | ast:: Pat :: PathPat ( _) ) => {
1800- let subpat = self . collect_pat ( pat. clone ( ) , binding_list) ;
1801- Some ( Box :: new ( LiteralOrConst :: Const ( subpat) ) )
1794+ let mut range_part_lower = |p : Option < ast:: Pat > | -> Option < ExprId > {
1795+ p. and_then ( |it| {
1796+ let ptr = PatPtr :: new ( & it) ;
1797+ match & it {
1798+ ast:: Pat :: LiteralPat ( it) => {
1799+ // Some(Box::new(LiteralOrConst::Literal(pat_literal_to_hir(it)?.0)))
1800+ Some ( self . alloc_expr_from_pat (
1801+ Expr :: Literal ( pat_literal_to_hir ( it) ?. 0 ) ,
1802+ ptr,
1803+ ) )
1804+ }
1805+ pat @ ( ast:: Pat :: IdentPat ( _) | ast:: Pat :: PathPat ( _) ) => {
1806+ // let subpat = self.collect_pat(pat.clone(), binding_list);
1807+ // Some(Box::new(LiteralOrConst::Const(subpat)))
1808+ // TODO
1809+ Some ( self . missing_expr ( ) )
1810+ }
1811+ _ => None ,
18021812 }
1803- _ => None ,
18041813 } )
18051814 } ;
18061815 let start = range_part_lower ( p. start ( ) ) ;
@@ -1863,7 +1872,7 @@ impl ExprCollector<'_> {
18631872 }
18641873 } ) ;
18651874 if let Some ( pat) = pat. left ( ) {
1866- self . source_map . pat_map . insert ( src, pat) ;
1875+ self . source_map . pat_map . insert ( src, pat. into ( ) ) ;
18671876 }
18681877 pat
18691878 }
@@ -2490,7 +2499,7 @@ impl ExprCollector<'_> {
24902499 fn alloc_expr ( & mut self , expr : Expr , ptr : ExprPtr ) -> ExprId {
24912500 let src = self . expander . in_file ( ptr) ;
24922501 let id = self . store . exprs . alloc ( expr) ;
2493- self . source_map . expr_map_back . insert ( id, src) ;
2502+ self . source_map . expr_map_back . insert ( id, src. map ( AstPtr :: wrap_left ) ) ;
24942503 self . source_map . expr_map . insert ( src, id. into ( ) ) ;
24952504 id
24962505 }
@@ -2502,7 +2511,7 @@ impl ExprCollector<'_> {
25022511 fn alloc_expr_desugared_with_ptr ( & mut self , expr : Expr , ptr : ExprPtr ) -> ExprId {
25032512 let src = self . expander . in_file ( ptr) ;
25042513 let id = self . store . exprs . alloc ( expr) ;
2505- self . source_map . expr_map_back . insert ( id, src) ;
2514+ self . source_map . expr_map_back . insert ( id, src. map ( AstPtr :: wrap_left ) ) ;
25062515 // We intentionally don't fill this as it could overwrite a non-desugared entry
25072516 // self.source_map.expr_map.insert(src, id);
25082517 id
@@ -2526,11 +2535,20 @@ impl ExprCollector<'_> {
25262535 self . source_map . pat_map_back . insert ( id, src. map ( AstPtr :: wrap_left) ) ;
25272536 id
25282537 }
2538+
2539+ fn alloc_expr_from_pat ( & mut self , expr : Expr , ptr : PatPtr ) -> ExprId {
2540+ let src = self . expander . in_file ( ptr) ;
2541+ let id = self . body . exprs . alloc ( expr) ;
2542+ self . source_map . pat_map . insert ( src, id. into ( ) ) ;
2543+ self . source_map . expr_map_back . insert ( id, src. map ( AstPtr :: wrap_right) ) ;
2544+ id
2545+ }
2546+
25292547 fn alloc_pat ( & mut self , pat : Pat , ptr : PatPtr ) -> PatId {
25302548 let src = self . expander . in_file ( ptr) ;
25312549 let id = self . store . pats . alloc ( pat) ;
25322550 self . source_map . pat_map_back . insert ( id, src. map ( AstPtr :: wrap_right) ) ;
2533- self . source_map . pat_map . insert ( src, id) ;
2551+ self . source_map . pat_map . insert ( src, id. into ( ) ) ;
25342552 id
25352553 }
25362554 // FIXME: desugared pats don't have ptr, that's wrong and should be fixed somehow.
0 commit comments