From 440f1e2dadaf7c56575b65aa13c30abf9d5cec26 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Thu, 29 Aug 2013 21:49:55 +1000 Subject: [PATCH] rt: use sugary functions rather than manual range loops. --- src/libstd/rt/args.rs | 9 ++++----- src/libstd/rt/mod.rs | 18 +++++++----------- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/src/libstd/rt/args.rs b/src/libstd/rt/args.rs index baaf3d44e79..e5075f8818a 100644 --- a/src/libstd/rt/args.rs +++ b/src/libstd/rt/args.rs @@ -55,10 +55,11 @@ pub fn clone() -> Option<~[~str]> { mod imp { use libc; use option::{Option, Some, None}; - use iterator::{Iterator, range}; + use iterator::Iterator; use str; use unstable::finally::Finally; use util; + use vec; pub unsafe fn init(argc: int, argv: **u8) { let args = load_argc_and_argv(argc, argv); @@ -111,11 +112,9 @@ mod imp { // Copied from `os`. unsafe fn load_argc_and_argv(argc: int, argv: **u8) -> ~[~str] { - let mut args = ~[]; - for i in range(0u, argc as uint) { - args.push(str::raw::from_c_str(*(argv as **libc::c_char).offset(i as int))); + do vec::from_fn(argc as uint) |i| { + str::raw::from_c_str(*(argv as **libc::c_char).offset(i as int)) } - args } #[cfg(stage0)] diff --git a/src/libstd/rt/mod.rs b/src/libstd/rt/mod.rs index 7728a388c65..14ff1fd5804 100644 --- a/src/libstd/rt/mod.rs +++ b/src/libstd/rt/mod.rs @@ -59,7 +59,7 @@ Several modules in `core` are clients of `rt`: use cell::Cell; use clone::Clone; use container::Container; -use iterator::{Iterator, range}; +use iterator::Iterator; use option::{Option, None, Some}; use ptr::RawPtr; use rt::local::Local; @@ -71,7 +71,8 @@ use rt::work_queue::WorkQueue; use rt::uv::uvio::UvEventLoop; use unstable::atomics::{AtomicInt, SeqCst}; use unstable::sync::UnsafeArc; -use vec::{OwnedVector, MutableVector}; +use vec; +use vec::{OwnedVector, MutableVector, ImmutableVector}; /// The global (exchange) heap. pub mod global_heap; @@ -251,11 +252,7 @@ fn run_(main: ~fn(), use_main_sched: bool) -> int { // Create a work queue for each scheduler, ntimes. Create an extra // for the main thread if that flag is set. We won't steal from it. - let mut work_queues = ~[]; - for _ in range(0u, nscheds) { - let work_queue: WorkQueue<~Task> = WorkQueue::new(); - work_queues.push(work_queue); - } + let work_queues: ~[WorkQueue<~Task>] = vec::from_fn(nscheds, |_| WorkQueue::new()); // The schedulers. let mut scheds = ~[]; @@ -263,13 +260,13 @@ fn run_(main: ~fn(), use_main_sched: bool) -> int { // sent the Shutdown message to terminate the schedulers. let mut handles = ~[]; - for i in range(0u, nscheds) { + for work_queue in work_queues.iter() { rtdebug!("inserting a regular scheduler"); // Every scheduler is driven by an I/O event loop. let loop_ = ~UvEventLoop::new(); let mut sched = ~Scheduler::new(loop_, - work_queues[i].clone(), + work_queue.clone(), work_queues.clone(), sleepers.clone()); let handle = sched.make_handle(); @@ -358,9 +355,8 @@ fn run_(main: ~fn(), use_main_sched: bool) -> int { } // Run each remaining scheduler in a thread. - while !scheds.is_empty() { + for sched in scheds.move_rev_iter() { rtdebug!("creating regular schedulers"); - let sched = scheds.pop(); let sched_cell = Cell::new(sched); let thread = do Thread::start { let mut sched = sched_cell.take();