about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMarvin Löbel <loebel.marvin@gmail.com>2013-10-05 21:23:24 +0200
committerMarvin Löbel <loebel.marvin@gmail.com>2013-10-05 21:28:04 +0200
commit517298de484b2a9c88689e8313bed5fde80acd79 (patch)
tree16f9b35567953a2fa86d56ffdec42ed8d493d9be
parent49ac6baa726988c7a84dff3bdc8c1f8812940224 (diff)
Implemented `IntoSendStr` on `SendStr` to allow naming a
task with a `SendStr` directly
-rw-r--r--src/libstd/send_str.rs5
-rw-r--r--src/libstd/task/mod.rs15
-rw-r--r--src/test/run-fail/fail-task-name-send-str.rs19
3 files changed, 39 insertions, 0 deletions
diff --git a/src/libstd/send_str.rs b/src/libstd/send_str.rs
index 075c1abd25c..3ef99d48a03 100644
--- a/src/libstd/send_str.rs
+++ b/src/libstd/send_str.rs
@@ -64,6 +64,11 @@ impl IntoSendStr for &'static str {
     fn into_send_str(self) -> SendStr { SendStrStatic(self) }
 }
 
+impl IntoSendStr for SendStr {
+    #[inline]
+    fn into_send_str(self) -> SendStr { self }
+}
+
 /*
 Section: String trait impls.
 `SendStr` should behave like a normal string, so we don't derive.
diff --git a/src/libstd/task/mod.rs b/src/libstd/task/mod.rs
index 315b11cac08..8e5353341ea 100644
--- a/src/libstd/task/mod.rs
+++ b/src/libstd/task/mod.rs
@@ -975,6 +975,21 @@ fn test_static_named_task() {
 }
 
 #[test]
+fn test_send_named_task() {
+    use rt::test::run_in_newsched_task;
+
+    do run_in_newsched_task {
+        let mut t = task();
+        t.name("ada lovelace".into_send_str());
+        do t.spawn {
+            do with_task_name |name| {
+                assert!(name.unwrap() == "ada lovelace");
+            }
+        }
+    }
+}
+
+#[test]
 fn test_run_basic() {
     let (po, ch) = stream::<()>();
     let mut builder = task();
diff --git a/src/test/run-fail/fail-task-name-send-str.rs b/src/test/run-fail/fail-task-name-send-str.rs
new file mode 100644
index 00000000000..e44f78094ff
--- /dev/null
+++ b/src/test/run-fail/fail-task-name-send-str.rs
@@ -0,0 +1,19 @@
+// 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.
+
+// error-pattern:task 'send name' failed at 'test'
+
+fn main() {
+    let mut t = ::std::task::task();
+    t.name("send name".to_send_str());
+    do t.spawn {
+        fail2!("test");
+    }
+}