about summary refs log tree commit diff
path: root/src/libgreen
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2014-04-15 23:36:58 -0700
committerbors <bors@rust-lang.org>2014-04-15 23:36:58 -0700
commit349d66af9420eeeeedfc648eb6ec3fd28015d4b3 (patch)
tree9789ea9a2b13b61b570bd896fe203a36bc08103c /src/libgreen
parent74bd2338eb25d0d165458a09d7aab3d2ecb98c48 (diff)
parentc18c9284b352f3605553343cd78c7a8eb75b5cd2 (diff)
auto merge of #13532 : alexcrichton/rust/rollup, r=alexcrichton
Diffstat (limited to 'src/libgreen')
-rw-r--r--src/libgreen/lib.rs40
-rw-r--r--src/libgreen/sched.rs4
2 files changed, 42 insertions, 2 deletions
diff --git a/src/libgreen/lib.rs b/src/libgreen/lib.rs
index 820627b6b7d..dd897b9db4b 100644
--- a/src/libgreen/lib.rs
+++ b/src/libgreen/lib.rs
@@ -144,6 +144,19 @@
 //! }
 //! ```
 //!
+//! The above code can also be shortened with a macro from libgreen.
+//!
+//! ```
+//! #![feature(phase)]
+//! #[phase(syntax)] extern crate green;
+//!
+//! green_start!(main)
+//!
+//! fn main() {
+//!     // run inside of a green pool
+//! }
+//! ```
+//!
 //! # Using a scheduler pool
 //!
 //! ```rust
@@ -229,6 +242,33 @@ pub mod sleeper_list;
 pub mod stack;
 pub mod task;
 
+/// A helper macro for booting a program with libgreen
+///
+/// # Example
+///
+/// ```
+/// #![feature(phase)]
+/// #[phase(syntax)] extern crate green;
+///
+/// green_start!(main)
+///
+/// fn main() {
+///     // running with libgreen
+/// }
+/// ```
+#[macro_export]
+macro_rules! green_start( ($f:ident) => (
+    mod __start {
+        extern crate green;
+        extern crate rustuv;
+
+        #[start]
+        fn start(argc: int, argv: **u8) -> int {
+            green::start(argc, argv, rustuv::event_loop, super::$f)
+        }
+    }
+) )
+
 /// Set up a default runtime configuration, given compiler-supplied arguments.
 ///
 /// This function will block until the entire pool of M:N schedulers have
diff --git a/src/libgreen/sched.rs b/src/libgreen/sched.rs
index 1a4db43d6c6..922a5905faf 100644
--- a/src/libgreen/sched.rs
+++ b/src/libgreen/sched.rs
@@ -1035,10 +1035,10 @@ mod test {
 
     fn sched_id() -> uint {
         let mut task = Local::borrow(None::<Task>);
-        match task.get().maybe_take_runtime::<GreenTask>() {
+        match task.maybe_take_runtime::<GreenTask>() {
             Some(green) => {
                 let ret = green.sched.get_ref().sched_id();
-                task.get().put_runtime(green);
+                task.put_runtime(green);
                 return ret;
             }
             None => fail!()