diff options
| author | Ariel Ben-Yehuda <ariel.byd@gmail.com> | 2016-03-11 12:54:59 +0200 |
|---|---|---|
| committer | Ariel Ben-Yehuda <ariel.byd@gmail.com> | 2016-06-09 00:38:38 +0300 |
| commit | 5c717a6fc21594569d9e64968cdcf2e88e372a07 (patch) | |
| tree | c9ab272d35fec2aa900ca7bb06f493e8d849d83b /src/libstd/sys | |
| parent | 088b7e2108abd54a31d573301d7c90e012d09150 (diff) | |
| download | rust-5c717a6fc21594569d9e64968cdcf2e88e372a07.tar.gz rust-5c717a6fc21594569d9e64968cdcf2e88e372a07.zip | |
implement RFC495 semantics for slice patterns
non-MIR translation is still not supported for these and will happily ICE. This is a [breaking-change] for many uses of slice_patterns.
Diffstat (limited to 'src/libstd/sys')
| -rw-r--r-- | src/libstd/sys/common/wtf8.rs | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/libstd/sys/common/wtf8.rs b/src/libstd/sys/common/wtf8.rs index 55e485e5811..5519230890c 100644 --- a/src/libstd/sys/common/wtf8.rs +++ b/src/libstd/sys/common/wtf8.rs @@ -560,15 +560,20 @@ impl Wtf8 { } } + // FIXME(stage0): use slice patterns after snapshot #[inline] fn final_lead_surrogate(&self) -> Option<u16> { let len = self.len(); if len < 3 { return None } - match &self.bytes[(len - 3)..] { - [0xED, b2 @ 0xA0...0xAF, b3] => Some(decode_surrogate(b2, b3)), - _ => None + if self.bytes[len-3] == 0xed && + self.bytes[len-2] > 0xa0 && + self.bytes[len-2] <= 0xaf + { + Some(decode_surrogate(self.bytes[len-2], self.bytes[len-1])) + } else { + None } } @@ -578,9 +583,13 @@ impl Wtf8 { if len < 3 { return None } - match &self.bytes[..3] { - [0xED, b2 @ 0xB0...0xBF, b3] => Some(decode_surrogate(b2, b3)), - _ => None + if self.bytes[len-3] == 0xed && + self.bytes[len-2] > 0xb0 && + self.bytes[len-2] <= 0xbf + { + Some(decode_surrogate(self.bytes[len-2], self.bytes[len-1])) + } else { + None } } } |
