about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorHuon Wilson <dbau.pp+github@gmail.com>2013-06-13 13:28:24 +1000
committerHuon Wilson <dbau.pp+github@gmail.com>2013-06-13 14:12:08 +1000
commitabadece3ba2dba032fa7752e88fcf58289c240ac (patch)
treef78ce658172fbe3b7b55c7c011e63fc64fa21f28 /src
parentda510bfb4a3f6ca805e849372f9bbe7b2b0f6a61 (diff)
downloadrust-abadece3ba2dba032fa7752e88fcf58289c240ac.tar.gz
rust-abadece3ba2dba032fa7752e88fcf58289c240ac.zip
std: remove the invalid NullTerminatedStr instance for &'static str.
A slice of a 'static str is still 'static, but doesn't necessarily
have the null terminator.
Diffstat (limited to 'src')
-rw-r--r--src/libstd/str.rs16
-rw-r--r--src/test/bench/shootout-fasta-redux.rs2
-rw-r--r--src/test/compile-fail/static-slice-not-null-terminated.rs21
3 files changed, 22 insertions, 17 deletions
diff --git a/src/libstd/str.rs b/src/libstd/str.rs
index c928933f4a7..164c57d9645 100644
--- a/src/libstd/str.rs
+++ b/src/libstd/str.rs
@@ -1953,18 +1953,6 @@ impl NullTerminatedStr for @str {
         slice
     }
 }
-// static strings are the only slices guaranteed to a nul-terminator
-impl NullTerminatedStr for &'static str {
-    /**
-     * Work with the byte buffer of a string as a byte slice.
-     *
-     * The byte slice does include the null terminator.
-     */
-    #[inline]
-    fn as_bytes_with_null(&self) -> &'static [u8] {
-        unsafe { ::cast::transmute(*self) }
-    }
-}
 
 #[allow(missing_doc)]
 pub trait OwnedStr {
@@ -2925,10 +2913,6 @@ mod tests {
             109, 0
         ];
 
-        assert_eq!("".as_bytes_with_null(), &[0]);
-        assert_eq!("abc".as_bytes_with_null(), &['a' as u8, 'b' as u8, 'c' as u8, 0]);
-        assert_eq!("ศไทย中华Việt Nam".as_bytes_with_null(), v);
-
         let s1 = @"";
         let s2 = @"abc";
         let s3 = @"ศไทย中华Việt Nam";
diff --git a/src/test/bench/shootout-fasta-redux.rs b/src/test/bench/shootout-fasta-redux.rs
index 3d5fc01afa6..9e90541baab 100644
--- a/src/test/bench/shootout-fasta-redux.rs
+++ b/src/test/bench/shootout-fasta-redux.rs
@@ -93,7 +93,7 @@ impl RepeatFasta {
             let stdout = self.stdout;
             let alu_len = self.alu.len();
             let mut buf = vec::from_elem(alu_len + LINE_LEN, 0u8);
-            let alu: &[u8] = self.alu.as_bytes_with_null();
+            let alu: &[u8] = self.alu.as_bytes();
 
             copy_memory(buf, alu, alu_len);
             copy_memory(vec::mut_slice(buf, alu_len, buf.len()),
diff --git a/src/test/compile-fail/static-slice-not-null-terminated.rs b/src/test/compile-fail/static-slice-not-null-terminated.rs
new file mode 100644
index 00000000000..3cfaa57d540
--- /dev/null
+++ b/src/test/compile-fail/static-slice-not-null-terminated.rs
@@ -0,0 +1,21 @@
+// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+fn main() {
+    let _ = (~"foo").as_bytes_with_null();
+    let _ = (@"foo").as_bytes_with_null();
+
+    // a plain static slice is null terminated, but such a slice can
+    // be sliced shorter (i.e. become non-null terminated) and still
+    // have the static lifetime
+    let foo: &'static str = "foo";
+    let _ = foo.as_bytes_with_null();
+     //~^ ERROR does not implement any method in scope named `as_bytes_with_null`
+}