@@ -1784,23 +1784,32 @@ impl ExprCollector<'_> {
1784
1784
self . collect_macro_call ( call, macro_ptr, true , |this, expanded_pat| {
1785
1785
this. collect_pat_opt ( expanded_pat, binding_list)
1786
1786
} ) ;
1787
- self . source_map . pat_map . insert ( src, pat) ;
1787
+ self . source_map . pat_map . insert ( src, pat. into ( ) ) ;
1788
1788
return pat;
1789
1789
}
1790
1790
None => Pat :: Missing ,
1791
1791
} ,
1792
1792
// FIXME: implement in a way that also builds source map and calculates assoc resolutions in type inference.
1793
1793
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 ,
1802
1812
}
1803
- _ => None ,
1804
1813
} )
1805
1814
} ;
1806
1815
let start = range_part_lower ( p. start ( ) ) ;
@@ -1863,7 +1872,7 @@ impl ExprCollector<'_> {
1863
1872
}
1864
1873
} ) ;
1865
1874
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 ( ) ) ;
1867
1876
}
1868
1877
pat
1869
1878
}
@@ -2490,7 +2499,7 @@ impl ExprCollector<'_> {
2490
2499
fn alloc_expr ( & mut self , expr : Expr , ptr : ExprPtr ) -> ExprId {
2491
2500
let src = self . expander . in_file ( ptr) ;
2492
2501
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 ) ) ;
2494
2503
self . source_map . expr_map . insert ( src, id. into ( ) ) ;
2495
2504
id
2496
2505
}
@@ -2502,7 +2511,7 @@ impl ExprCollector<'_> {
2502
2511
fn alloc_expr_desugared_with_ptr ( & mut self , expr : Expr , ptr : ExprPtr ) -> ExprId {
2503
2512
let src = self . expander . in_file ( ptr) ;
2504
2513
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 ) ) ;
2506
2515
// We intentionally don't fill this as it could overwrite a non-desugared entry
2507
2516
// self.source_map.expr_map.insert(src, id);
2508
2517
id
@@ -2526,11 +2535,20 @@ impl ExprCollector<'_> {
2526
2535
self . source_map . pat_map_back . insert ( id, src. map ( AstPtr :: wrap_left) ) ;
2527
2536
id
2528
2537
}
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
+
2529
2547
fn alloc_pat ( & mut self , pat : Pat , ptr : PatPtr ) -> PatId {
2530
2548
let src = self . expander . in_file ( ptr) ;
2531
2549
let id = self . store . pats . alloc ( pat) ;
2532
2550
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 ( ) ) ;
2534
2552
id
2535
2553
}
2536
2554
// FIXME: desugared pats don't have ptr, that's wrong and should be fixed somehow.
0 commit comments