about summary refs log tree commit diff
path: root/src/libstd/sys
diff options
context:
space:
mode:
authorAriel Ben-Yehuda <ariel.byd@gmail.com>2016-03-11 12:54:59 +0200
committerAriel Ben-Yehuda <ariel.byd@gmail.com>2016-06-09 00:38:38 +0300
commit5c717a6fc21594569d9e64968cdcf2e88e372a07 (patch)
treec9ab272d35fec2aa900ca7bb06f493e8d849d83b /src/libstd/sys
parent088b7e2108abd54a31d573301d7c90e012d09150 (diff)
downloadrust-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.rs21
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
         }
     }
 }