]> git.lizzy.rs Git - rust.git/commitdiff
Give correct suggestions
authorvarkor <github@varkor.com>
Sat, 19 May 2018 17:46:05 +0000 (18:46 +0100)
committervarkor <github@varkor.com>
Thu, 16 Aug 2018 19:09:04 +0000 (20:09 +0100)
src/librustc_mir/hair/pattern/_match.rs

index ea2597c4f854a4e13773925766ebe11ddf96c9cd..4460587c614df0a8383f7ae372677cf3917b7104 100644 (file)
@@ -707,7 +707,7 @@ fn intersect<'a, 'tcx>(
                 let mut ranges: Vec<_> =
                     ranges.into_iter().filter_map(|r| to_inc_range_pair(cx.tcx, &r)).collect();
                 while let Some((lo2, hi2)) = ranges.pop() {
-                    eprintln!("{:?} {:?}", (lo2, hi2), (lo1, hi1));
+                    // eprintln!("{:?} {:?}", (lo2, hi2), (lo1, hi1));
                     if lo1 <= lo2 && hi1 >= hi2 {
                         if _deb { eprintln!("case 1"); }
                         ctor_was_useful = true;
@@ -793,6 +793,17 @@ fn intersect<'a, 'tcx>(
             missing_ctors.extend(cur);
         }
 
+        // if _ranged {
+        //     missing_ctors = missing_ctors.into_iter().map(|ctor| {
+        //         match ctor {
+        //             ConstantRange(lo, hi, RangeEnd::Included) if lo == hi => {
+        //                 ConstantValue(lo)
+        //             }
+        //             _ => ctor,
+        //         }
+        //     }).collect();
+        // }
+
         // let missing_ctors: Vec<Constructor> = all_ctors.iter().filter(|c| {
         //     !used_ctors.contains(*c)
         // }).cloned().collect();
@@ -916,11 +927,33 @@ fn intersect<'a, 'tcx>(
                         }).collect()
                     } else {
                         if _deb { eprintln!("ABC 5"); }
-                        pats.into_iter().flat_map(|witness| {
-                            missing_ctors.iter().map(move |ctor| {
-                                witness.clone().push_wild_constructor(cx, ctor, pcx.ty)
-                            })
-                        }).collect()
+                        if _ranged {
+                            missing_ctors.into_iter().map(|ctor| {
+                                match ctor {
+                                    ConstantRange(lo, hi, _) if lo == hi => {
+                                        Witness(vec![Pattern {
+                                            ty: pcx.ty,
+                                            span: DUMMY_SP,
+                                            kind: box PatternKind::Constant { value: lo },
+                                        }])
+                                    }
+                                    ConstantRange(lo, hi, end) => {
+                                        Witness(vec![Pattern {
+                                            ty: pcx.ty,
+                                            span: DUMMY_SP,
+                                            kind: box PatternKind::Range { lo, hi, end },
+                                        }])
+                                    },
+                                    _ => bug!("this shouldn't be happening"),
+                                }
+                            }).collect()
+                        } else {
+                            pats.into_iter().flat_map(|witness| {
+                                missing_ctors.iter().map(move |ctor| {
+                                    witness.clone().push_wild_constructor(cx, ctor, pcx.ty)
+                                })
+                            }).collect()
+                        }
                     };
                     UsefulWithWitness(new_witnesses)
                 }