Require just the Unicode Scalar Values to be matched for a char
This commit is contained in:
parent
9778a81e92
commit
a20cb1084a
2 changed files with 19 additions and 6 deletions
|
@ -460,11 +460,15 @@ fn all_constructors<'a, 'tcx: 'a>(cx: &mut MatchCheckCtxt<'a, 'tcx>,
|
||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
ty::TyChar if exhaustive_integer_patterns => {
|
ty::TyChar if exhaustive_integer_patterns => {
|
||||||
let (min, max) = (0u128, char::MAX as u128);
|
let endpoint = |c: char| {
|
||||||
|
ty::Const::from_bits(cx.tcx, c as u128, cx.tcx.types.char)
|
||||||
|
};
|
||||||
value_constructors = true;
|
value_constructors = true;
|
||||||
vec![ConstantRange(ty::Const::from_bits(cx.tcx, min, cx.tcx.types.char),
|
vec![
|
||||||
ty::Const::from_bits(cx.tcx, max, cx.tcx.types.char),
|
// The valid Unicode Scalar Value ranges.
|
||||||
RangeEnd::Included)]
|
ConstantRange(endpoint('\u{0000}'), endpoint('\u{D7FF}'), RangeEnd::Included),
|
||||||
|
ConstantRange(endpoint('\u{E000}'), endpoint('\u{10FFFF}'), RangeEnd::Included),
|
||||||
|
]
|
||||||
}
|
}
|
||||||
ty::TyInt(int_ty) if exhaustive_integer_patterns => {
|
ty::TyInt(int_ty) if exhaustive_integer_patterns => {
|
||||||
use syntax::ast::IntTy::*;
|
use syntax::ast::IntTy::*;
|
||||||
|
|
|
@ -55,10 +55,19 @@ fn main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Let's test other types too!
|
// Let's test other types too!
|
||||||
match '\u{0}' {
|
let c: char = '\u{0}';
|
||||||
|
match c {
|
||||||
'\u{0}' ..= char::MAX => {} // ok
|
'\u{0}' ..= char::MAX => {} // ok
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// We can actually get away with just covering the
|
||||||
|
// following two ranges, which correspond to all
|
||||||
|
// valid Unicode Scalar Values.
|
||||||
|
match c {
|
||||||
|
'\u{0000}' ..= '\u{D7FF}' => {}
|
||||||
|
'\u{E000}' ..= '\u{10_FFFF}' => {}
|
||||||
|
}
|
||||||
|
|
||||||
match 0usize {
|
match 0usize {
|
||||||
0 ..= usize::MAX => {} // ok
|
0 ..= usize::MAX => {} // ok
|
||||||
}
|
}
|
||||||
|
@ -84,7 +93,7 @@ fn main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
match 0i8 {
|
match 0i8 {
|
||||||
-128..=127 => {} // ok
|
-128 ..= 127 => {} // ok
|
||||||
}
|
}
|
||||||
|
|
||||||
match 0i16 {
|
match 0i16 {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue