From e47ee779cd412ad629ab0f3db1babcc502862924 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Fri, 19 Apr 2013 15:18:38 -0700 Subject: [PATCH 001/410] wip --- src/libcore/rt/io/{util.rs => extensions.rs} | 0 src/libcore/rt/io/file.rs | 6 +----- src/libcore/rt/io/mod.rs | 11 +++++------ src/libcore/rt/io/net/unix.rs | 2 +- src/libcore/rt/io/{misc.rs => support.rs} | 0 5 files changed, 7 insertions(+), 12 deletions(-) rename src/libcore/rt/io/{util.rs => extensions.rs} (100%) rename src/libcore/rt/io/{misc.rs => support.rs} (100%) diff --git a/src/libcore/rt/io/util.rs b/src/libcore/rt/io/extensions.rs similarity index 100% rename from src/libcore/rt/io/util.rs rename to src/libcore/rt/io/extensions.rs diff --git a/src/libcore/rt/io/file.rs b/src/libcore/rt/io/file.rs index e041183b58452..4e3e01a5eceb9 100644 --- a/src/libcore/rt/io/file.rs +++ b/src/libcore/rt/io/file.rs @@ -9,14 +9,10 @@ // except according to those terms. use prelude::*; -use super::misc::PathLike; +use super::support::PathLike; use super::{Reader, Writer, Seek, Close}; use super::{IoError, SeekStyle}; -/// Open a file with the default FileMode and FileAccess -/// # XXX are there sane defaults here? -pub fn open_file(_path: &P) -> FileStream { fail!() } - /// # XXX /// * Ugh, this is ridiculous. What is the best way to represent these options? enum FileMode { diff --git a/src/libcore/rt/io/mod.rs b/src/libcore/rt/io/mod.rs index b035532144c44..7ab27cdd7ec55 100644 --- a/src/libcore/rt/io/mod.rs +++ b/src/libcore/rt/io/mod.rs @@ -104,7 +104,6 @@ pub use self::stdio::stderr; pub use self::stdio::print; pub use self::stdio::println; -pub use self::file::open_file; pub use self::file::FileStream; pub use self::net::Listener; pub use self::net::ip::IpAddr; @@ -113,9 +112,9 @@ pub use self::net::tcp::TcpStream; pub use self::net::udp::UdpStream; // Some extension traits that all Readers and Writers get. -pub use self::util::ReaderUtil; -pub use self::util::ReaderByteConversions; -pub use self::util::WriterByteConversions; +pub use self::extensions::ReaderUtil; +pub use self::extensions::ReaderByteConversions; +pub use self::extensions::WriterByteConversions; /// Synchronous, non-blocking file I/O. pub mod file; @@ -140,10 +139,10 @@ pub mod flate; pub mod comm_adapters; /// Extension traits -mod util; +mod extensions; /// Non-I/O things needed by the I/O module -mod misc; +mod support; /// Thread-blocking implementations pub mod native { diff --git a/src/libcore/rt/io/net/unix.rs b/src/libcore/rt/io/net/unix.rs index 35eabe21b2a6b..de886949e7b0d 100644 --- a/src/libcore/rt/io/net/unix.rs +++ b/src/libcore/rt/io/net/unix.rs @@ -11,7 +11,7 @@ use prelude::*; use super::*; use super::super::*; -use super::super::misc::PathLike; +use super::super::support::PathLike; pub struct UnixStream; diff --git a/src/libcore/rt/io/misc.rs b/src/libcore/rt/io/support.rs similarity index 100% rename from src/libcore/rt/io/misc.rs rename to src/libcore/rt/io/support.rs From 6a5c4f68c2f8c10bf439a39373f5c518ed2f58a1 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Fri, 19 Apr 2013 18:47:31 -0700 Subject: [PATCH 002/410] core::rt: Just some poking at the I/O docs --- src/libcore/rt/io/mod.rs | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/libcore/rt/io/mod.rs b/src/libcore/rt/io/mod.rs index 7ab27cdd7ec55..c04389e029060 100644 --- a/src/libcore/rt/io/mod.rs +++ b/src/libcore/rt/io/mod.rs @@ -10,8 +10,12 @@ /*! Synchronous I/O -This module defines the Rust interface for synchronous I/O. -It supports file access, +This module defines the Rust interface for synchronous I/O. It is +build around Reader and Writer traits that define byte stream sources +and sinks. Implementations are provided for common I/O streams like +file, TCP, UDP, Unix domain sockets, multiple types of memory bufers. +Readers and Writers may be composed to add things like string parsing, +and compression. This will likely live in core::io, not core::rt::io. @@ -27,7 +31,7 @@ Some examples of obvious things you might want to do * Read a complete file to a string, (converting newlines?) - let contents = open("message.txt").read_to_str(); // read_to_str?? + let contents = FileStream::open("message.txt").read_to_str(); // read_to_str?? * Write a line to a file @@ -36,13 +40,26 @@ Some examples of obvious things you might want to do * Iterate over the lines of a file + do FileStream::open("message.txt").each_line |line| { + println(line) + } + * Pull the lines of a file into a vector of strings + let lines = FileStream::open("message.txt").line_iter().to_vec(); + +* Make an simple HTTP request + + let socket = TcpStream::open("localhost:8080"); + socket.write_line("GET / HTTP/1.0"); + socket.write_line(""); + let response = socket.read_to_end(); + * Connect based on URL? Requires thinking about where the URL type lives and how to make protocol handlers extensible, e.g. the "tcp" protocol yields a `TcpStream`. - connect("tcp://localhost:8080").write_line("HTTP 1.0 GET /"); + connect("tcp://localhost:8080"); # Terms From 1f97e6d47f90f1ddfef2d3a888099bd95b0bb1df Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sat, 20 Apr 2013 00:24:44 -0700 Subject: [PATCH 003/410] rt: Add rust_dbg_next_port for generating test port numbers --- src/rt/rust_test_helpers.cpp | 11 +++++++++++ src/rt/rustrt.def.in | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/rt/rust_test_helpers.cpp b/src/rt/rust_test_helpers.cpp index 64966bd345489..7938d65acd21d 100644 --- a/src/rt/rust_test_helpers.cpp +++ b/src/rt/rust_test_helpers.cpp @@ -165,3 +165,14 @@ extern "C" CDECL TwoDoubles rust_dbg_extern_identity_TwoDoubles(TwoDoubles u) { return u; } + +// Generates increasing port numbers for network testing +extern "C" CDECL uintptr_t +rust_dbg_next_port() { + static lock_and_signal dbg_port_lock; + static uintptr_t next_port = 9000; + scoped_lock with(dbg_port_lock); + uintptr_t this_port = next_port; + next_port += 1; + return this_port; +} diff --git a/src/rt/rustrt.def.in b/src/rt/rustrt.def.in index 5a556ed2107df..f84a73a394b6c 100644 --- a/src/rt/rustrt.def.in +++ b/src/rt/rustrt.def.in @@ -221,4 +221,4 @@ rust_uv_free_ip4_addr rust_uv_free_ip6_addr rust_call_nullary_fn rust_initialize_global_state - +rust_dbg_next_port From 744ba627f34ebf76b5a784085645780066d8d92a Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sat, 20 Apr 2013 00:33:49 -0700 Subject: [PATCH 004/410] core::rt: Add a test mod and put run_in_newsched_task there --- src/libcore/rt/mod.rs | 4 ++++ src/libcore/rt/test.rs | 29 +++++++++++++++++++++++++++++ src/libcore/task/mod.rs | 2 +- 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 src/libcore/rt/test.rs diff --git a/src/libcore/rt/mod.rs b/src/libcore/rt/mod.rs index e93e0c6fc6cc9..70bc2c7e063fc 100644 --- a/src/libcore/rt/mod.rs +++ b/src/libcore/rt/mod.rs @@ -49,6 +49,10 @@ mod context; mod thread; pub mod env; +/// Tools for testing the runtime +#[cfg(test)] +pub mod test; + #[cfg(stage0)] pub fn start(main: *u8, _argc: int, _argv: *c_char, _crate_map: *u8) -> int { use self::sched::{Scheduler, Task}; diff --git a/src/libcore/rt/test.rs b/src/libcore/rt/test.rs new file mode 100644 index 0000000000000..14d69c2373253 --- /dev/null +++ b/src/libcore/rt/test.rs @@ -0,0 +1,29 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// For setting up tests of the new scheduler +pub fn run_in_newsched_task(f: ~fn()) { + use cell::Cell; + use unstable::run_in_bare_thread; + use super::sched::Task; + use super::uvio::UvEventLoop; + + let f = Cell(Cell(f)); + + do run_in_bare_thread { + let mut sched = ~UvEventLoop::new_scheduler(); + let f = f.take(); + let task = ~do Task::new(&mut sched.stack_pool) { + (f.take())(); + }; + sched.task_queue.push_back(task); + sched.run(); + } +} diff --git a/src/libcore/task/mod.rs b/src/libcore/task/mod.rs index a6c03638713ed..a243bfba85c6f 100644 --- a/src/libcore/task/mod.rs +++ b/src/libcore/task/mod.rs @@ -1229,7 +1229,7 @@ fn test_spawn_thread_on_demand() { #[test] fn test_simple_newsched_spawn() { - use rt::run_in_newsched_task; + use rt::test::run_in_newsched_task; do run_in_newsched_task { spawn(||()) From d24a3a4b016331438ec3c611e37c11cfe41fa4af Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sat, 20 Apr 2013 01:16:06 -0700 Subject: [PATCH 005/410] core::rt: Use generated port numbers in tests --- src/libcore/rt/test.rs | 10 ++++++++ src/libcore/rt/uv/net.rs | 48 +++++------------------------------- src/libcore/rt/uvio.rs | 13 +++++----- src/rt/rust_test_helpers.cpp | 2 +- 4 files changed, 24 insertions(+), 49 deletions(-) diff --git a/src/libcore/rt/test.rs b/src/libcore/rt/test.rs index 14d69c2373253..c2ad7d37d42ad 100644 --- a/src/libcore/rt/test.rs +++ b/src/libcore/rt/test.rs @@ -27,3 +27,13 @@ pub fn run_in_newsched_task(f: ~fn()) { sched.run(); } } + +/// Get a port number, starting at 9600, for use in tests +pub fn next_test_port() -> u16 { + unsafe { + return rust_dbg_next_port() as u16; + } + extern { + fn rust_dbg_next_port() -> ::libc::uintptr_t; + } +} diff --git a/src/libcore/rt/uv/net.rs b/src/libcore/rt/uv/net.rs index 0dc1a4d86cbc9..54823d4dbcf61 100644 --- a/src/libcore/rt/uv/net.rs +++ b/src/libcore/rt/uv/net.rs @@ -19,12 +19,10 @@ use super::{Loop, Watcher, Request, UvError, Buf, Callback, NativeHandle, NullCa vec_to_uv_buf, vec_from_uv_buf}; use super::super::io::net::ip::{IpAddr, Ipv4, Ipv6}; -#[cfg(test)] -use unstable::run_in_bare_thread; -#[cfg(test)] -use super::super::thread::Thread; -#[cfg(test)] -use cell::Cell; +#[cfg(test)] use cell::Cell; +#[cfg(test)] use unstable::run_in_bare_thread; +#[cfg(test)] use super::super::thread::Thread; +#[cfg(test)] use super::super::test::next_test_port; fn ip4_as_uv_ip4(addr: IpAddr, f: &fn(*sockaddr_in)) { match addr { @@ -361,7 +359,7 @@ fn connect_close() { let mut loop_ = Loop::new(); let mut tcp_watcher = { TcpWatcher::new(&mut loop_) }; // Connect to a port where nobody is listening - let addr = Ipv4(127, 0, 0, 1, 2923); + let addr = Ipv4(127, 0, 0, 1, next_test_port()); do tcp_watcher.connect(addr) |stream_watcher, status| { rtdebug!("tcp_watcher.connect!"); assert!(status.is_some()); @@ -373,47 +371,13 @@ fn connect_close() { } } -#[test] -#[ignore(reason = "need a server to connect to")] -fn connect_read() { - do run_in_bare_thread() { - let mut loop_ = Loop::new(); - let mut tcp_watcher = { TcpWatcher::new(&mut loop_) }; - let addr = Ipv4(127, 0, 0, 1, 2924); - do tcp_watcher.connect(addr) |stream_watcher, status| { - let mut stream_watcher = stream_watcher; - rtdebug!("tcp_watcher.connect!"); - assert!(status.is_none()); - let alloc: AllocCallback = |size| { - vec_to_uv_buf(vec::from_elem(size, 0)) - }; - do stream_watcher.read_start(alloc) - |stream_watcher, nread, buf, status| { - - let buf = vec_from_uv_buf(buf); - rtdebug!("read cb!"); - if status.is_none() { - let bytes = buf.unwrap(); - rtdebug!("%s", bytes.slice(0, nread as uint).to_str()); - } else { - rtdebug!("status after read: %s", status.get().to_str()); - rtdebug!("closing"); - stream_watcher.close(||()); - } - } - } - loop_.run(); - loop_.close(); - } -} - #[test] fn listen() { do run_in_bare_thread() { static MAX: int = 10; let mut loop_ = Loop::new(); let mut server_tcp_watcher = { TcpWatcher::new(&mut loop_) }; - let addr = Ipv4(127, 0, 0, 1, 2925); + let addr = Ipv4(127, 0, 0, 1, next_test_port()); server_tcp_watcher.bind(addr); let loop_ = loop_; rtdebug!("listening"); diff --git a/src/libcore/rt/uvio.rs b/src/libcore/rt/uvio.rs index ff5397398354a..a9aa0333b1631 100644 --- a/src/libcore/rt/uvio.rs +++ b/src/libcore/rt/uvio.rs @@ -19,9 +19,10 @@ use cell::{Cell, empty_cell}; use cast::transmute; use super::sched::{Scheduler, local_sched}; -#[cfg(test)] use super::sched::Task; -#[cfg(test)] use unstable::run_in_bare_thread; #[cfg(test)] use uint; +#[cfg(test)] use unstable::run_in_bare_thread; +#[cfg(test)] use super::sched::Task; +#[cfg(test)] use super::test::next_test_port; pub struct UvEventLoop { uvio: UvIoFactory @@ -340,7 +341,7 @@ fn test_simple_io_no_connect() { let mut sched = ~UvEventLoop::new_scheduler(); let task = ~do Task::new(&mut sched.stack_pool) { let io = unsafe { local_sched::unsafe_borrow_io() }; - let addr = Ipv4(127, 0, 0, 1, 2926); + let addr = Ipv4(127, 0, 0, 1, next_test_port()); let maybe_chan = io.connect(addr); assert!(maybe_chan.is_none()); }; @@ -354,7 +355,7 @@ fn test_simple_io_no_connect() { fn test_simple_tcp_server_and_client() { do run_in_bare_thread { let mut sched = ~UvEventLoop::new_scheduler(); - let addr = Ipv4(127, 0, 0, 1, 2929); + let addr = Ipv4(127, 0, 0, 1, next_test_port()); let client_task = ~do Task::new(&mut sched.stack_pool) { unsafe { @@ -393,7 +394,7 @@ fn test_simple_tcp_server_and_client() { fn test_read_and_block() { do run_in_bare_thread { let mut sched = ~UvEventLoop::new_scheduler(); - let addr = Ipv4(127, 0, 0, 1, 2930); + let addr = Ipv4(127, 0, 0, 1, next_test_port()); let client_task = ~do Task::new(&mut sched.stack_pool) { let io = unsafe { local_sched::unsafe_borrow_io() }; @@ -454,7 +455,7 @@ fn test_read_and_block() { fn test_read_read_read() { do run_in_bare_thread { let mut sched = ~UvEventLoop::new_scheduler(); - let addr = Ipv4(127, 0, 0, 1, 2931); + let addr = Ipv4(127, 0, 0, 1, next_test_port()); let client_task = ~do Task::new(&mut sched.stack_pool) { let io = unsafe { local_sched::unsafe_borrow_io() }; diff --git a/src/rt/rust_test_helpers.cpp b/src/rt/rust_test_helpers.cpp index 7938d65acd21d..d82c39d6838ec 100644 --- a/src/rt/rust_test_helpers.cpp +++ b/src/rt/rust_test_helpers.cpp @@ -170,7 +170,7 @@ rust_dbg_extern_identity_TwoDoubles(TwoDoubles u) { extern "C" CDECL uintptr_t rust_dbg_next_port() { static lock_and_signal dbg_port_lock; - static uintptr_t next_port = 9000; + static uintptr_t next_port = 9600; scoped_lock with(dbg_port_lock); uintptr_t this_port = next_port; next_port += 1; From eac629bf5c4b9efd0de3ff6a14d63584eb4a967d Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sat, 20 Apr 2013 01:32:06 -0700 Subject: [PATCH 006/410] core::rt: Unignore some networking tests These should work now, I hope --- src/libcore/rt/uvio.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/libcore/rt/uvio.rs b/src/libcore/rt/uvio.rs index a9aa0333b1631..c615f068a6955 100644 --- a/src/libcore/rt/uvio.rs +++ b/src/libcore/rt/uvio.rs @@ -335,7 +335,6 @@ impl Stream for UvStream { } #[test] -#[ignore(reason = "ffi struct issues")] fn test_simple_io_no_connect() { do run_in_bare_thread { let mut sched = ~UvEventLoop::new_scheduler(); @@ -351,7 +350,6 @@ fn test_simple_io_no_connect() { } #[test] -#[ignore(reason = "ffi struct issues")] fn test_simple_tcp_server_and_client() { do run_in_bare_thread { let mut sched = ~UvEventLoop::new_scheduler(); From 1a7561be4d2046a6a6b78ae5dab2e6fd3ba8db82 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sat, 20 Apr 2013 01:37:59 -0700 Subject: [PATCH 007/410] core::rt: Remove redundant copy of run_in_newsched_task --- src/libcore/rt/mod.rs | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/src/libcore/rt/mod.rs b/src/libcore/rt/mod.rs index 70bc2c7e063fc..cf896dd18f34c 100644 --- a/src/libcore/rt/mod.rs +++ b/src/libcore/rt/mod.rs @@ -164,24 +164,3 @@ fn test_context() { sched.run(); } } - -// For setting up tests of the new scheduler -#[cfg(test)] -pub fn run_in_newsched_task(f: ~fn()) { - use cell::Cell; - use unstable::run_in_bare_thread; - use self::sched::Task; - use self::uvio::UvEventLoop; - - let f = Cell(Cell(f)); - - do run_in_bare_thread { - let mut sched = ~UvEventLoop::new_scheduler(); - let f = f.take(); - let task = ~do Task::new(&mut sched.stack_pool) { - (f.take())(); - }; - sched.task_queue.push_back(task); - sched.run(); - } -} From e564fc7f6b02e917407b3aa6235fc0727afdaf2c Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sat, 20 Apr 2013 01:55:10 -0700 Subject: [PATCH 008/410] core::rt: Don't directly create scheduler types in I/O tests There are some better abstractions for this now --- src/libcore/rt/test.rs | 16 ++++++++ src/libcore/rt/uvio.rs | 87 +++++++++++++++++------------------------- 2 files changed, 50 insertions(+), 53 deletions(-) diff --git a/src/libcore/rt/test.rs b/src/libcore/rt/test.rs index c2ad7d37d42ad..dfc058d6eba5c 100644 --- a/src/libcore/rt/test.rs +++ b/src/libcore/rt/test.rs @@ -28,6 +28,22 @@ pub fn run_in_newsched_task(f: ~fn()) { } } +/// Create a new task and run it right now +pub fn spawn_immediately(f: ~fn()) { + use cell::Cell; + use super::*; + use super::sched::*; + + let mut sched = local_sched::take(); + let task = ~Task::new(&mut sched.stack_pool, f); + do sched.switch_running_tasks_and_then(task) |task| { + let task = Cell(task); + do local_sched::borrow |sched| { + sched.task_queue.push_front(task.take()); + } + } +} + /// Get a port number, starting at 9600, for use in tests pub fn next_test_port() -> u16 { unsafe { diff --git a/src/libcore/rt/uvio.rs b/src/libcore/rt/uvio.rs index c615f068a6955..d3953b7a797ab 100644 --- a/src/libcore/rt/uvio.rs +++ b/src/libcore/rt/uvio.rs @@ -22,7 +22,7 @@ use super::sched::{Scheduler, local_sched}; #[cfg(test)] use uint; #[cfg(test)] use unstable::run_in_bare_thread; #[cfg(test)] use super::sched::Task; -#[cfg(test)] use super::test::next_test_port; +#[cfg(test)] use super::test::*; pub struct UvEventLoop { uvio: UvIoFactory @@ -336,35 +336,21 @@ impl Stream for UvStream { #[test] fn test_simple_io_no_connect() { - do run_in_bare_thread { - let mut sched = ~UvEventLoop::new_scheduler(); - let task = ~do Task::new(&mut sched.stack_pool) { - let io = unsafe { local_sched::unsafe_borrow_io() }; - let addr = Ipv4(127, 0, 0, 1, next_test_port()); - let maybe_chan = io.connect(addr); - assert!(maybe_chan.is_none()); - }; - sched.task_queue.push_back(task); - sched.run(); + do run_in_newsched_task { + let io = unsafe { local_sched::unsafe_borrow_io() }; + let addr = Ipv4(127, 0, 0, 1, next_test_port()); + let maybe_chan = io.connect(addr); + assert!(maybe_chan.is_none()); } } #[test] fn test_simple_tcp_server_and_client() { - do run_in_bare_thread { - let mut sched = ~UvEventLoop::new_scheduler(); + do run_in_newsched_task { let addr = Ipv4(127, 0, 0, 1, next_test_port()); - let client_task = ~do Task::new(&mut sched.stack_pool) { - unsafe { - let io = local_sched::unsafe_borrow_io(); - let mut stream = io.connect(addr).unwrap(); - stream.write([0, 1, 2, 3, 4, 5, 6, 7]); - stream.close(); - } - }; - - let server_task = ~do Task::new(&mut sched.stack_pool) { + // Start the server first so it's listening when we connect + do spawn_immediately { unsafe { let io = local_sched::unsafe_borrow_io(); let mut listener = io.bind(addr).unwrap(); @@ -379,32 +365,25 @@ fn test_simple_tcp_server_and_client() { stream.close(); listener.close(); } - }; + } - // Start the server first so it listens before the client connects - sched.task_queue.push_back(server_task); - sched.task_queue.push_back(client_task); - sched.run(); + do spawn_immediately { + unsafe { + let io = local_sched::unsafe_borrow_io(); + let mut stream = io.connect(addr).unwrap(); + stream.write([0, 1, 2, 3, 4, 5, 6, 7]); + stream.close(); + } + } } } #[test] #[ignore(reason = "busted")] fn test_read_and_block() { - do run_in_bare_thread { - let mut sched = ~UvEventLoop::new_scheduler(); + do run_in_newsched_task { let addr = Ipv4(127, 0, 0, 1, next_test_port()); - let client_task = ~do Task::new(&mut sched.stack_pool) { - let io = unsafe { local_sched::unsafe_borrow_io() }; - let mut stream = io.connect(addr).unwrap(); - stream.write([0, 1, 2, 3, 4, 5, 6, 7]); - stream.write([0, 1, 2, 3, 4, 5, 6, 7]); - stream.write([0, 1, 2, 3, 4, 5, 6, 7]); - stream.write([0, 1, 2, 3, 4, 5, 6, 7]); - stream.close(); - }; - - let server_task = ~do Task::new(&mut sched.stack_pool) { + do spawn_immediately { let io = unsafe { local_sched::unsafe_borrow_io() }; let mut listener = io.bind(addr).unwrap(); let mut stream = listener.listen().unwrap(); @@ -440,22 +419,27 @@ fn test_read_and_block() { stream.close(); listener.close(); - }; + } + + do spawn_immediately { + let io = unsafe { local_sched::unsafe_borrow_io() }; + let mut stream = io.connect(addr).unwrap(); + stream.write([0, 1, 2, 3, 4, 5, 6, 7]); + stream.write([0, 1, 2, 3, 4, 5, 6, 7]); + stream.write([0, 1, 2, 3, 4, 5, 6, 7]); + stream.write([0, 1, 2, 3, 4, 5, 6, 7]); + stream.close(); + } - // Start the server first so it listens before the client connects - sched.task_queue.push_back(server_task); - sched.task_queue.push_back(client_task); - sched.run(); } } #[test] #[ignore(reason = "needs server")] fn test_read_read_read() { - do run_in_bare_thread { - let mut sched = ~UvEventLoop::new_scheduler(); + do run_in_newsched_task { let addr = Ipv4(127, 0, 0, 1, next_test_port()); - let client_task = ~do Task::new(&mut sched.stack_pool) { + do spawn_immediately { let io = unsafe { local_sched::unsafe_borrow_io() }; let mut stream = io.connect(addr).unwrap(); let mut buf = [0, .. 2048]; @@ -467,9 +451,6 @@ fn test_read_read_read() { } rtdebug_!("read %u bytes total", total_bytes_read as uint); stream.close(); - }; - - sched.task_queue.push_back(client_task); - sched.run(); + } } } From a11c032f36658667bb08382cc409455b0a1d0a61 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sat, 20 Apr 2013 02:16:21 -0700 Subject: [PATCH 009/410] core::rt: Fix a broken uvio test --- src/libcore/rt/uvio.rs | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/libcore/rt/uvio.rs b/src/libcore/rt/uvio.rs index d3953b7a797ab..2582ddf310510 100644 --- a/src/libcore/rt/uvio.rs +++ b/src/libcore/rt/uvio.rs @@ -434,22 +434,39 @@ fn test_read_and_block() { } } -#[test] #[ignore(reason = "needs server")] +#[test] fn test_read_read_read() { do run_in_newsched_task { let addr = Ipv4(127, 0, 0, 1, next_test_port()); + static MAX: uint = 5000000; + + do spawn_immediately { + unsafe { + let io = local_sched::unsafe_borrow_io(); + let mut listener = io.bind(addr).unwrap(); + let mut stream = listener.listen().unwrap(); + let mut buf = [0, .. 2048]; + let mut total_bytes_written = 0; + while total_bytes_written < MAX { + stream.write(buf); + total_bytes_written += buf.len(); + } + stream.close(); + listener.close(); + } + } do spawn_immediately { let io = unsafe { local_sched::unsafe_borrow_io() }; let mut stream = io.connect(addr).unwrap(); let mut buf = [0, .. 2048]; let mut total_bytes_read = 0; - while total_bytes_read < 500000000 { + while total_bytes_read < MAX { let nread = stream.read(buf).unwrap(); rtdebug!("read %u bytes", nread as uint); total_bytes_read += nread; } - rtdebug_!("read %u bytes total", total_bytes_read as uint); + rtdebug!("read %u bytes total", total_bytes_read as uint); stream.close(); } } From 6e17202ff4a694a2cf96fd7d2ccb1d62265ce7c2 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sat, 20 Apr 2013 02:41:30 -0700 Subject: [PATCH 010/410] core::rt: Add `next_test_ip4` for generating test addresses --- src/libcore/rt/test.rs | 7 +++++++ src/libcore/rt/uv/net.rs | 6 +++--- src/libcore/rt/uvio.rs | 8 ++++---- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/libcore/rt/test.rs b/src/libcore/rt/test.rs index dfc058d6eba5c..585d43a3ade8b 100644 --- a/src/libcore/rt/test.rs +++ b/src/libcore/rt/test.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +use super::io::net::ip::{IpAddr, Ipv4}; + // For setting up tests of the new scheduler pub fn run_in_newsched_task(f: ~fn()) { use cell::Cell; @@ -53,3 +55,8 @@ pub fn next_test_port() -> u16 { fn rust_dbg_next_port() -> ::libc::uintptr_t; } } + +/// Get a unique localhost:port pair starting at 9600 +pub fn next_test_ip4() -> IpAddr { + Ipv4(127, 0, 0, 1, next_test_port()) +} diff --git a/src/libcore/rt/uv/net.rs b/src/libcore/rt/uv/net.rs index 54823d4dbcf61..860c988b9c990 100644 --- a/src/libcore/rt/uv/net.rs +++ b/src/libcore/rt/uv/net.rs @@ -22,7 +22,7 @@ use super::super::io::net::ip::{IpAddr, Ipv4, Ipv6}; #[cfg(test)] use cell::Cell; #[cfg(test)] use unstable::run_in_bare_thread; #[cfg(test)] use super::super::thread::Thread; -#[cfg(test)] use super::super::test::next_test_port; +#[cfg(test)] use super::super::test::*; fn ip4_as_uv_ip4(addr: IpAddr, f: &fn(*sockaddr_in)) { match addr { @@ -359,7 +359,7 @@ fn connect_close() { let mut loop_ = Loop::new(); let mut tcp_watcher = { TcpWatcher::new(&mut loop_) }; // Connect to a port where nobody is listening - let addr = Ipv4(127, 0, 0, 1, next_test_port()); + let addr = next_test_ip4(); do tcp_watcher.connect(addr) |stream_watcher, status| { rtdebug!("tcp_watcher.connect!"); assert!(status.is_some()); @@ -377,7 +377,7 @@ fn listen() { static MAX: int = 10; let mut loop_ = Loop::new(); let mut server_tcp_watcher = { TcpWatcher::new(&mut loop_) }; - let addr = Ipv4(127, 0, 0, 1, next_test_port()); + let addr = next_test_ip4(); server_tcp_watcher.bind(addr); let loop_ = loop_; rtdebug!("listening"); diff --git a/src/libcore/rt/uvio.rs b/src/libcore/rt/uvio.rs index 2582ddf310510..92439a41b342b 100644 --- a/src/libcore/rt/uvio.rs +++ b/src/libcore/rt/uvio.rs @@ -338,7 +338,7 @@ impl Stream for UvStream { fn test_simple_io_no_connect() { do run_in_newsched_task { let io = unsafe { local_sched::unsafe_borrow_io() }; - let addr = Ipv4(127, 0, 0, 1, next_test_port()); + let addr = next_test_ip4(); let maybe_chan = io.connect(addr); assert!(maybe_chan.is_none()); } @@ -347,7 +347,7 @@ fn test_simple_io_no_connect() { #[test] fn test_simple_tcp_server_and_client() { do run_in_newsched_task { - let addr = Ipv4(127, 0, 0, 1, next_test_port()); + let addr = next_test_ip4(); // Start the server first so it's listening when we connect do spawn_immediately { @@ -381,7 +381,7 @@ fn test_simple_tcp_server_and_client() { #[test] #[ignore(reason = "busted")] fn test_read_and_block() { do run_in_newsched_task { - let addr = Ipv4(127, 0, 0, 1, next_test_port()); + let addr = next_test_ip4(); do spawn_immediately { let io = unsafe { local_sched::unsafe_borrow_io() }; @@ -437,7 +437,7 @@ fn test_read_and_block() { #[test] fn test_read_read_read() { do run_in_newsched_task { - let addr = Ipv4(127, 0, 0, 1, next_test_port()); + let addr = next_test_ip4(); static MAX: uint = 5000000; do spawn_immediately { From bcb3cfb8ce8353ef91b8b7acc0d6339c809d9a29 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sat, 20 Apr 2013 15:55:07 -0700 Subject: [PATCH 011/410] core::rt: Improve docs for run_in_newsched_task testing function --- src/libcore/rt/test.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/libcore/rt/test.rs b/src/libcore/rt/test.rs index 585d43a3ade8b..e394a873feac6 100644 --- a/src/libcore/rt/test.rs +++ b/src/libcore/rt/test.rs @@ -10,7 +10,8 @@ use super::io::net::ip::{IpAddr, Ipv4}; -// For setting up tests of the new scheduler +/// Creates a new scheduler in a new thread and runs a task in it, +/// then waits for the scheduler to exit. pub fn run_in_newsched_task(f: ~fn()) { use cell::Cell; use unstable::run_in_bare_thread; From d818ea81549a2ce12ba7b722997567f45417f099 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sat, 20 Apr 2013 15:55:37 -0700 Subject: [PATCH 012/410] core::rt: Listener constructors are called and return a --- src/libcore/rt/io/net/tcp.rs | 29 ++++++++++++++++++++++++++++- src/libcore/rt/io/net/udp.rs | 2 +- src/libcore/rt/io/net/unix.rs | 2 +- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/libcore/rt/io/net/tcp.rs b/src/libcore/rt/io/net/tcp.rs index e3f71dca8c827..d78241b8e446e 100644 --- a/src/libcore/rt/io/net/tcp.rs +++ b/src/libcore/rt/io/net/tcp.rs @@ -40,7 +40,7 @@ impl Close for TcpStream { pub struct TcpListener; impl TcpListener { - pub fn new(_addr: IpAddr) -> TcpListener { + pub fn bind(_addr: IpAddr) -> Result { fail!() } } @@ -48,3 +48,30 @@ impl TcpListener { impl Listener for TcpListener { fn accept(&mut self) -> Option { fail!() } } + +#[cfg(test)] +mod test { + use super::*; + use rt::test::*; + + #[test] #[ignore] + fn smoke_test() { + /*do run_in_newsched_task { + let addr = next_test_ip4(); + + do spawn_immediately { + let listener = TcpListener::bind(addr); + do listener.accept() { + let mut buf = [0]; + listener.read(buf); + assert!(buf[0] == 99); + } + } + + do spawn_immediately { + let stream = TcpStream::connect(addr); + stream.write([99]); + } + }*/ + } +} diff --git a/src/libcore/rt/io/net/udp.rs b/src/libcore/rt/io/net/udp.rs index f76bb58a45eb9..81a6677c14afa 100644 --- a/src/libcore/rt/io/net/udp.rs +++ b/src/libcore/rt/io/net/udp.rs @@ -40,7 +40,7 @@ impl Close for UdpStream { pub struct UdpListener; impl UdpListener { - pub fn new(_addr: IpAddr) -> UdpListener { + pub fn bind(_addr: IpAddr) -> Result { fail!() } } diff --git a/src/libcore/rt/io/net/unix.rs b/src/libcore/rt/io/net/unix.rs index de886949e7b0d..a5f4f8e3ba8b4 100644 --- a/src/libcore/rt/io/net/unix.rs +++ b/src/libcore/rt/io/net/unix.rs @@ -40,7 +40,7 @@ impl Close for UnixStream { pub struct UnixListener; impl UnixListener { - pub fn new(_path: &P) -> UnixListener { + pub fn bind(_path: &P) -> Result { fail!() } } From 00474c13f32db8903e0c9ea4ab6186007a79e77c Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sat, 20 Apr 2013 16:15:06 -0700 Subject: [PATCH 013/410] core: Ignore two long-running tests --- src/libcore/run.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/libcore/run.rs b/src/libcore/run.rs index 8b18cc3c6968c..96f88e6368080 100644 --- a/src/libcore/run.rs +++ b/src/libcore/run.rs @@ -598,12 +598,14 @@ mod tests { #[test] #[cfg(unix)] + #[ignore(reason = "long run time")] fn test_unforced_destroy_actually_kills() { test_destroy_actually_kills(false); } #[test] #[cfg(unix)] + #[ignore(reason = "long run time")] fn test_forced_destroy_actually_kills() { test_destroy_actually_kills(true); } From fa478f577565174327888ea768dfa3a1018416f2 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sat, 20 Apr 2013 16:15:32 -0700 Subject: [PATCH 014/410] core: Speed up a test case --- src/libcore/rt/uvio.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libcore/rt/uvio.rs b/src/libcore/rt/uvio.rs index 92439a41b342b..2e9d0afa52fe5 100644 --- a/src/libcore/rt/uvio.rs +++ b/src/libcore/rt/uvio.rs @@ -438,7 +438,7 @@ fn test_read_and_block() { fn test_read_read_read() { do run_in_newsched_task { let addr = next_test_ip4(); - static MAX: uint = 5000000; + static MAX: uint = 500000; do spawn_immediately { unsafe { From 4eff3130c589b5fb256c537e90272646fd8406ab Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sat, 20 Apr 2013 17:25:00 -0700 Subject: [PATCH 015/410] core::rt:: Implement Reader/Writer for MemReader/MemWriter --- src/libcore/rt/io/mem.rs | 69 ++++++++++++++++++++++++++++++++++++---- src/libcore/rt/io/mod.rs | 8 +++++ 2 files changed, 70 insertions(+), 7 deletions(-) diff --git a/src/libcore/rt/io/mem.rs b/src/libcore/rt/io/mem.rs index 600968a3c7105..06e1466831df0 100644 --- a/src/libcore/rt/io/mem.rs +++ b/src/libcore/rt/io/mem.rs @@ -17,7 +17,7 @@ use prelude::*; use super::*; - +use cmp::min; /// Writes to an owned, growable byte vector pub struct MemWriter { @@ -29,13 +29,15 @@ impl MemWriter { } impl Writer for MemWriter { - fn write(&mut self, _buf: &[u8]) { fail!() } + fn write(&mut self, buf: &[u8]) { + self.buf.push_all(buf) + } fn flush(&mut self) { /* no-op */ } } impl Seek for MemWriter { - fn tell(&self) -> u64 { fail!() } + fn tell(&self) -> u64 { self.buf.len() as u64 } fn seek(&mut self, _pos: i64, _style: SeekStyle) { fail!() } } @@ -77,13 +79,27 @@ impl MemReader { } impl Reader for MemReader { - fn read(&mut self, _buf: &mut [u8]) -> Option { fail!() } + fn read(&mut self, buf: &mut [u8]) -> Option { + { if self.eof() { return None; } } + + let write_len = min(buf.len(), self.buf.len() - self.pos); + { + let input = self.buf.slice(self.pos, self.pos + write_len); + let output = vec::mut_slice(buf, 0, write_len); + assert!(input.len() == output.len()); + vec::bytes::copy_memory(output, input, write_len); + } + self.pos += write_len; + assert!(self.pos <= self.buf.len()); - fn eof(&mut self) -> bool { fail!() } + return Some(write_len); + } + + fn eof(&mut self) -> bool { self.pos == self.buf.len() } } impl Seek for MemReader { - fn tell(&self) -> u64 { fail!() } + fn tell(&self) -> u64 { self.pos as u64 } fn seek(&mut self, _pos: i64, _style: SeekStyle) { fail!() } } @@ -163,4 +179,43 @@ impl<'self> Seek for BufReader<'self> { fn tell(&self) -> u64 { fail!() } fn seek(&mut self, _pos: i64, _style: SeekStyle) { fail!() } -} \ No newline at end of file +} + +#[cfg(test)] +mod test { + use prelude::*; + use super::*; + + #[test] + fn test_mem_writer() { + let mut writer = MemWriter::new(); + assert!(writer.tell() == 0); + writer.write([0]); + assert!(writer.tell() == 1); + writer.write([1, 2, 3]); + writer.write([4, 5, 6, 7]); + assert!(writer.tell() == 8); + assert!(writer.inner() == ~[0, 1, 2, 3, 4, 5 , 6, 7]); + } + + #[test] + fn test_mem_reader() { + let mut reader = MemReader::new(~[0, 1, 2, 3, 4, 5, 6, 7]); + let mut buf = []; + assert!(reader.read(buf) == Some(0)); + assert!(reader.tell() == 0); + let mut buf = [0]; + assert!(reader.read(buf) == Some(1)); + assert!(reader.tell() == 1); + assert!(buf == [0]); + let mut buf = [0, ..4]; + assert!(reader.read(buf) == Some(4)); + assert!(reader.tell() == 5); + assert!(buf == [1, 2, 3, 4]); + assert!(reader.read(buf) == Some(3)); + assert!(buf.slice(0, 3) == [5, 6, 7]); + assert!(reader.eof()); + assert!(reader.read(buf) == None); + assert!(reader.eof()); + } +} diff --git a/src/libcore/rt/io/mod.rs b/src/libcore/rt/io/mod.rs index c04389e029060..238bd97a62d17 100644 --- a/src/libcore/rt/io/mod.rs +++ b/src/libcore/rt/io/mod.rs @@ -269,6 +269,14 @@ pub enum SeekStyle { /// * Are `u64` and `i64` the right choices? pub trait Seek { fn tell(&self) -> u64; + + /// Seek to an offset in a stream + /// + /// A successful seek clears the EOF indicator. + /// + /// # XXX + /// + /// * What is the behavior when seeking past the end of a stream? fn seek(&mut self, pos: i64, style: SeekStyle); } From f9069baa70ea78117f2087fe6e359fb2ea0ae16a Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sun, 21 Apr 2013 16:28:17 -0700 Subject: [PATCH 016/410] core::rt: Add LocalServices for thread-local language services Things like the GC heap and unwinding are desirable everywhere the language might be used, not just in tasks. All Rust code should have access to LocalServices. --- src/libcore/rt/local_services.rs | 63 ++++++++++++++++++++++++++++++++ src/libcore/rt/mod.rs | 3 +- src/libcore/rt/sched/mod.rs | 6 ++- 3 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 src/libcore/rt/local_services.rs diff --git a/src/libcore/rt/local_services.rs b/src/libcore/rt/local_services.rs new file mode 100644 index 0000000000000..8e386f80b77d7 --- /dev/null +++ b/src/libcore/rt/local_services.rs @@ -0,0 +1,63 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! Language-level runtime services that should reasonably expected +//! to be available 'everywhere'. Local heaps, GC, unwinding, +//! local storage, and logging. Even a 'freestanding' Rust would likely want +//! to implement this. + +//! Local services may exist in at least three different contexts: +//! when running as a task, when running in the scheduler's context, +//! or when running outside of a scheduler but with local services +//! (freestanding rust with local services?). + +use prelude::*; +use super::sched::{Task, local_sched}; + +pub struct LocalServices { + heap: LocalHeap, + gc: GarbageCollector, + storage: LocalStorage, + logger: Logger, + unwinder: Unwinder +} + +pub struct LocalHeap; +pub struct GarbageCollector; +pub struct LocalStorage; +pub struct Logger; +pub struct Unwinder; + +impl LocalServices { + pub fn new() -> LocalServices { + LocalServices { + heap: LocalHeap, + gc: GarbageCollector, + storage: LocalStorage, + logger: Logger, + unwinder: Unwinder + } + } +} + +/// Borrow a pointer to the installed local services. +/// Fails (likely aborting the process) if local services are not available. +pub fn borrow_local_services(f: &fn(&mut LocalServices)) { + do local_sched::borrow |sched| { + match sched.current_task { + Some(~ref mut task) => { + f(&mut task.local_services) + } + None => { + fail!(~"no local services for schedulers yet") + } + } + } +} diff --git a/src/libcore/rt/mod.rs b/src/libcore/rt/mod.rs index cf896dd18f34c..e0190418b132b 100644 --- a/src/libcore/rt/mod.rs +++ b/src/libcore/rt/mod.rs @@ -48,6 +48,7 @@ mod stack; mod context; mod thread; pub mod env; +pub mod local_services; /// Tools for testing the runtime #[cfg(test)] @@ -97,7 +98,7 @@ pub fn start(main: *u8, _argc: int, _argv: **c_char, _crate_map: *u8) -> int { /// Different runtime services are available depending on context. #[deriving(Eq)] pub enum RuntimeContext { - // Only default services, e.g. exchange heap + // Only the exchange heap is available GlobalContext, // The scheduler may be accessed SchedulerContext, diff --git a/src/libcore/rt/sched/mod.rs b/src/libcore/rt/sched/mod.rs index 28946281628b1..30136e443ee39 100644 --- a/src/libcore/rt/sched/mod.rs +++ b/src/libcore/rt/sched/mod.rs @@ -16,6 +16,7 @@ use super::work_queue::WorkQueue; use super::stack::{StackPool, StackSegment}; use super::rtio::{EventLoop, EventLoopObject}; use super::context::Context; +use super::local_services::LocalServices; use cell::Cell; #[cfg(test)] use super::uvio::UvEventLoop; @@ -38,7 +39,7 @@ pub struct Scheduler { /// Always valid when a task is executing, otherwise not priv saved_context: Context, /// The currently executing task - priv current_task: Option<~Task>, + current_task: Option<~Task>, /// An action performed after a context switch on behalf of the /// code running before the context switch priv cleanup_job: Option @@ -326,6 +327,8 @@ pub struct Task { /// These are always valid when the task is not running, unless /// the task is dead priv saved_context: Context, + /// The heap, GC, unwinding, local storage, logging + local_services: LocalServices } pub impl Task { @@ -337,6 +340,7 @@ pub impl Task { return Task { current_stack_segment: stack, saved_context: initial_context, + local_services: LocalServices::new() }; } From 2fe118b26fdb2897eb000ae47f912cc6b2534324 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sun, 21 Apr 2013 17:42:45 -0700 Subject: [PATCH 017/410] rt: Don't make memory_region depend on rust_env I am going to use memory_region and boxed_region as the local heap in the new scheduler, for now at least, and I don't have a rust_env available. --- src/rt/boxed_region.cpp | 2 +- src/rt/boxed_region.h | 6 +++--- src/rt/memory_region.cpp | 15 +++++++++------ src/rt/memory_region.h | 5 +++-- src/rt/rust_sched_loop.cpp | 2 +- src/rt/rust_task.cpp | 2 +- 6 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/rt/boxed_region.cpp b/src/rt/boxed_region.cpp index d159df03dc3c0..e8ddb53148c1a 100644 --- a/src/rt/boxed_region.cpp +++ b/src/rt/boxed_region.cpp @@ -82,7 +82,7 @@ void boxed_region::free(rust_opaque_box *box) { if (box->next) box->next->prev = box->prev; if (live_allocs == box) live_allocs = box->next; - if (env->poison_on_free) { + if (poison_on_free) { memset(box_body(box), 0xab, box->td->size); } diff --git a/src/rt/boxed_region.h b/src/rt/boxed_region.h index 4097b6d41b756..178772007e518 100644 --- a/src/rt/boxed_region.h +++ b/src/rt/boxed_region.h @@ -24,7 +24,7 @@ struct rust_env; * a type descr which describes the payload (what follows the header). */ class boxed_region { private: - rust_env *env; + bool poison_on_free; memory_region *backing_region; rust_opaque_box *live_allocs; @@ -41,8 +41,8 @@ class boxed_region { boxed_region& operator=(const boxed_region& rhs); public: - boxed_region(rust_env *e, memory_region *br) - : env(e) + boxed_region(memory_region *br, bool poison_on_free) + : poison_on_free(poison_on_free) , backing_region(br) , live_allocs(NULL) {} diff --git a/src/rt/memory_region.cpp b/src/rt/memory_region.cpp index 6de9d5a1df4a2..f3406712cb012 100644 --- a/src/rt/memory_region.cpp +++ b/src/rt/memory_region.cpp @@ -11,7 +11,6 @@ #include "sync/sync.h" #include "memory_region.h" -#include "rust_env.h" #if RUSTRT_TRACK_ALLOCATIONS >= 3 #include @@ -35,15 +34,19 @@ void *memory_region::get_data(alloc_header *ptr) { return (void*)((char *)ptr + HEADER_SIZE); } -memory_region::memory_region(rust_env *env, bool synchronized) : - _env(env), _parent(NULL), _live_allocations(0), - _detailed_leaks(env->detailed_leaks), +memory_region::memory_region(bool synchronized, + bool detailed_leaks, + bool poison_on_free) : + _parent(NULL), _live_allocations(0), + _detailed_leaks(detailed_leaks), + _poison_on_free(poison_on_free), _synchronized(synchronized) { } memory_region::memory_region(memory_region *parent) : - _env(parent->_env), _parent(parent), _live_allocations(0), + _parent(parent), _live_allocations(0), _detailed_leaks(parent->_detailed_leaks), + _poison_on_free(parent->_poison_on_free), _synchronized(parent->_synchronized) { } @@ -241,7 +244,7 @@ memory_region::claim_alloc(void *mem) { void memory_region::maybe_poison(void *mem) { - if (!_env->poison_on_free) + if (!_poison_on_free) return; # if RUSTRT_TRACK_ALLOCATIONS >= 1 diff --git a/src/rt/memory_region.h b/src/rt/memory_region.h index 999a992eefaea..4ad57c11809cc 100644 --- a/src/rt/memory_region.h +++ b/src/rt/memory_region.h @@ -54,11 +54,11 @@ class memory_region { inline alloc_header *get_header(void *mem); inline void *get_data(alloc_header *); - rust_env *_env; memory_region *_parent; int _live_allocations; array_list _allocation_list; const bool _detailed_leaks; + const bool _poison_on_free; const bool _synchronized; lock_and_signal _lock; @@ -75,7 +75,8 @@ class memory_region { memory_region& operator=(const memory_region& rhs); public: - memory_region(rust_env *env, bool synchronized); + memory_region(bool synchronized, + bool detailed_leaks, bool poison_on_free); memory_region(memory_region *parent); void *malloc(size_t size, const char *tag); void *realloc(void *mem, size_t size); diff --git a/src/rt/rust_sched_loop.cpp b/src/rt/rust_sched_loop.cpp index 90393acdd59d6..e7ce4b08ee46a 100644 --- a/src/rt/rust_sched_loop.cpp +++ b/src/rt/rust_sched_loop.cpp @@ -36,7 +36,7 @@ rust_sched_loop::rust_sched_loop(rust_scheduler *sched, int id, bool killed) : sched(sched), log_lvl(log_debug), min_stack_size(kernel->env->min_stack_size), - local_region(kernel->env, false), + local_region(false, kernel->env->detailed_leaks, kernel->env->poison_on_free), // FIXME #2891: calculate a per-scheduler name. name("main") { diff --git a/src/rt/rust_task.cpp b/src/rt/rust_task.cpp index 63dc1c9833e21..4680f32c19a84 100644 --- a/src/rt/rust_task.cpp +++ b/src/rt/rust_task.cpp @@ -36,7 +36,7 @@ rust_task::rust_task(rust_sched_loop *sched_loop, rust_task_state state, kernel(sched_loop->kernel), name(name), list_index(-1), - boxed(sched_loop->kernel->env, &local_region), + boxed(&local_region, sched_loop->kernel->env->poison_on_free), local_region(&sched_loop->local_region), unwinding(false), total_stack_sz(0), From d7f5e437a28dd85b8a7523af9212a9a1100ea725 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sun, 21 Apr 2013 19:03:52 -0700 Subject: [PATCH 018/410] core::rt: Add the local heap to newsched tasks Reusing the existing boxed_region implementation from the runtime --- src/libcore/rt/local_heap.rs | 81 ++++++++++++++++++++++++++++++++ src/libcore/rt/local_services.rs | 19 +++++++- src/libcore/rt/mod.rs | 1 + src/libcore/unstable/lang.rs | 26 +++++++++- src/rt/boxed_region.cpp | 12 ++--- src/rt/rust_builtin.cpp | 35 ++++++++++++++ src/rt/rustrt.def.in | 6 +++ 7 files changed, 170 insertions(+), 10 deletions(-) create mode 100644 src/libcore/rt/local_heap.rs diff --git a/src/libcore/rt/local_heap.rs b/src/libcore/rt/local_heap.rs new file mode 100644 index 0000000000000..fbd4a77d79b98 --- /dev/null +++ b/src/libcore/rt/local_heap.rs @@ -0,0 +1,81 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! The local, garbage collected heap + +use libc::{c_void, uintptr_t, size_t}; +use ops::Drop; + +type MemoryRegion = c_void; +type BoxedRegion = c_void; + +pub type OpaqueBox = c_void; +pub type TypeDesc = c_void; + +pub struct LocalHeap { + memory_region: *MemoryRegion, + boxed_region: *BoxedRegion +} + +impl LocalHeap { + pub fn new() -> LocalHeap { + unsafe { + // Don't need synchronization for the single-threaded local heap + let synchronized = false as uintptr_t; + // XXX: These usually come from the environment + let detailed_leaks = false as uintptr_t; + let poison_on_free = false as uintptr_t; + let region = rust_new_memory_region(synchronized, detailed_leaks, poison_on_free); + assert!(region.is_not_null()); + let boxed = rust_new_boxed_region(region, poison_on_free); + assert!(boxed.is_not_null()); + LocalHeap { + memory_region: region, + boxed_region: boxed + } + } + } + + pub fn alloc(&mut self, td: *TypeDesc, size: uint) -> *OpaqueBox { + unsafe { + return rust_boxed_region_malloc(self.boxed_region, td, size as size_t); + } + } + + pub fn free(&mut self, box: *OpaqueBox) { + unsafe { + return rust_boxed_region_free(self.boxed_region, box); + } + } +} + +impl Drop for LocalHeap { + fn finalize(&self) { + unsafe { + rust_delete_boxed_region(self.boxed_region); + rust_delete_memory_region(self.memory_region); + } + } +} + +extern { + fn rust_new_memory_region(synchronized: uintptr_t, + detailed_leaks: uintptr_t, + poison_on_free: uintptr_t) -> *MemoryRegion; + fn rust_delete_memory_region(region: *MemoryRegion); + fn rust_new_boxed_region(region: *MemoryRegion, + poison_on_free: uintptr_t) -> *BoxedRegion; + fn rust_delete_boxed_region(region: *BoxedRegion); + fn rust_boxed_region_malloc(region: *BoxedRegion, + td: *TypeDesc, + size: size_t) -> *OpaqueBox; + fn rust_boxed_region_free(region: *BoxedRegion, box: *OpaqueBox); +} + diff --git a/src/libcore/rt/local_services.rs b/src/libcore/rt/local_services.rs index 8e386f80b77d7..b9d99283e14f2 100644 --- a/src/libcore/rt/local_services.rs +++ b/src/libcore/rt/local_services.rs @@ -20,6 +20,7 @@ use prelude::*; use super::sched::{Task, local_sched}; +use super::local_heap::LocalHeap; pub struct LocalServices { heap: LocalHeap, @@ -29,7 +30,6 @@ pub struct LocalServices { unwinder: Unwinder } -pub struct LocalHeap; pub struct GarbageCollector; pub struct LocalStorage; pub struct Logger; @@ -38,7 +38,7 @@ pub struct Unwinder; impl LocalServices { pub fn new() -> LocalServices { LocalServices { - heap: LocalHeap, + heap: LocalHeap::new(), gc: GarbageCollector, storage: LocalStorage, logger: Logger, @@ -61,3 +61,18 @@ pub fn borrow_local_services(f: &fn(&mut LocalServices)) { } } } + +#[cfg(test)] +mod test { + use rt::test::*; + + #[test] + fn local_heap() { + do run_in_newsched_task() { + let a = @5; + let b = a; + assert!(*a == 5); + assert!(*b == 5); + } + } +} \ No newline at end of file diff --git a/src/libcore/rt/mod.rs b/src/libcore/rt/mod.rs index e0190418b132b..4a767d61f7444 100644 --- a/src/libcore/rt/mod.rs +++ b/src/libcore/rt/mod.rs @@ -49,6 +49,7 @@ mod context; mod thread; pub mod env; pub mod local_services; +mod local_heap; /// Tools for testing the runtime #[cfg(test)] diff --git a/src/libcore/unstable/lang.rs b/src/libcore/unstable/lang.rs index be776a39742f0..0bf1ad36a1faf 100644 --- a/src/libcore/unstable/lang.rs +++ b/src/libcore/unstable/lang.rs @@ -17,6 +17,8 @@ use str; use sys; use unstable::exchange_alloc; use cast::transmute; +use rt::{context, OldTaskContext}; +use rt::local_services::borrow_local_services; #[allow(non_camel_case_types)] pub type rust_task = c_void; @@ -81,7 +83,18 @@ pub unsafe fn exchange_free(ptr: *c_char) { #[lang="malloc"] #[inline(always)] pub unsafe fn local_malloc(td: *c_char, size: uintptr_t) -> *c_char { - return rustrt::rust_upcall_malloc(td, size); + match context() { + OldTaskContext => { + return rustrt::rust_upcall_malloc(td, size); + } + _ => { + let mut alloc = ::ptr::null(); + do borrow_local_services |srv| { + alloc = srv.heap.alloc(td as *c_void, size as uint) as *c_char; + } + return alloc; + } + } } // NB: Calls to free CANNOT be allowed to fail, as throwing an exception from @@ -90,7 +103,16 @@ pub unsafe fn local_malloc(td: *c_char, size: uintptr_t) -> *c_char { #[lang="free"] #[inline(always)] pub unsafe fn local_free(ptr: *c_char) { - rustrt::rust_upcall_free(ptr); + match context() { + OldTaskContext => { + rustrt::rust_upcall_free(ptr); + } + _ => { + do borrow_local_services |srv| { + srv.heap.free(ptr as *c_void); + } + } + } } #[lang="borrow_as_imm"] diff --git a/src/rt/boxed_region.cpp b/src/rt/boxed_region.cpp index e8ddb53148c1a..a49b52bffe153 100644 --- a/src/rt/boxed_region.cpp +++ b/src/rt/boxed_region.cpp @@ -27,11 +27,11 @@ rust_opaque_box *boxed_region::malloc(type_desc *td, size_t body_size) { if (live_allocs) live_allocs->prev = box; live_allocs = box; - LOG(rust_get_current_task(), box, + /*LOG(rust_get_current_task(), box, "@malloc()=%p with td %p, size %lu==%lu+%lu, " "align %lu, prev %p, next %p\n", box, td, total_size, sizeof(rust_opaque_box), body_size, - td->align, box->prev, box->next); + td->align, box->prev, box->next);*/ return box; } @@ -50,9 +50,9 @@ rust_opaque_box *boxed_region::realloc(rust_opaque_box *box, if (new_box->next) new_box->next->prev = new_box; if (live_allocs == box) live_allocs = new_box; - LOG(rust_get_current_task(), box, + /*LOG(rust_get_current_task(), box, "@realloc()=%p with orig=%p, size %lu==%lu+%lu", - new_box, box, total_size, sizeof(rust_opaque_box), new_size); + new_box, box, total_size, sizeof(rust_opaque_box), new_size);*/ return new_box; } @@ -74,9 +74,9 @@ void boxed_region::free(rust_opaque_box *box) { // double frees (kind of). assert(box->td != NULL); - LOG(rust_get_current_task(), box, + /*LOG(rust_get_current_task(), box, "@free(%p) with td %p, prev %p, next %p\n", - box, box->td, box->prev, box->next); + box, box->td, box->prev, box->next);*/ if (box->prev) box->prev->next = box->next; if (box->next) box->next->prev = box->prev; diff --git a/src/rt/rust_builtin.cpp b/src/rt/rust_builtin.cpp index a0db6f64f69fc..b8749b8f73d81 100644 --- a/src/rt/rust_builtin.cpp +++ b/src/rt/rust_builtin.cpp @@ -851,6 +851,41 @@ rust_initialize_global_state() { } } +extern "C" CDECL memory_region* +rust_new_memory_region(uintptr_t synchronized, + uintptr_t detailed_leaks, + uintptr_t poison_on_free) { + return new memory_region((bool)synchronized, + (bool)detailed_leaks, + (bool)poison_on_free); +} + +extern "C" CDECL void +rust_delete_memory_region(memory_region *region) { + delete region; +} + +extern "C" CDECL boxed_region* +rust_new_boxed_region(memory_region *region, + uintptr_t poison_on_free) { + return new boxed_region(region, poison_on_free); +} + +extern "C" CDECL void +rust_delete_boxed_region(boxed_region *region) { + delete region; +} + +extern "C" CDECL rust_opaque_box* +rust_boxed_region_malloc(boxed_region *region, type_desc *td, size_t size) { + return region->malloc(td, size); +} + +extern "C" CDECL void +rust_boxed_region_free(boxed_region *region, rust_opaque_box *box) { + region->free(box); +} + // // Local Variables: // mode: C++ diff --git a/src/rt/rustrt.def.in b/src/rt/rustrt.def.in index f84a73a394b6c..9aa8015678360 100644 --- a/src/rt/rustrt.def.in +++ b/src/rt/rustrt.def.in @@ -222,3 +222,9 @@ rust_uv_free_ip6_addr rust_call_nullary_fn rust_initialize_global_state rust_dbg_next_port +rust_new_memory_region +rust_delete_memory_region +rust_new_boxed_region +rust_delete_boxed_region +rust_boxed_region_malloc +rust_boxed_region_free From d0786fdffcbae5c89762455fd3b3ffb5b9a3b6a1 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Mon, 22 Apr 2013 12:54:03 -0700 Subject: [PATCH 019/410] core::rt Wire up task-local storage to the new scheduler --- src/libcore/rt/local_services.rs | 58 +++++++++++++++++-- src/libcore/rt/sched/mod.rs | 7 +++ src/libcore/task/local_data.rs | 10 ++-- src/libcore/task/local_data_priv.rs | 87 ++++++++++++++++++++++++----- src/libcore/task/spawn.rs | 8 +-- 5 files changed, 144 insertions(+), 26 deletions(-) diff --git a/src/libcore/rt/local_services.rs b/src/libcore/rt/local_services.rs index b9d99283e14f2..d29e57a17af15 100644 --- a/src/libcore/rt/local_services.rs +++ b/src/libcore/rt/local_services.rs @@ -19,6 +19,7 @@ //! (freestanding rust with local services?). use prelude::*; +use libc::c_void; use super::sched::{Task, local_sched}; use super::local_heap::LocalHeap; @@ -27,11 +28,12 @@ pub struct LocalServices { gc: GarbageCollector, storage: LocalStorage, logger: Logger, - unwinder: Unwinder + unwinder: Unwinder, + destroyed: bool } pub struct GarbageCollector; -pub struct LocalStorage; +pub struct LocalStorage(*c_void, Option<~fn(*c_void)>); pub struct Logger; pub struct Unwinder; @@ -40,11 +42,34 @@ impl LocalServices { LocalServices { heap: LocalHeap::new(), gc: GarbageCollector, - storage: LocalStorage, + storage: LocalStorage(ptr::null(), None), logger: Logger, - unwinder: Unwinder + unwinder: Unwinder, + destroyed: false } } + + /// Must be called manually before finalization to clean up + /// thread-local resources. Some of the routines here expect + /// LocalServices to be available recursively so this must be + /// called unsafely, without removing LocalServices from + /// thread-local-storage. + pub fn destroy(&mut self) { + // This is just an assertion that `destroy` was called unsafely + // and this instance of LocalServices is still accessible. + do borrow_local_services |sched| { + assert!(ptr::ref_eq(sched, self)); + } + match self.storage { + LocalStorage(ptr, Some(ref dtor)) => (*dtor)(ptr), + _ => () + } + self.destroyed = true; + } +} + +impl Drop for LocalServices { + fn finalize(&self) { assert!(self.destroyed) } } /// Borrow a pointer to the installed local services. @@ -62,6 +87,19 @@ pub fn borrow_local_services(f: &fn(&mut LocalServices)) { } } +pub unsafe fn unsafe_borrow_local_services() -> &mut LocalServices { + use cast::transmute_mut_region; + + match local_sched::unsafe_borrow().current_task { + Some(~ref mut task) => { + transmute_mut_region(&mut task.local_services) + } + None => { + fail!(~"no local services for schedulers yet") + } + } +} + #[cfg(test)] mod test { use rt::test::*; @@ -75,4 +113,16 @@ mod test { assert!(*b == 5); } } + + #[test] + fn tls() { + use task::local_data::*; + do run_in_newsched_task() { + unsafe { + fn key(_x: @~str) { } + local_data_set(key, @~"data"); + assert!(*local_data_get(key).get() == ~"data"); + } + } + } } \ No newline at end of file diff --git a/src/libcore/rt/sched/mod.rs b/src/libcore/rt/sched/mod.rs index 30136e443ee39..b7d861b8946b8 100644 --- a/src/libcore/rt/sched/mod.rs +++ b/src/libcore/rt/sched/mod.rs @@ -357,6 +357,13 @@ pub impl Task { start(); + unsafe { + // Destroy the local heap, TLS, etc. + let sched = local_sched::unsafe_borrow(); + let task = sched.current_task.get_mut_ref(); + task.local_services.destroy(); + } + let sched = local_sched::take(); sched.terminate_current_task(); }; diff --git a/src/libcore/task/local_data.rs b/src/libcore/task/local_data.rs index 261671f6de9ae..6e919a74ed4f2 100644 --- a/src/libcore/task/local_data.rs +++ b/src/libcore/task/local_data.rs @@ -27,7 +27,7 @@ magic. */ use prelude::*; -use task::local_data_priv::{local_get, local_pop, local_modify, local_set}; +use task::local_data_priv::{local_get, local_pop, local_modify, local_set, Handle}; use task::rt; /** @@ -53,7 +53,7 @@ pub type LocalDataKey<'self,T> = &'self fn(v: @T); pub unsafe fn local_data_pop( key: LocalDataKey) -> Option<@T> { - local_pop(rt::rust_get_task(), key) + local_pop(Handle::new(), key) } /** * Retrieve a task-local data value. It will also be kept alive in the @@ -62,7 +62,7 @@ pub unsafe fn local_data_pop( pub unsafe fn local_data_get( key: LocalDataKey) -> Option<@T> { - local_get(rt::rust_get_task(), key) + local_get(Handle::new(), key) } /** * Store a value in task-local data. If this key already has a value, @@ -71,7 +71,7 @@ pub unsafe fn local_data_get( pub unsafe fn local_data_set( key: LocalDataKey, data: @T) { - local_set(rt::rust_get_task(), key, data) + local_set(Handle::new(), key, data) } /** * Modify a task-local data value. If the function returns 'None', the @@ -81,7 +81,7 @@ pub unsafe fn local_data_modify( key: LocalDataKey, modify_fn: &fn(Option<@T>) -> Option<@T>) { - local_modify(rt::rust_get_task(), key, modify_fn) + local_modify(Handle::new(), key, modify_fn) } #[test] diff --git a/src/libcore/task/local_data_priv.rs b/src/libcore/task/local_data_priv.rs index 43f5fa4654bc7..50e8286e738d2 100644 --- a/src/libcore/task/local_data_priv.rs +++ b/src/libcore/task/local_data_priv.rs @@ -18,6 +18,30 @@ use task::rt; use task::local_data::LocalDataKey; use super::rt::rust_task; +use rt::local_services::LocalStorage; + +pub enum Handle { + OldHandle(*rust_task), + NewHandle(*mut LocalStorage) +} + +impl Handle { + pub fn new() -> Handle { + use rt::{context, OldTaskContext}; + use rt::local_services::unsafe_borrow_local_services; + unsafe { + match context() { + OldTaskContext => { + OldHandle(rt::rust_get_task()) + } + _ => { + let local_services = unsafe_borrow_local_services(); + NewHandle(&mut local_services.storage) + } + } + } + } +} pub trait LocalData { } impl LocalData for @T { } @@ -39,7 +63,7 @@ type TaskLocalElement = (*libc::c_void, *libc::c_void, @LocalData); // Has to be a pointer at outermost layer; the foreign call returns void *. type TaskLocalMap = @mut ~[Option]; -extern fn cleanup_task_local_map(map_ptr: *libc::c_void) { +fn cleanup_task_local_map(map_ptr: *libc::c_void) { unsafe { assert!(!map_ptr.is_null()); // Get and keep the single reference that was created at the @@ -50,8 +74,19 @@ extern fn cleanup_task_local_map(map_ptr: *libc::c_void) { } // Gets the map from the runtime. Lazily initialises if not done so already. +unsafe fn get_local_map(handle: Handle) -> TaskLocalMap { + match handle { + OldHandle(task) => get_task_local_map(task), + NewHandle(local_storage) => get_newsched_local_map(local_storage) + } +} + unsafe fn get_task_local_map(task: *rust_task) -> TaskLocalMap { + extern fn cleanup_task_local_map_(map_ptr: *libc::c_void) { + cleanup_task_local_map(map_ptr); + } + // Relies on the runtime initialising the pointer to null. // Note: The map's box lives in TLS invisibly referenced once. Each time // we retrieve it for get/set, we make another reference, which get/set @@ -62,7 +97,7 @@ unsafe fn get_task_local_map(task: *rust_task) -> TaskLocalMap { // Use reinterpret_cast -- transmute would take map away from us also. rt::rust_set_task_local_data( task, cast::reinterpret_cast(&map)); - rt::rust_task_local_data_atexit(task, cleanup_task_local_map); + rt::rust_task_local_data_atexit(task, cleanup_task_local_map_); // Also need to reference it an extra time to keep it for now. let nonmut = cast::transmute::]>(map); @@ -77,6 +112,32 @@ unsafe fn get_task_local_map(task: *rust_task) -> TaskLocalMap { } } +unsafe fn get_newsched_local_map(local: *mut LocalStorage) -> TaskLocalMap { + match &mut *local { + &LocalStorage(map_ptr, Some(_)) => { + assert!(map_ptr.is_not_null()); + let map = cast::transmute(map_ptr); + let nonmut = cast::transmute::]>(map); + cast::bump_box_refcount(nonmut); + return map; + } + &LocalStorage(ref mut map_ptr, ref mut at_exit) => { + assert!((*map_ptr).is_null()); + let map: TaskLocalMap = @mut ~[]; + // Use reinterpret_cast -- transmute would take map away from us also. + *map_ptr = cast::reinterpret_cast(&map); + let at_exit_fn: ~fn(*libc::c_void) = |p|cleanup_task_local_map(p); + *at_exit = Some(at_exit_fn); + // Also need to reference it an extra time to keep it for now. + let nonmut = cast::transmute::]>(map); + cast::bump_box_refcount(nonmut); + return map; + } + } +} + unsafe fn key_to_key_value( key: LocalDataKey) -> *libc::c_void { @@ -106,10 +167,10 @@ unsafe fn local_data_lookup( } unsafe fn local_get_helper( - task: *rust_task, key: LocalDataKey, + handle: Handle, key: LocalDataKey, do_pop: bool) -> Option<@T> { - let map = get_task_local_map(task); + let map = get_local_map(handle); // Interpreturn our findings from the map do local_data_lookup(map, key).map |result| { // A reference count magically appears on 'data' out of thin air. It @@ -128,23 +189,23 @@ unsafe fn local_get_helper( pub unsafe fn local_pop( - task: *rust_task, + handle: Handle, key: LocalDataKey) -> Option<@T> { - local_get_helper(task, key, true) + local_get_helper(handle, key, true) } pub unsafe fn local_get( - task: *rust_task, + handle: Handle, key: LocalDataKey) -> Option<@T> { - local_get_helper(task, key, false) + local_get_helper(handle, key, false) } pub unsafe fn local_set( - task: *rust_task, key: LocalDataKey, data: @T) { + handle: Handle, key: LocalDataKey, data: @T) { - let map = get_task_local_map(task); + let map = get_local_map(handle); // Store key+data as *voids. Data is invisibly referenced once; key isn't. let keyval = key_to_key_value(key); // We keep the data in two forms: one as an unsafe pointer, so we can get @@ -174,12 +235,12 @@ pub unsafe fn local_set( } pub unsafe fn local_modify( - task: *rust_task, key: LocalDataKey, + handle: Handle, key: LocalDataKey, modify_fn: &fn(Option<@T>) -> Option<@T>) { // Could be more efficient by doing the lookup work, but this is easy. - let newdata = modify_fn(local_pop(task, key)); + let newdata = modify_fn(local_pop(handle, key)); if newdata.is_some() { - local_set(task, key, newdata.unwrap()); + local_set(handle, key, newdata.unwrap()); } } diff --git a/src/libcore/task/spawn.rs b/src/libcore/task/spawn.rs index 118c4cc23125b..1e3857dff9a95 100644 --- a/src/libcore/task/spawn.rs +++ b/src/libcore/task/spawn.rs @@ -80,7 +80,7 @@ use prelude::*; use unstable; use ptr; use hashmap::HashSet; -use task::local_data_priv::{local_get, local_set}; +use task::local_data_priv::{local_get, local_set, OldHandle}; use task::rt::rust_task; use task::rt; use task::{Failure, ManualThreads, PlatformThread, SchedOpts, SingleThreaded}; @@ -451,7 +451,7 @@ fn gen_child_taskgroup(linked: bool, supervised: bool) /*##################################################################* * Step 1. Get spawner's taskgroup info. *##################################################################*/ - let spawner_group = match local_get(spawner, taskgroup_key!()) { + let spawner_group = match local_get(OldHandle(spawner), taskgroup_key!()) { None => { // Main task, doing first spawn ever. Lazily initialise here. let mut members = new_taskset(); @@ -463,7 +463,7 @@ fn gen_child_taskgroup(linked: bool, supervised: bool) // Main task/group has no ancestors, no notifier, etc. let group = @TCB(spawner, tasks, AncestorList(None), true, None); - local_set(spawner, taskgroup_key!(), group); + local_set(OldHandle(spawner), taskgroup_key!(), group); group } Some(group) => group @@ -627,7 +627,7 @@ fn spawn_raw_oldsched(opts: TaskOpts, f: ~fn()) { let group = @TCB(child, child_arc, ancestors, is_main, notifier); unsafe { - local_set(child, taskgroup_key!(), group); + local_set(OldHandle(child), taskgroup_key!(), group); } // Run the child's body. From e5d21b9ff1ea4160b728b62aeca110c0a563d9ee Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Mon, 22 Apr 2013 13:10:59 -0700 Subject: [PATCH 020/410] core::rt: Make I/O constructors return Option instead of Result For consistency, for all I/O calls, inspecting the error can be done with the io_error condition. --- src/libcore/rt/io/file.rs | 2 +- src/libcore/rt/io/net/tcp.rs | 4 ++-- src/libcore/rt/io/net/udp.rs | 4 ++-- src/libcore/rt/io/net/unix.rs | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/libcore/rt/io/file.rs b/src/libcore/rt/io/file.rs index 4e3e01a5eceb9..e4fe066a173f4 100644 --- a/src/libcore/rt/io/file.rs +++ b/src/libcore/rt/io/file.rs @@ -42,7 +42,7 @@ impl FileStream { pub fn open(_path: &P, _mode: FileMode, _access: FileAccess - ) -> Result { + ) -> Option { fail!() } } diff --git a/src/libcore/rt/io/net/tcp.rs b/src/libcore/rt/io/net/tcp.rs index d78241b8e446e..d726bae821c87 100644 --- a/src/libcore/rt/io/net/tcp.rs +++ b/src/libcore/rt/io/net/tcp.rs @@ -16,7 +16,7 @@ use super::ip::IpAddr; pub struct TcpStream; impl TcpStream { - pub fn connect(_addr: IpAddr) -> Result { + pub fn connect(_addr: IpAddr) -> Option { fail!() } } @@ -40,7 +40,7 @@ impl Close for TcpStream { pub struct TcpListener; impl TcpListener { - pub fn bind(_addr: IpAddr) -> Result { + pub fn bind(_addr: IpAddr) -> Option { fail!() } } diff --git a/src/libcore/rt/io/net/udp.rs b/src/libcore/rt/io/net/udp.rs index 81a6677c14afa..8691a697e8888 100644 --- a/src/libcore/rt/io/net/udp.rs +++ b/src/libcore/rt/io/net/udp.rs @@ -16,7 +16,7 @@ use super::ip::IpAddr; pub struct UdpStream; impl UdpStream { - pub fn connect(_addr: IpAddr) -> Result { + pub fn connect(_addr: IpAddr) -> Option { fail!() } } @@ -40,7 +40,7 @@ impl Close for UdpStream { pub struct UdpListener; impl UdpListener { - pub fn bind(_addr: IpAddr) -> Result { + pub fn bind(_addr: IpAddr) -> Option { fail!() } } diff --git a/src/libcore/rt/io/net/unix.rs b/src/libcore/rt/io/net/unix.rs index a5f4f8e3ba8b4..bb3db6ec0d502 100644 --- a/src/libcore/rt/io/net/unix.rs +++ b/src/libcore/rt/io/net/unix.rs @@ -16,7 +16,7 @@ use super::super::support::PathLike; pub struct UnixStream; impl UnixStream { - pub fn connect(_path: &P) -> Result { + pub fn connect(_path: &P) -> Option { fail!() } } @@ -40,7 +40,7 @@ impl Close for UnixStream { pub struct UnixListener; impl UnixListener { - pub fn bind(_path: &P) -> Result { + pub fn bind(_path: &P) -> Option { fail!() } } From 6644a034f0650c638eea8809a5f035ffaca0de88 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Mon, 22 Apr 2013 13:26:37 -0700 Subject: [PATCH 021/410] core::rt: Move the definition of Listener to rt::io --- src/libcore/rt/io/mod.rs | 24 +++++++++++++++++++++--- src/libcore/rt/io/net/mod.rs | 31 ------------------------------- 2 files changed, 21 insertions(+), 34 deletions(-) delete mode 100644 src/libcore/rt/io/net/mod.rs diff --git a/src/libcore/rt/io/mod.rs b/src/libcore/rt/io/mod.rs index 238bd97a62d17..f1b248c6e1d71 100644 --- a/src/libcore/rt/io/mod.rs +++ b/src/libcore/rt/io/mod.rs @@ -122,7 +122,6 @@ pub use self::stdio::print; pub use self::stdio::println; pub use self::file::FileStream; -pub use self::net::Listener; pub use self::net::ip::IpAddr; pub use self::net::tcp::TcpListener; pub use self::net::tcp::TcpStream; @@ -137,8 +136,14 @@ pub use self::extensions::WriterByteConversions; pub mod file; /// Synchronous, non-blocking network I/O. -#[path = "net/mod.rs"] -pub mod net; +pub mod net { + pub mod tcp; + pub mod udp; + pub mod ip; + #[cfg(unix)] + pub mod unix; + pub mod http; +} /// Readers and Writers for memory buffers and strings. #[cfg(not(stage0))] // XXX Using unsnapshotted features @@ -280,6 +285,19 @@ pub trait Seek { fn seek(&mut self, pos: i64, style: SeekStyle); } +/// A listener is a value that listens for connections +pub trait Listener { + /// Wait for and accept an incoming connection + /// + /// Returns `None` on timeout. + /// + /// # Failure + /// + /// Raises `io_error` condition. If the condition is handled, + /// then `accept` returns `None`. + fn accept(&mut self) -> Option; +} + /// Common trait for decorator types. /// /// Provides accessors to get the inner, 'decorated' values. The I/O library diff --git a/src/libcore/rt/io/net/mod.rs b/src/libcore/rt/io/net/mod.rs deleted file mode 100644 index 130ff6b38fa82..0000000000000 --- a/src/libcore/rt/io/net/mod.rs +++ /dev/null @@ -1,31 +0,0 @@ -// 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 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -use prelude::*; - -pub mod tcp; -pub mod udp; -pub mod ip; -#[cfg(unix)] -pub mod unix; -pub mod http; - -/// A listener is a value that listens for connections -pub trait Listener { - /// Wait for and accept an incoming connection - /// - /// Returns `None` on timeout. - /// - /// # Failure - /// - /// Raises `io_error` condition. If the condition is handled, - /// then `accept` returns `None`. - fn accept(&mut self) -> Option; -} From fe13b865192028645b50c17d2cb1a6d44481f338 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Mon, 22 Apr 2013 14:43:02 -0700 Subject: [PATCH 022/410] Make conditions public. #6009 --- src/libcore/condition.rs | 21 +++++++++++++++++++++ src/libsyntax/ext/expand.rs | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/libcore/condition.rs b/src/libcore/condition.rs index dc6c80228dd74..c639239981cab 100644 --- a/src/libcore/condition.rs +++ b/src/libcore/condition.rs @@ -192,4 +192,25 @@ mod test { assert!(trapped); } + + // Issue #6009 + mod m { + condition! { + sadness: int -> int; + } + + mod n { + use super::sadness; + + #[test] + fn test_conditions_are_public() { + let mut trapped = false; + do sadness::cond.trap(|_| { + 0 + }).in { + sadness::cond.raise(0); + } + } + } + } } diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs index 430402a8982fc..5c5817d480dc4 100644 --- a/src/libsyntax/ext/expand.rs +++ b/src/libsyntax/ext/expand.rs @@ -475,7 +475,7 @@ pub fn core_macros() -> ~str { { $c:ident: $in:ty -> $out:ty; } => { - mod $c { + pub mod $c { fn key(_x: @::core::condition::Handler<$in,$out>) { } pub static cond : From 5fbb0949a53a6ac51c6d9b187ef4c464e52ae536 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Mon, 22 Apr 2013 14:52:40 -0700 Subject: [PATCH 023/410] core::rt: Add implementations of Reader, Writer, and Listener for Option These will make it easier to write I/O code without worrying about errors --- src/libcore/rt/io/mod.rs | 24 +++++- src/libcore/rt/io/option.rs | 153 ++++++++++++++++++++++++++++++++++++ 2 files changed, 174 insertions(+), 3 deletions(-) create mode 100644 src/libcore/rt/io/option.rs diff --git a/src/libcore/rt/io/mod.rs b/src/libcore/rt/io/mod.rs index f1b248c6e1d71..d9d6622277f77 100644 --- a/src/libcore/rt/io/mod.rs +++ b/src/libcore/rt/io/mod.rs @@ -152,6 +152,9 @@ pub mod mem; /// Non-blocking access to stdin, stdout, stderr pub mod stdio; +/// Implementations for Option +mod option; + /// Basic stream compression. XXX: Belongs with other flate code #[cfg(not(stage0))] // XXX Using unsnapshotted features pub mod flate; @@ -194,12 +197,14 @@ pub struct IoError { detail: Option<~str> } +#[deriving(Eq)] pub enum IoErrorKind { FileNotFound, FilePermission, ConnectionFailed, Closed, - OtherIoError + OtherIoError, + PreviousIoError } // XXX: Can't put doc comments on macros @@ -232,9 +237,9 @@ pub trait Reader { /// println(reader.read_line()); /// } /// - /// # XXX + /// # Failue /// - /// What does this return if the Reader is in an error state? + /// Returns `true` on failure. fn eof(&mut self) -> bool; } @@ -323,3 +328,16 @@ pub trait Decorator { /// Take a mutable reference to the decorated value fn inner_mut_ref<'a>(&'a mut self) -> &'a mut T; } + +pub fn standard_error(kind: IoErrorKind) -> IoError { + match kind { + PreviousIoError => { + IoError { + kind: PreviousIoError, + desc: "Failing due to a previous I/O error", + detail: None + } + } + _ => fail!() + } +} diff --git a/src/libcore/rt/io/option.rs b/src/libcore/rt/io/option.rs new file mode 100644 index 0000000000000..95f8711cb5bd5 --- /dev/null +++ b/src/libcore/rt/io/option.rs @@ -0,0 +1,153 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! Implementations of I/O traits for the Option type +//! +//! I/O constructors return option types to allow errors to be handled. +//! These implementations allow e.g. `Option` to be used +//! as a `Reader` without unwrapping the option first. +//! +//! # XXX Seek and Close + +use option::*; +use super::{Reader, Writer, Listener}; +use super::{standard_error, PreviousIoError, io_error, IoError}; + +fn prev_io_error() -> IoError { + standard_error(PreviousIoError) +} + +impl Writer for Option { + fn write(&mut self, buf: &[u8]) { + match *self { + Some(ref mut writer) => writer.write(buf), + None => io_error::cond.raise(prev_io_error()) + } + } + + fn flush(&mut self) { + match *self { + Some(ref mut writer) => writer.flush(), + None => io_error::cond.raise(prev_io_error()) + } + } +} + +impl Reader for Option { + fn read(&mut self, buf: &mut [u8]) -> Option { + match *self { + Some(ref mut reader) => reader.read(buf), + None => { + io_error::cond.raise(prev_io_error()); + None + } + } + } + + fn eof(&mut self) -> bool { + match *self { + Some(ref mut reader) => reader.eof(), + None => { + io_error::cond.raise(prev_io_error()); + true + } + } + } +} + +impl, S> Listener for Option { + fn accept(&mut self) -> Option { + match *self { + Some(ref mut listener) => listener.accept(), + None => { + io_error::cond.raise(prev_io_error()); + None + } + } + } +} + +#[cfg(test)] +mod test { + use option::*; + use super::super::mem::*; + use rt::test::*; + use super::super::{PreviousIoError, io_error}; + + #[test] + fn test_option_writer() { + do run_in_newsched_task { + let mut writer: Option = Some(MemWriter::new()); + writer.write([0, 1, 2]); + writer.flush(); + assert!(writer.unwrap().inner() == ~[0, 1, 2]); + } + } + + #[test] + fn test_option_writer_error() { + do run_in_newsched_task { + let mut writer: Option = None; + + let mut called = false; + do io_error::cond.trap(|err| { + assert!(err.kind == PreviousIoError); + called = true; + }).in { + writer.write([0, 0, 0]); + } + assert!(called); + + let mut called = false; + do io_error::cond.trap(|err| { + assert!(err.kind == PreviousIoError); + called = true; + }).in { + writer.flush(); + } + assert!(called); + } + } + + #[test] + fn test_option_reader() { + do run_in_newsched_task { + let mut reader: Option = Some(MemReader::new(~[0, 1, 2, 3])); + let mut buf = [0, 0]; + reader.read(buf); + assert!(buf == [0, 1]); + assert!(!reader.eof()); + } + } + + #[test] + fn test_option_reader_error() { + let mut reader: Option = None; + let mut buf = []; + + let mut called = false; + do io_error::cond.trap(|err| { + assert!(err.kind == PreviousIoError); + called = true; + }).in { + reader.read(buf); + } + assert!(called); + + let mut called = false; + do io_error::cond.trap(|err| { + assert!(err.kind == PreviousIoError); + called = true; + }).in { + assert!(reader.eof()); + } + assert!(called); + } +} From 42c0f88232847e97e6cf3578ef197d1942bba44d Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Mon, 22 Apr 2013 17:15:31 -0700 Subject: [PATCH 024/410] core::rt: Add unwinding to newsched tasks --- src/libcore/rt/io/mod.rs | 1 + src/libcore/rt/local_services.rs | 78 ++++++++++++++++++++++++++++++-- src/libcore/rt/sched/mod.rs | 7 +-- src/libcore/rt/test.rs | 41 +++++++++++++++++ src/libcore/sys.rs | 25 ++++++++-- src/libcore/task/mod.rs | 18 +++++++- src/rt/rust_builtin.cpp | 22 +++++++++ src/rt/rust_upcall.cpp | 16 +++++-- src/rt/rustrt.def.in | 2 + 9 files changed, 190 insertions(+), 20 deletions(-) diff --git a/src/libcore/rt/io/mod.rs b/src/libcore/rt/io/mod.rs index d9d6622277f77..131743305bcce 100644 --- a/src/libcore/rt/io/mod.rs +++ b/src/libcore/rt/io/mod.rs @@ -153,6 +153,7 @@ pub mod mem; pub mod stdio; /// Implementations for Option +#[cfg(not(stage0))] // Requires condition! fixes mod option; /// Basic stream compression. XXX: Belongs with other flate code diff --git a/src/libcore/rt/local_services.rs b/src/libcore/rt/local_services.rs index d29e57a17af15..fc75a25642861 100644 --- a/src/libcore/rt/local_services.rs +++ b/src/libcore/rt/local_services.rs @@ -19,7 +19,8 @@ //! (freestanding rust with local services?). use prelude::*; -use libc::c_void; +use libc::{c_void, uintptr_t}; +use cast::transmute; use super::sched::{Task, local_sched}; use super::local_heap::LocalHeap; @@ -35,7 +36,10 @@ pub struct LocalServices { pub struct GarbageCollector; pub struct LocalStorage(*c_void, Option<~fn(*c_void)>); pub struct Logger; -pub struct Unwinder; + +pub struct Unwinder { + unwinding: bool, +} impl LocalServices { pub fn new() -> LocalServices { @@ -44,17 +48,28 @@ impl LocalServices { gc: GarbageCollector, storage: LocalStorage(ptr::null(), None), logger: Logger, - unwinder: Unwinder, + unwinder: Unwinder { unwinding: false }, destroyed: false } } + pub fn run(&mut self, f: &fn()) { + // This is just an assertion that `run` was called unsafely + // and this instance of LocalServices is still accessible. + do borrow_local_services |sched| { + assert!(ptr::ref_eq(sched, self)); + } + + self.unwinder.try(f); + self.destroy(); + } + /// Must be called manually before finalization to clean up /// thread-local resources. Some of the routines here expect /// LocalServices to be available recursively so this must be /// called unsafely, without removing LocalServices from /// thread-local-storage. - pub fn destroy(&mut self) { + fn destroy(&mut self) { // This is just an assertion that `destroy` was called unsafely // and this instance of LocalServices is still accessible. do borrow_local_services |sched| { @@ -72,6 +87,51 @@ impl Drop for LocalServices { fn finalize(&self) { assert!(self.destroyed) } } +// Just a sanity check to make sure we are catching a Rust-thrown exception +static UNWIND_TOKEN: uintptr_t = 839147; + +impl Unwinder { + pub fn try(&mut self, f: &fn()) { + use sys::Closure; + + unsafe { + let closure: Closure = transmute(f); + let code = transmute(closure.code); + let env = transmute(closure.env); + + let token = rust_try(try_fn, code, env); + assert!(token == 0 || token == UNWIND_TOKEN); + } + + extern fn try_fn(code: *c_void, env: *c_void) { + unsafe { + let closure: Closure = Closure { + code: transmute(code), + env: transmute(env), + }; + let closure: &fn() = transmute(closure); + closure(); + } + } + + extern { + #[rust_stack] + fn rust_try(f: *u8, code: *c_void, data: *c_void) -> uintptr_t; + } + } + + pub fn begin_unwind(&mut self) -> ! { + self.unwinding = true; + unsafe { + rust_begin_unwind(UNWIND_TOKEN); + return transmute(()); + } + extern { + fn rust_begin_unwind(token: uintptr_t); + } + } +} + /// Borrow a pointer to the installed local services. /// Fails (likely aborting the process) if local services are not available. pub fn borrow_local_services(f: &fn(&mut LocalServices)) { @@ -125,4 +185,14 @@ mod test { } } } + + #[test] + fn unwind() { + do run_in_newsched_task() { + let result = spawn_try(||()); + assert!(result.is_ok()); + let result = spawn_try(|| fail!()); + assert!(result.is_err()); + } + } } \ No newline at end of file diff --git a/src/libcore/rt/sched/mod.rs b/src/libcore/rt/sched/mod.rs index b7d861b8946b8..65456c30fee79 100644 --- a/src/libcore/rt/sched/mod.rs +++ b/src/libcore/rt/sched/mod.rs @@ -353,15 +353,10 @@ pub impl Task { unsafe { let sched = local_sched::unsafe_borrow(); sched.run_cleanup_job(); - } - - start(); - unsafe { - // Destroy the local heap, TLS, etc. let sched = local_sched::unsafe_borrow(); let task = sched.current_task.get_mut_ref(); - task.local_services.destroy(); + task.local_services.run(start); } let sched = local_sched::take(); diff --git a/src/libcore/rt/test.rs b/src/libcore/rt/test.rs index e394a873feac6..f3d73c91bd604 100644 --- a/src/libcore/rt/test.rs +++ b/src/libcore/rt/test.rs @@ -8,6 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +use result::{Result, Ok, Err}; use super::io::net::ip::{IpAddr, Ipv4}; /// Creates a new scheduler in a new thread and runs a task in it, @@ -47,6 +48,46 @@ pub fn spawn_immediately(f: ~fn()) { } } +/// Spawn a task and wait for it to finish, returning whether it completed successfully or failed +pub fn spawn_try(f: ~fn()) -> Result<(), ()> { + use cell::Cell; + use super::sched::*; + use task; + use unstable::finally::Finally; + + // Our status variables will be filled in from the scheduler context + let mut failed = false; + let failed_ptr: *mut bool = &mut failed; + + // Switch to the scheduler + let f = Cell(Cell(f)); + let mut sched = local_sched::take(); + do sched.deschedule_running_task_and_then() |old_task| { + let old_task = Cell(old_task); + let f = f.take(); + let mut sched = local_sched::take(); + let new_task = ~do Task::new(&mut sched.stack_pool) { + do (|| { + (f.take())() + }).finally { + // Check for failure then resume the parent task + unsafe { *failed_ptr = task::failing(); } + let sched = local_sched::take(); + do sched.switch_running_tasks_and_then(old_task.take()) |new_task| { + let new_task = Cell(new_task); + do local_sched::borrow |sched| { + sched.task_queue.push_front(new_task.take()); + } + } + } + }; + + sched.resume_task_immediately(new_task); + } + + if !failed { Ok(()) } else { Err(()) } +} + /// Get a port number, starting at 9600, for use in tests pub fn next_test_port() -> u16 { unsafe { diff --git a/src/libcore/sys.rs b/src/libcore/sys.rs index 04f96f5eb229e..c50bc03517fa4 100644 --- a/src/libcore/sys.rs +++ b/src/libcore/sys.rs @@ -134,12 +134,27 @@ pub fn log_str(t: &T) -> ~str { /** Initiate task failure */ pub fn begin_unwind(msg: ~str, file: ~str, line: uint) -> ! { - do str::as_buf(msg) |msg_buf, _msg_len| { - do str::as_buf(file) |file_buf, _file_len| { + + use rt::{context, OldTaskContext}; + use rt::local_services::unsafe_borrow_local_services; + + match context() { + OldTaskContext => { + do str::as_buf(msg) |msg_buf, _msg_len| { + do str::as_buf(file) |file_buf, _file_len| { + unsafe { + let msg_buf = cast::transmute(msg_buf); + let file_buf = cast::transmute(file_buf); + begin_unwind_(msg_buf, file_buf, line as libc::size_t) + } + } + } + } + _ => { + gc::cleanup_stack_for_failure(); unsafe { - let msg_buf = cast::transmute(msg_buf); - let file_buf = cast::transmute(file_buf); - begin_unwind_(msg_buf, file_buf, line as libc::size_t) + let local_services = unsafe_borrow_local_services(); + local_services.unwinder.begin_unwind(); } } } diff --git a/src/libcore/task/mod.rs b/src/libcore/task/mod.rs index a243bfba85c6f..e1f4805a69208 100644 --- a/src/libcore/task/mod.rs +++ b/src/libcore/task/mod.rs @@ -558,8 +558,22 @@ pub fn yield() { pub fn failing() -> bool { //! True if the running task has failed - unsafe { - rt::rust_task_is_unwinding(rt::rust_get_task()) + use rt::{context, OldTaskContext}; + use rt::local_services::borrow_local_services; + + match context() { + OldTaskContext => { + unsafe { + rt::rust_task_is_unwinding(rt::rust_get_task()) + } + } + _ => { + let mut unwinding = false; + do borrow_local_services |local| { + unwinding = local.unwinder.unwinding; + } + return unwinding; + } } } diff --git a/src/rt/rust_builtin.cpp b/src/rt/rust_builtin.cpp index b8749b8f73d81..b37644460aa9e 100644 --- a/src/rt/rust_builtin.cpp +++ b/src/rt/rust_builtin.cpp @@ -886,6 +886,28 @@ rust_boxed_region_free(boxed_region *region, rust_opaque_box *box) { region->free(box); } +typedef void *(rust_try_fn)(void*, void*); + +extern "C" CDECL uintptr_t +rust_try(rust_try_fn f, void *fptr, void *env) { + try { + f(fptr, env); + } catch (uintptr_t token) { + assert(token != 0); + return token; + } + return 0; +} + +extern "C" CDECL void +rust_begin_unwind(uintptr_t token) { +#ifndef __WIN32__ + throw token; +#else + abort("failing on win32"); +#endif +} + // // Local Variables: // mode: C++ diff --git a/src/rt/rust_upcall.cpp b/src/rt/rust_upcall.cpp index 9f39e1433fc63..34236c36c1466 100644 --- a/src/rt/rust_upcall.cpp +++ b/src/rt/rust_upcall.cpp @@ -272,7 +272,13 @@ upcall_rust_personality(int version, s_rust_personality_args args = {(_Unwind_Reason_Code)0, version, actions, exception_class, ue_header, context}; - rust_task *task = rust_get_current_task(); + rust_task *task = rust_try_get_current_task(); + + if (task == NULL) { + // Assuming we're running with the new scheduler + upcall_s_rust_personality(&args); + return args.retval; + } // The personality function is run on the stack of the // last function that threw or landed, which is going @@ -309,8 +315,12 @@ upcall_del_stack() { // needs to acquire the value of the stack pointer extern "C" CDECL void upcall_reset_stack_limit() { - rust_task *task = rust_get_current_task(); - task->reset_stack_limit(); + rust_task *task = rust_try_get_current_task(); + if (task != NULL) { + task->reset_stack_limit(); + } else { + // We must be in a newsched task + } } // diff --git a/src/rt/rustrt.def.in b/src/rt/rustrt.def.in index 9aa8015678360..5e9a4b343eeda 100644 --- a/src/rt/rustrt.def.in +++ b/src/rt/rustrt.def.in @@ -228,3 +228,5 @@ rust_new_boxed_region rust_delete_boxed_region rust_boxed_region_malloc rust_boxed_region_free +rust_try +rust_begin_unwind \ No newline at end of file From a292d5175091f61e92d0f393275e32ad2b05d584 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Mon, 22 Apr 2013 19:20:12 -0700 Subject: [PATCH 025/410] mk: Pass CFLAGS to the uv build --- mk/rt.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mk/rt.mk b/mk/rt.mk index 015992abf7821..538d1e2534fae 100644 --- a/mk/rt.mk +++ b/mk/rt.mk @@ -169,7 +169,7 @@ $$(LIBUV_LIB_$(1)): $$(LIBUV_DEPS) else ifeq ($(OSTYPE_$(1)), linux-androideabi) $$(LIBUV_LIB_$(1)): $$(LIBUV_DEPS) $$(Q)$$(MAKE) -C $$(S)src/libuv/ \ - CFLAGS="$$(LIBUV_FLAGS_$$(HOST_$(1))) $$(SNAP_DEFINES)" \ + CFLAGS="$$(LIBUV_FLAGS_$$(HOST_$(1))) $$(SNAP_DEFINES) $$(CFLAGS)" \ LDFLAGS="$$(LIBUV_FLAGS_$$(HOST_$(1)))" \ CC="$$(CC_$(1))" \ CXX="$$(CXX_$(1))" \ @@ -181,7 +181,7 @@ $$(LIBUV_LIB_$(1)): $$(LIBUV_DEPS) else $$(LIBUV_LIB_$(1)): $$(LIBUV_DEPS) $$(Q)$$(MAKE) -C $$(S)src/libuv/ \ - CFLAGS="$$(LIBUV_FLAGS_$$(HOST_$(1))) $$(SNAP_DEFINES)" \ + CFLAGS="$$(LIBUV_FLAGS_$$(HOST_$(1))) $$(SNAP_DEFINES) $$(CFLAGS)" \ LDFLAGS="$$(LIBUV_FLAGS_$$(HOST_$(1)))" \ CC="$$(CC_$(1))" \ CXX="$$(CXX_$(1))" \ From 8a2f9cae213d38b31e9372b9d8a7fee1263f1363 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Mon, 22 Apr 2013 19:20:31 -0700 Subject: [PATCH 026/410] core::rt: Fix a use after free in uv 'write' --- src/libcore/rt/uv/mod.rs | 6 ++++-- src/libcore/rt/uv/net.rs | 16 ++++++++++------ src/libcore/rt/uvio.rs | 5 ++++- src/libcore/rt/uvll.rs | 6 +++--- 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/libcore/rt/uv/mod.rs b/src/libcore/rt/uv/mod.rs index 32757d6376e73..4c4b2e03d3daa 100644 --- a/src/libcore/rt/uv/mod.rs +++ b/src/libcore/rt/uv/mod.rs @@ -301,7 +301,8 @@ struct WatcherData { write_cb: Option, connect_cb: Option, close_cb: Option, - alloc_cb: Option + alloc_cb: Option, + buf: Option } pub fn install_watcher_data>(watcher: &mut W) { @@ -311,7 +312,8 @@ pub fn install_watcher_data>(watcher: &mut W) { write_cb: None, connect_cb: None, close_cb: None, - alloc_cb: None + alloc_cb: None, + buf: None }; let data = transmute::<~WatcherData, *c_void>(data); uvll::set_data_for_uv_handle(watcher.native_handle(), data); diff --git a/src/libcore/rt/uv/net.rs b/src/libcore/rt/uv/net.rs index 860c988b9c990..04b9008b06770 100644 --- a/src/libcore/rt/uv/net.rs +++ b/src/libcore/rt/uv/net.rs @@ -107,21 +107,25 @@ pub impl StreamWatcher { let req = WriteRequest::new(); let buf = vec_to_uv_buf(msg); - // XXX: Allocation - let bufs = ~[buf]; + assert!(data.buf.is_none()); + data.buf = Some(buf); + let bufs = [buf]; unsafe { assert!(0 == uvll::write(req.native_handle(), self.native_handle(), - &bufs, write_cb)); + bufs, write_cb)); } - // XXX: Freeing immediately after write. Is this ok? - let _v = vec_from_uv_buf(buf); extern fn write_cb(req: *uvll::uv_write_t, status: c_int) { let write_request: WriteRequest = NativeHandle::from_native_handle(req); let mut stream_watcher = write_request.stream(); write_request.delete(); - let cb = get_watcher_data(&mut stream_watcher).write_cb.swap_unwrap(); + let cb = { + let data = get_watcher_data(&mut stream_watcher); + let _vec = vec_from_uv_buf(data.buf.swap_unwrap()); + let cb = data.write_cb.swap_unwrap(); + cb + }; let status = status_to_maybe_uv_error(stream_watcher.native_handle(), status); cb(stream_watcher, status); } diff --git a/src/libcore/rt/uvio.rs b/src/libcore/rt/uvio.rs index 2e9d0afa52fe5..e7b2880b74b50 100644 --- a/src/libcore/rt/uvio.rs +++ b/src/libcore/rt/uvio.rs @@ -445,7 +445,7 @@ fn test_read_read_read() { let io = local_sched::unsafe_borrow_io(); let mut listener = io.bind(addr).unwrap(); let mut stream = listener.listen().unwrap(); - let mut buf = [0, .. 2048]; + let mut buf = [1, .. 2048]; let mut total_bytes_written = 0; while total_bytes_written < MAX { stream.write(buf); @@ -465,6 +465,9 @@ fn test_read_read_read() { let nread = stream.read(buf).unwrap(); rtdebug!("read %u bytes", nread as uint); total_bytes_read += nread; + for uint::range(0, nread) |i| { + assert!(buf[i] == 1); + } } rtdebug!("read %u bytes total", total_bytes_read as uint); stream.close(); diff --git a/src/libcore/rt/uvll.rs b/src/libcore/rt/uvll.rs index 640a69743ba6a..0f75ebb6090a1 100644 --- a/src/libcore/rt/uvll.rs +++ b/src/libcore/rt/uvll.rs @@ -219,9 +219,9 @@ pub unsafe fn accept(server: *c_void, client: *c_void) -> c_int { return rust_uv_accept(server as *c_void, client as *c_void); } -pub unsafe fn write(req: *uv_write_t, stream: *T, buf_in: *~[uv_buf_t], cb: *u8) -> c_int { - let buf_ptr = vec::raw::to_ptr(*buf_in); - let buf_cnt = vec::len(*buf_in) as i32; +pub unsafe fn write(req: *uv_write_t, stream: *T, buf_in: &[uv_buf_t], cb: *u8) -> c_int { + let buf_ptr = vec::raw::to_ptr(buf_in); + let buf_cnt = vec::len(buf_in) as i32; return rust_uv_write(req as *c_void, stream as *c_void, buf_ptr, buf_cnt, cb); } pub unsafe fn read_start(stream: *uv_stream_t, on_alloc: *u8, on_read: *u8) -> c_int { From f4af40a1db4862cfe1f17311e3e39cfff3324d82 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Mon, 22 Apr 2013 21:27:24 -0700 Subject: [PATCH 027/410] mk: core has another level of directories with rt/io/net --- Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.in b/Makefile.in index dd2e6a95861bd..33077872c1696 100644 --- a/Makefile.in +++ b/Makefile.in @@ -238,7 +238,7 @@ $(foreach target,$(CFG_TARGET_TRIPLES),\ CORELIB_CRATE := $(S)src/libcore/core.rc CORELIB_INPUTS := $(wildcard $(addprefix $(S)src/libcore/, \ - core.rc *.rs */*.rs */*/*rs)) + core.rc *.rs */*.rs */*/*rs */*/*/*rs)) ###################################################################### # Standard library variables From 2a819ae465c5f375df00ead0b3f4c9009da23f25 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Tue, 23 Apr 2013 15:11:28 -0700 Subject: [PATCH 028/410] core::rt: Tasks to not require an unwinder A task without an unwinder will abort the process on failure. I'm using this in the runtime tests to guarantee that a call to `assert!` actually triggers some kind of failure (an abort) instead of silently doing nothing. This is essentially in lieu of a working linked failure implementation. --- src/libcore/core.rc | 3 +++ src/libcore/macros.rs | 39 +++++++++++++++++++++++++++++ src/libcore/rt/local_services.rs | 30 +++++++++++++++++++---- src/libcore/rt/mod.rs | 20 --------------- src/libcore/rt/sched/mod.rs | 10 ++++++-- src/libcore/rt/test.rs | 42 +++++++++++++++++++++++--------- src/libcore/rt/uvio.rs | 12 ++++----- src/libcore/sys.rs | 6 ++++- src/libcore/task/mod.rs | 11 ++++++++- 9 files changed, 126 insertions(+), 47 deletions(-) create mode 100644 src/libcore/macros.rs diff --git a/src/libcore/core.rc b/src/libcore/core.rc index e7a5cfbaf4b25..a3b2cb4aaf959 100644 --- a/src/libcore/core.rc +++ b/src/libcore/core.rc @@ -114,6 +114,9 @@ pub mod linkhack { } } +// Internal macros +mod macros; + /* The Prelude. */ pub mod prelude; diff --git a/src/libcore/macros.rs b/src/libcore/macros.rs new file mode 100644 index 0000000000000..e1276a75e0557 --- /dev/null +++ b/src/libcore/macros.rs @@ -0,0 +1,39 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[macro_escape]; + +// Some basic logging +macro_rules! rtdebug ( + ($( $arg:expr),+) => ( { + dumb_println(fmt!( $($arg),+ )); + + fn dumb_println(s: &str) { + use io::WriterUtil; + let dbg = ::libc::STDERR_FILENO as ::io::fd_t; + dbg.write_str(s); + dbg.write_str("\n"); + } + + } ) +) + +// An alternate version with no output, for turning off logging +macro_rules! rtdebug_ ( + ($( $arg:expr),+) => ( $(let _ = $arg)*; ) +) + +macro_rules! abort( + ($( $msg:expr),+) => ( { + rtdebug!($($msg),+); + + unsafe { ::libc::abort(); } + } ) +) diff --git a/src/libcore/rt/local_services.rs b/src/libcore/rt/local_services.rs index fc75a25642861..d09d082c8581c 100644 --- a/src/libcore/rt/local_services.rs +++ b/src/libcore/rt/local_services.rs @@ -29,7 +29,7 @@ pub struct LocalServices { gc: GarbageCollector, storage: LocalStorage, logger: Logger, - unwinder: Unwinder, + unwinder: Option, destroyed: bool } @@ -48,7 +48,18 @@ impl LocalServices { gc: GarbageCollector, storage: LocalStorage(ptr::null(), None), logger: Logger, - unwinder: Unwinder { unwinding: false }, + unwinder: Some(Unwinder { unwinding: false }), + destroyed: false + } + } + + pub fn without_unwinding() -> LocalServices { + LocalServices { + heap: LocalHeap::new(), + gc: GarbageCollector, + storage: LocalStorage(ptr::null(), None), + logger: Logger, + unwinder: None, destroyed: false } } @@ -60,7 +71,16 @@ impl LocalServices { assert!(ptr::ref_eq(sched, self)); } - self.unwinder.try(f); + match self.unwinder { + Some(ref mut unwinder) => { + // If there's an unwinder then set up the catch block + unwinder.try(f); + } + None => { + // Otherwise, just run the body + f() + } + } self.destroy(); } @@ -189,9 +209,9 @@ mod test { #[test] fn unwind() { do run_in_newsched_task() { - let result = spawn_try(||()); + let result = spawntask_try(||()); assert!(result.is_ok()); - let result = spawn_try(|| fail!()); + let result = spawntask_try(|| fail!()); assert!(result.is_err()); } } diff --git a/src/libcore/rt/mod.rs b/src/libcore/rt/mod.rs index 4a767d61f7444..ab89a4c26a54d 100644 --- a/src/libcore/rt/mod.rs +++ b/src/libcore/rt/mod.rs @@ -12,26 +12,6 @@ use libc::c_char; -// Some basic logging -macro_rules! rtdebug_ ( - ($( $arg:expr),+) => ( { - dumb_println(fmt!( $($arg),+ )); - - fn dumb_println(s: &str) { - use io::WriterUtil; - let dbg = ::libc::STDERR_FILENO as ::io::fd_t; - dbg.write_str(s); - dbg.write_str("\n"); - } - - } ) -) - -// An alternate version with no output, for turning off logging -macro_rules! rtdebug ( - ($( $arg:expr),+) => ( $(let _ = $arg)*; ) -) - #[path = "sched/mod.rs"] mod sched; mod rtio; diff --git a/src/libcore/rt/sched/mod.rs b/src/libcore/rt/sched/mod.rs index 65456c30fee79..f7b9bd8266844 100644 --- a/src/libcore/rt/sched/mod.rs +++ b/src/libcore/rt/sched/mod.rs @@ -149,7 +149,7 @@ pub impl Scheduler { } } - // Control never reaches here + abort!("control reached end of task"); } fn schedule_new_task(~self, task: ~Task) { @@ -333,6 +333,12 @@ pub struct Task { pub impl Task { fn new(stack_pool: &mut StackPool, start: ~fn()) -> Task { + Task::with_local(stack_pool, LocalServices::new(), start) + } + + fn with_local(stack_pool: &mut StackPool, + local_services: LocalServices, + start: ~fn()) -> Task { let start = Task::build_start_wrapper(start); let mut stack = stack_pool.take_segment(TASK_MIN_STACK_SIZE); // NB: Context holds a pointer to that ~fn @@ -340,7 +346,7 @@ pub impl Task { return Task { current_stack_segment: stack, saved_context: initial_context, - local_services: LocalServices::new() + local_services: local_services }; } diff --git a/src/libcore/rt/test.rs b/src/libcore/rt/test.rs index f3d73c91bd604..f7ba881f84edb 100644 --- a/src/libcore/rt/test.rs +++ b/src/libcore/rt/test.rs @@ -8,38 +8,56 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +use cell::Cell; use result::{Result, Ok, Err}; use super::io::net::ip::{IpAddr, Ipv4}; +use rt::local_services::LocalServices; /// Creates a new scheduler in a new thread and runs a task in it, -/// then waits for the scheduler to exit. +/// then waits for the scheduler to exit. Failure of the task +/// will abort the process. pub fn run_in_newsched_task(f: ~fn()) { - use cell::Cell; use unstable::run_in_bare_thread; use super::sched::Task; use super::uvio::UvEventLoop; - let f = Cell(Cell(f)); + let f = Cell(f); do run_in_bare_thread { let mut sched = ~UvEventLoop::new_scheduler(); - let f = f.take(); - let task = ~do Task::new(&mut sched.stack_pool) { - (f.take())(); - }; + let task = ~Task::with_local(&mut sched.stack_pool, + LocalServices::without_unwinding(), + f.take()); sched.task_queue.push_back(task); sched.run(); } } -/// Create a new task and run it right now -pub fn spawn_immediately(f: ~fn()) { - use cell::Cell; +/// Test tasks will abort on failure instead of unwinding +pub fn spawntask(f: ~fn()) { + use super::*; + use super::sched::*; + + let mut sched = local_sched::take(); + let task = ~Task::with_local(&mut sched.stack_pool, + LocalServices::without_unwinding(), + f); + do sched.switch_running_tasks_and_then(task) |task| { + let task = Cell(task); + let sched = local_sched::take(); + sched.schedule_new_task(task.take()); + } +} + +/// Create a new task and run it right now. Aborts on failure +pub fn spawntask_immediately(f: ~fn()) { use super::*; use super::sched::*; let mut sched = local_sched::take(); - let task = ~Task::new(&mut sched.stack_pool, f); + let task = ~Task::with_local(&mut sched.stack_pool, + LocalServices::without_unwinding(), + f); do sched.switch_running_tasks_and_then(task) |task| { let task = Cell(task); do local_sched::borrow |sched| { @@ -49,7 +67,7 @@ pub fn spawn_immediately(f: ~fn()) { } /// Spawn a task and wait for it to finish, returning whether it completed successfully or failed -pub fn spawn_try(f: ~fn()) -> Result<(), ()> { +pub fn spawntask_try(f: ~fn()) -> Result<(), ()> { use cell::Cell; use super::sched::*; use task; diff --git a/src/libcore/rt/uvio.rs b/src/libcore/rt/uvio.rs index e7b2880b74b50..4cceb048cbc75 100644 --- a/src/libcore/rt/uvio.rs +++ b/src/libcore/rt/uvio.rs @@ -350,7 +350,7 @@ fn test_simple_tcp_server_and_client() { let addr = next_test_ip4(); // Start the server first so it's listening when we connect - do spawn_immediately { + do spawntask_immediately { unsafe { let io = local_sched::unsafe_borrow_io(); let mut listener = io.bind(addr).unwrap(); @@ -367,7 +367,7 @@ fn test_simple_tcp_server_and_client() { } } - do spawn_immediately { + do spawntask_immediately { unsafe { let io = local_sched::unsafe_borrow_io(); let mut stream = io.connect(addr).unwrap(); @@ -383,7 +383,7 @@ fn test_read_and_block() { do run_in_newsched_task { let addr = next_test_ip4(); - do spawn_immediately { + do spawntask_immediately { let io = unsafe { local_sched::unsafe_borrow_io() }; let mut listener = io.bind(addr).unwrap(); let mut stream = listener.listen().unwrap(); @@ -421,7 +421,7 @@ fn test_read_and_block() { listener.close(); } - do spawn_immediately { + do spawntask_immediately { let io = unsafe { local_sched::unsafe_borrow_io() }; let mut stream = io.connect(addr).unwrap(); stream.write([0, 1, 2, 3, 4, 5, 6, 7]); @@ -440,7 +440,7 @@ fn test_read_read_read() { let addr = next_test_ip4(); static MAX: uint = 500000; - do spawn_immediately { + do spawntask_immediately { unsafe { let io = local_sched::unsafe_borrow_io(); let mut listener = io.bind(addr).unwrap(); @@ -456,7 +456,7 @@ fn test_read_read_read() { } } - do spawn_immediately { + do spawntask_immediately { let io = unsafe { local_sched::unsafe_borrow_io() }; let mut stream = io.connect(addr).unwrap(); let mut buf = [0, .. 2048]; diff --git a/src/libcore/sys.rs b/src/libcore/sys.rs index c50bc03517fa4..2c3670ad498e2 100644 --- a/src/libcore/sys.rs +++ b/src/libcore/sys.rs @@ -10,6 +10,7 @@ //! Misc low level stuff +use option::{Some, None}; use cast; use cmp::{Eq, Ord}; use gc; @@ -154,7 +155,10 @@ pub fn begin_unwind(msg: ~str, file: ~str, line: uint) -> ! { gc::cleanup_stack_for_failure(); unsafe { let local_services = unsafe_borrow_local_services(); - local_services.unwinder.begin_unwind(); + match local_services.unwinder { + Some(ref mut unwinder) => unwinder.begin_unwind(), + None => abort!("failure without unwinder. aborting process") + } } } } diff --git a/src/libcore/task/mod.rs b/src/libcore/task/mod.rs index e1f4805a69208..d31a511eca8c9 100644 --- a/src/libcore/task/mod.rs +++ b/src/libcore/task/mod.rs @@ -570,7 +570,16 @@ pub fn failing() -> bool { _ => { let mut unwinding = false; do borrow_local_services |local| { - unwinding = local.unwinder.unwinding; + unwinding = match local.unwinder { + Some(unwinder) => { + unwinder.unwinding + } + None => { + // Because there is no unwinder we can't be unwinding. + // (The process will abort on failure) + false + } + } } return unwinding; } From 6373861510795bcaa6e98e97942c32eb26263bd8 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Tue, 23 Apr 2013 19:52:16 -0700 Subject: [PATCH 029/410] core: Convert reinterpret_cast to transmute in TLS. #6039 --- src/libcore/task/local_data_priv.rs | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/libcore/task/local_data_priv.rs b/src/libcore/task/local_data_priv.rs index 66808bf21aa2b..e32d18719bd00 100644 --- a/src/libcore/task/local_data_priv.rs +++ b/src/libcore/task/local_data_priv.rs @@ -49,8 +49,8 @@ impl LocalData for @T { } impl Eq for @LocalData { fn eq(&self, other: &@LocalData) -> bool { unsafe { - let ptr_a: (uint, uint) = cast::reinterpret_cast(&(*self)); - let ptr_b: (uint, uint) = cast::reinterpret_cast(other); + let ptr_a: &(uint, uint) = cast::transmute(self); + let ptr_b: &(uint, uint) = cast::transmute(other); return ptr_a == ptr_b; } } @@ -68,7 +68,7 @@ fn cleanup_task_local_map(map_ptr: *libc::c_void) { assert!(!map_ptr.is_null()); // Get and keep the single reference that was created at the // beginning. - let _map: TaskLocalMap = cast::reinterpret_cast(&map_ptr); + let _map: TaskLocalMap = cast::transmute(map_ptr); // All local_data will be destroyed along with the map. } } @@ -125,14 +125,9 @@ unsafe fn get_newsched_local_map(local: *mut LocalStorage) -> TaskLocalMap { &LocalStorage(ref mut map_ptr, ref mut at_exit) => { assert!((*map_ptr).is_null()); let map: TaskLocalMap = @mut ~[]; - // Use reinterpret_cast -- transmute would take map away from us also. - *map_ptr = cast::reinterpret_cast(&map); + *map_ptr = cast::transmute(map); let at_exit_fn: ~fn(*libc::c_void) = |p|cleanup_task_local_map(p); *at_exit = Some(at_exit_fn); - // Also need to reference it an extra time to keep it for now. - let nonmut = cast::transmute::]>(map); - cast::bump_box_refcount(nonmut); return map; } } @@ -143,7 +138,7 @@ unsafe fn key_to_key_value( // Keys are closures, which are (fnptr,envptr) pairs. Use fnptr. // Use reintepret_cast -- transmute would leak (forget) the closure. - let pair: (*libc::c_void, *libc::c_void) = cast::reinterpret_cast(&key); + let pair: (*libc::c_void, *libc::c_void) = cast::transmute(key); pair.first() } @@ -213,7 +208,7 @@ pub unsafe fn local_set( // own on it can be dropped when the box is destroyed. The unsafe pointer // does not have a reference associated with it, so it may become invalid // when the box is destroyed. - let data_ptr = cast::reinterpret_cast(&data); + let data_ptr = *cast::transmute::<&@T, &*libc::c_void>(&data); let data_box = @data as @LocalData; // Construct new entry to store in the map. let new_entry = Some((keyval, data_ptr, data_box)); From c0e734d203ac5c51ba2cac7b4e5ef099d83350da Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Tue, 23 Apr 2013 19:21:37 -0700 Subject: [PATCH 030/410] core::rt: Add more I/O docs --- src/libcore/rt/io/mod.rs | 173 ++++++++++++++++++++++++++++++++++----- src/libcore/rt/mod.rs | 2 + 2 files changed, 153 insertions(+), 22 deletions(-) diff --git a/src/libcore/rt/io/mod.rs b/src/libcore/rt/io/mod.rs index 131743305bcce..ced4ba0ee2309 100644 --- a/src/libcore/rt/io/mod.rs +++ b/src/libcore/rt/io/mod.rs @@ -10,12 +10,14 @@ /*! Synchronous I/O -This module defines the Rust interface for synchronous I/O. It is -build around Reader and Writer traits that define byte stream sources -and sinks. Implementations are provided for common I/O streams like -file, TCP, UDP, Unix domain sockets, multiple types of memory bufers. -Readers and Writers may be composed to add things like string parsing, -and compression. +This module defines the Rust interface for synchronous I/O. +It models byte-oriented input and output with the Reader and Writer traits. +Types that implement both `Reader` and `Writer` and called 'streams', +and automatically implement trait `Stream`. +Implementations are provided for common I/O streams like +file, TCP, UDP, Unix domain sockets. +Readers and Writers may be composed to add capabilities like string +parsing, encoding, and compression. This will likely live in core::io, not core::rt::io. @@ -31,22 +33,22 @@ Some examples of obvious things you might want to do * Read a complete file to a string, (converting newlines?) - let contents = FileStream::open("message.txt").read_to_str(); // read_to_str?? + let contents = File::open("message.txt").read_to_str(); // read_to_str?? * Write a line to a file - let file = FileStream::open("message.txt", Create, Write); + let file = File::open("message.txt", Create, Write); file.write_line("hello, file!"); * Iterate over the lines of a file - do FileStream::open("message.txt").each_line |line| { + do File::open("message.txt").each_line |line| { println(line) } * Pull the lines of a file into a vector of strings - let lines = FileStream::open("message.txt").line_iter().to_vec(); + let lines = File::open("message.txt").line_iter().to_vec(); * Make an simple HTTP request @@ -63,25 +65,145 @@ Some examples of obvious things you might want to do # Terms -* reader -* writer -* stream -* Blocking vs. non-blocking -* synchrony and asynchrony - -I tend to call this implementation non-blocking, because performing I/O -doesn't block the progress of other tasks. Is that how we want to present -it, 'synchronous but non-blocking'? +* Reader - An I/O source, reads bytes into a buffer +* Writer - An I/O sink, writes bytes from a buffer +* Stream - Typical I/O sources like files and sockets are both Readers and Writers, + and are collectively referred to a `streams`. +* Decorator - A Reader or Writer that composes with others to add additional capabilities + such as encoding or decoding + +# Blocking and synchrony + +When discussing I/O you often hear the terms 'synchronous' and +'asynchronous', along with 'blocking' and 'non-blocking' compared and +contrasted. A synchronous I/O interface performs each I/O operation to +completion before proceeding to the next. Synchronous interfaces are +usually used in imperative style as a sequence of commands. An +asynchronous interface allows multiple I/O requests to be issued +simultaneously, without waiting for each to complete before proceeding +to the next. + +Asynchronous interfaces are used to achieve 'non-blocking' I/O. In +traditional single-threaded systems, performing a synchronous I/O +operation means that the program stops all activity (it 'blocks') +until the I/O is complete. Blocking is bad for performance when +there are other computations that could be done. + +Asynchronous interfaces are most often associated with the callback +(continuation-passing) style popularised by node.js. Such systems rely +on all computations being run inside an event loop which maintains a +list of all pending I/O events; when one completes the registered +callback is run and the code that made the I/O request continiues. +Such interfaces achieve non-blocking at the expense of being more +difficult to reason about. + +Rust's I/O interface is synchronous - easy to read - and non-blocking by default. + +Remember that Rust tasks are 'green threads', lightweight threads that +are multiplexed onto a single operating system thread. If that system +thread blocks then no other task may proceed. Rust tasks are +relatively cheap to create, so as long as other tasks are free to +execute then non-blocking code may be written by simply creating a new +task. + +When discussing blocking in regards to Rust's I/O model, we are +concerned with whether performing I/O blocks other Rust tasks from +proceeding. In other words, when a task calls `read`, it must then +wait (or 'sleep', or 'block') until the call to `read` is complete. +During this time, other tasks may or may not be executed, depending on +how `read` is implemented. + + +Rust's default I/O implementation is non-blocking; by cooperating +directly with the task scheduler it arranges to never block progress +of *other* tasks. Under the hood, Rust uses asynchronous I/O via a +per-scheduler (and hence per-thread) event loop. Synchronous I/O +requests are implemented by descheduling the running task and +performing an asynchronous request; the task is only resumed once the +asynchronous request completes. + +For blocking (but possibly more efficient) implementations, look +in the `io::native` module. # Error Handling +I/O is an area where nearly every operation can result in unexpected +errors. It should allow errors to be handled efficiently. +It needs to be convenient to use I/O when you don't care +about dealing with specific errors. + +Rust's I/O employs a combination of techniques to reduce boilerplate +while still providing feedback about errors. The basic strategy: + +* Errors are fatal by default, resulting in task failure +* Errors raise the `io_error` conditon which provides an opportunity to inspect + an IoError object containing details. +* Return values must have a sensible null or zero value which is returned + if a condition is handled successfully. This may be an `Option`, an empty + vector, or other designated error value. +* Common traits are implemented for `Option`, e.g. `impl Reader for Option`, + so that nullable values do not have to be 'unwrapped' before use. + +These features combine in the API to allow for expressions like +`File::new("diary.txt").write_line("met a girl")` without having to +worry about whether "diary.txt" exists or whether the write +succeeds. As written, if either `new` or `write_line` encounters +an error the task will fail. + +If you wanted to handle the error though you might write + + let mut error = None; + do io_error::cond(|e: IoError| { + error = Some(e); + }).in { + File::new("diary.txt").write_line("met a girl"); + } + + if error.is_some() { + println("failed to write my diary"); + } + +XXX: Need better condition handling syntax + +In this case the condition handler will have the opportunity to +inspect the IoError raised by either the call to `new` or the call to +`write_line`, but then execution will continue. + +So what actually happens if `new` encounters an error? To understand +that it's important to know that what `new` returns is not a `File` +but an `Option`. If the file does not open, and the condition +is handled, then `new` will simply return `None`. Because there is an +implementation of `Writer` (the trait required ultimately required for +types to implement `write_line`) there is no need to inspect or unwrap +the `Option` and we simply call `write_line` on it. If `new` +returned a `None` then the followup call to `write_line` will also +raise an error. + +## Concerns about this strategy + +This structure will encourage a programming style that is prone +to errors similar to null pointer dereferences. +In particular code written to ignore errors and expect conditions to be unhandled +will start passing around null or zero objects when wrapped in a condition handler. + +* XXX: How should we use condition handlers that return values? + + +# Issues withi/o scheduler affinity, work stealing, task pinning + # Resource management * `close` vs. RAII -# Paths and URLs +# Paths, URLs and overloaded constructors + + -# std +# Scope + +In scope for core + +* Url? Some I/O things don't belong in core @@ -90,7 +212,12 @@ Some I/O things don't belong in core - http - flate -# XXX +Out of scope + +* Async I/O. We'll probably want it eventually + + +# XXX Questions and issues * Should default constructors take `Path` or `&str`? `Path` makes simple cases verbose. Overloading would be nice. @@ -100,6 +227,7 @@ Some I/O things don't belong in core * fsync * relationship with filesystem querying, Directory, File types etc. * Rename Reader/Writer to ByteReader/Writer, make Reader/Writer generic? +* Can Port and Chan be implementations of a generic Reader/Writer? * Trait for things that are both readers and writers, Stream? * How to handle newline conversion * String conversion @@ -109,6 +237,7 @@ Some I/O things don't belong in core * Do we need `close` at all? dtors might be good enough * How does I/O relate to the Iterator trait? * std::base64 filters +* Using conditions is a big unknown since we don't have much experience with them */ diff --git a/src/libcore/rt/mod.rs b/src/libcore/rt/mod.rs index ab89a4c26a54d..56ed7dc95b6df 100644 --- a/src/libcore/rt/mod.rs +++ b/src/libcore/rt/mod.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +/*! The Rust runtime, including the scheduler and I/O interface */ + #[doc(hidden)]; use libc::c_char; From 354460e53b8de468db77433e97e7cdf809c68ccd Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Tue, 23 Apr 2013 20:41:00 -0700 Subject: [PATCH 031/410] Tidy --- src/libcore/rt/uvio.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libcore/rt/uvio.rs b/src/libcore/rt/uvio.rs index 54f3276c31752..984ae55399ceb 100644 --- a/src/libcore/rt/uvio.rs +++ b/src/libcore/rt/uvio.rs @@ -439,7 +439,7 @@ fn test_read_read_read() { do run_in_newsched_task { let addr = next_test_ip4(); static MAX: uint = 500000; - + do spawntask_immediately { unsafe { let io = local_sched::unsafe_borrow_io(); From 34f7255afa4aa80ade1f98b99f0f54cb424b129e Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Tue, 23 Apr 2013 22:51:48 -0700 Subject: [PATCH 032/410] mk: reorganize doc build to fix dependencies. #6042 Most of our documentation requires both pandoc and node.js. This simplifies the logic around those checks and fixes an error when building without node.js but with pandoc. --- mk/docs.mk | 71 +++++++++++++++++++++++++----------------------------- 1 file changed, 33 insertions(+), 38 deletions(-) diff --git a/mk/docs.mk b/mk/docs.mk index 6873d433e951f..252f62cf87116 100644 --- a/mk/docs.mk +++ b/mk/docs.mk @@ -16,15 +16,8 @@ DOCS := ###################################################################### -# Pandoc (reference-manual related) +# Docs, from pandoc, rustdoc (which runs pandoc), and node ###################################################################### -ifeq ($(CFG_PANDOC),) - $(info cfg: no pandoc found, omitting doc/rust.pdf) -else - - ifeq ($(CFG_NODE),) - $(info cfg: no node found, omitting doc/tutorial.html) - else doc/rust.css: rust.css @$(call E, cp: $@) @@ -34,6 +27,18 @@ doc/manual.css: manual.css @$(call E, cp: $@) $(Q)cp -a $< $@ 2> /dev/null +ifeq ($(CFG_PANDOC),) + $(info cfg: no pandoc found, omitting docs) + NO_DOCS = 1 +endif + +ifeq ($(CFG_NODE),) + $(info cfg: no node found, omitting docs) + NO_DOCS = 1 +endif + +ifneq ($(NO_DOCS),1) + DOCS += doc/rust.html doc/rust.html: rust.md doc/version_info.html doc/rust.css doc/manual.css @$(call E, pandoc: $@) @@ -47,17 +52,6 @@ doc/rust.html: rust.md doc/version_info.html doc/rust.css doc/manual.css --css=manual.css \ --include-before-body=doc/version_info.html \ --output=$@ - endif - - ifeq ($(CFG_PDFLATEX),) - $(info cfg: no pdflatex found, omitting doc/rust.pdf) - else - ifeq ($(CFG_XETEX),) - $(info cfg: no xetex found, disabling doc/rust.pdf) - else - ifeq ($(CFG_LUATEX),) - $(info cfg: lacking luatex, disabling pdflatex) - else DOCS += doc/rust.pdf doc/rust.tex: rust.md doc/version.md @@ -70,17 +64,6 @@ doc/rust.tex: rust.md doc/version.md --from=markdown --to=latex \ --output=$@ -doc/rust.pdf: doc/rust.tex - @$(call E, pdflatex: $@) - $(Q)$(CFG_PDFLATEX) \ - -interaction=batchmode \ - -output-directory=doc \ - $< - - endif - endif - endif - DOCS += doc/rustpkg.html doc/rustpkg.html: rustpkg.md doc/version_info.html doc/rust.css doc/manual.css @$(call E, pandoc: $@) @@ -95,13 +78,6 @@ doc/rustpkg.html: rustpkg.md doc/version_info.html doc/rust.css doc/manual.css --include-before-body=doc/version_info.html \ --output=$@ -###################################################################### -# Node (tutorial related) -###################################################################### - ifeq ($(CFG_NODE),) - $(info cfg: no node found, omitting doc/tutorial.html) - else - DOCS += doc/tutorial.html doc/tutorial.html: tutorial.md doc/version_info.html doc/rust.css @$(call E, pandoc: $@) @@ -153,9 +129,28 @@ doc/tutorial-tasks.html: tutorial-tasks.md doc/version_info.html doc/rust.css --include-before-body=doc/version_info.html \ --output=$@ + ifeq ($(CFG_PDFLATEX),) + $(info cfg: no pdflatex found, omitting doc/rust.pdf) + else + ifeq ($(CFG_XETEX),) + $(info cfg: no xetex found, disabling doc/rust.pdf) + else + ifeq ($(CFG_LUATEX),) + $(info cfg: lacking luatex, disabling pdflatex) + else + +doc/rust.pdf: doc/rust.tex + @$(call E, pdflatex: $@) + $(Q)$(CFG_PDFLATEX) \ + -interaction=batchmode \ + -output-directory=doc \ + $< + + endif + endif endif -endif +endif # No pandoc / node ###################################################################### # LLnextgen (grammar analysis from refman) From 1962803854bcf7245013f8a1377c0ade845b5c54 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Wed, 24 Apr 2013 12:11:33 -0700 Subject: [PATCH 033/410] core: Warning police --- src/libcore/condition.rs | 2 ++ src/libcore/rt/io/file.rs | 2 +- src/libcore/rt/io/net/tcp.rs | 3 --- src/libcore/rt/io/net/udp.rs | 1 - src/libcore/rt/io/net/unix.rs | 1 - src/libcore/rt/local_services.rs | 2 +- src/libcore/rt/test.rs | 2 -- src/libcore/rt/uvio.rs | 3 +-- src/libcore/task/local_data.rs | 1 - 9 files changed, 5 insertions(+), 12 deletions(-) diff --git a/src/libcore/condition.rs b/src/libcore/condition.rs index c639239981cab..1240fe03dd54d 100644 --- a/src/libcore/condition.rs +++ b/src/libcore/condition.rs @@ -206,10 +206,12 @@ mod test { fn test_conditions_are_public() { let mut trapped = false; do sadness::cond.trap(|_| { + trapped = true; 0 }).in { sadness::cond.raise(0); } + assert!(trapped); } } } diff --git a/src/libcore/rt/io/file.rs b/src/libcore/rt/io/file.rs index e4fe066a173f4..85dc180452ffc 100644 --- a/src/libcore/rt/io/file.rs +++ b/src/libcore/rt/io/file.rs @@ -11,7 +11,7 @@ use prelude::*; use super::support::PathLike; use super::{Reader, Writer, Seek, Close}; -use super::{IoError, SeekStyle}; +use super::SeekStyle; /// # XXX /// * Ugh, this is ridiculous. What is the best way to represent these options? diff --git a/src/libcore/rt/io/net/tcp.rs b/src/libcore/rt/io/net/tcp.rs index d726bae821c87..c95b4344fe75d 100644 --- a/src/libcore/rt/io/net/tcp.rs +++ b/src/libcore/rt/io/net/tcp.rs @@ -9,7 +9,6 @@ // except according to those terms. use prelude::*; -use super::*; use super::super::*; use super::ip::IpAddr; @@ -51,8 +50,6 @@ impl Listener for TcpListener { #[cfg(test)] mod test { - use super::*; - use rt::test::*; #[test] #[ignore] fn smoke_test() { diff --git a/src/libcore/rt/io/net/udp.rs b/src/libcore/rt/io/net/udp.rs index 8691a697e8888..0cb2978fb1a68 100644 --- a/src/libcore/rt/io/net/udp.rs +++ b/src/libcore/rt/io/net/udp.rs @@ -9,7 +9,6 @@ // except according to those terms. use prelude::*; -use super::*; use super::super::*; use super::ip::IpAddr; diff --git a/src/libcore/rt/io/net/unix.rs b/src/libcore/rt/io/net/unix.rs index bb3db6ec0d502..262816beecc98 100644 --- a/src/libcore/rt/io/net/unix.rs +++ b/src/libcore/rt/io/net/unix.rs @@ -9,7 +9,6 @@ // except according to those terms. use prelude::*; -use super::*; use super::super::*; use super::super::support::PathLike; diff --git a/src/libcore/rt/local_services.rs b/src/libcore/rt/local_services.rs index 8a6277c209417..a03bc6c409f8b 100644 --- a/src/libcore/rt/local_services.rs +++ b/src/libcore/rt/local_services.rs @@ -21,7 +21,7 @@ use prelude::*; use libc::{c_void, uintptr_t}; use cast::transmute; -use super::sched::{Task, local_sched}; +use super::sched::local_sched; use super::local_heap::LocalHeap; pub struct LocalServices { diff --git a/src/libcore/rt/test.rs b/src/libcore/rt/test.rs index f7ba881f84edb..63db705408800 100644 --- a/src/libcore/rt/test.rs +++ b/src/libcore/rt/test.rs @@ -35,7 +35,6 @@ pub fn run_in_newsched_task(f: ~fn()) { /// Test tasks will abort on failure instead of unwinding pub fn spawntask(f: ~fn()) { - use super::*; use super::sched::*; let mut sched = local_sched::take(); @@ -51,7 +50,6 @@ pub fn spawntask(f: ~fn()) { /// Create a new task and run it right now. Aborts on failure pub fn spawntask_immediately(f: ~fn()) { - use super::*; use super::sched::*; let mut sched = local_sched::take(); diff --git a/src/libcore/rt/uvio.rs b/src/libcore/rt/uvio.rs index 984ae55399ceb..94f8c0bf707dd 100644 --- a/src/libcore/rt/uvio.rs +++ b/src/libcore/rt/uvio.rs @@ -11,7 +11,7 @@ use option::*; use result::*; -use super::io::net::ip::{IpAddr, Ipv4}; // n.b. Ipv4 is used only in tests +use super::io::net::ip::IpAddr; use super::uv::*; use super::rtio::*; use ops::Drop; @@ -21,7 +21,6 @@ use super::sched::{Scheduler, local_sched}; #[cfg(test)] use uint; #[cfg(test)] use unstable::run_in_bare_thread; -#[cfg(test)] use super::sched::Task; #[cfg(test)] use super::test::*; pub struct UvEventLoop { diff --git a/src/libcore/task/local_data.rs b/src/libcore/task/local_data.rs index 65e6893191575..dff5908c04796 100644 --- a/src/libcore/task/local_data.rs +++ b/src/libcore/task/local_data.rs @@ -28,7 +28,6 @@ magic. use prelude::*; use task::local_data_priv::{local_get, local_pop, local_modify, local_set, Handle}; -use task::rt; /** * Indexes a task-local data slot. The function's code pointer is used for From 08659f5acc42e9ed73c85359a2b1f02e5484dbb0 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Wed, 24 Apr 2013 12:11:55 -0700 Subject: [PATCH 034/410] core: Turn off rtdebug logging Accidentally left in on at some point --- src/libcore/macros.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libcore/macros.rs b/src/libcore/macros.rs index e1276a75e0557..b19a753b71577 100644 --- a/src/libcore/macros.rs +++ b/src/libcore/macros.rs @@ -11,7 +11,7 @@ #[macro_escape]; // Some basic logging -macro_rules! rtdebug ( +macro_rules! rtdebug_ ( ($( $arg:expr),+) => ( { dumb_println(fmt!( $($arg),+ )); @@ -26,7 +26,7 @@ macro_rules! rtdebug ( ) // An alternate version with no output, for turning off logging -macro_rules! rtdebug_ ( +macro_rules! rtdebug ( ($( $arg:expr),+) => ( $(let _ = $arg)*; ) ) From 436657b5f04a6d7504cfc00224c26910569c67eb Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Wed, 24 Apr 2013 15:34:02 -0700 Subject: [PATCH 035/410] Rename cleanup_task_local_map_ to cleanup_task_local_map_extern_cb Per pcwalton's suggestion. --- src/libcore/task/local_data_priv.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libcore/task/local_data_priv.rs b/src/libcore/task/local_data_priv.rs index e32d18719bd00..fdf1fa2a53273 100644 --- a/src/libcore/task/local_data_priv.rs +++ b/src/libcore/task/local_data_priv.rs @@ -83,7 +83,7 @@ unsafe fn get_local_map(handle: Handle) -> TaskLocalMap { unsafe fn get_task_local_map(task: *rust_task) -> TaskLocalMap { - extern fn cleanup_task_local_map_(map_ptr: *libc::c_void) { + extern fn cleanup_task_local_map_extern_cb(map_ptr: *libc::c_void) { cleanup_task_local_map(map_ptr); } @@ -97,7 +97,7 @@ unsafe fn get_task_local_map(task: *rust_task) -> TaskLocalMap { // Use reinterpret_cast -- transmute would take map away from us also. rt::rust_set_task_local_data( task, cast::transmute(map)); - rt::rust_task_local_data_atexit(task, cleanup_task_local_map_); + rt::rust_task_local_data_atexit(task, cleanup_task_local_map_extern_cb); // Also need to reference it an extra time to keep it for now. let nonmut = cast::transmute::]>(map); From abc49fdfae0b80acfa010fd6151ff8ffc229c03b Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Wed, 24 Apr 2013 21:33:03 -0700 Subject: [PATCH 036/410] rt: abort doesn't take an argument --- src/rt/rust_builtin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rt/rust_builtin.cpp b/src/rt/rust_builtin.cpp index 2097d8dd93335..8b7b89680fcca 100644 --- a/src/rt/rust_builtin.cpp +++ b/src/rt/rust_builtin.cpp @@ -909,7 +909,7 @@ rust_begin_unwind(uintptr_t token) { #ifndef __WIN32__ throw token; #else - abort("failing on win32"); + abort(); #endif } From 00ede34fcb4d6de11e49360964565c8e487a678e Mon Sep 17 00:00:00 2001 From: James Miller Date: Mon, 29 Apr 2013 12:57:49 +1200 Subject: [PATCH 037/410] Add `--linker` option to pass flags to the linker --- src/librustc/back/link.rs | 3 + src/librustc/driver/driver.rs | 118 ++++++++++++++++++--------------- src/librustc/driver/session.rs | 2 + 3 files changed, 70 insertions(+), 53 deletions(-) diff --git a/src/librustc/back/link.rs b/src/librustc/back/link.rs index 8c442f2d5c9f3..aaa425c93348a 100644 --- a/src/librustc/back/link.rs +++ b/src/librustc/back/link.rs @@ -904,6 +904,9 @@ pub fn link_binary(sess: Session, // extern libraries might live, based on the addl_lib_search_paths cc_args.push_all(rpath::get_rpath_flags(sess, &output)); + // Finally add all the linker arguments provided on the command line + cc_args.push_all(sess.opts.linker_args); + debug!("%s link args: %s", cc_prog, str::connect(cc_args, ~" ")); // We run 'cc' here let prog = run::program_output(cc_prog, cc_args); diff --git a/src/librustc/driver/driver.rs b/src/librustc/driver/driver.rs index a6c061fee1e8e..fbcbd4461ac10 100644 --- a/src/librustc/driver/driver.rs +++ b/src/librustc/driver/driver.rs @@ -645,9 +645,16 @@ pub fn build_session_options(binary: @~str, Some(s) => s }; - let addl_lib_search_paths = - getopts::opt_strs(matches, ~"L") - .map(|s| Path(*s)); + let addl_lib_search_paths = getopts::opt_strs(matches, ~"L").map(|s| Path(*s)); + + let linker_args = getopts::opt_strs(matches, ~"linker").flat_map( |a| { + let mut args = ~[]; + for str::each_split_char(*a, ',') |arg| { + args.push(str::from_slice(arg)); + } + args + }); + let cfg = parse_cfgspecs(getopts::opt_strs(matches, ~"cfg"), demitter); let test = opt_present(matches, ~"test"); let android_cross_path = getopts::opt_maybe_str( @@ -664,6 +671,7 @@ pub fn build_session_options(binary: @~str, jit: jit, output_type: output_type, addl_lib_search_paths: addl_lib_search_paths, + linker_args: linker_args, maybe_sysroot: sysroot_opt, target_triple: target, target_feature: target_feature, @@ -737,62 +745,66 @@ pub fn parse_pretty(sess: Session, name: &str) -> pp_mode { // rustc command line options pub fn optgroups() -> ~[getopts::groups::OptGroup] { ~[ - optflag(~"", ~"bin", ~"Compile an executable crate (default)"), - optflag(~"c", ~"", ~"Compile and assemble, but do not link"), - optmulti(~"", ~"cfg", ~"Configure the compilation - environment", ~"SPEC"), - optflag(~"", ~"emit-llvm", - ~"Produce an LLVM bitcode file"), - optflag(~"h", ~"help",~"Display this message"), - optmulti(~"L", ~"", ~"Add a directory to the library search path", - ~"PATH"), - optflag(~"", ~"lib", ~"Compile a library crate"), - optflag(~"", ~"ls", ~"List the symbols defined by a library crate"), - optflag(~"", ~"no-trans", - ~"Run all passes except translation; no output"), - optflag(~"O", ~"", ~"Equivalent to --opt-level=2"), - optopt(~"o", ~"", ~"Write output to ", ~"FILENAME"), - optopt(~"", ~"opt-level", - ~"Optimize with possible levels 0-3", ~"LEVEL"), - optopt( ~"", ~"out-dir", - ~"Write output to compiler-chosen filename - in ", ~"DIR"), - optflag(~"", ~"parse-only", - ~"Parse only; do not compile, assemble, or link"), - optflagopt(~"", ~"pretty", - ~"Pretty-print the input instead of compiling; + optflag("", "bin", "Compile an executable crate (default)"), + optflag("c", "", "Compile and assemble, but do not link"), + optmulti("", "cfg", "Configure the compilation + environment", "SPEC"), + optflag("", "emit-llvm", + "Produce an LLVM bitcode file"), + optflag("h", "help","Display this message"), + optmulti("L", "", "Add a directory to the library search path", + "PATH"), + optflag("", "lib", "Compile a library crate"), + optmulti("", "linker", "FLAGS is a comma-separated list of flags + passed to the linker", "FLAGS"), + optflag("", "ls", "List the symbols defined by a library crate"), + optflag("", "no-trans", + "Run all passes except translation; no output"), + optflag("O", "", "Equivalent to --opt-level=2"), + optopt("o", "", "Write output to ", "FILENAME"), + optopt("", "opt-level", + "Optimize with possible levels 0-3", "LEVEL"), + optopt( "", "out-dir", + "Write output to compiler-chosen filename + in ", "DIR"), + optflag("", "parse-only", + "Parse only; do not compile, assemble, or link"), + optflagopt("", "pretty", + "Pretty-print the input instead of compiling; valid types are: normal (un-annotated source), expanded (crates expanded), typed (crates expanded, with type annotations), or identified (fully parenthesized, - AST nodes and blocks with IDs)", ~"TYPE"), - optflag(~"S", ~"", ~"Compile only; do not assemble or link"), - optflag(~"", ~"save-temps", - ~"Write intermediate files (.bc, .opt.bc, .o) + AST nodes and blocks with IDs)", "TYPE"), + optflag("", "print-link-args", "Prints all the arguments that would be + passed to the linker."), + optflag("S", "", "Compile only; do not assemble or link"), + optflag("", "save-temps", + "Write intermediate files (.bc, .opt.bc, .o) in addition to normal output"), - optopt(~"", ~"sysroot", - ~"Override the system root", ~"PATH"), - optflag(~"", ~"test", ~"Build a test harness"), - optopt(~"", ~"target", - ~"Target triple cpu-manufacturer-kernel[-os] + optopt("", "sysroot", + "Override the system root", "PATH"), + optflag("", "test", "Build a test harness"), + optopt("", "target", + "Target triple cpu-manufacturer-kernel[-os] to compile for (see chapter 3.4 of http://www.sourceware.org/autobook/ - for detail)", ~"TRIPLE"), - optopt(~"", ~"target-feature", - ~"Target specific attributes (llc -mattr=help - for detail)", ~"FEATURE"), - optopt(~"", ~"android-cross-path", - ~"The path to the Android NDK", "PATH"), - optmulti(~"W", ~"warn", - ~"Set lint warnings", ~"OPT"), - optmulti(~"A", ~"allow", - ~"Set lint allowed", ~"OPT"), - optmulti(~"D", ~"deny", - ~"Set lint denied", ~"OPT"), - optmulti(~"F", ~"forbid", - ~"Set lint forbidden", ~"OPT"), - optmulti(~"Z", ~"", ~"Set internal debugging options", "FLAG"), - optflag( ~"v", ~"version", - ~"Print version info and exit"), + for detail)", "TRIPLE"), + optopt("", "target-feature", + "Target specific attributes (llc -mattr=help + for detail)", "FEATURE"), + optopt("", "android-cross-path", + "The path to the Android NDK", "PATH"), + optmulti("W", "warn", + "Set lint warnings", "OPT"), + optmulti("A", "allow", + "Set lint allowed", "OPT"), + optmulti("D", "deny", + "Set lint denied", "OPT"), + optmulti("F", "forbid", + "Set lint forbidden", "OPT"), + optmulti("Z", "", "Set internal debugging options", "FLAG"), + optflag( "v", "version", + "Print version info and exit"), ] } diff --git a/src/librustc/driver/session.rs b/src/librustc/driver/session.rs index 55c81e6d17b20..94d1da20f9268 100644 --- a/src/librustc/driver/session.rs +++ b/src/librustc/driver/session.rs @@ -122,6 +122,7 @@ pub struct options { jit: bool, output_type: back::link::output_type, addl_lib_search_paths: ~[Path], + linker_args: ~[~str], maybe_sysroot: Option, target_triple: ~str, target_feature: ~str, @@ -299,6 +300,7 @@ pub fn basic_options() -> @options { jit: false, output_type: link::output_type_exe, addl_lib_search_paths: ~[], + linker_args:~[], maybe_sysroot: None, target_triple: host_triple(), target_feature: ~"", From edc11a9f09060b355010b8cc71da45c4f35eadf0 Mon Sep 17 00:00:00 2001 From: Tim Chevalier Date: Wed, 17 Apr 2013 19:36:59 -0700 Subject: [PATCH 038/410] rustc: Suppress derived pattern-match-checking errors typeck::check::_match wasn't suppressing derived errors properly. Fixed it. --- src/librustc/middle/typeck/check/_match.rs | 174 ++++++++++++--------- src/librustc/middle/typeck/infer/mod.rs | 25 +-- src/test/compile-fail/issue-5100.rs | 44 ++++++ 3 files changed, 164 insertions(+), 79 deletions(-) create mode 100644 src/test/compile-fail/issue-5100.rs diff --git a/src/librustc/middle/typeck/check/_match.rs b/src/librustc/middle/typeck/check/_match.rs index 7f0066a1aa272..7d2fd51cefed7 100644 --- a/src/librustc/middle/typeck/check/_match.rs +++ b/src/librustc/middle/typeck/check/_match.rs @@ -175,11 +175,18 @@ pub fn check_pat_variant(pcx: &pat_ctxt, pat: @ast::pat, path: @ast::Path, kind_name = "structure"; } _ => { - tcx.sess.span_fatal( - pat.span, - fmt!("mismatched types: expected `%s` but found enum or \ - structure", - fcx.infcx().ty_to_str(expected))); + let resolved_expected = + fcx.infcx().ty_to_str(fcx.infcx().resolve_type_vars_if_possible(expected)); + fcx.infcx().type_error_message_str(pat.span, + |actual| { + fmt!("mismatched types: expected `%s` but found %s", + resolved_expected, actual)}, + ~"an enum or structure pattern", + None); + fcx.write_error(pat.id); + kind_name = "[error]"; + arg_types = (copy subpats).get_or_default(~[]).map(|_| + ty::mk_err()); } } @@ -486,74 +493,44 @@ pub fn check_pat(pcx: &pat_ctxt, pat: @ast::pat, expected: ty::t) { } ast::pat_tup(ref elts) => { let s = structure_of(fcx, pat.span, expected); - let ex_elts = match s { - ty::ty_tup(ref elts) => elts, - _ => { - tcx.sess.span_fatal - (pat.span, - fmt!("mismatched types: expected `%s`, found tuple", - fcx.infcx().ty_to_str(expected))); - } - }; let e_count = elts.len(); - if e_count != ex_elts.len() { - tcx.sess.span_fatal - (pat.span, fmt!("mismatched types: expected a tuple \ - with %u fields, found one with %u \ - fields", ex_elts.len(), e_count)); - } - let mut i = 0u; - for elts.each |elt| { - check_pat(pcx, *elt, ex_elts[i]); - i += 1u; + match s { + ty::ty_tup(ref ex_elts) if e_count == ex_elts.len() => { + for elts.eachi |i, elt| { + check_pat(pcx, *elt, ex_elts[i]); + } + fcx.write_ty(pat.id, expected); + } + _ => { + for elts.each |elt| { + check_pat(pcx, *elt, ty::mk_err()); + } + let actual = ty::mk_tup(tcx, elts.map(|pat_var| { + fcx.node_ty(pat_var.id) + })); + // use terr_tuple_size if both types are tuples + let type_error = match s { + ty::ty_tup(ref ex_elts) => + ty::terr_tuple_size(ty::expected_found{expected: ex_elts.len(), + found: e_count}), + _ => ty::terr_mismatch + }; + fcx.infcx().report_mismatched_types(pat.span, + expected, + actual, + &type_error); + fcx.write_error(pat.id); + } } - - fcx.write_ty(pat.id, expected); } ast::pat_box(inner) => { - match structure_of(fcx, pat.span, expected) { - ty::ty_box(e_inner) => { - check_pat(pcx, inner, e_inner.ty); - fcx.write_ty(pat.id, expected); - } - _ => { - tcx.sess.span_fatal( - pat.span, - ~"mismatched types: expected `" + - fcx.infcx().ty_to_str(expected) + - ~"` found box"); - } - } + check_pointer_pat(pcx, At, inner, pat.id, pat.span, expected); } ast::pat_uniq(inner) => { - match structure_of(fcx, pat.span, expected) { - ty::ty_uniq(e_inner) => { - check_pat(pcx, inner, e_inner.ty); - fcx.write_ty(pat.id, expected); - } - _ => { - tcx.sess.span_fatal( - pat.span, - ~"mismatched types: expected `" + - fcx.infcx().ty_to_str(expected) + - ~"` found uniq"); - } - } + check_pointer_pat(pcx, Uniq, inner, pat.id, pat.span, expected); } ast::pat_region(inner) => { - match structure_of(fcx, pat.span, expected) { - ty::ty_rptr(_, e_inner) => { - check_pat(pcx, inner, e_inner.ty); - fcx.write_ty(pat.id, expected); - } - _ => { - tcx.sess.span_fatal( - pat.span, - ~"mismatched types: expected `" + - fcx.infcx().ty_to_str(expected) + - ~"` found borrowed pointer"); - } - } + check_pointer_pat(pcx, Borrowed, inner, pat.id, pat.span, expected); } ast::pat_vec(ref before, slice, ref after) => { let default_region_var = @@ -577,11 +554,25 @@ pub fn check_pat(pcx: &pat_ctxt, pat: @ast::pat, expected: ty::t) { (mt, default_region_var) }, _ => { - tcx.sess.span_fatal( - pat.span, - fmt!("mismatched type: expected `%s` but found vector", - fcx.infcx().ty_to_str(expected)) - ); + for before.each |&elt| { + check_pat(pcx, elt, ty::mk_err()); + } + for slice.each |&elt| { + check_pat(pcx, elt, ty::mk_err()); + } + for after.each |&elt| { + check_pat(pcx, elt, ty::mk_err()); + } + let resolved_expected = + fcx.infcx().ty_to_str(fcx.infcx().resolve_type_vars_if_possible(expected)); + fcx.infcx().type_error_message_str(pat.span, + |actual| { + fmt!("mismatched types: expected `%s` but found %s", + resolved_expected, actual)}, + ~"a vector pattern", + None); + fcx.write_error(pat.id); + return; } }; for before.each |elt| { @@ -605,3 +596,46 @@ pub fn check_pat(pcx: &pat_ctxt, pat: @ast::pat, expected: ty::t) { } } +// Helper function to check @, ~ and & patterns +pub fn check_pointer_pat(pcx: &pat_ctxt, + pointer_kind: PointerKind, + inner: @ast::pat, + pat_id: ast::node_id, + span: span, + expected: ty::t) { + let fcx = pcx.fcx; + let check_inner: &fn(ty::mt) = |e_inner| { + check_pat(pcx, inner, e_inner.ty); + fcx.write_ty(pat_id, expected); + }; + match structure_of(fcx, span, expected) { + ty::ty_box(e_inner) if pointer_kind == At => { + check_inner(e_inner); + } + ty::ty_uniq(e_inner) if pointer_kind == Uniq => { + check_inner(e_inner); + } + ty::ty_rptr(_, e_inner) if pointer_kind == Borrowed => { + check_inner(e_inner); + } + _ => { + check_pat(pcx, inner, ty::mk_err()); + let resolved_expected = + fcx.infcx().ty_to_str(fcx.infcx().resolve_type_vars_if_possible(expected)); + fcx.infcx().type_error_message_str(span, |actual| { + fmt!("mismatched types: expected `%s` but found %s", + resolved_expected, actual)}, + fmt!("an %s pattern", match pointer_kind { + At => "@-box", + Uniq => "~-box", + Borrowed => "&-pointer" + }), + None); + fcx.write_error(pat_id); + } + } +} + +#[deriving(Eq)] +enum PointerKind { At, Uniq, Borrowed } + diff --git a/src/librustc/middle/typeck/infer/mod.rs b/src/librustc/middle/typeck/infer/mod.rs index 7b5a93d4cad88..8f709e7cd5af1 100644 --- a/src/librustc/middle/typeck/infer/mod.rs +++ b/src/librustc/middle/typeck/infer/mod.rs @@ -749,25 +749,32 @@ pub impl InferCtxt { } } - fn type_error_message(@mut self, sp: span, mk_msg: &fn(~str) -> ~str, - actual_ty: ty::t, err: Option<&ty::type_err>) { - let actual_ty = self.resolve_type_vars_if_possible(actual_ty); - // Don't report an error if actual type is ty_err. - if ty::type_is_error(actual_ty) { - return; - } + fn type_error_message_str(@mut self, sp: span, mk_msg: &fn(~str) -> ~str, + actual_ty: ~str, err: Option<&ty::type_err>) { let error_str = err.map_default(~"", |t_err| fmt!(" (%s)", ty::type_err_to_str(self.tcx, *t_err))); self.tcx.sess.span_err(sp, - fmt!("%s%s", mk_msg(self.ty_to_str(actual_ty)), - error_str)); + fmt!("%s%s", mk_msg(actual_ty), error_str)); for err.each |err| { ty::note_and_explain_type_err(self.tcx, *err) } } + fn type_error_message(@mut self, sp: span, mk_msg: &fn(~str) -> ~str, + actual_ty: ty::t, err: Option<&ty::type_err>) { + let actual_ty = self.resolve_type_vars_if_possible(actual_ty); + + // Don't report an error if actual type is ty_err. + if ty::type_is_error(actual_ty) { + return; + } + + self.type_error_message_str(sp, mk_msg, self.ty_to_str(actual_ty), + err); + } + fn report_mismatched_types(@mut self, sp: span, e: ty::t, a: ty::t, err: &ty::type_err) { let resolved_expected = diff --git a/src/test/compile-fail/issue-5100.rs b/src/test/compile-fail/issue-5100.rs new file mode 100644 index 0000000000000..dbfdb38f7211f --- /dev/null +++ b/src/test/compile-fail/issue-5100.rs @@ -0,0 +1,44 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +enum A { B, C } + +fn main() { + match (true, false) { + B => (), //~ ERROR expected `(bool,bool)` but found an enum or structure pattern + _ => () + } + + match (true, false) { + (true, false, false) => () //~ ERROR mismatched types: expected `(bool,bool)` but found `(bool,bool,bool)` (expected a tuple with 2 elements but found one with 3 elements) + } + + match (true, false) { + @(true, false) => () //~ ERROR mismatched types: expected `(bool,bool)` but found an @-box pattern + } + + match (true, false) { + ~(true, false) => () //~ ERROR mismatched types: expected `(bool,bool)` but found a ~-box pattern + } + + match (true, false) { + &(true, false) => () //~ ERROR mismatched types: expected `(bool,bool)` but found an &-pointer pattern + } + + + let v = [('a', 'b') //~ ERROR expected function but found `(char,char)` + ('c', 'd'), + ('e', 'f')]; + + for v.each |&(x,y)| {} // should be OK + + // Make sure none of the errors above were fatal + let x: char = true; //~ ERROR expected `char` but found `bool` +} From e75203ce82357f6d0f81d5644e77d3c2efe53fcb Mon Sep 17 00:00:00 2001 From: James Miller Date: Mon, 29 Apr 2013 14:54:41 +1200 Subject: [PATCH 039/410] Adds '--print-link-args' that outputs linker arguments that would be used --- src/librustc/back/link.rs | 176 ++++++++++++++++++--------------- src/librustc/driver/driver.rs | 13 ++- src/librustc/driver/session.rs | 5 + 3 files changed, 114 insertions(+), 80 deletions(-) diff --git a/src/librustc/back/link.rs b/src/librustc/back/link.rs index aaa425c93348a..adaffe5873dab 100644 --- a/src/librustc/back/link.rs +++ b/src/librustc/back/link.rs @@ -747,6 +747,71 @@ pub fn link_binary(sess: Session, obj_filename: &Path, out_filename: &Path, lm: LinkMeta) { + // In the future, FreeBSD will use clang as default compiler. + // It would be flexible to use cc (system's default C compiler) + // instead of hard-coded gcc. + // For win32, there is no cc command, + // so we add a condition to make it use gcc. + let cc_prog: ~str = if sess.targ_cfg.os == session::os_android { + match &sess.opts.android_cross_path { + &Some(copy path) => { + fmt!("%s/bin/arm-linux-androideabi-gcc", path) + } + &None => { + sess.fatal(~"need Android NDK path for linking \ + (--android-cross-path)") + } + } + } else if sess.targ_cfg.os == session::os_win32 { ~"gcc" } + else { ~"cc" }; + // The invocations of cc share some flags across platforms + + + let output = if *sess.building_library { + let long_libname = output_dll_filename(sess.targ_cfg.os, lm); + debug!("link_meta.name: %s", lm.name); + debug!("long_libname: %s", long_libname); + debug!("out_filename: %s", out_filename.to_str()); + debug!("dirname(out_filename): %s", out_filename.dir_path().to_str()); + + out_filename.dir_path().push(long_libname) + } else { + /*bad*/copy *out_filename + }; + + debug!("output: %s", output.to_str()); + let mut cc_args = link_args(sess, obj_filename, out_filename, lm); + debug!("%s link args: %s", cc_prog, str::connect(cc_args, ~" ")); + // We run 'cc' here + let prog = run::program_output(cc_prog, cc_args); + if 0 != prog.status { + sess.err(fmt!("linking with `%s` failed with code %d", + cc_prog, prog.status)); + sess.note(fmt!("%s arguments: %s", + cc_prog, str::connect(cc_args, ~" "))); + sess.note(prog.err + prog.out); + sess.abort_if_errors(); + } + + // Clean up on Darwin + if sess.targ_cfg.os == session::os_macos { + run::run_program(~"dsymutil", ~[output.to_str()]); + } + + // Remove the temporary object file if we aren't saving temps + if !sess.opts.save_temps { + if ! os::remove_file(obj_filename) { + sess.warn(fmt!("failed to delete object file `%s`", + obj_filename.to_str())); + } + } +} + +pub fn link_args(sess: Session, + obj_filename: &Path, + out_filename: &Path, + lm:LinkMeta) -> ~[~str] { + // Converts a library file-stem into a cc -l argument fn unlib(config: @session::config, stem: ~str) -> ~str { if stem.starts_with("lib") && @@ -757,48 +822,23 @@ pub fn link_binary(sess: Session, } } + let output = if *sess.building_library { let long_libname = output_dll_filename(sess.targ_cfg.os, lm); - debug!("link_meta.name: %s", lm.name); - debug!("long_libname: %s", long_libname); - debug!("out_filename: %s", out_filename.to_str()); - debug!("dirname(out_filename): %s", out_filename.dir_path().to_str()); - out_filename.dir_path().push(long_libname) } else { /*bad*/copy *out_filename }; - debug!("output: %s", output.to_str()); - // The default library location, we need this to find the runtime. // The location of crates will be determined as needed. let stage: ~str = ~"-L" + sess.filesearch.get_target_lib_path().to_str(); - // In the future, FreeBSD will use clang as default compiler. - // It would be flexible to use cc (system's default C compiler) - // instead of hard-coded gcc. - // For win32, there is no cc command, - // so we add a condition to make it use gcc. - let cc_prog: ~str = if sess.targ_cfg.os == session::os_android { - match &sess.opts.android_cross_path { - &Some(copy path) => { - fmt!("%s/bin/arm-linux-androideabi-gcc", path) - } - &None => { - sess.fatal(~"need Android NDK path for linking \ - (--android-cross-path)") - } - } - } else if sess.targ_cfg.os == session::os_win32 { ~"gcc" } - else { ~"cc" }; - // The invocations of cc share some flags across platforms + let mut args = vec::append(~[stage], sess.targ_cfg.target_strs.cc_args); - let mut cc_args = - vec::append(~[stage], sess.targ_cfg.target_strs.cc_args); - cc_args.push(~"-o"); - cc_args.push(output.to_str()); - cc_args.push(obj_filename.to_str()); + args.push(~"-o"); + args.push(output.to_str()); + args.push(obj_filename.to_str()); let lib_cmd; let os = sess.targ_cfg.os; @@ -813,23 +853,23 @@ pub fn link_binary(sess: Session, let cstore = sess.cstore; for cstore::get_used_crate_files(cstore).each |cratepath| { if cratepath.filetype() == Some(~".rlib") { - cc_args.push(cratepath.to_str()); + args.push(cratepath.to_str()); loop; } let dir = cratepath.dirname(); - if dir != ~"" { cc_args.push(~"-L" + dir); } + if dir != ~"" { args.push(~"-L" + dir); } let libarg = unlib(sess.targ_cfg, cratepath.filestem().get()); - cc_args.push(~"-l" + libarg); + args.push(~"-l" + libarg); } let ula = cstore::get_used_link_args(cstore); - for ula.each |arg| { cc_args.push(/*bad*/copy *arg); } + for ula.each |arg| { args.push(/*bad*/copy *arg); } // Add all the link args for external crates. do cstore::iter_crate_data(cstore) |crate_num, _| { let link_args = csearch::get_link_args_for_crate(cstore, crate_num); do vec::consume(link_args) |_, link_arg| { - cc_args.push(link_arg); + args.push(link_arg); } } @@ -842,20 +882,20 @@ pub fn link_binary(sess: Session, // forces to make sure that library can be found at runtime. for sess.opts.addl_lib_search_paths.each |path| { - cc_args.push(~"-L" + path.to_str()); + args.push(~"-L" + path.to_str()); } // The names of the extern libraries let used_libs = cstore::get_used_libraries(cstore); - for used_libs.each |l| { cc_args.push(~"-l" + *l); } + for used_libs.each |l| { args.push(~"-l" + *l); } if *sess.building_library { - cc_args.push(lib_cmd); + args.push(lib_cmd); // On mac we need to tell the linker to let this library // be rpathed if sess.targ_cfg.os == session::os_macos { - cc_args.push(~"-Wl,-install_name,@rpath/" + args.push(~"-Wl,-install_name,@rpath/" + output.filename().get()); } } @@ -863,27 +903,27 @@ pub fn link_binary(sess: Session, // On linux librt and libdl are an indirect dependencies via rustrt, // and binutils 2.22+ won't add them automatically if sess.targ_cfg.os == session::os_linux { - cc_args.push_all(~[~"-lrt", ~"-ldl"]); + args.push_all(~[~"-lrt", ~"-ldl"]); // LLVM implements the `frem` instruction as a call to `fmod`, // which lives in libm. Similar to above, on some linuxes we // have to be explicit about linking to it. See #2510 - cc_args.push(~"-lm"); + args.push(~"-lm"); } else if sess.targ_cfg.os == session::os_android { - cc_args.push_all(~[~"-ldl", ~"-llog", ~"-lsupc++", + args.push_all(~[~"-ldl", ~"-llog", ~"-lsupc++", ~"-lgnustl_shared"]); - cc_args.push(~"-lm"); + args.push(~"-lm"); } if sess.targ_cfg.os == session::os_freebsd { - cc_args.push_all(~[~"-pthread", ~"-lrt", - ~"-L/usr/local/lib", ~"-lexecinfo", - ~"-L/usr/local/lib/gcc46", - ~"-L/usr/local/lib/gcc44", ~"-lstdc++", - ~"-Wl,-z,origin", - ~"-Wl,-rpath,/usr/local/lib/gcc46", - ~"-Wl,-rpath,/usr/local/lib/gcc44"]); + args.push_all(~[~"-pthread", ~"-lrt", + ~"-L/usr/local/lib", ~"-lexecinfo", + ~"-L/usr/local/lib/gcc46", + ~"-L/usr/local/lib/gcc44", ~"-lstdc++", + ~"-Wl,-z,origin", + ~"-Wl,-rpath,/usr/local/lib/gcc46", + ~"-Wl,-rpath,/usr/local/lib/gcc44"]); } // OS X 10.6 introduced 'compact unwind info', which is produced by the @@ -891,47 +931,25 @@ pub fn link_binary(sess: Session, // understand how to unwind our __morestack frame, so we have to turn it // off. This has impacted some other projects like GHC. if sess.targ_cfg.os == session::os_macos { - cc_args.push(~"-Wl,-no_compact_unwind"); + args.push(~"-Wl,-no_compact_unwind"); } // Stack growth requires statically linking a __morestack function - cc_args.push(~"-lmorestack"); + args.push(~"-lmorestack"); // Always want the runtime linked in - cc_args.push(~"-lrustrt"); + args.push(~"-lrustrt"); // FIXME (#2397): At some point we want to rpath our guesses as to where // extern libraries might live, based on the addl_lib_search_paths - cc_args.push_all(rpath::get_rpath_flags(sess, &output)); + args.push_all(rpath::get_rpath_flags(sess, &output)); // Finally add all the linker arguments provided on the command line - cc_args.push_all(sess.opts.linker_args); - - debug!("%s link args: %s", cc_prog, str::connect(cc_args, ~" ")); - // We run 'cc' here - let prog = run::program_output(cc_prog, cc_args); - if 0 != prog.status { - sess.err(fmt!("linking with `%s` failed with code %d", - cc_prog, prog.status)); - sess.note(fmt!("%s arguments: %s", - cc_prog, str::connect(cc_args, ~" "))); - sess.note(prog.err + prog.out); - sess.abort_if_errors(); - } + args.push_all(sess.opts.linker_args); - // Clean up on Darwin - if sess.targ_cfg.os == session::os_macos { - run::run_program(~"dsymutil", ~[output.to_str()]); - } - - // Remove the temporary object file if we aren't saving temps - if !sess.opts.save_temps { - if ! os::remove_file(obj_filename) { - sess.warn(fmt!("failed to delete object file `%s`", - obj_filename.to_str())); - } - } + return args; } + // // Local Variables: // mode: rust diff --git a/src/librustc/driver/driver.rs b/src/librustc/driver/driver.rs index fbcbd4461ac10..102b663161096 100644 --- a/src/librustc/driver/driver.rs +++ b/src/librustc/driver/driver.rs @@ -234,7 +234,6 @@ pub fn compile_rest(sess: Session, let rp_set = time(time_passes, ~"region parameterization inference", || middle::region::determine_rp_in_crate(sess, ast_map, def_map, crate)); - let outputs = outputs.get(); let (llmod, link_meta) = { @@ -309,6 +308,11 @@ pub fn compile_rest(sess: Session, }; + if (sess.opts.output_info & session::out_link_args) > 0 { + io::println(str::connect(link::link_args(sess, + &outputs.obj_filename, &outputs.out_filename, link_meta), " ")); + } + // NB: Android hack if sess.targ_cfg.arch == abi::Arm && (sess.opts.output_type == link::output_type_object || @@ -659,6 +663,12 @@ pub fn build_session_options(binary: @~str, let test = opt_present(matches, ~"test"); let android_cross_path = getopts::opt_maybe_str( matches, ~"android-cross-path"); + + let mut output_info = 0; + if opt_present(matches, "print-link-args") { + output_info |= session::out_link_args; + } + let sopts = @session::options { crate_type: crate_type, is_static: static, @@ -681,6 +691,7 @@ pub fn build_session_options(binary: @~str, parse_only: parse_only, no_trans: no_trans, debugging_opts: debugging_opts, + output_info: output_info, android_cross_path: android_cross_path }; return sopts; diff --git a/src/librustc/driver/session.rs b/src/librustc/driver/session.rs index 94d1da20f9268..19b99f46b5ed5 100644 --- a/src/librustc/driver/session.rs +++ b/src/librustc/driver/session.rs @@ -100,6 +100,9 @@ pub fn debugging_opts_map() -> ~[(~str, ~str, uint)] { ] } +// Information output flags +pub static out_link_args : uint = 1 << 0; + #[deriving(Eq)] pub enum OptLevel { No, // -O0 @@ -136,6 +139,7 @@ pub struct options { parse_only: bool, no_trans: bool, debugging_opts: uint, + output_info: uint, android_cross_path: Option<~str> } @@ -310,6 +314,7 @@ pub fn basic_options() -> @options { parse_only: false, no_trans: false, debugging_opts: 0u, + output_info: 0u, android_cross_path: None } } From c1fdace588034ae76f7ccb920ddadd9c2722a5cd Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Mon, 29 Apr 2013 13:35:32 -0700 Subject: [PATCH 040/410] core: Replace uses of 'drop' in task module with 'finally'. #5379 --- src/libcore/task/mod.rs | 77 +++++++++++------------------------------ 1 file changed, 21 insertions(+), 56 deletions(-) diff --git a/src/libcore/task/mod.rs b/src/libcore/task/mod.rs index 2163a0e325f13..c093dfd2644a1 100644 --- a/src/libcore/task/mod.rs +++ b/src/libcore/task/mod.rs @@ -42,6 +42,7 @@ use result; use task::rt::{task_id, sched_id, rust_task}; use util; use util::replace; +use unstable::finally::Finally; #[cfg(test)] use comm::SharedChan; @@ -591,48 +592,24 @@ pub fn get_scheduler() -> Scheduler { * ~~~ */ pub unsafe fn unkillable(f: &fn() -> U) -> U { - struct AllowFailure { - t: *rust_task, - drop { - unsafe { - rt::rust_task_allow_kill(self.t); - } - } - } - - fn AllowFailure(t: *rust_task) -> AllowFailure{ - AllowFailure { - t: t - } - } - let t = rt::rust_get_task(); - let _allow_failure = AllowFailure(t); - rt::rust_task_inhibit_kill(t); - f() + do (|| { + rt::rust_task_inhibit_kill(t); + f() + }).finally { + rt::rust_task_allow_kill(t); + } } /// The inverse of unkillable. Only ever to be used nested in unkillable(). pub unsafe fn rekillable(f: &fn() -> U) -> U { - struct DisallowFailure { - t: *rust_task, - drop { - unsafe { - rt::rust_task_inhibit_kill(self.t); - } - } - } - - fn DisallowFailure(t: *rust_task) -> DisallowFailure { - DisallowFailure { - t: t - } - } - let t = rt::rust_get_task(); - let _allow_failure = DisallowFailure(t); - rt::rust_task_allow_kill(t); - f() + do (|| { + rt::rust_task_allow_kill(t); + f() + }).finally { + rt::rust_task_inhibit_kill(t); + } } /** @@ -640,27 +617,15 @@ pub unsafe fn rekillable(f: &fn() -> U) -> U { * For use with exclusive ARCs, which use pthread mutexes directly. */ pub unsafe fn atomically(f: &fn() -> U) -> U { - struct DeferInterrupts { - t: *rust_task, - drop { - unsafe { - rt::rust_task_allow_yield(self.t); - rt::rust_task_allow_kill(self.t); - } - } - } - - fn DeferInterrupts(t: *rust_task) -> DeferInterrupts { - DeferInterrupts { - t: t - } - } - let t = rt::rust_get_task(); - let _interrupts = DeferInterrupts(t); - rt::rust_task_inhibit_kill(t); - rt::rust_task_inhibit_yield(t); - f() + do (|| { + rt::rust_task_inhibit_kill(t); + rt::rust_task_inhibit_yield(t); + f() + }).finally { + rt::rust_task_allow_yield(t); + rt::rust_task_allow_kill(t); + } } #[test] #[should_fail] #[ignore(cfg(windows))] From d8024e2c3b89b3ad517b76a5495f2bcb2d6a7690 Mon Sep 17 00:00:00 2001 From: Tim Chevalier Date: Mon, 29 Apr 2013 14:23:22 -0700 Subject: [PATCH 041/410] rustc: Change At to Managed and Uniq to Owned --- src/librustc/middle/typeck/check/_match.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/librustc/middle/typeck/check/_match.rs b/src/librustc/middle/typeck/check/_match.rs index 7d2fd51cefed7..e73cf440d4071 100644 --- a/src/librustc/middle/typeck/check/_match.rs +++ b/src/librustc/middle/typeck/check/_match.rs @@ -524,10 +524,10 @@ pub fn check_pat(pcx: &pat_ctxt, pat: @ast::pat, expected: ty::t) { } } ast::pat_box(inner) => { - check_pointer_pat(pcx, At, inner, pat.id, pat.span, expected); + check_pointer_pat(pcx, Managed, inner, pat.id, pat.span, expected); } ast::pat_uniq(inner) => { - check_pointer_pat(pcx, Uniq, inner, pat.id, pat.span, expected); + check_pointer_pat(pcx, Owned, inner, pat.id, pat.span, expected); } ast::pat_region(inner) => { check_pointer_pat(pcx, Borrowed, inner, pat.id, pat.span, expected); @@ -609,10 +609,10 @@ pub fn check_pointer_pat(pcx: &pat_ctxt, fcx.write_ty(pat_id, expected); }; match structure_of(fcx, span, expected) { - ty::ty_box(e_inner) if pointer_kind == At => { + ty::ty_box(e_inner) if pointer_kind == Managed => { check_inner(e_inner); } - ty::ty_uniq(e_inner) if pointer_kind == Uniq => { + ty::ty_uniq(e_inner) if pointer_kind == Owned => { check_inner(e_inner); } ty::ty_rptr(_, e_inner) if pointer_kind == Borrowed => { @@ -626,8 +626,8 @@ pub fn check_pointer_pat(pcx: &pat_ctxt, fmt!("mismatched types: expected `%s` but found %s", resolved_expected, actual)}, fmt!("an %s pattern", match pointer_kind { - At => "@-box", - Uniq => "~-box", + Managed => "@-box", + Owned => "~-box", Borrowed => "&-pointer" }), None); @@ -637,5 +637,5 @@ pub fn check_pointer_pat(pcx: &pat_ctxt, } #[deriving(Eq)] -enum PointerKind { At, Uniq, Borrowed } +enum PointerKind { Managed, Owned, Borrowed } From be8dc615c566104c528ca8389fa0807c8453c8a8 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Mon, 29 Apr 2013 14:56:05 -0700 Subject: [PATCH 042/410] rustc: Move code for discovering the crate entry point into its own pass It doesn't have anything to do with resolve and the logic will likely get more involved in the future, after #4433 --- src/librustc/driver/driver.rs | 2 + src/librustc/middle/entry.rs | 119 +++++++++++++++++++++++++++++++++ src/librustc/middle/resolve.rs | 79 ---------------------- src/librustc/rustc.rc | 1 + 4 files changed, 122 insertions(+), 79 deletions(-) create mode 100644 src/librustc/middle/entry.rs diff --git a/src/librustc/driver/driver.rs b/src/librustc/driver/driver.rs index 2e64c0c45bffe..e421246da8da3 100644 --- a/src/librustc/driver/driver.rs +++ b/src/librustc/driver/driver.rs @@ -225,6 +225,8 @@ pub fn compile_rest(sess: Session, time(time_passes, ~"resolution", || middle::resolve::resolve_crate(sess, lang_items, crate)); + time(time_passes, ~"looking for entry point", || middle::entry::find_entry_point(sess, crate)); + let freevars = time(time_passes, ~"freevar finding", || freevars::annotate_freevars(def_map, crate)); diff --git a/src/librustc/middle/entry.rs b/src/librustc/middle/entry.rs new file mode 100644 index 0000000000000..18f4a5a307200 --- /dev/null +++ b/src/librustc/middle/entry.rs @@ -0,0 +1,119 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +use driver::session; +use driver::session::Session; +use syntax::parse::token::special_idents; +use syntax::ast::{crate, node_id, item, item_fn}; +use syntax::codemap::span; +use syntax::visit::{default_visitor, mk_vt, vt, Visitor, visit_crate, visit_item}; +use syntax::attr::{attrs_contains_name}; + +struct EntryContext { + session: Session, + + // The function that has attribute named 'main' + attr_main_fn: Option<(node_id, span)>, + + // The functions that could be main functions + main_fns: ~[Option<(node_id, span)>], + + // The function that has the attribute 'start' on it + start_fn: Option<(node_id, span)>, +} + +type EntryVisitor = vt<@mut EntryContext>; + +pub fn find_entry_point(session: Session, crate: @crate) { + + let ctxt = @mut EntryContext { + session: session, + attr_main_fn: None, + main_fns: ~[], + start_fn: None, + }; + + visit_crate(crate, ctxt, mk_vt(@Visitor { + visit_item: |item, ctxt, visitor| find_item(item, ctxt, visitor), + .. *default_visitor() + })); + + check_duplicate_main(ctxt); +} + +fn find_item(item: @item, ctxt: @mut EntryContext, visitor: EntryVisitor) { + match item.node { + item_fn(*) => { + // If this is the main function, we must record it in the + // session. + + // FIXME #4404 android JNI hacks + if !*ctxt.session.building_library || + ctxt.session.targ_cfg.os == session::os_android { + + if ctxt.attr_main_fn.is_none() && + item.ident == special_idents::main { + + ctxt.main_fns.push(Some((item.id, item.span))); + } + + if attrs_contains_name(item.attrs, ~"main") { + if ctxt.attr_main_fn.is_none() { + ctxt.attr_main_fn = Some((item.id, item.span)); + } else { + ctxt.session.span_err( + item.span, + ~"multiple 'main' functions"); + } + } + + if attrs_contains_name(item.attrs, ~"start") { + if ctxt.start_fn.is_none() { + ctxt.start_fn = Some((item.id, item.span)); + } else { + ctxt.session.span_err( + item.span, + ~"multiple 'start' functions"); + } + } + } + } + _ => () + } + + visit_item(item, ctxt, visitor); +} + +// main function checking +// +// be sure that there is only one main function +fn check_duplicate_main(ctxt: @mut EntryContext) { + let this = &mut *ctxt; + if this.attr_main_fn.is_none() && this.start_fn.is_none() { + if this.main_fns.len() >= 1u { + let mut i = 1u; + while i < this.main_fns.len() { + let (_, dup_main_span) = this.main_fns[i].unwrap(); + this.session.span_err( + dup_main_span, + ~"multiple 'main' functions"); + i += 1; + } + *this.session.entry_fn = this.main_fns[0]; + *this.session.entry_type = Some(session::EntryMain); + } + } else if !this.start_fn.is_none() { + *this.session.entry_fn = this.start_fn; + *this.session.entry_type = Some(session::EntryStart); + } else { + *this.session.entry_fn = this.attr_main_fn; + *this.session.entry_type = Some(session::EntryMain); + } +} diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs index 5354ffc5d3c82..b0dd627c59f6a 100644 --- a/src/librustc/middle/resolve.rs +++ b/src/librustc/middle/resolve.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use driver::session; use driver::session::Session; use metadata::csearch::{each_path, get_trait_method_def_ids}; use metadata::csearch::get_method_name_and_self_ty; @@ -794,11 +793,6 @@ pub fn Resolver(session: Session, namespaces: ~[ TypeNS, ValueNS ], - attr_main_fn: None, - main_fns: ~[], - - start_fn: None, - def_map: @mut HashMap::new(), export_map2: @mut HashMap::new(), trait_map: HashMap::new(), @@ -856,15 +850,6 @@ pub struct Resolver { // The four namespaces. namespaces: ~[Namespace], - // The function that has attribute named 'main' - attr_main_fn: Option<(node_id, span)>, - - // The functions that could be main functions - main_fns: ~[Option<(node_id, span)>], - - // The function that has the attribute 'start' on it - start_fn: Option<(node_id, span)>, - def_map: DefMap, export_map2: ExportMap2, trait_map: TraitMap, @@ -885,7 +870,6 @@ pub impl Resolver { self.resolve_crate(); self.session.abort_if_errors(); - self.check_duplicate_main(); self.check_for_unused_imports_if_necessary(); } @@ -3545,40 +3529,6 @@ pub impl Resolver { } item_fn(ref fn_decl, _, _, ref generics, ref block) => { - // If this is the main function, we must record it in the - // session. - - // FIXME #4404 android JNI hacks - if !*self.session.building_library || - self.session.targ_cfg.os == session::os_android { - - if self.attr_main_fn.is_none() && - item.ident == special_idents::main { - - self.main_fns.push(Some((item.id, item.span))); - } - - if attrs_contains_name(item.attrs, ~"main") { - if self.attr_main_fn.is_none() { - self.attr_main_fn = Some((item.id, item.span)); - } else { - self.session.span_err( - item.span, - ~"multiple 'main' functions"); - } - } - - if attrs_contains_name(item.attrs, ~"start") { - if self.start_fn.is_none() { - self.start_fn = Some((item.id, item.span)); - } else { - self.session.span_err( - item.span, - ~"multiple 'start' functions"); - } - } - } - self.resolve_function(OpaqueFunctionRibKind, Some(fn_decl), HasTypeParameters @@ -5109,35 +5059,6 @@ pub impl Resolver { } } - // - // main function checking - // - // be sure that there is only one main function - // - fn check_duplicate_main(@mut self) { - let this = &mut *self; - if this.attr_main_fn.is_none() && this.start_fn.is_none() { - if this.main_fns.len() >= 1u { - let mut i = 1u; - while i < this.main_fns.len() { - let (_, dup_main_span) = this.main_fns[i].unwrap(); - this.session.span_err( - dup_main_span, - ~"multiple 'main' functions"); - i += 1; - } - *this.session.entry_fn = this.main_fns[0]; - *this.session.entry_type = Some(session::EntryMain); - } - } else if !this.start_fn.is_none() { - *this.session.entry_fn = this.start_fn; - *this.session.entry_type = Some(session::EntryStart); - } else { - *this.session.entry_fn = this.attr_main_fn; - *this.session.entry_type = Some(session::EntryMain); - } - } - // // Unused import checking // diff --git a/src/librustc/rustc.rc b/src/librustc/rustc.rc index 54c51cf2e487a..82cf4cbaf54b1 100644 --- a/src/librustc/rustc.rc +++ b/src/librustc/rustc.rc @@ -96,6 +96,7 @@ pub mod middle { pub mod lang_items; pub mod privacy; pub mod moves; + pub mod entry; } pub mod front { From 6818e241b49c03c0fe0994dbe8340e2d8f482f09 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Mon, 29 Apr 2013 16:44:21 -0700 Subject: [PATCH 043/410] core: Turn off the local heap in newsched in stage0 to work around windows bustage core won't compile in stage0 without. --- src/libcore/unstable/lang.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/libcore/unstable/lang.rs b/src/libcore/unstable/lang.rs index bf3bf5adc0ac5..cb3f399f5919a 100644 --- a/src/libcore/unstable/lang.rs +++ b/src/libcore/unstable/lang.rs @@ -90,6 +90,14 @@ pub unsafe fn exchange_free(ptr: *c_char) { #[lang="malloc"] #[inline(always)] +#[cfg(stage0)] // For some reason this isn't working on windows in stage0 +pub unsafe fn local_malloc(td: *c_char, size: uintptr_t) -> *c_char { + return rustrt::rust_upcall_malloc_noswitch(td, size); +} + +#[lang="malloc"] +#[inline(always)] +#[cfg(not(stage0))] pub unsafe fn local_malloc(td: *c_char, size: uintptr_t) -> *c_char { match context() { OldTaskContext => { @@ -110,6 +118,17 @@ pub unsafe fn local_malloc(td: *c_char, size: uintptr_t) -> *c_char { // problem occurs, call exit instead. #[lang="free"] #[inline(always)] +#[cfg(stage0)] +pub unsafe fn local_free(ptr: *c_char) { + rustrt::rust_upcall_free_noswitch(ptr); +} + +// NB: Calls to free CANNOT be allowed to fail, as throwing an exception from +// inside a landing pad may corrupt the state of the exception handler. If a +// problem occurs, call exit instead. +#[lang="free"] +#[inline(always)] +#[cfg(not(stage0))] pub unsafe fn local_free(ptr: *c_char) { match context() { OldTaskContext => { From 98f5c6d5b683b82e347247192061182cdd844cf5 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Mon, 29 Apr 2013 16:16:58 -0700 Subject: [PATCH 044/410] rustc: Only accept main functions at the crate level. #4433 --- src/librustc/driver/driver.rs | 3 +- src/librustc/middle/entry.rs | 129 +++++++++++------- src/librustc/middle/typeck/mod.rs | 2 +- src/test/compile-fail/elided-test.rs | 2 +- ...ultiple-main.rs => main-wrong-location.rs} | 12 +- src/test/compile-fail/missing-main.rs | 2 +- src/test/run-pass/dupe-first-attr.rc | 2 + src/test/run-pass/intrinsic-alignment.rs | 4 + 8 files changed, 93 insertions(+), 63 deletions(-) rename src/test/compile-fail/{multiple-main.rs => main-wrong-location.rs} (72%) diff --git a/src/librustc/driver/driver.rs b/src/librustc/driver/driver.rs index e421246da8da3..a9454b595a502 100644 --- a/src/librustc/driver/driver.rs +++ b/src/librustc/driver/driver.rs @@ -225,7 +225,8 @@ pub fn compile_rest(sess: Session, time(time_passes, ~"resolution", || middle::resolve::resolve_crate(sess, lang_items, crate)); - time(time_passes, ~"looking for entry point", || middle::entry::find_entry_point(sess, crate)); + time(time_passes, ~"looking for entry point", + || middle::entry::find_entry_point(sess, crate, ast_map)); let freevars = time(time_passes, ~"freevar finding", || freevars::annotate_freevars(def_map, crate)); diff --git a/src/librustc/middle/entry.rs b/src/librustc/middle/entry.rs index 18f4a5a307200..47873b3fa1f6a 100644 --- a/src/librustc/middle/entry.rs +++ b/src/librustc/middle/entry.rs @@ -15,29 +15,46 @@ use syntax::ast::{crate, node_id, item, item_fn}; use syntax::codemap::span; use syntax::visit::{default_visitor, mk_vt, vt, Visitor, visit_crate, visit_item}; use syntax::attr::{attrs_contains_name}; +use syntax::ast_map; +use core::util; struct EntryContext { session: Session, + ast_map: ast_map::map, + + // The top-level function called 'main' + main_fn: Option<(node_id, span)>, + // The function that has attribute named 'main' attr_main_fn: Option<(node_id, span)>, - // The functions that could be main functions - main_fns: ~[Option<(node_id, span)>], - // The function that has the attribute 'start' on it start_fn: Option<(node_id, span)>, + + // The functions that one might think are 'main' but aren't, e.g. + // main functions not defined at the top level. For diagnostics. + non_main_fns: ~[(node_id, span)], } type EntryVisitor = vt<@mut EntryContext>; -pub fn find_entry_point(session: Session, crate: @crate) { +pub fn find_entry_point(session: Session, crate: @crate, ast_map: ast_map::map) { + + // FIXME #4404 android JNI hacks + if *session.building_library || + session.targ_cfg.os == session::os_android { + // No need to find a main function + return; + } let ctxt = @mut EntryContext { session: session, + ast_map: ast_map, + main_fn: None, attr_main_fn: None, - main_fns: ~[], start_fn: None, + non_main_fns: ~[], }; visit_crate(crate, ctxt, mk_vt(@Visitor { @@ -45,43 +62,50 @@ pub fn find_entry_point(session: Session, crate: @crate) { .. *default_visitor() })); - check_duplicate_main(ctxt); + configure_main(ctxt); } fn find_item(item: @item, ctxt: @mut EntryContext, visitor: EntryVisitor) { match item.node { item_fn(*) => { - // If this is the main function, we must record it in the - // session. - - // FIXME #4404 android JNI hacks - if !*ctxt.session.building_library || - ctxt.session.targ_cfg.os == session::os_android { - - if ctxt.attr_main_fn.is_none() && - item.ident == special_idents::main { - - ctxt.main_fns.push(Some((item.id, item.span))); + if item.ident == special_idents::main { + match ctxt.ast_map.find(&item.id) { + Some(&ast_map::node_item(_, path)) => { + if path.len() == 0 { + // This is a top-level function so can be 'main' + if ctxt.main_fn.is_none() { + ctxt.main_fn = Some((item.id, item.span)); + } else { + ctxt.session.span_err( + item.span, + ~"multiple 'main' functions"); + } + } else { + // This isn't main + ctxt.non_main_fns.push((item.id, item.span)); + } + } + _ => util::unreachable() } + } - if attrs_contains_name(item.attrs, ~"main") { - if ctxt.attr_main_fn.is_none() { - ctxt.attr_main_fn = Some((item.id, item.span)); - } else { - ctxt.session.span_err( - item.span, - ~"multiple 'main' functions"); - } + if attrs_contains_name(item.attrs, ~"main") { + if ctxt.attr_main_fn.is_none() { + ctxt.attr_main_fn = Some((item.id, item.span)); + } else { + ctxt.session.span_err( + item.span, + ~"multiple 'main' functions"); } + } - if attrs_contains_name(item.attrs, ~"start") { - if ctxt.start_fn.is_none() { - ctxt.start_fn = Some((item.id, item.span)); - } else { - ctxt.session.span_err( - item.span, - ~"multiple 'start' functions"); - } + if attrs_contains_name(item.attrs, ~"start") { + if ctxt.start_fn.is_none() { + ctxt.start_fn = Some((item.id, item.span)); + } else { + ctxt.session.span_err( + item.span, + ~"multiple 'start' functions"); } } } @@ -91,29 +115,30 @@ fn find_item(item: @item, ctxt: @mut EntryContext, visitor: EntryVisitor) { visit_item(item, ctxt, visitor); } -// main function checking -// -// be sure that there is only one main function -fn check_duplicate_main(ctxt: @mut EntryContext) { +fn configure_main(ctxt: @mut EntryContext) { let this = &mut *ctxt; - if this.attr_main_fn.is_none() && this.start_fn.is_none() { - if this.main_fns.len() >= 1u { - let mut i = 1u; - while i < this.main_fns.len() { - let (_, dup_main_span) = this.main_fns[i].unwrap(); - this.session.span_err( - dup_main_span, - ~"multiple 'main' functions"); - i += 1; - } - *this.session.entry_fn = this.main_fns[0]; - *this.session.entry_type = Some(session::EntryMain); - } - } else if !this.start_fn.is_none() { + if this.start_fn.is_some() { *this.session.entry_fn = this.start_fn; *this.session.entry_type = Some(session::EntryStart); - } else { + } else if this.attr_main_fn.is_some() { *this.session.entry_fn = this.attr_main_fn; *this.session.entry_type = Some(session::EntryMain); + } else if this.main_fn.is_some() { + *this.session.entry_fn = this.main_fn; + *this.session.entry_type = Some(session::EntryMain); + } else { + // No main function + this.session.err(~"main function not found"); + if !this.non_main_fns.is_empty() { + // There were some functions named 'main' though. Try to give the user a hint. + this.session.note(~"the main function must be defined at the crate level \ + but you have one or more functions named 'main' that are not \ + defined at the crate level. Either move the definition or attach \ + the `#[main]` attribute to override this behavior."); + for this.non_main_fns.each |&(_, span)| { + this.session.span_note(span, ~"here is a function named 'main'"); + } + } + this.session.abort_if_errors(); } } diff --git a/src/librustc/middle/typeck/mod.rs b/src/librustc/middle/typeck/mod.rs index 14ef3feb7d53e..3ea53aaa9765e 100644 --- a/src/librustc/middle/typeck/mod.rs +++ b/src/librustc/middle/typeck/mod.rs @@ -387,7 +387,7 @@ fn check_for_entry_fn(ccx: @mut CrateCtxt) { Some(session::EntryStart) => check_start_fn_ty(ccx, id, sp), None => tcx.sess.bug(~"entry function without a type") }, - None => tcx.sess.err(~"entry function not found") + None => tcx.sess.bug(~"type checking without entry function") } } } diff --git a/src/test/compile-fail/elided-test.rs b/src/test/compile-fail/elided-test.rs index eaae721e0e555..b62214b12f9a0 100644 --- a/src/test/compile-fail/elided-test.rs +++ b/src/test/compile-fail/elided-test.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// error-pattern: entry function not found +// error-pattern: main function not found // Since we're not compiling a test runner this function should be elided // and the build will fail because main doesn't exist diff --git a/src/test/compile-fail/multiple-main.rs b/src/test/compile-fail/main-wrong-location.rs similarity index 72% rename from src/test/compile-fail/multiple-main.rs rename to src/test/compile-fail/main-wrong-location.rs index ef8cd58abf992..90ef7843d4bf9 100644 --- a/src/test/compile-fail/multiple-main.rs +++ b/src/test/compile-fail/main-wrong-location.rs @@ -8,10 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -fn main() { -} - -mod foo { - fn main() { //~ ERROR multiple 'main' functions - } -} +mod m { + // An inferred main entry point (that doesn't use #[main]) + // must appear at the top of the crate + fn main() { } //~ NOTE here is a function named 'main' +} \ No newline at end of file diff --git a/src/test/compile-fail/missing-main.rs b/src/test/compile-fail/missing-main.rs index 4f1b604b5070d..4bfdaf69480e6 100644 --- a/src/test/compile-fail/missing-main.rs +++ b/src/test/compile-fail/missing-main.rs @@ -8,5 +8,5 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// error-pattern:entry function not found +// error-pattern:main function not found fn mian() { } diff --git a/src/test/run-pass/dupe-first-attr.rc b/src/test/run-pass/dupe-first-attr.rc index d39a2aa447623..9bd63a8d646d3 100644 --- a/src/test/run-pass/dupe-first-attr.rc +++ b/src/test/run-pass/dupe-first-attr.rc @@ -25,3 +25,5 @@ mod hello; #[cfg(target_os = "android")] mod hello; + +fn main() { } \ No newline at end of file diff --git a/src/test/run-pass/intrinsic-alignment.rs b/src/test/run-pass/intrinsic-alignment.rs index adc085d210853..cce3d8066ec19 100644 --- a/src/test/run-pass/intrinsic-alignment.rs +++ b/src/test/run-pass/intrinsic-alignment.rs @@ -22,6 +22,7 @@ mod rusti { #[cfg(target_os = "macos")] #[cfg(target_os = "freebsd")] mod m { + #[main] #[cfg(target_arch = "x86")] pub fn main() { unsafe { @@ -30,6 +31,7 @@ mod m { } } + #[main] #[cfg(target_arch = "x86_64")] pub fn main() { unsafe { @@ -41,6 +43,7 @@ mod m { #[cfg(target_os = "win32")] mod m { + #[main] #[cfg(target_arch = "x86")] pub fn main() { unsafe { @@ -52,6 +55,7 @@ mod m { #[cfg(target_os = "android")] mod m { + #[main] #[cfg(target_arch = "arm")] pub fn main() { unsafe { From 9ddcf1cdd3f90366858c7e2746aedd726b477ea3 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Mon, 29 Apr 2013 17:11:20 -0700 Subject: [PATCH 045/410] test: Remove run-pass/too-much-recursion.rs I don't understand how this is still passing on the bots. This condition should trigger an abort now. --- src/test/run-pass/too-much-recursion.rs | 22 ---------------------- 1 file changed, 22 deletions(-) delete mode 100644 src/test/run-pass/too-much-recursion.rs diff --git a/src/test/run-pass/too-much-recursion.rs b/src/test/run-pass/too-much-recursion.rs deleted file mode 100644 index adccc786926dc..0000000000000 --- a/src/test/run-pass/too-much-recursion.rs +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2012 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 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -// xfail-win32 -// error-pattern:ran out of stack - -// Test that the task fails after hitting the recursion limit, but -// that it doesn't bring down the whole proc - -pub fn main() { - do task::spawn_unlinked { - fn f() { f() }; - f(); - }; -} From c2b8f98917597dd719ad93b25dcf000aeaa6d5d0 Mon Sep 17 00:00:00 2001 From: Luqman Aden Date: Mon, 29 Apr 2013 19:48:28 -0700 Subject: [PATCH 046/410] librustc: Fix drop finalizer not running for newtype structs. --- src/librustc/middle/trans/base.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs index efa10dfc2aa34..892a8da367c9f 100644 --- a/src/librustc/middle/trans/base.rs +++ b/src/librustc/middle/trans/base.rs @@ -2071,6 +2071,7 @@ pub fn trans_tuple_struct(ccx: @CrateContext, let bcx = copy_args_to_allocas(fcx, bcx, fn_args, raw_llargs, arg_tys); let repr = adt::represent_type(ccx, tup_ty); + adt::trans_start_init(bcx, repr, fcx.llretptr.get(), 0); for fields.eachi |i, field| { let lldestptr = adt::trans_field_ptr(bcx, From 849f8142a244ae08c06ed190c234aa809a68f6c0 Mon Sep 17 00:00:00 2001 From: Tim Chevalier Date: Mon, 29 Apr 2013 20:46:54 -0700 Subject: [PATCH 047/410] rustc / test: Fix error message --- src/librustc/middle/typeck/check/_match.rs | 8 ++++---- src/test/compile-fail/alt-vec-mismatch-2.rs | 2 +- src/test/compile-fail/alt-vec-mismatch.rs | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/librustc/middle/typeck/check/_match.rs b/src/librustc/middle/typeck/check/_match.rs index e73cf440d4071..5ff7105712183 100644 --- a/src/librustc/middle/typeck/check/_match.rs +++ b/src/librustc/middle/typeck/check/_match.rs @@ -625,10 +625,10 @@ pub fn check_pointer_pat(pcx: &pat_ctxt, fcx.infcx().type_error_message_str(span, |actual| { fmt!("mismatched types: expected `%s` but found %s", resolved_expected, actual)}, - fmt!("an %s pattern", match pointer_kind { - Managed => "@-box", - Owned => "~-box", - Borrowed => "&-pointer" + fmt!("%s pattern", match pointer_kind { + Managed => "an @-box", + Owned => "a ~-box", + Borrowed => "an &-pointer" }), None); fcx.write_error(pat_id); diff --git a/src/test/compile-fail/alt-vec-mismatch-2.rs b/src/test/compile-fail/alt-vec-mismatch-2.rs index 9e8fb84951d30..bef18cc666ae6 100644 --- a/src/test/compile-fail/alt-vec-mismatch-2.rs +++ b/src/test/compile-fail/alt-vec-mismatch-2.rs @@ -1,5 +1,5 @@ fn main() { match () { - [()] => { } //~ ERROR mismatched type: expected `()` but found vector + [()] => { } //~ ERROR mismatched type: expected `()` but found a vector pattern } } diff --git a/src/test/compile-fail/alt-vec-mismatch.rs b/src/test/compile-fail/alt-vec-mismatch.rs index ef4d92ea4913b..1f6822cfd2ce5 100644 --- a/src/test/compile-fail/alt-vec-mismatch.rs +++ b/src/test/compile-fail/alt-vec-mismatch.rs @@ -1,6 +1,6 @@ fn main() { match ~"foo" { - ['f', 'o', .._] => { } //~ ERROR mismatched type: expected `~str` but found vector + ['f', 'o', .._] => { } //~ ERROR mismatched type: expected `~str` but found a vector pattern _ => { } } } From 2deefbe847e68c8fa749ae59d7e84e1a80eba452 Mon Sep 17 00:00:00 2001 From: James Miller Date: Tue, 30 Apr 2013 20:05:16 +1200 Subject: [PATCH 048/410] Change flags to -Z print-link-args and --link-args --- src/librustc/driver/driver.rs | 14 +++----------- src/librustc/driver/session.rs | 7 ++----- 2 files changed, 5 insertions(+), 16 deletions(-) diff --git a/src/librustc/driver/driver.rs b/src/librustc/driver/driver.rs index 102b663161096..0a91c29d89071 100644 --- a/src/librustc/driver/driver.rs +++ b/src/librustc/driver/driver.rs @@ -308,7 +308,7 @@ pub fn compile_rest(sess: Session, }; - if (sess.opts.output_info & session::out_link_args) > 0 { + if (sess.opts.debugging_opts & session::print_link_args) != 0 { io::println(str::connect(link::link_args(sess, &outputs.obj_filename, &outputs.out_filename, link_meta), " ")); } @@ -651,7 +651,7 @@ pub fn build_session_options(binary: @~str, let addl_lib_search_paths = getopts::opt_strs(matches, ~"L").map(|s| Path(*s)); - let linker_args = getopts::opt_strs(matches, ~"linker").flat_map( |a| { + let linker_args = getopts::opt_strs(matches, ~"link-args").flat_map( |a| { let mut args = ~[]; for str::each_split_char(*a, ',') |arg| { args.push(str::from_slice(arg)); @@ -664,11 +664,6 @@ pub fn build_session_options(binary: @~str, let android_cross_path = getopts::opt_maybe_str( matches, ~"android-cross-path"); - let mut output_info = 0; - if opt_present(matches, "print-link-args") { - output_info |= session::out_link_args; - } - let sopts = @session::options { crate_type: crate_type, is_static: static, @@ -691,7 +686,6 @@ pub fn build_session_options(binary: @~str, parse_only: parse_only, no_trans: no_trans, debugging_opts: debugging_opts, - output_info: output_info, android_cross_path: android_cross_path }; return sopts; @@ -766,7 +760,7 @@ pub fn optgroups() -> ~[getopts::groups::OptGroup] { optmulti("L", "", "Add a directory to the library search path", "PATH"), optflag("", "lib", "Compile a library crate"), - optmulti("", "linker", "FLAGS is a comma-separated list of flags + optmulti("", "link-args", "FLAGS is a comma-separated list of flags passed to the linker", "FLAGS"), optflag("", "ls", "List the symbols defined by a library crate"), optflag("", "no-trans", @@ -787,8 +781,6 @@ pub fn optgroups() -> ~[getopts::groups::OptGroup] { typed (crates expanded, with type annotations), or identified (fully parenthesized, AST nodes and blocks with IDs)", "TYPE"), - optflag("", "print-link-args", "Prints all the arguments that would be - passed to the linker."), optflag("S", "", "Compile only; do not assemble or link"), optflag("", "save-temps", "Write intermediate files (.bc, .opt.bc, .o) diff --git a/src/librustc/driver/session.rs b/src/librustc/driver/session.rs index 19b99f46b5ed5..ff623049f758d 100644 --- a/src/librustc/driver/session.rs +++ b/src/librustc/driver/session.rs @@ -63,6 +63,7 @@ pub static jit: uint = 1 << 19; pub static debug_info: uint = 1 << 20; pub static extra_debug_info: uint = 1 << 21; pub static static: uint = 1 << 22; +pub static print_link_args: uint = 1 << 23; pub fn debugging_opts_map() -> ~[(~str, ~str, uint)] { ~[(~"verbose", ~"in general, enable more debug printouts", verbose), @@ -90,6 +91,7 @@ pub fn debugging_opts_map() -> ~[(~str, ~str, uint)] { (~"no-opt", ~"do not optimize, even if -O is passed", no_opt), (~"no-monomorphic-collapse", ~"do not collapse template instantiations", no_monomorphic_collapse), + (~"print-link-args", ~"Print the arguments passed to the linker", print_link_args), (~"gc", ~"Garbage collect shared data (experimental)", gc), (~"jit", ~"Execute using JIT (experimental)", jit), (~"extra-debug-info", ~"Extra debugging info (experimental)", @@ -100,9 +102,6 @@ pub fn debugging_opts_map() -> ~[(~str, ~str, uint)] { ] } -// Information output flags -pub static out_link_args : uint = 1 << 0; - #[deriving(Eq)] pub enum OptLevel { No, // -O0 @@ -139,7 +138,6 @@ pub struct options { parse_only: bool, no_trans: bool, debugging_opts: uint, - output_info: uint, android_cross_path: Option<~str> } @@ -314,7 +312,6 @@ pub fn basic_options() -> @options { parse_only: false, no_trans: false, debugging_opts: 0u, - output_info: 0u, android_cross_path: None } } From 84e97d5596fdc665036646f715f4ffd030d9031f Mon Sep 17 00:00:00 2001 From: Sangeun Kim Date: Tue, 30 Apr 2013 18:39:16 +0900 Subject: [PATCH 049/410] I modified the doc of from_elem, from_fn, I think it returns an owned vector --- src/libcore/vec.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs index 86767dc5bad85..081efe48e1eb5 100644 --- a/src/libcore/vec.rs +++ b/src/libcore/vec.rs @@ -137,9 +137,9 @@ pub fn uniq_len(v: &const ~[T]) -> uint { } /** - * Creates and initializes an immutable vector. + * Creates and initializes an owned vector. * - * Creates an immutable vector of size `n_elts` and initializes the elements + * Creates an owned vector of size `n_elts` and initializes the elements * to the value returned by the function `op`. */ pub fn from_fn(n_elts: uint, op: old_iter::InitOp) -> ~[T] { @@ -159,9 +159,9 @@ pub fn from_fn(n_elts: uint, op: old_iter::InitOp) -> ~[T] { } /** - * Creates and initializes an immutable vector. + * Creates and initializes an owned vector. * - * Creates an immutable vector of size `n_elts` and initializes the elements + * Creates an owned vector of size `n_elts` and initializes the elements * to the value `t`. */ pub fn from_elem(n_elts: uint, t: T) -> ~[T] { From 202b8dcdc420d8b109fbd5260ea2e2be0a5b7faf Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Wed, 17 Apr 2013 18:05:17 -0400 Subject: [PATCH 050/410] adapt to snapshot --- src/libcore/container.rs | 36 ----- src/libcore/hashmap.rs | 168 ------------------------ src/libcore/option.rs | 104 --------------- src/libcore/reflect.rs | 33 +---- src/libcore/repr.rs | 110 +--------------- src/libcore/result.rs | 7 - src/libcore/rt/mod.rs | 21 --- src/libcore/rt/rtio.rs | 5 - src/libcore/rt/uvio.rs | 16 --- src/libcore/trie.rs | 95 -------------- src/libcore/tuple.rs | 28 ---- src/libcore/unstable/lang.rs | 26 ---- src/libcore/vec.rs | 217 ------------------------------- src/librustc/middle/astencode.rs | 104 --------------- src/librustc/rustc.rc | 1 + src/libstd/arena.rs | 56 -------- src/libstd/deque.rs | 122 ----------------- src/libstd/ebml.rs | 18 --- src/libstd/future.rs | 29 ----- src/libstd/json.rs | 48 ------- src/libstd/priority_queue.rs | 16 --- src/libstd/serialize.rs | 10 -- src/libstd/smallintmap.rs | 77 ----------- src/libsyntax/ext/base.rs | 11 -- src/libsyntax/opt_vec.rs | 9 -- 25 files changed, 3 insertions(+), 1364 deletions(-) diff --git a/src/libcore/container.rs b/src/libcore/container.rs index 88c78aebfc5c7..00ea4a9322111 100644 --- a/src/libcore/container.rs +++ b/src/libcore/container.rs @@ -25,42 +25,6 @@ pub trait Mutable: Container { fn clear(&mut self); } -#[cfg(stage0)] -pub trait Map: Mutable { - /// Return true if the map contains a value for the specified key - fn contains_key(&self, key: &K) -> bool; - - // Visits all keys and values - fn each(&self, f: &fn(&K, &V) -> bool); - - /// Visit all keys - fn each_key(&self, f: &fn(&K) -> bool); - - /// Visit all values - fn each_value(&self, f: &fn(&V) -> bool); - - /// Iterate over the map and mutate the contained values - fn mutate_values(&mut self, f: &fn(&K, &mut V) -> bool); - - /// Return a reference to the value corresponding to the key - fn find(&self, key: &K) -> Option<&'self V>; - - /// Return a mutable reference to the value corresponding to the key - fn find_mut(&mut self, key: &K) -> Option<&'self mut V>; - - /// Insert a key-value pair into the map. An existing value for a - /// key is replaced by the new value. Return true if the key did - /// not already exist in the map. - fn insert(&mut self, key: K, value: V) -> bool; - - /// Remove a key-value pair from the map. Return true if the key - /// was present in the map, otherwise false. - fn remove(&mut self, key: &K) -> bool; -} - -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] pub trait Map: Mutable { /// Return true if the map contains a value for the specified key fn contains_key(&self, key: &K) -> bool; diff --git a/src/libcore/hashmap.rs b/src/libcore/hashmap.rs index 41f4f34dc1971..ad1994a92d2bb 100644 --- a/src/libcore/hashmap.rs +++ b/src/libcore/hashmap.rs @@ -184,18 +184,6 @@ priv impl HashMap { } } - #[cfg(stage0)] - #[inline(always)] - fn value_for_bucket(&self, idx: uint) -> &'self V { - match self.buckets[idx] { - Some(ref bkt) => &bkt.value, - None => fail!(~"HashMap::find: internal logic error"), - } - } - - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] #[inline(always)] fn value_for_bucket<'a>(&'a self, idx: uint) -> &'a V { match self.buckets[idx] { @@ -204,18 +192,6 @@ priv impl HashMap { } } - #[cfg(stage0)] - #[inline(always)] - fn mut_value_for_bucket(&mut self, idx: uint) -> &'self mut V { - match self.buckets[idx] { - Some(ref mut bkt) => &mut bkt.value, - None => unreachable() - } - } - - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] #[inline(always)] fn mut_value_for_bucket<'a>(&'a mut self, idx: uint) -> &'a mut V { match self.buckets[idx] { @@ -329,21 +305,6 @@ impl Map for HashMap { } /// Visit all key-value pairs - #[cfg(stage0)] - fn each(&self, blk: &fn(&'self K, &'self V) -> bool) { - for uint::range(0, self.buckets.len()) |i| { - for self.buckets[i].each |bucket| { - if !blk(&bucket.key, &bucket.value) { - return; - } - } - } - } - - /// Visit all key-value pairs - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn each<'a>(&'a self, blk: &fn(&'a K, &'a V) -> bool) { for uint::range(0, self.buckets.len()) |i| { for self.buckets[i].each |bucket| { @@ -360,15 +321,6 @@ impl Map for HashMap { } /// Visit all values - #[cfg(stage0)] - fn each_value(&self, blk: &fn(v: &V) -> bool) { - self.each(|_, v| blk(v)) - } - - /// Visit all values - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn each_value<'a>(&'a self, blk: &fn(v: &'a V) -> bool) { self.each(|_, v| blk(v)) } @@ -386,18 +338,6 @@ impl Map for HashMap { } /// Return a reference to the value corresponding to the key - #[cfg(stage0)] - fn find(&self, k: &K) -> Option<&'self V> { - match self.bucket_for_key(k) { - FoundEntry(idx) => Some(self.value_for_bucket(idx)), - TableFull | FoundHole(_) => None, - } - } - - /// Return a reference to the value corresponding to the key - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn find<'a>(&'a self, k: &K) -> Option<&'a V> { match self.bucket_for_key(k) { FoundEntry(idx) => Some(self.value_for_bucket(idx)), @@ -406,21 +346,6 @@ impl Map for HashMap { } /// Return a mutable reference to the value corresponding to the key - #[cfg(stage0)] - fn find_mut(&mut self, k: &K) -> Option<&'self mut V> { - let idx = match self.bucket_for_key(k) { - FoundEntry(idx) => idx, - TableFull | FoundHole(_) => return None - }; - unsafe { // FIXME(#4903)---requires flow-sensitive borrow checker - Some(::cast::transmute_mut_region(self.mut_value_for_bucket(idx))) - } - } - - /// Return a mutable reference to the value corresponding to the key - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn find_mut<'a>(&'a mut self, k: &K) -> Option<&'a mut V> { let idx = match self.bucket_for_key(k) { FoundEntry(idx) => idx, @@ -503,40 +428,6 @@ pub impl HashMap { /// Return the value corresponding to the key in the map, or insert /// and return the value if it doesn't exist. - #[cfg(stage0)] - fn find_or_insert(&mut self, k: K, v: V) -> &'self V { - if self.size >= self.resize_at { - // n.b.: We could also do this after searching, so - // that we do not resize if this call to insert is - // simply going to update a key in place. My sense - // though is that it's worse to have to search through - // buckets to find the right spot twice than to just - // resize in this corner case. - self.expand(); - } - - let hash = k.hash_keyed(self.k0, self.k1) as uint; - let idx = match self.bucket_for_key_with_hash(hash, &k) { - TableFull => fail!(~"Internal logic error"), - FoundEntry(idx) => idx, - FoundHole(idx) => { - self.buckets[idx] = Some(Bucket{hash: hash, key: k, - value: v}); - self.size += 1; - idx - }, - }; - - unsafe { // FIXME(#4903)---requires flow-sensitive borrow checker - ::cast::transmute_region(self.value_for_bucket(idx)) - } - } - - /// Return the value corresponding to the key in the map, or insert - /// and return the value if it doesn't exist. - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn find_or_insert<'a>(&'a mut self, k: K, v: V) -> &'a V { if self.size >= self.resize_at { // n.b.: We could also do this after searching, so @@ -567,41 +458,6 @@ pub impl HashMap { /// Return the value corresponding to the key in the map, or create, /// insert, and return a new value if it doesn't exist. - #[cfg(stage0)] - fn find_or_insert_with(&mut self, k: K, f: &fn(&K) -> V) -> &'self V { - if self.size >= self.resize_at { - // n.b.: We could also do this after searching, so - // that we do not resize if this call to insert is - // simply going to update a key in place. My sense - // though is that it's worse to have to search through - // buckets to find the right spot twice than to just - // resize in this corner case. - self.expand(); - } - - let hash = k.hash_keyed(self.k0, self.k1) as uint; - let idx = match self.bucket_for_key_with_hash(hash, &k) { - TableFull => fail!(~"Internal logic error"), - FoundEntry(idx) => idx, - FoundHole(idx) => { - let v = f(&k); - self.buckets[idx] = Some(Bucket{hash: hash, key: k, - value: v}); - self.size += 1; - idx - }, - }; - - unsafe { // FIXME(#4903)---requires flow-sensitive borrow checker - ::cast::transmute_region(self.value_for_bucket(idx)) - } - } - - /// Return the value corresponding to the key in the map, or create, - /// insert, and return a new value if it doesn't exist. - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn find_or_insert_with<'a>(&'a mut self, k: K, f: &fn(&K) -> V) -> &'a V { if self.size >= self.resize_at { // n.b.: We could also do this after searching, so @@ -647,17 +503,6 @@ pub impl HashMap { } } - #[cfg(stage0)] - fn get(&self, k: &K) -> &'self V { - match self.find(k) { - Some(v) => v, - None => fail!(fmt!("No entry found for key: %?", k)), - } - } - - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn get<'a>(&'a self, k: &K) -> &'a V { match self.find(k) { Some(v) => v, @@ -676,19 +521,6 @@ pub impl HashMap { /// Return the value corresponding to the key in the map, using /// equivalence - #[cfg(stage0)] - fn find_equiv>(&self, k: &Q) -> Option<&'self V> { - match self.bucket_for_key_equiv(k) { - FoundEntry(idx) => Some(self.value_for_bucket(idx)), - TableFull | FoundHole(_) => None, - } - } - - /// Return the value corresponding to the key in the map, using - /// equivalence - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn find_equiv<'a, Q:Hash + Equiv>(&'a self, k: &Q) -> Option<&'a V> { match self.bucket_for_key_equiv(k) { FoundEntry(idx) => Some(self.value_for_bucket(idx)), diff --git a/src/libcore/option.rs b/src/libcore/option.rs index 17192b4257b16..5abf376ddde65 100644 --- a/src/libcore/option.rs +++ b/src/libcore/option.rs @@ -100,16 +100,6 @@ impl> Add, Option> for Option { impl BaseIter for Option { /// Performs an operation on the contained value by reference - #[cfg(stage0)] - #[inline(always)] - fn each(&self, f: &fn(x: &'self T) -> bool) { - match *self { None => (), Some(ref t) => { f(t); } } - } - - /// Performs an operation on the contained value by reference - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] #[inline(always)] fn each<'a>(&'a self, f: &fn(x: &'a T) -> bool) { match *self { None => (), Some(ref t) => { f(t); } } @@ -122,15 +112,6 @@ impl BaseIter for Option { } impl MutableIter for Option { - #[cfg(stage0)] - #[inline(always)] - fn each_mut(&mut self, f: &fn(&'self mut T) -> bool) { - match *self { None => (), Some(ref mut t) => { f(t); } } - } - - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] #[inline(always)] fn each_mut<'a>(&'a mut self, f: &fn(&'a mut T) -> bool) { match *self { None => (), Some(ref mut t) => { f(t); } } @@ -200,35 +181,12 @@ pub impl Option { * Update an optional value by optionally running its content by reference * through a function that returns an option. */ - #[cfg(stage0)] - #[inline(always)] - fn chain_ref(&self, f: &fn(x: &'self T) -> Option) -> Option { - match *self { Some(ref x) => f(x), None => None } - } - - /** - * Update an optional value by optionally running its content by reference - * through a function that returns an option. - */ - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] #[inline(always)] fn chain_ref<'a, U>(&'a self, f: &fn(x: &'a T) -> Option) -> Option { match *self { Some(ref x) => f(x), None => None } } /// Maps a `some` value from one type to another by reference - #[cfg(stage0)] - #[inline(always)] - fn map(&self, f: &fn(&'self T) -> U) -> Option { - match *self { Some(ref x) => Some(f(x)), None => None } - } - - /// Maps a `some` value from one type to another by reference - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] #[inline(always)] fn map<'a, U>(&self, f: &fn(&'a T) -> U) -> Option { match *self { Some(ref x) => Some(f(x)), None => None } @@ -242,16 +200,6 @@ pub impl Option { } /// Applies a function to the contained value or returns a default - #[cfg(stage0)] - #[inline(always)] - fn map_default(&self, def: U, f: &fn(&'self T) -> U) -> U { - match *self { None => def, Some(ref t) => f(t) } - } - - /// Applies a function to the contained value or returns a default - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] #[inline(always)] fn map_default<'a, U>(&'a self, def: U, f: &fn(&'a T) -> U) -> U { match *self { None => def, Some(ref t) => f(t) } @@ -295,32 +243,6 @@ pub impl Option { case explicitly. */ #[inline(always)] - #[cfg(stage0)] - fn get_ref(&self) -> &'self T { - match *self { - Some(ref x) => x, - None => fail!(~"option::get_ref none") - } - } - - /** - Gets an immutable reference to the value inside an option. - - # Failure - - Fails if the value equals `None` - - # Safety note - - In general, because this function may fail, its use is discouraged - (calling `get` on `None` is akin to dereferencing a null pointer). - Instead, prefer to use pattern matching and handle the `None` - case explicitly. - */ - #[inline(always)] - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn get_ref<'a>(&'a self) -> &'a T { match *self { Some(ref x) => x, @@ -343,32 +265,6 @@ pub impl Option { case explicitly. */ #[inline(always)] - #[cfg(stage0)] - fn get_mut_ref(&mut self) -> &'self mut T { - match *self { - Some(ref mut x) => x, - None => fail!(~"option::get_mut_ref none") - } - } - - /** - Gets a mutable reference to the value inside an option. - - # Failure - - Fails if the value equals `None` - - # Safety note - - In general, because this function may fail, its use is discouraged - (calling `get` on `None` is akin to dereferencing a null pointer). - Instead, prefer to use pattern matching and handle the `None` - case explicitly. - */ - #[inline(always)] - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn get_mut_ref<'a>(&'a mut self) -> &'a mut T { match *self { Some(ref mut x) => x, diff --git a/src/libcore/reflect.rs b/src/libcore/reflect.rs index 9a0526b4351ba..47de360f58995 100644 --- a/src/libcore/reflect.rs +++ b/src/libcore/reflect.rs @@ -15,7 +15,7 @@ Runtime type reflection */ use intrinsic::{TyDesc, TyVisitor}; -#[cfg(not(stage0))] use intrinsic::Opaque; +use intrinsic::Opaque; use libc::c_void; use sys; use vec; @@ -394,17 +394,6 @@ impl TyVisitor for MovePtrAdaptor { true } - #[cfg(stage0)] - fn visit_enter_enum(&self, n_variants: uint, sz: uint, align: uint) - -> bool { - self.align(align); - if ! self.inner.visit_enter_enum(n_variants, sz, align) { - return false; - } - true - } - - #[cfg(not(stage0))] fn visit_enter_enum(&self, n_variants: uint, get_disr: extern unsafe fn(ptr: *Opaque) -> int, sz: uint, align: uint) @@ -428,15 +417,6 @@ impl TyVisitor for MovePtrAdaptor { true } - #[cfg(stage0)] - fn visit_enum_variant_field(&self, i: uint, inner: *TyDesc) -> bool { - unsafe { self.align((*inner).align); } - if ! self.inner.visit_enum_variant_field(i, inner) { return false; } - unsafe { self.bump((*inner).size); } - true - } - - #[cfg(not(stage0))] fn visit_enum_variant_field(&self, i: uint, offset: uint, inner: *TyDesc) -> bool { self.inner.push_ptr(); self.bump(offset); @@ -457,17 +437,6 @@ impl TyVisitor for MovePtrAdaptor { true } - #[cfg(stage0)] - fn visit_leave_enum(&self, n_variants: uint, sz: uint, align: uint) - -> bool { - if ! self.inner.visit_leave_enum(n_variants, sz, align) { - return false; - } - self.bump(sz); - true - } - - #[cfg(not(stage0))] fn visit_leave_enum(&self, n_variants: uint, get_disr: extern unsafe fn(ptr: *Opaque) -> int, sz: uint, align: uint) -> bool { diff --git a/src/libcore/repr.rs b/src/libcore/repr.rs index 03e44e00d8831..2d6412b0cc832 100644 --- a/src/libcore/repr.rs +++ b/src/libcore/repr.rs @@ -18,7 +18,7 @@ use cast::transmute; use char; use intrinsic; use intrinsic::{TyDesc, TyVisitor, visit_tydesc}; -#[cfg(not(stage0))] use intrinsic::Opaque; +use intrinsic::Opaque; use io::{Writer, WriterUtil}; use libc::c_void; use managed; @@ -138,14 +138,6 @@ impl Repr for char { // New implementation using reflect::MovePtr -#[cfg(stage0)] -enum VariantState { - Degenerate, - TagMatch, - TagMismatch, -} - -#[cfg(not(stage0))] enum VariantState { SearchingFor(int), Matched, @@ -190,18 +182,6 @@ pub impl ReprVisitor { true } - #[cfg(stage0)] #[inline(always)] - fn bump(&self, sz: uint) { - do self.move_ptr() |p| { - ((p as uint) + sz) as *c_void - }; - } - - #[cfg(stage0)] #[inline(always)] - fn bump_past(&self) { - self.bump(sys::size_of::()); - } - #[inline(always)] fn visit_inner(&self, inner: *TyDesc) -> bool { self.visit_ptr_inner(self.ptr, inner) @@ -467,18 +447,6 @@ impl TyVisitor for ReprVisitor { true } - #[cfg(stage0)] - fn visit_enter_enum(&self, n_variants: uint, - _sz: uint, _align: uint) -> bool { - if n_variants == 1 { - self.var_stk.push(Degenerate) - } else { - self.var_stk.push(TagMatch) - } - true - } - - #[cfg(not(stage0))] fn visit_enter_enum(&self, _n_variants: uint, get_disr: extern unsafe fn(ptr: *Opaque) -> int, _sz: uint, _align: uint) -> bool { @@ -487,40 +455,6 @@ impl TyVisitor for ReprVisitor { true } - #[cfg(stage0)] - fn visit_enter_enum_variant(&self, _variant: uint, - disr_val: int, - n_fields: uint, - name: &str) -> bool { - let mut write = false; - match self.var_stk.pop() { - Degenerate => { - write = true; - self.var_stk.push(Degenerate); - } - TagMatch | TagMismatch => { - do self.get::() |t| { - if disr_val == *t { - write = true; - self.var_stk.push(TagMatch); - } else { - self.var_stk.push(TagMismatch); - } - }; - self.bump_past::(); - } - } - - if write { - self.writer.write_str(name); - if n_fields > 0 { - self.writer.write_char('('); - } - } - true - } - - #[cfg(not(stage0))] fn visit_enter_enum_variant(&self, _variant: uint, disr_val: int, n_fields: uint, @@ -549,23 +483,6 @@ impl TyVisitor for ReprVisitor { true } - #[cfg(stage0)] - fn visit_enum_variant_field(&self, i: uint, inner: *TyDesc) -> bool { - match self.var_stk[vec::uniq_len(&const self.var_stk) - 1] { - Degenerate | TagMatch => { - if i != 0 { - self.writer.write_str(", "); - } - if ! self.visit_inner(inner) { - return false; - } - } - TagMismatch => () - } - true - } - - #[cfg(not(stage0))] fn visit_enum_variant_field(&self, i: uint, _offset: uint, inner: *TyDesc) -> bool { match self.var_stk[vec::uniq_len(&const self.var_stk) - 1] { Matched => { @@ -581,23 +498,6 @@ impl TyVisitor for ReprVisitor { true } - #[cfg(stage0)] - fn visit_leave_enum_variant(&self, _variant: uint, - _disr_val: int, - n_fields: uint, - _name: &str) -> bool { - match self.var_stk[vec::uniq_len(&const self.var_stk) - 1] { - Degenerate | TagMatch => { - if n_fields > 0 { - self.writer.write_char(')'); - } - } - TagMismatch => () - } - true - } - - #[cfg(not(stage0))] fn visit_leave_enum_variant(&self, _variant: uint, _disr_val: int, n_fields: uint, @@ -613,14 +513,6 @@ impl TyVisitor for ReprVisitor { true } - #[cfg(stage0)] - fn visit_leave_enum(&self, _n_variants: uint, - _sz: uint, _align: uint) -> bool { - self.var_stk.pop(); - true - } - - #[cfg(not(stage0))] fn visit_leave_enum(&self, _n_variants: uint, _get_disr: extern unsafe fn(ptr: *Opaque) -> int, _sz: uint, _align: uint) -> bool { diff --git a/src/libcore/result.rs b/src/libcore/result.rs index 9171c5167bc7b..17cc07c660d1a 100644 --- a/src/libcore/result.rs +++ b/src/libcore/result.rs @@ -226,13 +226,6 @@ pub fn map_err(res: &Result, op: &fn(&E) -> F) } pub impl Result { - #[cfg(stage0)] - #[inline(always)] - fn get_ref(&self) -> &'self T { get_ref(self) } - - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] #[inline(always)] fn get_ref<'a>(&'a self) -> &'a T { get_ref(self) } diff --git a/src/libcore/rt/mod.rs b/src/libcore/rt/mod.rs index e93e0c6fc6cc9..e77ec82637e4b 100644 --- a/src/libcore/rt/mod.rs +++ b/src/libcore/rt/mod.rs @@ -49,27 +49,6 @@ mod context; mod thread; pub mod env; -#[cfg(stage0)] -pub fn start(main: *u8, _argc: int, _argv: *c_char, _crate_map: *u8) -> int { - use self::sched::{Scheduler, Task}; - use self::uvio::UvEventLoop; - - let loop_ = ~UvEventLoop::new(); - let mut sched = ~Scheduler::new(loop_); - let main_task = ~do Task::new(&mut sched.stack_pool) { - // XXX: Can't call a C function pointer from Rust yet - unsafe { rust_call_nullary_fn(main) }; - }; - sched.task_queue.push_back(main_task); - sched.run(); - return 0; - - extern { - fn rust_call_nullary_fn(f: *u8); - } -} - -#[cfg(not(stage0))] pub fn start(main: *u8, _argc: int, _argv: **c_char, _crate_map: *u8) -> int { use self::sched::{Scheduler, Task}; use self::uvio::UvEventLoop; diff --git a/src/libcore/rt/rtio.rs b/src/libcore/rt/rtio.rs index 66eb79ba6ae4e..fd64438c61b46 100644 --- a/src/libcore/rt/rtio.rs +++ b/src/libcore/rt/rtio.rs @@ -24,11 +24,6 @@ pub trait EventLoop { fn run(&mut self); fn callback(&mut self, ~fn()); /// The asynchronous I/O services. Not all event loops may provide one - #[cfg(stage0)] - fn io(&mut self) -> Option<&'self mut IoFactoryObject>; - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn io<'a>(&'a mut self) -> Option<&'a mut IoFactoryObject>; } diff --git a/src/libcore/rt/uvio.rs b/src/libcore/rt/uvio.rs index abdd8d6619a8a..fba91dd7d8ab9 100644 --- a/src/libcore/rt/uvio.rs +++ b/src/libcore/rt/uvio.rs @@ -69,14 +69,6 @@ impl EventLoop for UvEventLoop { } } - #[cfg(stage0)] - fn io(&mut self) -> Option<&'self mut IoFactoryObject> { - Some(&mut self.uvio) - } - - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn io<'a>(&'a mut self) -> Option<&'a mut IoFactoryObject> { Some(&mut self.uvio) } @@ -99,14 +91,6 @@ fn test_callback_run_once() { pub struct UvIoFactory(Loop); pub impl UvIoFactory { - #[cfg(stage0)] - fn uv_loop(&mut self) -> &'self mut Loop { - match self { &UvIoFactory(ref mut ptr) => ptr } - } - - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn uv_loop<'a>(&'a mut self) -> &'a mut Loop { match self { &UvIoFactory(ref mut ptr) => ptr } } diff --git a/src/libcore/trie.rs b/src/libcore/trie.rs index f4e9ddbdd90a1..f0756be994432 100644 --- a/src/libcore/trie.rs +++ b/src/libcore/trie.rs @@ -56,16 +56,6 @@ impl Map for TrieMap { /// Visit all key-value pairs in order #[inline(always)] - #[cfg(stage0)] - fn each(&self, f: &fn(&uint, &'self T) -> bool) { - self.root.each(f); - } - - /// Visit all key-value pairs in order - #[inline(always)] - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn each<'a>(&'a self, f: &fn(&uint, &'a T) -> bool) { self.root.each(f); } @@ -78,16 +68,6 @@ impl Map for TrieMap { /// Visit all values in order #[inline(always)] - #[cfg(stage0)] - fn each_value(&self, f: &fn(&T) -> bool) { - self.each(|_, v| f(v)) - } - - /// Visit all values in order - #[inline(always)] - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn each_value<'a>(&'a self, f: &fn(&'a T) -> bool) { self.each(|_, v| f(v)) } @@ -99,31 +79,6 @@ impl Map for TrieMap { } /// Return a reference to the value corresponding to the key - #[cfg(stage0)] - #[inline(hint)] - fn find(&self, key: &uint) -> Option<&'self T> { - let mut node: &'self TrieNode = &self.root; - let mut idx = 0; - loop { - match node.children[chunk(*key, idx)] { - Internal(ref x) => node = &**x, - External(stored, ref value) => { - if stored == *key { - return Some(value) - } else { - return None - } - } - Nothing => return None - } - idx += 1; - } - } - - /// Return a reference to the value corresponding to the key - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] #[inline(hint)] fn find<'a>(&'a self, key: &uint) -> Option<&'a T> { let mut node: &'a TrieNode = &self.root; @@ -145,16 +100,6 @@ impl Map for TrieMap { } /// Return a mutable reference to the value corresponding to the key - #[cfg(stage0)] - #[inline(always)] - fn find_mut(&mut self, key: &uint) -> Option<&'self mut T> { - find_mut(&mut self.root.children[chunk(*key, 0)], *key, 1) - } - - /// Return a mutable reference to the value corresponding to the key - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] #[inline(always)] fn find_mut<'a>(&'a mut self, key: &uint) -> Option<&'a mut T> { find_mut(&mut self.root.children[chunk(*key, 0)], *key, 1) @@ -193,16 +138,6 @@ pub impl TrieMap { /// Visit all key-value pairs in reverse order #[inline(always)] - #[cfg(stage0)] - fn each_reverse(&self, f: &fn(&uint, &'self T) -> bool) { - self.root.each_reverse(f); - } - - /// Visit all key-value pairs in reverse order - #[inline(always)] - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn each_reverse<'a>(&'a self, f: &fn(&uint, &'a T) -> bool) { self.root.each_reverse(f); } @@ -298,21 +233,6 @@ impl TrieNode { } impl TrieNode { - #[cfg(stage0)] - fn each(&self, f: &fn(&uint, &'self T) -> bool) -> bool { - for uint::range(0, self.children.len()) |idx| { - match self.children[idx] { - Internal(ref x) => if !x.each(f) { return false }, - External(k, ref v) => if !f(&k, v) { return false }, - Nothing => () - } - } - true - } - - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn each<'a>(&'a self, f: &fn(&uint, &'a T) -> bool) -> bool { for uint::range(0, self.children.len()) |idx| { match self.children[idx] { @@ -324,21 +244,6 @@ impl TrieNode { true } - #[cfg(stage0)] - fn each_reverse(&self, f: &fn(&uint, &'self T) -> bool) -> bool { - for uint::range_rev(self.children.len(), 0) |idx| { - match self.children[idx - 1] { - Internal(ref x) => if !x.each_reverse(f) { return false }, - External(k, ref v) => if !f(&k, v) { return false }, - Nothing => () - } - } - true - } - - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn each_reverse<'a>(&'a self, f: &fn(&uint, &'a T) -> bool) -> bool { for uint::range_rev(self.children.len(), 0) |idx| { match self.children[idx - 1] { diff --git a/src/libcore/tuple.rs b/src/libcore/tuple.rs index a2b6f0eb1a714..6da22657906dd 100644 --- a/src/libcore/tuple.rs +++ b/src/libcore/tuple.rs @@ -56,39 +56,11 @@ impl Clone for (T, U) { } } -#[cfg(stage0)] -pub trait ImmutableTuple { - fn first_ref(&self) -> &'self T; - fn second_ref(&self) -> &'self U; -} - -#[cfg(stage0)] -impl ImmutableTuple for (T, U) { - #[inline(always)] - fn first_ref(&self) -> &'self T { - match *self { - (ref t, _) => t, - } - } - #[inline(always)] - fn second_ref(&self) -> &'self U { - match *self { - (_, ref u) => u, - } - } -} - -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] pub trait ImmutableTuple { fn first_ref<'a>(&'a self) -> &'a T; fn second_ref<'a>(&'a self) -> &'a U; } -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] impl ImmutableTuple for (T, U) { #[inline(always)] fn first_ref<'a>(&'a self) -> &'a T { diff --git a/src/libcore/unstable/lang.rs b/src/libcore/unstable/lang.rs index 611862a79e7e0..de0542afc399a 100644 --- a/src/libcore/unstable/lang.rs +++ b/src/libcore/unstable/lang.rs @@ -135,32 +135,6 @@ pub unsafe fn strdup_uniq(ptr: *c_uchar, len: uint) -> ~str { } #[lang="start"] -#[cfg(stage0)] -pub fn start(main: *u8, argc: int, argv: *c_char, - crate_map: *u8) -> int { - use libc::getenv; - use rt::start; - - unsafe { - let use_old_rt = do str::as_c_str("RUST_NEWRT") |s| { - getenv(s).is_null() - }; - if use_old_rt { - return rust_start(main as *c_void, argc as c_int, argv, - crate_map as *c_void) as int; - } else { - return start(main, argc, argv, crate_map); - } - } - - extern { - fn rust_start(main: *c_void, argc: c_int, argv: *c_char, - crate_map: *c_void) -> c_int; - } -} - -#[lang="start"] -#[cfg(not(stage0))] pub fn start(main: *u8, argc: int, argv: **c_char, crate_map: *u8) -> int { use libc::getenv; diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs index 86767dc5bad85..94f866643532c 100644 --- a/src/libcore/vec.rs +++ b/src/libcore/vec.rs @@ -1566,16 +1566,6 @@ pub fn each_permutation(v: &[T], put: &fn(ts: &[T]) -> bool) { } } -// see doc below -#[cfg(stage0)] // XXX: lifetimes! -pub fn windowed(n: uint, v: &[T], it: &fn(&[T]) -> bool) { - assert!(1u <= n); - if n > v.len() { return; } - for uint::range(0, v.len() - n + 1) |i| { - if !it(v.slice(i, i+n)) { return } - } -} - /** * Iterate over all contiguous windows of length `n` of the vector `v`. * @@ -1590,9 +1580,6 @@ pub fn windowed(n: uint, v: &[T], it: &fn(&[T]) -> bool) { * ~~~ * */ -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] pub fn windowed<'r, T>(n: uint, v: &'r [T], it: &fn(&'r [T]) -> bool) { assert!(1u <= n); if n > v.len() { return; } @@ -1854,150 +1841,6 @@ impl<'self,T:Copy> CopyableVector for &'self const [T] { } } -#[cfg(stage0)] -pub trait ImmutableVector { - fn slice(&self, start: uint, end: uint) -> &'self [T]; - fn head(&self) -> &'self T; - fn head_opt(&self) -> Option<&'self T>; - fn tail(&self) -> &'self [T]; - fn tailn(&self, n: uint) -> &'self [T]; - fn init(&self) -> &'self [T]; - fn initn(&self, n: uint) -> &'self [T]; - fn last(&self) -> &'self T; - fn last_opt(&self) -> Option<&'self T>; - fn each_reverse(&self, blk: &fn(&T) -> bool); - fn eachi_reverse(&self, blk: &fn(uint, &T) -> bool); - fn foldr(&self, z: U, p: &fn(t: &T, u: U) -> U) -> U; - fn map(&self, f: &fn(t: &T) -> U) -> ~[U]; - fn mapi(&self, f: &fn(uint, t: &T) -> U) -> ~[U]; - fn map_r(&self, f: &fn(x: &T) -> U) -> ~[U]; - fn alli(&self, f: &fn(uint, t: &T) -> bool) -> bool; - fn flat_map(&self, f: &fn(t: &T) -> ~[U]) -> ~[U]; - fn filter_mapped(&self, f: &fn(t: &T) -> Option) -> ~[U]; - unsafe fn unsafe_ref(&self, index: uint) -> *T; -} - -/// Extension methods for vectors -#[cfg(stage0)] -impl<'self,T> ImmutableVector for &'self [T] { - /// Return a slice that points into another slice. - #[inline] - fn slice(&self, start: uint, end: uint) -> &'self [T] { - slice(*self, start, end) - } - - /// Returns the first element of a vector, failing if the vector is empty. - #[inline] - fn head(&self) -> &'self T { head(*self) } - - /// Returns the first element of a vector - #[inline] - fn head_opt(&self) -> Option<&'self T> { head_opt(*self) } - - /// Returns all but the first element of a vector - #[inline] - fn tail(&self) -> &'self [T] { tail(*self) } - - /// Returns all but the first `n' elements of a vector - #[inline] - fn tailn(&self, n: uint) -> &'self [T] { tailn(*self, n) } - - /// Returns all but the last elemnt of a vector - #[inline] - fn init(&self) -> &'self [T] { init(*self) } - - /// Returns all but the last `n' elemnts of a vector - #[inline] - fn initn(&self, n: uint) -> &'self [T] { initn(*self, n) } - - /// Returns the last element of a `v`, failing if the vector is empty. - #[inline] - fn last(&self) -> &'self T { last(*self) } - - /// Returns the last element of a `v`, failing if the vector is empty. - #[inline] - fn last_opt(&self) -> Option<&'self T> { last_opt(*self) } - - /// Iterates over a vector's elements in reverse. - #[inline] - fn each_reverse(&self, blk: &fn(&T) -> bool) { - each_reverse(*self, blk) - } - - /// Iterates over a vector's elements and indices in reverse. - #[inline] - fn eachi_reverse(&self, blk: &fn(uint, &T) -> bool) { - eachi_reverse(*self, blk) - } - - /// Reduce a vector from right to left - #[inline] - fn foldr(&self, z: U, p: &fn(t: &T, u: U) -> U) -> U { - foldr(*self, z, p) - } - - /// Apply a function to each element of a vector and return the results - #[inline] - fn map(&self, f: &fn(t: &T) -> U) -> ~[U] { map(*self, f) } - - /** - * Apply a function to the index and value of each element in the vector - * and return the results - */ - fn mapi(&self, f: &fn(uint, t: &T) -> U) -> ~[U] { - mapi(*self, f) - } - - #[inline] - fn map_r(&self, f: &fn(x: &T) -> U) -> ~[U] { - let mut r = ~[]; - let mut i = 0; - while i < self.len() { - r.push(f(&self[i])); - i += 1; - } - r - } - - /** - * Returns true if the function returns true for all elements. - * - * If the vector is empty, true is returned. - */ - fn alli(&self, f: &fn(uint, t: &T) -> bool) -> bool { - alli(*self, f) - } - /** - * Apply a function to each element of a vector and return a concatenation - * of each result vector - */ - #[inline] - fn flat_map(&self, f: &fn(t: &T) -> ~[U]) -> ~[U] { - flat_map(*self, f) - } - /** - * Apply a function to each element of a vector and return the results - * - * If function `f` returns `none` then that element is excluded from - * the resulting vector. - */ - #[inline] - fn filter_mapped(&self, f: &fn(t: &T) -> Option) -> ~[U] { - filter_mapped(*self, f) - } - - /// Returns a pointer to the element at the given index, without doing - /// bounds checking. - #[inline(always)] - unsafe fn unsafe_ref(&self, index: uint) -> *T { - let (ptr, _): (*T, uint) = transmute(*self); - ptr.offset(index) - } -} - -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] pub trait ImmutableVector<'self, T> { fn slice(&self, start: uint, end: uint) -> &'self [T]; fn iter(self) -> VecIterator<'self, T>; @@ -2022,9 +1865,6 @@ pub trait ImmutableVector<'self, T> { } /// Extension methods for vectors -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] impl<'self,T> ImmutableVector<'self, T> for &'self [T] { /// Return a slice that points into another slice. #[inline] @@ -2634,17 +2474,6 @@ pub mod bytes { // ___________________________________________________________________________ // ITERATION TRAIT METHODS -#[cfg(stage0)] -impl<'self,A> old_iter::BaseIter for &'self [A] { - #[inline(always)] - fn each(&self, blk: &fn(v: &'self A) -> bool) { each(*self, blk) } - #[inline(always)] - fn size_hint(&self) -> Option { Some(self.len()) } -} - -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] impl<'self,A> old_iter::BaseIter for &'self [A] { #[inline(always)] fn each<'a>(&'a self, blk: &fn(v: &'a A) -> bool) { each(*self, blk) } @@ -2653,18 +2482,6 @@ impl<'self,A> old_iter::BaseIter for &'self [A] { } // FIXME(#4148): This should be redundant -#[cfg(stage0)] -impl old_iter::BaseIter for ~[A] { - #[inline(always)] - fn each(&self, blk: &fn(v: &'self A) -> bool) { each(*self, blk) } - #[inline(always)] - fn size_hint(&self) -> Option { Some(self.len()) } -} - -// FIXME(#4148): This should be redundant -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] impl old_iter::BaseIter for ~[A] { #[inline(always)] fn each<'a>(&'a self, blk: &fn(v: &'a A) -> bool) { each(*self, blk) } @@ -2673,18 +2490,6 @@ impl old_iter::BaseIter for ~[A] { } // FIXME(#4148): This should be redundant -#[cfg(stage0)] -impl old_iter::BaseIter for @[A] { - #[inline(always)] - fn each(&self, blk: &fn(v: &'self A) -> bool) { each(*self, blk) } - #[inline(always)] - fn size_hint(&self) -> Option { Some(self.len()) } -} - -// FIXME(#4148): This should be redundant -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] impl old_iter::BaseIter for @[A] { #[inline(always)] fn each<'a>(&'a self, blk: &fn(v: &'a A) -> bool) { each(*self, blk) } @@ -2692,17 +2497,6 @@ impl old_iter::BaseIter for @[A] { fn size_hint(&self) -> Option { Some(self.len()) } } -#[cfg(stage0)] -impl<'self,A> old_iter::MutableIter for &'self mut [A] { - #[inline(always)] - fn each_mut(&mut self, blk: &fn(v: &'self mut A) -> bool) { - each_mut(*self, blk) - } -} - -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] impl<'self,A> old_iter::MutableIter for &'self mut [A] { #[inline(always)] fn each_mut<'a>(&'a mut self, blk: &fn(v: &'a mut A) -> bool) { @@ -2711,17 +2505,6 @@ impl<'self,A> old_iter::MutableIter for &'self mut [A] { } // FIXME(#4148): This should be redundant -#[cfg(stage0)] -impl old_iter::MutableIter for ~[A] { - #[inline(always)] - fn each_mut(&mut self, blk: &fn(v: &'self mut A) -> bool) { - each_mut(*self, blk) - } -} - -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] impl old_iter::MutableIter for ~[A] { #[inline(always)] fn each_mut<'a>(&'a mut self, blk: &fn(v: &'a mut A) -> bool) { diff --git a/src/librustc/middle/astencode.rs b/src/librustc/middle/astencode.rs index c7c9c110586c7..c65521228fa87 100644 --- a/src/librustc/middle/astencode.rs +++ b/src/librustc/middle/astencode.rs @@ -557,29 +557,6 @@ trait read_method_map_entry_helper { -> method_map_entry; } -#[cfg(stage0)] -fn encode_method_map_entry(ecx: @e::EncodeContext, - ebml_w: &writer::Encoder, - mme: method_map_entry) { - do ebml_w.emit_struct("method_map_entry", 3) { - do ebml_w.emit_field(~"self_arg", 0u) { - ebml_w.emit_arg(ecx, mme.self_arg); - } - do ebml_w.emit_field(~"explicit_self", 2u) { - mme.explicit_self.encode(ebml_w); - } - do ebml_w.emit_field(~"origin", 1u) { - mme.origin.encode(ebml_w); - } - do ebml_w.emit_field(~"self_mode", 3) { - mme.self_mode.encode(ebml_w); - } - } -} - -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] fn encode_method_map_entry(ecx: @e::EncodeContext, ebml_w: &writer::Encoder, mme: method_map_entry) { @@ -600,34 +577,6 @@ fn encode_method_map_entry(ecx: @e::EncodeContext, } impl read_method_map_entry_helper for reader::Decoder { - #[cfg(stage0)] - fn read_method_map_entry(&self, xcx: @ExtendedDecodeContext) - -> method_map_entry { - do self.read_struct("method_map_entry", 3) { - method_map_entry { - self_arg: self.read_field(~"self_arg", 0u, || { - self.read_arg(xcx) - }), - explicit_self: self.read_field(~"explicit_self", 2u, || { - let self_type: ast::self_ty_ = Decodable::decode(self); - self_type - }), - origin: self.read_field(~"origin", 1u, || { - let method_origin: method_origin = - Decodable::decode(self); - method_origin.tr(xcx) - }), - self_mode: self.read_field(~"self_mode", 3, || { - let self_mode: ty::SelfMode = Decodable::decode(self); - self_mode - }), - } - } - } - - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn read_method_map_entry(&self, xcx: @ExtendedDecodeContext) -> method_map_entry { do self.read_struct("method_map_entry", 3) { @@ -841,33 +790,6 @@ impl ebml_writer_helpers for writer::Encoder { } } - #[cfg(stage0)] - fn emit_tpbt(&self, ecx: @e::EncodeContext, - tpbt: ty::ty_param_bounds_and_ty) { - do self.emit_struct("ty_param_bounds_and_ty", 2) { - do self.emit_field(~"generics", 0) { - do self.emit_struct("Generics", 2) { - do self.emit_field(~"type_param_defs", 0) { - do self.emit_from_vec(*tpbt.generics.type_param_defs) - |type_param_def| - { - self.emit_type_param_def(ecx, type_param_def); - } - } - do self.emit_field(~"region_param", 1) { - tpbt.generics.region_param.encode(self); - } - } - } - do self.emit_field(~"ty", 1) { - self.emit_ty(ecx, tpbt.ty); - } - } - } - - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn emit_tpbt(&self, ecx: @e::EncodeContext, tpbt: ty::ty_param_bounds_and_ty) { do self.emit_struct("ty_param_bounds_and_ty", 2) { @@ -1126,32 +1048,6 @@ impl ebml_decoder_decoder_helpers for reader::Decoder { } } - #[cfg(stage0)] - fn read_ty_param_bounds_and_ty(&self, xcx: @ExtendedDecodeContext) - -> ty::ty_param_bounds_and_ty - { - do self.read_struct("ty_param_bounds_and_ty", 2) { - ty::ty_param_bounds_and_ty { - generics: do self.read_struct("Generics", 2) { - ty::Generics { - type_param_defs: self.read_field("type_param_defs", 0, || { - @self.read_to_vec(|| self.read_type_param_def(xcx)) - }), - region_param: self.read_field(~"region_param", 1, || { - Decodable::decode(self) - }) - } - }, - ty: self.read_field(~"ty", 1, || { - self.read_ty(xcx) - }) - } - } - } - - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn read_ty_param_bounds_and_ty(&self, xcx: @ExtendedDecodeContext) -> ty::ty_param_bounds_and_ty { diff --git a/src/librustc/rustc.rc b/src/librustc/rustc.rc index 54c51cf2e487a..9e34d5c6177e6 100644 --- a/src/librustc/rustc.rc +++ b/src/librustc/rustc.rc @@ -85,6 +85,7 @@ pub mod middle { pub mod lint; #[path = "borrowck/mod.rs"] pub mod borrowck; + pub mod dataflow; pub mod mem_categorization; pub mod liveness; pub mod kind; diff --git a/src/libstd/arena.rs b/src/libstd/arena.rs index 8e2c734504512..e714af5fa1890 100644 --- a/src/libstd/arena.rs +++ b/src/libstd/arena.rs @@ -201,21 +201,6 @@ pub impl Arena { } #[inline(always)] - #[cfg(stage0)] - priv fn alloc_pod(&self, op: &fn() -> T) -> &'self T { - unsafe { - let tydesc = sys::get_type_desc::(); - let ptr = self.alloc_pod_inner((*tydesc).size, (*tydesc).align); - let ptr: *mut T = transmute(ptr); - rusti::move_val_init(&mut (*ptr), op()); - return transmute(ptr); - } - } - - #[inline(always)] - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] priv fn alloc_pod<'a, T>(&'a self, op: &fn() -> T) -> &'a T { unsafe { let tydesc = sys::get_type_desc::(); @@ -261,31 +246,6 @@ pub impl Arena { } #[inline(always)] - #[cfg(stage0)] - priv fn alloc_nonpod(&self, op: &fn() -> T) -> &'self T { - unsafe { - let tydesc = sys::get_type_desc::(); - let (ty_ptr, ptr) = - self.alloc_nonpod_inner((*tydesc).size, (*tydesc).align); - let ty_ptr: *mut uint = transmute(ty_ptr); - let ptr: *mut T = transmute(ptr); - // Write in our tydesc along with a bit indicating that it - // has *not* been initialized yet. - *ty_ptr = transmute(tydesc); - // Actually initialize it - rusti::move_val_init(&mut(*ptr), op()); - // Now that we are done, update the tydesc to indicate that - // the object is there. - *ty_ptr = bitpack_tydesc_ptr(tydesc, true); - - return transmute(ptr); - } - } - - #[inline(always)] - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] priv fn alloc_nonpod<'a, T>(&'a self, op: &fn() -> T) -> &'a T { unsafe { let tydesc = sys::get_type_desc::(); @@ -308,22 +268,6 @@ pub impl Arena { // The external interface #[inline(always)] - #[cfg(stage0)] - fn alloc(&self, op: &fn() -> T) -> &'self T { - unsafe { - if !rusti::needs_drop::() { - self.alloc_pod(op) - } else { - self.alloc_nonpod(op) - } - } - } - - // The external interface - #[inline(always)] - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn alloc<'a, T>(&'a self, op: &fn() -> T) -> &'a T { unsafe { if !rusti::needs_drop::() { diff --git a/src/libstd/deque.rs b/src/libstd/deque.rs index 5d52bb7c0810b..64d708e0b2e89 100644 --- a/src/libstd/deque.rs +++ b/src/libstd/deque.rs @@ -37,128 +37,6 @@ impl Mutable for Deque { } } -#[cfg(stage0)] -pub impl Deque { - /// Create an empty Deque - fn new() -> Deque { - Deque{nelts: 0, lo: 0, hi: 0, - elts: vec::from_fn(initial_capacity, |_| None)} - } - - /// Return a reference to the first element in the deque - /// - /// Fails if the deque is empty - #[cfg(stage0)] - fn peek_front(&self) -> &'self T { get(self.elts, self.lo) } - - /// Return a reference to the first element in the deque - /// - /// Fails if the deque is empty - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] - fn peek_front<'a>(&'a self) -> &'a T { get(self.elts, self.lo) } - - /// Return a reference to the last element in the deque - /// - /// Fails if the deque is empty - #[cfg(stage0)] - fn peek_back(&self) -> &'self T { get(self.elts, self.hi - 1u) } - - /// Return a reference to the last element in the deque - /// - /// Fails if the deque is empty - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] - fn peek_back<'a>(&'a self) -> &'a T { get(self.elts, self.hi - 1u) } - - /// Retrieve an element in the deque by index - /// - /// Fails if there is no element with the given index - #[cfg(stage0)] - fn get(&self, i: int) -> &'self T { - let idx = (self.lo + (i as uint)) % self.elts.len(); - get(self.elts, idx) - } - - /// Retrieve an element in the deque by index - /// - /// Fails if there is no element with the given index - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] - fn get<'a>(&'a self, i: int) -> &'a T { - let idx = (self.lo + (i as uint)) % self.elts.len(); - get(self.elts, idx) - } - - /// Iterate over the elements in the deque - fn each(&self, f: &fn(&T) -> bool) { - self.eachi(|_i, e| f(e)) - } - - /// Iterate over the elements in the deque by index - fn eachi(&self, f: &fn(uint, &T) -> bool) { - for uint::range(0, self.nelts) |i| { - if !f(i, self.get(i as int)) { return; } - } - } - - /// Remove and return the first element in the deque - /// - /// Fails if the deque is empty - fn pop_front(&mut self) -> T { - let result = self.elts[self.lo].swap_unwrap(); - self.lo = (self.lo + 1u) % self.elts.len(); - self.nelts -= 1u; - result - } - - /// Remove and return the last element in the deque - /// - /// Fails if the deque is empty - fn pop_back(&mut self) -> T { - if self.hi == 0u { - self.hi = self.elts.len() - 1u; - } else { self.hi -= 1u; } - let result = self.elts[self.hi].swap_unwrap(); - self.elts[self.hi] = None; - self.nelts -= 1u; - result - } - - /// Prepend an element to the deque - fn add_front(&mut self, t: T) { - let oldlo = self.lo; - if self.lo == 0u { - self.lo = self.elts.len() - 1u; - } else { self.lo -= 1u; } - if self.lo == self.hi { - self.elts = grow(self.nelts, oldlo, self.elts); - self.lo = self.elts.len() - 1u; - self.hi = self.nelts; - } - self.elts[self.lo] = Some(t); - self.nelts += 1u; - } - - /// Append an element to the deque - fn add_back(&mut self, t: T) { - if self.lo == self.hi && self.nelts != 0u { - self.elts = grow(self.nelts, self.lo, self.elts); - self.lo = 0u; - self.hi = self.nelts; - } - self.elts[self.hi] = Some(t); - self.hi = (self.hi + 1u) % self.elts.len(); - self.nelts += 1u; - } -} - -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] pub impl Deque { /// Create an empty Deque fn new() -> Deque { diff --git a/src/libstd/ebml.rs b/src/libstd/ebml.rs index 2598e96a141e2..9b89036eee51b 100644 --- a/src/libstd/ebml.rs +++ b/src/libstd/ebml.rs @@ -400,16 +400,6 @@ pub mod reader { f() } - #[cfg(stage0)] - fn read_field(&self, name: &str, idx: uint, f: &fn() -> T) -> T { - debug!("read_field(name=%?, idx=%u)", name, idx); - self._check_label(name); - f() - } - - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn read_struct_field(&self, name: &str, idx: uint, f: &fn() -> T) -> T { debug!("read_struct_field(name=%?, idx=%u)", name, idx); self._check_label(name); @@ -714,14 +704,6 @@ pub mod writer { } fn emit_struct(&self, _name: &str, _len: uint, f: &fn()) { f() } - #[cfg(stage0)] - fn emit_field(&self, name: &str, _idx: uint, f: &fn()) { - self._emit_label(name); - f() - } - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn emit_struct_field(&self, name: &str, _idx: uint, f: &fn()) { self._emit_label(name); f() diff --git a/src/libstd/future.rs b/src/libstd/future.rs index f59abfa81ca10..c3fc16bdf70ba 100644 --- a/src/libstd/future.rs +++ b/src/libstd/future.rs @@ -54,35 +54,6 @@ pub impl Future { } pub impl Future { - #[cfg(stage0)] - fn get_ref(&self) -> &'self A { - /*! - * Executes the future's closure and then returns a borrowed - * pointer to the result. The borrowed pointer lasts as long as - * the future. - */ - unsafe { - match self.state { - Forced(ref mut v) => { return cast::transmute(v); } - Evaluating => fail!(~"Recursive forcing of future!"), - Pending(_) => {} - } - - let mut state = Evaluating; - self.state <-> state; - match state { - Forced(_) | Evaluating => fail!(~"Logic error."), - Pending(f) => { - self.state = Forced(f()); - self.get_ref() - } - } - } - } - - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn get_ref<'a>(&'a self) -> &'a A { /*! * Executes the future's closure and then returns a borrowed diff --git a/src/libstd/json.rs b/src/libstd/json.rs index 7353bec7333c5..5d5b0bd952f18 100644 --- a/src/libstd/json.rs +++ b/src/libstd/json.rs @@ -143,16 +143,6 @@ impl serialize::Encoder for Encoder { f(); self.wr.write_char('}'); } - #[cfg(stage0)] - fn emit_field(&self, name: &str, idx: uint, f: &fn()) { - if idx != 0 { self.wr.write_char(','); } - self.wr.write_str(escape_str(name)); - self.wr.write_char(':'); - f(); - } - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn emit_struct_field(&self, name: &str, idx: uint, f: &fn()) { if idx != 0 { self.wr.write_char(','); } self.wr.write_str(escape_str(name)); @@ -289,21 +279,6 @@ impl serialize::Encoder for PrettyEncoder { self.wr.write_char('}'); } } - #[cfg(stage0)] - fn emit_field(&self, name: &str, idx: uint, f: &fn()) { - if idx == 0 { - self.wr.write_char('\n'); - } else { - self.wr.write_str(",\n"); - } - self.wr.write_str(spaces(self.indent)); - self.wr.write_str(escape_str(name)); - self.wr.write_str(": "); - f(); - } - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn emit_struct_field(&self, name: &str, idx: uint, f: &fn()) { if idx == 0 { self.wr.write_char('\n'); @@ -901,29 +876,6 @@ impl serialize::Decoder for Decoder { value } - #[cfg(stage0)] - fn read_field(&self, name: &str, idx: uint, f: &fn() -> T) -> T { - debug!("read_field(name=%?, idx=%u)", name, idx); - match self.stack.pop() { - Object(obj) => { - let mut obj = obj; - let value = match obj.pop(&name.to_owned()) { - None => fail!(fmt!("no such field: %s", name)), - Some(json) => { - self.stack.push(json); - f() - } - }; - self.stack.push(Object(obj)); - value - } - value => fail!(fmt!("not an object: %?", value)) - } - } - - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn read_struct_field(&self, name: &str, idx: uint, f: &fn() -> T) -> T { debug!("read_struct_field(name=%?, idx=%u)", name, idx); match self.stack.pop() { diff --git a/src/libstd/priority_queue.rs b/src/libstd/priority_queue.rs index 47af3576c9062..33fe1cfff8e59 100644 --- a/src/libstd/priority_queue.rs +++ b/src/libstd/priority_queue.rs @@ -45,25 +45,9 @@ impl Mutable for PriorityQueue { pub impl PriorityQueue { /// Returns the greatest item in the queue - fails if empty - #[cfg(stage0)] - fn top(&self) -> &'self T { &self.data[0] } - - /// Returns the greatest item in the queue - fails if empty - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn top<'a>(&'a self) -> &'a T { &self.data[0] } /// Returns the greatest item in the queue - None if empty - #[cfg(stage0)] - fn maybe_top(&self) -> Option<&'self T> { - if self.is_empty() { None } else { Some(self.top()) } - } - - /// Returns the greatest item in the queue - None if empty - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn maybe_top<'a>(&'a self) -> Option<&'a T> { if self.is_empty() { None } else { Some(self.top()) } } diff --git a/src/libstd/serialize.rs b/src/libstd/serialize.rs index 1ad581ba993e4..032df4c819cdd 100644 --- a/src/libstd/serialize.rs +++ b/src/libstd/serialize.rs @@ -55,11 +55,6 @@ pub trait Encoder { fn emit_enum_struct_variant_field(&self, f_name: &str, f_idx: uint, f: &fn()); fn emit_struct(&self, name: &str, len: uint, f: &fn()); - #[cfg(stage0)] - fn emit_field(&self, f_name: &str, f_idx: uint, f: &fn()); - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn emit_struct_field(&self, f_name: &str, f_idx: uint, f: &fn()); fn emit_tuple(&self, len: uint, f: &fn()); @@ -111,11 +106,6 @@ pub trait Decoder { fn read_enum_struct_variant_field(&self, &f_name: &str, f_idx: uint, f: &fn() -> T) -> T; fn read_struct(&self, s_name: &str, len: uint, f: &fn() -> T) -> T; - #[cfg(stage0)] - fn read_field(&self, f_name: &str, f_idx: uint, f: &fn() -> T) -> T; - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn read_struct_field(&self, f_name: &str, f_idx: uint, f: &fn() -> T) -> T; fn read_tuple(&self, f: &fn(uint) -> T) -> T; diff --git a/src/libstd/smallintmap.rs b/src/libstd/smallintmap.rs index fb17d4e50900c..1b72300a178ba 100644 --- a/src/libstd/smallintmap.rs +++ b/src/libstd/smallintmap.rs @@ -50,20 +50,6 @@ impl Map for SmallIntMap { } /// Visit all key-value pairs in order - #[cfg(stage0)] - fn each(&self, it: &fn(&uint, &'self V) -> bool) { - for uint::range(0, self.v.len()) |i| { - match self.v[i] { - Some(ref elt) => if !it(&i, elt) { break }, - None => () - } - } - } - - /// Visit all key-value pairs in order - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn each<'a>(&'a self, it: &fn(&uint, &'a V) -> bool) { for uint::range(0, self.v.len()) |i| { match self.v[i] { @@ -79,15 +65,6 @@ impl Map for SmallIntMap { } /// Visit all values in order - #[cfg(stage0)] - fn each_value(&self, blk: &fn(value: &V) -> bool) { - self.each(|_, v| blk(v)) - } - - /// Visit all values in order - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn each_value<'a>(&'a self, blk: &fn(value: &'a V) -> bool) { self.each(|_, v| blk(v)) } @@ -103,22 +80,6 @@ impl Map for SmallIntMap { } /// Return a reference to the value corresponding to the key - #[cfg(stage0)] - fn find(&self, key: &uint) -> Option<&'self V> { - if *key < self.v.len() { - match self.v[*key] { - Some(ref value) => Some(value), - None => None - } - } else { - None - } - } - - /// Return a reference to the value corresponding to the key - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn find<'a>(&'a self, key: &uint) -> Option<&'a V> { if *key < self.v.len() { match self.v[*key] { @@ -131,22 +92,6 @@ impl Map for SmallIntMap { } /// Return a mutable reference to the value corresponding to the key - #[cfg(stage0)] - fn find_mut(&mut self, key: &uint) -> Option<&'self mut V> { - if *key < self.v.len() { - match self.v[*key] { - Some(ref mut value) => Some(value), - None => None - } - } else { - None - } - } - - /// Return a mutable reference to the value corresponding to the key - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn find_mut<'a>(&'a mut self, key: &uint) -> Option<&'a mut V> { if *key < self.v.len() { match self.v[*key] { @@ -188,20 +133,6 @@ pub impl SmallIntMap { fn new() -> SmallIntMap { SmallIntMap{v: ~[]} } /// Visit all key-value pairs in reverse order - #[cfg(stage0)] - fn each_reverse(&self, it: &fn(uint, &'self V) -> bool) { - for uint::range_rev(self.v.len(), 0) |i| { - match self.v[i - 1] { - Some(ref elt) => if !it(i - 1, elt) { break }, - None => () - } - } - } - - /// Visit all key-value pairs in reverse order - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn each_reverse<'a>(&'a self, it: &fn(uint, &'a V) -> bool) { for uint::range_rev(self.v.len(), 0) |i| { match self.v[i - 1] { @@ -211,14 +142,6 @@ pub impl SmallIntMap { } } - #[cfg(stage0)] - fn get(&self, key: &uint) -> &'self V { - self.find(key).expect("key not present") - } - - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn get<'a>(&'a self, key: &uint) -> &'a V { self.find(key).expect("key not present") } diff --git a/src/libsyntax/ext/base.rs b/src/libsyntax/ext/base.rs index 2d6d74b5c1e32..5bad9ecae3ed7 100644 --- a/src/libsyntax/ext/base.rs +++ b/src/libsyntax/ext/base.rs @@ -451,17 +451,6 @@ impl MapChain{ // ugh: can't get this to compile with mut because of the // lack of flow sensitivity. - #[cfg(stage0)] - fn get_map(&self) -> &'self HashMap { - match *self { - BaseMapChain (~ref map) => map, - ConsMapChain (~ref map,_) => map - } - } - - // ugh: can't get this to compile with mut because of the - // lack of flow sensitivity. - #[cfg(not(stage0))] fn get_map<'a>(&'a self) -> &'a HashMap { match *self { BaseMapChain (~ref map) => map, diff --git a/src/libsyntax/opt_vec.rs b/src/libsyntax/opt_vec.rs index 6cf7bba600ec0..600ab964e5238 100644 --- a/src/libsyntax/opt_vec.rs +++ b/src/libsyntax/opt_vec.rs @@ -61,15 +61,6 @@ impl OptVec { } } - #[cfg(stage0)] - fn get(&self, i: uint) -> &'self T { - match *self { - Empty => fail!(fmt!("Invalid index %u", i)), - Vec(ref v) => &v[i] - } - } - - #[cfg(not(stage0))] fn get<'a>(&'a self, i: uint) -> &'a T { match *self { Empty => fail!(fmt!("Invalid index %u", i)), From b5a7e8b35322869b1cf51bd1b35a86e9e721da54 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Mon, 22 Apr 2013 18:09:23 -0400 Subject: [PATCH 051/410] desnapshot --- src/libcore/core.rc | 3 --- src/libcore/num/f32.rs | 16 ++-------------- src/libcore/num/f64.rs | 12 ++---------- src/libcore/num/float.rs | 15 ++------------- src/libcore/num/int-template.rs | 14 -------------- src/libcore/num/num.rs | 28 ++-------------------------- src/libcore/num/strconv.rs | 9 --------- src/libcore/num/uint-template.rs | 14 -------------- src/libcore/ops.rs | 12 ------------ src/libcore/prelude.rs | 3 --- src/libcore/repr.rs | 1 - src/libcore/rt/io/mod.rs | 3 --- src/libstd/std.rc | 3 --- 13 files changed, 8 insertions(+), 125 deletions(-) diff --git a/src/libcore/core.rc b/src/libcore/core.rc index f9a56f613d542..f6e4056f3d0fc 100644 --- a/src/libcore/core.rc +++ b/src/libcore/core.rc @@ -75,9 +75,6 @@ they contained the following prologue: pub use kinds::{Const, Copy, Owned, Durable}; pub use ops::{Drop}; -#[cfg(stage0)] -pub use ops::{Add, Sub, Mul, Div, Modulo, Neg, Not}; -#[cfg(not(stage0))] pub use ops::{Add, Sub, Mul, Quot, Rem, Neg, Not}; pub use ops::{BitAnd, BitOr, BitXor}; pub use ops::{Shl, Shr, Index}; diff --git a/src/libcore/num/f32.rs b/src/libcore/num/f32.rs index e687f482fa98c..6398127a5faff 100644 --- a/src/libcore/num/f32.rs +++ b/src/libcore/num/f32.rs @@ -278,24 +278,12 @@ impl Mul for f32 { #[inline(always)] fn mul(&self, other: &f32) -> f32 { *self * *other } } - -#[cfg(stage0,notest)] -impl Div for f32 { - #[inline(always)] - fn div(&self, other: &f32) -> f32 { *self / *other } -} -#[cfg(not(stage0),notest)] +#[cfg(notest)] impl Quot for f32 { #[inline(always)] fn quot(&self, other: &f32) -> f32 { *self / *other } } - -#[cfg(stage0,notest)] -impl Modulo for f32 { - #[inline(always)] - fn modulo(&self, other: &f32) -> f32 { *self % *other } -} -#[cfg(not(stage0),notest)] +#[cfg(notest)] impl Rem for f32 { #[inline(always)] fn rem(&self, other: &f32) -> f32 { *self % *other } diff --git a/src/libcore/num/f64.rs b/src/libcore/num/f64.rs index d00e6ae2c0d79..013f3c5095e2a 100644 --- a/src/libcore/num/f64.rs +++ b/src/libcore/num/f64.rs @@ -296,20 +296,12 @@ impl Sub for f64 { impl Mul for f64 { fn mul(&self, other: &f64) -> f64 { *self * *other } } -#[cfg(stage0,notest)] -impl Div for f64 { - fn div(&self, other: &f64) -> f64 { *self / *other } -} -#[cfg(not(stage0),notest)] +#[cfg(notest)] impl Quot for f64 { #[inline(always)] fn quot(&self, other: &f64) -> f64 { *self / *other } } -#[cfg(stage0,notest)] -impl Modulo for f64 { - fn modulo(&self, other: &f64) -> f64 { *self % *other } -} -#[cfg(not(stage0),notest)] +#[cfg(notest)] impl Rem for f64 { #[inline(always)] fn rem(&self, other: &f64) -> f64 { *self % *other } diff --git a/src/libcore/num/float.rs b/src/libcore/num/float.rs index 3aa8848cdbed2..496ad4ec176b7 100644 --- a/src/libcore/num/float.rs +++ b/src/libcore/num/float.rs @@ -691,23 +691,12 @@ impl Mul for float { #[inline(always)] fn mul(&self, other: &float) -> float { *self * *other } } - -#[cfg(stage0,notest)] -impl Div for float { - #[inline(always)] - fn div(&self, other: &float) -> float { *self / *other } -} -#[cfg(not(stage0),notest)] +#[cfg(notest)] impl Quot for float { #[inline(always)] fn quot(&self, other: &float) -> float { *self / *other } } -#[cfg(stage0,notest)] -impl Modulo for float { - #[inline(always)] - fn modulo(&self, other: &float) -> float { *self % *other } -} -#[cfg(not(stage0),notest)] +#[cfg(notest)] impl Rem for float { #[inline(always)] fn rem(&self, other: &float) -> float { *self % *other } diff --git a/src/libcore/num/int-template.rs b/src/libcore/num/int-template.rs index ec38a32c039d6..85489755fc7a9 100644 --- a/src/libcore/num/int-template.rs +++ b/src/libcore/num/int-template.rs @@ -200,13 +200,6 @@ impl Mul for T { #[inline(always)] fn mul(&self, other: &T) -> T { *self * *other } } - -#[cfg(stage0,notest)] -impl Div for T { - #[inline(always)] - fn div(&self, other: &T) -> T { *self / *other } -} -#[cfg(not(stage0),notest)] impl Quot for T { /// /// Returns the integer quotient, truncated towards 0. As this behaviour reflects @@ -229,13 +222,6 @@ impl Quot for T { #[inline(always)] fn quot(&self, other: &T) -> T { *self / *other } } - -#[cfg(stage0,notest)] -impl Modulo for T { - #[inline(always)] - fn modulo(&self, other: &T) -> T { *self % *other } -} -#[cfg(not(stage0),notest)] impl Rem for T { /// /// Returns the integer remainder after division, satisfying: diff --git a/src/libcore/num/num.rs b/src/libcore/num/num.rs index 3e43ebfef1222..de7597fa821d6 100644 --- a/src/libcore/num/num.rs +++ b/src/libcore/num/num.rs @@ -10,13 +10,6 @@ //! An interface for numeric types use cmp::{Eq, Ord}; -#[cfg(stage0)] -use ops::{Add, Sub, Mul, Neg}; -#[cfg(stage0)] -use Quot = ops::Div; -#[cfg(stage0)] -use Rem = ops::Modulo; -#[cfg(not(stage0))] use ops::{Add, Sub, Mul, Quot, Rem, Neg}; use ops::{Not, BitAnd, BitOr, BitXor, Shl, Shr}; use option::Option; @@ -391,25 +384,8 @@ pub fn pow_with_uint+Mul>( total } -/// Helper function for testing numeric operations -#[cfg(stage0,test)] -pub fn test_num(ten: T, two: T) { - assert_eq!(ten.add(&two), cast(12)); - assert_eq!(ten.sub(&two), cast(8)); - assert_eq!(ten.mul(&two), cast(20)); - assert_eq!(ten.div(&two), cast(5)); - assert_eq!(ten.modulo(&two), cast(0)); - - assert_eq!(ten.add(&two), ten + two); - assert_eq!(ten.sub(&two), ten - two); - assert_eq!(ten.mul(&two), ten * two); - assert_eq!(ten.div(&two), ten / two); - assert_eq!(ten.modulo(&two), ten % two); -} -#[cfg(stage1,test)] -#[cfg(stage2,test)] -#[cfg(stage3,test)] -pub fn test_num(ten: T, two: T) { +#[cfg(test)] +fn test_num(ten: T, two: T) { assert_eq!(ten.add(&two), cast(12)); assert_eq!(ten.sub(&two), cast(8)); assert_eq!(ten.mul(&two), cast(20)); diff --git a/src/libcore/num/strconv.rs b/src/libcore/num/strconv.rs index 2f3cd92dac09e..004789e7fc1ca 100644 --- a/src/libcore/num/strconv.rs +++ b/src/libcore/num/strconv.rs @@ -9,15 +9,6 @@ // except according to those terms. use core::cmp::{Ord, Eq}; -#[cfg(stage0)] -use ops::{Add, Sub, Mul, Neg}; -#[cfg(stage0)] -use Quot = ops::Div; -#[cfg(stage0)] -use Rem = ops::Modulo; -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] use ops::{Add, Sub, Mul, Quot, Rem, Neg}; use option::{None, Option, Some}; use char; diff --git a/src/libcore/num/uint-template.rs b/src/libcore/num/uint-template.rs index 3dfdd22c42dc1..f975226cde63b 100644 --- a/src/libcore/num/uint-template.rs +++ b/src/libcore/num/uint-template.rs @@ -165,24 +165,10 @@ impl Mul for T { #[inline(always)] fn mul(&self, other: &T) -> T { *self * *other } } - -#[cfg(stage0,notest)] -impl Div for T { - #[inline(always)] - fn div(&self, other: &T) -> T { *self / *other } -} -#[cfg(not(stage0),notest)] impl Quot for T { #[inline(always)] fn quot(&self, other: &T) -> T { *self / *other } } - -#[cfg(stage0,notest)] -impl Modulo for T { - #[inline(always)] - fn modulo(&self, other: &T) -> T { *self % *other } -} -#[cfg(not(stage0),notest)] impl Rem for T { #[inline(always)] fn rem(&self, other: &T) -> T { *self % *other } diff --git a/src/libcore/ops.rs b/src/libcore/ops.rs index 1aa7aada05c88..18dcf34e49bfb 100644 --- a/src/libcore/ops.rs +++ b/src/libcore/ops.rs @@ -30,24 +30,12 @@ pub trait Mul { fn mul(&self, rhs: &RHS) -> Result; } -#[lang="div"] -#[cfg(stage0)] -pub trait Div { - fn div(&self, rhs: &RHS) -> Result; -} #[lang="quot"] -#[cfg(not(stage0))] pub trait Quot { fn quot(&self, rhs: &RHS) -> Result; } -#[lang="modulo"] -#[cfg(stage0)] -pub trait Modulo { - fn modulo(&self, rhs: &RHS) -> Result; -} #[lang="rem"] -#[cfg(not(stage0))] pub trait Rem { fn rem(&self, rhs: &RHS) -> Result; } diff --git a/src/libcore/prelude.rs b/src/libcore/prelude.rs index 9a2e480ce6e54..318725d2822a5 100644 --- a/src/libcore/prelude.rs +++ b/src/libcore/prelude.rs @@ -14,9 +14,6 @@ pub use either::{Either, Left, Right}; pub use kinds::{Const, Copy, Owned, Durable}; -#[cfg(stage0)] -pub use ops::{Add, Sub, Mul, Div, Modulo, Neg, Not}; -#[cfg(not(stage0))] pub use ops::{Add, Sub, Mul, Quot, Rem, Neg, Not}; pub use ops::{BitAnd, BitOr, BitXor}; pub use ops::{Drop}; diff --git a/src/libcore/repr.rs b/src/libcore/repr.rs index 2d6412b0cc832..abcb727809eea 100644 --- a/src/libcore/repr.rs +++ b/src/libcore/repr.rs @@ -23,7 +23,6 @@ use io::{Writer, WriterUtil}; use libc::c_void; use managed; use ptr; -#[cfg(stage0)] use sys; use reflect; use reflect::{MovePtr, align}; use to_str::ToStr; diff --git a/src/libcore/rt/io/mod.rs b/src/libcore/rt/io/mod.rs index b035532144c44..cb00b02d9d1b6 100644 --- a/src/libcore/rt/io/mod.rs +++ b/src/libcore/rt/io/mod.rs @@ -125,18 +125,15 @@ pub mod file; pub mod net; /// Readers and Writers for memory buffers and strings. -#[cfg(not(stage0))] // XXX Using unsnapshotted features pub mod mem; /// Non-blocking access to stdin, stdout, stderr pub mod stdio; /// Basic stream compression. XXX: Belongs with other flate code -#[cfg(not(stage0))] // XXX Using unsnapshotted features pub mod flate; /// Interop between byte streams and pipes. Not sure where it belongs -#[cfg(not(stage0))] // XXX " pub mod comm_adapters; /// Extension traits diff --git a/src/libstd/std.rc b/src/libstd/std.rc index 0a5348d79760e..40db9f89d0fd7 100644 --- a/src/libstd/std.rc +++ b/src/libstd/std.rc @@ -91,13 +91,10 @@ pub mod cmp; pub mod base64; pub mod rl; pub mod workcache; -#[cfg(not(stage0))] #[path="num/bigint.rs"] pub mod bigint; -#[cfg(not(stage0))] #[path="num/rational.rs"] pub mod rational; -#[cfg(not(stage0))] #[path="num/complex.rs"] pub mod complex; pub mod stats; From a896440ca1b93cc5dc6edd827ea2ae89602bfa9e Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Fri, 15 Mar 2013 15:24:24 -0400 Subject: [PATCH 052/410] new borrow checker (mass squash) --- src/libcore/cleanup.rs | 40 +- src/libcore/io.rs | 14 +- src/libcore/rt/sched/mod.rs | 2 +- src/libcore/str.rs | 12 - src/libcore/to_bytes.rs | 2 +- src/libcore/unstable/lang.rs | 47 +- src/libcore/vec.rs | 11 +- src/librustc/driver/driver.rs | 21 +- src/librustc/driver/session.rs | 8 + src/librustc/front/test.rs | 5 +- src/librustc/metadata/decoder.rs | 4 +- src/librustc/metadata/tydecode.rs | 3 + src/librustc/metadata/tyencode.rs | 48 +- src/librustc/middle/astencode.rs | 43 +- src/librustc/middle/borrowck/check_loans.rs | 1063 ++++++++--------- src/librustc/middle/borrowck/doc.rs | 750 ++++++++++++ src/librustc/middle/borrowck/gather_loans.rs | 643 ---------- .../middle/borrowck/gather_loans/lifetime.rs | 322 +++++ .../middle/borrowck/gather_loans/mod.rs | 710 +++++++++++ .../borrowck/gather_loans/restrictions.rs | 251 ++++ src/librustc/middle/borrowck/loan.rs | 312 ----- src/librustc/middle/borrowck/mod.rs | 861 ++++++------- src/librustc/middle/borrowck/preserve.rs | 409 ------- src/librustc/middle/const_eval.rs | 2 - src/librustc/middle/dataflow.rs | 1009 ++++++++++++++++ src/librustc/middle/kind.rs | 8 +- src/librustc/middle/lang_items.rs | 66 +- src/librustc/middle/liveness.rs | 105 +- src/librustc/middle/mem_categorization.rs | 546 ++++----- src/librustc/middle/moves.rs | 28 +- src/librustc/middle/region.rs | 318 ++--- src/librustc/middle/resolve.rs | 12 +- src/librustc/middle/trans/_match.rs | 7 +- src/librustc/middle/trans/base.rs | 109 +- src/librustc/middle/trans/callee.rs | 2 - src/librustc/middle/trans/common.rs | 9 +- src/librustc/middle/trans/consts.rs | 11 +- src/librustc/middle/trans/datum.rs | 7 +- src/librustc/middle/trans/expr.rs | 54 +- src/librustc/middle/trans/inline.rs | 39 +- src/librustc/middle/trans/meth.rs | 5 + src/librustc/middle/trans/monomorphize.rs | 4 + src/librustc/middle/trans/reachable.rs | 58 +- src/librustc/middle/ty.rs | 100 +- src/librustc/middle/typeck/check/_match.rs | 6 +- src/librustc/middle/typeck/check/method.rs | 47 +- src/librustc/middle/typeck/check/mod.rs | 54 +- src/librustc/middle/typeck/check/regionck.rs | 571 +++++---- .../middle/typeck/check/regionmanip.rs | 3 +- src/librustc/middle/typeck/check/writeback.rs | 29 +- src/librustc/middle/typeck/coherence.rs | 12 +- src/librustc/middle/typeck/infer/coercion.rs | 48 +- src/librustc/middle/typeck/infer/mod.rs | 81 +- .../middle/typeck/infer/region_inference.rs | 253 ++-- src/librustc/middle/typeck/infer/unify.rs | 35 +- src/librustc/util/ppaux.rs | 17 +- src/libstd/arc.rs | 12 +- src/libstd/bitv.rs | 14 +- src/libstd/net_tcp.rs | 6 +- src/libstd/serialize.rs | 15 - src/libstd/sort.rs | 70 +- src/libstd/std.rc | 1 - src/libsyntax/ast_map.rs | 69 +- src/libsyntax/ast_util.rs | 24 +- src/libsyntax/codemap.rs | 4 +- src/libsyntax/ext/base.rs | 108 +- src/libsyntax/ext/expand.rs | 3 + src/libsyntax/ext/pipes/liveness.rs | 4 +- src/libsyntax/ext/pipes/proto.rs | 18 +- src/libsyntax/print/pp.rs | 4 +- src/libsyntax/print/pprust.rs | 8 +- src/libsyntax/util/interner.rs | 4 +- src/libsyntax/visit.rs | 6 + .../compile-fail/access-mode-in-closures.rs | 2 +- .../arc-rw-read-mode-shouldnt-escape.rs | 1 + .../arc-rw-write-mode-shouldnt-escape.rs | 1 + .../attempted-access-non-fatal.rs | 4 +- .../compile-fail/borrowck-addr-of-upvar.rs | 4 +- .../compile-fail/borrowck-assign-comp-idx.rs | 10 +- src/test/compile-fail/borrowck-assign-comp.rs | 18 +- .../borrowck-assign-to-constants.rs | 4 +- .../compile-fail/borrowck-assign-to-enum.rs | 2 +- .../borrowck-assign-to-subfield.rs | 2 +- ... => borrowck-auto-mut-ref-to-immut-var.rs} | 10 +- .../compile-fail/borrowck-autoref-3261.rs | 4 +- .../borrowck-bad-nested-calls-free.rs | 43 + .../borrowck-bad-nested-calls-move.rs | 43 + .../borrowck-borrow-from-owned-ptr.rs | 70 +- .../borrowck-borrow-from-stack-variable.rs | 67 +- .../borrowck-borrowed-uniq-rvalue-2.rs | 3 +- .../borrowck-borrowed-uniq-rvalue.rs | 2 +- ...borrowck-call-method-from-mut-aliasable.rs | 8 +- ...k-imm-ref-to-mut-rec-field-issue-3162-c.rs | 4 +- .../borrowck-insert-during-each.rs | 4 +- .../compile-fail/borrowck-issue-2657-1.rs | 4 +- .../compile-fail/borrowck-issue-2657-2.rs | 2 +- .../compile-fail/borrowck-lend-flow-if.rs | 52 + .../compile-fail/borrowck-lend-flow-loop.rs | 164 +++ .../compile-fail/borrowck-lend-flow-match.rs | 60 + src/test/compile-fail/borrowck-lend-flow.rs | 93 +- .../borrowck-loan-blocks-move-cc.rs | 8 +- .../compile-fail/borrowck-loan-blocks-move.rs | 4 +- .../borrowck-loan-blocks-mut-uniq.rs | 4 +- ...borrowck-loan-local-as-both-mut-and-imm.rs | 4 +- .../borrowck-loan-rcvr-overloaded-op.rs | 6 +- src/test/compile-fail/borrowck-loan-rcvr.rs | 24 +- .../compile-fail/borrowck-loan-vec-content.rs | 4 +- .../compile-fail/borrowck-move-by-capture.rs | 2 +- .../borrowck-mut-addr-of-imm-var.rs | 2 +- .../compile-fail/borrowck-mut-boxed-vec.rs | 4 +- .../compile-fail/borrowck-mut-deref-comp.rs | 4 +- .../borrowck-mut-slice-of-imm-vec.rs | 2 +- .../borrowck-no-cycle-in-exchange-heap.rs | 4 +- .../borrowck-pat-by-value-binding.rs | 11 +- src/test/compile-fail/borrowck-pat-enum.rs | 14 +- .../borrowck-pat-reassign-binding.rs | 11 +- ...borrowck-pat-reassign-sometimes-binding.rs | 26 - .../borrowck-reborrow-from-mut.rs | 22 +- .../compile-fail/borrowck-ref-into-rvalue.rs | 8 +- .../compile-fail/borrowck-ref-mut-of-imm.rs | 2 +- .../compile-fail/borrowck-unary-move-2.rs | 2 +- src/test/compile-fail/borrowck-unary-move.rs | 4 +- .../compile-fail/borrowck-uniq-via-box.rs | 55 - .../compile-fail/borrowck-uniq-via-lend.rs | 8 +- .../compile-fail/borrowck-uniq-via-ref.rs | 7 +- .../borrowck-vec-pattern-element-loan.rs | 12 +- .../borrowck-vec-pattern-loan-from-mut.rs | 2 +- .../borrowck-vec-pattern-move-tail.rs | 5 +- .../borrowck-vec-pattern-nesting.rs | 4 +- .../borrowck-vec-pattern-tail-element-loan.rs | 4 +- .../borrowck-wg-borrow-mut-to-imm-fail-2.rs | 4 +- .../borrowck-wg-borrow-mut-to-imm-fail-3.rs | 4 +- .../borrowck-wg-borrow-mut-to-imm-fail.rs | 4 +- .../compile-fail/borrowck-wg-move-base-2.rs | 2 +- src/test/compile-fail/fn-variance-3.rs | 2 +- .../compile-fail/immut-function-arguments.rs | 4 +- src/test/compile-fail/index_message.rs | 2 +- src/test/compile-fail/issue-1896-1.rs | 4 +- src/test/compile-fail/issue-2149.rs | 1 - src/test/compile-fail/issue-2151.rs | 3 +- src/test/compile-fail/issue-2590.rs | 2 +- src/test/compile-fail/issue-3044.rs | 1 - src/test/compile-fail/issue-511.rs | 2 +- .../kindck-owned-trait-contains.rs | 3 + src/test/compile-fail/lambda-mutate-nested.rs | 2 +- src/test/compile-fail/lambda-mutate.rs | 2 +- .../moves-based-on-type-block-bad.rs | 2 +- ...type-move-out-of-closure-env-issue-1965.rs | 2 +- .../compile-fail/mutable-class-fields-2.rs | 3 +- src/test/compile-fail/mutable-class-fields.rs | 5 +- .../compile-fail/mutable-huh-ptr-assign.rs | 2 +- src/test/compile-fail/regions-addr-of-arg.rs | 2 +- .../compile-fail/regions-creating-enums.rs | 4 +- .../compile-fail/regions-creating-enums4.rs | 3 +- .../compile-fail/regions-escape-bound-fn.rs | 2 +- .../regions-escape-loop-via-variable.rs | 2 +- .../regions-escape-loop-via-vec.rs | 4 +- .../regions-escape-via-trait-or-not.rs | 7 +- .../regions-infer-borrow-scope-too-big.rs | 2 +- .../regions-infer-borrow-scope-within-loop.rs | 2 +- src/test/compile-fail/regions-nested-fns-2.rs | 2 +- src/test/compile-fail/regions-nested-fns.rs | 2 +- .../compile-fail/regions-ret-borrowed-1.rs | 1 + src/test/compile-fail/regions-ret-borrowed.rs | 1 + src/test/compile-fail/regions-ret.rs | 2 +- .../regions-var-type-out-of-scope.rs | 2 +- src/test/compile-fail/swap-no-lval.rs | 4 +- .../compile-fail/writing-to-immutable-vec.rs | 6 +- .../borrowck-nested-calls.rs} | 24 +- .../run-pass/coerce-reborrow-mut-vec-rcvr.rs | 6 +- src/test/run-pass/issue-2735-2.rs | 18 +- src/test/run-pass/issue-2735-3.rs | 18 +- 172 files changed, 6449 insertions(+), 4277 deletions(-) create mode 100644 src/librustc/middle/borrowck/doc.rs delete mode 100644 src/librustc/middle/borrowck/gather_loans.rs create mode 100644 src/librustc/middle/borrowck/gather_loans/lifetime.rs create mode 100644 src/librustc/middle/borrowck/gather_loans/mod.rs create mode 100644 src/librustc/middle/borrowck/gather_loans/restrictions.rs delete mode 100644 src/librustc/middle/borrowck/loan.rs delete mode 100644 src/librustc/middle/borrowck/preserve.rs create mode 100644 src/librustc/middle/dataflow.rs rename src/test/compile-fail/{auto-ref-borrowck-failure.rs => borrowck-auto-mut-ref-to-immut-var.rs} (81%) create mode 100644 src/test/compile-fail/borrowck-bad-nested-calls-free.rs create mode 100644 src/test/compile-fail/borrowck-bad-nested-calls-move.rs create mode 100644 src/test/compile-fail/borrowck-lend-flow-if.rs create mode 100644 src/test/compile-fail/borrowck-lend-flow-loop.rs create mode 100644 src/test/compile-fail/borrowck-lend-flow-match.rs delete mode 100644 src/test/compile-fail/borrowck-pat-reassign-sometimes-binding.rs delete mode 100644 src/test/compile-fail/borrowck-uniq-via-box.rs rename src/test/{compile-fail/issue-4500.rs => run-pass/borrowck-nested-calls.rs} (51%) diff --git a/src/libcore/cleanup.rs b/src/libcore/cleanup.rs index a07c6b4811b6c..1dfe1b22dc4fb 100644 --- a/src/libcore/cleanup.rs +++ b/src/libcore/cleanup.rs @@ -126,14 +126,17 @@ struct AnnihilateStats { n_bytes_freed: uint } -unsafe fn each_live_alloc(f: &fn(box: *mut BoxRepr, uniq: bool) -> bool) { +unsafe fn each_live_alloc(read_next_before: bool, + f: &fn(box: *mut BoxRepr, uniq: bool) -> bool) { + //! Walks the internal list of allocations + use managed; let task: *Task = transmute(rustrt::rust_get_task()); let box = (*task).boxed_region.live_allocs; let mut box: *mut BoxRepr = transmute(copy box); while box != mut_null() { - let next = transmute(copy (*box).header.next); + let next_before = transmute(copy (*box).header.next); let uniq = (*box).header.ref_count == managed::raw::RC_MANAGED_UNIQUE; @@ -141,7 +144,11 @@ unsafe fn each_live_alloc(f: &fn(box: *mut BoxRepr, uniq: bool) -> bool) { break } - box = next + if read_next_before { + box = next_before; + } else { + box = transmute(copy (*box).header.next); + } } } @@ -159,7 +166,7 @@ fn debug_mem() -> bool { #[cfg(notest)] #[lang="annihilate"] pub unsafe fn annihilate() { - use unstable::lang::local_free; + use unstable::lang::{local_free, debug_ptr}; use io::WriterUtil; use io; use libc; @@ -173,27 +180,46 @@ pub unsafe fn annihilate() { }; // Pass 1: Make all boxes immortal. - for each_live_alloc |box, uniq| { + // + // In this pass, nothing gets freed, so it does not matter whether + // we read the next field before or after the callback. + for each_live_alloc(true) |box, uniq| { stats.n_total_boxes += 1; if uniq { + debug_ptr("Managed-uniq: ", &*box); stats.n_unique_boxes += 1; } else { + debug_ptr("Immortalizing: ", &*box); (*box).header.ref_count = managed::raw::RC_IMMORTAL; } } // Pass 2: Drop all boxes. - for each_live_alloc |box, uniq| { + // + // In this pass, unique-managed boxes may get freed, but not + // managed boxes, so we must read the `next` field *after* the + // callback, as the original value may have been freed. + for each_live_alloc(false) |box, uniq| { if !uniq { + debug_ptr("Invoking tydesc/glue on: ", &*box); let tydesc: *TypeDesc = transmute(copy (*box).header.type_desc); let drop_glue: DropGlue = transmute(((*tydesc).drop_glue, 0)); + debug_ptr("Box data: ", &(*box).data); + debug_ptr("Type descriptor: ", tydesc); drop_glue(to_unsafe_ptr(&tydesc), transmute(&(*box).data)); + debug_ptr("Dropped ", &*box); } } // Pass 3: Free all boxes. - for each_live_alloc |box, uniq| { + // + // In this pass, managed boxes may get freed (but not + // unique-managed boxes, though I think that none of those are + // left), so we must read the `next` field before, since it will + // not be valid after. + for each_live_alloc(true) |box, uniq| { if !uniq { + debug_ptr("About to free: ", &*box); stats.n_bytes_freed += (*((*box).header.type_desc)).size + sys::size_of::(); diff --git a/src/libcore/io.rs b/src/libcore/io.rs index 35ffd88c8f477..217ea1a9982c1 100644 --- a/src/libcore/io.rs +++ b/src/libcore/io.rs @@ -1022,7 +1022,7 @@ pub enum WriterType { Screen, File } pub trait Writer { /// Write all of the given bytes. - fn write(&self, v: &const [u8]); + fn write(&self, v: &[u8]); /// Move the current position within the stream. The second parameter /// determines the position that the first parameter is relative to. @@ -1039,7 +1039,7 @@ pub trait Writer { } impl Writer for @Writer { - fn write(&self, v: &const [u8]) { self.write(v) } + fn write(&self, v: &[u8]) { self.write(v) } fn seek(&self, a: int, b: SeekStyle) { self.seek(a, b) } fn tell(&self) -> uint { self.tell() } fn flush(&self) -> int { self.flush() } @@ -1047,7 +1047,7 @@ impl Writer for @Writer { } impl Writer for Wrapper { - fn write(&self, bs: &const [u8]) { self.base.write(bs); } + fn write(&self, bs: &[u8]) { self.base.write(bs); } fn seek(&self, off: int, style: SeekStyle) { self.base.seek(off, style); } fn tell(&self) -> uint { self.base.tell() } fn flush(&self) -> int { self.base.flush() } @@ -1055,7 +1055,7 @@ impl Writer for Wrapper { } impl Writer for *libc::FILE { - fn write(&self, v: &const [u8]) { + fn write(&self, v: &[u8]) { unsafe { do vec::as_const_buf(v) |vbuf, len| { let nout = libc::fwrite(vbuf as *c_void, @@ -1105,7 +1105,7 @@ pub fn FILE_writer(f: *libc::FILE, cleanup: bool) -> @Writer { } impl Writer for fd_t { - fn write(&self, v: &const [u8]) { + fn write(&self, v: &[u8]) { unsafe { let mut count = 0u; do vec::as_const_buf(v) |vbuf, len| { @@ -1262,7 +1262,7 @@ pub fn u64_to_be_bytes(n: u64, size: uint, } } -pub fn u64_from_be_bytes(data: &const [u8], +pub fn u64_from_be_bytes(data: &[u8], start: uint, size: uint) -> u64 { @@ -1497,7 +1497,7 @@ pub struct BytesWriter { } impl Writer for BytesWriter { - fn write(&self, v: &const [u8]) { + fn write(&self, v: &[u8]) { let v_len = v.len(); let bytes_len = vec::uniq_len(&const self.bytes); diff --git a/src/libcore/rt/sched/mod.rs b/src/libcore/rt/sched/mod.rs index 28946281628b1..a2132676c1a03 100644 --- a/src/libcore/rt/sched/mod.rs +++ b/src/libcore/rt/sched/mod.rs @@ -304,7 +304,7 @@ pub impl Scheduler { unsafe { let last_task = transmute::, Option<&mut Task>>(last_task); let last_task_context = match last_task { - Some(ref t) => Some(&mut t.saved_context), None => None + Some(t) => Some(&mut t.saved_context), None => None }; let next_task_context = match self.current_task { Some(ref mut t) => Some(&mut t.saved_context), None => None diff --git a/src/libcore/str.rs b/src/libcore/str.rs index 064bffa00561f..f4430ca669fb1 100644 --- a/src/libcore/str.rs +++ b/src/libcore/str.rs @@ -2356,9 +2356,6 @@ pub trait StrSlice<'self> { fn any(&self, it: &fn(char) -> bool) -> bool; fn contains<'a>(&self, needle: &'a str) -> bool; fn contains_char(&self, needle: char) -> bool; - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn char_iter(&self) -> StrCharIterator<'self>; fn each(&self, it: &fn(u8) -> bool); fn eachi(&self, it: &fn(uint, u8) -> bool); @@ -2420,9 +2417,6 @@ impl<'self> StrSlice<'self> for &'self str { contains_char(*self, needle) } - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] #[inline] fn char_iter(&self) -> StrCharIterator<'self> { StrCharIterator { @@ -2615,17 +2609,11 @@ impl Clone for ~str { } } -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] pub struct StrCharIterator<'self> { priv index: uint, priv string: &'self str, } -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] impl<'self> Iterator for StrCharIterator<'self> { #[inline] fn next(&mut self) -> Option { diff --git a/src/libcore/to_bytes.rs b/src/libcore/to_bytes.rs index 7b4b6994e50a5..63dcf0f44dc3b 100644 --- a/src/libcore/to_bytes.rs +++ b/src/libcore/to_bytes.rs @@ -19,7 +19,7 @@ use io::Writer; use option::{None, Option, Some}; use str; -pub type Cb<'self> = &'self fn(buf: &const [u8]) -> bool; +pub type Cb<'self> = &'self fn(buf: &[u8]) -> bool; /** * A trait to implement in order to make a type hashable; diff --git a/src/libcore/unstable/lang.rs b/src/libcore/unstable/lang.rs index de0542afc399a..cf71b01aeaeeb 100644 --- a/src/libcore/unstable/lang.rs +++ b/src/libcore/unstable/lang.rs @@ -11,7 +11,7 @@ //! Runtime calls emitted by the compiler. use cast::transmute; -use libc::{c_char, c_uchar, c_void, size_t, uintptr_t, c_int}; +use libc::{c_char, c_uchar, c_void, size_t, uintptr_t, c_int, STDERR_FILENO}; use managed::raw::BoxRepr; use str; use sys; @@ -74,7 +74,44 @@ pub fn fail_borrowed() { #[lang="exchange_malloc"] #[inline(always)] pub unsafe fn exchange_malloc(td: *c_char, size: uintptr_t) -> *c_char { - transmute(exchange_alloc::malloc(transmute(td), transmute(size))) + let result = transmute(exchange_alloc::malloc(transmute(td), transmute(size))); + debug_ptr("exchange_malloc: ", result); + return result; +} + +/// Because this code is so perf. sensitive, use a static constant so that +/// debug printouts are compiled out most of the time. +static ENABLE_DEBUG_PTR: bool = false; + +#[inline] +pub fn debug_ptr(tag: &'static str, p: *T) { + //! A useful debugging function that prints a pointer + tag + newline + //! without allocating memory. + + if ENABLE_DEBUG_PTR && ::rt::env::get().debug_mem { + debug_ptr_slow(tag, p); + } + + fn debug_ptr_slow(tag: &'static str, p: *T) { + use io; + let dbg = STDERR_FILENO as io::fd_t; + let letters = ['0', '1', '2', '3', '4', '5', '6', '7', '8', + '9', 'a', 'b', 'c', 'd', 'e', 'f']; + dbg.write_str(tag); + + static uint_nibbles: uint = ::uint::bytes << 1; + let mut buffer = [0_u8, ..uint_nibbles+1]; + let mut i = p as uint; + let mut c = uint_nibbles; + while c > 0 { + c -= 1; + buffer[c] = letters[i & 0xF] as u8; + i >>= 4; + } + dbg.write(buffer.slice(0, uint_nibbles)); + + dbg.write_str("\n"); + } } // NB: Calls to free CANNOT be allowed to fail, as throwing an exception from @@ -83,13 +120,16 @@ pub unsafe fn exchange_malloc(td: *c_char, size: uintptr_t) -> *c_char { #[lang="exchange_free"] #[inline(always)] pub unsafe fn exchange_free(ptr: *c_char) { + debug_ptr("exchange_free: ", ptr); exchange_alloc::free(transmute(ptr)) } #[lang="malloc"] #[inline(always)] pub unsafe fn local_malloc(td: *c_char, size: uintptr_t) -> *c_char { - return rustrt::rust_upcall_malloc_noswitch(td, size); + let result = rustrt::rust_upcall_malloc_noswitch(td, size); + debug_ptr("local_malloc: ", result); + return result; } // NB: Calls to free CANNOT be allowed to fail, as throwing an exception from @@ -98,6 +138,7 @@ pub unsafe fn local_malloc(td: *c_char, size: uintptr_t) -> *c_char { #[lang="free"] #[inline(always)] pub unsafe fn local_free(ptr: *c_char) { + debug_ptr("local_free: ", ptr); rustrt::rust_upcall_free_noswitch(ptr); } diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs index 94f866643532c..2f9488d1bc7a7 100644 --- a/src/libcore/vec.rs +++ b/src/libcore/vec.rs @@ -19,9 +19,6 @@ use cmp::{Eq, Ord, TotalEq, TotalOrd, Ordering, Less, Equal, Greater}; use clone::Clone; use old_iter::BaseIter; use old_iter; -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] use iterator::Iterator; use kinds::Copy; use libc; @@ -1824,7 +1821,7 @@ pub trait CopyableVector { } /// Extension methods for vectors -impl<'self,T:Copy> CopyableVector for &'self const [T] { +impl<'self,T:Copy> CopyableVector for &'self [T] { /// Returns a copy of `v`. #[inline] fn to_owned(&self) -> ~[T] { @@ -2710,18 +2707,12 @@ impl Clone for ~[A] { } // could be implemented with &[T] with .slice(), but this avoids bounds checks -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] pub struct VecIterator<'self, T> { priv ptr: *T, priv end: *T, priv lifetime: &'self T // FIXME: #5922 } -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] impl<'self, T> Iterator<&'self T> for VecIterator<'self, T> { #[inline] fn next(&mut self) -> Option<&'self T> { diff --git a/src/librustc/driver/driver.rs b/src/librustc/driver/driver.rs index 2e64c0c45bffe..e899b1abc2648 100644 --- a/src/librustc/driver/driver.rs +++ b/src/librustc/driver/driver.rs @@ -263,7 +263,7 @@ pub fn compile_rest(sess: Session, middle::check_loop::check_crate(ty_cx, crate)); let middle::moves::MoveMaps {moves_map, variable_moves_map, - capture_map} = + moved_variables_set, capture_map} = time(time_passes, ~"compute moves", || middle::moves::compute_moves(ty_cx, method_map, crate)); @@ -271,20 +271,19 @@ pub fn compile_rest(sess: Session, middle::check_match::check_crate(ty_cx, method_map, moves_map, crate)); - let last_use_map = - time(time_passes, ~"liveness checking", || - middle::liveness::check_crate(ty_cx, method_map, - variable_moves_map, - capture_map, crate)); + time(time_passes, ~"liveness checking", || + middle::liveness::check_crate(ty_cx, method_map, + variable_moves_map, + capture_map, crate)); - let (root_map, mutbl_map, write_guard_map) = + let (root_map, write_guard_map) = time(time_passes, ~"borrow checking", || middle::borrowck::check_crate(ty_cx, method_map, - moves_map, capture_map, - crate)); + moves_map, moved_variables_set, + capture_map, crate)); time(time_passes, ~"kind checking", || - kind::check_crate(ty_cx, method_map, last_use_map, crate)); + kind::check_crate(ty_cx, method_map, crate)); time(time_passes, ~"lint checking", || lint::check_crate(ty_cx, crate)); @@ -292,9 +291,7 @@ pub fn compile_rest(sess: Session, if upto == cu_no_trans { return (crate, Some(ty_cx)); } let maps = astencode::Maps { - mutbl_map: mutbl_map, root_map: root_map, - last_use_map: last_use_map, method_map: method_map, vtable_map: vtable_map, write_guard_map: write_guard_map, diff --git a/src/librustc/driver/session.rs b/src/librustc/driver/session.rs index 55c81e6d17b20..fff97d2436af3 100644 --- a/src/librustc/driver/session.rs +++ b/src/librustc/driver/session.rs @@ -173,15 +173,19 @@ pub type Session = @Session_; pub impl Session_ { fn span_fatal(@self, sp: span, msg: ~str) -> ! { + debug!("span_fatal invoked: %s", msg); self.span_diagnostic.span_fatal(sp, msg) } fn fatal(@self, msg: ~str) -> ! { + debug!("fatal invoked: %s", msg); self.span_diagnostic.handler().fatal(msg) } fn span_err(@self, sp: span, msg: ~str) { + debug!("span_err invoked: %s", msg); self.span_diagnostic.span_err(sp, msg) } fn err(@self, msg: ~str) { + debug!("err invoked: %s", msg); self.span_diagnostic.handler().err(msg) } fn has_errors(@self) -> bool { @@ -191,15 +195,19 @@ pub impl Session_ { self.span_diagnostic.handler().abort_if_errors() } fn span_warn(@self, sp: span, msg: ~str) { + debug!("span_warn invoked: %s", msg); self.span_diagnostic.span_warn(sp, msg) } fn warn(@self, msg: ~str) { + debug!("warn invoked: %s", msg); self.span_diagnostic.handler().warn(msg) } fn span_note(@self, sp: span, msg: ~str) { + debug!("span_note invoked: %s", msg); self.span_diagnostic.span_note(sp, msg) } fn note(@self, msg: ~str) { + debug!("note invoked: %s", msg); self.span_diagnostic.handler().note(msg) } fn span_bug(@self, sp: span, msg: ~str) -> ! { diff --git a/src/librustc/front/test.rs b/src/librustc/front/test.rs index 02e2a4c8734f8..22bce62336cab 100644 --- a/src/librustc/front/test.rs +++ b/src/librustc/front/test.rs @@ -69,7 +69,8 @@ fn generate_test_harness(sess: session::Session, testfns: ~[] }; - cx.ext_cx.bt_push(ExpandedFrom(CallInfo { + let ext_cx = cx.ext_cx; + ext_cx.bt_push(ExpandedFrom(CallInfo { call_site: dummy_sp(), callee: NameAndSpan { name: ~"test", @@ -84,7 +85,7 @@ fn generate_test_harness(sess: session::Session, let fold = fold::make_fold(precursor); let res = @fold.fold_crate(&*crate); - cx.ext_cx.bt_pop(); + ext_cx.bt_pop(); return res; } diff --git a/src/librustc/metadata/decoder.rs b/src/librustc/metadata/decoder.rs index cfe31360d321b..1a94b57279cc4 100644 --- a/src/librustc/metadata/decoder.rs +++ b/src/librustc/metadata/decoder.rs @@ -244,8 +244,8 @@ fn doc_transformed_self_ty(doc: ebml::Doc, } } -pub fn item_type(_: ast::def_id, item: ebml::Doc, tcx: ty::ctxt, cdata: cmd) - -> ty::t { +pub fn item_type(_item_id: ast::def_id, item: ebml::Doc, + tcx: ty::ctxt, cdata: cmd) -> ty::t { doc_type(item, tcx, cdata) } diff --git a/src/librustc/metadata/tydecode.rs b/src/librustc/metadata/tydecode.rs index 011ee115e8c15..963afa08bfe33 100644 --- a/src/librustc/metadata/tydecode.rs +++ b/src/librustc/metadata/tydecode.rs @@ -245,6 +245,9 @@ fn parse_region(st: @mut PState) -> ty::Region { 't' => { ty::re_static } + 'e' => { + ty::re_static + } _ => fail!(~"parse_region: bad input") } } diff --git a/src/librustc/metadata/tyencode.rs b/src/librustc/metadata/tyencode.rs index 763b1984b81c8..fdba3ac4f00ab 100644 --- a/src/librustc/metadata/tyencode.rs +++ b/src/librustc/metadata/tyencode.rs @@ -71,30 +71,29 @@ pub fn enc_ty(w: @io::Writer, cx: @ctxt, t: ty::t) { w.write_str(result_str); } ac_use_abbrevs(abbrevs) => { - match abbrevs.find(&t) { - Some(a) => { w.write_str(*a.s); return; } - None => { - let pos = w.tell(); - enc_sty(w, cx, /*bad*/copy ty::get(t).sty); - let end = w.tell(); - let len = end - pos; - fn estimate_sz(u: uint) -> uint { - let mut n = u; - let mut len = 0u; - while n != 0u { len += 1u; n = n >> 4u; } - return len; - } - let abbrev_len = 3u + estimate_sz(pos) + estimate_sz(len); - if abbrev_len < len { - // I.e. it's actually an abbreviation. - let s = ~"#" + uint::to_str_radix(pos, 16u) + ~":" + - uint::to_str_radix(len, 16u) + ~"#"; - let a = ty_abbrev { pos: pos, len: len, s: @s }; - abbrevs.insert(t, a); - } - return; + match abbrevs.find(&t) { + Some(a) => { w.write_str(*a.s); return; } + None => {} } - } + let pos = w.tell(); + enc_sty(w, cx, /*bad*/copy ty::get(t).sty); + let end = w.tell(); + let len = end - pos; + fn estimate_sz(u: uint) -> uint { + let mut n = u; + let mut len = 0u; + while n != 0u { len += 1u; n = n >> 4u; } + return len; + } + let abbrev_len = 3u + estimate_sz(pos) + estimate_sz(len); + if abbrev_len < len { + // I.e. it's actually an abbreviation. + let s = ~"#" + uint::to_str_radix(pos, 16u) + ~":" + + uint::to_str_radix(len, 16u) + ~"#"; + let a = ty_abbrev { pos: pos, len: len, s: @s }; + abbrevs.insert(t, a); + } + return; } } } @@ -152,6 +151,9 @@ fn enc_region(w: @io::Writer, cx: @ctxt, r: ty::Region) { ty::re_static => { w.write_char('t'); } + ty::re_empty => { + w.write_char('e'); + } ty::re_infer(_) => { // these should not crop up after typeck cx.diag.handler().bug(~"Cannot encode region variables"); diff --git a/src/librustc/middle/astencode.rs b/src/librustc/middle/astencode.rs index c65521228fa87..7a3bdce875da2 100644 --- a/src/librustc/middle/astencode.rs +++ b/src/librustc/middle/astencode.rs @@ -44,9 +44,7 @@ use writer = std::ebml::writer; // Auxiliary maps of things to be encoded pub struct Maps { - mutbl_map: middle::borrowck::mutbl_map, root_map: middle::borrowck::root_map, - last_use_map: middle::liveness::last_use_map, method_map: middle::typeck::method_map, vtable_map: middle::typeck::vtable_map, write_guard_map: middle::borrowck::write_guard_map, @@ -151,7 +149,7 @@ pub fn decode_inlined_item(cdata: @cstore::crate_metadata, fn reserve_id_range(sess: Session, from_id_range: ast_util::id_range) -> ast_util::id_range { // Handle the case of an empty range: - if ast_util::empty(from_id_range) { return from_id_range; } + if from_id_range.empty() { return from_id_range; } let cnt = from_id_range.max - from_id_range.min; let to_id_min = sess.parse_sess.next_id; let to_id_max = sess.parse_sess.next_id + cnt; @@ -162,7 +160,6 @@ fn reserve_id_range(sess: Session, pub impl ExtendedDecodeContext { fn tr_id(&self, id: ast::node_id) -> ast::node_id { /*! - * * Translates an internal id, meaning a node id that is known * to refer to some part of the item currently being inlined, * such as a local variable or argument. All naked node-ids @@ -173,12 +170,11 @@ pub impl ExtendedDecodeContext { */ // from_id_range should be non-empty - assert!(!ast_util::empty(self.from_id_range)); + assert!(!self.from_id_range.empty()); (id - self.from_id_range.min + self.to_id_range.min) } fn tr_def_id(&self, did: ast::def_id) -> ast::def_id { /*! - * * Translates an EXTERNAL def-id, converting the crate number * from the one used in the encoded data to the current crate * numbers.. By external, I mean that it be translated to a @@ -203,7 +199,6 @@ pub impl ExtendedDecodeContext { } fn tr_intern_def_id(&self, did: ast::def_id) -> ast::def_id { /*! - * * Translates an INTERNAL def-id, meaning a def-id that is * known to refer to some part of the item currently being * inlined. In that case, we want to convert the def-id to @@ -461,11 +456,7 @@ impl tr for ty::AutoAdjustment { impl tr for ty::AutoRef { fn tr(&self, xcx: @ExtendedDecodeContext) -> ty::AutoRef { - ty::AutoRef { - kind: self.kind, - region: self.region.tr(xcx), - mutbl: self.mutbl, - } + self.map_region(|r| r.tr(xcx)) } } @@ -474,7 +465,7 @@ impl tr for ty::Region { match *self { ty::re_bound(br) => ty::re_bound(br.tr(xcx)), ty::re_scope(id) => ty::re_scope(xcx.tr_id(id)), - ty::re_static | ty::re_infer(*) => *self, + ty::re_empty | ty::re_static | ty::re_infer(*) => *self, ty::re_free(ref fr) => { ty::re_free(ty::FreeRegion {scope_id: xcx.tr_id(fr.scope_id), bound_region: fr.bound_region.tr(xcx)}) @@ -914,23 +905,6 @@ fn encode_side_tables_for_id(ecx: @e::EncodeContext, } } - if maps.mutbl_map.contains(&id) { - do ebml_w.tag(c::tag_table_mutbl) { - ebml_w.id(id); - } - } - - for maps.last_use_map.find(&id).each |&m| { - do ebml_w.tag(c::tag_table_last_use) { - ebml_w.id(id); - do ebml_w.tag(c::tag_table_val) { - do ebml_w.emit_from_vec(/*bad*/ copy **m) |id| { - id.encode(ebml_w); - } - } - } - } - for maps.method_map.find(&id).each |&mme| { do ebml_w.tag(c::tag_table_method_map) { ebml_w.id(id); @@ -1108,9 +1082,7 @@ fn decode_side_tables(xcx: @ExtendedDecodeContext, found for id %d (orig %d)", tag, id, id0); - if tag == (c::tag_table_mutbl as uint) { - dcx.maps.mutbl_map.insert(id); - } else if tag == (c::tag_table_moves_map as uint) { + if tag == (c::tag_table_moves_map as uint) { dcx.maps.moves_map.insert(id); } else { let val_doc = entry_doc.get(c::tag_table_val as uint); @@ -1138,11 +1110,6 @@ fn decode_side_tables(xcx: @ExtendedDecodeContext, } else if tag == (c::tag_table_param_defs as uint) { let bounds = val_dsr.read_type_param_def(xcx); dcx.tcx.ty_param_defs.insert(id, bounds); - } else if tag == (c::tag_table_last_use as uint) { - let ids = val_dsr.read_to_vec(|| { - xcx.tr_id(val_dsr.read_int()) - }); - dcx.maps.last_use_map.insert(id, @mut ids); } else if tag == (c::tag_table_method_map as uint) { dcx.maps.method_map.insert( id, diff --git a/src/librustc/middle/borrowck/check_loans.rs b/src/librustc/middle/borrowck/check_loans.rs index 07b6c80d4201c..56eb57009ca08 100644 --- a/src/librustc/middle/borrowck/check_loans.rs +++ b/src/librustc/middle/borrowck/check_loans.rs @@ -18,284 +18,143 @@ // 4. moves do not affect things loaned out in any way use middle::moves; -use middle::typeck::check::PurityState; -use middle::borrowck::{Loan, bckerr, BorrowckCtxt, inherent_mutability}; -use middle::borrowck::{ReqMaps, root_map_key, save_and_restore_managed}; -use middle::borrowck::{MoveError, MoveOk, MoveFromIllegalCmt}; -use middle::borrowck::{MoveWhileBorrowed}; -use middle::mem_categorization::{cat_arg, cat_comp, cat_deref}; -use middle::mem_categorization::{cat_local, cat_rvalue, cat_self}; -use middle::mem_categorization::{cat_special, cmt, gc_ptr, loan_path, lp_arg}; -use middle::mem_categorization::{lp_comp, lp_deref, lp_local}; +use middle::borrowck::*; +use mc = middle::mem_categorization; use middle::ty; -use util::ppaux::ty_to_str; - +use util::ppaux::Repr; use core::hashmap::HashSet; -use core::util::with; -use syntax::ast::m_mutbl; +use syntax::ast::{m_mutbl, m_imm, m_const}; use syntax::ast; use syntax::ast_util; -use syntax::codemap::span; -use syntax::print::pprust; use syntax::visit; +use syntax::codemap::span; -struct CheckLoanCtxt { +struct CheckLoanCtxt<'self> { bccx: @BorrowckCtxt, - req_maps: ReqMaps, - - reported: HashSet, - - declared_purity: @mut PurityState, - fn_args: @mut @~[ast::node_id] -} - -// if we are enforcing purity, why are we doing so? -#[deriving(Eq)] -enum purity_cause { - // enforcing purity because fn was declared pure: - pc_pure_fn, - - // enforce purity because we need to guarantee the - // validity of some alias; `bckerr` describes the - // reason we needed to enforce purity. - pc_cmt(bckerr) -} - -// if we're not pure, why? -#[deriving(Eq)] -enum impurity_cause { - // some surrounding block was marked as 'unsafe' - pc_unsafe, - - // nothing was unsafe, and nothing was pure - pc_default, + dfcx: &'self LoanDataFlow, + all_loans: &'self [Loan], + reported: @mut HashSet, } pub fn check_loans(bccx: @BorrowckCtxt, - req_maps: ReqMaps, - crate: @ast::crate) { + dfcx: &LoanDataFlow, + all_loans: &[Loan], + body: &ast::blk) { + debug!("check_loans(body id=%?)", body.node.id); + let clcx = @mut CheckLoanCtxt { bccx: bccx, - req_maps: req_maps, - reported: HashSet::new(), - declared_purity: @mut PurityState::function(ast::impure_fn, 0), - fn_args: @mut @~[] + dfcx: dfcx, + all_loans: all_loans, + reported: @mut HashSet::new(), }; + let vt = visit::mk_vt(@visit::Visitor {visit_expr: check_loans_in_expr, visit_local: check_loans_in_local, visit_block: check_loans_in_block, + visit_pat: check_loans_in_pat, visit_fn: check_loans_in_fn, .. *visit::default_visitor()}); - visit::visit_crate(crate, clcx, vt); + (vt.visit_block)(body, clcx, vt); } -#[deriving(Eq)] -enum assignment_type { - at_straight_up, - at_swap +enum MoveError { + MoveOk, + MoveFromIllegalCmt(mc::cmt), + MoveWhileBorrowed(/*loan*/@LoanPath, /*loan*/span) } -pub impl assignment_type { - fn checked_by_liveness(&self) -> bool { - // the liveness pass guarantees that immutable local variables - // are only assigned once; but it doesn't consider &mut - match *self { - at_straight_up => true, - at_swap => true - } - } - fn ing_form(&self, desc: ~str) -> ~str { - match *self { - at_straight_up => ~"assigning to " + desc, - at_swap => ~"swapping to and from " + desc - } - } -} - -pub impl CheckLoanCtxt { +pub impl<'self> CheckLoanCtxt<'self> { fn tcx(&self) -> ty::ctxt { self.bccx.tcx } - fn purity(&mut self, scope_id: ast::node_id) - -> Either + fn each_issued_loan(&self, + scope_id: ast::node_id, + op: &fn(&Loan) -> bool) { - let default_purity = match self.declared_purity.purity { - // an unsafe declaration overrides all - ast::unsafe_fn => return Right(pc_unsafe), - - // otherwise, remember what was declared as the - // default, but we must scan for requirements - // imposed by the borrow check - ast::pure_fn => Left(pc_pure_fn), - ast::extern_fn | ast::impure_fn => Right(pc_default) - }; - - // scan to see if this scope or any enclosing scope requires - // purity. if so, that overrides the declaration. - - let mut scope_id = scope_id; - loop { - match self.req_maps.pure_map.find(&scope_id) { - None => (), - Some(e) => return Left(pc_cmt(*e)) - } - - match self.tcx().region_maps.opt_encl_scope(scope_id) { - None => return default_purity, - Some(next_scope_id) => scope_id = next_scope_id + //! Iterates over each loan that that has been issued + //! on entrance to `scope_id`, regardless of whether it is + //! actually *in scope* at that point. Sometimes loans + //! are issued for future scopes and thus they may have been + //! *issued* but not yet be in effect. + + for self.dfcx.each_bit_on_entry(scope_id) |loan_index| { + let loan = &self.all_loans[loan_index]; + if !op(loan) { + return; } } } - fn walk_loans(&self, - mut scope_id: ast::node_id, - f: &fn(v: &Loan) -> bool) { - - loop { - for self.req_maps.req_loan_map.find(&scope_id).each |loans| { - for loans.each |loan| { - if !f(loan) { return; } - } - } - - match self.tcx().region_maps.opt_encl_scope(scope_id) { - None => return, - Some(next_scope_id) => scope_id = next_scope_id, - } - } - } - - fn walk_loans_of(&mut self, - scope_id: ast::node_id, - lp: @loan_path, - f: &fn(v: &Loan) -> bool) { - for self.walk_loans(scope_id) |loan| { - if loan.lp == lp { - if !f(loan) { return; } - } - } - } + fn each_in_scope_loan(&self, + scope_id: ast::node_id, + op: &fn(&Loan) -> bool) + { + //! Like `each_issued_loan()`, but only considers loans that are + //! currently in scope. - // when we are in a pure context, we check each call to ensure - // that the function which is invoked is itself pure. - // - // note: we take opt_expr and expr_id separately because for - // overloaded operators the callee has an id but no expr. - // annoying. - fn check_pure_callee_or_arg(&mut self, - pc: Either, - opt_expr: Option<@ast::expr>, - callee_id: ast::node_id, - callee_span: span) { - let tcx = self.tcx(); - - debug!("check_pure_callee_or_arg(pc=%?, expr=%?, \ - callee_id=%d, ty=%s)", - pc, - opt_expr.map(|e| pprust::expr_to_str(*e, tcx.sess.intr()) ), - callee_id, - ty_to_str(self.tcx(), ty::node_id_to_type(tcx, callee_id))); - - // Purity rules: an expr B is a legal callee or argument to a - // call within a pure function A if at least one of the - // following holds: - // - // (a) A was declared pure and B is one of its arguments; - // (b) B is a stack closure; - // (c) B is a pure fn; - // (d) B is not a fn. - - match opt_expr { - Some(expr) => { - match expr.node { - ast::expr_path(_) if pc == Left(pc_pure_fn) => { - let def = *self.tcx().def_map.get(&expr.id); - let did = ast_util::def_id_of_def(def); - let is_fn_arg = - did.crate == ast::local_crate && - (*self.fn_args).contains(&(did.node)); - if is_fn_arg { return; } // case (a) above - } - ast::expr_fn_block(*) | ast::expr_loop_body(*) | - ast::expr_do_body(*) => { - if self.is_stack_closure(expr.id) { - // case (b) above + let region_maps = self.tcx().region_maps; + for self.each_issued_loan(scope_id) |loan| { + if region_maps.is_subscope_of(scope_id, loan.kill_scope) { + if !op(loan) { return; } - } - _ => () } - } - None => () } + } - let callee_ty = ty::node_id_to_type(tcx, callee_id); - match ty::get(callee_ty).sty { - ty::ty_bare_fn(ty::BareFnTy {purity: purity, _}) | - ty::ty_closure(ty::ClosureTy {purity: purity, _}) => { - match purity { - ast::pure_fn => return, // case (c) above - ast::impure_fn | ast::unsafe_fn | ast::extern_fn => { - self.report_purity_error( - pc, callee_span, - fmt!("access to %s function", - purity.to_str())); + fn each_in_scope_restriction(&self, + scope_id: ast::node_id, + loan_path: @LoanPath, + op: &fn(&Loan, &Restriction) -> bool) + { + //! Iterates through all the in-scope restrictions for the + //! given `loan_path` + + for self.each_in_scope_loan(scope_id) |loan| { + for loan.restrictions.each |restr| { + if restr.loan_path == loan_path { + if !op(loan, restr) { + return; } } } - _ => return, // case (d) above } } - // True if the expression with the given `id` is a stack closure. - // The expression must be an expr_fn_block(*) - fn is_stack_closure(&mut self, id: ast::node_id) -> bool { - let fn_ty = ty::node_id_to_type(self.tcx(), id); - match ty::get(fn_ty).sty { - ty::ty_closure(ty::ClosureTy {sigil: ast::BorrowedSigil, - _}) => true, - _ => false - } - } + fn loans_generated_by(&self, scope_id: ast::node_id) -> ~[uint] { + //! Returns a vector of the loans that are generated as + //! we encounter `scope_id`. - fn is_allowed_pure_arg(&mut self, expr: @ast::expr) -> bool { - return match expr.node { - ast::expr_path(_) => { - let def = *self.tcx().def_map.get(&expr.id); - let did = ast_util::def_id_of_def(def); - did.crate == ast::local_crate && - (*self.fn_args).contains(&(did.node)) - } - ast::expr_fn_block(*) => self.is_stack_closure(expr.id), - _ => false, - }; + let mut result = ~[]; + for self.dfcx.each_gen_bit(scope_id) |loan_index| { + result.push(loan_index); + } + return result; } fn check_for_conflicting_loans(&mut self, scope_id: ast::node_id) { - debug!("check_for_conflicting_loans(scope_id=%?)", scope_id); + //! Checks to see whether any of the loans that are issued + //! by `scope_id` conflict with loans that have already been + //! issued when we enter `scope_id` (for example, we do not + //! permit two `&mut` borrows of the same variable). - let new_loans = match self.req_maps.req_loan_map.find(&scope_id) { - None => return, - Some(&loans) => loans - }; - let new_loans: &mut ~[Loan] = new_loans; - - debug!("new_loans has length %?", new_loans.len()); + debug!("check_for_conflicting_loans(scope_id=%?)", scope_id); - let par_scope_id = self.tcx().region_maps.encl_scope(scope_id); - for self.walk_loans(par_scope_id) |old_loan| { - debug!("old_loan=%?", self.bccx.loan_to_repr(old_loan)); + let new_loan_indices = self.loans_generated_by(scope_id); + debug!("new_loan_indices = %?", new_loan_indices); - for new_loans.each |new_loan| { - self.report_error_if_loans_conflict(old_loan, new_loan); + for self.each_issued_loan(scope_id) |issued_loan| { + for new_loan_indices.each |&new_loan_index| { + let new_loan = &self.all_loans[new_loan_index]; + self.report_error_if_loans_conflict(issued_loan, new_loan); } } - let len = new_loans.len(); - for uint::range(0, len) |i| { - let loan_i = new_loans[i]; - for uint::range(i+1, len) |j| { - let loan_j = new_loans[j]; - self.report_error_if_loans_conflict(&loan_i, &loan_j); + for uint::range(0, new_loan_indices.len()) |i| { + let old_loan = &self.all_loans[new_loan_indices[i]]; + for uint::range(i+1, new_loan_indices.len()) |j| { + let new_loan = &self.all_loans[new_loan_indices[j]]; + self.report_error_if_loans_conflict(old_loan, new_loan); } } } @@ -303,219 +162,358 @@ pub impl CheckLoanCtxt { fn report_error_if_loans_conflict(&self, old_loan: &Loan, new_loan: &Loan) { - if old_loan.lp != new_loan.lp { - return; - } + //! Checks whether `old_loan` and `new_loan` can safely be issued + //! simultaneously. + + debug!("report_error_if_loans_conflict(old_loan=%s, new_loan=%s)", + old_loan.repr(self.tcx()), + new_loan.repr(self.tcx())); + + // Should only be called for loans that are in scope at the same time. + let region_maps = self.tcx().region_maps; + assert!(region_maps.scopes_intersect(old_loan.kill_scope, + new_loan.kill_scope)); + + self.report_error_if_loan_conflicts_with_restriction( + old_loan, new_loan, old_loan, new_loan) && + self.report_error_if_loan_conflicts_with_restriction( + new_loan, old_loan, old_loan, new_loan); + } - match (old_loan.kind, new_loan.kind) { - (PartialFreeze, PartialTake) | (PartialTake, PartialFreeze) | - (TotalFreeze, PartialFreeze) | (PartialFreeze, TotalFreeze) | - (Immobile, _) | (_, Immobile) | - (PartialFreeze, PartialFreeze) | - (PartialTake, PartialTake) | - (TotalFreeze, TotalFreeze) => { - /* ok */ - } + fn report_error_if_loan_conflicts_with_restriction(&self, + loan1: &Loan, + loan2: &Loan, + old_loan: &Loan, + new_loan: &Loan) -> bool { + //! Checks whether the restrictions introduced by `loan1` would + //! prohibit `loan2`. Returns false if an error is reported. + + debug!("report_error_if_loan_conflicts_with_restriction(\ + loan1=%s, loan2=%s)", + loan1.repr(self.tcx()), + loan2.repr(self.tcx())); + + // Restrictions that would cause the new loan to be immutable: + let illegal_if = match loan2.mutbl { + m_mutbl => RESTR_ALIAS | RESTR_FREEZE | RESTR_MUTATE, + m_imm => RESTR_ALIAS | RESTR_FREEZE, + m_const => RESTR_ALIAS, + }; + debug!("illegal_if=%?", illegal_if); + + for loan1.restrictions.each |restr| { + if !restr.set.intersects(illegal_if) { loop; } + if restr.loan_path != loan2.loan_path { loop; } - (PartialTake, TotalFreeze) | (TotalFreeze, PartialTake) | - (TotalTake, TotalFreeze) | (TotalFreeze, TotalTake) | - (TotalTake, PartialFreeze) | (PartialFreeze, TotalTake) | - (TotalTake, PartialTake) | (PartialTake, TotalTake) | - (TotalTake, TotalTake) => { - self.bccx.span_err( - new_loan.cmt.span, - fmt!("loan of %s as %s \ - conflicts with prior loan", - self.bccx.cmt_to_str(new_loan.cmt), - self.bccx.loan_kind_to_str(new_loan.kind))); - self.bccx.span_note( - old_loan.cmt.span, - fmt!("prior loan as %s granted here", - self.bccx.loan_kind_to_str(old_loan.kind))); + match (new_loan.mutbl, old_loan.mutbl) { + (m_mutbl, m_mutbl) => { + self.bccx.span_err( + new_loan.span, + fmt!("cannot borrow `%s` as mutable \ + more than once at at a time", + self.bccx.loan_path_to_str(new_loan.loan_path))); + self.bccx.span_note( + old_loan.span, + fmt!("second borrow of `%s` as mutable occurs here", + self.bccx.loan_path_to_str(new_loan.loan_path))); + return false; + } + + _ => { + self.bccx.span_err( + new_loan.span, + fmt!("cannot borrow `%s` as %s because \ + it is also borrowed as %s" + self.bccx.loan_path_to_str(new_loan.loan_path), + self.bccx.mut_to_str(new_loan.mutbl), + self.bccx.mut_to_str(old_loan.mutbl))); + self.bccx.span_note( + old_loan.span, + fmt!("second borrow of `%s` occurs here", + self.bccx.loan_path_to_str(new_loan.loan_path))); + return false; + } } } + + true } - fn is_local_variable(&self, cmt: cmt) -> bool { + fn is_local_variable(&self, cmt: mc::cmt) -> bool { match cmt.cat { - cat_local(_) => true, + mc::cat_local(_) => true, _ => false } } - fn check_assignment(&mut self, at: assignment_type, ex: @ast::expr) { + fn check_assignment(&self, expr: @ast::expr) { // We don't use cat_expr() here because we don't want to treat // auto-ref'd parameters in overloaded operators as rvalues. - let cmt = match self.bccx.tcx.adjustments.find(&ex.id) { - None => self.bccx.cat_expr_unadjusted(ex), - Some(&adj) => self.bccx.cat_expr_autoderefd(ex, adj) + let cmt = match self.bccx.tcx.adjustments.find(&expr.id) { + None => self.bccx.cat_expr_unadjusted(expr), + Some(&adj) => self.bccx.cat_expr_autoderefd(expr, adj) }; - debug!("check_assignment(cmt=%s)", - self.bccx.cmt_to_repr(cmt)); - - if self.is_local_variable(cmt) && at.checked_by_liveness() { - // liveness guarantees that immutable local variables - // are only assigned once - } else { - match cmt.mutbl { - McDeclared | McInherited => { - // Ok, but if this loan is a mutable loan, then mark the - // loan path (if it exists) as being used. This is similar - // to the check performed in loan.rs in issue_loan(). This - // type of use of mutable is different from issuing a loan, - // however. - for cmt.lp.each |lp| { - for lp.node_id().each |&id| { - self.tcx().used_mut_nodes.insert(id); - } - } - } - McReadOnly | McImmutable => { + debug!("check_assignment(cmt=%s)", cmt.repr(self.tcx())); + + // check that the value being assigned is declared as mutable + // and report an error otherwise. + match cmt.mutbl { + mc::McDeclared => { + // OK + } + mc::McInherited => { + // OK, but we may have to add an entry to `used_mut_nodes` + mark_writes_through_upvars_as_used_mut(self, cmt); + } + mc::McReadOnly | mc::McImmutable => { + // Subtle: liveness guarantees that immutable local + // variables are only assigned once, so no need to + // report an error for an assignment to a local + // variable (note also that it is not legal to borrow + // for a local variable before it has been assigned + // for the first time). + if !self.is_local_variable(cmt) { self.bccx.span_err( - ex.span, - at.ing_form(self.bccx.cmt_to_str(cmt))); - return; + expr.span, + fmt!("cannot assign to %s %s" + cmt.mutbl.to_user_str(), + self.bccx.cmt_to_str(cmt))); } + return; } } - // if this is a pure function, only loan-able state can be - // assigned, because it is uniquely tied to this function and - // is not visible from the outside - let purity = self.purity(ex.id); - match purity { - Right(_) => (), - Left(pc_cmt(_)) => { - // Subtle: Issue #3162. If we are enforcing purity - // because there is a reference to aliasable, mutable data - // that we require to be immutable, we can't allow writes - // even to data owned by the current stack frame. This is - // because that aliasable data might have been located on - // the current stack frame, we don't know. - self.report_purity_error( - purity, - ex.span, - at.ing_form(self.bccx.cmt_to_str(cmt))); - } - Left(pc_pure_fn) => { - if cmt.lp.is_none() { - self.report_purity_error( - purity, ex.span, - at.ing_form(self.bccx.cmt_to_str(cmt))); - } - } + if check_for_aliasable_mutable_writes(self, expr, cmt) { + check_for_assignment_to_restricted_or_frozen_location( + self, expr, cmt); } - // check for a conflicting loan as well, except in the case of - // taking a mutable ref. that will create a loan of its own - // which will be checked for compat separately in - // check_for_conflicting_loans() - for cmt.lp.each |lp| { - self.check_for_loan_conflicting_with_assignment( - at, ex, cmt, *lp); - } + fn mark_writes_through_upvars_as_used_mut(self: &CheckLoanCtxt, + cmt: mc::cmt) { + //! If the mutability of the `cmt` being written is inherited + //! from a local variable in another closure, liveness may + //! not have been able to detect that this variable's mutability + //! is important, so we must add the variable to the + //! `used_mut_nodes` table here. This is because liveness + //! does not consider closures. + + let mut passed_upvar = false; + let mut cmt = cmt; + loop { + debug!("mark_writes_through_upvars_as_used_mut(cmt=%s)", + cmt.repr(self.tcx())); + match cmt.cat { + mc::cat_local(id) | + mc::cat_arg(id, _) | + mc::cat_self(id) => { + if passed_upvar { + self.tcx().used_mut_nodes.insert(id); + } + return; + } - self.bccx.add_to_mutbl_map(cmt); + mc::cat_stack_upvar(b) => { + cmt = b; + passed_upvar = true; + } - // Check for and insert write guards as necessary. - self.add_write_guards_if_necessary(cmt); - } + mc::cat_rvalue | + mc::cat_static_item | + mc::cat_implicit_self | + mc::cat_copied_upvar(*) | + mc::cat_deref(_, _, mc::unsafe_ptr(*)) | + mc::cat_deref(_, _, mc::gc_ptr(*)) | + mc::cat_deref(_, _, mc::region_ptr(*)) => { + assert_eq!(cmt.mutbl, mc::McDeclared); + return; + } - fn add_write_guards_if_necessary(&mut self, cmt: cmt) { - match cmt.cat { - cat_deref(base, deref_count, ptr_kind) => { - self.add_write_guards_if_necessary(base); - - match ptr_kind { - gc_ptr(ast::m_mutbl) => { - let key = root_map_key { - id: base.id, - derefs: deref_count - }; - self.bccx.write_guard_map.insert(key); + mc::cat_discr(b, _) | + mc::cat_deref(b, _, mc::uniq_ptr(*)) => { + assert_eq!(cmt.mutbl, mc::McInherited); + cmt = b; + } + + mc::cat_interior(b, _) => { + if cmt.mutbl == mc::McInherited { + cmt = b; + } else { + return; // field declared as mutable or some such + } } - _ => {} } } - cat_comp(base, _) => { - self.add_write_guards_if_necessary(base); - } - _ => {} } - } - fn check_for_loan_conflicting_with_assignment(&mut self, - at: assignment_type, - ex: @ast::expr, - cmt: cmt, - lp: @loan_path) { - for self.walk_loans_of(ex.id, lp) |loan| { - match loan.kind { - Immobile => { /* ok */ } - TotalFreeze | PartialFreeze | - TotalTake | PartialTake => { - self.bccx.span_err( - ex.span, - fmt!("%s prohibited due to outstanding loan", - at.ing_form(self.bccx.cmt_to_str(cmt)))); - self.bccx.span_note( - loan.cmt.span, - fmt!("loan of %s granted here", - self.bccx.cmt_to_str(loan.cmt))); - return; + fn check_for_aliasable_mutable_writes(self: &CheckLoanCtxt, + expr: @ast::expr, + cmt: mc::cmt) -> bool { + //! Safety checks related to writes to aliasable, mutable locations + + let guarantor = cmt.guarantor(); + match guarantor.cat { + mc::cat_deref(b, _, mc::region_ptr(m_mutbl, _)) => { + // Statically prohibit writes to `&mut` when aliasable + + match b.freely_aliasable() { + None => {} + Some(cause) => { + self.bccx.report_aliasability_violation( + expr.span, + MutabilityViolation, + cause); + } + } } + + mc::cat_deref(base, deref_count, mc::gc_ptr(ast::m_mutbl)) => { + // Dynamically check writes to `@mut` + + let key = root_map_key { + id: base.id, + derefs: deref_count + }; + self.bccx.write_guard_map.insert(key); + } + + _ => {} } - } - // Subtle: if the mutability of the component being assigned - // is inherited from the thing that the component is embedded - // within, then we have to check whether that thing has been - // loaned out as immutable! An example: - // let mut x = {f: Some(3)}; - // let y = &x; // x loaned out as immutable - // x.f = none; // changes type of y.f, which appears to be imm - match *lp { - lp_comp(lp_base, ck) if inherent_mutability(ck) != m_mutbl => { - self.check_for_loan_conflicting_with_assignment( - at, ex, cmt, lp_base); - } - lp_comp(*) | lp_self | lp_local(*) | lp_arg(*) | lp_deref(*) => () + return true; // no errors reported } - } - fn report_purity_error(&mut self, pc: Either, - sp: span, msg: ~str) { - match pc { - Right(pc_default) => { fail!(~"pc_default should be filtered sooner") } - Right(pc_unsafe) => { - // this error was prevented by being marked as unsafe, so flag the - // definition as having contributed to the validity of the program - let def = self.declared_purity.def; - debug!("flagging %? as a used unsafe source", def); - self.tcx().used_unsafe.insert(def); - } - Left(pc_pure_fn) => { - self.tcx().sess.span_err( - sp, - fmt!("%s prohibited in pure context", msg)); - } - Left(pc_cmt(ref e)) => { - if self.reported.insert((*e).cmt.id) { - self.tcx().sess.span_err( - (*e).cmt.span, - fmt!("illegal borrow unless pure: %s", - self.bccx.bckerr_to_str((*e)))); - self.bccx.note_and_explain_bckerr((*e)); - self.tcx().sess.span_note( - sp, - fmt!("impure due to %s", msg)); + fn check_for_assignment_to_restricted_or_frozen_location( + self: &CheckLoanCtxt, + expr: @ast::expr, + cmt: mc::cmt) -> bool + { + //! Check for assignments that violate the terms of an + //! outstanding loan. + + let loan_path = match opt_loan_path(cmt) { + Some(lp) => lp, + None => { return true; /* no loan path, can't be any loans */ } + }; + + // Start by searching for an assignment to a *restricted* + // location. Here is one example of the kind of error caught + // by this check: + // + // let mut v = ~[1, 2, 3]; + // let p = &v; + // v = ~[4]; + // + // In this case, creating `p` triggers a RESTR_MUTATE + // restriction on the path `v`. + // + // Here is a second, more subtle example: + // + // let mut v = ~[1, 2, 3]; + // let p = &const v[0]; + // v[0] = 4; // OK + // v[1] = 5; // OK + // v = ~[4, 5, 3]; // Error + // + // In this case, `p` is pointing to `v[0]`, and it is a + // `const` pointer in any case. So the first two + // assignments are legal (and would be permitted by this + // check). However, the final assignment (which is + // logically equivalent) is forbidden, because it would + // cause the existing `v` array to be freed, thus + // invalidating `p`. In the code, this error results + // because `gather_loans::restrictions` adds a + // `RESTR_MUTATE` restriction whenever the contents of an + // owned pointer are borrowed, and hence while `v[*]` is not + // restricted from being written, `v` is. + for self.each_in_scope_restriction(expr.id, loan_path) + |loan, restr| + { + if restr.set.intersects(RESTR_MUTATE) { + self.report_illegal_mutation(expr, loan_path, loan); + return false; + } + } + + // The previous code handled assignments to paths that + // have been restricted. This covers paths that have been + // directly lent out and their base paths, but does not + // cover random extensions of those paths. For example, + // the following program is not declared illegal by the + // previous check: + // + // let mut v = ~[1, 2, 3]; + // let p = &v; + // v[0] = 4; // declared error by loop below, not code above + // + // The reason that this passes the previous check whereas + // an assignment like `v = ~[4]` fails is because the assignment + // here is to `v[*]`, and the existing restrictions were issued + // for `v`, not `v[*]`. + // + // So in this loop, we walk back up the loan path so long + // as the mutability of the path is dependent on a super + // path, and check that the super path was not lent out as + // mutable or immutable (a const loan is ok). + // + // Note that we are *not* checking for any and all + // restrictions. We are only interested in the pointers + // that the user created, whereas we add restrictions for + // all kinds of paths that are not directly aliased. If we checked + // for all restrictions, and not just loans, then the following + // valid program would be considered illegal: + // + // let mut v = ~[1, 2, 3]; + // let p = &const v[0]; + // v[1] = 5; // ok + // + // Here the restriction that `v` not be mutated would be misapplied + // to block the subpath `v[1]`. + let full_loan_path = loan_path; + let mut loan_path = loan_path; + loop { + match *loan_path { + // Peel back one layer if `loan_path` has + // inherited mutability + LpExtend(lp_base, mc::McInherited, _) => { + loan_path = lp_base; + } + + // Otherwise stop iterating + LpExtend(_, mc::McDeclared, _) | + LpExtend(_, mc::McImmutable, _) | + LpExtend(_, mc::McReadOnly, _) | + LpVar(_) => { + return true; + } + } + + // Check for a non-const loan of `loan_path` + for self.each_in_scope_loan(expr.id) |loan| { + if loan.loan_path == loan_path && loan.mutbl != m_const { + self.report_illegal_mutation(expr, full_loan_path, loan); + return false; + } + } } - } } } - fn check_move_out_from_expr(@mut self, ex: @ast::expr) { + fn report_illegal_mutation(&self, + expr: @ast::expr, + loan_path: &LoanPath, + loan: &Loan) { + self.bccx.span_err( + expr.span, + fmt!("cannot assign to `%s` because it is borrowed", + self.bccx.loan_path_to_str(loan_path))); + self.bccx.span_note( + loan.span, + fmt!("borrow of `%s` occurs here", + self.bccx.loan_path_to_str(loan_path))); + } + + fn check_move_out_from_expr(&self, ex: @ast::expr) { match ex.node { ast::expr_paren(*) => { /* In the case of an expr_paren(), the expression inside @@ -529,52 +527,57 @@ pub impl CheckLoanCtxt { MoveFromIllegalCmt(_) => { self.bccx.span_err( cmt.span, - fmt!("moving out of %s", + fmt!("cannot move out of %s", self.bccx.cmt_to_str(cmt))); } - MoveWhileBorrowed(_, loan_cmt) => { + MoveWhileBorrowed(loan_path, loan_span) => { self.bccx.span_err( cmt.span, - fmt!("moving out of %s prohibited \ - due to outstanding loan", - self.bccx.cmt_to_str(cmt))); + fmt!("cannot move out of `%s` \ + because it is borrowed", + self.bccx.loan_path_to_str(loan_path))); self.bccx.span_note( - loan_cmt.span, - fmt!("loan of %s granted here", - self.bccx.cmt_to_str(loan_cmt))); + loan_span, + fmt!("borrow of `%s` occurs here", + self.bccx.loan_path_to_str(loan_path))); } } } } } - fn analyze_move_out_from_cmt(&mut self, cmt: cmt) -> MoveError { - debug!("check_move_out_from_cmt(cmt=%s)", - self.bccx.cmt_to_repr(cmt)); + fn analyze_move_out_from_cmt(&self, cmt: mc::cmt) -> MoveError { + debug!("check_move_out_from_cmt(cmt=%s)", cmt.repr(self.tcx())); match cmt.cat { - // Rvalues, locals, and arguments can be moved: - cat_rvalue | cat_local(_) | cat_arg(_) | cat_self(_) => {} - - // We allow moving out of static items because the old code - // did. This seems consistent with permitting moves out of - // rvalues, I guess. - cat_special(sk_static_item) => {} - - cat_deref(_, _, unsafe_ptr) => {} - - // Nothing else. - _ => { - return MoveFromIllegalCmt(cmt); - } + // Rvalues, locals, and arguments can be moved: + mc::cat_rvalue | mc::cat_local(_) | + mc::cat_arg(_, ast::by_copy) | mc::cat_self(_) => {} + + // It seems strange to allow a move out of a static item, + // but what happens in practice is that you have a + // reference to a constant with a type that should be + // moved, like `None::<~int>`. The type of this constant + // is technically `Option<~int>`, which moves, but we know + // that the content of static items will never actually + // contain allocated pointers, so we can just memcpy it. + mc::cat_static_item => {} + + mc::cat_deref(_, _, mc::unsafe_ptr(*)) => {} + + // Nothing else. + _ => { + return MoveFromIllegalCmt(cmt); + } } - self.bccx.add_to_mutbl_map(cmt); + // NOTE inadequare if/when we permit `move a.b` // check for a conflicting loan: - for cmt.lp.each |lp| { - for self.walk_loans_of(cmt.id, *lp) |loan| { - return MoveWhileBorrowed(cmt, loan.cmt); + for opt_loan_path(cmt).each |&lp| { + for self.each_in_scope_restriction(cmt.id, lp) |loan, _| { + // Any restriction prevents moves. + return MoveWhileBorrowed(loan.loan_path, loan.span); } } @@ -582,105 +585,46 @@ pub impl CheckLoanCtxt { } fn check_call(&mut self, - expr: @ast::expr, - callee: Option<@ast::expr>, - callee_id: ast::node_id, - callee_span: span, - args: &[@ast::expr]) { - let pc = self.purity(expr.id); - match pc { - // no purity, no need to check for anything - Right(pc_default) => return, - - // some form of purity, definitely need to check - Left(_) => (), - - // Unsafe trumped. To see if the unsafe is necessary, see what the - // purity would have been without a trump, and if it's some form - // of purity then we need to go ahead with the check - Right(pc_unsafe) => { - match do with(&mut self.declared_purity.purity, - ast::impure_fn) { self.purity(expr.id) } { - Right(pc_unsafe) => fail!(~"unsafe can't trump twice"), - Right(pc_default) => return, - Left(_) => () - } - } - - } - self.check_pure_callee_or_arg( - pc, callee, callee_id, callee_span); - for args.each |arg| { - self.check_pure_callee_or_arg( - pc, Some(*arg), arg.id, arg.span); - } + _expr: @ast::expr, + _callee: Option<@ast::expr>, + _callee_id: ast::node_id, + _callee_span: span, + _args: &[@ast::expr]) + { + // NB: This call to check for conflicting loans is not truly + // necessary, because the callee_id never issues new loans. + // However, I added it for consistency and lest the system + // should change in the future. + // + // FIXME(#5074) nested method calls + // self.check_for_conflicting_loans(callee_id); } } -fn check_loans_in_fn(fk: &visit::fn_kind, - decl: &ast::fn_decl, - body: &ast::blk, - sp: span, - id: ast::node_id, - self: @mut CheckLoanCtxt, - visitor: visit::vt<@mut CheckLoanCtxt>) { - let is_stack_closure = self.is_stack_closure(id); - let fty = ty::node_id_to_type(self.tcx(), id); - - let declared_purity, src; +fn check_loans_in_fn<'a>(fk: &visit::fn_kind, + decl: &ast::fn_decl, + body: &ast::blk, + sp: span, + id: ast::node_id, + self: @mut CheckLoanCtxt<'a>, + visitor: visit::vt<@mut CheckLoanCtxt<'a>>) { match *fk { - visit::fk_item_fn(*) | visit::fk_method(*) | + visit::fk_item_fn(*) | + visit::fk_method(*) | visit::fk_dtor(*) => { - declared_purity = ty::ty_fn_purity(fty); - src = id; + // Don't process nested items. + return; } - visit::fk_anon(*) | visit::fk_fn_block(*) => { + visit::fk_anon(*) | + visit::fk_fn_block(*) => { + let fty = ty::node_id_to_type(self.tcx(), id); let fty_sigil = ty::ty_closure_sigil(fty); check_moves_from_captured_variables(self, id, fty_sigil); - let pair = ty::determine_inherited_purity( - (self.declared_purity.purity, self.declared_purity.def), - (ty::ty_fn_purity(fty), id), - fty_sigil); - declared_purity = pair.first(); - src = pair.second(); } } - debug!("purity on entry=%?", copy self.declared_purity); - do save_and_restore_managed(self.declared_purity) { - do save_and_restore_managed(self.fn_args) { - self.declared_purity = @mut PurityState::function(declared_purity, src); - - match *fk { - visit::fk_anon(*) | - visit::fk_fn_block(*) if is_stack_closure => { - // inherits the fn_args from enclosing ctxt - } - visit::fk_anon(*) | visit::fk_fn_block(*) | - visit::fk_method(*) | visit::fk_item_fn(*) | - visit::fk_dtor(*) => { - let mut fn_args = ~[]; - for decl.inputs.each |input| { - // For the purposes of purity, only consider function- - // typed bindings in trivial patterns to be function - // arguments. For example, do not allow `f` and `g` in - // (f, g): (&fn(), &fn()) to be called. - match input.pat.node { - ast::pat_ident(_, _, None) => { - fn_args.push(input.pat.id); - } - _ => {} // Ignore this argument. - } - } - *self.fn_args = @fn_args; - } - } - - visit::visit_fn(fk, decl, body, sp, id, self, visitor); - } - } - debug!("purity on exit=%?", copy self.declared_purity); + visit::visit_fn(fk, decl, body, sp, id, self, visitor); fn check_moves_from_captured_variables(self: @mut CheckLoanCtxt, id: ast::node_id, @@ -706,16 +650,16 @@ fn check_loans_in_fn(fk: &visit::fn_kind, fmt!("illegal by-move capture of %s", self.bccx.cmt_to_str(move_cmt))); } - MoveWhileBorrowed(move_cmt, loan_cmt) => { + MoveWhileBorrowed(loan_path, loan_span) => { self.bccx.span_err( cap_var.span, - fmt!("by-move capture of %s prohibited \ - due to outstanding loan", - self.bccx.cmt_to_str(move_cmt))); + fmt!("cannot move `%s` into closure \ + because it is borrowed", + self.bccx.loan_path_to_str(loan_path))); self.bccx.span_note( - loan_cmt.span, - fmt!("loan of %s granted here", - self.bccx.cmt_to_str(loan_cmt))); + loan_span, + fmt!("borrow of `%s` occurs here", + self.bccx.loan_path_to_str(loan_path))); } } } @@ -726,17 +670,19 @@ fn check_loans_in_fn(fk: &visit::fn_kind, } } -fn check_loans_in_local(local: @ast::local, - self: @mut CheckLoanCtxt, - vt: visit::vt<@mut CheckLoanCtxt>) { +fn check_loans_in_local<'a>(local: @ast::local, + self: @mut CheckLoanCtxt<'a>, + vt: visit::vt<@mut CheckLoanCtxt<'a>>) { visit::visit_local(local, self, vt); } -fn check_loans_in_expr(expr: @ast::expr, - self: @mut CheckLoanCtxt, - vt: visit::vt<@mut CheckLoanCtxt>) { - debug!("check_loans_in_expr(expr=%?/%s)", - expr.id, pprust::expr_to_str(expr, self.tcx().sess.intr())); +fn check_loans_in_expr<'a>(expr: @ast::expr, + self: @mut CheckLoanCtxt<'a>, + vt: visit::vt<@mut CheckLoanCtxt<'a>>) { + debug!("check_loans_in_expr(expr=%s)", + expr.repr(self.tcx())); + + visit::visit_expr(expr, self, vt); self.check_for_conflicting_loans(expr.id); @@ -746,12 +692,12 @@ fn check_loans_in_expr(expr: @ast::expr, match expr.node { ast::expr_swap(l, r) => { - self.check_assignment(at_swap, l); - self.check_assignment(at_swap, r); + self.check_assignment(l); + self.check_assignment(r); } ast::expr_assign(dest, _) | ast::expr_assign_op(_, dest, _) => { - self.check_assignment(at_straight_up, dest); + self.check_assignment(dest); } ast::expr_call(f, ref args, _) => { self.check_call(expr, Some(f), f.id, f.span, *args); @@ -776,32 +722,35 @@ fn check_loans_in_expr(expr: @ast::expr, expr.span, ~[]); } - ast::expr_match(*) => { - // Note: moves out of pattern bindings are not checked by - // the borrow checker, at least not directly. What happens - // is that if there are any moved bindings, the discriminant - // will be considered a move, and this will be checked as - // normal. Then, in `middle::check_match`, we will check - // that no move occurs in a binding that is underneath an - // `@` or `&`. Together these give the same guarantees as - // `check_move_out_from_expr()` without requiring us to - // rewalk the patterns and rebuild the pattern - // categorizations. - } _ => { } } - - visit::visit_expr(expr, self, vt); } -fn check_loans_in_block(blk: &ast::blk, - self: @mut CheckLoanCtxt, - vt: visit::vt<@mut CheckLoanCtxt>) { - do save_and_restore_managed(self.declared_purity) { - self.check_for_conflicting_loans(blk.node.id); +fn check_loans_in_pat<'a>(pat: @ast::pat, + self: @mut CheckLoanCtxt<'a>, + vt: visit::vt<@mut CheckLoanCtxt<'a>>) +{ + self.check_for_conflicting_loans(pat.id); + + // Note: moves out of pattern bindings are not checked by + // the borrow checker, at least not directly. What happens + // is that if there are any moved bindings, the discriminant + // will be considered a move, and this will be checked as + // normal. Then, in `middle::check_match`, we will check + // that no move occurs in a binding that is underneath an + // `@` or `&`. Together these give the same guarantees as + // `check_move_out_from_expr()` without requiring us to + // rewalk the patterns and rebuild the pattern + // categorizations. + + visit::visit_pat(pat, self, vt); +} - *self.declared_purity = self.declared_purity.recurse(blk); - visit::visit_block(blk, self, vt); - } +fn check_loans_in_block<'a>(blk: &ast::blk, + self: @mut CheckLoanCtxt<'a>, + vt: visit::vt<@mut CheckLoanCtxt<'a>>) +{ + visit::visit_block(blk, self, vt); + self.check_for_conflicting_loans(blk.node.id); } diff --git a/src/librustc/middle/borrowck/doc.rs b/src/librustc/middle/borrowck/doc.rs new file mode 100644 index 0000000000000..1e09fbe71843c --- /dev/null +++ b/src/librustc/middle/borrowck/doc.rs @@ -0,0 +1,750 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +/*! + +# The Borrow Checker + +This pass has the job of enforcing memory safety. This is a subtle +topic. The only way I know how to explain it is terms of a formal +model, so that's what I'll do. + +# Formal model + +Let's consider a simple subset of Rust in which you can only borrow +from lvalues like so: + + LV = x | LV.f | *LV + +Here `x` represents some variable, `LV.f` is a field reference, +and `*LV` is a pointer dereference. There is no auto-deref or other +niceties. This means that if you have a type like: + + struct S { f: uint } + +and a variable `a: ~S`, then the rust expression `a.f` would correspond +to an `LV` of `(*a).f`. + +Here is the formal grammar for the types we'll consider: + + TY = () | S<'LT...> | ~TY | & 'LT MQ TY | @ MQ TY + MQ = mut | imm | const + +Most of these types should be pretty self explanatory. Here `S` is a +struct name and we assume structs are declared like so: + + SD = struct S<'LT...> { (f: TY)... } + +# An intuitive explanation + +## Issuing loans + +Now, imagine we had a program like this: + + struct Foo { f: uint, g: uint } + ... + 'a: { + let mut x: ~Foo = ...; + let y = &mut (*x).f; + x = ...; + } + +This is of course dangerous because mutating `x` will free the old +value and hence invalidate `y`. The borrow checker aims to prevent +this sort of thing. + +### Loans + +The way the borrow checker works is that it analyzes each borrow +expression (in our simple model, that's stuff like `&LV`, though in +real life there are a few other cases to consider). For each borrow +expression, it computes a vector of loans: + + LOAN = (LV, LT, PT, LK) + PT = Partial | Total + LK = MQ | RESERVE + +Each `LOAN` tuple indicates some sort of restriction on what can be +done to the lvalue `LV`; `LV` will always be a path owned by the +current stack frame. These restrictions are called "loans" because +they are always the result of a borrow expression. + +Every loan has a lifetime `LT` during which those restrictions are in +effect. The indicator `PT` distinguishes between *total* loans, in +which the LV itself was borrowed, and *partial* loans, which means +that some content ownwed by LV was borrowed. + +The final element in the loan tuple is the *loan kind* `LK`. There +are four kinds: mutable, immutable, const, and reserve: + +- A "mutable" loan means that LV may be written to through an alias, and + thus LV cannot be written to directly or immutably aliased (remember + that we preserve the invariant that any given value can only be + written to through one path at a time; hence if there is a mutable + alias to LV, then LV cannot be written directly until this alias is + out of scope). + +- An "immutable" loan means that LV must remain immutable. Hence it + cannot be written, but other immutable aliases are permitted. + +- A "const" loan means that an alias to LV exists. LV may still be + written or frozen. + +- A "reserve" loan is the strongest case. It prevents both mutation + and aliasing of any kind, including `&const` loans. Reserve loans + are a side-effect of borrowing an `&mut` loan. + +In addition to affecting mutability, a loan of any kind implies that +LV cannot be moved. + +### Example + +To give you a better feeling for what a loan is, let's look at three +loans that would be issued as a result of the borrow `&(*x).f` in the +example above: + + ((*x).f, Total, mut, 'a) + (*x, Partial, mut, 'a) + (x, Partial, mut, 'a) + +The first loan states that the expression `(*x).f` has been loaned +totally as mutable for the lifetime `'a`. This first loan would +prevent an assignment `(*x).f = ...` from occurring during the +lifetime `'a`. + +Now let's look at the second loan. You may have expected that each +borrow would result in only one loan. But this is not the case. +Instead, there will be loans for every path where mutation might +affect the validity of the borrowed pointer that is created (in some +cases, there can even be multiple loans per path, see the section on +"Borrowing in Calls" below for the gory details). The reason for this +is to prevent actions that would indirectly affect the borrowed path. +In this case, we wish to ensure that `(*x).f` is not mutated except +through the mutable alias `y`. Therefore, we must not only prevent an +assignment to `(*x).f` but also an assignment like `*x = Foo {...}`, +as this would also mutate the field `f`. To do so, we issue a +*partial* mutable loan for `*x` (the loan is partial because `*x` +itself was not borrowed). This partial loan will cause any attempt to +assign to `*x` to be flagged as an error. + +Because both partial and total loans prevent assignments, you may +wonder why we bother to distinguish between them. The reason for this +distinction has to do with preventing double borrows. In particular, +it is legal to borrow both `&mut x.f` and `&mut x.g` simultaneously, +but it is not legal to borrow `&mut x.f` twice. In the borrow checker, +the first case would result in two *partial* mutable loans of `x` +(along with one total mutable loan of `x.f` and one of `x.g) whereas +the second would result in two *total* mutable loans of `x.f` (along +with two partial mutable loans of `x`). Multiple *total mutable* loan +for the same path are not permitted, but multiple *partial* loans (of +any mutability) are permitted. + +Finally, we come to the third loan. This loan is a partial mutable +loan of `x`. This loan prevents us from reassigning `x`, which would +be bad for two reasons. First, it would change the value of `(*x).f` +but, even worse, it would cause the pointer `y` to become a dangling +pointer. Bad all around. + +## Checking for illegal assignments, moves, and reborrows + +Once we have computed the loans introduced by each borrow, the borrow +checker will determine the full set of loans in scope at each +expression and use that to decide whether that expression is legal. +Remember that the scope of loan is defined by its lifetime LT. We +sometimes say that a loan which is in-scope at a particular point is +an "outstanding loan". + +The kinds of expressions which in-scope loans can render illegal are +*assignments*, *moves*, and *borrows*. + +An assignments to an lvalue LV is illegal if there is in-scope mutable +or immutable loan for LV. Assignment with an outstanding mutable loan +is illegal because then the `&mut` pointer is supposed to be the only +way to mutate the value. Assignment with an outstanding immutable +loan is illegal because the value is supposed to be immutable at that +point. + +A move from an lvalue LV is illegal if there is any sort of +outstanding loan. + +A borrow expression may be illegal if any of the loans which it +produces conflict with other outstanding loans. Two loans are +considered compatible if one of the following conditions holds: + +- At least one loan is a const loan. +- Both loans are partial loans. +- Both loans are immutable. + +Any other combination of loans is illegal. + +# The set of loans that results from a borrow expression + +Here we'll define four functions---MUTATE, FREEZE, ALIAS, and +TAKE---which are all used to compute the set of LOANs that result +from a borrow expression. The first three functions each have +a similar type signature: + + MUTATE(LV, LT, PT) -> LOANS + FREEZE(LV, LT, PT) -> LOANS + ALIAS(LV, LT, PT) -> LOANS + +MUTATE, FREEZE, and ALIAS are used when computing the loans result +from mutable, immutable, and const loans respectively. For example, +the loans resulting from an expression like `&mut (*x).f` would be +computed by `MUTATE((*x).f, LT, Total)`, where `LT` is the lifetime of +the resulting pointer. Similarly the loans for `&(*x).f` and `&const +(*x).f` would be computed by `FREEZE((*x).f, LT, Total)` and +`ALIAS((*x).f, LT, Total)` respectively. (Actually this is a slight +simplification; see the section below on Borrows in Calls for the full +gory details) + +The names MUTATE, FREEZE, and ALIAS are intended to suggest the +semantics of `&mut`, `&`, and `&const` borrows respectively. `&mut`, +for example, creates a mutable alias of LV. `&` causes the borrowed +value to be frozen (immutable). `&const` does neither but does +introduce an alias to be the borrowed value. + +Each of these three functions is only defined for some inputs. That +is, it may occur that some particular borrow is not legal. For +example, it is illegal to make an `&mut` loan of immutable data. In +that case, the MUTATE() function is simply not defined (in the code, +it returns a Result<> condition to indicate when a loan would be +illegal). + +The final function, RESERVE, is used as part of borrowing an `&mut` +pointer. Due to the fact that it is used for one very particular +purpose, it has a rather simpler signature than the others: + + RESERVE(LV, LT) -> LOANS + +It is explained when we come to that case. + +## The function MUTATE() + +Here we use [inference rules][ir] to define the MUTATE() function. +We will go case by case for the various kinds of lvalues that +can be borrowed. + +[ir]: http://en.wikipedia.org/wiki/Rule_of_inference + +### Mutating local variables + +The rule for mutating local variables is as follows: + + Mutate-Variable: + LT <= Scope(x) + Mut(x) = Mut + -------------------------------------------------- + MUTATE(x, LT, PT) = (x, LT, PT, mut) + +Here `Scope(x)` is the lifetime of the block in which `x` was declared +and `Mut(x)` indicates the mutability with which `x` was declared. +This rule simply states that you can only create a mutable alias +to a variable if it is mutable, and that alias cannot outlive the +stack frame in which the variable is declared. + +### Mutating fields and owned pointers + +As it turns out, the rules for mutating fields and mutating owned +pointers turn out to be quite similar. The reason is that the +expressions `LV.f` and `*LV` are both owned by their base expression +`LV`. So basically the result of mutating `LV.f` or `*LV` is computed +by adding a loan for `LV.f` or `*LV` and then the loans for a partial +take of `LV`: + + Mutate-Field: + MUTATE(LV, LT, Partial) = LOANS + ------------------------------------------------------------ + MUTATE(LV.f, LT, PT) = LOANS, (LV.F, LT, PT, mut) + + Mutate-Owned-Ptr: + Type(LV) = ~Ty + MUTATE(LV, LT, Partial) = LOANS + ------------------------------------------------------------ + MUTATE(*LV, LT, PT) = LOANS, (*LV, LT, PT, mut) + +Note that while our micro-language only has fields, the slight +variations on the `Mutate-Field` rule are used for any interior content +that appears in the full Rust language, such as the contents of a +tuple, fields in a struct, or elements of a fixed-length vector. + +### Mutating dereferenced borrowed pointers + +The rule for borrowed pointers is by far the most complicated: + + Mutate-Mut-Borrowed-Ptr: + Type(LV) = <_P mut Ty // (1) + LT <= LT_P // (2) + RESERVE(LV, LT) = LOANS // (3) + ------------------------------------------------------------ + MUTATE(*LV, LT, PT) = LOANS, (*LV, LT, PT, Mut) + +Condition (1) states that only a mutable borrowed pointer can be +taken. Condition (2) states that the lifetime of the alias must be +less than the lifetime of the borrowed pointer being taken. + +Conditions (3) and (4) are where things get interesting. The intended +semantics of the borrow is that the new `&mut` pointer is the only one +which has the right to modify the data; the original `&mut` pointer +must not be used for mutation. Because borrowed pointers do not own +their content nor inherit mutability, we must be particularly cautious +of aliases, which could permit the original borrowed pointer to be +reached from another path and thus circumvent our loans. + +Here is one example of what could go wrong if we ignore clause (4): + + let x: &mut T; + ... + let y = &mut *x; // Only *y should be able to mutate... + let z = &const x; + **z = ...; // ...but here **z is still able to mutate! + +Another possible error could occur with moves: + + let x: &mut T; + ... + let y = &mut *x; // Issues loan: (*x, LT, Total, Mut) + let z = x; // moves from x + *z = ...; // Mutates *y indirectly! Bad. + +In both of these cases, the problem is that when creating the alias +`y` we would only issue a loan preventing assignment through `*x`. +But this loan can be easily circumvented by moving from `x` or +aliasing it. Note that, in the first example, the alias of `x` was +created using `&const`, which is a particularly weak form of alias. + +The danger of aliases can also occur when the `&mut` pointer itself +is already located in an alias location, as here: + + let x: @mut &mut T; // or &mut &mut T, &&mut T, + ... // &const &mut T, @&mut T, etc + let y = &mut **x; // Only *y should be able to mutate... + let z = x; + **z = ...; // ...but here **z is still able to mutate! + +When we cover the rules for RESERVE, we will see that it would +disallow this case, because MUTATE can only be applied to canonical +lvalues which are owned by the current stack frame. + +It might be the case that if `&const` and `@const` pointers were +removed, we could do away with RESERVE and simply use MUTATE instead. +But we have to be careful about the final example in particular, since +dynamic freezing would not be sufficient to prevent this example. +Perhaps a combination of MUTATE with a predicate OWNED(LV). + +One final detail: unlike every other case, when we calculate the loans +using RESERVE we do not use the original lifetime `LT` but rather +`GLB(Scope(LV), LT)`. What this says is: + +### Mutating dereferenced managed pointers + +Because the correctness of managed pointer loans is checked dynamically, +the rule is quite simple: + + Mutate-Mut-Managed-Ptr: + Type(LV) = @mut Ty + Add ROOT-FREEZE annotation for *LV with lifetime LT + ------------------------------------------------------------ + MUTATE(*LV, LT, Total) = [] + +No loans are issued. Instead, we add a side annotation that causes +`*LV` to be rooted and frozen on entry to LV. You could rephrase +these rules as having multiple returns values, or rephrase this as a +kind of loan, but whatever. + +One interesting point is that *partial takes* of `@mut` are forbidden. +This is not for any soundness reason but just because it is clearer +for users when `@mut` values are either lent completely or not at all. + +## The function FREEZE + +The rules for FREEZE are pretty similar to MUTATE. The first four +cases I'll just present without discussion, as the reasoning is +quite analogous to the MUTATE case: + + Freeze-Variable: + LT <= Scope(x) + -------------------------------------------------- + FREEZE(x, LT, PT) = (x, LT, PT, imm) + + Freeze-Field: + FREEZE(LV, LT, Partial) = LOANS + ------------------------------------------------------------ + FREEZE(LV.f, LT, PT) = LOANS, (LV.F, LT, PT, imm) + + Freeze-Owned-Ptr: + Type(LV) = ~Ty + FREEZE(LV, LT, Partial) = LOANS + ------------------------------------------------------------ + FREEZE(*LV, LT, PT) = LOANS, (*LV, LT, PT, imm) + + Freeze-Mut-Borrowed-Ptr: + Type(LV) = <_P mut Ty + LT <= LT_P + RESERVE(LV, LT) = LOANS + ------------------------------------------------------------ + FREEZE(*LV, LT, PT) = LOANS, (*LV, LT, PT, Imm) + + Freeze-Mut-Managed-Ptr: + Type(LV) = @mut Ty + Add ROOT-FREEZE annotation for *LV with lifetime LT + ------------------------------------------------------------ + Freeze(*LV, LT, Total) = [] + +The rule to "freeze" an immutable borrowed pointer is quite +simple, since the content is already immutable: + + Freeze-Imm-Borrowed-Ptr: + Type(LV) = <_P Ty // (1) + LT <= LT_P // (2) + ------------------------------------------------------------ + FREEZE(*LV, LT, PT) = LOANS, (*LV, LT, PT, Mut) + +The final two rules pertain to borrows of `@Ty`. There is a bit of +subtlety here. The main problem is that we must guarantee that the +managed box remains live for the entire borrow. We can either do this +dynamically, by rooting it, or (better) statically, and hence there +are two rules: + + Freeze-Imm-Managed-Ptr-1: + Type(LV) = @Ty + Add ROOT annotation for *LV + ------------------------------------------------------------ + FREEZE(*LV, LT, PT) = [] + + Freeze-Imm-Managed-Ptr-2: + Type(LV) = @Ty + LT <= Scope(LV) + Mut(LV) = imm + LV is not moved + ------------------------------------------------------------ + FREEZE(*LV, LT, PT) = [] + +The intention of the second rule is to avoid an extra root if LV +serves as a root. In that case, LV must (1) outlive the borrow; (2) +be immutable; and (3) not be moved. + +## The ALIAS function + +The function ALIAS is used for `&const` loans but also to handle one +corner case concerning function arguments (covered in the section +"Borrows in Calls" below). It computes the loans that result from +observing that there is a pointer to `LV` and thus that pointer must +remain valid. + +The first two rules are simple: + + Alias-Variable: + LT <= Scope(x) + -------------------------------------------------- + ALIAS(x, LT, PT) = (x, LT, PT, Const) + + Alias-Field: + ALIAS(LV, LT, Partial) = LOANS + ------------------------------------------------------------ + ALIAS(LV.f, LT, PT) = LOANS, (LV.F, LT, PT, Const) + +### Aliasing owned pointers + +The rule for owned pointers is somewhat interesting: + + Alias-Owned-Ptr: + Type(LV) = ~Ty + FREEZE(LV, LT, Partial) = LOANS + ------------------------------------------------------------ + ALIAS(*LV, LT, PT) = LOANS, (*LV, LT, PT, Const) + +Here we *freeze* the base `LV`. The reason is that if an owned +pointer is mutated it frees its content, which means that the alias to +`*LV` would become a dangling pointer. + +### Aliasing borrowed pointers + +The rule for borrowed pointers is quite simple, because borrowed +pointers do not own their content and thus do not play a role in +keeping it live: + + Alias-Borrowed-Ptr: + Type(LV) = <_P MQ Ty + LT <= LT_P + ------------------------------------------------------------ + ALIAS(*LV, LT, PT) = [] + +Basically, the existence of a borrowed pointer to some memory with +lifetime LT_P is proof that the memory can safely be aliased for any +lifetime LT <= LT_P. + +### Aliasing managed pointers + +The rules for aliasing managed pointers are similar to those +used with FREEZE, except that they apply to all manager pointers +regardles of mutability: + + Alias-Managed-Ptr-1: + Type(LV) = @MQ Ty + Add ROOT annotation for *LV + ------------------------------------------------------------ + ALIAS(*LV, LT, PT) = [] + + Alias-Managed-Ptr-2: + Type(LV) = @MQ Ty + LT <= Scope(LV) + Mut(LV) = imm + LV is not moved + ------------------------------------------------------------ + ALIAS(*LV, LT, PT) = [] + +## The RESERVE function + +The final function, RESERVE, is used for loans of `&mut` pointers. As +discussed in the section on the function MUTATE, we must be quite +careful when "re-borrowing" an `&mut` pointer to ensure that the original +`&mut` pointer can no longer be used to mutate. + +There are a couple of dangers to be aware of: + +- `&mut` pointers do not inherit mutability. Therefore, if you have + an lvalue LV with type `&mut T` and you freeze `LV`, you do *not* + freeze `*LV`. This is quite different from an `LV` with type `~T`. + +- Also, because they do not inherit mutability, if the `&mut` pointer + lives in an aliased location, then *any alias* can be used to write! + +As a consequence of these two rules, RESERVE can only be successfully +invoked on an lvalue LV that is *owned by the current stack frame*. +This ensures that there are no aliases that are not visible from the +outside. Moreover, Reserve loans are incompatible with all other +loans, even Const loans. This prevents any aliases from being created +within the current function. + +### Reserving local variables + +The rule for reserving a variable is generally straightforward but +with one interesting twist: + + Reserve-Variable: + -------------------------------------------------- + RESERVE(x, LT) = (x, LT, Total, Reserve) + +The twist here is that the incoming lifetime is not required to +be a subset of the incoming variable, unlike every other case. To +see the reason for this, imagine the following function: + + struct Foo { count: uint } + fn count_field(x: &'a mut Foo) -> &'a mut count { + &mut (*x).count + } + +This function consumes one `&mut` pointer and returns another with the +same lifetime pointing at a particular field. The borrow for the +`&mut` expression will result in a call to `RESERVE(x, 'a)`, which is +intended to guarantee that `*x` is not later aliased or used to +mutate. But the lifetime of `x` is limited to the current function, +which is a sublifetime of the parameter `'a`, so the rules used for +MUTATE, FREEZE, and ALIAS (which require that the lifetime of the loan +not exceed the lifetime of the variable) would result in an error. + +Nonetheless this function is perfectly legitimate. After all, the +caller has moved in an `&mut` pointer with lifetime `'a`, and thus has +given up their right to mutate the value for the remainder of `'a`. +So it is fine for us to return a pointer with the same lifetime. + +The reason that RESERVE differs from the other functions is that +RESERVE is not responsible for guaranteeing that the pointed-to data +will outlive the borrowed pointer being created. After all, `&mut` +values do not own the data they point at. + +### Reserving owned content + +The rules for fields and owned pointers are very straightforward: + + Reserve-Field: + RESERVE(LV, LT) = LOANS + ------------------------------------------------------------ + RESERVE(LV.f, LT) = LOANS, (LV.F, LT, Total, Reserve) + + Reserve-Owned-Ptr: + Type(LV) = ~Ty + RESERVE(LV, LT) = LOANS + ------------------------------------------------------------ + RESERVE(*LV, LT) = LOANS, (*LV, LT, Total, Reserve) + +### Reserving `&mut` borrowed pointers + +Unlike other borrowed pointers, `&mut` pointers are unaliasable, +so we can reserve them like everything else: + + Reserve-Mut-Borrowed-Ptr: + Type(LV) = <_P mut Ty + RESERVE(LV, LT) = LOANS + ------------------------------------------------------------ + RESERVE(*LV, LT) = LOANS, (*LV, LT, Total, Reserve) + +## Borrows in calls + +Earlier we said that the MUTATE, FREEZE, and ALIAS functions were used +to compute the loans resulting from a borrow expression. But this is +not strictly correct, there is a slight complication that occurs with +calls by which additional loans may be necessary. We will explain +that here and give the full details. + +Imagine a call expression `'a: E1(E2, E3)`, where `Ei` are some +expressions. If we break this down to something a bit lower-level, it +is kind of short for: + + 'a: { + 'a_arg1: let temp1: ... = E1; + 'a_arg2: let temp2: ... = E2; + 'a_arg3: let temp3: ... = E3; + 'a_call: temp1(temp2, temp3) + } + +Here the lifetime labels indicate the various lifetimes. As you can +see there are in fact four relevant lifetimes (only one of which was +named by the user): `'a` corresponds to the expression `E1(E2, E3)` as +a whole. `'a_arg1`, `'a_arg2`, and `'a_arg3` correspond to the +evaluations of `E1`, `E2`, and `E3` respectively. Finally, `'a_call` +corresponds to the *actual call*, which is the point where the values +of the parameters will be used. + +Now, let's look at a (contrived, but representative) example to see +why all this matters: + + struct Foo { f: uint, g: uint } + ... + fn add(p: &mut uint, v: uint) { + *p += v; + } + ... + fn inc(p: &mut uint) -> uint { + *p += 1; *p + } + fn weird() { + let mut x: ~Foo = ~Foo { ... }; + 'a: add(&mut (*x).f, + 'b: inc(&mut (*x).f)) // (*) + } + +The important part is the line marked `(*)` which contains a call to +`add()`. The first argument is a mutable borrow of the field `f`. +The second argument *always borrows* the field `f`. Now, if these two +borrows overlapped in time, this would be illegal, because there would +be two `&mut` pointers pointing at `f`. And, in a way, they *do* +overlap in time, since the first argument will be evaluated first, +meaning that the pointer will exist when the second argument executes. +But in another important way they do not overlap in time. Let's +expand out that final call to `add()` as we did before: + + 'a: { + 'a_arg1: let a_temp1: ... = add; + 'a_arg2: let a_temp2: &'a_call mut uint = &'a_call mut (*x).f; + 'a_arg3_: let a_temp3: uint = { + let b_temp1: ... = inc; + let b_temp2: &'b_call = &'b_call mut (*x).f; + 'b_call: b_temp1(b_temp2) + }; + 'a_call: a_temp1(a_temp2, a_temp3) + } + +When it's written this way, we can see that although there are two +borrows, the first has lifetime `'a_call` and the second has lifetime +`'b_call` and in fact these lifetimes do not overlap. So everything +is fine. + +But this does not mean that there isn't reason for caution! Imagine a +devious program like *this* one: + + struct Foo { f: uint, g: uint } + ... + fn add(p: &mut uint, v: uint) { + *p += v; + } + ... + fn consume(x: ~Foo) -> uint { + x.f + x.g + } + fn weird() { + let mut x: ~Foo = ~Foo { ... }; + 'a: add(&mut (*x).f, consume(x)) // (*) + } + +In this case, there is only one borrow, but the second argument is +`consume(x)` instead of a second borrow. Because `consume()` is +declared to take a `~Foo`, it will in fact free the pointer `x` when +it has finished executing. If it is not obvious why this is +troublesome, consider this expanded version of that call: + + 'a: { + 'a_arg1: let a_temp1: ... = add; + 'a_arg2: let a_temp2: &'a_call mut uint = &'a_call mut (*x).f; + 'a_arg3_: let a_temp3: uint = { + let b_temp1: ... = consume; + let b_temp2: ~Foo = x; + 'b_call: b_temp1(x) + }; + 'a_call: a_temp1(a_temp2, a_temp3) + } + +In this example, we will have borrowed the first argument before `x` +is freed and then free `x` during evaluation of the second +argument. This causes `a_temp2` to be invalidated. + +Of course the loans computed from the borrow expression are supposed +to prevent this situation. But if we just considered the loans from +`MUTATE((*x).f, 'a_call, Total)`, the resulting loans would be: + + ((*x).f, 'a_call, Total, Mut) + (*x, 'a_call, Partial, Mut) + (x, 'a_call, Partial, Mut) + +Because these loans are only in scope for `'a_call`, they do nothing +to prevent the move that occurs evaluating the second argument. + +The way that we solve this is to say that if you have a borrow +expression `&'LT_P mut LV` which itself occurs in the lifetime +`'LT_B`, then the resulting loans are: + + MUTATE(LV, LT_P, Total) + ALIAS(LV, LUB(LT_P, LT_B), Total) + +The call to MUTATE is what we've seen so far. The second part +expresses the idea that the expression LV will be evaluated starting +at LT_B until the end of LT_P. Now, in the normal case, LT_P >= LT_B, +and so the second set of loans that result from a ALIAS are basically +a no-op. However, in the case of an argument where the evaluation of +the borrow occurs before the interval where the resulting pointer will +be used, this ALIAS is important. + +In the case of our example, it would produce a set of loans like: + + ((*x).f, 'a, Total, Const) + (*x, 'a, Total, Const) + (x, 'a, Total, Imm) + +The scope of these loans is `'a = LUB('a_arg2, 'a_call)`, and so they +encompass all subsequent arguments. The first set of loans are Const +loans, which basically just prevent moves. However, when we cross +over the dereference of the owned pointer `x`, the rule for ALIAS +specifies that `x` must be frozen, and hence the final loan is an Imm +loan. In any case the troublesome second argument would be flagged +as an error. + +# Maps that are created + +Borrowck results in two maps. + +- `root_map`: identifies those expressions or patterns whose result + needs to be rooted. Conceptually the root_map maps from an + expression or pattern node to a `node_id` identifying the scope for + which the expression must be rooted (this `node_id` should identify + a block or call). The actual key to the map is not an expression id, + however, but a `root_map_key`, which combines an expression id with a + deref count and is used to cope with auto-deref. + +*/ diff --git a/src/librustc/middle/borrowck/gather_loans.rs b/src/librustc/middle/borrowck/gather_loans.rs deleted file mode 100644 index e40d0e63eb38e..0000000000000 --- a/src/librustc/middle/borrowck/gather_loans.rs +++ /dev/null @@ -1,643 +0,0 @@ -// Copyright 2012 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 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -// ---------------------------------------------------------------------- -// Gathering loans -// -// The borrow check proceeds in two phases. In phase one, we gather the full -// set of loans that are required at any point. These are sorted according to -// their associated scopes. In phase two, checking loans, we will then make -// sure that all of these loans are honored. - -use middle::borrowck::preserve::{PreserveCondition, PcOk, PcIfPure}; -use middle::borrowck::{Loan, bckerr, bckres, BorrowckCtxt, err_mutbl}; -use middle::borrowck::{LoanKind, TotalFreeze, PartialFreeze, - TotalTake, PartialTake, Immobile}; -use middle::borrowck::ReqMaps; -use middle::borrowck::loan; -use middle::mem_categorization::{cmt, mem_categorization_ctxt}; -use middle::pat_util; -use middle::ty::{ty_region}; -use middle::ty; -use util::common::indenter; -use util::ppaux::{Repr, region_to_str}; - -use core::hashmap::{HashSet, HashMap}; -use syntax::ast::{m_const, m_imm, m_mutbl}; -use syntax::ast; -use syntax::codemap::span; -use syntax::print::pprust; -use syntax::visit; - -/// Context used while gathering loans: -/// -/// - `bccx`: the the borrow check context -/// - `req_maps`: the maps computed by `gather_loans()`, see def'n of the -/// struct `ReqMaps` for more info -/// - `item_ub`: the id of the block for the enclosing fn/method item -/// - `root_ub`: the id of the outermost block for which we can root -/// an `@T`. This is the id of the innermost enclosing -/// loop or function body. -/// -/// The role of `root_ub` is to prevent us from having to accumulate -/// vectors of rooted items at runtime. Consider this case: -/// -/// fn foo(...) -> int { -/// let mut ptr: ∫ -/// while some_cond { -/// let x: @int = ...; -/// ptr = &*x; -/// } -/// *ptr -/// } -/// -/// If we are not careful here, we would infer the scope of the borrow `&*x` -/// to be the body of the function `foo()` as a whole. We would then -/// have root each `@int` that is produced, which is an unbounded number. -/// No good. Instead what will happen is that `root_ub` will be set to the -/// body of the while loop and we will refuse to root the pointer `&*x` -/// because it would have to be rooted for a region greater than `root_ub`. -struct GatherLoanCtxt { - bccx: @BorrowckCtxt, - req_maps: ReqMaps, - item_ub: ast::node_id, - root_ub: ast::node_id, - ignore_adjustments: HashSet -} - -pub fn gather_loans(bccx: @BorrowckCtxt, crate: @ast::crate) -> ReqMaps { - let glcx = @mut GatherLoanCtxt { - bccx: bccx, - req_maps: ReqMaps { req_loan_map: HashMap::new(), - pure_map: HashMap::new() }, - item_ub: 0, - root_ub: 0, - ignore_adjustments: HashSet::new() - }; - let v = visit::mk_vt(@visit::Visitor {visit_expr: req_loans_in_expr, - visit_fn: req_loans_in_fn, - visit_stmt: add_stmt_to_map, - .. *visit::default_visitor()}); - visit::visit_crate(crate, glcx, v); - let @GatherLoanCtxt{req_maps, _} = glcx; - return req_maps; -} - -fn req_loans_in_fn(fk: &visit::fn_kind, - decl: &ast::fn_decl, - body: &ast::blk, - sp: span, - id: ast::node_id, - self: @mut GatherLoanCtxt, - v: visit::vt<@mut GatherLoanCtxt>) { - // see explanation attached to the `root_ub` field: - let old_item_id = self.item_ub; - let old_root_ub = self.root_ub; - self.root_ub = body.node.id; - - match *fk { - visit::fk_anon(*) | visit::fk_fn_block(*) => {} - visit::fk_item_fn(*) | visit::fk_method(*) | - visit::fk_dtor(*) => { - self.item_ub = body.node.id; - } - } - - visit::visit_fn(fk, decl, body, sp, id, self, v); - self.root_ub = old_root_ub; - self.item_ub = old_item_id; -} - -fn req_loans_in_expr(ex: @ast::expr, - self: @mut GatherLoanCtxt, - vt: visit::vt<@mut GatherLoanCtxt>) { - let bccx = self.bccx; - let tcx = bccx.tcx; - let old_root_ub = self.root_ub; - - debug!("req_loans_in_expr(expr=%?/%s)", - ex.id, pprust::expr_to_str(ex, tcx.sess.intr())); - - // If this expression is borrowed, have to ensure it remains valid: - { - let mut this = &mut *self; - if !this.ignore_adjustments.contains(&ex.id) { - for tcx.adjustments.find(&ex.id).each |&adjustments| { - this.guarantee_adjustments(ex, *adjustments); - } - } - } - - // Special checks for various kinds of expressions: - match ex.node { - ast::expr_addr_of(mutbl, base) => { - let base_cmt = self.bccx.cat_expr(base); - - // make sure that the thing we are pointing out stays valid - // for the lifetime `scope_r` of the resulting ptr: - let scope_r = ty_region(tcx, ex.span, tcx.ty(ex)); - self.guarantee_valid(base_cmt, mutbl, scope_r); - visit::visit_expr(ex, self, vt); - } - - ast::expr_match(ex_v, ref arms) => { - let cmt = self.bccx.cat_expr(ex_v); - for (*arms).each |arm| { - for arm.pats.each |pat| { - self.gather_pat(cmt, *pat, arm.body.node.id, ex.id); - } - } - visit::visit_expr(ex, self, vt); - } - - ast::expr_index(rcvr, _) | - ast::expr_binary(_, rcvr, _) | - ast::expr_unary(_, rcvr) | - ast::expr_assign_op(_, rcvr, _) - if self.bccx.method_map.contains_key(&ex.id) => { - // Receivers in method calls are always passed by ref. - // - // Here, in an overloaded operator, the call is this expression, - // and hence the scope of the borrow is this call. - // - // FIX? / NOT REALLY---technically we should check the other - // argument and consider the argument mode. But how annoying. - // And this problem when goes away when argument modes are - // phased out. So I elect to leave this undone. - let scope_r = ty::re_scope(ex.id); - let rcvr_cmt = self.bccx.cat_expr(rcvr); - self.guarantee_valid(rcvr_cmt, m_imm, scope_r); - - // FIXME (#3387): Total hack: Ignore adjustments for the left-hand - // side. Their regions will be inferred to be too large. - self.ignore_adjustments.insert(rcvr.id); - - visit::visit_expr(ex, self, vt); - } - - // FIXME--#3387 - // ast::expr_binary(_, lhs, rhs) => { - // // Universal comparison operators like ==, >=, etc - // // take their arguments by reference. - // let lhs_ty = ty::expr_ty(self.tcx(), lhs); - // if !ty::type_is_scalar(lhs_ty) { - // let scope_r = ty::re_scope(ex.id); - // let lhs_cmt = self.bccx.cat_expr(lhs); - // self.guarantee_valid(lhs_cmt, m_imm, scope_r); - // let rhs_cmt = self.bccx.cat_expr(rhs); - // self.guarantee_valid(rhs_cmt, m_imm, scope_r); - // } - // visit::visit_expr(ex, self, vt); - // } - - ast::expr_field(rcvr, _, _) - if self.bccx.method_map.contains_key(&ex.id) => { - // Receivers in method calls are always passed by ref. - // - // Here, the field a.b is in fact a closure. Eventually, this - // should be an &fn, but for now it's an @fn. In any case, - // the enclosing scope is either the call where it is a rcvr - // (if used like `a.b(...)`), the call where it's an argument - // (if used like `x(a.b)`), or the block (if used like `let x - // = a.b`). - let scope_r = self.tcx().region_maps.encl_region(ex.id); - let rcvr_cmt = self.bccx.cat_expr(rcvr); - self.guarantee_valid(rcvr_cmt, m_imm, scope_r); - visit::visit_expr(ex, self, vt); - } - - // see explanation attached to the `root_ub` field: - ast::expr_while(cond, ref body) => { - // during the condition, can only root for the condition - self.root_ub = cond.id; - (vt.visit_expr)(cond, self, vt); - - // during body, can only root for the body - self.root_ub = body.node.id; - (vt.visit_block)(body, self, vt); - } - - // see explanation attached to the `root_ub` field: - ast::expr_loop(ref body, _) => { - self.root_ub = body.node.id; - visit::visit_expr(ex, self, vt); - } - - _ => { - visit::visit_expr(ex, self, vt); - } - } - - // Check any contained expressions: - - self.root_ub = old_root_ub; -} - -pub impl GatherLoanCtxt { - fn tcx(&mut self) -> ty::ctxt { self.bccx.tcx } - - fn guarantee_adjustments(&mut self, - expr: @ast::expr, - adjustment: &ty::AutoAdjustment) { - debug!("guarantee_adjustments(expr=%s, adjustment=%?)", - expr.repr(self.tcx()), adjustment); - let _i = indenter(); - - match *adjustment { - ty::AutoAddEnv(*) => { - debug!("autoaddenv -- no autoref"); - return; - } - - ty::AutoDerefRef( - ty::AutoDerefRef { - autoref: None, _ }) => { - debug!("no autoref"); - return; - } - - ty::AutoDerefRef( - ty::AutoDerefRef { - autoref: Some(ref autoref), - autoderefs: autoderefs}) => { - let mcx = &mem_categorization_ctxt { - tcx: self.tcx(), - method_map: self.bccx.method_map}; - let cmt = mcx.cat_expr_autoderefd(expr, autoderefs); - debug!("after autoderef, cmt=%s", self.bccx.cmt_to_repr(cmt)); - - match autoref.kind { - ty::AutoPtr => { - self.guarantee_valid(cmt, - autoref.mutbl, - autoref.region) - } - ty::AutoBorrowVec | ty::AutoBorrowVecRef => { - let cmt_index = mcx.cat_index(expr, cmt); - self.guarantee_valid(cmt_index, - autoref.mutbl, - autoref.region) - } - ty::AutoBorrowFn => { - let cmt_deref = mcx.cat_deref_fn(expr, cmt, 0); - self.guarantee_valid(cmt_deref, - autoref.mutbl, - autoref.region) - } - } - } - } - } - - // guarantees that addr_of(cmt) will be valid for the duration of - // `static_scope_r`, or reports an error. This may entail taking - // out loans, which will be added to the `req_loan_map`. This can - // also entail "rooting" GC'd pointers, which means ensuring - // dynamically that they are not freed. - fn guarantee_valid(&mut self, - cmt: cmt, - req_mutbl: ast::mutability, - scope_r: ty::Region) - { - - let loan_kind = match req_mutbl { - m_mutbl => TotalTake, - m_imm => TotalFreeze, - m_const => Immobile - }; - - self.bccx.stats.guaranteed_paths += 1; - - debug!("guarantee_valid(cmt=%s, req_mutbl=%?, \ - loan_kind=%?, scope_r=%s)", - self.bccx.cmt_to_repr(cmt), - req_mutbl, - loan_kind, - region_to_str(self.tcx(), scope_r)); - let _i = indenter(); - - match cmt.lp { - // If this expression is a loanable path, we MUST take out a - // loan. This is somewhat non-obvious. You might think, - // for example, that if we have an immutable local variable - // `x` whose value is being borrowed, we could rely on `x` - // not to change. This is not so, however, because even - // immutable locals can be moved. So we take out a loan on - // `x`, guaranteeing that it remains immutable for the - // duration of the reference: if there is an attempt to move - // it within that scope, the loan will be detected and an - // error will be reported. - Some(_) => { - match loan::loan(self.bccx, cmt, scope_r, loan_kind) { - Err(ref e) => { self.bccx.report((*e)); } - Ok(loans) => { - self.add_loans(cmt, loan_kind, scope_r, loans); - } - } - } - - // The path is not loanable: in that case, we must try and - // preserve it dynamically (or see that it is preserved by - // virtue of being rooted in some immutable path). We must - // also check that the mutability of the desired pointer - // matches with the actual mutability (but if an immutable - // pointer is desired, that is ok as long as we are pure) - None => { - let result: bckres = { - do self.check_mutbl(loan_kind, cmt).chain |pc1| { - do self.bccx.preserve(cmt, scope_r, - self.item_ub, - self.root_ub).chain |pc2| { - Ok(pc1.combine(pc2)) - } - } - }; - - match result { - Ok(PcOk) => { - debug!("result of preserve: PcOk"); - - // we were able guarantee the validity of the ptr, - // perhaps by rooting or because it is immutably - // rooted. good. - self.bccx.stats.stable_paths += 1; - } - Ok(PcIfPure(ref e)) => { - debug!("result of preserve: %?", PcIfPure((*e))); - - // we are only able to guarantee the validity if - // the scope is pure - match scope_r { - ty::re_scope(pure_id) => { - // if the scope is some block/expr in the - // fn, then just require that this scope - // be pure - self.req_maps.pure_map.insert(pure_id, *e); - self.bccx.stats.req_pure_paths += 1; - - debug!("requiring purity for scope %?", - scope_r); - - if self.tcx().sess.borrowck_note_pure() { - self.bccx.span_note( - cmt.span, - fmt!("purity required")); - } - } - _ => { - // otherwise, we can't enforce purity for - // that scope, so give up and report an - // error - self.bccx.report((*e)); - } - } - } - Err(ref e) => { - // we cannot guarantee the validity of this pointer - debug!("result of preserve: error"); - self.bccx.report((*e)); - } - } - } - } - } - - // Check that the pat `cmt` is compatible with the required - // mutability, presuming that it can be preserved to stay alive - // long enough. - // - // For example, if you have an expression like `&x.f` where `x` - // has type `@mut{f:int}`, this check might fail because `&x.f` - // reqires an immutable pointer, but `f` lives in (aliased) - // mutable memory. - fn check_mutbl(&mut self, - loan_kind: LoanKind, - cmt: cmt) - -> bckres { - debug!("check_mutbl(loan_kind=%?, cmt.mutbl=%?)", - loan_kind, cmt.mutbl); - - match loan_kind { - Immobile => Ok(PcOk), - - TotalTake | PartialTake => { - if cmt.mutbl.is_mutable() { - Ok(PcOk) - } else { - Err(bckerr { cmt: cmt, code: err_mutbl(loan_kind) }) - } - } - - TotalFreeze | PartialFreeze => { - if cmt.mutbl.is_immutable() { - Ok(PcOk) - } else if cmt.cat.is_mutable_box() { - Ok(PcOk) - } else { - // Eventually: - let e = bckerr {cmt: cmt, - code: err_mutbl(loan_kind)}; - Ok(PcIfPure(e)) - } - } - } - } - - fn add_loans(&mut self, - cmt: cmt, - loan_kind: LoanKind, - scope_r: ty::Region, - loans: ~[Loan]) { - if loans.len() == 0 { - return; - } - - // Normally we wouldn't allow `re_free` here. However, in this case - // it should be sound. Below is nmatsakis' reasoning: - // - // Perhaps [this permits] a function kind of like this one here, which - // consumes one mut pointer and returns a narrower one: - // - // struct Foo { f: int } - // fn foo(p: &'v mut Foo) -> &'v mut int { &mut p.f } - // - // I think this should work fine but there is more subtlety to it than - // I at first imagined. Unfortunately it's a very important use case, - // I think, so it really ought to work. The changes you [pcwalton] - // made to permit re_free() do permit this case, I think, but I'm not - // sure what else they permit. I have to think that over a bit. - // - // Ordinarily, a loan with scope re_free wouldn't make sense, because - // you couldn't enforce it. But in this case, your function signature - // informs the caller that you demand exclusive access to p and its - // contents for the lifetime v. Since borrowed pointers are - // non-copyable, they must have (a) made a borrow which will enforce - // those conditions and then (b) given you the resulting pointer. - // Therefore, they should be respecting the loan. So it actually seems - // that it's ok in this case to have a loan with re_free, so long as - // the scope of the loan is no greater than the region pointer on - // which it is based. Neat but not something I had previously - // considered all the way through. (Note that we already rely on - // similar reasoning to permit you to return borrowed pointers into - // immutable structures, this is just the converse I suppose) - - let scope_id = match scope_r { - ty::re_scope(scope_id) | - ty::re_free(ty::FreeRegion {scope_id, _}) => { - scope_id - } - _ => { - self.bccx.tcx.sess.span_bug( - cmt.span, - fmt!("loans required but scope is scope_region is %s \ - (%?)", - region_to_str(self.tcx(), scope_r), - scope_r)); - } - }; - - self.add_loans_to_scope_id(scope_id, loans); - - if loan_kind.is_freeze() && !cmt.mutbl.is_immutable() { - self.bccx.stats.loaned_paths_imm += 1; - - if self.tcx().sess.borrowck_note_loan() { - self.bccx.span_note( - cmt.span, - fmt!("immutable loan required")); - } - } else { - self.bccx.stats.loaned_paths_same += 1; - } - } - - fn add_loans_to_scope_id(&mut self, - scope_id: ast::node_id, - loans: ~[Loan]) { - debug!("adding %u loans to scope_id %?: %s", - loans.len(), scope_id, - str::connect(loans.map(|l| self.bccx.loan_to_repr(l)), ", ")); - match self.req_maps.req_loan_map.find(&scope_id) { - Some(req_loans) => { - req_loans.push_all(loans); - return; - } - None => {} - } - self.req_maps.req_loan_map.insert(scope_id, @mut loans); - } - - fn gather_pat(@mut self, - discr_cmt: cmt, - root_pat: @ast::pat, - arm_id: ast::node_id, - match_id: ast::node_id) { - do self.bccx.cat_pattern(discr_cmt, root_pat) |cmt, pat| { - match pat.node { - ast::pat_ident(bm, _, _) if self.pat_is_binding(pat) => { - match bm { - ast::bind_by_ref(mutbl) => { - // ref x or ref x @ p --- creates a ptr which must - // remain valid for the scope of the match - - // find the region of the resulting pointer (note that - // the type of such a pattern will *always* be a - // region pointer) - let scope_r = ty_region(self.tcx(), pat.span, - self.tcx().ty(pat)); - - // if the scope of the region ptr turns out to be - // specific to this arm, wrap the categorization with - // a cat_discr() node. There is a detailed discussion - // of the function of this node in method preserve(): - let arm_scope = ty::re_scope(arm_id); - if self.bccx.is_subregion_of(scope_r, arm_scope) { - let cmt_discr = self.bccx.cat_discr(cmt, match_id); - self.guarantee_valid(cmt_discr, mutbl, scope_r); - } else { - self.guarantee_valid(cmt, mutbl, scope_r); - } - } - ast::bind_by_copy | ast::bind_infer => { - // Nothing to do here; neither copies nor moves induce - // borrows. - } - } - } - - ast::pat_vec(_, Some(slice_pat), _) => { - // The `slice_pat` here creates a slice into the - // original vector. This is effectively a borrow of - // the elements of the vector being matched. - - let slice_ty = self.tcx().ty(slice_pat); - let (slice_mutbl, slice_r) = - self.vec_slice_info(slice_pat, slice_ty); - let mcx = self.bccx.mc_ctxt(); - let cmt_index = mcx.cat_index(slice_pat, cmt); - self.guarantee_valid(cmt_index, slice_mutbl, slice_r); - } - - _ => {} - } - } - } - - fn vec_slice_info(@mut self, - pat: @ast::pat, - slice_ty: ty::t) -> (ast::mutability, ty::Region) { - /*! - * - * In a pattern like [a, b, ..c], normally `c` has slice type, - * but if you have [a, b, ..ref c], then the type of `ref c` - * will be `&&[]`, so to extract the slice details we have - * to recurse through rptrs. - */ - - match ty::get(slice_ty).sty { - ty::ty_evec(slice_mt, ty::vstore_slice(slice_r)) => { - (slice_mt.mutbl, slice_r) - } - - ty::ty_rptr(_, ref mt) => { - self.vec_slice_info(pat, mt.ty) - } - - _ => { - self.tcx().sess.span_bug( - pat.span, - fmt!("Type of slice pattern is not a slice")); - } - } - } - - fn pat_is_variant_or_struct(@mut self, pat: @ast::pat) -> bool { - pat_util::pat_is_variant_or_struct(self.bccx.tcx.def_map, pat) - } - - fn pat_is_binding(@mut self, pat: @ast::pat) -> bool { - pat_util::pat_is_binding(self.bccx.tcx.def_map, pat) - } -} - -// Setting up info that preserve needs. -// This is just the most convenient place to do it. -fn add_stmt_to_map(stmt: @ast::stmt, - self: @mut GatherLoanCtxt, - vt: visit::vt<@mut GatherLoanCtxt>) { - match stmt.node { - ast::stmt_expr(_, id) | ast::stmt_semi(_, id) => { - self.bccx.stmt_map.insert(id); - } - _ => () - } - visit::visit_stmt(stmt, self, vt); -} - diff --git a/src/librustc/middle/borrowck/gather_loans/lifetime.rs b/src/librustc/middle/borrowck/gather_loans/lifetime.rs new file mode 100644 index 0000000000000..21d7e7041d959 --- /dev/null +++ b/src/librustc/middle/borrowck/gather_loans/lifetime.rs @@ -0,0 +1,322 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! This module implements the check that the lifetime of a borrow +//! does not exceed the lifetime of the value being borrowed. + +use core::prelude::*; +use middle::borrowck::*; +use mc = middle::mem_categorization; +use middle::ty; +use syntax::ast::{m_const, m_imm, m_mutbl}; +use syntax::ast; +use syntax::codemap::span; + +pub fn guarantee_lifetime(bccx: @BorrowckCtxt, + item_scope_id: ast::node_id, + root_scope_id: ast::node_id, + span: span, + cmt: mc::cmt, + loan_region: ty::Region, + loan_mutbl: ast::mutability) { + debug!("guarantee_lifetime(cmt=%s, loan_region=%s)", + cmt.repr(bccx.tcx), loan_region.repr(bccx.tcx)); + let ctxt = GuaranteeLifetimeContext {bccx: bccx, + item_scope_id: item_scope_id, + span: span, + loan_region: loan_region, + loan_mutbl: loan_mutbl, + cmt_original: cmt, + root_scope_id: root_scope_id}; + ctxt.check(cmt, None); +} + +/////////////////////////////////////////////////////////////////////////// +// Private + +struct GuaranteeLifetimeContext { + bccx: @BorrowckCtxt, + + // the node id of the function body for the enclosing item + item_scope_id: ast::node_id, + + // the node id of the innermost loop / function body; this is the + // longest scope for which we can root managed boxes + root_scope_id: ast::node_id, + + span: span, + loan_region: ty::Region, + loan_mutbl: ast::mutability, + cmt_original: mc::cmt +} + +impl GuaranteeLifetimeContext { + fn tcx(&self) -> ty::ctxt { + self.bccx.tcx + } + + fn check(&self, cmt: mc::cmt, discr_scope: Option) { + //! Main routine. Walks down `cmt` until we find the "guarantor". + + match cmt.cat { + mc::cat_rvalue | + mc::cat_implicit_self | + mc::cat_copied_upvar(*) | + mc::cat_local(*) | + mc::cat_arg(*) | + mc::cat_self(*) | + mc::cat_deref(_, _, mc::region_ptr(*)) | + mc::cat_deref(_, _, mc::unsafe_ptr) => { + let scope = self.scope(cmt); + self.check_scope(scope) + } + + mc::cat_stack_upvar(cmt) => { + self.check(cmt, discr_scope) + } + + mc::cat_static_item => { + } + + mc::cat_deref(base, derefs, mc::gc_ptr(ptr_mutbl)) => { + let base_scope = self.scope(base); + + // See rule Freeze-Imm-Managed-Ptr-2 in doc.rs + let omit_root = ( + self.bccx.is_subregion_of(self.loan_region, base_scope) && + base.mutbl.is_immutable() && + !self.is_moved(base) + ); + + if !omit_root { + self.check_root(base, derefs, ptr_mutbl, discr_scope); + } else { + debug!("omitting root, base=%s, base_scope=%?", + base.repr(self.tcx()), base_scope); + } + } + + mc::cat_deref(base, _, mc::uniq_ptr(*)) | + mc::cat_interior(base, _) => { + self.check(base, discr_scope) + } + + mc::cat_discr(base, new_discr_scope) => { + // Subtle: in a match, we must ensure that each binding + // variable remains valid for the duration of the arm in + // which it appears, presuming that this arm is taken. + // But it is inconvenient in trans to root something just + // for one arm. Therefore, we insert a cat_discr(), + // basically a special kind of category that says "if this + // value must be dynamically rooted, root it for the scope + // `match_id`. + // + // As an example, consider this scenario: + // + // let mut x = @Some(3); + // match *x { Some(y) {...} None {...} } + // + // Technically, the value `x` need only be rooted + // in the `some` arm. However, we evaluate `x` in trans + // before we know what arm will be taken, so we just + // always root it for the duration of the match. + // + // As a second example, consider *this* scenario: + // + // let x = @mut @Some(3); + // match x { @@Some(y) {...} @@None {...} } + // + // Here again, `x` need only be rooted in the `some` arm. + // In this case, the value which needs to be rooted is + // found only when checking which pattern matches: but + // this check is done before entering the arm. Therefore, + // even in this case we just choose to keep the value + // rooted for the entire match. This means the value will be + // rooted even if the none arm is taken. Oh well. + // + // At first, I tried to optimize the second case to only + // root in one arm, but the result was suboptimal: first, + // it interfered with the construction of phi nodes in the + // arm, as we were adding code to root values before the + // phi nodes were added. This could have been addressed + // with a second basic block. However, the naive approach + // also yielded suboptimal results for patterns like: + // + // let x = @mut @...; + // match x { @@some_variant(y) | @@some_other_variant(y) => + // + // The reason is that we would root the value once for + // each pattern and not once per arm. This is also easily + // fixed, but it's yet more code for what is really quite + // the corner case. + // + // Nonetheless, if you decide to optimize this case in the + // future, you need only adjust where the cat_discr() + // node appears to draw the line between what will be rooted + // in the *arm* vs the *match*. + self.check(base, Some(new_discr_scope)) + } + } + } + + fn check_root(&self, + cmt_base: mc::cmt, + derefs: uint, + ptr_mutbl: ast::mutability, + discr_scope: Option) { + debug!("check_root(cmt_base=%s, derefs=%? ptr_mutbl=%?, \ + discr_scope=%?)", + cmt_base.repr(self.tcx()), + derefs, + ptr_mutbl, + discr_scope); + + // Make sure that the loan does not exceed the maximum time + // that we can root the value, dynamically. + let root_region = ty::re_scope(self.root_scope_id); + if !self.bccx.is_subregion_of(self.loan_region, root_region) { + self.report_error( + err_out_of_root_scope(root_region, self.loan_region)); + return; + } + + // Extract the scope id that indicates how long the rooting is required + let root_scope = match self.loan_region { + ty::re_scope(id) => id, + _ => { + // the check above should fail for anything is not re_scope + self.bccx.tcx.sess.span_bug( + cmt_base.span, + fmt!("Cannot issue root for scope region: %?", + self.loan_region)); + } + }; + + // If inside of a match arm, expand the rooting to the entire + // match. See the detailed discussion in `check()` above. + let mut root_scope = match discr_scope { + None => root_scope, + Some(id) => { + if self.bccx.is_subscope_of(root_scope, id) { + id + } else { + root_scope + } + } + }; + + // FIXME(#3511) grow to the nearest cleanup scope---this can + // cause observable errors if freezing! + if !self.bccx.tcx.region_maps.is_cleanup_scope(root_scope) { + debug!("%? is not a cleanup scope, adjusting", root_scope); + root_scope = self.bccx.tcx.region_maps.cleanup_scope(root_scope); + } + + // If we are borrowing the inside of an `@mut` box, + // we need to dynamically mark it to prevent incompatible + // borrows from happening later. + let opt_dyna = match ptr_mutbl { + m_imm | m_const => None, + m_mutbl => { + match self.loan_mutbl { + m_mutbl => Some(DynaMut), + m_imm | m_const => Some(DynaImm) + } + } + }; + + // Add a record of what is required + let rm_key = root_map_key {id: cmt_base.id, derefs: derefs}; + let root_info = RootInfo {scope: root_scope, freeze: opt_dyna}; + self.bccx.root_map.insert(rm_key, root_info); + + debug!("root_key: %? root_info: %?", rm_key, root_info); + } + + fn check_scope(&self, max_scope: ty::Region) { + //! Reports an error if `loan_region` is larger than `valid_scope` + + if !self.bccx.is_subregion_of(self.loan_region, max_scope) { + self.report_error(err_out_of_scope(max_scope, self.loan_region)); + } + } + + fn is_moved(&self, cmt: mc::cmt) -> bool { + //! True if `cmt` is something that is potentially moved + //! out of the current stack frame. + + match cmt.guarantor().cat { + mc::cat_local(id) | + mc::cat_self(id) | + mc::cat_arg(id, _) => { + self.bccx.moved_variables_set.contains(&id) + } + mc::cat_rvalue | + mc::cat_static_item | + mc::cat_implicit_self | + mc::cat_copied_upvar(*) | + mc::cat_deref(*) => { + false + } + r @ mc::cat_interior(*) | + r @ mc::cat_stack_upvar(*) | + r @ mc::cat_discr(*) => { + self.tcx().sess.span_bug( + cmt.span, + fmt!("illegal guarantor category: %?", r)); + } + } + } + + fn scope(&self, cmt: mc::cmt) -> ty::Region { + //! Returns the maximal region scope for the which the + //! lvalue `cmt` is guaranteed to be valid without any + //! rooting etc, and presuming `cmt` is not mutated. + + match cmt.cat { + mc::cat_rvalue => { + ty::re_scope(self.bccx.tcx.region_maps.cleanup_scope(cmt.id)) + } + mc::cat_implicit_self | + mc::cat_copied_upvar(_) => { + ty::re_scope(self.item_scope_id) + } + mc::cat_static_item => { + ty::re_static + } + mc::cat_local(local_id) | + mc::cat_arg(local_id, _) | + mc::cat_self(local_id) => { + self.bccx.tcx.region_maps.encl_region(local_id) + } + mc::cat_deref(_, _, mc::unsafe_ptr(*)) => { + ty::re_static + } + mc::cat_deref(_, _, mc::region_ptr(_, r)) => { + r + } + mc::cat_deref(cmt, _, mc::uniq_ptr(*)) | + mc::cat_deref(cmt, _, mc::gc_ptr(*)) | + mc::cat_interior(cmt, _) | + mc::cat_stack_upvar(cmt) | + mc::cat_discr(cmt, _) => { + self.scope(cmt) + } + } + } + + fn report_error(&self, code: bckerr_code) { + self.bccx.report(BckError { + cmt: self.cmt_original, + span: self.span, + code: code + }); + } +} diff --git a/src/librustc/middle/borrowck/gather_loans/mod.rs b/src/librustc/middle/borrowck/gather_loans/mod.rs new file mode 100644 index 0000000000000..82638ceb4d4f1 --- /dev/null +++ b/src/librustc/middle/borrowck/gather_loans/mod.rs @@ -0,0 +1,710 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// ---------------------------------------------------------------------- +// Gathering loans +// +// The borrow check proceeds in two phases. In phase one, we gather the full +// set of loans that are required at any point. These are sorted according to +// their associated scopes. In phase two, checking loans, we will then make +// sure that all of these loans are honored. + +use core::prelude::*; + +use middle::borrowck::*; +use mc = middle::mem_categorization; +use middle::pat_util; +use middle::ty::{ty_region}; +use middle::ty; +use util::common::indenter; +use util::ppaux::{Repr}; + +use core::hashmap::HashSet; +use core::vec; +use syntax::ast::{m_const, m_imm, m_mutbl}; +use syntax::ast; +use syntax::ast_util::id_range; +use syntax::codemap::span; +use syntax::print::pprust; +use syntax::visit; + +mod lifetime; +mod restrictions; + +/// Context used while gathering loans: +/// +/// - `bccx`: the the borrow check context +/// - `item_ub`: the id of the block for the enclosing fn/method item +/// - `root_ub`: the id of the outermost block for which we can root +/// an `@T`. This is the id of the innermost enclosing +/// loop or function body. +/// +/// The role of `root_ub` is to prevent us from having to accumulate +/// vectors of rooted items at runtime. Consider this case: +/// +/// fn foo(...) -> int { +/// let mut ptr: ∫ +/// while some_cond { +/// let x: @int = ...; +/// ptr = &*x; +/// } +/// *ptr +/// } +/// +/// If we are not careful here, we would infer the scope of the borrow `&*x` +/// to be the body of the function `foo()` as a whole. We would then +/// have root each `@int` that is produced, which is an unbounded number. +/// No good. Instead what will happen is that `root_ub` will be set to the +/// body of the while loop and we will refuse to root the pointer `&*x` +/// because it would have to be rooted for a region greater than `root_ub`. +struct GatherLoanCtxt { + bccx: @BorrowckCtxt, + id_range: id_range, + all_loans: @mut ~[Loan], + item_ub: ast::node_id, + repeating_ids: ~[ast::node_id], + ignore_adjustments: HashSet +} + +pub fn gather_loans(bccx: @BorrowckCtxt, + body: &ast::blk) -> (id_range, @mut ~[Loan]) { + let glcx = @mut GatherLoanCtxt { + bccx: bccx, + id_range: id_range::max(), + all_loans: @mut ~[], + item_ub: body.node.id, + repeating_ids: ~[body.node.id], + ignore_adjustments: HashSet::new() + }; + let v = visit::mk_vt(@visit::Visitor {visit_expr: gather_loans_in_expr, + visit_block: gather_loans_in_block, + visit_fn: gather_loans_in_fn, + visit_stmt: add_stmt_to_map, + visit_pat: add_pat_to_id_range, + .. *visit::default_visitor()}); + (v.visit_block)(body, glcx, v); + return (glcx.id_range, glcx.all_loans); +} + +fn add_pat_to_id_range(p: @ast::pat, + self: @mut GatherLoanCtxt, + v: visit::vt<@mut GatherLoanCtxt>) { + // NB: This visitor function just adds the pat ids into the id + // range. We gather loans that occur in patterns using the + // `gather_pat()` method below. Eventually these two should be + // brought together. + self.id_range.add(p.id); + visit::visit_pat(p, self, v); +} + +fn gather_loans_in_fn(fk: &visit::fn_kind, + decl: &ast::fn_decl, + body: &ast::blk, + sp: span, + id: ast::node_id, + self: @mut GatherLoanCtxt, + v: visit::vt<@mut GatherLoanCtxt>) { + match fk { + // Do not visit items here, the outer loop in borrowck/mod + // will visit them for us in turn. + &visit::fk_item_fn(*) | &visit::fk_method(*) | + &visit::fk_dtor(*) => { + return; + } + + // Visit closures as part of the containing item. + &visit::fk_anon(*) | &visit::fk_fn_block(*) => { + self.push_repeating_id(body.node.id); + visit::visit_fn(fk, decl, body, sp, id, self, v); + self.pop_repeating_id(body.node.id); + } + } +} + +fn gather_loans_in_block(blk: &ast::blk, + self: @mut GatherLoanCtxt, + vt: visit::vt<@mut GatherLoanCtxt>) { + self.id_range.add(blk.node.id); + visit::visit_block(blk, self, vt); +} + +fn gather_loans_in_expr(ex: @ast::expr, + self: @mut GatherLoanCtxt, + vt: visit::vt<@mut GatherLoanCtxt>) { + let bccx = self.bccx; + let tcx = bccx.tcx; + + debug!("gather_loans_in_expr(expr=%?/%s)", + ex.id, pprust::expr_to_str(ex, tcx.sess.intr())); + + self.id_range.add(ex.id); + self.id_range.add(ex.callee_id); + + // If this expression is borrowed, have to ensure it remains valid: + { + let mut this = &mut *self; // FIXME(#5074) + if !this.ignore_adjustments.contains(&ex.id) { + for tcx.adjustments.find(&ex.id).each |&adjustments| { + this.guarantee_adjustments(ex, *adjustments); + } + } + } + + // Special checks for various kinds of expressions: + match ex.node { + ast::expr_addr_of(mutbl, base) => { + let base_cmt = self.bccx.cat_expr(base); + + // make sure that the thing we are pointing out stays valid + // for the lifetime `scope_r` of the resulting ptr: + let scope_r = ty_region(tcx, ex.span, ty::expr_ty(tcx, ex)); + self.guarantee_valid(ex.id, ex.span, base_cmt, mutbl, scope_r); + visit::visit_expr(ex, self, vt); + } + + ast::expr_call(f, ref args, _) => { + let arg_tys = ty::ty_fn_args(ty::expr_ty(self.tcx(), f)); + self.guarantee_arguments(ex, *args, arg_tys); + visit::visit_expr(ex, self, vt); + } + + ast::expr_method_call(_, _, _, ref args, _) => { + let arg_tys = ty::ty_fn_args(ty::node_id_to_type(self.tcx(), + ex.callee_id)); + self.guarantee_arguments(ex, *args, arg_tys); + + visit::visit_expr(ex, self, vt); + } + + ast::expr_match(ex_v, ref arms) => { + let cmt = self.bccx.cat_expr(ex_v); + for arms.each |arm| { + for arm.pats.each |pat| { + self.gather_pat(cmt, *pat, arm.body.node.id, ex.id); + } + } + visit::visit_expr(ex, self, vt); + } + + ast::expr_index(rcvr, _) | + ast::expr_binary(_, rcvr, _) | + ast::expr_unary(_, rcvr) | + ast::expr_assign_op(_, rcvr, _) + if self.bccx.method_map.contains_key(&ex.id) => { + // Receivers in method calls are always passed by ref. + // + // Here, in an overloaded operator, the call is this expression, + // and hence the scope of the borrow is this call. + // + // FIX? / NOT REALLY---technically we should check the other + // argument and consider the argument mode. But how annoying. + // And this problem when goes away when argument modes are + // phased out. So I elect to leave this undone. + let scope_r = ty::re_scope(ex.id); + let rcvr_cmt = self.bccx.cat_expr(rcvr); + self.guarantee_valid(rcvr.id, rcvr.span, rcvr_cmt, m_imm, scope_r); + + // FIXME (#3387): Total hack: Ignore adjustments for the left-hand + // side. Their regions will be inferred to be too large. + self.ignore_adjustments.insert(rcvr.id); + + visit::visit_expr(ex, self, vt); + } + + // FIXME--#3387 + // ast::expr_binary(_, lhs, rhs) => { + // // Universal comparison operators like ==, >=, etc + // // take their arguments by reference. + // let lhs_ty = ty::expr_ty(self.tcx(), lhs); + // if !ty::type_is_scalar(lhs_ty) { + // let scope_r = ty::re_scope(ex.id); + // let lhs_cmt = self.bccx.cat_expr(lhs); + // self.guarantee_valid(lhs_cmt, m_imm, scope_r); + // let rhs_cmt = self.bccx.cat_expr(rhs); + // self.guarantee_valid(rhs_cmt, m_imm, scope_r); + // } + // visit::visit_expr(ex, self, vt); + // } + + // see explanation attached to the `root_ub` field: + ast::expr_while(cond, ref body) => { + // during the condition, can only root for the condition + self.push_repeating_id(cond.id); + (vt.visit_expr)(cond, self, vt); + self.pop_repeating_id(cond.id); + + // during body, can only root for the body + self.push_repeating_id(body.node.id); + (vt.visit_block)(body, self, vt); + self.pop_repeating_id(body.node.id); + } + + // see explanation attached to the `root_ub` field: + ast::expr_loop(ref body, _) => { + self.push_repeating_id(body.node.id); + visit::visit_expr(ex, self, vt); + self.pop_repeating_id(body.node.id); + } + + _ => { + visit::visit_expr(ex, self, vt); + } + } +} + +pub impl GatherLoanCtxt { + fn tcx(&self) -> ty::ctxt { self.bccx.tcx } + + fn push_repeating_id(&mut self, id: ast::node_id) { + self.repeating_ids.push(id); + } + + fn pop_repeating_id(&mut self, id: ast::node_id) { + let popped = self.repeating_ids.pop(); + assert!(id == popped); + } + + fn guarantee_arguments(&mut self, + call_expr: @ast::expr, + args: &[@ast::expr], + arg_tys: &[ty::arg]) { + for vec::each2(args, arg_tys) |arg, arg_ty| { + match ty::resolved_mode(self.tcx(), arg_ty.mode) { + ast::by_ref => { + self.guarantee_by_ref_argument(call_expr, *arg); + } + ast::by_copy => {} + } + } + } + + fn guarantee_by_ref_argument(&mut self, + call_expr: @ast::expr, + arg_expr: @ast::expr) { + // FIXME(#5074) nested method calls + let scope_r = ty::re_scope(call_expr.id); + let arg_cmt = self.bccx.cat_expr(arg_expr); + self.guarantee_valid(arg_expr.id, arg_expr.span, + arg_cmt, m_imm, scope_r); + } + + fn guarantee_adjustments(&mut self, + expr: @ast::expr, + adjustment: &ty::AutoAdjustment) { + debug!("guarantee_adjustments(expr=%s, adjustment=%?)", + expr.repr(self.tcx()), adjustment); + let _i = indenter(); + + match *adjustment { + ty::AutoAddEnv(*) => { + debug!("autoaddenv -- no autoref"); + return; + } + + ty::AutoDerefRef( + ty::AutoDerefRef { + autoref: None, _ }) => { + debug!("no autoref"); + return; + } + + ty::AutoDerefRef( + ty::AutoDerefRef { + autoref: Some(ref autoref), + autoderefs: autoderefs}) => { + let mcx = &mc::mem_categorization_ctxt { + tcx: self.tcx(), + method_map: self.bccx.method_map}; + let mut cmt = mcx.cat_expr_autoderefd(expr, autoderefs); + debug!("after autoderef, cmt=%s", cmt.repr(self.tcx())); + + match *autoref { + ty::AutoPtr(r, m) => { + self.guarantee_valid(expr.id, + expr.span, + cmt, + m, + r) + } + ty::AutoBorrowVec(r, m) | ty::AutoBorrowVecRef(r, m) => { + let cmt_index = mcx.cat_index(expr, cmt); + self.guarantee_valid(expr.id, + expr.span, + cmt_index, + m, + r) + } + ty::AutoBorrowFn(r) => { + let cmt_deref = mcx.cat_deref_fn(expr, cmt, 0); + self.guarantee_valid(expr.id, + expr.span, + cmt_deref, + m_imm, + r) + } + ty::AutoUnsafe(_) => {} + } + } + } + } + + // Guarantees that addr_of(cmt) will be valid for the duration of + // `static_scope_r`, or reports an error. This may entail taking + // out loans, which will be added to the `req_loan_map`. This can + // also entail "rooting" GC'd pointers, which means ensuring + // dynamically that they are not freed. + fn guarantee_valid(&mut self, + borrow_id: ast::node_id, + borrow_span: span, + cmt: mc::cmt, + req_mutbl: ast::mutability, + loan_region: ty::Region) + { + debug!("guarantee_valid(borrow_id=%?, cmt=%s, \ + req_mutbl=%?, loan_region=%?)", + borrow_id, + cmt.repr(self.tcx()), + req_mutbl, + loan_region); + + // a loan for the empty region can never be dereferenced, so + // it is always safe + if loan_region == ty::re_empty { + return; + } + + let root_ub = { *self.repeating_ids.last() }; // FIXME(#5074) + + // Check that the lifetime of the borrow does not exceed + // the lifetime of the data being borrowed. + lifetime::guarantee_lifetime(self.bccx, self.item_ub, root_ub, + borrow_span, cmt, loan_region, req_mutbl); + + // Check that we don't allow mutable borrows of non-mutable data. + check_mutability(self.bccx, borrow_span, cmt, req_mutbl); + + // Compute the restrictions that are required to enforce the + // loan is safe. + let restr = restrictions::compute_restrictions( + self.bccx, borrow_span, + cmt, self.restriction_set(req_mutbl)); + + // Create the loan record (if needed). + let loan = match restr { + restrictions::Safe => { + // No restrictions---no loan record necessary + return; + } + + restrictions::SafeIf(loan_path, restrictions) => { + let loan_scope = match loan_region { + ty::re_scope(id) => id, + ty::re_free(ref fr) => fr.scope_id, + + ty::re_static => { + // If we get here, an error must have been + // reported in + // `lifetime::guarantee_lifetime()`, because + // the only legal ways to have a borrow with a + // static lifetime should not require + // restrictions. To avoid reporting derived + // errors, we just return here without adding + // any loans. + return; + } + + ty::re_empty | + ty::re_bound(*) | + ty::re_infer(*) => { + self.tcx().sess.span_bug( + cmt.span, + fmt!("Invalid borrow lifetime: %?", loan_region)); + } + }; + debug!("loan_scope = %?", loan_scope); + + let gen_scope = self.compute_gen_scope(borrow_id, loan_scope); + debug!("gen_scope = %?", gen_scope); + + let kill_scope = self.compute_kill_scope(loan_scope, loan_path); + debug!("kill_scope = %?", kill_scope); + + if req_mutbl == m_mutbl { + self.mark_loan_path_as_mutated(loan_path); + } + + let all_loans = &mut *self.all_loans; // FIXME(#5074) + Loan { + index: all_loans.len(), + loan_path: loan_path, + cmt: cmt, + mutbl: req_mutbl, + gen_scope: gen_scope, + kill_scope: kill_scope, + span: borrow_span, + restrictions: restrictions + } + } + }; + + debug!("guarantee_valid(borrow_id=%?), loan=%s", + borrow_id, loan.repr(self.tcx())); + + // let loan_path = loan.loan_path; + // let loan_gen_scope = loan.gen_scope; + // let loan_kill_scope = loan.kill_scope; + self.all_loans.push(loan); + + // if loan_gen_scope != borrow_id { + // NOTE handle case where gen_scope is not borrow_id + // + // Typically, the scope of the loan includes the point at + // which the loan is originated. This + // This is a subtle case. See the test case + // + // to see what we are guarding against. + + //let restr = restrictions::compute_restrictions( + // self.bccx, borrow_span, cmt, RESTR_EMPTY); + //let loan = { + // let all_loans = &mut *self.all_loans; // FIXME(#5074) + // Loan { + // index: all_loans.len(), + // loan_path: loan_path, + // cmt: cmt, + // mutbl: m_const, + // gen_scope: borrow_id, + // kill_scope: kill_scope, + // span: borrow_span, + // restrictions: restrictions + // } + // } + + fn check_mutability(bccx: @BorrowckCtxt, + borrow_span: span, + cmt: mc::cmt, + req_mutbl: ast::mutability) { + match req_mutbl { + m_const => { + // Data of any mutability can be lent as const. + } + + m_imm => { + match cmt.mutbl { + mc::McImmutable | mc::McDeclared | mc::McInherited => { + // both imm and mut data can be lent as imm; + // for mutable data, this is a freeze + } + mc::McReadOnly => { + bccx.report(BckError {span: borrow_span, + cmt: cmt, + code: err_mutbl(req_mutbl)}); + } + } + } + + m_mutbl => { + // Only mutable data can be lent as mutable. + if !cmt.mutbl.is_mutable() { + bccx.report(BckError {span: borrow_span, + cmt: cmt, + code: err_mutbl(req_mutbl)}); + } + } + } + } + } + + fn restriction_set(&self, req_mutbl: ast::mutability) -> RestrictionSet { + match req_mutbl { + m_const => RESTR_EMPTY, + m_imm => RESTR_EMPTY | RESTR_MUTATE, + m_mutbl => RESTR_EMPTY | RESTR_MUTATE | RESTR_FREEZE + } + } + + fn mark_loan_path_as_mutated(&self, loan_path: @LoanPath) { + //! For mutable loans of content whose mutability derives + //! from a local variable, mark the mutability decl as necessary. + + match *loan_path { + LpVar(local_id) => { + self.tcx().used_mut_nodes.insert(local_id); + } + LpExtend(base, mc::McInherited, _) => { + self.mark_loan_path_as_mutated(base); + } + LpExtend(_, mc::McDeclared, _) | + LpExtend(_, mc::McImmutable, _) | + LpExtend(_, mc::McReadOnly, _) => { + } + } + } + + fn compute_gen_scope(&self, + borrow_id: ast::node_id, + loan_scope: ast::node_id) -> ast::node_id { + //! Determine when to introduce the loan. Typically the loan + //! is introduced at the point of the borrow, but in some cases, + //! notably method arguments, the loan may be introduced only + //! later, once it comes into scope. + + let rm = self.bccx.tcx.region_maps; + if rm.is_subscope_of(borrow_id, loan_scope) { + borrow_id + } else { + loan_scope + } + } + + fn compute_kill_scope(&self, + loan_scope: ast::node_id, + lp: @LoanPath) -> ast::node_id { + //! Determine when the loan restrictions go out of scope. + //! This is either when the lifetime expires or when the + //! local variable which roots the loan-path goes out of scope, + //! whichever happens faster. + //! + //! It may seem surprising that we might have a loan region + //! larger than the variable which roots the loan-path; this can + //! come about when variables of `&mut` type are re-borrowed, + //! as in this example: + //! + //! fn counter<'a>(v: &'a mut Foo) -> &'a mut uint { + //! &mut v.counter + //! } + //! + //! In this case, the borrowed pointer (`'a`) outlives the + //! variable `v` that hosts it. Note that this doesn't come up + //! with immutable `&` pointers, because borrows of such pointers + //! do not require restrictions and hence do not cause a loan. + + let rm = self.bccx.tcx.region_maps; + let lexical_scope = rm.encl_scope(lp.node_id()); + if rm.is_subscope_of(lexical_scope, loan_scope) { + lexical_scope + } else { + assert!(rm.is_subscope_of(loan_scope, lexical_scope)); + loan_scope + } + } + + fn gather_pat(&mut self, + discr_cmt: mc::cmt, + root_pat: @ast::pat, + arm_body_id: ast::node_id, + match_id: ast::node_id) { + do self.bccx.cat_pattern(discr_cmt, root_pat) |cmt, pat| { + match pat.node { + ast::pat_ident(bm, _, _) if self.pat_is_binding(pat) => { + match bm { + ast::bind_by_ref(mutbl) => { + // ref x or ref x @ p --- creates a ptr which must + // remain valid for the scope of the match + + // find the region of the resulting pointer (note that + // the type of such a pattern will *always* be a + // region pointer) + let scope_r = + ty_region(self.tcx(), pat.span, + ty::node_id_to_type(self.tcx(), pat.id)); + + // if the scope of the region ptr turns out to be + // specific to this arm, wrap the categorization + // with a cat_discr() node. There is a detailed + // discussion of the function of this node in + // `lifetime.rs`: + let arm_scope = ty::re_scope(arm_body_id); + if self.bccx.is_subregion_of(scope_r, arm_scope) { + let cmt_discr = self.bccx.cat_discr(cmt, match_id); + self.guarantee_valid(pat.id, pat.span, + cmt_discr, mutbl, scope_r); + } else { + self.guarantee_valid(pat.id, pat.span, + cmt, mutbl, scope_r); + } + } + ast::bind_by_copy | ast::bind_infer => { + // Nothing to do here; neither copies nor moves induce + // borrows. + } + } + } + + ast::pat_vec(_, Some(slice_pat), _) => { + // The `slice_pat` here creates a slice into the + // original vector. This is effectively a borrow of + // the elements of the vector being matched. + + let slice_ty = ty::node_id_to_type(self.tcx(), + slice_pat.id); + let (slice_mutbl, slice_r) = + self.vec_slice_info(slice_pat, slice_ty); + let mcx = self.bccx.mc_ctxt(); + let cmt_index = mcx.cat_index(slice_pat, cmt); + self.guarantee_valid(pat.id, pat.span, + cmt_index, slice_mutbl, slice_r); + } + + _ => {} + } + } + } + + fn vec_slice_info(&self, + pat: @ast::pat, + slice_ty: ty::t) -> (ast::mutability, ty::Region) { + /*! + * + * In a pattern like [a, b, ..c], normally `c` has slice type, + * but if you have [a, b, ..ref c], then the type of `ref c` + * will be `&&[]`, so to extract the slice details we have + * to recurse through rptrs. + */ + + match ty::get(slice_ty).sty { + ty::ty_evec(slice_mt, ty::vstore_slice(slice_r)) => { + (slice_mt.mutbl, slice_r) + } + + ty::ty_rptr(_, ref mt) => { + self.vec_slice_info(pat, mt.ty) + } + + _ => { + self.tcx().sess.span_bug( + pat.span, + fmt!("Type of slice pattern is not a slice")); + } + } + } + + fn pat_is_variant_or_struct(&self, pat: @ast::pat) -> bool { + pat_util::pat_is_variant_or_struct(self.bccx.tcx.def_map, pat) + } + + fn pat_is_binding(&self, pat: @ast::pat) -> bool { + pat_util::pat_is_binding(self.bccx.tcx.def_map, pat) + } +} + +// Setting up info that preserve needs. +// This is just the most convenient place to do it. +fn add_stmt_to_map(stmt: @ast::stmt, + self: @mut GatherLoanCtxt, + vt: visit::vt<@mut GatherLoanCtxt>) { + match stmt.node { + ast::stmt_expr(_, id) | ast::stmt_semi(_, id) => { + self.bccx.stmt_map.insert(id); + } + _ => () + } + visit::visit_stmt(stmt, self, vt); +} diff --git a/src/librustc/middle/borrowck/gather_loans/restrictions.rs b/src/librustc/middle/borrowck/gather_loans/restrictions.rs new file mode 100644 index 0000000000000..950dbc58ec364 --- /dev/null +++ b/src/librustc/middle/borrowck/gather_loans/restrictions.rs @@ -0,0 +1,251 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! Computes the restrictions that result from a borrow. + +use core::prelude::*; +use middle::borrowck::*; +use mc = middle::mem_categorization; +use middle::ty; +use syntax::ast::{m_const, m_imm, m_mutbl}; +use syntax::ast; +use syntax::codemap::span; + +pub enum RestrictionResult { + Safe, + SafeIf(@LoanPath, ~[Restriction]) +} + +pub fn compute_restrictions(bccx: @BorrowckCtxt, + span: span, + cmt: mc::cmt, + restr: RestrictionSet) -> RestrictionResult { + let ctxt = RestrictionsContext { + bccx: bccx, + span: span, + cmt_original: cmt + }; + + ctxt.compute(cmt, restr) +} + +/////////////////////////////////////////////////////////////////////////// +// Private + +struct RestrictionsContext { + bccx: @BorrowckCtxt, + span: span, + cmt_original: mc::cmt +} + +impl RestrictionsContext { + fn tcx(&self) -> ty::ctxt { + self.bccx.tcx + } + + fn compute(&self, + cmt: mc::cmt, + restrictions: RestrictionSet) -> RestrictionResult { + + // Check for those cases where we cannot control the aliasing + // and make sure that we are not being asked to. + match cmt.freely_aliasable() { + None => {} + Some(cause) => { + self.check_aliasing_permitted(cause, restrictions); + } + } + + match cmt.cat { + mc::cat_rvalue => { + // Effectively, rvalues are stored into a + // non-aliasable temporary on the stack. Since they + // are inherently non-aliasable, they can only be + // accessed later through the borrow itself and hence + // must inherently comply with its terms. + Safe + } + + mc::cat_local(local_id) | + mc::cat_arg(local_id, ast::by_copy) | + mc::cat_self(local_id) => { + let lp = @LpVar(local_id); + SafeIf(lp, ~[Restriction {loan_path: lp, + set: restrictions}]) + } + + mc::cat_interior(cmt_base, i @ mc::interior_variant(_)) => { + // When we borrow the interior of an enum, we have to + // ensure the enum itself is not mutated, because that + // could cause the type of the memory to change. + let result = self.compute(cmt_base, restrictions | RESTR_MUTATE); + self.extend(result, cmt.mutbl, LpInterior(i), restrictions) + } + + mc::cat_interior(cmt_base, i @ mc::interior_tuple) | + mc::cat_interior(cmt_base, i @ mc::interior_anon_field) | + mc::cat_interior(cmt_base, i @ mc::interior_field(*)) | + mc::cat_interior(cmt_base, i @ mc::interior_index(*)) => { + // For all of these cases, overwriting the base would + // not change the type of the memory, so no additional + // restrictions are needed. + // + // FIXME(#5397) --- Mut fields are not treated soundly + // (hopefully they will just get phased out) + let result = self.compute(cmt_base, restrictions); + self.extend(result, cmt.mutbl, LpInterior(i), restrictions) + } + + mc::cat_deref(cmt_base, _, mc::uniq_ptr(*)) => { + // When we borrow the interior of an owned pointer, we + // cannot permit the base to be mutated, because that + // would cause the unique pointer to be freed. + let result = self.compute(cmt_base, restrictions | RESTR_MUTATE); + self.extend(result, cmt.mutbl, LpDeref, restrictions) + } + + mc::cat_copied_upvar(*) | // FIXME(#2152) allow mutation of upvars + mc::cat_static_item(*) | + mc::cat_implicit_self(*) | + mc::cat_arg(_, ast::by_ref) | + mc::cat_deref(_, _, mc::region_ptr(m_imm, _)) | + mc::cat_deref(_, _, mc::gc_ptr(m_imm)) => { + Safe + } + + mc::cat_deref(_, _, mc::region_ptr(m_const, _)) | + mc::cat_deref(_, _, mc::gc_ptr(m_const)) => { + self.check_no_mutability_control(cmt, restrictions); + Safe + } + + mc::cat_deref(cmt_base, _, mc::gc_ptr(m_mutbl)) => { + // Technically, no restrictions are *necessary* here. + // The validity of the borrow is guaranteed + // dynamically. However, nonetheless we add a + // restriction to make a "best effort" to report + // static errors. For example, if there is code like + // + // let v = @mut ~[1, 2, 3]; + // for v.each |e| { + // v.push(e + 1); + // } + // + // Then the code below would add restrictions on `*v`, + // which means that an error would be reported + // here. This of course is not perfect. For example, + // a function like the following would not report an error + // at compile-time but would fail dynamically: + // + // let v = @mut ~[1, 2, 3]; + // let w = v; + // for v.each |e| { + // w.push(e + 1); + // } + // + // In addition, we only add a restriction for those cases + // where we can construct a sensible loan path, so an + // example like the following will fail dynamically: + // + // impl V { + // fn get_list(&self) -> @mut ~[int]; + // } + // ... + // let v: &V = ...; + // for v.get_list().each |e| { + // v.get_list().push(e + 1); + // } + match opt_loan_path(cmt_base) { + None => Safe, + Some(lp_base) => { + let lp = @LpExtend(lp_base, cmt.mutbl, LpDeref); + SafeIf(lp, ~[Restriction {loan_path: lp, + set: restrictions}]) + } + } + } + + mc::cat_deref(cmt_base, _, mc::region_ptr(m_mutbl, _)) => { + // Because an `&mut` pointer does not inherit its + // mutability, we can only prevent mutation or prevent + // freezing if it is not aliased. Therefore, in such + // cases we restrict aliasing on `cmt_base`. + if restrictions.intersects(RESTR_MUTATE | RESTR_FREEZE) { + let result = self.compute(cmt_base, restrictions | RESTR_ALIAS); + self.extend(result, cmt.mutbl, LpDeref, restrictions) + } else { + let result = self.compute(cmt_base, restrictions); + self.extend(result, cmt.mutbl, LpDeref, restrictions) + } + } + + mc::cat_deref(_, _, mc::unsafe_ptr) => { + // We are very trusting when working with unsafe pointers. + Safe + } + + mc::cat_stack_upvar(cmt_base) | + mc::cat_discr(cmt_base, _) => { + self.compute(cmt_base, restrictions) + } + } + } + + fn extend(&self, + result: RestrictionResult, + mc: mc::MutabilityCategory, + elem: LoanPathElem, + restrictions: RestrictionSet) -> RestrictionResult { + match result { + Safe => Safe, + SafeIf(base_lp, base_vec) => { + let lp = @LpExtend(base_lp, mc, elem); + SafeIf(lp, vec::append_one(base_vec, + Restriction {loan_path: lp, + set: restrictions})) + } + } + } + + fn check_aliasing_permitted(&self, + cause: mc::AliasableReason, + restrictions: RestrictionSet) { + //! This method is invoked when the current `cmt` is something + //! where aliasing cannot be controlled. It reports an error if + //! the restrictions required that it not be aliased; currently + //! this only occurs when re-borrowing an `&mut` pointer. + //! + //! NB: To be 100% consistent, we should report an error if + //! RESTR_FREEZE is found, because we cannot prevent freezing, + //! nor would we want to. However, we do not report such an + //! error, because this restriction only occurs when the user + //! is creating an `&mut` pointer to immutable or read-only + //! data, and there is already another piece of code that + //! checks for this condition. + + if restrictions.intersects(RESTR_ALIAS) { + self.bccx.report_aliasability_violation( + self.span, + BorrowViolation, + cause); + } + } + + fn check_no_mutability_control(&self, + cmt: mc::cmt, + restrictions: RestrictionSet) { + if restrictions.intersects(RESTR_MUTATE | RESTR_FREEZE) { + self.bccx.report(BckError {span: self.span, + cmt: cmt, + code: err_freeze_aliasable_const}); + } + } +} + diff --git a/src/librustc/middle/borrowck/loan.rs b/src/librustc/middle/borrowck/loan.rs deleted file mode 100644 index 21de29b8f60ad..0000000000000 --- a/src/librustc/middle/borrowck/loan.rs +++ /dev/null @@ -1,312 +0,0 @@ -// Copyright 2012 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 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -/*! - -The `Loan` module deals with borrows of *uniquely mutable* data. We -say that data is uniquely mutable if the current activation (stack -frame) controls the only mutable reference to the data. The most -common way that this can occur is if the current activation owns the -data being borrowed, but it can also occur with `&mut` pointers. The -primary characteristic of uniquely mutable data is that, at any given -time, there is at most one path that can be used to mutate it, and -that path is only accessible from the top stack frame. - -Given that some data found at a path P is being borrowed to a borrowed -pointer with mutability M and lifetime L, the job of the code in this -module is to compute the set of *loans* that are necessary to ensure -that (1) the data found at P outlives L and that (2) if M is mutable -then the path P will not be modified directly or indirectly except -through that pointer. A *loan* is the combination of a path P_L, a -mutability M_L, and a lifetime L_L where: - -- The path P_L indicates what data has been lent. -- The mutability M_L indicates the access rights on the data: - - const: the data cannot be moved - - immutable/mutable: the data cannot be moved or mutated -- The lifetime L_L indicates the *scope* of the loan. - -FIXME #4730 --- much more needed, don't have time to write this all up now - -*/ - -// ---------------------------------------------------------------------- -// Loan(Ex, M, S) = Ls holds if ToAddr(Ex) will remain valid for the entirety -// of the scope S, presuming that the returned set of loans `Ls` are honored. - -use middle::borrowck::{Loan, bckerr, bckres, BorrowckCtxt, err_mutbl}; -use middle::borrowck::{LoanKind, TotalFreeze, PartialFreeze, - TotalTake, PartialTake, Immobile}; -use middle::borrowck::{err_out_of_scope}; -use middle::mem_categorization::{cat_arg, cat_binding, cat_discr, cat_comp}; -use middle::mem_categorization::{cat_deref, cat_discr, cat_local, cat_self}; -use middle::mem_categorization::{cat_special, cat_stack_upvar, cmt}; -use middle::mem_categorization::{comp_field, comp_index, comp_variant}; -use middle::mem_categorization::{gc_ptr, region_ptr}; -use middle::ty; -use util::common::indenter; - -use syntax::ast::m_imm; -use syntax::ast; - -pub fn loan(bccx: @BorrowckCtxt, - cmt: cmt, - scope_region: ty::Region, - loan_kind: LoanKind) -> bckres<~[Loan]> -{ - let mut lc = LoanContext { - bccx: bccx, - scope_region: scope_region, - loans: ~[] - }; - match lc.loan(cmt, loan_kind, true) { - Err(ref e) => return Err((*e)), - Ok(()) => {} - } - // FIXME #4945: Workaround for borrow check bug. - Ok(copy lc.loans) -} - -struct LoanContext { - bccx: @BorrowckCtxt, - - // the region scope for which we must preserve the memory - scope_region: ty::Region, - - // accumulated list of loans that will be required - loans: ~[Loan] -} - -pub impl LoanContext { - fn tcx(&self) -> ty::ctxt { self.bccx.tcx } - - fn loan(&mut self, - cmt: cmt, - loan_kind: LoanKind, - owns_lent_data: bool) -> bckres<()> - { - /*! - * - * The main routine. - * - * # Parameters - * - * - `cmt`: the categorization of the data being borrowed - * - `req_mutbl`: the mutability of the borrowed pointer - * that was created - * - `owns_lent_data`: indicates whether `cmt` owns the - * data that is being lent. See - * discussion in `issue_loan()`. - */ - - debug!("loan(%s, %?)", - self.bccx.cmt_to_repr(cmt), - loan_kind); - let _i = indenter(); - - // see stable() above; should only be called when `cmt` is lendable - if cmt.lp.is_none() { - self.bccx.tcx.sess.span_bug( - cmt.span, - ~"loan() called with non-lendable value"); - } - - match cmt.cat { - cat_binding(_) | cat_rvalue | cat_special(_) => { - // should never be loanable - self.bccx.tcx.sess.span_bug( - cmt.span, - ~"rvalue with a non-none lp"); - } - cat_local(local_id) | cat_arg(local_id) | cat_self(local_id) => { - // FIXME(#4903) - let local_region = self.bccx.tcx.region_maps.encl_region(local_id); - self.issue_loan(cmt, local_region, loan_kind, - owns_lent_data) - } - cat_stack_upvar(cmt) => { - self.loan(cmt, loan_kind, owns_lent_data) - } - cat_discr(base, _) => { - self.loan(base, loan_kind, owns_lent_data) - } - cat_comp(cmt_base, comp_field(_, m)) | - cat_comp(cmt_base, comp_index(_, m)) => { - // For most components, the type of the embedded data is - // stable. Therefore, the base structure need only be - // const---unless the component must be immutable. In - // that case, it must also be embedded in an immutable - // location, or else the whole structure could be - // overwritten and the component along with it. - self.loan_stable_comp(cmt, cmt_base, loan_kind, m, - owns_lent_data) - } - cat_comp(cmt_base, comp_tuple) | - cat_comp(cmt_base, comp_anon_field) => { - // As above. - self.loan_stable_comp(cmt, cmt_base, loan_kind, m_imm, - owns_lent_data) - } - cat_comp(cmt_base, comp_variant(enum_did)) => { - // For enums, the memory is unstable if there are multiple - // variants, because if the enum value is overwritten then - // the memory changes type. - if ty::enum_is_univariant(self.bccx.tcx, enum_did) { - self.loan_stable_comp(cmt, cmt_base, loan_kind, m_imm, - owns_lent_data) - } else { - self.loan_unstable_deref(cmt, cmt_base, loan_kind, - owns_lent_data) - } - } - cat_deref(cmt_base, _, uniq_ptr) => { - // For unique pointers, the memory being pointed out is - // unstable because if the unique pointer is overwritten - // then the memory is freed. - self.loan_unstable_deref(cmt, cmt_base, loan_kind, - owns_lent_data) - } - cat_deref(cmt_base, _, region_ptr(ast::m_mutbl, region)) => { - // Mutable data can be loaned out as immutable or const. We must - // loan out the base as well as the main memory. For example, - // if someone borrows `*b`, we want to borrow `b` as immutable - // as well. - do self.loan(cmt_base, TotalFreeze, false).chain |_| { - self.issue_loan(cmt, region, loan_kind, owns_lent_data) - } - } - cat_deref(_, _, unsafe_ptr) | - cat_deref(_, _, gc_ptr(_)) | - cat_deref(_, _, region_ptr(_, _)) => { - // Aliased data is simply not lendable. - self.bccx.tcx.sess.span_bug( - cmt.span, - ~"aliased ptr with a non-none lp"); - } - } - } - - // A "stable component" is one where assigning the base of the - // component cannot cause the component itself to change types. - // Example: record fields. - fn loan_stable_comp(&mut self, - cmt: cmt, - cmt_base: cmt, - loan_kind: LoanKind, - comp_mutbl: ast::mutability, - owns_lent_data: bool) -> bckres<()> - { - let base_kind = match (comp_mutbl, loan_kind) { - // Declared as "immutable" means: inherited mutability and - // hence mutable iff parent is mutable. So propagate - // mutability on up. - (m_imm, TotalFreeze) | (m_imm, PartialFreeze) => PartialFreeze, - (m_imm, TotalTake) | (m_imm, PartialTake) => PartialTake, - - // Declared as "mutable" means: always mutable no matter - // what the mutability of the base is. So that means we - // can weaken the condition on the base to PartialFreeze. - // This implies that the user could freeze the base, but - // that is ok since the even with an &T base, the mut - // field will still be considered mutable. - (_, TotalTake) | (_, PartialTake) | - (_, TotalFreeze) | (_, PartialFreeze) => { - PartialFreeze - } - - // If we just need to guarantee the value won't be moved, - // it doesn't matter what mutability the component was - // declared with. - (_, Immobile) => Immobile, - }; - - do self.loan(cmt_base, base_kind, owns_lent_data).chain |_ok| { - // can use static for the scope because the base - // determines the lifetime, ultimately - self.issue_loan(cmt, ty::re_static, loan_kind, - owns_lent_data) - } - } - - // An "unstable deref" means a deref of a ptr/comp where, if the - // base of the deref is assigned to, pointers into the result of the - // deref would be invalidated. Examples: interior of variants, uniques. - fn loan_unstable_deref(&mut self, - cmt: cmt, - cmt_base: cmt, - loan_kind: LoanKind, - owns_lent_data: bool) -> bckres<()> { - // Variant components: the base must be immutable, because - // if it is overwritten, the types of the embedded data - // could change. - do self.loan(cmt_base, PartialFreeze, owns_lent_data).chain |_| { - // can use static, as in loan_stable_comp() - self.issue_loan(cmt, ty::re_static, loan_kind, - owns_lent_data) - } - } - - fn issue_loan(&mut self, - cmt: cmt, - scope_ub: ty::Region, - loan_kind: LoanKind, - owns_lent_data: bool) -> bckres<()> { - // Subtle: the `scope_ub` is the maximal lifetime of `cmt`. - // Therefore, if `cmt` owns the data being lent, then the - // scope of the loan must be less than `scope_ub`, or else the - // data would be freed while the loan is active. - // - // However, if `cmt` does *not* own the data being lent, then - // it is ok if `cmt` goes out of scope during the loan. This - // can occur when you have an `&mut` parameter that is being - // reborrowed. - - if !owns_lent_data || - self.bccx.is_subregion_of(self.scope_region, scope_ub) - { - if cmt.mutbl.is_mutable() { - // If this loan is a mutable loan, then mark the loan path (if - // it exists) as being used. This is similar to the check - // performed in check_loans.rs in check_assignment(), but this - // is for a different purpose of having the 'mut' qualifier. - for cmt.lp.each |lp| { - for lp.node_id().each |&id| { - self.tcx().used_mut_nodes.insert(id); - } - } - } else if loan_kind.is_take() { - // We do not allow non-mutable data to be "taken" - // under any circumstances. - return Err(bckerr { - cmt:cmt, - code:err_mutbl(loan_kind) - }); - } - - self.loans.push(Loan { - // Note: cmt.lp must be Some(_) because otherwise this - // loan process does not apply at all. - lp: cmt.lp.get(), - cmt: cmt, - kind: loan_kind - }); - - return Ok(()); - } else { - // The loan being requested lives longer than the data - // being loaned out! - return Err(bckerr { - cmt:cmt, - code:err_out_of_scope(scope_ub, self.scope_region) - }); - } - } -} - diff --git a/src/librustc/middle/borrowck/mod.rs b/src/librustc/middle/borrowck/mod.rs index 3746f9c6e60b1..c108b020378eb 100644 --- a/src/librustc/middle/borrowck/mod.rs +++ b/src/librustc/middle/borrowck/mod.rs @@ -8,254 +8,64 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -/*! -# Borrow check - -This pass is in job of enforcing *memory safety* and *purity*. As -memory safety is by far the more complex topic, I'll focus on that in -this description, but purity will be covered later on. In the context -of Rust, memory safety means three basic things: - -- no writes to immutable memory; -- all pointers point to non-freed memory; -- all pointers point to memory of the same type as the pointer. - -The last point might seem confusing: after all, for the most part, -this condition is guaranteed by the type check. However, there are -two cases where the type check effectively delegates to borrow check. - -The first case has to do with enums. If there is a pointer to the -interior of an enum, and the enum is in a mutable location (such as a -local variable or field declared to be mutable), it is possible that -the user will overwrite the enum with a new value of a different -variant, and thus effectively change the type of the memory that the -pointer is pointing at. +/*! See doc.rs for a thorough explanation of the borrow checker */ -The second case has to do with mutability. Basically, the type -checker has only a limited understanding of mutability. It will allow -(for example) the user to get an immutable pointer with the address of -a mutable local variable. It will also allow a `@mut T` or `~mut T` -pointer to be borrowed as a `&r.T` pointer. These seeming oversights -are in fact intentional; they allow the user to temporarily treat a -mutable value as immutable. It is up to the borrow check to guarantee -that the value in question is not in fact mutated during the lifetime -`r` of the reference. +use core; +use core::prelude::*; -# Definition of unstable memory - -The primary danger to safety arises due to *unstable memory*. -Unstable memory is memory whose validity or type may change as a -result of an assignment, move, or a variable going out of scope. -There are two cases in Rust where memory is unstable: the contents of -unique boxes and enums. - -Unique boxes are unstable because when the variable containing the -unique box is re-assigned, moves, or goes out of scope, the unique box -is freed or---in the case of a move---potentially given to another -task. In either case, if there is an extant and usable pointer into -the box, then safety guarantees would be compromised. - -Enum values are unstable because they are reassigned the types of -their contents may change if they are assigned with a different -variant than they had previously. - -# Safety criteria that must be enforced - -Whenever a piece of memory is borrowed for lifetime L, there are two -things which the borrow checker must guarantee. First, it must -guarantee that the memory address will remain allocated (and owned by -the current task) for the entirety of the lifetime L. Second, it must -guarantee that the type of the data will not change for the entirety -of the lifetime L. In exchange, the region-based type system will -guarantee that the pointer is not used outside the lifetime L. These -guarantees are to some extent independent but are also inter-related. - -In some cases, the type of a pointer cannot be invalidated but the -lifetime can. For example, imagine a pointer to the interior of -a shared box like: - - let mut x = @mut {f: 5, g: 6}; - let y = &mut x.f; - -Here, a pointer was created to the interior of a shared box which -contains a record. Even if `*x` were to be mutated like so: - - *x = {f: 6, g: 7}; - -This would cause `*y` to change from 5 to 6, but the pointer pointer -`y` remains valid. It still points at an integer even if that integer -has been overwritten. - -However, if we were to reassign `x` itself, like so: - - x = @{f: 6, g: 7}; - -This could potentially invalidate `y`, because if `x` were the final -reference to the shared box, then that memory would be released and -now `y` points at freed memory. (We will see that to prevent this -scenario we will *root* shared boxes that reside in mutable memory -whose contents are borrowed; rooting means that we create a temporary -to ensure that the box is not collected). - -In other cases, like an enum on the stack, the memory cannot be freed -but its type can change: - - let mut x = Some(5); - match x { - Some(ref y) => { ... } - None => { ... } - } - -Here as before, the pointer `y` would be invalidated if we were to -reassign `x` to `none`. (We will see that this case is prevented -because borrowck tracks data which resides on the stack and prevents -variables from reassigned if there may be pointers to their interior) - -Finally, in some cases, both dangers can arise. For example, something -like the following: - - let mut x = ~Some(5); - match x { - ~Some(ref y) => { ... } - ~None => { ... } - } - -In this case, if `x` to be reassigned or `*x` were to be mutated, then -the pointer `y` would be invalided. (This case is also prevented by -borrowck tracking data which is owned by the current stack frame) - -# Summary of the safety check - -In order to enforce mutability, the borrow check has a few tricks up -its sleeve: - -- When data is owned by the current stack frame, we can identify every - possible assignment to a local variable and simply prevent - potentially dangerous assignments directly. - -- If data is owned by a shared box, we can root the box to increase - its lifetime. - -- If data is found within a borrowed pointer, we can assume that the - data will remain live for the entirety of the borrowed pointer. - -- We can rely on the fact that pure actions (such as calling pure - functions) do not mutate data which is not owned by the current - stack frame. - -# Possible future directions - -There are numerous ways that the `borrowck` could be strengthened, but -these are the two most likely: - -- flow-sensitivity: we do not currently consider flow at all but only - block-scoping. This means that innocent code like the following is - rejected: - - let mut x: int; - ... - x = 5; - let y: &int = &x; // immutable ptr created - ... - - The reason is that the scope of the pointer `y` is the entire - enclosing block, and the assignment `x = 5` occurs within that - block. The analysis is not smart enough to see that `x = 5` always - happens before the immutable pointer is created. This is relatively - easy to fix and will surely be fixed at some point. - -- finer-grained purity checks: currently, our fallback for - guaranteeing random references into mutable, aliasable memory is to - require *total purity*. This is rather strong. We could use local - type-based alias analysis to distinguish writes that could not - possibly invalid the references which must be guaranteed. This - would only work within the function boundaries; function calls would - still require total purity. This seems less likely to be - implemented in the short term as it would make the code - significantly more complex; there is currently no code to analyze - the types and determine the possible impacts of a write. - -# How the code works - -The borrow check code is divided into several major modules, each of -which is documented in its own file. - -The `gather_loans` and `check_loans` are the two major passes of the -analysis. The `gather_loans` pass runs over the IR once to determine -what memory must remain valid and for how long. Its name is a bit of -a misnomer; it does in fact gather up the set of loans which are -granted, but it also determines when @T pointers must be rooted and -for which scopes purity must be required. - -The `check_loans` pass walks the IR and examines the loans and purity -requirements computed in `gather_loans`. It checks to ensure that (a) -the conditions of all loans are honored; (b) no contradictory loans -were granted (for example, loaning out the same memory as mutable and -immutable simultaneously); and (c) any purity requirements are -honored. - -The remaining modules are helper modules used by `gather_loans` and -`check_loans`: - -- `categorization` has the job of analyzing an expression to determine - what kind of memory is used in evaluating it (for example, where - dereferences occur and what kind of pointer is dereferenced; whether - the memory is mutable; etc) -- `loan` determines when data uniquely tied to the stack frame can be - loaned out. -- `preserve` determines what actions (if any) must be taken to preserve - aliasable data. This is the code which decides when to root - an @T pointer or to require purity. - -# Maps that are created - -Borrowck results in two maps. - -- `root_map`: identifies those expressions or patterns whose result - needs to be rooted. Conceptually the root_map maps from an - expression or pattern node to a `node_id` identifying the scope for - which the expression must be rooted (this `node_id` should identify - a block or call). The actual key to the map is not an expression id, - however, but a `root_map_key`, which combines an expression id with a - deref count and is used to cope with auto-deref. - -- `mutbl_map`: identifies those local variables which are modified or - moved. This is used by trans to guarantee that such variables are - given a memory location and not used as immediates. - */ - -use middle::mem_categorization::*; +use mc = middle::mem_categorization; use middle::ty; use middle::typeck; use middle::moves; +use middle::dataflow::DataFlowContext; +use middle::dataflow::DataFlowOperator; use util::common::stmt_set; -use util::ppaux::note_and_explain_region; +use util::ppaux::{note_and_explain_region, Repr}; use core::hashmap::{HashSet, HashMap}; -use core::to_bytes; -use syntax::ast::{mutability, m_imm}; +use core::io; +use core::result::{Result}; +use core::ops::{BitOr, BitAnd}; use syntax::ast; +use syntax::ast_map; +use syntax::visit; use syntax::codemap::span; +macro_rules! if_ok( + ($inp: expr) => ( + match $inp { + Ok(v) => { v } + Err(e) => { return Err(e); } + } + ) +) + +pub mod doc; + pub mod check_loans; + +#[path="gather_loans/mod.rs"] pub mod gather_loans; -pub mod loan; -pub mod preserve; + +pub struct LoanDataFlowOperator; +pub type LoanDataFlow = DataFlowContext; pub fn check_crate( tcx: ty::ctxt, method_map: typeck::method_map, moves_map: moves::MovesMap, + moved_variables_set: moves::MovedVariablesSet, capture_map: moves::CaptureMap, - crate: @ast::crate) -> (root_map, mutbl_map, write_guard_map) + crate: @ast::crate) -> (root_map, write_guard_map) { let bccx = @BorrowckCtxt { tcx: tcx, method_map: method_map, moves_map: moves_map, + moved_variables_set: moved_variables_set, capture_map: capture_map, root_map: root_map(), - mutbl_map: @mut HashSet::new(), + loan_map: @mut HashMap::new(), write_guard_map: @mut HashSet::new(), stmt_map: @mut HashSet::new(), stats: @mut BorrowStats { @@ -267,8 +77,9 @@ pub fn check_crate( } }; - let req_maps = gather_loans::gather_loans(bccx, crate); - check_loans::check_loans(bccx, req_maps, crate); + let v = visit::mk_vt(@visit::Visitor {visit_fn: borrowck_fn, + ..*visit::default_visitor()}); + visit::visit_crate(crate, bccx, v); if tcx.sess.borrowck_stats() { io::println(~"--- borrowck stats ---"); @@ -284,7 +95,7 @@ pub fn check_crate( make_stat(bccx, bccx.stats.req_pure_paths))); } - return (bccx.root_map, bccx.mutbl_map, bccx.write_guard_map); + return (bccx.root_map, bccx.write_guard_map); fn make_stat(bccx: &BorrowckCtxt, stat: uint) -> ~str { let stat_f = stat as float; @@ -293,6 +104,46 @@ pub fn check_crate( } } +fn borrowck_fn(fk: &visit::fn_kind, + decl: &ast::fn_decl, + body: &ast::blk, + sp: span, + id: ast::node_id, + self: @BorrowckCtxt, + v: visit::vt<@BorrowckCtxt>) { + match fk { + &visit::fk_anon(*) | + &visit::fk_fn_block(*) => { + // Closures are checked as part of their containing fn item. + } + + &visit::fk_item_fn(*) | + &visit::fk_method(*) | + &visit::fk_dtor(*) => { + debug!("borrowck_fn(id=%?)", id); + + // Check the body of fn items. + let (id_range, all_loans) = + gather_loans::gather_loans(self, body); + let all_loans: &~[Loan] = &*all_loans; // FIXME(#5074) + let mut dfcx = + DataFlowContext::new(self.tcx, + self.method_map, + LoanDataFlowOperator, + id_range, + all_loans.len()); + for all_loans.eachi |loan_idx, loan| { + dfcx.add_gen(loan.gen_scope, loan_idx); + dfcx.add_kill(loan.kill_scope, loan_idx); + } + dfcx.propagate(body); + check_loans::check_loans(self, &dfcx, *all_loans, body); + } + } + + visit::visit_fn(fk, decl, body, sp, id, self, v); +} + // ---------------------------------------------------------------------- // Type definitions @@ -300,9 +151,10 @@ pub struct BorrowckCtxt { tcx: ty::ctxt, method_map: typeck::method_map, moves_map: moves::MovesMap, + moved_variables_set: moves::MovedVariablesSet, capture_map: moves::CaptureMap, root_map: root_map, - mutbl_map: mutbl_map, + loan_map: LoanMap, write_guard_map: write_guard_map, stmt_map: stmt_set, @@ -318,137 +170,228 @@ pub struct BorrowStats { guaranteed_paths: uint } -pub struct RootInfo { - scope: ast::node_id, - // This will be true if we need to freeze this box at runtime. This will - // result in a call to `borrow_as_imm()` and `return_to_mut()`. - freezes: bool // True if we need to freeze this box at runtime. -} - -// a map mapping id's of expressions of gc'd type (@T, @[], etc) where -// the box needs to be kept live to the id of the scope for which they -// must stay live. -pub type root_map = @mut HashMap; +pub type LoanMap = @mut HashMap; // the keys to the root map combine the `id` of the expression with -// the number of types that it is autodereferenced. So, for example, +// the number of types that it is autodereferenced. So, for example, // if you have an expression `x.f` and x has type ~@T, we could add an // entry {id:x, derefs:0} to refer to `x` itself, `{id:x, derefs:1}` // to refer to the deref of the unique pointer, and so on. -#[deriving(Eq)] +#[deriving(Eq, IterBytes)] pub struct root_map_key { id: ast::node_id, derefs: uint } -// set of ids of local vars / formal arguments that are modified / moved. -// this is used in trans for optimization purposes. -pub type mutbl_map = @mut HashSet; - // A set containing IDs of expressions of gc'd type that need to have a write // guard. pub type write_guard_map = @mut HashSet; -// Errors that can occur -#[deriving(Eq)] -pub enum bckerr_code { - err_mut_uniq, - err_mut_variant, - err_root_not_permitted, - err_mutbl(LoanKind), - err_out_of_root_scope(ty::Region, ty::Region), // superscope, subscope - err_out_of_scope(ty::Region, ty::Region) // superscope, subscope -} +pub type BckResult = Result; -// Combination of an error code and the categorization of the expression -// that caused it #[deriving(Eq)] -pub struct bckerr { - cmt: cmt, - code: bckerr_code +pub enum PartialTotal { + Partial, // Loan affects some portion + Total // Loan affects entire path } -pub enum MoveError { - MoveOk, - MoveFromIllegalCmt(cmt), - MoveWhileBorrowed(/*move*/ cmt, /*loan*/ cmt) +/////////////////////////////////////////////////////////////////////////// +// Loans and loan paths + +/// Record of a loan that was issued. +pub struct Loan { + index: uint, + loan_path: @LoanPath, + cmt: mc::cmt, + mutbl: ast::mutability, + restrictions: ~[Restriction], + gen_scope: ast::node_id, + kill_scope: ast::node_id, + span: span, } -// shorthand for something that fails with `bckerr` or succeeds with `T` -pub type bckres = Result; +#[deriving(Eq)] +pub enum LoanPath { + LpVar(ast::node_id), // `x` in doc.rs + LpExtend(@LoanPath, mc::MutabilityCategory, LoanPathElem) +} #[deriving(Eq)] -pub enum LoanKind { - TotalFreeze, // Entire path is frozen (borrowed as &T) - PartialFreeze, // Some subpath is frozen (borrowed as &T) - TotalTake, // Entire path is "taken" (borrowed as &mut T) - PartialTake, // Some subpath is "taken" (borrowed as &mut T) - Immobile // Path cannot be moved (borrowed as &const T) +pub enum LoanPathElem { + LpDeref, // `*LV` in doc.rs + LpInterior(mc::interior_kind) // `LV.f` in doc.rs } -/// a complete record of a loan that was granted -pub struct Loan { - lp: @loan_path, - cmt: cmt, - kind: LoanKind +pub impl LoanPath { + fn node_id(&self) -> ast::node_id { + match *self { + LpVar(local_id) => local_id, + LpExtend(base, _, _) => base.node_id() + } + } } -/// maps computed by `gather_loans` that are then used by `check_loans` -/// -/// - `req_loan_map`: map from each block/expr to the required loans needed -/// for the duration of that block/expr -/// - `pure_map`: map from block/expr that must be pure to the error message -/// that should be reported if they are not pure -pub struct ReqMaps { - req_loan_map: HashMap, - pure_map: HashMap +pub fn opt_loan_path(cmt: mc::cmt) -> Option<@LoanPath> { + //! Computes the `LoanPath` (if any) for a `cmt`. + //! Note that this logic is somewhat duplicated in + //! the method `compute()` found in `gather_loans::restrictions`, + //! which allows it to share common loan path pieces as it + //! traverses the CMT. + + match cmt.cat { + mc::cat_rvalue | + mc::cat_static_item | + mc::cat_copied_upvar(_) | + mc::cat_implicit_self | + mc::cat_arg(_, ast::by_ref) => { + None + } + + mc::cat_local(id) | + mc::cat_arg(id, ast::by_copy) | + mc::cat_self(id) => { + Some(@LpVar(id)) + } + + mc::cat_deref(cmt_base, _, _) => { + opt_loan_path(cmt_base).map( + |&lp| @LpExtend(lp, cmt.mutbl, LpDeref)) + } + + mc::cat_interior(cmt_base, ik) => { + opt_loan_path(cmt_base).map( + |&lp| @LpExtend(lp, cmt.mutbl, LpInterior(ik))) + } + + mc::cat_stack_upvar(cmt_base) | + mc::cat_discr(cmt_base, _) => { + opt_loan_path(cmt_base) + } + } } -pub fn save_and_restore(save_and_restore_t: &mut T, - f: &fn() -> U) -> U { - let old_save_and_restore_t = *save_and_restore_t; - let u = f(); - *save_and_restore_t = old_save_and_restore_t; - u +/////////////////////////////////////////////////////////////////////////// +// Restrictions +// +// Borrowing an lvalue often results in *restrictions* that limit what +// can be done with this lvalue during the scope of the loan: +// +// - `RESTR_MUTATE`: The lvalue may not be modified and mutable pointers to +// the value cannot be created. +// - `RESTR_FREEZE`: Immutable pointers to the value cannot be created. +// - `RESTR_ALIAS`: The lvalue may not be aliased in any way. +// +// In addition, no value which is restricted may be moved. Therefore, +// restrictions are meaningful even if the RestrictionSet is empty, +// because the restriction against moves is implied. + +pub struct Restriction { + loan_path: @LoanPath, + set: RestrictionSet } -pub fn save_and_restore_managed(save_and_restore_t: @mut T, - f: &fn() -> U) -> U { - let old_save_and_restore_t = *save_and_restore_t; - let u = f(); - *save_and_restore_t = old_save_and_restore_t; - u +pub struct RestrictionSet { + bits: u32 } -pub impl LoanKind { - fn is_freeze(&self) -> bool { - match *self { - TotalFreeze | PartialFreeze => true, - _ => false - } +pub static RESTR_EMPTY: RestrictionSet = RestrictionSet {bits: 0b000}; +pub static RESTR_MUTATE: RestrictionSet = RestrictionSet {bits: 0b001}; +pub static RESTR_FREEZE: RestrictionSet = RestrictionSet {bits: 0b010}; +pub static RESTR_ALIAS: RestrictionSet = RestrictionSet {bits: 0b100}; + +pub impl RestrictionSet { + fn intersects(&self, restr: RestrictionSet) -> bool { + (self.bits & restr.bits) != 0 } - fn is_take(&self) -> bool { - match *self { - TotalTake | PartialTake => true, - _ => false - } + fn contains_all(&self, restr: RestrictionSet) -> bool { + (self.bits & restr.bits) == restr.bits } } -/// Creates and returns a new root_map +impl BitOr for RestrictionSet { + fn bitor(&self, rhs: &RestrictionSet) -> RestrictionSet { + RestrictionSet {bits: self.bits | rhs.bits} + } +} -impl to_bytes::IterBytes for root_map_key { - fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { - to_bytes::iter_bytes_2(&self.id, &self.derefs, lsb0, f); +impl BitAnd for RestrictionSet { + fn bitand(&self, rhs: &RestrictionSet) -> RestrictionSet { + RestrictionSet {bits: self.bits & rhs.bits} } } +/////////////////////////////////////////////////////////////////////////// +// Rooting of managed boxes +// +// When we borrow the interior of a managed box, it is sometimes +// necessary to *root* the box, meaning to stash a copy of the box +// somewhere that the garbage collector will find it. This ensures +// that the box is not collected for the lifetime of the borrow. +// +// As part of this rooting, we sometimes also freeze the box at +// runtime, meaning that we dynamically detect when the box is +// borrowed in incompatible ways. +// +// Both of these actions are driven through the `root_map`, which maps +// from a node to the dynamic rooting action that should be taken when +// that node executes. The node is identified through a +// `root_map_key`, which pairs a node-id and a deref count---the +// problem is that sometimes the box that needs to be rooted is only +// uncovered after a certain number of auto-derefs. + +pub struct RootInfo { + scope: ast::node_id, + freeze: Option // Some() if we should freeze box at runtime +} + +pub type root_map = @mut HashMap; + pub fn root_map() -> root_map { return @mut HashMap::new(); } -// ___________________________________________________________________________ +pub enum DynaFreezeKind { + DynaImm, + DynaMut +} + +impl ToStr for DynaFreezeKind { + fn to_str(&self) -> ~str { + match *self { + DynaMut => ~"mutable", + DynaImm => ~"immutable" + } + } +} + +/////////////////////////////////////////////////////////////////////////// +// Errors + +// Errors that can occur +#[deriving(Eq)] +pub enum bckerr_code { + err_mutbl(ast::mutability), + err_out_of_root_scope(ty::Region, ty::Region), // superscope, subscope + err_out_of_scope(ty::Region, ty::Region), // superscope, subscope + err_freeze_aliasable_const +} + +// Combination of an error code and the categorization of the expression +// that caused it +#[deriving(Eq)] +pub struct BckError { + span: span, + cmt: mc::cmt, + code: bckerr_code +} + +pub enum AliasableViolationKind { + MutabilityViolation, + BorrowViolation +} + +/////////////////////////////////////////////////////////////////////////// // Misc pub impl BorrowckCtxt { @@ -456,27 +399,31 @@ pub impl BorrowckCtxt { self.tcx.region_maps.is_subregion_of(r_sub, r_sup) } - fn cat_expr(&self, expr: @ast::expr) -> cmt { - cat_expr(self.tcx, self.method_map, expr) + fn is_subscope_of(&self, r_sub: ast::node_id, r_sup: ast::node_id) -> bool { + self.tcx.region_maps.is_subscope_of(r_sub, r_sup) + } + + fn cat_expr(&self, expr: @ast::expr) -> mc::cmt { + mc::cat_expr(self.tcx, self.method_map, expr) } - fn cat_expr_unadjusted(&self, expr: @ast::expr) -> cmt { - cat_expr_unadjusted(self.tcx, self.method_map, expr) + fn cat_expr_unadjusted(&self, expr: @ast::expr) -> mc::cmt { + mc::cat_expr_unadjusted(self.tcx, self.method_map, expr) } fn cat_expr_autoderefd(&self, expr: @ast::expr, - adj: @ty::AutoAdjustment) -> cmt { + adj: @ty::AutoAdjustment) -> mc::cmt { match *adj { ty::AutoAddEnv(*) => { // no autoderefs - cat_expr_unadjusted(self.tcx, self.method_map, expr) + mc::cat_expr_unadjusted(self.tcx, self.method_map, expr) } ty::AutoDerefRef( ty::AutoDerefRef { autoderefs: autoderefs, _}) => { - cat_expr_autoderefd(self.tcx, self.method_map, expr, - autoderefs) + mc::cat_expr_autoderefd(self.tcx, self.method_map, expr, + autoderefs) } } } @@ -485,43 +432,33 @@ pub impl BorrowckCtxt { id: ast::node_id, span: span, ty: ty::t, - def: ast::def) -> cmt { - cat_def(self.tcx, self.method_map, id, span, ty, def) - } - - fn cat_variant(&self, - arg: N, - enum_did: ast::def_id, - cmt: cmt) -> cmt { - cat_variant(self.tcx, self.method_map, arg, enum_did, cmt) + def: ast::def) -> mc::cmt { + mc::cat_def(self.tcx, self.method_map, id, span, ty, def) } - fn cat_discr(&self, cmt: cmt, match_id: ast::node_id) -> cmt { - return @cmt_ {cat:cat_discr(cmt, match_id),.. *cmt}; + fn cat_discr(&self, cmt: mc::cmt, match_id: ast::node_id) -> mc::cmt { + @mc::cmt_ {cat:mc::cat_discr(cmt, match_id), + mutbl:cmt.mutbl.inherit(), + ..*cmt} } - fn mc_ctxt(&self) -> mem_categorization_ctxt { - mem_categorization_ctxt {tcx: self.tcx, + fn mc_ctxt(&self) -> mc::mem_categorization_ctxt { + mc::mem_categorization_ctxt {tcx: self.tcx, method_map: self.method_map} } - fn cat_pattern(&self, cmt: cmt, pat: @ast::pat, op: &fn(cmt, @ast::pat)) { + fn cat_pattern(&self, + cmt: mc::cmt, + pat: @ast::pat, + op: &fn(mc::cmt, @ast::pat)) { let mc = self.mc_ctxt(); mc.cat_pattern(cmt, pat, op); } - fn report_if_err(&self, bres: bckres<()>) { - match bres { - Ok(()) => (), - Err(ref e) => self.report((*e)) - } - } - - fn report(&self, err: bckerr) { + fn report(&self, err: BckError) { self.span_err( - err.cmt.span, - fmt!("illegal borrow: %s", - self.bckerr_to_str(err))); + err.span, + self.bckerr_to_str(err)); self.note_and_explain_bckerr(err); } @@ -533,51 +470,75 @@ pub impl BorrowckCtxt { self.tcx.sess.span_note(s, m); } - fn add_to_mutbl_map(&self, cmt: cmt) { - match cmt.cat { - cat_local(id) | cat_arg(id) => { - self.mutbl_map.insert(id); - } - cat_stack_upvar(cmt) => { - self.add_to_mutbl_map(cmt); - } - _ => () - } - } - - fn bckerr_to_str(&self, err: bckerr) -> ~str { + fn bckerr_to_str(&self, err: BckError) -> ~str { match err.code { err_mutbl(lk) => { - fmt!("creating %s alias to %s", - self.loan_kind_to_str(lk), - self.cmt_to_str(err.cmt)) + fmt!("cannot borrow %s %s as %s", + err.cmt.mutbl.to_user_str(), + self.cmt_to_str(err.cmt), + self.mut_to_str(lk)) } - err_mut_uniq => { - ~"unique value in aliasable, mutable location" + err_out_of_root_scope(*) => { + fmt!("cannot root managed value long enough") } - err_mut_variant => { - ~"enum variant in aliasable, mutable location" + err_out_of_scope(*) => { + fmt!("borrowed value does not live long enough") } - err_root_not_permitted => { - // note: I don't expect users to ever see this error - // message, reasons are discussed in attempt_root() in - // preserve.rs. - ~"rooting is not permitted" + err_freeze_aliasable_const => { + // Means that the user borrowed a ~T or enum value + // residing in &const or @const pointer. Terrible + // error message, but then &const and @const are + // supposed to be going away. + fmt!("unsafe borrow of aliasable, const value") } - err_out_of_root_scope(*) => { - ~"cannot root managed value long enough" + } + } + + fn report_aliasability_violation(&self, + span: span, + kind: AliasableViolationKind, + cause: mc::AliasableReason) { + let prefix = match kind { + MutabilityViolation => "cannot assign to an `&mut`", + BorrowViolation => "cannot borrow an `&mut`" + }; + + match cause { + mc::AliasableOther => { + self.tcx.sess.span_err( + span, + fmt!("%s in an aliasable location", prefix)); } - err_out_of_scope(*) => { - ~"borrowed value does not live long enough" + mc::AliasableManaged(ast::m_mutbl) => { + // FIXME(#5074) we should prob do this borrow + self.tcx.sess.span_err( + span, + fmt!("%s in a `@mut` pointer; \ + try borrowing as `&mut` first", prefix)); + } + mc::AliasableManaged(m) => { + self.tcx.sess.span_err( + span, + fmt!("%s in a `@%s` pointer; \ + try an `@mut` instead", + prefix, + self.mut_to_keyword(m))); + } + mc::AliasableBorrowed(m) => { + self.tcx.sess.span_err( + span, + fmt!("%s in a `&%s` pointer; \ + try an `&mut` instead", + prefix, + self.mut_to_keyword(m))); } } } - fn note_and_explain_bckerr(&self, err: bckerr) { + fn note_and_explain_bckerr(&self, err: BckError) { let code = err.code; match code { - err_mutbl(*) | err_mut_uniq | err_mut_variant | - err_root_not_permitted => {} + err_mutbl(*) | err_freeze_aliasable_const(*) => {} err_out_of_root_scope(super_scope, sub_scope) => { note_and_explain_region( @@ -607,46 +568,140 @@ pub impl BorrowckCtxt { } } + fn append_loan_path_to_str_from_interior(&self, + loan_path: &LoanPath, + out: &mut ~str) { + match *loan_path { + LpExtend(_, _, LpDeref) => { + str::push_char(out, '('); + self.append_loan_path_to_str(loan_path, out); + str::push_char(out, ')'); + } + LpExtend(_, _, LpInterior(_)) | + LpVar(_) => { + self.append_loan_path_to_str(loan_path, out); + } + } + } + + fn append_loan_path_to_str(&self, loan_path: &LoanPath, out: &mut ~str) { + match *loan_path { + LpVar(id) => { + match self.tcx.items.find(&id) { + Some(&ast_map::node_local(ident)) => { + str::push_str(out, *self.tcx.sess.intr().get(ident)); + } + r => { + self.tcx.sess.bug( + fmt!("Loan path LpVar(%?) maps to %?, not local", + id, r)); + } + } + } - fn cmt_to_str(&self, cmt: cmt) -> ~str { - let mc = &mem_categorization_ctxt {tcx: self.tcx, - method_map: self.method_map}; - mc.cmt_to_str(cmt) + LpExtend(lp_base, _, LpInterior(mc::interior_field(fld, _))) => { + self.append_loan_path_to_str_from_interior(lp_base, out); + str::push_char(out, '.'); + str::push_str(out, *self.tcx.sess.intr().get(fld)); + } + + LpExtend(lp_base, _, LpInterior(mc::interior_index(*))) => { + self.append_loan_path_to_str_from_interior(lp_base, out); + str::push_str(out, "[]"); + } + + LpExtend(lp_base, _, LpInterior(mc::interior_tuple)) | + LpExtend(lp_base, _, LpInterior(mc::interior_anon_field)) | + LpExtend(lp_base, _, LpInterior(mc::interior_variant(_))) => { + self.append_loan_path_to_str_from_interior(lp_base, out); + str::push_str(out, ".(tuple)"); + } + + LpExtend(lp_base, _, LpDeref) => { + str::push_char(out, '*'); + self.append_loan_path_to_str(lp_base, out); + } + } + } + + fn loan_path_to_str(&self, loan_path: &LoanPath) -> ~str { + let mut result = ~""; + self.append_loan_path_to_str(loan_path, &mut result); + result } - fn cmt_to_repr(&self, cmt: cmt) -> ~str { - let mc = &mem_categorization_ctxt {tcx: self.tcx, - method_map: self.method_map}; - mc.cmt_to_repr(cmt) + fn cmt_to_str(&self, cmt: mc::cmt) -> ~str { + let mc = &mc::mem_categorization_ctxt {tcx: self.tcx, + method_map: self.method_map}; + mc.cmt_to_str(cmt) } fn mut_to_str(&self, mutbl: ast::mutability) -> ~str { - let mc = &mem_categorization_ctxt {tcx: self.tcx, - method_map: self.method_map}; + let mc = &mc::mem_categorization_ctxt {tcx: self.tcx, + method_map: self.method_map}; mc.mut_to_str(mutbl) } - fn loan_kind_to_str(&self, lk: LoanKind) -> ~str { - match lk { - TotalFreeze | PartialFreeze => ~"immutable", - TotalTake | PartialTake => ~"mutable", - Immobile => ~"read-only" + fn mut_to_keyword(&self, mutbl: ast::mutability) -> &'static str { + match mutbl { + ast::m_imm => "", + ast::m_const => "const", + ast::m_mutbl => "mut" } } +} + +impl DataFlowOperator for LoanDataFlowOperator { + #[inline(always)] + fn initial_value(&self) -> bool { + false // no loans in scope by default + } + + #[inline(always)] + fn join(&self, succ: uint, pred: uint) -> uint { + succ | pred // loans from both preds are in scope + } + + #[inline(always)] + fn walk_closures(&self) -> bool { + true + } +} - fn loan_to_repr(&self, loan: &Loan) -> ~str { - fmt!("Loan(lp=%?, cmt=%s, kind=%?)", - loan.lp, self.cmt_to_repr(loan.cmt), loan.kind) +impl Repr for Loan { + fn repr(&self, tcx: ty::ctxt) -> ~str { + fmt!("Loan_%?(%s, %?, %?-%?, %s)", + self.index, + self.loan_path.repr(tcx), + self.mutbl, + self.gen_scope, + self.kill_scope, + self.restrictions.repr(tcx)) } } -// The inherent mutability of a component is its default mutability -// assuming it is embedded in an immutable context. In general, the -// mutability can be "overridden" if the component is embedded in a -// mutable structure. -pub fn inherent_mutability(ck: comp_kind) -> mutability { - match ck { - comp_tuple | comp_anon_field | comp_variant(_) => m_imm, - comp_field(_, m) | comp_index(_, m) => m +impl Repr for Restriction { + fn repr(&self, tcx: ty::ctxt) -> ~str { + fmt!("Restriction(%s, %x)", + self.loan_path.repr(tcx), + self.set.bits as uint) + } +} + +impl Repr for LoanPath { + fn repr(&self, tcx: ty::ctxt) -> ~str { + match self { + &LpVar(id) => { + fmt!("$(%?)", id) + } + + &LpExtend(lp, _, LpDeref) => { + fmt!("%s.*", lp.repr(tcx)) + } + + &LpExtend(lp, _, LpInterior(ref interior)) => { + fmt!("%s.%s", lp.repr(tcx), interior.repr(tcx)) + } + } } } diff --git a/src/librustc/middle/borrowck/preserve.rs b/src/librustc/middle/borrowck/preserve.rs deleted file mode 100644 index c44920fffa568..0000000000000 --- a/src/librustc/middle/borrowck/preserve.rs +++ /dev/null @@ -1,409 +0,0 @@ -// Copyright 2012 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 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -// ---------------------------------------------------------------------- -// Preserve(Ex, S) holds if ToAddr(Ex) will remain valid for the entirety of -// the scope S. -// - -use middle::borrowck::{RootInfo, bckerr, bckerr_code, bckres, BorrowckCtxt}; -use middle::borrowck::{err_mut_uniq, err_mut_variant}; -use middle::borrowck::{err_out_of_root_scope, err_out_of_scope}; -use middle::borrowck::{err_root_not_permitted, root_map_key}; -use middle::mem_categorization::{cat_arg, cat_binding, cat_comp, cat_deref}; -use middle::mem_categorization::{cat_discr, cat_local, cat_self, cat_special}; -use middle::mem_categorization::{cat_stack_upvar, cmt, comp_field}; -use middle::mem_categorization::{comp_index, comp_variant, gc_ptr}; -use middle::mem_categorization::{region_ptr}; -use middle::ty; -use util::common::indenter; - -use syntax::ast; - -pub enum PreserveCondition { - PcOk, - PcIfPure(bckerr) -} - -pub impl PreserveCondition { - // combines two preservation conditions such that if either of - // them requires purity, the result requires purity - fn combine(&self, pc: PreserveCondition) -> PreserveCondition { - match *self { - PcOk => {pc} - PcIfPure(_) => {*self} - } - } -} - -pub impl BorrowckCtxt { - fn preserve(&self, - cmt: cmt, - scope_region: ty::Region, - item_ub: ast::node_id, - root_ub: ast::node_id) -> bckres - { - let ctxt = PreserveCtxt { - bccx: self, - scope_region: scope_region, - item_ub: item_ub, - root_ub: root_ub, - root_managed_data: true - }; - ctxt.preserve(cmt) - } -} - -struct PreserveCtxt<'self> { - bccx: &'self BorrowckCtxt, - - // the region scope for which we must preserve the memory - scope_region: ty::Region, - - // the scope for the body of the enclosing fn/method item - item_ub: ast::node_id, - - // the upper bound on how long we can root an @T pointer - root_ub: ast::node_id, - - // if false, do not attempt to root managed data - root_managed_data: bool -} - -pub impl<'self> PreserveCtxt<'self> { - fn tcx(&self) -> ty::ctxt { self.bccx.tcx } - - fn preserve(&self, cmt: cmt) -> bckres { - debug!("preserve(cmt=%s, root_ub=%?, root_managed_data=%b)", - self.bccx.cmt_to_repr(cmt), self.root_ub, - self.root_managed_data); - let _i = indenter(); - - match cmt.cat { - cat_special(sk_implicit_self) | - cat_special(sk_heap_upvar) => { - self.compare_scope(cmt, ty::re_scope(self.item_ub)) - } - cat_special(sk_static_item) | cat_special(sk_method) => { - Ok(PcOk) - } - cat_rvalue => { - // when we borrow an rvalue, we can keep it rooted but only - // up to the root_ub point - - // When we're in a 'const &x = ...' context, self.root_ub is - // zero and the rvalue is static, not bound to a scope. - let scope_region = if self.root_ub == 0 { - ty::re_static - } else { - // Maybe if we pass in the parent instead here, - // we can prevent the "scope not found" error - debug!("scope_region thing: %? ", cmt.id); - self.tcx().region_maps.encl_region(cmt.id) - }; - - self.compare_scope(cmt, scope_region) - } - cat_stack_upvar(cmt) => { - self.preserve(cmt) - } - cat_local(local_id) => { - // Normally, local variables are lendable, and so this - // case should never trigger. However, if we are - // preserving an expression like a.b where the field `b` - // has @ type, then it will recurse to ensure that the `a` - // is stable to try and avoid rooting the value `a.b`. In - // this case, root_managed_data will be false. - if self.root_managed_data { - self.tcx().sess.span_bug( - cmt.span, - ~"preserve() called with local and !root_managed_data"); - } - let local_region = self.tcx().region_maps.encl_region(local_id); - self.compare_scope(cmt, local_region) - } - cat_binding(local_id) => { - // Bindings are these kind of weird implicit pointers (cc - // #2329). We require (in gather_loans) that they be - // rooted in an immutable location. - let local_region = self.tcx().region_maps.encl_region(local_id); - self.compare_scope(cmt, local_region) - } - cat_arg(local_id) => { - // This can happen as not all args are lendable (e.g., && - // modes). In that case, the caller guarantees stability - // for at least the scope of the fn. This is basically a - // deref of a region ptr. - let local_region = self.tcx().region_maps.encl_region(local_id); - self.compare_scope(cmt, local_region) - } - cat_self(local_id) => { - let local_region = self.tcx().region_maps.encl_region(local_id); - self.compare_scope(cmt, local_region) - } - cat_comp(cmt_base, comp_field(*)) | - cat_comp(cmt_base, comp_index(*)) | - cat_comp(cmt_base, comp_tuple) | - cat_comp(cmt_base, comp_anon_field) => { - // Most embedded components: if the base is stable, the - // type never changes. - self.preserve(cmt_base) - } - cat_comp(cmt_base, comp_variant(enum_did)) => { - if ty::enum_is_univariant(self.tcx(), enum_did) { - self.preserve(cmt_base) - } else { - // If there are multiple variants: overwriting the - // base could cause the type of this memory to change, - // so require imm. - self.require_imm(cmt, cmt_base, err_mut_variant) - } - } - cat_deref(cmt_base, _, uniq_ptr) => { - // Overwriting the base could cause this memory to be - // freed, so require imm. - self.require_imm(cmt, cmt_base, err_mut_uniq) - } - cat_deref(_, _, region_ptr(_, region)) => { - // References are always "stable" for lifetime `region` by - // induction (when the reference of type &MT was created, - // the memory must have been stable). - self.compare_scope(cmt, region) - } - cat_deref(_, _, unsafe_ptr) => { - // Unsafe pointers are the user's problem - Ok(PcOk) - } - cat_deref(base, derefs, gc_ptr(*)) => { - // GC'd pointers of type @MT: if this pointer lives in - // immutable, stable memory, then everything is fine. But - // otherwise we have no guarantee the pointer will stay - // live, so we must root the pointer (i.e., inc the ref - // count) for the duration of the loan. - debug!("base.mutbl = %?", base.mutbl); - if cmt.cat.derefs_through_mutable_box() { - self.attempt_root(cmt, base, derefs) - } else if base.mutbl.is_immutable() { - let non_rooting_ctxt = PreserveCtxt { - root_managed_data: false, - ..*self - }; - match non_rooting_ctxt.preserve(base) { - Ok(PcOk) => { - Ok(PcOk) - } - Ok(PcIfPure(_)) => { - debug!("must root @T, otherwise purity req'd"); - self.attempt_root(cmt, base, derefs) - } - Err(ref e) => { - debug!("must root @T, err: %s", - self.bccx.bckerr_to_str((*e))); - self.attempt_root(cmt, base, derefs) - } - } - } else { - self.attempt_root(cmt, base, derefs) - } - } - cat_discr(base, match_id) => { - // Subtle: in a match, we must ensure that each binding - // variable remains valid for the duration of the arm in - // which it appears, presuming that this arm is taken. - // But it is inconvenient in trans to root something just - // for one arm. Therefore, we insert a cat_discr(), - // basically a special kind of category that says "if this - // value must be dynamically rooted, root it for the scope - // `match_id`. - // - // As an example, consider this scenario: - // - // let mut x = @Some(3); - // match *x { Some(y) {...} None {...} } - // - // Technically, the value `x` need only be rooted - // in the `some` arm. However, we evaluate `x` in trans - // before we know what arm will be taken, so we just - // always root it for the duration of the match. - // - // As a second example, consider *this* scenario: - // - // let x = @mut @Some(3); - // match x { @@Some(y) {...} @@None {...} } - // - // Here again, `x` need only be rooted in the `some` arm. - // In this case, the value which needs to be rooted is - // found only when checking which pattern matches: but - // this check is done before entering the arm. Therefore, - // even in this case we just choose to keep the value - // rooted for the entire match. This means the value will be - // rooted even if the none arm is taken. Oh well. - // - // At first, I tried to optimize the second case to only - // root in one arm, but the result was suboptimal: first, - // it interfered with the construction of phi nodes in the - // arm, as we were adding code to root values before the - // phi nodes were added. This could have been addressed - // with a second basic block. However, the naive approach - // also yielded suboptimal results for patterns like: - // - // let x = @mut @...; - // match x { @@some_variant(y) | @@some_other_variant(y) => - // - // The reason is that we would root the value once for - // each pattern and not once per arm. This is also easily - // fixed, but it's yet more code for what is really quite - // the corner case. - // - // Nonetheless, if you decide to optimize this case in the - // future, you need only adjust where the cat_discr() - // node appears to draw the line between what will be rooted - // in the *arm* vs the *match*. - - let match_rooting_ctxt = PreserveCtxt { - scope_region: ty::re_scope(match_id), - ..*self - }; - match_rooting_ctxt.preserve(base) - } - } - } - - /// Reqiures that `cmt` (which is a deref or subcomponent of - /// `base`) be found in an immutable location (that is, `base` - /// must be immutable). Also requires that `base` itself is - /// preserved. - fn require_imm(&self, - cmt: cmt, - cmt_base: cmt, - code: bckerr_code) -> bckres { - // Variant contents and unique pointers: must be immutably - // rooted to a preserved address. - match self.preserve(cmt_base) { - // the base is preserved, but if we are not mutable then - // purity is required - Ok(PcOk) => { - if !cmt_base.mutbl.is_immutable() { - Ok(PcIfPure(bckerr {cmt:cmt, code:code})) - } else { - Ok(PcOk) - } - } - - // the base requires purity too, that's fine - Ok(PcIfPure(ref e)) => { - Ok(PcIfPure((*e))) - } - - // base is not stable, doesn't matter - Err(ref e) => { - Err((*e)) - } - } - } - - /// Checks that the scope for which the value must be preserved - /// is a subscope of `scope_ub`; if so, success. - fn compare_scope(&self, - cmt: cmt, - scope_ub: ty::Region) -> bckres { - if self.bccx.is_subregion_of(self.scope_region, scope_ub) { - Ok(PcOk) - } else { - Err(bckerr { - cmt:cmt, - code:err_out_of_scope(scope_ub, self.scope_region) - }) - } - } - - /// Here, `cmt=*base` is always a deref of managed data (if - /// `derefs` != 0, then an auto-deref). This routine determines - /// whether it is safe to MAKE cmt stable by rooting the pointer - /// `base`. We can only do the dynamic root if the desired - /// lifetime `self.scope_region` is a subset of `self.root_ub` - /// scope; otherwise, it would either require that we hold the - /// value live for longer than the current fn or else potentially - /// require that an statically unbounded number of values be - /// rooted (if a loop exists). - fn attempt_root(&self, cmt: cmt, base: cmt, - derefs: uint) -> bckres { - if !self.root_managed_data { - // normally, there is a root_ub; the only time that this - // is none is when a boxed value is stored in an immutable - // location. In that case, we will test to see if that - // immutable location itself can be preserved long enough - // in which case no rooting is necessary. But there it - // would be sort of pointless to avoid rooting the inner - // box by rooting an outer box, as it would just keep more - // memory live than necessary, so we set root_ub to none. - return Err(bckerr { cmt: cmt, code: err_root_not_permitted }); - } - - let root_region = ty::re_scope(self.root_ub); - match self.scope_region { - // we can only root values if the desired region is some concrete - // scope within the fn body - ty::re_scope(scope_id) => { - debug!("Considering root map entry for %s: \ - node %d:%u -> scope_id %?, root_ub %?", - self.bccx.cmt_to_repr(cmt), base.id, - derefs, scope_id, self.root_ub); - if self.bccx.is_subregion_of(self.scope_region, root_region) { - debug!("Elected to root"); - let rk = root_map_key { id: base.id, derefs: derefs }; - // This code could potentially lead cause boxes to be frozen - // for longer than necessarily at runtime. It prevents an - // ICE in trans; the fundamental problem is that it's hard - // to make sure trans and borrowck have the same notion of - // scope. The real fix is to clean up how trans handles - // cleanups, but that's hard. If this becomes an issue, it's - // an option to just change this to `let scope_to_use = - // scope_id;`. Though that would potentially re-introduce - // the ICE. See #3511 for more details. - let scope_to_use = if - self.bccx.stmt_map.contains(&scope_id) { - // Root it in its parent scope, b/c - // trans won't introduce a new scope for the - // stmt - self.root_ub - } - else { - // Use the more precise scope - scope_id - }; - // We freeze if and only if this is a *mutable* @ box that - // we're borrowing into a pointer. - self.bccx.root_map.insert(rk, RootInfo { - scope: scope_to_use, - freezes: cmt.cat.derefs_through_mutable_box() - }); - return Ok(PcOk); - } else { - debug!("Unable to root"); - return Err(bckerr { - cmt: cmt, - code: err_out_of_root_scope(root_region, - self.scope_region) - }); - } - } - - // we won't be able to root long enough - _ => { - return Err(bckerr { - cmt:cmt, - code:err_out_of_root_scope(root_region, self.scope_region) - }); - } - - } - } -} diff --git a/src/librustc/middle/const_eval.rs b/src/librustc/middle/const_eval.rs index bba4d35b56046..dea08eedb61cf 100644 --- a/src/librustc/middle/const_eval.rs +++ b/src/librustc/middle/const_eval.rs @@ -185,9 +185,7 @@ pub fn lookup_const_by_id(tcx: ty::ctxt, } } else { let maps = astencode::Maps { - mutbl_map: @mut HashSet::new(), root_map: @mut HashMap::new(), - last_use_map: @mut HashMap::new(), method_map: @mut HashMap::new(), vtable_map: @mut HashMap::new(), write_guard_map: @mut HashSet::new(), diff --git a/src/librustc/middle/dataflow.rs b/src/librustc/middle/dataflow.rs new file mode 100644 index 0000000000000..cfdd7f95030aa --- /dev/null +++ b/src/librustc/middle/dataflow.rs @@ -0,0 +1,1009 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + + +/*! + * A module for propagating forward dataflow information. The analysis + * assumes that the items to be propagated can be represented as bits + * and thus uses bitvectors. Your job is simply to specify the so-called + * GEN and KILL bits for each expression. + */ + +use core::prelude::*; +use core::cast; +use core::uint; +use syntax::ast; +use syntax::ast_util; +use syntax::ast_util::id_range; +use syntax::print::{pp, pprust}; +use middle::ty; +use middle::typeck; +use util::ppaux::Repr; + +pub struct DataFlowContext { + priv tcx: ty::ctxt, + priv method_map: typeck::method_map, + + /// the data flow operator + priv oper: O, + + /// range of ids that appear within the item in question + priv id_range: id_range, + + /// number of bits to propagate per id + priv bits_per_id: uint, + + /// number of words we will use to store bits_per_id. + /// equal to bits_per_id/uint::bits rounded up. + priv words_per_id: uint, + + // Bit sets per id. The following three fields (`gens`, `kills`, + // and `on_entry`) all have the same structure. For each id in + // `id_range`, there is a range of words equal to `words_per_id`. + // So, to access the bits for any given id, you take a slice of + // the full vector (see the method `compute_id_range()`). + + /// bits generated as we exit the scope `id`. Updated by `add_gen()`. + priv gens: ~[uint], + + /// bits killed as we exit the scope `id`. Updated by `add_kill()`. + priv kills: ~[uint], + + /// bits that are valid on entry to the scope `id`. Updated by + /// `propagate()`. + priv on_entry: ~[uint] +} + +/// Parameterization for the precise form of data flow that is used. +pub trait DataFlowOperator { + /// Specifies the initial value for each bit in the `on_entry` set + fn initial_value(&self) -> bool; + + /// Joins two predecessor bits together, typically either `|` or `&` + fn join(&self, succ: uint, pred: uint) -> uint; + + /// True if we should propagate through closures + fn walk_closures(&self) -> bool; +} + +struct PropagationContext<'self, O> { + dfcx: &'self mut DataFlowContext, + changed: bool +} + +#[deriving(Eq)] +enum LoopKind { + /// A `while` or `loop` loop + TrueLoop, + + /// A `for` "loop" (i.e., really a func call where `break`, `return`, + /// and `loop` all essentially perform an early return from the closure) + ForLoop +} + +struct LoopScope<'self> { + loop_id: ast::node_id, + loop_kind: LoopKind, + break_bits: ~[uint] +} + +impl DataFlowContext { + pub fn new(tcx: ty::ctxt, + method_map: typeck::method_map, + oper: O, + id_range: id_range, + bits_per_id: uint) -> DataFlowContext { + let words_per_id = (bits_per_id + uint::bits - 1) / uint::bits; + + debug!("DataFlowContext::new(id_range=%?, bits_per_id=%?, words_per_id=%?)", + id_range, bits_per_id, words_per_id); + + let len = (id_range.max - id_range.min) as uint * words_per_id; + let gens = vec::from_elem(len, 0); + let kills = vec::from_elem(len, 0); + let elem = if oper.initial_value() {uint::max_value} else {0}; + let on_entry = vec::from_elem(len, elem); + + DataFlowContext { + tcx: tcx, + method_map: method_map, + words_per_id: words_per_id, + bits_per_id: bits_per_id, + oper: oper, + id_range: id_range, + gens: gens, + kills: kills, + on_entry: on_entry + } + } + + pub fn add_gen(&mut self, id: ast::node_id, bit: uint) { + //! Indicates that `id` generates `bit` + + debug!("add_gen(id=%?, bit=%?)", id, bit); + let (start, end) = self.compute_id_range(id); + { + let gens = vec::mut_slice(self.gens, start, end); + set_bit(gens, bit); + } + } + + pub fn add_kill(&mut self, id: ast::node_id, bit: uint) { + //! Indicates that `id` kills `bit` + + debug!("add_kill(id=%?, bit=%?)", id, bit); + let (start, end) = self.compute_id_range(id); + { + let kills = vec::mut_slice(self.kills, start, end); + set_bit(kills, bit); + } + } + + fn apply_gen_kill(&self, id: ast::node_id, bits: &mut [uint]) { + //! Applies the gen and kill sets for `id` to `bits` + + debug!("apply_gen_kill(id=%?, bits=%s) [before]", + id, mut_bits_to_str(bits)); + let (start, end) = self.compute_id_range(id); + let gens = self.gens.slice(start, end); + bitwise(bits, gens, |a, b| a | b); + let kills = self.kills.slice(start, end); + bitwise(bits, kills, |a, b| a & !b); + + debug!("apply_gen_kill(id=%?, bits=%s) [after]", + id, mut_bits_to_str(bits)); + } + + fn apply_kill(&self, id: ast::node_id, bits: &mut [uint]) { + debug!("apply_kill(id=%?, bits=%s) [before]", + id, mut_bits_to_str(bits)); + let (start, end) = self.compute_id_range(id); + let kills = self.kills.slice(start, end); + bitwise(bits, kills, |a, b| a & !b); + debug!("apply_kill(id=%?, bits=%s) [after]", + id, mut_bits_to_str(bits)); + } + + fn compute_id_range(&self, absolute_id: ast::node_id) -> (uint, uint) { + assert!(absolute_id >= self.id_range.min); + assert!(absolute_id < self.id_range.max); + + let relative_id = absolute_id - self.id_range.min; + let start = (relative_id as uint) * self.words_per_id; + let end = start + self.words_per_id; + (start, end) + } + + + pub fn each_bit_on_entry(&self, + id: ast::node_id, + f: &fn(uint) -> bool) { + //! Iterates through each bit that is set on entry to `id`. + //! Only useful after `propagate()` has been called. + + let (start, end) = self.compute_id_range(id); + let on_entry = vec::slice(self.on_entry, start, end); + debug!("each_bit_on_entry(id=%?, on_entry=%s)", + id, bits_to_str(on_entry)); + self.each_bit(on_entry, f); + } + + pub fn each_gen_bit(&self, + id: ast::node_id, + f: &fn(uint) -> bool) { + //! Iterates through each bit in the gen set for `id`. + + let (start, end) = self.compute_id_range(id); + let gens = vec::slice(self.gens, start, end); + debug!("each_gen_bit(id=%?, gens=%s)", + id, bits_to_str(gens)); + self.each_bit(gens, f) + } + + fn each_bit(&self, + words: &[uint], + f: &fn(uint) -> bool) { + //! Helper for iterating over the bits in a bit set. + + for words.eachi |word_index, &word| { + if word != 0 { + let base_index = word_index * uint::bits; + for uint::range(0, uint::bits) |offset| { + let bit = 1 << offset; + if (word & bit) != 0 { + // NB: we round up the total number of bits + // that we store in any given bit set so that + // it is an even multiple of uint::bits. This + // means that there may be some stray bits at + // the end that do not correspond to any + // actual value. So before we callback, check + // whether the bit_index is greater than the + // actual value the user specified and stop + // iterating if so. + let bit_index = base_index + offset; + if bit_index >= self.bits_per_id || !f(bit_index) { + return; + } + } + } + } + } + } +} + +impl DataFlowContext { +// ^^^^^^^^^^^^ only needed for pretty printing + pub fn propagate(&mut self, blk: &ast::blk) { + //! Performs the data flow analysis. + + if self.bits_per_id == 0 { + // Optimize the surprisingly common degenerate case. + return; + } + + let mut propcx = PropagationContext { + dfcx: self, + changed: true + }; + + let mut temp = vec::from_elem(self.words_per_id, 0); + let mut loop_scopes = ~[]; + + while propcx.changed { + propcx.changed = false; + propcx.reset(temp); + propcx.walk_block(blk, temp, &mut loop_scopes); + } + + debug!("Dataflow result:"); + debug!("%s", { + let this = @copy *self; + this.pretty_print_to(io::stderr(), blk); + "" + }); + } + + fn pretty_print_to(@self, wr: @io::Writer, blk: &ast::blk) { + let pre: @fn(pprust::ann_node) = |node| { + let (ps, id) = match node { + pprust::node_expr(ps, expr) => (ps, expr.id), + pprust::node_block(ps, blk) => (ps, blk.node.id), + pprust::node_item(ps, _) => (ps, 0), + pprust::node_pat(ps, pat) => (ps, pat.id) + }; + + if id >= self.id_range.min || id < self.id_range.max { + let (start, end) = self.compute_id_range(id); + let on_entry = vec::slice(self.on_entry, start, end); + let entry_str = bits_to_str(on_entry); + + let gens = vec::slice(self.gens, start, end); + let gens_str = if gens.any(|&u| u != 0) { + fmt!(" gen: %s", bits_to_str(gens)) + } else { + ~"" + }; + + let kills = vec::slice(self.kills, start, end); + let kills_str = if kills.any(|&u| u != 0) { + fmt!(" kill: %s", bits_to_str(kills)) + } else { + ~"" + }; + + let comment_str = fmt!("id %d: %s%s%s", + id, entry_str, gens_str, kills_str); + pprust::synth_comment(ps, comment_str); + pp::space(ps.s); + } + }; + + let post: @fn(pprust::ann_node) = |_| { + }; + + let ps = pprust::rust_printer_annotated( + wr, self.tcx.sess.intr(), + pprust::pp_ann {pre:pre, post:post}); + pprust::cbox(ps, pprust::indent_unit); + pprust::ibox(ps, 0u); + pprust::print_block(ps, blk); + pp::eof(ps.s); + } +} + +impl<'self, O:DataFlowOperator> PropagationContext<'self, O> { + fn tcx(&self) -> ty::ctxt { + self.dfcx.tcx + } + + fn walk_block(&mut self, + blk: &ast::blk, + in_out: &mut [uint], + loop_scopes: &mut ~[LoopScope]) { + debug!("DataFlowContext::walk_block(blk.node.id=%?, in_out=%s)", + blk.node.id, bits_to_str(reslice(in_out))); + + self.merge_with_entry_set(blk.node.id, in_out); + + for blk.node.stmts.each |&stmt| { + self.walk_stmt(stmt, in_out, loop_scopes); + } + + self.walk_opt_expr(blk.node.expr, in_out, loop_scopes); + + self.dfcx.apply_gen_kill(blk.node.id, in_out); + } + + fn walk_stmt(&mut self, + stmt: @ast::stmt, + in_out: &mut [uint], + loop_scopes: &mut ~[LoopScope]) { + match stmt.node { + ast::stmt_decl(decl, _) => { + self.walk_decl(decl, in_out, loop_scopes); + } + + ast::stmt_expr(expr, _) | ast::stmt_semi(expr, _) => { + self.walk_expr(expr, in_out, loop_scopes); + } + + ast::stmt_mac(*) => { + self.tcx().sess.span_bug(stmt.span, ~"unexpanded macro"); + } + } + } + + fn walk_decl(&mut self, + decl: @ast::decl, + in_out: &mut [uint], + loop_scopes: &mut ~[LoopScope]) { + match decl.node { + ast::decl_local(ref locals) => { + for locals.each |local| { + self.walk_pat(local.node.pat, in_out, loop_scopes); + self.walk_opt_expr(local.node.init, in_out, loop_scopes); + } + } + + ast::decl_item(_) => {} + } + } + + fn walk_expr(&mut self, + expr: @ast::expr, + in_out: &mut [uint], + loop_scopes: &mut ~[LoopScope]) { + debug!("DataFlowContext::walk_expr(expr=%s, in_out=%s)", + expr.repr(self.dfcx.tcx), bits_to_str(reslice(in_out))); + + self.merge_with_entry_set(expr.id, in_out); + + match expr.node { + ast::expr_fn_block(ref decl, ref body) => { + if self.dfcx.oper.walk_closures() { + // In the absence of once fns, we must assume that + // every function body will execute more than + // once. Thus we treat every function body like a + // loop. + // + // What is subtle and a bit tricky, also, is how + // to deal with the "output" bits---that is, what + // do we consider to be the successor of a + // function body, given that it could be called + // from any point within its lifetime? What we do + // is to add their effects immediately as of the + // point of creation. Of course we have to ensure + // that this is sound for the analyses which make + // use of dataflow. + // + // In the case of the initedness checker (which + // does not currently use dataflow, but I hope to + // convert at some point), we will simply not walk + // closures at all, so it's a moot point. + // + // In the case of the borrow checker, this means + // the loans which would be created by calling a + // function come into effect immediately when the + // function is created. This is guaranteed to be + // earlier than the point at which the loan + // actually comes into scope (which is the point + // at which the closure is *called*). Because + // loans persist until the scope of the loans is + // exited, it is always a safe approximation to + // have a loan begin earlier than it actually will + // at runtime, so this should be sound. + // + // We stil have to be careful in the region + // checker and borrow checker to treat function + // bodies like loops, which implies some + // limitations. For example, a closure cannot root + // a managed box for longer than its body. + // + // General control flow looks like this: + // + // +- (expr) <----------+ + // | | | + // | v | + // | (body) -----------+--> (exit) + // | | | + // | + (break/loop) -+ + // | | + // +--------------------+ + // + // This is a bit more conservative than a loop. + // Note that we must assume that even after a + // `break` occurs (e.g., in a `for` loop) that the + // closure may be reinvoked. + // + // One difference from other loops is that `loop` + // and `break` statements which target a closure + // both simply add to the `break_bits`. + + // func_bits represents the state when the function + // returns + let mut func_bits = reslice(in_out).to_vec(); + + loop_scopes.push(LoopScope { + loop_id: expr.id, + loop_kind: ForLoop, + break_bits: reslice(in_out).to_vec() + }); + for decl.inputs.each |input| { + self.walk_pat(input.pat, func_bits, loop_scopes); + } + self.walk_block(body, func_bits, loop_scopes); + + // add the bits from any early return via `break`, + // `continue`, or `return` into `func_bits` + let loop_scope = loop_scopes.pop(); + join_bits(&self.dfcx.oper, loop_scope.break_bits, func_bits); + + // add `func_bits` to the entry bits for `expr`, + // since we must assume the function may be called + // more than once + self.add_to_entry_set(expr.id, reslice(func_bits)); + + // the final exit bits include whatever was present + // in the original, joined with the bits from the function + join_bits(&self.dfcx.oper, func_bits, in_out); + } + } + + ast::expr_if(cond, ref then, els) => { + // + // (cond) + // | + // v + // ( ) + // / \ + // | | + // v v + // (then)(els) + // | | + // v v + // ( succ ) + // + self.walk_expr(cond, in_out, loop_scopes); + + let mut then_bits = reslice(in_out).to_vec(); + self.walk_block(then, then_bits, loop_scopes); + + self.walk_opt_expr(els, in_out, loop_scopes); + join_bits(&self.dfcx.oper, then_bits, in_out); + } + + ast::expr_while(cond, ref blk) => { + // + // (expr) <--+ + // | | + // v | + // +--(cond) | + // | | | + // | v | + // v (blk) ----+ + // | + // <--+ (break) + // + + self.walk_expr(cond, in_out, loop_scopes); + + let mut body_bits = reslice(in_out).to_vec(); + loop_scopes.push(LoopScope { + loop_id: expr.id, + loop_kind: TrueLoop, + break_bits: reslice(in_out).to_vec() + }); + self.walk_block(blk, body_bits, loop_scopes); + self.add_to_entry_set(expr.id, body_bits); + let new_loop_scope = loop_scopes.pop(); + copy_bits(new_loop_scope.break_bits, in_out); + } + + ast::expr_loop(ref blk, _) => { + // + // (expr) <--+ + // | | + // v | + // (blk) ----+ + // | + // <--+ (break) + // + + let mut body_bits = reslice(in_out).to_vec(); + self.reset(in_out); + loop_scopes.push(LoopScope { + loop_id: expr.id, + loop_kind: TrueLoop, + break_bits: reslice(in_out).to_vec() + }); + self.walk_block(blk, body_bits, loop_scopes); + self.add_to_entry_set(expr.id, body_bits); + + let new_loop_scope = loop_scopes.pop(); + assert_eq!(new_loop_scope.loop_id, expr.id); + copy_bits(new_loop_scope.break_bits, in_out); + } + + ast::expr_match(discr, ref arms) => { + // + // (discr) + // / | \ + // | | | + // v v v + // (..arms..) + // | | | + // v v v + // ( succ ) + // + // + self.walk_expr(discr, in_out, loop_scopes); + + let mut guards = reslice(in_out).to_vec(); + + // We know that exactly one arm will be taken, so we + // can start out with a blank slate and just union + // together the bits from each arm: + self.reset(in_out); + + for arms.each |arm| { + // in_out reflects the discr and all guards to date + self.walk_opt_expr(arm.guard, guards, loop_scopes); + + // determine the bits for the body and then union + // them into `in_out`, which reflects all bodies to date + let mut body = reslice(guards).to_vec(); + self.walk_pat_alternatives(arm.pats, body, loop_scopes); + self.walk_block(&arm.body, body, loop_scopes); + join_bits(&self.dfcx.oper, body, in_out); + } + } + + ast::expr_ret(o_e) => { + self.walk_opt_expr(o_e, in_out, loop_scopes); + + // is this a return from a `for`-loop closure? + match loop_scopes.position(|s| s.loop_kind == ForLoop) { + Some(i) => { + // if so, add the in_out bits to the state + // upon exit. Remember that we cannot count + // upon the `for` loop function not to invoke + // the closure again etc. + self.break_from_to(expr, &mut loop_scopes[i], in_out); + } + + None => {} + } + + self.reset(in_out); + } + + ast::expr_break(label) => { + let scope = self.find_scope(expr, label, loop_scopes); + self.break_from_to(expr, scope, in_out); + self.reset(in_out); + } + + ast::expr_again(label) => { + let scope = self.find_scope(expr, label, loop_scopes); + + match scope.loop_kind { + TrueLoop => { + self.pop_scopes(expr, scope, in_out); + self.add_to_entry_set(scope.loop_id, reslice(in_out)); + } + + ForLoop => { + // If this `loop` construct is looping back to a `for` + // loop, then `loop` is really just a return from the + // closure. Therefore, we treat it the same as `break`. + // See case for `expr_fn_block` for more details. + self.break_from_to(expr, scope, in_out); + } + } + + self.reset(in_out); + } + + ast::expr_assign(l, r) | + ast::expr_assign_op(_, l, r) => { + self.walk_expr(r, in_out, loop_scopes); + self.walk_expr(l, in_out, loop_scopes); + } + + ast::expr_swap(l, r) => { + self.walk_expr(l, in_out, loop_scopes); + self.walk_expr(r, in_out, loop_scopes); + } + + ast::expr_vec(ref exprs, _) => { + self.walk_exprs(*exprs, in_out, loop_scopes) + } + + ast::expr_repeat(l, r, _) => { + self.walk_expr(l, in_out, loop_scopes); + self.walk_expr(r, in_out, loop_scopes); + } + + ast::expr_struct(_, ref fields, with_expr) => { + self.walk_opt_expr(with_expr, in_out, loop_scopes); + for fields.each |field| { + self.walk_expr(field.node.expr, in_out, loop_scopes); + } + } + + ast::expr_call(f, ref args, _) => { + self.walk_call(expr.callee_id, expr.id, + f, *args, in_out, loop_scopes); + } + + ast::expr_method_call(rcvr, _, _, ref args, _) => { + self.walk_call(expr.callee_id, expr.id, + rcvr, *args, in_out, loop_scopes); + } + + ast::expr_index(l, r) | + ast::expr_binary(_, l, r) if self.is_method_call(expr) => { + self.walk_call(expr.callee_id, expr.id, + l, [r], in_out, loop_scopes); + } + + ast::expr_unary(_, e) if self.is_method_call(expr) => { + self.walk_call(expr.callee_id, expr.id, + e, [], in_out, loop_scopes); + } + + ast::expr_tup(ref exprs) => { + self.walk_exprs(*exprs, in_out, loop_scopes); + } + + ast::expr_binary(op, l, r) if ast_util::lazy_binop(op) => { + self.walk_expr(l, in_out, loop_scopes); + let temp = reslice(in_out).to_vec(); + self.walk_expr(r, in_out, loop_scopes); + join_bits(&self.dfcx.oper, temp, in_out); + } + + ast::expr_log(l, r) | + ast::expr_index(l, r) | + ast::expr_binary(_, l, r) => { + self.walk_exprs([l, r], in_out, loop_scopes); + } + + ast::expr_lit(*) | + ast::expr_path(*) => { + } + + ast::expr_addr_of(_, e) | + ast::expr_copy(e) | + ast::expr_loop_body(e) | + ast::expr_do_body(e) | + ast::expr_cast(e, _) | + ast::expr_unary(_, e) | + ast::expr_paren(e) | + ast::expr_vstore(e, _) | + ast::expr_field(e, _, _) => { + self.walk_expr(e, in_out, loop_scopes); + } + + ast::expr_inline_asm(ref inline_asm) => { + for inline_asm.inputs.each |&(_, expr)| { + self.walk_expr(expr, in_out, loop_scopes); + } + for inline_asm.outputs.each |&(_, expr)| { + self.walk_expr(expr, in_out, loop_scopes); + } + } + + ast::expr_block(ref blk) => { + self.walk_block(blk, in_out, loop_scopes); + } + + ast::expr_mac(*) => { + self.tcx().sess.span_bug(expr.span, ~"unexpanded macro"); + } + } + + self.dfcx.apply_gen_kill(expr.id, in_out); + } + + fn pop_scopes(&mut self, + from_expr: @ast::expr, + to_scope: &mut LoopScope, + in_out: &mut [uint]) { + //! Whenever you have a `break` or a `loop` statement, flow + //! exits through any number of enclosing scopes on its + //! way to the new destination. This function applies the kill + //! sets of those enclosing scopes to `in_out` (those kill sets + //! concern items that are going out of scope). + + let tcx = self.tcx(); + let region_maps = tcx.region_maps; + + debug!("pop_scopes(from_expr=%s, to_scope=%?, in_out=%s)", + from_expr.repr(tcx), to_scope.loop_id, + bits_to_str(reslice(in_out))); + + let mut id = from_expr.id; + while id != to_scope.loop_id { + self.dfcx.apply_kill(id, in_out); + + match region_maps.opt_encl_scope(id) { + Some(i) => { id = i; } + None => { + tcx.sess.span_bug( + from_expr.span, + fmt!("pop_scopes(from_expr=%s, to_scope=%?) \ + to_scope does not enclose from_expr", + from_expr.repr(tcx), to_scope.loop_id)); + } + } + } + } + + fn break_from_to(&mut self, + from_expr: @ast::expr, + to_scope: &mut LoopScope, + in_out: &mut [uint]) { + self.pop_scopes(from_expr, to_scope, in_out); + self.dfcx.apply_kill(from_expr.id, in_out); + join_bits(&self.dfcx.oper, reslice(in_out), to_scope.break_bits); + debug!("break_from_to(from_expr=%s, to_scope=%?) final break_bits=%s", + from_expr.repr(self.tcx()), + to_scope.loop_id, + bits_to_str(reslice(in_out))); + } + + fn walk_exprs(&mut self, + exprs: &[@ast::expr], + in_out: &mut [uint], + loop_scopes: &mut ~[LoopScope]) { + for exprs.each |&expr| { + self.walk_expr(expr, in_out, loop_scopes); + } + } + + fn walk_opt_expr(&mut self, + opt_expr: Option<@ast::expr>, + in_out: &mut [uint], + loop_scopes: &mut ~[LoopScope]) { + for opt_expr.each |&expr| { + self.walk_expr(expr, in_out, loop_scopes); + } + } + + fn walk_call(&mut self, + _callee_id: ast::node_id, + call_id: ast::node_id, + arg0: @ast::expr, + args: &[@ast::expr], + in_out: &mut [uint], + loop_scopes: &mut ~[LoopScope]) { + self.walk_expr(arg0, in_out, loop_scopes); + self.walk_exprs(args, in_out, loop_scopes); + + // FIXME(#5074) nested method calls + // self.merge_with_entry_set(callee_id, in_out); + // self.dfcx.apply_gen_kill(callee_id, in_out); + + let return_ty = ty::node_id_to_type(self.tcx(), call_id); + let fails = ty::type_is_bot(return_ty); + if fails { + self.reset(in_out); + } + } + + fn walk_pat(&mut self, + pat: @ast::pat, + in_out: &mut [uint], + _loop_scopes: &mut ~[LoopScope]) { + debug!("DataFlowContext::walk_pat(pat=%s, in_out=%s)", + pat.repr(self.dfcx.tcx), bits_to_str(reslice(in_out))); + + do ast_util::walk_pat(pat) |p| { + debug!(" p.id=%? in_out=%s", p.id, bits_to_str(reslice(in_out))); + self.merge_with_entry_set(p.id, in_out); + self.dfcx.apply_gen_kill(p.id, in_out); + } + } + + fn walk_pat_alternatives(&mut self, + pats: &[@ast::pat], + in_out: &mut [uint], + loop_scopes: &mut ~[LoopScope]) { + if pats.len() == 1 { + // Common special case: + return self.walk_pat(pats[0], in_out, loop_scopes); + } + + // In the general case, the patterns in `pats` are + // alternatives, so we must treat this like an N-way select + // statement. + let initial_state = reslice(in_out).to_vec(); + self.reset(in_out); + for pats.each |&pat| { + let mut temp = copy initial_state; + self.walk_pat(pat, in_out, loop_scopes); + join_bits(&self.dfcx.oper, temp, in_out); + } + } + + fn find_scope<'a>(&self, + expr: @ast::expr, + label: Option, + loop_scopes: &'a mut ~[LoopScope]) -> &'a mut LoopScope { + let index = match label { + None => { + let len = loop_scopes.len(); + len - 1 + } + + Some(_) => { + match self.tcx().def_map.find(&expr.id) { + Some(&ast::def_label(loop_id)) => { + match loop_scopes.position(|l| l.loop_id == loop_id) { + Some(i) => i, + None => { + self.tcx().sess.span_bug( + expr.span, + fmt!("No loop scope for id %?", loop_id)); + } + } + } + + r => { + self.tcx().sess.span_bug( + expr.span, + fmt!("Bad entry `%?` in def_map for label", r)); + } + } + } + }; + + &mut loop_scopes[index] + } + + fn is_method_call(&self, expr: @ast::expr) -> bool { + self.dfcx.method_map.contains_key(&expr.id) + } + + fn reset(&mut self, bits: &mut [uint]) { + let e = if self.dfcx.oper.initial_value() {uint::max_value} else {0}; + for vec::each_mut(bits) |b| { *b = e; } + } + + fn add_to_entry_set(&mut self, id: ast::node_id, pred_bits: &[uint]) { + debug!("add_to_entry_set(id=%?, pred_bits=%s)", + id, bits_to_str(pred_bits)); + let (start, end) = self.dfcx.compute_id_range(id); + let changed = { // FIXME(#5074) awkward construction + let on_entry = vec::mut_slice(self.dfcx.on_entry, start, end); + join_bits(&self.dfcx.oper, pred_bits, on_entry) + }; + if changed { + debug!("changed entry set for %? to %s", + id, bits_to_str(self.dfcx.on_entry.slice(start, end))); + self.changed = true; + } + } + + fn merge_with_entry_set(&mut self, + id: ast::node_id, + pred_bits: &mut [uint]) { + debug!("merge_with_entry_set(id=%?, pred_bits=%s)", + id, mut_bits_to_str(pred_bits)); + let (start, end) = self.dfcx.compute_id_range(id); + let changed = { // FIXME(#5074) awkward construction + let on_entry = vec::mut_slice(self.dfcx.on_entry, start, end); + let changed = join_bits(&self.dfcx.oper, reslice(pred_bits), on_entry); + copy_bits(reslice(on_entry), pred_bits); + changed + }; + if changed { + debug!("changed entry set for %? to %s", + id, bits_to_str(self.dfcx.on_entry.slice(start, end))); + self.changed = true; + } + } +} + +fn mut_bits_to_str(words: &mut [uint]) -> ~str { + bits_to_str(reslice(words)) +} + +fn bits_to_str(words: &[uint]) -> ~str { + let mut result = ~""; + let mut sep = '['; + + // Note: this is a little endian printout of bytes. + + for words.each |&word| { + let mut v = word; + for uint::range(0, uint::bytes) |_| { + str::push_char(&mut result, sep); + str::push_str(&mut result, fmt!("%02x", v & 0xFF)); + v >>= 8; + sep = '-'; + } + } + str::push_char(&mut result, ']'); + return result; +} + +fn copy_bits(in_vec: &[uint], out_vec: &mut [uint]) -> bool { + bitwise(out_vec, in_vec, |_, b| b) +} + +fn join_bits(oper: &O, + in_vec: &[uint], + out_vec: &mut [uint]) -> bool { + bitwise(out_vec, in_vec, |a, b| oper.join(a, b)) +} + +#[inline(always)] +fn bitwise(out_vec: &mut [uint], + in_vec: &[uint], + op: &fn(uint, uint) -> uint) -> bool { + assert_eq!(out_vec.len(), in_vec.len()); + let mut changed = false; + for uint::range(0, out_vec.len()) |i| { + let old_val = out_vec[i]; + let new_val = op(old_val, in_vec[i]); + out_vec[i] = new_val; + changed |= (old_val != new_val); + } + return changed; +} + +fn set_bit(words: &mut [uint], bit: uint) -> bool { + debug!("set_bit: words=%s bit=%s", + mut_bits_to_str(words), bit_str(bit)); + let word = bit / uint::bits; + let bit_in_word = bit % uint::bits; + let bit_mask = 1 << bit_in_word; + debug!("word=%u bit_in_word=%u bit_mask=%u", word, bit_in_word, word); + let oldv = words[word]; + let newv = oldv | bit_mask; + words[word] = newv; + oldv != newv +} + +fn bit_str(bit: uint) -> ~str { + let byte = bit >> 8; + let lobits = 1 << (bit & 0xFF); + fmt!("[%u:%u-%02x]", bit, byte, lobits) +} + +fn reslice<'a>(v: &'a mut [uint]) -> &'a [uint] { + // bFIXME(#5074) this function should not be necessary at all + unsafe { + cast::transmute(v) + } +} + diff --git a/src/librustc/middle/kind.rs b/src/librustc/middle/kind.rs index cf488b0ac8939..199eb274ab9e1 100644 --- a/src/librustc/middle/kind.rs +++ b/src/librustc/middle/kind.rs @@ -10,7 +10,6 @@ use middle::freevars::freevar_entry; use middle::freevars; -use middle::liveness; use middle::pat_util; use middle::ty; use middle::typeck; @@ -56,19 +55,16 @@ pub static try_adding: &'static str = "Try adding a move"; pub struct Context { tcx: ty::ctxt, method_map: typeck::method_map, - last_use_map: liveness::last_use_map, - current_item: node_id, + current_item: node_id } pub fn check_crate(tcx: ty::ctxt, method_map: typeck::method_map, - last_use_map: liveness::last_use_map, crate: @crate) { let ctx = Context { tcx: tcx, method_map: method_map, - last_use_map: last_use_map, - current_item: -1, + current_item: -1 }; let visit = visit::mk_vt(@visit::Visitor { visit_arm: check_arm, diff --git a/src/librustc/middle/lang_items.rs b/src/librustc/middle/lang_items.rs index 2de12b9eb9746..784db49a0fd62 100644 --- a/src/librustc/middle/lang_items.rs +++ b/src/librustc/middle/lang_items.rs @@ -252,10 +252,9 @@ pub impl LanguageItems { } } -fn LanguageItemCollector<'r>(crate: @crate, - session: Session, - items: &'r mut LanguageItems) - -> LanguageItemCollector<'r> { +fn LanguageItemCollector(crate: @crate, + session: Session) + -> LanguageItemCollector { let mut item_refs = HashMap::new(); item_refs.insert(@~"const", ConstTraitLangItem as uint); @@ -303,13 +302,13 @@ fn LanguageItemCollector<'r>(crate: @crate, LanguageItemCollector { crate: crate, session: session, - items: items, + items: LanguageItems::new(), item_refs: item_refs } } -struct LanguageItemCollector<'self> { - items: &'self mut LanguageItems, +struct LanguageItemCollector { + items: LanguageItems, crate: @crate, session: Session, @@ -317,8 +316,8 @@ struct LanguageItemCollector<'self> { item_refs: HashMap<@~str, uint>, } -pub impl<'self> LanguageItemCollector<'self> { - fn match_and_collect_meta_item(&self, item_def_id: def_id, +pub impl LanguageItemCollector { + fn match_and_collect_meta_item(&mut self, item_def_id: def_id, meta_item: @meta_item) { match meta_item.node { meta_name_value(key, literal) => { @@ -333,7 +332,7 @@ pub impl<'self> LanguageItemCollector<'self> { } } - fn collect_item(&self, item_index: uint, item_def_id: def_id) { + fn collect_item(&mut self, item_index: uint, item_def_id: def_id) { // Check for duplicates. match self.items.items[item_index] { Some(original_def_id) if original_def_id != item_def_id => { @@ -349,34 +348,37 @@ pub impl<'self> LanguageItemCollector<'self> { self.items.items[item_index] = Some(item_def_id); } - fn match_and_collect_item(&self, + fn match_and_collect_item(&mut self, item_def_id: def_id, key: @~str, value: @~str) { if *key != ~"lang" { return; // Didn't match. } - match self.item_refs.find(&value) { + let item_index = self.item_refs.find(&value).map(|x| **x); + // prevent borrow checker from considering ^~~~~~~~~~~ + // self to be borrowed (annoying) + + match item_index { + Some(item_index) => { + self.collect_item(item_index, item_def_id); + } None => { // Didn't match. - } - Some(&item_index) => { - self.collect_item(item_index, item_def_id) + return; } } } - fn collect_local_language_items(&self) { - unsafe { - let this: *LanguageItemCollector<'self> = transmute(self); - visit_crate(self.crate, (), mk_simple_visitor(@SimpleVisitor { - visit_item: |item| { - for item.attrs.each |attribute| { - unsafe { - (*this).match_and_collect_meta_item( - local_def(item.id), - attribute.node.value - ); - } + fn collect_local_language_items(&mut self) { + let this = ptr::addr_of(&self); + visit_crate(self.crate, (), mk_simple_visitor(@SimpleVisitor { + visit_item: |item| { + for item.attrs.each |attribute| { + unsafe { + (*this).match_and_collect_meta_item( + local_def(item.id), + attribute.node.value + ); } }, .. *default_simple_visitor() @@ -384,7 +386,7 @@ pub impl<'self> LanguageItemCollector<'self> { } } - fn collect_external_language_items(&self) { + fn collect_external_language_items(&mut self) { let crate_store = self.session.cstore; do iter_crate_data(crate_store) |crate_number, _crate_metadata| { for each_lang_item(crate_store, crate_number) @@ -408,7 +410,7 @@ pub impl<'self> LanguageItemCollector<'self> { } } - fn collect(&self) { + fn collect(&mut self) { self.collect_local_language_items(); self.collect_external_language_items(); self.check_completeness(); @@ -418,9 +420,9 @@ pub impl<'self> LanguageItemCollector<'self> { pub fn collect_language_items(crate: @crate, session: Session) -> LanguageItems { - let mut items = LanguageItems::new(); - let collector = LanguageItemCollector(crate, session, &mut items); + let mut collector = LanguageItemCollector(crate, session); collector.collect(); - copy items + let LanguageItemCollector { items, _ } = collector; + items } diff --git a/src/librustc/middle/liveness.rs b/src/librustc/middle/liveness.rs index 94d82d0acb8e4..2e2c92abcdc78 100644 --- a/src/librustc/middle/liveness.rs +++ b/src/librustc/middle/liveness.rs @@ -121,16 +121,6 @@ use syntax::visit::{fk_anon, fk_dtor, fk_fn_block, fk_item_fn, fk_method}; use syntax::visit::{vt}; use syntax::{visit, ast_util}; -// Maps from an expr id to a list of variable ids for which this expr -// is the last use. Typically, the expr is a path and the node id is -// the local/argument/etc that the path refers to. However, it also -// possible for the expr to be a closure, in which case the list is a -// list of closed over variables that can be moved into the closure. -// -// Very subtle (#2633): borrowck will remove entries from this table -// if it detects an outstanding loan (that is, the addr is taken). -pub type last_use_map = @mut HashMap; - #[deriving(Eq)] struct Variable(uint); #[deriving(Eq)] @@ -158,7 +148,7 @@ pub fn check_crate(tcx: ty::ctxt, method_map: typeck::method_map, variable_moves_map: moves::VariableMovesMap, capture_map: moves::CaptureMap, - crate: @crate) -> last_use_map { + crate: @crate) { let visitor = visit::mk_vt(@visit::Visitor { visit_fn: visit_fn, visit_local: visit_local, @@ -168,16 +158,13 @@ pub fn check_crate(tcx: ty::ctxt, .. *visit::default_visitor() }); - let last_use_map = @mut HashMap::new(); let initial_maps = @mut IrMaps(tcx, method_map, variable_moves_map, capture_map, - last_use_map, 0); visit::visit_crate(crate, initial_maps, visitor); tcx.sess.abort_if_errors(); - return last_use_map; } impl to_str::ToStr for LiveNode { @@ -241,23 +228,11 @@ enum VarKind { ImplicitRet } -fn relevant_def(def: def) -> Option { - match def { - def_binding(nid, _) | - def_arg(nid, _) | - def_local(nid, _) | - def_self(nid, _) => Some(nid), - - _ => None - } -} - struct IrMaps { tcx: ty::ctxt, method_map: typeck::method_map, variable_moves_map: moves::VariableMovesMap, capture_map: moves::CaptureMap, - last_use_map: last_use_map, num_live_nodes: uint, num_vars: uint, @@ -274,7 +249,6 @@ fn IrMaps(tcx: ty::ctxt, method_map: typeck::method_map, variable_moves_map: moves::VariableMovesMap, capture_map: moves::CaptureMap, - last_use_map: last_use_map, cur_item: node_id) -> IrMaps { IrMaps { @@ -282,7 +256,6 @@ fn IrMaps(tcx: ty::ctxt, method_map: method_map, variable_moves_map: variable_moves_map, capture_map: capture_map, - last_use_map: last_use_map, num_live_nodes: 0, num_vars: 0, live_node_map: HashMap::new(), @@ -367,29 +340,6 @@ pub impl IrMaps { fn lnk(&mut self, ln: LiveNode) -> LiveNodeKind { self.lnks[*ln] } - - fn add_last_use(&mut self, expr_id: node_id, var: Variable) { - let vk = self.var_kinds[*var]; - debug!("Node %d is a last use of variable %?", expr_id, vk); - match vk { - Arg(id, _) | - Local(LocalInfo { id: id, kind: FromLetNoInitializer, _ }) | - Local(LocalInfo { id: id, kind: FromLetWithInitializer, _ }) | - Local(LocalInfo { id: id, kind: FromMatch(_), _ }) => { - let v = match self.last_use_map.find(&expr_id) { - Some(&v) => v, - None => { - let v = @mut ~[]; - self.last_use_map.insert(expr_id, v); - v - } - }; - - v.push(id); - } - ImplicitRet => debug!("--but it is not owned"), - } - } } fn visit_item(item: @item, self: @mut IrMaps, v: vt<@mut IrMaps>) { @@ -413,7 +363,6 @@ fn visit_fn(fk: &visit::fn_kind, self.method_map, self.variable_moves_map, self.capture_map, - self.last_use_map, self.cur_item); unsafe { @@ -522,7 +471,7 @@ fn visit_expr(expr: @expr, self: @mut IrMaps, vt: vt<@mut IrMaps>) { expr_path(_) => { let def = *self.tcx.def_map.get(&expr.id); debug!("expr %d: path that leads to %?", expr.id, def); - if relevant_def(def).is_some() { + if moves::moved_variable_node_id_from_def(def).is_some() { self.add_live_node_for_node(expr.id, ExprNode(expr.span)); } visit::visit_expr(expr, self, vt); @@ -539,7 +488,7 @@ fn visit_expr(expr: @expr, self: @mut IrMaps, vt: vt<@mut IrMaps>) { let cvs = self.capture_map.get(&expr.id); let mut call_caps = ~[]; for cvs.each |cv| { - match relevant_def(cv.def) { + match moves::moved_variable_node_id_from_def(cv.def) { Some(rv) => { let cv_ln = self.add_live_node(FreeVarNode(cv.span)); let is_move = match cv.mode { @@ -668,7 +617,7 @@ pub impl Liveness { match expr.node { expr_path(_) => { let def = *self.tcx.def_map.get(&expr.id); - relevant_def(def).map( + moves::moved_variable_node_id_from_def(def).map( |rdef| self.variable(*rdef, expr.span) ) } @@ -684,7 +633,7 @@ pub impl Liveness { span: span) -> Option { match self.tcx.def_map.find(&node_id) { Some(&def) => { - relevant_def(def).map( + moves::moved_variable_node_id_from_def(def).map( |rdef| self.variable(*rdef, span) ) } @@ -1388,7 +1337,7 @@ pub impl Liveness { fn access_path(&self, expr: @expr, succ: LiveNode, acc: uint) -> LiveNode { let def = *self.tcx.def_map.get(&expr.id); - match relevant_def(def) { + match moves::moved_variable_node_id_from_def(def) { Some(nid) => { let ln = self.live_node(expr.id, expr.span); if acc != 0u { @@ -1521,7 +1470,6 @@ fn check_expr(expr: @expr, self: @Liveness, vt: vt<@Liveness>) { expr_path(_) => { for self.variable_from_def_map(expr.id, expr.span).each |var| { let ln = self.live_node(expr.id, expr.span); - self.consider_last_use(expr, ln, *var); match self.ir.variable_moves_map.find(&expr.id) { None => {} @@ -1540,7 +1488,6 @@ fn check_expr(expr: @expr, self: @Liveness, vt: vt<@Liveness>) { let caps = self.ir.captures(expr); for caps.each |cap| { let var = self.variable(cap.var_nid, expr.span); - self.consider_last_use(expr, cap.ln, var); if cap.is_move { self.check_move_from_var(cap.ln, var, expr); } @@ -1609,7 +1556,7 @@ enum ReadKind { } pub impl Liveness { - fn check_ret(@self, id: node_id, sp: span, _fk: &visit::fn_kind, + fn check_ret(&self, id: node_id, sp: span, _fk: &visit::fn_kind, entry_ln: LiveNode) { if self.live_on_entry(entry_ln, self.s.no_ret_var).is_some() { // if no_ret_var is live, then we fall off the end of the @@ -1629,11 +1576,11 @@ pub impl Liveness { } } - fn check_move_from_var(@self, ln: LiveNode, + fn check_move_from_var(&self, + ln: LiveNode, var: Variable, move_expr: @expr) { /*! - * * Checks whether `var` is live on entry to any of the * successors of `ln`. If it is, report an error. * `move_expr` is the expression which caused the variable @@ -1653,16 +1600,6 @@ pub impl Liveness { } } - fn consider_last_use(@self, expr: @expr, ln: LiveNode, var: Variable) { - debug!("consider_last_use(expr.id=%?, ln=%s, var=%s)", - expr.id, ln.to_str(), var.to_str()); - - match self.live_on_exit(ln, var) { - Some(_) => {} - None => self.ir.add_last_use(expr.id, var) - } - } - fn check_lvalue(@self, expr: @expr, vt: vt<@Liveness>) { match expr.node { expr_path(_) => { @@ -1679,7 +1616,7 @@ pub impl Liveness { self.warn_about_dead_assign(expr.span, expr.id, ln, var); } def => { - match relevant_def(def) { + match moves::moved_variable_node_id_from_def(def) { Some(nid) => { let ln = self.live_node(expr.id, expr.span); let var = self.variable(nid, expr.span); @@ -1699,14 +1636,14 @@ pub impl Liveness { } } - fn check_for_reassignments_in_pat(@self, pat: @pat, mutbl: bool) { + fn check_for_reassignments_in_pat(&self, pat: @pat, mutbl: bool) { do self.pat_bindings(pat) |ln, var, sp, id| { self.check_for_reassignment(ln, var, sp, if mutbl {Some(id)} else {None}); } } - fn check_for_reassignment(@self, ln: LiveNode, var: Variable, + fn check_for_reassignment(&self, ln: LiveNode, var: Variable, orig_span: span, mutbl: Option) { match self.assigned_on_exit(ln, var) { Some(ExprNode(span)) => { @@ -1731,7 +1668,7 @@ pub impl Liveness { } } - fn report_illegal_move(@self, lnk: LiveNodeKind, + fn report_illegal_move(&self, lnk: LiveNodeKind, var: Variable, move_expr: @expr) { // the only time that it is possible to have a moved variable @@ -1796,7 +1733,8 @@ pub impl Liveness { }; } - fn report_move_location(@self, move_expr: @expr, + fn report_move_location(&self, + move_expr: @expr, var: Variable, expr_descr: &str, pronoun: &str) { @@ -1810,7 +1748,8 @@ pub impl Liveness { ty_to_str(self.tcx, move_expr_ty))); } - fn report_illegal_read(@self, chk_span: span, + fn report_illegal_read(&self, + chk_span: span, lnk: LiveNodeKind, var: Variable, rk: ReadKind) { @@ -1841,12 +1780,12 @@ pub impl Liveness { } } - fn should_warn(@self, var: Variable) -> Option<@~str> { + fn should_warn(&self, var: Variable) -> Option<@~str> { let name = self.ir.variable_name(var); if name[0] == ('_' as u8) { None } else { Some(name) } } - fn warn_about_unused_args(@self, decl: &fn_decl, entry_ln: LiveNode) { + fn warn_about_unused_args(&self, decl: &fn_decl, entry_ln: LiveNode) { for decl.inputs.each |arg| { do pat_util::pat_bindings(self.tcx.def_map, arg.pat) |_bm, p_id, sp, _n| { @@ -1856,7 +1795,7 @@ pub impl Liveness { } } - fn warn_about_unused_or_dead_vars_in_pat(@self, pat: @pat) { + fn warn_about_unused_or_dead_vars_in_pat(&self, pat: @pat) { do self.pat_bindings(pat) |ln, var, sp, id| { if !self.warn_about_unused(sp, id, ln, var) { self.warn_about_dead_assign(sp, id, ln, var); @@ -1864,7 +1803,7 @@ pub impl Liveness { } } - fn warn_about_unused(@self, sp: span, id: node_id, + fn warn_about_unused(&self, sp: span, id: node_id, ln: LiveNode, var: Variable) -> bool { if !self.used_on_entry(ln, var) { for self.should_warn(var).each |name| { @@ -1894,7 +1833,7 @@ pub impl Liveness { return false; } - fn warn_about_dead_assign(@self, sp: span, id: node_id, + fn warn_about_dead_assign(&self, sp: span, id: node_id, ln: LiveNode, var: Variable) { if self.live_on_exit(ln, var).is_none() { for self.should_warn(var).each |name| { diff --git a/src/librustc/middle/mem_categorization.rs b/src/librustc/middle/mem_categorization.rs index 7fa198be1d47f..f525230664a21 100644 --- a/src/librustc/middle/mem_categorization.rs +++ b/src/librustc/middle/mem_categorization.rs @@ -48,7 +48,7 @@ use middle::ty; use middle::typeck; -use util::ppaux::{ty_to_str, region_to_str}; +use util::ppaux::{ty_to_str, region_to_str, Repr}; use util::common::indenter; use syntax::ast::{m_imm, m_const, m_mutbl}; @@ -58,50 +58,48 @@ use syntax::print::pprust; #[deriving(Eq)] pub enum categorization { - cat_rvalue, // result of eval'ing some misc expr - cat_special(special_kind), // - cat_local(ast::node_id), // local variable - cat_binding(ast::node_id), // pattern binding - cat_arg(ast::node_id), // formal argument - cat_stack_upvar(cmt), // upvar in stack closure - cat_deref(cmt, uint, ptr_kind), // deref of a ptr - cat_comp(cmt, comp_kind), // adjust to locate an internal component - cat_discr(cmt, ast::node_id), // match discriminant (see preserve()) - cat_self(ast::node_id), // explicit `self` + cat_rvalue, // result of eval'ing some misc expr + cat_static_item, + cat_implicit_self, + cat_copied_upvar(CopiedUpvar), // upvar copied into @fn or ~fn env + cat_stack_upvar(cmt), // by ref upvar from &fn + cat_local(ast::node_id), // local variable + cat_arg(ast::node_id, ast::rmode), // formal argument + cat_deref(cmt, uint, ptr_kind), // deref of a ptr + cat_interior(cmt, interior_kind), // something interior + cat_discr(cmt, ast::node_id), // match discriminant (see preserve()) + cat_self(ast::node_id), // explicit `self` +} + +#[deriving(Eq)] +struct CopiedUpvar { + upvar_id: ast::node_id, + onceness: ast::Onceness, } // different kinds of pointers: #[deriving(Eq)] pub enum ptr_kind { - uniq_ptr, + uniq_ptr(ast::mutability), gc_ptr(ast::mutability), region_ptr(ast::mutability, ty::Region), unsafe_ptr } -// I am coining the term "components" to mean "pieces of a data -// structure accessible without a dereference": +// We use the term "interior" to mean "something reachable from the +// base without a pointer dereference", e.g. a field #[deriving(Eq)] -pub enum comp_kind { - comp_tuple, // elt in a tuple - comp_anon_field, // anonymous field (in e.g. +pub enum interior_kind { + interior_tuple, // elt in a tuple + interior_anon_field, // anonymous field (in e.g. // struct Foo(int, int); - comp_variant(ast::def_id), // internals to a variant of given enum - comp_field(ast::ident, // name of field + interior_variant(ast::def_id), // internals to a variant of given enum + interior_field(ast::ident, // name of field ast::mutability), // declared mutability of field - comp_index(ty::t, // type of vec/str/etc being deref'd + interior_index(ty::t, // type of vec/str/etc being deref'd ast::mutability) // mutability of vec content } -// different kinds of expressions we might evaluate -#[deriving(Eq)] -pub enum special_kind { - sk_method, - sk_static_item, - sk_implicit_self, // old by-reference `self` - sk_heap_upvar -} - #[deriving(Eq)] pub enum MutabilityCategory { McImmutable, // Immutable. @@ -120,39 +118,29 @@ pub struct cmt_ { id: ast::node_id, // id of expr/pat producing this value span: span, // span of same expr/pat cat: categorization, // categorization of expr - lp: Option<@loan_path>, // loan path for expr, if any mutbl: MutabilityCategory, // mutability of expr as lvalue ty: ty::t // type of the expr } pub type cmt = @cmt_; -// a loan path is like a category, but it exists only when the data is -// interior to the stack frame. loan paths are used as the key to a -// map indicating what is borrowed at any point in time. -#[deriving(Eq)] -pub enum loan_path { - lp_local(ast::node_id), - lp_arg(ast::node_id), - lp_self, - lp_deref(@loan_path, ptr_kind), - lp_comp(@loan_path, comp_kind) -} - // We pun on *T to mean both actual deref of a ptr as well // as accessing of components: -pub enum deref_kind {deref_ptr(ptr_kind), deref_comp(comp_kind)} +pub enum deref_kind {deref_ptr(ptr_kind), deref_interior(interior_kind)} // Categorizes a derefable type. Note that we include vectors and strings as // derefable (we model an index as the combination of a deref and then a // pointer adjustment). pub fn opt_deref_kind(t: ty::t) -> Option { match ty::get(t).sty { - ty::ty_uniq(*) | + ty::ty_uniq(mt) => { + Some(deref_ptr(uniq_ptr(mt.mutbl))) + } + ty::ty_evec(_, ty::vstore_uniq) | ty::ty_estr(ty::vstore_uniq) | ty::ty_closure(ty::ClosureTy {sigil: ast::OwnedSigil, _}) => { - Some(deref_ptr(uniq_ptr)) + Some(deref_ptr(uniq_ptr(m_imm))) } ty::ty_rptr(r, mt) | @@ -181,19 +169,19 @@ pub fn opt_deref_kind(t: ty::t) -> Option { } ty::ty_enum(did, _) => { - Some(deref_comp(comp_variant(did))) + Some(deref_interior(interior_variant(did))) } ty::ty_struct(_, _) => { - Some(deref_comp(comp_anon_field)) + Some(deref_interior(interior_anon_field)) } ty::ty_evec(mt, ty::vstore_fixed(_)) => { - Some(deref_comp(comp_index(t, mt.mutbl))) + Some(deref_interior(interior_index(t, mt.mutbl))) } ty::ty_estr(ty::vstore_fixed(_)) => { - Some(deref_comp(comp_index(t, m_imm))) + Some(deref_interior(interior_index(t, m_imm))) } _ => None @@ -338,21 +326,11 @@ pub impl MutabilityCategory { } } - fn to_user_str(&self) -> ~str { + fn to_user_str(&self) -> &'static str { match *self { - McDeclared | McInherited => ~"mutable", - McImmutable => ~"immutable", - McReadOnly => ~"const" - } - } -} - -pub impl loan_path { - fn node_id(&self) -> Option { - match *self { - lp_local(id) | lp_arg(id) => Some(id), - lp_deref(lp, _) | lp_comp(lp, _) => lp.node_id(), - lp_self => None + McDeclared | McInherited => "mutable", + McImmutable => "immutable", + McReadOnly => "const" } } } @@ -419,9 +397,9 @@ pub impl mem_categorization_ctxt { } ast::expr_field(base, f_name, _) => { - if self.method_map.contains_key(&expr.id) { - return self.cat_method_ref(expr, expr_ty); - } + // Method calls are now a special syntactic form, + // so `a.b` should always be a field. + assert!(!self.method_map.contains_key(&expr.id)); let base_cmt = self.cat_expr(base); self.cat_field(expr, base_cmt, f_name, expr.id) @@ -475,8 +453,7 @@ pub impl mem_categorization_ctxt { @cmt_ { id:id, span:span, - cat:cat_special(sk_static_item), - lp:None, + cat:cat_static_item, mutbl: McImmutable, ty:expr_ty } @@ -487,66 +464,71 @@ pub impl mem_categorization_ctxt { // stuff as `&const` and `&mut`? // m: mutability of the argument - // lp: loan path, must be none for aliasable things let m = if mutbl {McDeclared} else {McImmutable}; - let lp = Some(@lp_arg(vid)); + let mode = ty::resolved_mode(self.tcx, mode); @cmt_ { - id:id, - span:span, - cat:cat_arg(vid), - lp:lp, + id: id, + span: span, + cat: cat_arg(vid, mode), mutbl: m, ty:expr_ty } } ast::def_self(self_id, is_implicit) => { - let cat, loan_path; - if is_implicit { - cat = cat_special(sk_implicit_self); - loan_path = None; + let cat = if is_implicit { + cat_implicit_self } else { - cat = cat_self(self_id); - loan_path = Some(@lp_self); + cat_self(self_id) }; @cmt_ { id:id, span:span, cat:cat, - lp:loan_path, mutbl: McImmutable, ty:expr_ty } } - ast::def_upvar(_, inner, fn_node_id, _) => { - let ty = ty::node_id_to_type(self.tcx, fn_node_id); - let sigil = ty::ty_closure_sigil(ty); - match sigil { - ast::BorrowedSigil => { - let upcmt = self.cat_def(id, span, expr_ty, *inner); - @cmt_ { - id:id, - span:span, - cat:cat_stack_upvar(upcmt), - lp:upcmt.lp, - mutbl:upcmt.mutbl, - ty:upcmt.ty - } - } - ast::OwnedSigil | ast::ManagedSigil => { - // FIXME #2152 allow mutation of moved upvars - @cmt_ { - id:id, - span:span, - cat:cat_special(sk_heap_upvar), - lp:None, - mutbl:McImmutable, - ty:expr_ty - } - } - } + ast::def_upvar(upvar_id, inner, fn_node_id, _) => { + let ty = ty::node_id_to_type(self.tcx, fn_node_id); + match ty::get(ty).sty { + ty::ty_closure(ref closure_ty) => { + let sigil = closure_ty.sigil; + match sigil { + ast::BorrowedSigil => { + let upvar_cmt = + self.cat_def(id, span, expr_ty, *inner); + @cmt_ { + id:id, + span:span, + cat:cat_stack_upvar(upvar_cmt), + mutbl:upvar_cmt.mutbl.inherit(), + ty:upvar_cmt.ty + } + } + ast::OwnedSigil | ast::ManagedSigil => { + // FIXME #2152 allow mutation of moved upvars + @cmt_ { + id:id, + span:span, + cat:cat_copied_upvar(CopiedUpvar { + upvar_id: upvar_id, + onceness: closure_ty.onceness}), + mutbl:McImmutable, + ty:expr_ty + } + } + } + } + _ => { + self.tcx.sess.span_bug( + span, + fmt!("Upvar of non-closure %? - %s", + fn_node_id, ty.repr(self.tcx))); + } + } } ast::def_local(vid, mutbl) => { @@ -555,7 +537,6 @@ pub impl mem_categorization_ctxt { id:id, span:span, cat:cat_local(vid), - lp:Some(@lp_local(vid)), mutbl:m, ty:expr_ty } @@ -567,7 +548,6 @@ pub impl mem_categorization_ctxt { id:id, span:span, cat:cat_local(vid), - lp:Some(@lp_local(vid)), mutbl:McImmutable, ty:expr_ty } @@ -582,8 +562,7 @@ pub impl mem_categorization_ctxt { @cmt_ { id: arg.id(), span: arg.span(), - cat: cat_comp(cmt, comp_variant(enum_did)), - lp: cmt.lp.map(|l| @lp_comp(*l, comp_variant(enum_did)) ), + cat: cat_interior(cmt, interior_variant(enum_did)), mutbl: cmt.mutbl.inherit(), ty: self.tcx.ty(arg) } @@ -594,7 +573,6 @@ pub impl mem_categorization_ctxt { id:elt.id(), span:elt.span(), cat:cat_rvalue, - lp:None, mutbl:McImmutable, ty:expr_ty } @@ -606,9 +584,9 @@ pub impl mem_categorization_ctxt { /// or if the container is mutable. fn inherited_mutability(&self, base_m: MutabilityCategory, - comp_m: ast::mutability) -> MutabilityCategory + interior_m: ast::mutability) -> MutabilityCategory { - match comp_m { + match interior_m { m_imm => base_m.inherit(), m_const => McReadOnly, m_mutbl => McDeclared @@ -634,13 +612,11 @@ pub impl mem_categorization_ctxt { } }; let m = self.inherited_mutability(base_cmt.mutbl, f_mutbl); - let f_comp = comp_field(f_name, f_mutbl); - let lp = base_cmt.lp.map(|lp| @lp_comp(*lp, f_comp) ); + let f_interior = interior_field(f_name, f_mutbl); @cmt_ { id: node.id(), span: node.span(), - cat: cat_comp(base_cmt, f_comp), - lp:lp, + cat: cat_interior(base_cmt, f_interior), mutbl: m, ty: self.tcx.ty(node) } @@ -688,25 +664,10 @@ pub impl mem_categorization_ctxt { { match deref_kind(self.tcx, base_cmt.ty) { deref_ptr(ptr) => { - let lp = do base_cmt.lp.chain_ref |l| { - // Given that the ptr itself is loanable, we can - // loan out deref'd uniq ptrs or mut ptrs as the data - // they are the only way to mutably reach the data they - // point at. Other ptr types admit mutable aliases and - // are therefore not loanable. - match ptr { - uniq_ptr => Some(@lp_deref(*l, ptr)), - region_ptr(ast::m_mutbl, _) => { - Some(@lp_deref(*l, ptr)) - } - gc_ptr(*) | region_ptr(_, _) | unsafe_ptr => None - } - }; - // for unique ptrs, we inherit mutability from the // owning reference. let m = match ptr { - uniq_ptr => { + uniq_ptr(*) => { self.inherited_mutability(base_cmt.mutbl, mt.mutbl) } gc_ptr(*) | region_ptr(_, _) | unsafe_ptr => { @@ -718,20 +679,17 @@ pub impl mem_categorization_ctxt { id:node.id(), span:node.span(), cat:cat_deref(base_cmt, deref_cnt, ptr), - lp:lp, mutbl:m, ty:mt.ty } } - deref_comp(comp) => { - let lp = base_cmt.lp.map(|l| @lp_comp(*l, comp) ); + deref_interior(interior) => { let m = self.inherited_mutability(base_cmt.mutbl, mt.mutbl); @cmt_ { id:node.id(), span:node.span(), - cat:cat_comp(base_cmt, comp), - lp:lp, + cat:cat_interior(base_cmt, interior), mutbl:m, ty:mt.ty } @@ -754,17 +712,10 @@ pub impl mem_categorization_ctxt { return match deref_kind(self.tcx, base_cmt.ty) { deref_ptr(ptr) => { - // (a) the contents are loanable if the base is loanable - // and this is a *unique* vector - let deref_lp = match ptr { - uniq_ptr => {base_cmt.lp.map(|lp| @lp_deref(*lp, uniq_ptr))} - _ => {None} - }; - - // (b) for unique ptrs, we inherit mutability from the + // for unique ptrs, we inherit mutability from the // owning reference. let m = match ptr { - uniq_ptr => { + uniq_ptr(*) => { self.inherited_mutability(base_cmt.mutbl, mt.mutbl) } gc_ptr(_) | region_ptr(_, _) | unsafe_ptr => { @@ -772,37 +723,34 @@ pub impl mem_categorization_ctxt { } }; - // (c) the deref is explicit in the resulting cmt + // the deref is explicit in the resulting cmt let deref_cmt = @cmt_ { id:elt.id(), span:elt.span(), cat:cat_deref(base_cmt, 0u, ptr), - lp:deref_lp, mutbl:m, ty:mt.ty }; - comp(elt, deref_cmt, base_cmt.ty, m, mt) + interior(elt, deref_cmt, base_cmt.ty, m, mt) } - deref_comp(_) => { + deref_interior(_) => { // fixed-length vectors have no deref let m = self.inherited_mutability(base_cmt.mutbl, mt.mutbl); - comp(elt, base_cmt, base_cmt.ty, m, mt) + interior(elt, base_cmt, base_cmt.ty, m, mt) } }; - fn comp(elt: N, of_cmt: cmt, - vect: ty::t, mutbl: MutabilityCategory, - mt: ty::mt) -> cmt + fn interior(elt: N, of_cmt: cmt, + vect: ty::t, mutbl: MutabilityCategory, + mt: ty::mt) -> cmt { - let comp = comp_index(vect, mt.mutbl); - let index_lp = of_cmt.lp.map(|lp| @lp_comp(*lp, comp) ); + let interior = interior_index(vect, mt.mutbl); @cmt_ { id:elt.id(), span:elt.span(), - cat:cat_comp(of_cmt, comp), - lp:index_lp, + cat:cat_interior(of_cmt, interior), mutbl:mutbl, ty:mt.ty } @@ -815,8 +763,7 @@ pub impl mem_categorization_ctxt { @cmt_ { id: elt.id(), span: elt.span(), - cat: cat_comp(cmt, comp_tuple), - lp: cmt.lp.map(|l| @lp_comp(*l, comp_tuple) ), + cat: cat_interior(cmt, interior_tuple), mutbl: cmt.mutbl.inherit(), ty: self.tcx.ty(elt) } @@ -828,26 +775,12 @@ pub impl mem_categorization_ctxt { @cmt_ { id: elt.id(), span: elt.span(), - cat: cat_comp(cmt, comp_anon_field), - lp: cmt.lp.map(|l| @lp_comp(*l, comp_anon_field)), + cat: cat_interior(cmt, interior_anon_field), mutbl: cmt.mutbl.inherit(), ty: self.tcx.ty(elt) } } - fn cat_method_ref(&self, - expr: @ast::expr, - expr_ty: ty::t) -> cmt { - @cmt_ { - id:expr.id, - span:expr.span, - cat:cat_special(sk_method), - lp:None, - mutbl:McImmutable, - ty:expr_ty - } - } - fn cat_pattern(&self, cmt: cmt, pat: @ast::pat, @@ -890,7 +823,7 @@ pub impl mem_categorization_ctxt { let tcx = self.tcx; debug!("cat_pattern: id=%d pat=%s cmt=%s", pat.id, pprust::pat_to_str(pat, tcx.sess.intr()), - self.cmt_to_repr(cmt)); + cmt.repr(tcx)); let _i = indenter(); op(cmt, pat); @@ -986,29 +919,6 @@ pub impl mem_categorization_ctxt { } } - fn cat_to_repr(&self, cat: categorization) -> ~str { - match cat { - cat_special(sk_method) => ~"method", - cat_special(sk_static_item) => ~"static_item", - cat_special(sk_implicit_self) => ~"implicit-self", - cat_special(sk_heap_upvar) => ~"heap-upvar", - cat_stack_upvar(_) => ~"stack-upvar", - cat_rvalue => ~"rvalue", - cat_local(node_id) => fmt!("local(%d)", node_id), - cat_binding(node_id) => fmt!("binding(%d)", node_id), - cat_arg(node_id) => fmt!("arg(%d)", node_id), - cat_self(node_id) => fmt!("self(%d)", node_id), - cat_deref(cmt, derefs, ptr) => { - fmt!("%s->(%s, %u)", self.cat_to_repr(cmt.cat), - self.ptr_sigil(ptr), derefs) - } - cat_comp(cmt, comp) => { - fmt!("%s.%s", self.cat_to_repr(cmt.cat), *self.comp_to_repr(comp)) - } - cat_discr(cmt, _) => self.cat_to_repr(cmt.cat) - } - } - fn mut_to_str(&self, mutbl: ast::mutability) -> ~str { match mutbl { m_mutbl => ~"mutable", @@ -1017,84 +927,33 @@ pub impl mem_categorization_ctxt { } } - fn ptr_sigil(&self, ptr: ptr_kind) -> ~str { - match ptr { - uniq_ptr => ~"~", - gc_ptr(_) => ~"@", - region_ptr(_, _) => ~"&", - unsafe_ptr => ~"*" - } - } - - fn comp_to_repr(&self, comp: comp_kind) -> @~str { - match comp { - comp_field(fld, _) => self.tcx.sess.str_of(fld), - comp_index(*) => @~"[]", - comp_tuple => @~"()", - comp_anon_field => @~"", - comp_variant(_) => @~"" - } - } - - fn lp_to_str(&self, lp: @loan_path) -> ~str { - match *lp { - lp_local(node_id) => { - fmt!("local(%d)", node_id) - } - lp_arg(node_id) => { - fmt!("arg(%d)", node_id) - } - lp_self => ~"self", - lp_deref(lp, ptr) => { - fmt!("%s->(%s)", self.lp_to_str(lp), - self.ptr_sigil(ptr)) - } - lp_comp(lp, comp) => { - fmt!("%s.%s", self.lp_to_str(lp), - *self.comp_to_repr(comp)) - } - } - } - - fn cmt_to_repr(&self, cmt: cmt) -> ~str { - fmt!("{%s id:%d m:%? lp:%s ty:%s}", - self.cat_to_repr(cmt.cat), - cmt.id, - cmt.mutbl, - cmt.lp.map_default(~"none", |p| self.lp_to_str(*p) ), - ty_to_str(self.tcx, cmt.ty)) - } - fn cmt_to_str(&self, cmt: cmt) -> ~str { - let mut_str = cmt.mutbl.to_user_str(); match cmt.cat { - cat_special(sk_method) => ~"method", - cat_special(sk_static_item) => ~"static item", - cat_special(sk_implicit_self) => ~"self reference", - cat_special(sk_heap_upvar) => { + cat_static_item => ~"static item", + cat_implicit_self => ~"self reference", + cat_copied_upvar(_) => { ~"captured outer variable in a heap closure" } cat_rvalue => ~"non-lvalue", - cat_local(_) => mut_str + ~" local variable", - cat_binding(_) => ~"pattern binding", + cat_local(_) => ~"local variable", cat_self(_) => ~"self value", - cat_arg(_) => ~"argument", - cat_deref(_, _, pk) => fmt!("dereference of %s %s pointer", - mut_str, self.ptr_sigil(pk)), - cat_stack_upvar(_) => { - ~"captured outer " + mut_str + ~" variable in a stack closure" - } - cat_comp(_, comp_field(*)) => mut_str + ~" field", - cat_comp(_, comp_tuple) => ~"tuple content", - cat_comp(_, comp_anon_field) => ~"anonymous field", - cat_comp(_, comp_variant(_)) => ~"enum content", - cat_comp(_, comp_index(t, _)) => { + cat_arg(*) => ~"argument", + cat_deref(_, _, pk) => fmt!("dereference of %s pointer", + ptr_sigil(pk)), + cat_interior(_, interior_field(*)) => ~"field", + cat_interior(_, interior_tuple) => ~"tuple content", + cat_interior(_, interior_anon_field) => ~"anonymous field", + cat_interior(_, interior_variant(_)) => ~"enum content", + cat_interior(_, interior_index(t, _)) => { match ty::get(t).sty { - ty::ty_evec(*) => mut_str + ~" vec content", - ty::ty_estr(*) => mut_str + ~" str content", - _ => mut_str + ~" indexed content" + ty::ty_evec(*) => ~"vec content", + ty::ty_estr(*) => ~"str content", + _ => ~"indexed content" } } + cat_stack_upvar(_) => { + ~"captured outer variable" + } cat_discr(cmt, _) => { self.cmt_to_str(cmt) } @@ -1149,33 +1008,142 @@ pub fn field_mutbl(tcx: ty::ctxt, return None; } -pub impl categorization { - fn derefs_through_mutable_box(&const self) -> bool { - match *self { - cat_deref(_, _, gc_ptr(ast::m_mutbl)) => { - true +pub enum AliasableReason { + AliasableManaged(ast::mutability), + AliasableBorrowed(ast::mutability), + AliasableOther +} + +pub impl cmt_ { + fn guarantor(@self) -> cmt { + //! Returns `self` after stripping away any owned pointer derefs or + //! interior content. The return value is basically the `cmt` which + //! determines how long the value in `self` remains live. + + match self.cat { + cat_rvalue | + cat_static_item | + cat_implicit_self | + cat_copied_upvar(*) | + cat_local(*) | + cat_self(*) | + cat_arg(*) | + cat_deref(_, _, unsafe_ptr(*)) | + cat_deref(_, _, gc_ptr(*)) | + cat_deref(_, _, region_ptr(*)) => { + self } - cat_deref(subcmt, _, _) | - cat_comp(subcmt, _) | - cat_discr(subcmt, _) | - cat_stack_upvar(subcmt) => { - subcmt.cat.derefs_through_mutable_box() + cat_stack_upvar(b) | + cat_discr(b, _) | + cat_interior(b, _) | + cat_deref(b, _, uniq_ptr(*)) => { + b.guarantor() } + } + } + + fn is_freely_aliasable(&self) -> bool { + self.freely_aliasable().is_some() + } + + fn freely_aliasable(&self) -> Option { + //! True if this lvalue resides in an area that is + //! freely aliasable, meaning that rustc cannot track + //! the alias//es with precision. + + // Maybe non-obvious: copied upvars can only be considered + // non-aliasable in once closures, since any other kind can be + // aliased and eventually recused. + + match self.cat { + cat_copied_upvar(CopiedUpvar {onceness: ast::Once, _}) | + cat_rvalue(*) | + cat_local(*) | + cat_arg(_, ast::by_copy) | + cat_self(*) | + cat_deref(_, _, unsafe_ptr(*)) | // of course it is aliasable, but... + cat_deref(_, _, region_ptr(m_mutbl, _)) => { + None + } + + cat_copied_upvar(CopiedUpvar {onceness: ast::Many, _}) | + cat_static_item(*) | + cat_implicit_self(*) | + cat_arg(_, ast::by_ref) => { + Some(AliasableOther) + } + + cat_deref(_, _, gc_ptr(m)) => { + Some(AliasableManaged(m)) + } + + cat_deref(_, _, region_ptr(m @ m_const, _)) | + cat_deref(_, _, region_ptr(m @ m_imm, _)) => { + Some(AliasableBorrowed(m)) + } + + cat_stack_upvar(b) | + cat_deref(b, _, uniq_ptr(*)) | + cat_interior(b, _) | + cat_discr(b, _) => { + b.freely_aliasable() + } + } + } +} + +impl Repr for cmt { + fn repr(&self, tcx: ty::ctxt) -> ~str { + fmt!("{%s id:%d m:%? ty:%s}", + self.cat.repr(tcx), + self.id, + self.mutbl, + self.ty.repr(tcx)) + } +} + +impl Repr for categorization { + fn repr(&self, tcx: ty::ctxt) -> ~str { + match *self { + cat_static_item | + cat_implicit_self | cat_rvalue | - cat_special(*) | + cat_copied_upvar(*) | cat_local(*) | - cat_binding(*) | - cat_arg(*) | - cat_self(*) => { - false + cat_self(*) | + cat_arg(*) => fmt!("%?", *self), + cat_deref(cmt, derefs, ptr) => { + fmt!("%s->(%s, %u)", cmt.cat.repr(tcx), + ptr_sigil(ptr), derefs) + } + cat_interior(cmt, interior) => { + fmt!("%s.%s", + cmt.cat.repr(tcx), + interior.repr(tcx)) } + cat_stack_upvar(cmt) | + cat_discr(cmt, _) => cmt.cat.repr(tcx) } } +} + +pub fn ptr_sigil(ptr: ptr_kind) -> ~str { + match ptr { + uniq_ptr(_) => ~"~", + gc_ptr(_) => ~"@", + region_ptr(_, _) => ~"&", + unsafe_ptr => ~"*" + } +} - fn is_mutable_box(&const self) -> bool { +impl Repr for interior_kind { + fn repr(&self, tcx: ty::ctxt) -> ~str { match *self { - cat_deref(_, _, gc_ptr(ast::m_mutbl)) => true, - _ => false + interior_field(fld, _) => copy *tcx.sess.str_of(fld), + interior_index(*) => ~"[]", + interior_tuple => ~"()", + interior_anon_field => ~"", + interior_variant(_) => ~"" } } } diff --git a/src/librustc/middle/moves.rs b/src/librustc/middle/moves.rs index fe1466bf808a3..d8a0e6bacf489 100644 --- a/src/librustc/middle/moves.rs +++ b/src/librustc/middle/moves.rs @@ -246,10 +246,19 @@ pub type MovesMap = @mut HashSet; * expression */ pub type VariableMovesMap = @mut HashMap; +/** + * Set of variable node-ids that are moved. + * + * Note: The `VariableMovesMap` stores expression ids that + * are moves, whereas this set stores the ids of the variables + * that are moved at some point */ +pub type MovedVariablesSet = @mut HashSet; + /** See the section Output on the module comment for explanation. */ pub struct MoveMaps { moves_map: MovesMap, variable_moves_map: VariableMovesMap, + moved_variables_set: MovedVariablesSet, capture_map: CaptureMap } @@ -279,13 +288,25 @@ pub fn compute_moves(tcx: ty::ctxt, move_maps: MoveMaps { moves_map: @mut HashSet::new(), variable_moves_map: @mut HashMap::new(), - capture_map: @mut HashMap::new() + capture_map: @mut HashMap::new(), + moved_variables_set: @mut HashSet::new() } }; visit::visit_crate(crate, visit_cx, visitor); return visit_cx.move_maps; } +pub fn moved_variable_node_id_from_def(def: def) -> Option { + match def { + def_binding(nid, _) | + def_arg(nid, _, _) | + def_local(nid, _) | + def_self(nid, _) => Some(nid), + + _ => None + } +} + // ______________________________________________________________________ // Expressions @@ -419,6 +440,11 @@ pub impl VisitContext { MoveInPart(entire_expr) => { self.move_maps.variable_moves_map.insert( expr.id, entire_expr); + + let def = *self.tcx.def_map.get(&expr.id); + for moved_variable_node_id_from_def(def).each |&id| { + self.move_maps.moved_variables_set.insert(id); + } } Read => {} MoveInWhole => { diff --git a/src/librustc/middle/region.rs b/src/librustc/middle/region.rs index f32998281711f..ea21ab0527b4d 100644 --- a/src/librustc/middle/region.rs +++ b/src/librustc/middle/region.rs @@ -47,59 +47,27 @@ The region maps encode information about region relationships. - the free region map is populated during type check as we check each function. See the function `relate_free_regions` for more information. +- `cleanup_scopes` includes scopes where trans cleanups occur + - this is intended to reflect the current state of trans, not + necessarily how I think things ought to work */ pub struct RegionMaps { priv scope_map: HashMap, priv free_region_map: HashMap, + priv cleanup_scopes: HashSet } -pub struct ctxt { +pub struct Context { sess: Session, def_map: resolve::DefMap, // Generated maps: region_maps: @mut RegionMaps, - // Generally speaking, expressions are parented to their innermost - // enclosing block. But some kinds of expressions serve as - // parents: calls, methods, etc. In addition, some expressions - // serve as parents by virtue of where they appear. For example, - // the condition in a while loop is always a parent. In those - // cases, we add the node id of such an expression to this set so - // that when we visit it we can view it as a parent. - root_exprs: @mut HashSet, - - // The parent scope is the innermost block, statement, call, or match - // expression during the execution of which the current expression - // will be evaluated. Generally speaking, the innermost parent - // scope is also the closest suitable ancestor in the AST tree. - // - // There is a subtle point concerning call arguments. Imagine - // you have a call: - // - // { // block a - // foo( // call b - // x, - // y); - // } - // - // In what lifetime are the expressions `x` and `y` evaluated? At - // first, I imagine the answer was the block `a`, as the arguments - // are evaluated before the call takes place. But this turns out - // to be wrong. The lifetime of the call must encompass the - // argument evaluation as well. - // - // The reason is that evaluation of an earlier argument could - // create a borrow which exists during the evaluation of later - // arguments. Consider this torture test, for example, - // - // fn test1(x: @mut ~int) { - // foo(&**x, *x = ~5); - // } - // - // Here, the first argument `&**x` will be a borrow of the `~int`, - // but the second argument overwrites that very value! Bad. - // (This test is borrowck-pure-scope-in-call.rs, btw) + // Scope where variables should be parented to + var_parent: parent, + + // Innermost enclosing expression parent: parent, } @@ -128,10 +96,22 @@ pub impl RegionMaps { sup: ast::node_id) { debug!("record_parent(sub=%?, sup=%?)", sub, sup); + assert!(sub != sup); self.scope_map.insert(sub, sup); } + pub fn record_cleanup_scope(&mut self, + scope_id: ast::node_id) + { + //! Records that a scope is a CLEANUP SCOPE. This is invoked + //! from within regionck. We wait until regionck because we do + //! not know which operators are overloaded until that point, + //! and only overloaded operators result in cleanup scopes. + + self.cleanup_scopes.insert(scope_id); + } + fn opt_encl_scope(&self, id: ast::node_id) -> Option { @@ -151,6 +131,22 @@ pub impl RegionMaps { } } + fn is_cleanup_scope(&self, scope_id: ast::node_id) -> bool { + self.cleanup_scopes.contains(&scope_id) + } + + fn cleanup_scope(&self, + expr_id: ast::node_id) -> ast::node_id + { + //! Returns the scope when temps in expr will be cleaned up + + let mut id = self.encl_scope(expr_id); + while !self.cleanup_scopes.contains(&id) { + id = self.encl_scope(id); + } + return id; + } + fn encl_region(&self, id: ast::node_id) -> ty::Region { @@ -159,22 +155,38 @@ pub impl RegionMaps { ty::re_scope(self.encl_scope(id)) } - fn is_sub_scope(&self, - sub_scope: ast::node_id, - superscope: ast::node_id) -> bool + pub fn scopes_intersect(&self, + scope1: ast::node_id, + scope2: ast::node_id) -> bool + { + self.is_subscope_of(scope1, scope2) || self.is_subscope_of(scope2, scope1) + } + + fn is_subscope_of(&self, + subscope: ast::node_id, + superscope: ast::node_id) -> bool { /*! - * Returns true if `sub_scope` is equal to or is lexically + * Returns true if `subscope` is equal to or is lexically * nested inside `superscope` and false otherwise. */ - let mut sub_scope = sub_scope; - while superscope != sub_scope { - match self.scope_map.find(&sub_scope) { - None => return false, - Some(&scope) => sub_scope = scope + let mut s = subscope; + while superscope != s { + match self.scope_map.find(&s) { + None => { + debug!("is_subscope_of(%?, %?, s=%?)=false", + subscope, superscope, s); + + return false; + } + Some(&scope) => s = scope } } + + debug!("is_subscope_of(%?, %?)=true", + subscope, superscope); + return true; } @@ -239,11 +251,11 @@ pub impl RegionMaps { } (ty::re_scope(sub_scope), ty::re_scope(super_scope)) => { - self.is_sub_scope(sub_scope, super_scope) + self.is_subscope_of(sub_scope, super_scope) } (ty::re_scope(sub_scope), ty::re_free(ref fr)) => { - self.is_sub_scope(sub_scope, fr.scope_id) + self.is_subscope_of(sub_scope, fr.scope_id) } (ty::re_free(sub_fr), ty::re_free(super_fr)) => { @@ -301,6 +313,7 @@ pub impl RegionMaps { fn ancestors_of(self: &RegionMaps, scope: ast::node_id) -> ~[ast::node_id] { + // debug!("ancestors_of(scope=%d)", scope); let mut result = ~[scope]; let mut scope = scope; loop { @@ -311,13 +324,14 @@ pub impl RegionMaps { scope = superscope; } } + // debug!("ancestors_of_loop(scope=%d)", scope); } } } } /// Extracts that current parent from cx, failing if there is none. -pub fn parent_id(cx: ctxt, span: span) -> ast::node_id { +pub fn parent_id(cx: Context, span: span) -> ast::node_id { match cx.parent { None => { cx.sess.span_bug(span, ~"crate should not be parent here"); @@ -329,144 +343,137 @@ pub fn parent_id(cx: ctxt, span: span) -> ast::node_id { } /// Records the current parent (if any) as the parent of `child_id`. -pub fn record_parent(cx: ctxt, child_id: ast::node_id) { +pub fn parent_to_expr(cx: Context, child_id: ast::node_id) { for cx.parent.each |parent_id| { cx.region_maps.record_parent(child_id, *parent_id); } } -pub fn resolve_block(blk: &ast::blk, cx: ctxt, visitor: visit::vt) { +pub fn resolve_block(blk: &ast::blk, cx: Context, visitor: visit::vt) { // Record the parent of this block. - record_parent(cx, blk.node.id); + parent_to_expr(cx, blk.node.id); // Descend. - let new_cx: ctxt = ctxt {parent: Some(blk.node.id),.. cx}; + let new_cx = Context {var_parent: Some(blk.node.id), + parent: Some(blk.node.id), + ..cx}; visit::visit_block(blk, new_cx, visitor); } -pub fn resolve_arm(arm: &ast::arm, cx: ctxt, visitor: visit::vt) { +pub fn resolve_arm(arm: &ast::arm, cx: Context, visitor: visit::vt) { visit::visit_arm(arm, cx, visitor); } -pub fn resolve_pat(pat: @ast::pat, cx: ctxt, visitor: visit::vt) { - match pat.node { - ast::pat_ident(*) => { - let defn_opt = cx.def_map.find(&pat.id); - match defn_opt { - Some(&ast::def_variant(_,_)) => { - /* Nothing to do; this names a variant. */ - } - _ => { - /* This names a local. Bind it to the containing scope. */ - record_parent(cx, pat.id); - } - } - } - _ => { /* no-op */ } - } - +pub fn resolve_pat(pat: @ast::pat, cx: Context, visitor: visit::vt) { + assert!(cx.var_parent == cx.parent); + parent_to_expr(cx, pat.id); visit::visit_pat(pat, cx, visitor); } -pub fn resolve_stmt(stmt: @ast::stmt, cx: ctxt, visitor: visit::vt) { +pub fn resolve_stmt(stmt: @ast::stmt, cx: Context, visitor: visit::vt) { match stmt.node { - ast::stmt_decl(*) => { - visit::visit_stmt(stmt, cx, visitor); - } - // This code has to be kept consistent with trans::base::trans_stmt - ast::stmt_expr(_, stmt_id) | - ast::stmt_semi(_, stmt_id) => { - record_parent(cx, stmt_id); - let mut expr_cx = cx; - expr_cx.parent = Some(stmt_id); - visit::visit_stmt(stmt, expr_cx, visitor); - } - ast::stmt_mac(*) => cx.sess.bug(~"unexpanded macro") + ast::stmt_decl(*) => { + visit::visit_stmt(stmt, cx, visitor); + } + ast::stmt_expr(_, stmt_id) | + ast::stmt_semi(_, stmt_id) => { + parent_to_expr(cx, stmt_id); + let expr_cx = Context {parent: Some(stmt_id), ..cx}; + visit::visit_stmt(stmt, expr_cx, visitor); + } + ast::stmt_mac(*) => cx.sess.bug(~"unexpanded macro") } } -pub fn resolve_expr(expr: @ast::expr, cx: ctxt, visitor: visit::vt) { - record_parent(cx, expr.id); +pub fn resolve_expr(expr: @ast::expr, cx: Context, visitor: visit::vt) { + parent_to_expr(cx, expr.id); let mut new_cx = cx; + new_cx.parent = Some(expr.id); match expr.node { - // Calls or overloadable operators - // FIXME #3387 - // ast::expr_index(*) | ast::expr_binary(*) | - // ast::expr_unary(*) | - ast::expr_call(*) | ast::expr_method_call(*) => { - debug!("node %d: %s", expr.id, pprust::expr_to_str(expr, - cx.sess.intr())); - new_cx.parent = Some(expr.id); - } - ast::expr_match(*) => { - debug!("node %d: %s", expr.id, pprust::expr_to_str(expr, - cx.sess.intr())); - new_cx.parent = Some(expr.id); - } - ast::expr_while(cond, _) => { - new_cx.root_exprs.insert(cond.id); - } - _ => {} + ast::expr_assign_op(*) | ast::expr_index(*) | ast::expr_binary(*) | + ast::expr_unary(*) | ast::expr_call(*) | ast::expr_method_call(*) => { + // FIXME(#5074) Nested method calls + // + // The lifetimes for a call or method call look as follows: + // + // call.id + // - arg0.id + // - ... + // - argN.id + // - call.callee_id + // + // The idea is that call.callee_id represents *the time when + // the invoked function is actually running* and call.id + // represents *the time to prepare the arguments and make the + // call*. See the section "Borrows in Calls" borrowck/doc.rs + // for an extended explanantion of why this distinction is + // important. + // + // parent_to_expr(new_cx, expr.callee_id); + } + + ast::expr_match(*) => { + new_cx.var_parent = Some(expr.id); + } + + _ => {} }; - if new_cx.root_exprs.contains(&expr.id) { - new_cx.parent = Some(expr.id); - } visit::visit_expr(expr, new_cx, visitor); } pub fn resolve_local(local: @ast::local, - cx: ctxt, - visitor: visit::vt) { - record_parent(cx, local.node.id); + cx: Context, + visitor: visit::vt) { + assert!(cx.var_parent == cx.parent); + parent_to_expr(cx, local.node.id); visit::visit_local(local, cx, visitor); } -pub fn resolve_item(item: @ast::item, cx: ctxt, visitor: visit::vt) { +pub fn resolve_item(item: @ast::item, cx: Context, visitor: visit::vt) { // Items create a new outer block scope as far as we're concerned. - let new_cx: ctxt = ctxt {parent: None,.. cx}; + let new_cx = Context {var_parent: None, parent: None, ..cx}; visit::visit_item(item, new_cx, visitor); } pub fn resolve_fn(fk: &visit::fn_kind, decl: &ast::fn_decl, body: &ast::blk, - sp: span, + _sp: span, id: ast::node_id, - cx: ctxt, - visitor: visit::vt) { - let fn_cx = match *fk { - visit::fk_item_fn(*) | visit::fk_method(*) | - visit::fk_dtor(*) => { - // Top-level functions are a root scope. - ctxt {parent: Some(id),.. cx} - } - - visit::fk_anon(*) | visit::fk_fn_block(*) => { - // Closures continue with the inherited scope. - cx - } - }; - - // Record the ID of `self`. + cx: Context, + visitor: visit::vt) { + debug!("region::resolve_fn(id=%?, body.node.id=%?, cx.parent=%?)", + id, body.node.id, cx.parent); + + // The arguments and `self` are parented to the body of the fn. + let decl_cx = Context {parent: Some(body.node.id), + var_parent: Some(body.node.id), + ..cx}; match *fk { visit::fk_method(_, _, method) => { cx.region_maps.record_parent(method.self_id, body.node.id); } _ => {} } + visit::visit_fn_decl(decl, decl_cx, visitor); - debug!("visiting fn with body %d. cx.parent: %? \ - fn_cx.parent: %?", - body.node.id, cx.parent, fn_cx.parent); - - for decl.inputs.each |input| { - cx.region_maps.record_parent(input.id, body.node.id); - } - - visit::visit_fn(fk, decl, body, sp, id, fn_cx, visitor); + // The body of the fn itself is either a root scope (top-level fn) + // or it continues with the inherited scope (closures). + let body_cx = match *fk { + visit::fk_item_fn(*) | + visit::fk_method(*) | + visit::fk_dtor(*) => { + Context {parent: None, var_parent: None, ..cx} + } + visit::fk_anon(*) | + visit::fk_fn_block(*) => { + cx + } + }; + (visitor.visit_block)(body, body_cx, visitor); } pub fn resolve_crate(sess: Session, @@ -475,13 +482,14 @@ pub fn resolve_crate(sess: Session, { let region_maps = @mut RegionMaps { scope_map: HashMap::new(), - free_region_map: HashMap::new() + free_region_map: HashMap::new(), + cleanup_scopes: HashSet::new(), }; - let cx: ctxt = ctxt {sess: sess, - def_map: def_map, - region_maps: region_maps, - root_exprs: @mut HashSet::new(), - parent: None}; + let cx = Context {sess: sess, + def_map: def_map, + region_maps: region_maps, + parent: None, + var_parent: None}; let visitor = visit::mk_vt(@visit::Visitor { visit_block: resolve_block, visit_item: resolve_item, @@ -772,7 +780,8 @@ pub fn determine_rp_in_ty(ty: @ast::Ty, pprust::ty_to_str(ty, sess.intr())); if cx.region_is_relevant(r) { - cx.add_rp(cx.item_id, cx.add_variance(rv_contravariant)) + let rv = cx.add_variance(rv_contravariant); + cx.add_rp(cx.item_id, rv) } } @@ -782,14 +791,14 @@ pub fn determine_rp_in_ty(ty: @ast::Ty, match f.region { Some(_) => { if cx.region_is_relevant(f.region) { - cx.add_rp(cx.item_id, - cx.add_variance(rv_contravariant)) + let rv = cx.add_variance(rv_contravariant); + cx.add_rp(cx.item_id, rv) } } None => { if f.sigil == ast::BorrowedSigil && cx.anon_implies_rp { - cx.add_rp(cx.item_id, - cx.add_variance(rv_contravariant)); + let rv = cx.add_variance(rv_contravariant); + cx.add_rp(cx.item_id, rv) } } } @@ -820,7 +829,8 @@ pub fn determine_rp_in_ty(ty: @ast::Ty, debug!("reference to external, rp'd type %s", pprust::ty_to_str(ty, sess.intr())); if cx.region_is_relevant(path.rp) { - cx.add_rp(cx.item_id, cx.add_variance(variance)) + let rv = cx.add_variance(variance); + cx.add_rp(cx.item_id, rv) } } } diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs index 294a21fac2c23..ffc9d1488cf13 100644 --- a/src/librustc/middle/resolve.rs +++ b/src/librustc/middle/resolve.rs @@ -971,7 +971,7 @@ pub impl Resolver { module_.children.insert(name, child); return (child, new_parent); } - Some(child) => { + Some(&child) => { // Enforce the duplicate checking mode: // // * If we're requesting duplicate module checking, check that @@ -1033,7 +1033,7 @@ pub impl Resolver { *self.session.str_of(name))); } } - return (*child, new_parent); + return (child, new_parent); } } } @@ -1864,7 +1864,7 @@ pub impl Resolver { *self.session.str_of(target)); match module_.import_resolutions.find(&target) { - Some(resolution) => { + Some(&resolution) => { debug!("(building import directive) bumping \ reference"); resolution.outstanding_references += 1; @@ -2395,7 +2395,7 @@ pub impl Resolver { (*ident, new_import_resolution); } None => { /* continue ... */ } - Some(dest_import_resolution) => { + Some(&dest_import_resolution) => { // Merge the two import resolutions at a finer-grained // level. @@ -2433,8 +2433,8 @@ pub impl Resolver { module_.import_resolutions.insert (*ident, dest_import_resolution); } - Some(existing_import_resolution) => { - dest_import_resolution = *existing_import_resolution; + Some(&existing_import_resolution) => { + dest_import_resolution = existing_import_resolution; } } diff --git a/src/librustc/middle/trans/_match.rs b/src/librustc/middle/trans/_match.rs index 3755cca8c35e9..785bb3edc07cd 100644 --- a/src/librustc/middle/trans/_match.rs +++ b/src/librustc/middle/trans/_match.rs @@ -1114,7 +1114,8 @@ pub fn compare_values(cx: block, pub fn store_non_ref_bindings(bcx: block, data: &ArmData, opt_temp_cleanups: Option<&mut ~[ValueRef]>) - -> block { + -> block +{ /*! * * For each copy/move binding, copy the value from the value @@ -1125,6 +1126,7 @@ pub fn store_non_ref_bindings(bcx: block, */ let mut bcx = bcx; + let mut opt_temp_cleanups = opt_temp_cleanups; for data.bindings_map.each_value |&binding_info| { match binding_info.trmode { TrByValue(is_move, lldest) => { @@ -1139,9 +1141,10 @@ pub fn store_non_ref_bindings(bcx: block, } }; - for opt_temp_cleanups.each |temp_cleanups| { + do opt_temp_cleanups.mutate |temp_cleanups| { add_clean_temp_mem(bcx, lldest, binding_info.ty); temp_cleanups.push(lldest); + temp_cleanups } } TrByRef | TrByImplicitRef => {} diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs index efa10dfc2aa34..7be6bdb654e1f 100644 --- a/src/librustc/middle/trans/base.rs +++ b/src/librustc/middle/trans/base.rs @@ -391,14 +391,16 @@ pub fn get_tydesc_simple(ccx: @CrateContext, t: ty::t) -> ValueRef { pub fn get_tydesc(ccx: @CrateContext, t: ty::t) -> @mut tydesc_info { match ccx.tydescs.find(&t) { - Some(&inf) => inf, - _ => { - ccx.stats.n_static_tydescs += 1u; - let inf = glue::declare_tydesc(ccx, t); - ccx.tydescs.insert(t, inf); - inf - } + Some(&inf) => { + return inf; + } + _ => { } } + + ccx.stats.n_static_tydescs += 1u; + let inf = glue::declare_tydesc(ccx, t); + ccx.tydescs.insert(t, inf); + return inf; } pub fn set_optimize_for_size(f: ValueRef) { @@ -888,18 +890,18 @@ pub fn need_invoke(bcx: block) -> bool { let current = &mut *cur; let kind = &mut *current.kind; match *kind { - block_scope(ref mut inf) => { - for vec::each((*inf).cleanups) |cleanup| { - match *cleanup { - clean(_, cleanup_type) | clean_temp(_, _, cleanup_type) => { - if cleanup_type == normal_exit_and_unwind { - return true; + block_scope(ref mut inf) => { + for vec::each((*inf).cleanups) |cleanup| { + match *cleanup { + clean(_, cleanup_type) | clean_temp(_, _, cleanup_type) => { + if cleanup_type == normal_exit_and_unwind { + return true; + } + } } - } } } - } - _ => () + _ => () } cur = match current.parent { Some(next) => next, @@ -1011,12 +1013,12 @@ pub fn add_root_cleanup(bcx: block, ty=%s)", bcx.to_str(), root_info.scope, - root_info.freezes, + root_info.freeze, val_str(bcx.ccx().tn, root_loc), ppaux::ty_to_str(bcx.ccx().tcx, ty)); let bcx_scope = find_bcx_for_scope(bcx, root_info.scope); - if root_info.freezes { + if root_info.freeze.is_some() { add_clean_frozen_root(bcx_scope, root_loc, ty); } else { add_clean_temp_mem(bcx_scope, root_loc, ty); @@ -1029,6 +1031,12 @@ pub fn add_root_cleanup(bcx: block, Some(NodeInfo { id, _ }) if id == scope_id => { return bcx_sid } + + // NOTE This is messier than it ought to be and not really right + Some(NodeInfo { callee_id: Some(id), _ }) if id == scope_id => { + return bcx_sid + } + _ => { match bcx_sid.parent { None => bcx.tcx().sess.bug( @@ -2484,37 +2492,40 @@ pub fn get_dtor_symbol(ccx: @CrateContext, id: ast::node_id, substs: Option<@param_substs>) -> ~str { - let t = ty::node_id_to_type(ccx.tcx, id); - match ccx.item_symbols.find(&id) { - Some(s) => (/*bad*/copy *s), - None if substs.is_none() => { - let s = mangle_exported_name( - ccx, - vec::append(path, ~[path_name((ccx.names)(~"dtor"))]), - t); - // XXX: Bad copy, use `@str`? - ccx.item_symbols.insert(id, copy s); - s - } - None => { - // Monomorphizing, so just make a symbol, don't add - // this to item_symbols - match substs { - Some(ss) => { - let mono_ty = ty::subst_tps(ccx.tcx, ss.tys, ss.self_ty, t); - mangle_exported_name( - ccx, - vec::append(path, - ~[path_name((ccx.names)(~"dtor"))]), - mono_ty) - } - None => { - ccx.sess.bug(fmt!("get_dtor_symbol: not monomorphizing and \ - couldn't find a symbol for dtor %?", path)); - } - } - } - } + let t = ty::node_id_to_type(ccx.tcx, id); + match ccx.item_symbols.find(&id) { + Some(s) => { + return /*bad*/copy *s; + } + None => { } + } + + return if substs.is_none() { + let s = mangle_exported_name( + ccx, + vec::append(path, ~[path_name((ccx.names)(~"dtor"))]), + t); + // XXX: Bad copy, use `@str`? + ccx.item_symbols.insert(id, copy s); + s + } else { + // Monomorphizing, so just make a symbol, don't add + // this to item_symbols + match substs { + Some(ss) => { + let mono_ty = ty::subst_tps(ccx.tcx, ss.tys, ss.self_ty, t); + mangle_exported_name( + ccx, + vec::append(path, + ~[path_name((ccx.names)(~"dtor"))]), + mono_ty) + } + None => { + ccx.sess.bug(fmt!("get_dtor_symbol: not monomorphizing and \ + couldn't find a symbol for dtor %?", path)); + } + } + }; } pub fn get_item_val(ccx: @CrateContext, id: ast::node_id) -> ValueRef { diff --git a/src/librustc/middle/trans/callee.rs b/src/librustc/middle/trans/callee.rs index ad0fea3b4b4af..af00257fe1603 100644 --- a/src/librustc/middle/trans/callee.rs +++ b/src/librustc/middle/trans/callee.rs @@ -39,7 +39,6 @@ use middle::trans::monomorphize; use middle::trans::type_of; use middle::ty; use middle::typeck; -use util::common::indenter; use util::ppaux::Repr; use syntax::ast; @@ -689,7 +688,6 @@ pub fn trans_arg_expr(bcx: block, self_mode, arg_expr.repr(bcx.tcx()), ret_flag.map(|v| bcx.val_str(*v))); - let _indenter = indenter(); // translate the arg expr to a datum let arg_datumblock = match ret_flag { diff --git a/src/librustc/middle/trans/common.rs b/src/librustc/middle/trans/common.rs index f8fb0f4b7cf31..2ebd696dbfdef 100644 --- a/src/librustc/middle/trans/common.rs +++ b/src/librustc/middle/trans/common.rs @@ -574,13 +574,17 @@ pub trait get_node_info { impl get_node_info for @ast::expr { fn info(&self) -> Option { - Some(NodeInfo { id: self.id, span: self.span }) + Some(NodeInfo {id: self.id, + callee_id: Some(self.callee_id), + span: self.span}) } } impl get_node_info for ast::blk { fn info(&self) -> Option { - Some(NodeInfo { id: self.node.id, span: self.span }) + Some(NodeInfo {id: self.node.id, + callee_id: None, + span: self.span}) } } @@ -592,6 +596,7 @@ impl get_node_info for Option<@ast::expr> { pub struct NodeInfo { id: ast::node_id, + callee_id: Option, span: span } diff --git a/src/librustc/middle/trans/consts.rs b/src/librustc/middle/trans/consts.rs index 25f34b8eaa9d1..3a331e8791ba2 100644 --- a/src/librustc/middle/trans/consts.rs +++ b/src/librustc/middle/trans/consts.rs @@ -195,18 +195,19 @@ pub fn const_expr(cx: @CrateContext, e: @ast::expr) -> ValueRef { match adj.autoref { None => { } Some(ref autoref) => { - assert!(autoref.region == ty::re_static); - assert!(autoref.mutbl != ast::m_mutbl); // Don't copy data to do a deref+ref. let llptr = match maybe_ptr { Some(ptr) => ptr, None => const_addr_of(cx, llconst) }; - match autoref.kind { - ty::AutoPtr => { + match *autoref { + ty::AutoUnsafe(m) | + ty::AutoPtr(ty::re_static, m) => { + assert!(m != ast::m_mutbl); llconst = llptr; } - ty::AutoBorrowVec => { + ty::AutoBorrowVec(ty::re_static, m) => { + assert!(m != ast::m_mutbl); let size = machine::llsize_of(cx, val_ty(llconst)); assert!(abi::slice_elt_base == 0); diff --git a/src/librustc/middle/trans/datum.rs b/src/librustc/middle/trans/datum.rs index fa27f652ac880..705d443b1155d 100644 --- a/src/librustc/middle/trans/datum.rs +++ b/src/librustc/middle/trans/datum.rs @@ -524,8 +524,8 @@ pub impl Datum { * case, we will call this function, which will stash a copy * away until we exit the scope `scope_id`. */ - debug!("root(scope_id=%?, freezes=%?, self=%?)", - root_info.scope, root_info.freezes, self.to_str(bcx.ccx())); + debug!("root(root_info=%?, self=%?)", + root_info, self.to_str(bcx.ccx())); if bcx.sess().trace() { trans_trace( @@ -539,7 +539,8 @@ pub impl Datum { add_root_cleanup(bcx, root_info, scratch.val, scratch.ty); // If we need to freeze the box, do that now. - if root_info.freezes { + if root_info.freeze.is_some() { + // NOTE distinguish the two kinds of freezing here callee::trans_lang_call( bcx, bcx.tcx().lang_items.borrow_as_imm_fn(), diff --git a/src/librustc/middle/trans/expr.rs b/src/librustc/middle/trans/expr.rs index f83562add3169..ac6fa7a5a1c4f 100644 --- a/src/librustc/middle/trans/expr.rs +++ b/src/librustc/middle/trans/expr.rs @@ -146,9 +146,9 @@ use middle::trans::type_of; use middle::ty; use middle::ty::struct_mutable_fields; use middle::ty::{AutoPtr, AutoBorrowVec, AutoBorrowVecRef, AutoBorrowFn, - AutoDerefRef, AutoAddEnv}; + AutoDerefRef, AutoAddEnv, AutoUnsafe}; use util::common::indenter; -use util::ppaux::ty_to_str; +use util::ppaux::Repr; use core::cast::transmute; use core::hashmap::HashMap; @@ -201,6 +201,8 @@ pub fn trans_to_datum(bcx: block, expr: @ast::expr) -> DatumBlock { trans_to_datum_unadjusted(bcx, expr) }); + debug!("unadjusted datum: %s", datum.to_str(bcx.ccx())); + if adj.autoderefs > 0 { let DatumBlock { bcx: new_bcx, datum: new_datum } = datum.autoderef(bcx, expr.id, adj.autoderefs); @@ -209,25 +211,24 @@ pub fn trans_to_datum(bcx: block, expr: @ast::expr) -> DatumBlock { } datum = match adj.autoref { - None => datum, - Some(ref autoref) => { - match autoref.kind { - AutoPtr => { - unpack_datum!(bcx, auto_ref(bcx, datum)) - } - AutoBorrowVec => { - unpack_datum!(bcx, auto_slice(bcx, datum)) - } - AutoBorrowVecRef => { - unpack_datum!(bcx, auto_slice_and_ref(bcx, datum)) - } - AutoBorrowFn => { - // currently, all closure types are - // represented precisely the same, so no - // runtime adjustment is required: - datum - } - } + None => { + datum + } + Some(AutoUnsafe(*)) | // region + unsafe ptrs have same repr + Some(AutoPtr(*)) => { + unpack_datum!(bcx, auto_ref(bcx, datum)) + } + Some(AutoBorrowVec(*)) => { + unpack_datum!(bcx, auto_slice(bcx, datum)) + } + Some(AutoBorrowVecRef(*)) => { + unpack_datum!(bcx, auto_slice_and_ref(bcx, datum)) + } + Some(AutoBorrowFn(*)) => { + // currently, all closure types are + // represented precisely the same, so no + // runtime adjustment is required: + datum } }; @@ -273,7 +274,7 @@ pub fn trans_to_datum(bcx: block, expr: @ast::expr) -> DatumBlock { let tcx = bcx.tcx(); let closure_ty = expr_ty_adjusted(bcx, expr); - debug!("add_env(closure_ty=%s)", ty_to_str(tcx, closure_ty)); + debug!("add_env(closure_ty=%s)", closure_ty.repr(tcx)); let scratch = scratch_datum(bcx, closure_ty, false); let llfn = GEPi(bcx, scratch.val, [0u, abi::fn_field_code]); assert!(datum.appropriate_mode() == ByValue); @@ -612,7 +613,7 @@ fn trans_rvalue_dps_unadjusted(bcx: block, expr: @ast::expr, let sigil = ty::ty_closure_sigil(expr_ty); debug!("translating fn_block %s with type %s", expr_to_str(expr, tcx.sess.intr()), - ty_to_str(tcx, expr_ty)); + expr_ty.repr(tcx)); return closure::trans_expr_fn(bcx, sigil, decl, body, expr.id, expr.id, None, dest); @@ -1088,6 +1089,9 @@ pub fn trans_local_var(bcx: block, def: ast::def) -> Datum { } }; + debug!("def_self() reference, self_info.t=%s", + self_info.t.repr(bcx.tcx())); + // This cast should not be necessary. We should cast self *once*, // but right now this conflicts with default methods. let real_self_ty = monomorphize_type(bcx, self_info.t); @@ -1151,7 +1155,7 @@ pub fn with_field_tys(tcx: ty::ctxt, tcx.sess.bug(fmt!( "cannot get field types from the enum type %s \ without a node ID", - ty_to_str(tcx, ty))); + ty.repr(tcx))); } Some(node_id) => { match *tcx.def_map.get(&node_id) { @@ -1173,7 +1177,7 @@ pub fn with_field_tys(tcx: ty::ctxt, _ => { tcx.sess.bug(fmt!( "cannot get field types from the type %s", - ty_to_str(tcx, ty))); + ty.repr(tcx))); } } } diff --git a/src/librustc/middle/trans/inline.rs b/src/librustc/middle/trans/inline.rs index 7a7f03c2273e1..40b7a444a3e97 100644 --- a/src/librustc/middle/trans/inline.rs +++ b/src/librustc/middle/trans/inline.rs @@ -29,26 +29,33 @@ pub fn maybe_instantiate_inline(ccx: @CrateContext, fn_id: ast::def_id, -> ast::def_id { let _icx = ccx.insn_ctxt("maybe_instantiate_inline"); match ccx.external.find(&fn_id) { - Some(&Some(node_id)) => { - // Already inline - debug!("maybe_instantiate_inline(%s): already inline as node id %d", - ty::item_path_str(ccx.tcx, fn_id), node_id); - local_def(node_id) - } - Some(&None) => fn_id, // Not inlinable - None => { // Not seen yet - match csearch::maybe_get_item_ast( + Some(&Some(node_id)) => { + // Already inline + debug!("maybe_instantiate_inline(%s): already inline as node id %d", + ty::item_path_str(ccx.tcx, fn_id), node_id); + return local_def(node_id); + } + Some(&None) => { + return fn_id; // Not inlinable + } + None => { + // Not seen yet + } + } + + let csearch_result = + csearch::maybe_get_item_ast( ccx.tcx, fn_id, |a,b,c,d| { astencode::decode_inlined_item(a, b, ccx.maps, /*bad*/ copy c, d) - }) { - - csearch::not_found => { + }); + return match csearch_result { + csearch::not_found => { ccx.external.insert(fn_id, None); fn_id - } - csearch::found(ast::ii_item(item)) => { + } + csearch::found(ast::ii_item(item)) => { ccx.external.insert(fn_id, Some(item.id)); ccx.stats.n_inlines += 1; if translate { trans_item(ccx, item); } @@ -122,8 +129,6 @@ pub fn maybe_instantiate_inline(ccx: @CrateContext, fn_id: ast::def_id, ccx.external.insert(fn_id, Some((*dtor).node.id)); local_def((*dtor).node.id) } - } - } - } + }; } diff --git a/src/librustc/middle/trans/meth.rs b/src/librustc/middle/trans/meth.rs index 90f9f93be2b48..86b087b937f25 100644 --- a/src/librustc/middle/trans/meth.rs +++ b/src/librustc/middle/trans/meth.rs @@ -44,6 +44,11 @@ pub fn trans_impl(ccx: @CrateContext, path: path, name: ast::ident, methods: &[@ast::method], generics: &ast::Generics, self_ty: Option, id: ast::node_id) { let _icx = ccx.insn_ctxt("impl::trans_impl"); + let tcx = ccx.tcx; + + debug!("trans_impl(path=%s, name=%s, self_ty=%s, id=%?)", + path.repr(tcx), name.repr(tcx), self_ty.repr(tcx), id); + if !generics.ty_params.is_empty() { return; } let sub_path = vec::append_one(path, path_name(name)); for vec::each(methods) |method| { diff --git a/src/librustc/middle/trans/monomorphize.rs b/src/librustc/middle/trans/monomorphize.rs index 72ad6dde4f17d..98db829370c0c 100644 --- a/src/librustc/middle/trans/monomorphize.rs +++ b/src/librustc/middle/trans/monomorphize.rs @@ -137,6 +137,9 @@ pub fn monomorphic_fn(ccx: @CrateContext, ast_map::node_local(*) => { ccx.tcx.sess.bug(~"Can't monomorphize a local") } + ast_map::node_callee_scope(*) => { + ccx.tcx.sess.bug(~"Can't monomorphize a callee-scope") + } ast_map::node_struct_ctor(_, i, pt) => (pt, i.ident, i.span) }; @@ -279,6 +282,7 @@ pub fn monomorphic_fn(ccx: @CrateContext, ast_map::node_trait_method(*) | ast_map::node_arg(*) | ast_map::node_block(*) | + ast_map::node_callee_scope(*) | ast_map::node_local(*) => { ccx.tcx.sess.bug(fmt!("Can't monomorphize a %?", map_node)) } diff --git a/src/librustc/middle/trans/reachable.rs b/src/librustc/middle/trans/reachable.rs index 3ccef0dbc4aca..a446408d00a10 100644 --- a/src/librustc/middle/trans/reachable.rs +++ b/src/librustc/middle/trans/reachable.rs @@ -42,19 +42,19 @@ pub fn find_reachable(crate_mod: &_mod, exp_map2: resolve::ExportMap2, tcx: ty::ctxt, method_map: typeck::method_map) -> map { let mut rmap = HashSet::new(); { - let cx = ctx { + let mut cx = @mut ctx { exp_map2: exp_map2, tcx: tcx, method_map: method_map, rmap: &mut rmap }; - traverse_public_mod(&cx, ast::crate_node_id, crate_mod); - traverse_all_resources_and_impls(&cx, crate_mod); + traverse_public_mod(cx, ast::crate_node_id, crate_mod); + traverse_all_resources_and_impls(cx, crate_mod); } return @rmap; } -fn traverse_exports(cx: &ctx, mod_id: node_id) -> bool { +fn traverse_exports(cx: @mut ctx, mod_id: node_id) -> bool { let mut found_export = false; match cx.exp_map2.find(&mod_id) { Some(ref exp2s) => { @@ -68,23 +68,25 @@ fn traverse_exports(cx: &ctx, mod_id: node_id) -> bool { return found_export; } -fn traverse_def_id(cx: &ctx, did: def_id) { +fn traverse_def_id(cx: @mut ctx, did: def_id) { if did.crate != local_crate { return; } match cx.tcx.items.find(&did.node) { None => (), // This can happen for self, for example Some(&ast_map::node_item(item, _)) => traverse_public_item(cx, item), Some(&ast_map::node_method(_, impl_id, _)) => traverse_def_id(cx, impl_id), Some(&ast_map::node_foreign_item(item, _, _, _)) => { + let cx = &mut *cx; // NOTE reborrow @mut cx.rmap.insert(item.id); } Some(&ast_map::node_variant(ref v, _, _)) => { + let cx = &mut *cx; // NOTE reborrow @mut cx.rmap.insert(v.node.id); } _ => () } } -fn traverse_public_mod(cx: &ctx, mod_id: node_id, m: &_mod) { +fn traverse_public_mod(cx: @mut ctx, mod_id: node_id, m: &_mod) { if !traverse_exports(cx, mod_id) { // No exports, so every local item is exported for m.items.each |item| { @@ -93,17 +95,21 @@ fn traverse_public_mod(cx: &ctx, mod_id: node_id, m: &_mod) { } } -fn traverse_public_item(cx: &ctx, item: @item) { - // FIXME #6021: naming rmap shouldn't be necessary - let rmap: &mut HashSet = cx.rmap; - if rmap.contains(&item.id) { return; } - rmap.insert(item.id); +fn traverse_public_item(cx: @mut ctx, item: @item) { + { + // FIXME #6021: naming rmap shouldn't be necessary + let cx = &mut *cx; + let rmap: &mut HashSet = cx.rmap; + if rmap.contains(&item.id) { return; } + rmap.insert(item.id); + } + match item.node { item_mod(ref m) => traverse_public_mod(cx, item.id, m), item_foreign_mod(ref nm) => { if !traverse_exports(cx, item.id) { for nm.items.each |item| { - cx.rmap.insert(item.id); + (&mut *cx).rmap.insert(item.id); // NOTE reborrow @mut } } } @@ -119,17 +125,17 @@ fn traverse_public_item(cx: &ctx, item: @item) { m.generics.ty_params.len() > 0u || attr::find_inline_attr(m.attrs) != attr::ia_none { - cx.rmap.insert(m.id); + (&mut *cx).rmap.insert(m.id); // NOTE reborrow @mut traverse_inline_body(cx, &m.body); } } } item_struct(ref struct_def, ref generics) => { for struct_def.ctor_id.each |&ctor_id| { - cx.rmap.insert(ctor_id); + (&mut *cx).rmap.insert(ctor_id); // NOTE reborrow @mut } for struct_def.dtor.each |dtor| { - cx.rmap.insert(dtor.node.id); + (&mut *cx).rmap.insert(dtor.node.id); if generics.ty_params.len() > 0u || attr::find_inline_attr(dtor.node.attrs) != attr::ia_none { @@ -148,11 +154,13 @@ fn traverse_public_item(cx: &ctx, item: @item) { } } -fn traverse_ty<'a, 'b>(ty: @Ty, cx: &'b ctx<'a>, v: visit::vt<&'b ctx<'a>>) { - // FIXME #6021: naming rmap shouldn't be necessary - let rmap: &mut HashSet = cx.rmap; - if rmap.contains(&ty.id) { return; } - rmap.insert(ty.id); +fn traverse_ty<'a>(ty: @Ty, cx: @mut ctx<'a>, v: visit::vt<@mut ctx<'a>>) { + { + // FIXME #6021: naming rmap shouldn't be necessary + let cx = &mut *cx; + if cx.rmap.contains(&ty.id) { return; } + cx.rmap.insert(ty.id); + } match ty.node { ty_path(p, p_id) => { @@ -171,9 +179,9 @@ fn traverse_ty<'a, 'b>(ty: @Ty, cx: &'b ctx<'a>, v: visit::vt<&'b ctx<'a>>) { } } -fn traverse_inline_body(cx: &ctx, body: &blk) { - fn traverse_expr<'a, 'b>(e: @expr, cx: &'b ctx<'a>, - v: visit::vt<&'b ctx<'a>>) { +fn traverse_inline_body(cx: @mut ctx, body: &blk) { + fn traverse_expr<'a>(e: @expr, cx: @mut ctx<'a>, + v: visit::vt<@mut ctx<'a>>) { match e.node { expr_path(_) => { match cx.tcx.def_map.find(&e.id) { @@ -218,7 +226,7 @@ fn traverse_inline_body(cx: &ctx, body: &blk) { // Don't ignore nested items: for example if a generic fn contains a // generic impl (as in deque::create), we need to monomorphize the // impl as well - fn traverse_item(i: @item, cx: &ctx, _v: visit::vt<&ctx>) { + fn traverse_item(i: @item, cx: @mut ctx, _v: visit::vt<@mut ctx>) { traverse_public_item(cx, i); } visit::visit_block(body, cx, visit::mk_vt(@visit::Visitor { @@ -228,7 +236,7 @@ fn traverse_inline_body(cx: &ctx, body: &blk) { })); } -fn traverse_all_resources_and_impls(cx: &ctx, crate_mod: &_mod) { +fn traverse_all_resources_and_impls(cx: @mut ctx, crate_mod: &_mod) { visit::visit_mod( crate_mod, codemap::dummy_sp(), diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index c7fb1e94adf4c..28705ac49320a 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -183,26 +183,21 @@ pub struct AutoDerefRef { #[auto_encode] #[auto_decode] -pub struct AutoRef { - kind: AutoRefKind, - region: Region, - mutbl: ast::mutability -} - -#[auto_encode] -#[auto_decode] -pub enum AutoRefKind { +pub enum AutoRef { /// Convert from T to &T - AutoPtr, + AutoPtr(Region, ast::mutability), /// Convert from @[]/~[]/&[] to &[] (or str) - AutoBorrowVec, + AutoBorrowVec(Region, ast::mutability), /// Convert from @[]/~[]/&[] to &&[] (or str) - AutoBorrowVecRef, + AutoBorrowVecRef(Region, ast::mutability), /// Convert from @fn()/~fn()/&fn() to &fn() - AutoBorrowFn + AutoBorrowFn(Region), + + /// Convert from T to *T + AutoUnsafe(ast::mutability) } // Stores information about provided methods (a.k.a. default methods) in @@ -432,11 +427,20 @@ pub enum Region { /// A concrete region naming some expression within the current function. re_scope(node_id), - /// Static data that has an "infinite" lifetime. + /// Static data that has an "infinite" lifetime. Top in the region lattice. re_static, /// A region variable. Should not exist after typeck. - re_infer(InferRegion) + re_infer(InferRegion), + + /// Empty lifetime is for data that is never accessed. + /// Bottom in the region lattice. We treat re_empty somewhat + /// specially; at least right now, we do not generate instances of + /// it during the GLB computations, but rather + /// generate an error instead. This is to improve error messages. + /// The only way to get an instance of re_empty is to have a region + /// variable with no constraints. + re_empty, } pub impl Region { @@ -2874,6 +2878,17 @@ pub fn ty_region(tcx: ctxt, } } +pub fn replace_fn_sig(cx: ctxt, fsty: &sty, new_sig: FnSig) -> t { + match *fsty { + ty_bare_fn(ref f) => mk_bare_fn(cx, BareFnTy {sig: new_sig, ..*f}), + ty_closure(ref f) => mk_closure(cx, ClosureTy {sig: new_sig, ..*f}), + ref s => { + cx.sess.bug( + fmt!("ty_fn_sig() called on non-fn type: %?", s)); + } + } +} + pub fn replace_closure_return_type(tcx: ctxt, fn_type: t, ret_type: t) -> t { /*! * @@ -2993,26 +3008,26 @@ pub fn adjust_ty(cx: ctxt, match adj.autoref { None => adjusted_ty, Some(ref autoref) => { - match autoref.kind { - AutoPtr => { - mk_rptr(cx, autoref.region, - mt {ty: adjusted_ty, - mutbl: autoref.mutbl}) + match *autoref { + AutoPtr(r, m) => { + mk_rptr(cx, r, mt {ty: adjusted_ty, mutbl: m}) } - AutoBorrowVec => { - borrow_vec(cx, span, autoref, adjusted_ty) + AutoBorrowVec(r, m) => { + borrow_vec(cx, span, r, m, adjusted_ty) } - AutoBorrowVecRef => { - adjusted_ty = borrow_vec(cx, span, autoref, - adjusted_ty); - mk_rptr(cx, autoref.region, - mt {ty: adjusted_ty, mutbl: ast::m_imm}) + AutoBorrowVecRef(r, m) => { + adjusted_ty = borrow_vec(cx, span, r, m, adjusted_ty); + mk_rptr(cx, r, mt {ty: adjusted_ty, mutbl: ast::m_imm}) } - AutoBorrowFn => { - borrow_fn(cx, span, autoref, adjusted_ty) + AutoBorrowFn(r) => { + borrow_fn(cx, span, r, adjusted_ty) + } + + AutoUnsafe(m) => { + mk_ptr(cx, mt {ty: adjusted_ty, mutbl: m}) } } } @@ -3021,15 +3036,15 @@ pub fn adjust_ty(cx: ctxt, }; fn borrow_vec(cx: ctxt, span: span, - autoref: &AutoRef, ty: ty::t) -> ty::t { + r: Region, m: ast::mutability, + ty: ty::t) -> ty::t { match get(ty).sty { ty_evec(mt, _) => { - ty::mk_evec(cx, mt {ty: mt.ty, mutbl: autoref.mutbl}, - vstore_slice(autoref.region)) + ty::mk_evec(cx, mt {ty: mt.ty, mutbl: m}, vstore_slice(r)) } ty_estr(_) => { - ty::mk_estr(cx, vstore_slice(autoref.region)) + ty::mk_estr(cx, vstore_slice(r)) } ref s => { @@ -3041,13 +3056,12 @@ pub fn adjust_ty(cx: ctxt, } } - fn borrow_fn(cx: ctxt, span: span, - autoref: &AutoRef, ty: ty::t) -> ty::t { + fn borrow_fn(cx: ctxt, span: span, r: Region, ty: ty::t) -> ty::t { match get(ty).sty { ty_closure(ref fty) => { ty::mk_closure(cx, ClosureTy { sigil: BorrowedSigil, - region: autoref.region, + region: r, ..copy *fty }) } @@ -3062,6 +3076,18 @@ pub fn adjust_ty(cx: ctxt, } } +pub impl AutoRef { + fn map_region(&self, f: &fn(Region) -> Region) -> AutoRef { + match *self { + ty::AutoPtr(r, m) => ty::AutoPtr(f(r), m), + ty::AutoBorrowVec(r, m) => ty::AutoBorrowVec(f(r), m), + ty::AutoBorrowVecRef(r, m) => ty::AutoBorrowVecRef(f(r), m), + ty::AutoBorrowFn(r) => ty::AutoBorrowFn(f(r)), + ty::AutoUnsafe(m) => ty::AutoUnsafe(m), + } + } +} + pub struct ParamsTy { params: ~[t], ty: t @@ -3986,7 +4012,7 @@ pub fn lookup_field_type(tcx: ctxt, } else { match tcx.tcache.find(&id) { - Some(tpt) => tpt.ty, + Some(&ty_param_bounds_and_ty {ty, _}) => ty, None => { let tpt = csearch::get_field_type(tcx, struct_id, id); tcx.tcache.insert(id, tpt); diff --git a/src/librustc/middle/typeck/check/_match.rs b/src/librustc/middle/typeck/check/_match.rs index 7f0066a1aa272..0c9b61164d231 100644 --- a/src/librustc/middle/typeck/check/_match.rs +++ b/src/librustc/middle/typeck/check/_match.rs @@ -118,8 +118,7 @@ pub fn check_pat_variant(pcx: &pat_ctxt, pat: @ast::pat, path: @ast::Path, // Assign the pattern the type of the *enum*, not the variant. let enum_tpt = ty::lookup_item_type(tcx, enm); - instantiate_path(pcx.fcx, path, enum_tpt, pat.span, pat.id, - pcx.block_region); + instantiate_path(pcx.fcx, path, enum_tpt, pat.span, pat.id); // check that the type of the value being matched is a subtype // of the type of the pattern: @@ -159,8 +158,7 @@ pub fn check_pat_variant(pcx: &pat_ctxt, pat: @ast::pat, path: @ast::Path, } else { ctor_tpt }; - instantiate_path(pcx.fcx, path, struct_tpt, pat.span, pat.id, - pcx.block_region); + instantiate_path(pcx.fcx, path, struct_tpt, pat.span, pat.id); // Check that the type of the value being matched is a subtype of // the type of the pattern. diff --git a/src/librustc/middle/typeck/check/method.rs b/src/librustc/middle/typeck/check/method.rs index fb5b53d9400fb..0cc2ddd32b46a 100644 --- a/src/librustc/middle/typeck/check/method.rs +++ b/src/librustc/middle/typeck/check/method.rs @@ -119,7 +119,8 @@ pub fn lookup( // In a call `a.b::(...)`: expr: @ast::expr, // The expression `a.b(...)`. self_expr: @ast::expr, // The expression `a`. - callee_id: node_id, // Where to store `a.b`'s type + callee_id: node_id, /* Where to store `a.b`'s type, + * also the scope of the call */ m_name: ast::ident, // The ident `b`. self_ty: ty::t, // The type of `a`. supplied_tps: &[ty::t], // The list of types X, Y, ... . @@ -127,7 +128,7 @@ pub fn lookup( check_traits: CheckTraitsFlag, // Whether we check traits only. autoderef_receiver: AutoderefReceiverFlag) -> Option { - let mut impl_dups = HashSet::new(); + let mut impl_dups = @mut HashSet::new(); let lcx = LookupContext { fcx: fcx, expr: expr, @@ -135,7 +136,7 @@ pub fn lookup( callee_id: callee_id, m_name: m_name, supplied_tps: supplied_tps, - impl_dups: &mut impl_dups, + impl_dups: impl_dups, inherent_candidates: @mut ~[], extension_candidates: @mut ~[], deref_args: deref_args, @@ -154,7 +155,7 @@ pub struct LookupContext<'self> { callee_id: node_id, m_name: ast::ident, supplied_tps: &'self [ty::t], - impl_dups: &'self mut HashSet, + impl_dups: @mut HashSet, inherent_candidates: @mut ~[Candidate], extension_candidates: @mut ~[Candidate], deref_args: check::DerefArgs, @@ -640,7 +641,7 @@ pub impl<'self> LookupContext<'self> { /*! * * In the event that we are invoking a method with a receiver - * of a linear borrowed type like `&mut T` or `&mut [T]`, + * of a borrowed type like `&T`, `&mut T`, or `&mut [T]`, * we will "reborrow" the receiver implicitly. For example, if * you have a call `r.inc()` and where `r` has type `&mut T`, * then we treat that like `(&mut *r).inc()`. This avoids @@ -657,26 +658,19 @@ pub impl<'self> LookupContext<'self> { let tcx = self.tcx(); return match ty::get(self_ty).sty { - ty::ty_rptr(_, self_mt) if self_mt.mutbl == m_mutbl => { - let region = self.infcx().next_region_var(self.expr.span, - self.expr.id); + ty::ty_rptr(_, self_mt) => { + let region = self.infcx().next_region_var_nb(self.expr.span); (ty::mk_rptr(tcx, region, self_mt), ty::AutoDerefRef(ty::AutoDerefRef { autoderefs: autoderefs+1, - autoref: Some(ty::AutoRef {kind: AutoPtr, - region: region, - mutbl: self_mt.mutbl})})) + autoref: Some(ty::AutoPtr(region, self_mt.mutbl))})) } - ty::ty_evec(self_mt, vstore_slice(_)) - if self_mt.mutbl == m_mutbl => { - let region = self.infcx().next_region_var(self.expr.span, - self.expr.id); + ty::ty_evec(self_mt, vstore_slice(_)) => { + let region = self.infcx().next_region_var_nb(self.expr.span); (ty::mk_evec(tcx, self_mt, vstore_slice(region)), ty::AutoDerefRef(ty::AutoDerefRef { - autoderefs: autoderefs, - autoref: Some(ty::AutoRef {kind: AutoBorrowVec, - region: region, - mutbl: self_mt.mutbl})})) + autoderefs: autoderefs, + autoref: Some(ty::AutoBorrowVec(region, self_mt.mutbl))})) } _ => { (self_ty, @@ -793,7 +787,7 @@ pub impl<'self> LookupContext<'self> { fn search_for_some_kind_of_autorefd_method( &self, - kind: AutoRefKind, + kind: &fn(Region, ast::mutability) -> ty::AutoRef, autoderefs: uint, mutbls: &[ast::mutability], mk_autoref_ty: &fn(ast::mutability, ty::Region) -> ty::t) @@ -801,8 +795,7 @@ pub impl<'self> LookupContext<'self> { { // This is hokey. We should have mutability inference as a // variable. But for now, try &const, then &, then &mut: - let region = self.infcx().next_region_var(self.expr.span, - self.expr.id); + let region = self.infcx().next_region_var_nb(self.expr.span); for mutbls.each |mutbl| { let autoref_ty = mk_autoref_ty(*mutbl, region); match self.search_for_method(autoref_ty) { @@ -812,12 +805,7 @@ pub impl<'self> LookupContext<'self> { self.self_expr.id, @ty::AutoDerefRef(ty::AutoDerefRef { autoderefs: autoderefs, - autoref: Some(ty::AutoRef { - kind: kind, - region: region, - mutbl: *mutbl, - }), - })); + autoref: Some(kind(region, *mutbl))})); return Some(mme); } } @@ -1024,8 +1012,7 @@ pub impl<'self> LookupContext<'self> { let (_, opt_transformed_self_ty, fn_sig) = replace_bound_regions_in_fn_sig( tcx, @Nil, Some(transformed_self_ty), &bare_fn_ty.sig, - |_br| self.fcx.infcx().next_region_var( - self.expr.span, self.expr.id)); + |_br| self.fcx.infcx().next_region_var_nb(self.expr.span)); let transformed_self_ty = opt_transformed_self_ty.get(); let fty = ty::mk_bare_fn(tcx, ty::BareFnTy {sig: fn_sig, ..bare_fn_ty}); debug!("after replacing bound regions, fty=%s", self.ty_to_str(fty)); diff --git a/src/librustc/middle/typeck/check/mod.rs b/src/librustc/middle/typeck/check/mod.rs index b9f3de873cf07..84fc40f6954a8 100644 --- a/src/librustc/middle/typeck/check/mod.rs +++ b/src/librustc/middle/typeck/check/mod.rs @@ -923,11 +923,9 @@ pub impl FnCtxt { fn region_var_if_parameterized(&self, rp: Option, - span: span, - lower_bound: ty::Region) + span: span) -> Option { - rp.map( - |_rp| self.infcx().next_region_var_with_lb(span, lower_bound)) + rp.map(|_rp| self.infcx().next_region_var_nb(span)) } fn type_error_message(&self, @@ -1108,8 +1106,7 @@ pub fn impl_self_ty(vcx: &VtableContext, }; let self_r = if region_param.is_some() { - Some(vcx.infcx.next_region_var(location_info.span, - location_info.id)) + Some(vcx.infcx.next_region_var_nb(location_info.span)) } else { None }; @@ -1317,9 +1314,18 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt, // that they appear in call position. check_expr(fcx, f); + // Store the type of `f` as the type of the callee + let fn_ty = fcx.expr_ty(f); + + // NOTE here we write the callee type before regions have been + // substituted; in the method case, we write the type after + // regions have been substituted. Methods are correct, but it + // is awkward to deal with this now. Best thing would I think + // be to just have a separate "callee table" that contains the + // FnSig and not a general purpose ty::t + fcx.write_ty(call_expr.callee_id, fn_ty); // Extract the function signature from `in_fty`. - let fn_ty = fcx.expr_ty(f); let fn_sty = structure_of(fcx, f.span, fn_ty); // FIXME(#3678) For now, do not permit calls to C abi functions. @@ -1356,7 +1362,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt, let (_, _, fn_sig) = replace_bound_regions_in_fn_sig( fcx.tcx(), @Nil, None, &fn_sig, - |_br| fcx.infcx().next_region_var(call_expr.span, call_expr.id)); + |_br| fcx.infcx().next_region_var_nb(call_expr.span)); // Call the generic checker. check_argument_types(fcx, call_expr.span, fn_sig.inputs, f, @@ -1936,9 +1942,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt, // Generate the struct type. let self_region = - fcx.region_var_if_parameterized(region_parameterized, - span, - ty::re_scope(id)); + fcx.region_var_if_parameterized(region_parameterized, span); let type_parameters = fcx.infcx().next_ty_vars(type_parameter_count); let substitutions = substs { self_r: self_region, @@ -2024,9 +2028,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt, // Generate the enum type. let self_region = - fcx.region_var_if_parameterized(region_parameterized, - span, - ty::re_scope(id)); + fcx.region_var_if_parameterized(region_parameterized, span); let type_parameters = fcx.infcx().next_ty_vars(type_parameter_count); let substitutions = substs { self_r: self_region, @@ -2366,13 +2368,12 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt, // (and how long it is valid), which we don't know yet until type // inference is complete. // - // Therefore, here we simply generate a region variable with - // the current expression as a lower bound. The region - // inferencer will then select the ultimate value. Finally, - // borrowck is charged with guaranteeing that the value whose - // address was taken can actually be made to live as long as - // it needs to live. - let region = fcx.infcx().next_region_var(expr.span, expr.id); + // Therefore, here we simply generate a region variable. The + // region inferencer will then select the ultimate value. + // Finally, borrowck is charged with guaranteeing that the + // value whose address was taken can actually be made to live + // as long as it needs to live. + let region = fcx.infcx().next_region_var_nb(expr.span); let tm = ty::mt { ty: fcx.expr_ty(oprnd), mutbl: mutbl }; let oprnd_t = if ty::type_is_error(tm.ty) { @@ -2389,8 +2390,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt, let defn = lookup_def(fcx, pth.span, id); let tpt = ty_param_bounds_and_ty_for_def(fcx, expr.span, defn); - let region_lb = ty::re_scope(expr.id); - instantiate_path(fcx, pth, tpt, expr.span, expr.id, region_lb); + instantiate_path(fcx, pth, tpt, expr.span, expr.id); } ast::expr_inline_asm(ref ia) => { fcx.require_unsafe(expr.span, ~"use of inline assembly"); @@ -3258,8 +3258,7 @@ pub fn instantiate_path(fcx: @mut FnCtxt, pth: @ast::Path, tpt: ty_param_bounds_and_ty, span: span, - node_id: ast::node_id, - region_lb: ty::Region) { + node_id: ast::node_id) { debug!(">>> instantiate_path"); let ty_param_count = tpt.generics.type_param_defs.len(); @@ -3285,8 +3284,7 @@ pub fn instantiate_path(fcx: @mut FnCtxt, } } None => { // no lifetime parameter supplied, insert default - fcx.region_var_if_parameterized( - tpt.generics.region_param, span, region_lb) + fcx.region_var_if_parameterized(tpt.generics.region_param, span) } }; @@ -3370,7 +3368,7 @@ pub fn ast_expr_vstore_to_vstore(fcx: @mut FnCtxt, ast::expr_vstore_uniq => ty::vstore_uniq, ast::expr_vstore_box | ast::expr_vstore_mut_box => ty::vstore_box, ast::expr_vstore_slice | ast::expr_vstore_mut_slice => { - let r = fcx.infcx().next_region_var(e.span, e.id); + let r = fcx.infcx().next_region_var_nb(e.span); ty::vstore_slice(r) } } diff --git a/src/librustc/middle/typeck/check/regionck.rs b/src/librustc/middle/typeck/check/regionck.rs index cb2b854276d6f..1c35c911b14cd 100644 --- a/src/librustc/middle/typeck/check/regionck.rs +++ b/src/librustc/middle/typeck/check/regionck.rs @@ -28,16 +28,15 @@ this point a bit better. */ use middle::freevars::get_freevars; -use middle::pat_util::pat_bindings; use middle::ty::{re_scope}; use middle::ty; use middle::typeck::check::FnCtxt; -use middle::typeck::check::lookup_def; use middle::typeck::check::regionmanip::relate_nested_regions; use middle::typeck::infer::resolve_and_force_all_but_regions; use middle::typeck::infer::resolve_type; use util::ppaux::{note_and_explain_region, ty_to_str, region_to_str}; +use middle::pat_util; use syntax::ast::{ManagedSigil, OwnedSigil, BorrowedSigil}; use syntax::ast::{def_arg, def_binding, def_local, def_self, def_upvar}; @@ -73,7 +72,11 @@ fn encl_region_of_def(fcx: @mut FnCtxt, def: ast::def) -> ty::Region { } pub impl Rcx { - fn resolve_type(@mut self, unresolved_ty: ty::t) -> ty::t { + fn tcx(&self) -> ty::ctxt { + self.fcx.ccx.tcx + } + + fn resolve_type(&mut self, unresolved_ty: ty::t) -> ty::t { /*! * Try to resolve the type for the given node, returning * t_err if an error results. Note that we never care @@ -149,10 +152,17 @@ pub fn regionck_fn(fcx: @mut FnCtxt, blk: &ast::blk) { fn regionck_visitor() -> rvt { visit::mk_vt(@visit::Visitor {visit_item: visit_item, - visit_stmt: visit_stmt, visit_expr: visit_expr, - visit_block: visit_block, + + // NOTE this should be visit_pat + // but causes errors in formal + // arguments in closures due to + // #XYZ! + //visit_pat: visit_pat, + visit_arm: visit_arm, visit_local: visit_local, + + visit_block: visit_block, .. *visit::default_visitor()}) } @@ -160,44 +170,103 @@ fn visit_item(_item: @ast::item, _rcx: @mut Rcx, _v: rvt) { // Ignore items } -fn visit_local(l: @ast::local, rcx: @mut Rcx, v: rvt) { - // Check to make sure that the regions in all local variables are - // within scope. - // - // Note: we do this here rather than in visit_pat because we do - // not wish to constrain the regions in *patterns* in quite the - // same way. `visit_node()` guarantees that the region encloses - // the node in question, which ultimately constrains the regions - // in patterns to enclose the match expression as a whole. But we - // want them to enclose the *arm*. However, regions in patterns - // must either derive from the discriminant or a ref pattern: in - // the case of the discriminant, the regions will be constrained - // when the type of the discriminant is checked. In the case of a - // ref pattern, the variable is created with a suitable lower - // bound. - let e = rcx.errors_reported; - (v.visit_pat)(l.node.pat, rcx, v); - let def_map = rcx.fcx.ccx.tcx.def_map; - do pat_bindings(def_map, l.node.pat) |_bm, id, sp, _path| { - visit_node(id, sp, rcx); - } - if e != rcx.errors_reported { - return; // if decl has errors, skip initializer expr - } +fn visit_block(b: &ast::blk, rcx: @mut Rcx, v: rvt) { + rcx.fcx.tcx().region_maps.record_cleanup_scope(b.node.id); + visit::visit_block(b, rcx, v); +} - (v.visit_ty)(l.node.ty, rcx, v); - for l.node.init.each |i| { - (v.visit_expr)(*i, rcx, v); +fn visit_arm(arm: &ast::arm, rcx: @mut Rcx, v: rvt) { + // see above + for arm.pats.each |&p| { + constrain_bindings_in_pat(p, rcx); } + + visit::visit_arm(arm, rcx, v); } -fn visit_block(b: &ast::blk, rcx: @mut Rcx, v: rvt) { - visit::visit_block(b, rcx, v); +fn visit_local(l: @ast::local, rcx: @mut Rcx, v: rvt) { + // see above + constrain_bindings_in_pat(l.node.pat, rcx); + visit::visit_local(l, rcx, v); +} + +fn constrain_bindings_in_pat(pat: @ast::pat, rcx: @mut Rcx) { + let tcx = rcx.fcx.tcx(); + debug!("regionck::visit_pat(pat=%s)", pat.repr(tcx)); + do pat_util::pat_bindings(tcx.def_map, pat) |_, id, span, _| { + // If we have a variable that contains region'd data, that + // data will be accessible from anywhere that the variable is + // accessed. We must be wary of loops like this: + // + // // from src/test/compile-fail/borrowck-lend-flow.rs + // let mut v = ~3, w = ~4; + // let mut x = &mut w; + // loop { + // **x += 1; // (2) + // borrow(v); //~ ERROR cannot borrow + // x = &mut v; // (1) + // } + // + // Typically, we try to determine the region of a borrow from + // those points where it is dereferenced. In this case, one + // might imagine that the lifetime of `x` need only be the + // body of the loop. But of course this is incorrect because + // the pointer that is created at point (1) is consumed at + // point (2), meaning that it must be live across the loop + // iteration. The easiest way to guarantee this is to require + // that the lifetime of any regions that appear in a + // variable's type enclose at least the variable's scope. + + let encl_region = tcx.region_maps.encl_region(id); + constrain_regions_in_type_of_node(rcx, id, encl_region, span); + } } fn visit_expr(expr: @ast::expr, rcx: @mut Rcx, v: rvt) { debug!("regionck::visit_expr(e=%s)", rcx.fcx.expr_to_str(expr)); + let has_method_map = rcx.fcx.inh.method_map.contains_key(&expr.id); + + // Record cleanup scopes, which are used by borrowck to decide the + // maximum lifetime of a temporary rvalue. These were derived by + // examining where trans creates block scopes, not because this + // reflects some principled decision around temporary lifetimes. + // Ordinarily this would seem like something that should be setup + // in region, but we need to know which uses of operators are + // overloaded. See #3511. + let tcx = rcx.fcx.tcx(); + match expr.node { + ast::expr_index(*) | + ast::expr_binary(*) | + ast::expr_assign_op(*) | + ast::expr_unary(*) if has_method_map => { + tcx.region_maps.record_cleanup_scope(expr.id); + } + ast::expr_binary(ast::and, lhs, rhs) | + ast::expr_binary(ast::or, lhs, rhs) => { + tcx.region_maps.record_cleanup_scope(lhs.id); + tcx.region_maps.record_cleanup_scope(rhs.id); + } + ast::expr_call(*) | + ast::expr_method_call(*) => { + tcx.region_maps.record_cleanup_scope(expr.id); + } + ast::expr_match(_, ref arms) => { + tcx.region_maps.record_cleanup_scope(expr.id); + for arms.each |arm| { + for arm.guard.each |guard| { + tcx.region_maps.record_cleanup_scope(guard.id); + } + } + } + ast::expr_while(cond, ref body) => { + tcx.region_maps.record_cleanup_scope(cond.id); + tcx.region_maps.record_cleanup_scope(body.node.id); + } + _ => {} + } + + // Check any autoderefs or autorefs that appear. for rcx.fcx.inh.adjustments.find(&expr.id).each |&adjustment| { debug!("adjustment=%?", adjustment); match *adjustment { @@ -208,6 +277,13 @@ fn visit_expr(expr: @ast::expr, rcx: @mut Rcx, v: rvt) { constrain_derefs(rcx, expr, autoderefs, expr_ty); for opt_autoref.each |autoref| { guarantor::for_autoref(rcx, expr, autoderefs, autoref); + + // Require that the resulting region encompasses + // the current node. + // + // FIXME(#5074) remove to support nested method calls + constrain_regions_in_type_of_node( + rcx, expr.id, ty::re_scope(expr.id), expr.span); } } _ => {} @@ -215,58 +291,40 @@ fn visit_expr(expr: @ast::expr, rcx: @mut Rcx, v: rvt) { } match expr.node { - ast::expr_path(*) => { - // Avoid checking the use of local variables, as we - // already check their definitions. The def'n always - // encloses the use. So if the def'n is enclosed by the - // region, then the uses will also be enclosed (and - // otherwise, an error will have been reported at the - // def'n site). - match lookup_def(rcx.fcx, expr.span, expr.id) { - ast::def_local(*) | ast::def_arg(*) | - ast::def_upvar(*) => return, - _ => () - } + ast::expr_call(callee, ref args, _) => { + constrain_callee(rcx, expr, callee); + constrain_call(rcx, expr, None, *args, false); } - ast::expr_call(callee, ref args, _) => { - // Check for a.b() where b is a method. Ensure that - // any types in the callee are valid for the entire - // method call. - - // FIXME(#3387)--we should really invoke - // `constrain_auto_ref()` on all exprs. But that causes a - // lot of spurious errors because of how the region - // hierarchy is setup. - if rcx.fcx.inh.method_map.contains_key(&callee.id) { - match callee.node { - ast::expr_field(base, _, _) => { - constrain_auto_ref(rcx, base); - } - _ => { - // This can happen if you have code like - // (x[0])() where `x[0]` is overloaded. Just - // ignore it. - } - } - } else { - constrain_auto_ref(rcx, callee); - } + ast::expr_method_call(arg0, _, _, ref args, _) => { + constrain_call(rcx, expr, Some(arg0), *args, false); + } - for args.each |arg| { - constrain_auto_ref(rcx, *arg); - } + ast::expr_index(lhs, rhs) | + ast::expr_assign_op(_, lhs, rhs) | + ast::expr_binary(_, lhs, rhs) if has_method_map => { + // As `expr_method_call`, but the call is via an + // overloaded op. Note that we (sadly) currently use an + // implicit "by ref" sort of passing style here. This + // should be converted to an adjustment! + constrain_call(rcx, expr, Some(lhs), [rhs], true); } - ast::expr_method_call(rcvr, _, _, ref args, _) => { - // Check for a.b() where b is a method. Ensure that - // any types in the callee are valid for the entire - // method call. + ast::expr_unary(_, lhs) if has_method_map => { + // As above. + constrain_call(rcx, expr, Some(lhs), [], true); + } - constrain_auto_ref(rcx, rcvr); - for args.each |arg| { - constrain_auto_ref(rcx, *arg); - } + ast::expr_unary(ast::deref, base) => { + // For *a, the lifetime of a must enclose the deref + let base_ty = rcx.resolve_node_type(base.id); + constrain_derefs(rcx, expr, 1, base_ty); + } + + ast::expr_index(vec_expr, _) => { + // For a[b], the lifetime of a must enclose the deref + let vec_type = rcx.resolve_expr_type_adjusted(vec_expr); + constrain_index(rcx, expr, vec_type); } ast::expr_cast(source, _) => { @@ -294,18 +352,18 @@ fn visit_expr(expr: @ast::expr, rcx: @mut Rcx, v: rvt) { } } - ast::expr_index(vec_expr, _) => { - let vec_type = rcx.resolve_expr_type_adjusted(vec_expr); - constrain_index(rcx, expr, vec_type); - } - - ast::expr_unary(ast::deref, base) => { - let base_ty = rcx.resolve_node_type(base.id); - constrain_derefs(rcx, expr, 1, base_ty); - } - ast::expr_addr_of(_, base) => { guarantor::for_addr_of(rcx, expr, base); + + // Require that when you write a `&expr` expression, the + // resulting pointer has a lifetime that encompasses the + // `&expr` expression itself. Note that we constraining + // the type of the node expr.id here *before applying + // adjustments*. + // + // FIXME(#5074) nested method calls requires that this rule change + let ty0 = rcx.resolve_node_type(expr.id); + constrain_regions_in_type(rcx, ty::re_scope(expr.id), expr.span, ty0); } ast::expr_match(discr, ref arms) => { @@ -313,6 +371,8 @@ fn visit_expr(expr: @ast::expr, rcx: @mut Rcx, v: rvt) { } ast::expr_fn_block(*) => { + // The lifetime of a block fn must not outlive the variables + // it closes over let function_type = rcx.resolve_node_type(expr.id); match ty::get(function_type).sty { ty::ty_closure(ty::ClosureTy {sigil: ast::BorrowedSigil, @@ -326,46 +386,107 @@ fn visit_expr(expr: @ast::expr, rcx: @mut Rcx, v: rvt) { _ => () } - if !visit_node(expr.id, expr.span, rcx) { return; } visit::visit_expr(expr, rcx, v); } -fn visit_stmt(s: @ast::stmt, rcx: @mut Rcx, v: rvt) { - visit::visit_stmt(s, rcx, v); -} +fn constrain_callee(rcx: @mut Rcx, + call_expr: @ast::expr, + callee_expr: @ast::expr) +{ + let tcx = rcx.fcx.tcx(); -fn visit_node(id: ast::node_id, span: span, rcx: @mut Rcx) -> bool { - /*! - * - * checks the type of the node `id` and reports an error if it - * references a region that is not in scope for that node. - * Returns false if an error is reported; this is used to cause us - * to cut off region checking for that subtree to avoid reporting - * tons of errors. */ - - let fcx = rcx.fcx; - - // find the region where this expr evaluation is taking place - let tcx = fcx.ccx.tcx; - let encl_region = match tcx.region_maps.opt_encl_scope(id) { - None => ty::re_static, - Some(r) => ty::re_scope(r) - }; - - // Otherwise, look at the type and see if it is a region pointer. - constrain_regions_in_type_of_node(rcx, id, encl_region, span) + let call_region = ty::re_scope(call_expr.id); + + let callee_ty = rcx.resolve_node_type(call_expr.callee_id); + if ty::type_is_error(callee_ty) { + return; + } + + match ty::get(callee_ty).sty { + ty::ty_bare_fn(*) => { } + ty::ty_closure(ref closure_ty) => { + match rcx.fcx.mk_subr(true, callee_expr.span, + call_region, closure_ty.region) { + result::Err(_) => { + tcx.sess.span_err( + callee_expr.span, + fmt!("cannot invoke closure outside of its lifetime")); + note_and_explain_region( + tcx, + "the closure is only valid for ", + closure_ty.region, + ""); + } + result::Ok(_) => {} + } + } + _ => { + tcx.sess.span_bug( + callee_expr.span, + fmt!("Calling non-function: %s", callee_ty.repr(tcx))); + } + } } -fn encl_region_or_static(rcx: @mut Rcx, expr: @ast::expr) -> ty::Region { - // FIXME(#3850) --- interactions with modes compel overly large granularity - // that is, we would probably prefer to just return re_scope(expr.id) - // here but we cannot just yet. +fn constrain_call(rcx: @mut Rcx, + // might be expr_call, expr_method_call, or an overloaded + // operator + call_expr: @ast::expr, + receiver: Option<@ast::expr>, + arg_exprs: &[@ast::expr], + implicitly_ref_args: bool) +{ + //! Invoked on every call site (i.e., normal calls, method calls, + //! and overloaded operators). Constrains the regions which appear + //! in the type of the function. Also constrains the regions that + //! appear in the arguments appropriately. let tcx = rcx.fcx.tcx(); - match tcx.region_maps.opt_encl_scope(expr.id) { - Some(s) => ty::re_scope(s), - None => ty::re_static // occurs in constants + debug!("constrain_call(call_expr=%s, implicitly_ref_args=%?)", + call_expr.repr(tcx), implicitly_ref_args); + let callee_ty = rcx.resolve_node_type(call_expr.callee_id); + if ty::type_is_error(callee_ty) { + return; } + let fn_sig = ty::ty_fn_sig(callee_ty); + + // `callee_region` is the scope representing the time in which the + // call occurs. + // + // FIXME(#5074) to support nested method calls, should be callee_id + let callee_scope = call_expr.id; + let callee_region = ty::re_scope(callee_scope); + + for fn_sig.inputs.eachi |i, input| { + // ensure that any regions appearing in the argument type are + // valid for at least the lifetime of the function: + constrain_regions_in_type_of_node( + rcx, arg_exprs[i].id, callee_region, arg_exprs[i].span); + + // unfortunately, there are two means of taking implicit + // references, and we need to propagate constraints as a + // result. modes are going away and the "DerefArgs" code + // should be ported to use adjustments + ty::set_default_mode(tcx, input.mode, ast::by_copy); + let is_by_ref = ty::resolved_mode(tcx, input.mode) == ast::by_ref; + if implicitly_ref_args || is_by_ref { + guarantor::for_by_ref(rcx, arg_exprs[i], callee_scope); + } + } + + // as loop above, but for receiver + for receiver.each |&r| { + constrain_regions_in_type_of_node( + rcx, r.id, callee_region, r.span); + if implicitly_ref_args { + guarantor::for_by_ref(rcx, r, callee_scope); + } + } + + // constrain regions that may appear in the return type to be + // valid for the function call: + constrain_regions_in_type( + rcx, callee_region, call_expr.span, fn_sig.output); } fn constrain_derefs(rcx: @mut Rcx, @@ -379,9 +500,8 @@ fn constrain_derefs(rcx: @mut Rcx, * pointer being derefenced, the lifetime of the pointer includes * the deref expr. */ - let tcx = rcx.fcx.tcx(); - let r_deref_expr = encl_region_or_static(rcx, deref_expr); + let r_deref_expr = ty::re_scope(deref_expr.id); for uint::range(0, derefs) |i| { debug!("constrain_derefs(deref_expr=%s, derefd_ty=%s, derefs=%?/%?", rcx.fcx.expr_to_str(deref_expr), @@ -390,19 +510,8 @@ fn constrain_derefs(rcx: @mut Rcx, match ty::get(derefd_ty).sty { ty::ty_rptr(r_ptr, _) => { - match rcx.fcx.mk_subr(true, deref_expr.span, r_deref_expr, r_ptr) { - result::Ok(*) => {} - result::Err(*) => { - tcx.sess.span_err( - deref_expr.span, - fmt!("dereference of reference outside its lifetime")); - note_and_explain_region( - tcx, - "the reference is only valid for ", - r_ptr, - ""); - } - } + mk_subregion_due_to_derefence(rcx, deref_expr.span, + r_deref_expr, r_ptr); } _ => {} @@ -417,6 +526,27 @@ fn constrain_derefs(rcx: @mut Rcx, } } +pub fn mk_subregion_due_to_derefence(rcx: @mut Rcx, + deref_span: span, + minimum_lifetime: ty::Region, + maximum_lifetime: ty::Region) { + match rcx.fcx.mk_subr(true, deref_span, + minimum_lifetime, maximum_lifetime) { + result::Ok(*) => {} + result::Err(*) => { + rcx.tcx().sess.span_err( + deref_span, + fmt!("dereference of reference outside its lifetime")); + note_and_explain_region( + rcx.tcx(), + "the reference is only valid for ", + maximum_lifetime, + ""); + } + } +} + + fn constrain_index(rcx: @mut Rcx, index_expr: @ast::expr, indexed_ty: ty::t) @@ -433,7 +563,7 @@ fn constrain_index(rcx: @mut Rcx, rcx.fcx.expr_to_str(index_expr), rcx.fcx.infcx().ty_to_str(indexed_ty)); - let r_index_expr = encl_region_or_static(rcx, index_expr); + let r_index_expr = ty::re_scope(index_expr.id); match ty::get(indexed_ty).sty { ty::ty_estr(ty::vstore_slice(r_ptr)) | ty::ty_evec(_, ty::vstore_slice(r_ptr)) => { @@ -456,66 +586,22 @@ fn constrain_index(rcx: @mut Rcx, } } -fn constrain_auto_ref(rcx: @mut Rcx, expr: @ast::expr) { - /*! - * - * If `expr` is auto-ref'd (e.g., as part of a borrow), then this - * function ensures that the lifetime of the resulting borrowed - * ptr includes at least the expression `expr`. */ - - debug!("constrain_auto_ref(expr=%s)", rcx.fcx.expr_to_str(expr)); - - let adjustment = rcx.fcx.inh.adjustments.find(&expr.id); - let region = match adjustment { - Some(&@ty::AutoDerefRef( - ty::AutoDerefRef { - autoref: Some(ref auto_ref), _})) => { - auto_ref.region - } - _ => { return; } - }; - - let tcx = rcx.fcx.tcx(); - let encl_region = tcx.region_maps.encl_region(expr.id); - match rcx.fcx.mk_subr(true, expr.span, encl_region, region) { - result::Ok(()) => {} - result::Err(_) => { - // In practice, this cannot happen: `region` is always a - // region variable, and constraints on region variables - // are collected and then resolved later. However, I - // included the span_err() here (rather than, say, - // span_bug()) because it seemed more future-proof: if, - // for some reason, the code were to change so that in - // some cases `region` is not a region variable, then - // reporting an error would be the correct path. - tcx.sess.span_err( - expr.span, - ~"lifetime of borrowed pointer does not include \ - the expression being borrowed"); - note_and_explain_region( - tcx, - ~"lifetime of the borrowed pointer is", - region, - ~""); - rcx.errors_reported += 1; - } - } -} - -fn constrain_free_variables( - rcx: @mut Rcx, - region: ty::Region, - expr: @ast::expr) { +fn constrain_free_variables(rcx: @mut Rcx, + region: ty::Region, + expr: @ast::expr) { /*! - * * Make sure that all free variables referenced inside the closure - * outlive the closure itself. */ + * outlive the closure itself. + */ let tcx = rcx.fcx.ccx.tcx; + debug!("constrain_free_variables(%s, %s)", + region.repr(tcx), expr.repr(tcx)); for get_freevars(tcx, expr.id).each |freevar| { debug!("freevar def is %?", freevar.def); let def = freevar.def; let en_region = encl_region_of_def(rcx.fcx, def); + debug!("en_region = %s", en_region.repr(tcx)); match rcx.fcx.mk_subr(true, freevar.span, region, en_region) { result::Ok(()) => {} @@ -541,9 +627,13 @@ fn constrain_free_variables( fn constrain_regions_in_type_of_node( rcx: @mut Rcx, id: ast::node_id, - encl_region: ty::Region, + minimum_lifetime: ty::Region, span: span) -> bool { + //! Guarantees that any lifetimes which appear in the type of + //! the node `id` (after applying adjustments) are valid for at + //! least `minimum_lifetime` + let tcx = rcx.fcx.tcx(); // Try to resolve the type. If we encounter an error, then typeck @@ -553,22 +643,21 @@ fn constrain_regions_in_type_of_node( let adjustment = rcx.fcx.inh.adjustments.find(&id); let ty = ty::adjust_ty(tcx, span, ty0, adjustment); debug!("constrain_regions_in_type_of_node(\ - ty=%s, ty0=%s, id=%d, encl_region=%?, adjustment=%?)", + ty=%s, ty0=%s, id=%d, minimum_lifetime=%?, adjustment=%?)", ty_to_str(tcx, ty), ty_to_str(tcx, ty0), - id, encl_region, adjustment); - constrain_regions_in_type(rcx, encl_region, span, ty) + id, minimum_lifetime, adjustment); + constrain_regions_in_type(rcx, minimum_lifetime, span, ty) } fn constrain_regions_in_type( rcx: @mut Rcx, - encl_region: ty::Region, + minimum_lifetime: ty::Region, span: span, ty: ty::t) -> bool { /*! - * * Requires that any regions which appear in `ty` must be - * superregions of `encl_region`. Also enforces the constraint + * superregions of `minimum_lifetime`. Also enforces the constraint * that given a pointer type `&'r T`, T must not contain regions * that outlive 'r, as well as analogous constraints for other * lifetime'd types. @@ -583,11 +672,11 @@ fn constrain_regions_in_type( let e = rcx.errors_reported; let tcx = rcx.fcx.ccx.tcx; - debug!("constrain_regions_in_type(encl_region=%s, ty=%s)", - region_to_str(tcx, encl_region), + debug!("constrain_regions_in_type(minimum_lifetime=%s, ty=%s)", + region_to_str(tcx, minimum_lifetime), ty_to_str(tcx, ty)); - do relate_nested_regions(tcx, Some(encl_region), ty) |r_sub, r_sup| { + do relate_nested_regions(tcx, Some(minimum_lifetime), ty) |r_sub, r_sup| { debug!("relate(r_sub=%s, r_sup=%s)", region_to_str(tcx, r_sub), region_to_str(tcx, r_sup)); @@ -595,12 +684,12 @@ fn constrain_regions_in_type( if r_sup.is_bound() || r_sub.is_bound() { // a bound region is one which appears inside an fn type. // (e.g., the `&` in `fn(&T)`). Such regions need not be - // constrained by `encl_region` as they are placeholders + // constrained by `minimum_lifetime` as they are placeholders // for regions that are as-yet-unknown. } else { match rcx.fcx.mk_subr(true, span, r_sub, r_sup) { result::Err(_) => { - if r_sub == encl_region { + if r_sub == minimum_lifetime { tcx.sess.span_err( span, fmt!("reference is not valid outside of its lifetime")); @@ -639,7 +728,6 @@ fn constrain_regions_in_type( pub mod guarantor { /*! - * * The routines in this module are aiming to deal with the case * where a the contents of a borrowed pointer are re-borrowed. * Imagine you have a borrowed pointer `b` with lifetime L1 and @@ -686,6 +774,7 @@ pub mod guarantor { */ use middle::typeck::check::regionck::{Rcx, infallibly_mk_subr}; + use middle::typeck::check::regionck::mk_subregion_due_to_derefence; use middle::ty; use syntax::ast; use syntax::codemap::span; @@ -693,14 +782,12 @@ pub mod guarantor { pub fn for_addr_of(rcx: @mut Rcx, expr: @ast::expr, base: @ast::expr) { /*! - * * Computes the guarantor for an expression `&base` and then * ensures that the lifetime of the resulting pointer is linked * to the lifetime of its guarantor (if any). */ debug!("guarantor::for_addr_of(base=%s)", rcx.fcx.expr_to_str(base)); - let _i = ::util::common::indenter(); let guarantor = guarantor(rcx, base); link(rcx, expr.span, expr.id, guarantor); @@ -708,13 +795,14 @@ pub mod guarantor { pub fn for_match(rcx: @mut Rcx, discr: @ast::expr, arms: &[ast::arm]) { /*! - * * Computes the guarantors for any ref bindings in a match and * then ensures that the lifetime of the resulting pointer is * linked to the lifetime of its guarantor (if any). */ + debug!("regionck::for_match()"); let discr_guarantor = guarantor(rcx, discr); + debug!("discr_guarantor=%s", discr_guarantor.repr(rcx.tcx())); for arms.each |arm| { for arm.pats.each |pat| { link_ref_bindings_in_pat(rcx, *pat, discr_guarantor); @@ -727,7 +815,6 @@ pub mod guarantor { autoderefs: uint, autoref: &ty::AutoRef) { /*! - * * Computes the guarantor for an expression that has an * autoref adjustment and links it to the lifetime of the * autoref. This is only important when auto re-borrowing @@ -736,30 +823,30 @@ pub mod guarantor { debug!("guarantor::for_autoref(expr=%s, autoref=%?)", rcx.fcx.expr_to_str(expr), autoref); - let _i = ::util::common::indenter(); let mut expr_ct = categorize_unadjusted(rcx, expr); debug!(" unadjusted cat=%?", expr_ct.cat); expr_ct = apply_autoderefs( rcx, expr, autoderefs, expr_ct); - match autoref.kind { - ty::AutoPtr => { + match *autoref { + ty::AutoPtr(r, _) => { // In this case, we are implicitly adding an `&`. - maybe_make_subregion(rcx, expr, autoref.region, - expr_ct.cat.guarantor); + maybe_make_subregion(rcx, expr, r, expr_ct.cat.guarantor); } - ty::AutoBorrowVec | - ty::AutoBorrowVecRef | - ty::AutoBorrowFn => { + ty::AutoBorrowVec(r, _) | + ty::AutoBorrowVecRef(r, _) | + ty::AutoBorrowFn(r) => { // In each of these cases, what is being borrowed is // not the (autoderef'd) expr itself but rather the // contents of the autoderef'd expression (i.e., what // the pointer points at). - maybe_make_subregion(rcx, expr, autoref.region, + maybe_make_subregion(rcx, expr, r, guarantor_of_deref(&expr_ct.cat)); } + + ty::AutoUnsafe(_) => {} } fn maybe_make_subregion( @@ -774,6 +861,28 @@ pub mod guarantor { } } + pub fn for_by_ref(rcx: @mut Rcx, + expr: @ast::expr, + callee_scope: ast::node_id) { + /*! + * Computes the guarantor for cases where the `expr` is + * being passed by implicit reference and must outlive + * `callee_scope`. + */ + + let tcx = rcx.tcx(); + debug!("guarantor::for_by_ref(expr=%s, callee_scope=%?)", + expr.repr(tcx), callee_scope); + let mut expr_cat = categorize(rcx, expr); + debug!("guarantor::for_by_ref(expr=%?, callee_scope=%?) category=%?", + expr.id, callee_scope, expr_cat); + let minimum_lifetime = ty::re_scope(callee_scope); + for expr_cat.guarantor.each |guarantor| { + mk_subregion_due_to_derefence(rcx, expr.span, + minimum_lifetime, *guarantor); + } + } + fn link( rcx: @mut Rcx, span: span, @@ -907,7 +1016,6 @@ pub mod guarantor { fn categorize(rcx: @mut Rcx, expr: @ast::expr) -> ExprCategorization { debug!("categorize(expr=%s)", rcx.fcx.expr_to_str(expr)); - let _i = ::util::common::indenter(); let mut expr_ct = categorize_unadjusted(rcx, expr); debug!("before adjustments, cat=%?", expr_ct.cat); @@ -928,12 +1036,24 @@ pub mod guarantor { expr_ct = apply_autoderefs( rcx, expr, adjustment.autoderefs, expr_ct); - for adjustment.autoref.each |autoref| { - // If there is an autoref, then the result of this - // expression will be some sort of borrowed pointer. - expr_ct.cat.guarantor = None; - expr_ct.cat.pointer = BorrowedPointer(autoref.region); - debug!("autoref, cat=%?", expr_ct.cat); + match adjustment.autoref { + None => { + } + Some(ty::AutoUnsafe(_)) => { + expr_ct.cat.guarantor = None; + expr_ct.cat.pointer = OtherPointer; + debug!("autoref, cat=%?", expr_ct.cat); + } + Some(ty::AutoPtr(r, _)) | + Some(ty::AutoBorrowVec(r, _)) | + Some(ty::AutoBorrowVecRef(r, _)) | + Some(ty::AutoBorrowFn(r)) => { + // If there is an autoref, then the result of this + // expression will be some sort of borrowed pointer. + expr_ct.cat.guarantor = None; + expr_ct.cat.pointer = BorrowedPointer(r); + debug!("autoref, cat=%?", expr_ct.cat); + } } } @@ -948,7 +1068,6 @@ pub mod guarantor { expr: @ast::expr) -> ExprCategorizationType { debug!("categorize_unadjusted(expr=%s)", rcx.fcx.expr_to_str(expr)); - let _i = ::util::common::indenter(); let guarantor = { if rcx.fcx.inh.method_map.contains_key(&expr.id) { @@ -1053,7 +1172,6 @@ pub mod guarantor { debug!("link_ref_bindings_in_pat(pat=%s, guarantor=%?)", rcx.fcx.pat_to_str(pat), guarantor); - let _i = ::util::common::indenter(); match pat.node { ast::pat_wild => {} @@ -1069,7 +1187,10 @@ pub mod guarantor { link_ref_bindings_in_pat(rcx, *p, guarantor); } } - ast::pat_enum(*) => {} + ast::pat_enum(_, None) => {} + ast::pat_enum(_, Some(ref pats)) => { + link_ref_bindings_in_pats(rcx, pats, guarantor); + } ast::pat_struct(_, ref fpats, _) => { for fpats.each |fpat| { link_ref_bindings_in_pat(rcx, fpat.pat, guarantor); diff --git a/src/librustc/middle/typeck/check/regionmanip.rs b/src/librustc/middle/typeck/check/regionmanip.rs index f293893bc131f..cfbd012b7b7cd 100644 --- a/src/librustc/middle/typeck/check/regionmanip.rs +++ b/src/librustc/middle/typeck/check/regionmanip.rs @@ -87,7 +87,7 @@ pub fn replace_bound_regions_in_fn_sig( to_r: &fn(ty::bound_region) -> ty::Region, r: ty::Region) -> isr_alist { match r { - ty::re_free(*) | ty::re_static | ty::re_scope(_) | + ty::re_empty | ty::re_free(*) | ty::re_static | ty::re_scope(_) | ty::re_infer(_) => { isr } @@ -153,6 +153,7 @@ pub fn replace_bound_regions_in_fn_sig( } // Free regions like these just stay the same: + ty::re_empty | ty::re_static | ty::re_scope(_) | ty::re_free(*) | diff --git a/src/librustc/middle/typeck/check/writeback.rs b/src/librustc/middle/typeck/check/writeback.rs index d6b09d1e7f453..b7713eaa2fd6e 100644 --- a/src/librustc/middle/typeck/check/writeback.rs +++ b/src/librustc/middle/typeck/check/writeback.rs @@ -134,23 +134,22 @@ fn resolve_type_vars_for_node(wbcx: @mut WbCtxt, sp: span, id: ast::node_id) } Some(&@ty::AutoDerefRef(adj)) => { - let resolved_autoref = match adj.autoref { - Some(ref autoref) => { - match resolve_region(fcx.infcx(), autoref.region, - resolve_all | force_all) { - Err(e) => { - // This should not, I think, happen. - fcx.ccx.tcx.sess.span_err( - sp, fmt!("cannot resolve scope of borrow: %s", - infer::fixup_err_to_str(e))); - Some(*autoref) - } - Ok(r) => { - Some(ty::AutoRef {region: r, ..*autoref}) - } + let fixup_region = |r| { + match resolve_region(fcx.infcx(), r, resolve_all | force_all) { + Ok(r1) => r1, + Err(e) => { + // This should not, I think, happen. + fcx.ccx.tcx.sess.span_err( + sp, fmt!("cannot resolve scope of borrow: %s", + infer::fixup_err_to_str(e))); + r } } - None => None + }; + + let resolved_autoref = match adj.autoref { + None => None, + Some(ref r) => Some(r.map_region(fixup_region)) }; let resolved_adj = @ty::AutoDerefRef(ty::AutoDerefRef { diff --git a/src/librustc/middle/typeck/coherence.rs b/src/librustc/middle/typeck/coherence.rs index 05b2f6f577b82..573e4bd579011 100644 --- a/src/librustc/middle/typeck/coherence.rs +++ b/src/librustc/middle/typeck/coherence.rs @@ -393,7 +393,7 @@ pub impl CoherenceChecker { let pmm = self.crate_context.tcx.provided_methods; match pmm.find(&local_def(impl_id)) { - Some(mis) => { + Some(&mis) => { // If the trait already has an entry in the // provided_methods_map, we just need to add this // method to that entry. @@ -426,8 +426,8 @@ pub impl CoherenceChecker { self.crate_context.coherence_info.inherent_methods .insert(base_def_id, implementation_list); } - Some(existing_implementation_list) => { - implementation_list = *existing_implementation_list; + Some(&existing_implementation_list) => { + implementation_list = existing_implementation_list; } } @@ -443,8 +443,8 @@ pub impl CoherenceChecker { self.crate_context.coherence_info.extension_methods .insert(trait_id, implementation_list); } - Some(existing_implementation_list) => { - implementation_list = *existing_implementation_list; + Some(&existing_implementation_list) => { + implementation_list = existing_implementation_list; } } @@ -507,7 +507,7 @@ pub impl CoherenceChecker { m.insert(self_t, the_impl); self.crate_context.tcx.trait_impls.insert(trait_t, m); } - Some(m) => { + Some(&m) => { m.insert(self_t, the_impl); } } diff --git a/src/librustc/middle/typeck/infer/coercion.rs b/src/librustc/middle/typeck/infer/coercion.rs index dcd1c861540f4..3620b609edf3b 100644 --- a/src/librustc/middle/typeck/infer/coercion.rs +++ b/src/librustc/middle/typeck/infer/coercion.rs @@ -65,7 +65,7 @@ we may want to adjust precisely when coercions occur. */ use middle::ty::{AutoPtr, AutoBorrowVec, AutoBorrowFn}; -use middle::ty::{AutoDerefRef, AutoRef}; +use middle::ty::{AutoDerefRef}; use middle::ty::{vstore_slice, vstore_box, vstore_uniq}; use middle::ty::{mt}; use middle::ty; @@ -120,9 +120,9 @@ pub impl Coerce { }; } - ty::ty_ptr(_) => { + ty::ty_ptr(mt_b) => { return do self.unpack_actual_value(a) |sty_a| { - self.coerce_unsafe_ptr(a, sty_a, b) + self.coerce_unsafe_ptr(a, sty_a, b, mt_b) }; } @@ -205,11 +205,7 @@ pub impl Coerce { if_ok!(sub.tys(a_borrowed, b)); Ok(Some(@AutoDerefRef(AutoDerefRef { autoderefs: 1, - autoref: Some(AutoRef { - kind: AutoPtr, - region: r_borrow, - mutbl: mt_b.mutbl - }) + autoref: Some(AutoPtr(r_borrow, mt_b.mutbl)) }))) } @@ -235,11 +231,7 @@ pub impl Coerce { if_ok!(self.subtype(a_borrowed, b)); Ok(Some(@AutoDerefRef(AutoDerefRef { autoderefs: 0, - autoref: Some(AutoRef { - kind: AutoBorrowVec, - region: r_a, - mutbl: m_imm - }) + autoref: Some(AutoBorrowVec(r_a, m_imm)) }))) } @@ -268,11 +260,7 @@ pub impl Coerce { if_ok!(sub.tys(a_borrowed, b)); Ok(Some(@AutoDerefRef(AutoDerefRef { autoderefs: 0, - autoref: Some(AutoRef { - kind: AutoBorrowVec, - region: r_borrow, - mutbl: mt_b.mutbl - }) + autoref: Some(AutoBorrowVec(r_borrow, mt_b.mutbl)) }))) } @@ -308,11 +296,7 @@ pub impl Coerce { if_ok!(self.subtype(a_borrowed, b)); Ok(Some(@AutoDerefRef(AutoDerefRef { autoderefs: 0, - autoref: Some(AutoRef { - kind: AutoBorrowFn, - region: r_borrow, - mutbl: m_imm - }) + autoref: Some(AutoBorrowFn(r_borrow)) }))) } @@ -363,7 +347,8 @@ pub impl Coerce { fn coerce_unsafe_ptr(&self, a: ty::t, sty_a: &ty::sty, - b: ty::t) -> CoerceResult + b: ty::t, + mt_b: ty::mt) -> CoerceResult { debug!("coerce_unsafe_ptr(a=%s, sty_a=%?, b=%s)", a.inf_str(self.infcx), sty_a, @@ -376,10 +361,17 @@ pub impl Coerce { } }; - // borrowed pointers and unsafe pointers have the same - // representation, so just check that the types which they - // point at are compatible: + // check that the types which they point at are compatible let a_unsafe = ty::mk_ptr(self.infcx.tcx, mt_a); - self.subtype(a_unsafe, b) + if_ok!(self.subtype(a_unsafe, b)); + + // although borrowed ptrs and unsafe ptrs have the same + // representation, we still register an AutoDerefRef so that + // regionck knows that that the region for `a` must be valid + // here + Ok(Some(@AutoDerefRef(AutoDerefRef { + autoderefs: 1, + autoref: Some(ty::AutoUnsafe(mt_b.mutbl)) + }))) } } diff --git a/src/librustc/middle/typeck/infer/mod.rs b/src/librustc/middle/typeck/infer/mod.rs index 7b5a93d4cad88..4491b04b382ec 100644 --- a/src/librustc/middle/typeck/infer/mod.rs +++ b/src/librustc/middle/typeck/infer/mod.rs @@ -339,7 +339,7 @@ pub fn fixup_err_to_str(f: fixup_err) -> ~str { fn new_ValsAndBindings() -> ValsAndBindings { ValsAndBindings { - vals: @mut SmallIntMap::new(), + vals: SmallIntMap::new(), bindings: ~[] } } @@ -469,28 +469,6 @@ pub fn resolve_region(cx: @mut InferCtxt, r: ty::Region, modes: uint) resolver.resolve_region_chk(r) } -/* -fn resolve_borrowings(cx: @mut InferCtxt) { - for cx.borrowings.each |item| { - match resolve_region(cx, item.scope, resolve_all|force_all) { - Ok(region) => { - debug!("borrowing for expr %d resolved to region %?, mutbl %?", - item.expr_id, region, item.mutbl); - cx.tcx.borrowings.insert( - item.expr_id, {region: region, mutbl: item.mutbl}); - } - - Err(e) => { - let str = fixup_err_to_str(e); - cx.tcx.sess.span_err( - item.span, - fmt!("could not resolve lifetime for borrow: %s", str)); - } - } - } -} -*/ - trait then { fn then(&self, f: &fn() -> Result) -> Result; @@ -554,7 +532,8 @@ struct Snapshot { } pub impl InferCtxt { - fn combine_fields(@mut self, a_is_expected: bool, + fn combine_fields(@mut self, + a_is_expected: bool, span: span) -> CombineFields { CombineFields {infcx: self, a_is_expected: a_is_expected, @@ -565,25 +544,24 @@ pub impl InferCtxt { Sub(self.combine_fields(a_is_expected, span)) } - fn in_snapshot(@mut self) -> bool { + fn in_snapshot(&self) -> bool { self.region_vars.in_snapshot() } - fn start_snapshot(@mut self) -> Snapshot { - let this = &mut *self; + fn start_snapshot(&mut self) -> Snapshot { Snapshot { ty_var_bindings_len: - this.ty_var_bindings.bindings.len(), + self.ty_var_bindings.bindings.len(), int_var_bindings_len: - this.int_var_bindings.bindings.len(), + self.int_var_bindings.bindings.len(), float_var_bindings_len: - this.float_var_bindings.bindings.len(), + self.float_var_bindings.bindings.len(), region_vars_snapshot: - this.region_vars.start_snapshot(), + self.region_vars.start_snapshot(), } } - fn rollback_to(@mut self, snapshot: &Snapshot) { + fn rollback_to(&mut self, snapshot: &Snapshot) { debug!("rollback!"); rollback_to(&mut self.ty_var_bindings, snapshot.ty_var_bindings_len); @@ -596,7 +574,7 @@ pub impl InferCtxt { } /// Execute `f` and commit the bindings if successful - fn commit(@mut self, f: &fn() -> Result) -> Result { + fn commit(&mut self, f: &fn() -> Result) -> Result { assert!(!self.in_snapshot()); debug!("commit()"); @@ -611,7 +589,7 @@ pub impl InferCtxt { } /// Execute `f`, unroll bindings on failure - fn try(@mut self, f: &fn() -> Result) -> Result { + fn try(&mut self, f: &fn() -> Result) -> Result { debug!("try()"); do indent { let snapshot = self.start_snapshot(); @@ -625,7 +603,7 @@ pub impl InferCtxt { } /// Execute `f` then unroll any bindings it creates - fn probe(@mut self, f: &fn() -> Result) -> Result { + fn probe(&mut self, f: &fn() -> Result) -> Result { debug!("probe()"); do indent { let snapshot = self.start_snapshot(); @@ -647,45 +625,47 @@ fn next_simple_var( } pub impl InferCtxt { - fn next_ty_var_id(@mut self) -> TyVid { + fn next_ty_var_id(&mut self) -> TyVid { let id = self.ty_var_counter; self.ty_var_counter += 1; - let vals = self.ty_var_bindings.vals; - vals.insert(id, Root(Bounds { lb: None, ub: None }, 0u)); + { + let vals = &mut self.ty_var_bindings.vals; + vals.insert(id, Root(Bounds { lb: None, ub: None }, 0u)); + } return TyVid(id); } - fn next_ty_var(@mut self) -> ty::t { + fn next_ty_var(&mut self) -> ty::t { ty::mk_var(self.tcx, self.next_ty_var_id()) } - fn next_ty_vars(@mut self, n: uint) -> ~[ty::t] { + fn next_ty_vars(&mut self, n: uint) -> ~[ty::t] { vec::from_fn(n, |_i| self.next_ty_var()) } - fn next_int_var_id(@mut self) -> IntVid { + fn next_int_var_id(&mut self) -> IntVid { IntVid(next_simple_var(&mut self.int_var_counter, &mut self.int_var_bindings)) } - fn next_int_var(@mut self) -> ty::t { + fn next_int_var(&mut self) -> ty::t { ty::mk_int_var(self.tcx, self.next_int_var_id()) } - fn next_float_var_id(@mut self) -> FloatVid { + fn next_float_var_id(&mut self) -> FloatVid { FloatVid(next_simple_var(&mut self.float_var_counter, &mut self.float_var_bindings)) } - fn next_float_var(@mut self) -> ty::t { + fn next_float_var(&mut self) -> ty::t { ty::mk_float_var(self.tcx, self.next_float_var_id()) } - fn next_region_var_nb(@mut self, span: span) -> ty::Region { + fn next_region_var_nb(&mut self, span: span) -> ty::Region { ty::re_infer(ty::ReVar(self.region_vars.new_region_var(span))) } - fn next_region_var_with_lb(@mut self, span: span, + fn next_region_var_with_lb(&mut self, span: span, lb_region: ty::Region) -> ty::Region { let region_var = self.next_region_var_nb(span); @@ -697,12 +677,12 @@ pub impl InferCtxt { return region_var; } - fn next_region_var(@mut self, span: span, scope_id: ast::node_id) + fn next_region_var(&mut self, span: span, scope_id: ast::node_id) -> ty::Region { self.next_region_var_with_lb(span, ty::re_scope(scope_id)) } - fn resolve_regions(@mut self) { + fn resolve_regions(&mut self) { self.region_vars.resolve_regions(); } @@ -722,7 +702,6 @@ pub impl InferCtxt { result::Err(_) => typ } } - fn resolve_type_vars_in_trait_ref_if_possible(@mut self, trait_ref: &ty::TraitRef) -> ty::TraitRef @@ -786,7 +765,7 @@ pub impl InferCtxt { self.type_error_message(sp, mk_msg, a, Some(err)); } - fn replace_bound_regions_with_fresh_regions(@mut self, + fn replace_bound_regions_with_fresh_regions(&mut self, span: span, fsig: &ty::FnSig) -> (ty::FnSig, isr_alist) { @@ -806,7 +785,7 @@ pub impl InferCtxt { } fn fold_regions_in_sig( - @mut self, + &mut self, fn_sig: &ty::FnSig, fldr: &fn(r: ty::Region, in_fn: bool) -> ty::Region) -> ty::FnSig { diff --git a/src/librustc/middle/typeck/infer/region_inference.rs b/src/librustc/middle/typeck/infer/region_inference.rs index e12a3f2e97522..0761ad5c7b819 100644 --- a/src/librustc/middle/typeck/infer/region_inference.rs +++ b/src/librustc/middle/typeck/infer/region_inference.rs @@ -24,7 +24,7 @@ it's worth spending more time on a more involved analysis. Moreover, regions are a simpler case than types: they don't have aggregate structure, for example. -Unlike normal type inference, which is similar in spirit H-M and thus +Unlike normal type inference, which is similar in spirit to H-M and thus works progressively, the region type inference works by accumulating constraints over the course of a function. Finally, at the end of processing a function, we process and solve the constraints all at @@ -130,7 +130,7 @@ of these variables can effectively be unified into a single variable. Once SCCs are removed, we are left with a DAG. At this point, we can walk the DAG in toplogical order once to compute the expanding nodes, and again in reverse topological order to compute the contracting -nodes.The main reason I did not write it this way is that I did not +nodes. The main reason I did not write it this way is that I did not feel like implementing the SCC and toplogical sort algorithms at the moment. @@ -538,7 +538,7 @@ more convincing in the future. use middle::ty; use middle::ty::{FreeRegion, Region, RegionVid}; -use middle::ty::{re_static, re_infer, re_free, re_bound}; +use middle::ty::{re_empty, re_static, re_infer, re_free, re_bound}; use middle::ty::{re_scope, ReVar, ReSkolemized, br_fresh}; use middle::typeck::infer::cres; use util::common::indenter; @@ -547,6 +547,9 @@ use util::ppaux::note_and_explain_region; use core::cell::{Cell, empty_cell}; use core::hashmap::{HashMap, HashSet}; use core::to_bytes; +use core::uint; +use core::vec; +use core; use syntax::codemap::span; use syntax::ast; @@ -572,18 +575,12 @@ impl to_bytes::IterBytes for Constraint { } } -#[deriving(Eq)] +#[deriving(Eq, IterBytes)] struct TwoRegions { a: Region, b: Region, } -impl to_bytes::IterBytes for TwoRegions { - fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { - to_bytes::iter_bytes_2(&self.a, &self.b, lsb0, f) - } -} - enum UndoLogEntry { Snapshot, AddVar(RegionVid), @@ -637,7 +634,7 @@ pub fn RegionVarBindings(tcx: ty::ctxt) -> RegionVarBindings { } pub impl RegionVarBindings { - fn in_snapshot(&mut self) -> bool { + fn in_snapshot(&self) -> bool { self.undo_log.len() > 0 } @@ -832,7 +829,6 @@ pub impl RegionVarBindings { } fn resolve_var(&mut self, rid: RegionVid) -> ty::Region { - debug!("RegionVarBindings: resolve_var(%?=%u)", rid, rid.to_uint()); if self.values.is_empty() { self.tcx.sess.span_bug( self.var_spans[rid.to_uint()], @@ -841,29 +837,14 @@ pub impl RegionVarBindings { } let v = self.values.with_ref(|values| values[rid.to_uint()]); + debug!("RegionVarBindings: resolve_var(%?=%u)=%?", + rid, rid.to_uint(), v); match v { Value(r) => r, NoValue => { - // No constraints, report an error. It is plausible - // that we could select an arbitrary region here - // instead. At the moment I am not doing this because - // this generally masks bugs in the inference - // algorithm, and given our syntax one cannot create - // generally create a lifetime variable that isn't - // used in some type, and hence all lifetime variables - // should ultimately have some bounds. - - self.tcx.sess.span_err( - self.var_spans[rid.to_uint()], - fmt!("Unconstrained region variable #%u", rid.to_uint())); - - // Touch of a hack: to suppress duplicate messages, - // replace the NoValue entry with ErrorValue. - let mut values = self.values.take(); - values[rid.to_uint()] = ErrorValue; - self.values.put_back(values); - re_static + // No constraints, return ty::re_empty + re_empty } ErrorValue => { @@ -1031,6 +1012,10 @@ priv impl RegionVarBindings { re_static // nothing lives longer than static } + (re_empty, r) | (r, re_empty) => { + r // everything lives longer than empty + } + (re_infer(ReVar(v_id)), _) | (_, re_infer(ReVar(v_id))) => { self.tcx.sess.span_bug( self.var_spans[v_id.to_uint()], @@ -1127,6 +1112,11 @@ priv impl RegionVarBindings { Ok(r) } + (re_empty, _) | (_, re_empty) => { + // nothing lives shorter than everything else + Ok(re_empty) + } + (re_infer(ReVar(v_id)), _) | (_, re_infer(ReVar(v_id))) => { self.tcx.sess.span_bug( @@ -1266,8 +1256,6 @@ struct SpannedRegion { span: span, } -type TwoRegionsMap = HashSet; - pub impl RegionVarBindings { fn infer_variable_values(&mut self) -> ~[GraphNodeValue] { let mut graph = self.construct_graph(); @@ -1329,11 +1317,15 @@ pub impl RegionVarBindings { node_id: RegionVid, edge_dir: Direction, edge_idx: uint) { + //! Insert edge `edge_idx` on the link list of edges in direction + //! `edge_dir` for the node `node_id` let edge_dir = edge_dir as uint; - graph.edges[edge_idx].next_edge[edge_dir] = - graph.nodes[node_id.to_uint()].head_edge[edge_dir]; - graph.nodes[node_id.to_uint()].head_edge[edge_dir] = - edge_idx; + assert_eq!(graph.edges[edge_idx].next_edge[edge_dir], + uint::max_value); + let n = node_id.to_uint(); + let prev_head = graph.nodes[n].head_edge[edge_dir]; + graph.edges[edge_idx].next_edge[edge_dir] = prev_head; + graph.nodes[n].head_edge[edge_dir] = edge_idx; } } @@ -1484,6 +1476,8 @@ pub impl RegionVarBindings { } } Err(_) => { + debug!("Setting %? to ErrorValue: no glb of %?, %?", + a_vid, a_region, b_region); a_node.value = ErrorValue; false } @@ -1495,7 +1489,21 @@ pub impl RegionVarBindings { &mut self, graph: &Graph) -> ~[GraphNodeValue] { - let mut dup_map = HashSet::new(); + debug!("extract_values_and_report_conflicts()"); + + // This is the best way that I have found to suppress + // duplicate and related errors. Basically we keep a set of + // flags for every node. Whenever an error occurs, we will + // walk some portion of the graph looking to find pairs of + // conflicting regions to report to the user. As we walk, we + // trip the flags from false to true, and if we find that + // we've already reported an error involving any particular + // node we just stop and don't report the current error. The + // idea is to report errors that derive from independent + // regions of the graph, but not those that derive from + // overlapping locations. + let mut dup_vec = graph.nodes.map(|_| uint::max_value); + graph.nodes.mapi(|idx, node| { match node.value { Value(_) => { @@ -1530,15 +1538,16 @@ pub impl RegionVarBindings { that is not used is not a problem, so if this rule starts to create problems we'll have to revisit this portion of the code and think hard about it. =) */ + let node_vid = RegionVid { id: idx }; match node.classification { Expanding => { self.report_error_for_expanding_node( - graph, &mut dup_map, node_vid); + graph, dup_vec, node_vid); } Contracting => { self.report_error_for_contracting_node( - graph, &mut dup_map, node_vid); + graph, dup_vec, node_vid); } } } @@ -1548,38 +1557,26 @@ pub impl RegionVarBindings { }) } - // Used to suppress reporting the same basic error over and over - fn is_reported(&mut self, - dup_map: &mut TwoRegionsMap, - r_a: Region, - r_b: Region) - -> bool { - let key = TwoRegions { a: r_a, b: r_b }; - !dup_map.insert(key) - } - fn report_error_for_expanding_node(&mut self, graph: &Graph, - dup_map: &mut TwoRegionsMap, + dup_vec: &mut [uint], node_idx: RegionVid) { // Errors in expanding nodes result from a lower-bound that is // not contained by an upper-bound. - let lower_bounds = - self.collect_concrete_regions(graph, node_idx, Incoming); - let upper_bounds = - self.collect_concrete_regions(graph, node_idx, Outgoing); + let (lower_bounds, lower_dup) = + self.collect_concrete_regions(graph, node_idx, Incoming, dup_vec); + let (upper_bounds, upper_dup) = + self.collect_concrete_regions(graph, node_idx, Outgoing, dup_vec); + + if lower_dup || upper_dup { + return; + } for vec::each(lower_bounds) |lower_bound| { for vec::each(upper_bounds) |upper_bound| { if !self.is_subregion_of(lower_bound.region, upper_bound.region) { - if self.is_reported(dup_map, - lower_bound.region, - upper_bound.region) { - return; - } - self.tcx.sess.span_err( self.var_spans[node_idx.to_uint()], fmt!("cannot infer an appropriate lifetime \ @@ -1609,16 +1606,28 @@ pub impl RegionVarBindings { } } } + + self.tcx.sess.span_bug( + self.var_spans[node_idx.to_uint()], + fmt!("report_error_for_expanding_node() could not find error \ + for var %?, lower_bounds=%s, upper_bounds=%s", + node_idx, + lower_bounds.map(|x| x.region).repr(self.tcx), + upper_bounds.map(|x| x.region).repr(self.tcx))); } fn report_error_for_contracting_node(&mut self, graph: &Graph, - dup_map: &mut TwoRegionsMap, + dup_vec: &mut [uint], node_idx: RegionVid) { // Errors in contracting nodes result from two upper-bounds // that have no intersection. - let upper_bounds = self.collect_concrete_regions(graph, node_idx, - Outgoing); + let (upper_bounds, dup_found) = + self.collect_concrete_regions(graph, node_idx, Outgoing, dup_vec); + + if dup_found { + return; + } for vec::each(upper_bounds) |upper_bound_1| { for vec::each(upper_bounds) |upper_bound_2| { @@ -1627,12 +1636,6 @@ pub impl RegionVarBindings { Ok(_) => {} Err(_) => { - if self.is_reported(dup_map, - upper_bound_1.region, - upper_bound_2.region) { - return; - } - self.tcx.sess.span_err( self.var_spans[node_idx.to_uint()], fmt!("cannot infer an appropriate lifetime \ @@ -1663,50 +1666,94 @@ pub impl RegionVarBindings { } } } + + self.tcx.sess.span_bug( + self.var_spans[node_idx.to_uint()], + fmt!("report_error_for_contracting_node() could not find error \ + for var %?, upper_bounds=%s", + node_idx, + upper_bounds.map(|x| x.region).repr(self.tcx))); } fn collect_concrete_regions(&mut self, graph: &Graph, orig_node_idx: RegionVid, - dir: Direction) - -> ~[SpannedRegion] { - let mut set = HashSet::new(); - let mut stack = ~[orig_node_idx]; - set.insert(orig_node_idx.to_uint()); - let mut result = ~[]; - while !vec::is_empty(stack) { - let node_idx = stack.pop(); - for self.each_edge(graph, node_idx, dir) |edge| { + dir: Direction, + dup_vec: &mut [uint]) + -> (~[SpannedRegion], bool) { + struct WalkState { + set: HashSet, + stack: ~[RegionVid], + result: ~[SpannedRegion], + dup_found: bool + } + let mut state = WalkState { + set: HashSet::new(), + stack: ~[orig_node_idx], + result: ~[], + dup_found: false + }; + state.set.insert(orig_node_idx); + + // to start off the process, walk the source node in the + // direction specified + process_edges(self, &mut state, graph, orig_node_idx, dir); + + while !state.stack.is_empty() { + let node_idx = state.stack.pop(); + let classification = graph.nodes[node_idx.to_uint()].classification; + + // check whether we've visited this node on some previous walk + if dup_vec[node_idx.to_uint()] == uint::max_value { + dup_vec[node_idx.to_uint()] = orig_node_idx.to_uint(); + } else if dup_vec[node_idx.to_uint()] != orig_node_idx.to_uint() { + state.dup_found = true; + } + + debug!("collect_concrete_regions(orig_node_idx=%?, node_idx=%?, \ + classification=%?)", + orig_node_idx, node_idx, classification); + + // figure out the direction from which this node takes its + // values, and search for concrete regions etc in that direction + let dir = match classification { + Expanding => Incoming, + Contracting => Outgoing + }; + + process_edges(self, &mut state, graph, node_idx, dir); + } + + let WalkState {result, dup_found, _} = state; + return (result, dup_found); + + fn process_edges(self: &mut RegionVarBindings, + state: &mut WalkState, + graph: &Graph, + source_vid: RegionVid, + dir: Direction) { + debug!("process_edges(source_vid=%?, dir=%?)", source_vid, dir); + + for self.each_edge(graph, source_vid, dir) |edge| { match edge.constraint { - ConstrainVarSubVar(from_vid, to_vid) => { - let vid = match dir { - Incoming => from_vid, - Outgoing => to_vid - }; - if set.insert(vid.to_uint()) { - stack.push(vid); + ConstrainVarSubVar(from_vid, to_vid) => { + let opp_vid = + if from_vid == source_vid {to_vid} else {from_vid}; + if state.set.insert(opp_vid) { + state.stack.push(opp_vid); + } } - } - - ConstrainRegSubVar(region, _) => { - assert!(dir == Incoming); - result.push(SpannedRegion { - region: region, - span: edge.span - }); - } - ConstrainVarSubReg(_, region) => { - assert!(dir == Outgoing); - result.push(SpannedRegion { - region: region, - span: edge.span - }); - } + ConstrainRegSubVar(region, _) | + ConstrainVarSubReg(_, region) => { + state.result.push(SpannedRegion { + region: region, + span: edge.span + }); + } } } } - return result; } fn each_edge(&mut self, diff --git a/src/librustc/middle/typeck/infer/unify.rs b/src/librustc/middle/typeck/infer/unify.rs index bc13074422450..8db4774322a05 100644 --- a/src/librustc/middle/typeck/infer/unify.rs +++ b/src/librustc/middle/typeck/infer/unify.rs @@ -23,7 +23,7 @@ pub enum VarValue { } pub struct ValsAndBindings { - vals: @mut SmallIntMap>, + vals: SmallIntMap>, bindings: ~[(V, VarValue)], } @@ -60,26 +60,25 @@ pub impl InferCtxt { vid: V) -> Node { let vid_u = vid.to_uint(); - match vb.vals.find(&vid_u) { + let var_val = match vb.vals.find(&vid_u) { + Some(&var_val) => var_val, None => { tcx.sess.bug(fmt!( "failed lookup of vid `%u`", vid_u)); } - Some(var_val) => { - match *var_val { - Redirect(vid) => { - let node: Node = helper(tcx, vb, vid); - if node.root != vid { - // Path compression - vb.vals.insert(vid.to_uint(), - Redirect(node.root)); - } - node - } - Root(ref pt, rk) => { - Node {root: vid, possible_types: *pt, rank: rk} - } + }; + match var_val { + Redirect(vid) => { + let node: Node = helper(tcx, vb, vid); + if node.root != vid { + // Path compression + vb.vals.insert(vid.to_uint(), + Redirect(node.root)); } + node + } + Root(pt, rk) => { + Node {root: vid, possible_types: pt, rank: rk} } } } @@ -99,8 +98,8 @@ pub impl InferCtxt { { // FIXME(#4903)---borrow checker is not flow sensitive let vb = UnifyVid::appropriate_vals_and_bindings(self); - let old_v = vb.vals.get(&vid.to_uint()); - vb.bindings.push((vid, *old_v)); + let old_v = { *vb.vals.get(&vid.to_uint()) }; // FIXME(#4903) + vb.bindings.push((vid, old_v)); vb.vals.insert(vid.to_uint(), new_v); } } diff --git a/src/librustc/util/ppaux.rs b/src/librustc/util/ppaux.rs index aa8c3f8fd1b7e..d99d87231bece 100644 --- a/src/librustc/util/ppaux.rs +++ b/src/librustc/util/ppaux.rs @@ -65,6 +65,9 @@ pub fn explain_region_and_span(cx: ctxt, region: ty::Region) Some(&ast_map::node_block(ref blk)) => { explain_span(cx, "block", blk.span) } + Some(&ast_map::node_callee_scope(expr)) => { + explain_span(cx, "callee", expr.span) + } Some(&ast_map::node_expr(expr)) => { match expr.node { ast::expr_call(*) => explain_span(cx, "call", expr.span), @@ -113,6 +116,8 @@ pub fn explain_region_and_span(cx: ctxt, region: ty::Region) re_static => { (~"the static lifetime", None) } + re_empty => { (~"the empty lifetime", None) } + // I believe these cases should not occur (except when debugging, // perhaps) re_infer(_) | re_bound(_) => { @@ -212,7 +217,8 @@ pub fn region_to_str_space(cx: ctxt, prefix: &str, region: Region) -> ~str { bound_region_to_str_space(cx, prefix, br) } re_infer(ReVar(_)) => prefix.to_str(), - re_static => fmt!("%s'static ", prefix) + re_static => fmt!("%s'static ", prefix), + re_empty => fmt!("%s' ", prefix) } } @@ -740,6 +746,15 @@ impl Repr for ty::vstore { } } +impl Repr for ast_map::path_elt { + fn repr(&self, tcx: ctxt) -> ~str { + match *self { + ast_map::path_mod(id) => id.repr(tcx), + ast_map::path_name(id) => id.repr(tcx) + } + } +} + // Local Variables: // mode: rust // fill-column: 78; diff --git a/src/libstd/arc.rs b/src/libstd/arc.rs index f45fb4e765833..027bf93b4814f 100644 --- a/src/libstd/arc.rs +++ b/src/libstd/arc.rs @@ -419,26 +419,26 @@ pub struct RWReadMode<'self, T> { pub impl<'self, T:Const + Owned> RWWriteMode<'self, T> { /// Access the pre-downgrade RWARC in write mode. - fn write(&self, blk: &fn(x: &mut T) -> U) -> U { + fn write(&mut self, blk: &fn(x: &mut T) -> U) -> U { match *self { RWWriteMode { - data: ref data, + data: &ref mut data, token: ref token, poison: _ } => { do token.write { - blk(&mut **data) + blk(data) } } } } /// Access the pre-downgrade RWARC in write mode with a condvar. - fn write_cond<'x, 'c, U>(&self, + fn write_cond<'x, 'c, U>(&mut self, blk: &fn(x: &'x mut T, c: &'c Condvar) -> U) -> U { match *self { RWWriteMode { - data: ref data, + data: &ref mut data, token: ref token, poison: ref poison } => { @@ -449,7 +449,7 @@ pub impl<'self, T:Const + Owned> RWWriteMode<'self, T> { failed: &mut *poison.failed, cond: cond }; - blk(&mut **data, &cvar) + blk(data, &cvar) } } } diff --git a/src/libstd/bitv.rs b/src/libstd/bitv.rs index 5314c35419cc5..d48d7af354b41 100644 --- a/src/libstd/bitv.rs +++ b/src/libstd/bitv.rs @@ -215,16 +215,16 @@ pub struct Bitv { nbits: uint } -priv impl Bitv { +fn die() -> ! { + fail!(~"Tried to do operation on bit vectors with different sizes"); +} - fn die(&self) -> ! { - fail!(~"Tried to do operation on bit vectors with different sizes"); - } +priv impl Bitv { #[inline(always)] fn do_op(&mut self, op: Op, other: &Bitv) -> bool { if self.nbits != other.nbits { - self.die(); + die(); } match self.rep { Small(ref mut s) => match other.rep { @@ -234,10 +234,10 @@ priv impl Bitv { Assign => s.become(*s1, self.nbits), Difference => s.difference(*s1, self.nbits) }, - Big(_) => self.die() + Big(_) => die() }, Big(ref mut s) => match other.rep { - Small(_) => self.die(), + Small(_) => die(), Big(ref s1) => match op { Union => s.union(*s1, self.nbits), Intersect => s.intersect(*s1, self.nbits), diff --git a/src/libstd/net_tcp.rs b/src/libstd/net_tcp.rs index 764152d6812c5..ec4c025180c7f 100644 --- a/src/libstd/net_tcp.rs +++ b/src/libstd/net_tcp.rs @@ -885,8 +885,8 @@ impl io::Reader for TcpSocketBuf { let ncopy = uint::min(nbuffered, needed); let dst = ptr::mut_offset( vec::raw::to_mut_ptr(buf), count); - let src = ptr::const_offset( - vec::raw::to_const_ptr(self.data.buf), + let src = ptr::offset( + vec::raw::to_ptr(self.data.buf), self.data.buf_off); ptr::copy_memory(dst, src, ncopy); self.data.buf_off += ncopy; @@ -969,7 +969,7 @@ impl io::Reader for TcpSocketBuf { /// Implementation of `io::Reader` trait for a buffered `net::tcp::TcpSocket` impl io::Writer for TcpSocketBuf { - pub fn write(&self, data: &const [u8]) { + pub fn write(&self, data: &[u8]) { unsafe { let socket_data_ptr: *TcpSocketData = &(*((*(self.data)).sock).socket_data); diff --git a/src/libstd/serialize.rs b/src/libstd/serialize.rs index 032df4c819cdd..29d108e3ac2b1 100644 --- a/src/libstd/serialize.rs +++ b/src/libstd/serialize.rs @@ -20,9 +20,6 @@ use core::hashmap::{HashMap, HashSet}; use core::trie::{TrieMap, TrieSet}; use deque::Deque; use dlist::DList; -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] use treemap::{TreeMap, TreeSet}; pub trait Encoder { @@ -730,9 +727,6 @@ impl Decodable for TrieSet { } } -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] impl< E: Encoder, K: Encodable + Eq + TotalOrd, @@ -750,9 +744,6 @@ impl< } } -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] impl< D: Decoder, K: Decodable + Eq + TotalOrd, @@ -771,9 +762,6 @@ impl< } } -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] impl< S: Encoder, T: Encodable + Eq + TotalOrd @@ -789,9 +777,6 @@ impl< } } -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] impl< D: Decoder, T: Decodable + Eq + TotalOrd diff --git a/src/libstd/sort.rs b/src/libstd/sort.rs index 3e6011e80df81..c153d7f22c034 100644 --- a/src/libstd/sort.rs +++ b/src/libstd/sort.rs @@ -61,6 +61,7 @@ pub fn merge_sort(v: &const [T], le: Le) -> ~[T] { } } +#[cfg(stage0)] fn part(arr: &mut [T], left: uint, right: uint, pivot: uint, compare_func: Le) -> uint { arr[pivot] <-> arr[right]; @@ -79,6 +80,23 @@ fn part(arr: &mut [T], left: uint, return storage_index; } +#[cfg(not(stage0))] +fn part(arr: &mut [T], left: uint, + right: uint, pivot: uint, compare_func: Le) -> uint { + arr[pivot] <-> arr[right]; + let mut storage_index: uint = left; + let mut i: uint = left; + while i < right { + if compare_func(&arr[i], &arr[right]) { + arr[i] <-> arr[storage_index]; + storage_index += 1; + } + i += 1; + } + arr[storage_index] <-> arr[right]; + return storage_index; +} + fn qsort(arr: &mut [T], left: uint, right: uint, compare_func: Le) { if right > left { @@ -162,7 +180,8 @@ fn qsort3(arr: &mut [T], left: int, right: int) { */ pub fn quick_sort3(arr: &mut [T]) { if arr.len() <= 1 { return; } - qsort3(arr, 0, (arr.len() - 1) as int); + let len = arr.len() - 1; // FIXME(#5074) nested calls + qsort3(arr, 0, (len - 1) as int); } pub trait Sort { @@ -195,15 +214,20 @@ pub fn tim_sort(array: &mut [T]) { let mut idx = 0; let mut remaining = size; loop { - let arr = vec::mut_slice(array, idx, size); - let mut run_len: uint = count_run_ascending(arr); - - if run_len < min_run { - let force = if remaining <= min_run {remaining} else {min_run}; - let slice = vec::mut_slice(arr, 0, force); - binarysort(slice, run_len); - run_len = force; - } + let run_len: uint = { + // This scope contains the slice `arr` here: + let arr = vec::mut_slice(array, idx, size); + let mut run_len: uint = count_run_ascending(arr); + + if run_len < min_run { + let force = if remaining <= min_run {remaining} else {min_run}; + let slice = vec::mut_slice(arr, 0, force); + binarysort(slice, run_len); + run_len = force; + } + + run_len + }; ms.push_run(idx, run_len); ms.merge_collapse(array); @@ -250,7 +274,7 @@ fn binarysort(array: &mut [T], start: uint) { fn reverse_slice(v: &mut [T], start: uint, end:uint) { let mut i = start; while i < end / 2 { - util::swap(&mut v[i], &mut v[end - i - 1]); + v[i] <-> v[end - i - 1]; i += 1; } } @@ -433,14 +457,17 @@ impl MergeState { self.runs[n+1].len = self.runs[n+2].len; } - let slice = vec::mut_slice(array, b1, b1+l1); - let k = gallop_right(&const array[b2], slice, 0); + let k = { // constrain lifetime of slice below + let slice = vec::mut_slice(array, b1, b1+l1); + gallop_right(&const array[b2], slice, 0) + }; b1 += k; l1 -= k; if l1 != 0 { - let slice = vec::mut_slice(array, b2, b2+l2); - let l2 = gallop_left( - &const array[b1+l1-1],slice,l2-1); + let l2 = { // constrain lifetime of slice below + let slice = vec::mut_slice(array, b2, b2+l2); + gallop_left(&const array[b1+l1-1],slice,l2-1) + }; if l2 > 0 { if l1 <= l2 { self.merge_lo(array, b1, l1, b2, l2); @@ -621,9 +648,11 @@ impl MergeState { loop { assert!(len2 > 1 && len1 != 0); - let tmp_view = vec::mut_slice(array, base1, base1+len1); - count1 = len1 - gallop_right( - &const tmp[c2], tmp_view, len1-1); + { // constrain scope of tmp_view: + let tmp_view = vec::mut_slice (array, base1, base1+len1); + count1 = len1 - gallop_right( + &const tmp[c2], tmp_view, len1-1); + } if count1 != 0 { dest -= count1; c1 -= count1; len1 -= count1; @@ -636,12 +665,11 @@ impl MergeState { if len2 == 1 { break_outer = true; break; } let count2; - { + { // constrain scope of tmp_view let tmp_view = vec::mut_slice(tmp, 0, len2); count2 = len2 - gallop_left(&const array[c1], tmp_view, len2-1); - // Make tmp_view go out of scope to appease borrowck. } if count2 != 0 { diff --git a/src/libstd/std.rc b/src/libstd/std.rc index 40db9f89d0fd7..d9af8b111bba7 100644 --- a/src/libstd/std.rc +++ b/src/libstd/std.rc @@ -71,7 +71,6 @@ pub mod rope; pub mod smallintmap; pub mod sort; pub mod dlist; -#[cfg(not(stage0))] pub mod treemap; // And ... other stuff diff --git a/src/libsyntax/ast_map.rs b/src/libsyntax/ast_map.rs index f9828ad2b9e4e..eb131b17c2f39 100644 --- a/src/libsyntax/ast_map.rs +++ b/src/libsyntax/ast_map.rs @@ -19,6 +19,7 @@ use diagnostic::span_handler; use parse::token::ident_interner; use print::pprust; use visit; +use syntax::parse::token::special_idents; use core::hashmap::HashMap; @@ -89,14 +90,13 @@ pub enum ast_node { node_variant(variant, @item, @path), node_expr(@expr), node_stmt(@stmt), - // Locals are numbered, because the alias analysis needs to know in which - // order they are introduced. - node_arg(arg, uint), - node_local(uint), + node_arg, + node_local(ident), // Destructor for a struct node_dtor(Generics, @struct_dtor, def_id, @path), node_block(blk), node_struct_ctor(@struct_def, @item, @path), + node_callee_scope(@expr) } pub type map = @mut HashMap; @@ -104,7 +104,6 @@ pub type map = @mut HashMap; pub struct Ctx { map: map, path: path, - local_id: uint, diag: @span_handler, } @@ -120,9 +119,8 @@ pub fn mk_ast_map_visitor() -> vt { visit_expr: map_expr, visit_stmt: map_stmt, visit_fn: map_fn, - visit_local: map_local, - visit_arm: map_arm, visit_block: map_block, + visit_pat: map_pat, .. *visit::default_visitor() }); } @@ -131,7 +129,6 @@ pub fn map_crate(diag: @span_handler, c: @crate) -> map { let cx = @mut Ctx { map: @mut HashMap::new(), path: ~[], - local_id: 0u, diag: diag, }; visit::visit_crate(c, cx, mk_ast_map_visitor()); @@ -154,7 +151,6 @@ pub fn map_decoded_item(diag: @span_handler, let cx = @mut Ctx { map: map, path: copy path, - local_id: 0, diag: diag, }; let v = mk_ast_map_visitor(); @@ -189,9 +185,7 @@ pub fn map_fn( v: visit::vt<@mut Ctx> ) { for decl.inputs.each |a| { - cx.map.insert(a.id, - node_arg(/* FIXME (#2543) */ copy *a, cx.local_id)); - cx.local_id += 1u; + cx.map.insert(a.id, node_arg); } match *fk { visit::fk_dtor(generics, ref attrs, self_id, parent_id) => { @@ -222,33 +216,22 @@ pub fn map_block(b: &blk, cx: @mut Ctx, v: visit::vt<@mut Ctx>) { visit::visit_block(b, cx, v); } -pub fn number_pat(cx: @mut Ctx, pat: @pat) { - do ast_util::walk_pat(pat) |p| { - match p.node { - pat_ident(*) => { - cx.map.insert(p.id, node_local(cx.local_id)); - cx.local_id += 1u; - } - _ => () +pub fn map_pat(pat: @pat, cx: @mut Ctx, v: visit::vt<@mut Ctx>) { + match pat.node { + pat_ident(_, path, _) => { + // Note: this is at least *potentially* a pattern... + cx.map.insert(pat.id, node_local(ast_util::path_to_ident(path))); } - }; -} - -pub fn map_local(loc: @local, cx: @mut Ctx, v: visit::vt<@mut Ctx>) { - number_pat(cx, loc.node.pat); - visit::visit_local(loc, cx, v); -} + _ => () + } -pub fn map_arm(arm: &arm, cx: @mut Ctx, v: visit::vt<@mut Ctx>) { - number_pat(cx, arm.pats[0]); - visit::visit_arm(arm, cx, v); + visit::visit_pat(pat, cx, v); } pub fn map_method(impl_did: def_id, impl_path: @path, m: @method, cx: @mut Ctx) { cx.map.insert(m.id, node_method(m, impl_did, impl_path)); - cx.map.insert(m.self_id, node_local(cx.local_id)); - cx.local_id += 1u; + cx.map.insert(m.self_id, node_local(special_idents::self_)); } pub fn map_item(i: @item, cx: @mut Ctx, v: visit::vt<@mut Ctx>) { @@ -317,6 +300,7 @@ pub fn map_item(i: @item, cx: @mut Ctx, v: visit::vt<@mut Ctx>) { } _ => () } + match i.node { item_mod(_) | item_foreign_mod(_) => { cx.path.push(path_mod(i.ident)); @@ -352,6 +336,18 @@ pub fn map_struct_def( pub fn map_expr(ex: @expr, cx: @mut Ctx, v: visit::vt<@mut Ctx>) { cx.map.insert(ex.id, node_expr(ex)); + match ex.node { + // Expressions which are or might be calls: + ast::expr_call(*) | + ast::expr_method_call(*) | + ast::expr_index(*) | + ast::expr_binary(*) | + ast::expr_assign_op(*) | + ast::expr_unary(*) => { + cx.map.insert(ex.callee_id, node_callee_scope(ex)); + } + _ => {} + } visit::visit_expr(ex, cx, v); } @@ -401,15 +397,18 @@ pub fn node_id_to_str(map: map, id: node_id, itr: @ident_interner) -> ~str { Some(&node_expr(expr)) => { fmt!("expr %s (id=%?)", pprust::expr_to_str(expr, itr), id) } + Some(&node_callee_scope(expr)) => { + fmt!("callee_scope %s (id=%?)", pprust::expr_to_str(expr, itr), id) + } Some(&node_stmt(stmt)) => { fmt!("stmt %s (id=%?)", pprust::stmt_to_str(stmt, itr), id) } - Some(&node_arg(_, _)) => { // add more info here + Some(&node_arg) => { fmt!("arg (id=%?)", id) } - Some(&node_local(_)) => { // add more info here - fmt!("local (id=%?)", id) + Some(&node_local(ident)) => { + fmt!("local (id=%?, name=%s)", id, *itr.get(ident)) } Some(&node_dtor(*)) => { // add more info here fmt!("node_dtor (id=%?)", id) diff --git a/src/libsyntax/ast_util.rs b/src/libsyntax/ast_util.rs index 148b713a4f58f..7e24adabdb048 100644 --- a/src/libsyntax/ast_util.rs +++ b/src/libsyntax/ast_util.rs @@ -388,8 +388,20 @@ pub struct id_range { max: node_id, } -pub fn empty(range: id_range) -> bool { - range.min >= range.max +pub impl id_range { + fn max() -> id_range { + id_range {min: int::max_value, + max: int::min_value} + } + + fn empty(&self) -> bool { + self.min >= self.max + } + + fn add(&mut self, id: node_id) { + self.min = int::min(self.min, id); + self.max = int::max(self.max, id + 1); + } } pub fn id_visitor(vfn: @fn(node_id)) -> visit::vt<()> { @@ -493,13 +505,11 @@ pub fn visit_ids_for_inlined_item(item: &inlined_item, vfn: @fn(node_id)) { } pub fn compute_id_range(visit_ids_fn: &fn(@fn(node_id))) -> id_range { - let min = @mut int::max_value; - let max = @mut int::min_value; + let result = @mut id_range::max(); do visit_ids_fn |id| { - *min = int::min(*min, id); - *max = int::max(*max, id + 1); + result.add(id); } - id_range { min: *min, max: *max } + *result } pub fn compute_id_range_for_inlined_item(item: &inlined_item) -> id_range { diff --git a/src/libsyntax/codemap.rs b/src/libsyntax/codemap.rs index 1194506a8876f..7facc181effec 100644 --- a/src/libsyntax/codemap.rs +++ b/src/libsyntax/codemap.rs @@ -246,7 +246,7 @@ pub impl FileMap { // the new charpos must be > the last one (or it's the first one). let lines = &mut *self.lines; assert!((lines.len() == 0) || (lines[lines.len() - 1] < pos)); - self.lines.push(pos); + lines.push(pos); } // get a line from the list of pre-computed line-beginnings @@ -308,7 +308,7 @@ pub impl CodeMap { multibyte_chars: @mut ~[], }; - self.files.push(filemap); + files.push(filemap); return filemap; } diff --git a/src/libsyntax/ext/base.rs b/src/libsyntax/ext/base.rs index 5bad9ecae3ed7..7d058f22e4c45 100644 --- a/src/libsyntax/ext/base.rs +++ b/src/libsyntax/ext/base.rs @@ -210,29 +210,29 @@ pub fn syntax_expander_table() -> SyntaxEnv { // when a macro expansion occurs, the resulting nodes have the backtrace() // -> expn_info of their expansion context stored into their span. pub trait ext_ctxt { - fn codemap(@mut self) -> @CodeMap; - fn parse_sess(@mut self) -> @mut parse::ParseSess; - fn cfg(@mut self) -> ast::crate_cfg; - fn call_site(@mut self) -> span; - fn print_backtrace(@mut self); - fn backtrace(@mut self) -> Option<@ExpnInfo>; - fn mod_push(@mut self, mod_name: ast::ident); - fn mod_pop(@mut self); - fn mod_path(@mut self) -> ~[ast::ident]; - fn bt_push(@mut self, ei: codemap::ExpnInfo); - fn bt_pop(@mut self); - fn span_fatal(@mut self, sp: span, msg: &str) -> !; - fn span_err(@mut self, sp: span, msg: &str); - fn span_warn(@mut self, sp: span, msg: &str); - fn span_unimpl(@mut self, sp: span, msg: &str) -> !; - fn span_bug(@mut self, sp: span, msg: &str) -> !; - fn bug(@mut self, msg: &str) -> !; - fn next_id(@mut self) -> ast::node_id; - fn trace_macros(@mut self) -> bool; - fn set_trace_macros(@mut self, x: bool); + fn codemap(&self) -> @CodeMap; + fn parse_sess(&self) -> @mut parse::ParseSess; + fn cfg(&self) -> ast::crate_cfg; + fn call_site(&self) -> span; + fn print_backtrace(&self); + fn backtrace(&self) -> Option<@ExpnInfo>; + fn mod_push(&self, mod_name: ast::ident); + fn mod_pop(&self); + fn mod_path(&self) -> ~[ast::ident]; + fn bt_push(&self, ei: codemap::ExpnInfo); + fn bt_pop(&self); + fn span_fatal(&self, sp: span, msg: &str) -> !; + fn span_err(&self, sp: span, msg: &str); + fn span_warn(&self, sp: span, msg: &str); + fn span_unimpl(&self, sp: span, msg: &str) -> !; + fn span_bug(&self, sp: span, msg: &str) -> !; + fn bug(&self, msg: &str) -> !; + fn next_id(&self) -> ast::node_id; + fn trace_macros(&self) -> bool; + fn set_trace_macros(&self, x: bool); /* for unhygienic identifier transformation */ - fn str_of(@mut self, id: ast::ident) -> ~str; - fn ident_of(@mut self, st: ~str) -> ast::ident; + fn str_of(&self, id: ast::ident) -> ~str; + fn ident_of(&self, st: ~str) -> ast::ident; } pub fn mk_ctxt(parse_sess: @mut parse::ParseSess, cfg: ast::crate_cfg) @@ -241,25 +241,31 @@ pub fn mk_ctxt(parse_sess: @mut parse::ParseSess, cfg: ast::crate_cfg) parse_sess: @mut parse::ParseSess, cfg: ast::crate_cfg, backtrace: @mut Option<@ExpnInfo>, - mod_path: ~[ast::ident], - trace_mac: bool + + // These two @mut's should really not be here, + // but the self types for CtxtRepr are all wrong + // and there are bugs in the code for object + // types that make this hard to get right at the + // moment. - nmatsakis + mod_path: @mut ~[ast::ident], + trace_mac: @mut bool } impl ext_ctxt for CtxtRepr { - fn codemap(@mut self) -> @CodeMap { self.parse_sess.cm } - fn parse_sess(@mut self) -> @mut parse::ParseSess { self.parse_sess } - fn cfg(@mut self) -> ast::crate_cfg { copy self.cfg } - fn call_site(@mut self) -> span { + fn codemap(&self) -> @CodeMap { self.parse_sess.cm } + fn parse_sess(&self) -> @mut parse::ParseSess { self.parse_sess } + fn cfg(&self) -> ast::crate_cfg { copy self.cfg } + fn call_site(&self) -> span { match *self.backtrace { Some(@ExpandedFrom(CallInfo {call_site: cs, _})) => cs, None => self.bug(~"missing top span") } } - fn print_backtrace(@mut self) { } - fn backtrace(@mut self) -> Option<@ExpnInfo> { *self.backtrace } - fn mod_push(@mut self, i: ast::ident) { self.mod_path.push(i); } - fn mod_pop(@mut self) { self.mod_path.pop(); } - fn mod_path(@mut self) -> ~[ast::ident] { copy self.mod_path } - fn bt_push(@mut self, ei: codemap::ExpnInfo) { + fn print_backtrace(&self) { } + fn backtrace(&self) -> Option<@ExpnInfo> { *self.backtrace } + fn mod_push(&self, i: ast::ident) { self.mod_path.push(i); } + fn mod_pop(&self) { self.mod_path.pop(); } + fn mod_path(&self) -> ~[ast::ident] { copy *self.mod_path } + fn bt_push(&self, ei: codemap::ExpnInfo) { match ei { ExpandedFrom(CallInfo {call_site: cs, callee: ref callee}) => { *self.backtrace = @@ -270,7 +276,7 @@ pub fn mk_ctxt(parse_sess: @mut parse::ParseSess, cfg: ast::crate_cfg) } } } - fn bt_pop(@mut self) { + fn bt_pop(&self) { match *self.backtrace { Some(@ExpandedFrom(CallInfo { call_site: span {expn_info: prev, _}, _ @@ -280,52 +286,52 @@ pub fn mk_ctxt(parse_sess: @mut parse::ParseSess, cfg: ast::crate_cfg) _ => self.bug(~"tried to pop without a push") } } - fn span_fatal(@mut self, sp: span, msg: &str) -> ! { + fn span_fatal(&self, sp: span, msg: &str) -> ! { self.print_backtrace(); self.parse_sess.span_diagnostic.span_fatal(sp, msg); } - fn span_err(@mut self, sp: span, msg: &str) { + fn span_err(&self, sp: span, msg: &str) { self.print_backtrace(); self.parse_sess.span_diagnostic.span_err(sp, msg); } - fn span_warn(@mut self, sp: span, msg: &str) { + fn span_warn(&self, sp: span, msg: &str) { self.print_backtrace(); self.parse_sess.span_diagnostic.span_warn(sp, msg); } - fn span_unimpl(@mut self, sp: span, msg: &str) -> ! { + fn span_unimpl(&self, sp: span, msg: &str) -> ! { self.print_backtrace(); self.parse_sess.span_diagnostic.span_unimpl(sp, msg); } - fn span_bug(@mut self, sp: span, msg: &str) -> ! { + fn span_bug(&self, sp: span, msg: &str) -> ! { self.print_backtrace(); self.parse_sess.span_diagnostic.span_bug(sp, msg); } - fn bug(@mut self, msg: &str) -> ! { + fn bug(&self, msg: &str) -> ! { self.print_backtrace(); self.parse_sess.span_diagnostic.handler().bug(msg); } - fn next_id(@mut self) -> ast::node_id { + fn next_id(&self) -> ast::node_id { return parse::next_node_id(self.parse_sess); } - fn trace_macros(@mut self) -> bool { - self.trace_mac + fn trace_macros(&self) -> bool { + *self.trace_mac } - fn set_trace_macros(@mut self, x: bool) { - self.trace_mac = x + fn set_trace_macros(&self, x: bool) { + *self.trace_mac = x } - fn str_of(@mut self, id: ast::ident) -> ~str { + fn str_of(&self, id: ast::ident) -> ~str { copy *self.parse_sess.interner.get(id) } - fn ident_of(@mut self, st: ~str) -> ast::ident { + fn ident_of(&self, st: ~str) -> ast::ident { self.parse_sess.interner.intern(@/*bad*/ copy st) } } - let imp: @mut CtxtRepr = @mut CtxtRepr { + let imp: @CtxtRepr = @CtxtRepr { parse_sess: parse_sess, cfg: cfg, backtrace: @mut None, - mod_path: ~[], - trace_mac: false + mod_path: @mut ~[], + trace_mac: @mut false }; ((imp) as @ext_ctxt) } diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs index fde5a2594226e..841f64e0b0502 100644 --- a/src/libsyntax/ext/expand.rs +++ b/src/libsyntax/ext/expand.rs @@ -27,6 +27,7 @@ pub fn expand_expr(extsbox: @mut SyntaxEnv, fld: @ast_fold, orig: @fn(&expr_, span, @ast_fold) -> (expr_, span)) -> (expr_, span) { + let mut cx = cx; match *e { // expr_mac should really be expr_ext or something; it's the // entry-point for all syntax extensions. @@ -112,6 +113,8 @@ pub fn expand_mod_items(extsbox: @mut SyntaxEnv, fld: @ast_fold, orig: @fn(&ast::_mod, @ast_fold) -> ast::_mod) -> ast::_mod { + let mut cx = cx; + // Fold the contents first: let module_ = orig(module_, fld); diff --git a/src/libsyntax/ext/pipes/liveness.rs b/src/libsyntax/ext/pipes/liveness.rs index 4597dab89cbfe..7843db5578929 100644 --- a/src/libsyntax/ext/pipes/liveness.rs +++ b/src/libsyntax/ext/pipes/liveness.rs @@ -38,11 +38,11 @@ updating the states using rule (2) until there are no changes. */ use ext::base::ext_ctxt; -use ext::pipes::proto::protocol; +use ext::pipes::proto::{protocol_}; use std::bitv::Bitv; -pub fn analyze(proto: protocol, _cx: @ext_ctxt) { +pub fn analyze(proto: &mut protocol_, _cx: @ext_ctxt) { debug!("initializing colive analysis"); let num_states = proto.num_states(); let mut colive = do (copy proto.states).map_to_vec |state| { diff --git a/src/libsyntax/ext/pipes/proto.rs b/src/libsyntax/ext/pipes/proto.rs index 79072a2f577ff..ffb55ee50d992 100644 --- a/src/libsyntax/ext/pipes/proto.rs +++ b/src/libsyntax/ext/pipes/proto.rs @@ -138,26 +138,26 @@ pub struct protocol_ { pub impl protocol_ { /// Get a state. - fn get_state(&mut self, name: ~str) -> state { + fn get_state(&self, name: ~str) -> state { self.states.find(|i| i.name == name).get() } - fn get_state_by_id(&mut self, id: uint) -> state { self.states[id] } + fn get_state_by_id(&self, id: uint) -> state { self.states[id] } - fn has_state(&mut self, name: ~str) -> bool { + fn has_state(&self, name: ~str) -> bool { self.states.find(|i| i.name == name).is_some() } - fn filename(&mut self) -> ~str { + fn filename(&self) -> ~str { ~"proto://" + self.name } - fn num_states(&mut self) -> uint { + fn num_states(&self) -> uint { let states = &mut *self.states; states.len() } - fn has_ty_params(&mut self) -> bool { + fn has_ty_params(&self) -> bool { for self.states.each |s| { if s.generics.ty_params.len() > 0 { return true; @@ -165,7 +165,7 @@ pub impl protocol_ { } false } - fn is_bounded(&mut self) -> bool { + fn is_bounded(&self) -> bool { let bounded = self.bounded.get(); bounded } @@ -179,7 +179,7 @@ pub impl protocol_ { generics: ast::Generics) -> state { let messages = @mut ~[]; - let states = &*self.states; + let states = &mut *self.states; let state = @state_ { id: states.len(), @@ -192,7 +192,7 @@ pub impl protocol_ { proto: self }; - self.states.push(state); + states.push(state); state } } diff --git a/src/libsyntax/print/pp.rs b/src/libsyntax/print/pp.rs index e2ad5becb123b..c1acee8e2cd96 100644 --- a/src/libsyntax/print/pp.rs +++ b/src/libsyntax/print/pp.rs @@ -491,9 +491,9 @@ pub impl Printer { } END => { debug!("print END -> pop END"); - let print_stack = &*self.print_stack; + let print_stack = &mut *self.print_stack; assert!((print_stack.len() != 0u)); - self.print_stack.pop(); + print_stack.pop(); } BREAK(b) => { let top = self.get_top(); diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index d5645ada9294a..ff8259e899699 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -72,6 +72,12 @@ pub fn end(s: @ps) { } pub fn rust_printer(writer: @io::Writer, intr: @ident_interner) -> @ps { + return rust_printer_annotated(writer, intr, no_ann()); +} + +pub fn rust_printer_annotated(writer: @io::Writer, + intr: @ident_interner, + ann: pp_ann) -> @ps { return @ps { s: pp::mk_printer(writer, default_columns), cm: None::<@CodeMap>, @@ -83,7 +89,7 @@ pub fn rust_printer(writer: @io::Writer, intr: @ident_interner) -> @ps { cur_lit: 0 }, boxes: @mut ~[], - ann: no_ann() + ann: ann }; } diff --git a/src/libsyntax/util/interner.rs b/src/libsyntax/util/interner.rs index 9ab7d4bc443ef..e3a8727762218 100644 --- a/src/libsyntax/util/interner.rs +++ b/src/libsyntax/util/interner.rs @@ -44,10 +44,10 @@ pub impl Interner { None => (), } - let vect = &*self.vect; + let vect = &mut *self.vect; let new_idx = vect.len(); self.map.insert(val, new_idx); - self.vect.push(val); + vect.push(val); new_idx } diff --git a/src/libsyntax/visit.rs b/src/libsyntax/visit.rs index 80df8fb91a515..a42f640a175a7 100644 --- a/src/libsyntax/visit.rs +++ b/src/libsyntax/visit.rs @@ -22,6 +22,12 @@ use opt_vec::OptVec; // children (potentially passing in different contexts to each), call // visit::visit_* to apply the default traversal algorithm (again, it can // override the context), or prevent deeper traversal by doing nothing. +// +// Note: it is an important invariant that the default visitor walks the body +// of a function in "execution order" (more concretely, reverse post-order +// with respect to the CFG implied by the AST), meaning that if AST node A may +// execute before AST node B, then A is visited first. The borrow checker in +// particular relies on this property. // Our typesystem doesn't do circular types, so the visitor record can not // hold functions that take visitors. A vt enum is used to break the cycle. diff --git a/src/test/compile-fail/access-mode-in-closures.rs b/src/test/compile-fail/access-mode-in-closures.rs index f6b9a82ec676c..61fb754f7619f 100644 --- a/src/test/compile-fail/access-mode-in-closures.rs +++ b/src/test/compile-fail/access-mode-in-closures.rs @@ -16,6 +16,6 @@ fn unpack(_unpack: &fn(v: &sty) -> ~[int]) {} fn main() { let _foo = unpack(|s| { // Test that `s` is moved here. - match *s { sty(v) => v } //~ ERROR moving out of dereference of immutable & pointer + match *s { sty(v) => v } //~ ERROR cannot move out }); } diff --git a/src/test/compile-fail/arc-rw-read-mode-shouldnt-escape.rs b/src/test/compile-fail/arc-rw-read-mode-shouldnt-escape.rs index e2dd13a4405d1..85f60f34bdb80 100644 --- a/src/test/compile-fail/arc-rw-read-mode-shouldnt-escape.rs +++ b/src/test/compile-fail/arc-rw-read-mode-shouldnt-escape.rs @@ -17,6 +17,7 @@ fn main() { y = Some(x.downgrade(write_mode)); //~^ ERROR cannot infer an appropriate lifetime } + y.get(); // Adding this line causes a method unification failure instead // do (&option::unwrap(y)).read |state| { assert!(*state == 1); } } diff --git a/src/test/compile-fail/arc-rw-write-mode-shouldnt-escape.rs b/src/test/compile-fail/arc-rw-write-mode-shouldnt-escape.rs index 78a50a4f21242..c7ae6a0dc6c52 100644 --- a/src/test/compile-fail/arc-rw-write-mode-shouldnt-escape.rs +++ b/src/test/compile-fail/arc-rw-write-mode-shouldnt-escape.rs @@ -17,6 +17,7 @@ fn main() { do x.write_downgrade |write_mode| { y = Some(write_mode); } + y.get(); // Adding this line causes a method unification failure instead // do (&option::unwrap(y)).write |state| { assert!(*state == 1); } } diff --git a/src/test/compile-fail/attempted-access-non-fatal.rs b/src/test/compile-fail/attempted-access-non-fatal.rs index ba15abc3f8965..1d9249bc17b1f 100644 --- a/src/test/compile-fail/attempted-access-non-fatal.rs +++ b/src/test/compile-fail/attempted-access-non-fatal.rs @@ -11,6 +11,6 @@ // Check that bogus field access is non-fatal fn main() { let x = 0; - debug!(x.foo); //~ ERROR attempted access of field - debug!(x.bar); //~ ERROR attempted access of field + let _ = x.foo; //~ ERROR attempted access of field + let _ = x.bar; //~ ERROR attempted access of field } diff --git a/src/test/compile-fail/borrowck-addr-of-upvar.rs b/src/test/compile-fail/borrowck-addr-of-upvar.rs index 640bc887731f9..83baedc789277 100644 --- a/src/test/compile-fail/borrowck-addr-of-upvar.rs +++ b/src/test/compile-fail/borrowck-addr-of-upvar.rs @@ -9,12 +9,12 @@ // except according to those terms. fn foo(x: @int) -> @fn() -> &'static int { - let result: @fn() -> &'static int = || &*x; //~ ERROR illegal borrow + let result: @fn() -> &'static int = || &*x; //~ ERROR cannot root result } fn bar(x: @int) -> @fn() -> &int { - let result: @fn() -> &int = || &*x; //~ ERROR illegal borrow + let result: @fn() -> &int = || &*x; //~ ERROR cannot root result } diff --git a/src/test/compile-fail/borrowck-assign-comp-idx.rs b/src/test/compile-fail/borrowck-assign-comp-idx.rs index 25b56abb5ba00..d447d9e4a2288 100644 --- a/src/test/compile-fail/borrowck-assign-comp-idx.rs +++ b/src/test/compile-fail/borrowck-assign-comp-idx.rs @@ -17,9 +17,11 @@ fn a() { let mut p = ~[1]; // Create an immutable pointer into p's contents: - let _q: &int = &p[0]; //~ NOTE loan of mutable vec content granted here + let q: &int = &p[0]; - p[0] = 5; //~ ERROR assigning to mutable vec content prohibited due to outstanding loan + p[0] = 5; //~ ERROR cannot assign + + debug!("%d", *q); } fn borrow(_x: &[int], _f: &fn()) {} @@ -30,8 +32,8 @@ fn b() { let mut p = ~[1]; - do borrow(p) { //~ NOTE loan of mutable vec content granted here - p[0] = 5; //~ ERROR assigning to mutable vec content prohibited due to outstanding loan + do borrow(p) { + p[0] = 5; //~ ERROR cannot assign to } } diff --git a/src/test/compile-fail/borrowck-assign-comp.rs b/src/test/compile-fail/borrowck-assign-comp.rs index 283f04a283f4e..b8c0cbe97433e 100644 --- a/src/test/compile-fail/borrowck-assign-comp.rs +++ b/src/test/compile-fail/borrowck-assign-comp.rs @@ -12,12 +12,13 @@ struct point { x: int, y: int } fn a() { let mut p = point {x: 3, y: 4}; - let _q = &p; //~ NOTE loan of mutable local variable granted here + let q = &p; // This assignment is illegal because the field x is not // inherently mutable; since `p` was made immutable, `p.x` is now // immutable. Otherwise the type of &_q.x (&int) would be wrong. - p.x = 5; //~ ERROR assigning to mutable field prohibited due to outstanding loan + p.x = 5; //~ ERROR cannot assign to `p.x` + q.x; } fn c() { @@ -25,9 +26,10 @@ fn c() { // and then try to overwrite `p` as a whole. let mut p = point {x: 3, y: 4}; - let _q = &p.y; //~ NOTE loan of mutable local variable granted here - p = point {x: 5, y: 7};//~ ERROR assigning to mutable local variable prohibited due to outstanding loan - copy p; + let q = &p.y; + p = point {x: 5, y: 7};//~ ERROR cannot assign to `p` + p.x; // silence warning + *q; // stretch loan } fn d() { @@ -35,9 +37,9 @@ fn d() { // address of a subcomponent and then modify that subcomponent: let mut p = point {x: 3, y: 4}; - let _q = &p.y; //~ NOTE loan of mutable field granted here - p.y = 5; //~ ERROR assigning to mutable field prohibited due to outstanding loan - copy p; + let q = &p.y; + p.y = 5; //~ ERROR cannot assign to `p.y` + *q; } fn main() { diff --git a/src/test/compile-fail/borrowck-assign-to-constants.rs b/src/test/compile-fail/borrowck-assign-to-constants.rs index 0d65aacb65b7a..f0dc28b736d16 100644 --- a/src/test/compile-fail/borrowck-assign-to-constants.rs +++ b/src/test/compile-fail/borrowck-assign-to-constants.rs @@ -12,6 +12,6 @@ static foo: int = 5; fn main() { // assigning to various global constants - None = Some(3); //~ ERROR assigning to static item - foo = 6; //~ ERROR assigning to static item + None = Some(3); //~ ERROR cannot assign to immutable static item + foo = 6; //~ ERROR cannot assign to immutable static item } diff --git a/src/test/compile-fail/borrowck-assign-to-enum.rs b/src/test/compile-fail/borrowck-assign-to-enum.rs index a35d88a76f393..fcaba0adc46eb 100644 --- a/src/test/compile-fail/borrowck-assign-to-enum.rs +++ b/src/test/compile-fail/borrowck-assign-to-enum.rs @@ -12,5 +12,5 @@ struct foo(int); fn main() { let x = foo(3); - *x = 4; //~ ERROR assigning to anonymous field + *x = 4; //~ ERROR cannot assign to immutable anonymous field } diff --git a/src/test/compile-fail/borrowck-assign-to-subfield.rs b/src/test/compile-fail/borrowck-assign-to-subfield.rs index 610802ca68b31..2ee5ecfcb9ce0 100644 --- a/src/test/compile-fail/borrowck-assign-to-subfield.rs +++ b/src/test/compile-fail/borrowck-assign-to-subfield.rs @@ -34,6 +34,6 @@ fn main() { // in these cases we pass through a box, so the mut // of the box is dominant - p.x.a = 2; //~ ERROR assigning to immutable field + p.x.a = 2; //~ ERROR cannot assign to immutable field p.z.a = 2; } diff --git a/src/test/compile-fail/auto-ref-borrowck-failure.rs b/src/test/compile-fail/borrowck-auto-mut-ref-to-immut-var.rs similarity index 81% rename from src/test/compile-fail/auto-ref-borrowck-failure.rs rename to src/test/compile-fail/borrowck-auto-mut-ref-to-immut-var.rs index 90b9b44cfbea3..ce95ee94f4252 100644 --- a/src/test/compile-fail/auto-ref-borrowck-failure.rs +++ b/src/test/compile-fail/borrowck-auto-mut-ref-to-immut-var.rs @@ -14,18 +14,14 @@ struct Foo { x: int } -trait Stuff { - fn printme(self); -} - -impl<'self> Stuff for &'self mut Foo { - fn printme(self) { +pub impl Foo { + fn printme(&mut self) { io::println(fmt!("%d", self.x)); } } fn main() { let x = Foo { x: 3 }; - x.printme(); //~ ERROR illegal borrow + x.printme(); //~ ERROR cannot borrow } diff --git a/src/test/compile-fail/borrowck-autoref-3261.rs b/src/test/compile-fail/borrowck-autoref-3261.rs index c95b93445adca..192fe669f57ae 100644 --- a/src/test/compile-fail/borrowck-autoref-3261.rs +++ b/src/test/compile-fail/borrowck-autoref-3261.rs @@ -17,10 +17,10 @@ pub impl X { } fn main() { let mut x = X(Right(main)); - do (&mut x).with |opt| { //~ ERROR illegal borrow + do (&mut x).with |opt| { match opt { &Right(ref f) => { - x = X(Left((0,0))); //~ ERROR assigning to captured outer mutable variable + x = X(Left((0,0))); //~ ERROR cannot assign to `x` (*f)() }, _ => fail!() diff --git a/src/test/compile-fail/borrowck-bad-nested-calls-free.rs b/src/test/compile-fail/borrowck-bad-nested-calls-free.rs new file mode 100644 index 0000000000000..ff1ec38ad6406 --- /dev/null +++ b/src/test/compile-fail/borrowck-bad-nested-calls-free.rs @@ -0,0 +1,43 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Test that we detect nested calls that could free pointers evaluated +// for earlier arguments. + +fn rewrite(v: &mut ~uint) -> uint { + *v = ~22; + **v +} + +fn add(v: &uint, w: uint) -> uint { + *v + w +} + +fn implicit() { + let mut a = ~1; + + // Note the danger here: + // + // the pointer for the first argument has already been + // evaluated, but it gets freed when evaluating the second + // argument! + add( + a, + rewrite(&mut a)); //~ ERROR cannot borrow +} + +fn explicit() { + let mut a = ~1; + add( + &*a, + rewrite(&mut a)); //~ ERROR cannot borrow +} + +fn main() {} \ No newline at end of file diff --git a/src/test/compile-fail/borrowck-bad-nested-calls-move.rs b/src/test/compile-fail/borrowck-bad-nested-calls-move.rs new file mode 100644 index 0000000000000..0adf486b8b3ab --- /dev/null +++ b/src/test/compile-fail/borrowck-bad-nested-calls-move.rs @@ -0,0 +1,43 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Test that we detect nested calls that could free pointers evaluated +// for earlier arguments. + +fn rewrite(v: &mut ~uint) -> uint { + *v = ~22; + **v +} + +fn add(v: &uint, w: ~uint) -> uint { + *v + *w +} + +fn implicit() { + let mut a = ~1; + + // Note the danger here: + // + // the pointer for the first argument has already been + // evaluated, but it gets moved when evaluating the second + // argument! + add( + a, + a); //~ ERROR cannot move +} + +fn explicit() { + let mut a = ~1; + add( + &*a, + a); //~ ERROR cannot move +} + +fn main() {} \ No newline at end of file diff --git a/src/test/compile-fail/borrowck-borrow-from-owned-ptr.rs b/src/test/compile-fail/borrowck-borrow-from-owned-ptr.rs index 005908f86d87d..1051c5829ec38 100644 --- a/src/test/compile-fail/borrowck-borrow-from-owned-ptr.rs +++ b/src/test/compile-fail/borrowck-borrow-from-owned-ptr.rs @@ -22,32 +22,37 @@ fn make_foo() -> ~Foo { fail!() } fn borrow_same_field_twice_mut_mut() { let mut foo = make_foo(); - let _bar1 = &mut foo.bar1; - let _bar2 = &mut foo.bar1; //~ ERROR conflicts with prior loan + let bar1 = &mut foo.bar1; + let _bar2 = &mut foo.bar1; //~ ERROR cannot borrow + *bar1; } fn borrow_same_field_twice_mut_imm() { let mut foo = make_foo(); - let _bar1 = &mut foo.bar1; - let _bar2 = &foo.bar1; //~ ERROR conflicts with prior loan + let bar1 = &mut foo.bar1; + let _bar2 = &foo.bar1; //~ ERROR cannot borrow + *bar1; } fn borrow_same_field_twice_imm_mut() { let mut foo = make_foo(); - let _bar1 = &foo.bar1; - let _bar2 = &mut foo.bar1; //~ ERROR conflicts with prior loan + let bar1 = &foo.bar1; + let _bar2 = &mut foo.bar1; //~ ERROR cannot borrow + *bar1; } fn borrow_same_field_twice_imm_imm() { let mut foo = make_foo(); - let _bar1 = &foo.bar1; + let bar1 = &foo.bar1; let _bar2 = &foo.bar1; + *bar1; } -fn borrow_both_mut() { +fn borrow_both_fields_mut() { let mut foo = make_foo(); - let _bar1 = &mut foo.bar1; + let bar1 = &mut foo.bar1; let _bar2 = &mut foo.bar2; + *bar1; } fn borrow_both_mut_pattern() { @@ -59,66 +64,77 @@ fn borrow_both_mut_pattern() { fn borrow_var_and_pattern() { let mut foo = make_foo(); - let _bar1 = &mut foo.bar1; + let bar1 = &mut foo.bar1; match *foo { Foo { bar1: ref mut _bar1, bar2: _ } => {} - //~^ ERROR conflicts with prior loan + //~^ ERROR cannot borrow } + *bar1; } fn borrow_mut_and_base_imm() { let mut foo = make_foo(); - let _bar1 = &mut foo.bar1.int1; - let _foo1 = &foo.bar1; //~ ERROR conflicts with prior loan - let _foo2 = &*foo; //~ ERROR conflicts with prior loan + let bar1 = &mut foo.bar1.int1; + let _foo1 = &foo.bar1; //~ ERROR cannot borrow + let _foo2 = &*foo; //~ ERROR cannot borrow + *bar1; } fn borrow_mut_and_base_mut() { let mut foo = make_foo(); - let _bar1 = &mut foo.bar1.int1; - let _foo1 = &mut foo.bar1; //~ ERROR conflicts with prior loan + let bar1 = &mut foo.bar1.int1; + let _foo1 = &mut foo.bar1; //~ ERROR cannot borrow + *bar1; } fn borrow_mut_and_base_mut2() { let mut foo = make_foo(); - let _bar1 = &mut foo.bar1.int1; - let _foo2 = &mut *foo; //~ ERROR conflicts with prior loan + let bar1 = &mut foo.bar1.int1; + let _foo2 = &mut *foo; //~ ERROR cannot borrow + *bar1; } fn borrow_imm_and_base_mut() { let mut foo = make_foo(); - let _bar1 = &foo.bar1.int1; - let _foo1 = &mut foo.bar1; //~ ERROR conflicts with prior loan + let bar1 = &foo.bar1.int1; + let _foo1 = &mut foo.bar1; //~ ERROR cannot borrow + *bar1; } fn borrow_imm_and_base_mut2() { let mut foo = make_foo(); - let _bar1 = &foo.bar1.int1; - let _foo2 = &mut *foo; //~ ERROR conflicts with prior loan + let bar1 = &foo.bar1.int1; + let _foo2 = &mut *foo; //~ ERROR cannot borrow + *bar1; } fn borrow_imm_and_base_imm() { let mut foo = make_foo(); - let _bar1 = &foo.bar1.int1; + let bar1 = &foo.bar1.int1; let _foo1 = &foo.bar1; let _foo2 = &*foo; + *bar1; } fn borrow_mut_and_imm() { let mut foo = make_foo(); - let _bar1 = &mut foo.bar1; + let bar1 = &mut foo.bar1; let _foo1 = &foo.bar2; + *bar1; } fn borrow_mut_from_imm() { let foo = make_foo(); - let _bar1 = &mut foo.bar1; //~ ERROR illegal borrow + let bar1 = &mut foo.bar1; //~ ERROR cannot borrow + *bar1; } fn borrow_long_path_both_mut() { let mut foo = make_foo(); - let _bar1 = &mut foo.bar1.int1; - let _foo1 = &mut foo.bar2.int2; + let bar1 = &mut foo.bar1.int1; + let foo1 = &mut foo.bar2.int2; + *bar1; + *foo1; } fn main() {} diff --git a/src/test/compile-fail/borrowck-borrow-from-stack-variable.rs b/src/test/compile-fail/borrowck-borrow-from-stack-variable.rs index 035e293bc36b6..cdcf50c906e36 100644 --- a/src/test/compile-fail/borrowck-borrow-from-stack-variable.rs +++ b/src/test/compile-fail/borrowck-borrow-from-stack-variable.rs @@ -22,32 +22,37 @@ fn make_foo() -> Foo { fail!() } fn borrow_same_field_twice_mut_mut() { let mut foo = make_foo(); - let _bar1 = &mut foo.bar1; - let _bar2 = &mut foo.bar1; //~ ERROR conflicts with prior loan + let bar1 = &mut foo.bar1; + let _bar2 = &mut foo.bar1; //~ ERROR cannot borrow + *bar1; } fn borrow_same_field_twice_mut_imm() { let mut foo = make_foo(); - let _bar1 = &mut foo.bar1; - let _bar2 = &foo.bar1; //~ ERROR conflicts with prior loan + let bar1 = &mut foo.bar1; + let _bar2 = &foo.bar1; //~ ERROR cannot borrow + *bar1; } fn borrow_same_field_twice_imm_mut() { let mut foo = make_foo(); - let _bar1 = &foo.bar1; - let _bar2 = &mut foo.bar1; //~ ERROR conflicts with prior loan + let bar1 = &foo.bar1; + let _bar2 = &mut foo.bar1; //~ ERROR cannot borrow + *bar1; } fn borrow_same_field_twice_imm_imm() { let mut foo = make_foo(); - let _bar1 = &foo.bar1; + let bar1 = &foo.bar1; let _bar2 = &foo.bar1; + *bar1; } fn borrow_both_mut() { let mut foo = make_foo(); - let _bar1 = &mut foo.bar1; + let bar1 = &mut foo.bar1; let _bar2 = &mut foo.bar2; + *bar1; } fn borrow_both_mut_pattern() { @@ -59,66 +64,76 @@ fn borrow_both_mut_pattern() { fn borrow_var_and_pattern() { let mut foo = make_foo(); - let _bar1 = &mut foo.bar1; + let bar1 = &mut foo.bar1; match foo { - Foo { bar1: ref mut _bar1, bar2: _ } => {} - //~^ ERROR conflicts with prior loan + Foo { bar1: ref mut _bar1, bar2: _ } => {} // + //~^ ERROR cannot borrow } + *bar1; } fn borrow_mut_and_base_imm() { let mut foo = make_foo(); - let _bar1 = &mut foo.bar1.int1; - let _foo1 = &foo.bar1; //~ ERROR conflicts with prior loan - let _foo2 = &foo; //~ ERROR conflicts with prior loan + let bar1 = &mut foo.bar1.int1; + let _foo1 = &foo.bar1; //~ ERROR cannot borrow + let _foo2 = &foo; //~ ERROR cannot borrow + *bar1; } fn borrow_mut_and_base_mut() { let mut foo = make_foo(); - let _bar1 = &mut foo.bar1.int1; - let _foo1 = &mut foo.bar1; //~ ERROR conflicts with prior loan + let bar1 = &mut foo.bar1.int1; + let _foo1 = &mut foo.bar1; //~ ERROR cannot borrow + *bar1; } fn borrow_mut_and_base_mut2() { let mut foo = make_foo(); - let _bar1 = &mut foo.bar1.int1; - let _foo2 = &mut foo; //~ ERROR conflicts with prior loan + let bar1 = &mut foo.bar1.int1; + let _foo2 = &mut foo; //~ ERROR cannot borrow + *bar1; } fn borrow_imm_and_base_mut() { let mut foo = make_foo(); - let _bar1 = &foo.bar1.int1; - let _foo1 = &mut foo.bar1; //~ ERROR conflicts with prior loan + let bar1 = &foo.bar1.int1; + let _foo1 = &mut foo.bar1; //~ ERROR cannot borrow + *bar1; } fn borrow_imm_and_base_mut2() { let mut foo = make_foo(); - let _bar1 = &foo.bar1.int1; - let _foo2 = &mut foo; //~ ERROR conflicts with prior loan + let bar1 = &foo.bar1.int1; + let _foo2 = &mut foo; //~ ERROR cannot borrow + *bar1; } fn borrow_imm_and_base_imm() { let mut foo = make_foo(); - let _bar1 = &foo.bar1.int1; + let bar1 = &foo.bar1.int1; let _foo1 = &foo.bar1; let _foo2 = &foo; + *bar1; } fn borrow_mut_and_imm() { let mut foo = make_foo(); - let _bar1 = &mut foo.bar1; + let bar1 = &mut foo.bar1; let _foo1 = &foo.bar2; + *bar1; } fn borrow_mut_from_imm() { let foo = make_foo(); - let _bar1 = &mut foo.bar1; //~ ERROR illegal borrow + let bar1 = &mut foo.bar1; //~ ERROR cannot borrow + *bar1; } fn borrow_long_path_both_mut() { let mut foo = make_foo(); - let _bar1 = &mut foo.bar1.int1; + let bar1 = &mut foo.bar1.int1; let _foo1 = &mut foo.bar2.int2; + *bar1; } fn main() {} diff --git a/src/test/compile-fail/borrowck-borrowed-uniq-rvalue-2.rs b/src/test/compile-fail/borrowck-borrowed-uniq-rvalue-2.rs index 4a6a90ae5167f..1e5c4c5cc410c 100644 --- a/src/test/compile-fail/borrowck-borrowed-uniq-rvalue-2.rs +++ b/src/test/compile-fail/borrowck-borrowed-uniq-rvalue-2.rs @@ -28,5 +28,6 @@ fn defer<'r>(x: &'r [&'r str]) -> defer<'r> { } fn main() { - let _x = defer(~["Goodbye", "world!"]); //~ ERROR illegal borrow + let x = defer(~["Goodbye", "world!"]); //~ ERROR borrowed value does not live long enough + x.x[0]; } diff --git a/src/test/compile-fail/borrowck-borrowed-uniq-rvalue.rs b/src/test/compile-fail/borrowck-borrowed-uniq-rvalue.rs index bda659aa7b97e..887cb59930ebc 100644 --- a/src/test/compile-fail/borrowck-borrowed-uniq-rvalue.rs +++ b/src/test/compile-fail/borrowck-borrowed-uniq-rvalue.rs @@ -15,7 +15,7 @@ use core::hashmap::HashMap; fn main() { let mut buggy_map :HashMap = HashMap::new::(); - buggy_map.insert(42, &*~1); //~ ERROR illegal borrow + buggy_map.insert(42, &*~1); //~ ERROR borrowed value does not live long enough // but it is ok if we use a temporary let tmp = ~2; diff --git a/src/test/compile-fail/borrowck-call-method-from-mut-aliasable.rs b/src/test/compile-fail/borrowck-call-method-from-mut-aliasable.rs index 2c68429baec92..be51091c1fd1e 100644 --- a/src/test/compile-fail/borrowck-call-method-from-mut-aliasable.rs +++ b/src/test/compile-fail/borrowck-call-method-from-mut-aliasable.rs @@ -27,13 +27,15 @@ fn a(x: &mut Foo) { fn b(x: &Foo) { x.f(); x.g(); - x.h(); //~ ERROR illegal borrow + x.h(); //~ ERROR cannot borrow } fn c(x: &const Foo) { - x.f(); //~ ERROR illegal borrow unless pure + x.f(); //~ ERROR cannot borrow + //~^ ERROR unsafe borrow x.g(); - x.h(); //~ ERROR illegal borrow + x.h(); //~ ERROR cannot borrow + //~^ ERROR unsafe borrow } fn main() { diff --git a/src/test/compile-fail/borrowck-imm-ref-to-mut-rec-field-issue-3162-c.rs b/src/test/compile-fail/borrowck-imm-ref-to-mut-rec-field-issue-3162-c.rs index 88db5f5434116..8af10231921aa 100644 --- a/src/test/compile-fail/borrowck-imm-ref-to-mut-rec-field-issue-3162-c.rs +++ b/src/test/compile-fail/borrowck-imm-ref-to-mut-rec-field-issue-3162-c.rs @@ -10,9 +10,9 @@ fn main() { let mut _a = 3; - let _b = &mut _a; //~ NOTE loan of mutable local variable granted here + let _b = &mut _a; { let _c = &*_b; - _a = 4; //~ ERROR assigning to mutable local variable prohibited + _a = 4; //~ ERROR cannot assign to `_a` } } diff --git a/src/test/compile-fail/borrowck-insert-during-each.rs b/src/test/compile-fail/borrowck-insert-during-each.rs index 17c0efe225e4d..109753b38e70b 100644 --- a/src/test/compile-fail/borrowck-insert-during-each.rs +++ b/src/test/compile-fail/borrowck-insert-during-each.rs @@ -23,8 +23,8 @@ pub impl Foo { } fn bar(f: &mut Foo) { - do f.foo |a| { //~ NOTE prior loan as mutable granted here - f.n.insert(*a); //~ ERROR conflicts with prior loan + do f.foo |a| { + f.n.insert(*a); //~ ERROR cannot borrow } } diff --git a/src/test/compile-fail/borrowck-issue-2657-1.rs b/src/test/compile-fail/borrowck-issue-2657-1.rs index ce183c1888f13..8bcd5f9a72e70 100644 --- a/src/test/compile-fail/borrowck-issue-2657-1.rs +++ b/src/test/compile-fail/borrowck-issue-2657-1.rs @@ -10,9 +10,9 @@ fn main() { let x = Some(~1); -match x { //~ NOTE loan of immutable local variable granted here +match x { Some(ref _y) => { - let _a = x; //~ ERROR moving out of immutable local variable prohibited due to outstanding loan + let _a = x; //~ ERROR cannot move } _ => {} } diff --git a/src/test/compile-fail/borrowck-issue-2657-2.rs b/src/test/compile-fail/borrowck-issue-2657-2.rs index d2217778d4148..fac805c57ca09 100644 --- a/src/test/compile-fail/borrowck-issue-2657-2.rs +++ b/src/test/compile-fail/borrowck-issue-2657-2.rs @@ -12,7 +12,7 @@ fn main() { let x = Some(~1); match x { Some(ref y) => { - let _b = *y; //~ ERROR moving out of dereference of immutable & pointer + let _b = *y; //~ ERROR cannot move out } _ => {} } diff --git a/src/test/compile-fail/borrowck-lend-flow-if.rs b/src/test/compile-fail/borrowck-lend-flow-if.rs new file mode 100644 index 0000000000000..563f63b98be05 --- /dev/null +++ b/src/test/compile-fail/borrowck-lend-flow-if.rs @@ -0,0 +1,52 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Note: the borrowck analysis is currently flow-insensitive. +// Therefore, some of these errors are marked as spurious and could be +// corrected by a simple change to the analysis. The others are +// either genuine or would require more advanced changes. The latter +// cases are noted. + +fn borrow(_v: &int) {} +fn borrow_mut(_v: &mut int) {} +fn cond() -> bool { fail!() } +fn for_func(_f: &fn() -> bool) { fail!() } +fn produce() -> T { fail!(); } + +fn inc(v: &mut ~int) { + *v = ~(**v + 1); +} + +fn pre_freeze_cond() { + // In this instance, the freeze is conditional and starts before + // the mut borrow. + + let mut v = ~3; + let _w; + if cond() { + _w = &v; + } + borrow_mut(v); //~ ERROR cannot borrow +} + +fn pre_freeze_else() { + // In this instance, the freeze and mut borrow are on separate sides + // of the if. + + let mut v = ~3; + let _w; + if cond() { + _w = &v; + } else { + borrow_mut(v); + } +} + +fn main() {} diff --git a/src/test/compile-fail/borrowck-lend-flow-loop.rs b/src/test/compile-fail/borrowck-lend-flow-loop.rs new file mode 100644 index 0000000000000..b6384ad9590ab --- /dev/null +++ b/src/test/compile-fail/borrowck-lend-flow-loop.rs @@ -0,0 +1,164 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Note: the borrowck analysis is currently flow-insensitive. +// Therefore, some of these errors are marked as spurious and could be +// corrected by a simple change to the analysis. The others are +// either genuine or would require more advanced changes. The latter +// cases are noted. + +fn borrow(_v: &int) {} +fn borrow_mut(_v: &mut int) {} +fn cond() -> bool { fail!() } +fn for_func(_f: &fn() -> bool) { fail!() } +fn produce() -> T { fail!(); } + +fn inc(v: &mut ~int) { + *v = ~(**v + 1); +} + +fn loop_overarching_alias_mut() { + // In this instance, the borrow encompasses the entire loop. + + let mut v = ~3; + let mut x = &mut v; + **x += 1; + loop { + borrow(v); //~ ERROR cannot borrow + } +} + +fn block_overarching_alias_mut() { + // In this instance, the borrow encompasses the entire closure call. + + let mut v = ~3; + let mut x = &mut v; + for 3.times { + borrow(v); //~ ERROR cannot borrow + } + *x = ~5; +} + +fn loop_aliased_mut() { + // In this instance, the borrow is carried through the loop. + + let mut v = ~3, w = ~4; + let mut _x = &w; + loop { + borrow_mut(v); //~ ERROR cannot borrow + _x = &v; + } +} + +fn while_aliased_mut() { + // In this instance, the borrow is carried through the loop. + + let mut v = ~3, w = ~4; + let mut _x = &w; + while cond() { + borrow_mut(v); //~ ERROR cannot borrow + _x = &v; + } +} + +fn for_loop_aliased_mut() { + // In this instance, the borrow is carried through the loop. + + let mut v = ~3, w = ~4; + let mut _x = &w; + for for_func { + borrow_mut(v); //~ ERROR cannot borrow + _x = &v; + } +} + +fn loop_aliased_mut_break() { + // In this instance, the borrow is carried through the loop. + + let mut v = ~3, w = ~4; + let mut _x = &w; + loop { + borrow_mut(v); + _x = &v; + break; + } + borrow_mut(v); //~ ERROR cannot borrow +} + +fn while_aliased_mut_break() { + // In this instance, the borrow is carried through the loop. + + let mut v = ~3, w = ~4; + let mut _x = &w; + while cond() { + borrow_mut(v); + _x = &v; + break; + } + borrow_mut(v); //~ ERROR cannot borrow +} + +fn for_aliased_mut_break() { + // In this instance, the borrow is carried through the loop. + + let mut v = ~3, w = ~4; + let mut _x = &w; + for for_func { + // here we cannot be sure that `for_func` respects the break below + borrow_mut(v); //~ ERROR cannot borrow + _x = &v; + break; + } + borrow_mut(v); //~ ERROR cannot borrow +} + +fn while_aliased_mut_cond(cond: bool, cond2: bool) { + let mut v = ~3, w = ~4; + let mut x = &mut w; + while cond { + **x += 1; + borrow(v); //~ ERROR cannot borrow + if cond2 { + x = &mut v; //~ ERROR cannot borrow + } + } +} + +fn loop_break_pops_scopes<'r>(_v: &'r mut [uint], f: &fn(&'r mut uint) -> bool) { + // Here we check that when you break out of an inner loop, the + // borrows that go out of scope as you exit the inner loop are + // removed from the bitset. + + while cond() { + while cond() { + // this borrow is limited to the scope of `r`... + let r: &'r mut uint = produce(); + if !f(&mut *r) { + break; // ...so it is not live as exit the `while` loop here + } + } + } +} + +fn loop_loop_pops_scopes<'r>(_v: &'r mut [uint], f: &fn(&'r mut uint) -> bool) { + // Similar to `loop_break_pops_scopes` but for the `loop` keyword + + while cond() { + while cond() { + // this borrow is limited to the scope of `r`... + let r: &'r mut uint = produce(); + if !f(&mut *r) { + loop; // ...so it is not live as exit (and re-enter) the `while` loop here + } + } + } +} + +fn main() {} diff --git a/src/test/compile-fail/borrowck-lend-flow-match.rs b/src/test/compile-fail/borrowck-lend-flow-match.rs new file mode 100644 index 0000000000000..7603fdc82a824 --- /dev/null +++ b/src/test/compile-fail/borrowck-lend-flow-match.rs @@ -0,0 +1,60 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// xfail-pretty -- comments are infaithfully preserved + +#[allow(unused_variable)]; +#[allow(dead_assignment)]; + +fn cond() -> bool { fail!() } +fn link<'a>(v: &'a uint, w: &mut &'a uint) -> bool { *w = v; true } + +fn separate_arms() { + // Here both arms perform assignments, but only is illegal. + + let mut x = None; + match x { + None => { + // It is ok to reassign x here, because there is in + // fact no outstanding loan of x! + x = Some(0); + } + Some(ref _i) => { + x = Some(1); //~ ERROR cannot assign + } + } + copy x; // just to prevent liveness warnings +} + +fn guard() { + // Here the guard performs a borrow. This borrow "infects" all + // subsequent arms (but not the prior ones). + + let mut a = ~3; + let mut b = ~4; + let mut w = &*a; + match 22 { + _ if cond() => { + b = ~5; + } + + _ if link(&*b, &mut w) => { + b = ~6; //~ ERROR cannot assign + } + + _ => { + b = ~7; //~ ERROR cannot assign + } + } + + b = ~8; //~ ERROR cannot assign +} + +fn main() {} diff --git a/src/test/compile-fail/borrowck-lend-flow.rs b/src/test/compile-fail/borrowck-lend-flow.rs index ed6446a6311b8..59cac0c5d953a 100644 --- a/src/test/compile-fail/borrowck-lend-flow.rs +++ b/src/test/compile-fail/borrowck-lend-flow.rs @@ -15,96 +15,37 @@ // cases are noted. fn borrow(_v: &int) {} +fn borrow_mut(_v: &mut int) {} +fn cond() -> bool { fail!() } +fn for_func(_f: &fn() -> bool) { fail!() } +fn produce() -> T { fail!(); } fn inc(v: &mut ~int) { *v = ~(**v + 1); } -fn post_aliased_const() { - let mut v = ~3; - borrow(v); - let _w = &const v; -} - -fn post_aliased_mut() { - // SPURIOUS--flow - let mut v = ~3; - borrow(v); //~ ERROR loan of mutable local variable as immutable conflicts with prior loan - let _w = &mut v; //~ NOTE prior loan as mutable granted here -} +fn pre_freeze() { + // In this instance, the freeze starts before the mut borrow. -fn post_aliased_scope(cond: bool) { let mut v = ~3; - borrow(v); - if cond { inc(&mut v); } + let _w = &v; + borrow_mut(v); //~ ERROR cannot borrow } -fn loop_overarching_alias_mut() { - let mut v = ~3; - let mut _x = &mut v; //~ NOTE prior loan as mutable granted here - loop { - borrow(v); //~ ERROR loan of mutable local variable as immutable conflicts with prior loan - } -} +fn pre_const() { + // In this instance, the freeze starts before the mut borrow. -fn block_overarching_alias_mut() { let mut v = ~3; - let mut _x = &mut v; //~ NOTE prior loan as mutable granted here - for 3.times { - borrow(v); //~ ERROR loan of mutable local variable as immutable conflicts with prior loan - } -} - -fn loop_aliased_mut() { - let mut v = ~3, w = ~4; - let mut _x = &mut w; - loop { - borrow(v); //~ ERROR loan of mutable local variable as immutable conflicts with prior loan - _x = &mut v; //~ NOTE prior loan as mutable granted here - } -} - -fn while_aliased_mut(cond: bool) { - let mut v = ~3, w = ~4; - let mut _x = &mut w; - while cond { - borrow(v); //~ ERROR loan of mutable local variable as immutable conflicts with prior loan - _x = &mut v; //~ NOTE prior loan as mutable granted here - } -} - -fn while_aliased_mut_cond(cond: bool, cond2: bool) { - let mut v = ~3, w = ~4; - let mut _x = &mut w; - while cond { - borrow(v); //~ ERROR loan of mutable local variable as immutable conflicts with prior loan - if cond2 { - _x = &mut v; //~ NOTE prior loan as mutable granted here - } - } -} - -fn loop_in_block() { - let mut v = ~3, w = ~4; - let mut _x = &mut w; - for uint::range(0u, 10u) |_i| { - borrow(v); //~ ERROR loan of mutable local variable as immutable conflicts with prior loan - _x = &mut v; //~ NOTE prior loan as mutable granted here - } + let _w = &const v; + borrow_mut(v); } -fn at_most_once_block() { - fn at_most_once(f: &fn()) { f() } +fn post_freeze() { + // In this instance, the const alias starts after the borrow. - // Here, the borrow check has no way of knowing that the block is - // executed at most once. - - let mut v = ~3, w = ~4; - let mut _x = &mut w; - do at_most_once { - borrow(v); //~ ERROR loan of mutable local variable as immutable conflicts with prior loan - _x = &mut v; //~ NOTE prior loan as mutable granted here - } + let mut v = ~3; + borrow_mut(v); + let _w = &v; } fn main() {} diff --git a/src/test/compile-fail/borrowck-loan-blocks-move-cc.rs b/src/test/compile-fail/borrowck-loan-blocks-move-cc.rs index 784fce1300f76..50dd815d49302 100644 --- a/src/test/compile-fail/borrowck-loan-blocks-move-cc.rs +++ b/src/test/compile-fail/borrowck-loan-blocks-move-cc.rs @@ -14,17 +14,17 @@ fn borrow(v: &int, f: &fn(x: &int)) { fn box_imm() { let v = ~3; - let _w = &v; //~ NOTE loan of immutable local variable granted here + let _w = &v; do task::spawn { debug!("v=%d", *v); - //~^ ERROR by-move capture of immutable local variable prohibited due to outstanding loan + //~^ ERROR cannot move `v` into closure } let v = ~3; - let _w = &v; //~ NOTE loan of immutable local variable granted here + let _w = &v; task::spawn(|| { debug!("v=%d", *v); - //~^ ERROR by-move capture of immutable local variable prohibited due to outstanding loan + //~^ ERROR cannot move }); } diff --git a/src/test/compile-fail/borrowck-loan-blocks-move.rs b/src/test/compile-fail/borrowck-loan-blocks-move.rs index 3af77d2df7f01..b9a79f4f3b1b1 100644 --- a/src/test/compile-fail/borrowck-loan-blocks-move.rs +++ b/src/test/compile-fail/borrowck-loan-blocks-move.rs @@ -13,8 +13,8 @@ fn take(_v: ~int) { fn box_imm() { let v = ~3; - let _w = &v; //~ NOTE loan of immutable local variable granted here - take(v); //~ ERROR moving out of immutable local variable prohibited due to outstanding loan + let _w = &v; + take(v); //~ ERROR cannot move out of `v` because it is borrowed } fn main() { diff --git a/src/test/compile-fail/borrowck-loan-blocks-mut-uniq.rs b/src/test/compile-fail/borrowck-loan-blocks-mut-uniq.rs index 14cb37d775c43..f8415a38573c4 100644 --- a/src/test/compile-fail/borrowck-loan-blocks-mut-uniq.rs +++ b/src/test/compile-fail/borrowck-loan-blocks-mut-uniq.rs @@ -14,8 +14,8 @@ fn borrow(v: &int, f: &fn(x: &int)) { fn box_imm() { let mut v = ~3; - do borrow(v) |w| { //~ NOTE loan of mutable local variable granted here - v = ~4; //~ ERROR assigning to captured outer mutable variable in a stack closure prohibited due to outstanding loan + do borrow(v) |w| { + v = ~4; //~ ERROR cannot assign to `v` because it is borrowed assert!(*v == 3); assert!(*w == 4); } diff --git a/src/test/compile-fail/borrowck-loan-local-as-both-mut-and-imm.rs b/src/test/compile-fail/borrowck-loan-local-as-both-mut-and-imm.rs index a2ba5ad489167..f369bf208c2ce 100644 --- a/src/test/compile-fail/borrowck-loan-local-as-both-mut-and-imm.rs +++ b/src/test/compile-fail/borrowck-loan-local-as-both-mut-and-imm.rs @@ -22,13 +22,13 @@ use core::either::{Either, Left, Right}; fn g() { let mut x: Either = Left(3); - io::println(f(&mut x, &x).to_str()); //~ ERROR conflicts with prior loan + io::println(f(&mut x, &x).to_str()); //~ ERROR cannot borrow } fn h() { let mut x: Either = Left(3); let y: &Either = &x; - let z: &mut Either = &mut x; //~ ERROR conflicts with prior loan + let z: &mut Either = &mut x; //~ ERROR cannot borrow *z = *y; } diff --git a/src/test/compile-fail/borrowck-loan-rcvr-overloaded-op.rs b/src/test/compile-fail/borrowck-loan-rcvr-overloaded-op.rs index a4ad7e69b3336..8c9d3009e5e67 100644 --- a/src/test/compile-fail/borrowck-loan-rcvr-overloaded-op.rs +++ b/src/test/compile-fail/borrowck-loan-rcvr-overloaded-op.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -struct Point { +struct Point { x: int, y: int, } @@ -38,10 +38,10 @@ fn b() { // Here I create an outstanding loan and check that we get conflicts: - let q = &mut p; //~ NOTE prior loan as mutable granted here + let q = &mut p; p + 3; // ok for pure fns - p.times(3); //~ ERROR loan of mutable local variable as immutable conflicts with prior loan + p.times(3); //~ ERROR cannot borrow `p` q.x += 1; } diff --git a/src/test/compile-fail/borrowck-loan-rcvr.rs b/src/test/compile-fail/borrowck-loan-rcvr.rs index 4473574926a34..decf6228fc658 100644 --- a/src/test/compile-fail/borrowck-loan-rcvr.rs +++ b/src/test/compile-fail/borrowck-loan-rcvr.rs @@ -13,7 +13,6 @@ struct point { x: int, y: int } trait methods { fn impurem(&self); fn blockm(&self, f: &fn()); - fn purem(&self); } impl methods for point { @@ -21,9 +20,6 @@ impl methods for point { } fn blockm(&self, f: &fn()) { f() } - - fn purem(&self) { - } } fn a() { @@ -31,12 +27,11 @@ fn a() { // Here: it's ok to call even though receiver is mutable, because we // can loan it out. - p.purem(); p.impurem(); // But in this case we do not honor the loan: - do p.blockm { //~ NOTE loan of mutable local variable granted here - p.x = 10; //~ ERROR assigning to mutable field prohibited due to outstanding loan + do p.blockm { + p.x = 10; //~ ERROR cannot assign } } @@ -45,20 +40,21 @@ fn b() { // Here I create an outstanding loan and check that we get conflicts: - let l = &mut p; //~ NOTE prior loan as mutable granted here - //~^ NOTE prior loan as mutable granted here - - p.purem(); //~ ERROR loan of mutable local variable as immutable conflicts with prior loan - p.impurem(); //~ ERROR loan of mutable local variable as immutable conflicts with prior loan + let l = &mut p; + p.impurem(); //~ ERROR cannot borrow l.x += 1; } fn c() { - // Loaning @mut as & is considered legal due to dynamic checks: + // Loaning @mut as & is considered legal due to dynamic checks... let q = @mut point {x: 3, y: 4}; - q.purem(); q.impurem(); + + // ...but we still detect errors statically when we can. + do q.blockm { + q.x = 10; //~ ERROR cannot assign + } } fn main() { diff --git a/src/test/compile-fail/borrowck-loan-vec-content.rs b/src/test/compile-fail/borrowck-loan-vec-content.rs index d27d690437aff..6a8e64377aab2 100644 --- a/src/test/compile-fail/borrowck-loan-vec-content.rs +++ b/src/test/compile-fail/borrowck-loan-vec-content.rs @@ -24,8 +24,8 @@ fn has_mut_vec_and_does_not_try_to_change_it() { fn has_mut_vec_but_tries_to_change_it() { let mut v = ~[1, 2, 3]; - do takes_imm_elt(&v[0]) { //~ NOTE loan of mutable vec content granted here - v[1] = 4; //~ ERROR assigning to mutable vec content prohibited due to outstanding loan + do takes_imm_elt(&v[0]) { + v[1] = 4; //~ ERROR cannot assign } } diff --git a/src/test/compile-fail/borrowck-move-by-capture.rs b/src/test/compile-fail/borrowck-move-by-capture.rs index 18b4ce0640c41..c199c8795756d 100644 --- a/src/test/compile-fail/borrowck-move-by-capture.rs +++ b/src/test/compile-fail/borrowck-move-by-capture.rs @@ -4,7 +4,7 @@ fn main() { let foo = ~3; let _pfoo = &foo; let _f: @fn() -> int = || *foo + 5; - //~^ ERROR by-move capture + //~^ ERROR cannot move `foo` let bar = ~3; let _g = || { diff --git a/src/test/compile-fail/borrowck-mut-addr-of-imm-var.rs b/src/test/compile-fail/borrowck-mut-addr-of-imm-var.rs index d0b0f51d0cf77..e4e449822768b 100644 --- a/src/test/compile-fail/borrowck-mut-addr-of-imm-var.rs +++ b/src/test/compile-fail/borrowck-mut-addr-of-imm-var.rs @@ -10,7 +10,7 @@ fn main() { let x: int = 3; - let y: &mut int = &mut x; //~ ERROR illegal borrow + let y: &mut int = &mut x; //~ ERROR cannot borrow *y = 5; debug!(*y); } diff --git a/src/test/compile-fail/borrowck-mut-boxed-vec.rs b/src/test/compile-fail/borrowck-mut-boxed-vec.rs index d4c0b5a1e9bf9..a69edebce51fb 100644 --- a/src/test/compile-fail/borrowck-mut-boxed-vec.rs +++ b/src/test/compile-fail/borrowck-mut-boxed-vec.rs @@ -10,8 +10,8 @@ fn main() { let v = @mut [ 1, 2, 3 ]; - for v.each |_x| { //~ ERROR illegal borrow - v[1] = 4; + for v.each |_x| { + v[1] = 4; //~ ERROR cannot assign } } diff --git a/src/test/compile-fail/borrowck-mut-deref-comp.rs b/src/test/compile-fail/borrowck-mut-deref-comp.rs index 540793d4135f2..d1dc296197892 100644 --- a/src/test/compile-fail/borrowck-mut-deref-comp.rs +++ b/src/test/compile-fail/borrowck-mut-deref-comp.rs @@ -11,8 +11,8 @@ struct foo(~int); fn borrow(x: @mut foo) { - let _y = &***x; //~ ERROR illegal borrow unless pure - *x = foo(~4); //~ NOTE impure due to assigning to dereference of mutable @ pointer + let _y = &***x; + *x = foo(~4); //~ ERROR cannot assign } fn main() { diff --git a/src/test/compile-fail/borrowck-mut-slice-of-imm-vec.rs b/src/test/compile-fail/borrowck-mut-slice-of-imm-vec.rs index bc0340983ae34..ec17976c5065c 100644 --- a/src/test/compile-fail/borrowck-mut-slice-of-imm-vec.rs +++ b/src/test/compile-fail/borrowck-mut-slice-of-imm-vec.rs @@ -14,5 +14,5 @@ fn write(v: &mut [int]) { fn main() { let v = ~[1, 2, 3]; - write(v); //~ ERROR illegal borrow + write(v); //~ ERROR cannot borrow } diff --git a/src/test/compile-fail/borrowck-no-cycle-in-exchange-heap.rs b/src/test/compile-fail/borrowck-no-cycle-in-exchange-heap.rs index 4af3bc17240ce..ed270de51e2ed 100644 --- a/src/test/compile-fail/borrowck-no-cycle-in-exchange-heap.rs +++ b/src/test/compile-fail/borrowck-no-cycle-in-exchange-heap.rs @@ -19,9 +19,9 @@ enum cycle { fn main() { let mut x = ~node(node_ {a: ~empty}); // Create a cycle! - match *x { //~ NOTE loan of mutable local variable granted here + match *x { node(ref mut y) => { - y.a = x; //~ ERROR moving out of mutable local variable prohibited due to outstanding loan + y.a = x; //~ ERROR cannot move out of } empty => {} }; diff --git a/src/test/compile-fail/borrowck-pat-by-value-binding.rs b/src/test/compile-fail/borrowck-pat-by-value-binding.rs index d8c8841d391a2..d60ed3d0e372b 100644 --- a/src/test/compile-fail/borrowck-pat-by-value-binding.rs +++ b/src/test/compile-fail/borrowck-pat-by-value-binding.rs @@ -12,23 +12,24 @@ fn process(_t: T) {} fn match_const_opt_by_mut_ref(v: &const Option) { match *v { - Some(ref mut i) => process(i), //~ ERROR illegal borrow + Some(ref mut i) => process(i), //~ ERROR cannot borrow + //~^ ERROR unsafe borrow of aliasable, const value None => () } } fn match_const_opt_by_const_ref(v: &const Option) { match *v { - Some(ref const i) => process(i), //~ ERROR illegal borrow unless pure - //~^ NOTE impure due to + Some(ref const i) => process(i), + //~^ ERROR unsafe borrow of aliasable, const value None => () } } fn match_const_opt_by_imm_ref(v: &const Option) { match *v { - Some(ref i) => process(i), //~ ERROR illegal borrow unless pure - //~^ NOTE impure due to + Some(ref i) => process(i), //~ ERROR cannot borrow + //~^ ERROR unsafe borrow of aliasable, const value None => () } } diff --git a/src/test/compile-fail/borrowck-pat-enum.rs b/src/test/compile-fail/borrowck-pat-enum.rs index 4aa1ecc0ce3fe..c50357e8b9c62 100644 --- a/src/test/compile-fail/borrowck-pat-enum.rs +++ b/src/test/compile-fail/borrowck-pat-enum.rs @@ -26,7 +26,8 @@ fn match_ref_unused(&&v: Option) { fn match_const_reg(v: &const Option) -> int { match *v { - Some(ref i) => {*i} // OK because this is pure + Some(ref i) => {*i} //~ ERROR cannot borrow + //~^ ERROR unsafe borrow None => {0} } } @@ -43,8 +44,8 @@ fn match_const_reg_unused(v: &const Option) { fn match_const_reg_impure(v: &const Option) { match *v { - Some(ref i) => {impure(*i)} //~ ERROR illegal borrow unless pure - //~^ NOTE impure due to access to impure function + Some(ref i) => {impure(*i)} //~ ERROR cannot borrow + //~^ ERROR unsafe borrow None => {} } } @@ -56,5 +57,12 @@ fn match_imm_reg(v: &Option) { } } +fn match_mut_reg(v: &mut Option) { + match *v { + Some(ref i) => {impure(*i)} // OK, frozen + None => {} + } +} + fn main() { } diff --git a/src/test/compile-fail/borrowck-pat-reassign-binding.rs b/src/test/compile-fail/borrowck-pat-reassign-binding.rs index ca1fdc97c22f8..d05160132c6c2 100644 --- a/src/test/compile-fail/borrowck-pat-reassign-binding.rs +++ b/src/test/compile-fail/borrowck-pat-reassign-binding.rs @@ -12,11 +12,14 @@ fn main() { let mut x: Option = None; - match x { //~ NOTE loan of mutable local variable granted here - None => {} + match x { + None => { + // Note: on this branch, no borrow has occurred. + x = Some(0); + } Some(ref i) => { - // Not ok: i is an outstanding ptr into x. - x = Some(*i+1); //~ ERROR assigning to mutable local variable prohibited due to outstanding loan + // But on this branch, `i` is an outstanding borrow + x = Some(*i+1); //~ ERROR cannot assign to `x` } } copy x; // just to prevent liveness warnings diff --git a/src/test/compile-fail/borrowck-pat-reassign-sometimes-binding.rs b/src/test/compile-fail/borrowck-pat-reassign-sometimes-binding.rs deleted file mode 100644 index dd6eca951b8f3..0000000000000 --- a/src/test/compile-fail/borrowck-pat-reassign-sometimes-binding.rs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2012 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 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -// xfail-pretty -- comments are infaithfully preserved - -fn main() { - let mut x = None; - match x { //~ NOTE loan of mutable local variable granted here - None => { - // It is ok to reassign x here, because there is in - // fact no outstanding loan of x! - x = Some(0); - } - Some(ref _i) => { - x = Some(1); //~ ERROR assigning to mutable local variable prohibited due to outstanding loan - } - } - copy x; // just to prevent liveness warnings -} diff --git a/src/test/compile-fail/borrowck-reborrow-from-mut.rs b/src/test/compile-fail/borrowck-reborrow-from-mut.rs index 60f817dee0c54..b4bd64f213586 100644 --- a/src/test/compile-fail/borrowck-reborrow-from-mut.rs +++ b/src/test/compile-fail/borrowck-reborrow-from-mut.rs @@ -20,17 +20,17 @@ struct Bar { fn borrow_same_field_twice_mut_mut(foo: &mut Foo) { let _bar1 = &mut foo.bar1; - let _bar2 = &mut foo.bar1; //~ ERROR conflicts with prior loan + let _bar2 = &mut foo.bar1; //~ ERROR cannot borrow } fn borrow_same_field_twice_mut_imm(foo: &mut Foo) { let _bar1 = &mut foo.bar1; - let _bar2 = &foo.bar1; //~ ERROR conflicts with prior loan + let _bar2 = &foo.bar1; //~ ERROR cannot borrow } fn borrow_same_field_twice_imm_mut(foo: &mut Foo) { let _bar1 = &foo.bar1; - let _bar2 = &mut foo.bar1; //~ ERROR conflicts with prior loan + let _bar2 = &mut foo.bar1; //~ ERROR cannot borrow } fn borrow_same_field_twice_imm_imm(foo: &mut Foo) { @@ -53,34 +53,34 @@ fn borrow_var_and_pattern(foo: &mut Foo) { let _bar1 = &mut foo.bar1; match *foo { Foo { bar1: ref mut _bar1, bar2: _ } => {} - //~^ ERROR conflicts with prior loan + //~^ ERROR cannot borrow } } fn borrow_mut_and_base_imm(foo: &mut Foo) { let _bar1 = &mut foo.bar1.int1; - let _foo1 = &foo.bar1; //~ ERROR conflicts with prior loan - let _foo2 = &*foo; //~ ERROR conflicts with prior loan + let _foo1 = &foo.bar1; //~ ERROR cannot borrow + let _foo2 = &*foo; //~ ERROR cannot borrow } fn borrow_mut_and_base_mut(foo: &mut Foo) { let _bar1 = &mut foo.bar1.int1; - let _foo1 = &mut foo.bar1; //~ ERROR conflicts with prior loan + let _foo1 = &mut foo.bar1; //~ ERROR cannot borrow } fn borrow_mut_and_base_mut2(foo: &mut Foo) { let _bar1 = &mut foo.bar1.int1; - let _foo2 = &mut *foo; //~ ERROR conflicts with prior loan + let _foo2 = &mut *foo; //~ ERROR cannot borrow } fn borrow_imm_and_base_mut(foo: &mut Foo) { let _bar1 = &foo.bar1.int1; - let _foo1 = &mut foo.bar1; //~ ERROR conflicts with prior loan + let _foo1 = &mut foo.bar1; //~ ERROR cannot borrow } fn borrow_imm_and_base_mut2(foo: &mut Foo) { let _bar1 = &foo.bar1.int1; - let _foo2 = &mut *foo; //~ ERROR conflicts with prior loan + let _foo2 = &mut *foo; //~ ERROR cannot borrow } fn borrow_imm_and_base_imm(foo: &mut Foo) { @@ -95,7 +95,7 @@ fn borrow_mut_and_imm(foo: &mut Foo) { } fn borrow_mut_from_imm(foo: &Foo) { - let _bar1 = &mut foo.bar1; //~ ERROR illegal borrow + let _bar1 = &mut foo.bar1; //~ ERROR cannot borrow } fn borrow_long_path_both_mut(foo: &mut Foo) { diff --git a/src/test/compile-fail/borrowck-ref-into-rvalue.rs b/src/test/compile-fail/borrowck-ref-into-rvalue.rs index 37ee747069ccf..18865ad7d54d8 100644 --- a/src/test/compile-fail/borrowck-ref-into-rvalue.rs +++ b/src/test/compile-fail/borrowck-ref-into-rvalue.rs @@ -10,12 +10,12 @@ fn main() { let msg; - match Some(~"Hello") { //~ ERROR illegal borrow - Some(ref m) => { + match Some(~"Hello") { + Some(ref m) => { //~ ERROR borrowed value does not live long enough msg = m; - }, + }, None => { fail!() } - } + } io::println(*msg); } diff --git a/src/test/compile-fail/borrowck-ref-mut-of-imm.rs b/src/test/compile-fail/borrowck-ref-mut-of-imm.rs index aad86241e9a43..3a37116a1664d 100644 --- a/src/test/compile-fail/borrowck-ref-mut-of-imm.rs +++ b/src/test/compile-fail/borrowck-ref-mut-of-imm.rs @@ -11,7 +11,7 @@ fn destructure(x: Option) -> int { match x { None => 0, - Some(ref mut v) => *v //~ ERROR illegal borrow + Some(ref mut v) => *v //~ ERROR cannot borrow } } diff --git a/src/test/compile-fail/borrowck-unary-move-2.rs b/src/test/compile-fail/borrowck-unary-move-2.rs index 520772f1ceea9..898830bbe55ba 100644 --- a/src/test/compile-fail/borrowck-unary-move-2.rs +++ b/src/test/compile-fail/borrowck-unary-move-2.rs @@ -28,5 +28,5 @@ struct wrapper(noncopyable); fn main() { let x1 = wrapper(noncopyable()); - let _x2 = *x1; //~ ERROR moving out of anonymous field + let _x2 = *x1; //~ ERROR cannot move out } diff --git a/src/test/compile-fail/borrowck-unary-move.rs b/src/test/compile-fail/borrowck-unary-move.rs index f95b365ee2ef9..107e478004abb 100644 --- a/src/test/compile-fail/borrowck-unary-move.rs +++ b/src/test/compile-fail/borrowck-unary-move.rs @@ -9,8 +9,8 @@ // except according to those terms. fn foo(+x: ~int) -> int { - let y = &*x; //~ NOTE loan of argument granted here - free(x); //~ ERROR moving out of argument prohibited due to outstanding loan + let y = &*x; + free(x); //~ ERROR cannot move out of `*x` because it is borrowed *y } diff --git a/src/test/compile-fail/borrowck-uniq-via-box.rs b/src/test/compile-fail/borrowck-uniq-via-box.rs deleted file mode 100644 index e1c0e67ff8dcc..0000000000000 --- a/src/test/compile-fail/borrowck-uniq-via-box.rs +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2012 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 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -struct Rec { - f: ~int, -} - -struct Outer { - f: Inner -} - -struct Inner { - g: Innermost -} - -struct Innermost { - h: ~int, -} - -fn borrow(_v: &int) {} - -fn box_mut(v: @mut ~int) { - borrow(*v); //~ ERROR illegal borrow unless pure -} - -fn box_mut_rec(v: @mut Rec) { - borrow(v.f); //~ ERROR illegal borrow unless pure -} - -fn box_mut_recs(v: @mut Outer) { - borrow(v.f.g.h); //~ ERROR illegal borrow unless pure -} - -fn box_imm(v: @~int) { - borrow(*v); // OK -} - -fn box_imm_rec(v: @Rec) { - borrow(v.f); // OK -} - -fn box_imm_recs(v: @Outer) { - borrow(v.f.g.h); // OK -} - -fn main() { -} - diff --git a/src/test/compile-fail/borrowck-uniq-via-lend.rs b/src/test/compile-fail/borrowck-uniq-via-lend.rs index ee96237a26c82..80ba1968bc751 100644 --- a/src/test/compile-fail/borrowck-uniq-via-lend.rs +++ b/src/test/compile-fail/borrowck-uniq-via-lend.rs @@ -43,8 +43,8 @@ fn aliased_const() { fn aliased_mut() { let mut v = ~3; - let _w = &mut v; //~ NOTE prior loan as mutable granted here - borrow(v); //~ ERROR loan of mutable local variable as immutable conflicts with prior loan + let _w = &mut v; + borrow(v); //~ ERROR cannot borrow `*v` } fn aliased_other() { @@ -56,8 +56,8 @@ fn aliased_other() { fn aliased_other_reassign() { let mut v = ~3, w = ~4; let mut _x = &mut w; - _x = &mut v; //~ NOTE prior loan as mutable granted here - borrow(v); //~ ERROR loan of mutable local variable as immutable conflicts with prior loan + _x = &mut v; + borrow(v); //~ ERROR cannot borrow `*v` } fn main() { diff --git a/src/test/compile-fail/borrowck-uniq-via-ref.rs b/src/test/compile-fail/borrowck-uniq-via-ref.rs index 2cf363e13ee09..8bf627d991911 100644 --- a/src/test/compile-fail/borrowck-uniq-via-ref.rs +++ b/src/test/compile-fail/borrowck-uniq-via-ref.rs @@ -25,6 +25,7 @@ struct Innermost { } fn borrow(_v: &int) {} +fn borrow_const(_v: &const int) {} fn box_mut(v: &mut ~int) { borrow(*v); // OK: &mut -> &imm @@ -51,15 +52,15 @@ fn box_imm_recs(v: &Outer) { } fn box_const(v: &const ~int) { - borrow(*v); //~ ERROR illegal borrow unless pure + borrow_const(*v); //~ ERROR unsafe borrow } fn box_const_rec(v: &const Rec) { - borrow(v.f); //~ ERROR illegal borrow unless pure + borrow_const(v.f); //~ ERROR unsafe borrow } fn box_const_recs(v: &const Outer) { - borrow(v.f.g.h); //~ ERROR illegal borrow unless pure + borrow_const(v.f.g.h); //~ ERROR unsafe borrow } fn main() { diff --git a/src/test/compile-fail/borrowck-vec-pattern-element-loan.rs b/src/test/compile-fail/borrowck-vec-pattern-element-loan.rs index c8a0dbedd5d95..0c21b64bb0fb0 100644 --- a/src/test/compile-fail/borrowck-vec-pattern-element-loan.rs +++ b/src/test/compile-fail/borrowck-vec-pattern-element-loan.rs @@ -1,7 +1,7 @@ fn a() -> &[int] { let vec = [1, 2, 3, 4]; - let tail = match vec { //~ ERROR illegal borrow - [_, ..tail] => tail, + let tail = match vec { + [_, ..tail] => tail, //~ ERROR does not live long enough _ => fail!(~"a") }; tail @@ -9,8 +9,8 @@ fn a() -> &[int] { fn b() -> &[int] { let vec = [1, 2, 3, 4]; - let init = match vec { //~ ERROR illegal borrow - [..init, _] => init, + let init = match vec { + [..init, _] => init, //~ ERROR does not live long enough _ => fail!(~"b") }; init @@ -18,8 +18,8 @@ fn b() -> &[int] { fn c() -> &[int] { let vec = [1, 2, 3, 4]; - let slice = match vec { //~ ERROR illegal borrow - [_, ..slice, _] => slice, + let slice = match vec { + [_, ..slice, _] => slice, //~ ERROR does not live long enough _ => fail!(~"c") }; slice diff --git a/src/test/compile-fail/borrowck-vec-pattern-loan-from-mut.rs b/src/test/compile-fail/borrowck-vec-pattern-loan-from-mut.rs index 27902100373a9..6b51fc8f5b3d7 100644 --- a/src/test/compile-fail/borrowck-vec-pattern-loan-from-mut.rs +++ b/src/test/compile-fail/borrowck-vec-pattern-loan-from-mut.rs @@ -2,7 +2,7 @@ fn a() { let mut v = ~[1, 2, 3]; match v { [_a, ..tail] => { - v.push(tail[0] + tail[1]); //~ ERROR conflicts with prior loan + v.push(tail[0] + tail[1]); //~ ERROR cannot borrow } _ => {} }; diff --git a/src/test/compile-fail/borrowck-vec-pattern-move-tail.rs b/src/test/compile-fail/borrowck-vec-pattern-move-tail.rs index 16b48aedb0c7f..2898e312930fe 100644 --- a/src/test/compile-fail/borrowck-vec-pattern-move-tail.rs +++ b/src/test/compile-fail/borrowck-vec-pattern-move-tail.rs @@ -1,8 +1,9 @@ fn main() { let mut a = [1, 2, 3, 4]; - let _ = match a { + let t = match a { [1, 2, ..tail] => tail, _ => core::util::unreachable() }; - a[0] = 0; //~ ERROR: assigning to mutable vec content prohibited due to outstanding loan + a[0] = 0; //~ ERROR cannot assign to `a[]` because it is borrowed + t[0]; } diff --git a/src/test/compile-fail/borrowck-vec-pattern-nesting.rs b/src/test/compile-fail/borrowck-vec-pattern-nesting.rs index 05ff85d612c82..16711ea61ffac 100644 --- a/src/test/compile-fail/borrowck-vec-pattern-nesting.rs +++ b/src/test/compile-fail/borrowck-vec-pattern-nesting.rs @@ -2,7 +2,7 @@ fn a() { let mut vec = [~1, ~2, ~3]; match vec { [~ref _a] => { - vec[0] = ~4; //~ ERROR prohibited due to outstanding loan + vec[0] = ~4; //~ ERROR cannot assign to `vec[]` because it is borrowed } _ => fail!(~"foo") } @@ -12,7 +12,7 @@ fn b() { let mut vec = [~1, ~2, ~3]; match vec { [.._b] => { - vec[0] = ~4; //~ ERROR prohibited due to outstanding loan + vec[0] = ~4; //~ ERROR cannot assign to `vec[]` because it is borrowed } } } diff --git a/src/test/compile-fail/borrowck-vec-pattern-tail-element-loan.rs b/src/test/compile-fail/borrowck-vec-pattern-tail-element-loan.rs index 714a80def9358..dbdd8f0809a6e 100644 --- a/src/test/compile-fail/borrowck-vec-pattern-tail-element-loan.rs +++ b/src/test/compile-fail/borrowck-vec-pattern-tail-element-loan.rs @@ -1,7 +1,7 @@ fn a() -> &int { let vec = [1, 2, 3, 4]; - let tail = match vec { //~ ERROR illegal borrow - [_a, ..tail] => &tail[0], + let tail = match vec { + [_a, ..tail] => &tail[0], //~ ERROR borrowed value does not live long enough _ => fail!(~"foo") }; tail diff --git a/src/test/compile-fail/borrowck-wg-borrow-mut-to-imm-fail-2.rs b/src/test/compile-fail/borrowck-wg-borrow-mut-to-imm-fail-2.rs index e47ad721b0d7b..5ef23897ec0d3 100644 --- a/src/test/compile-fail/borrowck-wg-borrow-mut-to-imm-fail-2.rs +++ b/src/test/compile-fail/borrowck-wg-borrow-mut-to-imm-fail-2.rs @@ -1,6 +1,6 @@ fn main() { let mut b = ~3; - let _x = &mut *b; //~ NOTE prior loan as mutable granted here - let _y = &mut *b; //~ ERROR loan of dereference of mutable ~ pointer as mutable conflicts with prior loan + let _x = &mut *b; + let _y = &mut *b; //~ ERROR cannot borrow } diff --git a/src/test/compile-fail/borrowck-wg-borrow-mut-to-imm-fail-3.rs b/src/test/compile-fail/borrowck-wg-borrow-mut-to-imm-fail-3.rs index 015f368ecb068..a744127a600db 100644 --- a/src/test/compile-fail/borrowck-wg-borrow-mut-to-imm-fail-3.rs +++ b/src/test/compile-fail/borrowck-wg-borrow-mut-to-imm-fail-3.rs @@ -1,8 +1,8 @@ fn main() { let mut a = ~3; - let mut b = &mut a; //~ NOTE loan of mutable local variable granted here + let mut b = &mut a; let _c = &mut *b; - let mut d = /*move*/ a; //~ ERROR moving out of mutable local variable prohibited due to outstanding loan + let mut d = /*move*/ a; //~ ERROR cannot move out *d += 1; } diff --git a/src/test/compile-fail/borrowck-wg-borrow-mut-to-imm-fail.rs b/src/test/compile-fail/borrowck-wg-borrow-mut-to-imm-fail.rs index 36d32fddda150..44da00d8d1707 100644 --- a/src/test/compile-fail/borrowck-wg-borrow-mut-to-imm-fail.rs +++ b/src/test/compile-fail/borrowck-wg-borrow-mut-to-imm-fail.rs @@ -1,7 +1,7 @@ fn main() { let mut b = ~3; - let _x = &mut *b; //~ NOTE loan of mutable local variable granted here - let mut y = /*move*/ b; //~ ERROR moving out of mutable local variable prohibited + let _x = &mut *b; + let mut y = /*move*/ b; //~ ERROR cannot move out *y += 1; } diff --git a/src/test/compile-fail/borrowck-wg-move-base-2.rs b/src/test/compile-fail/borrowck-wg-move-base-2.rs index ba85616e63f28..8a2187714534a 100644 --- a/src/test/compile-fail/borrowck-wg-move-base-2.rs +++ b/src/test/compile-fail/borrowck-wg-move-base-2.rs @@ -2,7 +2,7 @@ fn foo(x: &mut int) { let mut a = 3; let mut _y = &mut *x; let _z = &mut *_y; - _y = &mut a; //~ ERROR assigning to mutable local variable prohibited + _y = &mut a; //~ ERROR cannot assign } fn main() { diff --git a/src/test/compile-fail/fn-variance-3.rs b/src/test/compile-fail/fn-variance-3.rs index 5df2007721def..4d145d3f9ea3a 100644 --- a/src/test/compile-fail/fn-variance-3.rs +++ b/src/test/compile-fail/fn-variance-3.rs @@ -31,5 +31,5 @@ fn main() { // mutability check will fail, because the // type of r has been inferred to be // fn(@const int) -> @const int - *r(@mut 3) = 4; //~ ERROR assigning to dereference of const @ pointer + *r(@mut 3) = 4; //~ ERROR cannot assign to const dereference of @ pointer } diff --git a/src/test/compile-fail/immut-function-arguments.rs b/src/test/compile-fail/immut-function-arguments.rs index 2084729372d1d..66b5bd172cace 100644 --- a/src/test/compile-fail/immut-function-arguments.rs +++ b/src/test/compile-fail/immut-function-arguments.rs @@ -9,11 +9,11 @@ // except according to those terms. fn f(y: ~int) { - *y = 5; //~ ERROR assigning to dereference of immutable ~ pointer + *y = 5; //~ ERROR cannot assign } fn g() { - let _frob: &fn(~int) = |q| { *q = 2; }; //~ ERROR assigning to dereference of immutable ~ pointer + let _frob: &fn(~int) = |q| { *q = 2; }; //~ ERROR cannot assign } diff --git a/src/test/compile-fail/index_message.rs b/src/test/compile-fail/index_message.rs index 3611dbb6866cb..26dd98757a8c2 100644 --- a/src/test/compile-fail/index_message.rs +++ b/src/test/compile-fail/index_message.rs @@ -10,5 +10,5 @@ fn main() { let z = (); - debug!(z[0]); //~ ERROR cannot index a value of type `()` + let _ = z[0]; //~ ERROR cannot index a value of type `()` } diff --git a/src/test/compile-fail/issue-1896-1.rs b/src/test/compile-fail/issue-1896-1.rs index fc5132d65104f..13adcd42da2b8 100644 --- a/src/test/compile-fail/issue-1896-1.rs +++ b/src/test/compile-fail/issue-1896-1.rs @@ -8,11 +8,13 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// Test that we require managed closures to be rooted when borrowed. + struct boxedFn<'self> { theFn: &'self fn() -> uint } fn createClosure (closedUint: uint) -> boxedFn { let theFn: @fn() -> uint = || closedUint; - boxedFn {theFn: theFn} //~ ERROR illegal borrow + boxedFn {theFn: theFn} //~ ERROR cannot root } fn main () { diff --git a/src/test/compile-fail/issue-2149.rs b/src/test/compile-fail/issue-2149.rs index 2842d884c9918..cdc8d546dd848 100644 --- a/src/test/compile-fail/issue-2149.rs +++ b/src/test/compile-fail/issue-2149.rs @@ -23,5 +23,4 @@ impl vec_monad for ~[A] { fn main() { ["hi"].bind(|x| [x] ); //~^ ERROR type `[&'static str, .. 1]` does not implement any method in scope named `bind` - //~^^ ERROR Unconstrained region variable } diff --git a/src/test/compile-fail/issue-2151.rs b/src/test/compile-fail/issue-2151.rs index e2bbda7d65a99..bb6d47a47622b 100644 --- a/src/test/compile-fail/issue-2151.rs +++ b/src/test/compile-fail/issue-2151.rs @@ -10,7 +10,6 @@ fn main() { for vec::each(fail!()) |i| { - debug!(i * 2); - //~^ ERROR the type of this value must be known + let _ = i * 2; //~ ERROR the type of this value must be known }; } diff --git a/src/test/compile-fail/issue-2590.rs b/src/test/compile-fail/issue-2590.rs index 7a99ab8a94f16..a0b967d59593a 100644 --- a/src/test/compile-fail/issue-2590.rs +++ b/src/test/compile-fail/issue-2590.rs @@ -18,7 +18,7 @@ trait parse { impl parse for parser { fn parse(&self) -> ~[int] { - self.tokens //~ ERROR moving out of immutable field + self.tokens //~ ERROR cannot move out of field } } diff --git a/src/test/compile-fail/issue-3044.rs b/src/test/compile-fail/issue-3044.rs index fcd5b1deee552..23b11bbe409e1 100644 --- a/src/test/compile-fail/issue-3044.rs +++ b/src/test/compile-fail/issue-3044.rs @@ -11,7 +11,6 @@ fn main() { let needlesArr: ~[char] = ~['a', 'f']; do vec::foldr(needlesArr) |x, y| { - //~^ ERROR Unconstrained region variable #2 } //~^ ERROR 2 parameters were supplied (including the closure passed by the `do` keyword) // diff --git a/src/test/compile-fail/issue-511.rs b/src/test/compile-fail/issue-511.rs index 90c46e5d602c9..c872f89d88450 100644 --- a/src/test/compile-fail/issue-511.rs +++ b/src/test/compile-fail/issue-511.rs @@ -17,5 +17,5 @@ fn f(o: &mut Option) { fn main() { f::(&mut option::None); - //~^ ERROR illegal borrow: creating mutable alias to static item + //~^ ERROR cannot borrow } diff --git a/src/test/compile-fail/kindck-owned-trait-contains.rs b/src/test/compile-fail/kindck-owned-trait-contains.rs index 54ee8bcc70e37..6bb90bff228d4 100644 --- a/src/test/compile-fail/kindck-owned-trait-contains.rs +++ b/src/test/compile-fail/kindck-owned-trait-contains.rs @@ -29,4 +29,7 @@ fn main() { }; assert!(3 == *(y.get())); //~ ERROR dereference of reference outside its lifetime //~^ ERROR reference is not valid outside of its lifetime + //~^^ ERROR reference is not valid outside of its lifetime + //~^^^ ERROR reference is not valid outside of its lifetime + //~^^^^ ERROR cannot infer an appropriate lifetime } diff --git a/src/test/compile-fail/lambda-mutate-nested.rs b/src/test/compile-fail/lambda-mutate-nested.rs index 8b009b91af96c..bfd1e12f3a6e0 100644 --- a/src/test/compile-fail/lambda-mutate-nested.rs +++ b/src/test/compile-fail/lambda-mutate-nested.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// error-pattern:assigning to captured outer immutable variable in a stack closure // Make sure that nesting a block within a @fn doesn't let us // mutate upvars from a @fn. fn f2(x: &fn()) { x(); } @@ -16,6 +15,7 @@ fn f2(x: &fn()) { x(); } fn main() { let i = 0; let ctr: @fn() -> int = || { f2(|| i = i + 1 ); i }; + //~^ ERROR cannot assign error!(ctr()); error!(ctr()); error!(ctr()); diff --git a/src/test/compile-fail/lambda-mutate.rs b/src/test/compile-fail/lambda-mutate.rs index ee5b3d8968418..a848d8698a3d6 100644 --- a/src/test/compile-fail/lambda-mutate.rs +++ b/src/test/compile-fail/lambda-mutate.rs @@ -8,11 +8,11 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// error-pattern:assigning to captured outer variable in a heap closure // Make sure we can't write to upvars from @fns fn main() { let i = 0; let ctr: @fn() -> int = || { i = i + 1; i }; + //~^ ERROR cannot assign error!(ctr()); error!(ctr()); error!(ctr()); diff --git a/src/test/compile-fail/moves-based-on-type-block-bad.rs b/src/test/compile-fail/moves-based-on-type-block-bad.rs index 020dadfc96cd2..feeaadeea8263 100644 --- a/src/test/compile-fail/moves-based-on-type-block-bad.rs +++ b/src/test/compile-fail/moves-based-on-type-block-bad.rs @@ -16,7 +16,7 @@ fn main() { let s = S { x: ~Bar(~42) }; loop { do f(&s) |hellothere| { - match hellothere.x { //~ ERROR moving out of immutable field + match hellothere.x { //~ ERROR cannot move out ~Foo(_) => {} ~Bar(x) => io::println(x.to_str()), ~Baz => {} diff --git a/src/test/compile-fail/moves-based-on-type-move-out-of-closure-env-issue-1965.rs b/src/test/compile-fail/moves-based-on-type-move-out-of-closure-env-issue-1965.rs index 3c15047a29697..ecd58d485a89d 100644 --- a/src/test/compile-fail/moves-based-on-type-move-out-of-closure-env-issue-1965.rs +++ b/src/test/compile-fail/moves-based-on-type-move-out-of-closure-env-issue-1965.rs @@ -13,6 +13,6 @@ fn test(_x: ~uint) {} fn main() { let i = ~3; for uint::range(0, 10) |_x| { - test(i); //~ ERROR moving out of captured outer immutable variable in a stack closure + test(i); //~ ERROR cannot move out } } diff --git a/src/test/compile-fail/mutable-class-fields-2.rs b/src/test/compile-fail/mutable-class-fields-2.rs index 56c715c9847a5..f5d24b316414e 100644 --- a/src/test/compile-fail/mutable-class-fields-2.rs +++ b/src/test/compile-fail/mutable-class-fields-2.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// error-pattern:assigning to immutable field struct cat { priv mut meows : uint, @@ -17,7 +16,7 @@ struct cat { pub impl cat { fn eat(&self) { - self.how_hungry -= 5; + self.how_hungry -= 5; //~ ERROR cannot assign } } diff --git a/src/test/compile-fail/mutable-class-fields.rs b/src/test/compile-fail/mutable-class-fields.rs index 6d11a98c0cb2f..8bebec7134cc3 100644 --- a/src/test/compile-fail/mutable-class-fields.rs +++ b/src/test/compile-fail/mutable-class-fields.rs @@ -8,12 +8,9 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// error-pattern:assigning to immutable field struct cat { priv mut meows : uint, - how_hungry : int, - } fn cat(in_x : uint, in_y : int) -> cat { @@ -25,5 +22,5 @@ fn cat(in_x : uint, in_y : int) -> cat { fn main() { let nyan : cat = cat(52u, 99); - nyan.how_hungry = 0; + nyan.how_hungry = 0; //~ ERROR cannot assign } diff --git a/src/test/compile-fail/mutable-huh-ptr-assign.rs b/src/test/compile-fail/mutable-huh-ptr-assign.rs index ed356f4001dd6..6b3fd4f715384 100644 --- a/src/test/compile-fail/mutable-huh-ptr-assign.rs +++ b/src/test/compile-fail/mutable-huh-ptr-assign.rs @@ -12,7 +12,7 @@ extern mod std; fn main() { unsafe fn f(&&v: *const int) { - *v = 1 //~ ERROR assigning to dereference of const * pointer + *v = 1 //~ ERROR cannot assign } unsafe { diff --git a/src/test/compile-fail/regions-addr-of-arg.rs b/src/test/compile-fail/regions-addr-of-arg.rs index 7f2140d96e16c..4fff5a6f87c78 100644 --- a/src/test/compile-fail/regions-addr-of-arg.rs +++ b/src/test/compile-fail/regions-addr-of-arg.rs @@ -9,7 +9,7 @@ // except according to those terms. fn foo(a: int) { - let _p: &'static int = &a; //~ ERROR illegal borrow + let _p: &'static int = &a; //~ ERROR borrowed value does not live long enough } fn bar(a: int) { diff --git a/src/test/compile-fail/regions-creating-enums.rs b/src/test/compile-fail/regions-creating-enums.rs index 120428e02f4cb..2ab0c14b49b65 100644 --- a/src/test/compile-fail/regions-creating-enums.rs +++ b/src/test/compile-fail/regions-creating-enums.rs @@ -30,12 +30,12 @@ fn compute(x: &ast) -> uint { fn map_nums(x: &ast, f: &fn(uint) -> uint) -> &ast { match *x { num(x) => { - return &num(f(x)); //~ ERROR illegal borrow + return &num(f(x)); //~ ERROR borrowed value does not live long enough } add(x, y) => { let m_x = map_nums(x, f); let m_y = map_nums(y, f); - return &add(m_x, m_y); //~ ERROR illegal borrow + return &add(m_x, m_y); //~ ERROR borrowed value does not live long enough } } } diff --git a/src/test/compile-fail/regions-creating-enums4.rs b/src/test/compile-fail/regions-creating-enums4.rs index 1cb378cf406f8..8f764745697c7 100644 --- a/src/test/compile-fail/regions-creating-enums4.rs +++ b/src/test/compile-fail/regions-creating-enums4.rs @@ -14,8 +14,7 @@ enum ast<'self> { } fn mk_add_bad2<'a>(x: &'a ast<'a>, y: &'a ast<'a>, z: &ast) -> ast { - add(x, y) - //~^ ERROR cannot infer an appropriate lifetime + add(x, y) //~ ERROR cannot infer an appropriate lifetime } fn main() { diff --git a/src/test/compile-fail/regions-escape-bound-fn.rs b/src/test/compile-fail/regions-escape-bound-fn.rs index c81ef77f497db..5ac5e334be23d 100644 --- a/src/test/compile-fail/regions-escape-bound-fn.rs +++ b/src/test/compile-fail/regions-escape-bound-fn.rs @@ -14,6 +14,6 @@ fn with_int(f: &fn(x: &int)) { } fn main() { - let mut x: Option<&int> = None; //~ ERROR cannot infer + let mut x: Option<&int> = None; //~ ERROR cannot infer with_int(|y| x = Some(y)); } diff --git a/src/test/compile-fail/regions-escape-loop-via-variable.rs b/src/test/compile-fail/regions-escape-loop-via-variable.rs index ac10b5c454a85..19bd0bf9747bb 100644 --- a/src/test/compile-fail/regions-escape-loop-via-variable.rs +++ b/src/test/compile-fail/regions-escape-loop-via-variable.rs @@ -18,6 +18,6 @@ fn main() { loop { let x = 1 + *p; - p = &x; //~ ERROR illegal borrow + p = &x; //~ ERROR borrowed value does not live long enough } } diff --git a/src/test/compile-fail/regions-escape-loop-via-vec.rs b/src/test/compile-fail/regions-escape-loop-via-vec.rs index da5e3c2660ef7..92e2cd73dfbd8 100644 --- a/src/test/compile-fail/regions-escape-loop-via-vec.rs +++ b/src/test/compile-fail/regions-escape-loop-via-vec.rs @@ -14,8 +14,8 @@ fn broken() { let mut _y = ~[&mut x]; while x < 10 { let mut z = x; - _y.push(&mut z); //~ ERROR illegal borrow - x += 1; //~ ERROR assigning to mutable local variable prohibited due to outstanding loan + _y.push(&mut z); //~ ERROR borrowed value does not live long enough + x += 1; //~ ERROR cannot assign } } diff --git a/src/test/compile-fail/regions-escape-via-trait-or-not.rs b/src/test/compile-fail/regions-escape-via-trait-or-not.rs index f7165784c7975..aa431d6b81c6e 100644 --- a/src/test/compile-fail/regions-escape-via-trait-or-not.rs +++ b/src/test/compile-fail/regions-escape-via-trait-or-not.rs @@ -23,13 +23,8 @@ fn with(f: &fn(x: &int) -> R) -> int { } fn return_it() -> int { - with(|o| o) - //~^ ERROR cannot infer an appropriate lifetime due to conflicting requirements - //~^^ ERROR reference is not valid outside of its lifetime - //~^^^ ERROR reference is not valid outside of its lifetime + with(|o| o) //~ ERROR reference is not valid outside of its lifetime } fn main() { - let x = return_it(); - debug!("foo=%d", x); } diff --git a/src/test/compile-fail/regions-infer-borrow-scope-too-big.rs b/src/test/compile-fail/regions-infer-borrow-scope-too-big.rs index a8b7ae1b9c8e4..6e9d6c1ef0fde 100644 --- a/src/test/compile-fail/regions-infer-borrow-scope-too-big.rs +++ b/src/test/compile-fail/regions-infer-borrow-scope-too-big.rs @@ -18,7 +18,7 @@ fn x_coord<'r>(p: &'r point) -> &'r int { } fn foo(p: @point) -> &int { - let xc = x_coord(p); //~ ERROR illegal borrow + let xc = x_coord(p); //~ ERROR cannot root assert!(*xc == 3); return xc; } diff --git a/src/test/compile-fail/regions-infer-borrow-scope-within-loop.rs b/src/test/compile-fail/regions-infer-borrow-scope-within-loop.rs index bf8f227b5730e..d23e20130f782 100644 --- a/src/test/compile-fail/regions-infer-borrow-scope-within-loop.rs +++ b/src/test/compile-fail/regions-infer-borrow-scope-within-loop.rs @@ -17,7 +17,7 @@ fn foo(cond: &fn() -> bool, box: &fn() -> @int) { // Here we complain because the resulting region // of this borrow is the fn body as a whole. - y = borrow(x); //~ ERROR illegal borrow: cannot root managed value long enough + y = borrow(x); //~ ERROR cannot root assert!(*x == *y); if cond() { break; } diff --git a/src/test/compile-fail/regions-nested-fns-2.rs b/src/test/compile-fail/regions-nested-fns-2.rs index 2e9a4eb141037..fe995052c52e4 100644 --- a/src/test/compile-fail/regions-nested-fns-2.rs +++ b/src/test/compile-fail/regions-nested-fns-2.rs @@ -13,7 +13,7 @@ fn ignore(_f: &fn<'z>(&'z int) -> &'z int) {} fn nested() { let y = 3; ignore(|z| { - if false { &y } else { z } //~ ERROR illegal borrow + if false { &y } else { z } //~ ERROR borrowed value does not live long enough }); } diff --git a/src/test/compile-fail/regions-nested-fns.rs b/src/test/compile-fail/regions-nested-fns.rs index 3089c362a5044..74399967446ea 100644 --- a/src/test/compile-fail/regions-nested-fns.rs +++ b/src/test/compile-fail/regions-nested-fns.rs @@ -16,7 +16,7 @@ fn nested<'x>(x: &'x int) { ignore::<&fn<'z>(&'z int)>(|z| { ay = x; - ay = &y; //~ ERROR cannot infer an appropriate lifetime + ay = &y; ay = z; }); diff --git a/src/test/compile-fail/regions-ret-borrowed-1.rs b/src/test/compile-fail/regions-ret-borrowed-1.rs index f916b0d95c2ee..f600f6f6edd92 100644 --- a/src/test/compile-fail/regions-ret-borrowed-1.rs +++ b/src/test/compile-fail/regions-ret-borrowed-1.rs @@ -19,6 +19,7 @@ fn with<'a, R>(f: &fn(x: &'a int) -> R) -> R { fn return_it<'a>() -> &'a int { with(|o| o) //~ ERROR mismatched types //~^ ERROR reference is not valid outside of its lifetime + //~^^ ERROR reference is not valid outside of its lifetime } fn main() { diff --git a/src/test/compile-fail/regions-ret-borrowed.rs b/src/test/compile-fail/regions-ret-borrowed.rs index 157b99de9e806..a3540f8f931f9 100644 --- a/src/test/compile-fail/regions-ret-borrowed.rs +++ b/src/test/compile-fail/regions-ret-borrowed.rs @@ -22,6 +22,7 @@ fn with(f: &fn(x: &int) -> R) -> R { fn return_it() -> &int { with(|o| o) //~ ERROR mismatched types //~^ ERROR reference is not valid outside of its lifetime + //~^^ ERROR reference is not valid outside of its lifetime } fn main() { diff --git a/src/test/compile-fail/regions-ret.rs b/src/test/compile-fail/regions-ret.rs index be7b28f6ef4b5..f1a7bdf228166 100644 --- a/src/test/compile-fail/regions-ret.rs +++ b/src/test/compile-fail/regions-ret.rs @@ -9,7 +9,7 @@ // except according to those terms. fn f<'a>(_x : &'a int) -> &'a int { - return &3; //~ ERROR illegal borrow + return &3; //~ ERROR borrowed value does not live long enough } fn main() { diff --git a/src/test/compile-fail/regions-var-type-out-of-scope.rs b/src/test/compile-fail/regions-var-type-out-of-scope.rs index 7d75ac7434931..addf20fd70249 100644 --- a/src/test/compile-fail/regions-var-type-out-of-scope.rs +++ b/src/test/compile-fail/regions-var-type-out-of-scope.rs @@ -14,7 +14,7 @@ fn foo(cond: bool) { let mut x; if cond { - x = &3; //~ ERROR illegal borrow: borrowed value does not live long enough + x = &3; //~ ERROR borrowed value does not live long enough assert!((*x == 3)); } } diff --git a/src/test/compile-fail/swap-no-lval.rs b/src/test/compile-fail/swap-no-lval.rs index 4fe30792e4b31..eca5fb0d315d8 100644 --- a/src/test/compile-fail/swap-no-lval.rs +++ b/src/test/compile-fail/swap-no-lval.rs @@ -10,6 +10,6 @@ fn main() { 5 <-> 3; - //~^ ERROR swapping to and from non-lvalue - //~^^ ERROR swapping to and from non-lvalue + //~^ ERROR cannot assign + //~^^ ERROR cannot assign } diff --git a/src/test/compile-fail/writing-to-immutable-vec.rs b/src/test/compile-fail/writing-to-immutable-vec.rs index 3f4c8ccef8175..faa3d6cfe47e7 100644 --- a/src/test/compile-fail/writing-to-immutable-vec.rs +++ b/src/test/compile-fail/writing-to-immutable-vec.rs @@ -8,5 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// error-pattern:assigning to immutable vec content -fn main() { let v: ~[int] = ~[1, 2, 3]; v[1] = 4; } +fn main() { + let v: ~[int] = ~[1, 2, 3]; + v[1] = 4; //~ ERROR cannot assign +} diff --git a/src/test/compile-fail/issue-4500.rs b/src/test/run-pass/borrowck-nested-calls.rs similarity index 51% rename from src/test/compile-fail/issue-4500.rs rename to src/test/run-pass/borrowck-nested-calls.rs index 356a64498219a..4494f5f2fa337 100644 --- a/src/test/compile-fail/issue-4500.rs +++ b/src/test/run-pass/borrowck-nested-calls.rs @@ -8,7 +8,25 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -fn main () { - let mut _p: & int = & 4; - _p = &*~3; //~ ERROR illegal borrow +// xfail-test #5074 nested method calls + +// Test that (safe) nested calls with `&mut` receivers are permitted. + +struct Foo {a: uint, b: uint} + +pub impl Foo { + fn inc_a(&mut self, v: uint) { self.a += v; } + + fn next_b(&mut self) -> uint { + let b = self.b; + self.b += 1; + b + } +} + +fn main() { + let mut f = Foo {a: 22, b: 23}; + f.inc_a(f.next_b()); + assert_eq!(f.a, 22+23); + assert_eq!(f.b, 24); } diff --git a/src/test/run-pass/coerce-reborrow-mut-vec-rcvr.rs b/src/test/run-pass/coerce-reborrow-mut-vec-rcvr.rs index 0e67532d7a1fc..b0d06dae10dc0 100644 --- a/src/test/run-pass/coerce-reborrow-mut-vec-rcvr.rs +++ b/src/test/run-pass/coerce-reborrow-mut-vec-rcvr.rs @@ -1,10 +1,10 @@ trait Reverser { - fn reverse(&self); + fn reverse(self); } impl<'self> Reverser for &'self mut [uint] { - fn reverse(&self) { - vec::reverse(*self); + fn reverse(self) { + vec::reverse(self); } } diff --git a/src/test/run-pass/issue-2735-2.rs b/src/test/run-pass/issue-2735-2.rs index 96f76b0fd6ba6..ca584e1a6e3b8 100644 --- a/src/test/run-pass/issue-2735-2.rs +++ b/src/test/run-pass/issue-2735-2.rs @@ -9,27 +9,25 @@ // except according to those terms. // This test should behave exactly like issue-2735-3 -struct defer<'self> { - b: &'self mut bool, +struct defer { + b: @mut bool, } #[unsafe_destructor] -impl<'self> Drop for defer<'self> { +impl Drop for defer { fn finalize(&self) { - unsafe { - *(self.b) = true; - } + *self.b = true; } } -fn defer<'r>(b: &'r mut bool) -> defer<'r> { +fn defer(b: @mut bool) -> defer { defer { b: b } } pub fn main() { - let mut dtor_ran = false; - let _ = defer(&mut dtor_ran); - assert!((dtor_ran)); + let dtor_ran = @mut false; + let _ = defer(dtor_ran); + assert!(*dtor_ran); } diff --git a/src/test/run-pass/issue-2735-3.rs b/src/test/run-pass/issue-2735-3.rs index 50e3c946f50ef..44ca5d6929bd6 100644 --- a/src/test/run-pass/issue-2735-3.rs +++ b/src/test/run-pass/issue-2735-3.rs @@ -9,27 +9,25 @@ // except according to those terms. // This test should behave exactly like issue-2735-2 -struct defer<'self> { - b: &'self mut bool, +struct defer { + b: @mut bool, } #[unsafe_destructor] -impl<'self> Drop for defer<'self> { +impl Drop for defer { fn finalize(&self) { - unsafe { - *(self.b) = true; - } + *self.b = true; } } -fn defer<'r>(b: &'r mut bool) -> defer<'r> { +fn defer(b: @mut bool) -> defer { defer { b: b } } pub fn main() { - let mut dtor_ran = false; - defer(&mut dtor_ran); - assert!((dtor_ran)); + let dtor_ran = @mut false; + defer(dtor_ran); + assert!(*dtor_ran); } From 7fed4800733805156f0d157e45b01de405c4b48e Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Tue, 30 Apr 2013 13:01:12 -0400 Subject: [PATCH 053/410] char: fix unused import warning --- src/libcore/char.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libcore/char.rs b/src/libcore/char.rs index ef2bd91e97313..7868b463807f6 100644 --- a/src/libcore/char.rs +++ b/src/libcore/char.rs @@ -10,6 +10,7 @@ //! Utilities for manipulating the char type +#[cfg(notest)] use cmp::Ord; use option::{None, Option, Some}; use str; From 6f18bb550e1293e77281b1cc76f1830a4da2d355 Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Tue, 30 Apr 2013 13:01:20 -0400 Subject: [PATCH 054/410] iter: add a find function --- src/libcore/iter.rs | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/libcore/iter.rs b/src/libcore/iter.rs index 7476531ef944c..6f3c6890228ac 100644 --- a/src/libcore/iter.rs +++ b/src/libcore/iter.rs @@ -41,6 +41,8 @@ much easier to implement. */ +use option::{Option, Some, None}; + pub trait Times { fn times(&self, it: &fn() -> bool); } @@ -104,6 +106,27 @@ pub fn all(predicate: &fn(T) -> bool, iter: &fn(f: &fn(T) -> bool)) -> bool { true } +/** + * Return the first element where `predicate` returns `true`, otherwise return `Npne` if no element + * is found. + * + * # Example: + * + * ~~~~ + * let xs = ~[1u, 2, 3, 4, 5, 6]; + * assert_eq!(*find(|& &x: & &uint| x > 3, |f| xs.each(f)).unwrap(), 4); + * ~~~~ + */ +#[inline(always)] +pub fn find(predicate: &fn(&T) -> bool, iter: &fn(f: &fn(T) -> bool)) -> Option { + for iter |x| { + if predicate(&x) { + return Some(x); + } + } + None +} + #[cfg(test)] mod tests { use super::*; @@ -128,4 +151,10 @@ mod tests { assert!(all(|x: uint| x < 6, |f| uint::range(1, 6, f))); assert!(!all(|x: uint| x < 5, |f| uint::range(1, 6, f))); } + + #[test] + fn test_find() { + let xs = ~[1u, 2, 3, 4, 5, 6]; + assert_eq!(*find(|& &x: & &uint| x > 3, |f| xs.each(f)).unwrap(), 4); + } } From 229ebf0bca23f5619940ecf2cf4541e0bb7416de Mon Sep 17 00:00:00 2001 From: John Clements Date: Thu, 18 Apr 2013 11:40:44 -0700 Subject: [PATCH 055/410] deleted two tests intended to test RUST_CC_ZEAL, an apparently defunct flag for the cycle collector --- src/test/run-pass/issue-1466.rs | 17 ----------------- src/test/run-pass/issue-1989.rs | 33 --------------------------------- 2 files changed, 50 deletions(-) delete mode 100644 src/test/run-pass/issue-1466.rs delete mode 100644 src/test/run-pass/issue-1989.rs diff --git a/src/test/run-pass/issue-1466.rs b/src/test/run-pass/issue-1466.rs deleted file mode 100644 index 1915f1b3a4100..0000000000000 --- a/src/test/run-pass/issue-1466.rs +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2012 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 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -// exec-env:RUST_CC_ZEAL=1 -// xfail-test - -pub fn main() { - error!("%?", os::getenv(~"RUST_CC_ZEAL")); - let _x = @{a: @10, b: ~true}; -} diff --git a/src/test/run-pass/issue-1989.rs b/src/test/run-pass/issue-1989.rs deleted file mode 100644 index e3327283a8162..0000000000000 --- a/src/test/run-pass/issue-1989.rs +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2012 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 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -// exec-env:RUST_CC_ZEAL=1 - -enum maybe_pointy { - none, - p(@mut Pointy) -} - -struct Pointy { - a : maybe_pointy, - f : @fn()->(), -} - -fn empty_pointy() -> @mut Pointy { - return @mut Pointy{ - a : none, - f : || {}, - } -} - -pub fn main() { - let v = ~[empty_pointy(), empty_pointy()]; - v[0].a = p(v[0]); -} From 5d8db6fd373f73e989439a4a95c6039ddc3fe1ed Mon Sep 17 00:00:00 2001 From: John Clements Date: Thu, 18 Apr 2013 12:25:44 -0700 Subject: [PATCH 056/410] remove (non-parsing) test related to impl d for d feature --- src/test/auxiliary/issue-2196-a.rs | 13 ------------- src/test/auxiliary/issue-2196-b.rs | 18 ------------------ src/test/auxiliary/issue-2196-c.rc | 16 ---------------- src/test/auxiliary/issue-2196-c.rs | 14 -------------- src/test/auxiliary/issue-2196-d.rs | 0 src/test/run-pass/issue-2196.rs | 19 ------------------- 6 files changed, 80 deletions(-) delete mode 100644 src/test/auxiliary/issue-2196-a.rs delete mode 100644 src/test/auxiliary/issue-2196-b.rs delete mode 100644 src/test/auxiliary/issue-2196-c.rc delete mode 100644 src/test/auxiliary/issue-2196-c.rs delete mode 100644 src/test/auxiliary/issue-2196-d.rs delete mode 100644 src/test/run-pass/issue-2196.rs diff --git a/src/test/auxiliary/issue-2196-a.rs b/src/test/auxiliary/issue-2196-a.rs deleted file mode 100644 index 959164d85dd2f..0000000000000 --- a/src/test/auxiliary/issue-2196-a.rs +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2012 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 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -#[link(name = "issue2196a", vers = "0.1")]; -#[crate_type = "lib"]; - diff --git a/src/test/auxiliary/issue-2196-b.rs b/src/test/auxiliary/issue-2196-b.rs deleted file mode 100644 index 1ef9334b7cdf3..0000000000000 --- a/src/test/auxiliary/issue-2196-b.rs +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2012 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 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -#[link(name = "issue2196b", vers = "0.1")]; -#[crate_type = "lib"]; - -use a(name = "issue2196a"); - -type d = str; -impl d for d { } - diff --git a/src/test/auxiliary/issue-2196-c.rc b/src/test/auxiliary/issue-2196-c.rc deleted file mode 100644 index 59c1e8108c08c..0000000000000 --- a/src/test/auxiliary/issue-2196-c.rc +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2012 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 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -#[link(name = "issue2196c", vers = "0.1")]; -#[crate_type = "lib"]; - -use b(name = "issue2196b"); -#[path = "issue-2196-d.rs"] -mod d; diff --git a/src/test/auxiliary/issue-2196-c.rs b/src/test/auxiliary/issue-2196-c.rs deleted file mode 100644 index 290267cbf3258..0000000000000 --- a/src/test/auxiliary/issue-2196-c.rs +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2012 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 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -use b::d; - -type t = uint; - diff --git a/src/test/auxiliary/issue-2196-d.rs b/src/test/auxiliary/issue-2196-d.rs deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/src/test/run-pass/issue-2196.rs b/src/test/run-pass/issue-2196.rs deleted file mode 100644 index 3fce821561a90..0000000000000 --- a/src/test/run-pass/issue-2196.rs +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2012 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 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -// xfail-test -// aux-build:issue-2196-a.rs -// aux-build:issue-2196-b.rs -// aux-build:issue-2196-c.rc - -use c(name = "issue2196c"); -use c::t; - -pub fn main() { } From 78942a2d16a9cb57f518ee6220b252e1e96e5881 Mon Sep 17 00:00:00 2001 From: John Clements Date: Thu, 18 Apr 2013 13:22:59 -0700 Subject: [PATCH 057/410] this issue is a dup of another one that has a correct test case this test case has rotted wrt modern syntax. fortunately, this issue was a dup of another one, and that one still ICEs. --- src/test/run-pass/issue-2869.rs | 24 ------------------------ 1 file changed, 24 deletions(-) delete mode 100644 src/test/run-pass/issue-2869.rs diff --git a/src/test/run-pass/issue-2869.rs b/src/test/run-pass/issue-2869.rs deleted file mode 100644 index 619f4b4d7db8a..0000000000000 --- a/src/test/run-pass/issue-2869.rs +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2012 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 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -// xfail-test -enum pat { pat_ident(Option) } - -fn f(pat: pat) -> bool { true } - -fn num_bindings(pat: pat) -> uint { - match pat { - pat_ident(_) if f(pat) { 0 } - pat_ident(None) { 1 } - pat_ident(Some(sub)) { sub } - } -} - -pub fn main() {} From 77da0553455c5b236ea80056f743b26c7c0edbd3 Mon Sep 17 00:00:00 2001 From: John Clements Date: Thu, 18 Apr 2013 13:44:49 -0700 Subject: [PATCH 058/410] This test case is obsolete for two reasons First, it refers to a feature (trait bounds on type parameters) that's apparently no longer in the language. Second, if I understand the issue correctly, it should never have been a "run-pass" test because it was supposed to fail. --- src/test/run-pass/issue-3480.rs | 26 -------------------------- 1 file changed, 26 deletions(-) delete mode 100644 src/test/run-pass/issue-3480.rs diff --git a/src/test/run-pass/issue-3480.rs b/src/test/run-pass/issue-3480.rs deleted file mode 100644 index aaff822398d6f..0000000000000 --- a/src/test/run-pass/issue-3480.rs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2012 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 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -// xfail-test -type IMap = ~[(K, V)]; - -trait ImmutableMap -{ - fn contains_key(key: K) -> bool; -} - -impl IMap : ImmutableMap -{ - fn contains_key(key: K) -> bool { - vec::find(self, |e| {e.first() == key}).is_some() - } -} - -pub fn main() {} From 9455eaf77bef8f225e146e61107d26010f137b51 Mon Sep 17 00:00:00 2001 From: John Clements Date: Thu, 18 Apr 2013 13:58:15 -0700 Subject: [PATCH 059/410] changed to impl trait for type stx --- src/test/run-pass/issue-3979-generics.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/run-pass/issue-3979-generics.rs b/src/test/run-pass/issue-3979-generics.rs index d26e9f1ba7b43..57962911538de 100644 --- a/src/test/run-pass/issue-3979-generics.rs +++ b/src/test/run-pass/issue-3979-generics.rs @@ -32,7 +32,7 @@ impl Positioned for Point { } } -impl Point: Movable; +impl Movable for Point; pub fn main() { let p = Point{ x: 1, y: 2}; From aa48a170d55e3003b70626b16ccd698b5aca8269 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Tue, 30 Apr 2013 14:07:26 -0400 Subject: [PATCH 060/410] dataflow: fix flow of information through pattern variants --- src/librustc/middle/dataflow.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/librustc/middle/dataflow.rs b/src/librustc/middle/dataflow.rs index cfdd7f95030aa..9d032a1839e23 100644 --- a/src/librustc/middle/dataflow.rs +++ b/src/librustc/middle/dataflow.rs @@ -846,10 +846,9 @@ impl<'self, O:DataFlowOperator> PropagationContext<'self, O> { // alternatives, so we must treat this like an N-way select // statement. let initial_state = reslice(in_out).to_vec(); - self.reset(in_out); for pats.each |&pat| { let mut temp = copy initial_state; - self.walk_pat(pat, in_out, loop_scopes); + self.walk_pat(pat, temp, loop_scopes); join_bits(&self.dfcx.oper, temp, in_out); } } From 7a0c1ea560126a6ccefbe7981fd1e18d80d3ed20 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Tue, 30 Apr 2013 14:07:52 -0400 Subject: [PATCH 061/410] correct used_mut annotations for args, inherited case --- src/librustc/middle/borrowck/check_loans.rs | 33 +++++++++------- .../middle/borrowck/gather_loans/lifetime.rs | 4 +- .../middle/borrowck/gather_loans/mod.rs | 39 ------------------- .../borrowck/gather_loans/restrictions.rs | 4 +- src/librustc/middle/borrowck/mod.rs | 5 +-- 5 files changed, 24 insertions(+), 61 deletions(-) diff --git a/src/librustc/middle/borrowck/check_loans.rs b/src/librustc/middle/borrowck/check_loans.rs index 56eb57009ca08..9330395c061a7 100644 --- a/src/librustc/middle/borrowck/check_loans.rs +++ b/src/librustc/middle/borrowck/check_loans.rs @@ -260,11 +260,21 @@ pub impl<'self> CheckLoanCtxt<'self> { // and report an error otherwise. match cmt.mutbl { mc::McDeclared => { - // OK + // OK, but we have to mark arguments as requiring mut + // if they are assigned (other cases are handled by liveness, + // since we need to distinguish local variables assigned + // once vs those assigned multiple times) + match cmt.cat { + mc::cat_self(*) | + mc::cat_arg(*) => { + mark_variable_as_used_mut(self, cmt); + } + _ => {} + } } mc::McInherited => { // OK, but we may have to add an entry to `used_mut_nodes` - mark_writes_through_upvars_as_used_mut(self, cmt); + mark_variable_as_used_mut(self, cmt); } mc::McReadOnly | mc::McImmutable => { // Subtle: liveness guarantees that immutable local @@ -289,33 +299,28 @@ pub impl<'self> CheckLoanCtxt<'self> { self, expr, cmt); } - fn mark_writes_through_upvars_as_used_mut(self: &CheckLoanCtxt, - cmt: mc::cmt) { + fn mark_variable_as_used_mut(self: &CheckLoanCtxt, + cmt: mc::cmt) { //! If the mutability of the `cmt` being written is inherited - //! from a local variable in another closure, liveness may + //! from a local variable, liveness will //! not have been able to detect that this variable's mutability //! is important, so we must add the variable to the - //! `used_mut_nodes` table here. This is because liveness - //! does not consider closures. + //! `used_mut_nodes` table here. - let mut passed_upvar = false; let mut cmt = cmt; loop { debug!("mark_writes_through_upvars_as_used_mut(cmt=%s)", cmt.repr(self.tcx())); match cmt.cat { mc::cat_local(id) | - mc::cat_arg(id, _) | + mc::cat_arg(id) | mc::cat_self(id) => { - if passed_upvar { - self.tcx().used_mut_nodes.insert(id); - } + self.tcx().used_mut_nodes.insert(id); return; } mc::cat_stack_upvar(b) => { cmt = b; - passed_upvar = true; } mc::cat_rvalue | @@ -552,7 +557,7 @@ pub impl<'self> CheckLoanCtxt<'self> { match cmt.cat { // Rvalues, locals, and arguments can be moved: mc::cat_rvalue | mc::cat_local(_) | - mc::cat_arg(_, ast::by_copy) | mc::cat_self(_) => {} + mc::cat_arg(_) | mc::cat_self(_) => {} // It seems strange to allow a move out of a static item, // but what happens in practice is that you have a diff --git a/src/librustc/middle/borrowck/gather_loans/lifetime.rs b/src/librustc/middle/borrowck/gather_loans/lifetime.rs index 21d7e7041d959..4d267b7dc471c 100644 --- a/src/librustc/middle/borrowck/gather_loans/lifetime.rs +++ b/src/librustc/middle/borrowck/gather_loans/lifetime.rs @@ -255,7 +255,7 @@ impl GuaranteeLifetimeContext { match cmt.guarantor().cat { mc::cat_local(id) | mc::cat_self(id) | - mc::cat_arg(id, _) => { + mc::cat_arg(id) => { self.bccx.moved_variables_set.contains(&id) } mc::cat_rvalue | @@ -292,7 +292,7 @@ impl GuaranteeLifetimeContext { ty::re_static } mc::cat_local(local_id) | - mc::cat_arg(local_id, _) | + mc::cat_arg(local_id) | mc::cat_self(local_id) => { self.bccx.tcx.region_maps.encl_region(local_id) } diff --git a/src/librustc/middle/borrowck/gather_loans/mod.rs b/src/librustc/middle/borrowck/gather_loans/mod.rs index 82638ceb4d4f1..1bc3b70ac3842 100644 --- a/src/librustc/middle/borrowck/gather_loans/mod.rs +++ b/src/librustc/middle/borrowck/gather_loans/mod.rs @@ -27,7 +27,6 @@ use util::common::indenter; use util::ppaux::{Repr}; use core::hashmap::HashSet; -use core::vec; use syntax::ast::{m_const, m_imm, m_mutbl}; use syntax::ast; use syntax::ast_util::id_range; @@ -169,20 +168,6 @@ fn gather_loans_in_expr(ex: @ast::expr, visit::visit_expr(ex, self, vt); } - ast::expr_call(f, ref args, _) => { - let arg_tys = ty::ty_fn_args(ty::expr_ty(self.tcx(), f)); - self.guarantee_arguments(ex, *args, arg_tys); - visit::visit_expr(ex, self, vt); - } - - ast::expr_method_call(_, _, _, ref args, _) => { - let arg_tys = ty::ty_fn_args(ty::node_id_to_type(self.tcx(), - ex.callee_id)); - self.guarantee_arguments(ex, *args, arg_tys); - - visit::visit_expr(ex, self, vt); - } - ast::expr_match(ex_v, ref arms) => { let cmt = self.bccx.cat_expr(ex_v); for arms.each |arm| { @@ -271,30 +256,6 @@ pub impl GatherLoanCtxt { assert!(id == popped); } - fn guarantee_arguments(&mut self, - call_expr: @ast::expr, - args: &[@ast::expr], - arg_tys: &[ty::arg]) { - for vec::each2(args, arg_tys) |arg, arg_ty| { - match ty::resolved_mode(self.tcx(), arg_ty.mode) { - ast::by_ref => { - self.guarantee_by_ref_argument(call_expr, *arg); - } - ast::by_copy => {} - } - } - } - - fn guarantee_by_ref_argument(&mut self, - call_expr: @ast::expr, - arg_expr: @ast::expr) { - // FIXME(#5074) nested method calls - let scope_r = ty::re_scope(call_expr.id); - let arg_cmt = self.bccx.cat_expr(arg_expr); - self.guarantee_valid(arg_expr.id, arg_expr.span, - arg_cmt, m_imm, scope_r); - } - fn guarantee_adjustments(&mut self, expr: @ast::expr, adjustment: &ty::AutoAdjustment) { diff --git a/src/librustc/middle/borrowck/gather_loans/restrictions.rs b/src/librustc/middle/borrowck/gather_loans/restrictions.rs index 950dbc58ec364..0be4c67a9bc91 100644 --- a/src/librustc/middle/borrowck/gather_loans/restrictions.rs +++ b/src/librustc/middle/borrowck/gather_loans/restrictions.rs @@ -15,7 +15,6 @@ use middle::borrowck::*; use mc = middle::mem_categorization; use middle::ty; use syntax::ast::{m_const, m_imm, m_mutbl}; -use syntax::ast; use syntax::codemap::span; pub enum RestrictionResult { @@ -74,7 +73,7 @@ impl RestrictionsContext { } mc::cat_local(local_id) | - mc::cat_arg(local_id, ast::by_copy) | + mc::cat_arg(local_id) | mc::cat_self(local_id) => { let lp = @LpVar(local_id); SafeIf(lp, ~[Restriction {loan_path: lp, @@ -114,7 +113,6 @@ impl RestrictionsContext { mc::cat_copied_upvar(*) | // FIXME(#2152) allow mutation of upvars mc::cat_static_item(*) | mc::cat_implicit_self(*) | - mc::cat_arg(_, ast::by_ref) | mc::cat_deref(_, _, mc::region_ptr(m_imm, _)) | mc::cat_deref(_, _, mc::gc_ptr(m_imm)) => { Safe diff --git a/src/librustc/middle/borrowck/mod.rs b/src/librustc/middle/borrowck/mod.rs index c108b020378eb..3f10223723727 100644 --- a/src/librustc/middle/borrowck/mod.rs +++ b/src/librustc/middle/borrowck/mod.rs @@ -242,13 +242,12 @@ pub fn opt_loan_path(cmt: mc::cmt) -> Option<@LoanPath> { mc::cat_rvalue | mc::cat_static_item | mc::cat_copied_upvar(_) | - mc::cat_implicit_self | - mc::cat_arg(_, ast::by_ref) => { + mc::cat_implicit_self => { None } mc::cat_local(id) | - mc::cat_arg(id, ast::by_copy) | + mc::cat_arg(id) | mc::cat_self(id) => { Some(@LpVar(id)) } From 545d51c1608198aed4e3bdca0dac23bcc6af19b9 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Tue, 30 Apr 2013 14:08:18 -0400 Subject: [PATCH 062/410] rustc: remove modes --- src/librustc/middle/mem_categorization.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/librustc/middle/mem_categorization.rs b/src/librustc/middle/mem_categorization.rs index f525230664a21..5921e4b0e4ca0 100644 --- a/src/librustc/middle/mem_categorization.rs +++ b/src/librustc/middle/mem_categorization.rs @@ -64,7 +64,7 @@ pub enum categorization { cat_copied_upvar(CopiedUpvar), // upvar copied into @fn or ~fn env cat_stack_upvar(cmt), // by ref upvar from &fn cat_local(ast::node_id), // local variable - cat_arg(ast::node_id, ast::rmode), // formal argument + cat_arg(ast::node_id), // formal argument cat_deref(cmt, uint, ptr_kind), // deref of a ptr cat_interior(cmt, interior_kind), // something interior cat_discr(cmt, ast::node_id), // match discriminant (see preserve()) @@ -465,11 +465,10 @@ pub impl mem_categorization_ctxt { // m: mutability of the argument let m = if mutbl {McDeclared} else {McImmutable}; - let mode = ty::resolved_mode(self.tcx, mode); @cmt_ { id: id, span: span, - cat: cat_arg(vid, mode), + cat: cat_arg(vid), mutbl: m, ty:expr_ty } @@ -1059,7 +1058,7 @@ pub impl cmt_ { cat_copied_upvar(CopiedUpvar {onceness: ast::Once, _}) | cat_rvalue(*) | cat_local(*) | - cat_arg(_, ast::by_copy) | + cat_arg(_) | cat_self(*) | cat_deref(_, _, unsafe_ptr(*)) | // of course it is aliasable, but... cat_deref(_, _, region_ptr(m_mutbl, _)) => { @@ -1068,8 +1067,7 @@ pub impl cmt_ { cat_copied_upvar(CopiedUpvar {onceness: ast::Many, _}) | cat_static_item(*) | - cat_implicit_self(*) | - cat_arg(_, ast::by_ref) => { + cat_implicit_self(*) => { Some(AliasableOther) } From 70b9ad1748748d93ccef95b59435a7357b350d11 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Tue, 30 Apr 2013 14:09:14 -0400 Subject: [PATCH 063/410] rustc: work around issue with default-method-simple, fix some rebase errors --- src/librustc/middle/ty.rs | 7 +++++++ src/librustc/middle/typeck/check/method.rs | 16 ++++++++++++++++ src/librustc/middle/typeck/check/mod.rs | 3 ++- src/librustc/middle/typeck/check/regionck.rs | 10 ++++------ 4 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index 28705ac49320a..b17dac82048bf 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -1553,6 +1553,13 @@ pub fn type_is_ty_var(ty: t) -> bool { pub fn type_is_bool(ty: t) -> bool { get(ty).sty == ty_bool } +pub fn type_is_self(ty: t) -> bool { + match get(ty).sty { + ty_self(*) => true, + _ => false + } +} + pub fn type_is_structural(ty: t) -> bool { match get(ty).sty { ty_struct(*) | ty_tup(_) | ty_enum(*) | ty_closure(_) | ty_trait(*) | diff --git a/src/librustc/middle/typeck/check/method.rs b/src/librustc/middle/typeck/check/method.rs index 0cc2ddd32b46a..de6530fb464c5 100644 --- a/src/librustc/middle/typeck/check/method.rs +++ b/src/librustc/middle/typeck/check/method.rs @@ -658,6 +658,12 @@ pub impl<'self> LookupContext<'self> { let tcx = self.tcx(); return match ty::get(self_ty).sty { + ty::ty_rptr(_, self_mt) if default_method_hack(self_mt) => { + (self_ty, + ty::AutoDerefRef(ty::AutoDerefRef { + autoderefs: autoderefs, + autoref: None})) + } ty::ty_rptr(_, self_mt) => { let region = self.infcx().next_region_var_nb(self.expr.span); (ty::mk_rptr(tcx, region, self_mt), @@ -679,6 +685,16 @@ pub impl<'self> LookupContext<'self> { autoref: None})) } }; + + fn default_method_hack(self_mt: ty::mt) -> bool { + // FIXME(#6129). Default methods can't deal with autoref. + // + // I am a horrible monster and I pray for death. Currently + // the default method code fails when you try to reborrow + // because it is not handling types correctly. In lieu of + // fixing that, I am introducing this horrible hack. - ndm + self_mt.mutbl == m_imm && ty::type_is_self(self_mt.ty) + } } fn search_for_autosliced_method( diff --git a/src/librustc/middle/typeck/check/mod.rs b/src/librustc/middle/typeck/check/mod.rs index 84fc40f6954a8..fb58df3d55c68 100644 --- a/src/librustc/middle/typeck/check/mod.rs +++ b/src/librustc/middle/typeck/check/mod.rs @@ -2966,7 +2966,8 @@ pub fn check_block(fcx0: @mut FnCtxt, blk: &ast::blk) { pub fn check_block_with_expected(fcx: @mut FnCtxt, blk: &ast::blk, expected: Option) { - let prev = replace(&mut fcx.ps, fcx.ps.recurse(blk)); + let purity_state = fcx.ps.recurse(blk); + let prev = replace(&mut fcx.ps, purity_state); do fcx.with_region_lb(blk.node.id) { let mut warned = false; diff --git a/src/librustc/middle/typeck/check/regionck.rs b/src/librustc/middle/typeck/check/regionck.rs index 1c35c911b14cd..be513cbb0f307 100644 --- a/src/librustc/middle/typeck/check/regionck.rs +++ b/src/librustc/middle/typeck/check/regionck.rs @@ -457,20 +457,18 @@ fn constrain_call(rcx: @mut Rcx, let callee_scope = call_expr.id; let callee_region = ty::re_scope(callee_scope); - for fn_sig.inputs.eachi |i, input| { + for arg_exprs.each |&arg_expr| { // ensure that any regions appearing in the argument type are // valid for at least the lifetime of the function: constrain_regions_in_type_of_node( - rcx, arg_exprs[i].id, callee_region, arg_exprs[i].span); + rcx, arg_expr.id, callee_region, arg_expr.span); // unfortunately, there are two means of taking implicit // references, and we need to propagate constraints as a // result. modes are going away and the "DerefArgs" code // should be ported to use adjustments - ty::set_default_mode(tcx, input.mode, ast::by_copy); - let is_by_ref = ty::resolved_mode(tcx, input.mode) == ast::by_ref; - if implicitly_ref_args || is_by_ref { - guarantor::for_by_ref(rcx, arg_exprs[i], callee_scope); + if implicitly_ref_args { + guarantor::for_by_ref(rcx, arg_expr, callee_scope); } } From 418f99111852d13e9446c70cd616e6e6780bb632 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Tue, 30 Apr 2013 14:10:21 -0400 Subject: [PATCH 064/410] allover: numerous unused muts etc --- src/compiletest/header.rs | 3 +-- src/compiletest/runtest.rs | 2 +- src/libcore/cell.rs | 4 ++-- src/libcore/comm.rs | 4 ++-- src/libcore/flate.rs | 13 ++++++------- src/libcore/libc.rs | 3 +-- src/libcore/os.rs | 17 ++++++++--------- src/libcore/rt/sched/mod.rs | 2 -- src/libcore/unstable/extfmt.rs | 6 +++--- src/libcore/vec.rs | 9 +++------ src/librustc/middle/lang_items.rs | 11 +++++------ src/librustc/middle/moves.rs | 2 +- src/librustc/util/ppaux.rs | 3 ++- src/libstd/ebml.rs | 2 +- src/libstd/future.rs | 2 +- src/libstd/sort.rs | 1 - src/libstd/workcache.rs | 2 +- src/libsyntax/parse/mod.rs | 2 +- src/libsyntax/parse/parser.rs | 3 +-- src/test/compile-fail/die-not-static.rs | 3 +-- 20 files changed, 41 insertions(+), 53 deletions(-) diff --git a/src/compiletest/header.rs b/src/compiletest/header.rs index b0d04c6739b4a..28bbbda966340 100644 --- a/src/compiletest/header.rs +++ b/src/compiletest/header.rs @@ -82,14 +82,13 @@ pub fn load_props(testfile: &Path) -> TestProps { } pub fn is_test_ignored(config: config, testfile: &Path) -> bool { - let mut found = false; for iter_header(testfile) |ln| { if parse_name_directive(ln, ~"xfail-test") { return true; } if parse_name_directive(ln, xfail_target()) { return true; } if config.mode == common::mode_pretty && parse_name_directive(ln, ~"xfail-pretty") { return true; } }; - return found; + return false; fn xfail_target() -> ~str { ~"xfail-" + str::from_slice(os::SYSNAME) diff --git a/src/compiletest/runtest.rs b/src/compiletest/runtest.rs index fef4cabf7fd6d..5805c1730296c 100644 --- a/src/compiletest/runtest.rs +++ b/src/compiletest/runtest.rs @@ -106,7 +106,7 @@ fn run_rpass_test(config: config, props: TestProps, testfile: &Path) { fatal_ProcRes(~"test run failed!", ProcRes); } } else { - let mut ProcRes = jit_test(config, props, testfile); + let ProcRes = jit_test(config, props, testfile); if ProcRes.status != 0 { fatal_ProcRes(~"jit failed!", ProcRes); } } diff --git a/src/libcore/cell.rs b/src/libcore/cell.rs index 27e03d2bf3103..959defeec0413 100644 --- a/src/libcore/cell.rs +++ b/src/libcore/cell.rs @@ -42,7 +42,7 @@ pub fn empty_cell() -> Cell { pub impl Cell { /// Yields the value, failing if the cell is empty. fn take(&self) -> T { - let mut self = unsafe { transmute_mut(self) }; + let self = unsafe { transmute_mut(self) }; if self.is_empty() { fail!(~"attempt to take an empty cell"); } @@ -54,7 +54,7 @@ pub impl Cell { /// Returns the value, failing if the cell is full. fn put_back(&self, value: T) { - let mut self = unsafe { transmute_mut(self) }; + let self = unsafe { transmute_mut(self) }; if !self.is_empty() { fail!(~"attempt to put a value back into a full cell"); } diff --git a/src/libcore/comm.rs b/src/libcore/comm.rs index 50a3bba049bbb..d075ff08bb7eb 100644 --- a/src/libcore/comm.rs +++ b/src/libcore/comm.rs @@ -205,8 +205,8 @@ impl Selectable for Port { fn header(&self) -> *PacketHeader { unsafe { match self.endp { - Some(ref endp) => endp.header(), - None => fail!(~"peeking empty stream") + Some(ref endp) => endp.header(), + None => fail!(~"peeking empty stream") } } } diff --git a/src/libcore/flate.rs b/src/libcore/flate.rs index c3518cc8b6ee2..ba10f97e626c4 100644 --- a/src/libcore/flate.rs +++ b/src/libcore/flate.rs @@ -16,7 +16,6 @@ Simple compression use libc; use libc::{c_void, size_t, c_int}; -use ptr; use vec; #[cfg(test)] use rand; @@ -29,13 +28,13 @@ pub mod rustrt { pub extern { unsafe fn tdefl_compress_mem_to_heap(psrc_buf: *const c_void, src_buf_len: size_t, - pout_len: *size_t, + pout_len: *mut size_t, flags: c_int) -> *c_void; unsafe fn tinfl_decompress_mem_to_heap(psrc_buf: *const c_void, src_buf_len: size_t, - pout_len: *size_t, + pout_len: *mut size_t, flags: c_int) -> *c_void; } @@ -53,11 +52,11 @@ pub fn deflate_bytes(bytes: &const [u8]) -> ~[u8] { let res = rustrt::tdefl_compress_mem_to_heap(b as *c_void, len as size_t, - &outsz, + &mut outsz, lz_norm); assert!(res as int != 0); let out = vec::raw::from_buf_raw(res as *u8, - outsz as uint); + outsz as uint); libc::free(res); out } @@ -67,11 +66,11 @@ pub fn deflate_bytes(bytes: &const [u8]) -> ~[u8] { pub fn inflate_bytes(bytes: &const [u8]) -> ~[u8] { do vec::as_const_buf(bytes) |b, len| { unsafe { - let outsz : size_t = 0; + let mut outsz : size_t = 0; let res = rustrt::tinfl_decompress_mem_to_heap(b as *c_void, len as size_t, - &outsz, + &mut outsz, 0); assert!(res as int != 0); let out = vec::raw::from_buf_raw(res as *u8, diff --git a/src/libcore/libc.rs b/src/libcore/libc.rs index 44864630f9873..d7a9ab4d63b5f 100644 --- a/src/libcore/libc.rs +++ b/src/libcore/libc.rs @@ -253,8 +253,7 @@ pub mod types { pub type ssize_t = i32; } pub mod posix01 { - use libc::types::os::arch::c95::{c_int, c_short, c_long, - time_t}; + use libc::types::os::arch::c95::{c_short, c_long, time_t}; use libc::types::os::arch::posix88::{dev_t, gid_t, ino_t}; use libc::types::os::arch::posix88::{mode_t, off_t}; use libc::types::os::arch::posix88::{uid_t}; diff --git a/src/libcore/os.rs b/src/libcore/os.rs index f1962eeaa23d0..d5271ec228ba5 100644 --- a/src/libcore/os.rs +++ b/src/libcore/os.rs @@ -351,13 +351,13 @@ pub fn fsync_fd(fd: c_int, _l: io::fsync::Level) -> c_int { } } -pub struct Pipe { mut in: c_int, mut out: c_int } +pub struct Pipe { in: c_int, out: c_int } #[cfg(unix)] pub fn pipe() -> Pipe { unsafe { let mut fds = Pipe {in: 0 as c_int, - out: 0 as c_int }; + out: 0 as c_int }; assert!((libc::pipe(&mut fds.in) == (0 as c_int))); return Pipe {in: fds.in, out: fds.out}; } @@ -373,8 +373,7 @@ pub fn pipe() -> Pipe { // fully understand. Here we explicitly make the pipe non-inheritable, // which means to pass it to a subprocess they need to be duplicated // first, as in rust_run_program. - let mut fds = Pipe {in: 0 as c_int, - out: 0 as c_int }; + let mut fds = Pipe {in: 0 as c_int, out: 0 as c_int}; let res = libc::pipe(&mut fds.in, 1024 as ::libc::c_uint, (libc::O_BINARY | libc::O_NOINHERIT) as c_int); assert!((res == 0 as c_int)); @@ -959,10 +958,10 @@ pub fn last_os_error() -> ~str { #[cfg(target_os = "macos")] #[cfg(target_os = "android")] #[cfg(target_os = "freebsd")] - fn strerror_r(errnum: c_int, buf: *c_char, buflen: size_t) -> c_int { + fn strerror_r(errnum: c_int, buf: *mut c_char, buflen: size_t) -> c_int { #[nolink] extern { - unsafe fn strerror_r(errnum: c_int, buf: *c_char, + unsafe fn strerror_r(errnum: c_int, buf: *mut c_char, buflen: size_t) -> c_int; } unsafe { @@ -974,10 +973,10 @@ pub fn last_os_error() -> ~str { // and requires macros to instead use the POSIX compliant variant. // So we just use __xpg_strerror_r which is always POSIX compliant #[cfg(target_os = "linux")] - fn strerror_r(errnum: c_int, buf: *c_char, buflen: size_t) -> c_int { + fn strerror_r(errnum: c_int, buf: *mut c_char, buflen: size_t) -> c_int { #[nolink] extern { - unsafe fn __xpg_strerror_r(errnum: c_int, buf: *c_char, + unsafe fn __xpg_strerror_r(errnum: c_int, buf: *mut c_char, buflen: size_t) -> c_int; } unsafe { @@ -987,7 +986,7 @@ pub fn last_os_error() -> ~str { let mut buf = [0 as c_char, ..TMPBUF_SZ]; unsafe { - let err = strerror_r(errno() as c_int, &buf[0], + let err = strerror_r(errno() as c_int, &mut buf[0], TMPBUF_SZ as size_t); if err < 0 { fail!(~"strerror_r failure"); diff --git a/src/libcore/rt/sched/mod.rs b/src/libcore/rt/sched/mod.rs index a2132676c1a03..333146394ee1f 100644 --- a/src/libcore/rt/sched/mod.rs +++ b/src/libcore/rt/sched/mod.rs @@ -136,7 +136,6 @@ pub impl Scheduler { /// Called by a running task to end execution, after which it will /// be recycled by the scheduler for reuse in a new task. fn terminate_current_task(~self) { - let mut self = self; assert!(self.in_task_context()); rtdebug!("ending running task"); @@ -152,7 +151,6 @@ pub impl Scheduler { } fn schedule_new_task(~self, task: ~Task) { - let mut self = self; assert!(self.in_task_context()); do self.switch_running_tasks_and_then(task) |last_task| { diff --git a/src/libcore/unstable/extfmt.rs b/src/libcore/unstable/extfmt.rs index b812be5575a4a..e5d32c4bb3259 100644 --- a/src/libcore/unstable/extfmt.rs +++ b/src/libcore/unstable/extfmt.rs @@ -501,7 +501,7 @@ pub mod rt { pub fn conv_int(cv: Conv, i: int, buf: &mut ~str) { let radix = 10; let prec = get_int_precision(cv); - let mut s : ~str = uint_to_str_prec(int::abs(i) as uint, radix, prec); + let s : ~str = uint_to_str_prec(int::abs(i) as uint, radix, prec); let head = if i >= 0 { if have_flag(cv.flags, flag_sign_always) { @@ -516,7 +516,7 @@ pub mod rt { } pub fn conv_uint(cv: Conv, u: uint, buf: &mut ~str) { let prec = get_int_precision(cv); - let mut rs = + let rs = match cv.ty { TyDefault => uint_to_str_prec(u, 10, prec), TyHexLower => uint_to_str_prec(u, 16, prec), @@ -559,7 +559,7 @@ pub mod rt { CountIs(c) => (float::to_str_exact, c as uint), CountImplied => (float::to_str_digits, 6u) }; - let mut s = to_str(f, digits); + let s = to_str(f, digits); let head = if 0.0 <= f { if have_flag(cv.flags, flag_sign_always) { Some('+') diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs index 2f9488d1bc7a7..4c817da081982 100644 --- a/src/libcore/vec.rs +++ b/src/libcore/vec.rs @@ -1826,12 +1826,9 @@ impl<'self,T:Copy> CopyableVector for &'self [T] { #[inline] fn to_owned(&self) -> ~[T] { let mut result = ~[]; - // FIXME: #4568 - unsafe { - reserve(&mut result, self.len()); - for self.each |e| { - result.push(copy *e); - } + reserve(&mut result, self.len()); + for self.each |e| { + result.push(copy *e); } result diff --git a/src/librustc/middle/lang_items.rs b/src/librustc/middle/lang_items.rs index 784db49a0fd62..e7261d53952a2 100644 --- a/src/librustc/middle/lang_items.rs +++ b/src/librustc/middle/lang_items.rs @@ -28,7 +28,6 @@ use syntax::ast_util::local_def; use syntax::visit::{default_simple_visitor, mk_simple_visitor, SimpleVisitor}; use syntax::visit::visit_crate; -use core::cast::transmute; use core::hashmap::HashMap; pub enum LangItem { @@ -370,7 +369,7 @@ pub impl LanguageItemCollector { } fn collect_local_language_items(&mut self) { - let this = ptr::addr_of(&self); + let this: *mut LanguageItemCollector = &mut *self; visit_crate(self.crate, (), mk_simple_visitor(@SimpleVisitor { visit_item: |item| { for item.attrs.each |attribute| { @@ -380,10 +379,10 @@ pub impl LanguageItemCollector { attribute.node.value ); } - }, - .. *default_simple_visitor() - })); - } + } + }, + .. *default_simple_visitor() + })); } fn collect_external_language_items(&mut self) { diff --git a/src/librustc/middle/moves.rs b/src/librustc/middle/moves.rs index d8a0e6bacf489..0daad80af5db7 100644 --- a/src/librustc/middle/moves.rs +++ b/src/librustc/middle/moves.rs @@ -299,7 +299,7 @@ pub fn compute_moves(tcx: ty::ctxt, pub fn moved_variable_node_id_from_def(def: def) -> Option { match def { def_binding(nid, _) | - def_arg(nid, _, _) | + def_arg(nid, _) | def_local(nid, _) | def_self(nid, _) => Some(nid), diff --git a/src/librustc/util/ppaux.rs b/src/librustc/util/ppaux.rs index d99d87231bece..751fe19f2a236 100644 --- a/src/librustc/util/ppaux.rs +++ b/src/librustc/util/ppaux.rs @@ -13,7 +13,8 @@ use middle::ty::{ReSkolemized, ReVar}; use middle::ty::{bound_region, br_anon, br_named, br_self, br_cap_avoid}; use middle::ty::{br_fresh, ctxt, field, method}; use middle::ty::{mt, t, param_bound, param_ty}; -use middle::ty::{re_bound, re_free, re_scope, re_infer, re_static, Region}; +use middle::ty::{re_bound, re_free, re_scope, re_infer, re_static, Region, + re_empty}; use middle::ty::{ty_bool, ty_bot, ty_box, ty_struct, ty_enum}; use middle::ty::{ty_err, ty_estr, ty_evec, ty_float, ty_bare_fn, ty_closure}; use middle::ty::{ty_nil, ty_opaque_box, ty_opaque_closure_ptr, ty_param}; diff --git a/src/libstd/ebml.rs b/src/libstd/ebml.rs index 9b89036eee51b..65ce9d8989f05 100644 --- a/src/libstd/ebml.rs +++ b/src/libstd/ebml.rs @@ -617,7 +617,7 @@ pub mod writer { priv impl Encoder { // used internally to emit things like the vector length and so on fn _emit_tagged_uint(&self, t: EbmlEncoderTag, v: uint) { - assert!(v <= 0xFFFF_FFFF_u); + assert!(v <= 0xFFFF_FFFF_u); // FIXME(#6130) assert warns on 32-bit self.wr_tagged_u32(t as uint, v as u32); } diff --git a/src/libstd/future.rs b/src/libstd/future.rs index c3fc16bdf70ba..5e3e64b2f1cfa 100644 --- a/src/libstd/future.rs +++ b/src/libstd/future.rs @@ -23,7 +23,7 @@ use core::cast; use core::cell::Cell; -use core::comm::{ChanOne, PortOne, oneshot, send_one}; +use core::comm::{PortOne, oneshot, send_one}; use core::pipes::recv; use core::task; diff --git a/src/libstd/sort.rs b/src/libstd/sort.rs index c153d7f22c034..f3d30ecd5cdf1 100644 --- a/src/libstd/sort.rs +++ b/src/libstd/sort.rs @@ -11,7 +11,6 @@ //! Sorting methods use core::cmp::{Eq, Ord}; -use core::util; use core::vec::len; use core::vec; diff --git a/src/libstd/workcache.rs b/src/libstd/workcache.rs index bb4a9e97ea1f4..c01d1f5a2d7b0 100644 --- a/src/libstd/workcache.rs +++ b/src/libstd/workcache.rs @@ -17,7 +17,7 @@ use sort; use core::cell::Cell; use core::cmp; -use core::comm::{ChanOne, PortOne, oneshot, send_one}; +use core::comm::{PortOne, oneshot, send_one}; use core::either::{Either, Left, Right}; use core::hashmap::HashMap; use core::io; diff --git a/src/libsyntax/parse/mod.rs b/src/libsyntax/parse/mod.rs index 7e7931bbb606b..5d51a54d770b1 100644 --- a/src/libsyntax/parse/mod.rs +++ b/src/libsyntax/parse/mod.rs @@ -24,7 +24,7 @@ use parse::token::{ident_interner, mk_ident_interner}; use core::io; use core::option::{None, Option, Some}; use core::path::Path; -use core::result::{Err, Ok, Result}; +use core::result::{Err, Ok}; pub mod lexer; pub mod parser; diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 50bdfb2f55726..1129e7b708ea2 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -938,7 +938,7 @@ pub impl Parser { match *self.token { token::MOD_SEP => { match self.look_ahead(1u) { - token::IDENT(id,_) => { + token::IDENT(*) => { self.bump(); ids.push(self.parse_ident()); } @@ -3728,7 +3728,6 @@ pub impl Parser { items: _, foreign_items: foreign_items } = self.parse_foreign_items(first_item_attrs, true); - let mut initial_attrs = attrs_remaining; assert!(*self.token == token::RBRACE); ast::foreign_mod { sort: sort, diff --git a/src/test/compile-fail/die-not-static.rs b/src/test/compile-fail/die-not-static.rs index b30e3942e6330..d33c591d8c87f 100644 --- a/src/test/compile-fail/die-not-static.rs +++ b/src/test/compile-fail/die-not-static.rs @@ -1,7 +1,6 @@ -// error-pattern:illegal borrow: borrowed value does not live long enough - fn main() { let v = ~"test"; let sslice = str::slice(v, 0, v.len()); + //~^ ERROR borrowed value does not live long enough fail!(sslice); } From a6eaa3bbb490b01c21864adc41e12eafb98a3c32 Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Tue, 30 Apr 2013 13:28:20 -0400 Subject: [PATCH 065/410] iter: add max and min functions --- src/libcore/iter.rs | 68 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 66 insertions(+), 2 deletions(-) diff --git a/src/libcore/iter.rs b/src/libcore/iter.rs index 6f3c6890228ac..8fc2db6d6f19a 100644 --- a/src/libcore/iter.rs +++ b/src/libcore/iter.rs @@ -41,6 +41,7 @@ much easier to implement. */ +use cmp::Ord; use option::{Option, Some, None}; pub trait Times { @@ -107,8 +108,7 @@ pub fn all(predicate: &fn(T) -> bool, iter: &fn(f: &fn(T) -> bool)) -> bool { } /** - * Return the first element where `predicate` returns `true`, otherwise return `Npne` if no element - * is found. + * Return the first element where `predicate` returns `true`. Return `None` if no element is found. * * # Example: * @@ -127,6 +127,58 @@ pub fn find(predicate: &fn(&T) -> bool, iter: &fn(f: &fn(T) -> bool)) -> Opti None } +/** + * Return the largest item yielded by an iterator. Return `None` if the iterator is empty. + * + * # Example: + * + * ~~~~ + * let xs = ~[8, 2, 3, 1, -5, 9, 11, 15]; + * assert_eq!(max(|f| xs.each(f)).unwrap(), &15); + * ~~~~ + */ +#[inline] +pub fn max(iter: &fn(f: &fn(T) -> bool)) -> Option { + let mut result = None; + for iter |x| { + match result { + Some(ref mut y) => { + if x > *y { + *y = x; + } + } + None => result = Some(x) + } + } + result +} + +/** + * Return the smallest item yielded by an iterator. Return `None` if the iterator is empty. + * + * # Example: + * + * ~~~~ + * let xs = ~[8, 2, 3, 1, -5, 9, 11, 15]; + * assert_eq!(max(|f| xs.each(f)).unwrap(), &-5); + * ~~~~ + */ +#[inline] +pub fn min(iter: &fn(f: &fn(T) -> bool)) -> Option { + let mut result = None; + for iter |x| { + match result { + Some(ref mut y) => { + if x < *y { + *y = x; + } + } + None => result = Some(x) + } + } + result +} + #[cfg(test)] mod tests { use super::*; @@ -157,4 +209,16 @@ mod tests { let xs = ~[1u, 2, 3, 4, 5, 6]; assert_eq!(*find(|& &x: & &uint| x > 3, |f| xs.each(f)).unwrap(), 4); } + + #[test] + fn test_max() { + let xs = ~[8, 2, 3, 1, -5, 9, 11, 15]; + assert_eq!(max(|f| xs.each(f)).unwrap(), &15); + } + + #[test] + fn test_min() { + let xs = ~[8, 2, 3, 1, -5, 9, 11, 15]; + assert_eq!(min(|f| xs.each(f)).unwrap(), &-5); + } } From 97109aa51b46215b47a12b9e596ca61b9ed801c9 Mon Sep 17 00:00:00 2001 From: Seo Sanghyeon Date: Wed, 1 May 2013 03:27:14 +0900 Subject: [PATCH 066/410] Remove mach_sty --- src/librustc/middle/ty.rs | 10 ---------- src/librustc/middle/typeck/infer/combine.rs | 12 ++---------- 2 files changed, 2 insertions(+), 20 deletions(-) diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index c7fb1e94adf4c..df507f012d626 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -1253,16 +1253,6 @@ pub fn mk_opaque_closure_ptr(cx: ctxt, sigil: ast::Sigil) -> t { pub fn mk_opaque_box(cx: ctxt) -> t { mk_t(cx, ty_opaque_box) } -// Converts s to its machine type equivalent -pub fn mach_sty(cfg: @session::config, t: t) -> sty { - match get(t).sty { - ty_int(ast::ty_i) => ty_int(cfg.int_type), - ty_uint(ast::ty_u) => ty_uint(cfg.uint_type), - ty_float(ast::ty_f) => ty_float(cfg.float_type), - ref s => (/*bad*/copy *s) - } -} - pub fn walk_ty(ty: t, f: &fn(t)) { maybe_walk_ty(ty, |t| { f(t); true }); } diff --git a/src/librustc/middle/typeck/infer/combine.rs b/src/librustc/middle/typeck/infer/combine.rs index e4db423c2e35c..de3ffcd63ab7c 100644 --- a/src/librustc/middle/typeck/infer/combine.rs +++ b/src/librustc/middle/typeck/infer/combine.rs @@ -480,6 +480,8 @@ pub fn super_tys( unify_float_variable(self, !self.a_is_expected(), v_id, v) } + (ty::ty_nil, _) | + (ty::ty_bool, _) | (ty::ty_int(_), _) | (ty::ty_uint(_), _) | (ty::ty_float(_), _) => { @@ -490,16 +492,6 @@ pub fn super_tys( } } - (ty::ty_nil, _) | - (ty::ty_bool, _) => { - let cfg = tcx.sess.targ_cfg; - if ty::mach_sty(cfg, a) == ty::mach_sty(cfg, b) { - Ok(a) - } else { - Err(ty::terr_sorts(expected_found(self, a, b))) - } - } - (ty::ty_param(ref a_p), ty::ty_param(ref b_p)) if a_p.idx == b_p.idx => { Ok(a) } From 8408012ca4ed6e8e0aa2aa85e24eb53b4b17308d Mon Sep 17 00:00:00 2001 From: Jed Davis Date: Tue, 30 Apr 2013 11:36:22 -0700 Subject: [PATCH 067/410] The null case of a nullable-poiner enum might not be nullary. Cases like `Either<@int,()>` have a null case with at most one value but a nonzero number of fields; if we misreport this, then bad things can happen inside of, for example, pattern matching. Closes #6117. --- src/librustc/middle/trans/adt.rs | 4 ++-- src/test/run-pass/issue-6117.rs | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 src/test/run-pass/issue-6117.rs diff --git a/src/librustc/middle/trans/adt.rs b/src/librustc/middle/trans/adt.rs index b3e24fcc93951..0ee2a2c4cb149 100644 --- a/src/librustc/middle/trans/adt.rs +++ b/src/librustc/middle/trans/adt.rs @@ -409,8 +409,8 @@ pub fn num_args(r: &Repr, discr: int) -> uint { st.fields.len() - (if dtor { 1 } else { 0 }) } General(ref cases) => cases[discr as uint].fields.len() - 1, - NullablePointer{ nonnull: ref nonnull, nndiscr, _ } => { - if discr == nndiscr { nonnull.fields.len() } else { 0 } + NullablePointer{ nonnull: ref nonnull, nndiscr, nullfields: ref nullfields, _ } => { + if discr == nndiscr { nonnull.fields.len() } else { nullfields.len() } } } } diff --git a/src/test/run-pass/issue-6117.rs b/src/test/run-pass/issue-6117.rs new file mode 100644 index 0000000000000..73e9391f01683 --- /dev/null +++ b/src/test/run-pass/issue-6117.rs @@ -0,0 +1,16 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub fn main() { + match Left(@17) { + Right(()) => {} + _ => {} + } +} From 41d06dbd28a9c26ecf114c020c6d855252fe323c Mon Sep 17 00:00:00 2001 From: Jed Davis Date: Tue, 30 Apr 2013 12:05:06 -0700 Subject: [PATCH 068/410] Reverse accidental src/llvm reversion in 876483dcf, and add test. The test is reduced from a doc test, but making it separate ensures that (1) unrelated changes to the docs won't leave this case uncovered, and (2) the nature of any future failures will be more obvious to whoever sees the tree on fire as a result. --- src/llvm | 2 +- .../enum-nullable-simplifycfg-misopt.rs | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 src/test/run-pass/enum-nullable-simplifycfg-misopt.rs diff --git a/src/llvm b/src/llvm index 56dd407f4f97a..2e9f0d21fe321 160000 --- a/src/llvm +++ b/src/llvm @@ -1 +1 @@ -Subproject commit 56dd407f4f97a01b8df6554c569170d2fc276fcb +Subproject commit 2e9f0d21fe321849a4759a01fc28eae82ef196d6 diff --git a/src/test/run-pass/enum-nullable-simplifycfg-misopt.rs b/src/test/run-pass/enum-nullable-simplifycfg-misopt.rs new file mode 100644 index 0000000000000..b5cf15f3b3863 --- /dev/null +++ b/src/test/run-pass/enum-nullable-simplifycfg-misopt.rs @@ -0,0 +1,24 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +/*! + * This is a regression test for a bug in LLVM, fixed in upstream r179587, + * where the switch instructions generated for destructuring enums + * represented with nullable pointers could be misoptimized in some cases. + */ + +enum List { Nil, Cons(X, @List) } +pub fn main() { + match Cons(10, @Nil) { + Cons(10, _) => {} + Nil => {} + _ => fail!() + } +} From 4701716b56a22e209223110ce7d4aa9be45839da Mon Sep 17 00:00:00 2001 From: Jed Davis Date: Tue, 30 Apr 2013 12:07:10 -0700 Subject: [PATCH 069/410] Revert "doc: XFAIL mysterious failure on bots" This reverts commit 2c6dae081b72d33a2c51b5f46436e6350bb3682f. --- doc/rust.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/rust.md b/doc/rust.md index 136c7ee9da3f2..9f81b38009fe8 100644 --- a/doc/rust.md +++ b/doc/rust.md @@ -2393,7 +2393,7 @@ variables in the arm's block, and control enters the block. An example of an `match` expression: -~~~~ {.xfail-test} +~~~~ # fn process_pair(a: int, b: int) { } # fn process_ten() { } From dc21daeeb88c20b6431e70fe4ef5cc416af8410d Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Tue, 30 Apr 2013 16:34:22 -0400 Subject: [PATCH 070/410] borrowck: fix critical bug prevent us from ever using write guards :) --- src/librustc/middle/borrowck/check_loans.rs | 3 +++ .../middle/borrowck/gather_loans/lifetime.rs | 1 + .../middle/borrowck/gather_loans/mod.rs | 4 ++-- src/test/run-pass/too-much-recursion.rs | 22 ------------------- 4 files changed, 6 insertions(+), 24 deletions(-) delete mode 100644 src/test/run-pass/too-much-recursion.rs diff --git a/src/librustc/middle/borrowck/check_loans.rs b/src/librustc/middle/borrowck/check_loans.rs index 9330395c061a7..70da9c9380559 100644 --- a/src/librustc/middle/borrowck/check_loans.rs +++ b/src/librustc/middle/borrowck/check_loans.rs @@ -357,6 +357,8 @@ pub impl<'self> CheckLoanCtxt<'self> { //! Safety checks related to writes to aliasable, mutable locations let guarantor = cmt.guarantor(); + debug!("check_for_aliasable_mutable_writes(cmt=%s, guarantor=%s)", + cmt.repr(self.tcx()), guarantor.repr(self.tcx())); match guarantor.cat { mc::cat_deref(b, _, mc::region_ptr(m_mutbl, _)) => { // Statically prohibit writes to `&mut` when aliasable @@ -379,6 +381,7 @@ pub impl<'self> CheckLoanCtxt<'self> { id: base.id, derefs: deref_count }; + debug!("Inserting write guard at %?", key); self.bccx.write_guard_map.insert(key); } diff --git a/src/librustc/middle/borrowck/gather_loans/lifetime.rs b/src/librustc/middle/borrowck/gather_loans/lifetime.rs index 4d267b7dc471c..fdfb26c0d0835 100644 --- a/src/librustc/middle/borrowck/gather_loans/lifetime.rs +++ b/src/librustc/middle/borrowck/gather_loans/lifetime.rs @@ -90,6 +90,7 @@ impl GuaranteeLifetimeContext { // See rule Freeze-Imm-Managed-Ptr-2 in doc.rs let omit_root = ( + ptr_mutbl == m_imm && self.bccx.is_subregion_of(self.loan_region, base_scope) && base.mutbl.is_immutable() && !self.is_moved(base) diff --git a/src/librustc/middle/borrowck/gather_loans/mod.rs b/src/librustc/middle/borrowck/gather_loans/mod.rs index 1bc3b70ac3842..8a986a22d4c48 100644 --- a/src/librustc/middle/borrowck/gather_loans/mod.rs +++ b/src/librustc/middle/borrowck/gather_loans/mod.rs @@ -148,7 +148,7 @@ fn gather_loans_in_expr(ex: @ast::expr, // If this expression is borrowed, have to ensure it remains valid: { - let mut this = &mut *self; // FIXME(#5074) + let this = &mut *self; // FIXME(#5074) if !this.ignore_adjustments.contains(&ex.id) { for tcx.adjustments.find(&ex.id).each |&adjustments| { this.guarantee_adjustments(ex, *adjustments); @@ -283,7 +283,7 @@ pub impl GatherLoanCtxt { let mcx = &mc::mem_categorization_ctxt { tcx: self.tcx(), method_map: self.bccx.method_map}; - let mut cmt = mcx.cat_expr_autoderefd(expr, autoderefs); + let cmt = mcx.cat_expr_autoderefd(expr, autoderefs); debug!("after autoderef, cmt=%s", cmt.repr(self.tcx())); match *autoref { diff --git a/src/test/run-pass/too-much-recursion.rs b/src/test/run-pass/too-much-recursion.rs deleted file mode 100644 index adccc786926dc..0000000000000 --- a/src/test/run-pass/too-much-recursion.rs +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2012 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 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -// xfail-win32 -// error-pattern:ran out of stack - -// Test that the task fails after hitting the recursion limit, but -// that it doesn't bring down the whole proc - -pub fn main() { - do task::spawn_unlinked { - fn f() { f() }; - f(); - }; -} From f236b850c0dc4c1b925e33d1173f359605801307 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Tue, 30 Apr 2013 16:35:01 -0400 Subject: [PATCH 071/410] remove some unused mut decls --- src/libcore/num/num.rs | 2 +- src/librustc/middle/resolve.rs | 4 ++-- src/librustc/middle/trans/base.rs | 2 +- src/librustc/middle/trans/callee.rs | 2 +- src/librustc/middle/trans/expr.rs | 2 -- src/librustc/middle/typeck/check/method.rs | 4 ++-- src/librustc/middle/typeck/check/mod.rs | 4 ++-- src/librustc/middle/typeck/check/regionck.rs | 2 +- src/test/run-fail/borrowck-wg-fail-2.rs | 3 ++- src/test/run-fail/borrowck-wg-fail-3.rs | 3 ++- src/test/run-fail/borrowck-wg-fail.rs | 6 ++---- 11 files changed, 16 insertions(+), 18 deletions(-) diff --git a/src/libcore/num/num.rs b/src/libcore/num/num.rs index de7597fa821d6..96fed51309ee3 100644 --- a/src/libcore/num/num.rs +++ b/src/libcore/num/num.rs @@ -385,7 +385,7 @@ pub fn pow_with_uint+Mul>( } #[cfg(test)] -fn test_num(ten: T, two: T) { +pub fn test_num(ten: T, two: T) { assert_eq!(ten.add(&two), cast(12)); assert_eq!(ten.sub(&two), cast(8)); assert_eq!(ten.mul(&two), cast(20)); diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs index ffc9d1488cf13..ff46abaf7128c 100644 --- a/src/librustc/middle/resolve.rs +++ b/src/librustc/middle/resolve.rs @@ -5267,7 +5267,7 @@ pub impl Resolver { debug!("Import resolutions:"); for module_.import_resolutions.each |name, import_resolution| { - let mut value_repr; + let value_repr; match import_resolution.target_for_namespace(ValueNS) { None => { value_repr = ~""; } Some(_) => { @@ -5276,7 +5276,7 @@ pub impl Resolver { } } - let mut type_repr; + let type_repr; match import_resolution.target_for_namespace(TypeNS) { None => { type_repr = ~""; } Some(_) => { diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs index 7be6bdb654e1f..1785feda7790c 100644 --- a/src/librustc/middle/trans/base.rs +++ b/src/librustc/middle/trans/base.rs @@ -2366,7 +2366,7 @@ pub fn create_entry_wrapper(ccx: @CrateContext, // Call main. let lloutputarg = C_null(T_ptr(T_i8())); let llenvarg = unsafe { llvm::LLVMGetParam(llfdecl, 1 as c_uint) }; - let mut args = ~[lloutputarg, llenvarg]; + let args = ~[lloutputarg, llenvarg]; let llresult = Call(bcx, main_llfn, args); Store(bcx, llresult, fcx.llretptr.get()); diff --git a/src/librustc/middle/trans/callee.rs b/src/librustc/middle/trans/callee.rs index af00257fe1603..c4c6133b405c0 100644 --- a/src/librustc/middle/trans/callee.rs +++ b/src/librustc/middle/trans/callee.rs @@ -722,7 +722,7 @@ pub fn trans_arg_expr(bcx: block, } } }; - let mut arg_datum = arg_datumblock.datum; + let arg_datum = arg_datumblock.datum; let bcx = arg_datumblock.bcx; debug!(" arg datum: %s", arg_datum.to_str(bcx.ccx())); diff --git a/src/librustc/middle/trans/expr.rs b/src/librustc/middle/trans/expr.rs index ac6fa7a5a1c4f..fa6f7802e7d50 100644 --- a/src/librustc/middle/trans/expr.rs +++ b/src/librustc/middle/trans/expr.rs @@ -563,7 +563,6 @@ fn trans_rvalue_stmt_unadjusted(bcx: block, expr: @ast::expr) -> block { fn trans_rvalue_dps_unadjusted(bcx: block, expr: @ast::expr, dest: Dest) -> block { - let mut bcx = bcx; let _icx = bcx.insn_ctxt("trans_rvalue_dps_unadjusted"); let tcx = bcx.tcx(); @@ -1408,7 +1407,6 @@ fn trans_eager_binop(bcx: block, lhs_datum: &Datum, rhs_datum: &Datum) -> DatumBlock { - let mut bcx = bcx; let _icx = bcx.insn_ctxt("trans_eager_binop"); let lhs = lhs_datum.to_appropriate_llval(bcx); diff --git a/src/librustc/middle/typeck/check/method.rs b/src/librustc/middle/typeck/check/method.rs index de6530fb464c5..9f9132fa94665 100644 --- a/src/librustc/middle/typeck/check/method.rs +++ b/src/librustc/middle/typeck/check/method.rs @@ -120,7 +120,7 @@ pub fn lookup( expr: @ast::expr, // The expression `a.b(...)`. self_expr: @ast::expr, // The expression `a`. callee_id: node_id, /* Where to store `a.b`'s type, - * also the scope of the call */ + * also the scope of the call */ m_name: ast::ident, // The ident `b`. self_ty: ty::t, // The type of `a`. supplied_tps: &[ty::t], // The list of types X, Y, ... . @@ -128,7 +128,7 @@ pub fn lookup( check_traits: CheckTraitsFlag, // Whether we check traits only. autoderef_receiver: AutoderefReceiverFlag) -> Option { - let mut impl_dups = @mut HashSet::new(); + let impl_dups = @mut HashSet::new(); let lcx = LookupContext { fcx: fcx, expr: expr, diff --git a/src/librustc/middle/typeck/check/mod.rs b/src/librustc/middle/typeck/check/mod.rs index fb58df3d55c68..70282fdc57cfe 100644 --- a/src/librustc/middle/typeck/check/mod.rs +++ b/src/librustc/middle/typeck/check/mod.rs @@ -1684,7 +1684,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt, }; // construct the function type - let mut fn_ty = astconv::ty_of_closure(fcx, + let fn_ty = astconv::ty_of_closure(fcx, fcx, sigil, purity, @@ -1695,7 +1695,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt, &opt_vec::Empty, expr.span); - let mut fty_sig; + let fty_sig; let fty = if error_happened { fty_sig = FnSig { bound_lifetime_names: opt_vec::Empty, diff --git a/src/librustc/middle/typeck/check/regionck.rs b/src/librustc/middle/typeck/check/regionck.rs index be513cbb0f307..fd19738b32110 100644 --- a/src/librustc/middle/typeck/check/regionck.rs +++ b/src/librustc/middle/typeck/check/regionck.rs @@ -871,7 +871,7 @@ pub mod guarantor { let tcx = rcx.tcx(); debug!("guarantor::for_by_ref(expr=%s, callee_scope=%?)", expr.repr(tcx), callee_scope); - let mut expr_cat = categorize(rcx, expr); + let expr_cat = categorize(rcx, expr); debug!("guarantor::for_by_ref(expr=%?, callee_scope=%?) category=%?", expr.id, callee_scope, expr_cat); let minimum_lifetime = ty::re_scope(callee_scope); diff --git a/src/test/run-fail/borrowck-wg-fail-2.rs b/src/test/run-fail/borrowck-wg-fail-2.rs index 126135772ade0..121ec9c79216f 100644 --- a/src/test/run-fail/borrowck-wg-fail-2.rs +++ b/src/test/run-fail/borrowck-wg-fail-2.rs @@ -7,5 +7,6 @@ struct S { fn main() { let x = @mut S { x: 3 }; let y: &S = x; - x.x = 5; + let z = x; + z.x = 5; } diff --git a/src/test/run-fail/borrowck-wg-fail-3.rs b/src/test/run-fail/borrowck-wg-fail-3.rs index ad4c794212121..2b95cf3fe5fa9 100644 --- a/src/test/run-fail/borrowck-wg-fail-3.rs +++ b/src/test/run-fail/borrowck-wg-fail-3.rs @@ -3,6 +3,7 @@ fn main() { let x = @mut 3; let y: &mut int = x; - *x = 5; + let z = x; + *z = 5; } diff --git a/src/test/run-fail/borrowck-wg-fail.rs b/src/test/run-fail/borrowck-wg-fail.rs index d393832c6e862..fd2d36b895ada 100644 --- a/src/test/run-fail/borrowck-wg-fail.rs +++ b/src/test/run-fail/borrowck-wg-fail.rs @@ -1,9 +1,7 @@ // error-pattern:borrowed -fn f(x: &int, y: @mut int) { - unsafe { - *y = 2; - } +fn f(_x: &int, y: @mut int) { + *y = 2; } fn main() { From 0b377e53a1f1475e3b13427a1af8432924a0a586 Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Tue, 30 Apr 2013 17:09:11 -0400 Subject: [PATCH 072/410] clear *everything* from the tmp directory The .tmp files were missed before. I don't think there's a need to use *.ext instead of just *. --- mk/clean.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mk/clean.mk b/mk/clean.mk index 30897eea45793..660793b1c347e 100644 --- a/mk/clean.mk +++ b/mk/clean.mk @@ -48,7 +48,7 @@ clean-misc: $(Q)rm -f $(RUSTLLVM_LIB_OBJS) $(RUSTLLVM_OBJS_OBJS) $(RUSTLLVM_DEF) $(Q)rm -Rf $(DOCS) $(Q)rm -Rf $(GENERATED) - $(Q)rm -f tmp/*.log tmp/*.rc tmp/*.rs tmp/*.ok + $(Q)rm -f tmp/* $(Q)rm -Rf rust-stage0-*.tar.bz2 $(PKG_NAME)-*.tar.gz dist $(Q)rm -Rf $(foreach ext, \ html aux cp fn ky log pdf pg toc tp vr cps, \ From 4493cf49cdaeb7aea974b9155a678fb8c9e3e390 Mon Sep 17 00:00:00 2001 From: Tim Chevalier Date: Tue, 30 Apr 2013 16:17:19 -0700 Subject: [PATCH 073/410] Fix error messages harder --- src/test/compile-fail/alt-vec-mismatch-2.rs | 2 +- src/test/compile-fail/alt-vec-mismatch.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/compile-fail/alt-vec-mismatch-2.rs b/src/test/compile-fail/alt-vec-mismatch-2.rs index bef18cc666ae6..6ea0300cf1e7d 100644 --- a/src/test/compile-fail/alt-vec-mismatch-2.rs +++ b/src/test/compile-fail/alt-vec-mismatch-2.rs @@ -1,5 +1,5 @@ fn main() { match () { - [()] => { } //~ ERROR mismatched type: expected `()` but found a vector pattern + [()] => { } //~ ERROR mismatched types: expected `()` but found a vector pattern } } diff --git a/src/test/compile-fail/alt-vec-mismatch.rs b/src/test/compile-fail/alt-vec-mismatch.rs index 1f6822cfd2ce5..85ed8761ee935 100644 --- a/src/test/compile-fail/alt-vec-mismatch.rs +++ b/src/test/compile-fail/alt-vec-mismatch.rs @@ -1,6 +1,6 @@ fn main() { match ~"foo" { - ['f', 'o', .._] => { } //~ ERROR mismatched type: expected `~str` but found a vector pattern + ['f', 'o', .._] => { } //~ ERROR mismatched types: expected `~str` but found a vector pattern _ => { } } } From dd310d6c3b635628f584f3266b3ab31888fd0e95 Mon Sep 17 00:00:00 2001 From: John Clements Date: Thu, 18 Apr 2013 14:48:59 -0700 Subject: [PATCH 074/410] Got test cases to pass, after some major surgery --- src/test/auxiliary/issue2378a.rs | 11 +++++++---- src/test/auxiliary/issue2378b.rs | 14 ++++++++------ src/test/run-pass/issue2378c.rs | 12 ++++++------ 3 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/test/auxiliary/issue2378a.rs b/src/test/auxiliary/issue2378a.rs index ead338c4bc803..1873aca5909ca 100644 --- a/src/test/auxiliary/issue2378a.rs +++ b/src/test/auxiliary/issue2378a.rs @@ -8,13 +8,16 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +#[link (name = "issue2378a")]; +#[crate_type = "lib"]; + enum maybe { just(T), nothing } -impl copy> for maybe for methods T { +impl Index for maybe { + fn index(&self, idx: &uint) -> T { match self { - just(t) { t } - nothing { fail!(); } + &just(ref t) => copy *t, + ¬hing => { fail!(); } } } } diff --git a/src/test/auxiliary/issue2378b.rs b/src/test/auxiliary/issue2378b.rs index 9037417ef6224..20f07a5cb546b 100644 --- a/src/test/auxiliary/issue2378b.rs +++ b/src/test/auxiliary/issue2378b.rs @@ -8,15 +8,17 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use issue2378a; +#[link (name = "issue2378b")]; +#[crate_type = "lib"]; + +extern mod issue2378a; use issue2378a::maybe; -use issue2378a::methods; -type two_maybes = {a: maybe, b: maybe}; +struct two_maybes {a: maybe, b: maybe} -impl copy> for two_maybes for methods (T, T) { - (self.a[idx], self.b[idx]) +impl Index for two_maybes { + fn index(&self, idx: &uint) -> (T, T) { + (self.a[*idx], self.b[*idx]) } } diff --git a/src/test/run-pass/issue2378c.rs b/src/test/run-pass/issue2378c.rs index ea8c47a3eb91a..98e60c56476d8 100644 --- a/src/test/run-pass/issue2378c.rs +++ b/src/test/run-pass/issue2378c.rs @@ -8,17 +8,17 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// xfail-test -- #2378 unfixed // aux-build:issue2378a.rs // aux-build:issue2378b.rs +// xfail-fast - check-fast doesn't understand aux-build -use issue2378a; -use issue2378b; +extern mod issue2378a; +extern mod issue2378b; -use issue2378a::{just, methods}; -use issue2378b::{methods}; +use issue2378a::{just}; +use issue2378b::{two_maybes}; pub fn main() { - let x = {a: just(3), b: just(5)}; + let x = two_maybes{a: just(3), b: just(5)}; assert!(x[0u] == (3, 5)); } From 325263fe221647b7d6ef6c3cc1efd0d1e7cf3a21 Mon Sep 17 00:00:00 2001 From: John Clements Date: Thu, 18 Apr 2013 15:05:39 -0700 Subject: [PATCH 075/410] this test still doesn't pass, but at least it parses... --- src/test/run-pass/mlist-cycle.rs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/test/run-pass/mlist-cycle.rs b/src/test/run-pass/mlist-cycle.rs index e886c941a4b6a..a67f1574f64af 100644 --- a/src/test/run-pass/mlist-cycle.rs +++ b/src/test/run-pass/mlist-cycle.rs @@ -10,16 +10,18 @@ // xfail-test // -*- rust -*- -extern mod std; +extern mod core; +use core::gc; +use core::gc::rustrt; -type cell = {c: @list}; +struct cell {c: @list} enum list { link(@mut cell), nil, } pub fn main() { - let first: @cell = @mut {c: @nil()}; - let second: @cell = @mut {c: @link(first)}; + let first: @cell = @mut cell{c: @nil()}; + let second: @cell = @mut cell{c: @link(first)}; first._0 = @link(second); - sys.rustrt.gc(); - let third: @cell = @mut {c: @nil()}; + rustrt::gc(); + let third: @cell = @mut cell{c: @nil()}; } From 7e89a514a5ce9aa427ca350a4ba62e63f3c89f95 Mon Sep 17 00:00:00 2001 From: John Clements Date: Thu, 18 Apr 2013 15:13:24 -0700 Subject: [PATCH 076/410] This test case now parses I've done a slapdash job of fixing up the syntax; it didn't pass before, and it doesn't pass now, but at least it parses... --- src/test/run-pass/preempt.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/test/run-pass/preempt.rs b/src/test/run-pass/preempt.rs index e0434c14048a0..3d3e178f064ae 100644 --- a/src/test/run-pass/preempt.rs +++ b/src/test/run-pass/preempt.rs @@ -13,7 +13,7 @@ fn starve_main(alive: chan) { debug!("signalling main"); - alive <| 1; + alive.recv(1); debug!("starving main"); let i: int = 0; loop { i += 1; } @@ -22,10 +22,12 @@ fn starve_main(alive: chan) { pub fn main() { let alive: port = port(); debug!("main started"); - let s: task = spawn starve_main(chan(alive)); + let s: task = do task::spawn { + starve_main(chan(alive)); + }; let i: int; debug!("main waiting for alive signal"); - alive |> i; + alive.send(i); debug!("main got alive signal"); while i < 50 { debug!("main iterated"); i += 1; } debug!("main completed"); From add60bb081b9c23c8606a22b078f0885d5ab169c Mon Sep 17 00:00:00 2001 From: John Clements Date: Thu, 18 Apr 2013 15:20:36 -0700 Subject: [PATCH 077/410] Test now passes --- src/test/run-pass/regions-fn-subtyping-2.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/test/run-pass/regions-fn-subtyping-2.rs b/src/test/run-pass/regions-fn-subtyping-2.rs index a995b3d969352..a660b9c9ee2d5 100644 --- a/src/test/run-pass/regions-fn-subtyping-2.rs +++ b/src/test/run-pass/regions-fn-subtyping-2.rs @@ -8,20 +8,18 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// xfail-test - // Issue #2263. // Here, `f` is a function that takes a pointer `x` and a function // `g`, where `g` requires its argument `y` to be in the same region // that `x` is in. -fn has_same_region(f: &fn(x: &a.int, g: &fn(y: &a.int))) { +fn has_same_region(f: &fn<'a>(x: &'a int, g: &fn(y: &'a int))) { // `f` should be the type that `wants_same_region` wants, but // right now the compiler complains that it isn't. wants_same_region(f); } -fn wants_same_region(_f: &fn(x: &b.int, g: &fn(y: &b.int))) { +fn wants_same_region(_f: &fn<'b>(x: &'b int, g: &fn(y: &'b int))) { } pub fn main() { From cc4e0186ac005768ebede5b6b858b223c33e4de3 Mon Sep 17 00:00:00 2001 From: John Clements Date: Thu, 18 Apr 2013 15:49:28 -0700 Subject: [PATCH 078/410] added test case for issue 5927 --- src/test/run-fail/issue-5927.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/test/run-fail/issue-5927.rs diff --git a/src/test/run-fail/issue-5927.rs b/src/test/run-fail/issue-5927.rs new file mode 100644 index 0000000000000..f302d706c15d7 --- /dev/null +++ b/src/test/run-fail/issue-5927.rs @@ -0,0 +1,20 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + + + +// error-pattern:cant-use-x-as-pattern-mumble + +fn main() { + let z = match 3 { + x() => x + }; + assert_eq!(z,3); +} From d6bb587c12da816b2872db1c1f9154a58fc91006 Mon Sep 17 00:00:00 2001 From: John Clements Date: Thu, 18 Apr 2013 16:44:36 -0700 Subject: [PATCH 079/410] with syntax fixes, this test case now appears to pass --- src/test/run-pass/tag-align-dyn-u64.rs | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/test/run-pass/tag-align-dyn-u64.rs b/src/test/run-pass/tag-align-dyn-u64.rs index a9c59de49eeaa..0fdf4e019a775 100644 --- a/src/test/run-pass/tag-align-dyn-u64.rs +++ b/src/test/run-pass/tag-align-dyn-u64.rs @@ -8,27 +8,25 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// xfail-test - -tag a_tag { - a_tag(A); +enum a_tag { + a_tag(A) } -type t_rec = { +struct t_rec { c8: u8, t: a_tag -}; +} fn mk_rec() -> t_rec { - return { c8:0u8, t:a_tag(0u64) }; + return t_rec { c8:0u8, t:a_tag(0u64) }; } -fn is_8_byte_aligned(&&u: a_tag) -> bool { +fn is_8_byte_aligned(u: &a_tag) -> bool { let p = ptr::to_unsafe_ptr(u) as uint; return (p & 7u) == 0u; } pub fn main() { let x = mk_rec(); - assert!(is_8_byte_aligned(x.t)); + assert!(is_8_byte_aligned(&x.t)); } From 178305ffecf4e183a425028ba53b39a4f4dd1121 Mon Sep 17 00:00:00 2001 From: John Clements Date: Thu, 18 Apr 2013 16:48:33 -0700 Subject: [PATCH 080/410] fixed up issue-2185, but now it has a trait failure --- src/test/run-pass/issue-2185.rs | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/src/test/run-pass/issue-2185.rs b/src/test/run-pass/issue-2185.rs index ac680d3d12e41..350dea4415dd0 100644 --- a/src/test/run-pass/issue-2185.rs +++ b/src/test/run-pass/issue-2185.rs @@ -8,22 +8,45 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// xfail-test FIXME #2263 +// does the second one subsume the first? +// xfail-test // xfail-fast + +// notes on this test case: +// On Thu, Apr 18, 2013 at 6:30 PM, John Clements wrote: +// the "issue-2185.rs" test was xfailed with a ref to #2263. Issue #2263 is now fixed, so I tried it again, and after adding some &self parameters, I got this error: +// +// Running /usr/local/bin/rustc: +// issue-2185.rs:24:0: 26:1 error: conflicting implementations for a trait +// issue-2185.rs:24 impl iterable for @fn(&fn(uint)) { +// issue-2185.rs:25 fn iter(&self, blk: &fn(v: uint)) { self( |i| blk(i) ) } +// issue-2185.rs:26 } +// issue-2185.rs:20:0: 22:1 note: note conflicting implementation here +// issue-2185.rs:20 impl iterable for @fn(&fn(A)) { +// issue-2185.rs:21 fn iter(&self, blk: &fn(A)) { self(blk); } +// issue-2185.rs:22 } +// +// … so it looks like it's just not possible to implement both the generic iterable and iterable for the type iterable. Is it okay if I just remove this test? +// +// but Niko responded: +// think it's fine to remove this test, just because it's old and cruft and not hard to reproduce. *However* it should eventually be possible to implement the same interface for the same type multiple times with different type parameters, it's just that our current trait implementation has accidental limitations. + +// so I'm leaving it in. + // This test had to do with an outdated version of the iterable trait. // However, the condition it was testing seemed complex enough to // warrant still having a test, so I inlined the old definitions. trait iterable { - fn iter(blk: &fn(A)); + fn iter(&self, blk: &fn(A)); } impl iterable for @fn(&fn(A)) { - fn iter(blk: &fn(A)) { self(blk); } + fn iter(&self, blk: &fn(A)) { self(blk); } } impl iterable for @fn(&fn(uint)) { - fn iter(blk: &fn(&&v: uint)) { self( |i| blk(i) ) } + fn iter(&self, blk: &fn(v: uint)) { self( |i| blk(i) ) } } fn filter>(self: IA, prd: @fn(A) -> bool, blk: &fn(A)) { From 3a5361aec990ff2b07cabf9d9fbfac67f056d97f Mon Sep 17 00:00:00 2001 From: John Clements Date: Tue, 30 Apr 2013 10:39:20 -0700 Subject: [PATCH 081/410] more commits on issue 2185 --- src/test/run-pass/issue-2185.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/run-pass/issue-2185.rs b/src/test/run-pass/issue-2185.rs index 350dea4415dd0..8a553784c5e2e 100644 --- a/src/test/run-pass/issue-2185.rs +++ b/src/test/run-pass/issue-2185.rs @@ -32,6 +32,7 @@ // think it's fine to remove this test, just because it's old and cruft and not hard to reproduce. *However* it should eventually be possible to implement the same interface for the same type multiple times with different type parameters, it's just that our current trait implementation has accidental limitations. // so I'm leaving it in. +// actually, it looks like this is related to bug #3429. I'll rename this bug. // This test had to do with an outdated version of the iterable trait. // However, the condition it was testing seemed complex enough to From 527f7716b76cf77f57915c663d88f72037e11af4 Mon Sep 17 00:00:00 2001 From: John Clements Date: Thu, 18 Apr 2013 16:55:48 -0700 Subject: [PATCH 082/410] after syntax fixes, these tests appear to pass --- src/test/run-pass/tag-align-dyn-variants.rs | 64 ++++++++++----------- 1 file changed, 31 insertions(+), 33 deletions(-) diff --git a/src/test/run-pass/tag-align-dyn-variants.rs b/src/test/run-pass/tag-align-dyn-variants.rs index 4fc6410f8f3d0..96921f2a065c2 100644 --- a/src/test/run-pass/tag-align-dyn-variants.rs +++ b/src/test/run-pass/tag-align-dyn-variants.rs @@ -8,64 +8,62 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// xfail-test - -tag a_tag { - varA(A); - varB(B); +enum a_tag { + varA(A), + varB(B) } -type t_rec = { +struct t_rec { chA: u8, tA: a_tag, chB: u8, tB: a_tag -}; +} -fn mk_rec(a: A, b: B) -> t_rec { - return { chA:0u8, tA:varA(a), chB:1u8, tB:varB(b) }; +fn mk_rec(a: A, b: B) -> t_rec { + return t_rec{ chA:0u8, tA:varA(a), chB:1u8, tB:varB(b) }; } -fn is_aligned(amnt: uint, &&u: A) -> bool { +fn is_aligned(amnt: uint, u: &A) -> bool { let p = ptr::to_unsafe_ptr(u) as uint; return (p & (amnt-1u)) == 0u; } -fn variant_data_is_aligned(amnt: uint, &&u: a_tag) -> bool { +fn variant_data_is_aligned(amnt: uint, u: &a_tag) -> bool { match u { - varA(a) { is_aligned(amnt, a) } - varB(b) { is_aligned(amnt, b) } + &varA(ref a) => is_aligned(amnt, a), + &varB(ref b) => is_aligned(amnt, b) } } pub fn main() { let x = mk_rec(22u64, 23u64); - assert!(is_aligned(8u, x.tA)); - assert!(variant_data_is_aligned(8u, x.tA)); - assert!(is_aligned(8u, x.tB)); - assert!(variant_data_is_aligned(8u, x.tB)); + assert!(is_aligned(8u, &x.tA)); + assert!(variant_data_is_aligned(8u, &x.tA)); + assert!(is_aligned(8u, &x.tB)); + assert!(variant_data_is_aligned(8u, &x.tB)); let x = mk_rec(22u64, 23u32); - assert!(is_aligned(8u, x.tA)); - assert!(variant_data_is_aligned(8u, x.tA)); - assert!(is_aligned(8u, x.tB)); - assert!(variant_data_is_aligned(4u, x.tB)); + assert!(is_aligned(8u, &x.tA)); + assert!(variant_data_is_aligned(8u, &x.tA)); + assert!(is_aligned(8u, &x.tB)); + assert!(variant_data_is_aligned(4u, &x.tB)); let x = mk_rec(22u32, 23u64); - assert!(is_aligned(8u, x.tA)); - assert!(variant_data_is_aligned(4u, x.tA)); - assert!(is_aligned(8u, x.tB)); - assert!(variant_data_is_aligned(8u, x.tB)); + assert!(is_aligned(8u, &x.tA)); + assert!(variant_data_is_aligned(4u, &x.tA)); + assert!(is_aligned(8u, &x.tB)); + assert!(variant_data_is_aligned(8u, &x.tB)); let x = mk_rec(22u32, 23u32); - assert!(is_aligned(4u, x.tA)); - assert!(variant_data_is_aligned(4u, x.tA)); - assert!(is_aligned(4u, x.tB)); - assert!(variant_data_is_aligned(4u, x.tB)); + assert!(is_aligned(4u, &x.tA)); + assert!(variant_data_is_aligned(4u, &x.tA)); + assert!(is_aligned(4u, &x.tB)); + assert!(variant_data_is_aligned(4u, &x.tB)); let x = mk_rec(22f64, 23f64); - assert!(is_aligned(8u, x.tA)); - assert!(variant_data_is_aligned(8u, x.tA)); - assert!(is_aligned(8u, x.tB)); - assert!(variant_data_is_aligned(8u, x.tB)); + assert!(is_aligned(8u, &x.tA)); + assert!(variant_data_is_aligned(8u, &x.tA)); + assert!(is_aligned(8u, &x.tB)); + assert!(variant_data_is_aligned(8u, &x.tB)); } From 3931ce448e0329672583d3210df714cca5176f02 Mon Sep 17 00:00:00 2001 From: John Clements Date: Thu, 18 Apr 2013 17:08:23 -0700 Subject: [PATCH 083/410] fixed the test case, hope it's still testing something --- src/test/run-pass/tag-align-shape.rs | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/test/run-pass/tag-align-shape.rs b/src/test/run-pass/tag-align-shape.rs index 052bacad7ce19..43a793a34c89d 100644 --- a/src/test/run-pass/tag-align-shape.rs +++ b/src/test/run-pass/tag-align-shape.rs @@ -8,22 +8,18 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// xfail-test -// -// See issue #1535 - -tag a_tag { - a_tag(u64); +enum a_tag { + a_tag(u64) } -type t_rec = { +struct t_rec { c8: u8, t: a_tag -}; +} pub fn main() { - let x = {c8: 22u8, t: a_tag(44u64)}; + let x = t_rec {c8: 22u8, t: a_tag(44u64)}; let y = fmt!("%?", x); debug!("y = %s", y); - assert!(y == "(22, a_tag(44))"); + assert_eq!(y, ~"{c8: 22, t: a_tag(44)}"); } From d1921fb3caa131c83673020a377e1d0cd245b1ea Mon Sep 17 00:00:00 2001 From: John Clements Date: Thu, 18 Apr 2013 17:10:26 -0700 Subject: [PATCH 084/410] fixed this test case too --- src/test/run-pass/tag-align-u64.rs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/test/run-pass/tag-align-u64.rs b/src/test/run-pass/tag-align-u64.rs index fd96d7d0242c3..56d384e5fdb76 100644 --- a/src/test/run-pass/tag-align-u64.rs +++ b/src/test/run-pass/tag-align-u64.rs @@ -8,27 +8,26 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// xfail-test -tag a_tag { - a_tag(u64); +enum a_tag { + a_tag(u64) } -type t_rec = { +struct t_rec { c8: u8, t: a_tag -}; +} fn mk_rec() -> t_rec { - return { c8:0u8, t:a_tag(0u64) }; + return t_rec { c8:0u8, t:a_tag(0u64) }; } -fn is_8_byte_aligned(&&u: a_tag) -> bool { +fn is_8_byte_aligned(u: &a_tag) -> bool { let p = ptr::to_unsafe_ptr(u) as u64; return (p & 7u64) == 0u64; } pub fn main() { let x = mk_rec(); - assert!(is_8_byte_aligned(x.t)); + assert!(is_8_byte_aligned(&x.t)); } From 89bb02adf9f3ec55340b775a3b1f75c25478ce73 Mon Sep 17 00:00:00 2001 From: John Clements Date: Thu, 18 Apr 2013 17:20:28 -0700 Subject: [PATCH 085/410] typestate is not planned for upcoming versions of rust.... --- src/test/run-pass/tstate-loop-break.rs | 27 -------------------------- 1 file changed, 27 deletions(-) delete mode 100644 src/test/run-pass/tstate-loop-break.rs diff --git a/src/test/run-pass/tstate-loop-break.rs b/src/test/run-pass/tstate-loop-break.rs deleted file mode 100644 index 4228f72b7caa4..0000000000000 --- a/src/test/run-pass/tstate-loop-break.rs +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2012 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 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -// xfail-test - -fn is_even(i: int) -> bool { (i%2) == 0 } -fn even(i: int) : is_even(i) -> int { i } - -fn test() { - let v = 4; - loop { - check is_even(v); - break; - } - even(v); -} - -pub fn main() { - test(); -} From c75b7630bcc45bf9f2c7f6831e46c84b0c8f024f Mon Sep 17 00:00:00 2001 From: John Clements Date: Tue, 30 Apr 2013 10:40:08 -0700 Subject: [PATCH 086/410] renamed issue-2185 to issue-3429 --- src/test/run-pass/{issue-1895.rs => issue-3429.rs} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/test/run-pass/{issue-1895.rs => issue-3429.rs} (100%) diff --git a/src/test/run-pass/issue-1895.rs b/src/test/run-pass/issue-3429.rs similarity index 100% rename from src/test/run-pass/issue-1895.rs rename to src/test/run-pass/issue-3429.rs From fc661079a479f0aff6add4478c3afb8c2226b333 Mon Sep 17 00:00:00 2001 From: John Clements Date: Thu, 18 Apr 2013 17:28:22 -0700 Subject: [PATCH 087/410] fixed up syntax --- src/test/run-pass/type-sizes.rs | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/test/run-pass/type-sizes.rs b/src/test/run-pass/type-sizes.rs index bc2ca20d642d9..134f1e4098f07 100644 --- a/src/test/run-pass/type-sizes.rs +++ b/src/test/run-pass/type-sizes.rs @@ -8,9 +8,16 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// xfail-test -use sys::rustrt::size_of; -extern mod std; +extern mod core; +use core::sys::size_of; + +struct t {a: u8, b: i8} +struct u {a: u8, b: i8, c: u8} +struct v {a: u8, b: i8, c: v2, d: u32} +struct v2 {u: char, v: u8} +struct w {a: int, b: ()} +struct x {a: int, b: (), c: ()} +struct y {x: int} pub fn main() { assert!((size_of::() == 1 as uint)); @@ -18,14 +25,14 @@ pub fn main() { assert!((size_of::() == 4 as uint)); assert!((size_of::() == 1 as uint)); assert!((size_of::() == 4 as uint)); - assert!((size_of::<{a: u8, b: i8}>() == 2 as uint)); - assert!((size_of::<{a: u8, b: i8, c: u8}>() == 3 as uint)); + assert!((size_of::() == 2 as uint)); + assert!((size_of::() == 3 as uint)); // Alignment causes padding before the char and the u32. - assert!(size_of::<{a: u8, b: i8, c: {u: char, v: u8}, d: u32}>() == + assert!(size_of::() == 16 as uint); assert!((size_of::() == size_of::())); - assert!((size_of::<{a: int, b: ()}>() == size_of::())); - assert!((size_of::<{a: int, b: (), c: ()}>() == size_of::())); - assert!((size_of::() == size_of::<{x: int}>())); + assert!((size_of::() == size_of::())); + assert!((size_of::() == size_of::())); + assert!((size_of::() == size_of::())); } From ab1d8ead91ac23e07f4ba9a186e0ae7ddbcd2515 Mon Sep 17 00:00:00 2001 From: John Clements Date: Tue, 30 Apr 2013 11:58:55 -0700 Subject: [PATCH 088/410] fixed pattern, moved test to compile-fail --- src/test/{run-fail => compile-fail}/issue-5927.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/test/{run-fail => compile-fail}/issue-5927.rs (92%) diff --git a/src/test/run-fail/issue-5927.rs b/src/test/compile-fail/issue-5927.rs similarity index 92% rename from src/test/run-fail/issue-5927.rs rename to src/test/compile-fail/issue-5927.rs index f302d706c15d7..a1b4ee7aa3445 100644 --- a/src/test/run-fail/issue-5927.rs +++ b/src/test/compile-fail/issue-5927.rs @@ -10,7 +10,7 @@ -// error-pattern:cant-use-x-as-pattern-mumble +// error-pattern:unresolved enum variant fn main() { let z = match 3 { From 9847428acf91e313c9c742fc38c69546bcfc8b26 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Tue, 30 Apr 2013 17:45:08 -0700 Subject: [PATCH 089/410] mk: Fix pdf build --- mk/docs.mk | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mk/docs.mk b/mk/docs.mk index 252f62cf87116..f49c75d6acb01 100644 --- a/mk/docs.mk +++ b/mk/docs.mk @@ -53,7 +53,7 @@ doc/rust.html: rust.md doc/version_info.html doc/rust.css doc/manual.css --include-before-body=doc/version_info.html \ --output=$@ -DOCS += doc/rust.pdf +DOCS += doc/rust.tex doc/rust.tex: rust.md doc/version.md @$(call E, pandoc: $@) $(Q)$(CFG_NODE) $(S)doc/prep.js $< | \ @@ -139,6 +139,7 @@ doc/tutorial-tasks.html: tutorial-tasks.md doc/version_info.html doc/rust.css $(info cfg: lacking luatex, disabling pdflatex) else +DOCS += doc/rust.pdf doc/rust.pdf: doc/rust.tex @$(call E, pdflatex: $@) $(Q)$(CFG_PDFLATEX) \ From 782e06e0e379768d03e35acae16e7ee1e1841633 Mon Sep 17 00:00:00 2001 From: Tim Chevalier Date: Tue, 30 Apr 2013 17:58:24 -0700 Subject: [PATCH 090/410] core/std: Fix race condition in os::mkdir_recursive tests Added a change_dir_locked function to os, and use it in the mkdir_recursive tests so that the tests don't clobber each other's directory changes. --- src/libcore/os.rs | 30 +++++++++++++++++++++++++ src/libstd/tempfile.rs | 50 ++++++++++++++++++++++++------------------ 2 files changed, 59 insertions(+), 21 deletions(-) diff --git a/src/libcore/os.rs b/src/libcore/os.rs index f1962eeaa23d0..0455dabb7f013 100644 --- a/src/libcore/os.rs +++ b/src/libcore/os.rs @@ -818,6 +818,36 @@ pub fn change_dir(p: &Path) -> bool { } } +/// Changes the current working directory to the specified +/// path while acquiring a global lock, then calls `action`. +/// If the change is successful, releases the lock and restores the +/// CWD to what it was before, returning true. +/// Returns false if the directory doesn't exist or if the directory change +/// is otherwise unsuccessful. +pub fn change_dir_locked(p: &Path, action: &fn()) -> bool { + use unstable::global::global_data_clone_create; + use unstable::{Exclusive, exclusive}; + + fn key(_: Exclusive<()>) { } + + let result = unsafe { + global_data_clone_create(key, || { + ~exclusive(()) + }) + }; + + do result.with_imm() |_| { + let old_dir = os::getcwd(); + if change_dir(p) { + action(); + change_dir(&old_dir) + } + else { + false + } + } +} + /// Copies a file from one location to another pub fn copy_file(from: &Path, to: &Path) -> bool { return do_copy_file(from, to); diff --git a/src/libstd/tempfile.rs b/src/libstd/tempfile.rs index eec91b6845444..6da74834b1a49 100644 --- a/src/libstd/tempfile.rs +++ b/src/libstd/tempfile.rs @@ -42,13 +42,18 @@ mod tests { use core::libc::consts::os::posix88::{S_IRUSR, S_IWUSR, S_IXUSR}; use core::os; - let root = mkdtemp(&os::tmpdir(), "temp").expect("recursive_mkdir_rel"); - os::change_dir(&root); - let path = Path("frob"); - assert!(os::mkdir_recursive(&path, (S_IRUSR | S_IWUSR | S_IXUSR) as i32)); - assert!(os::path_is_dir(&path)); - assert!(os::mkdir_recursive(&path, (S_IRUSR | S_IWUSR | S_IXUSR) as i32)); - assert!(os::path_is_dir(&path)); + let root = mkdtemp(&os::tmpdir(), "recursive_mkdir_rel"). + expect("recursive_mkdir_rel"); + assert!(do os::change_dir_locked(&root) { + let path = Path("frob"); + debug!("recursive_mkdir_rel: Making: %s in cwd %s [%?]", path.to_str(), + os::getcwd().to_str(), + os::path_exists(&path)); + assert!(os::mkdir_recursive(&path, (S_IRUSR | S_IWUSR | S_IXUSR) as i32)); + assert!(os::path_is_dir(&path)); + assert!(os::mkdir_recursive(&path, (S_IRUSR | S_IWUSR | S_IXUSR) as i32)); + assert!(os::path_is_dir(&path)); + }); } #[test] @@ -67,18 +72,21 @@ mod tests { use core::libc::consts::os::posix88::{S_IRUSR, S_IWUSR, S_IXUSR}; use core::os; - let root = mkdtemp(&os::tmpdir(), "temp").expect("recursive_mkdir_rel_2"); - os::change_dir(&root); - let path = Path("./frob/baz"); - debug!("...Making: %s in cwd %s", path.to_str(), os::getcwd().to_str()); - assert!(os::mkdir_recursive(&path, (S_IRUSR | S_IWUSR | S_IXUSR) as i32)); - assert!(os::path_is_dir(&path)); - assert!(os::path_is_dir(&path.pop())); - let path2 = Path("quux/blat"); - debug!("Making: %s in cwd %s", path2.to_str(), os::getcwd().to_str()); - assert!(os::mkdir_recursive(&path2, (S_IRUSR | S_IWUSR | S_IXUSR) as i32)); - assert!(os::path_is_dir(&path2)); - assert!(os::path_is_dir(&path2.pop())); + let root = mkdtemp(&os::tmpdir(), "recursive_mkdir_rel_2"). + expect("recursive_mkdir_rel_2"); + assert!(do os::change_dir_locked(&root) { + let path = Path("./frob/baz"); + debug!("recursive_mkdir_rel_2: Making: %s in cwd %s [%?]", path.to_str(), + os::getcwd().to_str(), os::path_exists(&path)); + assert!(os::mkdir_recursive(&path, (S_IRUSR | S_IWUSR | S_IXUSR) as i32)); + assert!(os::path_is_dir(&path)); + assert!(os::path_is_dir(&path.pop())); + let path2 = Path("quux/blat"); + debug!("recursive_mkdir_rel_2: Making: %s in cwd %s", path2.to_str(), + os::getcwd().to_str()); + assert!(os::mkdir_recursive(&path2, (S_IRUSR | S_IWUSR | S_IXUSR) as i32)); + assert!(os::path_is_dir(&path2)); + assert!(os::path_is_dir(&path2.pop())); + }); } - -} \ No newline at end of file +} From ee26c7c433dbb8d41a2b65dbc89eb84acfc2d311 Mon Sep 17 00:00:00 2001 From: Brendan Zabarauskas Date: Wed, 1 May 2013 15:40:05 +1000 Subject: [PATCH 091/410] Revert rename of Div to Quot --- doc/rust.md | 6 +- src/libcore/core.rc | 2 +- src/libcore/num/f32.rs | 9 +- src/libcore/num/f64.rs | 9 +- src/libcore/num/float.rs | 10 +-- src/libcore/num/int-template.rs | 123 +++++++++++++--------------- src/libcore/num/num.rs | 29 ++++--- src/libcore/num/strconv.rs | 16 ++-- src/libcore/num/uint-template.rs | 29 +++---- src/libcore/ops.rs | 6 -- src/libcore/prelude.rs | 2 +- src/librustc/middle/const_eval.rs | 10 +-- src/librustc/middle/lang_items.rs | 10 +-- src/librustc/middle/resolve.rs | 6 +- src/librustc/middle/trans/base.rs | 6 +- src/librustc/middle/trans/consts.rs | 2 +- src/librustc/middle/trans/expr.rs | 2 +- src/librustc/middle/ty.rs | 2 +- src/libstd/num/bigint.rs | 123 ++++++++++++++-------------- src/libstd/num/complex.rs | 6 +- src/libstd/num/rational.rs | 8 +- src/libsyntax/ast.rs | 2 +- src/libsyntax/ast_util.rs | 6 +- src/libsyntax/parse/parser.rs | 4 +- src/libsyntax/parse/token.rs | 2 +- src/test/compile-fail/eval-enum.rs | 2 +- src/test/run-fail/divide-by-zero.rs | 2 +- 27 files changed, 199 insertions(+), 235 deletions(-) diff --git a/doc/rust.md b/doc/rust.md index 9f81b38009fe8..e23613e149ce7 100644 --- a/doc/rust.md +++ b/doc/rust.md @@ -1467,8 +1467,8 @@ A complete list of the built-in language items follows: : Elements can be subtracted. `mul` : Elements can be multiplied. -`quot` - : Elements have a quotient operation. +`div` + : Elements have a division operation. `rem` : Elements have a remainder operation. `neg` @@ -1857,7 +1857,7 @@ The default meaning of the operators on standard types is given here. Calls the `mul` method on the `core::ops::Mul` trait. `/` : Quotient. - Calls the `quot` method on the `core::ops::Quot` trait. + Calls the `div` method on the `core::ops::Div` trait. `%` : Remainder. Calls the `rem` method on the `core::ops::Rem` trait. diff --git a/src/libcore/core.rc b/src/libcore/core.rc index f9a56f613d542..26398f3fe5236 100644 --- a/src/libcore/core.rc +++ b/src/libcore/core.rc @@ -78,7 +78,7 @@ pub use ops::{Drop}; #[cfg(stage0)] pub use ops::{Add, Sub, Mul, Div, Modulo, Neg, Not}; #[cfg(not(stage0))] -pub use ops::{Add, Sub, Mul, Quot, Rem, Neg, Not}; +pub use ops::{Add, Sub, Mul, Div, Rem, Neg, Not}; pub use ops::{BitAnd, BitOr, BitXor}; pub use ops::{Shl, Shr, Index}; diff --git a/src/libcore/num/f32.rs b/src/libcore/num/f32.rs index e687f482fa98c..04ddd63a177e7 100644 --- a/src/libcore/num/f32.rs +++ b/src/libcore/num/f32.rs @@ -123,7 +123,7 @@ pub fn sub(x: f32, y: f32) -> f32 { return x - y; } pub fn mul(x: f32, y: f32) -> f32 { return x * y; } #[inline(always)] -pub fn quot(x: f32, y: f32) -> f32 { return x / y; } +pub fn div(x: f32, y: f32) -> f32 { return x / y; } #[inline(always)] pub fn rem(x: f32, y: f32) -> f32 { return x % y; } @@ -279,16 +279,11 @@ impl Mul for f32 { fn mul(&self, other: &f32) -> f32 { *self * *other } } -#[cfg(stage0,notest)] +#[cfg(notest)] impl Div for f32 { #[inline(always)] fn div(&self, other: &f32) -> f32 { *self / *other } } -#[cfg(not(stage0),notest)] -impl Quot for f32 { - #[inline(always)] - fn quot(&self, other: &f32) -> f32 { *self / *other } -} #[cfg(stage0,notest)] impl Modulo for f32 { diff --git a/src/libcore/num/f64.rs b/src/libcore/num/f64.rs index d00e6ae2c0d79..9f1944e3fad7f 100644 --- a/src/libcore/num/f64.rs +++ b/src/libcore/num/f64.rs @@ -149,7 +149,7 @@ pub fn sub(x: f64, y: f64) -> f64 { return x - y; } pub fn mul(x: f64, y: f64) -> f64 { return x * y; } #[inline(always)] -pub fn quot(x: f64, y: f64) -> f64 { return x / y; } +pub fn div(x: f64, y: f64) -> f64 { return x / y; } #[inline(always)] pub fn rem(x: f64, y: f64) -> f64 { return x % y; } @@ -296,15 +296,10 @@ impl Sub for f64 { impl Mul for f64 { fn mul(&self, other: &f64) -> f64 { *self * *other } } -#[cfg(stage0,notest)] +#[cfg(notest)] impl Div for f64 { fn div(&self, other: &f64) -> f64 { *self / *other } } -#[cfg(not(stage0),notest)] -impl Quot for f64 { - #[inline(always)] - fn quot(&self, other: &f64) -> f64 { *self / *other } -} #[cfg(stage0,notest)] impl Modulo for f64 { fn modulo(&self, other: &f64) -> f64 { *self % *other } diff --git a/src/libcore/num/float.rs b/src/libcore/num/float.rs index 3aa8848cdbed2..f163d67a69ccb 100644 --- a/src/libcore/num/float.rs +++ b/src/libcore/num/float.rs @@ -25,7 +25,7 @@ use libc::c_int; use num::{Zero, One, strconv}; use prelude::*; -pub use f64::{add, sub, mul, quot, rem, lt, le, eq, ne, ge, gt}; +pub use f64::{add, sub, mul, div, rem, lt, le, eq, ne, ge, gt}; pub use f64::logarithm; pub use f64::{acos, asin, atan2, cbrt, ceil, copysign, cosh, floor}; pub use f64::{erf, erfc, exp, expm1, exp2, abs_sub}; @@ -692,16 +692,12 @@ impl Mul for float { fn mul(&self, other: &float) -> float { *self * *other } } -#[cfg(stage0,notest)] +#[cfg(notest)] impl Div for float { #[inline(always)] fn div(&self, other: &float) -> float { *self / *other } } -#[cfg(not(stage0),notest)] -impl Quot for float { - #[inline(always)] - fn quot(&self, other: &float) -> float { *self / *other } -} + #[cfg(stage0,notest)] impl Modulo for float { #[inline(always)] diff --git a/src/libcore/num/int-template.rs b/src/libcore/num/int-template.rs index ec38a32c039d6..fadba84a0fe93 100644 --- a/src/libcore/num/int-template.rs +++ b/src/libcore/num/int-template.rs @@ -30,7 +30,7 @@ pub fn sub(x: T, y: T) -> T { x - y } #[inline(always)] pub fn mul(x: T, y: T) -> T { x * y } #[inline(always)] -pub fn quot(x: T, y: T) -> T { x / y } +pub fn div(x: T, y: T) -> T { x / y } /// /// Returns the remainder of y / x. @@ -201,16 +201,11 @@ impl Mul for T { fn mul(&self, other: &T) -> T { *self * *other } } -#[cfg(stage0,notest)] +#[cfg(notest)] impl Div for T { - #[inline(always)] - fn div(&self, other: &T) -> T { *self / *other } -} -#[cfg(not(stage0),notest)] -impl Quot for T { /// - /// Returns the integer quotient, truncated towards 0. As this behaviour reflects - /// the underlying machine implementation it is more efficient than `Natural::div`. + /// Integer division, truncated towards 0. As this behaviour reflects the underlying + /// machine implementation it is more efficient than `Integer::div_floor`. /// /// # Examples /// @@ -227,7 +222,7 @@ impl Quot for T { /// ~~~ /// #[inline(always)] - fn quot(&self, other: &T) -> T { *self / *other } + fn div(&self, other: &T) -> T { *self / *other } } #[cfg(stage0,notest)] @@ -307,25 +302,25 @@ impl Integer for T { /// # Examples /// /// ~~~ - /// assert!(( 8).div( 3) == 2); - /// assert!(( 8).div(-3) == -3); - /// assert!((-8).div( 3) == -3); - /// assert!((-8).div(-3) == 2); + /// assert!(( 8).div_floor( 3) == 2); + /// assert!(( 8).div_floor(-3) == -3); + /// assert!((-8).div_floor( 3) == -3); + /// assert!((-8).div_floor(-3) == 2); /// - /// assert!(( 1).div( 2) == 0); - /// assert!(( 1).div(-2) == -1); - /// assert!((-1).div( 2) == -1); - /// assert!((-1).div(-2) == 0); + /// assert!(( 1).div_floor( 2) == 0); + /// assert!(( 1).div_floor(-2) == -1); + /// assert!((-1).div_floor( 2) == -1); + /// assert!((-1).div_floor(-2) == 0); /// ~~~ /// #[inline(always)] - fn div(&self, other: &T) -> T { + fn div_floor(&self, other: &T) -> T { // Algorithm from [Daan Leijen. _Division and Modulus for Computer Scientists_, // December 2001](http://research.microsoft.com/pubs/151917/divmodnote-letter.pdf) - match self.quot_rem(other) { - (q, r) if (r > 0 && *other < 0) - || (r < 0 && *other > 0) => q - 1, - (q, _) => q, + match self.div_rem(other) { + (d, r) if (r > 0 && *other < 0) + || (r < 0 && *other > 0) => d - 1, + (d, _) => d, } } @@ -333,25 +328,25 @@ impl Integer for T { /// Integer modulo, satisfying: /// /// ~~~ - /// assert!(n.div(d) * d + n.modulo(d) == n) + /// assert!(n.div_floor(d) * d + n.mod_floor(d) == n) /// ~~~ /// /// # Examples /// /// ~~~ - /// assert!(( 8).modulo( 3) == 2); - /// assert!(( 8).modulo(-3) == -1); - /// assert!((-8).modulo( 3) == 1); - /// assert!((-8).modulo(-3) == -2); + /// assert!(( 8).mod_floor( 3) == 2); + /// assert!(( 8).mod_floor(-3) == -1); + /// assert!((-8).mod_floor( 3) == 1); + /// assert!((-8).mod_floor(-3) == -2); /// - /// assert!(( 1).modulo( 2) == 1); - /// assert!(( 1).modulo(-2) == -1); - /// assert!((-1).modulo( 2) == 1); - /// assert!((-1).modulo(-2) == -1); + /// assert!(( 1).mod_floor( 2) == 1); + /// assert!(( 1).mod_floor(-2) == -1); + /// assert!((-1).mod_floor( 2) == 1); + /// assert!((-1).mod_floor(-2) == -1); /// ~~~ /// #[inline(always)] - fn modulo(&self, other: &T) -> T { + fn mod_floor(&self, other: &T) -> T { // Algorithm from [Daan Leijen. _Division and Modulus for Computer Scientists_, // December 2001](http://research.microsoft.com/pubs/151917/divmodnote-letter.pdf) match *self % *other { @@ -361,21 +356,21 @@ impl Integer for T { } } - /// Calculates `div` and `modulo` simultaneously + /// Calculates `div_floor` and `mod_floor` simultaneously #[inline(always)] - fn div_mod(&self, other: &T) -> (T,T) { + fn div_mod_floor(&self, other: &T) -> (T,T) { // Algorithm from [Daan Leijen. _Division and Modulus for Computer Scientists_, // December 2001](http://research.microsoft.com/pubs/151917/divmodnote-letter.pdf) - match self.quot_rem(other) { - (q, r) if (r > 0 && *other < 0) - || (r < 0 && *other > 0) => (q - 1, r + *other), - (q, r) => (q, r), + match self.div_rem(other) { + (d, r) if (r > 0 && *other < 0) + || (r < 0 && *other > 0) => (d - 1, r + *other), + (d, r) => (d, r), } } - /// Calculates `quot` (`\`) and `rem` (`%`) simultaneously + /// Calculates `div` (`\`) and `rem` (`%`) simultaneously #[inline(always)] - fn quot_rem(&self, other: &T) -> (T,T) { + fn div_rem(&self, other: &T) -> (T,T) { (*self / *other, *self % *other) } @@ -599,42 +594,42 @@ mod tests { } #[test] - fn test_quot_rem() { - fn test_nd_qr(nd: (T,T), qr: (T,T)) { + fn test_div_rem() { + fn test_nd_dr(nd: (T,T), qr: (T,T)) { let (n,d) = nd; - let separate_quot_rem = (n / d, n % d); - let combined_quot_rem = n.quot_rem(&d); + let separate_div_rem = (n / d, n % d); + let combined_div_rem = n.div_rem(&d); - assert_eq!(separate_quot_rem, qr); - assert_eq!(combined_quot_rem, qr); + assert_eq!(separate_div_rem, qr); + assert_eq!(combined_div_rem, qr); - test_division_rule(nd, separate_quot_rem); - test_division_rule(nd, combined_quot_rem); + test_division_rule(nd, separate_div_rem); + test_division_rule(nd, combined_div_rem); } - test_nd_qr(( 8, 3), ( 2, 2)); - test_nd_qr(( 8, -3), (-2, 2)); - test_nd_qr((-8, 3), (-2, -2)); - test_nd_qr((-8, -3), ( 2, -2)); + test_nd_dr(( 8, 3), ( 2, 2)); + test_nd_dr(( 8, -3), (-2, 2)); + test_nd_dr((-8, 3), (-2, -2)); + test_nd_dr((-8, -3), ( 2, -2)); - test_nd_qr(( 1, 2), ( 0, 1)); - test_nd_qr(( 1, -2), ( 0, 1)); - test_nd_qr((-1, 2), ( 0, -1)); - test_nd_qr((-1, -2), ( 0, -1)); + test_nd_dr(( 1, 2), ( 0, 1)); + test_nd_dr(( 1, -2), ( 0, 1)); + test_nd_dr((-1, 2), ( 0, -1)); + test_nd_dr((-1, -2), ( 0, -1)); } #[test] - fn test_div_mod() { + fn test_div_mod_floor() { fn test_nd_dm(nd: (T,T), dm: (T,T)) { let (n,d) = nd; - let separate_div_mod = (n.div(&d), n.modulo(&d)); - let combined_div_mod = n.div_mod(&d); + let separate_div_mod_floor = (n.div_floor(&d), n.mod_floor(&d)); + let combined_div_mod_floor = n.div_mod_floor(&d); - assert_eq!(separate_div_mod, dm); - assert_eq!(combined_div_mod, dm); + assert_eq!(separate_div_mod_floor, dm); + assert_eq!(combined_div_mod_floor, dm); - test_division_rule(nd, separate_div_mod); - test_division_rule(nd, combined_div_mod); + test_division_rule(nd, separate_div_mod_floor); + test_division_rule(nd, combined_div_mod_floor); } test_nd_dm(( 8, 3), ( 2, 2)); diff --git a/src/libcore/num/num.rs b/src/libcore/num/num.rs index 3e43ebfef1222..b8f47db7d128e 100644 --- a/src/libcore/num/num.rs +++ b/src/libcore/num/num.rs @@ -11,13 +11,11 @@ //! An interface for numeric types use cmp::{Eq, Ord}; #[cfg(stage0)] -use ops::{Add, Sub, Mul, Neg}; -#[cfg(stage0)] -use Quot = ops::Div; +use ops::{Add, Sub, Mul, Div, Neg}; #[cfg(stage0)] use Rem = ops::Modulo; #[cfg(not(stage0))] -use ops::{Add, Sub, Mul, Quot, Rem, Neg}; +use ops::{Add, Sub, Mul, Div, Rem, Neg}; use ops::{Not, BitAnd, BitOr, BitXor, Shl, Shr}; use option::Option; use kinds::Copy; @@ -32,7 +30,7 @@ pub trait Num: Eq + Zero + One + Add + Sub + Mul - + Quot + + Div + Rem {} pub trait IntConvertible { @@ -76,12 +74,13 @@ pub fn abs>(v: T) -> T { pub trait Integer: Num + Orderable - + Quot + + Div + Rem { - fn div(&self, other: &Self) -> Self; - fn modulo(&self, other: &Self) -> Self; - fn div_mod(&self, other: &Self) -> (Self,Self); - fn quot_rem(&self, other: &Self) -> (Self,Self); + fn div_rem(&self, other: &Self) -> (Self,Self); + + fn div_floor(&self, other: &Self) -> Self; + fn mod_floor(&self, other: &Self) -> Self; + fn div_mod_floor(&self, other: &Self) -> (Self,Self); fn gcd(&self, other: &Self) -> Self; fn lcm(&self, other: &Self) -> Self; @@ -102,7 +101,7 @@ pub trait Round { pub trait Fractional: Num + Orderable + Round - + Quot { + + Div { fn recip(&self) -> Self; } @@ -226,7 +225,7 @@ pub trait Primitive: Num + Add + Sub + Mul - + Quot + + Div + Rem { // FIXME (#5527): These should be associated constants fn bits() -> uint; @@ -371,7 +370,7 @@ pub trait FromStrRadix { /// - If code written to use this function doesn't care about it, it's /// probably assuming that `x^0` always equals `1`. /// -pub fn pow_with_uint+Mul>( +pub fn pow_with_uint+Mul>( radix: uint, pow: uint) -> T { let _0: T = Zero::zero(); let _1: T = One::one(); @@ -413,13 +412,13 @@ pub fn test_num(ten: T, two: T) { assert_eq!(ten.add(&two), cast(12)); assert_eq!(ten.sub(&two), cast(8)); assert_eq!(ten.mul(&two), cast(20)); - assert_eq!(ten.quot(&two), cast(5)); + assert_eq!(ten.div(&two), cast(5)); assert_eq!(ten.rem(&two), cast(0)); assert_eq!(ten.add(&two), ten + two); assert_eq!(ten.sub(&two), ten - two); assert_eq!(ten.mul(&two), ten * two); - assert_eq!(ten.quot(&two), ten / two); + assert_eq!(ten.div(&two), ten / two); assert_eq!(ten.rem(&two), ten % two); } diff --git a/src/libcore/num/strconv.rs b/src/libcore/num/strconv.rs index 2f3cd92dac09e..68e3b407a8bc2 100644 --- a/src/libcore/num/strconv.rs +++ b/src/libcore/num/strconv.rs @@ -10,15 +10,13 @@ use core::cmp::{Ord, Eq}; #[cfg(stage0)] -use ops::{Add, Sub, Mul, Neg}; -#[cfg(stage0)] -use Quot = ops::Div; +use ops::{Add, Sub, Mul, Div, Neg}; #[cfg(stage0)] use Rem = ops::Modulo; #[cfg(stage1)] #[cfg(stage2)] #[cfg(stage3)] -use ops::{Add, Sub, Mul, Quot, Rem, Neg}; +use ops::{Add, Sub, Mul, Div, Rem, Neg}; use option::{None, Option, Some}; use char; use str; @@ -67,7 +65,7 @@ fn is_neg_inf(num: &T) -> bool { } #[inline(always)] -fn is_neg_zero>(num: &T) -> bool { +fn is_neg_zero>(num: &T) -> bool { let _0: T = Zero::zero(); let _1: T = One::one(); @@ -180,7 +178,7 @@ static nan_buf: [u8, ..3] = ['N' as u8, 'a' as u8, 'N' as u8]; * - Fails if `radix` < 2 or `radix` > 36. */ pub fn to_str_bytes_common+Neg+Rem+Mul>( + Div+Neg+Rem+Mul>( num: &T, radix: uint, negative_zero: bool, sign: SignFormat, digits: SignificantDigits) -> (~[u8], bool) { if (radix as int) < 2 { @@ -388,7 +386,7 @@ pub fn to_str_bytes_common+Neg+Rem+Mul>( + Div+Neg+Rem+Mul>( num: &T, radix: uint, negative_zero: bool, sign: SignFormat, digits: SignificantDigits) -> (~str, bool) { let (bytes, special) = to_str_bytes_common(num, radix, @@ -441,7 +439,7 @@ priv static DIGIT_E_RADIX: uint = ('e' as uint) - ('a' as uint) + 11u; * - Fails if `radix` > 18 and `special == true` due to conflict * between digit and lowest first character in `inf` and `NaN`, the `'i'`. */ -pub fn from_str_bytes_common+ +pub fn from_str_bytes_common+ Mul+Sub+Neg+Add+ NumStrConv>( buf: &[u8], radix: uint, negative: bool, fractional: bool, @@ -638,7 +636,7 @@ pub fn from_str_bytes_common+ * `from_str_bytes_common()`, for details see there. */ #[inline(always)] -pub fn from_str_common+Mul+ +pub fn from_str_common+Mul+ Sub+Neg+Add+NumStrConv>( buf: &str, radix: uint, negative: bool, fractional: bool, special: bool, exponent: ExponentFormat, empty_zero: bool, diff --git a/src/libcore/num/uint-template.rs b/src/libcore/num/uint-template.rs index 3dfdd22c42dc1..f6b98989545d0 100644 --- a/src/libcore/num/uint-template.rs +++ b/src/libcore/num/uint-template.rs @@ -31,7 +31,7 @@ pub fn sub(x: T, y: T) -> T { x - y } #[inline(always)] pub fn mul(x: T, y: T) -> T { x * y } #[inline(always)] -pub fn quot(x: T, y: T) -> T { x / y } +pub fn div(x: T, y: T) -> T { x / y } #[inline(always)] pub fn rem(x: T, y: T) -> T { x % y } @@ -166,16 +166,11 @@ impl Mul for T { fn mul(&self, other: &T) -> T { *self * *other } } -#[cfg(stage0,notest)] +#[cfg(notest)] impl Div for T { #[inline(always)] fn div(&self, other: &T) -> T { *self / *other } } -#[cfg(not(stage0),notest)] -impl Quot for T { - #[inline(always)] - fn quot(&self, other: &T) -> T { *self / *other } -} #[cfg(stage0,notest)] impl Modulo for T { @@ -197,23 +192,23 @@ impl Neg for T { impl Unsigned for T {} impl Integer for T { - /// Unsigned integer division. Returns the same result as `quot` (`/`). + /// Calculates `div` (`\`) and `rem` (`%`) simultaneously #[inline(always)] - fn div(&self, other: &T) -> T { *self / *other } + fn div_rem(&self, other: &T) -> (T,T) { + (*self / *other, *self % *other) + } - /// Unsigned integer modulo operation. Returns the same result as `rem` (`%`). + /// Unsigned integer division. Returns the same result as `div` (`/`). #[inline(always)] - fn modulo(&self, other: &T) -> T { *self / *other } + fn div_floor(&self, other: &T) -> T { *self / *other } - /// Calculates `div` and `modulo` simultaneously + /// Unsigned integer modulo operation. Returns the same result as `rem` (`%`). #[inline(always)] - fn div_mod(&self, other: &T) -> (T,T) { - (*self / *other, *self % *other) - } + fn mod_floor(&self, other: &T) -> T { *self / *other } - /// Calculates `quot` (`\`) and `rem` (`%`) simultaneously + /// Calculates `div_floor` and `modulo_floor` simultaneously #[inline(always)] - fn quot_rem(&self, other: &T) -> (T,T) { + fn div_mod_floor(&self, other: &T) -> (T,T) { (*self / *other, *self % *other) } diff --git a/src/libcore/ops.rs b/src/libcore/ops.rs index 1aa7aada05c88..5ba860c89c9b9 100644 --- a/src/libcore/ops.rs +++ b/src/libcore/ops.rs @@ -31,15 +31,9 @@ pub trait Mul { } #[lang="div"] -#[cfg(stage0)] pub trait Div { fn div(&self, rhs: &RHS) -> Result; } -#[lang="quot"] -#[cfg(not(stage0))] -pub trait Quot { - fn quot(&self, rhs: &RHS) -> Result; -} #[lang="modulo"] #[cfg(stage0)] diff --git a/src/libcore/prelude.rs b/src/libcore/prelude.rs index 9a2e480ce6e54..4527fcf2923da 100644 --- a/src/libcore/prelude.rs +++ b/src/libcore/prelude.rs @@ -17,7 +17,7 @@ pub use kinds::{Const, Copy, Owned, Durable}; #[cfg(stage0)] pub use ops::{Add, Sub, Mul, Div, Modulo, Neg, Not}; #[cfg(not(stage0))] -pub use ops::{Add, Sub, Mul, Quot, Rem, Neg, Not}; +pub use ops::{Add, Sub, Mul, Div, Rem, Neg, Not}; pub use ops::{BitAnd, BitOr, BitXor}; pub use ops::{Drop}; pub use ops::{Shl, Shr, Index}; diff --git a/src/librustc/middle/const_eval.rs b/src/librustc/middle/const_eval.rs index bba4d35b56046..86b7379bb698d 100644 --- a/src/librustc/middle/const_eval.rs +++ b/src/librustc/middle/const_eval.rs @@ -279,7 +279,7 @@ pub fn eval_const_expr_partial(tcx: middle::ty::ctxt, e: @expr) add => Ok(const_float(a + b)), subtract => Ok(const_float(a - b)), mul => Ok(const_float(a * b)), - quot => Ok(const_float(a / b)), + div => Ok(const_float(a / b)), rem => Ok(const_float(a % b)), eq => fromb(a == b), lt => fromb(a < b), @@ -295,8 +295,8 @@ pub fn eval_const_expr_partial(tcx: middle::ty::ctxt, e: @expr) add => Ok(const_int(a + b)), subtract => Ok(const_int(a - b)), mul => Ok(const_int(a * b)), - quot if b == 0 => Err(~"attempted quotient with a divisor of zero"), - quot => Ok(const_int(a / b)), + div if b == 0 => Err(~"attempted to divide by zero"), + div => Ok(const_int(a / b)), rem if b == 0 => Err(~"attempted remainder with a divisor of zero"), rem => Ok(const_int(a % b)), and | bitand => Ok(const_int(a & b)), @@ -317,8 +317,8 @@ pub fn eval_const_expr_partial(tcx: middle::ty::ctxt, e: @expr) add => Ok(const_uint(a + b)), subtract => Ok(const_uint(a - b)), mul => Ok(const_uint(a * b)), - quot if b == 0 => Err(~"attempted quotient with a divisor of zero"), - quot => Ok(const_uint(a / b)), + div if b == 0 => Err(~"attempted to divide by zero"), + div => Ok(const_uint(a / b)), rem if b == 0 => Err(~"attempted remainder with a divisor of zero"), rem => Ok(const_uint(a % b)), and | bitand => Ok(const_uint(a & b)), diff --git a/src/librustc/middle/lang_items.rs b/src/librustc/middle/lang_items.rs index 2de12b9eb9746..7298064e1c00d 100644 --- a/src/librustc/middle/lang_items.rs +++ b/src/librustc/middle/lang_items.rs @@ -42,7 +42,7 @@ pub enum LangItem { AddTraitLangItem, // 5 SubTraitLangItem, // 6 MulTraitLangItem, // 7 - QuotTraitLangItem, // 8 + DivTraitLangItem, // 8 RemTraitLangItem, // 9 NegTraitLangItem, // 10 NotTraitLangItem, // 11 @@ -105,7 +105,7 @@ pub impl LanguageItems { 5 => "add", 6 => "sub", 7 => "mul", - 8 => "quot", + 8 => "div", 9 => "rem", 10 => "neg", 11 => "not", @@ -167,8 +167,8 @@ pub impl LanguageItems { pub fn mul_trait(&const self) -> def_id { self.items[MulTraitLangItem as uint].get() } - pub fn quot_trait(&const self) -> def_id { - self.items[QuotTraitLangItem as uint].get() + pub fn div_trait(&const self) -> def_id { + self.items[DivTraitLangItem as uint].get() } pub fn rem_trait(&const self) -> def_id { self.items[RemTraitLangItem as uint].get() @@ -268,7 +268,7 @@ fn LanguageItemCollector<'r>(crate: @crate, item_refs.insert(@~"add", AddTraitLangItem as uint); item_refs.insert(@~"sub", SubTraitLangItem as uint); item_refs.insert(@~"mul", MulTraitLangItem as uint); - item_refs.insert(@~"quot", QuotTraitLangItem as uint); + item_refs.insert(@~"div", DivTraitLangItem as uint); item_refs.insert(@~"rem", RemTraitLangItem as uint); item_refs.insert(@~"neg", NegTraitLangItem as uint); item_refs.insert(@~"not", NotTraitLangItem as uint); diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs index 294a21fac2c23..d8ad53212e2b7 100644 --- a/src/librustc/middle/resolve.rs +++ b/src/librustc/middle/resolve.rs @@ -33,7 +33,7 @@ use syntax::ast::{def_upvar, def_use, def_variant, expr, expr_assign_op}; use syntax::ast::{expr_binary, expr_break, expr_field}; use syntax::ast::{expr_fn_block, expr_index, expr_method_call, expr_path}; use syntax::ast::{def_prim_ty, def_region, def_self, def_ty, def_ty_param}; -use syntax::ast::{def_upvar, def_use, def_variant, quot, eq}; +use syntax::ast::{def_upvar, def_use, def_variant, div, eq}; use syntax::ast::{expr, expr_again, expr_assign_op}; use syntax::ast::{expr_index, expr_loop}; use syntax::ast::{expr_path, expr_struct, expr_unary, fn_decl}; @@ -4901,9 +4901,9 @@ pub impl Resolver { self.add_fixed_trait_for_expr(expr.id, self.lang_items.mul_trait()); } - expr_binary(quot, _, _) | expr_assign_op(quot, _, _) => { + expr_binary(div, _, _) | expr_assign_op(div, _, _) => { self.add_fixed_trait_for_expr(expr.id, - self.lang_items.quot_trait()); + self.lang_items.div_trait()); } expr_binary(rem, _, _) | expr_assign_op(rem, _, _) => { self.add_fixed_trait_for_expr(expr.id, diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs index efa10dfc2aa34..262196ffffd5c 100644 --- a/src/librustc/middle/trans/base.rs +++ b/src/librustc/middle/trans/base.rs @@ -777,10 +777,10 @@ pub fn cast_shift_rhs(op: ast::binop, } } -pub fn fail_if_zero(cx: block, span: span, quotrem: ast::binop, +pub fn fail_if_zero(cx: block, span: span, divrem: ast::binop, rhs: ValueRef, rhs_t: ty::t) -> block { - let text = if quotrem == ast::quot { - @~"attempted quotient with a divisor of zero" + let text = if divrem == ast::div { + @~"attempted to divide by zero" } else { @~"attempted remainder with a divisor of zero" }; diff --git a/src/librustc/middle/trans/consts.rs b/src/librustc/middle/trans/consts.rs index 25f34b8eaa9d1..c6c5561854c0d 100644 --- a/src/librustc/middle/trans/consts.rs +++ b/src/librustc/middle/trans/consts.rs @@ -270,7 +270,7 @@ fn const_expr_unadjusted(cx: @CrateContext, e: @ast::expr) -> ValueRef { if is_float { llvm::LLVMConstFMul(te1, te2) } else { llvm::LLVMConstMul(te1, te2) } } - ast::quot => { + ast::div => { if is_float { llvm::LLVMConstFDiv(te1, te2) } else if signed { llvm::LLVMConstSDiv(te1, te2) } else { llvm::LLVMConstUDiv(te1, te2) } diff --git a/src/librustc/middle/trans/expr.rs b/src/librustc/middle/trans/expr.rs index f83562add3169..ae510ae6d114f 100644 --- a/src/librustc/middle/trans/expr.rs +++ b/src/librustc/middle/trans/expr.rs @@ -1435,7 +1435,7 @@ fn trans_eager_binop(bcx: block, if is_float { FMul(bcx, lhs, rhs) } else { Mul(bcx, lhs, rhs) } } - ast::quot => { + ast::div => { if is_float { FDiv(bcx, lhs, rhs) } else { diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index c7fb1e94adf4c..4280cd4000d81 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -4134,7 +4134,7 @@ pub fn is_binopable(_cx: ctxt, ty: t, op: ast::binop) -> bool { ast::add => opcat_add, ast::subtract => opcat_sub, ast::mul => opcat_mult, - ast::quot => opcat_mult, + ast::div => opcat_mult, ast::rem => opcat_mult, ast::and => opcat_logic, ast::or => opcat_logic, diff --git a/src/libstd/num/bigint.rs b/src/libstd/num/bigint.rs index e010340b94d8e..fa9d6318cc947 100644 --- a/src/libstd/num/bigint.rs +++ b/src/libstd/num/bigint.rs @@ -293,10 +293,10 @@ impl Mul for BigUint { } } -impl Quot for BigUint { +impl Div for BigUint { #[inline(always)] - fn quot(&self, other: &BigUint) -> BigUint { - let (q, _) = self.quot_rem(other); + fn div(&self, other: &BigUint) -> BigUint { + let (q, _) = self.div_rem(other); return q; } } @@ -304,7 +304,7 @@ impl Quot for BigUint { impl Rem for BigUint { #[inline(always)] fn rem(&self, other: &BigUint) -> BigUint { - let (_, r) = self.quot_rem(other); + let (_, r) = self.div_rem(other); return r; } } @@ -316,19 +316,24 @@ impl Neg for BigUint { impl Integer for BigUint { #[inline(always)] - fn div(&self, other: &BigUint) -> BigUint { - let (d, _) = self.div_mod(other); + fn div_rem(&self, other: &BigUint) -> (BigUint, BigUint) { + self.div_mod_floor(other) + } + + #[inline(always)] + fn div_floor(&self, other: &BigUint) -> BigUint { + let (d, _) = self.div_mod_floor(other); return d; } #[inline(always)] - fn modulo(&self, other: &BigUint) -> BigUint { - let (_, m) = self.div_mod(other); + fn mod_floor(&self, other: &BigUint) -> BigUint { + let (_, m) = self.div_mod_floor(other); return m; } #[inline(always)] - fn div_mod(&self, other: &BigUint) -> (BigUint, BigUint) { + fn div_mod_floor(&self, other: &BigUint) -> (BigUint, BigUint) { if other.is_zero() { fail!() } if self.is_zero() { return (Zero::zero(), Zero::zero()); } if *other == One::one() { return (copy *self, Zero::zero()); } @@ -346,11 +351,11 @@ impl Integer for BigUint { shift += 1; } assert!(shift < BigDigit::bits); - let (d, m) = div_mod_inner(self << shift, other << shift); + let (d, m) = div_mod_floor_inner(self << shift, other << shift); return (d, m >> shift); #[inline(always)] - fn div_mod_inner(a: BigUint, b: BigUint) -> (BigUint, BigUint) { + fn div_mod_floor_inner(a: BigUint, b: BigUint) -> (BigUint, BigUint) { let mut m = a; let mut d = Zero::zero::(); let mut n = 1; @@ -409,11 +414,6 @@ impl Integer for BigUint { } } - #[inline(always)] - fn quot_rem(&self, other: &BigUint) -> (BigUint, BigUint) { - self.div_mod(other) - } - /** * Calculates the Greatest Common Divisor (GCD) of the number and `other` * @@ -485,7 +485,7 @@ impl ToStrRadix for BigUint { let mut result = ~[]; let mut m = n; while m > divider { - let (d, m0) = m.div_mod(÷r); + let (d, m0) = m.div_mod_floor(÷r); result += [m0.to_uint() as BigDigit]; m = d; } @@ -894,10 +894,10 @@ impl Mul for BigInt { } } -impl Quot for BigInt { +impl Div for BigInt { #[inline(always)] - fn quot(&self, other: &BigInt) -> BigInt { - let (q, _) = self.quot_rem(other); + fn div(&self, other: &BigInt) -> BigInt { + let (q, _) = self.div_rem(other); return q; } } @@ -905,7 +905,7 @@ impl Quot for BigInt { impl Rem for BigInt { #[inline(always)] fn rem(&self, other: &BigInt) -> BigInt { - let (_, r) = self.quot_rem(other); + let (_, r) = self.div_rem(other); return r; } } @@ -919,21 +919,36 @@ impl Neg for BigInt { impl Integer for BigInt { #[inline(always)] - fn div(&self, other: &BigInt) -> BigInt { - let (d, _) = self.div_mod(other); + fn div_rem(&self, other: &BigInt) -> (BigInt, BigInt) { + // r.sign == self.sign + let (d_ui, r_ui) = self.data.div_mod_floor(&other.data); + let d = BigInt::from_biguint(Plus, d_ui); + let r = BigInt::from_biguint(Plus, r_ui); + match (self.sign, other.sign) { + (_, Zero) => fail!(), + (Plus, Plus) | (Zero, Plus) => ( d, r), + (Plus, Minus) | (Zero, Minus) => (-d, r), + (Minus, Plus) => (-d, -r), + (Minus, Minus) => ( d, -r) + } + } + + #[inline(always)] + fn div_floor(&self, other: &BigInt) -> BigInt { + let (d, _) = self.div_mod_floor(other); return d; } #[inline(always)] - fn modulo(&self, other: &BigInt) -> BigInt { - let (_, m) = self.div_mod(other); + fn mod_floor(&self, other: &BigInt) -> BigInt { + let (_, m) = self.div_mod_floor(other); return m; } #[inline(always)] - fn div_mod(&self, other: &BigInt) -> (BigInt, BigInt) { + fn div_mod_floor(&self, other: &BigInt) -> (BigInt, BigInt) { // m.sign == other.sign - let (d_ui, m_ui) = self.data.quot_rem(&other.data); + let (d_ui, m_ui) = self.data.div_rem(&other.data); let d = BigInt::from_biguint(Plus, d_ui), m = BigInt::from_biguint(Plus, m_ui); match (self.sign, other.sign) { @@ -953,21 +968,6 @@ impl Integer for BigInt { } } - #[inline(always)] - fn quot_rem(&self, other: &BigInt) -> (BigInt, BigInt) { - // r.sign == self.sign - let (q_ui, r_ui) = self.data.div_mod(&other.data); - let q = BigInt::from_biguint(Plus, q_ui); - let r = BigInt::from_biguint(Plus, r_ui); - match (self.sign, other.sign) { - (_, Zero) => fail!(), - (Plus, Plus) | (Zero, Plus) => ( q, r), - (Plus, Minus) | (Zero, Minus) => (-q, r), - (Minus, Plus) => (-q, -r), - (Minus, Minus) => ( q, -r) - } - } - /** * Calculates the Greatest Common Divisor (GCD) of the number and `other` * @@ -1100,8 +1100,6 @@ pub impl BigInt { #[cfg(test)] mod biguint_tests { - - use core::*; use core::num::{IntConvertible, Zero, One, FromStrRadix}; use core::cmp::{Less, Equal, Greater}; use super::{BigUint, BigDigit}; @@ -1347,7 +1345,7 @@ mod biguint_tests { (&[ 0, 0, 1], &[ 0, 0, 0, 1], &[0, 0, 0, 0, 0, 1]) ]; - static quot_rem_quadruples: &'static [(&'static [BigDigit], + static div_rem_quadruples: &'static [(&'static [BigDigit], &'static [BigDigit], &'static [BigDigit], &'static [BigDigit])] @@ -1371,7 +1369,7 @@ mod biguint_tests { assert!(b * a == c); } - for quot_rem_quadruples.each |elm| { + for div_rem_quadruples.each |elm| { let (aVec, bVec, cVec, dVec) = *elm; let a = BigUint::from_slice(aVec); let b = BigUint::from_slice(bVec); @@ -1384,7 +1382,7 @@ mod biguint_tests { } #[test] - fn test_quot_rem() { + fn test_div_rem() { for mul_triples.each |elm| { let (aVec, bVec, cVec) = *elm; let a = BigUint::from_slice(aVec); @@ -1392,21 +1390,21 @@ mod biguint_tests { let c = BigUint::from_slice(cVec); if !a.is_zero() { - assert!(c.quot_rem(&a) == (copy b, Zero::zero())); + assert!(c.div_rem(&a) == (copy b, Zero::zero())); } if !b.is_zero() { - assert!(c.quot_rem(&b) == (copy a, Zero::zero())); + assert!(c.div_rem(&b) == (copy a, Zero::zero())); } } - for quot_rem_quadruples.each |elm| { + for div_rem_quadruples.each |elm| { let (aVec, bVec, cVec, dVec) = *elm; let a = BigUint::from_slice(aVec); let b = BigUint::from_slice(bVec); let c = BigUint::from_slice(cVec); let d = BigUint::from_slice(dVec); - if !b.is_zero() { assert!(a.quot_rem(&b) == (c, d)); } + if !b.is_zero() { assert!(a.div_rem(&b) == (c, d)); } } } @@ -1558,7 +1556,6 @@ mod biguint_tests { #[cfg(test)] mod bigint_tests { use super::{BigInt, BigUint, BigDigit, Sign, Minus, Zero, Plus}; - use core::*; use core::cmp::{Less, Equal, Greater}; use core::num::{IntConvertible, Zero, One, FromStrRadix}; @@ -1750,10 +1747,10 @@ mod bigint_tests { (&[ 0, 0, 1], &[ 0, 0, 0, 1], &[0, 0, 0, 0, 0, 1]) ]; - static quot_rem_quadruples: &'static [(&'static [BigDigit], - &'static [BigDigit], - &'static [BigDigit], - &'static [BigDigit])] + static div_rem_quadruples: &'static [(&'static [BigDigit], + &'static [BigDigit], + &'static [BigDigit], + &'static [BigDigit])] = &[ (&[ 1], &[ 2], &[], &[1]), (&[ 1, 1], &[ 2], &[-1/2+1], &[1]), @@ -1777,7 +1774,7 @@ mod bigint_tests { assert!((-b) * a == -c); } - for quot_rem_quadruples.each |elm| { + for div_rem_quadruples.each |elm| { let (aVec, bVec, cVec, dVec) = *elm; let a = BigInt::from_slice(Plus, aVec); let b = BigInt::from_slice(Plus, bVec); @@ -1790,9 +1787,9 @@ mod bigint_tests { } #[test] - fn test_div_mod() { + fn test_div_mod_floor() { fn check_sub(a: &BigInt, b: &BigInt, ans_d: &BigInt, ans_m: &BigInt) { - let (d, m) = a.div_mod(b); + let (d, m) = a.div_mod_floor(b); if !m.is_zero() { assert!(m.sign == b.sign); } @@ -1826,7 +1823,7 @@ mod bigint_tests { if !b.is_zero() { check(&c, &b, &a, &Zero::zero()); } } - for quot_rem_quadruples.each |elm| { + for div_rem_quadruples.each |elm| { let (aVec, bVec, cVec, dVec) = *elm; let a = BigInt::from_slice(Plus, aVec); let b = BigInt::from_slice(Plus, bVec); @@ -1841,9 +1838,9 @@ mod bigint_tests { #[test] - fn test_quot_rem() { + fn test_div_rem() { fn check_sub(a: &BigInt, b: &BigInt, ans_q: &BigInt, ans_r: &BigInt) { - let (q, r) = a.quot_rem(b); + let (q, r) = a.div_rem(b); if !r.is_zero() { assert!(r.sign == a.sign); } @@ -1869,7 +1866,7 @@ mod bigint_tests { if !b.is_zero() { check(&c, &b, &a, &Zero::zero()); } } - for quot_rem_quadruples.each |elm| { + for div_rem_quadruples.each |elm| { let (aVec, bVec, cVec, dVec) = *elm; let a = BigInt::from_slice(Plus, aVec); let b = BigInt::from_slice(Plus, bVec); diff --git a/src/libstd/num/complex.rs b/src/libstd/num/complex.rs index 02393b15cca0f..41d2b4a101cd5 100644 --- a/src/libstd/num/complex.rs +++ b/src/libstd/num/complex.rs @@ -102,9 +102,9 @@ impl Mul, Cmplx> for Cmplx { // (a + i b) / (c + i d) == [(a + i b) * (c - i d)] / (c*c + d*d) // == [(a*c + b*d) / (c*c + d*d)] + i [(b*c - a*d) / (c*c + d*d)] -impl Quot, Cmplx> for Cmplx { +impl Div, Cmplx> for Cmplx { #[inline] - fn quot(&self, other: &Cmplx) -> Cmplx { + fn div(&self, other: &Cmplx) -> Cmplx { let norm_sqr = other.norm_sqr(); Cmplx::new((self.re*other.re + self.im*other.im) / norm_sqr, (self.im*other.re - self.re*other.im) / norm_sqr) @@ -275,7 +275,7 @@ mod test { } } #[test] - fn test_quot() { + fn test_div() { assert_eq!(_neg1_1i / _0_1i, _1_1i); for all_consts.each |&c| { if c != Zero::zero() { diff --git a/src/libstd/num/rational.rs b/src/libstd/num/rational.rs index a7c170c1cd6da..9b92b7241b990 100644 --- a/src/libstd/num/rational.rs +++ b/src/libstd/num/rational.rs @@ -143,9 +143,9 @@ impl // (a/b) / (c/d) = (a*d)/(b*c) impl - Quot,Ratio> for Ratio { + Div,Ratio> for Ratio { #[inline] - fn quot(&self, rhs: &Ratio) -> Ratio { + fn div(&self, rhs: &Ratio) -> Ratio { Ratio::new(self.numer * rhs.denom, self.denom * rhs.numer) } } @@ -395,7 +395,7 @@ mod test { } #[test] - fn test_quot() { + fn test_div() { assert_eq!(_1 / _1_2, _2); assert_eq!(_3_2 / _1_2, _1 + _2); assert_eq!(_1 / _neg1_2, _neg1_2 + _neg1_2 + _neg1_2 + _neg1_2); @@ -424,7 +424,7 @@ mod test { } #[test] #[should_fail] - fn test_quot_0() { + fn test_div_0() { let _a = _1 / _0; } } diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index ba6fe1cda4f31..5690502c811fe 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -389,7 +389,7 @@ pub enum binop { add, subtract, mul, - quot, + div, rem, and, or, diff --git a/src/libsyntax/ast_util.rs b/src/libsyntax/ast_util.rs index 148b713a4f58f..0ffeb684dc051 100644 --- a/src/libsyntax/ast_util.rs +++ b/src/libsyntax/ast_util.rs @@ -73,7 +73,7 @@ pub fn binop_to_str(op: binop) -> ~str { add => return ~"+", subtract => return ~"-", mul => return ~"*", - quot => return ~"/", + div => return ~"/", rem => return ~"%", and => return ~"&&", or => return ~"||", @@ -96,7 +96,7 @@ pub fn binop_to_method_name(op: binop) -> Option<~str> { add => return Some(~"add"), subtract => return Some(~"sub"), mul => return Some(~"mul"), - quot => return Some(~"quot"), + div => return Some(~"div"), rem => return Some(~"rem"), bitxor => return Some(~"bitxor"), bitand => return Some(~"bitand"), @@ -341,7 +341,7 @@ pub fn is_self(d: ast::def) -> bool { /// Maps a binary operator to its precedence pub fn operator_prec(op: ast::binop) -> uint { match op { - mul | quot | rem => 12u, + mul | div | rem => 12u, // 'as' sits between here with 11 add | subtract => 10u, shl | shr => 9u, diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 50bdfb2f55726..42c6fad646364 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -19,7 +19,7 @@ use ast::{_mod, add, arg, arm, attribute, bind_by_ref, bind_infer}; use ast::{bind_by_copy, bitand, bitor, bitxor, blk}; use ast::{blk_check_mode, box}; use ast::{crate, crate_cfg, decl, decl_item}; -use ast::{decl_local, default_blk, deref, quot, enum_def}; +use ast::{decl_local, default_blk, deref, div, enum_def}; use ast::{expr, expr_, expr_addr_of, expr_match, expr_again}; use ast::{expr_assign, expr_assign_op, expr_binary, expr_block}; use ast::{expr_break, expr_call, expr_cast, expr_copy, expr_do_body}; @@ -1836,7 +1836,7 @@ pub impl Parser { token::PLUS => aop = add, token::MINUS => aop = subtract, token::STAR => aop = mul, - token::SLASH => aop = quot, + token::SLASH => aop = div, token::PERCENT => aop = rem, token::CARET => aop = bitxor, token::AND => aop = bitand, diff --git a/src/libsyntax/parse/token.rs b/src/libsyntax/parse/token.rs index 0327a3b80da87..9426e9abab3b4 100644 --- a/src/libsyntax/parse/token.rs +++ b/src/libsyntax/parse/token.rs @@ -371,7 +371,7 @@ impl<'self> to_bytes::IterBytes for StringRef<'self> { pub fn token_to_binop(tok: Token) -> Option { match tok { BINOP(STAR) => Some(ast::mul), - BINOP(SLASH) => Some(ast::quot), + BINOP(SLASH) => Some(ast::div), BINOP(PERCENT) => Some(ast::rem), BINOP(PLUS) => Some(ast::add), BINOP(MINUS) => Some(ast::subtract), diff --git a/src/test/compile-fail/eval-enum.rs b/src/test/compile-fail/eval-enum.rs index 0123341957903..f92dad961d134 100644 --- a/src/test/compile-fail/eval-enum.rs +++ b/src/test/compile-fail/eval-enum.rs @@ -1,5 +1,5 @@ enum test { - quot_zero = 1/0, //~ERROR expected constant: attempted quotient with a divisor of zero + div_zero = 1/0, //~ERROR expected constant: attempted to divide by zero rem_zero = 1%0 //~ERROR expected constant: attempted remainder with a divisor of zero } diff --git a/src/test/run-fail/divide-by-zero.rs b/src/test/run-fail/divide-by-zero.rs index d4f3828ea7174..9c996807ad866 100644 --- a/src/test/run-fail/divide-by-zero.rs +++ b/src/test/run-fail/divide-by-zero.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// error-pattern:attempted quotient with a divisor of zero +// error-pattern:attempted to divide by zero fn main() { let y = 0; let z = 1 / y; From dca88701a311c7dffec1ee5e990df9570647ba03 Mon Sep 17 00:00:00 2001 From: Young-il Choi Date: Wed, 1 May 2013 18:49:19 +0900 Subject: [PATCH 092/410] mk: install-runtime-target added to install.mk (pushing shared library to android target) --- mk/install.mk | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/mk/install.mk b/mk/install.mk index a84f527a165b4..693589980ce03 100644 --- a/mk/install.mk +++ b/mk/install.mk @@ -154,3 +154,66 @@ uninstall: done $(Q)rm -Rf $(PHL)/rustc $(Q)rm -f $(PREFIX_ROOT)/share/man/man1/rustc.1 + +# target platform specific variables +# for arm-linux-androidabi +define DEF_ADB_STATUS +CFG_ADB_DEVICE=$(1) +endef + +$(foreach target,$(CFG_TARGET_TRIPLES), \ + $(if $(findstring $(target),"arm-linux-androideabi"), \ + $(if $(findstring adb,$(shell which adb)), \ + $(if $(findstring device,$(shell adb devices 2>/dev/null | grep -E '^[A-Za-z0-9]+[[:blank:]]+device')), \ + $(info install: install-runtime-target for arm-linux-androideabi enabled \ + $(info install: android device attached) \ + $(eval $(call DEF_ADB_STATUS, true))), \ + $(info install: install-runtime-target for arm-linux-androideabi disabled \ + $(info install: android device not attached) \ + $(eval $(call DEF_ADB_STATUS, false))) \ + ), \ + $(info install: install-runtime-target for arm-linux-androideabi disabled \ + $(info install: adb not found) \ + $(eval $(call DEF_ADB_STATUS, false))) \ + ), \ + ) \ +) + +ifeq ($(CFG_ADB_DEVICE),true) + +ifdef VERBOSE + ADB = adb $(1) + ADB_PUSH = adb push $(1) $(2) + ADB_SHELL = adb shell $(1) $(2) +else + ADB = $(Q)$(call E, adb $(1)) && adb $(1) 1>/dev/null 2>/dev/null + ADB_PUSH = $(Q)$(call E, adb push $(1)) && adb push $(1) $(2) 1>/dev/null 2>/dev/null + ADB_SHELL = $(Q)$(call E, adb shell $(1) $(2)) && adb shell $(1) $(2) 1>/dev/null 2>/dev/null +endif + +define INSTALL_RUNTIME_TARGET_N +install-runtime-target-$(1)-host-$(2): $$(TSREQ$$(ISTAGE)_T_$(1)_H_$(2)) $$(SREQ$$(ISTAGE)_T_$(1)_H_$(2)) + $(Q)$(call ADB_PUSH,$$(TL$(1)$(2))/$$(CFG_RUNTIME_$(1)),/system/lib) + $(Q)$(call ADB_PUSH,$$(TL$(1)$(2))/$$(CORELIB_GLOB_$(1)),/system/lib) + $(Q)$(call ADB_PUSH,$$(TL$(1)$(2))/$$(STDLIB_GLOB_$(1)),/system/lib) +endef + +define INSTALL_RUNTIME_TARGET_CLEANUP_N +install-runtime-target-$(1)-cleanup: + $(Q)$(call ADB,remount) + $(Q)$(call ADB_SHELL,rm,/system/lib/$(CFG_RUNTIME_$(1))) + $(Q)$(call ADB_SHELL,rm,/system/lib/$(CORELIB_GLOB_$(1))) + $(Q)$(call ADB_SHELL,rm,/system/lib/$(STDLIB_GLOB_$(1))) +endef + +$(eval $(call INSTALL_RUNTIME_TARGET_N,arm-linux-androideabi,$(CFG_BUILD_TRIPLE))) +$(eval $(call INSTALL_RUNTIME_TARGET_CLEANUP_N,arm-linux-androideabi)) + +install-runtime-target: \ + install-runtime-target-arm-linux-androideabi-cleanup \ + install-runtime-target-arm-linux-androideabi-host-$(CFG_BUILD_TRIPLE) + +else +install-runtime-target: + @echo +endif From 57c126e9bbcb4d02c40787afc46f5865874220d7 Mon Sep 17 00:00:00 2001 From: Young-il Choi Date: Wed, 1 May 2013 18:50:23 +0900 Subject: [PATCH 093/410] mk: test.mk expanded to ARM test automation --- mk/tests.mk | 113 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 108 insertions(+), 5 deletions(-) diff --git a/mk/tests.mk b/mk/tests.mk index f96b7325f60d4..9b01c4af80fdd 100644 --- a/mk/tests.mk +++ b/mk/tests.mk @@ -92,6 +92,48 @@ endef $(foreach target,$(CFG_TARGET_TRIPLES), \ $(eval $(call DEF_TARGET_COMMANDS,$(target)))) +# Target specific variables +# for arm-linux-androidabi +define DEF_RUNNABLE_STATUS +CFG_RUNNABLE_$(1)=$(2) +endef + +$(foreach target,$(CFG_TARGET_TRIPLES), \ + $(if $(findstring $(target),$(CFG_BUILD_TRIPLE)), \ + $(info check: $(target) test set is runnable \ + $(eval $(call DEF_RUNNABLE_STATUS,$(target),true))), \ + $(if $(findstring $(target),"arm-linux-androideabi"), \ + $(if $(findstring adb,$(shell which adb)), \ + $(if $(findstring device,$(shell adb devices 2>/dev/null | grep -E '^[A-Za-z0-9]+[[:blank:]]+device')), \ + $(info check: $(target) test set is runnable \ + $(info check: adb device attached) \ + $(eval $(call DEF_RUNNABLE_STATUS,$(target),true))), \ + $(info check: $(target) test set is not runnable \ + $(info check: adb device not attached) \ + $(eval $(call DEF_RUNNABLE_STATUS,$(target),false))) \ + ), \ + $(info check: $(target) test set is not runnable \ + $(info check: adb not found) \ + $(eval $(call DEF_RUNNABLE_STATUS,$(target),false))) \ + ), \ + $(info check: $(target) test set is not runnable \ + $(eval $(call DEF_RUNNABLE_STATUS,$(target),false)) \ + ) \ + ) \ + ) \ +) + +ifeq ($(CFG_RUNNABLE_arm-linux-androideabi),true) +CFG_ADB_DEVICE=true +CFG_ADB_PATH := $(shell which adb) +CFG_ADB_TEST_DIR=/system/tmp + +$(info check: device $(CFG_ADB_TEST_DIR) \ + $(shell $(CFG_ADB_PATH) shell mkdir $(CFG_ADB_TEST_DIR) 1>/dev/null) \ + $(shell $(CFG_ADB_PATH) shell rm $(CFG_ADB_TEST_DIR)/*-arm-linux-androideabi 1>/dev/null) \ + $(shell $(CFG_ADB_PATH) shell rm $(CFG_ADB_TEST_DIR)/*.so 1>/dev/null) \ + ) +endif ###################################################################### # Main test targets @@ -319,11 +361,52 @@ $$(call TEST_OK_FILE,$(1),$(2),$(3),$(4)): \ && touch $$@ endef +define DEF_TEST_CRATE_RULES_arm-linux-androideabi +check-stage$(1)-T-$(2)-H-$(3)-$(4)-exec: $$(call TEST_OK_FILE,$(1),$(2),$(3),$(4)) + +$$(call TEST_OK_FILE,$(1),$(2),$(3),$(4)): \ + $(3)/test/$(4)test.stage$(1)-$(2)$$(X_$(2)) + @$$(call E, run: $$< via adb) + @$(CFG_ADB_PATH) push $$< $(CFG_ADB_TEST_DIR) + @$(CFG_ADB_PATH) shell $(CFG_ADB_TEST_DIR)/`echo $$< | sed 's/.*\///'` \ + --logfile $(CFG_ADB_TEST_DIR)/check-stage$(1)-T-$(2)-H-$(3)-$(4).log > \ + tmp/check-stage$(1)-T-$(2)-H-$(3)-$(4).tmp + @cat tmp/check-stage$(1)-T-$(2)-H-$(3)-$(4).tmp + @touch tmp/check-stage$(1)-T-$(2)-H-$(3)-$(4).log + @$(CFG_ADB_PATH) pull $(CFG_ADB_TEST_DIR)/check-stage$(1)-T-$(2)-H-$(3)-$(4).log tmp/ + @$(CFG_ADB_PATH) shell rm $(CFG_ADB_TEST_DIR)/check-stage$(1)-T-$(2)-H-$(3)-$(4).log + @if grep -q "result: ok" tmp/check-stage$(1)-T-$(2)-H-$(3)-$(4).tmp; \ + then \ + rm tmp/check-stage$(1)-T-$(2)-H-$(3)-$(4).tmp; \ + touch $$@; \ + else \ + rm tmp/check-stage$(1)-T-$(2)-H-$(3)-$(4).tmp; \ + exit 101; \ + fi +endef + +define DEF_TEST_CRATE_RULES_null +check-stage$(1)-T-$(2)-H-$(3)-$(4)-exec: $$(call TEST_OK_FILE,$(1),$(2),$(3),$(4)) + +$$(call TEST_OK_FILE,$(1),$(2),$(3),$(4)): \ + $(3)/test/$(4)test.stage$(1)-$(2)$$(X_$(2)) + @$$(call E, run: skipped $$< ) + @touch $$@ +endef + $(foreach host,$(CFG_HOST_TRIPLES), \ $(foreach target,$(CFG_TARGET_TRIPLES), \ $(foreach stage,$(STAGES), \ $(foreach crate, $(TEST_CRATES), \ - $(eval $(call DEF_TEST_CRATE_RULES,$(stage),$(target),$(host),$(crate))))))) + $(if $(findstring $(target),$(CFG_BUILD_TRIPLE)), \ + $(eval $(call DEF_TEST_CRATE_RULES,$(stage),$(target),$(host),$(crate))), \ + $(if $(findstring $(target),"arm-linux-androideabi"), \ + $(if $(findstring $(CFG_RUNNABLE_arm-linux-androideabi),"true"), \ + $(eval $(call DEF_TEST_CRATE_RULES_arm-linux-androideabi,$(stage),$(target),$(host),$(crate))), \ + $(eval $(call DEF_TEST_CRATE_RULES_null,$(stage),$(target),$(host),$(crate))) \ + ), \ + $(eval $(call DEF_TEST_CRATE_RULES_null,$(stage),$(target),$(host),$(crate))) \ + )))))) ###################################################################### @@ -414,15 +497,35 @@ TEST_SREQ$(1)_T_$(2)_H_$(3) = \ # Rules for the cfail/rfail/rpass/bench/perf test runner +ifeq ($(CFG_ADB_DEVICE),true) + CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3) := \ --compile-lib-path $$(HLIB$(1)_H_$(3)) \ --run-lib-path $$(TLIB$(1)_T_$(2)_H_$(3)) \ --rustc-path $$(HBIN$(1)_H_$(3))/rustc$$(X_$(3)) \ --aux-base $$(S)src/test/auxiliary/ \ --stage-id stage$(1)-$(2) \ + --host $(3) \ + --target $(2) \ + --adb-path=$(CFG_ADB_PATH) \ --rustcflags "$(RUSTC_FLAGS_$(2)) $$(CFG_RUSTC_FLAGS) --target=$(2)" \ $$(CTEST_TESTARGS) +else + +CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3) := \ + --compile-lib-path $$(HLIB$(1)_H_$(3)) \ + --run-lib-path $$(TLIB$(1)_T_$(2)_H_$(3)) \ + --rustc-path $$(HBIN$(1)_H_$(3))/rustc$$(X_$(3)) \ + --aux-base $$(S)src/test/auxiliary/ \ + --stage-id stage$(1)-$(2) \ + --host $(3) \ + --target $(2) \ + --rustcflags "$(RUSTC_FLAGS_$(2)) $$(CFG_RUSTC_FLAGS) --target=$(2)" \ + $$(CTEST_TESTARGS) + +endif + CTEST_DEPS_rpass_$(1)-T-$(2)-H-$(3) = $$(RPASS_TESTS) CTEST_DEPS_rpass_full_$(1)-T-$(2)-H-$(3) = $$(RPASS_FULL_TESTS) $$(TLIBRUSTC_DEFAULT$(1)_T_$(2)_H_$(3)) CTEST_DEPS_rfail_$(1)-T-$(2)-H-$(3) = $$(RFAIL_TESTS) @@ -454,7 +557,7 @@ ifeq ($$(CTEST_DISABLE_$(4)),) $$(call TEST_OK_FILE,$(1),$(2),$(3),$(4)): \ $$(TEST_SREQ$(1)_T_$(2)_H_$(3)) \ $$(CTEST_DEPS_$(4)_$(1)-T-$(2)-H-$(3)) - @$$(call E, run $(4): $$<) + @$$(call E, run $(4) [$(2)]: $$<) $$(Q)$$(call CFG_RUN_CTEST_$(2),$(1),$$<,$(3)) \ $$(CTEST_ARGS$(1)-T-$(2)-H-$(3)-$(4)) \ --logfile $$(call TEST_LOG_FILE,$(1),$(2),$(3),$(4)) \ @@ -465,7 +568,7 @@ else $$(call TEST_OK_FILE,$(1),$(2),$(3),$(4)): \ $$(TEST_SREQ$(1)_T_$(2)_H_$(3)) \ $$(CTEST_DEPS_$(4)_$(1)-T-$(2)-H-$(3)) - @$$(call E, run $(4): $$<) + @$$(call E, run $(4) [$(2)]: $$<) @$$(call E, warning: tests disabled: $$(CTEST_DISABLE_$(4))) touch $$@ @@ -506,7 +609,7 @@ check-stage$(1)-T-$(2)-H-$(3)-$(4)-exec: $$(call TEST_OK_FILE,$(1),$(2),$(3),$(4 $$(call TEST_OK_FILE,$(1),$(2),$(3),$(4)): \ $$(TEST_SREQ$(1)_T_$(2)_H_$(3)) \ $$(PRETTY_DEPS_$(4)) - @$$(call E, run pretty-rpass: $$<) + @$$(call E, run pretty-rpass [$(2)]: $$<) $$(Q)$$(call CFG_RUN_CTEST_$(2),$(1),$$<,$(3)) \ $$(PRETTY_ARGS$(1)-T-$(2)-H-$(3)-$(4)) \ --logfile $$(call TEST_LOG_FILE,$(1),$(2),$(3),$(4)) \ @@ -533,7 +636,7 @@ check-stage$(1)-T-$(2)-H-$(3)-doc-$(4)-exec: $$(call TEST_OK_FILE,$(1),$(2),$(3) $$(call TEST_OK_FILE,$(1),$(2),$(3),doc-$(4)): \ $$(TEST_SREQ$(1)_T_$(2)_H_$(3)) \ doc-$(4)-extract$(3) - @$$(call E, run doc-$(4): $$<) + @$$(call E, run doc-$(4) [$(2)]: $$<) $$(Q)$$(call CFG_RUN_CTEST_$(2),$(1),$$<,$(3)) \ $$(DOC_TEST_ARGS$(1)-T-$(2)-H-$(3)-doc-$(4)) \ --logfile $$(call TEST_LOG_FILE,$(1),$(2),$(3),doc-$(4)) \ From f7ef71d491fe432eab3c3c9d2ee80a6678ebb952 Mon Sep 17 00:00:00 2001 From: Young-il Choi Date: Wed, 1 May 2013 18:52:08 +0900 Subject: [PATCH 094/410] compiletest: expanded to ARM test automation --- src/compiletest/common.rs | 12 ++++ src/compiletest/compiletest.rc | 26 ++++++- src/compiletest/runtest.rs | 127 +++++++++++++++++++++++++++++++-- 3 files changed, 158 insertions(+), 7 deletions(-) diff --git a/src/compiletest/common.rs b/src/compiletest/common.rs index e515ef302f658..73322fe1bdeac 100644 --- a/src/compiletest/common.rs +++ b/src/compiletest/common.rs @@ -64,6 +64,18 @@ pub struct config { // Run tests using the new runtime newrt: bool, + // Host System to be built + host: ~str, + + // Target System to be executed + target: ~str, + + // Extra parameter to run arm-linux-androideabi + adb_path: ~str, + + // check if can be run or not + flag_runnable: bool, + // Explain what's going on verbose: bool diff --git a/src/compiletest/compiletest.rc b/src/compiletest/compiletest.rc index 4392ce7ba2891..70e09fc7bab7e 100644 --- a/src/compiletest/compiletest.rc +++ b/src/compiletest/compiletest.rc @@ -60,7 +60,11 @@ pub fn parse_config(args: ~[~str]) -> config { getopts::optflag(~"verbose"), getopts::optopt(~"logfile"), getopts::optflag(~"jit"), - getopts::optflag(~"newrt")]; + getopts::optflag(~"newrt"), + getopts::optopt(~"host"), + getopts::optopt(~"target"), + getopts::optopt(~"adb-path") + ]; assert!(!args.is_empty()); let args_ = vec::tail(args); @@ -93,6 +97,22 @@ pub fn parse_config(args: ~[~str]) -> config { rustcflags: getopts::opt_maybe_str(matches, ~"rustcflags"), jit: getopts::opt_present(matches, ~"jit"), newrt: getopts::opt_present(matches, ~"newrt"), + host: opt_str(getopts::opt_maybe_str(matches, ~"host")), + target: opt_str(getopts::opt_maybe_str(matches, ~"target")), + adb_path: opt_str(getopts::opt_maybe_str(matches, ~"adb-path")), + flag_runnable: + if (getopts::opt_maybe_str(matches, ~"host") == + getopts::opt_maybe_str(matches, ~"target")) { true } + else { + match getopts::opt_maybe_str(matches, ~"target") { + Some(~"arm-linux-androideabi") => { + if (getopts::opt_maybe_str(matches, ~"adb-path") != + option::None) { true } + else { false } + } + _ => { false } + } + }, verbose: getopts::opt_present(matches, ~"verbose") } } @@ -113,6 +133,10 @@ pub fn log_config(config: config) { logv(c, fmt!("rustcflags: %s", opt_str(config.rustcflags))); logv(c, fmt!("jit: %b", config.jit)); logv(c, fmt!("newrt: %b", config.newrt)); + logv(c, fmt!("host: %s", config.host)); + logv(c, fmt!("target: %s", config.target)); + logv(c, fmt!("adb_path: %s", config.adb_path)); + logv(c, fmt!("flag_runnable: %b", config.flag_runnable)); logv(c, fmt!("verbose: %b", config.verbose)); logv(c, fmt!("\n")); } diff --git a/src/compiletest/runtest.rs b/src/compiletest/runtest.rs index fef4cabf7fd6d..4b07835163c00 100644 --- a/src/compiletest/runtest.rs +++ b/src/compiletest/runtest.rs @@ -77,8 +77,10 @@ fn run_rfail_test(config: config, props: TestProps, testfile: &Path) { fatal_ProcRes(~"run-fail test isn't valgrind-clean!", ProcRes); } - check_correct_failure_status(ProcRes); - check_error_patterns(props, testfile, ProcRes); + if (config.flag_runnable) { + check_correct_failure_status(ProcRes); + check_error_patterns(props, testfile, ProcRes); + } } fn check_correct_failure_status(ProcRes: ProcRes) { @@ -483,10 +485,96 @@ fn exec_compiled_test(config: config, props: TestProps, props.exec_env }; - compose_and_run(config, testfile, - make_run_args(config, props, testfile), - env, - config.run_lib_path, None) + if (config.host == config.target) { + compose_and_run(config, testfile, + make_run_args(config, props, testfile), + env, + config.run_lib_path, None) + } + else { + let args = make_run_args(config, props, testfile); + let cmdline = make_cmdline(~"", args.prog, args.args); + + let defaultRes = match config.mode { + mode_run_fail => ProcRes {status: 101, stdout: ~"", stderr: ~"", cmdline: cmdline}, + _ => ProcRes {status: 0, stdout: ~"", stderr: ~"", cmdline: cmdline} + }; + + match (config.target, config.flag_runnable) { + + (~"arm-linux-androideabi", true) => { + + // get bare program string + let mut tvec = ~[]; + let tstr = args.prog; + for str::each_split_char(tstr, '/') |ts| { tvec.push(ts.to_owned()) } + let prog_short = tvec.pop(); + + // copy to target + let copy_result = procsrv::run(~"", config.adb_path, + ~[~"push", args.prog, ~"/system/tmp"], + ~[(~"",~"")], Some(~"")); + + if config.verbose { + io::stdout().write_str(fmt!("push (%s) %s %s %s", + config.target, args.prog, + copy_result.out, copy_result.err)); + } + + // execute program + logv(config, fmt!("executing (%s) %s", config.target, cmdline)); + + // NOTE : adb shell dose not forward to each stdout and stderr of internal result + // but forward to stdout only + let mut newargs_out = ~[]; + let mut newargs_err = ~[]; + let subargs = args.args; + newargs_out.push(~"shell"); + newargs_err.push(~"shell"); + + let mut newcmd_out = ~""; + let mut newcmd_err = ~""; + newcmd_out.push_str(~"LD_LIBRARY_PATH=/system/tmp; "); + newcmd_err.push_str(~"LD_LIBRARY_PATH=/system/tmp; "); + newcmd_out.push_str(~"export LD_LIBRARY_PATH; "); + newcmd_err.push_str(~"export LD_LIBRARY_PATH; "); + newcmd_out.push_str(~"cd /system/tmp; "); + newcmd_err.push_str(~"cd /system/tmp; "); + newcmd_out.push_str("./"); + newcmd_err.push_str("./"); + newcmd_out.push_str(prog_short); + newcmd_err.push_str(prog_short); + + for vec::each(subargs) |tv| { + newcmd_out.push_str(" "); + newcmd_err.push_str(" "); + newcmd_out.push_str(tv.to_owned()); + newcmd_err.push_str(tv.to_owned()); + } + + newcmd_out.push_str(" 2>/dev/null"); + newcmd_err.push_str(" 1>/dev/null"); + + newargs_out.push(newcmd_out); + newargs_err.push(newcmd_err); + + let exe_result_out = procsrv::run(~"", config.adb_path, + newargs_out, ~[(~"",~"")], Some(~"")); + let exe_result_err = procsrv::run(~"", config.adb_path, + newargs_err, ~[(~"",~"")], Some(~"")); + + dump_output(config, testfile, exe_result_out.out, exe_result_err.out); + + match exe_result_err.out { + ~"" => ProcRes {status: exe_result_out.status, stdout: exe_result_out.out, + stderr: exe_result_err.out, cmdline: cmdline }, + _ => ProcRes {status: 101, stdout: exe_result_out.out, + stderr: exe_result_err.out, cmdline: cmdline } + } + } + _=> defaultRes + } + } } fn compose_and_run_compiler( @@ -516,6 +604,33 @@ fn compose_and_run_compiler( abs_ab.to_str()), auxres); } + if (config.host != config.target) + { + match (config.target, config.flag_runnable) { + + (~"arm-linux-androideabi", true) => { + + let tstr = aux_output_dir_name(config, testfile).to_str(); + + for os::list_dir_path(&Path(tstr)).each |file| { + + if (file.filetype() == Some(~".so")) { + + let copy_result = procsrv::run(~"", config.adb_path, + ~[~"push", file.to_str(), ~"/system/tmp"], + ~[(~"",~"")], Some(~"")); + + if config.verbose { + io::stdout().write_str(fmt!("push (%s) %s %s %s", + config.target, file.to_str(), + copy_result.out, copy_result.err)); + } + } + } + } + _=> () + } + } } compose_and_run(config, testfile, args, ~[], From 9d6544667e09259e0a4ccab72e0bd1687102f2c8 Mon Sep 17 00:00:00 2001 From: Young-il Choi Date: Wed, 1 May 2013 19:18:57 +0900 Subject: [PATCH 095/410] compiletest: fix to remove trailing whitespace --- src/compiletest/runtest.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiletest/runtest.rs b/src/compiletest/runtest.rs index 4b07835163c00..ad128f4529c66 100644 --- a/src/compiletest/runtest.rs +++ b/src/compiletest/runtest.rs @@ -524,7 +524,7 @@ fn exec_compiled_test(config: config, props: TestProps, // execute program logv(config, fmt!("executing (%s) %s", config.target, cmdline)); - // NOTE : adb shell dose not forward to each stdout and stderr of internal result + // NOTE : adb shell dose not forward to each stdout and stderr of internal result // but forward to stdout only let mut newargs_out = ~[]; let mut newargs_err = ~[]; From 5ab33a297521c2d5885422bc1744f6d9dab8f3f7 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Wed, 1 May 2013 08:49:48 -0400 Subject: [PATCH 096/410] correct incorrect handling of overloaded operators, exposing various other bits of rot --- src/libcore/ptr.rs | 16 +-- .../middle/borrowck/gather_loans/mod.rs | 63 +++--------- src/librustc/middle/typeck/check/regionck.rs | 9 +- src/libstd/arc.rs | 8 +- src/libstd/rope.rs | 28 +++--- src/libstd/sort.rs | 97 ++++++++++--------- src/libstd/std.rc | 7 ++ .../borrowck-loan-in-overloaded-op.rs | 10 +- src/test/run-pass/auto-ref-slice-plus-ref.rs | 8 +- 9 files changed, 117 insertions(+), 129 deletions(-) diff --git a/src/libcore/ptr.rs b/src/libcore/ptr.rs index 86b36834bbd6e..85e46a0feff6b 100644 --- a/src/libcore/ptr.rs +++ b/src/libcore/ptr.rs @@ -296,34 +296,34 @@ impl Ord for *const T { // Equality for region pointers #[cfg(notest)] -impl<'self,T:Eq> Eq for &'self const T { +impl<'self,T:Eq> Eq for &'self T { #[inline(always)] - fn eq(&self, other: & &'self const T) -> bool { + fn eq(&self, other: & &'self T) -> bool { return *(*self) == *(*other); } #[inline(always)] - fn ne(&self, other: & &'self const T) -> bool { + fn ne(&self, other: & &'self T) -> bool { return *(*self) != *(*other); } } // Comparison for region pointers #[cfg(notest)] -impl<'self,T:Ord> Ord for &'self const T { +impl<'self,T:Ord> Ord for &'self T { #[inline(always)] - fn lt(&self, other: & &'self const T) -> bool { + fn lt(&self, other: & &'self T) -> bool { *(*self) < *(*other) } #[inline(always)] - fn le(&self, other: & &'self const T) -> bool { + fn le(&self, other: & &'self T) -> bool { *(*self) <= *(*other) } #[inline(always)] - fn ge(&self, other: & &'self const T) -> bool { + fn ge(&self, other: & &'self T) -> bool { *(*self) >= *(*other) } #[inline(always)] - fn gt(&self, other: & &'self const T) -> bool { + fn gt(&self, other: & &'self T) -> bool { *(*self) > *(*other) } } diff --git a/src/librustc/middle/borrowck/gather_loans/mod.rs b/src/librustc/middle/borrowck/gather_loans/mod.rs index 8a986a22d4c48..ecdf260bffffa 100644 --- a/src/librustc/middle/borrowck/gather_loans/mod.rs +++ b/src/librustc/middle/borrowck/gather_loans/mod.rs @@ -68,8 +68,7 @@ struct GatherLoanCtxt { id_range: id_range, all_loans: @mut ~[Loan], item_ub: ast::node_id, - repeating_ids: ~[ast::node_id], - ignore_adjustments: HashSet + repeating_ids: ~[ast::node_id] } pub fn gather_loans(bccx: @BorrowckCtxt, @@ -79,8 +78,7 @@ pub fn gather_loans(bccx: @BorrowckCtxt, id_range: id_range::max(), all_loans: @mut ~[], item_ub: body.node.id, - repeating_ids: ~[body.node.id], - ignore_adjustments: HashSet::new() + repeating_ids: ~[body.node.id] }; let v = visit::mk_vt(@visit::Visitor {visit_expr: gather_loans_in_expr, visit_block: gather_loans_in_block, @@ -147,13 +145,8 @@ fn gather_loans_in_expr(ex: @ast::expr, self.id_range.add(ex.callee_id); // If this expression is borrowed, have to ensure it remains valid: - { - let this = &mut *self; // FIXME(#5074) - if !this.ignore_adjustments.contains(&ex.id) { - for tcx.adjustments.find(&ex.id).each |&adjustments| { - this.guarantee_adjustments(ex, *adjustments); - } - } + for tcx.adjustments.find(&ex.id).each |&adjustments| { + self.guarantee_adjustments(ex, *adjustments); } // Special checks for various kinds of expressions: @@ -178,46 +171,20 @@ fn gather_loans_in_expr(ex: @ast::expr, visit::visit_expr(ex, self, vt); } - ast::expr_index(rcvr, _) | - ast::expr_binary(_, rcvr, _) | - ast::expr_unary(_, rcvr) | - ast::expr_assign_op(_, rcvr, _) + ast::expr_index(_, arg) | + ast::expr_binary(_, _, arg) if self.bccx.method_map.contains_key(&ex.id) => { - // Receivers in method calls are always passed by ref. - // - // Here, in an overloaded operator, the call is this expression, - // and hence the scope of the borrow is this call. - // - // FIX? / NOT REALLY---technically we should check the other - // argument and consider the argument mode. But how annoying. - // And this problem when goes away when argument modes are - // phased out. So I elect to leave this undone. - let scope_r = ty::re_scope(ex.id); - let rcvr_cmt = self.bccx.cat_expr(rcvr); - self.guarantee_valid(rcvr.id, rcvr.span, rcvr_cmt, m_imm, scope_r); - - // FIXME (#3387): Total hack: Ignore adjustments for the left-hand - // side. Their regions will be inferred to be too large. - self.ignore_adjustments.insert(rcvr.id); - - visit::visit_expr(ex, self, vt); + // Arguments in method calls are always passed by ref. + // + // Currently these do not use adjustments, so we have to + // hardcode this check here (note that the receiver DOES use + // adjustments). + let scope_r = ty::re_scope(ex.id); + let arg_cmt = self.bccx.cat_expr(arg); + self.guarantee_valid(arg.id, arg.span, arg_cmt, m_imm, scope_r); + visit::visit_expr(ex, self, vt); } - // FIXME--#3387 - // ast::expr_binary(_, lhs, rhs) => { - // // Universal comparison operators like ==, >=, etc - // // take their arguments by reference. - // let lhs_ty = ty::expr_ty(self.tcx(), lhs); - // if !ty::type_is_scalar(lhs_ty) { - // let scope_r = ty::re_scope(ex.id); - // let lhs_cmt = self.bccx.cat_expr(lhs); - // self.guarantee_valid(lhs_cmt, m_imm, scope_r); - // let rhs_cmt = self.bccx.cat_expr(rhs); - // self.guarantee_valid(rhs_cmt, m_imm, scope_r); - // } - // visit::visit_expr(ex, self, vt); - // } - // see explanation attached to the `root_ub` field: ast::expr_while(cond, ref body) => { // during the condition, can only root for the condition diff --git a/src/librustc/middle/typeck/check/regionck.rs b/src/librustc/middle/typeck/check/regionck.rs index fd19738b32110..1b0a22752a592 100644 --- a/src/librustc/middle/typeck/check/regionck.rs +++ b/src/librustc/middle/typeck/check/regionck.rs @@ -236,9 +236,16 @@ fn visit_expr(expr: @ast::expr, rcx: @mut Rcx, v: rvt) { // overloaded. See #3511. let tcx = rcx.fcx.tcx(); match expr.node { + // You'd think that x += y where `+=` is overloaded would be a + // cleanup scope. You'd be... kind of right. In fact the + // handling of `+=` and friends in trans for overloaded + // operators is a hopeless mess and I can't figure out how to + // represent it. - ndm + // + // ast::expr_assign_op(*) | + ast::expr_index(*) | ast::expr_binary(*) | - ast::expr_assign_op(*) | ast::expr_unary(*) if has_method_map => { tcx.region_maps.record_cleanup_scope(expr.id); } diff --git a/src/libstd/arc.rs b/src/libstd/arc.rs index 027bf93b4814f..98d7a01b928b0 100644 --- a/src/libstd/arc.rs +++ b/src/libstd/arc.rs @@ -598,8 +598,8 @@ mod tests { let arc = ~RWARC(1); let arc2 = (*arc).clone(); do task::try || { - do arc2.write_downgrade |write_mode| { - do (&write_mode).write |one| { + do arc2.write_downgrade |mut write_mode| { + do write_mode.write |one| { assert!(*one == 2); } } @@ -733,8 +733,8 @@ mod tests { } // Downgrader (us) - do arc.write_downgrade |write_mode| { - do (&write_mode).write_cond |state, cond| { + do arc.write_downgrade |mut write_mode| { + do write_mode.write_cond |state, cond| { wc1.send(()); // send to another writer who will wake us up while *state == 0 { cond.wait(); diff --git a/src/libstd/rope.rs b/src/libstd/rope.rs index 1292d2a858559..93364f8a319ee 100644 --- a/src/libstd/rope.rs +++ b/src/libstd/rope.rs @@ -1256,22 +1256,24 @@ mod tests { match (r) { node::Empty => return ~"", node::Content(x) => { - let str = @mut ~""; - fn aux(str: @mut ~str, node: @node::Node) { + let mut str = ~""; + fn aux(str: &mut ~str, node: @node::Node) { match (*node) { - node::Leaf(x) => { - *str += str::slice( - *x.content, x.byte_offset, - x.byte_offset + x.byte_len).to_owned(); - } - node::Concat(ref x) => { - aux(str, x.left); - aux(str, x.right); - } + node::Leaf(x) => { + str::push_str( + str, + str::slice( + *x.content, x.byte_offset, + x.byte_offset + x.byte_len)); + } + node::Concat(ref x) => { + aux(str, x.left); + aux(str, x.right); + } } } - aux(str, x); - return *str + aux(&mut str, x); + return str } } } diff --git a/src/libstd/sort.rs b/src/libstd/sort.rs index f3d30ecd5cdf1..119b47c904e8e 100644 --- a/src/libstd/sort.rs +++ b/src/libstd/sort.rs @@ -22,12 +22,12 @@ type Le<'self, T> = &'self fn(v1: &T, v2: &T) -> bool; * Has worst case O(n log n) performance, best case O(n), but * is not space efficient. This is a stable sort. */ -pub fn merge_sort(v: &const [T], le: Le) -> ~[T] { +pub fn merge_sort(v: &[T], le: Le) -> ~[T] { type Slice = (uint, uint); return merge_sort_(v, (0u, len(v)), le); - fn merge_sort_(v: &const [T], slice: Slice, le: Le) + fn merge_sort_(v: &[T], slice: Slice, le: Le) -> ~[T] { let begin = slice.first(); let end = slice.second(); @@ -179,7 +179,7 @@ fn qsort3(arr: &mut [T], left: int, right: int) { */ pub fn quick_sort3(arr: &mut [T]) { if arr.len() <= 1 { return; } - let len = arr.len() - 1; // FIXME(#5074) nested calls + let len = arr.len(); // FIXME(#5074) nested calls qsort3(arr, 0, (len - 1) as int); } @@ -263,7 +263,7 @@ fn binarysort(array: &mut [T], start: uint) { assert!(left == right); let n = start-left; - copy_vec(array, left+1, array, left, n); + shift_vec(array, left+1, left, n); array[left] = pivot; start += 1; } @@ -309,8 +309,8 @@ fn count_run_ascending(array: &mut [T]) -> uint { return run; } -fn gallop_left(key: &const T, - array: &const [T], +fn gallop_left(key: &T, + array: &[T], hint: uint) -> uint { let size = array.len(); @@ -360,8 +360,8 @@ fn gallop_left(key: &const T, return ofs; } -fn gallop_right(key: &const T, - array: &const [T], +fn gallop_right(key: &T, + array: &[T], hint: uint) -> uint { let size = array.len(); @@ -457,15 +457,15 @@ impl MergeState { } let k = { // constrain lifetime of slice below - let slice = vec::mut_slice(array, b1, b1+l1); - gallop_right(&const array[b2], slice, 0) + let slice = vec::slice(array, b1, b1+l1); + gallop_right(&array[b2], slice, 0) }; b1 += k; l1 -= k; if l1 != 0 { let l2 = { // constrain lifetime of slice below - let slice = vec::mut_slice(array, b2, b2+l2); - gallop_left(&const array[b1+l1-1],slice,l2-1) + let slice = vec::slice(array, b2, b2+l2); + gallop_left(&array[b1+l1-1],slice,l2-1) }; if l2 > 0 { if l1 <= l2 { @@ -497,11 +497,11 @@ impl MergeState { dest += 1; c2 += 1; len2 -= 1; if len2 == 0 { - copy_vec(array, dest, tmp, 0, len1); + copy_vec(array, dest, tmp.slice(0, len1)); return; } if len1 == 1 { - copy_vec(array, dest, array, c2, len2); + shift_vec(array, dest, c2, len2); array[dest+len2] <-> tmp[c1]; return; } @@ -539,10 +539,12 @@ impl MergeState { loop { assert!(len1 > 1 && len2 != 0); - let tmp_view = vec::const_slice(tmp, c1, c1+len1); - count1 = gallop_right(&const array[c2], tmp_view, 0); + count1 = { + let tmp_view = vec::slice(tmp, c1, c1+len1); + gallop_right(&array[c2], tmp_view, 0) + }; if count1 != 0 { - copy_vec(array, dest, tmp, c1, count1); + copy_vec(array, dest, tmp.slice(c1, c1+count1)); dest += count1; c1 += count1; len1 -= count1; if len1 <= 1 { break_outer = true; break; } } @@ -550,10 +552,12 @@ impl MergeState { dest += 1; c2 += 1; len2 -= 1; if len2 == 0 { break_outer = true; break; } - let tmp_view = vec::const_slice(array, c2, c2+len2); - count2 = gallop_left(&const tmp[c1], tmp_view, 0); + count2 = { + let tmp_view = vec::slice(array, c2, c2+len2); + gallop_left(&tmp[c1], tmp_view, 0) + }; if count2 != 0 { - copy_vec(array, dest, array, c2, count2); + shift_vec(array, dest, c2, count2); dest += count2; c2 += count2; len2 -= count2; if len2 == 0 { break_outer = true; break; } } @@ -573,14 +577,14 @@ impl MergeState { if len1 == 1 { assert!(len2 > 0); - copy_vec(array, dest, array, c2, len2); + shift_vec(array, dest, c2, len2); array[dest+len2] <-> tmp[c1]; } else if len1 == 0 { fail!(~"Comparison violates its contract!"); } else { assert!(len2 == 0); assert!(len1 > 1); - copy_vec(array, dest, tmp, c1, len1); + copy_vec(array, dest, tmp.slice(c1, c1+len1)); } } @@ -603,13 +607,13 @@ impl MergeState { dest -= 1; c1 -= 1; len1 -= 1; if len1 == 0 { - copy_vec(array, dest-(len2-1), tmp, 0, len2); + copy_vec(array, dest-(len2-1), tmp.slice(0, len2)); return; } if len2 == 1 { dest -= len1; c1 -= len1; - copy_vec(array, dest+1, array, c1+1, len1); + shift_vec(array, dest+1, c1+1, len1); array[dest] <-> tmp[c2]; return; } @@ -650,12 +654,12 @@ impl MergeState { { // constrain scope of tmp_view: let tmp_view = vec::mut_slice (array, base1, base1+len1); count1 = len1 - gallop_right( - &const tmp[c2], tmp_view, len1-1); + &tmp[c2], tmp_view, len1-1); } if count1 != 0 { dest -= count1; c1 -= count1; len1 -= count1; - copy_vec(array, dest+1, array, c1+1, count1); + shift_vec(array, dest+1, c1+1, count1); if len1 == 0 { break_outer = true; break; } } @@ -666,14 +670,14 @@ impl MergeState { let count2; { // constrain scope of tmp_view let tmp_view = vec::mut_slice(tmp, 0, len2); - count2 = len2 - gallop_left(&const array[c1], + count2 = len2 - gallop_left(&array[c1], tmp_view, len2-1); } if count2 != 0 { dest -= count2; c2 -= count2; len2 -= count2; - copy_vec(array, dest+1, tmp, c2+1, count2); + copy_vec(array, dest+1, tmp.slice(c2+1, c2+1+count2)); if len2 <= 1 { break_outer = true; break; } } array[dest] <-> array[c1]; @@ -695,14 +699,14 @@ impl MergeState { assert!(len1 > 0); dest -= len1; c1 -= len1; - copy_vec(array, dest+1, array, c1+1, len1); + shift_vec(array, dest+1, c1+1, len1); array[dest] <-> tmp[c2]; } else if len2 == 0 { fail!(~"Comparison violates its contract!"); } else { assert!(len1 == 0); assert!(len2 != 0); - copy_vec(array, dest-(len2-1), tmp, 0, len2); + copy_vec(array, dest-(len2-1), tmp.slice(0, len2)); } } @@ -738,21 +742,25 @@ impl MergeState { #[inline(always)] fn copy_vec(dest: &mut [T], s1: uint, - from: &const [T], - s2: uint, - len: uint) { - assert!(s1+len <= dest.len() && s2+len <= from.len()); - - let mut slice = ~[]; - for uint::range(s2, s2+len) |i| { - slice.push(from[i]); - } + from: &[T]) { + assert!(s1+from.len() <= dest.len()); - for slice.eachi |i, v| { + for from.eachi |i, v| { dest[s1+i] = *v; } } +#[inline(always)] +fn shift_vec(dest: &mut [T], + s1: uint, + s2: uint, + len: uint) { + assert!(s1+len <= dest.len()); + + let tmp = dest.slice(s2, s2+len).to_vec(); + copy_vec(dest, s1, tmp); +} + #[cfg(test)] mod test_qsort3 { use sort::*; @@ -764,8 +772,7 @@ mod test_qsort3 { quick_sort3::(v1); let mut i = 0; while i < len { - // debug!(v2[i]); - assert!((v2[i] == v1[i])); + assert_eq!(v2[i], v1[i]); i += 1; } } @@ -1036,7 +1043,7 @@ mod big_tests { tabulate_managed(low, high); } - fn multiplyVec(arr: &const [T], num: uint) -> ~[T] { + fn multiplyVec(arr: &[T], num: uint) -> ~[T] { let size = arr.len(); let res = do vec::from_fn(num) |i| { arr[i % size] @@ -1052,7 +1059,7 @@ mod big_tests { } fn tabulate_unique(lo: uint, hi: uint) { - fn isSorted(arr: &const [T]) { + fn isSorted(arr: &[T]) { for uint::range(0, arr.len()-1) |i| { if arr[i] > arr[i+1] { fail!(~"Array not sorted"); @@ -1123,7 +1130,7 @@ mod big_tests { } fn tabulate_managed(lo: uint, hi: uint) { - fn isSorted(arr: &const [@T]) { + fn isSorted(arr: &[@T]) { for uint::range(0, arr.len()-1) |i| { if arr[i] > arr[i+1] { fail!(~"Array not sorted"); diff --git a/src/libstd/std.rc b/src/libstd/std.rc index d9af8b111bba7..9d1ddb8ec544b 100644 --- a/src/libstd/std.rc +++ b/src/libstd/std.rc @@ -69,7 +69,14 @@ pub mod list; pub mod priority_queue; pub mod rope; pub mod smallintmap; + +#[cfg(stage0)] +#[path="sort_stage0.rs"] +pub mod sort; + +#[cfg(not(stage0))] pub mod sort; + pub mod dlist; pub mod treemap; diff --git a/src/test/compile-fail/borrowck-loan-in-overloaded-op.rs b/src/test/compile-fail/borrowck-loan-in-overloaded-op.rs index 482d1b6b8b617..0361213af2226 100644 --- a/src/test/compile-fail/borrowck-loan-in-overloaded-op.rs +++ b/src/test/compile-fail/borrowck-loan-in-overloaded-op.rs @@ -8,18 +8,16 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// xfail-test #3387 - struct foo(~uint); impl Add for foo { - fn add(f: &foo) -> foo { - foo(~(**self + **(*f))) + fn add(&self, f: &foo) -> foo { + foo(~(***self + **(*f))) } } fn main() { let x = foo(~3); - let _y = x + x; - //~^ ERROR moving out of immutable local variable prohibited due to outstanding loan + let _y = x + {x}; // the `{x}` forces a move to occur + //~^ ERROR cannot move out of `x` } diff --git a/src/test/run-pass/auto-ref-slice-plus-ref.rs b/src/test/run-pass/auto-ref-slice-plus-ref.rs index 1dc56132875d4..07629651e5605 100644 --- a/src/test/run-pass/auto-ref-slice-plus-ref.rs +++ b/src/test/run-pass/auto-ref-slice-plus-ref.rs @@ -17,13 +17,13 @@ trait MyIter { } impl<'self> MyIter for &'self [int] { - fn test_imm(&self) { assert!(self[0] == 1) } - fn test_const(&const self) { assert!(self[0] == 1) } + fn test_imm(&self) { assert_eq!(self[0], 1) } + fn test_const(&const self) { assert_eq!(self[0], 1) } } impl<'self> MyIter for &'self str { - fn test_imm(&self) { assert!(*self == "test") } - fn test_const(&const self) { assert!(*self == "test") } + fn test_imm(&self) { assert_eq!(*self, "test") } + fn test_const(&const self) { assert_eq!(self[0], 't') } } pub fn main() { From d96c65afc88b159b9ae76136f8d2695574e273f0 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Wed, 1 May 2013 08:50:04 -0400 Subject: [PATCH 097/410] keep old sort for stage0 --- src/libstd/sort_stage0.rs | 1239 +++++++++++++++++++++++++++++++++++++ 1 file changed, 1239 insertions(+) create mode 100644 src/libstd/sort_stage0.rs diff --git a/src/libstd/sort_stage0.rs b/src/libstd/sort_stage0.rs new file mode 100644 index 0000000000000..f3d30ecd5cdf1 --- /dev/null +++ b/src/libstd/sort_stage0.rs @@ -0,0 +1,1239 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! Sorting methods + +use core::cmp::{Eq, Ord}; +use core::vec::len; +use core::vec; + +type Le<'self, T> = &'self fn(v1: &T, v2: &T) -> bool; + +/** + * Merge sort. Returns a new vector containing the sorted list. + * + * Has worst case O(n log n) performance, best case O(n), but + * is not space efficient. This is a stable sort. + */ +pub fn merge_sort(v: &const [T], le: Le) -> ~[T] { + type Slice = (uint, uint); + + return merge_sort_(v, (0u, len(v)), le); + + fn merge_sort_(v: &const [T], slice: Slice, le: Le) + -> ~[T] { + let begin = slice.first(); + let end = slice.second(); + + let v_len = end - begin; + if v_len == 0 { return ~[]; } + if v_len == 1 { return ~[v[begin]]; } + + let mid = v_len / 2 + begin; + let a = (begin, mid); + let b = (mid, end); + return merge(le, merge_sort_(v, a, le), merge_sort_(v, b, le)); + } + + fn merge(le: Le, a: &[T], b: &[T]) -> ~[T] { + let mut rs = vec::with_capacity(len(a) + len(b)); + let a_len = len(a); + let mut a_ix = 0; + let b_len = len(b); + let mut b_ix = 0; + while a_ix < a_len && b_ix < b_len { + if le(&a[a_ix], &b[b_ix]) { + rs.push(a[a_ix]); + a_ix += 1; + } else { rs.push(b[b_ix]); b_ix += 1; } + } + rs.push_all(vec::slice(a, a_ix, a_len)); + rs.push_all(vec::slice(b, b_ix, b_len)); + rs + } +} + +#[cfg(stage0)] +fn part(arr: &mut [T], left: uint, + right: uint, pivot: uint, compare_func: Le) -> uint { + arr[pivot] <-> arr[right]; + let mut storage_index: uint = left; + let mut i: uint = left; + while i < right { + let a: &mut T = &mut arr[i]; + let b: &mut T = &mut arr[right]; + if compare_func(a, b) { + arr[i] <-> arr[storage_index]; + storage_index += 1; + } + i += 1; + } + arr[storage_index] <-> arr[right]; + return storage_index; +} + +#[cfg(not(stage0))] +fn part(arr: &mut [T], left: uint, + right: uint, pivot: uint, compare_func: Le) -> uint { + arr[pivot] <-> arr[right]; + let mut storage_index: uint = left; + let mut i: uint = left; + while i < right { + if compare_func(&arr[i], &arr[right]) { + arr[i] <-> arr[storage_index]; + storage_index += 1; + } + i += 1; + } + arr[storage_index] <-> arr[right]; + return storage_index; +} + +fn qsort(arr: &mut [T], left: uint, + right: uint, compare_func: Le) { + if right > left { + let pivot = (left + right) / 2u; + let new_pivot = part::(arr, left, right, pivot, compare_func); + if new_pivot != 0u { + // Need to do this check before recursing due to overflow + qsort::(arr, left, new_pivot - 1u, compare_func); + } + qsort::(arr, new_pivot + 1u, right, compare_func); + } +} + +/** + * Quicksort. Sorts a mut vector in place. + * + * Has worst case O(n^2) performance, average case O(n log n). + * This is an unstable sort. + */ +pub fn quick_sort(arr: &mut [T], compare_func: Le) { + if len::(arr) == 0u { return; } + qsort::(arr, 0u, len::(arr) - 1u, compare_func); +} + +fn qsort3(arr: &mut [T], left: int, right: int) { + if right <= left { return; } + let v: T = arr[right]; + let mut i: int = left - 1; + let mut j: int = right; + let mut p: int = i; + let mut q: int = j; + loop { + i += 1; + while arr[i] < v { i += 1; } + j -= 1; + while v < arr[j] { + if j == left { break; } + j -= 1; + } + if i >= j { break; } + arr[i] <-> arr[j]; + if arr[i] == v { + p += 1; + arr[p] <-> arr[i]; + } + if v == arr[j] { + q -= 1; + arr[j] <-> arr[q]; + } + } + arr[i] <-> arr[right]; + j = i - 1; + i += 1; + let mut k: int = left; + while k < p { + arr[k] <-> arr[j]; + k += 1; + j -= 1; + if k == len::(arr) as int { break; } + } + k = right - 1; + while k > q { + arr[i] <-> arr[k]; + k -= 1; + i += 1; + if k == 0 { break; } + } + qsort3::(arr, left, j); + qsort3::(arr, i, right); +} + +/** + * Fancy quicksort. Sorts a mut vector in place. + * + * Based on algorithm presented by ~[Sedgewick and Bentley] + * (http://www.cs.princeton.edu/~rs/talks/QuicksortIsOptimal.pdf). + * According to these slides this is the algorithm of choice for + * 'randomly ordered keys, abstract compare' & 'small number of key values'. + * + * This is an unstable sort. + */ +pub fn quick_sort3(arr: &mut [T]) { + if arr.len() <= 1 { return; } + let len = arr.len() - 1; // FIXME(#5074) nested calls + qsort3(arr, 0, (len - 1) as int); +} + +pub trait Sort { + fn qsort(self); +} + +impl<'self, T:Copy + Ord + Eq> Sort for &'self mut [T] { + fn qsort(self) { quick_sort3(self); } +} + +static MIN_MERGE: uint = 64; +static MIN_GALLOP: uint = 7; +static INITIAL_TMP_STORAGE: uint = 128; + +pub fn tim_sort(array: &mut [T]) { + let size = array.len(); + if size < 2 { + return; + } + + if size < MIN_MERGE { + let init_run_len = count_run_ascending(array); + binarysort(array, init_run_len); + return; + } + + let mut ms = MergeState(); + let min_run = min_run_length(size); + + let mut idx = 0; + let mut remaining = size; + loop { + let run_len: uint = { + // This scope contains the slice `arr` here: + let arr = vec::mut_slice(array, idx, size); + let mut run_len: uint = count_run_ascending(arr); + + if run_len < min_run { + let force = if remaining <= min_run {remaining} else {min_run}; + let slice = vec::mut_slice(arr, 0, force); + binarysort(slice, run_len); + run_len = force; + } + + run_len + }; + + ms.push_run(idx, run_len); + ms.merge_collapse(array); + + idx += run_len; + remaining -= run_len; + if remaining == 0 { break; } + } + + ms.merge_force_collapse(array); +} + +fn binarysort(array: &mut [T], start: uint) { + let size = array.len(); + let mut start = start; + assert!(start <= size); + + if start == 0 { start += 1; } + + while start < size { + let pivot = array[start]; + let mut left = 0; + let mut right = start; + assert!(left <= right); + + while left < right { + let mid = (left + right) >> 1; + if pivot < array[mid] { + right = mid; + } else { + left = mid+1; + } + } + assert!(left == right); + let n = start-left; + + copy_vec(array, left+1, array, left, n); + array[left] = pivot; + start += 1; + } +} + +// Reverse the order of elements in a slice, in place +fn reverse_slice(v: &mut [T], start: uint, end:uint) { + let mut i = start; + while i < end / 2 { + v[i] <-> v[end - i - 1]; + i += 1; + } +} + +fn min_run_length(n: uint) -> uint { + let mut n = n; + let mut r = 0; // becomes 1 if any 1 bits are shifted off + + while n >= MIN_MERGE { + r |= n & 1; + n >>= 1; + } + return n + r; +} + +fn count_run_ascending(array: &mut [T]) -> uint { + let size = array.len(); + assert!(size > 0); + if size == 1 { return 1; } + + let mut run = 2; + if array[1] < array[0] { + while run < size && array[run] < array[run-1] { + run += 1; + } + reverse_slice(array, 0, run); + } else { + while run < size && array[run] >= array[run-1] { + run += 1; + } + } + + return run; +} + +fn gallop_left(key: &const T, + array: &const [T], + hint: uint) + -> uint { + let size = array.len(); + assert!(size != 0 && hint < size); + + let mut last_ofs = 0; + let mut ofs = 1; + + if *key > array[hint] { + // Gallop right until array[hint+last_ofs] < key <= array[hint+ofs] + let max_ofs = size - hint; + while ofs < max_ofs && *key > array[hint+ofs] { + last_ofs = ofs; + ofs = (ofs << 1) + 1; + if ofs < last_ofs { ofs = max_ofs; } // uint overflow guard + } + if ofs > max_ofs { ofs = max_ofs; } + + last_ofs += hint; + ofs += hint; + } else { + let max_ofs = hint + 1; + while ofs < max_ofs && *key <= array[hint-ofs] { + last_ofs = ofs; + ofs = (ofs << 1) + 1; + if ofs < last_ofs { ofs = max_ofs; } // uint overflow guard + } + + if ofs > max_ofs { ofs = max_ofs; } + + let tmp = last_ofs; + last_ofs = hint - ofs; + ofs = hint - tmp; + } + assert!((last_ofs < ofs || last_ofs+1 < ofs+1) && ofs <= size); + + last_ofs += 1; + while last_ofs < ofs { + let m = last_ofs + ((ofs - last_ofs) >> 1); + if *key > array[m] { + last_ofs = m+1; + } else { + ofs = m; + } + } + assert!(last_ofs == ofs); + return ofs; +} + +fn gallop_right(key: &const T, + array: &const [T], + hint: uint) + -> uint { + let size = array.len(); + assert!(size != 0 && hint < size); + + let mut last_ofs = 0; + let mut ofs = 1; + + if *key >= array[hint] { + // Gallop right until array[hint+last_ofs] <= key < array[hint+ofs] + let max_ofs = size - hint; + while ofs < max_ofs && *key >= array[hint+ofs] { + last_ofs = ofs; + ofs = (ofs << 1) + 1; + if ofs < last_ofs { ofs = max_ofs; } + } + if ofs > max_ofs { ofs = max_ofs; } + + last_ofs += hint; + ofs += hint; + } else { + // Gallop left until array[hint-ofs] <= key < array[hint-last_ofs] + let max_ofs = hint + 1; + while ofs < max_ofs && *key < array[hint-ofs] { + last_ofs = ofs; + ofs = (ofs << 1) + 1; + if ofs < last_ofs { ofs = max_ofs; } + } + if ofs > max_ofs { ofs = max_ofs; } + + let tmp = last_ofs; + last_ofs = hint - ofs; + ofs = hint - tmp; + } + + assert!((last_ofs < ofs || last_ofs+1 < ofs+1) && ofs <= size); + + last_ofs += 1; + while last_ofs < ofs { + let m = last_ofs + ((ofs - last_ofs) >> 1); + + if *key >= array[m] { + last_ofs = m + 1; + } else { + ofs = m; + } + } + assert!(last_ofs == ofs); + return ofs; +} + +struct RunState { + base: uint, + len: uint, +} + +struct MergeState { + min_gallop: uint, + runs: ~[RunState], +} + +// Fixme (#3853) Move into MergeState +fn MergeState() -> MergeState { + MergeState { + min_gallop: MIN_GALLOP, + runs: ~[], + } +} + +impl MergeState { + fn push_run(&mut self, run_base: uint, run_len: uint) { + let tmp = RunState{base: run_base, len: run_len}; + self.runs.push(tmp); + } + + fn merge_at(&mut self, n: uint, array: &mut [T]) { + let size = self.runs.len(); + assert!(size >= 2); + assert!(n == size-2 || n == size-3); + + let mut b1 = self.runs[n].base; + let mut l1 = self.runs[n].len; + let b2 = self.runs[n+1].base; + let l2 = self.runs[n+1].len; + + assert!(l1 > 0 && l2 > 0); + assert!(b1 + l1 == b2); + + self.runs[n].len = l1 + l2; + if n == size-3 { + self.runs[n+1].base = self.runs[n+2].base; + self.runs[n+1].len = self.runs[n+2].len; + } + + let k = { // constrain lifetime of slice below + let slice = vec::mut_slice(array, b1, b1+l1); + gallop_right(&const array[b2], slice, 0) + }; + b1 += k; + l1 -= k; + if l1 != 0 { + let l2 = { // constrain lifetime of slice below + let slice = vec::mut_slice(array, b2, b2+l2); + gallop_left(&const array[b1+l1-1],slice,l2-1) + }; + if l2 > 0 { + if l1 <= l2 { + self.merge_lo(array, b1, l1, b2, l2); + } else { + self.merge_hi(array, b1, l1, b2, l2); + } + } + } + self.runs.pop(); + } + + fn merge_lo(&mut self, array: &mut [T], base1: uint, len1: uint, + base2: uint, len2: uint) { + assert!(len1 != 0 && len2 != 0 && base1+len1 == base2); + + let mut tmp = ~[]; + for uint::range(base1, base1+len1) |i| { + tmp.push(array[i]); + } + + let mut c1 = 0; + let mut c2 = base2; + let mut dest = base1; + let mut len1 = len1; + let mut len2 = len2; + + array[dest] <-> array[c2]; + dest += 1; c2 += 1; len2 -= 1; + + if len2 == 0 { + copy_vec(array, dest, tmp, 0, len1); + return; + } + if len1 == 1 { + copy_vec(array, dest, array, c2, len2); + array[dest+len2] <-> tmp[c1]; + return; + } + + let mut min_gallop = self.min_gallop; + loop { + let mut count1 = 0; + let mut count2 = 0; + let mut break_outer = false; + + loop { + assert!(len1 > 1 && len2 != 0); + if array[c2] < tmp[c1] { + array[dest] <-> array[c2]; + dest += 1; c2 += 1; len2 -= 1; + count2 += 1; count1 = 0; + if len2 == 0 { + break_outer = true; + } + } else { + array[dest] <-> tmp[c1]; + dest += 1; c1 += 1; len1 -= 1; + count1 += 1; count2 = 0; + if len1 == 1 { + break_outer = true; + } + } + if break_outer || ((count1 | count2) >= min_gallop) { + break; + } + } + if break_outer { break; } + + // Start to gallop + loop { + assert!(len1 > 1 && len2 != 0); + + let tmp_view = vec::const_slice(tmp, c1, c1+len1); + count1 = gallop_right(&const array[c2], tmp_view, 0); + if count1 != 0 { + copy_vec(array, dest, tmp, c1, count1); + dest += count1; c1 += count1; len1 -= count1; + if len1 <= 1 { break_outer = true; break; } + } + array[dest] <-> array[c2]; + dest += 1; c2 += 1; len2 -= 1; + if len2 == 0 { break_outer = true; break; } + + let tmp_view = vec::const_slice(array, c2, c2+len2); + count2 = gallop_left(&const tmp[c1], tmp_view, 0); + if count2 != 0 { + copy_vec(array, dest, array, c2, count2); + dest += count2; c2 += count2; len2 -= count2; + if len2 == 0 { break_outer = true; break; } + } + array[dest] <-> tmp[c1]; + dest += 1; c1 += 1; len1 -= 1; + if len1 == 1 { break_outer = true; break; } + min_gallop -= 1; + if !(count1 >= MIN_GALLOP || count2 >= MIN_GALLOP) { + break; + } + } + if break_outer { break; } + if min_gallop < 0 { min_gallop = 0; } + min_gallop += 2; // Penalize for leaving gallop + } + self.min_gallop = if min_gallop < 1 { 1 } else { min_gallop }; + + if len1 == 1 { + assert!(len2 > 0); + copy_vec(array, dest, array, c2, len2); + array[dest+len2] <-> tmp[c1]; + } else if len1 == 0 { + fail!(~"Comparison violates its contract!"); + } else { + assert!(len2 == 0); + assert!(len1 > 1); + copy_vec(array, dest, tmp, c1, len1); + } + } + + fn merge_hi(&mut self, array: &mut [T], base1: uint, len1: uint, + base2: uint, len2: uint) { + assert!(len1 != 1 && len2 != 0 && base1 + len1 == base2); + + let mut tmp = ~[]; + for uint::range(base2, base2+len2) |i| { + tmp.push(array[i]); + } + + let mut c1 = base1 + len1 - 1; + let mut c2 = len2 - 1; + let mut dest = base2 + len2 - 1; + let mut len1 = len1; + let mut len2 = len2; + + array[dest] <-> array[c1]; + dest -= 1; c1 -= 1; len1 -= 1; + + if len1 == 0 { + copy_vec(array, dest-(len2-1), tmp, 0, len2); + return; + } + if len2 == 1 { + dest -= len1; + c1 -= len1; + copy_vec(array, dest+1, array, c1+1, len1); + array[dest] <-> tmp[c2]; + return; + } + + let mut min_gallop = self.min_gallop; + loop { + let mut count1 = 0; + let mut count2 = 0; + let mut break_outer = false; + + loop { + assert!(len1 != 0 && len2 > 1); + if tmp[c2] < array[c1] { + array[dest] <-> array[c1]; + dest -= 1; c1 -= 1; len1 -= 1; + count1 += 1; count2 = 0; + if len1 == 0 { + break_outer = true; + } + } else { + array[dest] <-> tmp[c2]; + dest -= 1; c2 -= 1; len2 -= 1; + count2 += 1; count1 = 0; + if len2 == 1 { + break_outer = true; + } + } + if break_outer || ((count1 | count2) >= min_gallop) { + break; + } + } + if break_outer { break; } + + // Start to gallop + loop { + assert!(len2 > 1 && len1 != 0); + + { // constrain scope of tmp_view: + let tmp_view = vec::mut_slice (array, base1, base1+len1); + count1 = len1 - gallop_right( + &const tmp[c2], tmp_view, len1-1); + } + + if count1 != 0 { + dest -= count1; c1 -= count1; len1 -= count1; + copy_vec(array, dest+1, array, c1+1, count1); + if len1 == 0 { break_outer = true; break; } + } + + array[dest] <-> tmp[c2]; + dest -= 1; c2 -= 1; len2 -= 1; + if len2 == 1 { break_outer = true; break; } + + let count2; + { // constrain scope of tmp_view + let tmp_view = vec::mut_slice(tmp, 0, len2); + count2 = len2 - gallop_left(&const array[c1], + tmp_view, + len2-1); + } + + if count2 != 0 { + dest -= count2; c2 -= count2; len2 -= count2; + copy_vec(array, dest+1, tmp, c2+1, count2); + if len2 <= 1 { break_outer = true; break; } + } + array[dest] <-> array[c1]; + dest -= 1; c1 -= 1; len1 -= 1; + if len1 == 0 { break_outer = true; break; } + min_gallop -= 1; + if !(count1 >= MIN_GALLOP || count2 >= MIN_GALLOP) { + break; + } + } + + if break_outer { break; } + if min_gallop < 0 { min_gallop = 0; } + min_gallop += 2; // Penalize for leaving gallop + } + self.min_gallop = if min_gallop < 1 { 1 } else { min_gallop }; + + if len2 == 1 { + assert!(len1 > 0); + dest -= len1; + c1 -= len1; + copy_vec(array, dest+1, array, c1+1, len1); + array[dest] <-> tmp[c2]; + } else if len2 == 0 { + fail!(~"Comparison violates its contract!"); + } else { + assert!(len1 == 0); + assert!(len2 != 0); + copy_vec(array, dest-(len2-1), tmp, 0, len2); + } + } + + fn merge_collapse(&mut self, array: &mut [T]) { + while self.runs.len() > 1 { + let mut n = self.runs.len()-2; + if n > 0 && + self.runs[n-1].len <= self.runs[n].len + self.runs[n+1].len + { + if self.runs[n-1].len < self.runs[n+1].len { n -= 1; } + } else if self.runs[n].len <= self.runs[n+1].len { + /* keep going */ + } else { + break; + } + self.merge_at(n, array); + } + } + + fn merge_force_collapse(&mut self, array: &mut [T]) { + while self.runs.len() > 1 { + let mut n = self.runs.len()-2; + if n > 0 { + if self.runs[n-1].len < self.runs[n+1].len { + n -= 1; + } + } + self.merge_at(n, array); + } + } +} + +#[inline(always)] +fn copy_vec(dest: &mut [T], + s1: uint, + from: &const [T], + s2: uint, + len: uint) { + assert!(s1+len <= dest.len() && s2+len <= from.len()); + + let mut slice = ~[]; + for uint::range(s2, s2+len) |i| { + slice.push(from[i]); + } + + for slice.eachi |i, v| { + dest[s1+i] = *v; + } +} + +#[cfg(test)] +mod test_qsort3 { + use sort::*; + + use core::vec; + + fn check_sort(v1: &mut [int], v2: &mut [int]) { + let len = vec::len::(v1); + quick_sort3::(v1); + let mut i = 0; + while i < len { + // debug!(v2[i]); + assert!((v2[i] == v1[i])); + i += 1; + } + } + + #[test] + fn test() { + { + let mut v1 = ~[3, 7, 4, 5, 2, 9, 5, 8]; + let mut v2 = ~[2, 3, 4, 5, 5, 7, 8, 9]; + check_sort(v1, v2); + } + { + let mut v1 = ~[1, 1, 1]; + let mut v2 = ~[1, 1, 1]; + check_sort(v1, v2); + } + { + let mut v1: ~[int] = ~[]; + let mut v2: ~[int] = ~[]; + check_sort(v1, v2); + } + { let mut v1 = ~[9]; let mut v2 = ~[9]; check_sort(v1, v2); } + { + let mut v1 = ~[9, 3, 3, 3, 9]; + let mut v2 = ~[3, 3, 3, 9, 9]; + check_sort(v1, v2); + } + } +} + +#[cfg(test)] +mod test_qsort { + use sort::*; + + use core::int; + use core::vec; + + fn check_sort(v1: &mut [int], v2: &mut [int]) { + let len = vec::len::(v1); + fn leual(a: &int, b: &int) -> bool { *a <= *b } + quick_sort::(v1, leual); + let mut i = 0u; + while i < len { + // debug!(v2[i]); + assert!((v2[i] == v1[i])); + i += 1; + } + } + + #[test] + fn test() { + { + let mut v1 = ~[3, 7, 4, 5, 2, 9, 5, 8]; + let mut v2 = ~[2, 3, 4, 5, 5, 7, 8, 9]; + check_sort(v1, v2); + } + { + let mut v1 = ~[1, 1, 1]; + let mut v2 = ~[1, 1, 1]; + check_sort(v1, v2); + } + { + let mut v1: ~[int] = ~[]; + let mut v2: ~[int] = ~[]; + check_sort(v1, v2); + } + { let mut v1 = ~[9]; let mut v2 = ~[9]; check_sort(v1, v2); } + { + let mut v1 = ~[9, 3, 3, 3, 9]; + let mut v2 = ~[3, 3, 3, 9, 9]; + check_sort(v1, v2); + } + } + + // Regression test for #750 + #[test] + fn test_simple() { + let mut names = ~[2, 1, 3]; + + let expected = ~[1, 2, 3]; + + do quick_sort(names) |x, y| { int::le(*x, *y) }; + + let immut_names = names; + + let pairs = vec::zip_slice(expected, immut_names); + for vec::each(pairs) |p| { + let (a, b) = *p; + debug!("%d %d", a, b); + assert!((a == b)); + } + } +} + +#[cfg(test)] +mod tests { + + use sort::*; + + use core::vec; + + fn check_sort(v1: &[int], v2: &[int]) { + let len = vec::len::(v1); + pub fn le(a: &int, b: &int) -> bool { *a <= *b } + let f = le; + let v3 = merge_sort::(v1, f); + let mut i = 0u; + while i < len { + debug!(v3[i]); + assert!((v3[i] == v2[i])); + i += 1; + } + } + + #[test] + fn test() { + { + let v1 = ~[3, 7, 4, 5, 2, 9, 5, 8]; + let v2 = ~[2, 3, 4, 5, 5, 7, 8, 9]; + check_sort(v1, v2); + } + { let v1 = ~[1, 1, 1]; let v2 = ~[1, 1, 1]; check_sort(v1, v2); } + { let v1:~[int] = ~[]; let v2:~[int] = ~[]; check_sort(v1, v2); } + { let v1 = ~[9]; let v2 = ~[9]; check_sort(v1, v2); } + { + let v1 = ~[9, 3, 3, 3, 9]; + let v2 = ~[3, 3, 3, 9, 9]; + check_sort(v1, v2); + } + } + + #[test] + fn test_merge_sort_mutable() { + pub fn le(a: &int, b: &int) -> bool { *a <= *b } + let mut v1 = ~[3, 2, 1]; + let v2 = merge_sort(v1, le); + assert!(v2 == ~[1, 2, 3]); + } + + #[test] + fn test_merge_sort_stability() { + // tjc: funny that we have to use parens + fn ile(x: &(&'static str), y: &(&'static str)) -> bool + { + // FIXME: #4318 Instead of to_ascii and to_str_ascii, could use + // to_ascii_consume and to_str_consume to not do a unnecessary copy. + // (Actually, could just remove the to_str_* call, but needs an deriving(Ord) on + // Ascii) + let x = x.to_ascii().to_lower().to_str_ascii(); + let y = y.to_ascii().to_lower().to_str_ascii(); + x <= y + } + + let names1 = ~["joe bob", "Joe Bob", "Jack Brown", "JOE Bob", + "Sally Mae", "JOE BOB", "Alex Andy"]; + let names2 = ~["Alex Andy", "Jack Brown", "joe bob", "Joe Bob", + "JOE Bob", "JOE BOB", "Sally Mae"]; + let names3 = merge_sort(names1, ile); + assert!(names3 == names2); + } +} + +#[cfg(test)] +mod test_tim_sort { + use sort::tim_sort; + use core::rand::RngUtil; + + struct CVal { + val: float, + } + + impl Ord for CVal { + fn lt(&self, other: &CVal) -> bool { + let rng = rand::rng(); + if rng.gen::() > 0.995 { fail!(~"It's happening!!!"); } + (*self).val < other.val + } + fn le(&self, other: &CVal) -> bool { (*self).val <= other.val } + fn gt(&self, other: &CVal) -> bool { (*self).val > other.val } + fn ge(&self, other: &CVal) -> bool { (*self).val >= other.val } + } + + fn check_sort(v1: &mut [int], v2: &mut [int]) { + let len = vec::len::(v1); + tim_sort::(v1); + let mut i = 0u; + while i < len { + // debug!(v2[i]); + assert!((v2[i] == v1[i])); + i += 1u; + } + } + + #[test] + fn test() { + { + let mut v1 = ~[3, 7, 4, 5, 2, 9, 5, 8]; + let mut v2 = ~[2, 3, 4, 5, 5, 7, 8, 9]; + check_sort(v1, v2); + } + { + let mut v1 = ~[1, 1, 1]; + let mut v2 = ~[1, 1, 1]; + check_sort(v1, v2); + } + { + let mut v1: ~[int] = ~[]; + let mut v2: ~[int] = ~[]; + check_sort(v1, v2); + } + { let mut v1 = ~[9]; let mut v2 = ~[9]; check_sort(v1, v2); } + { + let mut v1 = ~[9, 3, 3, 3, 9]; + let mut v2 = ~[3, 3, 3, 9, 9]; + check_sort(v1, v2); + } + } + + #[test] + #[should_fail] + #[cfg(unix)] + fn crash_test() { + let rng = rand::rng(); + let mut arr = do vec::from_fn(1000) |_i| { + CVal { val: rng.gen() } + }; + + tim_sort(arr); + fail!(~"Guarantee the fail"); + } + + struct DVal { val: uint } + + impl Ord for DVal { + fn lt(&self, _x: &DVal) -> bool { true } + fn le(&self, _x: &DVal) -> bool { true } + fn gt(&self, _x: &DVal) -> bool { true } + fn ge(&self, _x: &DVal) -> bool { true } + } + + #[test] + fn test_bad_Ord_impl() { + let rng = rand::rng(); + let mut arr = do vec::from_fn(500) |_i| { + DVal { val: rng.gen() } + }; + + tim_sort(arr); + } +} + +#[cfg(test)] +mod big_tests { + use sort::*; + use core::rand::RngUtil; + + #[test] + fn test_unique() { + let low = 5; + let high = 10; + tabulate_unique(low, high); + } + + #[test] + fn test_managed() { + let low = 5; + let high = 10; + tabulate_managed(low, high); + } + + fn multiplyVec(arr: &const [T], num: uint) -> ~[T] { + let size = arr.len(); + let res = do vec::from_fn(num) |i| { + arr[i % size] + }; + res + } + + fn makeRange(n: uint) -> ~[uint] { + let one = do vec::from_fn(n) |i| { i }; + let mut two = copy one; + vec::reverse(two); + vec::append(two, one) + } + + fn tabulate_unique(lo: uint, hi: uint) { + fn isSorted(arr: &const [T]) { + for uint::range(0, arr.len()-1) |i| { + if arr[i] > arr[i+1] { + fail!(~"Array not sorted"); + } + } + } + + let rng = rand::rng(); + + for uint::range(lo, hi) |i| { + let n = 1 << i; + let mut arr: ~[float] = do vec::from_fn(n) |_i| { + rng.gen() + }; + + tim_sort(arr); // *sort + isSorted(arr); + + vec::reverse(arr); + tim_sort(arr); // \sort + isSorted(arr); + + tim_sort(arr); // /sort + isSorted(arr); + + for 3.times { + let i1 = rng.gen_uint_range(0, n); + let i2 = rng.gen_uint_range(0, n); + arr[i1] <-> arr[i2]; + } + tim_sort(arr); // 3sort + isSorted(arr); + + if n >= 10 { + let size = arr.len(); + let mut idx = 1; + while idx <= 10 { + arr[size-idx] = rng.gen(); + idx += 1; + } + } + tim_sort(arr); // +sort + isSorted(arr); + + for (n/100).times { + let idx = rng.gen_uint_range(0, n); + arr[idx] = rng.gen(); + } + tim_sort(arr); + isSorted(arr); + + let mut arr = if n > 4 { + let part = vec::slice(arr, 0, 4); + multiplyVec(part, n) + } else { arr }; + tim_sort(arr); // ~sort + isSorted(arr); + + let mut arr = vec::from_elem(n, -0.5); + tim_sort(arr); // =sort + isSorted(arr); + + let half = n / 2; + let mut arr = makeRange(half).map(|i| *i as float); + tim_sort(arr); // !sort + isSorted(arr); + } + } + + fn tabulate_managed(lo: uint, hi: uint) { + fn isSorted(arr: &const [@T]) { + for uint::range(0, arr.len()-1) |i| { + if arr[i] > arr[i+1] { + fail!(~"Array not sorted"); + } + } + } + + let rng = rand::rng(); + + for uint::range(lo, hi) |i| { + let n = 1 << i; + let arr: ~[@float] = do vec::from_fn(n) |_i| { + @rng.gen() + }; + let mut arr = arr; + + tim_sort(arr); // *sort + isSorted(arr); + + vec::reverse(arr); + tim_sort(arr); // \sort + isSorted(arr); + + tim_sort(arr); // /sort + isSorted(arr); + + for 3.times { + let i1 = rng.gen_uint_range(0, n); + let i2 = rng.gen_uint_range(0, n); + arr[i1] <-> arr[i2]; + } + tim_sort(arr); // 3sort + isSorted(arr); + + if n >= 10 { + let size = arr.len(); + let mut idx = 1; + while idx <= 10 { + arr[size-idx] = @rng.gen(); + idx += 1; + } + } + tim_sort(arr); // +sort + isSorted(arr); + + for (n/100).times { + let idx = rng.gen_uint_range(0, n); + arr[idx] = @rng.gen(); + } + tim_sort(arr); + isSorted(arr); + + let mut arr = if n > 4 { + let part = vec::slice(arr, 0, 4); + multiplyVec(part, n) + } else { arr }; + tim_sort(arr); // ~sort + isSorted(arr); + + let mut arr = vec::from_elem(n, @(-0.5)); + tim_sort(arr); // =sort + isSorted(arr); + + let half = n / 2; + let mut arr = makeRange(half).map(|i| @(*i as float)); + tim_sort(arr); // !sort + isSorted(arr); + } + } + + struct LVal<'self> { + val: uint, + key: &'self fn(@uint), + } + + #[unsafe_destructor] + impl<'self> Drop for LVal<'self> { + fn finalize(&self) { + let x = unsafe { task::local_data::local_data_get(self.key) }; + match x { + Some(@y) => { + unsafe { + task::local_data::local_data_set(self.key, @(y+1)); + } + } + _ => fail!(~"Expected key to work"), + } + } + } + + impl<'self> Ord for LVal<'self> { + fn lt<'a>(&self, other: &'a LVal<'self>) -> bool { + (*self).val < other.val + } + fn le<'a>(&self, other: &'a LVal<'self>) -> bool { + (*self).val <= other.val + } + fn gt<'a>(&self, other: &'a LVal<'self>) -> bool { + (*self).val > other.val + } + fn ge<'a>(&self, other: &'a LVal<'self>) -> bool { + (*self).val >= other.val + } + } +} + +// Local Variables: +// mode: rust; +// fill-column: 78; +// indent-tabs-mode: nil +// c-basic-offset: 4 +// buffer-file-coding-system: utf-8-unix +// End: From 84861101eca12942b42f36f8adb18cfc74515431 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Wed, 1 May 2013 09:14:47 -0400 Subject: [PATCH 098/410] rustc: print out filename/line-number when a borrow fails --- src/libcore/unstable/lang.rs | 25 ++++++++++++++----- .../middle/borrowck/gather_loans/mod.rs | 1 - src/librustc/middle/trans/datum.rs | 20 +++++++++++---- src/librustc/middle/trans/expr.rs | 2 +- src/libsyntax/parse/parser.rs | 2 +- 5 files changed, 36 insertions(+), 14 deletions(-) diff --git a/src/libcore/unstable/lang.rs b/src/libcore/unstable/lang.rs index cf71b01aeaeeb..c5062f25ea540 100644 --- a/src/libcore/unstable/lang.rs +++ b/src/libcore/unstable/lang.rs @@ -53,7 +53,7 @@ pub fn fail_(expr: *c_char, file: *c_char, line: size_t) -> ! { #[lang="fail_bounds_check"] pub fn fail_bounds_check(file: *c_char, line: size_t, - index: size_t, len: size_t) { + index: size_t, len: size_t) { let msg = fmt!("index out of bounds: the len is %d but the index is %d", len as int, index as int); do str::as_buf(msg) |p, _len| { @@ -61,12 +61,10 @@ pub fn fail_bounds_check(file: *c_char, line: size_t, } } -pub fn fail_borrowed() { +pub fn fail_borrowed(file: *c_char, line: size_t) { let msg = "borrowed"; do str::as_buf(msg) |msg_p, _| { - do str::as_buf("???") |file_p, _| { - fail_(msg_p as *c_char, file_p as *c_char, 0); - } + fail_(msg_p as *c_char, file, line); } } @@ -160,12 +158,27 @@ pub unsafe fn return_to_mut(a: *u8) { } } +#[cfg(stage0)] #[lang="check_not_borrowed"] #[inline(always)] pub unsafe fn check_not_borrowed(a: *u8) { let a: *mut BoxRepr = transmute(a); if ((*a).header.ref_count & FROZEN_BIT) != 0 { - fail_borrowed(); + do str::as_buf("XXX") |file_p, _| { + fail_borrowed(file_p as *c_char, 0); + } + } +} + +#[cfg(not(stage0))] +#[lang="check_not_borrowed"] +#[inline(always)] +pub unsafe fn check_not_borrowed(a: *u8, + file: *c_char, + line: size_t) { + let a: *mut BoxRepr = transmute(a); + if ((*a).header.ref_count & FROZEN_BIT) != 0 { + fail_borrowed(file, line); } } diff --git a/src/librustc/middle/borrowck/gather_loans/mod.rs b/src/librustc/middle/borrowck/gather_loans/mod.rs index ecdf260bffffa..7ac6dfd3ec385 100644 --- a/src/librustc/middle/borrowck/gather_loans/mod.rs +++ b/src/librustc/middle/borrowck/gather_loans/mod.rs @@ -26,7 +26,6 @@ use middle::ty; use util::common::indenter; use util::ppaux::{Repr}; -use core::hashmap::HashSet; use syntax::ast::{m_const, m_imm, m_mutbl}; use syntax::ast; use syntax::ast_util::id_range; diff --git a/src/librustc/middle/trans/datum.rs b/src/librustc/middle/trans/datum.rs index 705d443b1155d..03c81cad50e11 100644 --- a/src/librustc/middle/trans/datum.rs +++ b/src/librustc/middle/trans/datum.rs @@ -105,6 +105,7 @@ use util::ppaux::ty_to_str; use core::container::Set; // XXX: this should not be necessary use core::to_bytes; use syntax::ast; +use syntax::codemap::span; use syntax::parse::token::special_idents; #[deriving(Eq)] @@ -556,17 +557,24 @@ pub impl Datum { } } - fn perform_write_guard(&self, bcx: block) -> block { + fn perform_write_guard(&self, bcx: block, span: span) -> block { // Create scratch space, but do not root it. let llval = match self.mode { ByValue => self.val, ByRef => Load(bcx, self.val), }; + let loc = bcx.sess().parse_sess.cm.lookup_char_pos(span.lo); + let line = C_int(bcx.ccx(), loc.line as int); + let filename_cstr = C_cstr(bcx.ccx(), @/*bad*/copy loc.file.name); + let filename = PointerCast(bcx, filename_cstr, T_ptr(T_i8())); + callee::trans_lang_call( bcx, bcx.tcx().lang_items.check_not_borrowed_fn(), - ~[ PointerCast(bcx, llval, T_ptr(T_i8())) ], + ~[PointerCast(bcx, llval, T_ptr(T_i8())), + filename, + line], expr::Ignore) } @@ -621,6 +629,7 @@ pub impl Datum { fn try_deref(&self, bcx: block, // block wherein to generate insn's + span: span, // location where deref occurs expr_id: ast::node_id, // id of expr being deref'd derefs: uint, // number of times deref'd already is_auto: bool) // if true, only deref if auto-derefable @@ -645,7 +654,7 @@ pub impl Datum { // // (Note: write-guarded values are always boxes) let bcx = if ccx.maps.write_guard_map.contains(&key) { - self.perform_write_guard(bcx) + self.perform_write_guard(bcx, span) } else { bcx }; match ty::get(self.ty).sty { @@ -759,7 +768,7 @@ pub impl Datum { expr: @ast::expr, // the expression whose value is being deref'd derefs: uint) -> DatumBlock { - match self.try_deref(bcx, expr.id, derefs, false) { + match self.try_deref(bcx, expr.span, expr.id, derefs, false) { (Some(lvres), bcx) => DatumBlock { bcx: bcx, datum: lvres }, (None, _) => { bcx.ccx().sess.span_bug( @@ -769,6 +778,7 @@ pub impl Datum { } fn autoderef(&self, bcx: block, + span: span, expr_id: ast::node_id, max: uint) -> DatumBlock { @@ -783,7 +793,7 @@ pub impl Datum { let mut bcx = bcx; while derefs < max { derefs += 1u; - match datum.try_deref(bcx, expr_id, derefs, true) { + match datum.try_deref(bcx, span, expr_id, derefs, true) { (None, new_bcx) => { bcx = new_bcx; break } (Some(datum_deref), new_bcx) => { datum = datum_deref; diff --git a/src/librustc/middle/trans/expr.rs b/src/librustc/middle/trans/expr.rs index fa6f7802e7d50..bc44d7de98342 100644 --- a/src/librustc/middle/trans/expr.rs +++ b/src/librustc/middle/trans/expr.rs @@ -205,7 +205,7 @@ pub fn trans_to_datum(bcx: block, expr: @ast::expr) -> DatumBlock { if adj.autoderefs > 0 { let DatumBlock { bcx: new_bcx, datum: new_datum } = - datum.autoderef(bcx, expr.id, adj.autoderefs); + datum.autoderef(bcx, expr.span, expr.id, adj.autoderefs); datum = new_datum; bcx = new_bcx; } diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 1129e7b708ea2..1ee651ede7510 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -3723,7 +3723,7 @@ pub impl Parser { first_item_attrs: ~[attribute]) -> foreign_mod { let ParsedItemsAndViewItems { - attrs_remaining: attrs_remaining, + attrs_remaining: _, view_items: view_items, items: _, foreign_items: foreign_items From 4af2d90af59bb5e28e5d114d8a6004d68fad3bd5 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Wed, 1 May 2013 10:29:47 -0400 Subject: [PATCH 099/410] add an option to debug borrows (RUST_DEBUG_BORROW) so you can find out where the offending borrow occurred. This ... still needs some work. --- src/libcore/rt/env.rs | 6 ++- src/libcore/unstable/lang.rs | 78 ++++++++++++++++++++++++++--- src/librustc/middle/trans/_match.rs | 2 +- src/librustc/middle/trans/datum.rs | 14 ++++-- src/librustc/middle/trans/expr.rs | 2 +- src/rt/rust_builtin.cpp | 14 ++++++ src/rt/rust_env.cpp | 2 + src/rt/rust_env.h | 1 + src/rt/rust_task.cpp | 11 ++++ src/rt/rust_task.h | 5 ++ 10 files changed, 121 insertions(+), 14 deletions(-) diff --git a/src/libcore/rt/env.rs b/src/libcore/rt/env.rs index 92e2ec51306e2..1f52cf77868a2 100644 --- a/src/libcore/rt/env.rs +++ b/src/libcore/rt/env.rs @@ -31,8 +31,10 @@ pub struct Environment { argc: c_int, /// The argv value passed to main argv: **c_char, - /// Print GC debugging info - debug_mem: bool + /// Print GC debugging info (true if env var RUST_DEBUG_MEM is set) + debug_mem: bool, + /// Track origin of `@mut` borrows (true if env var RUST_DEBUG_BORROWS is set) + debug_borrows: bool } /// Get the global environment settings diff --git a/src/libcore/unstable/lang.rs b/src/libcore/unstable/lang.rs index c5062f25ea540..0705be7cdefe5 100644 --- a/src/libcore/unstable/lang.rs +++ b/src/libcore/unstable/lang.rs @@ -17,6 +17,7 @@ use str; use sys; use unstable::exchange_alloc; use cast::transmute; +use task::rt::rust_get_task; #[allow(non_camel_case_types)] pub type rust_task = c_void; @@ -27,7 +28,8 @@ pub static FROZEN_BIT: uint = 0x80000000; pub static FROZEN_BIT: uint = 0x8000000000000000; pub mod rustrt { - use libc::{c_char, uintptr_t}; + use unstable::lang::rust_task; + use libc::{c_void, c_char, uintptr_t}; pub extern { #[rust_stack] @@ -43,6 +45,12 @@ pub mod rustrt { #[fast_ffi] unsafe fn rust_upcall_free_noswitch(ptr: *c_char); + + #[rust_stack] + fn rust_take_task_borrow_list(task: *rust_task) -> *c_void; + + #[rust_stack] + fn rust_set_task_borrow_list(task: *rust_task, map: *c_void); } } @@ -61,10 +69,50 @@ pub fn fail_bounds_check(file: *c_char, line: size_t, } } -pub fn fail_borrowed(file: *c_char, line: size_t) { - let msg = "borrowed"; - do str::as_buf(msg) |msg_p, _| { - fail_(msg_p as *c_char, file, line); +struct BorrowRecord { + box: *mut BoxRepr, + file: *c_char, + line: size_t +} + +fn swap_task_borrow_list(f: &fn(~[BorrowRecord]) -> ~[BorrowRecord]) { + unsafe { + let cur_task = rust_get_task(); + let mut borrow_list: ~[BorrowRecord] = { + let ptr = rustrt::rust_take_task_borrow_list(cur_task); + if ptr.is_null() { ~[] } else { transmute(ptr) } + }; + borrow_list = f(borrow_list); + rustrt::rust_set_task_borrow_list(cur_task, transmute(borrow_list)); + } +} + +pub fn fail_borrowed(box: *mut BoxRepr, file: *c_char, line: size_t) { + if !::rt::env::get().debug_borrows { + let msg = "borrowed"; + do str::as_buf(msg) |msg_p, _| { + fail_(msg_p as *c_char, file, line); + } + } else { + do swap_task_borrow_list |borrow_list| { + let mut msg = ~"borrowed"; + let mut sep = " at "; + for borrow_list.each_reverse |entry| { + if entry.box == box { + str::push_str(&mut msg, sep); + let filename = unsafe { + str::raw::from_c_str(entry.file) + }; + str::push_str(&mut msg, filename); + str::push_str(&mut msg, fmt!(":%u", line as uint)); + sep = " and at "; + } + } + do str::as_buf(msg) |msg_p, _| { + fail_(msg_p as *c_char, file, line) + } + borrow_list + } } } @@ -140,6 +188,7 @@ pub unsafe fn local_free(ptr: *c_char) { rustrt::rust_upcall_free_noswitch(ptr); } +#[cfg(stage0)] #[lang="borrow_as_imm"] #[inline(always)] pub unsafe fn borrow_as_imm(a: *u8) { @@ -147,6 +196,21 @@ pub unsafe fn borrow_as_imm(a: *u8) { (*a).header.ref_count |= FROZEN_BIT; } +#[cfg(not(stage0))] +#[lang="borrow_as_imm"] +#[inline(always)] +pub unsafe fn borrow_as_imm(a: *u8, file: *c_char, line: size_t) { + let a: *mut BoxRepr = transmute(a); + (*a).header.ref_count |= FROZEN_BIT; + if ::rt::env::get().debug_borrows { + do swap_task_borrow_list |borrow_list| { + let mut borrow_list = borrow_list; + borrow_list.push(BorrowRecord {box: a, file: file, line: line}); + borrow_list + } + } +} + #[lang="return_to_mut"] #[inline(always)] pub unsafe fn return_to_mut(a: *u8) { @@ -165,7 +229,7 @@ pub unsafe fn check_not_borrowed(a: *u8) { let a: *mut BoxRepr = transmute(a); if ((*a).header.ref_count & FROZEN_BIT) != 0 { do str::as_buf("XXX") |file_p, _| { - fail_borrowed(file_p as *c_char, 0); + fail_borrowed(a, file_p as *c_char, 0); } } } @@ -178,7 +242,7 @@ pub unsafe fn check_not_borrowed(a: *u8, line: size_t) { let a: *mut BoxRepr = transmute(a); if ((*a).header.ref_count & FROZEN_BIT) != 0 { - fail_borrowed(file, line); + fail_borrowed(a, file, line); } } diff --git a/src/librustc/middle/trans/_match.rs b/src/librustc/middle/trans/_match.rs index 785bb3edc07cd..d7f9567c333d0 100644 --- a/src/librustc/middle/trans/_match.rs +++ b/src/librustc/middle/trans/_match.rs @@ -966,7 +966,7 @@ pub fn root_pats_as_necessary(bcx: block, let datum = Datum {val: val, ty: node_id_type(bcx, pat_id), mode: ByRef, source: ZeroMem}; - bcx = datum.root(bcx, root_info); + bcx = datum.root(bcx, br.pats[col].span, root_info); // If we kept going, we'd only re-root the same value, so // return now. return bcx; diff --git a/src/librustc/middle/trans/datum.rs b/src/librustc/middle/trans/datum.rs index 03c81cad50e11..ae71a3e6c22c0 100644 --- a/src/librustc/middle/trans/datum.rs +++ b/src/librustc/middle/trans/datum.rs @@ -517,7 +517,7 @@ pub impl Datum { } } - fn root(&self, bcx: block, root_info: RootInfo) -> block { + fn root(&self, bcx: block, span: span, root_info: RootInfo) -> block { /*! * * In some cases, borrowck will decide that an @T/@[]/@str @@ -542,6 +542,12 @@ pub impl Datum { // If we need to freeze the box, do that now. if root_info.freeze.is_some() { // NOTE distinguish the two kinds of freezing here + + let loc = bcx.sess().parse_sess.cm.lookup_char_pos(span.lo); + let line = C_int(bcx.ccx(), loc.line as int); + let filename_cstr = C_cstr(bcx.ccx(), @/*bad*/copy loc.file.name); + let filename = PointerCast(bcx, filename_cstr, T_ptr(T_i8())); + callee::trans_lang_call( bcx, bcx.tcx().lang_items.borrow_as_imm_fn(), @@ -549,7 +555,9 @@ pub impl Datum { Load(bcx, PointerCast(bcx, scratch.val, - T_ptr(T_ptr(T_i8())))) + T_ptr(T_ptr(T_i8())))), + filename, + line ], expr::Ignore) } else { @@ -647,7 +655,7 @@ pub impl Datum { let key = root_map_key { id: expr_id, derefs: derefs }; let bcx = match ccx.maps.root_map.find(&key) { None => bcx, - Some(&root_info) => self.root(bcx, root_info) + Some(&root_info) => self.root(bcx, span, root_info) }; // Perform the write guard, if necessary. diff --git a/src/librustc/middle/trans/expr.rs b/src/librustc/middle/trans/expr.rs index bc44d7de98342..166b8bc01f856 100644 --- a/src/librustc/middle/trans/expr.rs +++ b/src/librustc/middle/trans/expr.rs @@ -828,7 +828,7 @@ fn trans_lvalue_unadjusted(bcx: block, expr: @ast::expr) -> DatumBlock { // at the end of the scope with id `scope_id`: let root_key = root_map_key { id: expr.id, derefs: 0u }; for bcx.ccx().maps.root_map.find(&root_key).each |&root_info| { - bcx = unrooted_datum.root(bcx, *root_info); + bcx = unrooted_datum.root(bcx, expr.span, *root_info); } return DatumBlock {bcx: bcx, datum: unrooted_datum}; diff --git a/src/rt/rust_builtin.cpp b/src/rt/rust_builtin.cpp index ee025a39ff472..197b8b36d2d4f 100644 --- a/src/rt/rust_builtin.cpp +++ b/src/rt/rust_builtin.cpp @@ -683,6 +683,20 @@ rust_task_local_data_atexit(rust_task *task, void (*cleanup_fn)(void *data)) { task->task_local_data_cleanup = cleanup_fn; } +// set/get/atexit task_borrow_list can run on the rust stack for speed. +extern "C" void * +rust_take_task_borrow_list(rust_task *task) { + void *r = task->borrow_list; + task->borrow_list = NULL; + return r; +} +extern "C" void +rust_set_task_borrow_list(rust_task *task, void *data) { + assert(task->borrow_list == NULL); + assert(data != NULL); + task->borrow_list = data; +} + extern "C" void task_clear_event_reject(rust_task *task) { task->clear_event_reject(); diff --git a/src/rt/rust_env.cpp b/src/rt/rust_env.cpp index 041b4efac52a2..e6fe35609ec93 100644 --- a/src/rt/rust_env.cpp +++ b/src/rt/rust_env.cpp @@ -24,6 +24,7 @@ #define RUST_SEED "RUST_SEED" #define RUST_POISON_ON_FREE "RUST_POISON_ON_FREE" #define RUST_DEBUG_MEM "RUST_DEBUG_MEM" +#define RUST_DEBUG_BORROWS "RUST_DEBUG_BORROWS" #if defined(__WIN32__) static int @@ -130,6 +131,7 @@ load_env(int argc, char **argv) { env->argc = argc; env->argv = argv; env->debug_mem = getenv(RUST_DEBUG_MEM) != NULL; + env->debug_borrows = getenv(RUST_DEBUG_BORROWS) != NULL; return env; } diff --git a/src/rt/rust_env.h b/src/rt/rust_env.h index df27f7674f265..322198bb031ff 100644 --- a/src/rt/rust_env.h +++ b/src/rt/rust_env.h @@ -28,6 +28,7 @@ struct rust_env { int argc; char **argv; rust_bool debug_mem; + rust_bool debug_borrows; }; rust_env* load_env(int argc, char **argv); diff --git a/src/rt/rust_task.cpp b/src/rt/rust_task.cpp index e6293aa5c1de0..ea42936f2e51d 100644 --- a/src/rt/rust_task.cpp +++ b/src/rt/rust_task.cpp @@ -42,6 +42,7 @@ rust_task::rust_task(rust_sched_loop *sched_loop, rust_task_state state, total_stack_sz(0), task_local_data(NULL), task_local_data_cleanup(NULL), + borrow_list(NULL), state(state), cond(NULL), cond_name("none"), @@ -75,6 +76,16 @@ rust_task::delete_this() assert(ref_count == 0); // || // (ref_count == 1 && this == sched->root_task)); + if (borrow_list) { + // NOTE should free borrow_list from within rust code! + // If there is a pointer in there, it is a ~[BorrowRecord] pointer, + // which are currently allocated with LIBC malloc/free. But this is + // not really the right way to do this, we should be freeing this + // pointer from Rust code. + free(borrow_list); + borrow_list = NULL; + } + sched_loop->release_task(this); } diff --git a/src/rt/rust_task.h b/src/rt/rust_task.h index 4aa1199cabc3f..dc45c0439ea12 100644 --- a/src/rt/rust_task.h +++ b/src/rt/rust_task.h @@ -241,6 +241,11 @@ rust_task : public kernel_owned void *task_local_data; void (*task_local_data_cleanup)(void *data); + // Contains a ~[BorrowRecord] pointer, or NULL. + // + // Used by borrow management code in libcore/unstable/lang.rs. + void *borrow_list; + private: // Protects state, cond, cond_name From 5d79f94a2f74a0502f665c5eb432aa7231666392 Mon Sep 17 00:00:00 2001 From: Erick Tryzelaar Date: Tue, 30 Apr 2013 18:03:09 -0700 Subject: [PATCH 100/410] core: Remove use of deprecated `drop` --- src/libcore/core.rc | 1 - src/libcore/pipes.rs | 9 ++++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/libcore/core.rc b/src/libcore/core.rc index f9a56f613d542..7ccf5cb6a9125 100644 --- a/src/libcore/core.rc +++ b/src/libcore/core.rc @@ -63,7 +63,6 @@ they contained the following prologue: #[warn(vecs_implicitly_copyable)]; #[deny(non_camel_case_types)]; #[allow(deprecated_mutable_fields)]; -#[allow(deprecated_drop)]; // Make core testable by not duplicating lang items. See #2912 #[cfg(test)] extern mod realcore(name = "core", vers = "0.7-pre"); diff --git a/src/libcore/pipes.rs b/src/libcore/pipes.rs index 95b24d20a4bc2..82dc598c750eb 100644 --- a/src/libcore/pipes.rs +++ b/src/libcore/pipes.rs @@ -86,6 +86,7 @@ use cast::{forget, transmute, transmute_copy}; use either::{Either, Left, Right}; use kinds::Owned; use libc; +use ops::Drop; use option::{None, Option, Some}; use unstable::intrinsics; use ptr; @@ -395,11 +396,13 @@ pub fn try_recv(p: RecvPacketBuffered) let p_ = p.unwrap(); let p = unsafe { &*p_ }; - #[unsafe_destructor] struct DropState<'self> { p: &'self PacketHeader, + } - drop { + #[unsafe_destructor] + impl<'self> Drop for DropState<'self> { + fn finalize(&self) { unsafe { if task::failing() { self.p.state = Terminated; @@ -411,7 +414,7 @@ pub fn try_recv(p: RecvPacketBuffered) } } } - }; + } let _drop_state = DropState { p: &p.header }; From 7d6d0029ba0392bc0e8f2e7211f58a77cf85a231 Mon Sep 17 00:00:00 2001 From: Erick Tryzelaar Date: Tue, 30 Apr 2013 21:00:30 -0700 Subject: [PATCH 101/410] syntax: remove parsing destructors --- src/libsyntax/parse/parser.rs | 92 ++++++----------------------------- 1 file changed, 14 insertions(+), 78 deletions(-) diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 50bdfb2f55726..1a4a15b3bf522 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -102,11 +102,6 @@ enum restriction { RESTRICT_NO_BAR_OR_DOUBLEBAR_OP, } -// So that we can distinguish a class dtor from other class members - -enum class_contents { dtor_decl(blk, ~[attribute], codemap::span), - members(~[@struct_field]) } - type arg_or_capture_item = Either; type item_info = (ident, item_, Option<~[attribute]>); @@ -3299,7 +3294,6 @@ pub impl Parser { } let mut fields: ~[@struct_field]; - let mut the_dtor: Option<(blk, ~[attribute], codemap::span)> = None; let is_tuple_like; if self.eat(&token::LBRACE) { @@ -3307,26 +3301,8 @@ pub impl Parser { is_tuple_like = false; fields = ~[]; while *self.token != token::RBRACE { - match self.parse_struct_decl_field() { - dtor_decl(ref blk, ref attrs, s) => { - match the_dtor { - Some((_, _, s_first)) => { - self.span_note(s, fmt!("Duplicate destructor \ - declaration for class %s", - *self.interner.get(class_name))); - self.span_fatal(copy s_first, ~"First destructor \ - declared here"); - } - None => { - the_dtor = Some((copy *blk, copy *attrs, s)); - } - } - } - members(mms) => { - for mms.each |struct_field| { - fields.push(*struct_field) - } - } + for self.parse_struct_decl_field().each |struct_field| { + fields.push(*struct_field) } } if fields.len() == 0 { @@ -3365,19 +3341,12 @@ pub impl Parser { ); } - let actual_dtor = do the_dtor.map |dtor| { - let (d_body, d_attrs, d_s) = copy *dtor; - codemap::spanned { node: ast::struct_dtor_ { id: self.get_id(), - attrs: d_attrs, - self_id: self.get_id(), - body: d_body}, - span: d_s}}; let _ = self.get_id(); // XXX: Workaround for crazy bug. let new_id = self.get_id(); (class_name, item_struct(@ast::struct_def { fields: fields, - dtor: actual_dtor, + dtor: None, ctor_id: if is_tuple_like { Some(new_id) } else { None } }, generics), None) @@ -3420,34 +3389,28 @@ pub impl Parser { } // parse an element of a struct definition - fn parse_struct_decl_field(&self) -> class_contents { + fn parse_struct_decl_field(&self) -> ~[@struct_field] { if self.try_parse_obsolete_priv_section() { - return members(~[]); + return ~[]; } - let attrs = self.parse_outer_attributes(); + // Need this to parse comments on fields. + let _attrs = self.parse_outer_attributes(); if self.eat_keyword(&~"priv") { - return members(~[self.parse_single_struct_field(private)]) + return ~[self.parse_single_struct_field(private)] } if self.eat_keyword(&~"pub") { - return members(~[self.parse_single_struct_field(public)]); + return ~[self.parse_single_struct_field(public)]; } if self.try_parse_obsolete_struct_ctor() { - return members(~[]); + return ~[]; } - if self.eat_keyword(&~"drop") { - let lo = self.last_span.lo; - let body = self.parse_block(); - return dtor_decl(body, attrs, mk_sp(lo, self.last_span.hi)) - } - else { - return members(~[self.parse_single_struct_field(inherited)]); - } + return ~[self.parse_single_struct_field(inherited)]; } // parse visiility: PUB, PRIV, or nothing @@ -3830,44 +3793,17 @@ pub impl Parser { // parse a structure-like enum variant definition // this should probably be renamed or refactored... fn parse_struct_def(&self) -> @struct_def { - let mut the_dtor: Option<(blk, ~[attribute], codemap::span)> = None; let mut fields: ~[@struct_field] = ~[]; while *self.token != token::RBRACE { - match self.parse_struct_decl_field() { - dtor_decl(ref blk, ref attrs, s) => { - match the_dtor { - Some((_, _, s_first)) => { - self.span_note(s, ~"duplicate destructor \ - declaration"); - self.span_fatal(copy s_first, - ~"first destructor \ - declared here"); - } - None => { - the_dtor = Some((copy *blk, copy *attrs, s)); - } - } - } - members(mms) => { - for mms.each |struct_field| { - fields.push(*struct_field); - } - } + for self.parse_struct_decl_field().each |struct_field| { + fields.push(*struct_field); } } self.bump(); - let actual_dtor = do the_dtor.map |dtor| { - let (d_body, d_attrs, d_s) = copy *dtor; - codemap::spanned { node: ast::struct_dtor_ { id: self.get_id(), - attrs: d_attrs, - self_id: self.get_id(), - body: d_body }, - span: d_s } - }; return @ast::struct_def { fields: fields, - dtor: actual_dtor, + dtor: None, ctor_id: None }; } From c2e1f47955571fab24fc731c0af97e4c71f4ada9 Mon Sep 17 00:00:00 2001 From: Erick Tryzelaar Date: Tue, 30 Apr 2013 21:00:45 -0700 Subject: [PATCH 102/410] rustc: remove the rest of drop Removes: ast::struct_def::dtor syntax::ast::ii_dtor syntax::visit::fk_dtor syntax::ast_map::node_dtor syntax:struct_dtor --- src/librustc/metadata/common.rs | 1 - src/librustc/metadata/csearch.rs | 7 -- src/librustc/metadata/decoder.rs | 16 --- src/librustc/metadata/encoder.rs | 27 ---- src/librustc/middle/astencode.rs | 26 ---- src/librustc/middle/borrowck/check_loans.rs | 6 +- src/librustc/middle/borrowck/gather_loans.rs | 3 +- src/librustc/middle/kind.rs | 11 -- src/librustc/middle/lint.rs | 29 ----- src/librustc/middle/liveness.rs | 5 +- src/librustc/middle/region.rs | 3 +- src/librustc/middle/resolve.rs | 21 +--- src/librustc/middle/trans/base.rs | 124 +------------------ src/librustc/middle/trans/debuginfo.rs | 3 - src/librustc/middle/trans/inline.rs | 4 - src/librustc/middle/trans/monomorphize.rs | 15 +-- src/librustc/middle/trans/reachable.rs | 13 +- src/librustc/middle/trans/type_use.rs | 3 - src/librustc/middle/ty.rs | 27 +--- src/librustc/middle/typeck/check/mod.rs | 29 +---- src/librustc/middle/typeck/collect.rs | 25 ---- src/librustdoc/tystr_pass.rs | 8 +- src/libsyntax/ast.rs | 18 +-- src/libsyntax/ast_map.rs | 29 +---- src/libsyntax/ast_util.rs | 26 ---- src/libsyntax/ext/pipes/pipec.rs | 1 - src/libsyntax/fold.rs | 26 ---- src/libsyntax/parse/parser.rs | 2 - src/libsyntax/print/pprust.rs | 7 -- src/libsyntax/visit.rs | 44 +------ 30 files changed, 21 insertions(+), 538 deletions(-) diff --git a/src/librustc/metadata/common.rs b/src/librustc/metadata/common.rs index 8e689f3147b6b..111c201d5023c 100644 --- a/src/librustc/metadata/common.rs +++ b/src/librustc/metadata/common.rs @@ -100,7 +100,6 @@ pub static tag_mod_impl_trait: uint = 0x47u; different tags. */ pub static tag_item_impl_method: uint = 0x48u; -pub static tag_item_dtor: uint = 0x49u; pub static tag_item_trait_method_self_ty: uint = 0x4b; pub static tag_item_trait_method_self_ty_region: uint = 0x4c; diff --git a/src/librustc/metadata/csearch.rs b/src/librustc/metadata/csearch.rs index 5626714260b87..f8dc34f9cee3a 100644 --- a/src/librustc/metadata/csearch.rs +++ b/src/librustc/metadata/csearch.rs @@ -230,13 +230,6 @@ pub fn get_impl_method(cstore: @mut cstore::CStore, decoder::get_impl_method(cstore.intr, cdata, def.node, mname) } -/* If def names a class with a dtor, return it. Otherwise, return none. */ -pub fn struct_dtor(cstore: @mut cstore::CStore, def: ast::def_id) - -> Option { - let cdata = cstore::get_crate_data(cstore, def.crate); - decoder::struct_dtor(cdata, def.node) -} - pub fn get_item_visibility(cstore: @mut cstore::CStore, def_id: ast::def_id) -> ast::visibility { diff --git a/src/librustc/metadata/decoder.rs b/src/librustc/metadata/decoder.rs index cfe31360d321b..fb7b3f9c8b129 100644 --- a/src/librustc/metadata/decoder.rs +++ b/src/librustc/metadata/decoder.rs @@ -445,22 +445,6 @@ pub fn get_impl_method(intr: @ident_interner, cdata: cmd, id: ast::node_id, found.get() } -pub fn struct_dtor(cdata: cmd, id: ast::node_id) -> Option { - let items = reader::get_doc(reader::Doc(cdata.data), tag_items); - let mut found = None; - let cls_items = match maybe_find_item(id, items) { - Some(it) => it, - None => fail!(fmt!("struct_dtor: class id not found \ - when looking up dtor for %d", id)) - }; - for reader::tagged_docs(cls_items, tag_item_dtor) |doc| { - let doc1 = reader::get_doc(doc, tag_def_id); - let did = reader::with_doc_data(doc1, |d| parse_def_id(d)); - found = Some(translate_def_id(cdata, did)); - }; - found -} - pub fn get_symbol(data: @~[u8], id: ast::node_id) -> ~str { return item_symbol(lookup_item(id, data)); } diff --git a/src/librustc/metadata/encoder.rs b/src/librustc/metadata/encoder.rs index dd4ef0d2e688f..ba6a4f30857eb 100644 --- a/src/librustc/metadata/encoder.rs +++ b/src/librustc/metadata/encoder.rs @@ -765,26 +765,6 @@ fn encode_info_for_item(ecx: @EncodeContext, ebml_w: &writer::Encoder, class itself */ let idx = encode_info_for_struct(ecx, ebml_w, path, struct_def.fields, index); - /* Encode the dtor */ - for struct_def.dtor.each |dtor| { - index.push(entry {val: dtor.node.id, pos: ebml_w.writer.tell()}); - encode_info_for_ctor(ecx, - ebml_w, - dtor.node.id, - ecx.tcx.sess.ident_of( - *ecx.tcx.sess.str_of(item.ident) + - ~"_dtor"), - path, - if generics.ty_params.len() > 0u { - Some(ii_dtor(copy *dtor, - item.ident, - copy *generics, - local_def(item.id))) } - else { - None - }, - generics); - } /* Index the class*/ add_to_index(); @@ -816,13 +796,6 @@ fn encode_info_for_item(ecx: @EncodeContext, ebml_w: &writer::Encoder, encode_name(ecx, ebml_w, item.ident); encode_path(ecx, ebml_w, path, ast_map::path_name(item.ident)); encode_region_param(ecx, ebml_w, item); - /* Encode the dtor */ - /* Encode id for dtor */ - for struct_def.dtor.each |dtor| { - do ebml_w.wr_tag(tag_item_dtor) { - encode_def_id(ebml_w, local_def(dtor.node.id)); - } - }; /* Encode def_ids for each field and method for methods, write all the stuff get_trait_method diff --git a/src/librustc/middle/astencode.rs b/src/librustc/middle/astencode.rs index c7c9c110586c7..2f753523a7bc0 100644 --- a/src/librustc/middle/astencode.rs +++ b/src/librustc/middle/astencode.rs @@ -327,15 +327,6 @@ fn simplify_ast(ii: &ast::inlined_item) -> ast::inlined_item { ast::ii_foreign(i) => { ast::ii_foreign(fld.fold_foreign_item(i)) } - ast::ii_dtor(ref dtor, nm, ref tps, parent_id) => { - let dtor_body = fld.fold_block(&dtor.node.body); - ast::ii_dtor( - codemap::spanned { - node: ast::struct_dtor_ { body: dtor_body, - .. /*bad*/copy (*dtor).node }, - .. (/*bad*/copy *dtor) }, - nm, /*bad*/copy *tps, parent_id) - } } } @@ -363,23 +354,6 @@ fn renumber_ast(xcx: @ExtendedDecodeContext, ii: ast::inlined_item) ast::ii_foreign(i) => { ast::ii_foreign(fld.fold_foreign_item(i)) } - ast::ii_dtor(ref dtor, nm, ref generics, parent_id) => { - let dtor_body = fld.fold_block(&dtor.node.body); - let dtor_attrs = fld.fold_attributes(/*bad*/copy (*dtor).node.attrs); - let new_generics = fold::fold_generics(generics, fld); - let dtor_id = fld.new_id((*dtor).node.id); - let new_parent = xcx.tr_def_id(parent_id); - let new_self = fld.new_id((*dtor).node.self_id); - ast::ii_dtor( - codemap::spanned { - node: ast::struct_dtor_ { id: dtor_id, - attrs: dtor_attrs, - self_id: new_self, - body: dtor_body }, - .. (/*bad*/copy *dtor) - }, - nm, new_generics, new_parent) - } } } diff --git a/src/librustc/middle/borrowck/check_loans.rs b/src/librustc/middle/borrowck/check_loans.rs index 07b6c80d4201c..526a5a3a9dd4c 100644 --- a/src/librustc/middle/borrowck/check_loans.rs +++ b/src/librustc/middle/borrowck/check_loans.rs @@ -629,8 +629,7 @@ fn check_loans_in_fn(fk: &visit::fn_kind, let declared_purity, src; match *fk { - visit::fk_item_fn(*) | visit::fk_method(*) | - visit::fk_dtor(*) => { + visit::fk_item_fn(*) | visit::fk_method(*) => { declared_purity = ty::ty_fn_purity(fty); src = id; } @@ -658,8 +657,7 @@ fn check_loans_in_fn(fk: &visit::fn_kind, // inherits the fn_args from enclosing ctxt } visit::fk_anon(*) | visit::fk_fn_block(*) | - visit::fk_method(*) | visit::fk_item_fn(*) | - visit::fk_dtor(*) => { + visit::fk_method(*) | visit::fk_item_fn(*) => { let mut fn_args = ~[]; for decl.inputs.each |input| { // For the purposes of purity, only consider function- diff --git a/src/librustc/middle/borrowck/gather_loans.rs b/src/librustc/middle/borrowck/gather_loans.rs index e40d0e63eb38e..da04853411865 100644 --- a/src/librustc/middle/borrowck/gather_loans.rs +++ b/src/librustc/middle/borrowck/gather_loans.rs @@ -104,8 +104,7 @@ fn req_loans_in_fn(fk: &visit::fn_kind, match *fk { visit::fk_anon(*) | visit::fk_fn_block(*) => {} - visit::fk_item_fn(*) | visit::fk_method(*) | - visit::fk_dtor(*) => { + visit::fk_item_fn(*) | visit::fk_method(*) => { self.item_ub = body.node.id; } } diff --git a/src/librustc/middle/kind.rs b/src/librustc/middle/kind.rs index cf488b0ac8939..0925e8cdd6375 100644 --- a/src/librustc/middle/kind.rs +++ b/src/librustc/middle/kind.rs @@ -153,17 +153,6 @@ fn check_item(item: @item, cx: Context, visitor: visit::vt) { } } } - item_struct(struct_def, _) => { - match struct_def.dtor { - None => {} - Some(ref dtor) => { - let struct_did = def_id { crate: 0, node: item.id }; - check_struct_safe_for_destructor(cx, - dtor.span, - struct_did); - } - } - } _ => {} } } diff --git a/src/librustc/middle/lint.rs b/src/librustc/middle/lint.rs index faf4b1c31061b..b67d74bc272b6 100644 --- a/src/librustc/middle/lint.rs +++ b/src/librustc/middle/lint.rs @@ -57,7 +57,6 @@ pub enum lint { type_limits, default_methods, deprecated_mutable_fields, - deprecated_drop, unused_unsafe, managed_heap_memory, @@ -210,13 +209,6 @@ pub fn get_lint_dict() -> LintDict { default: deny }), - (~"deprecated_drop", - LintSpec { - lint: deprecated_drop, - desc: "deprecated \"drop\" notation for the destructor", - default: deny - }), - (~"unused_unsafe", LintSpec { lint: unused_unsafe, @@ -463,7 +455,6 @@ fn check_item(i: @ast::item, cx: ty::ctxt) { check_item_type_limits(cx, i); check_item_default_methods(cx, i); check_item_deprecated_mutable_fields(cx, i); - check_item_deprecated_drop(cx, i); check_item_unused_unsafe(cx, i); check_item_unused_mut(cx, i); } @@ -668,26 +659,6 @@ fn check_item_deprecated_mutable_fields(cx: ty::ctxt, item: @ast::item) { } } -fn check_item_deprecated_drop(cx: ty::ctxt, item: @ast::item) { - match item.node { - ast::item_struct(struct_def, _) => { - match struct_def.dtor { - None => {} - Some(ref dtor) => { - cx.sess.span_lint(deprecated_drop, - item.id, - item.id, - dtor.span, - ~"`drop` notation for destructors is \ - deprecated; implement the `Drop` \ - trait instead"); - } - } - } - _ => {} - } -} - fn check_item_ctypes(cx: ty::ctxt, it: @ast::item) { fn check_foreign_fn(cx: ty::ctxt, fn_id: ast::node_id, diff --git a/src/librustc/middle/liveness.rs b/src/librustc/middle/liveness.rs index 94d82d0acb8e4..0df10c59a8aac 100644 --- a/src/librustc/middle/liveness.rs +++ b/src/librustc/middle/liveness.rs @@ -117,7 +117,7 @@ use syntax::ast::*; use syntax::codemap::span; use syntax::parse::token::special_idents; use syntax::print::pprust::{expr_to_str, block_to_str}; -use syntax::visit::{fk_anon, fk_dtor, fk_fn_block, fk_item_fn, fk_method}; +use syntax::visit::{fk_anon, fk_fn_block, fk_item_fn, fk_method}; use syntax::visit::{vt}; use syntax::{visit, ast_util}; @@ -440,9 +440,6 @@ fn visit_fn(fk: &visit::fn_kind, sty_static => {} } } - fk_dtor(_, _, self_id, _) => { - fn_maps.add_variable(Arg(self_id, special_idents::self_)); - } fk_item_fn(*) | fk_anon(*) | fk_fn_block(*) => {} } diff --git a/src/librustc/middle/region.rs b/src/librustc/middle/region.rs index f32998281711f..88e201fb5f438 100644 --- a/src/librustc/middle/region.rs +++ b/src/librustc/middle/region.rs @@ -438,8 +438,7 @@ pub fn resolve_fn(fk: &visit::fn_kind, cx: ctxt, visitor: visit::vt) { let fn_cx = match *fk { - visit::fk_item_fn(*) | visit::fk_method(*) | - visit::fk_dtor(*) => { + visit::fk_item_fn(*) | visit::fk_method(*) => { // Top-level functions are a root scope. ctxt {parent: Some(id),.. cx} } diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs index 294a21fac2c23..1d2ca59b8aa31 100644 --- a/src/librustc/middle/resolve.rs +++ b/src/librustc/middle/resolve.rs @@ -47,7 +47,7 @@ use syntax::ast::{named_field, ne, neg, node_id, pat, pat_enum, pat_ident}; use syntax::ast::{Path, pat_lit, pat_range, pat_struct}; use syntax::ast::{prim_ty, private, provided}; use syntax::ast::{public, required, rem, self_ty_, shl, shr, stmt_decl}; -use syntax::ast::{struct_dtor, struct_field, struct_variant_kind}; +use syntax::ast::{struct_field, struct_variant_kind}; use syntax::ast::{sty_static, subtract, trait_ref, tuple_variant_kind, Ty}; use syntax::ast::{ty_bool, ty_char, ty_f, ty_f32, ty_f64, ty_float, ty_i}; use syntax::ast::{ty_i16, ty_i32, ty_i64, ty_i8, ty_int, TyParam, ty_path}; @@ -3512,7 +3512,6 @@ pub impl Resolver { self.resolve_struct(item.id, generics, struct_def.fields, - &struct_def.dtor, visitor); } @@ -3770,7 +3769,6 @@ pub impl Resolver { id: node_id, generics: &Generics, fields: &[@struct_field], - optional_destructor: &Option, visitor: ResolveVisitor) { // If applicable, create a rib for the type parameters. do self.with_type_parameter_rib(HasTypeParameters @@ -3784,23 +3782,6 @@ pub impl Resolver { for fields.each |field| { self.resolve_type(field.node.ty, visitor); } - - // Resolve the destructor, if applicable. - match *optional_destructor { - None => { - // Nothing to do. - } - Some(ref destructor) => { - self.resolve_function(NormalRibKind, - None, - NoTypeParameters, - &destructor.node.body, - HasSelfBinding - ((*destructor).node.self_id, - true), - visitor); - } - } } } diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs index efa10dfc2aa34..b3f7ab8b00a0e 100644 --- a/src/librustc/middle/trans/base.rs +++ b/src/librustc/middle/trans/base.rs @@ -2093,53 +2093,6 @@ pub fn trans_tuple_struct(ccx: @CrateContext, finish_fn(fcx, lltop); } -pub fn trans_struct_dtor(ccx: @CrateContext, - path: path, - body: &ast::blk, - dtor_id: ast::node_id, - psubsts: Option<@param_substs>, - hash_id: Option, - parent_id: ast::def_id) - -> ValueRef { - let tcx = ccx.tcx; - /* Look up the parent class's def_id */ - let mut class_ty = ty::lookup_item_type(tcx, parent_id).ty; - /* Substitute in the class type if necessary */ - for psubsts.each |ss| { - class_ty = ty::subst_tps(tcx, ss.tys, ss.self_ty, class_ty); - } - - /* The dtor takes a (null) output pointer, and a self argument, - and returns () */ - let lldty = type_of_dtor(ccx, class_ty); - - // XXX: Bad copies. - let s = get_dtor_symbol(ccx, copy path, dtor_id, psubsts); - - /* Register the dtor as a function. It has external linkage */ - let lldecl = decl_internal_cdecl_fn(ccx.llmod, s, lldty); - lib::llvm::SetLinkage(lldecl, lib::llvm::ExternalLinkage); - - /* If we're monomorphizing, register the monomorphized decl - for the dtor */ - for hash_id.each |h_id| { - ccx.monomorphized.insert(*h_id, lldecl); - } - /* Translate the dtor body */ - let decl = ast_util::dtor_dec(); - trans_fn(ccx, - path, - &decl, - body, - lldecl, - impl_self(class_ty), - psubsts, - dtor_id, - None, - []); - lldecl -} - pub fn trans_enum_def(ccx: @CrateContext, enum_definition: &ast::enum_def, id: ast::node_id, path: @ast_map::path, vi: @~[ty::VariantInfo], @@ -2158,8 +2111,7 @@ pub fn trans_enum_def(ccx: @CrateContext, enum_definition: &ast::enum_def, // Nothing to do. } ast::struct_variant_kind(struct_def) => { - trans_struct_def(ccx, struct_def, path, - variant.node.id); + trans_struct_def(ccx, struct_def); } } } @@ -2228,22 +2180,14 @@ pub fn trans_item(ccx: @CrateContext, item: &ast::item) { } ast::item_struct(struct_def, ref generics) => { if !generics.is_type_parameterized() { - trans_struct_def(ccx, struct_def, path, item.id); + trans_struct_def(ccx, struct_def); } } _ => {/* fall through */ } } } -pub fn trans_struct_def(ccx: @CrateContext, struct_def: @ast::struct_def, - path: @ast_map::path, - id: ast::node_id) { - // Translate the destructor. - for struct_def.dtor.each |dtor| { - trans_struct_dtor(ccx, /*bad*/copy *path, &dtor.node.body, - dtor.node.id, None, None, local_def(id)); - }; - +pub fn trans_struct_def(ccx: @CrateContext, struct_def: @ast::struct_def) { // If this is a tuple-like struct, translate the constructor. match struct_def.ctor_id { // We only need to translate a constructor if there are fields; @@ -2477,46 +2421,6 @@ pub fn item_path(ccx: @CrateContext, i: @ast::item) -> path { vec::append(/*bad*/copy *base, ~[path_name(i.ident)]) } -/* If there's already a symbol for the dtor with and substs , - return it; otherwise, create one and register it, returning it as well */ -pub fn get_dtor_symbol(ccx: @CrateContext, - path: path, - id: ast::node_id, - substs: Option<@param_substs>) - -> ~str { - let t = ty::node_id_to_type(ccx.tcx, id); - match ccx.item_symbols.find(&id) { - Some(s) => (/*bad*/copy *s), - None if substs.is_none() => { - let s = mangle_exported_name( - ccx, - vec::append(path, ~[path_name((ccx.names)(~"dtor"))]), - t); - // XXX: Bad copy, use `@str`? - ccx.item_symbols.insert(id, copy s); - s - } - None => { - // Monomorphizing, so just make a symbol, don't add - // this to item_symbols - match substs { - Some(ss) => { - let mono_ty = ty::subst_tps(ccx.tcx, ss.tys, ss.self_ty, t); - mangle_exported_name( - ccx, - vec::append(path, - ~[path_name((ccx.names)(~"dtor"))]), - mono_ty) - } - None => { - ccx.sess.bug(fmt!("get_dtor_symbol: not monomorphizing and \ - couldn't find a symbol for dtor %?", path)); - } - } - } - } -} - pub fn get_item_val(ccx: @CrateContext, id: ast::node_id) -> ValueRef { debug!("get_item_val(id=`%?`)", id); let tcx = ccx.tcx; @@ -2602,28 +2506,6 @@ pub fn get_item_val(ccx: @CrateContext, id: ast::node_id) -> ValueRef { } } } - ast_map::node_dtor(_, dt, parent_id, pt) => { - /* - Don't just call register_fn, since we don't want to add - the implicit self argument automatically (we want to make sure - it has the right type) - */ - // Want parent_id and not id, because id is the dtor's type - let class_ty = ty::lookup_item_type(tcx, parent_id).ty; - // This code shouldn't be reached if the class is generic - assert!(!ty::type_has_params(class_ty)); - let lldty = T_fn(~[ - T_ptr(T_i8()), - T_ptr(type_of(ccx, class_ty)) - ], - T_nil()); - let s = get_dtor_symbol(ccx, /*bad*/copy *pt, dt.node.id, None); - - /* Make the declaration for the dtor */ - let llfn = decl_internal_cdecl_fn(ccx.llmod, s, lldty); - lib::llvm::SetLinkage(llfn, lib::llvm::ExternalLinkage); - llfn - } ast_map::node_variant(ref v, enm, pth) => { let llfn; diff --git a/src/librustc/middle/trans/debuginfo.rs b/src/librustc/middle/trans/debuginfo.rs index 2a2bf7ba4ad68..58fc5ea3be647 100644 --- a/src/librustc/middle/trans/debuginfo.rs +++ b/src/librustc/middle/trans/debuginfo.rs @@ -983,9 +983,6 @@ pub fn create_function(fcx: fn_ctxt) -> @Metadata { expected an expr_fn_block here") } } - ast_map::node_dtor(_, _, did, _) => { - ((dbg_cx.names)(~"dtor"), ast_util::dtor_ty(), did.node) - } _ => fcx.ccx.sess.bug(~"create_function: unexpected \ sort of node") }; diff --git a/src/librustc/middle/trans/inline.rs b/src/librustc/middle/trans/inline.rs index 7a7f03c2273e1..ad06a9715b4af 100644 --- a/src/librustc/middle/trans/inline.rs +++ b/src/librustc/middle/trans/inline.rs @@ -118,10 +118,6 @@ pub fn maybe_instantiate_inline(ccx: @CrateContext, fn_id: ast::def_id, } local_def(mth.id) } - csearch::found(ast::ii_dtor(ref dtor, _, _, _)) => { - ccx.external.insert(fn_id, Some((*dtor).node.id)); - local_def((*dtor).node.id) - } } } } diff --git a/src/librustc/middle/trans/monomorphize.rs b/src/librustc/middle/trans/monomorphize.rs index 72ad6dde4f17d..aa49915d1759b 100644 --- a/src/librustc/middle/trans/monomorphize.rs +++ b/src/librustc/middle/trans/monomorphize.rs @@ -13,7 +13,7 @@ use driver::session; use lib::llvm::ValueRef; use middle::trans::base::{get_insn_ctxt}; use middle::trans::base::{set_inline_hint_if_appr, set_inline_hint}; -use middle::trans::base::{trans_enum_variant, trans_struct_dtor}; +use middle::trans::base::{trans_enum_variant}; use middle::trans::base::{trans_fn, decl_internal_cdecl_fn}; use middle::trans::base::{get_item_val, no_self}; use middle::trans::base; @@ -35,7 +35,6 @@ use syntax::ast_map; use syntax::ast_map::path_name; use syntax::ast_util::local_def; use syntax::opt_vec; -use syntax::parse::token::special_idents; use syntax::abi::AbiSet; pub fn monomorphic_fn(ccx: @CrateContext, @@ -116,8 +115,6 @@ pub fn monomorphic_fn(ccx: @CrateContext, // Foreign externs don't have to be monomorphized. return (get_item_val(ccx, fn_id.node), true); } - ast_map::node_dtor(_, dtor, _, pt) => - (pt, special_idents::dtor, dtor.span), ast_map::node_trait_method(@ast::provided(m), _, pt) => { (pt, m.ident, m.span) } @@ -243,16 +240,6 @@ pub fn monomorphic_fn(ccx: @CrateContext, meth::trans_method(ccx, pt, mth, psubsts, None, d, impl_did); d } - ast_map::node_dtor(_, dtor, _, pt) => { - let parent_id = match ty::ty_to_def_id(ty::node_id_to_type(ccx.tcx, - dtor.node.self_id)) { - Some(did) => did, - None => ccx.sess.span_bug(dtor.span, ~"Bad self ty in \ - dtor") - }; - trans_struct_dtor(ccx, /*bad*/copy *pt, &dtor.node.body, - dtor.node.id, psubsts, Some(hash_id), parent_id) - } ast_map::node_trait_method(@ast::provided(mth), _, pt) => { let d = mk_lldecl(); set_inline_hint_if_appr(/*bad*/copy mth.attrs, d); diff --git a/src/librustc/middle/trans/reachable.rs b/src/librustc/middle/trans/reachable.rs index 3ccef0dbc4aca..234473dd35b60 100644 --- a/src/librustc/middle/trans/reachable.rs +++ b/src/librustc/middle/trans/reachable.rs @@ -124,18 +124,10 @@ fn traverse_public_item(cx: &ctx, item: @item) { } } } - item_struct(ref struct_def, ref generics) => { + item_struct(ref struct_def, _) => { for struct_def.ctor_id.each |&ctor_id| { cx.rmap.insert(ctor_id); } - for struct_def.dtor.each |dtor| { - cx.rmap.insert(dtor.node.id); - if generics.ty_params.len() > 0u || - attr::find_inline_attr(dtor.node.attrs) != attr::ia_none - { - traverse_inline_body(cx, &dtor.node.body); - } - } } item_ty(t, _) => { traverse_ty(t, cx, @@ -239,9 +231,6 @@ fn traverse_all_resources_and_impls(cx: &ctx, crate_mod: &_mod) { visit_item: |i, cx, v| { visit::visit_item(i, cx, v); match i.node { - item_struct(sdef, _) if sdef.dtor.is_some() => { - traverse_public_item(cx, i); - } item_impl(*) => { traverse_public_item(cx, i); } diff --git a/src/librustc/middle/trans/type_use.rs b/src/librustc/middle/trans/type_use.rs index 33145dd4334a5..e19eba6ca98f9 100644 --- a/src/librustc/middle/trans/type_use.rs +++ b/src/librustc/middle/trans/type_use.rs @@ -157,9 +157,6 @@ pub fn type_uses_for(ccx: @CrateContext, fn_id: def_id, n_tps: uint) for uint::range(0u, n_tps) |n| { cx.uses[n] |= flags;} } } - ast_map::node_dtor(_, ref dtor, _, _) => { - handle_body(cx, &dtor.node.body); - } ast_map::node_struct_ctor(*) => { // Similarly to node_variant, this monomorphized function just uses // the representations of all of its type parameters. diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index c7fb1e94adf4c..5b8e0e03b628c 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -3748,28 +3748,8 @@ pub impl DtorKind { Otherwise return none. */ pub fn ty_dtor(cx: ctxt, struct_id: def_id) -> DtorKind { match cx.destructor_for_type.find(&struct_id) { - Some(&method_def_id) => return TraitDtor(method_def_id), - None => {} // Continue. - } - - if is_local(struct_id) { - match cx.items.find(&struct_id.node) { - Some(&ast_map::node_item(@ast::item { - node: ast::item_struct(@ast::struct_def { dtor: Some(ref dtor), - _ }, - _), - _ - }, _)) => - LegacyDtor(local_def((*dtor).node.id)), - _ => - NoDtor - } - } - else { - match csearch::struct_dtor(cx.sess.cstore, struct_id) { + Some(&method_def_id) => TraitDtor(method_def_id), None => NoDtor, - Some(did) => LegacyDtor(did), - } } } @@ -3819,11 +3799,6 @@ pub fn item_path(cx: ctxt, id: ast::def_id) -> ast_map::path { ast_map::path_name((*variant).node.name)) } - ast_map::node_dtor(_, _, _, path) => { - vec::append_one(/*bad*/copy *path, ast_map::path_name( - syntax::parse::token::special_idents::literally_dtor)) - } - ast_map::node_struct_ctor(_, item, path) => { vec::append_one(/*bad*/copy *path, ast_map::path_name(item.ident)) } diff --git a/src/librustc/middle/typeck/check/mod.rs b/src/librustc/middle/typeck/check/mod.rs index b9f3de873cf07..d1c5ae18bc30b 100644 --- a/src/librustc/middle/typeck/check/mod.rs +++ b/src/librustc/middle/typeck/check/mod.rs @@ -557,30 +557,7 @@ pub fn check_no_duplicate_fields(tcx: ty::ctxt, } } -pub fn check_struct(ccx: @mut CrateCtxt, - struct_def: @ast::struct_def, - id: ast::node_id, - span: span) { - let tcx = ccx.tcx; - let self_ty = ty::node_id_to_type(tcx, id); - - for struct_def.dtor.each |dtor| { - let class_t = SelfInfo { - self_ty: self_ty, - self_id: dtor.node.self_id, - span: dtor.span, - }; - // typecheck the dtor - let dtor_dec = ast_util::dtor_dec(); - check_bare_fn( - ccx, - &dtor_dec, - &dtor.node.body, - dtor.node.id, - Some(class_t) - ); - }; - +pub fn check_struct(ccx: @mut CrateCtxt, id: ast::node_id, span: span) { // Check that the class is instantiable check_instantiable(ccx.tcx, span, id); } @@ -623,8 +600,8 @@ pub fn check_item(ccx: @mut CrateCtxt, it: @ast::item) { } } } - ast::item_struct(struct_def, _) => { - check_struct(ccx, struct_def, it.id, it.span); + ast::item_struct(*) => { + check_struct(ccx, it.id, it.span); } ast::item_ty(t, ref generics) => { let tpt_ty = ty::node_id_to_type(ccx.tcx, it.id); diff --git a/src/librustc/middle/typeck/collect.rs b/src/librustc/middle/typeck/collect.rs index 0ffd398d03c19..10537711b3289 100644 --- a/src/librustc/middle/typeck/collect.rs +++ b/src/librustc/middle/typeck/collect.rs @@ -49,7 +49,6 @@ use syntax::ast::{RegionTyParamBound, TraitTyParamBound}; use syntax::ast; use syntax::ast_map; use syntax::ast_util::{local_def, split_trait_methods}; -use syntax::ast_util; use syntax::codemap::span; use syntax::codemap; use syntax::print::pprust::{path_to_str, self_ty_to_str}; @@ -897,30 +896,6 @@ pub fn convert_struct(ccx: &CrateCtxt, id: ast::node_id) { let tcx = ccx.tcx; - for struct_def.dtor.each |dtor| { - let region_parameterization = - RegionParameterization::from_variance_and_generics(rp, generics); - - // Write the dtor type - let t_dtor = ty::mk_bare_fn( - tcx, - astconv::ty_of_bare_fn( - ccx, - &type_rscope(region_parameterization), - ast::impure_fn, - AbiSet::Rust(), - &opt_vec::Empty, - &ast_util::dtor_dec())); - write_ty_to_tcx(tcx, dtor.node.id, t_dtor); - tcx.tcache.insert(local_def(dtor.node.id), - ty_param_bounds_and_ty { - generics: ty::Generics { - type_param_defs: tpt.generics.type_param_defs, - region_param: rp - }, - ty: t_dtor}); - }; - // Write the type of each of the members for struct_def.fields.each |f| { convert_field(ccx, rp, tpt.generics.type_param_defs, *f, generics); diff --git a/src/librustdoc/tystr_pass.rs b/src/librustdoc/tystr_pass.rs index 303bdc53b6982..a6fbee81bc8af 100644 --- a/src/librustdoc/tystr_pass.rs +++ b/src/librustdoc/tystr_pass.rs @@ -332,13 +332,7 @@ fn fold_struct( /// what I actually want fn strip_struct_extra_stuff(item: @ast::item) -> @ast::item { let node = match copy item.node { - ast::item_struct(def, tys) => { - let def = @ast::struct_def { - dtor: None, // Remove the drop { } block - .. copy *def - }; - ast::item_struct(def, tys) - } + ast::item_struct(def, tys) => ast::item_struct(def, tys), _ => fail!(~"not a struct") }; diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index ba6fe1cda4f31..71fd506ebede3 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -1174,10 +1174,7 @@ pub enum struct_field_kind { #[auto_decode] #[deriving(Eq)] pub struct struct_def { - fields: ~[@struct_field], /* fields */ - /* (not including ctor or dtor) */ - /* dtor is optional */ - dtor: Option, + fields: ~[@struct_field], /* fields, not including ctor */ /* ID of the constructor. This is only used for tuple- or enum-like * structs. */ ctor_id: Option @@ -1230,18 +1227,6 @@ impl to_bytes::IterBytes for struct_mutability { } } -pub type struct_dtor = spanned; - -#[auto_encode] -#[auto_decode] -#[deriving(Eq)] -pub struct struct_dtor_ { - id: node_id, - attrs: ~[attribute], - self_id: node_id, - body: blk, -} - #[auto_encode] #[auto_decode] #[deriving(Eq)] @@ -1272,7 +1257,6 @@ pub enum inlined_item { ii_item(@item), ii_method(def_id /* impl id */, @method), ii_foreign(@foreign_item), - ii_dtor(struct_dtor, ident, Generics, def_id /* parent id */) } /* hold off on tests ... they appear in a later merge. diff --git a/src/libsyntax/ast_map.rs b/src/libsyntax/ast_map.rs index f9828ad2b9e4e..d2125cebb5e48 100644 --- a/src/libsyntax/ast_map.rs +++ b/src/libsyntax/ast_map.rs @@ -14,7 +14,6 @@ use ast; use ast_util::{inlined_item_utils, stmt_id}; use ast_util; use codemap; -use codemap::spanned; use diagnostic::span_handler; use parse::token::ident_interner; use print::pprust; @@ -93,8 +92,6 @@ pub enum ast_node { // order they are introduced. node_arg(arg, uint), node_local(uint), - // Destructor for a struct - node_dtor(Generics, @struct_dtor, def_id, @path), node_block(blk), node_struct_ctor(@struct_def, @item, @path), } @@ -163,7 +160,7 @@ pub fn map_decoded_item(diag: @span_handler, // don't decode and instantiate the impl, but just the method, we have to // add it to the table now: match *ii { - ii_item(*) | ii_dtor(*) => { /* fallthrough */ } + ii_item(*) => { /* fallthrough */ } ii_foreign(i) => { cx.map.insert(i.id, node_foreign_item(i, AbiSet::Intrinsic(), @@ -193,27 +190,6 @@ pub fn map_fn( node_arg(/* FIXME (#2543) */ copy *a, cx.local_id)); cx.local_id += 1u; } - match *fk { - visit::fk_dtor(generics, ref attrs, self_id, parent_id) => { - let dt = @spanned { - node: ast::struct_dtor_ { - id: id, - attrs: /* FIXME (#2543) */ vec::from_slice(*attrs), - self_id: self_id, - body: /* FIXME (#2543) */ copy *body, - }, - span: sp, - }; - cx.map.insert( - id, - node_dtor( - /* FIXME (#2543) */ copy *generics, - dt, - parent_id, - @/* FIXME (#2543) */ copy cx.path)); - } - _ => () - } visit::visit_fn(fk, decl, body, sp, id, cx, v); } @@ -411,9 +387,6 @@ pub fn node_id_to_str(map: map, id: node_id, itr: @ident_interner) -> ~str { Some(&node_local(_)) => { // add more info here fmt!("local (id=%?)", id) } - Some(&node_dtor(*)) => { // add more info here - fmt!("node_dtor (id=%?)", id) - } Some(&node_block(_)) => { fmt!("block") } diff --git a/src/libsyntax/ast_util.rs b/src/libsyntax/ast_util.rs index 148b713a4f58f..bf5381831d054 100644 --- a/src/libsyntax/ast_util.rs +++ b/src/libsyntax/ast_util.rs @@ -302,7 +302,6 @@ impl inlined_item_utils for inlined_item { ii_item(i) => /* FIXME (#2543) */ copy i.ident, ii_foreign(i) => /* FIXME (#2543) */ copy i.ident, ii_method(_, m) => /* FIXME (#2543) */ copy m.ident, - ii_dtor(_, nm, _, _) => /* FIXME (#2543) */ copy nm } } @@ -311,7 +310,6 @@ impl inlined_item_utils for inlined_item { ii_item(i) => i.id, ii_foreign(i) => i.id, ii_method(_, m) => m.id, - ii_dtor(ref dtor, _, _, _) => (*dtor).node.id } } @@ -320,10 +318,6 @@ impl inlined_item_utils for inlined_item { ii_item(i) => (v.visit_item)(i, e, v), ii_foreign(i) => (v.visit_foreign_item)(i, e, v), ii_method(_, m) => visit::visit_method_helper(m, e, v), - ii_dtor(/*bad*/ copy dtor, _, ref generics, parent_id) => { - visit::visit_struct_dtor_helper(dtor, generics, - parent_id, e, v); - } } } } @@ -359,20 +353,6 @@ pub fn operator_prec(op: ast::binop) -> uint { /// not appearing in the prior table. pub static as_prec: uint = 11u; -pub fn dtor_ty() -> @ast::Ty { - @ast::Ty {id: 0, node: ty_nil, span: dummy_sp()} -} - -pub fn dtor_dec() -> fn_decl { - let nil_t = dtor_ty(); - // dtor has no args - ast::fn_decl { - inputs: ~[], - output: nil_t, - cf: return_val, - } -} - pub fn empty_generics() -> Generics { Generics {lifetimes: opt_vec::Empty, ty_params: opt_vec::Empty} @@ -457,12 +437,6 @@ pub fn id_visitor(vfn: @fn(node_id)) -> visit::vt<()> { vfn(id); match *fk { - visit::fk_dtor(generics, _, self_id, parent_id) => { - visit_generics(generics); - vfn(id); - vfn(self_id); - vfn(parent_id.node); - } visit::fk_item_fn(_, generics, _, _) => { visit_generics(generics); } diff --git a/src/libsyntax/ext/pipes/pipec.rs b/src/libsyntax/ext/pipes/pipec.rs index 3311c61de8b64..3ad94905f7f78 100644 --- a/src/libsyntax/ext/pipes/pipec.rs +++ b/src/libsyntax/ext/pipes/pipec.rs @@ -431,7 +431,6 @@ impl gen_init for protocol { dummy_sp(), ast::struct_def { fields: fields, - dtor: None, ctor_id: None }, cx.strip_bounds(&generics)) diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs index d82608846ab98..adfc95f3e94d1 100644 --- a/src/libsyntax/fold.rs +++ b/src/libsyntax/fold.rs @@ -290,21 +290,8 @@ pub fn noop_fold_item_underscore(i: &item_, fld: @ast_fold) -> item_ { fn fold_struct_def(struct_def: @ast::struct_def, fld: @ast_fold) -> @ast::struct_def { - let dtor = do struct_def.dtor.map |dtor| { - let dtor_body = fld.fold_block(&dtor.node.body); - let dtor_id = fld.new_id(dtor.node.id); - spanned { - node: ast::struct_dtor_ { - body: dtor_body, - id: dtor_id, - .. copy dtor.node - }, - span: copy dtor.span - } - }; @ast::struct_def { fields: struct_def.fields.map(|f| fold_struct_field(*f, fld)), - dtor: dtor, ctor_id: struct_def.ctor_id.map(|cid| fld.new_id(*cid)), } } @@ -655,22 +642,9 @@ fn noop_fold_variant(v: &variant_, fld: @ast_fold) -> variant_ { }) } struct_variant_kind(struct_def) => { - let dtor = do struct_def.dtor.map |dtor| { - let dtor_body = fld.fold_block(&dtor.node.body); - let dtor_id = fld.new_id(dtor.node.id); - spanned { - node: ast::struct_dtor_ { - body: dtor_body, - id: dtor_id, - .. copy dtor.node - }, - .. copy *dtor - } - }; kind = struct_variant_kind(@ast::struct_def { fields: vec::map(struct_def.fields, |f| fld.fold_struct_field(*f)), - dtor: dtor, ctor_id: struct_def.ctor_id.map(|c| fld.new_id(*c)) }) } diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 1a4a15b3bf522..27a1cde2f9638 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -3346,7 +3346,6 @@ pub impl Parser { (class_name, item_struct(@ast::struct_def { fields: fields, - dtor: None, ctor_id: if is_tuple_like { Some(new_id) } else { None } }, generics), None) @@ -3803,7 +3802,6 @@ pub impl Parser { return @ast::struct_def { fields: fields, - dtor: None, ctor_id: None }; } diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index d5645ada9294a..f23badd046206 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -693,13 +693,6 @@ pub fn print_struct(s: @ps, nbsp(s); bopen(s); hardbreak_if_not_bol(s); - for struct_def.dtor.each |dtor| { - hardbreak_if_not_bol(s); - maybe_print_comment(s, dtor.span.lo); - print_outer_attributes(s, dtor.node.attrs); - head(s, ~"drop"); - print_block(s, &dtor.node.body); - } for struct_def.fields.each |field| { match field.node.kind { diff --git a/src/libsyntax/visit.rs b/src/libsyntax/visit.rs index 80df8fb91a515..71cfbab91089e 100644 --- a/src/libsyntax/visit.rs +++ b/src/libsyntax/visit.rs @@ -11,7 +11,6 @@ use abi::AbiSet; use ast::*; use ast; -use ast_util; use codemap::span; use parse; use opt_vec; @@ -39,13 +38,6 @@ pub enum fn_kind<'self> { // |x, y| ... fk_fn_block, - - fk_dtor( // class destructor - &'self Generics, - &'self [attribute], - node_id /* self id */, - def_id /* parent class id */ - ) } pub fn name_of_fn(fk: &fn_kind) -> ident { @@ -54,15 +46,13 @@ pub fn name_of_fn(fk: &fn_kind) -> ident { name } fk_anon(*) | fk_fn_block(*) => parse::token::special_idents::anon, - fk_dtor(*) => parse::token::special_idents::dtor } } pub fn generics_of_fn(fk: &fn_kind) -> Generics { match *fk { fk_item_fn(_, generics, _, _) | - fk_method(_, generics, _) | - fk_dtor(generics, _, _, _) => { + fk_method(_, generics, _) => { copy *generics } fk_anon(*) | fk_fn_block(*) => { @@ -369,25 +359,6 @@ pub fn visit_method_helper(m: &method, e: E, v: vt) { ); } -pub fn visit_struct_dtor_helper(dtor: struct_dtor, generics: &Generics, - parent_id: def_id, e: E, v: vt) { - (v.visit_fn)( - &fk_dtor( - generics, - dtor.node.attrs, - dtor.node.self_id, - parent_id - ), - &ast_util::dtor_dec(), - &dtor.node.body, - dtor.span, - dtor.node.id, - e, - v - ) - -} - pub fn visit_fn(fk: &fn_kind, decl: &fn_decl, body: &blk, _sp: span, _id: node_id, e: E, v: vt) { visit_fn_decl(decl, e, v); @@ -412,23 +383,14 @@ pub fn visit_trait_method(m: &trait_method, e: E, v: vt) { pub fn visit_struct_def( sd: @struct_def, _nm: ast::ident, - generics: &Generics, - id: node_id, + _generics: &Generics, + _id: node_id, e: E, v: vt ) { for sd.fields.each |f| { (v.visit_struct_field)(*f, e, v); } - for sd.dtor.each |dtor| { - visit_struct_dtor_helper( - *dtor, - generics, - ast_util::local_def(id), - e, - v - ) - } } pub fn visit_struct_field(sf: @struct_field, e: E, v: vt) { From 3e3e2f00250d77719598ad052bb2016d46e6a148 Mon Sep 17 00:00:00 2001 From: Erick Tryzelaar Date: Tue, 30 Apr 2013 20:20:08 -0700 Subject: [PATCH 103/410] allow parsing attributes on struct fields --- src/libsyntax/ast.rs | 1 + src/libsyntax/ext/pipes/pipec.rs | 3 ++- src/libsyntax/fold.rs | 7 ++++++- src/libsyntax/parse/obsolete.rs | 6 +++--- src/libsyntax/parse/parser.rs | 30 ++++++++++++++++++------------ src/libsyntax/print/pprust.rs | 1 + 6 files changed, 31 insertions(+), 17 deletions(-) diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index 71fd506ebede3..a853dbed2f123 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -1158,6 +1158,7 @@ pub struct struct_field_ { kind: struct_field_kind, id: node_id, ty: @Ty, + attrs: ~[attribute], } pub type struct_field = spanned; diff --git a/src/libsyntax/ext/pipes/pipec.rs b/src/libsyntax/ext/pipes/pipec.rs index 3ad94905f7f78..e876972fe6878 100644 --- a/src/libsyntax/ext/pipes/pipec.rs +++ b/src/libsyntax/ext/pipes/pipec.rs @@ -415,7 +415,8 @@ impl gen_init for protocol { ast::struct_immutable, ast::inherited), id: cx.next_id(), - ty: fty + ty: fty, + attrs: ~[], }, span: dummy_sp() } diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs index adfc95f3e94d1..36565395e5988 100644 --- a/src/libsyntax/fold.rs +++ b/src/libsyntax/fold.rs @@ -222,9 +222,12 @@ pub fn noop_fold_item(i: @item, fld: @ast_fold) -> Option<@item> { fn noop_fold_struct_field(sf: @struct_field, fld: @ast_fold) -> @struct_field { + let fold_attribute = |x| fold_attribute_(x, fld); + @spanned { node: ast::struct_field_ { kind: copy sf.node.kind, id: sf.node.id, - ty: fld.fold_ty(sf.node.ty) }, + ty: fld.fold_ty(sf.node.ty), + attrs: sf.node.attrs.map(|e| fold_attribute(*e)) }, span: sf.span } } @@ -309,6 +312,7 @@ fn fold_struct_field(f: @struct_field, fld: @ast_fold) -> @struct_field { kind: copy f.node.kind, id: fld.new_id(f.node.id), ty: fld.fold_ty(f.node.ty), + attrs: /* FIXME (#2543) */ copy f.node.attrs, }, span: fld.new_span(f.span), } @@ -757,6 +761,7 @@ impl ast_fold for AstFoldFns { kind: copy sf.node.kind, id: sf.node.id, ty: (self as @ast_fold).fold_ty(sf.node.ty), + attrs: copy sf.node.attrs, }, span: (self.new_span)(sf.span), } diff --git a/src/libsyntax/parse/obsolete.rs b/src/libsyntax/parse/obsolete.rs index ce21e0f672d45..c1afc53def0c2 100644 --- a/src/libsyntax/parse/obsolete.rs +++ b/src/libsyntax/parse/obsolete.rs @@ -18,7 +18,7 @@ removed. */ -use ast::{expr, expr_lit, lit_nil}; +use ast::{expr, expr_lit, lit_nil, attribute}; use ast; use codemap::{span, respan}; use parse::parser::Parser; @@ -282,13 +282,13 @@ pub impl Parser { } } - fn try_parse_obsolete_priv_section(&self) -> bool { + fn try_parse_obsolete_priv_section(&self, attrs: ~[attribute]) -> bool { if self.is_keyword(&~"priv") && self.look_ahead(1) == token::LBRACE { self.obsolete(copy *self.span, ObsoletePrivSection); self.eat_keyword(&~"priv"); self.bump(); while *self.token != token::RBRACE { - self.parse_single_struct_field(ast::private); + self.parse_single_struct_field(ast::private, attrs); } self.bump(); true diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 27a1cde2f9638..74af745840891 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -2520,7 +2520,9 @@ pub impl Parser { } // parse a structure field - fn parse_name_and_ty(&self, pr: visibility) -> @struct_field { + fn parse_name_and_ty(&self, + pr: visibility, + attrs: ~[attribute]) -> @struct_field { let mut is_mutbl = struct_immutable; let lo = self.span.lo; if self.eat_keyword(&~"mut") { @@ -2535,7 +2537,8 @@ pub impl Parser { @spanned(lo, self.last_span.hi, ast::struct_field_ { kind: named_field(name, is_mutbl, pr), id: self.get_id(), - ty: ty + ty: ty, + attrs: attrs, }) } @@ -3318,11 +3321,13 @@ pub impl Parser { &token::RPAREN, seq_sep_trailing_allowed(token::COMMA) ) |p| { + let attrs = self.parse_outer_attributes(); let lo = p.span.lo; let struct_field_ = ast::struct_field_ { kind: unnamed_field, id: self.get_id(), - ty: p.parse_ty(false) + ty: p.parse_ty(false), + attrs: attrs, }; @spanned(lo, p.span.hi, struct_field_) }; @@ -3359,12 +3364,14 @@ pub impl Parser { } // parse a structure field declaration - fn parse_single_struct_field(&self, vis: visibility) -> @struct_field { + fn parse_single_struct_field(&self, + vis: visibility, + attrs: ~[attribute]) -> @struct_field { if self.eat_obsolete_ident("let") { self.obsolete(*self.last_span, ObsoleteLet); } - let a_var = self.parse_name_and_ty(vis); + let a_var = self.parse_name_and_ty(vis, attrs); match *self.token { token::SEMI => { self.obsolete(copy *self.span, ObsoleteFieldTerminator); @@ -3390,26 +3397,25 @@ pub impl Parser { // parse an element of a struct definition fn parse_struct_decl_field(&self) -> ~[@struct_field] { - if self.try_parse_obsolete_priv_section() { + let attrs = self.parse_outer_attributes(); + + if self.try_parse_obsolete_priv_section(attrs) { return ~[]; } - // Need this to parse comments on fields. - let _attrs = self.parse_outer_attributes(); - if self.eat_keyword(&~"priv") { - return ~[self.parse_single_struct_field(private)] + return ~[self.parse_single_struct_field(private, attrs)] } if self.eat_keyword(&~"pub") { - return ~[self.parse_single_struct_field(public)]; + return ~[self.parse_single_struct_field(public, attrs)]; } if self.try_parse_obsolete_struct_ctor() { return ~[]; } - return ~[self.parse_single_struct_field(inherited)]; + return ~[self.parse_single_struct_field(inherited, attrs)]; } // parse visiility: PUB, PRIV, or nothing diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index f23badd046206..ab958d8b5cef5 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -700,6 +700,7 @@ pub fn print_struct(s: @ps, ast::named_field(ident, mutability, visibility) => { hardbreak_if_not_bol(s); maybe_print_comment(s, field.span.lo); + print_outer_attributes(s, field.node.attrs); print_visibility(s, visibility); if mutability == ast::struct_mutable { word_nbsp(s, ~"mut"); From 5fee32457fdb9ad495c9f19fa59e8b9b6c34f48b Mon Sep 17 00:00:00 2001 From: Erick Tryzelaar Date: Tue, 30 Apr 2013 22:42:36 -0700 Subject: [PATCH 104/410] syntax: remove parse::token::{dtor,literally_dtor} --- src/libsyntax/parse/token.rs | 145 +++++++++++++++++------------------ 1 file changed, 70 insertions(+), 75 deletions(-) diff --git a/src/libsyntax/parse/token.rs b/src/libsyntax/parse/token.rs index 0327a3b80da87..4c1a92f898e2d 100644 --- a/src/libsyntax/parse/token.rs +++ b/src/libsyntax/parse/token.rs @@ -305,50 +305,47 @@ pub fn is_bar(t: &Token) -> bool { pub mod special_idents { use ast::ident; - pub static underscore : ident = ident { repr: 0u, ctxt: 0}; - pub static anon : ident = ident { repr: 1u, ctxt: 0}; - pub static dtor : ident = ident { repr: 2u, ctxt: 0}; // 'drop', but that's - // reserved - pub static invalid : ident = ident { repr: 3u, ctxt: 0}; // '' - pub static unary : ident = ident { repr: 4u, ctxt: 0}; - pub static not_fn : ident = ident { repr: 5u, ctxt: 0}; - pub static idx_fn : ident = ident { repr: 6u, ctxt: 0}; - pub static unary_minus_fn : ident = ident { repr: 7u, ctxt: 0}; - pub static clownshoes_extensions : ident = ident { repr: 8u, ctxt: 0}; - - pub static self_ : ident = ident { repr: 9u, ctxt: 0}; // 'self' + pub static underscore : ident = ident { repr: 0, ctxt: 0}; + pub static anon : ident = ident { repr: 1, ctxt: 0}; + pub static invalid : ident = ident { repr: 2, ctxt: 0}; // '' + pub static unary : ident = ident { repr: 3, ctxt: 0}; + pub static not_fn : ident = ident { repr: 4, ctxt: 0}; + pub static idx_fn : ident = ident { repr: 5, ctxt: 0}; + pub static unary_minus_fn : ident = ident { repr: 6, ctxt: 0}; + pub static clownshoes_extensions : ident = ident { repr: 7, ctxt: 0}; + + pub static self_ : ident = ident { repr: 8, ctxt: 0}; // 'self' /* for matcher NTs */ - pub static item : ident = ident { repr: 10u, ctxt: 0}; - pub static block : ident = ident { repr: 11u, ctxt: 0}; - pub static stmt : ident = ident { repr: 12u, ctxt: 0}; - pub static pat : ident = ident { repr: 13u, ctxt: 0}; - pub static expr : ident = ident { repr: 14u, ctxt: 0}; - pub static ty : ident = ident { repr: 15u, ctxt: 0}; - pub static ident : ident = ident { repr: 16u, ctxt: 0}; - pub static path : ident = ident { repr: 17u, ctxt: 0}; - pub static tt : ident = ident { repr: 18u, ctxt: 0}; - pub static matchers : ident = ident { repr: 19u, ctxt: 0}; - - pub static str : ident = ident { repr: 20u, ctxt: 0}; // for the type + pub static item : ident = ident { repr: 9, ctxt: 0}; + pub static block : ident = ident { repr: 10, ctxt: 0}; + pub static stmt : ident = ident { repr: 11, ctxt: 0}; + pub static pat : ident = ident { repr: 12, ctxt: 0}; + pub static expr : ident = ident { repr: 13, ctxt: 0}; + pub static ty : ident = ident { repr: 14, ctxt: 0}; + pub static ident : ident = ident { repr: 15, ctxt: 0}; + pub static path : ident = ident { repr: 16, ctxt: 0}; + pub static tt : ident = ident { repr: 17, ctxt: 0}; + pub static matchers : ident = ident { repr: 18, ctxt: 0}; + + pub static str : ident = ident { repr: 19, ctxt: 0}; // for the type /* outside of libsyntax */ - pub static ty_visitor : ident = ident { repr: 21u, ctxt: 0}; - pub static arg : ident = ident { repr: 22u, ctxt: 0}; - pub static descrim : ident = ident { repr: 23u, ctxt: 0}; - pub static clownshoe_abi : ident = ident { repr: 24u, ctxt: 0}; - pub static clownshoe_stack_shim : ident = ident { repr: 25u, ctxt: 0}; - pub static tydesc : ident = ident { repr: 26u, ctxt: 0}; - pub static literally_dtor : ident = ident { repr: 27u, ctxt: 0}; - pub static main : ident = ident { repr: 28u, ctxt: 0}; - pub static opaque : ident = ident { repr: 29u, ctxt: 0}; - pub static blk : ident = ident { repr: 30u, ctxt: 0}; - pub static static : ident = ident { repr: 31u, ctxt: 0}; - pub static intrinsic : ident = ident { repr: 32u, ctxt: 0}; - pub static clownshoes_foreign_mod: ident = ident { repr: 33u, ctxt: 0}; - pub static unnamed_field: ident = ident { repr: 34u, ctxt: 0}; - pub static c_abi: ident = ident { repr: 35u, ctxt: 0}; - pub static type_self: ident = ident { repr: 36u, ctxt: 0}; // `Self` + pub static ty_visitor : ident = ident { repr: 20, ctxt: 0}; + pub static arg : ident = ident { repr: 21, ctxt: 0}; + pub static descrim : ident = ident { repr: 22, ctxt: 0}; + pub static clownshoe_abi : ident = ident { repr: 23, ctxt: 0}; + pub static clownshoe_stack_shim : ident = ident { repr: 24, ctxt: 0}; + pub static tydesc : ident = ident { repr: 25, ctxt: 0}; + pub static main : ident = ident { repr: 26, ctxt: 0}; + pub static opaque : ident = ident { repr: 27, ctxt: 0}; + pub static blk : ident = ident { repr: 28, ctxt: 0}; + pub static static : ident = ident { repr: 29, ctxt: 0}; + pub static intrinsic : ident = ident { repr: 30, ctxt: 0}; + pub static clownshoes_foreign_mod: ident = ident { repr: 31, ctxt: 0}; + pub static unnamed_field: ident = ident { repr: 32, ctxt: 0}; + pub static c_abi: ident = ident { repr: 33, ctxt: 0}; + pub static type_self: ident = ident { repr: 34, ctxt: 0}; // `Self` } pub struct StringRef<'self>(&'self str); @@ -426,41 +423,39 @@ pub fn mk_fresh_ident_interner() -> @ident_interner { let init_vec = ~[ @~"_", // 0 @~"anon", // 1 - @~"drop", // 2 - @~"", // 3 - @~"unary", // 4 - @~"!", // 5 - @~"[]", // 6 - @~"unary-", // 7 - @~"__extensions__", // 8 - @~"self", // 9 - @~"item", // 10 - @~"block", // 11 - @~"stmt", // 12 - @~"pat", // 13 - @~"expr", // 14 - @~"ty", // 15 - @~"ident", // 16 - @~"path", // 17 - @~"tt", // 18 - @~"matchers", // 19 - @~"str", // 20 - @~"TyVisitor", // 21 - @~"arg", // 22 - @~"descrim", // 23 - @~"__rust_abi", // 24 - @~"__rust_stack_shim", // 25 - @~"TyDesc", // 26 - @~"dtor", // 27 - @~"main", // 28 - @~"", // 29 - @~"blk", // 30 - @~"static", // 31 - @~"intrinsic", // 32 - @~"__foreign_mod__", // 33 - @~"__field__", // 34 - @~"C", // 35 - @~"Self", // 36 + @~"", // 2 + @~"unary", // 3 + @~"!", // 4 + @~"[]", // 5 + @~"unary-", // 6 + @~"__extensions__", // 7 + @~"self", // 8 + @~"item", // 9 + @~"block", // 10 + @~"stmt", // 11 + @~"pat", // 12 + @~"expr", // 13 + @~"ty", // 14 + @~"ident", // 15 + @~"path", // 16 + @~"tt", // 17 + @~"matchers", // 18 + @~"str", // 19 + @~"TyVisitor", // 20 + @~"arg", // 21 + @~"descrim", // 22 + @~"__rust_abi", // 23 + @~"__rust_stack_shim", // 24 + @~"TyDesc", // 25 + @~"main", // 26 + @~"", // 27 + @~"blk", // 28 + @~"static", // 29 + @~"intrinsic", // 30 + @~"__foreign_mod__", // 31 + @~"__field__", // 32 + @~"C", // 33 + @~"Self", // 34 ]; let rv = @ident_interner { From e9688fcfe3d345ae34e25c3bd51f878be4410d96 Mon Sep 17 00:00:00 2001 From: Erick Tryzelaar Date: Tue, 30 Apr 2013 22:47:09 -0700 Subject: [PATCH 105/410] remove some warnings --- src/compiletest/header.rs | 3 +-- src/compiletest/runtest.rs | 2 +- src/libsyntax/ast_util.rs | 2 +- src/libsyntax/parse/mod.rs | 2 +- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/compiletest/header.rs b/src/compiletest/header.rs index b0d04c6739b4a..b29e1c77be35e 100644 --- a/src/compiletest/header.rs +++ b/src/compiletest/header.rs @@ -82,14 +82,13 @@ pub fn load_props(testfile: &Path) -> TestProps { } pub fn is_test_ignored(config: config, testfile: &Path) -> bool { - let mut found = false; for iter_header(testfile) |ln| { if parse_name_directive(ln, ~"xfail-test") { return true; } if parse_name_directive(ln, xfail_target()) { return true; } if config.mode == common::mode_pretty && parse_name_directive(ln, ~"xfail-pretty") { return true; } }; - return found; + return true; fn xfail_target() -> ~str { ~"xfail-" + str::from_slice(os::SYSNAME) diff --git a/src/compiletest/runtest.rs b/src/compiletest/runtest.rs index fef4cabf7fd6d..5805c1730296c 100644 --- a/src/compiletest/runtest.rs +++ b/src/compiletest/runtest.rs @@ -106,7 +106,7 @@ fn run_rpass_test(config: config, props: TestProps, testfile: &Path) { fatal_ProcRes(~"test run failed!", ProcRes); } } else { - let mut ProcRes = jit_test(config, props, testfile); + let ProcRes = jit_test(config, props, testfile); if ProcRes.status != 0 { fatal_ProcRes(~"jit failed!", ProcRes); } } diff --git a/src/libsyntax/ast_util.rs b/src/libsyntax/ast_util.rs index bf5381831d054..283c232fb3f0e 100644 --- a/src/libsyntax/ast_util.rs +++ b/src/libsyntax/ast_util.rs @@ -11,7 +11,7 @@ use ast::*; use ast; use ast_util; -use codemap::{span, dummy_sp, spanned}; +use codemap::{span, spanned}; use parse::token; use visit; use opt_vec; diff --git a/src/libsyntax/parse/mod.rs b/src/libsyntax/parse/mod.rs index 7e7931bbb606b..5d51a54d770b1 100644 --- a/src/libsyntax/parse/mod.rs +++ b/src/libsyntax/parse/mod.rs @@ -24,7 +24,7 @@ use parse::token::{ident_interner, mk_ident_interner}; use core::io; use core::option::{None, Option, Some}; use core::path::Path; -use core::result::{Err, Ok, Result}; +use core::result::{Err, Ok}; pub mod lexer; pub mod parser; From e7a3bbd76c77fa7a878ecd86dcb5c772164cbb51 Mon Sep 17 00:00:00 2001 From: Erick Tryzelaar Date: Tue, 30 Apr 2013 23:30:04 -0700 Subject: [PATCH 106/410] rustdoc: Remove a now invalid test --- src/librustdoc/tystr_pass.rs | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/librustdoc/tystr_pass.rs b/src/librustdoc/tystr_pass.rs index a6fbee81bc8af..def32bdfd44d6 100644 --- a/src/librustdoc/tystr_pass.rs +++ b/src/librustdoc/tystr_pass.rs @@ -434,13 +434,6 @@ mod test { "struct S {")); } - #[test] - fn should_not_serialize_struct_drop_blocks() { - // All we care about are the fields - let doc = mk_doc(~"struct S { field: (), drop { } }"); - assert!(!(&doc.cratemod().structs()[0].sig).get().contains("drop")); - } - #[test] fn should_not_serialize_struct_attrs() { // All we care about are the fields From 7c9d089ee732c2930898574d9ecedbb01efe0eb9 Mon Sep 17 00:00:00 2001 From: Erick Tryzelaar Date: Wed, 1 May 2013 07:49:10 -0700 Subject: [PATCH 107/410] pipes: use finally to fix pipes::try_recv --- src/libcore/pipes.rs | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/src/libcore/pipes.rs b/src/libcore/pipes.rs index 82dc598c750eb..145997fcb4bd5 100644 --- a/src/libcore/pipes.rs +++ b/src/libcore/pipes.rs @@ -88,6 +88,7 @@ use kinds::Owned; use libc; use ops::Drop; use option::{None, Option, Some}; +use unstable::finally::Finally; use unstable::intrinsics; use ptr; use task; @@ -396,28 +397,22 @@ pub fn try_recv(p: RecvPacketBuffered) let p_ = p.unwrap(); let p = unsafe { &*p_ }; - struct DropState<'self> { - p: &'self PacketHeader, - } - - #[unsafe_destructor] - impl<'self> Drop for DropState<'self> { - fn finalize(&self) { - unsafe { - if task::failing() { - self.p.state = Terminated; - let old_task = swap_task(&mut self.p.blocked_task, - ptr::null()); - if !old_task.is_null() { - rustrt::rust_task_deref(old_task); - } + do (|| { + try_recv_(p) + }).finally { + unsafe { + if task::failing() { + p.header.state = Terminated; + let old_task = swap_task(&mut p.header.blocked_task, ptr::null()); + if !old_task.is_null() { + rustrt::rust_task_deref(old_task); } } } } +} - let _drop_state = DropState { p: &p.header }; - +fn try_recv_(p: &Packet) -> Option { // optimistic path match p.header.state { Full => { @@ -454,7 +449,7 @@ pub fn try_recv(p: RecvPacketBuffered) Blocked); match old_state { Empty => { - debug!("no data available on %?, going to sleep.", p_); + debug!("no data available on %?, going to sleep.", p); if count == 0 { wait_event(this); } From 3159335ac308d9e3a2d3ada3b9354bf160debbdc Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Wed, 1 May 2013 10:31:10 -0400 Subject: [PATCH 108/410] avoid broken += operator, bogus use of const --- src/test/run-pass/auto-ref-slice-plus-ref.rs | 2 +- src/test/run-pass/lambda-infer-unresolved.rs | 2 +- src/test/run-pass/reflect-visit-data.rs | 16 ++++++++-------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/test/run-pass/auto-ref-slice-plus-ref.rs b/src/test/run-pass/auto-ref-slice-plus-ref.rs index 07629651e5605..58a477900c324 100644 --- a/src/test/run-pass/auto-ref-slice-plus-ref.rs +++ b/src/test/run-pass/auto-ref-slice-plus-ref.rs @@ -23,7 +23,7 @@ impl<'self> MyIter for &'self [int] { impl<'self> MyIter for &'self str { fn test_imm(&self) { assert_eq!(*self, "test") } - fn test_const(&const self) { assert_eq!(self[0], 't') } + fn test_const(&const self) { assert_eq!(self[0], 't' as u8) } } pub fn main() { diff --git a/src/test/run-pass/lambda-infer-unresolved.rs b/src/test/run-pass/lambda-infer-unresolved.rs index 2e70e90038971..4aeeda8312cac 100644 --- a/src/test/run-pass/lambda-infer-unresolved.rs +++ b/src/test/run-pass/lambda-infer-unresolved.rs @@ -17,5 +17,5 @@ struct Refs { refs: ~[int], n: int } pub fn main() { let e = @mut Refs{refs: ~[], n: 0}; let f: @fn() = || error!(copy e.n); - e.refs += ~[1]; + e.refs.push(1); } diff --git a/src/test/run-pass/reflect-visit-data.rs b/src/test/run-pass/reflect-visit-data.rs index e520d221c9935..5b01d24aa8be1 100644 --- a/src/test/run-pass/reflect-visit-data.rs +++ b/src/test/run-pass/reflect-visit-data.rs @@ -513,16 +513,16 @@ impl TyVisitor for my_visitor { fn visit_bot(&self) -> bool { true } fn visit_nil(&self) -> bool { true } fn visit_bool(&self) -> bool { - do self.get::() |b| { - self.vals += ~[bool::to_str(b)]; - }; - true + do self.get::() |b| { + self.vals.push(bool::to_str(b)); + }; + true } fn visit_int(&self) -> bool { - do self.get::() |i| { - self.vals += ~[int::to_str(i)]; - }; - true + do self.get::() |i| { + self.vals.push(int::to_str(i)); + }; + true } fn visit_i8(&self) -> bool { true } fn visit_i16(&self) -> bool { true } From 38f93f2121e111dd9dd149f5bdeaa9a34a4e42f1 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Wed, 1 May 2013 13:48:00 -0400 Subject: [PATCH 109/410] wip---work on making rooting work properly --- src/libcore/num/int-template.rs | 4 + src/libcore/num/uint-template.rs | 4 + src/libcore/unstable/lang.rs | 67 ++++++++++++++--- src/librustc/middle/lang_items.rs | 22 ++++-- src/librustc/middle/trans/base.rs | 65 ++++------------- src/librustc/middle/trans/common.rs | 52 ++++++++----- src/librustc/middle/trans/datum.rs | 73 ++++++++++++------- .../borrowck-loan-rcvr-overloaded-op.rs | 5 +- 8 files changed, 175 insertions(+), 117 deletions(-) diff --git a/src/libcore/num/int-template.rs b/src/libcore/num/int-template.rs index 85489755fc7a9..77b4eab133865 100644 --- a/src/libcore/num/int-template.rs +++ b/src/libcore/num/int-template.rs @@ -200,6 +200,8 @@ impl Mul for T { #[inline(always)] fn mul(&self, other: &T) -> T { *self * *other } } + +#[cfg(notest)] impl Quot for T { /// /// Returns the integer quotient, truncated towards 0. As this behaviour reflects @@ -222,6 +224,8 @@ impl Quot for T { #[inline(always)] fn quot(&self, other: &T) -> T { *self / *other } } + +#[cfg(notest)] impl Rem for T { /// /// Returns the integer remainder after division, satisfying: diff --git a/src/libcore/num/uint-template.rs b/src/libcore/num/uint-template.rs index f975226cde63b..2d20444946865 100644 --- a/src/libcore/num/uint-template.rs +++ b/src/libcore/num/uint-template.rs @@ -165,10 +165,14 @@ impl Mul for T { #[inline(always)] fn mul(&self, other: &T) -> T { *self * *other } } + +#[cfg(notest)] impl Quot for T { #[inline(always)] fn quot(&self, other: &T) -> T { *self / *other } } + +#[cfg(notest)] impl Rem for T { #[inline(always)] fn rem(&self, other: &T) -> T { *self % *other } diff --git a/src/libcore/unstable/lang.rs b/src/libcore/unstable/lang.rs index 0705be7cdefe5..d0e3c2b06787f 100644 --- a/src/libcore/unstable/lang.rs +++ b/src/libcore/unstable/lang.rs @@ -10,6 +10,7 @@ //! Runtime calls emitted by the compiler. +use uint; use cast::transmute; use libc::{c_char, c_uchar, c_void, size_t, uintptr_t, c_int, STDERR_FILENO}; use managed::raw::BoxRepr; @@ -22,10 +23,9 @@ use task::rt::rust_get_task; #[allow(non_camel_case_types)] pub type rust_task = c_void; -#[cfg(target_word_size = "32")] -pub static FROZEN_BIT: uint = 0x80000000; -#[cfg(target_word_size = "64")] -pub static FROZEN_BIT: uint = 0x8000000000000000; +pub static FROZEN_BIT: uint = 1 << (uint::bits - 1); +pub static MUT_BIT: uint = 1 << (uint::bits - 2); +static ALL_BITS: uint = FROZEN_BIT | MUT_BIT; pub mod rustrt { use unstable::lang::rust_task; @@ -196,21 +196,51 @@ pub unsafe fn borrow_as_imm(a: *u8) { (*a).header.ref_count |= FROZEN_BIT; } +fn add_borrow_to_task_list(a: *mut BoxRepr, file: *c_char, line: size_t) { + do swap_task_borrow_list |borrow_list| { + let mut borrow_list = borrow_list; + borrow_list.push(BorrowRecord {box: a, file: file, line: line}); + borrow_list + } +} + #[cfg(not(stage0))] #[lang="borrow_as_imm"] #[inline(always)] -pub unsafe fn borrow_as_imm(a: *u8, file: *c_char, line: size_t) { +pub unsafe fn borrow_as_imm(a: *u8, file: *c_char, line: size_t) -> uint { let a: *mut BoxRepr = transmute(a); - (*a).header.ref_count |= FROZEN_BIT; - if ::rt::env::get().debug_borrows { - do swap_task_borrow_list |borrow_list| { - let mut borrow_list = borrow_list; - borrow_list.push(BorrowRecord {box: a, file: file, line: line}); - borrow_list + + let ref_count = (*a).header.ref_count; + if (ref_count & MUT_BIT) != 0 { + fail_borrowed(a, file, line); + } else { + (*a).header.ref_count |= FROZEN_BIT; + if ::rt::env::get().debug_borrows { + add_borrow_to_list(a, file, line); } } + ref_count } +#[cfg(not(stage0))] +#[lang="borrow_as_mut"] +#[inline(always)] +pub unsafe fn borrow_as_mut(a: *u8, file: *c_char, line: size_t) -> uint { + let a: *mut BoxRepr = transmute(a); + + let ref_count = (*a).header.ref_count; + if (ref_count & (MUT_BIT|FROZEN_BIT)) != 0 { + fail_borrowed(a, file, line); + } else { + (*a).header.ref_count |= (MUT_BIT|FROZEN_BIT); + if ::rt::env::get().debug_borrows { + add_borrow_to_list(a, file, line); + } + } + ref_count +} + +#[cfg(stage0)] #[lang="return_to_mut"] #[inline(always)] pub unsafe fn return_to_mut(a: *u8) { @@ -222,6 +252,21 @@ pub unsafe fn return_to_mut(a: *u8) { } } +#[cfg(not(stage0))] +#[lang="return_to_mut"] +#[inline(always)] +pub unsafe fn return_to_mut(a: *u8, old_ref_count: uint) { + // Sometimes the box is null, if it is conditionally frozen. + // See e.g. #4904. + if !a.is_null() { + let a: *mut BoxRepr = transmute(a); + + let ref_count = (*a).header.ref_count & !ALL_BITS; + let old_bits = old_ref_count & ALL_BITS; + (*a).header.ref_count = ref_count | old_bits; + } +} + #[cfg(stage0)] #[lang="check_not_borrowed"] #[inline(always)] diff --git a/src/librustc/middle/lang_items.rs b/src/librustc/middle/lang_items.rs index e7261d53952a2..0266b77997e7d 100644 --- a/src/librustc/middle/lang_items.rs +++ b/src/librustc/middle/lang_items.rs @@ -66,11 +66,12 @@ pub enum LangItem { MallocFnLangItem, // 28 FreeFnLangItem, // 29 BorrowAsImmFnLangItem, // 30 - ReturnToMutFnLangItem, // 31 - CheckNotBorrowedFnLangItem, // 32 - StrDupUniqFnLangItem, // 33 + BorrowAsMutFnLangItem, // 31 + ReturnToMutFnLangItem, // 32 + CheckNotBorrowedFnLangItem, // 33 + StrDupUniqFnLangItem, // 34 - StartFnLangItem, // 34 + StartFnLangItem, // 35 } pub struct LanguageItems { @@ -128,11 +129,12 @@ pub impl LanguageItems { 28 => "malloc", 29 => "free", 30 => "borrow_as_imm", - 31 => "return_to_mut", - 32 => "check_not_borrowed", - 33 => "strdup_uniq", + 31 => "borrow_as_mut", + 32 => "return_to_mut", + 33 => "check_not_borrowed", + 34 => "strdup_uniq", - 34 => "start", + 35 => "start", _ => "???" } @@ -237,6 +239,9 @@ pub impl LanguageItems { pub fn borrow_as_imm_fn(&const self) -> def_id { self.items[BorrowAsImmFnLangItem as uint].get() } + pub fn borrow_as_mut_fn(&const self) -> def_id { + self.items[BorrowAsMutFnLangItem as uint].get() + } pub fn return_to_mut_fn(&const self) -> def_id { self.items[ReturnToMutFnLangItem as uint].get() } @@ -292,6 +297,7 @@ fn LanguageItemCollector(crate: @crate, item_refs.insert(@~"malloc", MallocFnLangItem as uint); item_refs.insert(@~"free", FreeFnLangItem as uint); item_refs.insert(@~"borrow_as_imm", BorrowAsImmFnLangItem as uint); + item_refs.insert(@~"borrow_as_mut", BorrowAsMutFnLangItem as uint); item_refs.insert(@~"return_to_mut", ReturnToMutFnLangItem as uint); item_refs.insert(@~"check_not_borrowed", CheckNotBorrowedFnLangItem as uint); diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs index 1785feda7790c..7738e97779971 100644 --- a/src/librustc/middle/trans/base.rs +++ b/src/librustc/middle/trans/base.rs @@ -991,63 +991,30 @@ pub fn get_landing_pad(bcx: block) -> BasicBlockRef { return pad_bcx.llbb; } -// Arranges for the value found in `*root_loc` to be dropped once the scope -// associated with `scope_id` exits. This is used to keep boxes live when -// there are extant region pointers pointing at the interior. -// -// Note that `root_loc` is not the value itself but rather a pointer to the -// value. Generally it in alloca'd value. The reason for this is that the -// value is initialized in an inner block but may be freed in some outer -// block, so an SSA value that is valid in the inner block may not be valid in -// the outer block. In fact, the inner block may not even execute. Rather -// than generate the full SSA form, we just use an alloca'd value. -pub fn add_root_cleanup(bcx: block, - root_info: RootInfo, - root_loc: ValueRef, - ty: ty::t) { - - debug!("add_root_cleanup(bcx=%s, \ - scope=%d, \ - freezes=%?, \ - root_loc=%s, \ - ty=%s)", - bcx.to_str(), - root_info.scope, - root_info.freeze, - val_str(bcx.ccx().tn, root_loc), - ppaux::ty_to_str(bcx.ccx().tcx, ty)); - - let bcx_scope = find_bcx_for_scope(bcx, root_info.scope); - if root_info.freeze.is_some() { - add_clean_frozen_root(bcx_scope, root_loc, ty); - } else { - add_clean_temp_mem(bcx_scope, root_loc, ty); - } - - fn find_bcx_for_scope(bcx: block, scope_id: ast::node_id) -> block { - let mut bcx_sid = bcx; - loop { - bcx_sid = match bcx_sid.node_info { - Some(NodeInfo { id, _ }) if id == scope_id => { +pub fn find_bcx_for_scope(bcx: block, scope_id: ast::node_id) -> block { + let mut bcx_sid = bcx; + loop { + bcx_sid = match bcx_sid.node_info { + Some(NodeInfo { id, _ }) if id == scope_id => { return bcx_sid } - // NOTE This is messier than it ought to be and not really right - Some(NodeInfo { callee_id: Some(id), _ }) if id == scope_id => { - return bcx_sid - } + // NOTE This is messier than it ought to be and not really right + Some(NodeInfo { callee_id: Some(id), _ }) if id == scope_id => { + return bcx_sid + } - _ => { - match bcx_sid.parent { - None => bcx.tcx().sess.bug( - fmt!("no enclosing scope with id %d", scope_id)), - Some(bcx_par) => bcx_par + _ => { + match bcx_sid.parent { + None => bcx.tcx().sess.bug( + fmt!("no enclosing scope with id %d", scope_id)), + Some(bcx_par) => bcx_par + } } - } } } } -} + pub fn do_spill(bcx: block, v: ValueRef, t: ty::t) -> ValueRef { if ty::type_is_bot(t) { diff --git a/src/librustc/middle/trans/common.rs b/src/librustc/middle/trans/common.rs index 2ebd696dbfdef..d0da8a2e1ee74 100644 --- a/src/librustc/middle/trans/common.rs +++ b/src/librustc/middle/trans/common.rs @@ -467,28 +467,40 @@ pub fn add_clean_temp_mem(bcx: block, val: ValueRef, t: ty::t) { scope_clean_changed(scope_info); } } -pub fn add_clean_frozen_root(bcx: block, val: ValueRef, t: ty::t) { - debug!("add_clean_frozen_root(%s, %s, %s)", - bcx.to_str(), val_str(bcx.ccx().tn, val), - t.repr(bcx.tcx())); - let (root, rooted) = root_for_cleanup(bcx, val, t); - let cleanup_type = cleanup_type(bcx.tcx(), t); +pub fn add_clean_return_to_mut(bcx: block, + frozen_val_ref: ValueRef, + bits_val_ref: ValueRef) { + //! When an `@mut` has been frozen, we have to + //! call the lang-item `return_to_mut` when the + //! freeze goes out of scope. We need to pass + //! in both the value which was frozen (`frozen_val`) and + //! the value (`bits_val_ref`) which was returned when the + //! box was frozen initially. Here, both `frozen_val_ref` and + //! `bits_val_ref` are in fact pointers to stack slots. + + debug!("add_clean_return_to_mut(%s, %s, %s)", + bcx.to_str(), + val_str(bcx.ccx().tn, frozen_val_ref), + val_str(bcx.ccx().tn, bits_val_ref)); do in_scope_cx(bcx) |scope_info| { scope_info.cleanups.push( - clean_temp(val, |bcx| { - let bcx = callee::trans_lang_call( - bcx, - bcx.tcx().lang_items.return_to_mut_fn(), - ~[ - build::Load(bcx, - build::PointerCast(bcx, - root, - T_ptr(T_ptr(T_i8())))) - ], - expr::Ignore - ); - glue::drop_ty_root(bcx, root, rooted, t) - }, cleanup_type)); + clean_temp( + frozen_val_ref, + |bcx| { + callee::trans_lang_call( + bcx, + bcx.tcx().lang_items.return_to_mut_fn(), + ~[ + build::Load(bcx, + build::PointerCast(bcx, + frozen_val_ref, + T_ptr(T_ptr(T_i8())))), + build::Load(bcx, bits_val_ref) + ], + expr::Ignore + ) + }, + normal_exit_only)); scope_clean_changed(scope_info); } } diff --git a/src/librustc/middle/trans/datum.rs b/src/librustc/middle/trans/datum.rs index ae71a3e6c22c0..94bff65843b24 100644 --- a/src/librustc/middle/trans/datum.rs +++ b/src/librustc/middle/trans/datum.rs @@ -87,7 +87,7 @@ use lib; use lib::llvm::ValueRef; -use middle::borrowck::{RootInfo, root_map_key}; +use middle::borrowck::{RootInfo, root_map_key, DynaImm, DynaMut}; use middle::trans::adt; use middle::trans::base::*; use middle::trans::build::*; @@ -517,7 +517,7 @@ pub impl Datum { } } - fn root(&self, bcx: block, span: span, root_info: RootInfo) -> block { + fn root(&self, mut bcx: block, span: span, root_info: RootInfo) -> block { /*! * * In some cases, borrowck will decide that an @T/@[]/@str @@ -535,34 +535,53 @@ pub impl Datum { root_info.scope)); } + // First, root the datum. Note that we must zero this value, + // because sometimes we root on one path but not another. + // See e.g. #4904. let scratch = scratch_datum(bcx, self.ty, true); self.copy_to_datum(bcx, INIT, scratch); - add_root_cleanup(bcx, root_info, scratch.val, scratch.ty); - - // If we need to freeze the box, do that now. - if root_info.freeze.is_some() { - // NOTE distinguish the two kinds of freezing here - - let loc = bcx.sess().parse_sess.cm.lookup_char_pos(span.lo); - let line = C_int(bcx.ccx(), loc.line as int); - let filename_cstr = C_cstr(bcx.ccx(), @/*bad*/copy loc.file.name); - let filename = PointerCast(bcx, filename_cstr, T_ptr(T_i8())); - - callee::trans_lang_call( - bcx, - bcx.tcx().lang_items.borrow_as_imm_fn(), - ~[ - Load(bcx, - PointerCast(bcx, - scratch.val, - T_ptr(T_ptr(T_i8())))), - filename, - line - ], - expr::Ignore) - } else { - bcx + let cleanup_bcx = find_bcx_for_scope(bcx, root_info.scope); + add_clean_temp_mem(cleanup_bcx, scratch.val, scratch.ty); + + // Now, consider also freezing it. + match root_info.freeze { + None => {} + Some(freeze_kind) => { + let loc = bcx.sess().parse_sess.cm.lookup_char_pos(span.lo); + let line = C_int(bcx.ccx(), loc.line as int); + let filename_cstr = C_cstr(bcx.ccx(), @/*bad*/copy loc.file.name); + let filename = PointerCast(bcx, filename_cstr, T_ptr(T_i8())); + + // in this case, we don't have to zero, because + // scratch.val will be NULL should the cleanup get + // called without the freezing actually occurring, and + // return_to_mut checks for this condition. + let scratch_bits = scratch_datum(bcx, ty::mk_uint(), false); + + let freeze_did = match freeze_kind { + DynaImm => bcx.tcx().lang_items.borrow_as_imm_fn(), + DynaMut => bcx.tcx().lang_items.borrow_as_mut_fn(), + }; + + bcx = callee::trans_lang_call( + bcx, + freeze_did, + ~[ + Load(bcx, + PointerCast(bcx, + scratch.val, + T_ptr(T_ptr(T_i8())))), + filename, + line + ], + expr::SaveIn(scratch_bits.val)); + + add_clean_return_to_mut( + cleanup_bcx, scratch.val, scratch_bits.val); + } } + + bcx } fn perform_write_guard(&self, bcx: block, span: span) -> block { diff --git a/src/test/compile-fail/borrowck-loan-rcvr-overloaded-op.rs b/src/test/compile-fail/borrowck-loan-rcvr-overloaded-op.rs index 8c9d3009e5e67..2c4ae242fb483 100644 --- a/src/test/compile-fail/borrowck-loan-rcvr-overloaded-op.rs +++ b/src/test/compile-fail/borrowck-loan-rcvr-overloaded-op.rs @@ -40,10 +40,11 @@ fn b() { let q = &mut p; - p + 3; // ok for pure fns + p + 3; //~ ERROR cannot borrow `p` p.times(3); //~ ERROR cannot borrow `p` - q.x += 1; + *q + 3; // OK to use the new alias `q` + q.x += 1; // and OK to mutate it } fn c() { From 08dd625d455548c7a5795db930ebfc5e3b1eb9c4 Mon Sep 17 00:00:00 2001 From: Graydon Hoare Date: Wed, 1 May 2013 14:58:21 -0700 Subject: [PATCH 110/410] compiletest: stop ignoring all tests. --- src/compiletest/header.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiletest/header.rs b/src/compiletest/header.rs index b29e1c77be35e..28bbbda966340 100644 --- a/src/compiletest/header.rs +++ b/src/compiletest/header.rs @@ -88,7 +88,7 @@ pub fn is_test_ignored(config: config, testfile: &Path) -> bool { if config.mode == common::mode_pretty && parse_name_directive(ln, ~"xfail-pretty") { return true; } }; - return true; + return false; fn xfail_target() -> ~str { ~"xfail-" + str::from_slice(os::SYSNAME) From 046a285a4b6ae54aa8f8a1d4b0e1e8d22478b4f6 Mon Sep 17 00:00:00 2001 From: gifnksm Date: Tue, 30 Apr 2013 20:01:26 +0900 Subject: [PATCH 111/410] libstd: impl Clone for BigUint/BigInt and replace `copy` with `.clone()` --- src/libstd/num/bigint.rs | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/libstd/num/bigint.rs b/src/libstd/num/bigint.rs index fa9d6318cc947..e2a336027fdef 100644 --- a/src/libstd/num/bigint.rs +++ b/src/libstd/num/bigint.rs @@ -80,6 +80,7 @@ A big unsigned integer type. A BigUint-typed value BigUint { data: @[a, b, c] } represents a number (a + b * BigDigit::base + c * BigDigit::base^2). */ +#[deriving(Clone)] pub struct BigUint { priv data: ~[BigDigit] } @@ -680,7 +681,7 @@ priv fn get_radix_base(radix: uint) -> (uint, uint) { } /// A Sign is a BigInt's composing element. -#[deriving(Eq)] +#[deriving(Eq, Clone)] pub enum Sign { Minus, Zero, Plus } impl Ord for Sign { @@ -726,6 +727,7 @@ impl Neg for Sign { } /// A big signed integer type. +#[deriving(Clone)] pub struct BigInt { priv sign: Sign, priv data: BigUint @@ -825,8 +827,8 @@ impl Signed for BigInt { #[inline(always)] fn abs(&self) -> BigInt { match self.sign { - Plus | Zero => copy *self, - Minus => BigInt::from_biguint(Plus, copy self.data) + Plus | Zero => self.clone(), + Minus => BigInt::from_biguint(Plus, self.data.clone()) } } @@ -850,8 +852,8 @@ impl Add for BigInt { #[inline(always)] fn add(&self, other: &BigInt) -> BigInt { match (self.sign, other.sign) { - (Zero, _) => copy *other, - (_, Zero) => copy *self, + (Zero, _) => other.clone(), + (_, Zero) => self.clone(), (Plus, Plus) => BigInt::from_biguint(Plus, self.data + other.data), (Plus, Minus) => self - (-*other), @@ -866,7 +868,7 @@ impl Sub for BigInt { fn sub(&self, other: &BigInt) -> BigInt { match (self.sign, other.sign) { (Zero, _) => -other, - (_, Zero) => copy *self, + (_, Zero) => self.clone(), (Plus, Plus) => match self.data.cmp(&other.data) { Less => BigInt::from_biguint(Minus, other.data - self.data), Greater => BigInt::from_biguint(Plus, self.data - other.data), @@ -913,7 +915,7 @@ impl Rem for BigInt { impl Neg for BigInt { #[inline(always)] fn neg(&self) -> BigInt { - BigInt::from_biguint(self.sign.neg(), copy self.data) + BigInt::from_biguint(self.sign.neg(), self.data.clone()) } } @@ -1100,9 +1102,9 @@ pub impl BigInt { #[cfg(test)] mod biguint_tests { + use super::*; use core::num::{IntConvertible, Zero, One, FromStrRadix}; use core::cmp::{Less, Equal, Greater}; - use super::{BigUint, BigDigit}; #[test] fn test_from_slice() { @@ -1390,10 +1392,10 @@ mod biguint_tests { let c = BigUint::from_slice(cVec); if !a.is_zero() { - assert!(c.div_rem(&a) == (copy b, Zero::zero())); + assert!(c.div_rem(&a) == (b.clone(), Zero::zero())); } if !b.is_zero() { - assert!(c.div_rem(&b) == (copy a, Zero::zero())); + assert!(c.div_rem(&b) == (a.clone(), Zero::zero())); } } @@ -1555,7 +1557,7 @@ mod biguint_tests { #[cfg(test)] mod bigint_tests { - use super::{BigInt, BigUint, BigDigit, Sign, Minus, Zero, Plus}; + use super::*; use core::cmp::{Less, Equal, Greater}; use core::num::{IntConvertible, Zero, One, FromStrRadix}; From c64471ab8624e256c745dfd5d5e89ea6aa9e8228 Mon Sep 17 00:00:00 2001 From: Daniel Ralston Date: Wed, 1 May 2013 01:59:36 -0700 Subject: [PATCH 112/410] Add trait object field types to back/abi.rs, and use them I've added trt_field_vtable, trt_field_box, and trt_field_tydesc, and inserted them in place of the "magic numbers" used to access trait object fields through GEPi(). --- src/librustc/back/abi.rs | 7 +++++++ src/librustc/middle/trans/glue.rs | 12 ++++++------ src/librustc/middle/trans/meth.rs | 26 +++++++++++++++----------- 3 files changed, 28 insertions(+), 17 deletions(-) diff --git a/src/librustc/back/abi.rs b/src/librustc/back/abi.rs index 70a029ede6f8d..6d963d7cfd2cb 100644 --- a/src/librustc/back/abi.rs +++ b/src/librustc/back/abi.rs @@ -57,6 +57,13 @@ pub static n_tydesc_fields: uint = 8u; pub static fn_field_code: uint = 0u; pub static fn_field_box: uint = 1u; +// The three fields of a trait object/trait instance: vtable, box, and type +// description. +pub static trt_field_vtable: uint = 0u; +pub static trt_field_box: uint = 1u; +// This field is only present in unique trait objects, so it comes last. +pub static trt_field_tydesc: uint = 2u; + pub static vec_elt_fill: uint = 0u; pub static vec_elt_alloc: uint = 1u; diff --git a/src/librustc/middle/trans/glue.rs b/src/librustc/middle/trans/glue.rs index 4c5a17056b2ea..f1888084c0b05 100644 --- a/src/librustc/middle/trans/glue.rs +++ b/src/librustc/middle/trans/glue.rs @@ -549,12 +549,12 @@ pub fn make_drop_glue(bcx: block, v0: ValueRef, t: ty::t) { closure::make_closure_glue(bcx, v0, t, drop_ty) } ty::ty_trait(_, _, ty::BoxTraitStore, _) => { - let llbox = Load(bcx, GEPi(bcx, v0, [0u, 1u])); + let llbox = Load(bcx, GEPi(bcx, v0, [0u, abi::trt_field_box])); decr_refcnt_maybe_free(bcx, llbox, ty::mk_opaque_box(ccx.tcx)) } ty::ty_trait(_, _, ty::UniqTraitStore, _) => { - let lluniquevalue = GEPi(bcx, v0, [0, 1]); - let lltydesc = Load(bcx, GEPi(bcx, v0, [0, 2])); + let lluniquevalue = GEPi(bcx, v0, [0, abi::trt_field_box]); + let lltydesc = Load(bcx, GEPi(bcx, v0, [0, abi::trt_field_tydesc])); call_tydesc_glue_full(bcx, lluniquevalue, lltydesc, abi::tydesc_field_free_glue, None); bcx @@ -613,13 +613,13 @@ pub fn make_take_glue(bcx: block, v: ValueRef, t: ty::t) { closure::make_closure_glue(bcx, v, t, take_ty) } ty::ty_trait(_, _, ty::BoxTraitStore, _) => { - let llbox = Load(bcx, GEPi(bcx, v, [0u, 1u])); + let llbox = Load(bcx, GEPi(bcx, v, [0u, abi::trt_field_box])); incr_refcnt_of_boxed(bcx, llbox); bcx } ty::ty_trait(_, _, ty::UniqTraitStore, _) => { - let llval = GEPi(bcx, v, [0, 1]); - let lltydesc = Load(bcx, GEPi(bcx, v, [0, 2])); + let llval = GEPi(bcx, v, [0, abi::trt_field_box]); + let lltydesc = Load(bcx, GEPi(bcx, v, [0, abi::trt_field_tydesc])); call_tydesc_glue_full(bcx, llval, lltydesc, abi::tydesc_field_take_glue, None); bcx diff --git a/src/librustc/middle/trans/meth.rs b/src/librustc/middle/trans/meth.rs index 90f9f93be2b48..a90475d9ed085 100644 --- a/src/librustc/middle/trans/meth.rs +++ b/src/librustc/middle/trans/meth.rs @@ -637,14 +637,15 @@ pub fn trans_trait_callee_from_llval(bcx: block, val_str(bcx.ccx().tn, llpair)); let llvtable = Load(bcx, PointerCast(bcx, - GEPi(bcx, llpair, [0u, 0u]), + GEPi(bcx, llpair, + [0u, abi::trt_field_vtable]), T_ptr(T_ptr(T_vtable())))); // Load the box from the @Trait pair and GEP over the box header if // necessary: let mut llself; debug!("(translating trait callee) loading second index from pair"); - let llbox = Load(bcx, GEPi(bcx, llpair, [0u, 1u])); + let llbox = Load(bcx, GEPi(bcx, llpair, [0u, abi::trt_field_box])); // Munge `llself` appropriately for the type of `self` in the method. let self_mode; @@ -845,27 +846,30 @@ pub fn trans_trait_cast(bcx: block, match store { ty::RegionTraitStore(_) | ty::BoxTraitStore => { - let mut llboxdest = GEPi(bcx, lldest, [0u, 1u]); - // Just store the pointer into the pair. + let mut llboxdest = GEPi(bcx, lldest, [0u, abi::trt_field_box]); + // Just store the pointer into the pair. (Region/borrowed + // and boxed trait objects are represented as pairs, and + // have no type descriptor field.) llboxdest = PointerCast(bcx, llboxdest, T_ptr(type_of(bcx.ccx(), v_ty))); bcx = expr::trans_into(bcx, val, SaveIn(llboxdest)); } ty::UniqTraitStore => { - // Translate the uniquely-owned value into the second element of - // the triple. (The first element is the vtable.) - let mut llvaldest = GEPi(bcx, lldest, [0, 1]); + // Translate the uniquely-owned value in the + // triple. (Unique trait objects are represented as + // triples.) + let mut llvaldest = GEPi(bcx, lldest, [0, abi::trt_field_box]); llvaldest = PointerCast(bcx, llvaldest, T_ptr(type_of(bcx.ccx(), v_ty))); bcx = expr::trans_into(bcx, val, SaveIn(llvaldest)); - // Get the type descriptor of the wrapped value and store it into - // the third element of the triple as well. + // Get the type descriptor of the wrapped value and store + // it in the triple as well. let tydesc = get_tydesc(bcx.ccx(), v_ty); glue::lazily_emit_all_tydesc_glue(bcx.ccx(), tydesc); - let lltydescdest = GEPi(bcx, lldest, [0, 2]); + let lltydescdest = GEPi(bcx, lldest, [0, abi::trt_field_tydesc]); Store(bcx, tydesc.tydesc, lltydescdest); } } @@ -875,7 +879,7 @@ pub fn trans_trait_cast(bcx: block, let orig = resolve_vtable_in_fn_ctxt(bcx.fcx, orig); let vtable = get_vtable(bcx.ccx(), orig); Store(bcx, vtable, PointerCast(bcx, - GEPi(bcx, lldest, [0u, 0u]), + GEPi(bcx, lldest, [0u, abi::trt_field_vtable]), T_ptr(val_ty(vtable)))); bcx From 058346219a48ff6ac4c9c2fd38e8f478599ab078 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Tue, 9 Apr 2013 22:18:23 -0500 Subject: [PATCH 113/410] libc bindings for glob.h only tested on linux/x86_64, but i got the values for other platforms from their system header files. no bindings for win32, because win32 doesn't include glob.h. also, glob() takes a callback for error handling, but i'm just making this a *c_void for now, since i don't know how to represent c calling back into rust (if that's even currently possible). --- src/libcore/libc.rs | 108 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 106 insertions(+), 2 deletions(-) diff --git a/src/libcore/libc.rs b/src/libcore/libc.rs index 44864630f9873..b5c444dedf8a7 100644 --- a/src/libcore/libc.rs +++ b/src/libcore/libc.rs @@ -104,6 +104,7 @@ pub use libc::funcs::posix88::unistd::*; pub use libc::funcs::posix01::stat_::*; pub use libc::funcs::posix01::unistd::*; +pub use libc::funcs::posix01::glob::*; pub use libc::funcs::posix08::unistd::*; pub use libc::funcs::bsd44::*; @@ -210,7 +211,21 @@ pub mod types { #[cfg(target_os = "android")] pub mod os { pub mod common { - pub mod posix01 {} + pub mod posix01 { + use libc::types::common::c95::{c_void}; + use libc::types::os::arch::c95::{c_char, size_t}; + pub struct glob_t { + gl_pathc: size_t, + gl_pathv: **c_char, + gl_offs: size_t, + + __unused1: *c_void, + __unused2: *c_void, + __unused3: *c_void, + __unused4: *c_void, + __unused5: *c_void, + } + } } #[cfg(target_arch = "x86")] @@ -369,7 +384,25 @@ pub mod types { #[cfg(target_os = "freebsd")] pub mod os { pub mod common { - pub mod posix01 {} + pub mod posix01 { + use libc::types::common::c95::{c_void}; + use libc::types::os::arch::c95::{c_char, c_int, size_t}; + struct glob_t { + gl_pathc: size_t, + __unused1: size_t, + gl_offs: size_t, + __unused2: c_int, + gl_pathv: **c_char, + + __unused3: *c_void, + + __unused4: *c_void, + __unused5: *c_void, + __unused6: *c_void, + __unused7: *c_void, + __unused8: *c_void, + } + } } #[cfg(target_arch = "x86_64")] @@ -571,6 +604,23 @@ pub mod types { pub mod os { pub mod common { pub mod posix01 { + use libc::types::common::c95::{c_void}; + use libc::types::os::arch::c95::{c_char, c_int, size_t}; + struct glob_t { + gl_pathc: size_t, + __unused1: c_int, + gl_offs: size_t, + __unused2: c_int, + gl_pathv: **c_char, + + __unused3: *c_void, + + __unused4: *c_void, + __unused5: *c_void, + __unused6: *c_void, + __unused7: *c_void, + __unused8: *c_void, + } } } @@ -877,6 +927,18 @@ pub mod consts { } pub mod posix01 { pub static SIGTRAP : int = 5; + + pub static GLOB_ERR : int = 1 << 0; + pub static GLOB_MARK : int = 1 << 1; + pub static GLOB_NOSORT : int = 1 << 2; + pub static GLOB_DOOFFS : int = 1 << 3; + pub static GLOB_NOCHECK : int = 1 << 4; + pub static GLOB_APPEND : int = 1 << 5; + pub static GLOB_NOESCAPE : int = 1 << 6; + + pub static GLOB_NOSPACE : int = 1; + pub static GLOB_ABORTED : int = 2; + pub static GLOB_NOMATCH : int = 3; } pub mod posix08 { } @@ -956,6 +1018,18 @@ pub mod consts { } pub mod posix01 { pub static SIGTRAP : int = 5; + + pub static GLOB_APPEND : int = 0x0001; + pub static GLOB_DOOFFS : int = 0x0002; + pub static GLOB_ERR : int = 0x0004; + pub static GLOB_MARK : int = 0x0008; + pub static GLOB_NOCHECK : int = 0x0010; + pub static GLOB_NOSORT : int = 0x0020; + pub static GLOB_NOESCAPE : int = 0x2000; + + pub static GLOB_NOSPACE : int = -1; + pub static GLOB_ABORTED : int = -2; + pub static GLOB_NOMATCH : int = -3; } pub mod posix08 { } @@ -1036,6 +1110,18 @@ pub mod consts { } pub mod posix01 { pub static SIGTRAP : int = 5; + + pub static GLOB_APPEND : int = 0x0001; + pub static GLOB_DOOFFS : int = 0x0002; + pub static GLOB_ERR : int = 0x0004; + pub static GLOB_MARK : int = 0x0008; + pub static GLOB_NOCHECK : int = 0x0010; + pub static GLOB_NOSORT : int = 0x0020; + pub static GLOB_NOESCAPE : int = 0x2000; + + pub static GLOB_NOSPACE : int = -1; + pub static GLOB_ABORTED : int = -2; + pub static GLOB_NOMATCH : int = -3; } pub mod posix08 { } @@ -1606,6 +1692,21 @@ pub mod funcs { -> pid_t; } } + + #[nolink] + #[abi = "cdecl"] + pub mod glob { + use libc::types::common::c95::{c_void}; + use libc::types::os::arch::c95::{c_char, c_int}; + use libc::types::os::common::posix01::{glob_t}; + + pub extern { + unsafe fn glob(pattern: *c_char, flags: c_int, + errfunc: *c_void, // XXX callback + pglob: *mut glob_t); + unsafe fn globfree(pglob: *mut glob_t); + } + } } #[cfg(target_os = "win32")] @@ -1615,6 +1716,9 @@ pub mod funcs { pub mod unistd { } + + pub mod glob { + } } From 685baed34ed2d5a94675bb5773c9f968ea133533 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Wed, 10 Apr 2013 00:33:21 -0500 Subject: [PATCH 114/410] add a higher level glob() function to os this could probably use expansion - it just uses all of the default options, which is usually what we want, but not always. maybe add a separate function that takes more options? --- src/libcore/os.rs | 83 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/src/libcore/os.rs b/src/libcore/os.rs index 0455dabb7f013..8efae3e0e6890 100644 --- a/src/libcore/os.rs +++ b/src/libcore/os.rs @@ -38,6 +38,7 @@ use ptr; use str; use task; use uint; +use unstable::finally::Finally; use vec; pub use libc::fclose; @@ -1183,6 +1184,88 @@ pub fn set_args(new_args: ~[~str]) { } } +// FIXME #6100 we should really use an internal implementation of this - using +// the POSIX glob functions isn't portable to windows, probably has slight +// inconsistencies even where it is implemented, and makes extending +// functionality a lot more difficult +// FIXME #6101 also provide a non-allocating version - each_glob or so? +/// Returns a vector of Path objects that match the given glob pattern +#[cfg(target_os = "linux")] +#[cfg(target_os = "android")] +#[cfg(target_os = "freebsd")] +#[cfg(target_os = "macos")] +pub fn glob(pattern: &str) -> ~[Path] { + #[cfg(target_os = "linux")] + #[cfg(target_os = "android")] + fn default_glob_t () -> libc::glob_t { + libc::glob_t { + gl_pathc: 0, + gl_pathv: ptr::null(), + gl_offs: 0, + __unused1: ptr::null(), + __unused2: ptr::null(), + __unused3: ptr::null(), + __unused4: ptr::null(), + __unused5: ptr::null(), + } + } + + #[cfg(target_os = "freebsd")] + fn default_glob_t () -> libc::glob_t { + libc::glob_t { + gl_pathc: 0, + __unused1: 0, + gl_offs: 0, + __unused2: 0, + gl_pathv: ptr::null(), + __unused3: ptr::null(), + __unused4: ptr::null(), + __unused5: ptr::null(), + __unused6: ptr::null(), + __unused7: ptr::null(), + __unused8: ptr::null(), + } + } + + #[cfg(target_os = "macos")] + fn default_glob_t () -> libc::glob_t { + libc::glob_t { + gl_pathc: 0, + __unused1: 0, + gl_offs: 0, + __unused2: 0, + gl_pathv: ptr::null(), + __unused3: ptr::null(), + __unused4: ptr::null(), + __unused5: ptr::null(), + __unused6: ptr::null(), + __unused7: ptr::null(), + __unused8: ptr::null(), + } + } + + let mut g = default_glob_t(); + do str::as_c_str(pattern) |c_pattern| { + unsafe { libc::glob(c_pattern, 0, ptr::null(), &mut g) } + }; + do(|| { + let paths = unsafe { + vec::raw::from_buf_raw(g.gl_pathv, g.gl_pathc as uint) + }; + do paths.map |&c_str| { + Path(unsafe { str::raw::from_c_str(c_str) }) + } + }).finally { + unsafe { libc::globfree(&mut g) }; + } +} + +/// Returns a vector of Path objects that match the given glob pattern +#[cfg(target_os = "win32")] +pub fn glob(pattern: &str) -> ~[Path] { + fail!(~"glob() is unimplemented on Windows") +} + #[cfg(target_os = "macos")] extern { // These functions are in crt_externs.h. From ed81e3353ea8d92b61669dc8d8692d5e9b01a8f4 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Tue, 30 Apr 2013 22:26:43 -0500 Subject: [PATCH 115/410] glob_t should be public on all platforms --- src/libcore/libc.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libcore/libc.rs b/src/libcore/libc.rs index b5c444dedf8a7..999a5d9b350e4 100644 --- a/src/libcore/libc.rs +++ b/src/libcore/libc.rs @@ -387,7 +387,7 @@ pub mod types { pub mod posix01 { use libc::types::common::c95::{c_void}; use libc::types::os::arch::c95::{c_char, c_int, size_t}; - struct glob_t { + pub struct glob_t { gl_pathc: size_t, __unused1: size_t, gl_offs: size_t, @@ -606,7 +606,7 @@ pub mod types { pub mod posix01 { use libc::types::common::c95::{c_void}; use libc::types::os::arch::c95::{c_char, c_int, size_t}; - struct glob_t { + pub struct glob_t { gl_pathc: size_t, __unused1: c_int, gl_offs: size_t, From 1eb5efc5e25303bd72ce18ee3ecf82b109e2f67f Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Mon, 29 Apr 2013 00:18:53 +1000 Subject: [PATCH 116/410] libcore: add N(0,1) and Exp(1) distributions to core::rand. Sample from the normal and exponential distributions using the Ziggurat algorithm. --- src/etc/ziggurat_tables.py | 121 ++++++++ src/libcore/rand.rs | 6 + src/libcore/rand/distributions.rs | 148 ++++++++++ src/libcore/rand/ziggurat_tables.rs | 412 ++++++++++++++++++++++++++++ 4 files changed, 687 insertions(+) create mode 100755 src/etc/ziggurat_tables.py create mode 100644 src/libcore/rand/distributions.rs create mode 100644 src/libcore/rand/ziggurat_tables.rs diff --git a/src/etc/ziggurat_tables.py b/src/etc/ziggurat_tables.py new file mode 100755 index 0000000000000..c8f873037d8cc --- /dev/null +++ b/src/etc/ziggurat_tables.py @@ -0,0 +1,121 @@ +#!/usr/bin/env python +# xfail-license + +# This creates the tables used for distributions implemented using the +# ziggurat algorithm in `core::rand::distributions;`. They are +# (basically) the tables as used in the ZIGNOR variant (Doornik 2005). +# They are changed rarely, so the generated file should be checked in +# to git. +# +# It creates 3 tables: X as in the paper, F which is f(x_i), and +# F_DIFF which is f(x_i) - f(x_{i-1}). The latter two are just cached +# values which is not done in that paper (but is done in other +# variants). Note that the adZigR table is unnecessary because of +# algebra. +# +# It is designed to be compatible with Python 2 and 3. + +from math import exp, sqrt, log, floor +import random + +# The order should match the return value of `tables` +TABLE_NAMES = ['X', 'F', 'F_DIFF'] + +# The actual length of the table is 1 more, to stop +# index-out-of-bounds errors. This should match the bitwise operation +# to find `i` in `zigurrat` in `libstd/rand/mod.rs`. Also the *_R and +# *_V constants below depend on this value. +TABLE_LEN = 256 + +# equivalent to `zigNorInit` in Doornik2005, but generalised to any +# distribution. r = dR, v = dV, f = probability density function, +# f_inv = inverse of f +def tables(r, v, f, f_inv): + # compute the x_i + xvec = [0]*(TABLE_LEN+1) + + xvec[0] = v / f(r) + xvec[1] = r + + for i in range(2, TABLE_LEN): + last = xvec[i-1] + xvec[i] = f_inv(v / last + f(last)) + + # cache the f's + fvec = [0]*(TABLE_LEN+1) + fdiff = [0]*(TABLE_LEN+1) + for i in range(TABLE_LEN+1): + fvec[i] = f(xvec[i]) + if i > 0: + fdiff[i] = fvec[i] - fvec[i-1] + + return xvec, fvec, fdiff + +# Distributions +# N(0, 1) +def norm_f(x): + return exp(-x*x/2.0) +def norm_f_inv(y): + return sqrt(-2.0*log(y)) + +NORM_R = 3.6541528853610088 +NORM_V = 0.00492867323399 + +NORM = tables(NORM_R, NORM_V, + norm_f, norm_f_inv) + +# Exp(1) +def exp_f(x): + return exp(-x) +def exp_f_inv(y): + return -log(y) + +EXP_R = 7.69711747013104972 +EXP_V = 0.0039496598225815571993 + +EXP = tables(EXP_R, EXP_V, + exp_f, exp_f_inv) + + +# Output the tables/constants/types + +def render_static(name, type, value): + # no space or + return 'pub static %s: %s =%s;\n' % (name, type, value) + +# static `name`: [`type`, .. `len(values)`] = +# [values[0], ..., values[3], +# values[4], ..., values[7], +# ... ]; +def render_table(name, values): + rows = [] + # 4 values on each row + for i in range(0, len(values), 4): + row = values[i:i+4] + rows.append(', '.join('%.18f' % f for f in row)) + + rendered = '\n [%s]' % ',\n '.join(rows) + return render_static(name, '[f64, .. %d]' % len(values), rendered) + + +with open('ziggurat_tables.rs', 'w') as f: + f.write('''// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Tables for distributions which are sampled using the ziggurat +// algorithm. Autogenerated by `ziggurat_tables.py`. + +pub type ZigTable = &\'static [f64, .. %d]; +''' % (TABLE_LEN + 1)) + for name, tables, r in [('NORM', NORM, NORM_R), + ('EXP', EXP, EXP_R)]: + f.write(render_static('ZIG_%s_R' % name, 'f64', ' %.18f' % r)) + for (tabname, table) in zip(TABLE_NAMES, tables): + f.write(render_table('ZIG_%s_%s' % (name, tabname), table)) diff --git a/src/libcore/rand.rs b/src/libcore/rand.rs index 9fa099cabbfe9..94ba5ba31b756 100644 --- a/src/libcore/rand.rs +++ b/src/libcore/rand.rs @@ -16,6 +16,9 @@ and so can be used to generate any type that implements `Rand`. Type inference means that often a simple call to `rand::random()` or `rng.gen()` will suffice, but sometimes an annotation is required, e.g. `rand::random::()`. +See the `distributions` submodule for sampling random numbers from +distributions like normal and exponential. + # Examples ~~~ use core::rand::RngUtil; @@ -47,6 +50,9 @@ use util; use vec; use libc::size_t; +#[path="rand/distributions.rs"] +pub mod distributions; + /// A type that can be randomly generated using an Rng pub trait Rand { fn rand(rng: &R) -> Self; diff --git a/src/libcore/rand/distributions.rs b/src/libcore/rand/distributions.rs new file mode 100644 index 0000000000000..a644f60db69fb --- /dev/null +++ b/src/libcore/rand/distributions.rs @@ -0,0 +1,148 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! Sampling from random distributions + +// Some implementations use the Ziggurat method +// https://en.wikipedia.org/wiki/Ziggurat_algorithm +// +// The version used here is ZIGNOR [Doornik 2005, "An Improved +// Ziggurat Method to Generate Normal Random Samples"] which is slower +// (about double, it generates an extra random number) than the +// canonical version [Marsaglia & Tsang 2000, "The Ziggurat Method for +// Generating Random Variables"], but more robust. If one wanted, one +// could implement VIZIGNOR the ZIGNOR paper for more speed. + +use prelude::*; +use rand::{Rng,Rand}; + +mod ziggurat_tables; + +// inlining should mean there is no performance penalty for this +#[inline(always)] +fn ziggurat(rng: &R, + center_u: bool, + X: ziggurat_tables::ZigTable, + F: ziggurat_tables::ZigTable, + F_DIFF: ziggurat_tables::ZigTable, + pdf: &'static fn(f64) -> f64, // probability density function + zero_case: &'static fn(&R, f64) -> f64) -> f64 { + loop { + let u = if center_u {2.0 * rng.gen() - 1.0} else {rng.gen()}; + let i: uint = rng.gen::() & 0xff; + let x = u * X[i]; + + let test_x = if center_u {f64::abs(x)} else {x}; + + // algebraically equivalent to |u| < X[i+1]/X[i] (or u < X[i+1]/X[i]) + if test_x < X[i + 1] { + return x; + } + if i == 0 { + return zero_case(rng, u); + } + // algebraically equivalent to f1 + DRanU()*(f0 - f1) < 1 + if F[i+1] + F_DIFF[i+1] * rng.gen() < pdf(x) { + return x; + } + } +} + +/// A wrapper around an `f64` to generate N(0, 1) random numbers (a.k.a. a +/// standard normal, or Gaussian). Multiplying the generated values by the +/// desired standard deviation `sigma` then adding the desired mean `mu` will +/// give N(mu, sigma^2) distributed random numbers. +/// +/// Note that this has to be unwrapped before use as an `f64` (using either +/// `*` or `cast::transmute` is safe). +/// +/// # Example +/// +/// ~~~ +/// use core::rand::distributions::StandardNormal; +/// +/// fn main() { +/// let normal = 2.0 + (*rand::random::()) * 3.0; +/// println(fmt!("%f is from a N(2, 9) distribution", normal)) +/// } +/// ~~~ +pub struct StandardNormal(f64); + +impl Rand for StandardNormal { + fn rand(rng: &R) -> StandardNormal { + #[inline(always)] + fn pdf(x: f64) -> f64 { + f64::exp((-x*x/2.0) as f64) as f64 + } + #[inline(always)] + fn zero_case(rng: &R, u: f64) -> f64 { + // compute a random number in the tail by hand + + // strange initial conditions, because the loop is not + // do-while, so the condition should be true on the first + // run, they get overwritten anyway (0 < 1, so these are + // good). + let mut x = 1.0, y = 0.0; + + // XXX infinities? + while -2.0*y < x * x { + x = f64::ln(rng.gen()) / ziggurat_tables::ZIG_NORM_R; + y = f64::ln(rng.gen()); + } + if u < 0.0 {x-ziggurat_tables::ZIG_NORM_R} else {ziggurat_tables::ZIG_NORM_R-x} + } + + StandardNormal(ziggurat( + rng, + true, // this is symmetric + &ziggurat_tables::ZIG_NORM_X, + &ziggurat_tables::ZIG_NORM_F, &ziggurat_tables::ZIG_NORM_F_DIFF, + pdf, zero_case)) + } +} + +/// A wrapper around an `f64` to generate Exp(1) random numbers. Dividing by +/// the desired rate `lambda` will give Exp(lambda) distributed random +/// numbers. +/// +/// Note that this has to be unwrapped before use as an `f64` (using either +/// `*` or `cast::transmute` is safe). +/// +/// # Example +/// +/// ~~~ +/// use core::rand::distributions::Exp1; +/// +/// fn main() { +/// let exp2 = (*rand::random::()) * 0.5; +/// println(fmt!("%f is from a Exp(2) distribution", exp2)); +/// } +/// ~~~ +pub struct Exp1(f64); + +// This could be done via `-f64::ln(rng.gen::())` but that is slower. +impl Rand for Exp1 { + #[inline] + fn rand(rng: &R) -> Exp1 { + #[inline(always)] + fn pdf(x: f64) -> f64 { + f64::exp(-x) + } + #[inline(always)] + fn zero_case(rng: &R, _u: f64) -> f64 { + ziggurat_tables::ZIG_EXP_R - f64::ln(rng.gen()) + } + + Exp1(ziggurat(rng, false, + &ziggurat_tables::ZIG_EXP_X, + &ziggurat_tables::ZIG_EXP_F, &ziggurat_tables::ZIG_EXP_F_DIFF, + pdf, zero_case)) + } +} diff --git a/src/libcore/rand/ziggurat_tables.rs b/src/libcore/rand/ziggurat_tables.rs new file mode 100644 index 0000000000000..aca2457cac42c --- /dev/null +++ b/src/libcore/rand/ziggurat_tables.rs @@ -0,0 +1,412 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Tables for distributions which are sampled using the ziggurat +// algorithm. Autogenerated by `ziggurat_tables.py`. + +pub type ZigTable = &'static [f64, .. 257]; +pub static ZIG_NORM_R: f64 = 3.654152885361008796; +pub static ZIG_NORM_X: [f64, .. 257] = + [3.910757959537090045, 3.654152885361008796, 3.449278298560964462, 3.320244733839166074, + 3.224575052047029100, 3.147889289517149969, 3.083526132001233044, 3.027837791768635434, + 2.978603279880844834, 2.934366867207854224, 2.894121053612348060, 2.857138730872132548, + 2.822877396825325125, 2.790921174000785765, 2.760944005278822555, 2.732685359042827056, + 2.705933656121858100, 2.680514643284522158, 2.656283037575502437, 2.633116393630324570, + 2.610910518487548515, 2.589575986706995181, 2.569035452680536569, 2.549221550323460761, + 2.530075232158516929, 2.511544441625342294, 2.493583041269680667, 2.476149939669143318, + 2.459208374333311298, 2.442725318198956774, 2.426670984935725972, 2.411018413899685520, + 2.395743119780480601, 2.380822795170626005, 2.366237056715818632, 2.351967227377659952, + 2.337996148795031370, 2.324308018869623016, 2.310888250599850036, 2.297723348901329565, + 2.284800802722946056, 2.272108990226823888, 2.259637095172217780, 2.247375032945807760, + 2.235313384928327984, 2.223443340090905718, 2.211756642882544366, 2.200245546609647995, + 2.188902771624720689, 2.177721467738641614, 2.166695180352645966, 2.155817819875063268, + 2.145083634046203613, 2.134487182844320152, 2.124023315687815661, 2.113687150684933957, + 2.103474055713146829, 2.093379631137050279, 2.083399693996551783, 2.073530263516978778, + 2.063767547809956415, 2.054107931648864849, 2.044547965215732788, 2.035084353727808715, + 2.025713947862032960, 2.016433734904371722, 2.007240830558684852, 1.998132471356564244, + 1.989106007615571325, 1.980158896898598364, 1.971288697931769640, 1.962493064942461896, + 1.953769742382734043, 1.945116560006753925, 1.936531428273758904, 1.928012334050718257, + 1.919557336591228847, 1.911164563769282232, 1.902832208548446369, 1.894558525668710081, + 1.886341828534776388, 1.878180486290977669, 1.870072921069236838, 1.862017605397632281, + 1.854013059758148119, 1.846057850283119750, 1.838150586580728607, 1.830289919680666566, + 1.822474540091783224, 1.814703175964167636, 1.806974591348693426, 1.799287584547580199, + 1.791640986550010028, 1.784033659547276329, 1.776464495522344977, 1.768932414909077933, + 1.761436365316706665, 1.753975320315455111, 1.746548278279492994, 1.739154261283669012, + 1.731792314050707216, 1.724461502945775715, 1.717160915015540690, 1.709889657069006086, + 1.702646854797613907, 1.695431651932238548, 1.688243209434858727, 1.681080704722823338, + 1.673943330923760353, 1.666830296159286684, 1.659740822855789499, 1.652674147080648526, + 1.645629517902360339, 1.638606196773111146, 1.631603456932422036, 1.624620582830568427, + 1.617656869570534228, 1.610711622367333673, 1.603784156023583041, 1.596873794420261339, + 1.589979870021648534, 1.583101723393471438, 1.576238702733332886, 1.569390163412534456, + 1.562555467528439657, 1.555733983466554893, 1.548925085471535512, 1.542128153226347553, + 1.535342571438843118, 1.528567729435024614, 1.521803020758293101, 1.515047842773992404, + 1.508301596278571965, 1.501563685112706548, 1.494833515777718391, 1.488110497054654369, + 1.481394039625375747, 1.474683555695025516, 1.467978458615230908, 1.461278162507407830, + 1.454582081885523293, 1.447889631277669675, 1.441200224845798017, 1.434513276002946425, + 1.427828197027290358, 1.421144398672323117, 1.414461289772464658, 1.407778276843371534, + 1.401094763676202559, 1.394410150925071257, 1.387723835686884621, 1.381035211072741964, + 1.374343665770030531, 1.367648583594317957, 1.360949343030101844, 1.354245316759430606, + 1.347535871177359290, 1.340820365893152122, 1.334098153216083604, 1.327368577624624679, + 1.320630975217730096, 1.313884673146868964, 1.307128989027353860, 1.300363230327433728, + 1.293586693733517645, 1.286798664489786415, 1.279998415710333237, 1.273185207661843732, + 1.266358287014688333, 1.259516886060144225, 1.252660221891297887, 1.245787495544997903, + 1.238897891102027415, 1.231990574742445110, 1.225064693752808020, 1.218119375481726552, + 1.211153726239911244, 1.204166830140560140, 1.197157747875585931, 1.190125515422801650, + 1.183069142678760732, 1.175987612011489825, 1.168879876726833800, 1.161744859441574240, + 1.154581450355851802, 1.147388505416733873, 1.140164844363995789, 1.132909248648336975, + 1.125620459211294389, 1.118297174115062909, 1.110938046009249502, 1.103541679420268151, + 1.096106627847603487, 1.088631390649514197, 1.081114409698889389, 1.073554065787871714, + 1.065948674757506653, 1.058296483326006454, 1.050595664586207123, 1.042844313139370538, + 1.035040439828605274, 1.027181966030751292, 1.019266717460529215, 1.011292417434978441, + 1.003256679539591412, 0.995156999629943084, 0.986990747093846266, 0.978755155288937750, + 0.970447311058864615, 0.962064143217605250, 0.953602409875572654, 0.945058684462571130, + 0.936429340280896860, 0.927710533396234771, 0.918898183643734989, 0.909987953490768997, + 0.900975224455174528, 0.891855070726792376, 0.882622229578910122, 0.873271068082494550, + 0.863795545546826915, 0.854189171001560554, 0.844444954902423661, 0.834555354079518752, + 0.824512208745288633, 0.814306670128064347, 0.803929116982664893, 0.793369058833152785, + 0.782615023299588763, 0.771654424216739354, 0.760473406422083165, 0.749056662009581653, + 0.737387211425838629, 0.725446140901303549, 0.713212285182022732, 0.700661841097584448, + 0.687767892786257717, 0.674499822827436479, 0.660822574234205984, 0.646695714884388928, + 0.632072236375024632, 0.616896989996235545, 0.601104617743940417, 0.584616766093722262, + 0.567338257040473026, 0.549151702313026790, 0.529909720646495108, 0.509423329585933393, + 0.487443966121754335, 0.463634336771763245, 0.437518402186662658, 0.408389134588000746, + 0.375121332850465727, 0.335737519180459465, 0.286174591747260509, 0.215241895913273806, + 0.000000000000000000]; +pub static ZIG_NORM_F: [f64, .. 257] = + [0.000477467764586655, 0.001260285930498598, 0.002609072746106363, 0.004037972593371872, + 0.005522403299264754, 0.007050875471392110, 0.008616582769422917, 0.010214971439731100, + 0.011842757857943104, 0.013497450601780807, 0.015177088307982072, 0.016880083152595839, + 0.018605121275783350, 0.020351096230109354, 0.022117062707379922, 0.023902203305873237, + 0.025705804008632656, 0.027527235669693315, 0.029365939758230111, 0.031221417192023690, + 0.033093219458688698, 0.034980941461833073, 0.036884215688691151, 0.038802707404656918, + 0.040736110656078753, 0.042684144916619378, 0.044646552251446536, 0.046623094902089664, + 0.048613553216035145, 0.050617723861121788, 0.052635418276973649, 0.054666461325077916, + 0.056710690106399467, 0.058767952921137984, 0.060838108349751806, 0.062921024437977854, + 0.065016577971470438, 0.067124653828023989, 0.069245144397250269, 0.071377949059141965, + 0.073522973714240991, 0.075680130359194964, 0.077849336702372207, 0.080030515814947509, + 0.082223595813495684, 0.084428509570654661, 0.086645194450867782, 0.088873592068594229, + 0.091113648066700734, 0.093365311913026619, 0.095628536713353335, 0.097903279039215627, + 0.100189498769172020, 0.102487158942306270, 0.104796225622867056, 0.107116667775072880, + 0.109448457147210021, 0.111791568164245583, 0.114145977828255210, 0.116511665626037014, + 0.118888613443345698, 0.121276805485235437, 0.123676228202051403, 0.126086870220650349, + 0.128508722280473636, 0.130941777174128166, 0.133386029692162844, 0.135841476571757352, + 0.138308116449064322, 0.140785949814968309, 0.143274978974047118, 0.145775208006537926, + 0.148286642733128721, 0.150809290682410169, 0.153343161060837674, 0.155888264725064563, + 0.158444614156520225, 0.161012223438117663, 0.163591108232982951, 0.166181285765110071, + 0.168782774801850333, 0.171395595638155623, 0.174019770082499359, 0.176655321444406654, + 0.179302274523530397, 0.181960655600216487, 0.184630492427504539, 0.187311814224516926, + 0.190004651671193070, 0.192709036904328807, 0.195425003514885592, 0.198152586546538112, + 0.200891822495431333, 0.203642749311121501, 0.206405406398679298, 0.209179834621935651, + 0.211966076307852941, 0.214764175252008499, 0.217574176725178370, 0.220396127481011589, + 0.223230075764789593, 0.226076071323264877, 0.228934165415577484, 0.231804410825248525, + 0.234686861873252689, 0.237581574432173676, 0.240488605941449107, 0.243408015423711988, + 0.246339863502238771, 0.249284212419516704, 0.252241126056943765, 0.255210669955677150, + 0.258192911338648023, 0.261187919133763713, 0.264195763998317568, 0.267216518344631837, + 0.270250256366959984, 0.273297054069675804, 0.276356989296781264, 0.279430141762765316, + 0.282516593084849388, 0.285616426816658109, 0.288729728483353931, 0.291856585618280984, + 0.294997087801162572, 0.298151326697901342, 0.301319396102034120, 0.304501391977896274, + 0.307697412505553769, 0.310907558127563710, 0.314131931597630143, 0.317370638031222396, + 0.320623784958230129, 0.323891482377732021, 0.327173842814958593, 0.330470981380537099, + 0.333783015832108509, 0.337110066638412809, 0.340452257045945450, 0.343809713148291340, + 0.347182563958251478, 0.350570941482881204, 0.353974980801569250, 0.357394820147290515, + 0.360830600991175754, 0.364282468130549597, 0.367750569780596226, 0.371235057669821344, + 0.374736087139491414, 0.378253817247238111, 0.381788410875031348, 0.385340034841733958, + 0.388908860020464597, 0.392495061461010764, 0.396098818517547080, 0.399720314981931668, + 0.403359739222868885, 0.407017284331247953, 0.410693148271983222, 0.414387534042706784, + 0.418100649839684591, 0.421832709231353298, 0.425583931339900579, 0.429354541031341519, + 0.433144769114574058, 0.436954852549929273, 0.440785034667769915, 0.444635565397727750, + 0.448506701509214067, 0.452398706863882505, 0.456311852680773566, 0.460246417814923481, + 0.464202689050278838, 0.468180961407822172, 0.472181538469883255, 0.476204732721683788, + 0.480250865911249714, 0.484320269428911598, 0.488413284707712059, 0.492530263646148658, + 0.496671569054796314, 0.500837575128482149, 0.505028667945828791, 0.509245245998136142, + 0.513487720749743026, 0.517756517232200619, 0.522052074674794864, 0.526374847174186700, + 0.530725304406193921, 0.535103932383019565, 0.539511234259544614, 0.543947731192649941, + 0.548413963257921133, 0.552910490428519918, 0.557437893621486324, 0.561996775817277916, + 0.566587763258951771, 0.571211506738074970, 0.575868682975210544, 0.580559996103683473, + 0.585286179266300333, 0.590047996335791969, 0.594846243770991268, 0.599681752622167719, + 0.604555390700549533, 0.609468064928895381, 0.614420723892076803, 0.619414360609039205, + 0.624450015550274240, 0.629528779928128279, 0.634651799290960050, 0.639820277456438991, + 0.645035480824251883, 0.650298743114294586, 0.655611470583224665, 0.660975147780241357, + 0.666391343912380640, 0.671861719900766374, 0.677388036222513090, 0.682972161648791376, + 0.688616083008527058, 0.694321916130032579, 0.700091918140490099, 0.705928501336797409, + 0.711834248882358467, 0.717811932634901395, 0.723864533472881599, 0.729995264565802437, + 0.736207598131266683, 0.742505296344636245, 0.748892447223726720, 0.755373506511754500, + 0.761953346841546475, 0.768637315803334831, 0.775431304986138326, 0.782341832659861902, + 0.789376143571198563, 0.796542330428254619, 0.803849483176389490, 0.811307874318219935, + 0.818929191609414797, 0.826726833952094231, 0.834716292992930375, 0.842915653118441077, + 0.851346258465123684, 0.860033621203008636, 0.869008688043793165, 0.878309655816146839, + 0.887984660763399880, 0.898095921906304051, 0.908726440060562912, 0.919991505048360247, + 0.932060075968990209, 0.945198953453078028, 0.959879091812415930, 0.977101701282731328, + 1.000000000000000000]; +pub static ZIG_NORM_F_DIFF: [f64, .. 257] = + [0.000000000000000000, 0.000782818165911943, 0.001348786815607765, 0.001428899847265509, + 0.001484430705892882, 0.001528472172127356, 0.001565707298030807, 0.001598388670308183, + 0.001627786418212004, 0.001654692743837703, 0.001679637706201265, 0.001702994844613767, + 0.001725038123187510, 0.001745974954326004, 0.001765966477270568, 0.001785140598493315, + 0.001803600702759419, 0.001821431661060659, 0.001838704088536796, 0.001855477433793579, + 0.001871802266665008, 0.001887722003144375, 0.001903274226858077, 0.001918491715965767, + 0.001933403251421835, 0.001948034260540625, 0.001962407334827158, 0.001976542650643127, + 0.001990458313945481, 0.002004170645086643, 0.002017694415851860, 0.002031043048104267, + 0.002044228781321551, 0.002057262814738517, 0.002070155428613822, 0.002082916088226049, + 0.002095553533492583, 0.002108075856553551, 0.002120490569226280, 0.002132804661891696, + 0.002145024655099026, 0.002157156644953973, 0.002169206343177243, 0.002181179112575302, + 0.002193079998548175, 0.002204913757158977, 0.002216684880213121, 0.002228397617726446, + 0.002240055998106505, 0.002251663846325885, 0.002263224800326716, 0.002274742325862292, + 0.002286219729956393, 0.002297660173134250, 0.002309066680560787, 0.002320442152205823, + 0.002331789372137141, 0.002343111017035562, 0.002354409664009627, 0.002365687797781804, + 0.002376947817308683, 0.002388192041889739, 0.002399422716815966, 0.002410642018598946, + 0.002421852059823287, 0.002433054893654529, 0.002444252518034679, 0.002455446879594508, + 0.002466639877306970, 0.002477833365903986, 0.002489029159078809, 0.002500229032490808, + 0.002511434726590794, 0.002522647949281448, 0.002533870378427505, 0.002545103664226889, + 0.002556349431455662, 0.002567609281597438, 0.002578884794865288, 0.002590177532127119, + 0.002601489036740262, 0.002612820836305291, 0.002624174444343735, 0.002635551361907296, + 0.002646953079123743, 0.002658381076686089, 0.002669836827288052, 0.002681321797012387, + 0.002692837446676144, 0.002704385233135737, 0.002715966610556786, 0.002727583031652520, + 0.002739235948893221, 0.002750926815690169, 0.002762657087557796, 0.002774428223256353, + 0.002786241685917290, 0.002798098944155558, 0.002810001473169871, 0.002821950755833219, + 0.002833948283778004, 0.002845995558475284, 0.002858094092312607, 0.002870245409671041, + 0.002882451048004164, 0.002894712558920987, 0.002907031509275432, 0.002919409482262880, + 0.002931848078526783, 0.002944348917277934, 0.002956913637427061, 0.002969543898733384, + 0.002982241382970874, 0.002995007795115689, 0.003007844864553855, 0.003020754346314269, + 0.003033738022328147, 0.003046797702715820, 0.003059935227105459, 0.003073152465984053, + 0.003086451322084072, 0.003099833731808721, 0.003113301666695822, 0.003126857134927052, + 0.003140502182881588, 0.003154238896738770, 0.003168069404132778, 0.003181995875862154, + 0.003196020527657495, 0.003210145622009941, 0.003224373470066433, 0.003238706433592253, + 0.003253146927007733, 0.003267697419501892, 0.003282360437226572, 0.003297138565578506, + 0.003312034451571411, 0.003327050806304299, 0.003342190407532641, 0.003357456102345890, + 0.003372850809960137, 0.003388377524629727, 0.003404039318688046, 0.003419839345721265, + 0.003435780843885239, 0.003451867139373843, 0.003468101650046629, 0.003484487889225119, + 0.003501029469670069, 0.003517730107746697, 0.003534593627793237, 0.003551623966702611, + 0.003568825178730639, 0.003586201440546166, 0.003603757056536316, 0.003621496464384588, + 0.003639424240937217, 0.003657545108379068, 0.003675863940735269, 0.003694385770723563, + 0.003713115796977806, 0.003732059391668707, 0.003751222108547281, 0.003770609691440940, + 0.003790228083232539, 0.003810083435355216, 0.003830182117840641, 0.003850530729957835, + 0.003871136111486317, 0.003892005354668437, 0.003913145816891062, 0.003934565134149914, + 0.003956271235355358, 0.003978272357543333, 0.004000577062061084, 0.004023194251800533, + 0.004046133189565926, 0.004069403517661885, 0.004093015278800460, 0.004116978938436600, + 0.004141305408647655, 0.004166006073685835, 0.004191092817346642, 0.004216578052307351, + 0.004242474751606884, 0.004268796482457593, 0.004295557442594244, 0.004322772499391836, + 0.004350457232007221, 0.004378627976825644, 0.004407301876525049, 0.004436496933105327, + 0.004466232065271192, 0.004496527170598785, 0.004527403192966406, 0.004558882195791591, + 0.004590987441673855, 0.004623743479123199, 0.004657176237135574, 0.004691313128472929, + 0.004726183162616859, 0.004761817069491636, 0.004798247435199299, 0.004835508851176451, + 0.004873638078381815, 0.004912674228345848, 0.004952658963181422, 0.004993636716962402, + 0.005035654941235035, 0.005078764377854039, 0.005123019362831771, 0.005168478165478940, + 0.005215203367812893, 0.005263262290042703, 0.005312727468930079, 0.005363677197016692, + 0.005416196132139284, 0.005470375988385734, 0.005526316321746716, 0.005584125426278286, + 0.005643921359735682, 0.005705833121505521, 0.005770002010457520, 0.005836583196307310, + 0.005905747545561058, 0.005977683752542928, 0.006052600837980204, 0.006130731092920838, + 0.006212333565464245, 0.006297698213369562, 0.006387150879090475, 0.006481059288027780, + 0.006579840329791975, 0.006683968961788356, 0.006793989182803495, 0.006910527673723577, + 0.007034310911336661, 0.007166186857056056, 0.007307152748134871, 0.007458391141830445, + 0.007621317291194862, 0.007797642342679434, 0.007989459040836144, 0.008199360125510702, + 0.008430605346682607, 0.008687362737884952, 0.008975066840784529, 0.009300967772353674, + 0.009675004947253041, 0.010111261142904171, 0.010630518154258861, 0.011265064987797335, + 0.012068570920629962, 0.013138877484087819, 0.014680138359337902, 0.017222609470315398, + 0.022898298717268672]; +pub static ZIG_EXP_R: f64 = 7.697117470131050077; +pub static ZIG_EXP_X: [f64, .. 257] = + [8.697117470131052741, 7.697117470131050077, 6.941033629377212577, 6.478378493832569696, + 6.144164665772472667, 5.882144315795399869, 5.666410167454033697, 5.482890627526062488, + 5.323090505754398016, 5.181487281301500047, 5.054288489981304089, 4.938777085901250530, + 4.832939741025112035, 4.735242996601741083, 4.644491885420085175, 4.559737061707351380, + 4.480211746528421912, 4.405287693473573185, 4.334443680317273007, 4.267242480277365857, + 4.203313713735184365, 4.142340865664051464, 4.084051310408297830, 4.028208544647936762, + 3.974606066673788796, 3.923062500135489739, 3.873417670399509127, 3.825529418522336744, + 3.779270992411667862, 3.734528894039797375, 3.691201090237418825, 3.649195515760853770, + 3.608428813128909507, 3.568825265648337020, 3.530315889129343354, 3.492837654774059608, + 3.456332821132760191, 3.420748357251119920, 3.386035442460300970, 3.352149030900109405, + 3.319047470970748037, 3.286692171599068679, 3.255047308570449882, 3.224079565286264160, + 3.193757903212240290, 3.164053358025972873, 3.134938858084440394, 3.106389062339824481, + 3.078380215254090224, 3.050890016615455114, 3.023897504455676621, 2.997382949516130601, + 2.971327759921089662, 2.945714394895045718, 2.920526286512740821, 2.895747768600141825, + 2.871364012015536371, 2.847360965635188812, 2.823725302450035279, 2.800444370250737780, + 2.777506146439756574, 2.754899196562344610, 2.732612636194700073, 2.710636095867928752, + 2.688959688741803689, 2.667573980773266573, 2.646469963151809157, 2.625639026797788489, + 2.605072938740835564, 2.584763820214140750, 2.564704126316905253, 2.544886627111869970, + 2.525304390037828028, 2.505950763528594027, 2.486819361740209455, 2.467904050297364815, + 2.449198932978249754, 2.430698339264419694, 2.412396812688870629, 2.394289099921457886, + 2.376370140536140596, 2.358635057409337321, 2.341079147703034380, 2.323697874390196372, + 2.306486858283579799, 2.289441870532269441, 2.272558825553154804, 2.255833774367219213, + 2.239262898312909034, 2.222842503111036816, 2.206569013257663858, 2.190438966723220027, + 2.174449009937774679, 2.158595893043885994, 2.142876465399842001, 2.127287671317368289, + 2.111826546019042183, 2.096490211801715020, 2.081275874393225145, 2.066180819490575526, + 2.051202409468584786, 2.036338080248769611, 2.021585338318926173, 2.006941757894518563, + 1.992404978213576650, 1.977972700957360441, 1.963642687789548313, 1.949412758007184943, + 1.935280786297051359, 1.921244700591528076, 1.907302480018387536, 1.893452152939308242, + 1.879691795072211180, 1.866019527692827973, 1.852433515911175554, 1.838931967018879954, + 1.825513128903519799, 1.812175288526390649, 1.798916770460290859, 1.785735935484126014, + 1.772631179231305643, 1.759600930889074766, 1.746643651946074405, 1.733757834985571566, + 1.720942002521935299, 1.708194705878057773, 1.695514524101537912, 1.682900062917553896, + 1.670349953716452118, 1.657862852574172763, 1.645437439303723659, 1.633072416535991334, + 1.620766508828257901, 1.608518461798858379, 1.596327041286483395, 1.584191032532688892, + 1.572109239386229707, 1.560080483527888084, 1.548103603714513499, 1.536177455041032092, + 1.524300908219226258, 1.512472848872117082, 1.500692176842816750, 1.488957805516746058, + 1.477268661156133867, 1.465623682245745352, 1.454021818848793446, 1.442462031972012504, + 1.430943292938879674, 1.419464582769983219, 1.408024891569535697, 1.396623217917042137, + 1.385258568263121992, 1.373929956328490576, 1.362636402505086775, 1.351376933258335189, + 1.340150580529504643, 1.328956381137116560, 1.317793376176324749, 1.306660610415174117, + 1.295557131686601027, 1.284481990275012642, 1.273434238296241139, 1.262412929069615330, + 1.251417116480852521, 1.240445854334406572, 1.229498195693849105, 1.218573192208790124, + 1.207669893426761121, 1.196787346088403092, 1.185924593404202199, 1.175080674310911677, + 1.164254622705678921, 1.153445466655774743, 1.142652227581672841, 1.131873919411078511, + 1.121109547701330200, 1.110358108727411031, 1.099618588532597308, 1.088889961938546813, + 1.078171191511372307, 1.067461226479967662, 1.056759001602551429, 1.046063435977044209, + 1.035373431790528542, 1.024687873002617211, 1.014005623957096480, 1.003325527915696735, + 0.992646405507275897, 0.981967053085062602, 0.971286240983903260, 0.960602711668666509, + 0.949915177764075969, 0.939222319955262286, 0.928522784747210395, 0.917815182070044311, + 0.907098082715690257, 0.896370015589889935, 0.885629464761751528, 0.874874866291025066, + 0.864104604811004484, 0.853317009842373353, 0.842510351810368485, 0.831682837734273206, + 0.820832606554411814, 0.809957724057418282, 0.799056177355487174, 0.788125868869492430, + 0.777164609759129710, 0.766170112735434672, 0.755139984181982249, 0.744071715500508102, + 0.732962673584365398, 0.721810090308756203, 0.710611050909655040, 0.699362481103231959, + 0.688061132773747808, 0.676703568029522584, 0.665286141392677943, 0.653804979847664947, + 0.642255960424536365, 0.630634684933490286, 0.618936451394876075, 0.607156221620300030, + 0.595288584291502887, 0.583327712748769489, 0.571267316532588332, 0.559100585511540626, + 0.546820125163310577, 0.534417881237165604, 0.521885051592135052, 0.509211982443654398, + 0.496388045518671162, 0.483401491653461857, 0.470239275082169006, 0.456886840931420235, + 0.443327866073552401, 0.429543940225410703, 0.415514169600356364, 0.401214678896277765, + 0.386617977941119573, 0.371692145329917234, 0.356399760258393816, 0.340696481064849122, + 0.324529117016909452, 0.307832954674932158, 0.290527955491230394, 0.272513185478464703, + 0.253658363385912022, 0.233790483059674731, 0.212671510630966620, 0.189958689622431842, + 0.165127622564187282, 0.137304980940012589, 0.104838507565818778, 0.063852163815001570, + 0.000000000000000000]; +pub static ZIG_EXP_F: [f64, .. 257] = + [0.000167066692307963, 0.000454134353841497, 0.000967269282327174, 0.001536299780301573, + 0.002145967743718907, 0.002788798793574076, 0.003460264777836904, 0.004157295120833797, + 0.004877655983542396, 0.005619642207205489, 0.006381905937319183, 0.007163353183634991, + 0.007963077438017043, 0.008780314985808977, 0.009614413642502212, 0.010464810181029981, + 0.011331013597834600, 0.012212592426255378, 0.013109164931254991, 0.014020391403181943, + 0.014945968011691148, 0.015885621839973156, 0.016839106826039941, 0.017806200410911355, + 0.018786700744696024, 0.019780424338009740, 0.020787204072578114, 0.021806887504283581, + 0.022839335406385240, 0.023884420511558174, 0.024942026419731787, 0.026012046645134221, + 0.027094383780955803, 0.028188948763978646, 0.029295660224637411, 0.030414443910466622, + 0.031545232172893622, 0.032687963508959555, 0.033842582150874358, 0.035009037697397431, + 0.036187284781931443, 0.037377282772959382, 0.038578995503074871, 0.039792391023374139, + 0.041017441380414840, 0.042254122413316254, 0.043502413568888197, 0.044762297732943289, + 0.046033761076175184, 0.047316792913181561, 0.048611385573379504, 0.049917534282706379, + 0.051235237055126281, 0.052564494593071685, 0.053905310196046080, 0.055257689676697030, + 0.056621641283742870, 0.057997175631200659, 0.059384305633420280, 0.060783046445479660, + 0.062193415408541036, 0.063615431999807376, 0.065049117786753805, 0.066494496385339816, + 0.067951593421936643, 0.069420436498728783, 0.070901055162371843, 0.072393480875708752, + 0.073897746992364746, 0.075413888734058410, 0.076941943170480517, 0.078481949201606435, + 0.080033947542319905, 0.081597980709237419, 0.083174093009632397, 0.084762330532368146, + 0.086362741140756927, 0.087975374467270231, 0.089600281910032886, 0.091237516631040197, + 0.092887133556043569, 0.094549189376055873, 0.096223742550432825, 0.097910853311492213, + 0.099610583670637132, 0.101322997425953631, 0.103048160171257702, 0.104786139306570145, + 0.106537004050001632, 0.108300825451033755, 0.110077676405185357, 0.111867631670056283, + 0.113670767882744286, 0.115487163578633506, 0.117316899211555525, 0.119160057175327641, + 0.121016721826674792, 0.122886979509545108, 0.124770918580830933, 0.126668629437510671, + 0.128580204545228199, 0.130505738468330773, 0.132445327901387494, 0.134399071702213602, + 0.136367070926428829, 0.138349428863580176, 0.140346251074862399, 0.142357645432472146, + 0.144383722160634720, 0.146424593878344889, 0.148480375643866735, 0.150551185001039839, + 0.152637142027442801, 0.154738369384468027, 0.156854992369365148, 0.158987138969314129, + 0.161134939917591952, 0.163298528751901734, 0.165478041874935922, 0.167673618617250081, + 0.169885401302527550, 0.172113535315319977, 0.174358169171353411, 0.176619454590494829, + 0.178897546572478278, 0.181192603475496261, 0.183504787097767436, 0.185834262762197083, + 0.188181199404254262, 0.190545769663195363, 0.192928149976771296, 0.195328520679563189, + 0.197747066105098818, 0.200183974691911210, 0.202639439093708962, 0.205113656293837654, + 0.207606827724221982, 0.210119159388988230, 0.212650861992978224, 0.215202151075378628, + 0.217773247148700472, 0.220364375843359439, 0.222975768058120111, 0.225607660116683956, + 0.228260293930716618, 0.230933917169627356, 0.233628783437433291, 0.236345152457059560, + 0.239083290262449094, 0.241843469398877131, 0.244625969131892024, 0.247431075665327543, + 0.250259082368862240, 0.253110290015629402, 0.255985007030415324, 0.258883549749016173, + 0.261806242689362922, 0.264753418835062149, 0.267725419932044739, 0.270722596799059967, + 0.273745309652802915, 0.276793928448517301, 0.279868833236972869, 0.282970414538780746, + 0.286099073737076826, 0.289255223489677693, 0.292439288161892630, 0.295651704281261252, + 0.298892921015581847, 0.302163400675693528, 0.305463619244590256, 0.308794066934560185, + 0.312155248774179606, 0.315547685227128949, 0.318971912844957239, 0.322428484956089223, + 0.325917972393556354, 0.329440964264136438, 0.332998068761809096, 0.336589914028677717, + 0.340217149066780189, 0.343880444704502575, 0.347580494621637148, 0.351318016437483449, + 0.355093752866787626, 0.358908472948750001, 0.362762973354817997, 0.366658079781514379, + 0.370594648435146223, 0.374573567615902381, 0.378595759409581067, 0.382662181496010056, + 0.386773829084137932, 0.390931736984797384, 0.395136981833290435, 0.399390684475231350, + 0.403694012530530555, 0.408048183152032673, 0.412454465997161457, 0.416914186433003209, + 0.421428728997616908, 0.425999541143034677, 0.430628137288459167, 0.435316103215636907, + 0.440065100842354173, 0.444876873414548846, 0.449753251162755330, 0.454696157474615836, + 0.459707615642138023, 0.464789756250426511, 0.469944825283960310, 0.475175193037377708, + 0.480483363930454543, 0.485871987341885248, 0.491343869594032867, 0.496901987241549881, + 0.502549501841348056, 0.508289776410643213, 0.514126393814748894, 0.520063177368233931, + 0.526104213983620062, 0.532253880263043655, 0.538516872002862246, 0.544898237672440056, + 0.551403416540641733, 0.558038282262587892, 0.564809192912400615, 0.571723048664826150, + 0.578787358602845359, 0.586010318477268366, 0.593400901691733762, 0.600968966365232560, + 0.608725382079622346, 0.616682180915207878, 0.624852738703666200, 0.633251994214366398, + 0.641896716427266423, 0.650805833414571433, 0.660000841079000145, 0.669506316731925177, + 0.679350572264765806, 0.689566496117078431, 0.700192655082788606, 0.711274760805076456, + 0.722867659593572465, 0.735038092431424039, 0.747868621985195658, 0.761463388849896838, + 0.775956852040116218, 0.791527636972496285, 0.808421651523009044, 0.826993296643051101, + 0.847785500623990496, 0.871704332381204705, 0.900469929925747703, 0.938143680862176477, + 1.000000000000000000]; +pub static ZIG_EXP_F_DIFF: [f64, .. 257] = + [0.000000000000000000, 0.000287067661533533, 0.000513134928485678, 0.000569030497974398, + 0.000609667963417335, 0.000642831049855169, 0.000671465984262828, 0.000697030342996893, + 0.000720360862708599, 0.000741986223663093, 0.000762263730113694, 0.000781447246315807, + 0.000799724254382053, 0.000817237547791934, 0.000834098656693235, 0.000850396538527769, + 0.000866203416804620, 0.000881578828420777, 0.000896572504999613, 0.000911226471926952, + 0.000925576608509206, 0.000939653828282008, 0.000953484986066785, 0.000967093584871414, + 0.000980500333784669, 0.000993723593313716, 0.001006779734568374, 0.001019683431705467, + 0.001032447902101660, 0.001045085105172934, 0.001057605908173612, 0.001070020225402434, + 0.001082337135821582, 0.001094564983022843, 0.001106711460658764, 0.001118783685829211, + 0.001130788262427001, 0.001142731336065933, 0.001154618641914802, 0.001166455546523074, + 0.001178247084534012, 0.001189997991027938, 0.001201712730115490, 0.001213395520299268, + 0.001225050357040701, 0.001236681032901414, 0.001248291155571943, 0.001259884164055092, + 0.001271463343231895, 0.001283031837006378, 0.001294592660197942, 0.001306148709326875, + 0.001317702772419903, 0.001329257537945404, 0.001340815602974395, 0.001352379480650950, + 0.001363951607045839, 0.001375534347457789, 0.001387130002219621, 0.001398740812059381, + 0.001410368963061376, 0.001422016591266340, 0.001433685786946429, 0.001445378598586011, + 0.001457097036596827, 0.001468843076792140, 0.001480618663643060, 0.001492425713336909, + 0.001504266116655995, 0.001516141741693663, 0.001528054436422108, 0.001540006031125918, + 0.001551998340713470, 0.001564033166917514, 0.001576112300394977, 0.001588237522735750, + 0.001600410608388780, 0.001612633326513305, 0.001624907442762655, 0.001637234721007311, + 0.001649616925003372, 0.001662055820012304, 0.001674553174376953, 0.001687110761059388, + 0.001699730359144919, 0.001712413755316500, 0.001725162745304071, 0.001737979135312442, + 0.001750864743431488, 0.001763821401032123, 0.001776850954151601, 0.001789955264870927, + 0.001803136212688003, 0.001816395695889220, 0.001829735632922019, 0.001843157963772116, + 0.001856664651347151, 0.001870257682870316, 0.001883939071285826, 0.001897710856679738, + 0.001911575107717528, 0.001925533923102574, 0.001939589433056721, 0.001953743800826108, + 0.001967999224215228, 0.001982357937151347, 0.001996822211282223, 0.002011394357609747, + 0.002026076728162574, 0.002040871717710169, 0.002055781765521847, 0.002070809357173103, + 0.002085957026402963, 0.002101227357025226, 0.002116622984897121, 0.002132146599948981, + 0.002147800948277823, 0.002163588834309782, 0.002179513123034188, 0.002195576742314159, + 0.002211782685277469, 0.002228134012792427, 0.002244633856033434, 0.002261285419141418, + 0.002278091981983449, 0.002295056903017983, 0.002312183622271174, 0.002329475664429648, + 0.002346936642057179, 0.002364570258941101, 0.002382380313575932, 0.002400370702791893, + 0.002418545425535629, 0.002436908586812392, 0.002455464401797752, 0.002474217200128692, + 0.002493171430384328, 0.002512331664766249, 0.002531702603989994, 0.002551289082400404, + 0.002571096073321844, 0.002591128694658967, 0.002611392214760672, 0.002631892058563845, + 0.002652633814032662, 0.002673623238910738, 0.002694866267805934, 0.002716369019626269, + 0.002738137805389534, 0.002760179136428037, 0.002782499733014893, 0.002805106533435520, + 0.002828006703534697, 0.002851207646767162, 0.002874717014785921, 0.002898542718600849, + 0.002922692940346749, 0.002947176145699226, 0.002972001096982591, 0.002997176867015228, + 0.003022712853742948, 0.003048618795714386, 0.003074904788455568, 0.003101581301807876, + 0.003128659198296080, 0.003156149752600867, 0.003184064672214937, 0.003212416119368622, + 0.003241216734320596, 0.003270479660111680, 0.003300218568896729, 0.003330447689969929, + 0.003361181839619420, 0.003392436452949343, 0.003424227617828290, 0.003456572111131984, + 0.003489487437467131, 0.003522991870580083, 0.003557104497672658, 0.003591845266868621, + 0.003627235038102472, 0.003663295637722386, 0.003700049917134574, 0.003737521815846301, + 0.003775736429304177, 0.003814720081962375, 0.003854500406067995, 0.003895106426696382, + 0.003936568653631844, 0.003978919180756157, 0.004022191793678687, 0.004066422086428989, + 0.004111647588127876, 0.004157907900659452, 0.004205244848493050, 0.004253702641940915, + 0.004303328055299205, 0.004354170621502118, 0.004406282845128784, 0.004459720435841752, + 0.004514542564613699, 0.004570812145417769, 0.004628596145424491, 0.004687965927177740, + 0.004748997626717266, 0.004811772572194672, 0.004876377748206484, 0.004942906311860507, + 0.005011458167522187, 0.005082140608288488, 0.005155069033533799, 0.005230367753417398, + 0.005308170893076836, 0.005388623411430704, 0.005471882252147620, 0.005558117647517014, + 0.005647514599798176, 0.005740274569295156, 0.005836617404105682, 0.005936783553485037, + 0.006041036615386131, 0.006149666279423593, 0.006262991739818591, 0.006381365669577810, + 0.006505178868201678, 0.006634865721946159, 0.006770910649812723, 0.006913855752425535, + 0.007064309938019209, 0.007222959874423007, 0.007390583214465396, 0.007568064673498798, + 0.007756415714389786, 0.007956798835585532, 0.008170557788458321, 0.008399255510700199, + 0.008644722212900025, 0.008909116987305010, 0.009195007664428712, 0.009505475652925033, + 0.009844255532840629, 0.010215923852312625, 0.010626158965710175, 0.011082105722287849, + 0.011592898788496009, 0.012170432837851575, 0.012830529553771619, 0.013594766864701180, + 0.014493463190219380, 0.015570784932380066, 0.016894014550512759, 0.018571645120042057, + 0.020792203980939394, 0.023918831757214210, 0.028765597544542998, 0.037673750936428774, + 0.061856319137823523]; From 3afd708e2acd767f1af90de52c139c1b6b877311 Mon Sep 17 00:00:00 2001 From: Young-il Choi Date: Thu, 2 May 2013 08:58:24 +0900 Subject: [PATCH 117/410] mk: minor fix for test.mk to support mutiple target test --- mk/tests.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mk/tests.mk b/mk/tests.mk index 9b01c4af80fdd..21754a9f51d0a 100644 --- a/mk/tests.mk +++ b/mk/tests.mk @@ -505,7 +505,7 @@ CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3) := \ --rustc-path $$(HBIN$(1)_H_$(3))/rustc$$(X_$(3)) \ --aux-base $$(S)src/test/auxiliary/ \ --stage-id stage$(1)-$(2) \ - --host $(3) \ + --host $(CFG_BUILD_TRIPLE) \ --target $(2) \ --adb-path=$(CFG_ADB_PATH) \ --rustcflags "$(RUSTC_FLAGS_$(2)) $$(CFG_RUSTC_FLAGS) --target=$(2)" \ @@ -519,7 +519,7 @@ CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3) := \ --rustc-path $$(HBIN$(1)_H_$(3))/rustc$$(X_$(3)) \ --aux-base $$(S)src/test/auxiliary/ \ --stage-id stage$(1)-$(2) \ - --host $(3) \ + --host $(CFG_BUILD_TRIPLE) \ --target $(2) \ --rustcflags "$(RUSTC_FLAGS_$(2)) $$(CFG_RUSTC_FLAGS) --target=$(2)" \ $$(CTEST_TESTARGS) From 14bf5c4fe7eb110fc124a710b40bc7c5a7801e25 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Wed, 1 May 2013 20:19:28 -0400 Subject: [PATCH 118/410] rustc: adjust total number of lang items --- src/librustc/middle/lang_items.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/librustc/middle/lang_items.rs b/src/librustc/middle/lang_items.rs index 0266b77997e7d..314b58d13e147 100644 --- a/src/librustc/middle/lang_items.rs +++ b/src/librustc/middle/lang_items.rs @@ -75,13 +75,13 @@ pub enum LangItem { } pub struct LanguageItems { - items: [Option, ..35] + items: [Option, ..36] } pub impl LanguageItems { pub fn new() -> LanguageItems { LanguageItems { - items: [ None, ..35 ] + items: [ None, ..36 ] } } From ef6b24d1350ad658faee68f7eddd2c05a56900ce Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Wed, 1 May 2013 20:22:08 -0400 Subject: [PATCH 119/410] rustc: fix the fact that trans_lvalue rooted twice --- src/librustc/middle/trans/_match.rs | 2 +- src/librustc/middle/trans/datum.rs | 9 ++-- src/librustc/middle/trans/expr.rs | 73 +++++++++-------------------- 3 files changed, 29 insertions(+), 55 deletions(-) diff --git a/src/librustc/middle/trans/_match.rs b/src/librustc/middle/trans/_match.rs index d7f9567c333d0..be39edd2d9b78 100644 --- a/src/librustc/middle/trans/_match.rs +++ b/src/librustc/middle/trans/_match.rs @@ -966,7 +966,7 @@ pub fn root_pats_as_necessary(bcx: block, let datum = Datum {val: val, ty: node_id_type(bcx, pat_id), mode: ByRef, source: ZeroMem}; - bcx = datum.root(bcx, br.pats[col].span, root_info); + bcx = datum.root(bcx, br.pats[col].span, key, root_info); // If we kept going, we'd only re-root the same value, so // return now. return bcx; diff --git a/src/librustc/middle/trans/datum.rs b/src/librustc/middle/trans/datum.rs index 94bff65843b24..f4fb3b6c6f5d5 100644 --- a/src/librustc/middle/trans/datum.rs +++ b/src/librustc/middle/trans/datum.rs @@ -517,7 +517,8 @@ pub impl Datum { } } - fn root(&self, mut bcx: block, span: span, root_info: RootInfo) -> block { + fn root(&self, mut bcx: block, span: span, + root_key: root_map_key, root_info: RootInfo) -> block { /*! * * In some cases, borrowck will decide that an @T/@[]/@str @@ -525,8 +526,8 @@ pub impl Datum { * case, we will call this function, which will stash a copy * away until we exit the scope `scope_id`. */ - debug!("root(root_info=%?, self=%?)", - root_info, self.to_str(bcx.ccx())); + debug!("root(root_map_key=%?, root_info=%?, self=%?)", + root_key, root_info, self.to_str(bcx.ccx())); if bcx.sess().trace() { trans_trace( @@ -674,7 +675,7 @@ pub impl Datum { let key = root_map_key { id: expr_id, derefs: derefs }; let bcx = match ccx.maps.root_map.find(&key) { None => bcx, - Some(&root_info) => self.root(bcx, span, root_info) + Some(&root_info) => self.root(bcx, span, key, root_info) }; // Perform the write guard, if necessary. diff --git a/src/librustc/middle/trans/expr.rs b/src/librustc/middle/trans/expr.rs index 166b8bc01f856..a993f781cdb18 100644 --- a/src/librustc/middle/trans/expr.rs +++ b/src/librustc/middle/trans/expr.rs @@ -821,57 +821,30 @@ fn trans_lvalue_unadjusted(bcx: block, expr: @ast::expr) -> DatumBlock { trace_span!(bcx, expr.span, @shorten(bcx.expr_to_str(expr))); - let unrooted_datum = unpack_datum!(bcx, unrooted(bcx, expr)); - - // If the lvalue must remain rooted, create a scratch datum, copy - // the lvalue in there, and then arrange for it to be cleaned up - // at the end of the scope with id `scope_id`: - let root_key = root_map_key { id: expr.id, derefs: 0u }; - for bcx.ccx().maps.root_map.find(&root_key).each |&root_info| { - bcx = unrooted_datum.root(bcx, expr.span, *root_info); - } - - return DatumBlock {bcx: bcx, datum: unrooted_datum}; - - fn unrooted(bcx: block, expr: @ast::expr) -> DatumBlock { - /*! - * - * Translates `expr`. Note that this version generally - * yields an unrooted, unmoved version. Rooting and possible - * moves are dealt with above in trans_lvalue_unadjusted(). - * - * One exception is if `expr` refers to a local variable, - * in which case the source may already be FromMovedLvalue - * if appropriate. - */ - - let mut bcx = bcx; - - match expr.node { - ast::expr_paren(e) => { - return unrooted(bcx, e); - } - ast::expr_path(_) => { - return trans_def_lvalue(bcx, expr, bcx.def(expr.id)); - } - ast::expr_field(base, ident, _) => { - return trans_rec_field(bcx, base, ident); - } - ast::expr_index(base, idx) => { - return trans_index(bcx, expr, base, idx); - } - ast::expr_unary(ast::deref, base) => { - let basedatum = unpack_datum!(bcx, trans_to_datum(bcx, base)); - return basedatum.deref(bcx, base, 0); - } - _ => { - bcx.tcx().sess.span_bug( - expr.span, - fmt!("trans_lvalue reached fall-through case: %?", - expr.node)); - } + return match expr.node { + ast::expr_paren(e) => { + unrooted(bcx, e) } - } + ast::expr_path(_) => { + trans_def_lvalue(bcx, expr, bcx.def(expr.id)) + } + ast::expr_field(base, ident, _) => { + trans_rec_field(bcx, base, ident) + } + ast::expr_index(base, idx) => { + trans_index(bcx, expr, base, idx) + } + ast::expr_unary(ast::deref, base) => { + let basedatum = unpack_datum!(bcx, trans_to_datum(bcx, base)); + basedatum.deref(bcx, base, 0) + } + _ => { + bcx.tcx().sess.span_bug( + expr.span, + fmt!("trans_lvalue reached fall-through case: %?", + expr.node)); + } + }; fn trans_rec_field(bcx: block, base: @ast::expr, From d231c427e655b7164571a1a712563ba5fd2e4a3c Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Wed, 1 May 2013 20:23:07 -0400 Subject: [PATCH 120/410] core: add more debugging printouts to borrowing --- src/libcore/unstable/lang.rs | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/libcore/unstable/lang.rs b/src/libcore/unstable/lang.rs index d0e3c2b06787f..283f232964963 100644 --- a/src/libcore/unstable/lang.rs +++ b/src/libcore/unstable/lang.rs @@ -51,6 +51,8 @@ pub mod rustrt { #[rust_stack] fn rust_set_task_borrow_list(task: *rust_task, map: *c_void); + + fn rust_dbg_breakpoint(); } } @@ -88,6 +90,8 @@ fn swap_task_borrow_list(f: &fn(~[BorrowRecord]) -> ~[BorrowRecord]) { } pub fn fail_borrowed(box: *mut BoxRepr, file: *c_char, line: size_t) { + debug_ptr("fail_borrowed: ", box); + if !::rt::env::get().debug_borrows { let msg = "borrowed"; do str::as_buf(msg) |msg_p, _| { @@ -130,7 +134,7 @@ pub unsafe fn exchange_malloc(td: *c_char, size: uintptr_t) -> *c_char { static ENABLE_DEBUG_PTR: bool = false; #[inline] -pub fn debug_ptr(tag: &'static str, p: *T) { +pub fn debug_ptr(tag: &'static str, p: *const T) { //! A useful debugging function that prints a pointer + tag + newline //! without allocating memory. @@ -138,7 +142,7 @@ pub fn debug_ptr(tag: &'static str, p: *T) { debug_ptr_slow(tag, p); } - fn debug_ptr_slow(tag: &'static str, p: *T) { + fn debug_ptr_slow(tag: &'static str, p: *const T) { use io; let dbg = STDERR_FILENO as io::fd_t; let letters = ['0', '1', '2', '3', '4', '5', '6', '7', '8', @@ -209,14 +213,17 @@ fn add_borrow_to_task_list(a: *mut BoxRepr, file: *c_char, line: size_t) { #[inline(always)] pub unsafe fn borrow_as_imm(a: *u8, file: *c_char, line: size_t) -> uint { let a: *mut BoxRepr = transmute(a); - let ref_count = (*a).header.ref_count; + + debug_ptr("borrow_as_imm (ptr): ", a); + debug_ptr("borrow_as_imm (ref): ", ref_count as *()); + if (ref_count & MUT_BIT) != 0 { fail_borrowed(a, file, line); } else { (*a).header.ref_count |= FROZEN_BIT; if ::rt::env::get().debug_borrows { - add_borrow_to_list(a, file, line); + add_borrow_to_task_list(a, file, line); } } ref_count @@ -228,13 +235,16 @@ pub unsafe fn borrow_as_imm(a: *u8, file: *c_char, line: size_t) -> uint { pub unsafe fn borrow_as_mut(a: *u8, file: *c_char, line: size_t) -> uint { let a: *mut BoxRepr = transmute(a); + debug_ptr("borrow_as_mut (ptr): ", a); + debug_ptr("borrow_as_mut (line): ", line as *()); + let ref_count = (*a).header.ref_count; if (ref_count & (MUT_BIT|FROZEN_BIT)) != 0 { fail_borrowed(a, file, line); } else { (*a).header.ref_count |= (MUT_BIT|FROZEN_BIT); if ::rt::env::get().debug_borrows { - add_borrow_to_list(a, file, line); + add_borrow_to_task_list(a, file, line); } } ref_count @@ -261,6 +271,9 @@ pub unsafe fn return_to_mut(a: *u8, old_ref_count: uint) { if !a.is_null() { let a: *mut BoxRepr = transmute(a); + debug_ptr("return_to_mut (ptr): ", a); + debug_ptr("return_to_mut (ref): ", old_ref_count as *()); + let ref_count = (*a).header.ref_count & !ALL_BITS; let old_bits = old_ref_count & ALL_BITS; (*a).header.ref_count = ref_count | old_bits; From 0c34cab3db76d100ea7bbe4cd776f27b5f971d2c Mon Sep 17 00:00:00 2001 From: Seo Sanghyeon Date: Wed, 1 May 2013 00:53:20 +0900 Subject: [PATCH 121/410] Take string slices --- src/librustc/driver/session.rs | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/librustc/driver/session.rs b/src/librustc/driver/session.rs index ff623049f758d..970ee20bfcb76 100644 --- a/src/librustc/driver/session.rs +++ b/src/librustc/driver/session.rs @@ -175,16 +175,16 @@ pub struct Session_ { pub type Session = @Session_; pub impl Session_ { - fn span_fatal(@self, sp: span, msg: ~str) -> ! { + fn span_fatal(@self, sp: span, msg: &str) -> ! { self.span_diagnostic.span_fatal(sp, msg) } - fn fatal(@self, msg: ~str) -> ! { + fn fatal(@self, msg: &str) -> ! { self.span_diagnostic.handler().fatal(msg) } - fn span_err(@self, sp: span, msg: ~str) { + fn span_err(@self, sp: span, msg: &str) { self.span_diagnostic.span_err(sp, msg) } - fn err(@self, msg: ~str) { + fn err(@self, msg: &str) { self.span_diagnostic.handler().err(msg) } fn has_errors(@self) -> bool { @@ -193,31 +193,31 @@ pub impl Session_ { fn abort_if_errors(@self) { self.span_diagnostic.handler().abort_if_errors() } - fn span_warn(@self, sp: span, msg: ~str) { + fn span_warn(@self, sp: span, msg: &str) { self.span_diagnostic.span_warn(sp, msg) } - fn warn(@self, msg: ~str) { + fn warn(@self, msg: &str) { self.span_diagnostic.handler().warn(msg) } - fn span_note(@self, sp: span, msg: ~str) { + fn span_note(@self, sp: span, msg: &str) { self.span_diagnostic.span_note(sp, msg) } - fn note(@self, msg: ~str) { + fn note(@self, msg: &str) { self.span_diagnostic.handler().note(msg) } - fn span_bug(@self, sp: span, msg: ~str) -> ! { + fn span_bug(@self, sp: span, msg: &str) -> ! { self.span_diagnostic.span_bug(sp, msg) } - fn bug(@self, msg: ~str) -> ! { + fn bug(@self, msg: &str) -> ! { self.span_diagnostic.handler().bug(msg) } - fn span_unimpl(@self, sp: span, msg: ~str) -> ! { + fn span_unimpl(@self, sp: span, msg: &str) -> ! { self.span_diagnostic.span_unimpl(sp, msg) } - fn unimpl(@self, msg: ~str) -> ! { + fn unimpl(@self, msg: &str) -> ! { self.span_diagnostic.handler().unimpl(msg) } - fn span_lint_level(@self, level: lint::level, sp: span, msg: ~str) { + fn span_lint_level(@self, level: lint::level, sp: span, msg: &str) { match level { lint::allow => { }, lint::warn => self.span_warn(sp, msg), @@ -230,7 +230,7 @@ pub impl Session_ { expr_id: ast::node_id, item_id: ast::node_id, span: span, - msg: ~str) { + msg: &str) { let level = lint::get_lint_settings_level( self.lint_settings, lint_mode, expr_id, item_id); self.span_lint_level(level, span, msg); From 4294aed01ba4836cf0d40d5422e5a404b467dcca Mon Sep 17 00:00:00 2001 From: Seo Sanghyeon Date: Wed, 1 May 2013 01:47:52 +0900 Subject: [PATCH 122/410] Use static strings --- src/librustc/middle/check_const.rs | 30 ++++----- src/librustc/middle/check_loop.rs | 6 +- src/librustc/middle/check_match.rs | 28 ++++----- src/librustc/middle/kind.rs | 42 ++++++------- src/librustc/middle/lint.rs | 30 ++++----- src/librustc/middle/liveness.rs | 26 ++++---- src/librustc/middle/mem_categorization.rs | 2 +- src/librustc/middle/moves.rs | 4 +- src/librustc/middle/privacy.rs | 76 +++++++++++------------ src/librustc/middle/region.rs | 2 +- src/librustc/middle/ty.rs | 18 +++--- 11 files changed, 132 insertions(+), 132 deletions(-) diff --git a/src/librustc/middle/check_const.rs b/src/librustc/middle/check_const.rs index 6a47eedcea8c3..fdb0d40139411 100644 --- a/src/librustc/middle/check_const.rs +++ b/src/librustc/middle/check_const.rs @@ -92,13 +92,13 @@ pub fn check_expr(sess: Session, expr_unary(deref, _) => { } expr_unary(box(_), _) | expr_unary(uniq(_), _) => { sess.span_err(e.span, - ~"disallowed operator in constant expression"); + "disallowed operator in constant expression"); return; } expr_lit(@codemap::spanned {node: lit_str(_), _}) => { } expr_binary(_, _, _) | expr_unary(_, _) => { if method_map.contains_key(&e.id) { - sess.span_err(e.span, ~"user-defined operators are not \ + sess.span_err(e.span, "user-defined operators are not \ allowed in constant expressions"); } } @@ -118,8 +118,8 @@ pub fn check_expr(sess: Session, // a path in trans::callee that only works in block contexts. if pth.types.len() != 0 { sess.span_err( - e.span, ~"paths in constants may only refer to \ - items without type parameters"); + e.span, "paths in constants may only refer to \ + items without type parameters"); } match def_map.find(&e.id) { Some(&def_const(_)) | @@ -131,11 +131,11 @@ pub fn check_expr(sess: Session, debug!("(checking const) found bad def: %?", def); sess.span_err( e.span, - fmt!("paths in constants may only refer to \ - constants or functions")); + "paths in constants may only refer to \ + constants or functions"); } None => { - sess.span_bug(e.span, ~"unbound path in const?!"); + sess.span_bug(e.span, "unbound path in const?!"); } } } @@ -146,8 +146,8 @@ pub fn check_expr(sess: Session, _ => { sess.span_err( e.span, - ~"function calls in constants are limited to \ - struct and enum constructors"); + "function calls in constants are limited to \ + struct and enum constructors"); } } } @@ -163,12 +163,12 @@ pub fn check_expr(sess: Session, expr_addr_of(*) => { sess.span_err( e.span, - ~"borrowed pointers in constants may only refer to \ - immutable values"); + "borrowed pointers in constants may only refer to \ + immutable values"); } _ => { sess.span_err(e.span, - ~"constant contains unimplemented expression type"); + "constant contains unimplemented expression type"); return; } } @@ -178,14 +178,14 @@ pub fn check_expr(sess: Session, if t != ty_char { if (v as u64) > ast_util::int_ty_max( if t == ty_i { sess.targ_cfg.int_type } else { t }) { - sess.span_err(e.span, ~"literal out of range for its type"); + sess.span_err(e.span, "literal out of range for its type"); } } } expr_lit(@codemap::spanned {node: lit_uint(v, t), _}) => { if v > ast_util::uint_ty_max( if t == ty_u { sess.targ_cfg.uint_type } else { t }) { - sess.span_err(e.span, ~"literal out of range for its type"); + sess.span_err(e.span, "literal out of range for its type"); } } _ => () @@ -224,7 +224,7 @@ pub fn check_item_recursion(sess: Session, fn visit_item(it: @item, env: env, v: visit::vt) { if env.idstack.contains(&(it.id)) { - env.sess.span_fatal(env.root_it.span, ~"recursive constant"); + env.sess.span_fatal(env.root_it.span, "recursive constant"); } env.idstack.push(it.id); visit::visit_item(it, env, v); diff --git a/src/librustc/middle/check_loop.rs b/src/librustc/middle/check_loop.rs index 9f26f7f83724f..e3b816fceb8bb 100644 --- a/src/librustc/middle/check_loop.rs +++ b/src/librustc/middle/check_loop.rs @@ -54,17 +54,17 @@ pub fn check_crate(tcx: ty::ctxt, crate: @crate) { } expr_break(_) => { if !cx.in_loop { - tcx.sess.span_err(e.span, ~"`break` outside of loop"); + tcx.sess.span_err(e.span, "`break` outside of loop"); } } expr_again(_) => { if !cx.in_loop { - tcx.sess.span_err(e.span, ~"`again` outside of loop"); + tcx.sess.span_err(e.span, "`again` outside of loop"); } } expr_ret(oe) => { if !cx.can_ret { - tcx.sess.span_err(e.span, ~"`return` in block function"); + tcx.sess.span_err(e.span, "`return` in block function"); } visit::visit_expr_opt(oe, cx, v); } diff --git a/src/librustc/middle/check_match.rs b/src/librustc/middle/check_match.rs index 852eb1b50a499..f6c65b3744a6c 100644 --- a/src/librustc/middle/check_match.rs +++ b/src/librustc/middle/check_match.rs @@ -94,7 +94,7 @@ pub fn check_expr(cx: @MatchCheckCtxt, ex: @expr, s: (), v: visit::vt<()>) { } let arms = vec::concat(arms.filter_mapped(unguarded_pat)); if arms.is_empty() { - cx.tcx.sess.span_err(ex.span, ~"non-exhaustive patterns"); + cx.tcx.sess.span_err(ex.span, "non-exhaustive patterns"); } else { check_exhaustive(cx, ex.span, arms); } @@ -111,7 +111,7 @@ pub fn check_arms(cx: @MatchCheckCtxt, arms: &[arm]) { let v = ~[*pat]; match is_useful(cx, &seen, v) { not_useful => { - cx.tcx.sess.span_err(pat.span, ~"unreachable pattern"); + cx.tcx.sess.span_err(pat.span, "unreachable pattern"); } _ => () } @@ -685,7 +685,7 @@ pub fn check_local(cx: @MatchCheckCtxt, visit::visit_local(loc, s, v); if is_refutable(cx, loc.node.pat) { cx.tcx.sess.span_err(loc.node.pat.span, - ~"refutable pattern in local binding"); + "refutable pattern in local binding"); } // Check legality of move bindings. @@ -708,7 +708,7 @@ pub fn check_fn(cx: @MatchCheckCtxt, for decl.inputs.each |input| { if is_refutable(cx, input.pat) { cx.tcx.sess.span_err(input.pat.span, - ~"refutable pattern in function argument"); + "refutable pattern in function argument"); } } } @@ -780,24 +780,24 @@ pub fn check_legality_of_move_bindings(cx: @MatchCheckCtxt, if sub.is_some() { tcx.sess.span_err( p.span, - ~"cannot bind by-move with sub-bindings"); + "cannot bind by-move with sub-bindings"); } else if has_guard { tcx.sess.span_err( p.span, - ~"cannot bind by-move into a pattern guard"); + "cannot bind by-move into a pattern guard"); } else if by_ref_span.is_some() { tcx.sess.span_err( p.span, - ~"cannot bind by-move and by-ref \ - in the same pattern"); + "cannot bind by-move and by-ref \ + in the same pattern"); tcx.sess.span_note( by_ref_span.get(), - ~"by-ref binding occurs here"); + "by-ref binding occurs here"); } else if is_lvalue { tcx.sess.span_err( p.span, - ~"cannot bind by-move when \ - matching an lvalue"); + "cannot bind by-move when \ + matching an lvalue"); } }; @@ -837,9 +837,9 @@ pub fn check_legality_of_move_bindings(cx: @MatchCheckCtxt, { cx.tcx.sess.span_err( pat.span, - ~"by-move pattern \ - bindings may not occur \ - behind @ or & bindings"); + "by-move pattern \ + bindings may not occur \ + behind @ or & bindings"); } match sub { diff --git a/src/librustc/middle/kind.rs b/src/librustc/middle/kind.rs index 0925e8cdd6375..a1d5f3f3c9faf 100644 --- a/src/librustc/middle/kind.rs +++ b/src/librustc/middle/kind.rs @@ -97,21 +97,21 @@ fn check_struct_safe_for_destructor(cx: Context, }); if !ty::type_is_owned(cx.tcx, struct_ty) { cx.tcx.sess.span_err(span, - ~"cannot implement a destructor on a struct \ - that is not Owned"); + "cannot implement a destructor on a struct \ + that is not Owned"); cx.tcx.sess.span_note(span, - ~"use \"#[unsafe_destructor]\" on the \ - implementation to force the compiler to \ - allow this"); + "use \"#[unsafe_destructor]\" on the \ + implementation to force the compiler to \ + allow this"); } } else { cx.tcx.sess.span_err(span, - ~"cannot implement a destructor on a struct \ - with type parameters"); + "cannot implement a destructor on a struct \ + with type parameters"); cx.tcx.sess.span_note(span, - ~"use \"#[unsafe_destructor]\" on the \ - implementation to force the compiler to \ - allow this"); + "use \"#[unsafe_destructor]\" on the \ + implementation to force the compiler to \ + allow this"); } } @@ -143,10 +143,10 @@ fn check_item(item: @item, cx: Context, visitor: visit::vt) { } _ => { cx.tcx.sess.span_bug(self_type.span, - ~"the self type for \ - the Drop trait \ - impl is not a \ - path"); + "the self type for \ + the Drop trait \ + impl is not a \ + path"); } } } @@ -193,7 +193,7 @@ fn with_appropriate_checker(cx: Context, id: node_id, b: &fn(check_fn)) { fn check_for_bare(cx: Context, fv: @freevar_entry) { cx.tcx.sess.span_err( fv.span, - ~"attempted dynamic environment capture"); + "attempted dynamic environment capture"); } let fty = ty::node_id_to_type(cx.tcx, id); @@ -409,7 +409,7 @@ fn check_imm_free_var(cx: Context, def: def, sp: span) { if is_mutbl { cx.tcx.sess.span_err( sp, - ~"mutable variables cannot be implicitly captured"); + "mutable variables cannot be implicitly captured"); } } def_arg(*) => { /* ok */ } @@ -451,12 +451,12 @@ pub fn check_durable(tcx: ty::ctxt, ty: ty::t, sp: span) -> bool { if !ty::type_is_durable(tcx, ty) { match ty::get(ty).sty { ty::ty_param(*) => { - tcx.sess.span_err(sp, ~"value may contain borrowed \ - pointers; use `'static` bound"); + tcx.sess.span_err(sp, "value may contain borrowed \ + pointers; use `'static` bound"); } _ => { - tcx.sess.span_err(sp, ~"value may contain borrowed \ - pointers"); + tcx.sess.span_err(sp, "value may contain borrowed \ + pointers"); } } false @@ -581,7 +581,7 @@ pub fn check_kind_bounds_of_cast(cx: Context, source: @expr, target: @expr) { if !ty::type_is_owned(cx.tcx, source_ty) { cx.tcx.sess.span_err( target.span, - ~"uniquely-owned trait objects must be sendable"); + "uniquely-owned trait objects must be sendable"); } } _ => {} // Nothing to do. diff --git a/src/librustc/middle/lint.rs b/src/librustc/middle/lint.rs index b67d74bc272b6..2b4d029c59328 100644 --- a/src/librustc/middle/lint.rs +++ b/src/librustc/middle/lint.rs @@ -338,14 +338,14 @@ pub impl Context { _ => { self.sess.span_err( meta.span, - ~"malformed lint attribute"); + "malformed lint attribute"); } } } } _ => { self.sess.span_err(meta.span, - ~"malformed lint attribute"); + "malformed lint attribute"); } } } @@ -485,8 +485,8 @@ fn check_item_while_true(cx: ty::ctxt, it: @ast::item) { cx.sess.span_lint( while_true, e.id, it.id, e.span, - ~"denote infinite loops \ - with loop { ... }"); + "denote infinite loops \ + with loop { ... }"); } _ => () } @@ -603,7 +603,7 @@ fn check_item_type_limits(cx: ty::ctxt, it: @ast::item) { && !check_limits(cx, *binop, l, r) { cx.sess.span_lint( type_limits, e.id, it.id, e.span, - ~"comparison is useless due to type limits"); + "comparison is useless due to type limits"); } } _ => () @@ -630,7 +630,7 @@ fn check_item_default_methods(cx: ty::ctxt, item: @ast::item) { item.id, item.id, item.span, - ~"default methods are experimental"); + "default methods are experimental"); } } } @@ -649,7 +649,7 @@ fn check_item_deprecated_mutable_fields(cx: ty::ctxt, item: @ast::item) { item.id, item.id, field.span, - ~"mutable fields are deprecated"); + "mutable fields are deprecated"); } ast::named_field(*) | ast::unnamed_field => {} } @@ -672,14 +672,14 @@ fn check_item_ctypes(cx: ty::ctxt, it: @ast::item) { cx.sess.span_lint( ctypes, id, fn_id, ty.span, - ~"found rust type `int` in foreign module, while \ + "found rust type `int` in foreign module, while \ libc::c_int or libc::c_long should be used"); } ast::def_prim_ty(ast::ty_uint(ast::ty_u)) => { cx.sess.span_lint( ctypes, id, fn_id, ty.span, - ~"found rust type `uint` in foreign module, while \ + "found rust type `uint` in foreign module, while \ libc::c_uint or libc::c_ulong should be used"); } _ => () @@ -795,7 +795,7 @@ fn check_item_path_statement(cx: ty::ctxt, it: @ast::item) { cx.sess.span_lint( path_statement, id, it.id, s.span, - ~"path statement with no effect"); + "path statement with no effect"); } _ => () } @@ -835,8 +835,8 @@ fn check_item_non_camel_case_types(cx: ty::ctxt, it: @ast::item) { if !is_camel_case(cx, ident) { cx.sess.span_lint( non_camel_case_types, expr_id, item_id, span, - ~"type, variant, or trait should have \ - a camel case identifier"); + "type, variant, or trait should have \ + a camel case identifier"); } } @@ -863,7 +863,7 @@ fn check_item_unused_unsafe(cx: ty::ctxt, it: @ast::item) { if !cx.used_unsafe.contains(&blk.node.id) { cx.sess.span_lint(unused_unsafe, blk.node.id, it.id, blk.span, - ~"unnecessary `unsafe` block"); + "unnecessary `unsafe` block"); } } _ => () @@ -888,9 +888,9 @@ fn check_item_unused_mut(tcx: ty::ctxt, it: @ast::item) { } if !used { let msg = if bindings == 1 { - ~"variable does not need to be mutable" + "variable does not need to be mutable" } else { - ~"variables do not need to be mutable" + "variables do not need to be mutable" }; tcx.sess.span_lint(unused_mut, p.id, it.id, p.span, msg); } diff --git a/src/librustc/middle/liveness.rs b/src/librustc/middle/liveness.rs index 0df10c59a8aac..40d62cac3572d 100644 --- a/src/librustc/middle/liveness.rs +++ b/src/librustc/middle/liveness.rs @@ -359,7 +359,7 @@ pub impl IrMaps { match self.capture_info_map.find(&expr.id) { Some(&caps) => caps, None => { - self.tcx.sess.span_bug(expr.span, ~"no registered caps"); + self.tcx.sess.span_bug(expr.span, "no registered caps"); } } } @@ -687,7 +687,7 @@ pub impl Liveness { } None => { self.tcx.sess.span_bug( - span, ~"Not present in def map") + span, "Not present in def map") } } } @@ -804,15 +804,15 @@ pub impl Liveness { // to find with one match self.tcx.def_map.find(&id) { Some(&def_label(loop_id)) => loop_id, - _ => self.tcx.sess.span_bug(sp, ~"Label on break/loop \ - doesn't refer to a loop") + _ => self.tcx.sess.span_bug(sp, "Label on break/loop \ + doesn't refer to a loop") }, None => { // Vanilla 'break' or 'loop', so use the enclosing // loop scope let loop_scope = &mut *self.loop_scope; if loop_scope.len() == 0 { - self.tcx.sess.span_bug(sp, ~"break outside loop"); + self.tcx.sess.span_bug(sp, "break outside loop"); } else { // FIXME(#5275): this shouldn't have to be a method... @@ -994,7 +994,7 @@ pub impl Liveness { } stmt_mac(*) => { - self.tcx.sess.span_bug(stmt.span, ~"unexpanded macro"); + self.tcx.sess.span_bug(stmt.span, "unexpanded macro"); } } } @@ -1164,7 +1164,7 @@ pub impl Liveness { match self.break_ln.find(&sc) { Some(&b) => b, None => self.tcx.sess.span_bug(expr.span, - ~"Break to unknown label") + "Break to unknown label") } } @@ -1178,7 +1178,7 @@ pub impl Liveness { match self.cont_ln.find(&sc) { Some(&b) => b, None => self.tcx.sess.span_bug(expr.span, - ~"Loop to unknown label") + "Loop to unknown label") } } @@ -1304,7 +1304,7 @@ pub impl Liveness { } expr_mac(*) => { - self.tcx.sess.span_bug(expr.span, ~"unexpanded macro"); + self.tcx.sess.span_bug(expr.span, "unexpanded macro"); } } } @@ -1618,10 +1618,10 @@ pub impl Liveness { } else if ty::type_is_bot(t_ret) { // for bot return types, not ok. Function should fail. self.tcx.sess.span_err( - sp, ~"some control paths may return"); + sp, "some control paths may return"); } else { self.tcx.sess.span_err( - sp, ~"not all control paths return a value"); + sp, "not all control paths return a value"); } } } @@ -1712,10 +1712,10 @@ pub impl Liveness { None => { self.tcx.sess.span_err( span, - ~"re-assignment of immutable variable"); + "re-assignment of immutable variable"); self.tcx.sess.span_note( orig_span, - ~"prior assignment occurs here"); + "prior assignment occurs here"); } } } diff --git a/src/librustc/middle/mem_categorization.rs b/src/librustc/middle/mem_categorization.rs index 7fa198be1d47f..866bd5377b9ba 100644 --- a/src/librustc/middle/mem_categorization.rs +++ b/src/librustc/middle/mem_categorization.rs @@ -928,7 +928,7 @@ pub impl mem_categorization_ctxt { _ => { self.tcx.sess.span_bug( pat.span, - ~"enum pattern didn't resolve to enum or struct"); + "enum pattern didn't resolve to enum or struct"); } } } diff --git a/src/librustc/middle/moves.rs b/src/librustc/middle/moves.rs index fe1466bf808a3..ecee2ea1a2fb2 100644 --- a/src/librustc/middle/moves.rs +++ b/src/librustc/middle/moves.rs @@ -424,7 +424,7 @@ pub impl VisitContext { MoveInWhole => { self.tcx.sess.span_bug( expr.span, - fmt!("Component mode can never be MoveInWhole")); + "Component mode can never be MoveInWhole"); } } } @@ -647,7 +647,7 @@ pub impl VisitContext { expr_mac(*) => { self.tcx.sess.span_bug( expr.span, - ~"macro expression remains after expansion"); + "macro expression remains after expansion"); } } } diff --git a/src/librustc/middle/privacy.rs b/src/librustc/middle/privacy.rs index a37ebdcfaa263..be98195621902 100644 --- a/src/librustc/middle/privacy.rs +++ b/src/librustc/middle/privacy.rs @@ -99,8 +99,8 @@ pub fn check_crate(tcx: ty::ctxt, parental_privacy == Public) == Private { tcx.sess.span_err(span, - ~"can only dereference enums \ - with a single, public variant"); + "can only dereference enums \ + with a single, public variant"); } }; @@ -121,8 +121,8 @@ pub fn check_crate(tcx: ty::ctxt, tcx.sess.parse_sess.interner))); } None => { - tcx.sess.span_bug(span, ~"method not found in \ - AST map?!"); + tcx.sess.span_bug(span, "method not found in \ + AST map?!"); } } }; @@ -140,8 +140,8 @@ pub fn check_crate(tcx: ty::ctxt, // Look up the enclosing impl. if container_id.crate != local_crate { tcx.sess.span_bug(span, - ~"local method isn't in local \ - impl?!"); + "local method isn't in local \ + impl?!"); } match tcx.items.find(&container_id.node) { @@ -155,10 +155,10 @@ pub fn check_crate(tcx: ty::ctxt, } } Some(_) => { - tcx.sess.span_bug(span, ~"impl wasn't an item?!"); + tcx.sess.span_bug(span, "impl wasn't an item?!"); } None => { - tcx.sess.span_bug(span, ~"impl wasn't in AST map?!"); + tcx.sess.span_bug(span, "impl wasn't in AST map?!"); } } } @@ -185,8 +185,8 @@ pub fn check_crate(tcx: ty::ctxt, tcx.sess.parse_sess.interner))); } None => { - tcx.sess.span_bug(span, ~"method not found in \ - AST map?!"); + tcx.sess.span_bug(span, "method not found in \ + AST map?!"); } } }; @@ -219,7 +219,7 @@ pub fn check_crate(tcx: ty::ctxt, .interner))); } None => { - tcx.sess.span_bug(span, ~"item not found in AST map?!"); + tcx.sess.span_bug(span, "item not found in AST map?!"); } } }; @@ -333,10 +333,10 @@ pub fn check_crate(tcx: ty::ctxt, match item.node { item_trait(_, _, ref methods) => { if method_num >= (*methods).len() { - tcx.sess.span_bug(span, ~"method \ - number \ - out of \ - range?!"); + tcx.sess.span_bug(span, "method \ + number \ + out of \ + range?!"); } match (*methods)[method_num] { provided(method) @@ -363,20 +363,20 @@ pub fn check_crate(tcx: ty::ctxt, } } _ => { - tcx.sess.span_bug(span, ~"trait wasn't \ - actually a \ - trait?!"); + tcx.sess.span_bug(span, "trait wasn't \ + actually a \ + trait?!"); } } } Some(_) => { - tcx.sess.span_bug(span, ~"trait wasn't an \ - item?!"); + tcx.sess.span_bug(span, "trait wasn't an \ + item?!"); } None => { - tcx.sess.span_bug(span, ~"trait item wasn't \ - found in the AST \ - map?!"); + tcx.sess.span_bug(span, "trait item wasn't \ + found in the AST \ + map?!"); } } } else { @@ -465,8 +465,8 @@ pub fn check_crate(tcx: ty::ctxt, match method_map.find(&expr.id) { None => { tcx.sess.span_bug(expr.span, - ~"method call not in \ - method map"); + "method call not in \ + method map"); } Some(ref entry) => { debug!("(privacy checking) checking \ @@ -512,18 +512,18 @@ pub fn check_crate(tcx: ty::ctxt, } _ => { tcx.sess.span_bug(expr.span, - ~"resolve didn't \ - map enum struct \ - constructor to a \ - variant def"); + "resolve didn't \ + map enum struct \ + constructor to a \ + variant def"); } } } } _ => { - tcx.sess.span_bug(expr.span, ~"struct expr \ - didn't have \ - struct type?!"); + tcx.sess.span_bug(expr.span, "struct expr \ + didn't have \ + struct type?!"); } } } @@ -579,18 +579,18 @@ pub fn check_crate(tcx: ty::ctxt, } _ => { tcx.sess.span_bug(pattern.span, - ~"resolve didn't \ - map enum struct \ - pattern to a \ - variant def"); + "resolve didn't \ + map enum struct \ + pattern to a \ + variant def"); } } } } _ => { tcx.sess.span_bug(pattern.span, - ~"struct pattern didn't have \ - struct type?!"); + "struct pattern didn't have \ + struct type?!"); } } } diff --git a/src/librustc/middle/region.rs b/src/librustc/middle/region.rs index 88e201fb5f438..4faa2150003f0 100644 --- a/src/librustc/middle/region.rs +++ b/src/librustc/middle/region.rs @@ -320,7 +320,7 @@ pub impl RegionMaps { pub fn parent_id(cx: ctxt, span: span) -> ast::node_id { match cx.parent { None => { - cx.sess.span_bug(span, ~"crate should not be parent here"); + cx.sess.span_bug(span, "crate should not be parent here"); } Some(parent_id) => { parent_id diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index ccd7cc6a8ab98..f93097f3ce85d 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -3261,7 +3261,7 @@ pub fn expr_kind(tcx: ctxt, ast::expr_mac(*) => { tcx.sess.span_bug( expr.span, - ~"macro expression remains after expansion"); + "macro expression remains after expansion"); } } } @@ -4242,27 +4242,27 @@ pub fn eval_repeat_count(tcx: ctxt, count_expr: @ast::expr) -> uint { const_eval::const_uint(count) => return count as uint, const_eval::const_float(count) => { tcx.sess.span_err(count_expr.span, - ~"expected signed or unsigned integer for \ - repeat count but found float"); + "expected signed or unsigned integer for \ + repeat count but found float"); return count as uint; } const_eval::const_str(_) => { tcx.sess.span_err(count_expr.span, - ~"expected signed or unsigned integer for \ - repeat count but found string"); + "expected signed or unsigned integer for \ + repeat count but found string"); return 0; } const_eval::const_bool(_) => { tcx.sess.span_err(count_expr.span, - ~"expected signed or unsigned integer for \ - repeat count but found boolean"); + "expected signed or unsigned integer for \ + repeat count but found boolean"); return 0; } }, Err(*) => { tcx.sess.span_err(count_expr.span, - ~"expected constant integer for repeat count \ - but found variable"); + "expected constant integer for repeat count \ + but found variable"); return 0; } } From 6210de9529f37bb4ff51050bca19dfd6f28026c9 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Wed, 1 May 2013 21:46:34 -0400 Subject: [PATCH 123/410] lang: fix code for maintaining borrow list --- src/libcore/unstable/lang.rs | 50 +++++++++++++++++++++++------ src/librustc/middle/trans/common.rs | 8 +++-- src/librustc/middle/trans/datum.rs | 3 +- 3 files changed, 48 insertions(+), 13 deletions(-) diff --git a/src/libcore/unstable/lang.rs b/src/libcore/unstable/lang.rs index 283f232964963..017fc4b7b63a0 100644 --- a/src/libcore/unstable/lang.rs +++ b/src/libcore/unstable/lang.rs @@ -19,6 +19,7 @@ use sys; use unstable::exchange_alloc; use cast::transmute; use task::rt::rust_get_task; +use option::{Some, None}; #[allow(non_camel_case_types)] pub type rust_task = c_void; @@ -71,6 +72,7 @@ pub fn fail_bounds_check(file: *c_char, line: size_t, } } +#[deriving(Eq)] struct BorrowRecord { box: *mut BoxRepr, file: *c_char, @@ -108,7 +110,7 @@ pub fn fail_borrowed(box: *mut BoxRepr, file: *c_char, line: size_t) { str::raw::from_c_str(entry.file) }; str::push_str(&mut msg, filename); - str::push_str(&mut msg, fmt!(":%u", line as uint)); + str::push_str(&mut msg, fmt!(":%u", entry.line as uint)); sep = " and at "; } } @@ -208,6 +210,26 @@ fn add_borrow_to_task_list(a: *mut BoxRepr, file: *c_char, line: size_t) { } } +fn remove_borrow_from_task_list(a: *mut BoxRepr, file: *c_char, line: size_t) { + do swap_task_borrow_list |borrow_list| { + let mut borrow_list = borrow_list; + let br = BorrowRecord {box: a, file: file, line: line}; + match borrow_list.rposition_elem(&br) { + Some(idx) => { + borrow_list.remove(idx); + borrow_list + } + None => { + let err = fmt!("no borrow found, br=%?, borrow_list=%?", + br, borrow_list); + do str::as_buf(err) |msg_p, _| { + fail_(msg_p as *c_char, file, line) + } + } + } + } +} + #[cfg(not(stage0))] #[lang="borrow_as_imm"] #[inline(always)] @@ -215,8 +237,9 @@ pub unsafe fn borrow_as_imm(a: *u8, file: *c_char, line: size_t) -> uint { let a: *mut BoxRepr = transmute(a); let ref_count = (*a).header.ref_count; - debug_ptr("borrow_as_imm (ptr): ", a); - debug_ptr("borrow_as_imm (ref): ", ref_count as *()); + debug_ptr("borrow_as_imm (ptr) :", a); + debug_ptr(" (ref) :", ref_count as *()); + debug_ptr(" (line): ", line as *()); if (ref_count & MUT_BIT) != 0 { fail_borrowed(a, file, line); @@ -236,7 +259,7 @@ pub unsafe fn borrow_as_mut(a: *u8, file: *c_char, line: size_t) -> uint { let a: *mut BoxRepr = transmute(a); debug_ptr("borrow_as_mut (ptr): ", a); - debug_ptr("borrow_as_mut (line): ", line as *()); + debug_ptr(" (line): ", line as *()); let ref_count = (*a).header.ref_count; if (ref_count & (MUT_BIT|FROZEN_BIT)) != 0 { @@ -265,18 +288,25 @@ pub unsafe fn return_to_mut(a: *u8) { #[cfg(not(stage0))] #[lang="return_to_mut"] #[inline(always)] -pub unsafe fn return_to_mut(a: *u8, old_ref_count: uint) { +pub unsafe fn return_to_mut(a: *u8, old_ref_count: uint, + file: *c_char, line: size_t) { // Sometimes the box is null, if it is conditionally frozen. // See e.g. #4904. if !a.is_null() { let a: *mut BoxRepr = transmute(a); + let ref_count = (*a).header.ref_count; + let combined = (ref_count & !ALL_BITS) | (old_ref_count & ALL_BITS); + (*a).header.ref_count = combined; - debug_ptr("return_to_mut (ptr): ", a); - debug_ptr("return_to_mut (ref): ", old_ref_count as *()); + debug_ptr("return_to_mut (ptr) : ", a); + debug_ptr(" (line): ", line as *()); + debug_ptr(" (old) : ", old_ref_count as *()); + debug_ptr(" (new) : ", ref_count as *()); + debug_ptr(" (comb): ", combined as *()); - let ref_count = (*a).header.ref_count & !ALL_BITS; - let old_bits = old_ref_count & ALL_BITS; - (*a).header.ref_count = ref_count | old_bits; + if ::rt::env::get().debug_borrows { + remove_borrow_from_task_list(a, file, line); + } } } diff --git a/src/librustc/middle/trans/common.rs b/src/librustc/middle/trans/common.rs index d0da8a2e1ee74..dba9ddd2b1d1a 100644 --- a/src/librustc/middle/trans/common.rs +++ b/src/librustc/middle/trans/common.rs @@ -469,7 +469,9 @@ pub fn add_clean_temp_mem(bcx: block, val: ValueRef, t: ty::t) { } pub fn add_clean_return_to_mut(bcx: block, frozen_val_ref: ValueRef, - bits_val_ref: ValueRef) { + bits_val_ref: ValueRef, + filename_val: ValueRef, + line_val: ValueRef) { //! When an `@mut` has been frozen, we have to //! call the lang-item `return_to_mut` when the //! freeze goes out of scope. We need to pass @@ -495,7 +497,9 @@ pub fn add_clean_return_to_mut(bcx: block, build::PointerCast(bcx, frozen_val_ref, T_ptr(T_ptr(T_i8())))), - build::Load(bcx, bits_val_ref) + build::Load(bcx, bits_val_ref), + filename_val, + line_val ], expr::Ignore ) diff --git a/src/librustc/middle/trans/datum.rs b/src/librustc/middle/trans/datum.rs index f4fb3b6c6f5d5..d6df6c87dec43 100644 --- a/src/librustc/middle/trans/datum.rs +++ b/src/librustc/middle/trans/datum.rs @@ -578,7 +578,8 @@ pub impl Datum { expr::SaveIn(scratch_bits.val)); add_clean_return_to_mut( - cleanup_bcx, scratch.val, scratch_bits.val); + cleanup_bcx, scratch.val, scratch_bits.val, + filename, line); } } From fbaf8399c8d4670b16684a7d94c8ed70839ffc8e Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Wed, 1 May 2013 21:50:09 -0400 Subject: [PATCH 124/410] rustc: more fix for trans_lvalue rooted twice --- src/librustc/middle/trans/expr.rs | 25 ++++--------------------- 1 file changed, 4 insertions(+), 21 deletions(-) diff --git a/src/librustc/middle/trans/expr.rs b/src/librustc/middle/trans/expr.rs index a993f781cdb18..30c541c0c055b 100644 --- a/src/librustc/middle/trans/expr.rs +++ b/src/librustc/middle/trans/expr.rs @@ -823,7 +823,7 @@ fn trans_lvalue_unadjusted(bcx: block, expr: @ast::expr) -> DatumBlock { return match expr.node { ast::expr_paren(e) => { - unrooted(bcx, e) + trans_lvalue_unadjusted(bcx, e) } ast::expr_path(_) => { trans_def_lvalue(bcx, expr, bcx.def(expr.id)) @@ -849,12 +849,7 @@ fn trans_lvalue_unadjusted(bcx: block, expr: @ast::expr) -> DatumBlock { fn trans_rec_field(bcx: block, base: @ast::expr, field: ast::ident) -> DatumBlock { - /*! - * - * Translates `base.field`. Note that this version always - * yields an unrooted, unmoved version. Rooting and possible - * moves are dealt with above in trans_lvalue_unadjusted(). - */ + //! Translates `base.field`. let mut bcx = bcx; let _icx = bcx.insn_ctxt("trans_rec_field"); @@ -878,12 +873,7 @@ fn trans_lvalue_unadjusted(bcx: block, expr: @ast::expr) -> DatumBlock { index_expr: @ast::expr, base: @ast::expr, idx: @ast::expr) -> DatumBlock { - /*! - * - * Translates `base[idx]`. Note that this version always - * yields an unrooted, unmoved version. Rooting and possible - * moves are dealt with above in trans_lvalue_unadjusted(). - */ + //! Translates `base[idx]`. let _icx = bcx.insn_ctxt("trans_index"); let ccx = bcx.ccx(); @@ -946,14 +936,7 @@ fn trans_lvalue_unadjusted(bcx: block, expr: @ast::expr) -> DatumBlock { def: ast::def) -> DatumBlock { - /*! - * - * Translates a reference to a path. Note that this version - * generally yields an unrooted, unmoved version. Rooting and - * possible moves are dealt with above in - * trans_lvalue_unadjusted(), with the caveat that local variables - * may already be in move mode. - */ + //! Translates a reference to a path. let _icx = bcx.insn_ctxt("trans_def_lvalue"); let ccx = bcx.ccx(); From 5f886342be75ef465a8e0ffe6f4e7c237fb8fd67 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Wed, 1 May 2013 21:50:32 -0400 Subject: [PATCH 125/410] syntax: fix up dynamic borrow errors in libsyntax --- src/libsyntax/parse/lexer.rs | 4 ++-- src/libsyntax/parse/parser.rs | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/libsyntax/parse/lexer.rs b/src/libsyntax/parse/lexer.rs index 60d6ce504fd9a..163c7852132a5 100644 --- a/src/libsyntax/parse/lexer.rs +++ b/src/libsyntax/parse/lexer.rs @@ -163,7 +163,7 @@ fn string_advance_token(r: @mut StringReader) { } } -fn byte_offset(rdr: @mut StringReader) -> BytePos { +fn byte_offset(rdr: &StringReader) -> BytePos { (rdr.pos - rdr.filemap.start_pos) } @@ -176,7 +176,7 @@ pub fn get_str_from(rdr: @mut StringReader, start: BytePos) -> ~str { // EFFECT: advance the StringReader by one character. If a newline is // discovered, add it to the FileMap's list of line start offsets. -pub fn bump(rdr: @mut StringReader) { +pub fn bump(rdr: &mut StringReader) { rdr.last_pos = rdr.pos; let current_byte_offset = byte_offset(rdr).to_uint();; if current_byte_offset < (*rdr.src).len() { diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 1ee651ede7510..457c6df8db254 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -1607,9 +1607,9 @@ pub impl Parser { token::LBRACE | token::LPAREN | token::LBRACKET => { self.parse_matcher_subseq( name_idx, - &*self.token, + *self.token, // tjc: not sure why we need a copy - &token::flip_delimiter(&*self.token) + token::flip_delimiter(&*self.token) ) } _ => self.fatal(~"expected open delimiter") @@ -1623,15 +1623,15 @@ pub impl Parser { fn parse_matcher_subseq( &self, name_idx: @mut uint, - bra: &token::Token, - ket: &token::Token + bra: token::Token, + ket: token::Token ) -> ~[matcher] { let mut ret_val = ~[]; let mut lparens = 0u; - self.expect(bra); + self.expect(&bra); - while *self.token != *ket || lparens > 0u { + while *self.token != ket || lparens > 0u { if *self.token == token::LPAREN { lparens += 1u; } if *self.token == token::RPAREN { lparens -= 1u; } ret_val.push(self.parse_matcher(name_idx)); @@ -1651,8 +1651,8 @@ pub impl Parser { let name_idx_lo = *name_idx; let ms = self.parse_matcher_subseq( name_idx, - &token::LPAREN, - &token::RPAREN + token::LPAREN, + token::RPAREN ); if ms.len() == 0u { self.fatal(~"repetition body must be nonempty"); From 1bd318421e4fb4252074f2963ab77dddec7949ac Mon Sep 17 00:00:00 2001 From: James Miller Date: Thu, 2 May 2013 14:04:43 +1200 Subject: [PATCH 126/410] Add error if RED_ZONE_SIZE doesn't get defined --- src/rt/rust_task.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/rt/rust_task.h b/src/rt/rust_task.h index 4aa1199cabc3f..fd4e8451b642a 100644 --- a/src/rt/rust_task.h +++ b/src/rt/rust_task.h @@ -175,6 +175,10 @@ #define RED_ZONE_SIZE RZ_MAC_32 #endif +#ifndef RED_ZONE_SIZE +# error "Red zone not defined for this platform" +#endif + struct frame_glue_fns { uintptr_t mark_glue_off; uintptr_t drop_glue_off; From 8a28970ed36a9259b6cab2ad464f358c2d0bbb6f Mon Sep 17 00:00:00 2001 From: gifnksm Date: Thu, 2 May 2013 11:08:33 +0900 Subject: [PATCH 127/410] libcore: Make `ChainIterator` take two different-typed `Iterator`s. --- src/libcore/iterator.rs | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/libcore/iterator.rs b/src/libcore/iterator.rs index 8bbf843085809..5e95485b27360 100644 --- a/src/libcore/iterator.rs +++ b/src/libcore/iterator.rs @@ -29,7 +29,7 @@ pub trait Iterator { /// /// In the future these will be default methods instead of a utility trait. pub trait IteratorUtil { - fn chain(self, other: Self) -> ChainIterator; + fn chain>(self, other: U) -> ChainIterator; fn zip>(self, other: U) -> ZipIterator; // FIXME: #5898: should be called map fn transform<'r, B>(self, f: &'r fn(A) -> B) -> MapIterator<'r, A, B, Self>; @@ -50,7 +50,7 @@ pub trait IteratorUtil { /// In the future these will be default methods instead of a utility trait. impl> IteratorUtil for T { #[inline(always)] - fn chain(self, other: T) -> ChainIterator { + fn chain>(self, other: U) -> ChainIterator { ChainIterator{a: self, b: other, flag: false} } @@ -115,13 +115,13 @@ impl> IteratorUtil for T { } } -pub struct ChainIterator { +pub struct ChainIterator { priv a: T, - priv b: T, + priv b: U, priv flag: bool } -impl> Iterator for ChainIterator { +impl, U: Iterator> Iterator for ChainIterator { #[inline] fn next(&mut self) -> Option { if self.flag { @@ -385,7 +385,7 @@ mod tests { #[test] fn test_iterator_chain() { let xs = [0u, 1, 2, 3, 4, 5]; - let ys = [30, 40, 50, 60]; + let ys = [30u, 40, 50, 60]; let expected = [0, 1, 2, 3, 4, 5, 30, 40, 50, 60]; let mut it = xs.iter().chain(ys.iter()); let mut i = 0; @@ -394,6 +394,15 @@ mod tests { i += 1; } assert_eq!(i, expected.len()); + + let ys = Counter::new(30u, 10).take(4); + let mut it = xs.iter().transform(|&x| x).chain(ys); + let mut i = 0; + for it.advance |x: uint| { + assert_eq!(x, expected[i]); + i += 1; + } + assert_eq!(i, expected.len()); } #[test] From d6697e702774c422871499826e7d346320610242 Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Wed, 1 May 2013 21:54:02 -0400 Subject: [PATCH 128/410] pass along CFLAGS/LINK_FLAGS to libuv Closes #6142 --- mk/rt.mk | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/mk/rt.mk b/mk/rt.mk index 015992abf7821..c4c80b99fc085 100644 --- a/mk/rt.mk +++ b/mk/rt.mk @@ -163,14 +163,16 @@ endif ifdef CFG_WINDOWSY_$(1) $$(LIBUV_LIB_$(1)): $$(LIBUV_DEPS) $$(Q)$$(MAKE) -C $$(S)src/libuv/ \ + CFLAGS="$$(CFG_GCCISH_CFLAGS)" \ + LDFLAGS="$$(CFG_GCCISH_LINK_FLAGS)" \ builddir_name="$$(CFG_BUILD_DIR)/rt/$(1)/libuv" \ OS=mingw \ V=$$(VERBOSE) else ifeq ($(OSTYPE_$(1)), linux-androideabi) $$(LIBUV_LIB_$(1)): $$(LIBUV_DEPS) $$(Q)$$(MAKE) -C $$(S)src/libuv/ \ - CFLAGS="$$(LIBUV_FLAGS_$$(HOST_$(1))) $$(SNAP_DEFINES)" \ - LDFLAGS="$$(LIBUV_FLAGS_$$(HOST_$(1)))" \ + CFLAGS="$$(CFG_GCCISH_CFLAGS) $$(LIBUV_FLAGS_$$(HOST_$(1))) $$(SNAP_DEFINES)" \ + LDFLAGS="$$(CFG_GCCISH_LINK_FLAGS) $$(LIBUV_FLAGS_$$(HOST_$(1)))" \ CC="$$(CC_$(1))" \ CXX="$$(CXX_$(1))" \ AR="$$(AR_$(1))" \ @@ -181,8 +183,8 @@ $$(LIBUV_LIB_$(1)): $$(LIBUV_DEPS) else $$(LIBUV_LIB_$(1)): $$(LIBUV_DEPS) $$(Q)$$(MAKE) -C $$(S)src/libuv/ \ - CFLAGS="$$(LIBUV_FLAGS_$$(HOST_$(1))) $$(SNAP_DEFINES)" \ - LDFLAGS="$$(LIBUV_FLAGS_$$(HOST_$(1)))" \ + CFLAGS="$$(CFG_GCCISH_CFLAGS) $$(LIBUV_FLAGS_$$(HOST_$(1))) $$(SNAP_DEFINES)" \ + LDFLAGS="$$(CFG_GCCISH_LINK_FLAGS) $$(LIBUV_FLAGS_$$(HOST_$(1)))" \ CC="$$(CC_$(1))" \ CXX="$$(CXX_$(1))" \ AR="$$(AR_$(1))" \ From e596128bd87b978fb163235bcf5eb0ef7d446218 Mon Sep 17 00:00:00 2001 From: Brendan Zabarauskas Date: Wed, 1 May 2013 20:52:09 +1000 Subject: [PATCH 129/410] Remove 'Local Variable' comments --- src/compiletest/compiletest.rc | 7 ------- src/libcore/core.rc | 9 --------- src/libcore/either.rs | 10 ---------- src/libcore/io.rs | 10 ---------- src/libcore/libc.rs | 9 --------- src/libcore/num/cmath.rs | 11 ----------- src/libcore/num/f32.rs | 10 ---------- src/libcore/num/f64.rs | 10 ---------- src/libcore/num/float.rs | 10 ---------- src/libcore/option.rs | 8 -------- src/libcore/rand.rs | 9 --------- src/libcore/run.rs | 8 -------- src/libcore/sys.rs | 8 -------- src/libcore/unstable/extfmt.rs | 8 -------- src/libcore/unstable/lang.rs | 8 -------- src/libfuzzer/fuzzer.rc | 7 ------- src/librustc/back/abi.rs | 9 --------- src/librustc/back/arm.rs | 11 ----------- src/librustc/back/link.rs | 10 ---------- src/librustc/back/mips.rs | 11 ----------- src/librustc/back/upcall.rs | 9 --------- src/librustc/back/x86.rs | 10 ---------- src/librustc/back/x86_64.rs | 10 ---------- src/librustc/driver/driver.rs | 8 -------- src/librustc/driver/session.rs | 7 ------- src/librustc/front/config.rs | 8 -------- src/librustc/front/test.rs | 8 -------- src/librustc/lib/llvm.rs | 10 ---------- src/librustc/metadata/creader.rs | 8 -------- src/librustc/metadata/csearch.rs | 8 -------- src/librustc/metadata/cstore.rs | 8 -------- src/librustc/metadata/decoder.rs | 8 -------- src/librustc/metadata/encoder.rs | 9 --------- src/librustc/metadata/tydecode.rs | 10 ---------- src/librustc/metadata/tyencode.rs | 10 ---------- src/librustc/middle/check_const.rs | 8 -------- src/librustc/middle/check_match.rs | 8 -------- src/librustc/middle/const_eval.rs | 9 --------- src/librustc/middle/freevars.rs | 8 -------- src/librustc/middle/kind.rs | 10 ---------- src/librustc/middle/lint.rs | 10 ---------- src/librustc/middle/trans/_match.rs | 8 -------- src/librustc/middle/trans/base.rs | 9 --------- src/librustc/middle/trans/build.rs | 10 ---------- src/librustc/middle/trans/common.rs | 10 ---------- src/librustc/middle/trans/tvec.rs | 10 ---------- src/librustc/middle/ty.rs | 8 -------- src/librustc/middle/typeck/mod.rs | 9 --------- src/librustc/rustc.rc | 8 -------- src/librustc/util/common.rs | 10 ---------- src/librustc/util/ppaux.rs | 8 -------- src/libstd/bitv.rs | 10 ---------- src/libstd/dbg.rs | 8 -------- src/libstd/getopts.rs | 8 -------- src/libstd/list.rs | 8 -------- src/libstd/sha1.rs | 8 -------- src/libstd/sort.rs | 8 -------- src/libstd/std.rc | 8 -------- src/libstd/term.rs | 7 ------- src/libstd/test.rs | 9 --------- src/libsyntax/ast.rs | 9 --------- src/libsyntax/ast_map.rs | 8 -------- src/libsyntax/ast_util.rs | 8 -------- src/libsyntax/attr.rs | 10 ---------- src/libsyntax/codemap.rs | 12 ------------ src/libsyntax/ext/asm.rs | 12 ------------ src/libsyntax/ext/base.rs | 10 ---------- src/libsyntax/ext/env.rs | 10 ---------- src/libsyntax/ext/expand.rs | 8 -------- src/libsyntax/ext/fmt.rs | 9 --------- src/libsyntax/ext/source_util.rs | 10 ---------- src/libsyntax/ext/tt/macro_parser.rs | 8 -------- src/libsyntax/fold.rs | 10 ---------- src/libsyntax/parse/attr.rs | 10 ---------- src/libsyntax/parse/lexer.rs | 10 ---------- src/libsyntax/parse/mod.rs | 10 ---------- src/libsyntax/parse/parser.rs | 11 ----------- src/libsyntax/parse/token.rs | 8 -------- src/libsyntax/print/pp.rs | 11 ----------- src/libsyntax/print/pprust.rs | 10 ---------- src/libsyntax/visit.rs | 8 -------- src/test/run-pass/item-attributes.rs | 10 ---------- src/test/run-pass/spawn.rs | 8 -------- src/test/run-pass/spawn2.rs | 8 -------- src/test/run-pass/task-killjoin-rsrc.rs | 8 -------- src/test/run-pass/task-killjoin.rs | 8 -------- 86 files changed, 775 deletions(-) diff --git a/src/compiletest/compiletest.rc b/src/compiletest/compiletest.rc index 4392ce7ba2891..b6d690f83076f 100644 --- a/src/compiletest/compiletest.rc +++ b/src/compiletest/compiletest.rc @@ -223,10 +223,3 @@ pub fn make_test_closure(config: config, testfile: &Path) -> test::TestFn { let testfile = testfile.to_str(); test::DynTestFn(|| runtest::run(config, testfile)) } - -// Local Variables: -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/libcore/core.rc b/src/libcore/core.rc index 9a0419ebfc6b2..f410591fdc7a3 100644 --- a/src/libcore/core.rc +++ b/src/libcore/core.rc @@ -263,12 +263,3 @@ mod core { pub use sys; pub use pipes; } - - -// Local Variables: -// mode: rust; -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/libcore/either.rs b/src/libcore/either.rs index 92f850cddd6d1..33b7e81ee85fb 100644 --- a/src/libcore/either.rs +++ b/src/libcore/either.rs @@ -263,13 +263,3 @@ fn test_partition_empty() { assert_eq!(vec::len(lefts), 0u); assert_eq!(vec::len(rights), 0u); } - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/libcore/io.rs b/src/libcore/io.rs index 35ffd88c8f477..185b84a09c518 100644 --- a/src/libcore/io.rs +++ b/src/libcore/io.rs @@ -1954,13 +1954,3 @@ mod tests { } } } - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/libcore/libc.rs b/src/libcore/libc.rs index 999a5d9b350e4..53aaf5726dd0b 100644 --- a/src/libcore/libc.rs +++ b/src/libcore/libc.rs @@ -1846,12 +1846,3 @@ pub mod funcs { } } } - - -// Local Variables: -// mode: rust; -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/libcore/num/cmath.rs b/src/libcore/num/cmath.rs index 30b0c54dc2dc2..8a0a88235d20c 100644 --- a/src/libcore/num/cmath.rs +++ b/src/libcore/num/cmath.rs @@ -267,14 +267,3 @@ pub mod c_double_targ_consts { } */ - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// - diff --git a/src/libcore/num/f32.rs b/src/libcore/num/f32.rs index 04ddd63a177e7..a00225e85bc49 100644 --- a/src/libcore/num/f32.rs +++ b/src/libcore/num/f32.rs @@ -986,13 +986,3 @@ mod tests { assert_eq!(Primitive::bytes::(), sys::size_of::()); } } - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/libcore/num/f64.rs b/src/libcore/num/f64.rs index 9f1944e3fad7f..c3bd89b0e0361 100644 --- a/src/libcore/num/f64.rs +++ b/src/libcore/num/f64.rs @@ -1033,13 +1033,3 @@ mod tests { assert_eq!(Primitive::bytes::(), sys::size_of::()); } } - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/libcore/num/float.rs b/src/libcore/num/float.rs index f163d67a69ccb..b487fa48782b8 100644 --- a/src/libcore/num/float.rs +++ b/src/libcore/num/float.rs @@ -1139,13 +1139,3 @@ mod tests { assert_eq!(to_str_digits(-infinity, 10u), ~"-inf"); } } - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/libcore/option.rs b/src/libcore/option.rs index 17192b4257b16..47ec1fabcb822 100644 --- a/src/libcore/option.rs +++ b/src/libcore/option.rs @@ -565,11 +565,3 @@ fn test_get_or_zero() { let no_stuff: Option = None; assert!(no_stuff.get_or_zero() == 0); } - -// Local Variables: -// mode: rust; -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/libcore/rand.rs b/src/libcore/rand.rs index 94ba5ba31b756..80f69f067eb54 100644 --- a/src/libcore/rand.rs +++ b/src/libcore/rand.rs @@ -1073,12 +1073,3 @@ mod tests { } } } - - -// Local Variables: -// mode: rust; -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/libcore/run.rs b/src/libcore/run.rs index 37401788ca2d1..d0c495dd19e44 100644 --- a/src/libcore/run.rs +++ b/src/libcore/run.rs @@ -639,11 +639,3 @@ mod tests { test_destroy_actually_kills(true); } } - -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/libcore/sys.rs b/src/libcore/sys.rs index 8cad0a2288642..c0c1ad6d89615 100644 --- a/src/libcore/sys.rs +++ b/src/libcore/sys.rs @@ -343,11 +343,3 @@ mod tests { #[should_fail] fn fail_owned() { FailWithCause::fail_with(~"cause", file!(), line!()) } } - -// Local Variables: -// mode: rust; -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/libcore/unstable/extfmt.rs b/src/libcore/unstable/extfmt.rs index b812be5575a4a..f65b1e6726ed4 100644 --- a/src/libcore/unstable/extfmt.rs +++ b/src/libcore/unstable/extfmt.rs @@ -688,11 +688,3 @@ mod test { let _s = fmt!("%s", s); } } - -// Local Variables: -// mode: rust; -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/libcore/unstable/lang.rs b/src/libcore/unstable/lang.rs index 611862a79e7e0..a6599e03d6b72 100644 --- a/src/libcore/unstable/lang.rs +++ b/src/libcore/unstable/lang.rs @@ -183,11 +183,3 @@ pub fn start(main: *u8, argc: int, argv: **c_char, crate_map: *c_void) -> c_int; } } - -// Local Variables: -// mode: rust; -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/libfuzzer/fuzzer.rc b/src/libfuzzer/fuzzer.rc index fc1efd3313cbc..7c93d867f5040 100644 --- a/src/libfuzzer/fuzzer.rc +++ b/src/libfuzzer/fuzzer.rc @@ -693,10 +693,3 @@ pub fn main() { error!("Fuzzer done"); } - -// Local Variables: -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/librustc/back/abi.rs b/src/librustc/back/abi.rs index 70a029ede6f8d..842dd89a7cd49 100644 --- a/src/librustc/back/abi.rs +++ b/src/librustc/back/abi.rs @@ -77,12 +77,3 @@ pub fn bzero_glue_name() -> ~str { return ~"rust_bzero_glue"; } pub fn yield_glue_name() -> ~str { return ~"rust_yield_glue"; } pub fn no_op_type_glue_name() -> ~str { return ~"rust_no_op_type_glue"; } -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/librustc/back/arm.rs b/src/librustc/back/arm.rs index 97c3a588a7fc8..dfe5751f21b83 100644 --- a/src/librustc/back/arm.rs +++ b/src/librustc/back/arm.rs @@ -72,14 +72,3 @@ pub fn get_target_strs(target_os: session::os) -> target_strs::t { cc_args: ~[~"-marm"] }; } - - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/librustc/back/link.rs b/src/librustc/back/link.rs index adaffe5873dab..87e08a73fcb1c 100644 --- a/src/librustc/back/link.rs +++ b/src/librustc/back/link.rs @@ -949,13 +949,3 @@ pub fn link_args(sess: Session, return args; } - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/librustc/back/mips.rs b/src/librustc/back/mips.rs index 93c1879eb0f4b..b15306a56b0b9 100644 --- a/src/librustc/back/mips.rs +++ b/src/librustc/back/mips.rs @@ -72,14 +72,3 @@ pub fn get_target_strs(target_os: session::os) -> target_strs::t { cc_args: ~[] }; } - - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/librustc/back/upcall.rs b/src/librustc/back/upcall.rs index 4cdd279e2fc25..8fcc5234e8b51 100644 --- a/src/librustc/back/upcall.rs +++ b/src/librustc/back/upcall.rs @@ -59,12 +59,3 @@ pub fn declare_upcalls(targ_cfg: @session::config, nothrow(dv(~"reset_stack_limit", ~[])) } } -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/librustc/back/x86.rs b/src/librustc/back/x86.rs index 2cc812c3d4105..759f5f63c9ec2 100644 --- a/src/librustc/back/x86.rs +++ b/src/librustc/back/x86.rs @@ -55,13 +55,3 @@ pub fn get_target_strs(target_os: session::os) -> target_strs::t { cc_args: ~[~"-m32"] }; } - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/librustc/back/x86_64.rs b/src/librustc/back/x86_64.rs index b68073974dcf9..ed6f1d285147e 100644 --- a/src/librustc/back/x86_64.rs +++ b/src/librustc/back/x86_64.rs @@ -63,13 +63,3 @@ pub fn get_target_strs(target_os: session::os) -> target_strs::t { cc_args: ~[~"-m64"] }; } - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/librustc/driver/driver.rs b/src/librustc/driver/driver.rs index 8c053c265fa21..afd0e0acfe910 100644 --- a/src/librustc/driver/driver.rs +++ b/src/librustc/driver/driver.rs @@ -951,11 +951,3 @@ mod test { assert!((vec::len(test_items) == 1u)); } } - -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/librustc/driver/session.rs b/src/librustc/driver/session.rs index ff623049f758d..b9e0eeb346669 100644 --- a/src/librustc/driver/session.rs +++ b/src/librustc/driver/session.rs @@ -430,10 +430,3 @@ mod test { assert!(building_library(lib_crate, crate, true)); } } - -// Local Variables: -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/librustc/front/config.rs b/src/librustc/front/config.rs index 75ae8724d720b..2246dd9d2f0aa 100644 --- a/src/librustc/front/config.rs +++ b/src/librustc/front/config.rs @@ -194,11 +194,3 @@ pub fn metas_in_cfg(cfg: ast::crate_cfg, }) }) } - - -// Local Variables: -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/librustc/front/test.rs b/src/librustc/front/test.rs index 02e2a4c8734f8..4506feece2b8f 100644 --- a/src/librustc/front/test.rs +++ b/src/librustc/front/test.rs @@ -456,11 +456,3 @@ fn mk_test_desc_and_fn_rec(cx: &TestCtxt, test: &Test) -> @ast::expr { ); e } - -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/librustc/lib/llvm.rs b/src/librustc/lib/llvm.rs index 31050448e7552..fbb3380554d9e 100644 --- a/src/librustc/lib/llvm.rs +++ b/src/librustc/lib/llvm.rs @@ -2196,13 +2196,3 @@ pub fn mk_section_iter(llof: ObjectFileRef) -> SectionIter { } } } - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/librustc/metadata/creader.rs b/src/librustc/metadata/creader.rs index 0d0f0d7ab69f3..da7a2c15f30be 100644 --- a/src/librustc/metadata/creader.rs +++ b/src/librustc/metadata/creader.rs @@ -328,11 +328,3 @@ fn resolve_crate_deps(e: @mut Env, cdata: @~[u8]) -> cstore::cnum_map { } return @mut cnum_map; } - -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/librustc/metadata/csearch.rs b/src/librustc/metadata/csearch.rs index f8dc34f9cee3a..375989b0ebe61 100644 --- a/src/librustc/metadata/csearch.rs +++ b/src/librustc/metadata/csearch.rs @@ -243,11 +243,3 @@ pub fn get_link_args_for_crate(cstore: @mut cstore::CStore, let cdata = cstore::get_crate_data(cstore, crate_num); decoder::get_link_args_for_crate(cdata) } - -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/librustc/metadata/cstore.rs b/src/librustc/metadata/cstore.rs index 05275a4c66558..21815a9ed4718 100644 --- a/src/librustc/metadata/cstore.rs +++ b/src/librustc/metadata/cstore.rs @@ -161,11 +161,3 @@ pub fn get_dep_hashes(cstore: &CStore) -> ~[~str] { sorted.map(|ch| /*bad*/copy *ch.hash) } - -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/librustc/metadata/decoder.rs b/src/librustc/metadata/decoder.rs index fb7b3f9c8b129..61454c802cc9a 100644 --- a/src/librustc/metadata/decoder.rs +++ b/src/librustc/metadata/decoder.rs @@ -1176,11 +1176,3 @@ pub fn get_link_args_for_crate(cdata: cmd) -> ~[~str] { } result } - -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/librustc/metadata/encoder.rs b/src/librustc/metadata/encoder.rs index ba6a4f30857eb..2a4334781e4dc 100644 --- a/src/librustc/metadata/encoder.rs +++ b/src/librustc/metadata/encoder.rs @@ -1420,12 +1420,3 @@ pub fn encoded_ty(tcx: ty::ctxt, t: ty::t) -> ~str { tyencode::enc_ty(wr, cx, t); } } - - -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/librustc/metadata/tydecode.rs b/src/librustc/metadata/tydecode.rs index 011ee115e8c15..b12db430afc31 100644 --- a/src/librustc/metadata/tydecode.rs +++ b/src/librustc/metadata/tydecode.rs @@ -567,13 +567,3 @@ fn parse_bounds(st: @mut PState, conv: conv_did) -> @~[ty::param_bound] { } @bounds } - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/librustc/metadata/tyencode.rs b/src/librustc/metadata/tyencode.rs index 763b1984b81c8..0548204b154e0 100644 --- a/src/librustc/metadata/tyencode.rs +++ b/src/librustc/metadata/tyencode.rs @@ -416,13 +416,3 @@ pub fn enc_type_param_def(w: @io::Writer, cx: @ctxt, v: &ty::TypeParameterDef) { w.write_char('|'); enc_bounds(w, cx, v.bounds); } - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/librustc/middle/check_const.rs b/src/librustc/middle/check_const.rs index 6a47eedcea8c3..36be65ed63f5b 100644 --- a/src/librustc/middle/check_const.rs +++ b/src/librustc/middle/check_const.rs @@ -253,11 +253,3 @@ pub fn check_item_recursion(sess: Session, visit::visit_expr(e, env, v); } } - -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/librustc/middle/check_match.rs b/src/librustc/middle/check_match.rs index 852eb1b50a499..e412a0e51027c 100644 --- a/src/librustc/middle/check_match.rs +++ b/src/librustc/middle/check_match.rs @@ -862,11 +862,3 @@ pub fn check_legality_of_move_bindings(cx: @MatchCheckCtxt, (vt.visit_pat)(*pat, false, vt); } } - -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/librustc/middle/const_eval.rs b/src/librustc/middle/const_eval.rs index 86b7379bb698d..63b9fcf7096d0 100644 --- a/src/librustc/middle/const_eval.rs +++ b/src/librustc/middle/const_eval.rs @@ -484,12 +484,3 @@ pub fn lit_expr_eq(tcx: middle::ty::ctxt, a: @expr, b: @expr) -> bool { pub fn lit_eq(a: @lit, b: @lit) -> bool { compare_const_vals(&lit_to_const(a), &lit_to_const(b)) == 0 } - - -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/librustc/middle/freevars.rs b/src/librustc/middle/freevars.rs index 4c8d36f93f4b2..419b75a2ad9d8 100644 --- a/src/librustc/middle/freevars.rs +++ b/src/librustc/middle/freevars.rs @@ -119,11 +119,3 @@ pub fn get_freevars(tcx: ty::ctxt, fid: ast::node_id) -> freevar_info { pub fn has_freevars(tcx: ty::ctxt, fid: ast::node_id) -> bool { return vec::len(*get_freevars(tcx, fid)) != 0u; } - -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/librustc/middle/kind.rs b/src/librustc/middle/kind.rs index 0925e8cdd6375..90e6f7c6af92b 100644 --- a/src/librustc/middle/kind.rs +++ b/src/librustc/middle/kind.rs @@ -587,13 +587,3 @@ pub fn check_kind_bounds_of_cast(cx: Context, source: @expr, target: @expr) { _ => {} // Nothing to do. } } - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/librustc/middle/lint.rs b/src/librustc/middle/lint.rs index b67d74bc272b6..f6db25065b7a8 100644 --- a/src/librustc/middle/lint.rs +++ b/src/librustc/middle/lint.rs @@ -946,13 +946,3 @@ pub fn check_crate(tcx: ty::ctxt, crate: @ast::crate) { tcx.sess.abort_if_errors(); } - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/librustc/middle/trans/_match.rs b/src/librustc/middle/trans/_match.rs index 3755cca8c35e9..197b537fe9003 100644 --- a/src/librustc/middle/trans/_match.rs +++ b/src/librustc/middle/trans/_match.rs @@ -1862,11 +1862,3 @@ pub fn bind_irrefutable_pat(bcx: block, } return bcx; } - -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs index 2090e50000b01..0c3e3ba3cb672 100644 --- a/src/librustc/middle/trans/base.rs +++ b/src/librustc/middle/trans/base.rs @@ -3172,12 +3172,3 @@ pub fn trans_crate(sess: session::Session, return (llmod, link_meta); } } -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/librustc/middle/trans/build.rs b/src/librustc/middle/trans/build.rs index f5c496484a037..a02ac96e520bd 100644 --- a/src/librustc/middle/trans/build.rs +++ b/src/librustc/middle/trans/build.rs @@ -1086,13 +1086,3 @@ pub fn AtomicRMW(cx: block, op: AtomicBinOp, llvm::LLVMBuildAtomicRMW(B(cx), op, dst, src, order) } } - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/librustc/middle/trans/common.rs b/src/librustc/middle/trans/common.rs index f8fb0f4b7cf31..d31caffe77a14 100644 --- a/src/librustc/middle/trans/common.rs +++ b/src/librustc/middle/trans/common.rs @@ -1521,13 +1521,3 @@ pub fn dummy_substs(tps: ~[ty::t]) -> ty::substs { pub fn bool_to_i1(bcx: block, llval: ValueRef) -> ValueRef { build::ICmp(bcx, lib::llvm::IntNE, llval, C_bool(false)) } - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/librustc/middle/trans/tvec.rs b/src/librustc/middle/trans/tvec.rs index 30a7648e7eafb..da1cdfa4db103 100644 --- a/src/librustc/middle/trans/tvec.rs +++ b/src/librustc/middle/trans/tvec.rs @@ -594,13 +594,3 @@ pub fn iter_vec_unboxed(bcx: block, body_ptr: ValueRef, vec_ty: ty::t, let dataptr = get_dataptr(bcx, body_ptr); return iter_vec_raw(bcx, dataptr, vec_ty, fill, f); } - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index ccd7cc6a8ab98..1546c885a6d62 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -4370,11 +4370,3 @@ pub fn visitor_object_ty(tcx: ctxt) -> (@TraitRef, t) { (trait_ref, mk_trait(tcx, trait_ref.def_id, copy trait_ref.substs, BoxTraitStore, ast::m_imm)) } - -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/librustc/middle/typeck/mod.rs b/src/librustc/middle/typeck/mod.rs index 646b6412f5507..b0e0b7319ac84 100644 --- a/src/librustc/middle/typeck/mod.rs +++ b/src/librustc/middle/typeck/mod.rs @@ -426,12 +426,3 @@ pub fn check_crate(tcx: ty::ctxt, tcx.sess.abort_if_errors(); (ccx.method_map, ccx.vtable_map) } -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/librustc/rustc.rc b/src/librustc/rustc.rc index 54c51cf2e487a..adb1c2fcc4171 100644 --- a/src/librustc/rustc.rc +++ b/src/librustc/rustc.rc @@ -357,11 +357,3 @@ pub fn main() { run_compiler(&args, demitter); } } - - -// Local Variables: -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/librustc/util/common.rs b/src/librustc/util/common.rs index 38f55b2b6e423..b4a479fc5970f 100644 --- a/src/librustc/util/common.rs +++ b/src/librustc/util/common.rs @@ -112,13 +112,3 @@ pub fn pluralize(n: uint, s: ~str) -> ~str { // A set of node IDs (used to keep track of which node IDs are for statements) pub type stmt_set = @mut HashSet; - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/librustc/util/ppaux.rs b/src/librustc/util/ppaux.rs index aa8c3f8fd1b7e..69849a8d51b83 100644 --- a/src/librustc/util/ppaux.rs +++ b/src/librustc/util/ppaux.rs @@ -739,11 +739,3 @@ impl Repr for ty::vstore { vstore_to_str(tcx, *self) } } - -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End diff --git a/src/libstd/bitv.rs b/src/libstd/bitv.rs index 5314c35419cc5..078ed6af5a02a 100644 --- a/src/libstd/bitv.rs +++ b/src/libstd/bitv.rs @@ -1507,13 +1507,3 @@ mod tests { } } } - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/libstd/dbg.rs b/src/libstd/dbg.rs index 34dd6390ecc12..4b2d2a60a68ef 100644 --- a/src/libstd/dbg.rs +++ b/src/libstd/dbg.rs @@ -76,11 +76,3 @@ fn test_breakpoint_should_not_abort_process_when_not_under_gdb() { // the process under normal circumstances breakpoint(); } - -// Local Variables: -// mode: rust; -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/libstd/getopts.rs b/src/libstd/getopts.rs index fda5c105da5f7..c03042fe9c2bf 100644 --- a/src/libstd/getopts.rs +++ b/src/libstd/getopts.rs @@ -1374,11 +1374,3 @@ Options: assert!(usage == expected) } } - -// Local Variables: -// mode: rust; -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/libstd/list.rs b/src/libstd/list.rs index 401cc121a62a8..2b6fa0bc05691 100644 --- a/src/libstd/list.rs +++ b/src/libstd/list.rs @@ -242,11 +242,3 @@ mod tests { == list::append(list::from_vec(~[1,2]), list::from_vec(~[3,4]))); } } - -// Local Variables: -// mode: rust; -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/libstd/sha1.rs b/src/libstd/sha1.rs index 7371250b38a91..a8e0f7d062a58 100644 --- a/src/libstd/sha1.rs +++ b/src/libstd/sha1.rs @@ -412,11 +412,3 @@ mod tests { } } } - -// Local Variables: -// mode: rust; -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/libstd/sort.rs b/src/libstd/sort.rs index 3e6011e80df81..172532a2e5b6b 100644 --- a/src/libstd/sort.rs +++ b/src/libstd/sort.rs @@ -1202,11 +1202,3 @@ mod big_tests { } } } - -// Local Variables: -// mode: rust; -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/libstd/std.rc b/src/libstd/std.rc index 0a5348d79760e..ea099090ebaba 100644 --- a/src/libstd/std.rc +++ b/src/libstd/std.rc @@ -121,11 +121,3 @@ pub mod std { pub use serialize; pub use test; } - -// Local Variables: -// mode: rust; -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/libstd/term.rs b/src/libstd/term.rs index 022f1f8564ece..a79b9f4c84980 100644 --- a/src/libstd/term.rs +++ b/src/libstd/term.rs @@ -76,10 +76,3 @@ pub fn fg(writer: @io::Writer, color: u8) { pub fn bg(writer: @io::Writer, color: u8) { return set_color(writer, '4' as u8, color); } - -// Local Variables: -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/libstd/test.rs b/src/libstd/test.rs index 278a326d1de95..65fb0c7426a4e 100644 --- a/src/libstd/test.rs +++ b/src/libstd/test.rs @@ -960,12 +960,3 @@ mod tests { } } } - - -// Local Variables: -// mode: rust; -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index 4bb2d220ad669..a295952439fba 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -1346,12 +1346,3 @@ mod test { } */ -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/libsyntax/ast_map.rs b/src/libsyntax/ast_map.rs index d2125cebb5e48..69397276c4f54 100644 --- a/src/libsyntax/ast_map.rs +++ b/src/libsyntax/ast_map.rs @@ -404,11 +404,3 @@ pub fn node_item_query(items: map, id: node_id, _ => fail!(error_msg) } } - -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/libsyntax/ast_util.rs b/src/libsyntax/ast_util.rs index 2b3793e45e9c8..47ef7227842e2 100644 --- a/src/libsyntax/ast_util.rs +++ b/src/libsyntax/ast_util.rs @@ -832,11 +832,3 @@ mod test { } } - -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/libsyntax/attr.rs b/src/libsyntax/attr.rs index 2f8405c6e9689..f4f0def284327 100644 --- a/src/libsyntax/attr.rs +++ b/src/libsyntax/attr.rs @@ -341,13 +341,3 @@ pub fn require_unique_names(diagnostic: @span_handler, } } } - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/libsyntax/codemap.rs b/src/libsyntax/codemap.rs index 1194506a8876f..5f4967351e11b 100644 --- a/src/libsyntax/codemap.rs +++ b/src/libsyntax/codemap.rs @@ -522,15 +522,3 @@ mod test { fm.next_line(BytePos(2)); } } - - - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/libsyntax/ext/asm.rs b/src/libsyntax/ext/asm.rs index dfebf6f786a28..53f40113532b2 100644 --- a/src/libsyntax/ext/asm.rs +++ b/src/libsyntax/ext/asm.rs @@ -187,15 +187,3 @@ pub fn expand_asm(cx: @ext_ctxt, sp: span, tts: &[ast::token_tree]) span: sp }) } - - - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/libsyntax/ext/base.rs b/src/libsyntax/ext/base.rs index 2d6d74b5c1e32..1c03ad1375919 100644 --- a/src/libsyntax/ext/base.rs +++ b/src/libsyntax/ext/base.rs @@ -543,13 +543,3 @@ mod test { assert_eq!(*(m.find(&@~"def").get()),16); } } - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/libsyntax/ext/env.rs b/src/libsyntax/ext/env.rs index 5e5fd7d97b19f..5b1e3737b236b 100644 --- a/src/libsyntax/ext/env.rs +++ b/src/libsyntax/ext/env.rs @@ -34,13 +34,3 @@ pub fn expand_syntax_ext(cx: @ext_ctxt, sp: span, tts: &[ast::token_tree]) }; MRExpr(e) } - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs index fde5a2594226e..02a698b283d39 100644 --- a/src/libsyntax/ext/expand.rs +++ b/src/libsyntax/ext/expand.rs @@ -721,11 +721,3 @@ mod test { } } - -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/libsyntax/ext/fmt.rs b/src/libsyntax/ext/fmt.rs index 9bbe617eb070b..62641279f883a 100644 --- a/src/libsyntax/ext/fmt.rs +++ b/src/libsyntax/ext/fmt.rs @@ -322,12 +322,3 @@ fn pieces_to_expr(cx: @ext_ctxt, sp: span, return mk_block(cx, fmt_sp, ~[], stms, Some(buf())); } -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/libsyntax/ext/source_util.rs b/src/libsyntax/ext/source_util.rs index 70aa9472c855b..ab22b3152f477 100644 --- a/src/libsyntax/ext/source_util.rs +++ b/src/libsyntax/ext/source_util.rs @@ -150,13 +150,3 @@ fn res_rel_file(cx: @ext_ctxt, sp: codemap::span, arg: &Path) -> Path { copy *arg } } - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/libsyntax/ext/tt/macro_parser.rs b/src/libsyntax/ext/tt/macro_parser.rs index e4e033e0ffff7..0c1e619985d26 100644 --- a/src/libsyntax/ext/tt/macro_parser.rs +++ b/src/libsyntax/ext/tt/macro_parser.rs @@ -438,11 +438,3 @@ pub fn parse_nt(p: &Parser, name: ~str) -> nonterminal { _ => p.fatal(~"Unsupported builtin nonterminal parser: " + name) } } - -// Local Variables: -// mode: rust; -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs index 36565395e5988..229a8664d0c35 100644 --- a/src/libsyntax/fold.rs +++ b/src/libsyntax/fold.rs @@ -859,13 +859,3 @@ impl AstFoldExtensions for @ast_fold { pub fn make_fold(afp: ast_fold_fns) -> @ast_fold { afp as @ast_fold } - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/libsyntax/parse/attr.rs b/src/libsyntax/parse/attr.rs index cc580155d70cf..037b2c089f46a 100644 --- a/src/libsyntax/parse/attr.rs +++ b/src/libsyntax/parse/attr.rs @@ -179,13 +179,3 @@ impl parser_attr for Parser { } } } - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/libsyntax/parse/lexer.rs b/src/libsyntax/parse/lexer.rs index 60d6ce504fd9a..16a7ef71317ef 100644 --- a/src/libsyntax/parse/lexer.rs +++ b/src/libsyntax/parse/lexer.rs @@ -892,13 +892,3 @@ mod test { assert_eq!(tok, token::LIFETIME(id)); } } - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/libsyntax/parse/mod.rs b/src/libsyntax/parse/mod.rs index 5d51a54d770b1..74e4f562ce5c5 100644 --- a/src/libsyntax/parse/mod.rs +++ b/src/libsyntax/parse/mod.rs @@ -674,13 +674,3 @@ mod test { string_to_expr(@~"a::z.froob(b,@(987+3))"); } } - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index a582748edb39c..8459fc8c6273d 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -4509,14 +4509,3 @@ pub impl Parser { } } } - - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/libsyntax/parse/token.rs b/src/libsyntax/parse/token.rs index 338b7c99d9730..fe7bd5b3bc17d 100644 --- a/src/libsyntax/parse/token.rs +++ b/src/libsyntax/parse/token.rs @@ -556,11 +556,3 @@ pub fn reserved_keyword_table() -> HashSet<~str> { } return words; } - - -// Local Variables: -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/libsyntax/print/pp.rs b/src/libsyntax/print/pp.rs index e2ad5becb123b..3fa615939b77e 100644 --- a/src/libsyntax/print/pp.rs +++ b/src/libsyntax/print/pp.rs @@ -587,14 +587,3 @@ pub fn hardbreak_tok_offset(off: int) -> token { } pub fn hardbreak_tok() -> token { return hardbreak_tok_offset(0); } - - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index ab958d8b5cef5..76de109eebd30 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -2280,13 +2280,3 @@ mod test { assert_eq!(&varstr,&~"pub principal_skinner"); } } - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/libsyntax/visit.rs b/src/libsyntax/visit.rs index 71cfbab91089e..9a0c97d76162b 100644 --- a/src/libsyntax/visit.rs +++ b/src/libsyntax/visit.rs @@ -757,11 +757,3 @@ pub fn mk_simple_visitor(v: simple_visitor) -> vt<()> { v_struct_method(v.visit_struct_method, a, b, c) }); } - -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/test/run-pass/item-attributes.rs b/src/test/run-pass/item-attributes.rs index 24fe671337287..c616d46a8336c 100644 --- a/src/test/run-pass/item-attributes.rs +++ b/src/test/run-pass/item-attributes.rs @@ -195,13 +195,3 @@ fn test_fn_inner() { } pub fn main() { } - -// -// Local Variables: -// mode: rust -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: -// diff --git a/src/test/run-pass/spawn.rs b/src/test/run-pass/spawn.rs index db4ca7b3ed863..63c2b7da38f2f 100644 --- a/src/test/run-pass/spawn.rs +++ b/src/test/run-pass/spawn.rs @@ -18,11 +18,3 @@ pub fn main() { } fn child(&&i: int) { error!(i); assert!((i == 10)); } - -// Local Variables: -// mode: rust; -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/test/run-pass/spawn2.rs b/src/test/run-pass/spawn2.rs index f9350746349b3..e748a1636ea80 100644 --- a/src/test/run-pass/spawn2.rs +++ b/src/test/run-pass/spawn2.rs @@ -32,11 +32,3 @@ fn child(&&args: (int, int, int, int, int, int, int, int, int)) { assert!((i8 == 80)); assert!((i9 == 90)); } - -// Local Variables: -// mode: rust; -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/test/run-pass/task-killjoin-rsrc.rs b/src/test/run-pass/task-killjoin-rsrc.rs index 7cd08695da0f0..879f668577f86 100644 --- a/src/test/run-pass/task-killjoin-rsrc.rs +++ b/src/test/run-pass/task-killjoin-rsrc.rs @@ -83,11 +83,3 @@ fn supervisor() { pub fn main() { join(joinable(supervisor)); } - -// Local Variables: -// mode: rust; -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: diff --git a/src/test/run-pass/task-killjoin.rs b/src/test/run-pass/task-killjoin.rs index 563e35be3d63b..73c069e560cd0 100644 --- a/src/test/run-pass/task-killjoin.rs +++ b/src/test/run-pass/task-killjoin.rs @@ -33,11 +33,3 @@ fn supervisor() { pub fn main() { task::spawn_unlinked(supervisor) } - -// Local Variables: -// mode: rust; -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: From c1de90cdb255c476cc6b08ba9b2031e259dabfab Mon Sep 17 00:00:00 2001 From: Erick Tryzelaar Date: Wed, 1 May 2013 20:30:05 -0700 Subject: [PATCH 130/410] rustc: remove ty::LegacyDtor --- src/librustc/middle/trans/glue.rs | 26 +++++++------------------- src/librustc/middle/ty.rs | 1 - 2 files changed, 7 insertions(+), 20 deletions(-) diff --git a/src/librustc/middle/trans/glue.rs b/src/librustc/middle/trans/glue.rs index 4c5a17056b2ea..1f90b009ec656 100644 --- a/src/librustc/middle/trans/glue.rs +++ b/src/librustc/middle/trans/glue.rs @@ -443,11 +443,8 @@ pub fn make_free_glue(bcx: block, v: ValueRef, t: ty::t) { // Call the dtor if there is one match ty::ty_dtor(bcx.tcx(), did) { ty::NoDtor => bcx, - ty::LegacyDtor(ref dt_id) => { - trans_struct_drop(bcx, t, v, *dt_id, did, substs, false) - } ty::TraitDtor(ref dt_id) => { - trans_struct_drop(bcx, t, v, *dt_id, did, substs, true) + trans_struct_drop(bcx, t, v, *dt_id, did, substs) } } } @@ -461,8 +458,7 @@ pub fn trans_struct_drop(bcx: block, v0: ValueRef, dtor_did: ast::def_id, class_did: ast::def_id, - substs: &ty::substs, - take_ref: bool) + substs: &ty::substs) -> block { let repr = adt::represent_type(bcx.ccx(), t); let drop_flag = adt::trans_drop_flag_ptr(bcx, repr, v0); @@ -484,15 +480,10 @@ pub fn trans_struct_drop(bcx: block, // (self) assert!((params.len() == 2)); - // If we need to take a reference to the class (because it's using - // the Drop trait), do so now. - let llval; - if take_ref { - llval = alloca(bcx, val_ty(v0)); - Store(bcx, v0, llval); - } else { - llval = v0; - } + // Take a reference to the class (because it's using the Drop trait), + // do so now. + let llval = alloca(bcx, val_ty(v0)); + Store(bcx, v0, llval); let self_arg = PointerCast(bcx, llval, params[1]); let args = ~[C_null(T_ptr(T_i8())), self_arg]; @@ -534,10 +525,7 @@ pub fn make_drop_glue(bcx: block, v0: ValueRef, t: ty::t) { let tcx = bcx.tcx(); match ty::ty_dtor(tcx, did) { ty::TraitDtor(dtor) => { - trans_struct_drop(bcx, t, v0, dtor, did, substs, true) - } - ty::LegacyDtor(dtor) => { - trans_struct_drop(bcx, t, v0, dtor, did, substs, false) + trans_struct_drop(bcx, t, v0, dtor, did, substs) } ty::NoDtor => { // No dtor? Just the default case diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index ccd7cc6a8ab98..e5f9dcb263a80 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -3728,7 +3728,6 @@ pub fn item_path_str(cx: ctxt, id: ast::def_id) -> ~str { pub enum DtorKind { NoDtor, - LegacyDtor(def_id), TraitDtor(def_id) } From 6f6dd86248d5c3ece0e668537e78a71198f36ddd Mon Sep 17 00:00:00 2001 From: Young-il Choi Date: Thu, 2 May 2013 13:16:01 +0900 Subject: [PATCH 131/410] compiletest: configurable test dir for ARM --- mk/tests.mk | 7 ++++--- src/compiletest/common.rs | 5 ++++- src/compiletest/compiletest.rc | 5 ++++- src/compiletest/runtest.rs | 21 +++++++++------------ 4 files changed, 21 insertions(+), 17 deletions(-) diff --git a/mk/tests.mk b/mk/tests.mk index 21754a9f51d0a..310dec8de7977 100644 --- a/mk/tests.mk +++ b/mk/tests.mk @@ -502,12 +502,13 @@ ifeq ($(CFG_ADB_DEVICE),true) CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3) := \ --compile-lib-path $$(HLIB$(1)_H_$(3)) \ --run-lib-path $$(TLIB$(1)_T_$(2)_H_$(3)) \ - --rustc-path $$(HBIN$(1)_H_$(3))/rustc$$(X_$(3)) \ - --aux-base $$(S)src/test/auxiliary/ \ + --rustc-path $$(HBIN$(1)_H_$(3))/rustc$$(X_$(3)) \ + --aux-base $$(S)src/test/auxiliary/ \ --stage-id stage$(1)-$(2) \ --host $(CFG_BUILD_TRIPLE) \ --target $(2) \ --adb-path=$(CFG_ADB_PATH) \ + --adb-test-dir=$(CFG_ADB_TEST_DIR) \ --rustcflags "$(RUSTC_FLAGS_$(2)) $$(CFG_RUSTC_FLAGS) --target=$(2)" \ $$(CTEST_TESTARGS) @@ -516,7 +517,7 @@ else CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3) := \ --compile-lib-path $$(HLIB$(1)_H_$(3)) \ --run-lib-path $$(TLIB$(1)_T_$(2)_H_$(3)) \ - --rustc-path $$(HBIN$(1)_H_$(3))/rustc$$(X_$(3)) \ + --rustc-path $$(HBIN$(1)_H_$(3))/rustc$$(X_$(3)) \ --aux-base $$(S)src/test/auxiliary/ \ --stage-id stage$(1)-$(2) \ --host $(CFG_BUILD_TRIPLE) \ diff --git a/src/compiletest/common.rs b/src/compiletest/common.rs index 73322fe1bdeac..87a7dae5a7f6e 100644 --- a/src/compiletest/common.rs +++ b/src/compiletest/common.rs @@ -70,9 +70,12 @@ pub struct config { // Target System to be executed target: ~str, - // Extra parameter to run arm-linux-androideabi + // Extra parameter to run adb on arm-linux-androideabi adb_path: ~str, + // Extra parameter to run test sute on arm-linux-androideabi + adb_test_dir: ~str, + // check if can be run or not flag_runnable: bool, diff --git a/src/compiletest/compiletest.rc b/src/compiletest/compiletest.rc index 70e09fc7bab7e..5575c01a9065b 100644 --- a/src/compiletest/compiletest.rc +++ b/src/compiletest/compiletest.rc @@ -63,7 +63,8 @@ pub fn parse_config(args: ~[~str]) -> config { getopts::optflag(~"newrt"), getopts::optopt(~"host"), getopts::optopt(~"target"), - getopts::optopt(~"adb-path") + getopts::optopt(~"adb-path"), + getopts::optopt(~"adb-test-dir") ]; assert!(!args.is_empty()); @@ -100,6 +101,7 @@ pub fn parse_config(args: ~[~str]) -> config { host: opt_str(getopts::opt_maybe_str(matches, ~"host")), target: opt_str(getopts::opt_maybe_str(matches, ~"target")), adb_path: opt_str(getopts::opt_maybe_str(matches, ~"adb-path")), + adb_test_dir: opt_str(getopts::opt_maybe_str(matches, ~"adb-test-dir")), flag_runnable: if (getopts::opt_maybe_str(matches, ~"host") == getopts::opt_maybe_str(matches, ~"target")) { true } @@ -136,6 +138,7 @@ pub fn log_config(config: config) { logv(c, fmt!("host: %s", config.host)); logv(c, fmt!("target: %s", config.target)); logv(c, fmt!("adb_path: %s", config.adb_path)); + logv(c, fmt!("adb_test_dir: %s", config.adb_test_dir)); logv(c, fmt!("flag_runnable: %b", config.flag_runnable)); logv(c, fmt!("verbose: %b", config.verbose)); logv(c, fmt!("\n")); diff --git a/src/compiletest/runtest.rs b/src/compiletest/runtest.rs index ad128f4529c66..142460fe0dc09 100644 --- a/src/compiletest/runtest.rs +++ b/src/compiletest/runtest.rs @@ -512,7 +512,7 @@ fn exec_compiled_test(config: config, props: TestProps, // copy to target let copy_result = procsrv::run(~"", config.adb_path, - ~[~"push", args.prog, ~"/system/tmp"], + ~[~"push", args.prog, config.adb_test_dir], ~[(~"",~"")], Some(~"")); if config.verbose { @@ -534,16 +534,13 @@ fn exec_compiled_test(config: config, props: TestProps, let mut newcmd_out = ~""; let mut newcmd_err = ~""; - newcmd_out.push_str(~"LD_LIBRARY_PATH=/system/tmp; "); - newcmd_err.push_str(~"LD_LIBRARY_PATH=/system/tmp; "); - newcmd_out.push_str(~"export LD_LIBRARY_PATH; "); - newcmd_err.push_str(~"export LD_LIBRARY_PATH; "); - newcmd_out.push_str(~"cd /system/tmp; "); - newcmd_err.push_str(~"cd /system/tmp; "); - newcmd_out.push_str("./"); - newcmd_err.push_str("./"); - newcmd_out.push_str(prog_short); - newcmd_err.push_str(prog_short); + newcmd_out.push_str(fmt!( + "LD_LIBRARY_PATH=%s; export LD_LIBRARY_PATH; cd %s; ./%s", + config.adb_test_dir, config.adb_test_dir, prog_short)); + + newcmd_err.push_str(fmt!( + "LD_LIBRARY_PATH=%s; export LD_LIBRARY_PATH; cd %s; ./%s", + config.adb_test_dir, config.adb_test_dir, prog_short)); for vec::each(subargs) |tv| { newcmd_out.push_str(" "); @@ -617,7 +614,7 @@ fn compose_and_run_compiler( if (file.filetype() == Some(~".so")) { let copy_result = procsrv::run(~"", config.adb_path, - ~[~"push", file.to_str(), ~"/system/tmp"], + ~[~"push", file.to_str(), config.adb_test_dir], ~[(~"",~"")], Some(~"")); if config.verbose { From 5f1a90ebe7ea3d3102dbffcaabaf8803d650db80 Mon Sep 17 00:00:00 2001 From: "Felix S. Klock II" Date: Mon, 29 Apr 2013 16:25:40 +0200 Subject: [PATCH 132/410] Issue 4391: rustc should not silently skip tests with erroneous signature. --- src/librustc/front/test.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/librustc/front/test.rs b/src/librustc/front/test.rs index 4506feece2b8f..94eade675e7a7 100644 --- a/src/librustc/front/test.rs +++ b/src/librustc/front/test.rs @@ -141,7 +141,7 @@ fn fold_item(cx: @mut TestCtxt, i: @ast::item, fld: @fold::ast_fold) debug!("current path: %s", ast_util::path_name_i(copy cx.path, cx.sess.parse_sess.interner)); - if is_test_fn(i) || is_bench_fn(i) { + if is_test_fn(cx, i) || is_bench_fn(i) { match i.node { ast::item_fn(_, purity, _, _, _) if purity == ast::unsafe_fn => { let sess = cx.sess; @@ -169,7 +169,7 @@ fn fold_item(cx: @mut TestCtxt, i: @ast::item, fld: @fold::ast_fold) return res; } -fn is_test_fn(i: @ast::item) -> bool { +fn is_test_fn(cx: @mut TestCtxt, i: @ast::item) -> bool { let has_test_attr = !attr::find_attrs_by_name(i.attrs, ~"test").is_empty(); @@ -188,6 +188,13 @@ fn is_test_fn(i: @ast::item) -> bool { } } + if has_test_attr && !has_test_signature(i) { + let sess = cx.sess; + sess.span_fatal( + i.span, + ~"functions used as tests must have signature fn() -> ()." + ); + } return has_test_attr && has_test_signature(i); } From c14aa7eba88a3d0a26513dbb2a3acdcdcfc5072d Mon Sep 17 00:00:00 2001 From: "Felix S. Klock II" Date: Tue, 30 Apr 2013 13:02:29 +0200 Subject: [PATCH 133/410] mod items need to be marked with `cfg(test)` not `test`. --- src/libcore/hashmap.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libcore/hashmap.rs b/src/libcore/hashmap.rs index 41f4f34dc1971..9b82a8dad059e 100644 --- a/src/libcore/hashmap.rs +++ b/src/libcore/hashmap.rs @@ -833,7 +833,7 @@ pub impl HashSet { } } -#[test] +#[cfg(test)] mod test_map { use container::{Container, Map, Set}; use option::{None, Some}; @@ -1009,7 +1009,7 @@ mod test_map { } } -#[test] +#[cfg(test)] mod test_set { use super::*; use container::{Container, Map, Set}; From 880e300ed7a35de9ecff489d7fc0d24f2e975109 Mon Sep 17 00:00:00 2001 From: "Felix S. Klock II" Date: Tue, 30 Apr 2013 14:36:18 +0200 Subject: [PATCH 134/410] mod items need to be marked with `cfg(test)` not `test`. --- src/libcore/task/mod.rs | 2 +- src/libstd/cmp.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libcore/task/mod.rs b/src/libcore/task/mod.rs index 2a4817727f4cf..0e97c101dc651 100644 --- a/src/libcore/task/mod.rs +++ b/src/libcore/task/mod.rs @@ -797,7 +797,7 @@ fn test_run_basic() { po.recv(); } -#[test] +#[cfg(test)] struct Wrapper { mut f: Option> } diff --git a/src/libstd/cmp.rs b/src/libstd/cmp.rs index 5d7f64a7c8fa0..ea3793c137483 100644 --- a/src/libstd/cmp.rs +++ b/src/libstd/cmp.rs @@ -64,7 +64,7 @@ fn test_fuzzy_eq_eps() { assert!(!(&1.5f).fuzzy_eq_eps(&0.9, &0.5)); } -#[test] +#[cfg(test)] mod test_complex{ use cmp::*; From 46c2b5b0458b4c7dc7b28486c2721719fa729996 Mon Sep 17 00:00:00 2001 From: "Felix S. Klock II" Date: Thu, 2 May 2013 01:31:58 +0200 Subject: [PATCH 135/410] Lets see if changing `span_fatal` to `span_err` gets me further through make check. --- src/librustc/front/test.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/librustc/front/test.rs b/src/librustc/front/test.rs index 94eade675e7a7..ddd702e7d697d 100644 --- a/src/librustc/front/test.rs +++ b/src/librustc/front/test.rs @@ -190,7 +190,7 @@ fn is_test_fn(cx: @mut TestCtxt, i: @ast::item) -> bool { if has_test_attr && !has_test_signature(i) { let sess = cx.sess; - sess.span_fatal( + sess.span_err( i.span, ~"functions used as tests must have signature fn() -> ()." ); From a636f5160a0f186d218e135924b321bb6d4f1ad7 Mon Sep 17 00:00:00 2001 From: "Felix S. Klock II" Date: Thu, 2 May 2013 01:32:37 +0200 Subject: [PATCH 136/410] More cases of [cfg(test)] instead of [test]. --- src/libcore/repr.rs | 2 +- src/libstd/deque.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libcore/repr.rs b/src/libcore/repr.rs index 03e44e00d8831..29b8400706ce0 100644 --- a/src/libcore/repr.rs +++ b/src/libcore/repr.rs @@ -673,7 +673,7 @@ pub fn write_repr(writer: @Writer, object: &T) { } } -#[test] +#[cfg(test)] struct P {a: int, b: float} #[test] diff --git a/src/libstd/deque.rs b/src/libstd/deque.rs index 5d52bb7c0810b..8a310a9f52b5e 100644 --- a/src/libstd/deque.rs +++ b/src/libstd/deque.rs @@ -353,7 +353,7 @@ mod tests { assert!(*deq.get(3) == d); } - #[test] + #[cfg(test)] fn test_parameterized(a: T, b: T, c: T, d: T) { let mut deq = Deque::new(); assert!(deq.len() == 0); From 9862cf703b8a867b13e674f892f7059b09fe59e0 Mon Sep 17 00:00:00 2001 From: "Felix S. Klock II" Date: Thu, 2 May 2013 08:50:19 +0200 Subject: [PATCH 137/410] More cases of [cfg(test)] instead of [test]. --- src/libsyntax/parse/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libsyntax/parse/mod.rs b/src/libsyntax/parse/mod.rs index 74e4f562ce5c5..4f1d41a4a7a17 100644 --- a/src/libsyntax/parse/mod.rs +++ b/src/libsyntax/parse/mod.rs @@ -418,7 +418,7 @@ mod test { new_parser_from_source_str(ps,~[],~"bogofile",source_str) } - #[test] fn to_json_str>(val: @E) -> ~str { + #[cfg(test)] fn to_json_str>(val: @E) -> ~str { do io::with_str_writer |writer| { val.encode(~std::json::Encoder(writer)); } From afcb9e9d868238accfdff2089684470bf89a92f8 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Thu, 2 May 2013 17:49:11 +1000 Subject: [PATCH 138/410] core: inlining on common functions --- src/libcore/str.rs | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/src/libcore/str.rs b/src/libcore/str.rs index 064bffa00561f..1ddebf8332069 100644 --- a/src/libcore/str.rs +++ b/src/libcore/str.rs @@ -77,6 +77,7 @@ pub fn from_bytes_slice<'a>(vector: &'a [u8]) -> &'a str { } /// Copy a slice into a new unique str +#[inline(always)] pub fn from_slice(s: &str) -> ~str { unsafe { raw::slice_bytes_owned(s, 0, len(s)) } } @@ -820,6 +821,7 @@ Section: Comparing strings /// Bytewise slice equality #[cfg(notest)] #[lang="str_eq"] +#[inline] pub fn eq_slice(a: &str, b: &str) -> bool { do as_buf(a) |ap, alen| { do as_buf(b) |bp, blen| { @@ -836,6 +838,7 @@ pub fn eq_slice(a: &str, b: &str) -> bool { } #[cfg(test)] +#[inline] pub fn eq_slice(a: &str, b: &str) -> bool { do as_buf(a) |ap, alen| { do as_buf(b) |bp, blen| { @@ -854,15 +857,18 @@ pub fn eq_slice(a: &str, b: &str) -> bool { /// Bytewise string equality #[cfg(notest)] #[lang="uniq_str_eq"] +#[inline] pub fn eq(a: &~str, b: &~str) -> bool { eq_slice(*a, *b) } #[cfg(test)] +#[inline] pub fn eq(a: &~str, b: &~str) -> bool { eq_slice(*a, *b) } +#[inline] fn cmp(a: &str, b: &str) -> Ordering { let low = uint::min(a.len(), b.len()); @@ -879,20 +885,24 @@ fn cmp(a: &str, b: &str) -> Ordering { #[cfg(notest)] impl<'self> TotalOrd for &'self str { + #[inline] fn cmp(&self, other: & &'self str) -> Ordering { cmp(*self, *other) } } #[cfg(notest)] impl TotalOrd for ~str { + #[inline] fn cmp(&self, other: &~str) -> Ordering { cmp(*self, *other) } } #[cfg(notest)] impl TotalOrd for @str { + #[inline] fn cmp(&self, other: &@str) -> Ordering { cmp(*self, *other) } } /// Bytewise slice less than +#[inline] fn lt(a: &str, b: &str) -> bool { let (a_len, b_len) = (a.len(), b.len()); let end = uint::min(a_len, b_len); @@ -909,16 +919,19 @@ fn lt(a: &str, b: &str) -> bool { } /// Bytewise less than or equal +#[inline] pub fn le(a: &str, b: &str) -> bool { !lt(b, a) } /// Bytewise greater than or equal +#[inline] fn ge(a: &str, b: &str) -> bool { !lt(a, b) } /// Bytewise greater than +#[inline] fn gt(a: &str, b: &str) -> bool { !le(a, b) } @@ -1595,6 +1608,7 @@ Section: String properties */ /// Returns true if the string has length 0 +#[inline(always)] pub fn is_empty(s: &str) -> bool { len(s) == 0u } /** @@ -1616,11 +1630,13 @@ fn is_alphanumeric(s: &str) -> bool { } /// Returns the string length/size in bytes not counting the null terminator +#[inline(always)] pub fn len(s: &str) -> uint { do as_buf(s) |_p, n| { n - 1u } } /// Returns the number of characters that a string holds +#[inline(always)] pub fn char_len(s: &str) -> uint { count_chars(s, 0u, len(s)) } /* @@ -1752,7 +1768,8 @@ pub fn count_chars(s: &str, start: uint, end: uint) -> uint { return len; } -/// Counts the number of bytes taken by the `n` in `s` starting from `start`. +/// Counts the number of bytes taken by the first `n` chars in `s` +/// starting from `start`. pub fn count_bytes<'b>(s: &'b str, start: uint, n: uint) -> uint { assert!(is_char_boundary(s, start)); let mut end = start, cnt = n; @@ -1988,6 +2005,7 @@ static tag_six_b: uint = 252u; * let i = str::as_bytes("Hello World") { |bytes| vec::len(bytes) }; * ~~~ */ +#[inline] pub fn as_bytes(s: &const ~str, f: &fn(&~[u8]) -> T) -> T { unsafe { let v: *~[u8] = cast::transmute(copy s); @@ -2023,6 +2041,7 @@ pub fn as_bytes_slice<'a>(s: &'a str) -> &'a [u8] { * let s = str::as_c_str("PATH", { |path| libc::getenv(path) }); * ~~~ */ +#[inline] pub fn as_c_str(s: &str, f: &fn(*libc::c_char) -> T) -> T { do as_buf(s) |buf, len| { // NB: len includes the trailing null. @@ -2099,6 +2118,7 @@ pub fn subslice_offset(outer: &str, inner: &str) -> uint { * * s - A string * * n - The number of bytes to reserve space for */ +#[inline(always)] pub fn reserve(s: &mut ~str, n: uint) { unsafe { let v: *mut ~[u8] = cast::transmute(s); @@ -2126,6 +2146,7 @@ pub fn reserve(s: &mut ~str, n: uint) { * * s - A string * * n - The number of bytes to reserve space for */ +#[inline(always)] pub fn reserve_at_least(s: &mut ~str, n: uint) { reserve(s, uint::next_power_of_two(n + 1u) - 1u) } @@ -2314,6 +2335,7 @@ pub mod raw { } /// Sets the length of the string and adds the null terminator + #[inline] pub unsafe fn set_len(v: &mut ~str, new_len: uint) { let v: **mut vec::raw::VecRepr = cast::transmute(v); let repr: *mut vec::raw::VecRepr = *v; @@ -2489,7 +2511,7 @@ impl<'self> StrSlice<'self> for &'self str { #[inline] fn is_alphanumeric(&self) -> bool { is_alphanumeric(*self) } /// Returns the size in bytes not counting the null terminator - #[inline] + #[inline(always)] fn len(&self) -> uint { len(*self) } /// Returns the number of characters that a string holds #[inline] @@ -2599,10 +2621,11 @@ pub trait OwnedStr { } impl OwnedStr for ~str { + #[inline] fn push_str(&mut self, v: &str) { push_str(self, v); } - + #[inline] fn push_char(&mut self, c: char) { push_char(self, c); } From 5714e2c11b939628247dd0107545e2feb8b74b47 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Thu, 2 May 2013 19:24:41 +1000 Subject: [PATCH 139/410] libcore: optimize string joining routines. This makes concat/connect/connect_slices about 20% faster, and takes `repeat` from O(n^2) to O(n), and lowers the constant factor. --- src/libcore/str.rs | 118 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 106 insertions(+), 12 deletions(-) diff --git a/src/libcore/str.rs b/src/libcore/str.rs index 1ddebf8332069..f3181b26bd7e0 100644 --- a/src/libcore/str.rs +++ b/src/libcore/str.rs @@ -241,38 +241,132 @@ pub fn append(lhs: ~str, rhs: &str) -> ~str { /// Concatenate a vector of strings pub fn concat(v: &[~str]) -> ~str { - let mut s: ~str = ~""; - for vec::each(v) |ss| { - push_str(&mut s, *ss); + if v.is_empty() { return ~""; } + + let mut len = 0; + for v.each |ss| { + len += ss.len(); + } + let mut s = ~""; + + reserve(&mut s, len); + + unsafe { + do as_buf(s) |buf, _len| { + let mut buf = ::cast::transmute_mut_unsafe(buf); + for v.each |ss| { + do as_buf(*ss) |ssbuf, sslen| { + let sslen = sslen - 1; + ptr::copy_memory(buf, ssbuf, sslen); + buf = buf.offset(sslen); + } + } + } + raw::set_len(&mut s, len); } s } /// Concatenate a vector of strings, placing a given separator between each pub fn connect(v: &[~str], sep: &str) -> ~str { + if v.is_empty() { return ~""; } + + // concat is faster + if sep.is_empty() { return concat(v); } + + // this is wrong without the guarantee that v is non-empty + let mut len = sep.len() * (v.len() - 1); + for v.each |ss| { + len += ss.len(); + } let mut s = ~"", first = true; - for vec::each(v) |ss| { - if first { first = false; } else { push_str(&mut s, sep); } - push_str(&mut s, *ss); + + reserve(&mut s, len); + + unsafe { + do as_buf(s) |buf, _len| { + do as_buf(sep) |sepbuf, seplen| { + let seplen = seplen - 1; + let mut buf = ::cast::transmute_mut_unsafe(buf); + for v.each |ss| { + do as_buf(*ss) |ssbuf, sslen| { + let sslen = sslen - 1; + if first { + first = false; + } else { + ptr::copy_memory(buf, sepbuf, seplen); + buf = buf.offset(seplen); + } + ptr::copy_memory(buf, ssbuf, sslen); + buf = buf.offset(sslen); + } + } + } + } + raw::set_len(&mut s, len); } s } /// Concatenate a vector of strings, placing a given separator between each pub fn connect_slices(v: &[&str], sep: &str) -> ~str { + if v.is_empty() { return ~""; } + + // this is wrong without the guarantee that v is non-empty + let mut len = sep.len() * (v.len() - 1); + for v.each |ss| { + len += ss.len(); + } let mut s = ~"", first = true; - for vec::each(v) |ss| { - if first { first = false; } else { push_str(&mut s, sep); } - push_str(&mut s, *ss); + + reserve(&mut s, len); + + unsafe { + do as_buf(s) |buf, _len| { + do as_buf(sep) |sepbuf, seplen| { + let seplen = seplen - 1; + let mut buf = ::cast::transmute_mut_unsafe(buf); + for vec::each(v) |ss| { + do as_buf(*ss) |ssbuf, sslen| { + let sslen = sslen - 1; + if first { + first = false; + } else if seplen > 0 { + ptr::copy_memory(buf, sepbuf, seplen); + buf = buf.offset(seplen); + } + ptr::copy_memory(buf, ssbuf, sslen); + buf = buf.offset(sslen); + } + } + } + } + raw::set_len(&mut s, len); } s } /// Given a string, make a new string with repeated copies of it pub fn repeat(ss: &str, nn: uint) -> ~str { - let mut acc = ~""; - for nn.times { acc += ss; } - acc + do as_buf(ss) |buf, len| { + let mut ret = ~""; + // ignore the NULL terminator + let len = len - 1; + reserve(&mut ret, nn * len); + + unsafe { + do as_buf(ret) |rbuf, _len| { + let mut rbuf = ::cast::transmute_mut_unsafe(rbuf); + + for nn.times { + ptr::copy_memory(rbuf, buf, len); + rbuf = rbuf.offset(len); + } + } + raw::set_len(&mut ret, nn * len); + } + ret + } } /* From 6487cb221bcf7820a9d8458f18080c8f3ef1c2dc Mon Sep 17 00:00:00 2001 From: kud1ing Date: Thu, 2 May 2013 13:37:57 +0300 Subject: [PATCH 140/410] Explain that the source code was generated by this script --- src/etc/unicode.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/etc/unicode.py b/src/etc/unicode.py index 864cf3daee07e..afb3d16848085 100755 --- a/src/etc/unicode.py +++ b/src/etc/unicode.py @@ -235,6 +235,10 @@ def emit_decomp_module(f, canon, compat): rf = open(r, "w") (canon_decomp, compat_decomp, gencats) = load_unicode_data("UnicodeData.txt") + +# Explain that the source code was generated by this script. +rf.write('// The following code was generated by "src/etc/unicode.py"\n\n') + emit_property_module(rf, "general_category", gencats) #emit_decomp_module(rf, canon_decomp, compat_decomp) From 18c46b8fd4029bdcc2836298cca2df05b5c5f314 Mon Sep 17 00:00:00 2001 From: kud1ing Date: Thu, 2 May 2013 13:38:39 +0300 Subject: [PATCH 141/410] The following code was generated by "src/etc/unicode.py" --- src/libcore/unicode.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/libcore/unicode.rs b/src/libcore/unicode.rs index a13d66c48ee0c..34175f9888ffa 100644 --- a/src/libcore/unicode.rs +++ b/src/libcore/unicode.rs @@ -10,6 +10,8 @@ #[doc(hidden)]; // FIXME #3538 +// The following code was generated by "src/etc/unicode.py" + pub mod general_category { fn bsearch_range_table(c: char, r: &'static [(char,char)]) -> bool { From cff6aba76ea01888854a87bdd4c1f71aada8d250 Mon Sep 17 00:00:00 2001 From: gifnksm Date: Thu, 2 May 2013 20:20:22 +0900 Subject: [PATCH 142/410] libcore: Export core::from_str::FromStr from core::prelude --- src/libcore/bool.rs | 1 + src/libcore/cast.rs | 2 ++ src/libcore/core.rc | 1 + src/libcore/flate.rs | 1 - src/libcore/num/f32.rs | 3 +-- src/libcore/num/f64.rs | 3 +-- src/libcore/num/float.rs | 3 +-- src/libcore/num/int-template.rs | 1 - src/libcore/num/uint-template.rs | 1 - src/libcore/pipes.rs | 6 +++--- src/libcore/prelude.rs | 1 + src/libstd/net_url.rs | 8 +++----- src/libstd/num/bigint.rs | 5 ++--- 13 files changed, 16 insertions(+), 20 deletions(-) diff --git a/src/libcore/bool.rs b/src/libcore/bool.rs index 6c60cec2595ef..1b5855049ca61 100644 --- a/src/libcore/bool.rs +++ b/src/libcore/bool.rs @@ -108,6 +108,7 @@ mod tests { #[test] fn test_bool_from_str() { + #[cfg(stage0)] use from_str::FromStr; do all_values |v| { diff --git a/src/libcore/cast.rs b/src/libcore/cast.rs index 6fb737d37709f..22f31d52d2d54 100644 --- a/src/libcore/cast.rs +++ b/src/libcore/cast.rs @@ -10,7 +10,9 @@ //! Unsafe casting functions +#[cfg(not(stage0))] use sys; +#[cfg(not(stage0))] use unstable; pub mod rusti { diff --git a/src/libcore/core.rc b/src/libcore/core.rc index f410591fdc7a3..d8cca429f8447 100644 --- a/src/libcore/core.rc +++ b/src/libcore/core.rc @@ -111,6 +111,7 @@ pub use num::{Bitwise, BitCount, Bounded}; pub use num::{Primitive, Int, Float}; pub use ptr::Ptr; +pub use from_str::FromStr; pub use to_str::ToStr; pub use clone::Clone; diff --git a/src/libcore/flate.rs b/src/libcore/flate.rs index c3518cc8b6ee2..c18273955adab 100644 --- a/src/libcore/flate.rs +++ b/src/libcore/flate.rs @@ -16,7 +16,6 @@ Simple compression use libc; use libc::{c_void, size_t, c_int}; -use ptr; use vec; #[cfg(test)] use rand; diff --git a/src/libcore/num/f32.rs b/src/libcore/num/f32.rs index a00225e85bc49..1b4c679ea07b4 100644 --- a/src/libcore/num/f32.rs +++ b/src/libcore/num/f32.rs @@ -10,7 +10,6 @@ //! Operations and constants for `f32` -use from_str; use num::{Zero, One, strconv}; use prelude::*; @@ -798,7 +797,7 @@ pub fn from_str_radix(num: &str, rdx: uint) -> Option { strconv::ExpNone, false, false) } -impl from_str::FromStr for f32 { +impl FromStr for f32 { #[inline(always)] fn from_str(val: &str) -> Option { from_str(val) } } diff --git a/src/libcore/num/f64.rs b/src/libcore/num/f64.rs index c3bd89b0e0361..0f7647fa8680d 100644 --- a/src/libcore/num/f64.rs +++ b/src/libcore/num/f64.rs @@ -10,7 +10,6 @@ //! Operations and constants for `f64` -use from_str; use libc::c_int; use num::{Zero, One, strconv}; use prelude::*; @@ -840,7 +839,7 @@ pub fn from_str_radix(num: &str, rdx: uint) -> Option { strconv::ExpNone, false, false) } -impl from_str::FromStr for f64 { +impl FromStr for f64 { #[inline(always)] fn from_str(val: &str) -> Option { from_str(val) } } diff --git a/src/libcore/num/float.rs b/src/libcore/num/float.rs index b487fa48782b8..16bb2aa128651 100644 --- a/src/libcore/num/float.rs +++ b/src/libcore/num/float.rs @@ -20,7 +20,6 @@ // PORT this must match in width according to architecture -use from_str; use libc::c_int; use num::{Zero, One, strconv}; use prelude::*; @@ -289,7 +288,7 @@ pub fn from_str_radix(num: &str, radix: uint) -> Option { strconv::ExpNone, false, false) } -impl from_str::FromStr for float { +impl FromStr for float { #[inline(always)] fn from_str(val: &str) -> Option { from_str(val) } } diff --git a/src/libcore/num/int-template.rs b/src/libcore/num/int-template.rs index fadba84a0fe93..090e0256abf6e 100644 --- a/src/libcore/num/int-template.rs +++ b/src/libcore/num/int-template.rs @@ -10,7 +10,6 @@ use T = self::inst::T; -use from_str::FromStr; use num::{ToStrRadix, FromStrRadix}; use num::{Zero, One, strconv}; use prelude::*; diff --git a/src/libcore/num/uint-template.rs b/src/libcore/num/uint-template.rs index f6b98989545d0..379c1834543d2 100644 --- a/src/libcore/num/uint-template.rs +++ b/src/libcore/num/uint-template.rs @@ -11,7 +11,6 @@ use T = self::inst::T; use T_SIGNED = self::inst::T_SIGNED; -use from_str::FromStr; use num::{ToStrRadix, FromStrRadix}; use num::{Zero, One, strconv}; use prelude::*; diff --git a/src/libcore/pipes.rs b/src/libcore/pipes.rs index 145997fcb4bd5..19674900f908e 100644 --- a/src/libcore/pipes.rs +++ b/src/libcore/pipes.rs @@ -303,7 +303,7 @@ struct BufferResource { } #[unsafe_destructor] -impl ::ops::Drop for BufferResource { +impl Drop for BufferResource { fn finalize(&self) { unsafe { let b = move_it!(self.buffer); @@ -639,7 +639,7 @@ pub struct SendPacketBuffered { } #[unsafe_destructor] -impl ::ops::Drop for SendPacketBuffered { +impl Drop for SendPacketBuffered { fn finalize(&self) { //if self.p != none { // debug!("drop send %?", option::get(self.p)); @@ -708,7 +708,7 @@ pub struct RecvPacketBuffered { } #[unsafe_destructor] -impl ::ops::Drop for RecvPacketBuffered { +impl Drop for RecvPacketBuffered { fn finalize(&self) { //if self.p != none { // debug!("drop recv %?", option::get(self.p)); diff --git a/src/libcore/prelude.rs b/src/libcore/prelude.rs index 4527fcf2923da..e3c57097471f2 100644 --- a/src/libcore/prelude.rs +++ b/src/libcore/prelude.rs @@ -51,6 +51,7 @@ pub use path::WindowsPath; pub use ptr::Ptr; pub use ascii::{Ascii, AsciiCast, OwnedAsciiCast, AsciiStr}; pub use str::{StrSlice, OwnedStr}; +pub use from_str::{FromStr}; pub use to_bytes::IterBytes; pub use to_str::{ToStr, ToStrConsume}; pub use tuple::{CopyableTuple, ImmutableTuple, ExtendedTupleOps}; diff --git a/src/libstd/net_url.rs b/src/libstd/net_url.rs index f3b11c132798c..fa872ffee87e6 100644 --- a/src/libstd/net_url.rs +++ b/src/libstd/net_url.rs @@ -13,15 +13,13 @@ #[allow(deprecated_mode)]; use core::cmp::Eq; +#[cfg(stage0)] use core::from_str::FromStr; use core::io::{Reader, ReaderUtil}; use core::io; use core::hashmap::HashMap; use core::str; -use core::to_bytes::IterBytes; use core::to_bytes; -use core::to_str::ToStr; -use core::to_str; use core::uint; #[deriving(Clone, Eq)] @@ -703,13 +701,13 @@ pub fn to_str(url: &Url) -> ~str { fmt!("%s:%s%s%s%s", url.scheme, authority, url.path, query, fragment) } -impl to_str::ToStr for Url { +impl ToStr for Url { pub fn to_str(&self) -> ~str { to_str(self) } } -impl to_bytes::IterBytes for Url { +impl IterBytes for Url { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { self.to_str().iter_bytes(lsb0, f) } diff --git a/src/libstd/num/bigint.rs b/src/libstd/num/bigint.rs index e2a336027fdef..497ce7f41aae3 100644 --- a/src/libstd/num/bigint.rs +++ b/src/libstd/num/bigint.rs @@ -21,7 +21,6 @@ A BigInt is a combination of BigUint and Sign. use core::cmp::{Eq, Ord, TotalEq, TotalOrd, Ordering, Less, Equal, Greater}; use core::num::{IntConvertible, Zero, One, ToStrRadix, FromStrRadix}; -use core::*; /** A BigDigit is a BigUint's composing element. @@ -141,7 +140,7 @@ impl ToStr for BigUint { fn to_str(&self) -> ~str { self.to_str_radix(10) } } -impl from_str::FromStr for BigUint { +impl FromStr for BigUint { #[inline(always)] fn from_str(s: &str) -> Option { FromStrRadix::from_str_radix(s, 10) @@ -785,7 +784,7 @@ impl ToStr for BigInt { fn to_str(&self) -> ~str { self.to_str_radix(10) } } -impl from_str::FromStr for BigInt { +impl FromStr for BigInt { #[inline(always)] fn from_str(s: &str) -> Option { FromStrRadix::from_str_radix(s, 10) From 6883814a84d584e1fd65a1d40229807ff3d34efb Mon Sep 17 00:00:00 2001 From: Seo Sanghyeon Date: Thu, 2 May 2013 21:56:20 +0900 Subject: [PATCH 143/410] Remove codes related to modes --- src/librustc/middle/ty.rs | 78 --------------------------------------- 1 file changed, 78 deletions(-) diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index 3c8f100d1c933..6cb042efa793e 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -1818,15 +1818,6 @@ pub impl TypeContents { if cx.vecs_implicitly_copyable {base} else {base + TC_OWNED_VEC} } - fn is_safe_for_default_mode(&self, cx: ctxt) -> bool { - !self.intersects(TypeContents::nondefault_mode(cx)) - } - - fn nondefault_mode(cx: ctxt) -> TypeContents { - let tc = TypeContents::nonimplicitly_copyable(cx); - tc + TC_BIG + TC_OWNED_VEC // disregard cx.vecs_implicitly_copyable - } - fn needs_drop(&self, cx: ctxt) -> bool { let tc = TC_MANAGED + TC_DTOR + TypeContents::owned(cx); self.intersects(tc) @@ -1886,9 +1877,6 @@ static TC_MUTABLE: TypeContents = TypeContents{bits:0b000010000000}; /// Mutable content, whether owned or by ref static TC_ONCE_CLOSURE: TypeContents = TypeContents{bits:0b000100000000}; -/// Something we estimate to be "big" -static TC_BIG: TypeContents = TypeContents{bits:0b001000000000}; - /// An enum with no variants. static TC_EMPTY_ENUM: TypeContents = TypeContents{bits:0b010000000000}; @@ -2109,10 +2097,6 @@ pub fn type_contents(cx: ctxt, ty: t) -> TypeContents { } }; - if type_size(cx, ty) > 4 { - result = result + TC_BIG; - } - cache.insert(ty_id, result); return result; } @@ -2188,68 +2172,6 @@ pub fn type_contents(cx: ctxt, ty: t) -> TypeContents { debug!("result = %s", r.to_str()); return r; } - - /// gives a rough estimate of how much space it takes to represent - /// an instance of `ty`. Used for the mode transition. - fn type_size(cx: ctxt, ty: t) -> uint { - match get(ty).sty { - ty_nil | ty_bot | ty_bool | ty_int(_) | ty_uint(_) | ty_float(_) | - ty_ptr(_) | ty_box(_) | ty_uniq(_) | ty_estr(vstore_uniq) | - ty_trait(*) | ty_rptr(*) | ty_evec(_, vstore_uniq) | - ty_evec(_, vstore_box) | ty_estr(vstore_box) => { - 1 - } - - ty_evec(_, vstore_slice(_)) | - ty_estr(vstore_slice(_)) | - ty_bare_fn(*) | - ty_closure(*) => { - 2 - } - - ty_evec(t, vstore_fixed(n)) => { - type_size(cx, t.ty) * n - } - - ty_estr(vstore_fixed(n)) => { - n - } - - ty_struct(did, ref substs) => { - let flds = struct_fields(cx, did, substs); - flds.foldl(0, |s, f| *s + type_size(cx, f.mt.ty)) - } - - ty_tup(ref tys) => { - tys.foldl(0, |s, t| *s + type_size(cx, *t)) - } - - ty_enum(did, ref substs) => { - let variants = substd_enum_variants(cx, did, substs); - variants.foldl( // find max size of any variant - 0, - |m, v| uint::max( - *m, - // find size of this variant: - v.args.foldl(0, |s, a| *s + type_size(cx, *a)))) - } - - ty_param(_) | ty_self(_) => { - 1 - } - - ty_infer(_) => { - cx.sess.bug(~"Asked to compute kind of a type variable"); - } - ty_type => 1, - ty_opaque_closure_ptr(_) => 1, - ty_opaque_box => 1, - ty_unboxed_vec(_) => 10, - ty_err => { - cx.sess.bug(~"Asked to compute kind of fictitious type"); - } - } - } } pub fn type_moves_by_default(cx: ctxt, ty: t) -> bool { From 35b91e2f73cec610af4a2a653389562ad7cbc85e Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Fri, 3 May 2013 01:28:53 +0900 Subject: [PATCH 144/410] Use static strings --- src/librustc/middle/borrowck/loan.rs | 6 +- src/librustc/middle/borrowck/mod.rs | 4 +- src/librustc/middle/borrowck/preserve.rs | 2 +- src/librustc/middle/trans/_match.rs | 3 +- src/librustc/middle/trans/base.rs | 9 +- src/librustc/middle/trans/callee.rs | 4 +- src/librustc/middle/trans/consts.rs | 35 +++---- src/librustc/middle/trans/datum.rs | 4 +- src/librustc/middle/trans/debuginfo.rs | 23 ++--- src/librustc/middle/trans/expr.rs | 11 +-- src/librustc/middle/trans/foreign.rs | 2 +- src/librustc/middle/trans/monomorphize.rs | 2 +- src/librustc/middle/trans/reachable.rs | 10 +- src/librustc/middle/trans/tvec.rs | 4 +- src/librustc/middle/typeck/astconv.rs | 31 +++---- src/librustc/middle/typeck/check/_match.rs | 37 ++++---- src/librustc/middle/typeck/check/method.rs | 14 +-- src/librustc/middle/typeck/check/mod.rs | 92 +++++++++---------- src/librustc/middle/typeck/check/regionck.rs | 18 ++-- src/librustc/middle/typeck/check/vtable.rs | 2 +- src/librustc/middle/typeck/coherence.rs | 52 ++++------- src/librustc/middle/typeck/collect.rs | 5 +- .../middle/typeck/infer/region_inference.rs | 8 +- src/librustc/middle/typeck/mod.rs | 8 +- src/libsyntax/ext/base.rs | 2 +- src/libsyntax/parse/parser.rs | 69 +++++++------- 26 files changed, 201 insertions(+), 256 deletions(-) diff --git a/src/librustc/middle/borrowck/loan.rs b/src/librustc/middle/borrowck/loan.rs index 21de29b8f60ad..4dd727390aadc 100644 --- a/src/librustc/middle/borrowck/loan.rs +++ b/src/librustc/middle/borrowck/loan.rs @@ -115,7 +115,7 @@ pub impl LoanContext { if cmt.lp.is_none() { self.bccx.tcx.sess.span_bug( cmt.span, - ~"loan() called with non-lendable value"); + "loan() called with non-lendable value"); } match cmt.cat { @@ -123,7 +123,7 @@ pub impl LoanContext { // should never be loanable self.bccx.tcx.sess.span_bug( cmt.span, - ~"rvalue with a non-none lp"); + "rvalue with a non-none lp"); } cat_local(local_id) | cat_arg(local_id) | cat_self(local_id) => { // FIXME(#4903) @@ -188,7 +188,7 @@ pub impl LoanContext { // Aliased data is simply not lendable. self.bccx.tcx.sess.span_bug( cmt.span, - ~"aliased ptr with a non-none lp"); + "aliased ptr with a non-none lp"); } } } diff --git a/src/librustc/middle/borrowck/mod.rs b/src/librustc/middle/borrowck/mod.rs index 3746f9c6e60b1..f1d45e6e9aaa7 100644 --- a/src/librustc/middle/borrowck/mod.rs +++ b/src/librustc/middle/borrowck/mod.rs @@ -525,11 +525,11 @@ pub impl BorrowckCtxt { self.note_and_explain_bckerr(err); } - fn span_err(&self, s: span, m: ~str) { + fn span_err(&self, s: span, m: &str) { self.tcx.sess.span_err(s, m); } - fn span_note(&self, s: span, m: ~str) { + fn span_note(&self, s: span, m: &str) { self.tcx.sess.span_note(s, m); } diff --git a/src/librustc/middle/borrowck/preserve.rs b/src/librustc/middle/borrowck/preserve.rs index c44920fffa568..62358823f2322 100644 --- a/src/librustc/middle/borrowck/preserve.rs +++ b/src/librustc/middle/borrowck/preserve.rs @@ -124,7 +124,7 @@ pub impl<'self> PreserveCtxt<'self> { if self.root_managed_data { self.tcx().sess.span_bug( cmt.span, - ~"preserve() called with local and !root_managed_data"); + "preserve() called with local and !root_managed_data"); } let local_region = self.tcx().region_maps.encl_region(local_id); self.compare_scope(cmt, local_region) diff --git a/src/librustc/middle/trans/_match.rs b/src/librustc/middle/trans/_match.rs index 197b537fe9003..3bd2a8269b763 100644 --- a/src/librustc/middle/trans/_match.rs +++ b/src/librustc/middle/trans/_match.rs @@ -557,8 +557,7 @@ pub fn enter_opt<'r>(bcx: block, struct_id = found_struct_id; } _ => { - tcx.sess.span_bug(p.span, ~"expected enum \ - variant def"); + tcx.sess.span_bug(p.span, "expected enum variant def"); } } diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs index 0c3e3ba3cb672..87e347d200408 100644 --- a/src/librustc/middle/trans/base.rs +++ b/src/librustc/middle/trans/base.rs @@ -1125,10 +1125,11 @@ pub fn init_local(bcx: block, local: @ast::local) -> block { } let llptr = match bcx.fcx.lllocals.find(&local.node.id) { - Some(&local_mem(v)) => v, - _ => { bcx.tcx().sess.span_bug(local.span, - ~"init_local: Someone forgot to document why it's\ - safe to assume local.node.init must be local_mem!"); + Some(&local_mem(v)) => v, + _ => { + bcx.tcx().sess.span_bug(local.span, + "init_local: Someone forgot to document why it's\ + safe to assume local.node.init must be local_mem!"); } }; diff --git a/src/librustc/middle/trans/callee.rs b/src/librustc/middle/trans/callee.rs index ad0fea3b4b4af..ed7f91bf04a6b 100644 --- a/src/librustc/middle/trans/callee.rs +++ b/src/librustc/middle/trans/callee.rs @@ -356,9 +356,7 @@ pub fn trans_method_call(in_cx: block, origin) } None => { - cx.tcx().sess.span_bug(call_ex.span, - ~"method call expr wasn't in \ - method map") + cx.tcx().sess.span_bug(call_ex.span, "method call expr wasn't in method map") } } }, diff --git a/src/librustc/middle/trans/consts.rs b/src/librustc/middle/trans/consts.rs index c6c5561854c0d..9d04905bcc978 100644 --- a/src/librustc/middle/trans/consts.rs +++ b/src/librustc/middle/trans/consts.rs @@ -58,8 +58,7 @@ pub fn const_lit(cx: @CrateContext, e: @ast::expr, lit: ast::lit) } _ => { cx.sess.span_bug(lit.span, - ~"floating point literal doesn't have the right \ - type"); + "floating point literal doesn't have the right type"); } } } @@ -281,7 +280,7 @@ fn const_expr_unadjusted(cx: @CrateContext, e: @ast::expr) -> ValueRef { else { llvm::LLVMConstURem(te1, te2) } } ast::and | - ast::or => cx.sess.span_unimpl(e.span, ~"binop logic"), + ast::or => cx.sess.span_unimpl(e.span, "binop logic"), ast::bitxor => llvm::LLVMConstXor(te1, te2), ast::bitand => llvm::LLVMConstAnd(te1, te2), ast::bitor => llvm::LLVMConstOr(te1, te2), @@ -295,7 +294,7 @@ fn const_expr_unadjusted(cx: @CrateContext, e: @ast::expr) -> ValueRef { ast::le | ast::ne | ast::ge | - ast::gt => cx.sess.span_unimpl(e.span, ~"binop comparator") + ast::gt => cx.sess.span_unimpl(e.span, "binop comparator") } } ast::expr_unary(u, e) => { @@ -344,8 +343,7 @@ fn const_expr_unadjusted(cx: @CrateContext, e: @ast::expr) -> ValueRef { const_eval::const_int(i) => i as u64, const_eval::const_uint(u) => u, _ => cx.sess.span_bug(index.span, - ~"index is not an integer-constant \ - expression") + "index is not an integer-constant expression") }; let (arr, len) = match ty::get(bt).sty { ty::ty_evec(_, vstore) | ty::ty_estr(vstore) => @@ -363,12 +361,10 @@ fn const_expr_unadjusted(cx: @CrateContext, e: @ast::expr) -> ValueRef { unit_sz)) }, _ => cx.sess.span_bug(base.span, - ~"index-expr base must be \ - fixed-size or slice") + "index-expr base must be fixed-size or slice") }, _ => cx.sess.span_bug(base.span, - ~"index-expr base must be \ - a vector or string type") + "index-expr base must be a vector or string type") }; let len = llvm::LLVMConstIntGetZExtValue(len) as u64; @@ -380,7 +376,7 @@ fn const_expr_unadjusted(cx: @CrateContext, e: @ast::expr) -> ValueRef { // FIXME #3170: report this earlier on in the const-eval // pass. Reporting here is a bit late. cx.sess.span_err(e.span, - ~"const index-expr is out of bounds"); + "const index-expr is out of bounds"); } const_get_elt(cx, arr, [iv as c_uint]) } @@ -454,8 +450,7 @@ fn const_expr_unadjusted(cx: @CrateContext, e: @ast::expr) -> ValueRef { match fs.find(|f| field_ty.ident == f.node.ident) { Some(ref f) => const_expr(cx, (*f).node.expr), None => { - cx.tcx.sess.span_bug( - e.span, ~"missing struct field"); + cx.tcx.sess.span_bug(e.span, "missing struct field"); } } }); @@ -471,8 +466,7 @@ fn const_expr_unadjusted(cx: @CrateContext, e: @ast::expr) -> ValueRef { ast::expr_lit(ref lit) => { match lit.node { ast::lit_str(*) => { const_expr(cx, sub) } - _ => { cx.sess.span_bug(e.span, - ~"bad const-slice lit") } + _ => { cx.sess.span_bug(e.span, "bad const-slice lit") } } } ast::expr_vec(ref es, ast::m_imm) => { @@ -487,8 +481,7 @@ fn const_expr_unadjusted(cx: @CrateContext, e: @ast::expr) -> ValueRef { let p = const_ptrcast(cx, gv, llunitty); C_struct(~[p, sz]) } - _ => cx.sess.span_bug(e.span, - ~"bad const-slice expr") + _ => cx.sess.span_bug(e.span, "bad const-slice expr") } } ast::expr_path(pth) => { @@ -520,8 +513,7 @@ fn const_expr_unadjusted(cx: @CrateContext, e: @ast::expr) -> ValueRef { C_null(llty) } _ => { - cx.sess.span_bug(e.span, ~"expected a const, fn, \ - struct, or variant def") + cx.sess.span_bug(e.span, "expected a const, fn, struct, or variant def") } } } @@ -542,13 +534,12 @@ fn const_expr_unadjusted(cx: @CrateContext, e: @ast::expr) -> ValueRef { adt::trans_const(cx, repr, vinfo.disr_val, args.map(|a| const_expr(cx, *a))) } - _ => cx.sess.span_bug(e.span, ~"expected a struct or \ - variant def") + _ => cx.sess.span_bug(e.span, "expected a struct or variant def") } } ast::expr_paren(e) => { return const_expr(cx, e); } _ => cx.sess.span_bug(e.span, - ~"bad constant expression type in consts::const_expr") + "bad constant expression type in consts::const_expr") }; } } diff --git a/src/librustc/middle/trans/datum.rs b/src/librustc/middle/trans/datum.rs index fa27f652ac880..cf5fbb6e216ec 100644 --- a/src/librustc/middle/trans/datum.rs +++ b/src/librustc/middle/trans/datum.rs @@ -761,8 +761,8 @@ pub impl Datum { match self.try_deref(bcx, expr.id, derefs, false) { (Some(lvres), bcx) => DatumBlock { bcx: bcx, datum: lvres }, (None, _) => { - bcx.ccx().sess.span_bug( - expr.span, ~"Cannot deref this expression"); + bcx.ccx().sess.span_bug(expr.span, + "Cannot deref this expression"); } } } diff --git a/src/librustc/middle/trans/debuginfo.rs b/src/librustc/middle/trans/debuginfo.rs index 58fc5ea3be647..b7a1a90741c43 100644 --- a/src/librustc/middle/trans/debuginfo.rs +++ b/src/librustc/middle/trans/debuginfo.rs @@ -756,7 +756,7 @@ fn create_ty(cx: @CrateContext, t: ty::t, span: span) } }, ty::ty_enum(_did, ref _substs) => { - cx.sess.span_bug(span, ~"debuginfo for enum NYI") + cx.sess.span_bug(span, "debuginfo for enum NYI") } ty::ty_box(ref mt) | ty::ty_uniq(ref mt) => { let boxed = create_ty(cx, mt.ty, span); @@ -782,7 +782,7 @@ fn create_ty(cx: @CrateContext, t: ty::t, span: span) create_pointer_type(cx, t, span, pointee) }, ty::ty_rptr(ref _region, ref _mt) => { - cx.sess.span_bug(span, ~"debuginfo for rptr NYI") + cx.sess.span_bug(span, "debuginfo for rptr NYI") }, ty::ty_bare_fn(ref barefnty) => { let inputs = do barefnty.sig.inputs.map |a| { a.ty }; @@ -790,10 +790,10 @@ fn create_ty(cx: @CrateContext, t: ty::t, span: span) create_fn_ty(cx, t, inputs, output, span) }, ty::ty_closure(ref _closurety) => { - cx.sess.span_bug(span, ~"debuginfo for closure NYI") + cx.sess.span_bug(span, "debuginfo for closure NYI") }, ty::ty_trait(_did, ref _substs, ref _vstore, _) => { - cx.sess.span_bug(span, ~"debuginfo for trait NYI") + cx.sess.span_bug(span, "debuginfo for trait NYI") }, ty::ty_struct(did, ref substs) => { let fields = ty::struct_fields(cx.tcx, did, substs); @@ -860,14 +860,12 @@ pub fn create_local_var(bcx: block, local: @ast::local) let llptr = match bcx.fcx.lllocals.find(&local.node.id) { option::Some(&local_mem(v)) => v, option::Some(_) => { - bcx.tcx().sess.span_bug(local.span, ~"local is bound to \ - something weird"); + bcx.tcx().sess.span_bug(local.span, "local is bound to something weird"); } option::None => { match *bcx.fcx.lllocals.get(&local.node.pat.id) { local_imm(v) => v, - _ => bcx.tcx().sess.span_bug(local.span, ~"local is bound to \ - something weird") + _ => bcx.tcx().sess.span_bug(local.span, "local is bound to something weird") } } }; @@ -966,8 +964,7 @@ pub fn create_function(fcx: fn_ctxt) -> @Metadata { ast::item_fn(ref decl, _, _, _, _) => { (item.ident, decl.output, item.id) } - _ => fcx.ccx.sess.span_bug(item.span, ~"create_function: item \ - bound to non-function") + _ => fcx.ccx.sess.span_bug(item.span, "create_function: item bound to non-function") } } ast_map::node_method(method, _, _) => { @@ -979,12 +976,10 @@ pub fn create_function(fcx: fn_ctxt) -> @Metadata { ((dbg_cx.names)(~"fn"), decl.output, expr.id) } _ => fcx.ccx.sess.span_bug(expr.span, - ~"create_function: \ - expected an expr_fn_block here") + "create_function: expected an expr_fn_block here") } } - _ => fcx.ccx.sess.bug(~"create_function: unexpected \ - sort of node") + _ => fcx.ccx.sess.bug("create_function: unexpected sort of node") }; debug!("%?", ident); diff --git a/src/librustc/middle/trans/expr.rs b/src/librustc/middle/trans/expr.rs index ae510ae6d114f..7cdd7c3799ec4 100644 --- a/src/librustc/middle/trans/expr.rs +++ b/src/librustc/middle/trans/expr.rs @@ -690,7 +690,7 @@ fn trans_rvalue_dps_unadjusted(bcx: block, expr: @ast::expr, } _ => { bcx.tcx().sess.span_bug(expr.span, - ~"expr_cast of non-trait"); + "expr_cast of non-trait"); } } } @@ -700,8 +700,7 @@ fn trans_rvalue_dps_unadjusted(bcx: block, expr: @ast::expr, _ => { bcx.tcx().sess.span_bug( expr.span, - fmt!("trans_rvalue_dps_unadjusted reached \ - fall-through case: %?", + fmt!("trans_rvalue_dps_unadjusted reached fall-through case: %?", expr.node)); } } @@ -1202,7 +1201,7 @@ fn trans_rec_or_struct(bcx: block, } None => { tcx.sess.span_bug(field.span, - ~"Couldn't find field in struct type") + "Couldn't find field in struct type") } } }; @@ -1478,7 +1477,7 @@ fn trans_eager_binop(bcx: block, } else { if !ty::type_is_scalar(rhs_t) { bcx.tcx().sess.span_bug(binop_expr.span, - ~"non-scalar comparison"); + "non-scalar comparison"); } let cmpr = base::compare_scalar_types(bcx, lhs, rhs, rhs_t, op); bcx = cmpr.bcx; @@ -1486,7 +1485,7 @@ fn trans_eager_binop(bcx: block, } } _ => { - bcx.tcx().sess.span_bug(binop_expr.span, ~"unexpected binop"); + bcx.tcx().sess.span_bug(binop_expr.span, "unexpected binop"); } }; diff --git a/src/librustc/middle/trans/foreign.rs b/src/librustc/middle/trans/foreign.rs index c45ba64c58470..0e2bf80cc5e84 100644 --- a/src/librustc/middle/trans/foreign.rs +++ b/src/librustc/middle/trans/foreign.rs @@ -1080,7 +1080,7 @@ pub fn trans_intrinsic(ccx: @CrateContext, _ => { // Could we make this an enum rather than a string? does it get // checked earlier? - ccx.sess.span_bug(item.span, ~"unknown intrinsic"); + ccx.sess.span_bug(item.span, "unknown intrinsic"); } } build_return(bcx); diff --git a/src/librustc/middle/trans/monomorphize.rs b/src/librustc/middle/trans/monomorphize.rs index aa49915d1759b..2640dab1c04fb 100644 --- a/src/librustc/middle/trans/monomorphize.rs +++ b/src/librustc/middle/trans/monomorphize.rs @@ -160,7 +160,7 @@ pub fn monomorphic_fn(ccx: @CrateContext, // causing an infinite expansion. if depth > 30 { ccx.sess.span_fatal( - span, ~"overly deep expansion of inlined function"); + span, "overly deep expansion of inlined function"); } ccx.monomorphizing.insert(fn_id, depth + 1); diff --git a/src/librustc/middle/trans/reachable.rs b/src/librustc/middle/trans/reachable.rs index 234473dd35b60..f301a7d297342 100644 --- a/src/librustc/middle/trans/reachable.rs +++ b/src/librustc/middle/trans/reachable.rs @@ -170,11 +170,13 @@ fn traverse_inline_body(cx: &ctx, body: &blk) { expr_path(_) => { match cx.tcx.def_map.find(&e.id) { Some(&d) => { - traverse_def_id(cx, def_id_of_def(d)); + traverse_def_id(cx, def_id_of_def(d)); } - None => cx.tcx.sess.span_bug(e.span, fmt!("Unbound node \ - id %? while traversing %s", e.id, - expr_to_str(e, cx.tcx.sess.intr()))) + None => cx.tcx.sess.span_bug( + e.span, + fmt!("Unbound node id %? while traversing %s", + e.id, + expr_to_str(e, cx.tcx.sess.intr()))) } } expr_field(_, _, _) => { diff --git a/src/librustc/middle/trans/tvec.rs b/src/librustc/middle/trans/tvec.rs index da1cdfa4db103..e8075c1f2ad1d 100644 --- a/src/librustc/middle/trans/tvec.rs +++ b/src/librustc/middle/trans/tvec.rs @@ -469,7 +469,7 @@ pub fn write_content(bcx: block, } _ => { bcx.tcx().sess.span_bug(content_expr.span, - ~"Unexpected evec content"); + "Unexpected evec content"); } } } @@ -503,7 +503,7 @@ pub fn elements_required(bcx: block, content_expr: @ast::expr) -> uint { ty::eval_repeat_count(bcx.tcx(), count_expr) } _ => bcx.tcx().sess.span_bug(content_expr.span, - ~"Unexpected evec content") + "Unexpected evec content") } } diff --git a/src/librustc/middle/typeck/astconv.rs b/src/librustc/middle/typeck/astconv.rs index ffaa6d46d3379..7ef77646f5203 100644 --- a/src/librustc/middle/typeck/astconv.rs +++ b/src/librustc/middle/typeck/astconv.rs @@ -291,10 +291,8 @@ pub fn ast_ty_to_ty( ty::vstore_fixed(*) => { tcx.sess.span_err( path.span, - ~"@trait, ~trait or &trait \ - are the only supported \ - forms of casting-to-\ - trait"); + "@trait, ~trait or &trait are the only supported \ + forms of casting-to-trait"); ty::BoxTraitStore } }; @@ -321,7 +319,7 @@ pub fn ast_ty_to_ty( if path.types.len() > 0u { tcx.sess.span_err( path.span, - ~"type parameters are not allowed on this type"); + "type parameters are not allowed on this type"); } } @@ -329,7 +327,7 @@ pub fn ast_ty_to_ty( if path.rp.is_some() { tcx.sess.span_err( path.span, - ~"region parameters are not allowed on this type"); + "region parameters are not allowed on this type"); } } } @@ -339,9 +337,8 @@ pub fn ast_ty_to_ty( match tcx.ast_ty_to_ty_cache.find(&ast_ty.id) { Some(&ty::atttce_resolved(ty)) => return ty, Some(&ty::atttce_unresolved) => { - tcx.sess.span_fatal(ast_ty.span, ~"illegal recursive type; \ - insert an enum in the cycle, \ - if this is desired"); + tcx.sess.span_fatal(ast_ty.span, "illegal recursive type; \ + insert an enum in the cycle, if this is desired"); } None => { /* go on */ } } @@ -359,11 +356,9 @@ pub fn ast_ty_to_ty( |tmt| ty::mk_uniq(tcx, tmt)) } ast::ty_vec(ref mt) => { - tcx.sess.span_err(ast_ty.span, - ~"bare `[]` is not a type"); + tcx.sess.span_err(ast_ty.span, "bare `[]` is not a type"); // return /something/ so they can at least get more errors - ty::mk_evec(tcx, ast_mt_to_mt(self, rscope, mt), - ty::vstore_uniq) + ty::mk_evec(tcx, ast_mt_to_mt(self, rscope, mt), ty::vstore_uniq) } ast::ty_ptr(ref mt) => { ty::mk_ptr(tcx, ast_mt_to_mt(self, rscope, mt)) @@ -434,7 +429,7 @@ pub fn ast_ty_to_ty( } ast::ty_str => { tcx.sess.span_err(ast_ty.span, - ~"bare `str` is not a type"); + "bare `str` is not a type"); // return /something/ so they can at least get more errors ty::mk_estr(tcx, ty::vstore_uniq) } @@ -454,7 +449,7 @@ pub fn ast_ty_to_ty( } _ => { tcx.sess.span_fatal(ast_ty.span, - ~"found type name used as a variable"); + "found type name used as a variable"); } } } @@ -470,7 +465,7 @@ pub fn ast_ty_to_ty( ty::vstore_fixed(i as uint)), _ => { tcx.sess.span_fatal( - ast_ty.span, ~"expected constant expr for vector length"); + ast_ty.span, "expected constant expr for vector length"); } } } @@ -489,11 +484,11 @@ pub fn ast_ty_to_ty( // routine. self.tcx().sess.span_bug( ast_ty.span, - ~"found `ty_infer` in unexpected place"); + "found `ty_infer` in unexpected place"); } ast::ty_mac(_) => { tcx.sess.span_bug(ast_ty.span, - ~"found `ty_mac` in unexpected place"); + "found `ty_mac` in unexpected place"); } }; diff --git a/src/librustc/middle/typeck/check/_match.rs b/src/librustc/middle/typeck/check/_match.rs index 5ff7105712183..de384d02dc3bc 100644 --- a/src/librustc/middle/typeck/check/_match.rs +++ b/src/librustc/middle/typeck/check/_match.rs @@ -204,8 +204,7 @@ pub fn check_pat_variant(pcx: &pat_ctxt, pat: @ast::pat, path: @ast::Path, if arg_len > 0 { // N-ary variant. if arg_len != subpats_len { - let s = fmt!("this pattern has %u field%s, but the corresponding \ - %s has %u field%s", + let s = fmt!("this pattern has %u field%s, but the corresponding %s has %u field%s", subpats_len, if subpats_len == 1u { ~"" } else { ~"s" }, kind_name, @@ -223,13 +222,12 @@ pub fn check_pat_variant(pcx: &pat_ctxt, pat: @ast::pat, path: @ast::Path, } } } else if subpats_len > 0 { - tcx.sess.span_err - (pat.span, fmt!("this pattern has %u field%s, but the \ - corresponding %s has no fields", - subpats_len, - if subpats_len == 1u { ~"" } - else { ~"s" }, - kind_name)); + tcx.sess.span_err(pat.span, + fmt!("this pattern has %u field%s, but the corresponding %s has no \ + fields", + subpats_len, + if subpats_len == 1u { "" } else { "s" }, + kind_name)); error_happened = true; } @@ -319,20 +317,19 @@ pub fn check_struct_pat(pcx: &pat_ctxt, pat_id: ast::node_id, span: span, Some(&ast::def_struct(*)) | Some(&ast::def_variant(*)) => { let name = pprust::path_to_str(path, tcx.sess.intr()); tcx.sess.span_err(span, - fmt!("mismatched types: expected `%s` but \ - found `%s`", + fmt!("mismatched types: expected `%s` but found `%s`", fcx.infcx().ty_to_str(expected), name)); } _ => { - tcx.sess.span_bug(span, ~"resolve didn't write in class"); + tcx.sess.span_bug(span, "resolve didn't write in class"); } } // Forbid pattern-matching structs with destructors. if ty::has_dtor(tcx, class_id) { - tcx.sess.span_err(span, ~"deconstructing struct not allowed in \ - pattern (it has a destructor)"); + tcx.sess.span_err(span, "deconstructing struct not allowed in pattern \ + (it has a destructor)"); } check_struct_pat_fields(pcx, span, path, fields, class_fields, class_id, @@ -370,7 +367,7 @@ pub fn check_struct_like_enum_variant_pat(pcx: &pat_ctxt, name)); } _ => { - tcx.sess.span_bug(span, ~"resolve didn't write in variant"); + tcx.sess.span_bug(span, "resolve didn't write in variant"); } } } @@ -404,10 +401,9 @@ pub fn check_pat(pcx: &pat_ctxt, pat: @ast::pat, expected: ty::t) { { // no-op } else if !ty::type_is_numeric(b_ty) { - tcx.sess.span_err(pat.span, ~"non-numeric type used in range"); + tcx.sess.span_err(pat.span, "non-numeric type used in range"); } else if !valid_range_bounds(fcx.ccx, begin, end) { - tcx.sess.span_err(begin.span, ~"lower range bound must be less \ - than upper"); + tcx.sess.span_err(begin.span, "lower range bound must be less than upper"); } fcx.write_ty(pat.id, b_ty); } @@ -476,9 +472,8 @@ pub fn check_pat(pcx: &pat_ctxt, pat: @ast::pat, expected: ty::t) { } _ => { tcx.sess.span_err(pat.span, - fmt!("mismatched types: expected `%s` \ - but found struct", - fcx.infcx().ty_to_str(expected))); + fmt!("mismatched types: expected `%s` but found struct", + fcx.infcx().ty_to_str(expected))); error_happened = true; } } diff --git a/src/librustc/middle/typeck/check/method.rs b/src/librustc/middle/typeck/check/method.rs index fb5b53d9400fb..abaadceb053fc 100644 --- a/src/librustc/middle/typeck/check/method.rs +++ b/src/librustc/middle/typeck/check/method.rs @@ -872,7 +872,7 @@ pub impl<'self> LookupContext<'self> { if relevant_candidates.len() > 1 { self.tcx().sess.span_err( self.expr.span, - ~"multiple applicable methods in scope"); + "multiple applicable methods in scope"); for uint::range(0, relevant_candidates.len()) |idx| { self.report_candidate(idx, &relevant_candidates[idx].origin); } @@ -983,12 +983,12 @@ pub impl<'self> LookupContext<'self> { } else if num_method_tps == 0u { tcx.sess.span_err( self.expr.span, - ~"this method does not take type parameters"); + "this method does not take type parameters"); self.fcx.infcx().next_ty_vars(num_method_tps) } else if num_supplied_tps != num_method_tps { tcx.sess.span_err( self.expr.span, - ~"incorrect number of type \ + "incorrect number of type \ parameters given for this method"); self.fcx.infcx().next_ty_vars(num_method_tps) } else { @@ -1082,14 +1082,14 @@ pub impl<'self> LookupContext<'self> { if ty::type_has_self(method_fty) { self.tcx().sess.span_err( self.expr.span, - ~"cannot call a method whose type contains a \ - self-type through a boxed trait"); + "cannot call a method whose type contains a \ + self-type through a boxed trait"); } if candidate.method_ty.generics.has_type_params() { self.tcx().sess.span_err( self.expr.span, - ~"cannot call a generic method through a boxed trait"); + "cannot call a generic method through a boxed trait"); } } @@ -1109,7 +1109,7 @@ pub impl<'self> LookupContext<'self> { if bad { self.tcx().sess.span_err(self.expr.span, - ~"explicit call to destructor"); + "explicit call to destructor"); } } diff --git a/src/librustc/middle/typeck/check/mod.rs b/src/librustc/middle/typeck/check/mod.rs index d1c5ae18bc30b..69775771d9697 100644 --- a/src/librustc/middle/typeck/check/mod.rs +++ b/src/librustc/middle/typeck/check/mod.rs @@ -542,17 +542,15 @@ pub fn check_no_duplicate_fields(tcx: ty::ctxt, let (id, sp) = *p; let orig_sp = field_names.find(&id).map_consume(|x| *x); match orig_sp { - Some(orig_sp) => { - tcx.sess.span_err(sp, fmt!("Duplicate field \ - name %s in record type declaration", - *tcx.sess.str_of(id))); - tcx.sess.span_note(orig_sp, ~"First declaration of \ - this field occurred here"); - break; - } - None => { - field_names.insert(id, sp); - } + Some(orig_sp) => { + tcx.sess.span_err(sp, fmt!("Duplicate field name %s in record type declaration", + *tcx.sess.str_of(id))); + tcx.sess.span_note(orig_sp, "First declaration of this field occurred here"); + break; + } + None => { + field_names.insert(id, sp); + } } } } @@ -1252,8 +1250,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt, ty::ty_rptr(_, mt) => formal_ty = mt.ty, ty::ty_err => (), _ => { - fcx.ccx.tcx.sess.span_bug(arg.span, - ~"no ref"); + fcx.ccx.tcx.sess.span_bug(arg.span, "no ref"); } } } @@ -1559,8 +1556,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt, match ty::get(lhs_resolved_t).sty { ty::ty_bare_fn(_) | ty::ty_closure(_) => { tcx.sess.span_note( - ex.span, ~"did you forget the `do` keyword \ - for the call?"); + ex.span, "did you forget the `do` keyword for the call?"); } _ => () } @@ -1851,9 +1847,9 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt, tcx.sess.span_err(span, fmt!("missing field%s: %s", if missing_fields.len() == 1 { - ~"" + "" } else { - ~"s" + "s" }, str::connect(missing_fields, ~", "))); } @@ -1901,7 +1897,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt, } _ => { tcx.sess.span_bug(span, - ~"resolve didn't map this to a class"); + "resolve didn't map this to a class"); } } } else { @@ -1989,7 +1985,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt, } _ => { tcx.sess.span_bug(span, - ~"resolve didn't map this to an enum"); + "resolve didn't map this to an enum"); } } } else { @@ -2201,7 +2197,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt, } } _ => - tcx.sess.span_bug(expr.span, ~"vstore modifier on non-sequence") + tcx.sess.span_bug(expr.span, "vstore modifier on non-sequence") }; fcx.write_ty(ev.id, typ); fcx.write_ty(id, typ); @@ -2284,21 +2280,18 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt, ty::ty_enum(*) => { tcx.sess.span_err( expr.span, - ~"can only dereference enums \ - with a single variant which has a \ - single argument"); + "can only dereference enums with a single variant which \ + has a single argument"); } ty::ty_struct(*) => { tcx.sess.span_err( expr.span, - ~"can only dereference structs with \ - one anonymous field"); + "can only dereference structs with one anonymous field"); } _ => { fcx.type_error_message(expr.span, |actual| { - fmt!("type %s cannot be \ - dereferenced", actual) + fmt!("type %s cannot be dereferenced", actual) }, oprnd_t, None); } } @@ -2394,7 +2387,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt, result::Err(_) => { tcx.sess.span_err( expr.span, - ~"`return;` in function returning non-nil"); + "`return;` in function returning non-nil"); } }, Some(e) => { @@ -2758,8 +2751,8 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt, variant_id, *fields); } _ => { - tcx.sess.span_bug(path.span, ~"structure constructor does \ - not name a structure type"); + tcx.sess.span_bug(path.span, + "structure constructor does not name a structure type"); } } } @@ -2961,7 +2954,7 @@ pub fn check_block_with_expected(fcx: @mut FnCtxt, } _ => false } { - fcx.ccx.tcx.sess.span_warn(s.span, ~"unreachable statement"); + fcx.ccx.tcx.sess.span_warn(s.span, "unreachable statement"); warned = true; } if ty::type_is_bot(s_ty) { @@ -2982,7 +2975,7 @@ pub fn check_block_with_expected(fcx: @mut FnCtxt, }, Some(e) => { if any_bot && !warned { - fcx.ccx.tcx.sess.span_warn(e.span, ~"unreachable expression"); + fcx.ccx.tcx.sess.span_warn(e.span, "unreachable expression"); } check_expr_with_opt_hint(fcx, e, expected); let ety = fcx.expr_ty(e); @@ -3073,8 +3066,8 @@ pub fn check_enum_variants(ccx: @mut CrateCtxt, *disr_val = val as int; } Ok(_) => { - ccx.tcx.sess.span_err(e.span, ~"expected signed integer \ - constant"); + ccx.tcx.sess.span_err(e.span, "expected signed integer \ + constant"); } Err(ref err) => { ccx.tcx.sess.span_err(e.span, @@ -3085,7 +3078,7 @@ pub fn check_enum_variants(ccx: @mut CrateCtxt, } if vec::contains(*disr_vals, &*disr_val) { ccx.tcx.sess.span_err(v.span, - ~"discriminator value already exists"); + "discriminator value already exists"); } disr_vals.push(*disr_val); let ctor_ty = ty::node_id_to_type(ccx.tcx, v.node.id); @@ -3142,9 +3135,9 @@ pub fn check_enum_variants(ccx: @mut CrateCtxt, _ => false } }) { - ccx.tcx.sess.span_err(sp, ~"illegal recursive enum type; \ - wrap the inner value in a box to \ - make it representable"); + ccx.tcx.sess.span_err(sp, + "illegal recursive enum type; \ + wrap the inner value in a box to make it representable"); } // Check that it is possible to instantiate this enum: @@ -3205,26 +3198,25 @@ pub fn ty_param_bounds_and_ty_for_def(fcx: @mut FnCtxt, ast::def_ty(_) | ast::def_prim_ty(_) | ast::def_ty_param(*)=> { - fcx.ccx.tcx.sess.span_bug(sp, ~"expected value but found type"); + fcx.ccx.tcx.sess.span_bug(sp, "expected value but found type"); } ast::def_mod(*) | ast::def_foreign_mod(*) => { - fcx.ccx.tcx.sess.span_bug(sp, ~"expected value but found module"); + fcx.ccx.tcx.sess.span_bug(sp, "expected value but found module"); } ast::def_use(*) => { - fcx.ccx.tcx.sess.span_bug(sp, ~"expected value but found use"); + fcx.ccx.tcx.sess.span_bug(sp, "expected value but found use"); } ast::def_region(*) => { - fcx.ccx.tcx.sess.span_bug(sp, ~"expected value but found region"); + fcx.ccx.tcx.sess.span_bug(sp, "expected value but found region"); } ast::def_typaram_binder(*) => { - fcx.ccx.tcx.sess.span_bug(sp, ~"expected value but found type \ - parameter"); + fcx.ccx.tcx.sess.span_bug(sp, "expected value but found type parameter"); } ast::def_label(*) => { - fcx.ccx.tcx.sess.span_bug(sp, ~"expected value but found label"); + fcx.ccx.tcx.sess.span_bug(sp, "expected value but found label"); } ast::def_self_ty(*) => { - fcx.ccx.tcx.sess.span_bug(sp, ~"expected value but found self ty"); + fcx.ccx.tcx.sess.span_bug(sp, "expected value but found self ty"); } } } @@ -3253,7 +3245,7 @@ pub fn instantiate_path(fcx: @mut FnCtxt, match tpt.generics.region_param { None => { // ...but the type is not lifetime parameterized! fcx.ccx.tcx.sess.span_err - (span, ~"this item is not region-parameterized"); + (span, "this item is not region-parameterized"); None } Some(_) => { // ...and the type is lifetime parameterized, ok. @@ -3273,15 +3265,15 @@ pub fn instantiate_path(fcx: @mut FnCtxt, fcx.infcx().next_ty_vars(ty_param_count) } else if ty_param_count == 0 { fcx.ccx.tcx.sess.span_err - (span, ~"this item does not take type parameters"); + (span, "this item does not take type parameters"); fcx.infcx().next_ty_vars(ty_param_count) } else if ty_substs_len > ty_param_count { fcx.ccx.tcx.sess.span_err - (span, ~"too many type parameters provided for this item"); + (span, "too many type parameters provided for this item"); fcx.infcx().next_ty_vars(ty_param_count) } else if ty_substs_len < ty_param_count { fcx.ccx.tcx.sess.span_err - (span, ~"not enough type parameters provided for this item"); + (span, "not enough type parameters provided for this item"); fcx.infcx().next_ty_vars(ty_param_count) } else { pth.types.map(|aty| fcx.to_ty(*aty)) diff --git a/src/librustc/middle/typeck/check/regionck.rs b/src/librustc/middle/typeck/check/regionck.rs index cb2b854276d6f..3a38d0b1d7ba3 100644 --- a/src/librustc/middle/typeck/check/regionck.rs +++ b/src/librustc/middle/typeck/check/regionck.rs @@ -490,13 +490,13 @@ fn constrain_auto_ref(rcx: @mut Rcx, expr: @ast::expr) { // reporting an error would be the correct path. tcx.sess.span_err( expr.span, - ~"lifetime of borrowed pointer does not include \ - the expression being borrowed"); + "lifetime of borrowed pointer does not include \ + the expression being borrowed"); note_and_explain_region( tcx, - ~"lifetime of the borrowed pointer is", + "lifetime of the borrowed pointer is", region, - ~""); + ""); rcx.errors_reported += 1; } } @@ -522,17 +522,17 @@ fn constrain_free_variables( result::Err(_) => { tcx.sess.span_err( freevar.span, - ~"captured variable does not outlive the enclosing closure"); + "captured variable does not outlive the enclosing closure"); note_and_explain_region( tcx, - ~"captured variable is valid for ", + "captured variable is valid for ", en_region, - ~""); + ""); note_and_explain_region( tcx, - ~"closure is valid for ", + "closure is valid for ", region, - ~""); + ""); } } } diff --git a/src/librustc/middle/typeck/check/vtable.rs b/src/librustc/middle/typeck/check/vtable.rs index 44b6212261246..532638faa68c7 100644 --- a/src/librustc/middle/typeck/check/vtable.rs +++ b/src/librustc/middle/typeck/check/vtable.rs @@ -414,7 +414,7 @@ fn lookup_vtable(vcx: &VtableContext, if !is_early { vcx.tcx().sess.span_err( location_info.span, - ~"multiple applicable methods in scope"); + "multiple applicable methods in scope"); } return Some(/*bad*/copy found[0]); } diff --git a/src/librustc/middle/typeck/coherence.rs b/src/librustc/middle/typeck/coherence.rs index 05b2f6f577b82..7fff756b01da5 100644 --- a/src/librustc/middle/typeck/coherence.rs +++ b/src/librustc/middle/typeck/coherence.rs @@ -76,10 +76,8 @@ pub fn get_base_type(inference_context: @mut InferCtxt, } _ => { inference_context.tcx.sess.span_fatal(span, - ~"the type of this value \ - must be known in order \ - to determine the base \ - type"); + "the type of this value must be known in order \ + to determine the base type"); } } @@ -257,9 +255,8 @@ pub impl CoherenceChecker { None => { let session = self.crate_context.tcx.sess; session.span_err(item.span, - ~"no base type found for inherent \ - implementation; implement a \ - trait or new type instead"); + "no base type found for inherent implementation; \ + implement a trait or new type instead"); } Some(_) => { // Nothing to do. @@ -483,11 +480,9 @@ pub impl CoherenceChecker { if self.polytypes_unify(polytype_a, polytype_b) { let session = self.crate_context.tcx.sess; session.span_err(self.span_of_impl(implementation_b), - ~"conflicting implementations for a \ - trait"); + "conflicting implementations for a trait"); session.span_note(self.span_of_impl(implementation_a), - ~"note conflicting implementation \ - here"); + "note conflicting implementation here"); } } } @@ -667,11 +662,9 @@ pub impl CoherenceChecker { // This is an error. let session = self.crate_context.tcx.sess; session.span_err(item.span, - ~"cannot associate methods with \ - a type outside the crate the \ - type is defined in; define \ - and implement a trait or new \ - type instead"); + "cannot associate methods with a type outside the \ + crate the type is defined in; define and implement \ + a trait or new type instead"); } } item_impl(_, Some(trait_ref), _, _) => { @@ -690,10 +683,8 @@ pub impl CoherenceChecker { if trait_def_id.crate != local_crate { let session = self.crate_context.tcx.sess; session.span_err(item.span, - ~"cannot provide an \ - extension implementation \ - for a trait not defined \ - in this crate"); + "cannot provide an extension implementation \ + for a trait not defined in this crate"); } } @@ -765,7 +756,7 @@ pub impl CoherenceChecker { None => { self.crate_context.tcx.sess.span_bug( original_type.span, - ~"resolve didn't resolve this type?!"); + "resolve didn't resolve this type?!"); } Some(&node_item(item, _)) => { match item.node { @@ -849,8 +840,7 @@ pub impl CoherenceChecker { } _ => { self.crate_context.tcx.sess.span_bug(item.span, - ~"can't convert a \ - non-impl to an impl"); + "can't convert a non-impl to an impl"); } } } @@ -862,9 +852,8 @@ pub impl CoherenceChecker { return item.span; } _ => { - self.crate_context.tcx.sess.bug(~"span_of_impl() called on \ - something that wasn't an \ - impl!"); + self.crate_context.tcx.sess.bug("span_of_impl() called on something that \ + wasn't an impl!"); } } } @@ -1045,17 +1034,16 @@ pub impl CoherenceChecker { match tcx.items.find(&impl_info.did.node) { Some(&ast_map::node_item(@ref item, _)) => { tcx.sess.span_err((*item).span, - ~"the Drop trait may only \ - be implemented on \ - structures"); + "the Drop trait may only be implemented on \ + structures"); } _ => { - tcx.sess.bug(~"didn't find impl in ast map"); + tcx.sess.bug("didn't find impl in ast map"); } } } else { - tcx.sess.bug(~"found external impl of Drop trait on \ - something other than a struct"); + tcx.sess.bug("found external impl of Drop trait on \ + something other than a struct"); } } } diff --git a/src/librustc/middle/typeck/collect.rs b/src/librustc/middle/typeck/collect.rs index 10537711b3289..45d61bb735728 100644 --- a/src/librustc/middle/typeck/collect.rs +++ b/src/librustc/middle/typeck/collect.rs @@ -151,7 +151,7 @@ impl AstConv for CrateCtxt { fn ty_infer(&self, span: span) -> ty::t { self.tcx.sess.span_bug(span, - ~"found `ty_infer` in unexpected place"); + "found `ty_infer` in unexpected place"); } } @@ -416,8 +416,7 @@ pub fn ensure_supertraits(ccx: &CrateCtxt, if ty_trait_refs.any(|other_trait| other_trait.def_id == trait_ref.def_id) { // This means a trait inherited from the same supertrait more // than once. - tcx.sess.span_err(sp, ~"Duplicate supertrait in trait \ - declaration"); + tcx.sess.span_err(sp, "Duplicate supertrait in trait declaration"); break; } else { ty_trait_refs.push(trait_ref); diff --git a/src/librustc/middle/typeck/infer/region_inference.rs b/src/librustc/middle/typeck/infer/region_inference.rs index e12a3f2e97522..25e65d7a18bca 100644 --- a/src/librustc/middle/typeck/infer/region_inference.rs +++ b/src/librustc/middle/typeck/infer/region_inference.rs @@ -1587,9 +1587,9 @@ pub impl RegionVarBindings { note_and_explain_region( self.tcx, - ~"first, the lifetime cannot outlive ", + "first, the lifetime cannot outlive ", upper_bound.region, - ~"..."); + "..."); self.tcx.sess.span_note( upper_bound.span, @@ -1597,9 +1597,9 @@ pub impl RegionVarBindings { note_and_explain_region( self.tcx, - ~"but, the lifetime must be valid for ", + "but, the lifetime must be valid for ", lower_bound.region, - ~"..."); + "..."); self.tcx.sess.span_note( lower_bound.span, diff --git a/src/librustc/middle/typeck/mod.rs b/src/librustc/middle/typeck/mod.rs index b0e0b7319ac84..0012eb700302a 100644 --- a/src/librustc/middle/typeck/mod.rs +++ b/src/librustc/middle/typeck/mod.rs @@ -214,7 +214,7 @@ pub fn lookup_def_tcx(tcx: ty::ctxt, sp: span, id: ast::node_id) -> ast::def { match tcx.def_map.find(&id) { Some(&x) => x, _ => { - tcx.sess.span_fatal(sp, ~"internal error looking up a definition") + tcx.sess.span_fatal(sp, "internal error looking up a definition") } } } @@ -301,8 +301,7 @@ fn check_main_fn_ty(ccx: @mut CrateCtxt, if ps.is_parameterized() => { tcx.sess.span_err( main_span, - ~"main function is not allowed \ - to have type parameters"); + "main function is not allowed to have type parameters"); return; } _ => () @@ -343,8 +342,7 @@ fn check_start_fn_ty(ccx: @mut CrateCtxt, if ps.is_parameterized() => { tcx.sess.span_err( start_span, - ~"start function is not allowed to have type \ - parameters"); + "start function is not allowed to have type parameters"); return; } _ => () diff --git a/src/libsyntax/ext/base.rs b/src/libsyntax/ext/base.rs index 1c03ad1375919..db4912d213108 100644 --- a/src/libsyntax/ext/base.rs +++ b/src/libsyntax/ext/base.rs @@ -342,7 +342,7 @@ pub fn expr_to_str(cx: @ext_ctxt, expr: @ast::expr, err_msg: ~str) -> ~str { pub fn expr_to_ident(cx: @ext_ctxt, expr: @ast::expr, - err_msg: ~str) -> ast::ident { + err_msg: &str) -> ast::ident { match expr.node { ast::expr_path(p) => { if vec::len(p.types) > 0u || vec::len(p.idents) != 1u { diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 8459fc8c6273d..5ae101a567cc2 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -308,22 +308,22 @@ pub impl Parser { } return copy self.buffer[(*self.buffer_start + dist - 1) & 3].tok; } - fn fatal(&self, m: ~str) -> ! { + fn fatal(&self, m: &str) -> ! { self.sess.span_diagnostic.span_fatal(*copy self.span, m) } - fn span_fatal(&self, sp: span, m: ~str) -> ! { + fn span_fatal(&self, sp: span, m: &str) -> ! { self.sess.span_diagnostic.span_fatal(sp, m) } - fn span_note(&self, sp: span, m: ~str) { + fn span_note(&self, sp: span, m: &str) { self.sess.span_diagnostic.span_note(sp, m) } - fn bug(&self, m: ~str) -> ! { + fn bug(&self, m: &str) -> ! { self.sess.span_diagnostic.span_bug(*copy self.span, m) } - fn warn(&self, m: ~str) { + fn warn(&self, m: &str) { self.sess.span_diagnostic.span_warn(*copy self.span, m) } - fn span_err(&self, sp: span, m: ~str) { + fn span_err(&self, sp: span, m: &str) { self.sess.span_diagnostic.span_err(sp, m) } fn abort_if_errors(&self) { @@ -2029,8 +2029,7 @@ pub impl Parser { // This is a 'continue' expression if opt_ident.is_some() { self.span_err(*self.last_span, - ~"a label may not be used with a `loop` \ - expression"); + "a label may not be used with a `loop` expression"); } let lo = self.span.lo; @@ -2167,7 +2166,7 @@ pub impl Parser { @ast::pat { node: pat_wild, _ } => (), @ast::pat { node: pat_ident(_, _, _), _ } => (), @ast::pat { span, _ } => self.span_fatal( - span, ~"expected an identifier or `_`" + span, "expected an identifier or `_`" ) } slice = Some(subpat); @@ -2459,7 +2458,7 @@ pub impl Parser { -> ast::pat_ { if !is_plain_ident(&*self.token) { self.span_fatal(*self.last_span, - ~"expected identifier, found path"); + "expected identifier, found path"); } // why a path here, and not just an identifier? let name = self.parse_path_without_tps(); @@ -2478,7 +2477,7 @@ pub impl Parser { if *self.token == token::LPAREN { self.span_fatal( *self.last_span, - ~"expected identifier, found enum pattern"); + "expected identifier, found enum pattern"); } pat_ident(binding_mode, name, sub) @@ -2609,19 +2608,19 @@ pub impl Parser { match self.parse_item_or_view_item(/*bad*/ copy item_attrs, false) { - iovi_item(i) => { - let hi = i.span.hi; - let decl = @spanned(lo, hi, decl_item(i)); - return @spanned(lo, hi, stmt_decl(decl, self.get_id())); - } - iovi_view_item(vi) => { - self.span_fatal(vi.span, ~"view items must be declared at \ - the top of the block"); - } - iovi_foreign_item(_) => { - self.fatal(~"foreign items are not allowed here"); - } - iovi_none() => { /* fallthrough */ } + iovi_item(i) => { + let hi = i.span.hi; + let decl = @spanned(lo, hi, decl_item(i)); + return @spanned(lo, hi, stmt_decl(decl, self.get_id())); + } + iovi_view_item(vi) => { + self.span_fatal(vi.span, + "view items must be declared at the top of the block"); + } + iovi_foreign_item(_) => { + self.fatal(~"foreign items are not allowed here"); + } + iovi_none() => { /* fallthrough */ } } check_expected_item(self, item_attrs); @@ -2822,8 +2821,7 @@ pub impl Parser { result.push(RegionTyParamBound); } else { self.span_err(*self.span, - ~"`'static` is the only permissible \ - region bound here"); + "`'static` is the only permissible region bound here"); } self.bump(); } @@ -3238,7 +3236,7 @@ pub impl Parser { }) } _ => { - self.span_err(*self.span, ~"not a trait"); + self.span_err(*self.span, "not a trait"); None } }; @@ -3467,9 +3465,8 @@ pub impl Parser { ) { iovi_item(item) => items.push(item), iovi_view_item(view_item) => { - self.span_fatal(view_item.span, ~"view items must be \ - declared at the top of the \ - module"); + self.span_fatal(view_item.span, "view items must be declared at the top of the \ + module"); } _ => { self.fatal( @@ -3762,7 +3759,7 @@ pub impl Parser { } if opt_abis.is_some() { - self.span_err(*self.span, ~"an ABI may not be specified here"); + self.span_err(*self.span, "an ABI may not be specified here"); } // extern mod foo; @@ -4397,9 +4394,7 @@ pub impl Parser { view_item_extern_mod(*) if !extern_mod_allowed => { self.span_err(view_item.span, - ~"\"extern mod\" \ - declarations are not \ - allowed here"); + "\"extern mod\" declarations are not allowed here"); } view_item_extern_mod(*) => {} } @@ -4425,8 +4420,7 @@ pub impl Parser { iovi_none => break, iovi_view_item(view_item) => { self.span_err(view_item.span, - ~"`use` and `extern mod` declarations \ - must precede items"); + "`use` and `extern mod` declarations must precede items"); } iovi_item(item) => { items.push(item) @@ -4461,8 +4455,7 @@ pub impl Parser { iovi_view_item(view_item) => { // I think this can't occur: self.span_err(view_item.span, - ~"`use` and `extern mod` declarations \ - must precede items"); + "`use` and `extern mod` declarations must precede items"); } iovi_item(_) => { // FIXME #5668: this will occur for a macro invocation: From 7aa10e616bc3d4d43051c04a074d7e573fb72886 Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Thu, 2 May 2013 12:46:58 -0400 Subject: [PATCH 145/410] make link_args use spaces as separators Lots of linking arguments need to be passed as -Wl,--foo so giving the comma meaning at the rustc layer makes those flags impossible to pass. Multiple arguments can now be passed from a shell by quoting the argument: --link-args='-lfoo -Wl,--as-needed'. --- src/librustc/driver/driver.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/librustc/driver/driver.rs b/src/librustc/driver/driver.rs index afd0e0acfe910..5e5d0640d808e 100644 --- a/src/librustc/driver/driver.rs +++ b/src/librustc/driver/driver.rs @@ -653,7 +653,7 @@ pub fn build_session_options(binary: @~str, let linker_args = getopts::opt_strs(matches, ~"link-args").flat_map( |a| { let mut args = ~[]; - for str::each_split_char(*a, ',') |arg| { + for str::each_split_char(*a, ' ') |arg| { args.push(str::from_slice(arg)); } args @@ -760,7 +760,7 @@ pub fn optgroups() -> ~[getopts::groups::OptGroup] { optmulti("L", "", "Add a directory to the library search path", "PATH"), optflag("", "lib", "Compile a library crate"), - optmulti("", "link-args", "FLAGS is a comma-separated list of flags + optmulti("", "link-args", "FLAGS is a space-separated list of flags passed to the linker", "FLAGS"), optflag("", "ls", "List the symbols defined by a library crate"), optflag("", "no-trans", From a0d8873097a587163887e701c08373a1571f8973 Mon Sep 17 00:00:00 2001 From: Seo Sanghyeon Date: Fri, 3 May 2013 02:36:24 +0900 Subject: [PATCH 146/410] More accurate spans --- src/libsyntax/parse/attr.rs | 2 +- src/libsyntax/parse/common.rs | 2 +- src/libsyntax/parse/parser.rs | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libsyntax/parse/attr.rs b/src/libsyntax/parse/attr.rs index 037b2c089f46a..93584b00d39e6 100644 --- a/src/libsyntax/parse/attr.rs +++ b/src/libsyntax/parse/attr.rs @@ -156,7 +156,7 @@ impl parser_attr for Parser { @spanned(lo, hi, ast::meta_list(name, inner_items)) } _ => { - let hi = self.span.hi; + let hi = self.last_span.hi; @spanned(lo, hi, ast::meta_word(name)) } } diff --git a/src/libsyntax/parse/common.rs b/src/libsyntax/parse/common.rs index 01f80c032e9a0..1df6860fedee9 100644 --- a/src/libsyntax/parse/common.rs +++ b/src/libsyntax/parse/common.rs @@ -122,7 +122,7 @@ pub impl Parser { fn parse_path_list_ident(&self) -> ast::path_list_ident { let lo = self.span.lo; let ident = self.parse_ident(); - let hi = self.span.hi; + let hi = self.last_span.hi; spanned(lo, hi, ast::path_list_ident_ { name: ident, id: self.get_id() }) } diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 8459fc8c6273d..f0e9634d214d6 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -2445,7 +2445,7 @@ pub impl Parser { } } } - hi = self.span.hi; + hi = self.last_span.hi; } } @ast::pat { id: self.get_id(), node: pat, span: mk_sp(lo, hi) } @@ -4311,7 +4311,7 @@ pub impl Parser { rp: None, types: ~[] }; return @spanned(lo, - self.span.hi, + self.last_span.hi, view_path_simple(last, path, self.get_id())); } From 544ac620ba131d0f58eb48f631338c0ea64e0f10 Mon Sep 17 00:00:00 2001 From: gareth Date: Tue, 30 Apr 2013 23:00:07 +0100 Subject: [PATCH 147/410] Convert most of rust_run_program.cpp to rust (issue #2674). --- src/libcore/libc.rs | 131 ++++++++++++- src/libcore/os.rs | 2 +- src/libcore/run.rs | 353 +++++++++++++++++++++++++++++++----- src/rt/rust_run_program.cpp | 200 ++------------------ src/rt/rustrt.def.in | 4 +- 5 files changed, 454 insertions(+), 236 deletions(-) diff --git a/src/libcore/libc.rs b/src/libcore/libc.rs index 53aaf5726dd0b..59b06faf5a251 100644 --- a/src/libcore/libc.rs +++ b/src/libcore/libc.rs @@ -582,12 +582,16 @@ pub mod types { pub type LPWSTR = *mut WCHAR; pub type LPSTR = *mut CHAR; + pub type LPTSTR = *mut CHAR; // Not really, but opaque to us. pub type LPSECURITY_ATTRIBUTES = LPVOID; pub type LPVOID = *mut c_void; + pub type LPBYTE = *mut BYTE; pub type LPWORD = *mut WORD; + pub type LPDWORD = *mut DWORD; + pub type LPHANDLE = *mut HANDLE; pub type LRESULT = LONG_PTR; pub type PBOOL = *mut BOOL; @@ -596,6 +600,36 @@ pub mod types { pub type time64_t = i64; pub type int64 = i64; + + pub struct STARTUPINFO { + cb: DWORD, + lpReserved: LPTSTR, + lpDesktop: LPTSTR, + lpTitle: LPTSTR, + dwX: DWORD, + dwY: DWORD, + dwXSize: DWORD, + dwYSize: DWORD, + dwXCountChars: DWORD, + dwYCountCharts: DWORD, + dwFillAttribute: DWORD, + dwFlags: DWORD, + wShowWindow: WORD, + cbReserved2: WORD, + lpReserved2: LPBYTE, + hStdInput: HANDLE, + hStdOutput: HANDLE, + hStdError: HANDLE + } + pub type LPSTARTUPINFO = *mut STARTUPINFO; + + pub struct PROCESS_INFORMATION { + hProcess: HANDLE, + hThread: HANDLE, + dwProcessId: DWORD, + dwThreadId: DWORD + } + pub type LPPROCESS_INFORMATION = *mut PROCESS_INFORMATION; } } } @@ -848,6 +882,11 @@ pub mod consts { pub mod bsd44 { } pub mod extra { + use libc::types::os::arch::extra::{DWORD, BOOL}; + + pub static TRUE : BOOL = 1; + pub static FALSE : BOOL = 0; + pub static O_TEXT : int = 16384; pub static O_BINARY : int = 32768; pub static O_NOINHERIT: int = 128; @@ -855,6 +894,50 @@ pub mod consts { pub static ERROR_SUCCESS : int = 0; pub static ERROR_INSUFFICIENT_BUFFER : int = 122; pub static INVALID_HANDLE_VALUE: int = -1; + + pub static DELETE : DWORD = 0x00010000; + pub static READ_CONTROL : DWORD = 0x00020000; + pub static SYNCHRONIZE : DWORD = 0x00100000; + pub static WRITE_DAC : DWORD = 0x00040000; + pub static WRITE_OWNER : DWORD = 0x00080000; + + pub static PROCESS_CREATE_PROCESS : DWORD = 0x0080; + pub static PROCESS_CREATE_THREAD : DWORD = 0x0002; + pub static PROCESS_DUP_HANDLE : DWORD = 0x0040; + pub static PROCESS_QUERY_INFORMATION : DWORD = 0x0400; + pub static PROCESS_QUERY_LIMITED_INFORMATION : DWORD = 0x1000; + pub static PROCESS_SET_INFORMATION : DWORD = 0x0200; + pub static PROCESS_SET_QUOTA : DWORD = 0x0100; + pub static PROCESS_SUSPEND_RESUME : DWORD = 0x0800; + pub static PROCESS_TERMINATE : DWORD = 0x0001; + pub static PROCESS_VM_OPERATION : DWORD = 0x0008; + pub static PROCESS_VM_READ : DWORD = 0x0010; + pub static PROCESS_VM_WRITE : DWORD = 0x0020; + + pub static STARTF_FORCEONFEEDBACK : DWORD = 0x00000040; + pub static STARTF_FORCEOFFFEEDBACK : DWORD = 0x00000080; + pub static STARTF_PREVENTPINNING : DWORD = 0x00002000; + pub static STARTF_RUNFULLSCREEN : DWORD = 0x00000020; + pub static STARTF_TITLEISAPPID : DWORD = 0x00001000; + pub static STARTF_TITLEISLINKNAME : DWORD = 0x00000800; + pub static STARTF_USECOUNTCHARS : DWORD = 0x00000008; + pub static STARTF_USEFILLATTRIBUTE : DWORD = 0x00000010; + pub static STARTF_USEHOTKEY : DWORD = 0x00000200; + pub static STARTF_USEPOSITION : DWORD = 0x00000004; + pub static STARTF_USESHOWWINDOW : DWORD = 0x00000001; + pub static STARTF_USESIZE : DWORD = 0x00000002; + pub static STARTF_USESTDHANDLES : DWORD = 0x00000100; + + pub static WAIT_ABANDONED : DWORD = 0x00000080; + pub static WAIT_OBJECT_0 : DWORD = 0x00000000; + pub static WAIT_TIMEOUT : DWORD = 0x00000102; + pub static WAIT_FAILED : DWORD = -1; + + pub static DUPLICATE_CLOSE_SOURCE : DWORD = 0x00000001; + pub static DUPLICATE_SAME_ACCESS : DWORD = 0x00000002; + + pub static INFINITE : DWORD = -1; + pub static STILL_ACTIVE : DWORD = 259; } } @@ -1751,12 +1834,24 @@ pub mod funcs { unsafe fn sysctlnametomib(name: *c_char, mibp: *mut c_int, sizep: *mut size_t) -> c_int; + + unsafe fn getdtablesize() -> c_int; } } #[cfg(target_os = "linux")] #[cfg(target_os = "android")] + pub mod bsd44 { + use libc::types::os::arch::c95::{c_int}; + + #[abi = "cdecl"] + pub extern { + unsafe fn getdtablesize() -> c_int; + } + } + + #[cfg(target_os = "win32")] pub mod bsd44 { } @@ -1790,9 +1885,11 @@ pub mod funcs { pub mod kernel32 { use libc::types::os::arch::c95::{c_uint}; use libc::types::os::arch::extra::{BOOL, DWORD, HMODULE}; - use libc::types::os::arch::extra::{LPCWSTR, LPWSTR, LPTCH}; - use libc::types::os::arch::extra::{LPSECURITY_ATTRIBUTES}; - use libc::types::os::arch::extra::{HANDLE}; + use libc::types::os::arch::extra::{LPCWSTR, LPWSTR, LPCTSTR, + LPTSTR, LPTCH, LPDWORD, LPVOID}; + use libc::types::os::arch::extra::{LPSECURITY_ATTRIBUTES, LPSTARTUPINFO, + LPPROCESS_INFORMATION}; + use libc::types::os::arch::extra::{HANDLE, LPHANDLE}; #[abi = "stdcall"] pub extern "stdcall" { @@ -1829,19 +1926,45 @@ pub mod funcs { findFileData: HANDLE) -> BOOL; unsafe fn FindClose(findFile: HANDLE) -> BOOL; + unsafe fn DuplicateHandle(hSourceProcessHandle: HANDLE, + hSourceHandle: HANDLE, + hTargetProcessHandle: HANDLE, + lpTargetHandle: LPHANDLE, + dwDesiredAccess: DWORD, + bInheritHandle: BOOL, + dwOptions: DWORD) -> BOOL; unsafe fn CloseHandle(hObject: HANDLE) -> BOOL; + unsafe fn OpenProcess(dwDesiredAccess: DWORD, + bInheritHandle: BOOL, + dwProcessId: DWORD) -> HANDLE; + unsafe fn GetCurrentProcess() -> HANDLE; + unsafe fn CreateProcessA(lpApplicationName: LPCTSTR, + lpCommandLine: LPTSTR, + lpProcessAttributes: LPSECURITY_ATTRIBUTES, + lpThreadAttributes: LPSECURITY_ATTRIBUTES, + bInheritHandles: BOOL, + dwCreationFlags: DWORD, + lpEnvironment: LPVOID, + lpCurrentDirectory: LPCTSTR, + lpStartupInfo: LPSTARTUPINFO, + lpProcessInformation: LPPROCESS_INFORMATION) -> BOOL; + unsafe fn WaitForSingleObject(hHandle: HANDLE, dwMilliseconds: DWORD) -> DWORD; unsafe fn TerminateProcess(hProcess: HANDLE, uExitCode: c_uint) -> BOOL; + unsafe fn GetExitCodeProcess(hProcess: HANDLE, lpExitCode: LPDWORD) -> BOOL; } } pub mod msvcrt { - use libc::types::os::arch::c95::c_int; + use libc::types::os::arch::c95::{c_int, c_long}; #[abi = "cdecl"] #[nolink] pub extern { #[link_name = "_commit"] unsafe fn commit(fd: c_int) -> c_int; + + #[link_name = "_get_osfhandle"] + unsafe fn get_osfhandle(fd: c_int) -> c_long; } } } diff --git a/src/libcore/os.rs b/src/libcore/os.rs index 8efae3e0e6890..c4b03d76cefec 100644 --- a/src/libcore/os.rs +++ b/src/libcore/os.rs @@ -373,7 +373,7 @@ pub fn pipe() -> Pipe { // inheritance has to be handled in a different way that I do not // fully understand. Here we explicitly make the pipe non-inheritable, // which means to pass it to a subprocess they need to be duplicated - // first, as in rust_run_program. + // first, as in core::run. let mut fds = Pipe {in: 0 as c_int, out: 0 as c_int }; let res = libc::pipe(&mut fds.in, 1024 as ::libc::c_uint, diff --git a/src/libcore/run.rs b/src/libcore/run.rs index d0c495dd19e44..0a8ccc3c5e9b9 100644 --- a/src/libcore/run.rs +++ b/src/libcore/run.rs @@ -22,31 +22,6 @@ use str; use task; use vec; -pub mod rustrt { - use libc::{c_int, c_void}; - use libc; - use run; - - #[abi = "cdecl"] - pub extern { - unsafe fn rust_run_program(argv: **libc::c_char, - envp: *c_void, - dir: *libc::c_char, - in_fd: c_int, - out_fd: c_int, - err_fd: c_int) -> run::RunProgramResult; - unsafe fn rust_process_wait(pid: c_int) -> c_int; - } -} - -pub struct RunProgramResult { - // the process id of the program, or -1 if in case of errors - pid: pid_t, - // a handle to the process - on unix this will always be NULL, but on windows it will be a - // HANDLE to the process, which will prevent the pid being re-used until the handle is closed. - handle: *(), -} - /// A value representing a child process pub struct Program { priv pid: pid_t, @@ -191,21 +166,262 @@ pub fn spawn_process(prog: &str, args: &[~str], return res.pid; } +struct RunProgramResult { + // the process id of the program (this should never be negative) + pid: pid_t, + // a handle to the process - on unix this will always be NULL, but on windows it will be a + // HANDLE to the process, which will prevent the pid being re-used until the handle is closed. + handle: *(), +} + +#[cfg(windows)] fn spawn_process_internal(prog: &str, args: &[~str], env: &Option<~[(~str,~str)]>, dir: &Option<~str>, in_fd: c_int, out_fd: c_int, err_fd: c_int) -> RunProgramResult { + + use libc::types::os::arch::extra::{DWORD, HANDLE, STARTUPINFO}; + use libc::consts::os::extra::{ + TRUE, FALSE, + STARTF_USESTDHANDLES, + INVALID_HANDLE_VALUE, + DUPLICATE_SAME_ACCESS + }; + use libc::funcs::extra::kernel32::{ + GetCurrentProcess, + DuplicateHandle, + CloseHandle, + CreateProcessA + }; + use libc::funcs::extra::msvcrt::get_osfhandle; + unsafe { - do with_argv(prog, args) |argv| { - do with_envp(env) |envp| { - do with_dirp(dir) |dirp| { - rustrt::rust_run_program(argv, envp, dirp, in_fd, out_fd, err_fd) + + let mut si = zeroed_startupinfo(); + si.cb = sys::size_of::() as DWORD; + si.dwFlags = STARTF_USESTDHANDLES; + + let cur_proc = GetCurrentProcess(); + + let orig_std_in = get_osfhandle(if in_fd > 0 { in_fd } else { 0 }) as HANDLE; + if orig_std_in == INVALID_HANDLE_VALUE as HANDLE { + fail!(fmt!("failure in get_osfhandle: %s", os::last_os_error())); + } + if DuplicateHandle(cur_proc, orig_std_in, cur_proc, &mut si.hStdInput, + 0, TRUE, DUPLICATE_SAME_ACCESS) == FALSE { + fail!(fmt!("failure in DuplicateHandle: %s", os::last_os_error())); + } + + let orig_std_out = get_osfhandle(if out_fd > 0 { out_fd } else { 1 }) as HANDLE; + if orig_std_out == INVALID_HANDLE_VALUE as HANDLE { + fail!(fmt!("failure in get_osfhandle: %s", os::last_os_error())); + } + if DuplicateHandle(cur_proc, orig_std_out, cur_proc, &mut si.hStdOutput, + 0, TRUE, DUPLICATE_SAME_ACCESS) == FALSE { + fail!(fmt!("failure in DuplicateHandle: %s", os::last_os_error())); + } + + let orig_std_err = get_osfhandle(if err_fd > 0 { err_fd } else { 2 }) as HANDLE; + if orig_std_err as HANDLE == INVALID_HANDLE_VALUE as HANDLE { + fail!(fmt!("failure in get_osfhandle: %s", os::last_os_error())); + } + if DuplicateHandle(cur_proc, orig_std_err, cur_proc, &mut si.hStdError, + 0, TRUE, DUPLICATE_SAME_ACCESS) == FALSE { + fail!(fmt!("failure in DuplicateHandle: %s", os::last_os_error())); + } + + let cmd = make_command_line(prog, args); + let mut pi = zeroed_process_information(); + let mut create_err = None; + + do with_envp(env) |envp| { + do with_dirp(dir) |dirp| { + do str::as_c_str(cmd) |cmdp| { + let created = CreateProcessA(ptr::null(), cast::transmute(cmdp), + ptr::mut_null(), ptr::mut_null(), TRUE, + 0, envp, dirp, &mut si, &mut pi); + if created == FALSE { + create_err = Some(os::last_os_error()); + } } } } + + CloseHandle(si.hStdInput); + CloseHandle(si.hStdOutput); + CloseHandle(si.hStdError); + + for create_err.each |msg| { + fail!(fmt!("failure in CreateProcess: %s", *msg)); + } + + // We close the thread handle because we don't care about keeping the thread id valid, + // and we aren't keeping the thread handle around to be able to close it later. We don't + // close the process handle however because we want the process id to stay valid at least + // until the calling code closes the process handle. + CloseHandle(pi.hThread); + + RunProgramResult { + pid: pi.dwProcessId as pid_t, + handle: pi.hProcess as *() + } + } +} + +#[cfg(windows)] +fn zeroed_startupinfo() -> libc::types::os::arch::extra::STARTUPINFO { + libc::types::os::arch::extra::STARTUPINFO { + cb: 0, + lpReserved: ptr::mut_null(), + lpDesktop: ptr::mut_null(), + lpTitle: ptr::mut_null(), + dwX: 0, + dwY: 0, + dwXSize: 0, + dwYSize: 0, + dwXCountChars: 0, + dwYCountCharts: 0, + dwFillAttribute: 0, + dwFlags: 0, + wShowWindow: 0, + cbReserved2: 0, + lpReserved2: ptr::mut_null(), + hStdInput: ptr::mut_null(), + hStdOutput: ptr::mut_null(), + hStdError: ptr::mut_null() + } +} + +#[cfg(windows)] +fn zeroed_process_information() -> libc::types::os::arch::extra::PROCESS_INFORMATION { + libc::types::os::arch::extra::PROCESS_INFORMATION { + hProcess: ptr::mut_null(), + hThread: ptr::mut_null(), + dwProcessId: 0, + dwThreadId: 0 } } +// FIXME: this is only pub so it can be tested (see issue #4536) +#[cfg(windows)] +pub fn make_command_line(prog: &str, args: &[~str]) -> ~str { + + let mut cmd = ~""; + append_arg(&mut cmd, prog); + for args.each |arg| { + cmd.push_char(' '); + append_arg(&mut cmd, *arg); + } + return cmd; + + fn append_arg(cmd: &mut ~str, arg: &str) { + let quote = arg.any(|c| c == ' ' || c == '\t'); + if quote { + cmd.push_char('"'); + } + for uint::range(0, arg.len()) |i| { + append_char_at(cmd, arg, i); + } + if quote { + cmd.push_char('"'); + } + } + + fn append_char_at(cmd: &mut ~str, arg: &str, i: uint) { + match arg[i] as char { + '"' => { + // Escape quotes. + cmd.push_str("\\\""); + } + '\\' => { + if backslash_run_ends_in_quote(arg, i) { + // Double all backslashes that are in runs before quotes. + cmd.push_str("\\\\"); + } else { + // Pass other backslashes through unescaped. + cmd.push_char('\\'); + } + } + c => { + cmd.push_char(c); + } + } + } + + fn backslash_run_ends_in_quote(s: &str, mut i: uint) -> bool { + while i < s.len() && s[i] as char == '\\' { + i += 1; + } + return i < s.len() && s[i] as char == '"'; + } +} + +#[cfg(unix)] +fn spawn_process_internal(prog: &str, args: &[~str], + env: &Option<~[(~str,~str)]>, + dir: &Option<~str>, + in_fd: c_int, out_fd: c_int, err_fd: c_int) -> RunProgramResult { + + use libc::funcs::posix88::unistd::{fork, dup2, close, chdir, execvp}; + use libc::funcs::bsd44::getdtablesize; + + mod rustrt { + use libc::c_void; + + #[abi = "cdecl"] + pub extern { + unsafe fn rust_unset_sigprocmask(); + unsafe fn rust_set_environ(envp: *c_void); + } + } + + unsafe { + + let pid = fork(); + if pid < 0 { + fail!(fmt!("failure in fork: %s", os::last_os_error())); + } else if pid > 0 { + return RunProgramResult {pid: pid, handle: ptr::null()}; + } + + rustrt::rust_unset_sigprocmask(); + + if in_fd > 0 && dup2(in_fd, 0) == -1 { + fail!(fmt!("failure in dup2(in_fd, 0): %s", os::last_os_error())); + } + if out_fd > 0 && dup2(out_fd, 1) == -1 { + fail!(fmt!("failure in dup2(out_fd, 1): %s", os::last_os_error())); + } + if err_fd > 0 && dup2(err_fd, 2) == -1 { + fail!(fmt!("failure in dup3(err_fd, 2): %s", os::last_os_error())); + } + // close all other fds + for int::range_rev(getdtablesize() as int - 1, 2) |fd| { + close(fd as c_int); + } + + for dir.each |dir| { + do str::as_c_str(*dir) |dirp| { + if chdir(dirp) == -1 { + fail!(fmt!("failure in chdir: %s", os::last_os_error())); + } + } + } + + do with_envp(env) |envp| { + if !envp.is_null() { + rustrt::rust_set_environ(envp); + } + do with_argv(prog, args) |argv| { + execvp(*argv, argv); + // execvp only returns if an error occurred + fail!(fmt!("failure in execvp: %s", os::last_os_error())); + } + } + } +} + +#[cfg(unix)] fn with_argv(prog: &str, args: &[~str], cb: &fn(**libc::c_char) -> T) -> T { let mut argptrs = str::as_c_str(prog, |b| ~[b]); @@ -246,7 +462,7 @@ fn with_envp(env: &Option<~[(~str,~str)]>, #[cfg(windows)] fn with_envp(env: &Option<~[(~str,~str)]>, - cb: &fn(*c_void) -> T) -> T { + cb: &fn(*mut c_void) -> T) -> T { // On win32 we pass an "environment block" which is not a char**, but // rather a concatenation of null-terminated k=v\0 sequences, with a final // \0 to terminate. @@ -264,11 +480,12 @@ fn with_envp(env: &Option<~[(~str,~str)]>, blk += ~[0_u8]; vec::as_imm_buf(blk, |p, _len| cb(::cast::transmute(p))) } - _ => cb(ptr::null()) + _ => cb(ptr::mut_null()) } } } +#[cfg(windows)] fn with_dirp(d: &Option<~str>, cb: &fn(*libc::c_char) -> T) -> T { match *d { @@ -312,8 +529,6 @@ priv fn free_handle(_handle: *()) { pub fn run_program(prog: &str, args: &[~str]) -> int { let res = spawn_process_internal(prog, args, &None, &None, 0i32, 0i32, 0i32); - if res.pid == -1 as pid_t { fail!(); } - let code = waitpid(res.pid); free_handle(res.handle); return code; @@ -345,7 +560,6 @@ pub fn start_program(prog: &str, args: &[~str]) -> Program { pipe_err.out); unsafe { - if res.pid == -1 as pid_t { fail!(); } libc::close(pipe_input.in); libc::close(pipe_output.out); libc::close(pipe_err.out); @@ -398,13 +612,6 @@ pub fn program_output(prog: &str, args: &[~str]) -> ProgramOutput { os::close(pipe_in.in); os::close(pipe_out.out); os::close(pipe_err.out); - if res.pid == -1i32 { - os::close(pipe_in.out); - os::close(pipe_out.in); - os::close(pipe_err.in); - fail!(); - } - os::close(pipe_in.out); // Spawn two entire schedulers to read both stdout and sterr @@ -485,11 +692,46 @@ pub fn waitpid(pid: pid_t) -> int { #[cfg(windows)] fn waitpid_os(pid: pid_t) -> int { - let status = unsafe { rustrt::rust_process_wait(pid) }; - if status < 0 { - fail!(fmt!("failure in rust_process_wait: %s", os::last_os_error())); + + use libc::types::os::arch::extra::DWORD; + use libc::consts::os::extra::{ + SYNCHRONIZE, + PROCESS_QUERY_INFORMATION, + FALSE, + STILL_ACTIVE, + INFINITE, + WAIT_FAILED + }; + use libc::funcs::extra::kernel32::{ + OpenProcess, + GetExitCodeProcess, + CloseHandle, + WaitForSingleObject + }; + + unsafe { + + let proc = OpenProcess(SYNCHRONIZE | PROCESS_QUERY_INFORMATION, FALSE, pid as DWORD); + if proc.is_null() { + fail!(fmt!("failure in OpenProcess: %s", os::last_os_error())); + } + + loop { + let mut status = 0; + if GetExitCodeProcess(proc, &mut status) == FALSE { + CloseHandle(proc); + fail!(fmt!("failure in GetExitCodeProcess: %s", os::last_os_error())); + } + if status != STILL_ACTIVE { + CloseHandle(proc); + return status as int; + } + if WaitForSingleObject(proc, INFINITE) == WAIT_FAILED { + CloseHandle(proc); + fail!(fmt!("failure in WaitForSingleObject: %s", os::last_os_error())); + } + } } - return status as int; } #[cfg(unix)] @@ -543,6 +785,27 @@ mod tests { use run::{readclose, writeclose}; use run; + #[test] + #[cfg(windows)] + fn test_make_command_line() { + assert_eq!( + run::make_command_line("prog", [~"aaa", ~"bbb", ~"ccc"]), + ~"prog aaa bbb ccc" + ); + assert_eq!( + run::make_command_line("C:\\Program Files\\blah\\blah.exe", [~"aaa"]), + ~"\"C:\\Program Files\\blah\\blah.exe\" aaa" + ); + assert_eq!( + run::make_command_line("C:\\Program Files\\test", [~"aa\"bb"]), + ~"\"C:\\Program Files\\test\" aa\\\"bb" + ); + assert_eq!( + run::make_command_line("echo", [~"a b c"]), + ~"echo \"a b c\"" + ); + } + // Regression test for memory leaks #[test] fn test_leaks() { diff --git a/src/rt/rust_run_program.cpp b/src/rt/rust_run_program.cpp index cf4beed1a00c6..0ba7607869140 100644 --- a/src/rt/rust_run_program.cpp +++ b/src/rt/rust_run_program.cpp @@ -15,212 +15,44 @@ #include #endif -struct RunProgramResult { - pid_t pid; - void* handle; -}; - #if defined(__WIN32__) -#include -#include - -bool backslash_run_ends_in_quote(char const *c) { - while (*c == '\\') ++c; - return *c == '"'; -} - -void append_first_char(char *&buf, char const *c) { - switch (*c) { - - case '"': - // Escape quotes. - *buf++ = '\\'; - *buf++ = '"'; - break; - - - case '\\': - if (backslash_run_ends_in_quote(c)) { - // Double all backslashes that are in runs before quotes. - *buf++ = '\\'; - *buf++ = '\\'; - } else { - // Pass other backslashes through unescaped. - *buf++ = '\\'; - } - break; - - default: - *buf++ = *c; - } +extern "C" CDECL void +rust_unset_sigprocmask() { + // empty stub for windows to keep linker happy } -bool contains_whitespace(char const *arg) { - while (*arg) { - switch (*arg++) { - case ' ': - case '\t': - return true; - } - } - return false; -} - -void append_arg(char *& buf, char const *arg, bool last) { - bool quote = contains_whitespace(arg); - if (quote) - *buf++ = '"'; - while (*arg) - append_first_char(buf, arg++); - if (quote) - *buf++ = '"'; - - if (! last) { - *buf++ = ' '; - } else { - *buf++ = '\0'; - } -} - -extern "C" CDECL RunProgramResult -rust_run_program(const char* argv[], - void* envp, - const char* dir, - int in_fd, int out_fd, int err_fd) { - STARTUPINFO si; - ZeroMemory(&si, sizeof(STARTUPINFO)); - si.cb = sizeof(STARTUPINFO); - si.dwFlags = STARTF_USESTDHANDLES; - - RunProgramResult result = {-1, NULL}; - - HANDLE curproc = GetCurrentProcess(); - HANDLE origStdin = (HANDLE)_get_osfhandle(in_fd ? in_fd : 0); - if (!DuplicateHandle(curproc, origStdin, - curproc, &si.hStdInput, 0, 1, DUPLICATE_SAME_ACCESS)) - return result; - HANDLE origStdout = (HANDLE)_get_osfhandle(out_fd ? out_fd : 1); - if (!DuplicateHandle(curproc, origStdout, - curproc, &si.hStdOutput, 0, 1, DUPLICATE_SAME_ACCESS)) - return result; - HANDLE origStderr = (HANDLE)_get_osfhandle(err_fd ? err_fd : 2); - if (!DuplicateHandle(curproc, origStderr, - curproc, &si.hStdError, 0, 1, DUPLICATE_SAME_ACCESS)) - return result; - - size_t cmd_len = 0; - for (const char** arg = argv; *arg; arg++) { - cmd_len += strlen(*arg); - cmd_len += 3; // Two quotes plus trailing space or \0 - } - cmd_len *= 2; // Potentially backslash-escape everything. - - char* cmd = (char*)malloc(cmd_len); - char* pos = cmd; - for (const char** arg = argv; *arg; arg++) { - append_arg(pos, *arg, *(arg+1) == NULL); - } - - PROCESS_INFORMATION pi; - BOOL created = CreateProcess(NULL, cmd, NULL, NULL, TRUE, - 0, envp, dir, &si, &pi); - - CloseHandle(si.hStdInput); - CloseHandle(si.hStdOutput); - CloseHandle(si.hStdError); - free(cmd); - - if (!created) { - return result; - } - - // We close the thread handle because we don't care about keeping the thread id valid, - // and we aren't keeping the thread handle around to be able to close it later. We don't - // close the process handle however because we want the process id to stay valid at least - // until the calling rust code closes the process handle. - CloseHandle(pi.hThread); - result.pid = pi.dwProcessId; - result.handle = pi.hProcess; - return result; -} - -extern "C" CDECL int -rust_process_wait(int pid) { - - HANDLE proc = OpenProcess(SYNCHRONIZE | PROCESS_QUERY_INFORMATION, FALSE, pid); - if (proc == NULL) { - return -1; - } - - DWORD status; - while (true) { - if (!GetExitCodeProcess(proc, &status)) { - CloseHandle(proc); - return -1; - } - if (status != STILL_ACTIVE) { - CloseHandle(proc); - return (int) status; - } - WaitForSingleObject(proc, INFINITE); - } +extern "C" CDECL void +rust_set_environ(void* envp) { + // empty stub for windows to keep linker happy } #elif defined(__GNUC__) -#include #include -#include #include -#include #ifdef __FreeBSD__ extern char **environ; #endif -extern "C" CDECL RunProgramResult -rust_run_program(const char* argv[], - void* envp, - const char* dir, - int in_fd, int out_fd, int err_fd) { - int pid = fork(); - if (pid != 0) { - RunProgramResult result = {pid, NULL}; - return result; - } - +extern "C" CDECL void +rust_unset_sigprocmask() { + // this can't be safely converted to rust code because the + // representation of sigset_t is platform-dependent sigset_t sset; sigemptyset(&sset); sigprocmask(SIG_SETMASK, &sset, NULL); +} - if (in_fd) dup2(in_fd, 0); - if (out_fd) dup2(out_fd, 1); - if (err_fd) dup2(err_fd, 2); - /* Close all other fds. */ - for (int fd = getdtablesize() - 1; fd >= 3; fd--) close(fd); - if (dir) { - int result = chdir(dir); - // FIXME (#2674): need error handling - assert(!result && "chdir failed"); - } - - if (envp) { +extern "C" CDECL void +rust_set_environ(void* envp) { + // FIXME: this could actually be converted to rust (see issue #2674) #ifdef __APPLE__ - *_NSGetEnviron() = (char **)envp; + *_NSGetEnviron() = (char **) envp; #else - environ = (char **)envp; + environ = (char **) envp; #endif - } - - execvp(argv[0], (char * const *)argv); - exit(1); -} - -extern "C" CDECL int -rust_process_wait(int pid) { - // FIXME: stub; exists to placate linker. (#2692) - return 0; } #else diff --git a/src/rt/rustrt.def.in b/src/rt/rustrt.def.in index 977e0248ca206..408e2e9a81671 100644 --- a/src/rt/rustrt.def.in +++ b/src/rt/rustrt.def.in @@ -37,8 +37,8 @@ rust_list_dir_wfd_size rust_list_dir_wfd_fp_buf rust_log_console_on rust_log_console_off -rust_process_wait -rust_run_program +rust_set_environ +rust_unset_sigprocmask rust_sched_current_nonlazy_threads rust_sched_threads rust_set_exit_status From 23e97ae89303f7e8933dce0c42de08d214bad066 Mon Sep 17 00:00:00 2001 From: gareth Date: Wed, 1 May 2013 22:20:26 +0100 Subject: [PATCH 148/410] Remove errant trailing whitespace. --- src/libcore/run.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libcore/run.rs b/src/libcore/run.rs index 0a8ccc3c5e9b9..0850121d6020d 100644 --- a/src/libcore/run.rs +++ b/src/libcore/run.rs @@ -374,7 +374,7 @@ fn spawn_process_internal(prog: &str, args: &[~str], unsafe fn rust_set_environ(envp: *c_void); } } - + unsafe { let pid = fork(); From 88ec89d3fe42029dd6005822191dc97de07d930c Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Thu, 2 May 2013 14:32:37 -0400 Subject: [PATCH 149/410] fix numerous dynamic borrow failures --- src/libcore/unstable/lang.rs | 2 +- src/libcore/util.rs | 19 +++++++------ src/librustc/middle/liveness.rs | 18 ++++++------ src/librustc/middle/region.rs | 3 +- src/librustc/middle/resolve.rs | 32 ++++++++++------------ src/librustc/middle/typeck/check/vtable.rs | 7 +++-- src/librustc/middle/typeck/coherence.rs | 23 ++++++++-------- src/librustc/middle/typeck/infer/glb.rs | 4 ++- src/librustc/middle/typeck/infer/lub.rs | 4 ++- src/librustc/middle/typeck/infer/mod.rs | 25 ++++++++--------- src/librustc/rustc.rc | 3 ++ src/libsyntax/codemap.rs | 2 +- 12 files changed, 77 insertions(+), 65 deletions(-) diff --git a/src/libcore/unstable/lang.rs b/src/libcore/unstable/lang.rs index 017fc4b7b63a0..d25147fcde118 100644 --- a/src/libcore/unstable/lang.rs +++ b/src/libcore/unstable/lang.rs @@ -133,7 +133,7 @@ pub unsafe fn exchange_malloc(td: *c_char, size: uintptr_t) -> *c_char { /// Because this code is so perf. sensitive, use a static constant so that /// debug printouts are compiled out most of the time. -static ENABLE_DEBUG_PTR: bool = false; +static ENABLE_DEBUG_PTR: bool = true; #[inline] pub fn debug_ptr(tag: &'static str, p: *const T) { diff --git a/src/libcore/util.rs b/src/libcore/util.rs index a08e38c021fad..43616ebfd3032 100644 --- a/src/libcore/util.rs +++ b/src/libcore/util.rs @@ -26,19 +26,20 @@ pub fn ignore(_x: T) { } /// Sets `*ptr` to `new_value`, invokes `op()`, and then restores the /// original value of `*ptr`. +/// +/// NB: This function accepts `@mut T` and not `&mut T` to avoid +/// an obvious borrowck hazard. Typically passing in `&mut T` will +/// cause borrow check errors because it freezes whatever location +/// that `&mut T` is stored in (either statically or dynamically). #[inline(always)] -pub fn with( - ptr: &mut T, - new_value: T, +pub fn with( + ptr: @mut T, + mut value: T, op: &fn() -> R) -> R { - // NDM: if swap operator were defined somewhat differently, - // we wouldn't need to copy... - - let old_value = *ptr; - *ptr = new_value; + value <-> *ptr; let result = op(); - *ptr = old_value; + *ptr = value; return result; } diff --git a/src/librustc/middle/liveness.rs b/src/librustc/middle/liveness.rs index 2e2c92abcdc78..59a6e6469e2bb 100644 --- a/src/librustc/middle/liveness.rs +++ b/src/librustc/middle/liveness.rs @@ -112,7 +112,6 @@ use util::ppaux::ty_to_str; use core::cast::transmute; use core::hashmap::HashMap; -use core::util::with; use syntax::ast::*; use syntax::codemap::span; use syntax::parse::token::special_idents; @@ -343,9 +342,10 @@ pub impl IrMaps { } fn visit_item(item: @item, self: @mut IrMaps, v: vt<@mut IrMaps>) { - do with(&mut self.cur_item, item.id) { - visit::visit_item(item, self, v) - } + let old_cur_item = self.cur_item; + self.cur_item = item.id; + visit::visit_item(item, self, v); + self.cur_item = old_cur_item; } fn visit_fn(fk: &visit::fn_kind, @@ -762,11 +762,13 @@ pub impl Liveness { None => { // Vanilla 'break' or 'loop', so use the enclosing // loop scope - let loop_scope = &mut *self.loop_scope; - if loop_scope.len() == 0 { + let len = { // FIXME(#5074) stage0 + let loop_scope = &mut *self.loop_scope; + loop_scope.len() + }; + if len == 0 { self.tcx.sess.span_bug(sp, ~"break outside loop"); - } - else { + } else { // FIXME(#5275): this shouldn't have to be a method... self.last_loop_scope() } diff --git a/src/librustc/middle/region.rs b/src/librustc/middle/region.rs index ea21ab0527b4d..06eb2542235e4 100644 --- a/src/librustc/middle/region.rs +++ b/src/librustc/middle/region.rs @@ -949,7 +949,8 @@ pub fn determine_rp_in_crate(sess: Session, let cx = &mut *cx; while cx.worklist.len() != 0 { let c_id = cx.worklist.pop(); - let c_variance = *cx.region_paramd_items.get(&c_id); + let c_variance = { *cx.region_paramd_items.get(&c_id) }; + // NOTE cleanup scopes cause an exaggerated lock here debug!("popped %d from worklist", c_id); match cx.dep_map.find(&c_id) { None => {} diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs index ff46abaf7128c..8e83ea7e32e3b 100644 --- a/src/librustc/middle/resolve.rs +++ b/src/librustc/middle/resolve.rs @@ -779,9 +779,9 @@ pub fn Resolver(session: Session, unresolved_imports: 0, current_module: current_module, - value_ribs: ~[], - type_ribs: ~[], - label_ribs: ~[], + value_ribs: @mut ~[], + type_ribs: @mut ~[], + label_ribs: @mut ~[], xray_context: NoXray, current_trait_refs: None, @@ -830,13 +830,13 @@ pub struct Resolver { // The current set of local scopes, for values. // FIXME #4948: Reuse ribs to avoid allocation. - value_ribs: ~[@Rib], + value_ribs: @mut ~[@Rib], // The current set of local scopes, for types. - type_ribs: ~[@Rib], + type_ribs: @mut ~[@Rib], // The current set of local scopes, for labels. - label_ribs: ~[@Rib], + label_ribs: @mut ~[@Rib], // Whether the current context is an X-ray context. An X-ray context is // allowed to access private names of any module. @@ -4313,19 +4313,18 @@ pub impl Resolver { } pat_struct(path, _, _) => { - let structs: &mut HashSet = &mut self.structs; match self.resolve_path(path, TypeNS, false, visitor) { Some(def_ty(class_id)) - if structs.contains(&class_id) => { + if self.structs.contains(&class_id) => { let class_def = def_struct(class_id); self.record_def(pattern.id, class_def); } - Some(definition @ def_struct(class_id)) - if structs.contains(&class_id) => { + Some(definition @ def_struct(class_id)) => { + assert!(self.structs.contains(&class_id)); self.record_def(pattern.id, definition); } Some(definition @ def_variant(_, variant_id)) - if structs.contains(&variant_id) => { + if self.structs.contains(&variant_id) => { self.record_def(pattern.id, definition); } result => { @@ -4627,12 +4626,12 @@ pub impl Resolver { let search_result; match namespace { ValueNS => { - search_result = self.search_ribs(&mut self.value_ribs, ident, + search_result = self.search_ribs(self.value_ribs, ident, span, DontAllowCapturingSelf); } TypeNS => { - search_result = self.search_ribs(&mut self.type_ribs, ident, + search_result = self.search_ribs(self.type_ribs, ident, span, AllowCapturingSelf); } } @@ -4822,15 +4821,14 @@ pub impl Resolver { expr_struct(path, _, _) => { // Resolve the path to the structure it goes to. - let structs: &mut HashSet = &mut self.structs; match self.resolve_path(path, TypeNS, false, visitor) { Some(def_ty(class_id)) | Some(def_struct(class_id)) - if structs.contains(&class_id) => { + if self.structs.contains(&class_id) => { let class_def = def_struct(class_id); self.record_def(expr.id, class_def); } Some(definition @ def_variant(_, class_id)) - if structs.contains(&class_id) => { + if self.structs.contains(&class_id) => { self.record_def(expr.id, definition); } _ => { @@ -4856,7 +4854,7 @@ pub impl Resolver { } expr_break(Some(label)) | expr_again(Some(label)) => { - match self.search_ribs(&mut self.label_ribs, label, expr.span, + match self.search_ribs(self.label_ribs, label, expr.span, DontAllowCapturingSelf) { None => self.session.span_err(expr.span, diff --git a/src/librustc/middle/typeck/check/vtable.rs b/src/librustc/middle/typeck/check/vtable.rs index 44b6212261246..c177d5ab0eb3a 100644 --- a/src/librustc/middle/typeck/check/vtable.rs +++ b/src/librustc/middle/typeck/check/vtable.rs @@ -244,11 +244,14 @@ fn lookup_vtable(vcx: &VtableContext, // Nothing found. Continue. } Some(implementations) => { - let implementations: &mut ~[@Impl] = *implementations; + let len = { // FIXME(#5074): stage0 requires it + let implementations: &mut ~[@Impl] = *implementations; + implementations.len() + }; // implementations is the list of all impls in scope for // trait_ref. (Usually, there's just one.) - for uint::range(0, implementations.len()) |i| { + for uint::range(0, len) |i| { let im = implementations[i]; // im is one specific impl of trait_ref. diff --git a/src/librustc/middle/typeck/coherence.rs b/src/librustc/middle/typeck/coherence.rs index 573e4bd579011..d779c20b3e81c 100644 --- a/src/librustc/middle/typeck/coherence.rs +++ b/src/librustc/middle/typeck/coherence.rs @@ -240,8 +240,8 @@ pub impl CoherenceChecker { fn check_implementation(&self, item: @item, associated_traits: ~[@trait_ref]) { - let self_type = self.crate_context.tcx.tcache.get( - &local_def(item.id)); + let tcx = self.crate_context.tcx; + let self_type = ty::lookup_item_type(tcx, local_def(item.id)); // If there are no traits, then this implementation must have a // base type. @@ -452,10 +452,8 @@ pub impl CoherenceChecker { } fn check_implementation_coherence(&self) { - let coherence_info = &mut self.crate_context.coherence_info; - let extension_methods = &coherence_info.extension_methods; - - for extension_methods.each_key |&trait_id| { + let coherence_info = self.crate_context.coherence_info; + for coherence_info.extension_methods.each_key |&trait_id| { self.check_implementation_coherence_of(trait_id); } } @@ -514,13 +512,16 @@ pub impl CoherenceChecker { } fn iter_impls_of_trait(&self, trait_def_id: def_id, f: &fn(@Impl)) { - let coherence_info = &mut self.crate_context.coherence_info; - let extension_methods = &coherence_info.extension_methods; + let coherence_info = self.crate_context.coherence_info; + let extension_methods = &*coherence_info.extension_methods; match extension_methods.find(&trait_def_id) { Some(impls) => { - let impls: &mut ~[@Impl] = *impls; - for uint::range(0, impls.len()) |i| { + let len = { // FIXME(#5074) stage0 requires this + let impls: &mut ~[@Impl] = *impls; + impls.len() + }; + for uint::range(0, len) |i| { f(impls[i]); } } @@ -1014,7 +1015,7 @@ pub impl CoherenceChecker { // fn populate_destructor_table(&self) { - let coherence_info = &mut self.crate_context.coherence_info; + let coherence_info = self.crate_context.coherence_info; let tcx = self.crate_context.tcx; let drop_trait = tcx.lang_items.drop_trait(); let impls_opt = coherence_info.extension_methods.find(&drop_trait); diff --git a/src/librustc/middle/typeck/infer/glb.rs b/src/librustc/middle/typeck/infer/glb.rs index 2bbcd24595cba..b818f666444f6 100644 --- a/src/librustc/middle/typeck/infer/glb.rs +++ b/src/librustc/middle/typeck/infer/glb.rs @@ -16,6 +16,7 @@ use middle::typeck::infer::lub::Lub; use middle::typeck::infer::sub::Sub; use middle::typeck::infer::to_str::InferStr; use middle::typeck::infer::{cres, InferCtxt}; +use middle::typeck::infer::fold_regions_in_sig; use middle::typeck::isr_alist; use syntax::ast; use syntax::ast::{Many, Once, extern_fn, impure_fn, m_const, m_imm, m_mutbl}; @@ -188,7 +189,8 @@ impl Combine for Glb { let new_vars = self.infcx.region_vars.vars_created_since_snapshot(snapshot); let sig1 = - self.infcx.fold_regions_in_sig( + fold_regions_in_sig( + self.infcx.tcx, &sig0, |r, _in_fn| generalize_region(self, snapshot, new_vars, a_isr, a_vars, b_vars, diff --git a/src/librustc/middle/typeck/infer/lub.rs b/src/librustc/middle/typeck/infer/lub.rs index 8591433801796..34e006c9615a7 100644 --- a/src/librustc/middle/typeck/infer/lub.rs +++ b/src/librustc/middle/typeck/infer/lub.rs @@ -16,6 +16,7 @@ use middle::typeck::infer::lattice::*; use middle::typeck::infer::sub::Sub; use middle::typeck::infer::to_str::InferStr; use middle::typeck::infer::{cres, InferCtxt}; +use middle::typeck::infer::fold_regions_in_sig; use middle::typeck::isr_alist; use util::common::indent; use util::ppaux::mt_to_str; @@ -141,7 +142,8 @@ impl Combine for Lub { let new_vars = self.infcx.region_vars.vars_created_since_snapshot(snapshot); let sig1 = - self.infcx.fold_regions_in_sig( + fold_regions_in_sig( + self.infcx.tcx, &sig0, |r, _in_fn| generalize_region(self, snapshot, new_vars, a_isr, r)); diff --git a/src/librustc/middle/typeck/infer/mod.rs b/src/librustc/middle/typeck/infer/mod.rs index 4491b04b382ec..899b8cfd7edeb 100644 --- a/src/librustc/middle/typeck/infer/mod.rs +++ b/src/librustc/middle/typeck/infer/mod.rs @@ -574,7 +574,7 @@ pub impl InferCtxt { } /// Execute `f` and commit the bindings if successful - fn commit(&mut self, f: &fn() -> Result) -> Result { + fn commit(@mut self, f: &fn() -> Result) -> Result { assert!(!self.in_snapshot()); debug!("commit()"); @@ -589,7 +589,7 @@ pub impl InferCtxt { } /// Execute `f`, unroll bindings on failure - fn try(&mut self, f: &fn() -> Result) -> Result { + fn try(@mut self, f: &fn() -> Result) -> Result { debug!("try()"); do indent { let snapshot = self.start_snapshot(); @@ -603,7 +603,7 @@ pub impl InferCtxt { } /// Execute `f` then unroll any bindings it creates - fn probe(&mut self, f: &fn() -> Result) -> Result { + fn probe(@mut self, f: &fn() -> Result) -> Result { debug!("probe()"); do indent { let snapshot = self.start_snapshot(); @@ -783,15 +783,14 @@ pub impl InferCtxt { }); (fn_sig, isr) } +} - fn fold_regions_in_sig( - &mut self, - fn_sig: &ty::FnSig, - fldr: &fn(r: ty::Region, in_fn: bool) -> ty::Region) -> ty::FnSig - { - do ty::fold_sig(fn_sig) |t| { - ty::fold_regions(self.tcx, t, fldr) - } +pub fn fold_regions_in_sig( + tcx: ty::ctxt, + fn_sig: &ty::FnSig, + fldr: &fn(r: ty::Region, in_fn: bool) -> ty::Region) -> ty::FnSig +{ + do ty::fold_sig(fn_sig) |t| { + ty::fold_regions(tcx, t, fldr) } - -} +} \ No newline at end of file diff --git a/src/librustc/rustc.rc b/src/librustc/rustc.rc index 9e34d5c6177e6..1ecb38854c815 100644 --- a/src/librustc/rustc.rc +++ b/src/librustc/rustc.rc @@ -76,6 +76,9 @@ pub mod middle { } pub mod ty; pub mod subst; + #[cfg(stage0)] #[path = "resolve_stage0.rs"] + pub mod resolve; + #[cfg(not(stage0))] pub mod resolve; #[path = "typeck/mod.rs"] pub mod typeck; diff --git a/src/libsyntax/codemap.rs b/src/libsyntax/codemap.rs index 7facc181effec..1c822b520f6af 100644 --- a/src/libsyntax/codemap.rs +++ b/src/libsyntax/codemap.rs @@ -355,7 +355,7 @@ pub impl CodeMap { } pub fn span_to_str(&self, sp: span) -> ~str { - let files = &mut *self.files; + let files = &*self.files; if files.len() == 0 && sp == dummy_sp() { return ~"no-location"; } From cce97ab8cb225c9ae5b9e8dca4f96bd750eebdb7 Mon Sep 17 00:00:00 2001 From: Luqman Aden Date: Thu, 2 May 2013 11:33:57 -0700 Subject: [PATCH 150/410] Add test for drop for newtype structs. --- src/test/run-pass/newtype-struct-drop-run.rs | 28 ++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/test/run-pass/newtype-struct-drop-run.rs diff --git a/src/test/run-pass/newtype-struct-drop-run.rs b/src/test/run-pass/newtype-struct-drop-run.rs new file mode 100644 index 0000000000000..dd5da3b09bb69 --- /dev/null +++ b/src/test/run-pass/newtype-struct-drop-run.rs @@ -0,0 +1,28 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Make sure the destructor is run for newtype structs. + +struct Foo(@mut int); + +#[unsafe_destructor] +impl Drop for Foo { + fn finalize(&self) { + ***self = 23; + } +} + +fn main() { + let y = @mut 32; + { + let x = Foo(y); + } + assert_eq!(*y, 23); +} From bd979c1fbf11ffb5b3ff42ca31aa2bfae3082ec6 Mon Sep 17 00:00:00 2001 From: gareth Date: Thu, 2 May 2013 21:19:12 +0100 Subject: [PATCH 151/410] Fix some issues with test_destroy_actually_kills: - it is now cross platform, instead of just unix - it now avoids sleeping (fixing issue #6156) - it now calls force_destroy() when force = true (was a bug) --- src/libcore/run.rs | 52 +++++++++++++++++++++++++++++++++------------- 1 file changed, 38 insertions(+), 14 deletions(-) diff --git a/src/libcore/run.rs b/src/libcore/run.rs index 0850121d6020d..7e73b3a3f80be 100644 --- a/src/libcore/run.rs +++ b/src/libcore/run.rs @@ -781,7 +781,6 @@ mod tests { use libc; use option::None; use os; - use path::Path; use run::{readclose, writeclose}; use run; @@ -870,34 +869,59 @@ mod tests { p.destroy(); // ...and nor should this (and nor should the destructor) } - #[cfg(unix)] // there is no way to sleep on windows from inside libcore... fn test_destroy_actually_kills(force: bool) { - let path = Path(fmt!("test/core-run-test-destroy-actually-kills-%?.tmp", force)); - os::remove_file(&path); + #[cfg(unix)] + static BLOCK_COMMAND: &'static str = "cat"; - let cmd = fmt!("sleep 5 && echo MurderDeathKill > %s", path.to_str()); - let mut p = run::start_program("sh", [~"-c", cmd]); + #[cfg(windows)] + static BLOCK_COMMAND: &'static str = "cmd"; - p.destroy(); // destroy the program before it has a chance to echo its message + #[cfg(unix)] + fn process_exists(pid: libc::pid_t) -> bool { + run::program_output("ps", [~"-p", pid.to_str()]).out.contains(pid.to_str()) + } - unsafe { - // wait to ensure the program is really destroyed and not just waiting itself - libc::sleep(10); + #[cfg(windows)] + fn process_exists(pid: libc::pid_t) -> bool { + + use libc::types::os::arch::extra::DWORD; + use libc::funcs::extra::kernel32::{CloseHandle, GetExitCodeProcess, OpenProcess}; + use libc::consts::os::extra::{FALSE, PROCESS_QUERY_INFORMATION, STILL_ACTIVE }; + + unsafe { + let proc = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid as DWORD); + if proc.is_null() { + return false; + } + // proc will be non-null if the process is alive, or if it died recently + let mut status = 0; + GetExitCodeProcess(proc, &mut status); + CloseHandle(proc); + return status == STILL_ACTIVE; + } } - // the program should not have had chance to echo its message - assert!(!path.exists()); + // this program will stay alive indefinitely trying to read from stdin + let mut p = run::start_program(BLOCK_COMMAND, []); + + assert!(process_exists(p.get_id())); + + if force { + p.force_destroy(); + } else { + p.destroy(); + } + + assert!(!process_exists(p.get_id())); } #[test] - #[cfg(unix)] fn test_unforced_destroy_actually_kills() { test_destroy_actually_kills(false); } #[test] - #[cfg(unix)] fn test_forced_destroy_actually_kills() { test_destroy_actually_kills(true); } From 4999d44d5b244671492fbdc05121416e05f729eb Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Thu, 2 May 2013 16:37:28 -0400 Subject: [PATCH 152/410] trans: fix borrow violation --- src/librustc/middle/trans/base.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs index 7738e97779971..80cedf2372786 100644 --- a/src/librustc/middle/trans/base.rs +++ b/src/librustc/middle/trans/base.rs @@ -1258,7 +1258,7 @@ pub fn trans_block_cleanups(bcx: block, cleanups: ~[cleanup]) -> block { } pub fn trans_block_cleanups_(bcx: block, - cleanups: ~[cleanup], + cleanups: &[cleanup], /* cleanup_cx: block, */ is_lpad: bool) -> block { let _icx = bcx.insn_ctxt("trans_block_cleanups"); @@ -1317,7 +1317,7 @@ pub fn cleanup_and_leave(bcx: block, dest: sub_cx.llbb }); bcx = trans_block_cleanups_(sub_cx, - block_cleanups(cur), + inf.cleanups, is_lpad); } _ => () From cc62680cc95d2ea733dbdc03c30e5c4c48fdad04 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Thu, 2 May 2013 17:08:04 -0400 Subject: [PATCH 153/410] free the borrow list propertly instead of crashing --- src/libcore/cleanup.rs | 5 +++++ src/libcore/unstable/lang.rs | 11 ++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/libcore/cleanup.rs b/src/libcore/cleanup.rs index 1dfe1b22dc4fb..5e2f4af184dc4 100644 --- a/src/libcore/cleanup.rs +++ b/src/libcore/cleanup.rs @@ -15,6 +15,7 @@ use ptr::mut_null; use repr::BoxRepr; use sys::TypeDesc; use cast::transmute; +use unstable::lang::clear_task_borrow_list; #[cfg(notest)] use ptr::to_unsafe_ptr; @@ -179,6 +180,10 @@ pub unsafe fn annihilate() { n_bytes_freed: 0 }; + // Quick hack: we need to free this list upon task exit, and this + // is a convenient place to do it. + clear_task_borrow_list(); + // Pass 1: Make all boxes immortal. // // In this pass, nothing gets freed, so it does not matter whether diff --git a/src/libcore/unstable/lang.rs b/src/libcore/unstable/lang.rs index d25147fcde118..a3e44b5feea4a 100644 --- a/src/libcore/unstable/lang.rs +++ b/src/libcore/unstable/lang.rs @@ -91,7 +91,16 @@ fn swap_task_borrow_list(f: &fn(~[BorrowRecord]) -> ~[BorrowRecord]) { } } -pub fn fail_borrowed(box: *mut BoxRepr, file: *c_char, line: size_t) { +pub unsafe fn clear_task_borrow_list() { + // pub because it is used by the box annihilator. + let cur_task = rust_get_task(); + let ptr = rustrt::rust_take_task_borrow_list(cur_task); + if !ptr.is_null() { + let _: ~[BorrowRecord] = transmute(ptr); + } +} + +fn fail_borrowed(box: *mut BoxRepr, file: *c_char, line: size_t) { debug_ptr("fail_borrowed: ", box); if !::rt::env::get().debug_borrows { From 32ebaacbc6dcd705562ac96af5c803f574284584 Mon Sep 17 00:00:00 2001 From: Graydon Hoare Date: Thu, 2 May 2013 14:12:55 -0700 Subject: [PATCH 154/410] re-xfail some tests that fail on x86 --- src/test/run-pass/tag-align-dyn-u64.rs | 2 ++ src/test/run-pass/tag-align-dyn-variants.rs | 2 ++ src/test/run-pass/tag-align-u64.rs | 1 + 3 files changed, 5 insertions(+) diff --git a/src/test/run-pass/tag-align-dyn-u64.rs b/src/test/run-pass/tag-align-dyn-u64.rs index 0fdf4e019a775..a09ee23f1478a 100644 --- a/src/test/run-pass/tag-align-dyn-u64.rs +++ b/src/test/run-pass/tag-align-dyn-u64.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// xfail-test + enum a_tag { a_tag(A) } diff --git a/src/test/run-pass/tag-align-dyn-variants.rs b/src/test/run-pass/tag-align-dyn-variants.rs index 96921f2a065c2..cd94bd30c21e0 100644 --- a/src/test/run-pass/tag-align-dyn-variants.rs +++ b/src/test/run-pass/tag-align-dyn-variants.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// xfail-test + enum a_tag { varA(A), varB(B) diff --git a/src/test/run-pass/tag-align-u64.rs b/src/test/run-pass/tag-align-u64.rs index 56d384e5fdb76..ea60f389663cf 100644 --- a/src/test/run-pass/tag-align-u64.rs +++ b/src/test/run-pass/tag-align-u64.rs @@ -8,6 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// xfail-test enum a_tag { a_tag(u64) From 6f2e429041da1990a91477e37316c73729cb6fe2 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Mon, 29 Apr 2013 15:23:04 -0700 Subject: [PATCH 155/410] libstd: De-mut arena --- src/libstd/arena.rs | 115 ++++++++++++++++++++++++-------------------- src/libstd/list.rs | 25 ++++++++++ 2 files changed, 89 insertions(+), 51 deletions(-) diff --git a/src/libstd/arena.rs b/src/libstd/arena.rs index 8e2c734504512..bea7935d5c3a4 100644 --- a/src/libstd/arena.rs +++ b/src/libstd/arena.rs @@ -32,11 +32,11 @@ // overhead when initializing plain-old-data and means we don't need // to waste time running the destructors of POD. +use list::{MutList, MutCons, MutNil}; use list; -use list::{List, Cons, Nil}; use core::at_vec; -use core::cast::transmute; +use core::cast::{transmute, transmute_mut_region}; use core::cast; use core::libc::size_t; use core::ptr; @@ -74,7 +74,7 @@ static tydesc_drop_glue_index: size_t = 3 as size_t; // will always stay at 0. struct Chunk { data: @[u8], - mut fill: uint, + fill: uint, is_pod: bool, } @@ -82,9 +82,9 @@ pub struct Arena { // The head is seperated out from the list as a unbenchmarked // microoptimization, to avoid needing to case on the list to // access the head. - priv mut head: Chunk, - priv mut pod_head: Chunk, - priv mut chunks: @List, + priv head: Chunk, + priv pod_head: Chunk, + priv chunks: @mut MutList, } #[unsafe_destructor] @@ -92,8 +92,10 @@ impl Drop for Arena { fn finalize(&self) { unsafe { destroy_chunk(&self.head); - for list::each(self.chunks) |chunk| { - if !chunk.is_pod { destroy_chunk(chunk); } + for self.chunks.each |chunk| { + if !chunk.is_pod { + destroy_chunk(chunk); + } } } } @@ -113,7 +115,7 @@ pub fn arena_with_size(initial_size: uint) -> Arena { Arena { head: chunk(initial_size, false), pod_head: chunk(initial_size, true), - chunks: @Nil, + chunks: @mut MutNil, } } @@ -170,11 +172,11 @@ unsafe fn un_bitpack_tydesc_ptr(p: uint) -> (*TypeDesc, bool) { pub impl Arena { // Functions for the POD part of the arena - priv fn alloc_pod_grow(&self, n_bytes: uint, align: uint) -> *u8 { + priv fn alloc_pod_grow(&mut self, n_bytes: uint, align: uint) -> *u8 { // Allocate a new chunk. let chunk_size = at_vec::capacity(self.pod_head.data); let new_min_chunk_size = uint::max(n_bytes, chunk_size); - self.chunks = @Cons(copy self.pod_head, self.chunks); + self.chunks = @mut MutCons(copy self.pod_head, self.chunks); self.pod_head = chunk(uint::next_power_of_two(new_min_chunk_size + 1u), true); @@ -182,27 +184,28 @@ pub impl Arena { } #[inline(always)] - priv fn alloc_pod_inner(&self, n_bytes: uint, align: uint) -> *u8 { - let head = &mut self.pod_head; + priv fn alloc_pod_inner(&mut self, n_bytes: uint, align: uint) -> *u8 { + unsafe { + // XXX: Borrow check + let head = transmute_mut_region(&mut self.pod_head); - let start = round_up_to(head.fill, align); - let end = start + n_bytes; - if end > at_vec::capacity(head.data) { - return self.alloc_pod_grow(n_bytes, align); - } - head.fill = end; + let start = round_up_to(head.fill, align); + let end = start + n_bytes; + if end > at_vec::capacity(head.data) { + return self.alloc_pod_grow(n_bytes, align); + } + head.fill = end; - //debug!("idx = %u, size = %u, align = %u, fill = %u", - // start, n_bytes, align, head.fill); + //debug!("idx = %u, size = %u, align = %u, fill = %u", + // start, n_bytes, align, head.fill); - unsafe { ptr::offset(vec::raw::to_ptr(head.data), start) } } #[inline(always)] #[cfg(stage0)] - priv fn alloc_pod(&self, op: &fn() -> T) -> &'self T { + priv fn alloc_pod(&mut self, op: &fn() -> T) -> &'self T { unsafe { let tydesc = sys::get_type_desc::(); let ptr = self.alloc_pod_inner((*tydesc).size, (*tydesc).align); @@ -216,7 +219,7 @@ pub impl Arena { #[cfg(stage1)] #[cfg(stage2)] #[cfg(stage3)] - priv fn alloc_pod<'a, T>(&'a self, op: &fn() -> T) -> &'a T { + priv fn alloc_pod<'a, T>(&'a mut self, op: &fn() -> T) -> &'a T { unsafe { let tydesc = sys::get_type_desc::(); let ptr = self.alloc_pod_inner((*tydesc).size, (*tydesc).align); @@ -227,11 +230,12 @@ pub impl Arena { } // Functions for the non-POD part of the arena - priv fn alloc_nonpod_grow(&self, n_bytes: uint, align: uint) -> (*u8, *u8) { + priv fn alloc_nonpod_grow(&mut self, n_bytes: uint, align: uint) + -> (*u8, *u8) { // Allocate a new chunk. let chunk_size = at_vec::capacity(self.head.data); let new_min_chunk_size = uint::max(n_bytes, chunk_size); - self.chunks = @Cons(copy self.head, self.chunks); + self.chunks = @mut MutCons(copy self.head, self.chunks); self.head = chunk(uint::next_power_of_two(new_min_chunk_size + 1u), false); @@ -239,22 +243,23 @@ pub impl Arena { } #[inline(always)] - priv fn alloc_nonpod_inner(&self, n_bytes: uint, align: uint) -> (*u8, *u8) { - let head = &mut self.head; - - let tydesc_start = head.fill; - let after_tydesc = head.fill + sys::size_of::<*TypeDesc>(); - let start = round_up_to(after_tydesc, align); - let end = start + n_bytes; - if end > at_vec::capacity(head.data) { - return self.alloc_nonpod_grow(n_bytes, align); - } - head.fill = round_up_to(end, sys::pref_align_of::<*TypeDesc>()); + priv fn alloc_nonpod_inner(&mut self, n_bytes: uint, align: uint) + -> (*u8, *u8) { + unsafe { + let head = transmute_mut_region(&mut self.head); + + let tydesc_start = head.fill; + let after_tydesc = head.fill + sys::size_of::<*TypeDesc>(); + let start = round_up_to(after_tydesc, align); + let end = start + n_bytes; + if end > at_vec::capacity(head.data) { + return self.alloc_nonpod_grow(n_bytes, align); + } + head.fill = round_up_to(end, sys::pref_align_of::<*TypeDesc>()); - //debug!("idx = %u, size = %u, align = %u, fill = %u", - // start, n_bytes, align, head.fill); + //debug!("idx = %u, size = %u, align = %u, fill = %u", + // start, n_bytes, align, head.fill); - unsafe { let buf = vec::raw::to_ptr(head.data); return (ptr::offset(buf, tydesc_start), ptr::offset(buf, start)); } @@ -262,7 +267,7 @@ pub impl Arena { #[inline(always)] #[cfg(stage0)] - priv fn alloc_nonpod(&self, op: &fn() -> T) -> &'self T { + priv fn alloc_nonpod(&mut self, op: &fn() -> T) -> &'self T { unsafe { let tydesc = sys::get_type_desc::(); let (ty_ptr, ptr) = @@ -286,7 +291,7 @@ pub impl Arena { #[cfg(stage1)] #[cfg(stage2)] #[cfg(stage3)] - priv fn alloc_nonpod<'a, T>(&'a self, op: &fn() -> T) -> &'a T { + priv fn alloc_nonpod<'a, T>(&'a mut self, op: &fn() -> T) -> &'a T { unsafe { let tydesc = sys::get_type_desc::(); let (ty_ptr, ptr) = @@ -309,13 +314,16 @@ pub impl Arena { // The external interface #[inline(always)] #[cfg(stage0)] - fn alloc(&self, op: &fn() -> T) -> &'self T { + fn alloc(&mut self, op: &fn() -> T) -> &'self T { unsafe { + // XXX: Borrow check + let this = transmute_mut_region(self); if !rusti::needs_drop::() { - self.alloc_pod(op) - } else { - self.alloc_nonpod(op) + return this.alloc_pod(op); } + // XXX: Borrow check + let this = transmute_mut_region(self); + this.alloc_nonpod(op) } } @@ -324,13 +332,16 @@ pub impl Arena { #[cfg(stage1)] #[cfg(stage2)] #[cfg(stage3)] - fn alloc<'a, T>(&'a self, op: &fn() -> T) -> &'a T { + fn alloc<'a, T>(&'a mut self, op: &fn() -> T) -> &'a T { unsafe { + // XXX: Borrow check + let this = transmute_mut_region(self); if !rusti::needs_drop::() { - self.alloc_pod(op) - } else { - self.alloc_nonpod(op) + return this.alloc_pod(op); } + // XXX: Borrow check + let this = transmute_mut_region(self); + this.alloc_nonpod(op) } } } @@ -348,7 +359,9 @@ fn test_arena_destructors() { } } -#[test] #[should_fail] #[ignore(cfg(windows))] +#[test] +#[should_fail] +#[ignore(cfg(windows))] fn test_arena_destructors_fail() { let arena = Arena(); // Put some stuff in the arena. diff --git a/src/libstd/list.rs b/src/libstd/list.rs index 2b6fa0bc05691..8d15508b26e05 100644 --- a/src/libstd/list.rs +++ b/src/libstd/list.rs @@ -16,6 +16,12 @@ pub enum List { Nil, } +#[deriving(Eq)] +pub enum MutList { + MutCons(T, @mut MutList), + MutNil, +} + /// Create a list from a vector pub fn from_vec(v: &[T]) -> @List { vec::foldr(v, @Nil::, |h, t| @Cons(*h, t)) @@ -147,6 +153,25 @@ pub fn each(l: @List, f: &fn(&T) -> bool) { } } +impl MutList { + /// Iterate over a mutable list + pub fn each(@mut self, f: &fn(&mut T) -> bool) { + let mut cur = self; + loop { + let borrowed = &mut *cur; + cur = match *borrowed { + MutCons(ref mut hd, tl) => { + if !f(hd) { + return; + } + tl + } + MutNil => break + } + } + } +} + #[cfg(test)] mod tests { use list::*; From dc5df61bc1914224d50d92cdd5599b6337ac68f2 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Wed, 1 May 2013 17:54:54 -0700 Subject: [PATCH 156/410] librustc: Update the serializer to work properly with INHTWAMA, removing mutable fields in the process --- src/librustc/metadata/decoder.rs | 9 + src/librustc/metadata/encoder.rs | 1638 +++++++++++++++-- src/librustc/middle/astencode.rs | 888 ++++++++- src/libstd/arena.rs | 4 +- src/libstd/ebml.rs | 818 +++++++- src/libstd/flatpipes.rs | 33 +- src/libstd/json.rs | 871 ++++++++- src/libstd/serialize.rs | 1145 +++++++++++- src/libstd/workcache.rs | 53 +- src/libsyntax/ast.rs | 38 +- src/libsyntax/codemap.rs | 17 + src/libsyntax/ext/auto_encode.rs | 304 +-- src/libsyntax/ext/deriving/decodable.rs | 49 +- src/libsyntax/ext/deriving/encodable.rs | 42 +- src/libsyntax/parse/mod.rs | 3 +- src/test/bench/shootout-binarytrees.rs | 23 +- src/test/run-pass/auto-encode.rs | 7 +- src/test/run-pass/issue-4036.rs | 3 +- src/test/run-pass/placement-new-arena.rs | 3 +- src/test/run-pass/regions-mock-trans-impls.rs | 28 +- 20 files changed, 5381 insertions(+), 595 deletions(-) diff --git a/src/librustc/metadata/decoder.rs b/src/librustc/metadata/decoder.rs index 61454c802cc9a..1be49528b9e79 100644 --- a/src/librustc/metadata/decoder.rs +++ b/src/librustc/metadata/decoder.rs @@ -272,12 +272,21 @@ fn item_ty_param_defs(item: ebml::Doc, tcx: ty::ctxt, cdata: cmd, @bounds } +#[cfg(stage0)] fn item_ty_region_param(item: ebml::Doc) -> Option { reader::maybe_get_doc(item, tag_region_param).map(|doc| { Decodable::decode(&reader::Decoder(*doc)) }) } +#[cfg(not(stage0))] +fn item_ty_region_param(item: ebml::Doc) -> Option { + reader::maybe_get_doc(item, tag_region_param).map(|doc| { + let mut decoder = reader::Decoder(*doc); + Decodable::decode(&mut decoder) + }) +} + fn item_ty_param_count(item: ebml::Doc) -> uint { let mut n = 0u; reader::tagged_docs(item, tag_items_data_item_ty_param_bounds, diff --git a/src/librustc/metadata/encoder.rs b/src/librustc/metadata/encoder.rs index 2a4334781e4dc..77373076137b9 100644 --- a/src/librustc/metadata/encoder.rs +++ b/src/librustc/metadata/encoder.rs @@ -42,11 +42,18 @@ use writer = std::ebml::writer; // used by astencode: type abbrev_map = @mut HashMap; +#[cfg(stage0)] pub type encode_inlined_item = @fn(ecx: @EncodeContext, ebml_w: &writer::Encoder, path: &[ast_map::path_elt], ii: ast::inlined_item); +#[cfg(not(stage0))] +pub type encode_inlined_item = @fn(ecx: @EncodeContext, + ebml_w: &mut writer::Encoder, + path: &[ast_map::path_elt], + ii: ast::inlined_item); + pub struct EncodeParams { diag: @span_handler, tcx: ty::ctxt, @@ -91,21 +98,47 @@ pub fn reachable(ecx: @EncodeContext, id: node_id) -> bool { ecx.reachable.contains(&id) } +#[cfg(stage0)] fn encode_name(ecx: @EncodeContext, ebml_w: &writer::Encoder, name: ident) { ebml_w.wr_tagged_str(tag_paths_data_name, *ecx.tcx.sess.str_of(name)); } -fn encode_impl_type_basename(ecx: @EncodeContext, ebml_w: &writer::Encoder, +#[cfg(not(stage0))] +fn encode_name(ecx: @EncodeContext, + ebml_w: &mut writer::Encoder, + name: ident) { + ebml_w.wr_tagged_str(tag_paths_data_name, *ecx.tcx.sess.str_of(name)); +} + +#[cfg(stage0)] +fn encode_impl_type_basename(ecx: @EncodeContext, + ebml_w: &writer::Encoder, + name: ident) { + ebml_w.wr_tagged_str(tag_item_impl_type_basename, + *ecx.tcx.sess.str_of(name)); +} + +#[cfg(not(stage0))] +fn encode_impl_type_basename(ecx: @EncodeContext, + ebml_w: &mut writer::Encoder, name: ident) { ebml_w.wr_tagged_str(tag_item_impl_type_basename, *ecx.tcx.sess.str_of(name)); } +#[cfg(stage0)] pub fn encode_def_id(ebml_w: &writer::Encoder, id: def_id) { ebml_w.wr_tagged_str(tag_def_id, def_to_str(id)); } -fn encode_region_param(ecx: @EncodeContext, ebml_w: &writer::Encoder, +#[cfg(not(stage0))] +pub fn encode_def_id(ebml_w: &mut writer::Encoder, id: def_id) { + ebml_w.wr_tagged_str(tag_def_id, def_to_str(id)); +} + +#[cfg(stage0)] +fn encode_region_param(ecx: @EncodeContext, + ebml_w: &writer::Encoder, it: @ast::item) { let opt_rp = ecx.tcx.region_paramd_items.find(&it.id); for opt_rp.each |rp| { @@ -115,6 +148,19 @@ fn encode_region_param(ecx: @EncodeContext, ebml_w: &writer::Encoder, } } +#[cfg(not(stage0))] +fn encode_region_param(ecx: @EncodeContext, + ebml_w: &mut writer::Encoder, + it: @ast::item) { + let opt_rp = ecx.tcx.region_paramd_items.find(&it.id); + for opt_rp.each |rp| { + ebml_w.start_tag(tag_region_param); + rp.encode(ebml_w); + ebml_w.end_tag(); + } +} + +#[cfg(stage0)] fn encode_mutability(ebml_w: &writer::Encoder, mt: struct_mutability) { do ebml_w.wr_tag(tag_struct_mut) { let val = match mt { @@ -125,13 +171,45 @@ fn encode_mutability(ebml_w: &writer::Encoder, mt: struct_mutability) { } } +#[cfg(not(stage0))] +fn encode_mutability(ebml_w: &mut writer::Encoder, mt: struct_mutability) { + ebml_w.start_tag(tag_struct_mut); + let val = match mt { + struct_immutable => 'a', + struct_mutable => 'm' + }; + ebml_w.writer.write(&[val as u8]); + ebml_w.end_tag(); +} + struct entry { val: T, pos: uint } -fn add_to_index(ecx: @EncodeContext, ebml_w: &writer::Encoder, path: &[ident], - index: &mut ~[entry<~str>], name: ident) { +#[cfg(stage0)] +fn add_to_index(ecx: @EncodeContext, + ebml_w: &writer::Encoder, + path: &[ident], + index: &mut ~[entry<~str>], + name: ident) { + let mut full_path = ~[]; + full_path.push_all(path); + full_path.push(name); + index.push( + entry { + val: ast_util::path_name_i(full_path, + ecx.tcx.sess.parse_sess.interner), + pos: ebml_w.writer.tell() + }); +} + +#[cfg(not(stage0))] +fn add_to_index(ecx: @EncodeContext, + ebml_w: &mut writer::Encoder, + path: &[ident], + index: &mut ~[entry<~str>], + name: ident) { let mut full_path = ~[]; full_path.push_all(path); full_path.push(name); @@ -143,11 +221,28 @@ fn add_to_index(ecx: @EncodeContext, ebml_w: &writer::Encoder, path: &[ident], }); } +#[cfg(stage0)] fn encode_trait_ref(ebml_w: &writer::Encoder, ecx: @EncodeContext, trait_ref: &ty::TraitRef, - tag: uint) -{ + tag: uint) { + let ty_str_ctxt = @tyencode::ctxt { + diag: ecx.diag, + ds: def_to_str, + tcx: ecx.tcx, + reachable: |a| reachable(ecx, a), + abbrevs: tyencode::ac_use_abbrevs(ecx.type_abbrevs)}; + + ebml_w.start_tag(tag); + tyencode::enc_trait_ref(ebml_w.writer, ty_str_ctxt, trait_ref); + ebml_w.end_tag(); +} + +#[cfg(not(stage0))] +fn encode_trait_ref(ebml_w: &mut writer::Encoder, + ecx: @EncodeContext, + trait_ref: &ty::TraitRef, + tag: uint) { let ty_str_ctxt = @tyencode::ctxt { diag: ecx.diag, ds: def_to_str, @@ -161,14 +256,26 @@ fn encode_trait_ref(ebml_w: &writer::Encoder, } // Item info table encoding +#[cfg(stage0)] fn encode_family(ebml_w: &writer::Encoder, c: char) { ebml_w.start_tag(tag_items_data_item_family); ebml_w.writer.write(&[c as u8]); ebml_w.end_tag(); } -pub fn def_to_str(did: def_id) -> ~str { fmt!("%d:%d", did.crate, did.node) } +// Item info table encoding +#[cfg(not(stage0))] +fn encode_family(ebml_w: &mut writer::Encoder, c: char) { + ebml_w.start_tag(tag_items_data_item_family); + ebml_w.writer.write(&[c as u8]); + ebml_w.end_tag(); +} + +pub fn def_to_str(did: def_id) -> ~str { + fmt!("%d:%d", did.crate, did.node) +} +#[cfg(stage0)] fn encode_ty_type_param_defs(ebml_w: &writer::Encoder, ecx: @EncodeContext, params: @~[ty::TypeParameterDef], @@ -186,6 +293,25 @@ fn encode_ty_type_param_defs(ebml_w: &writer::Encoder, } } +#[cfg(not(stage0))] +fn encode_ty_type_param_defs(ebml_w: &mut writer::Encoder, + ecx: @EncodeContext, + params: @~[ty::TypeParameterDef], + tag: uint) { + let ty_str_ctxt = @tyencode::ctxt { + diag: ecx.diag, + ds: def_to_str, + tcx: ecx.tcx, + reachable: |a| reachable(ecx, a), + abbrevs: tyencode::ac_use_abbrevs(ecx.type_abbrevs)}; + for params.each |param| { + ebml_w.start_tag(tag); + tyencode::enc_type_param_def(ebml_w.writer, ty_str_ctxt, param); + ebml_w.end_tag(); + } +} + +#[cfg(stage0)] fn encode_type_param_bounds(ebml_w: &writer::Encoder, ecx: @EncodeContext, params: &OptVec) { @@ -195,13 +321,31 @@ fn encode_type_param_bounds(ebml_w: &writer::Encoder, tag_items_data_item_ty_param_bounds); } +#[cfg(not(stage0))] +fn encode_type_param_bounds(ebml_w: &mut writer::Encoder, + ecx: @EncodeContext, + params: &OptVec) { + let ty_param_defs = + @params.map_to_vec(|param| *ecx.tcx.ty_param_defs.get(¶m.id)); + encode_ty_type_param_defs(ebml_w, ecx, ty_param_defs, + tag_items_data_item_ty_param_bounds); +} +#[cfg(stage0)] fn encode_variant_id(ebml_w: &writer::Encoder, vid: def_id) { ebml_w.start_tag(tag_items_data_item_variant); ebml_w.writer.write(str::to_bytes(def_to_str(vid))); ebml_w.end_tag(); } +#[cfg(not(stage0))] +fn encode_variant_id(ebml_w: &mut writer::Encoder, vid: def_id) { + ebml_w.start_tag(tag_items_data_item_variant); + ebml_w.writer.write(str::to_bytes(def_to_str(vid))); + ebml_w.end_tag(); +} + +#[cfg(stage0)] pub fn write_type(ecx: @EncodeContext, ebml_w: &writer::Encoder, typ: ty::t) { let ty_str_ctxt = @tyencode::ctxt { diag: ecx.diag, @@ -212,7 +356,35 @@ pub fn write_type(ecx: @EncodeContext, ebml_w: &writer::Encoder, typ: ty::t) { tyencode::enc_ty(ebml_w.writer, ty_str_ctxt, typ); } -pub fn write_vstore(ecx: @EncodeContext, ebml_w: &writer::Encoder, +#[cfg(not(stage0))] +pub fn write_type(ecx: @EncodeContext, + ebml_w: &mut writer::Encoder, + typ: ty::t) { + let ty_str_ctxt = @tyencode::ctxt { + diag: ecx.diag, + ds: def_to_str, + tcx: ecx.tcx, + reachable: |a| reachable(ecx, a), + abbrevs: tyencode::ac_use_abbrevs(ecx.type_abbrevs)}; + tyencode::enc_ty(ebml_w.writer, ty_str_ctxt, typ); +} + +#[cfg(stage0)] +pub fn write_vstore(ecx: @EncodeContext, + ebml_w: &writer::Encoder, + vstore: ty::vstore) { + let ty_str_ctxt = @tyencode::ctxt { + diag: ecx.diag, + ds: def_to_str, + tcx: ecx.tcx, + reachable: |a| reachable(ecx, a), + abbrevs: tyencode::ac_use_abbrevs(ecx.type_abbrevs)}; + tyencode::enc_vstore(ebml_w.writer, ty_str_ctxt, vstore); +} + +#[cfg(not(stage0))] +pub fn write_vstore(ecx: @EncodeContext, + ebml_w: &mut writer::Encoder, vstore: ty::vstore) { let ty_str_ctxt = @tyencode::ctxt { diag: ecx.diag, @@ -223,16 +395,37 @@ pub fn write_vstore(ecx: @EncodeContext, ebml_w: &writer::Encoder, tyencode::enc_vstore(ebml_w.writer, ty_str_ctxt, vstore); } +#[cfg(stage0)] fn encode_type(ecx: @EncodeContext, ebml_w: &writer::Encoder, typ: ty::t) { ebml_w.start_tag(tag_items_data_item_type); write_type(ecx, ebml_w, typ); ebml_w.end_tag(); } +#[cfg(not(stage0))] +fn encode_type(ecx: @EncodeContext, + ebml_w: &mut writer::Encoder, + typ: ty::t) { + ebml_w.start_tag(tag_items_data_item_type); + write_type(ecx, ebml_w, typ); + ebml_w.end_tag(); +} + +#[cfg(stage0)] fn encode_transformed_self_ty(ecx: @EncodeContext, ebml_w: &writer::Encoder, - opt_typ: Option) -{ + opt_typ: Option) { + for opt_typ.each |&typ| { + ebml_w.start_tag(tag_item_method_transformed_self_ty); + write_type(ecx, ebml_w, typ); + ebml_w.end_tag(); + } +} + +#[cfg(not(stage0))] +fn encode_transformed_self_ty(ecx: @EncodeContext, + ebml_w: &mut writer::Encoder, + opt_typ: Option) { for opt_typ.each |&typ| { ebml_w.start_tag(tag_item_method_transformed_self_ty); write_type(ecx, ebml_w, typ); @@ -240,10 +433,27 @@ fn encode_transformed_self_ty(ecx: @EncodeContext, } } +#[cfg(stage0)] fn encode_method_fty(ecx: @EncodeContext, ebml_w: &writer::Encoder, - typ: &ty::BareFnTy) -{ + typ: &ty::BareFnTy) { + ebml_w.start_tag(tag_item_method_fty); + + let ty_str_ctxt = @tyencode::ctxt { + diag: ecx.diag, + ds: def_to_str, + tcx: ecx.tcx, + reachable: |a| reachable(ecx, a), + abbrevs: tyencode::ac_use_abbrevs(ecx.type_abbrevs)}; + tyencode::enc_bare_fn_ty(ebml_w.writer, ty_str_ctxt, typ); + + ebml_w.end_tag(); +} + +#[cfg(not(stage0))] +fn encode_method_fty(ecx: @EncodeContext, + ebml_w: &mut writer::Encoder, + typ: &ty::BareFnTy) { ebml_w.start_tag(tag_item_method_fty); let ty_str_ctxt = @tyencode::ctxt { @@ -257,6 +467,7 @@ fn encode_method_fty(ecx: @EncodeContext, ebml_w.end_tag(); } +#[cfg(stage0)] fn encode_symbol(ecx: @EncodeContext, ebml_w: &writer::Encoder, id: node_id) { ebml_w.start_tag(tag_items_data_item_symbol); match ecx.item_symbols.find(&id) { @@ -272,28 +483,123 @@ fn encode_symbol(ecx: @EncodeContext, ebml_w: &writer::Encoder, id: node_id) { ebml_w.end_tag(); } -fn encode_discriminant(ecx: @EncodeContext, ebml_w: &writer::Encoder, +#[cfg(not(stage0))] +fn encode_symbol(ecx: @EncodeContext, + ebml_w: &mut writer::Encoder, + id: node_id) { + ebml_w.start_tag(tag_items_data_item_symbol); + match ecx.item_symbols.find(&id) { + Some(x) => { + debug!("encode_symbol(id=%?, str=%s)", id, *x); + ebml_w.writer.write(str::to_bytes(*x)); + } + None => { + ecx.diag.handler().bug( + fmt!("encode_symbol: id not found %d", id)); + } + } + ebml_w.end_tag(); +} + +#[cfg(stage0)] +fn encode_discriminant(ecx: @EncodeContext, + ebml_w: &writer::Encoder, + id: node_id) { + ebml_w.start_tag(tag_items_data_item_symbol); + ebml_w.writer.write(str::to_bytes(**ecx.discrim_symbols.get(&id))); + ebml_w.end_tag(); +} + +#[cfg(not(stage0))] +fn encode_discriminant(ecx: @EncodeContext, + ebml_w: &mut writer::Encoder, id: node_id) { ebml_w.start_tag(tag_items_data_item_symbol); ebml_w.writer.write(str::to_bytes(**ecx.discrim_symbols.get(&id))); ebml_w.end_tag(); } -fn encode_disr_val(_ecx: @EncodeContext, ebml_w: &writer::Encoder, +#[cfg(stage0)] +fn encode_disr_val(_: @EncodeContext, + ebml_w: &writer::Encoder, disr_val: int) { ebml_w.start_tag(tag_disr_val); ebml_w.writer.write(str::to_bytes(int::to_str(disr_val))); ebml_w.end_tag(); } +#[cfg(not(stage0))] +fn encode_disr_val(_: @EncodeContext, + ebml_w: &mut writer::Encoder, + disr_val: int) { + ebml_w.start_tag(tag_disr_val); + ebml_w.writer.write(str::to_bytes(int::to_str(disr_val))); + ebml_w.end_tag(); +} + +#[cfg(stage0)] fn encode_parent_item(ebml_w: &writer::Encoder, id: def_id) { ebml_w.start_tag(tag_items_data_parent_item); ebml_w.writer.write(str::to_bytes(def_to_str(id))); ebml_w.end_tag(); } -fn encode_enum_variant_info(ecx: @EncodeContext, ebml_w: &writer::Encoder, - id: node_id, variants: &[variant], +#[cfg(not(stage0))] +fn encode_parent_item(ebml_w: &mut writer::Encoder, id: def_id) { + ebml_w.start_tag(tag_items_data_parent_item); + ebml_w.writer.write(str::to_bytes(def_to_str(id))); + ebml_w.end_tag(); +} + +#[cfg(stage0)] +fn encode_enum_variant_info(ecx: @EncodeContext, + ebml_w: &writer::Encoder, + id: node_id, + variants: &[variant], + path: &[ast_map::path_elt], + index: @mut ~[entry], + generics: &ast::Generics) { + debug!("encode_enum_variant_info(id=%?)", id); + + let mut disr_val = 0; + let mut i = 0; + let vi = ty::enum_variants(ecx.tcx, + ast::def_id { crate: local_crate, node: id }); + for variants.each |variant| { + index.push(entry {val: variant.node.id, pos: ebml_w.writer.tell()}); + ebml_w.start_tag(tag_items_data_item); + encode_def_id(ebml_w, local_def(variant.node.id)); + encode_family(ebml_w, 'v'); + encode_name(ecx, ebml_w, variant.node.name); + encode_parent_item(ebml_w, local_def(id)); + encode_type(ecx, ebml_w, + node_id_to_type(ecx.tcx, variant.node.id)); + match variant.node.kind { + ast::tuple_variant_kind(ref args) + if args.len() > 0 && generics.ty_params.len() == 0 => { + encode_symbol(ecx, ebml_w, variant.node.id); + } + ast::tuple_variant_kind(_) | ast::struct_variant_kind(_) => {} + } + encode_discriminant(ecx, ebml_w, variant.node.id); + if vi[i].disr_val != disr_val { + encode_disr_val(ecx, ebml_w, vi[i].disr_val); + disr_val = vi[i].disr_val; + } + encode_type_param_bounds(ebml_w, ecx, &generics.ty_params); + encode_path(ecx, ebml_w, path, + ast_map::path_name(variant.node.name)); + ebml_w.end_tag(); + disr_val += 1; + i += 1; + } +} + +#[cfg(not(stage0))] +fn encode_enum_variant_info(ecx: @EncodeContext, + ebml_w: &mut writer::Encoder, + id: node_id, + variants: &[variant], path: &[ast_map::path_elt], index: @mut ~[entry], generics: &ast::Generics) { @@ -333,8 +639,11 @@ fn encode_enum_variant_info(ecx: @EncodeContext, ebml_w: &writer::Encoder, } } -fn encode_path(ecx: @EncodeContext, ebml_w: &writer::Encoder, - path: &[ast_map::path_elt], name: ast_map::path_elt) { +#[cfg(stage0)] +fn encode_path(ecx: @EncodeContext, + ebml_w: &writer::Encoder, + path: &[ast_map::path_elt], + name: ast_map::path_elt) { fn encode_path_elt(ecx: @EncodeContext, ebml_w: &writer::Encoder, elt: ast_map::path_elt) { let (tag, name) = match elt { @@ -354,8 +663,37 @@ fn encode_path(ecx: @EncodeContext, ebml_w: &writer::Encoder, } } -fn encode_info_for_mod(ecx: @EncodeContext, ebml_w: &writer::Encoder, - md: &_mod, id: node_id, path: &[ast_map::path_elt], +#[cfg(not(stage0))] +fn encode_path(ecx: @EncodeContext, + ebml_w: &mut writer::Encoder, + path: &[ast_map::path_elt], + name: ast_map::path_elt) { + fn encode_path_elt(ecx: @EncodeContext, + ebml_w: &mut writer::Encoder, + elt: ast_map::path_elt) { + let (tag, name) = match elt { + ast_map::path_mod(name) => (tag_path_elt_mod, name), + ast_map::path_name(name) => (tag_path_elt_name, name) + }; + + ebml_w.wr_tagged_str(tag, *ecx.tcx.sess.str_of(name)); + } + + ebml_w.start_tag(tag_path); + ebml_w.wr_tagged_u32(tag_path_len, (path.len() + 1) as u32); + for path.each |pe| { + encode_path_elt(ecx, ebml_w, *pe); + } + encode_path_elt(ecx, ebml_w, name); + ebml_w.end_tag(); +} + +#[cfg(stage0)] +fn encode_info_for_mod(ecx: @EncodeContext, + ebml_w: &writer::Encoder, + md: &_mod, + id: node_id, + path: &[ast_map::path_elt], name: ident) { ebml_w.start_tag(tag_items_data_item); encode_def_id(ebml_w, local_def(id)); @@ -412,32 +750,164 @@ fn encode_info_for_mod(ecx: @EncodeContext, ebml_w: &writer::Encoder, ebml_w.end_tag(); } -fn encode_struct_field_family(ebml_w: &writer::Encoder, - visibility: visibility) { - encode_family(ebml_w, match visibility { - public => 'g', - private => 'j', - inherited => 'N' - }); -} - -fn encode_visibility(ebml_w: &writer::Encoder, visibility: visibility) { - ebml_w.start_tag(tag_items_data_item_visibility); - let ch = match visibility { - public => 'y', - private => 'n', - inherited => 'i', - }; - ebml_w.wr_str(str::from_char(ch)); - ebml_w.end_tag(); -} +#[cfg(not(stage0))] +fn encode_info_for_mod(ecx: @EncodeContext, + ebml_w: &mut writer::Encoder, + md: &_mod, + id: node_id, + path: &[ast_map::path_elt], + name: ident) { + ebml_w.start_tag(tag_items_data_item); + encode_def_id(ebml_w, local_def(id)); + encode_family(ebml_w, 'm'); + encode_name(ecx, ebml_w, name); + debug!("(encoding info for module) encoding info for module ID %d", id); -fn encode_self_type(ebml_w: &writer::Encoder, self_type: ast::self_ty_) { - ebml_w.start_tag(tag_item_trait_method_self_ty); + // Encode info about all the module children. + for md.items.each |item| { + match item.node { + item_impl(*) => { + let (ident, did) = (item.ident, item.id); + debug!("(encoding info for module) ... encoding impl %s \ + (%?/%?)", + *ecx.tcx.sess.str_of(ident), + did, + ast_map::node_id_to_str(ecx.tcx.items, did, ecx.tcx + .sess.parse_sess.interner)); - // Encode the base self type. - match self_type { - sty_static => { + ebml_w.start_tag(tag_mod_impl); + ebml_w.wr_str(def_to_str(local_def(did))); + ebml_w.end_tag(); + } + _ => {} // FIXME #4573: Encode these too. + } + } + + encode_path(ecx, ebml_w, path, ast_map::path_mod(name)); + + // Encode the reexports of this module. + debug!("(encoding info for module) encoding reexports for %d", id); + match ecx.reexports2.find(&id) { + Some(ref exports) => { + debug!("(encoding info for module) found reexports for %d", id); + for exports.each |exp| { + debug!("(encoding info for module) reexport '%s' for %d", + *exp.name, id); + ebml_w.start_tag(tag_items_data_item_reexport); + ebml_w.start_tag(tag_items_data_item_reexport_def_id); + ebml_w.wr_str(def_to_str(exp.def_id)); + ebml_w.end_tag(); + ebml_w.start_tag(tag_items_data_item_reexport_name); + ebml_w.wr_str(*exp.name); + ebml_w.end_tag(); + ebml_w.end_tag(); + } + } + None => { + debug!("(encoding info for module) found no reexports for %d", + id); + } + } + + ebml_w.end_tag(); +} + +#[cfg(stage0)] +fn encode_struct_field_family(ebml_w: &writer::Encoder, + visibility: visibility) { + encode_family(ebml_w, match visibility { + public => 'g', + private => 'j', + inherited => 'N' + }); +} + +#[cfg(not(stage0))] +fn encode_struct_field_family(ebml_w: &mut writer::Encoder, + visibility: visibility) { + encode_family(ebml_w, match visibility { + public => 'g', + private => 'j', + inherited => 'N' + }); +} + +#[cfg(stage0)] +fn encode_visibility(ebml_w: &writer::Encoder, visibility: visibility) { + ebml_w.start_tag(tag_items_data_item_visibility); + let ch = match visibility { + public => 'y', + private => 'n', + inherited => 'i', + }; + ebml_w.wr_str(str::from_char(ch)); + ebml_w.end_tag(); +} + +#[cfg(not(stage0))] +fn encode_visibility(ebml_w: &mut writer::Encoder, visibility: visibility) { + ebml_w.start_tag(tag_items_data_item_visibility); + let ch = match visibility { + public => 'y', + private => 'n', + inherited => 'i', + }; + ebml_w.wr_str(str::from_char(ch)); + ebml_w.end_tag(); +} + +#[cfg(stage0)] +fn encode_self_type(ebml_w: &writer::Encoder, self_type: ast::self_ty_) { + ebml_w.start_tag(tag_item_trait_method_self_ty); + + // Encode the base self type. + match self_type { + sty_static => { + ebml_w.writer.write(&[ 's' as u8 ]); + } + sty_value => { + ebml_w.writer.write(&[ 'v' as u8 ]); + } + sty_region(_, m) => { + // FIXME(#4846) encode custom lifetime + ebml_w.writer.write(&[ '&' as u8 ]); + encode_mutability(ebml_w, m); + } + sty_box(m) => { + ebml_w.writer.write(&[ '@' as u8 ]); + encode_mutability(ebml_w, m); + } + sty_uniq(m) => { + ebml_w.writer.write(&[ '~' as u8 ]); + encode_mutability(ebml_w, m); + } + } + + ebml_w.end_tag(); + + fn encode_mutability(ebml_w: &writer::Encoder, + m: ast::mutability) { + match m { + m_imm => { + ebml_w.writer.write(&[ 'i' as u8 ]); + } + m_mutbl => { + ebml_w.writer.write(&[ 'm' as u8 ]); + } + m_const => { + ebml_w.writer.write(&[ 'c' as u8 ]); + } + } + } +} + +#[cfg(not(stage0))] +fn encode_self_type(ebml_w: &mut writer::Encoder, self_type: ast::self_ty_) { + ebml_w.start_tag(tag_item_trait_method_self_ty); + + // Encode the base self type. + match self_type { + sty_static => { ebml_w.writer.write(&[ 's' as u8 ]); } sty_value => { @@ -476,17 +946,68 @@ fn encode_self_type(ebml_w: &writer::Encoder, self_type: ast::self_ty_) { } } +#[cfg(stage0)] fn encode_method_sort(ebml_w: &writer::Encoder, sort: char) { ebml_w.start_tag(tag_item_trait_method_sort); ebml_w.writer.write(&[ sort as u8 ]); ebml_w.end_tag(); } +#[cfg(not(stage0))] +fn encode_method_sort(ebml_w: &mut writer::Encoder, sort: char) { + ebml_w.start_tag(tag_item_trait_method_sort); + ebml_w.writer.write(&[ sort as u8 ]); + ebml_w.end_tag(); +} + /* Returns an index of items in this class */ -fn encode_info_for_struct(ecx: @EncodeContext, ebml_w: &writer::Encoder, - path: &[ast_map::path_elt], - fields: &[@struct_field], - global_index: @mut~[entry]) -> ~[entry] { +#[cfg(stage0)] +fn encode_info_for_struct(ecx: @EncodeContext, + ebml_w: &writer::Encoder, + path: &[ast_map::path_elt], + fields: &[@struct_field], + global_index: @mut~[entry]) + -> ~[entry] { + /* Each class has its own index, since different classes + may have fields with the same name */ + let index = @mut ~[]; + let tcx = ecx.tcx; + /* We encode both private and public fields -- need to include + private fields to get the offsets right */ + for fields.each |field| { + let (nm, mt, vis) = match field.node.kind { + named_field(nm, mt, vis) => (nm, mt, vis), + unnamed_field => ( + special_idents::unnamed_field, + struct_immutable, + inherited + ) + }; + + let id = field.node.id; + index.push(entry {val: id, pos: ebml_w.writer.tell()}); + global_index.push(entry {val: id, pos: ebml_w.writer.tell()}); + ebml_w.start_tag(tag_items_data_item); + debug!("encode_info_for_struct: doing %s %d", + *tcx.sess.str_of(nm), id); + encode_struct_field_family(ebml_w, vis); + encode_name(ecx, ebml_w, nm); + encode_path(ecx, ebml_w, path, ast_map::path_name(nm)); + encode_type(ecx, ebml_w, node_id_to_type(tcx, id)); + encode_mutability(ebml_w, mt); + encode_def_id(ebml_w, local_def(id)); + ebml_w.end_tag(); + } + /*bad*/copy *index +} + +#[cfg(not(stage0))] +fn encode_info_for_struct(ecx: @EncodeContext, + ebml_w: &mut writer::Encoder, + path: &[ast_map::path_elt], + fields: &[@struct_field], + global_index: @mut ~[entry]) + -> ~[entry] { /* Each class has its own index, since different classes may have fields with the same name */ let index = @mut ~[]; @@ -521,6 +1042,7 @@ fn encode_info_for_struct(ecx: @EncodeContext, ebml_w: &writer::Encoder, } // This is for encoding info for ctors and dtors +#[cfg(stage0)] fn encode_info_for_ctor(ecx: @EncodeContext, ebml_w: &writer::Encoder, id: node_id, @@ -550,6 +1072,37 @@ fn encode_info_for_ctor(ecx: @EncodeContext, ebml_w.end_tag(); } +#[cfg(not(stage0))] +fn encode_info_for_ctor(ecx: @EncodeContext, + ebml_w: &mut writer::Encoder, + id: node_id, + ident: ident, + path: &[ast_map::path_elt], + item: Option, + generics: &ast::Generics) { + ebml_w.start_tag(tag_items_data_item); + encode_name(ecx, ebml_w, ident); + encode_def_id(ebml_w, local_def(id)); + encode_family(ebml_w, purity_fn_family(ast::impure_fn)); + encode_type_param_bounds(ebml_w, ecx, &generics.ty_params); + let its_ty = node_id_to_type(ecx.tcx, id); + debug!("fn name = %s ty = %s its node id = %d", + *ecx.tcx.sess.str_of(ident), + ty_to_str(ecx.tcx, its_ty), id); + encode_type(ecx, ebml_w, its_ty); + encode_path(ecx, ebml_w, path, ast_map::path_name(ident)); + match item { + Some(it) => { + (ecx.encode_inlined_item)(ecx, ebml_w, path, it); + } + None => { + encode_symbol(ecx, ebml_w, id); + } + } + ebml_w.end_tag(); +} + +#[cfg(stage0)] fn encode_info_for_struct_ctor(ecx: @EncodeContext, ebml_w: &writer::Encoder, path: &[ast_map::path_elt], @@ -569,100 +1122,489 @@ fn encode_info_for_struct_ctor(ecx: @EncodeContext, encode_symbol(ecx, ebml_w, ctor_id); } - ebml_w.end_tag(); -} + ebml_w.end_tag(); +} + +#[cfg(not(stage0))] +fn encode_info_for_struct_ctor(ecx: @EncodeContext, + ebml_w: &mut writer::Encoder, + path: &[ast_map::path_elt], + name: ast::ident, + ctor_id: node_id, + index: @mut ~[entry]) { + index.push(entry { val: ctor_id, pos: ebml_w.writer.tell() }); + + ebml_w.start_tag(tag_items_data_item); + encode_def_id(ebml_w, local_def(ctor_id)); + encode_family(ebml_w, 'f'); + encode_name(ecx, ebml_w, name); + encode_type(ecx, ebml_w, node_id_to_type(ecx.tcx, ctor_id)); + encode_path(ecx, ebml_w, path, ast_map::path_name(name)); + + if ecx.item_symbols.contains_key(&ctor_id) { + encode_symbol(ecx, ebml_w, ctor_id); + } + + ebml_w.end_tag(); +} + +#[cfg(stage0)] +fn encode_method_ty_fields(ecx: @EncodeContext, + ebml_w: &writer::Encoder, + method_ty: &ty::method) { + encode_def_id(ebml_w, method_ty.def_id); + encode_name(ecx, ebml_w, method_ty.ident); + encode_ty_type_param_defs(ebml_w, ecx, + method_ty.generics.type_param_defs, + tag_item_method_tps); + encode_transformed_self_ty(ecx, ebml_w, method_ty.transformed_self_ty); + encode_method_fty(ecx, ebml_w, &method_ty.fty); + encode_visibility(ebml_w, method_ty.vis); + encode_self_type(ebml_w, method_ty.self_ty); +} + +#[cfg(not(stage0))] +fn encode_method_ty_fields(ecx: @EncodeContext, + ebml_w: &mut writer::Encoder, + method_ty: &ty::method) { + encode_def_id(ebml_w, method_ty.def_id); + encode_name(ecx, ebml_w, method_ty.ident); + encode_ty_type_param_defs(ebml_w, ecx, + method_ty.generics.type_param_defs, + tag_item_method_tps); + encode_transformed_self_ty(ecx, ebml_w, method_ty.transformed_self_ty); + encode_method_fty(ecx, ebml_w, &method_ty.fty); + encode_visibility(ebml_w, method_ty.vis); + encode_self_type(ebml_w, method_ty.self_ty); +} + +#[cfg(stage0)] +fn encode_info_for_method(ecx: @EncodeContext, + ebml_w: &writer::Encoder, + impl_path: &[ast_map::path_elt], + should_inline: bool, + parent_id: node_id, + m: @method, + owner_generics: &ast::Generics, + method_generics: &ast::Generics) { + debug!("encode_info_for_method: %d %s %u %u", m.id, + *ecx.tcx.sess.str_of(m.ident), + owner_generics.ty_params.len(), + method_generics.ty_params.len()); + ebml_w.start_tag(tag_items_data_item); + + let method_def_id = local_def(m.id); + let method_ty: @ty::method = ty::method(ecx.tcx, method_def_id); + encode_method_ty_fields(ecx, ebml_w, method_ty); + + match m.self_ty.node { + ast::sty_static => { + encode_family(ebml_w, purity_static_method_family(m.purity)); + } + _ => encode_family(ebml_w, purity_fn_family(m.purity)) + } + + let mut combined_ty_params = opt_vec::Empty; + combined_ty_params.push_all(&owner_generics.ty_params); + combined_ty_params.push_all(&method_generics.ty_params); + let len = combined_ty_params.len(); + encode_type_param_bounds(ebml_w, ecx, &combined_ty_params); + + encode_type(ecx, ebml_w, node_id_to_type(ecx.tcx, m.id)); + encode_path(ecx, ebml_w, impl_path, ast_map::path_name(m.ident)); + + if len > 0u || should_inline { + (ecx.encode_inlined_item)( + ecx, ebml_w, impl_path, + ii_method(local_def(parent_id), m)); + } else { + encode_symbol(ecx, ebml_w, m.id); + } + + ebml_w.end_tag(); +} + +#[cfg(not(stage0))] +fn encode_info_for_method(ecx: @EncodeContext, + ebml_w: &mut writer::Encoder, + impl_path: &[ast_map::path_elt], + should_inline: bool, + parent_id: node_id, + m: @method, + owner_generics: &ast::Generics, + method_generics: &ast::Generics) { + debug!("encode_info_for_method: %d %s %u %u", m.id, + *ecx.tcx.sess.str_of(m.ident), + owner_generics.ty_params.len(), + method_generics.ty_params.len()); + ebml_w.start_tag(tag_items_data_item); + + let method_def_id = local_def(m.id); + let method_ty: @ty::method = ty::method(ecx.tcx, method_def_id); + encode_method_ty_fields(ecx, ebml_w, method_ty); + + match m.self_ty.node { + ast::sty_static => { + encode_family(ebml_w, purity_static_method_family(m.purity)); + } + _ => encode_family(ebml_w, purity_fn_family(m.purity)) + } + + let mut combined_ty_params = opt_vec::Empty; + combined_ty_params.push_all(&owner_generics.ty_params); + combined_ty_params.push_all(&method_generics.ty_params); + let len = combined_ty_params.len(); + encode_type_param_bounds(ebml_w, ecx, &combined_ty_params); + + encode_type(ecx, ebml_w, node_id_to_type(ecx.tcx, m.id)); + encode_path(ecx, ebml_w, impl_path, ast_map::path_name(m.ident)); + + if len > 0u || should_inline { + (ecx.encode_inlined_item)( + ecx, ebml_w, impl_path, + ii_method(local_def(parent_id), m)); + } else { + encode_symbol(ecx, ebml_w, m.id); + } + + ebml_w.end_tag(); +} + +fn purity_fn_family(p: purity) -> char { + match p { + unsafe_fn => 'u', + pure_fn => 'p', + impure_fn => 'f', + extern_fn => 'e' + } +} + +fn purity_static_method_family(p: purity) -> char { + match p { + unsafe_fn => 'U', + pure_fn => 'P', + impure_fn => 'F', + _ => fail!(~"extern fn can't be static") + } +} + + +fn should_inline(attrs: &[attribute]) -> bool { + match attr::find_inline_attr(attrs) { + attr::ia_none | attr::ia_never => false, + attr::ia_hint | attr::ia_always => true + } +} + +#[cfg(stage0)] +fn encode_info_for_item(ecx: @EncodeContext, + ebml_w: &writer::Encoder, + item: @item, + index: @mut ~[entry], + path: &[ast_map::path_elt]) { + let tcx = ecx.tcx; + let must_write = + match item.node { + item_enum(_, _) | item_impl(*) | item_trait(*) | item_struct(*) | + item_mod(*) | item_foreign_mod(*) | item_const(*) => true, + _ => false + }; + if !must_write && !reachable(ecx, item.id) { return; } + + fn add_to_index_(item: @item, ebml_w: &writer::Encoder, + index: @mut ~[entry]) { + index.push(entry { val: item.id, pos: ebml_w.writer.tell() }); + } + let add_to_index: &fn() = || add_to_index_(item, ebml_w, index); + + debug!("encoding info for item at %s", + ecx.tcx.sess.codemap.span_to_str(item.span)); + + match item.node { + item_const(_, _) => { + add_to_index(); + ebml_w.start_tag(tag_items_data_item); + encode_def_id(ebml_w, local_def(item.id)); + encode_family(ebml_w, 'c'); + encode_type(ecx, ebml_w, node_id_to_type(tcx, item.id)); + encode_symbol(ecx, ebml_w, item.id); + encode_path(ecx, ebml_w, path, ast_map::path_name(item.ident)); + (ecx.encode_inlined_item)(ecx, ebml_w, path, ii_item(item)); + ebml_w.end_tag(); + } + item_fn(_, purity, _, ref generics, _) => { + add_to_index(); + ebml_w.start_tag(tag_items_data_item); + encode_def_id(ebml_w, local_def(item.id)); + encode_family(ebml_w, purity_fn_family(purity)); + let tps_len = generics.ty_params.len(); + encode_type_param_bounds(ebml_w, ecx, &generics.ty_params); + encode_type(ecx, ebml_w, node_id_to_type(tcx, item.id)); + encode_path(ecx, ebml_w, path, ast_map::path_name(item.ident)); + encode_attributes(ebml_w, item.attrs); + if tps_len > 0u || should_inline(item.attrs) { + (ecx.encode_inlined_item)(ecx, ebml_w, path, ii_item(item)); + } else { + encode_symbol(ecx, ebml_w, item.id); + } + ebml_w.end_tag(); + } + item_mod(ref m) => { + add_to_index(); + encode_info_for_mod(ecx, ebml_w, m, item.id, path, item.ident); + } + item_foreign_mod(_) => { + add_to_index(); + ebml_w.start_tag(tag_items_data_item); + encode_def_id(ebml_w, local_def(item.id)); + encode_family(ebml_w, 'n'); + encode_name(ecx, ebml_w, item.ident); + encode_path(ecx, ebml_w, path, ast_map::path_name(item.ident)); + ebml_w.end_tag(); + } + item_ty(_, ref generics) => { + add_to_index(); + ebml_w.start_tag(tag_items_data_item); + encode_def_id(ebml_w, local_def(item.id)); + encode_family(ebml_w, 'y'); + encode_type_param_bounds(ebml_w, ecx, &generics.ty_params); + encode_type(ecx, ebml_w, node_id_to_type(tcx, item.id)); + encode_name(ecx, ebml_w, item.ident); + encode_path(ecx, ebml_w, path, ast_map::path_name(item.ident)); + encode_region_param(ecx, ebml_w, item); + ebml_w.end_tag(); + } + item_enum(ref enum_definition, ref generics) => { + add_to_index(); + do ebml_w.wr_tag(tag_items_data_item) { + encode_def_id(ebml_w, local_def(item.id)); + encode_family(ebml_w, 't'); + encode_type_param_bounds(ebml_w, ecx, &generics.ty_params); + encode_type(ecx, ebml_w, node_id_to_type(tcx, item.id)); + encode_name(ecx, ebml_w, item.ident); + for (*enum_definition).variants.each |v| { + encode_variant_id(ebml_w, local_def(v.node.id)); + } + (ecx.encode_inlined_item)(ecx, ebml_w, path, ii_item(item)); + encode_path(ecx, ebml_w, path, ast_map::path_name(item.ident)); + encode_region_param(ecx, ebml_w, item); + } + encode_enum_variant_info(ecx, + ebml_w, + item.id, + (*enum_definition).variants, + path, + index, + generics); + } + item_struct(struct_def, ref generics) => { + /* First, encode the fields + These come first because we need to write them to make + the index, and the index needs to be in the item for the + class itself */ + let idx = encode_info_for_struct(ecx, ebml_w, path, + struct_def.fields, index); + + /* Index the class*/ + add_to_index(); + + /* Now, make an item for the class itself */ + ebml_w.start_tag(tag_items_data_item); + encode_def_id(ebml_w, local_def(item.id)); + encode_family(ebml_w, 'S'); + encode_type_param_bounds(ebml_w, ecx, &generics.ty_params); + encode_type(ecx, ebml_w, node_id_to_type(tcx, item.id)); + + // If this is a tuple- or enum-like struct, encode the type of the + // constructor. + if struct_def.fields.len() > 0 && + struct_def.fields[0].node.kind == ast::unnamed_field { + let ctor_id = match struct_def.ctor_id { + Some(ctor_id) => ctor_id, + None => ecx.tcx.sess.bug(~"struct def didn't have ctor id"), + }; + + encode_info_for_struct_ctor(ecx, + ebml_w, + path, + item.ident, + ctor_id, + index); + } + + encode_name(ecx, ebml_w, item.ident); + encode_path(ecx, ebml_w, path, ast_map::path_name(item.ident)); + encode_region_param(ecx, ebml_w, item); + + /* Encode def_ids for each field and method + for methods, write all the stuff get_trait_method + needs to know*/ + for struct_def.fields.each |f| { + match f.node.kind { + named_field(ident, _, vis) => { + ebml_w.start_tag(tag_item_field); + encode_struct_field_family(ebml_w, vis); + encode_name(ecx, ebml_w, ident); + encode_def_id(ebml_w, local_def(f.node.id)); + ebml_w.end_tag(); + } + unnamed_field => { + ebml_w.start_tag(tag_item_unnamed_field); + encode_def_id(ebml_w, local_def(f.node.id)); + ebml_w.end_tag(); + } + } + } + + /* Each class has its own index -- encode it */ + let bkts = create_index(idx); + encode_index(ebml_w, bkts, write_int); + ebml_w.end_tag(); + } + item_impl(ref generics, opt_trait, ty, ref methods) => { + add_to_index(); + ebml_w.start_tag(tag_items_data_item); + encode_def_id(ebml_w, local_def(item.id)); + encode_family(ebml_w, 'i'); + encode_region_param(ecx, ebml_w, item); + encode_type_param_bounds(ebml_w, ecx, &generics.ty_params); + encode_type(ecx, ebml_w, node_id_to_type(tcx, item.id)); + encode_name(ecx, ebml_w, item.ident); + encode_attributes(ebml_w, item.attrs); + match ty.node { + ast::ty_path(path, _) if path.idents.len() == 1 => { + encode_impl_type_basename(ecx, ebml_w, + ast_util::path_to_ident(path)); + } + _ => {} + } + for methods.each |m| { + ebml_w.start_tag(tag_item_impl_method); + let method_def_id = local_def(m.id); + ebml_w.writer.write(str::to_bytes(def_to_str(method_def_id))); + ebml_w.end_tag(); + } + for opt_trait.each |ast_trait_ref| { + let trait_ref = ty::node_id_to_trait_ref(ecx.tcx, ast_trait_ref.ref_id); + encode_trait_ref(ebml_w, ecx, trait_ref, tag_item_trait_ref); + } + encode_path(ecx, ebml_w, path, ast_map::path_name(item.ident)); + ebml_w.end_tag(); + + // >:-< + let mut impl_path = vec::append(~[], path); + impl_path += ~[ast_map::path_name(item.ident)]; + + for methods.each |m| { + index.push(entry {val: m.id, pos: ebml_w.writer.tell()}); + encode_info_for_method(ecx, + ebml_w, + impl_path, + should_inline(m.attrs), + item.id, + *m, + generics, + &m.generics); + } + } + item_trait(ref generics, ref super_traits, ref ms) => { + add_to_index(); + ebml_w.start_tag(tag_items_data_item); + encode_def_id(ebml_w, local_def(item.id)); + encode_family(ebml_w, 'I'); + encode_region_param(ecx, ebml_w, item); + encode_type_param_bounds(ebml_w, ecx, &generics.ty_params); + let trait_def = ty::lookup_trait_def(tcx, local_def(item.id)); + encode_trait_ref(ebml_w, ecx, trait_def.trait_ref, tag_item_trait_ref); + encode_name(ecx, ebml_w, item.ident); + encode_attributes(ebml_w, item.attrs); + for ty::trait_method_def_ids(tcx, local_def(item.id)).each |&method_def_id| { + ebml_w.start_tag(tag_item_trait_method); + encode_def_id(ebml_w, method_def_id); + ebml_w.end_tag(); + } + encode_path(ecx, ebml_w, path, ast_map::path_name(item.ident)); + for super_traits.each |ast_trait_ref| { + let trait_ref = ty::node_id_to_trait_ref(ecx.tcx, ast_trait_ref.ref_id); + encode_trait_ref(ebml_w, ecx, trait_ref, tag_item_super_trait_ref); + } + ebml_w.end_tag(); + + // Now output the method info for each method. + for ty::trait_method_def_ids(tcx, local_def(item.id)).eachi |i, &method_def_id| { + assert!(method_def_id.crate == ast::local_crate); -fn encode_method_ty_fields(ecx: @EncodeContext, - ebml_w: &writer::Encoder, - method_ty: &ty::method) -{ - encode_def_id(ebml_w, method_ty.def_id); - encode_name(ecx, ebml_w, method_ty.ident); - encode_ty_type_param_defs(ebml_w, ecx, - method_ty.generics.type_param_defs, - tag_item_method_tps); - encode_transformed_self_ty(ecx, ebml_w, method_ty.transformed_self_ty); - encode_method_fty(ecx, ebml_w, &method_ty.fty); - encode_visibility(ebml_w, method_ty.vis); - encode_self_type(ebml_w, method_ty.self_ty); -} + let method_ty: @ty::method = ty::method(tcx, method_def_id); -fn encode_info_for_method(ecx: @EncodeContext, - ebml_w: &writer::Encoder, - impl_path: &[ast_map::path_elt], - should_inline: bool, - parent_id: node_id, - m: @method, - owner_generics: &ast::Generics, - method_generics: &ast::Generics) { - debug!("encode_info_for_method: %d %s %u %u", m.id, - *ecx.tcx.sess.str_of(m.ident), - owner_generics.ty_params.len(), - method_generics.ty_params.len()); - ebml_w.start_tag(tag_items_data_item); + index.push(entry {val: method_def_id.node, pos: ebml_w.writer.tell()}); - let method_def_id = local_def(m.id); - let method_ty: @ty::method = ty::method(ecx.tcx, method_def_id); - encode_method_ty_fields(ecx, ebml_w, method_ty); + ebml_w.start_tag(tag_items_data_item); - match m.self_ty.node { - ast::sty_static => { - encode_family(ebml_w, purity_static_method_family(m.purity)); - } - _ => encode_family(ebml_w, purity_fn_family(m.purity)) - } + encode_method_ty_fields(ecx, ebml_w, method_ty); - let mut combined_ty_params = opt_vec::Empty; - combined_ty_params.push_all(&owner_generics.ty_params); - combined_ty_params.push_all(&method_generics.ty_params); - let len = combined_ty_params.len(); - encode_type_param_bounds(ebml_w, ecx, &combined_ty_params); + encode_parent_item(ebml_w, local_def(item.id)); - encode_type(ecx, ebml_w, node_id_to_type(ecx.tcx, m.id)); - encode_path(ecx, ebml_w, impl_path, ast_map::path_name(m.ident)); + let mut trait_path = vec::append(~[], path); + trait_path.push(ast_map::path_name(item.ident)); + encode_path(ecx, ebml_w, trait_path, ast_map::path_name(method_ty.ident)); - if len > 0u || should_inline { - (ecx.encode_inlined_item)( - ecx, ebml_w, impl_path, - ii_method(local_def(parent_id), m)); - } else { - encode_symbol(ecx, ebml_w, m.id); - } + match method_ty.self_ty { + sty_static => { + encode_family(ebml_w, + purity_static_method_family( + method_ty.fty.purity)); - ebml_w.end_tag(); -} + let tpt = ty::lookup_item_type(tcx, method_def_id); + encode_ty_type_param_defs(ebml_w, ecx, + tpt.generics.type_param_defs, + tag_items_data_item_ty_param_bounds); + encode_type(ecx, ebml_w, tpt.ty); + } -fn purity_fn_family(p: purity) -> char { - match p { - unsafe_fn => 'u', - pure_fn => 'p', - impure_fn => 'f', - extern_fn => 'e' - } -} + _ => { + encode_family(ebml_w, + purity_fn_family( + method_ty.fty.purity)); + } + } -fn purity_static_method_family(p: purity) -> char { - match p { - unsafe_fn => 'U', - pure_fn => 'P', - impure_fn => 'F', - _ => fail!(~"extern fn can't be static") - } -} + match ms[i] { + required(_) => { + encode_method_sort(ebml_w, 'r'); + } + provided(m) => { + // This is obviously a bogus assert but I don't think this + // ever worked before anyhow...near as I can tell, before + // we would emit two items. + if method_ty.self_ty == sty_static { + tcx.sess.span_unimpl( + item.span, + fmt!("Method %s is both provided and static", + *tcx.sess.intr().get(method_ty.ident))); + } + encode_type_param_bounds(ebml_w, ecx, + &m.generics.ty_params); + encode_method_sort(ebml_w, 'p'); + (ecx.encode_inlined_item)( + ecx, ebml_w, path, + ii_method(local_def(item.id), m)); + } + } -fn should_inline(attrs: &[attribute]) -> bool { - match attr::find_inline_attr(attrs) { - attr::ia_none | attr::ia_never => false, - attr::ia_hint | attr::ia_always => true + ebml_w.end_tag(); + } + } + item_mac(*) => fail!(~"item macros unimplemented") } } - -fn encode_info_for_item(ecx: @EncodeContext, ebml_w: &writer::Encoder, - item: @item, index: @mut ~[entry], +#[cfg(not(stage0))] +fn encode_info_for_item(ecx: @EncodeContext, + ebml_w: &mut writer::Encoder, + item: @item, + index: @mut ~[entry], path: &[ast_map::path_elt]) { - let tcx = ecx.tcx; let must_write = match item.node { @@ -737,19 +1679,21 @@ fn encode_info_for_item(ecx: @EncodeContext, ebml_w: &writer::Encoder, } item_enum(ref enum_definition, ref generics) => { add_to_index(); - do ebml_w.wr_tag(tag_items_data_item) { - encode_def_id(ebml_w, local_def(item.id)); - encode_family(ebml_w, 't'); - encode_type_param_bounds(ebml_w, ecx, &generics.ty_params); - encode_type(ecx, ebml_w, node_id_to_type(tcx, item.id)); - encode_name(ecx, ebml_w, item.ident); - for (*enum_definition).variants.each |v| { - encode_variant_id(ebml_w, local_def(v.node.id)); - } - (ecx.encode_inlined_item)(ecx, ebml_w, path, ii_item(item)); - encode_path(ecx, ebml_w, path, ast_map::path_name(item.ident)); - encode_region_param(ecx, ebml_w, item); + + ebml_w.start_tag(tag_items_data_item); + encode_def_id(ebml_w, local_def(item.id)); + encode_family(ebml_w, 't'); + encode_type_param_bounds(ebml_w, ecx, &generics.ty_params); + encode_type(ecx, ebml_w, node_id_to_type(tcx, item.id)); + encode_name(ecx, ebml_w, item.ident); + for (*enum_definition).variants.each |v| { + encode_variant_id(ebml_w, local_def(v.node.id)); } + (ecx.encode_inlined_item)(ecx, ebml_w, path, ii_item(item)); + encode_path(ecx, ebml_w, path, ast_map::path_name(item.ident)); + encode_region_param(ecx, ebml_w, item); + ebml_w.end_tag(); + encode_enum_variant_info(ecx, ebml_w, item.id, @@ -960,6 +1904,7 @@ fn encode_info_for_item(ecx: @EncodeContext, ebml_w: &writer::Encoder, } } +#[cfg(stage0)] fn encode_info_for_foreign_item(ecx: @EncodeContext, ebml_w: &writer::Encoder, nitem: @foreign_item, @@ -994,8 +1939,46 @@ fn encode_info_for_foreign_item(ecx: @EncodeContext, ebml_w.end_tag(); } -fn encode_info_for_items(ecx: @EncodeContext, ebml_w: &writer::Encoder, - crate: &crate) -> ~[entry] { +#[cfg(not(stage0))] +fn encode_info_for_foreign_item(ecx: @EncodeContext, + ebml_w: &mut writer::Encoder, + nitem: @foreign_item, + index: @mut ~[entry], + path: ast_map::path, + abi: AbiSet) { + if !reachable(ecx, nitem.id) { return; } + index.push(entry { val: nitem.id, pos: ebml_w.writer.tell() }); + + ebml_w.start_tag(tag_items_data_item); + match nitem.node { + foreign_item_fn(_, purity, ref generics) => { + encode_def_id(ebml_w, local_def(nitem.id)); + encode_family(ebml_w, purity_fn_family(purity)); + encode_type_param_bounds(ebml_w, ecx, &generics.ty_params); + encode_type(ecx, ebml_w, node_id_to_type(ecx.tcx, nitem.id)); + if abi.is_intrinsic() { + (ecx.encode_inlined_item)(ecx, ebml_w, path, ii_foreign(nitem)); + } else { + encode_symbol(ecx, ebml_w, nitem.id); + } + encode_path(ecx, ebml_w, path, ast_map::path_name(nitem.ident)); + } + foreign_item_const(*) => { + encode_def_id(ebml_w, local_def(nitem.id)); + encode_family(ebml_w, 'c'); + encode_type(ecx, ebml_w, node_id_to_type(ecx.tcx, nitem.id)); + encode_symbol(ecx, ebml_w, nitem.id); + encode_path(ecx, ebml_w, path, ast_map::path_name(nitem.ident)); + } + } + ebml_w.end_tag(); +} + +#[cfg(stage0)] +fn encode_info_for_items(ecx: @EncodeContext, + ebml_w: &writer::Encoder, + crate: &crate) + -> ~[entry] { let index = @mut ~[]; ebml_w.start_tag(tag_items_data); index.push(entry { val: crate_node_id, pos: ebml_w.writer.tell() }); @@ -1038,6 +2021,57 @@ fn encode_info_for_items(ecx: @EncodeContext, ebml_w: &writer::Encoder, return /*bad*/copy *index; } +#[cfg(not(stage0))] +fn encode_info_for_items(ecx: @EncodeContext, + ebml_w: &mut writer::Encoder, + crate: &crate) + -> ~[entry] { + let index = @mut ~[]; + ebml_w.start_tag(tag_items_data); + index.push(entry { val: crate_node_id, pos: ebml_w.writer.tell() }); + encode_info_for_mod(ecx, ebml_w, &crate.node.module, + crate_node_id, ~[], + syntax::parse::token::special_idents::invalid); + visit::visit_crate(crate, (), visit::mk_vt(@visit::Visitor { + visit_expr: |_e, _cx, _v| { }, + visit_item: { + let ebml_w = copy *ebml_w; + |i, cx, v| { + visit::visit_item(i, cx, v); + match *ecx.tcx.items.get(&i.id) { + ast_map::node_item(_, pt) => { + let mut ebml_w = copy ebml_w; + encode_info_for_item(ecx, &mut ebml_w, i, index, *pt); + } + _ => fail!(~"bad item") + } + } + }, + visit_foreign_item: { + let ebml_w = copy *ebml_w; + |ni, cx, v| { + visit::visit_foreign_item(ni, cx, v); + match *ecx.tcx.items.get(&ni.id) { + ast_map::node_foreign_item(_, abi, _, pt) => { + let mut ebml_w = copy ebml_w; + encode_info_for_foreign_item(ecx, + &mut ebml_w, + ni, + index, + /*bad*/copy *pt, + abi); + } + // case for separate item and foreign-item tables + _ => fail!(~"bad foreign item") + } + } + }, + ..*visit::default_visitor() + })); + ebml_w.end_tag(); + return /*bad*/copy *index; +} + // Path and definition ID indexing @@ -1049,15 +2083,47 @@ fn create_index(index: ~[entry]) -> let h = elt.val.hash() as uint; buckets[h % 256].push(*elt); } - - let mut buckets_frozen = ~[]; - for buckets.each |bucket| { - buckets_frozen.push(@/*bad*/copy **bucket); + + let mut buckets_frozen = ~[]; + for buckets.each |bucket| { + buckets_frozen.push(@/*bad*/copy **bucket); + } + return buckets_frozen; +} + +#[cfg(stage0)] +fn encode_index(ebml_w: &writer::Encoder, + buckets: ~[@~[entry]], + write_fn: &fn(@io::Writer, &T)) { + let writer = ebml_w.writer; + ebml_w.start_tag(tag_index); + let mut bucket_locs: ~[uint] = ~[]; + ebml_w.start_tag(tag_index_buckets); + for buckets.each |bucket| { + bucket_locs.push(ebml_w.writer.tell()); + ebml_w.start_tag(tag_index_buckets_bucket); + for vec::each(**bucket) |elt| { + ebml_w.start_tag(tag_index_buckets_bucket_elt); + assert!(elt.pos < 0xffff_ffff); + writer.write_be_u32(elt.pos as u32); + write_fn(writer, &elt.val); + ebml_w.end_tag(); + } + ebml_w.end_tag(); + } + ebml_w.end_tag(); + ebml_w.start_tag(tag_index_table); + for bucket_locs.each |pos| { + assert!(*pos < 0xffff_ffff); + writer.write_be_u32(*pos as u32); } - return buckets_frozen; + ebml_w.end_tag(); + ebml_w.end_tag(); } -fn encode_index(ebml_w: &writer::Encoder, buckets: ~[@~[entry]], +#[cfg(not(stage0))] +fn encode_index(ebml_w: &mut writer::Encoder, + buckets: ~[@~[entry]], write_fn: &fn(@io::Writer, &T)) { let writer = ebml_w.writer; ebml_w.start_tag(tag_index); @@ -1085,13 +2151,16 @@ fn encode_index(ebml_w: &writer::Encoder, buckets: ~[@~[entry]], ebml_w.end_tag(); } -fn write_str(writer: @io::Writer, s: ~str) { writer.write_str(s); } +fn write_str(writer: @io::Writer, s: ~str) { + writer.write_str(s); +} fn write_int(writer: @io::Writer, &n: &int) { assert!(n < 0x7fff_ffff); writer.write_be_u32(n as u32); } +#[cfg(stage0)] fn encode_meta_item(ebml_w: &writer::Encoder, mi: @meta_item) { match mi.node { meta_word(name) => { @@ -1129,6 +2198,45 @@ fn encode_meta_item(ebml_w: &writer::Encoder, mi: @meta_item) { } } +#[cfg(not(stage0))] +fn encode_meta_item(ebml_w: &mut writer::Encoder, mi: @meta_item) { + match mi.node { + meta_word(name) => { + ebml_w.start_tag(tag_meta_item_word); + ebml_w.start_tag(tag_meta_item_name); + ebml_w.writer.write(str::to_bytes(*name)); + ebml_w.end_tag(); + ebml_w.end_tag(); + } + meta_name_value(name, value) => { + match value.node { + lit_str(value) => { + ebml_w.start_tag(tag_meta_item_name_value); + ebml_w.start_tag(tag_meta_item_name); + ebml_w.writer.write(str::to_bytes(*name)); + ebml_w.end_tag(); + ebml_w.start_tag(tag_meta_item_value); + ebml_w.writer.write(str::to_bytes(*value)); + ebml_w.end_tag(); + ebml_w.end_tag(); + } + _ => {/* FIXME (#623): encode other variants */ } + } + } + meta_list(name, ref items) => { + ebml_w.start_tag(tag_meta_item_list); + ebml_w.start_tag(tag_meta_item_name); + ebml_w.writer.write(str::to_bytes(*name)); + ebml_w.end_tag(); + for items.each |inner_item| { + encode_meta_item(ebml_w, *inner_item); + } + ebml_w.end_tag(); + } + } +} + +#[cfg(stage0)] fn encode_attributes(ebml_w: &writer::Encoder, attrs: &[attribute]) { ebml_w.start_tag(tag_attributes); for attrs.each |attr| { @@ -1139,6 +2247,17 @@ fn encode_attributes(ebml_w: &writer::Encoder, attrs: &[attribute]) { ebml_w.end_tag(); } +#[cfg(not(stage0))] +fn encode_attributes(ebml_w: &mut writer::Encoder, attrs: &[attribute]) { + ebml_w.start_tag(tag_attributes); + for attrs.each |attr| { + ebml_w.start_tag(tag_attribute); + encode_meta_item(ebml_w, attr.node.value); + ebml_w.end_tag(); + } + ebml_w.end_tag(); +} + // So there's a special crate attribute called 'link' which defines the // metadata that Rust cares about for linking crates. This attribute requires // 'name' and 'vers' items, so if the user didn't provide them we will throw @@ -1193,6 +2312,7 @@ fn synthesize_crate_attrs(ecx: @EncodeContext, return attrs; } +#[cfg(stage0)] fn encode_crate_deps(ecx: @EncodeContext, ebml_w: &writer::Encoder, cstore: @mut cstore::CStore) { @@ -1235,6 +2355,50 @@ fn encode_crate_deps(ecx: @EncodeContext, ebml_w.end_tag(); } +#[cfg(not(stage0))] +fn encode_crate_deps(ecx: @EncodeContext, + ebml_w: &mut writer::Encoder, + cstore: @mut cstore::CStore) { + fn get_ordered_deps(ecx: @EncodeContext, cstore: @mut cstore::CStore) + -> ~[decoder::crate_dep] { + type numdep = decoder::crate_dep; + + // Pull the cnums and name,vers,hash out of cstore + let mut deps = ~[]; + do cstore::iter_crate_data(cstore) |key, val| { + let dep = decoder::crate_dep {cnum: key, + name: ecx.tcx.sess.ident_of(/*bad*/ copy *val.name), + vers: decoder::get_crate_vers(val.data), + hash: decoder::get_crate_hash(val.data)}; + deps.push(dep); + }; + + // Sort by cnum + std::sort::quick_sort(deps, |kv1, kv2| kv1.cnum <= kv2.cnum); + + // Sanity-check the crate numbers + let mut expected_cnum = 1; + for deps.each |n| { + assert!((n.cnum == expected_cnum)); + expected_cnum += 1; + } + + // mut -> immutable hack for vec::map + deps.slice(0, deps.len()).to_owned() + } + + // We're just going to write a list of crate 'name-hash-version's, with + // the assumption that they are numbered 1 to n. + // FIXME (#2166): This is not nearly enough to support correct versioning + // but is enough to get transitive crate dependencies working. + ebml_w.start_tag(tag_crate_deps); + for get_ordered_deps(ecx, cstore).each |dep| { + encode_crate_dep(ecx, ebml_w, *dep); + } + ebml_w.end_tag(); +} + +#[cfg(stage0)] fn encode_lang_items(ecx: @EncodeContext, ebml_w: &writer::Encoder) { ebml_w.start_tag(tag_lang_items); @@ -1259,8 +2423,47 @@ fn encode_lang_items(ecx: @EncodeContext, ebml_w: &writer::Encoder) { ebml_w.end_tag(); // tag_lang_items } -fn encode_link_args(ecx: @EncodeContext, - ebml_w: &writer::Encoder) { +#[cfg(not(stage0))] +fn encode_lang_items(ecx: @EncodeContext, ebml_w: &mut writer::Encoder) { + ebml_w.start_tag(tag_lang_items); + + for ecx.tcx.lang_items.each_item |def_id, i| { + if def_id.crate != local_crate { + loop; + } + + ebml_w.start_tag(tag_lang_items_item); + + ebml_w.start_tag(tag_lang_items_item_id); + ebml_w.writer.write_be_u32(i as u32); + ebml_w.end_tag(); // tag_lang_items_item_id + + ebml_w.start_tag(tag_lang_items_item_node_id); + ebml_w.writer.write_be_u32(def_id.node as u32); + ebml_w.end_tag(); // tag_lang_items_item_node_id + + ebml_w.end_tag(); // tag_lang_items_item + } + + ebml_w.end_tag(); // tag_lang_items +} + +#[cfg(stage0)] +fn encode_link_args(ecx: @EncodeContext, ebml_w: &writer::Encoder) { + ebml_w.start_tag(tag_link_args); + + let link_args = cstore::get_used_link_args(ecx.cstore); + for link_args.each |link_arg| { + ebml_w.start_tag(tag_link_args_arg); + ebml_w.writer.write_str(link_arg.to_str()); + ebml_w.end_tag(); + } + + ebml_w.end_tag(); +} + +#[cfg(not(stage0))] +fn encode_link_args(ecx: @EncodeContext, ebml_w: &mut writer::Encoder) { ebml_w.start_tag(tag_link_args); let link_args = cstore::get_used_link_args(ecx.cstore); @@ -1273,7 +2476,26 @@ fn encode_link_args(ecx: @EncodeContext, ebml_w.end_tag(); } -fn encode_crate_dep(ecx: @EncodeContext, ebml_w: &writer::Encoder, +#[cfg(stage0)] +fn encode_crate_dep(ecx: @EncodeContext, + ebml_w: &writer::Encoder, + dep: decoder::crate_dep) { + ebml_w.start_tag(tag_crate_dep); + ebml_w.start_tag(tag_crate_dep_name); + ebml_w.writer.write(str::to_bytes(*ecx.tcx.sess.str_of(dep.name))); + ebml_w.end_tag(); + ebml_w.start_tag(tag_crate_dep_vers); + ebml_w.writer.write(str::to_bytes(*dep.vers)); + ebml_w.end_tag(); + ebml_w.start_tag(tag_crate_dep_hash); + ebml_w.writer.write(str::to_bytes(*dep.hash)); + ebml_w.end_tag(); + ebml_w.end_tag(); +} + +#[cfg(not(stage0))] +fn encode_crate_dep(ecx: @EncodeContext, + ebml_w: &mut writer::Encoder, dep: decoder::crate_dep) { ebml_w.start_tag(tag_crate_dep); ebml_w.start_tag(tag_crate_dep_name); @@ -1288,12 +2510,20 @@ fn encode_crate_dep(ecx: @EncodeContext, ebml_w: &writer::Encoder, ebml_w.end_tag(); } +#[cfg(stage0)] fn encode_hash(ebml_w: &writer::Encoder, hash: &str) { ebml_w.start_tag(tag_crate_hash); ebml_w.writer.write(str::to_bytes(hash)); ebml_w.end_tag(); } +#[cfg(not(stage0))] +fn encode_hash(ebml_w: &mut writer::Encoder, hash: &str) { + ebml_w.start_tag(tag_crate_hash); + ebml_w.writer.write(str::to_bytes(hash)); + ebml_w.end_tag(); +} + // NB: Increment this as you change the metadata encoding version. pub static metadata_encoding_version : &'static [u8] = &[0x72, //'r' as u8, @@ -1302,6 +2532,7 @@ pub static metadata_encoding_version : &'static [u8] = 0x74, //'t' as u8, 0, 0, 0, 1 ]; +#[cfg(stage0)] pub fn encode_metadata(parms: EncodeParams, crate: &crate) -> ~[u8] { let wr = @io::BytesWriter(); let stats = Stats { @@ -1408,6 +2639,113 @@ pub fn encode_metadata(parms: EncodeParams, crate: &crate) -> ~[u8] { }) + flate::deflate_bytes(wr.bytes) } +#[cfg(not(stage0))] +pub fn encode_metadata(parms: EncodeParams, crate: &crate) -> ~[u8] { + let wr = @io::BytesWriter(); + let stats = Stats { + inline_bytes: 0, + attr_bytes: 0, + dep_bytes: 0, + lang_item_bytes: 0, + link_args_bytes: 0, + item_bytes: 0, + index_bytes: 0, + zero_bytes: 0, + total_bytes: 0, + n_inlines: 0 + }; + let EncodeParams{item_symbols, diag, tcx, reachable, reexports2, + discrim_symbols, cstore, encode_inlined_item, + link_meta, _} = parms; + let ecx = @EncodeContext { + diag: diag, + tcx: tcx, + stats: @mut stats, + reachable: reachable, + reexports2: reexports2, + item_symbols: item_symbols, + discrim_symbols: discrim_symbols, + link_meta: link_meta, + cstore: cstore, + encode_inlined_item: encode_inlined_item, + type_abbrevs: @mut HashMap::new() + }; + + let mut ebml_w = writer::Encoder(wr as @io::Writer); + + encode_hash(&mut ebml_w, ecx.link_meta.extras_hash); + + let mut i = wr.pos; + let crate_attrs = synthesize_crate_attrs(ecx, crate); + encode_attributes(&mut ebml_w, crate_attrs); + ecx.stats.attr_bytes = wr.pos - i; + + i = wr.pos; + encode_crate_deps(ecx, &mut ebml_w, ecx.cstore); + ecx.stats.dep_bytes = wr.pos - i; + + // Encode the language items. + i = wr.pos; + encode_lang_items(ecx, &mut ebml_w); + ecx.stats.lang_item_bytes = wr.pos - i; + + // Encode the link args. + i = wr.pos; + encode_link_args(ecx, &mut ebml_w); + ecx.stats.link_args_bytes = wr.pos - i; + + // Encode and index the items. + ebml_w.start_tag(tag_items); + i = wr.pos; + let items_index = encode_info_for_items(ecx, &mut ebml_w, crate); + ecx.stats.item_bytes = wr.pos - i; + + i = wr.pos; + let items_buckets = create_index(items_index); + encode_index(&mut ebml_w, items_buckets, write_int); + ecx.stats.index_bytes = wr.pos - i; + ebml_w.end_tag(); + + ecx.stats.total_bytes = wr.pos; + + if (tcx.sess.meta_stats()) { + + do wr.bytes.each |e| { + if *e == 0 { + ecx.stats.zero_bytes += 1; + } + true + } + + io::println("metadata stats:"); + io::println(fmt!(" inline bytes: %u", ecx.stats.inline_bytes)); + io::println(fmt!(" attribute bytes: %u", ecx.stats.attr_bytes)); + io::println(fmt!(" dep bytes: %u", ecx.stats.dep_bytes)); + io::println(fmt!(" lang item bytes: %u", ecx.stats.lang_item_bytes)); + io::println(fmt!(" link args bytes: %u", ecx.stats.link_args_bytes)); + io::println(fmt!(" item bytes: %u", ecx.stats.item_bytes)); + io::println(fmt!(" index bytes: %u", ecx.stats.index_bytes)); + io::println(fmt!(" zero bytes: %u", ecx.stats.zero_bytes)); + io::println(fmt!(" total bytes: %u", ecx.stats.total_bytes)); + } + + // Pad this, since something (LLVM, presumably) is cutting off the + // remaining % 4 bytes. + wr.write(&[0u8, 0u8, 0u8, 0u8]); + + // FIXME #3396: weird bug here, for reasons unclear this emits random + // looking bytes (mostly 0x1) if we use the version byte-array constant + // above; so we use a string constant inline instead. + // + // Should be: + // + // vec::from_slice(metadata_encoding_version) + + + (do str::as_bytes(&~"rust\x00\x00\x00\x01") |bytes| { + vec::slice(*bytes, 0, 8).to_vec() + }) + flate::deflate_bytes(wr.bytes) +} + // Get the encoded string for a type pub fn encoded_ty(tcx: ty::ctxt, t: ty::t) -> ~str { let cx = @tyencode::ctxt { diff --git a/src/librustc/middle/astencode.rs b/src/librustc/middle/astencode.rs index 2f753523a7bc0..2a9f19fc84695 100644 --- a/src/librustc/middle/astencode.rs +++ b/src/librustc/middle/astencode.rs @@ -77,6 +77,7 @@ trait tr_intern { // ______________________________________________________________________ // Top-level methods. +#[cfg(stage0)] pub fn encode_inlined_item(ecx: @e::EncodeContext, ebml_w: &writer::Encoder, path: &[ast_map::path_elt], @@ -100,6 +101,32 @@ pub fn encode_inlined_item(ecx: @e::EncodeContext, ebml_w.writer.tell()); } +#[cfg(not(stage0))] +pub fn encode_inlined_item(ecx: @e::EncodeContext, + ebml_w: &mut writer::Encoder, + path: &[ast_map::path_elt], + ii: ast::inlined_item, + maps: Maps) { + debug!("> Encoding inlined item: %s::%s (%u)", + ast_map::path_to_str(path, ecx.tcx.sess.parse_sess.interner), + *ecx.tcx.sess.str_of(ii.ident()), + ebml_w.writer.tell()); + + let id_range = ast_util::compute_id_range_for_inlined_item(&ii); + + ebml_w.start_tag(c::tag_ast as uint); + id_range.encode(ebml_w); + encode_ast(ebml_w, simplify_ast(&ii)); + encode_side_tables_for_ii(ecx, maps, ebml_w, &ii); + ebml_w.end_tag(); + + debug!("< Encoded inlined fn: %s::%s (%u)", + ast_map::path_to_str(path, ecx.tcx.sess.parse_sess.interner), + *ecx.tcx.sess.str_of(ii.ident()), + ebml_w.writer.tell()); +} + +#[cfg(stage0)] pub fn decode_inlined_item(cdata: @cstore::crate_metadata, tcx: ty::ctxt, maps: Maps, @@ -145,6 +172,52 @@ pub fn decode_inlined_item(cdata: @cstore::crate_metadata, } } +#[cfg(not(stage0))] +pub fn decode_inlined_item(cdata: @cstore::crate_metadata, + tcx: ty::ctxt, + maps: Maps, + path: ast_map::path, + par_doc: ebml::Doc) + -> Option { + let dcx = @DecodeContext { + cdata: cdata, + tcx: tcx, + maps: maps + }; + match par_doc.opt_child(c::tag_ast) { + None => None, + Some(ast_doc) => { + debug!("> Decoding inlined fn: %s::?", + ast_map::path_to_str(path, tcx.sess.parse_sess.interner)); + let mut ast_dsr = reader::Decoder(ast_doc); + let from_id_range = Decodable::decode(&mut ast_dsr); + let to_id_range = reserve_id_range(dcx.tcx.sess, from_id_range); + let xcx = @ExtendedDecodeContext { + dcx: dcx, + from_id_range: from_id_range, + to_id_range: to_id_range + }; + let raw_ii = decode_ast(ast_doc); + let ii = renumber_ast(xcx, raw_ii); + debug!("Fn named: %s", *tcx.sess.str_of(ii.ident())); + debug!("< Decoded inlined fn: %s::%s", + ast_map::path_to_str(path, tcx.sess.parse_sess.interner), + *tcx.sess.str_of(ii.ident())); + ast_map::map_decoded_item(tcx.sess.diagnostic(), + dcx.tcx.items, path, &ii); + decode_side_tables(xcx, ast_doc); + match ii { + ast::ii_item(i) => { + debug!(">>> DECODED ITEM >>>\n%s\n<<< DECODED ITEM <<<", + syntax::print::pprust::item_to_str(i, tcx.sess.intr())); + } + _ => { } + } + Some(ii) + } + } +} + // ______________________________________________________________________ // Enumerating the IDs which appear in an AST @@ -236,28 +309,56 @@ impl tr for span { } } +#[cfg(stage0)] trait def_id_encoder_helpers { fn emit_def_id(&self, did: ast::def_id); } +#[cfg(not(stage0))] +trait def_id_encoder_helpers { + fn emit_def_id(&mut self, did: ast::def_id); +} + +#[cfg(stage0)] impl def_id_encoder_helpers for S { fn emit_def_id(&self, did: ast::def_id) { did.encode(self) } } +#[cfg(not(stage0))] +impl def_id_encoder_helpers for S { + fn emit_def_id(&mut self, did: ast::def_id) { + did.encode(self) + } +} + +#[cfg(stage0)] trait def_id_decoder_helpers { fn read_def_id(&self, xcx: @ExtendedDecodeContext) -> ast::def_id; } -impl def_id_decoder_helpers for D { +#[cfg(not(stage0))] +trait def_id_decoder_helpers { + fn read_def_id(&mut self, xcx: @ExtendedDecodeContext) -> ast::def_id; +} +#[cfg(stage0)] +impl def_id_decoder_helpers for D { fn read_def_id(&self, xcx: @ExtendedDecodeContext) -> ast::def_id { let did: ast::def_id = Decodable::decode(self); did.tr(xcx) } } +#[cfg(not(stage0))] +impl def_id_decoder_helpers for D { + fn read_def_id(&mut self, xcx: @ExtendedDecodeContext) -> ast::def_id { + let did: ast::def_id = Decodable::decode(self); + did.tr(xcx) + } +} + // ______________________________________________________________________ // Encoding and decoding the AST itself // @@ -273,12 +374,20 @@ impl def_id_decoder_helpers for D { // We also have to adjust the spans: for now we just insert a dummy span, // but eventually we should add entries to the local codemap as required. +#[cfg(stage0)] fn encode_ast(ebml_w: &writer::Encoder, item: ast::inlined_item) { do ebml_w.wr_tag(c::tag_tree as uint) { item.encode(ebml_w) } } +#[cfg(not(stage0))] +fn encode_ast(ebml_w: &mut writer::Encoder, item: ast::inlined_item) { + ebml_w.start_tag(c::tag_tree as uint); + item.encode(ebml_w); + ebml_w.end_tag(); +} + // Produces a simplified copy of the AST which does not include things // that we do not need to or do not want to export. For example, we // do not include any nested items: if these nested items are to be @@ -330,12 +439,20 @@ fn simplify_ast(ii: &ast::inlined_item) -> ast::inlined_item { } } +#[cfg(stage0)] fn decode_ast(par_doc: ebml::Doc) -> ast::inlined_item { let chi_doc = par_doc.get(c::tag_tree as uint); let d = &reader::Decoder(chi_doc); Decodable::decode(d) } +#[cfg(not(stage0))] +fn decode_ast(par_doc: ebml::Doc) -> ast::inlined_item { + let chi_doc = par_doc.get(c::tag_tree as uint); + let mut d = reader::Decoder(chi_doc); + Decodable::decode(&mut d) +} + fn renumber_ast(xcx: @ExtendedDecodeContext, ii: ast::inlined_item) -> ast::inlined_item { let fld = fold::make_fold(@fold::AstFoldFns{ @@ -360,16 +477,30 @@ fn renumber_ast(xcx: @ExtendedDecodeContext, ii: ast::inlined_item) // ______________________________________________________________________ // Encoding and decoding of ast::def +#[cfg(stage0)] fn encode_def(ebml_w: &writer::Encoder, def: ast::def) { def.encode(ebml_w) } +#[cfg(not(stage0))] +fn encode_def(ebml_w: &mut writer::Encoder, def: ast::def) { + def.encode(ebml_w) +} + +#[cfg(stage0)] fn decode_def(xcx: @ExtendedDecodeContext, doc: ebml::Doc) -> ast::def { let dsr = &reader::Decoder(doc); let def: ast::def = Decodable::decode(dsr); def.tr(xcx) } +#[cfg(not(stage0))] +fn decode_def(xcx: @ExtendedDecodeContext, doc: ebml::Doc) -> ast::def { + let mut dsr = reader::Decoder(doc); + let def: ast::def = Decodable::decode(&mut dsr); + def.tr(xcx) +} + impl tr for ast::def { fn tr(&self, xcx: @ExtendedDecodeContext) -> ast::def { match *self { @@ -471,18 +602,41 @@ impl tr for ty::bound_region { // ______________________________________________________________________ // Encoding and decoding of freevar information +#[cfg(stage0)] fn encode_freevar_entry(ebml_w: &writer::Encoder, fv: @freevar_entry) { (*fv).encode(ebml_w) } +#[cfg(not(stage0))] +fn encode_freevar_entry(ebml_w: &mut writer::Encoder, fv: @freevar_entry) { + (*fv).encode(ebml_w) +} + +#[cfg(stage0)] trait ebml_decoder_helper { fn read_freevar_entry(&self, xcx: @ExtendedDecodeContext) - -> freevar_entry; + -> freevar_entry; +} + +#[cfg(not(stage0))] +trait ebml_decoder_helper { + fn read_freevar_entry(&mut self, xcx: @ExtendedDecodeContext) + -> freevar_entry; } +#[cfg(stage0)] impl ebml_decoder_helper for reader::Decoder { fn read_freevar_entry(&self, xcx: @ExtendedDecodeContext) - -> freevar_entry { + -> freevar_entry { + let fv: freevar_entry = Decodable::decode(self); + fv.tr(xcx) + } +} + +#[cfg(not(stage0))] +impl ebml_decoder_helper for reader::Decoder { + fn read_freevar_entry(&mut self, xcx: @ExtendedDecodeContext) + -> freevar_entry { let fv: freevar_entry = Decodable::decode(self); fv.tr(xcx) } @@ -500,14 +654,31 @@ impl tr for freevar_entry { // ______________________________________________________________________ // Encoding and decoding of CaptureVar information +#[cfg(stage0)] trait capture_var_helper { fn read_capture_var(&self, xcx: @ExtendedDecodeContext) - -> moves::CaptureVar; + -> moves::CaptureVar; } +#[cfg(not(stage0))] +trait capture_var_helper { + fn read_capture_var(&mut self, xcx: @ExtendedDecodeContext) + -> moves::CaptureVar; +} + +#[cfg(stage0)] impl capture_var_helper for reader::Decoder { fn read_capture_var(&self, xcx: @ExtendedDecodeContext) - -> moves::CaptureVar { + -> moves::CaptureVar { + let cvar: moves::CaptureVar = Decodable::decode(self); + cvar.tr(xcx) + } +} + +#[cfg(not(stage0))] +impl capture_var_helper for reader::Decoder { + fn read_capture_var(&mut self, xcx: @ExtendedDecodeContext) + -> moves::CaptureVar { let cvar: moves::CaptureVar = Decodable::decode(self); cvar.tr(xcx) } @@ -527,14 +698,18 @@ impl tr for moves::CaptureVar { // Encoding and decoding of method_map_entry trait read_method_map_entry_helper { + #[cfg(stage0)] fn read_method_map_entry(&self, xcx: @ExtendedDecodeContext) - -> method_map_entry; + -> method_map_entry; + #[cfg(not(stage0))] + fn read_method_map_entry(&mut self, xcx: @ExtendedDecodeContext) + -> method_map_entry; } #[cfg(stage0)] fn encode_method_map_entry(ecx: @e::EncodeContext, - ebml_w: &writer::Encoder, - mme: method_map_entry) { + ebml_w: &writer::Encoder, + mme: method_map_entry) { do ebml_w.emit_struct("method_map_entry", 3) { do ebml_w.emit_field(~"self_arg", 0u) { ebml_w.emit_arg(ecx, mme.self_arg); @@ -551,23 +726,21 @@ fn encode_method_map_entry(ecx: @e::EncodeContext, } } -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] +#[cfg(not(stage0))] fn encode_method_map_entry(ecx: @e::EncodeContext, - ebml_w: &writer::Encoder, - mme: method_map_entry) { - do ebml_w.emit_struct("method_map_entry", 3) { - do ebml_w.emit_struct_field("self_arg", 0u) { + ebml_w: &mut writer::Encoder, + mme: method_map_entry) { + do ebml_w.emit_struct("method_map_entry", 3) |ebml_w| { + do ebml_w.emit_struct_field("self_arg", 0u) |ebml_w| { ebml_w.emit_arg(ecx, mme.self_arg); } - do ebml_w.emit_struct_field("explicit_self", 2u) { + do ebml_w.emit_struct_field("explicit_self", 2u) |ebml_w| { mme.explicit_self.encode(ebml_w); } - do ebml_w.emit_struct_field("origin", 1u) { + do ebml_w.emit_struct_field("origin", 1u) |ebml_w| { mme.origin.encode(ebml_w); } - do ebml_w.emit_struct_field("self_mode", 3) { + do ebml_w.emit_struct_field("self_mode", 3) |ebml_w| { mme.self_mode.encode(ebml_w); } } @@ -576,7 +749,7 @@ fn encode_method_map_entry(ecx: @e::EncodeContext, impl read_method_map_entry_helper for reader::Decoder { #[cfg(stage0)] fn read_method_map_entry(&self, xcx: @ExtendedDecodeContext) - -> method_map_entry { + -> method_map_entry { do self.read_struct("method_map_entry", 3) { method_map_entry { self_arg: self.read_field(~"self_arg", 0u, || { @@ -599,27 +772,27 @@ impl read_method_map_entry_helper for reader::Decoder { } } - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] - fn read_method_map_entry(&self, xcx: @ExtendedDecodeContext) - -> method_map_entry { - do self.read_struct("method_map_entry", 3) { + #[cfg(not(stage0))] + fn read_method_map_entry(&mut self, xcx: @ExtendedDecodeContext) + -> method_map_entry { + do self.read_struct("method_map_entry", 3) |this| { method_map_entry { - self_arg: self.read_struct_field("self_arg", 0u, || { - self.read_arg(xcx) + self_arg: this.read_struct_field("self_arg", 0, |this| { + this.read_arg(xcx) }), - explicit_self: self.read_struct_field("explicit_self", 2, || { - let self_type: ast::self_ty_ = Decodable::decode(self); + explicit_self: this.read_struct_field("explicit_self", + 2, + |this| { + let self_type: ast::self_ty_ = Decodable::decode(this); self_type }), - origin: self.read_struct_field("origin", 1u, || { + origin: this.read_struct_field("origin", 1, |this| { let method_origin: method_origin = - Decodable::decode(self); + Decodable::decode(this); method_origin.tr(xcx) }), - self_mode: self.read_struct_field("self_mode", 3, || { - let self_mode: ty::SelfMode = Decodable::decode(self); + self_mode: this.read_struct_field("self_mode", 3, |this| { + let self_mode: ty::SelfMode = Decodable::decode(this); self_mode }), } @@ -657,6 +830,7 @@ impl tr for method_origin { // ______________________________________________________________________ // Encoding and decoding vtable_res +#[cfg(stage0)] fn encode_vtable_res(ecx: @e::EncodeContext, ebml_w: &writer::Encoder, dr: typeck::vtable_res) { @@ -669,6 +843,20 @@ fn encode_vtable_res(ecx: @e::EncodeContext, } } +#[cfg(not(stage0))] +fn encode_vtable_res(ecx: @e::EncodeContext, + ebml_w: &mut writer::Encoder, + dr: typeck::vtable_res) { + // can't autogenerate this code because automatic code of + // ty::t doesn't work, and there is no way (atm) to have + // hand-written encoding routines combine with auto-generated + // ones. perhaps we should fix this. + do ebml_w.emit_from_vec(*dr) |ebml_w, vtable_origin| { + encode_vtable_origin(ecx, ebml_w, vtable_origin) + } +} + +#[cfg(stage0)] fn encode_vtable_origin(ecx: @e::EncodeContext, ebml_w: &writer::Encoder, vtable_origin: &typeck::vtable_origin) { @@ -699,24 +887,72 @@ fn encode_vtable_origin(ecx: @e::EncodeContext, } } } +} +#[cfg(not(stage0))] +fn encode_vtable_origin(ecx: @e::EncodeContext, + ebml_w: &mut writer::Encoder, + vtable_origin: &typeck::vtable_origin) { + do ebml_w.emit_enum(~"vtable_origin") |ebml_w| { + match *vtable_origin { + typeck::vtable_static(def_id, ref tys, vtable_res) => { + do ebml_w.emit_enum_variant(~"vtable_static", 0u, 3u) |ebml_w| { + do ebml_w.emit_enum_variant_arg(0u) |ebml_w| { + ebml_w.emit_def_id(def_id) + } + do ebml_w.emit_enum_variant_arg(1u) |ebml_w| { + ebml_w.emit_tys(ecx, /*bad*/copy *tys); + } + do ebml_w.emit_enum_variant_arg(2u) |ebml_w| { + encode_vtable_res(ecx, ebml_w, vtable_res); + } + } + } + typeck::vtable_param(pn, bn) => { + do ebml_w.emit_enum_variant(~"vtable_param", 1u, 2u) |ebml_w| { + do ebml_w.emit_enum_variant_arg(0u) |ebml_w| { + ebml_w.emit_uint(pn); + } + do ebml_w.emit_enum_variant_arg(1u) |ebml_w| { + ebml_w.emit_uint(bn); + } + } + } + } + } } trait vtable_decoder_helpers { + #[cfg(stage0)] fn read_vtable_res(&self, xcx: @ExtendedDecodeContext) -> typeck::vtable_res; + #[cfg(not(stage0))] + fn read_vtable_res(&mut self, xcx: @ExtendedDecodeContext) + -> typeck::vtable_res; + #[cfg(stage0)] fn read_vtable_origin(&self, xcx: @ExtendedDecodeContext) - -> typeck::vtable_origin; + -> typeck::vtable_origin; + #[cfg(not(stage0))] + fn read_vtable_origin(&mut self, xcx: @ExtendedDecodeContext) + -> typeck::vtable_origin; } impl vtable_decoder_helpers for reader::Decoder { + #[cfg(stage0)] fn read_vtable_res(&self, xcx: @ExtendedDecodeContext) -> typeck::vtable_res { - @self.read_to_vec(|| self.read_vtable_origin(xcx) ) + @self.read_to_vec(|| self.read_vtable_origin(xcx)) } + #[cfg(not(stage0))] + fn read_vtable_res(&mut self, xcx: @ExtendedDecodeContext) + -> typeck::vtable_res { + @self.read_to_vec(|this| this.read_vtable_origin(xcx)) + } + + #[cfg(stage0)] fn read_vtable_origin(&self, xcx: @ExtendedDecodeContext) - -> typeck::vtable_origin { + -> typeck::vtable_origin { do self.read_enum("vtable_origin") { do self.read_enum_variant(["vtable_static", "vtable_param"]) |i| { match i { @@ -749,6 +985,43 @@ impl vtable_decoder_helpers for reader::Decoder { } } } + + #[cfg(not(stage0))] + fn read_vtable_origin(&mut self, xcx: @ExtendedDecodeContext) + -> typeck::vtable_origin { + do self.read_enum("vtable_origin") |this| { + do this.read_enum_variant(["vtable_static", "vtable_param"]) + |this, i| { + match i { + 0 => { + typeck::vtable_static( + do this.read_enum_variant_arg(0u) |this| { + this.read_def_id(xcx) + }, + do this.read_enum_variant_arg(1u) |this| { + this.read_tys(xcx) + }, + do this.read_enum_variant_arg(2u) |this| { + this.read_vtable_res(xcx) + } + ) + } + 1 => { + typeck::vtable_param( + do this.read_enum_variant_arg(0u) |this| { + this.read_uint() + }, + do this.read_enum_variant_arg(1u) |this| { + this.read_uint() + } + ) + } + // hard to avoid - user input + _ => fail!(~"bad enum variant") + } + } + } + } } // ______________________________________________________________________ @@ -769,6 +1042,7 @@ impl get_ty_str_ctxt for e::EncodeContext { } } +#[cfg(stage0)] trait ebml_writer_helpers { fn emit_arg(&self, ecx: @e::EncodeContext, arg: ty::arg); fn emit_ty(&self, ecx: @e::EncodeContext, ty: ty::t); @@ -781,31 +1055,78 @@ trait ebml_writer_helpers { tpbt: ty::ty_param_bounds_and_ty); } +#[cfg(not(stage0))] +trait ebml_writer_helpers { + fn emit_arg(&mut self, ecx: @e::EncodeContext, arg: ty::arg); + fn emit_ty(&mut self, ecx: @e::EncodeContext, ty: ty::t); + fn emit_vstore(&mut self, ecx: @e::EncodeContext, vstore: ty::vstore); + fn emit_tys(&mut self, ecx: @e::EncodeContext, tys: ~[ty::t]); + fn emit_type_param_def(&mut self, + ecx: @e::EncodeContext, + type_param_def: &ty::TypeParameterDef); + fn emit_tpbt(&mut self, + ecx: @e::EncodeContext, + tpbt: ty::ty_param_bounds_and_ty); +} + impl ebml_writer_helpers for writer::Encoder { + #[cfg(stage0)] fn emit_ty(&self, ecx: @e::EncodeContext, ty: ty::t) { do self.emit_opaque { e::write_type(ecx, self, ty) } } + #[cfg(not(stage0))] + fn emit_ty(&mut self, ecx: @e::EncodeContext, ty: ty::t) { + do self.emit_opaque |this| { + e::write_type(ecx, this, ty) + } + } + + #[cfg(stage0)] fn emit_vstore(&self, ecx: @e::EncodeContext, vstore: ty::vstore) { do self.emit_opaque { e::write_vstore(ecx, self, vstore) } } + #[cfg(not(stage0))] + fn emit_vstore(&mut self, ecx: @e::EncodeContext, vstore: ty::vstore) { + do self.emit_opaque |this| { + e::write_vstore(ecx, this, vstore) + } + } + + #[cfg(stage0)] fn emit_arg(&self, ecx: @e::EncodeContext, arg: ty::arg) { do self.emit_opaque { tyencode::enc_arg(self.writer, ecx.ty_str_ctxt(), arg); } } + #[cfg(not(stage0))] + fn emit_arg(&mut self, ecx: @e::EncodeContext, arg: ty::arg) { + do self.emit_opaque |this| { + tyencode::enc_arg(this.writer, ecx.ty_str_ctxt(), arg); + } + } + + #[cfg(stage0)] fn emit_tys(&self, ecx: @e::EncodeContext, tys: ~[ty::t]) { do self.emit_from_vec(tys) |ty| { self.emit_ty(ecx, *ty) } } + #[cfg(not(stage0))] + fn emit_tys(&mut self, ecx: @e::EncodeContext, tys: ~[ty::t]) { + do self.emit_from_vec(tys) |this, ty| { + this.emit_ty(ecx, *ty) + } + } + + #[cfg(stage0)] fn emit_type_param_def(&self, ecx: @e::EncodeContext, type_param_def: &ty::TypeParameterDef) { @@ -815,16 +1136,27 @@ impl ebml_writer_helpers for writer::Encoder { } } + #[cfg(not(stage0))] + fn emit_type_param_def(&mut self, + ecx: @e::EncodeContext, + type_param_def: &ty::TypeParameterDef) { + do self.emit_opaque |this| { + tyencode::enc_type_param_def(this.writer, + ecx.ty_str_ctxt(), + type_param_def) + } + } + #[cfg(stage0)] - fn emit_tpbt(&self, ecx: @e::EncodeContext, + fn emit_tpbt(&self, + ecx: @e::EncodeContext, tpbt: ty::ty_param_bounds_and_ty) { do self.emit_struct("ty_param_bounds_and_ty", 2) { do self.emit_field(~"generics", 0) { do self.emit_struct("Generics", 2) { do self.emit_field(~"type_param_defs", 0) { do self.emit_from_vec(*tpbt.generics.type_param_defs) - |type_param_def| - { + |type_param_def| { self.emit_type_param_def(ecx, type_param_def); } } @@ -839,38 +1171,44 @@ impl ebml_writer_helpers for writer::Encoder { } } - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] - fn emit_tpbt(&self, ecx: @e::EncodeContext, + #[cfg(not(stage0))] + fn emit_tpbt(&mut self, + ecx: @e::EncodeContext, tpbt: ty::ty_param_bounds_and_ty) { - do self.emit_struct("ty_param_bounds_and_ty", 2) { - do self.emit_struct_field("generics", 0) { - do self.emit_struct("Generics", 2) { - do self.emit_struct_field("type_param_defs", 0) { - do self.emit_from_vec(*tpbt.generics.type_param_defs) - |type_param_def| - { - self.emit_type_param_def(ecx, type_param_def); + do self.emit_struct("ty_param_bounds_and_ty", 2) |this| { + do this.emit_struct_field(~"generics", 0) |this| { + do this.emit_struct("Generics", 2) |this| { + do this.emit_struct_field(~"type_param_defs", 0) |this| { + do this.emit_from_vec(*tpbt.generics.type_param_defs) + |this, type_param_def| { + this.emit_type_param_def(ecx, type_param_def); } } - do self.emit_struct_field("region_param", 1) { - tpbt.generics.region_param.encode(self); + do this.emit_struct_field(~"region_param", 1) |this| { + tpbt.generics.region_param.encode(this); } } } - do self.emit_struct_field("ty", 1) { - self.emit_ty(ecx, tpbt.ty); + do this.emit_struct_field(~"ty", 1) |this| { + this.emit_ty(ecx, tpbt.ty); } } } } +#[cfg(stage0)] trait write_tag_and_id { fn tag(&self, tag_id: c::astencode_tag, f: &fn()); fn id(&self, id: ast::node_id); } +#[cfg(not(stage0))] +trait write_tag_and_id { + fn tag(&mut self, tag_id: c::astencode_tag, f: &fn(&mut Self)); + fn id(&mut self, id: ast::node_id); +} + +#[cfg(stage0)] impl write_tag_and_id for writer::Encoder { fn tag(&self, tag_id: c::astencode_tag, f: &fn()) { do self.wr_tag(tag_id as uint) { f() } @@ -881,6 +1219,22 @@ impl write_tag_and_id for writer::Encoder { } } +#[cfg(not(stage0))] +impl write_tag_and_id for writer::Encoder { + fn tag(&mut self, + tag_id: c::astencode_tag, + f: &fn(&mut writer::Encoder)) { + self.start_tag(tag_id as uint); + f(self); + self.end_tag(); + } + + fn id(&mut self, id: ast::node_id) { + self.wr_tagged_u64(c::tag_table_id as uint, id as u64) + } +} + +#[cfg(stage0)] fn encode_side_tables_for_ii(ecx: @e::EncodeContext, maps: Maps, ebml_w: &writer::Encoder, @@ -899,6 +1253,26 @@ fn encode_side_tables_for_ii(ecx: @e::EncodeContext, } } +#[cfg(not(stage0))] +fn encode_side_tables_for_ii(ecx: @e::EncodeContext, + maps: Maps, + ebml_w: &mut writer::Encoder, + ii: &ast::inlined_item) { + ebml_w.start_tag(c::tag_table as uint); + let new_ebml_w = copy *ebml_w; + ast_util::visit_ids_for_inlined_item( + ii, + |id: ast::node_id| { + // Note: this will cause a copy of ebml_w, which is bad as + // it is mutable. But I believe it's harmless since we generate + // balanced EBML. + let mut new_ebml_w = copy new_ebml_w; + encode_side_tables_for_id(ecx, maps, &mut new_ebml_w, id) + }); + ebml_w.end_tag(); +} + +#[cfg(stage0)] fn encode_side_tables_for_id(ecx: @e::EncodeContext, maps: Maps, ebml_w: &writer::Encoder, @@ -1028,6 +1402,136 @@ fn encode_side_tables_for_id(ecx: @e::EncodeContext, } } +#[cfg(not(stage0))] +fn encode_side_tables_for_id(ecx: @e::EncodeContext, + maps: Maps, + ebml_w: &mut writer::Encoder, + id: ast::node_id) { + let tcx = ecx.tcx; + + debug!("Encoding side tables for id %d", id); + + for tcx.def_map.find(&id).each |def| { + do ebml_w.tag(c::tag_table_def) |ebml_w| { + ebml_w.id(id); + do ebml_w.tag(c::tag_table_val) |ebml_w| { + (*def).encode(ebml_w) + } + } + } + + for tcx.node_types.find(&(id as uint)).each |&ty| { + do ebml_w.tag(c::tag_table_node_type) |ebml_w| { + ebml_w.id(id); + do ebml_w.tag(c::tag_table_val) |ebml_w| { + ebml_w.emit_ty(ecx, *ty); + } + } + } + + for tcx.node_type_substs.find(&id).each |tys| { + do ebml_w.tag(c::tag_table_node_type_subst) |ebml_w| { + ebml_w.id(id); + do ebml_w.tag(c::tag_table_val) |ebml_w| { + // FIXME(#5562): removing this copy causes a segfault + // before stage2 + ebml_w.emit_tys(ecx, /*bad*/copy **tys) + } + } + } + + for tcx.freevars.find(&id).each |&fv| { + do ebml_w.tag(c::tag_table_freevars) |ebml_w| { + ebml_w.id(id); + do ebml_w.tag(c::tag_table_val) |ebml_w| { + do ebml_w.emit_from_vec(**fv) |ebml_w, fv_entry| { + encode_freevar_entry(ebml_w, *fv_entry) + } + } + } + } + + let lid = ast::def_id { crate: ast::local_crate, node: id }; + for tcx.tcache.find(&lid).each |&tpbt| { + do ebml_w.tag(c::tag_table_tcache) |ebml_w| { + ebml_w.id(id); + do ebml_w.tag(c::tag_table_val) |ebml_w| { + ebml_w.emit_tpbt(ecx, *tpbt); + } + } + } + + for tcx.ty_param_defs.find(&id).each |&type_param_def| { + do ebml_w.tag(c::tag_table_param_defs) |ebml_w| { + ebml_w.id(id); + do ebml_w.tag(c::tag_table_val) |ebml_w| { + ebml_w.emit_type_param_def(ecx, type_param_def) + } + } + } + + if maps.mutbl_map.contains(&id) { + do ebml_w.tag(c::tag_table_mutbl) |ebml_w| { + ebml_w.id(id); + } + } + + for maps.last_use_map.find(&id).each |&m| { + do ebml_w.tag(c::tag_table_last_use) |ebml_w| { + ebml_w.id(id); + do ebml_w.tag(c::tag_table_val) |ebml_w| { + do ebml_w.emit_from_vec(/*bad*/ copy **m) |ebml_w, id| { + id.encode(ebml_w); + } + } + } + } + + for maps.method_map.find(&id).each |&mme| { + do ebml_w.tag(c::tag_table_method_map) |ebml_w| { + ebml_w.id(id); + do ebml_w.tag(c::tag_table_val) |ebml_w| { + encode_method_map_entry(ecx, ebml_w, *mme) + } + } + } + + for maps.vtable_map.find(&id).each |&dr| { + do ebml_w.tag(c::tag_table_vtable_map) |ebml_w| { + ebml_w.id(id); + do ebml_w.tag(c::tag_table_val) |ebml_w| { + encode_vtable_res(ecx, ebml_w, *dr); + } + } + } + + for tcx.adjustments.find(&id).each |adj| { + do ebml_w.tag(c::tag_table_adjustments) |ebml_w| { + ebml_w.id(id); + do ebml_w.tag(c::tag_table_val) |ebml_w| { + (**adj).encode(ebml_w) + } + } + } + + if maps.moves_map.contains(&id) { + do ebml_w.tag(c::tag_table_moves_map) |ebml_w| { + ebml_w.id(id); + } + } + + for maps.capture_map.find(&id).each |&cap_vars| { + do ebml_w.tag(c::tag_table_capture_map) |ebml_w| { + ebml_w.id(id); + do ebml_w.tag(c::tag_table_val) |ebml_w| { + do ebml_w.emit_from_vec(*cap_vars) |ebml_w, cap_var| { + cap_var.encode(ebml_w); + } + } + } + } +} + trait doc_decoder_helpers { fn as_int(&self) -> int; fn opt_child(&self, tag: c::astencode_tag) -> Option; @@ -1040,6 +1544,7 @@ impl doc_decoder_helpers for ebml::Doc { } } +#[cfg(stage0)] trait ebml_decoder_decoder_helpers { fn read_arg(&self, xcx: @ExtendedDecodeContext) -> ty::arg; fn read_ty(&self, xcx: @ExtendedDecodeContext) -> ty::t; @@ -1052,7 +1557,24 @@ trait ebml_decoder_decoder_helpers { did: ast::def_id) -> ast::def_id; } +#[cfg(not(stage0))] +trait ebml_decoder_decoder_helpers { + fn read_arg(&mut self, xcx: @ExtendedDecodeContext) -> ty::arg; + fn read_ty(&mut self, xcx: @ExtendedDecodeContext) -> ty::t; + fn read_tys(&mut self, xcx: @ExtendedDecodeContext) -> ~[ty::t]; + fn read_type_param_def(&mut self, xcx: @ExtendedDecodeContext) + -> ty::TypeParameterDef; + fn read_ty_param_bounds_and_ty(&mut self, xcx: @ExtendedDecodeContext) + -> ty::ty_param_bounds_and_ty; + fn convert_def_id(&mut self, + xcx: @ExtendedDecodeContext, + source: DefIdSource, + did: ast::def_id) + -> ast::def_id; +} + impl ebml_decoder_decoder_helpers for reader::Decoder { + #[cfg(stage0)] fn read_arg(&self, xcx: @ExtendedDecodeContext) -> ty::arg { do self.read_opaque |doc| { tydecode::parse_arg_data( @@ -1061,6 +1583,19 @@ impl ebml_decoder_decoder_helpers for reader::Decoder { } } + #[cfg(not(stage0))] + fn read_arg(&mut self, xcx: @ExtendedDecodeContext) -> ty::arg { + do self.read_opaque |this, doc| { + tydecode::parse_arg_data( + doc.data, + xcx.dcx.cdata.cnum, + doc.start, + xcx.dcx.tcx, + |s, a| this.convert_def_id(xcx, s, a)) + } + } + + #[cfg(stage0)] fn read_ty(&self, xcx: @ExtendedDecodeContext) -> ty::t { // Note: regions types embed local node ids. In principle, we // should translate these node ids into the new decode @@ -1088,11 +1623,50 @@ impl ebml_decoder_decoder_helpers for reader::Decoder { } } + #[cfg(not(stage0))] + fn read_ty(&mut self, xcx: @ExtendedDecodeContext) -> ty::t { + // Note: regions types embed local node ids. In principle, we + // should translate these node ids into the new decode + // context. However, we do not bother, because region types + // are not used during trans. + + return do self.read_opaque |this, doc| { + let ty = tydecode::parse_ty_data( + doc.data, + xcx.dcx.cdata.cnum, + doc.start, + xcx.dcx.tcx, + |s, a| this.convert_def_id(xcx, s, a)); + + debug!("read_ty(%s) = %s", + type_string(doc), + ty_to_str(xcx.dcx.tcx, ty)); + + ty + }; + + fn type_string(doc: ebml::Doc) -> ~str { + let mut str = ~""; + for uint::range(doc.start, doc.end) |i| { + str::push_char(&mut str, doc.data[i] as char); + } + str + } + } + + #[cfg(stage0)] fn read_tys(&self, xcx: @ExtendedDecodeContext) -> ~[ty::t] { self.read_to_vec(|| self.read_ty(xcx) ) } - fn read_type_param_def(&self, xcx: @ExtendedDecodeContext) -> ty::TypeParameterDef { + #[cfg(not(stage0))] + fn read_tys(&mut self, xcx: @ExtendedDecodeContext) -> ~[ty::t] { + self.read_to_vec(|this| this.read_ty(xcx) ) + } + + #[cfg(stage0)] + fn read_type_param_def(&self, xcx: @ExtendedDecodeContext) + -> ty::TypeParameterDef { do self.read_opaque |doc| { tydecode::parse_type_param_def_data( doc.data, doc.start, xcx.dcx.cdata.cnum, xcx.dcx.tcx, @@ -1100,20 +1674,34 @@ impl ebml_decoder_decoder_helpers for reader::Decoder { } } + #[cfg(not(stage0))] + fn read_type_param_def(&mut self, xcx: @ExtendedDecodeContext) + -> ty::TypeParameterDef { + do self.read_opaque |this, doc| { + tydecode::parse_type_param_def_data( + doc.data, + doc.start, + xcx.dcx.cdata.cnum, + xcx.dcx.tcx, + |s, a| this.convert_def_id(xcx, s, a)) + } + } + #[cfg(stage0)] fn read_ty_param_bounds_and_ty(&self, xcx: @ExtendedDecodeContext) - -> ty::ty_param_bounds_and_ty - { + -> ty::ty_param_bounds_and_ty { do self.read_struct("ty_param_bounds_and_ty", 2) { ty::ty_param_bounds_and_ty { - generics: do self.read_struct("Generics", 2) { - ty::Generics { - type_param_defs: self.read_field("type_param_defs", 0, || { - @self.read_to_vec(|| self.read_type_param_def(xcx)) - }), - region_param: self.read_field(~"region_param", 1, || { - Decodable::decode(self) - }) + generics: do self.read_field("generics", 0) { + do self.read_struct("Generics", 2) { + ty::Generics { + type_param_defs: self.read_field("type_param_defs", 0, || { + @self.read_to_vec(|| self.read_type_param_def(xcx)) + }), + region_param: self.read_field(~"region_param", 1, || { + Decodable::decode(self) + }) + } } }, ty: self.read_field(~"ty", 1, || { @@ -1123,34 +1711,71 @@ impl ebml_decoder_decoder_helpers for reader::Decoder { } } - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] - fn read_ty_param_bounds_and_ty(&self, xcx: @ExtendedDecodeContext) - -> ty::ty_param_bounds_and_ty - { - do self.read_struct("ty_param_bounds_and_ty", 2) { + #[cfg(not(stage0))] + fn read_ty_param_bounds_and_ty(&mut self, xcx: @ExtendedDecodeContext) + -> ty::ty_param_bounds_and_ty { + do self.read_struct("ty_param_bounds_and_ty", 2) |this| { ty::ty_param_bounds_and_ty { - generics: do self.read_struct("Generics", 2) { - ty::Generics { - type_param_defs: self.read_struct_field("type_param_defs", 0, || { - @self.read_to_vec(|| self.read_type_param_def(xcx)) - }), - region_param: self.read_struct_field(~"region_param", 1, || { - Decodable::decode(self) - }) + generics: do this.read_struct_field("generics", 0) |this| { + do this.read_struct("Generics", 2) |this| { + ty::Generics { + type_param_defs: + this.read_struct_field("type_param_defs", + 0, + |this| { + @this.read_to_vec(|this| + this.read_type_param_def(xcx)) + }), + region_param: + this.read_struct_field("region_param", + 1, + |this| { + Decodable::decode(this) + }) + } } }, - ty: self.read_struct_field("ty", 1, || { - self.read_ty(xcx) + ty: this.read_struct_field("ty", 1, |this| { + this.read_ty(xcx) }) } } } - fn convert_def_id(&self, xcx: @ExtendedDecodeContext, + #[cfg(stage0)] + fn convert_def_id(&self, + xcx: @ExtendedDecodeContext, source: tydecode::DefIdSource, - did: ast::def_id) -> ast::def_id { + did: ast::def_id) + -> ast::def_id { + /*! + * + * Converts a def-id that appears in a type. The correct + * translation will depend on what kind of def-id this is. + * This is a subtle point: type definitions are not + * inlined into the current crate, so if the def-id names + * a nominal type or type alias, then it should be + * translated to refer to the source crate. + * + * However, *type parameters* are cloned along with the function + * they are attached to. So we should translate those def-ids + * to refer to the new, cloned copy of the type parameter. + */ + + let r = match source { + NominalType | TypeWithId => xcx.tr_def_id(did), + TypeParameter => xcx.tr_intern_def_id(did) + }; + debug!("convert_def_id(source=%?, did=%?)=%?", source, did, r); + return r; + } + + #[cfg(not(stage0))] + fn convert_def_id(&mut self, + xcx: @ExtendedDecodeContext, + source: tydecode::DefIdSource, + did: ast::def_id) + -> ast::def_id { /*! * * Converts a def-id that appears in a type. The correct @@ -1174,6 +1799,7 @@ impl ebml_decoder_decoder_helpers for reader::Decoder { } } +#[cfg(stage0)] fn decode_side_tables(xcx: @ExtendedDecodeContext, ast_doc: ebml::Doc) { let dcx = xcx.dcx; @@ -1248,21 +1874,97 @@ fn decode_side_tables(xcx: @ExtendedDecodeContext, } } +#[cfg(not(stage0))] +fn decode_side_tables(xcx: @ExtendedDecodeContext, + ast_doc: ebml::Doc) { + let dcx = xcx.dcx; + let tbl_doc = ast_doc.get(c::tag_table as uint); + for reader::docs(tbl_doc) |tag, entry_doc| { + let id0 = entry_doc.get(c::tag_table_id as uint).as_int(); + let id = xcx.tr_id(id0); + + debug!(">> Side table document with tag 0x%x \ + found for id %d (orig %d)", + tag, id, id0); + + if tag == (c::tag_table_mutbl as uint) { + dcx.maps.mutbl_map.insert(id); + } else if tag == (c::tag_table_moves_map as uint) { + dcx.maps.moves_map.insert(id); + } else { + let val_doc = entry_doc.get(c::tag_table_val as uint); + let mut val_dsr = reader::Decoder(val_doc); + let val_dsr = &mut val_dsr; + if tag == (c::tag_table_def as uint) { + let def = decode_def(xcx, val_doc); + dcx.tcx.def_map.insert(id, def); + } else if tag == (c::tag_table_node_type as uint) { + let ty = val_dsr.read_ty(xcx); + debug!("inserting ty for node %?: %s", + id, ty_to_str(dcx.tcx, ty)); + dcx.tcx.node_types.insert(id as uint, ty); + } else if tag == (c::tag_table_node_type_subst as uint) { + let tys = val_dsr.read_tys(xcx); + dcx.tcx.node_type_substs.insert(id, tys); + } else if tag == (c::tag_table_freevars as uint) { + let fv_info = @val_dsr.read_to_vec(|val_dsr| { + @val_dsr.read_freevar_entry(xcx) + }); + dcx.tcx.freevars.insert(id, fv_info); + } else if tag == (c::tag_table_tcache as uint) { + let tpbt = val_dsr.read_ty_param_bounds_and_ty(xcx); + let lid = ast::def_id { crate: ast::local_crate, node: id }; + dcx.tcx.tcache.insert(lid, tpbt); + } else if tag == (c::tag_table_param_defs as uint) { + let bounds = val_dsr.read_type_param_def(xcx); + dcx.tcx.ty_param_defs.insert(id, bounds); + } else if tag == (c::tag_table_last_use as uint) { + let ids = val_dsr.read_to_vec(|val_dsr| { + xcx.tr_id(val_dsr.read_int()) + }); + dcx.maps.last_use_map.insert(id, @mut ids); + } else if tag == (c::tag_table_method_map as uint) { + dcx.maps.method_map.insert( + id, + val_dsr.read_method_map_entry(xcx)); + } else if tag == (c::tag_table_vtable_map as uint) { + dcx.maps.vtable_map.insert(id, + val_dsr.read_vtable_res(xcx)); + } else if tag == (c::tag_table_adjustments as uint) { + let adj: @ty::AutoAdjustment = @Decodable::decode(val_dsr); + adj.tr(xcx); + dcx.tcx.adjustments.insert(id, adj); + } else if tag == (c::tag_table_capture_map as uint) { + let cvars = + at_vec::from_owned( + val_dsr.read_to_vec( + |val_dsr| val_dsr.read_capture_var(xcx))); + dcx.maps.capture_map.insert(id, cvars); + } else { + xcx.dcx.tcx.sess.bug( + fmt!("unknown tag found in side tables: %x", tag)); + } + } + + debug!(">< Side table doc loaded"); + } +} + // ______________________________________________________________________ // Testing of astencode_gen #[cfg(test)] -fn encode_item_ast(ebml_w: &writer::Encoder, item: @ast::item) { - do ebml_w.wr_tag(c::tag_tree as uint) { - (*item).encode(ebml_w) - } +fn encode_item_ast(ebml_w: &mut writer::Encoder, item: @ast::item) { + ebml_w.start_tag(c::tag_tree as uint); + (*item).encode(ebml_w); + ebml_w.end_tag(); } #[cfg(test)] fn decode_item_ast(par_doc: ebml::Doc) -> @ast::item { let chi_doc = par_doc.get(c::tag_tree as uint); - let d = &reader::Decoder(chi_doc); - @Decodable::decode(d) + let mut d = reader::Decoder(chi_doc); + @Decodable::decode(&mut d) } #[cfg(test)] @@ -1303,8 +2005,8 @@ fn roundtrip(in_item: Option<@ast::item>) { let in_item = in_item.get(); let bytes = do io::with_bytes_writer |wr| { - let ebml_w = writer::Encoder(wr); - encode_item_ast(&ebml_w, in_item); + let mut ebml_w = writer::Encoder(wr); + encode_item_ast(&mut ebml_w, in_item); }; let ebml_doc = reader::Doc(@bytes); let out_item = decode_item_ast(ebml_doc); diff --git a/src/libstd/arena.rs b/src/libstd/arena.rs index bea7935d5c3a4..0e9b2ed3da89c 100644 --- a/src/libstd/arena.rs +++ b/src/libstd/arena.rs @@ -348,7 +348,7 @@ pub impl Arena { #[test] fn test_arena_destructors() { - let arena = Arena(); + let mut arena = Arena(); for uint::range(0, 10) |i| { // Arena allocate something with drop glue to make sure it // doesn't leak. @@ -363,7 +363,7 @@ fn test_arena_destructors() { #[should_fail] #[ignore(cfg(windows))] fn test_arena_destructors_fail() { - let arena = Arena(); + let mut arena = Arena(); // Put some stuff in the arena. for uint::range(0, 10) |i| { // Arena allocate something with drop glue to make sure it diff --git a/src/libstd/ebml.rs b/src/libstd/ebml.rs index 2598e96a141e2..41c5a0f7690cb 100644 --- a/src/libstd/ebml.rs +++ b/src/libstd/ebml.rs @@ -36,13 +36,27 @@ pub struct TaggedDoc { } pub enum EbmlEncoderTag { - EsUint, EsU64, EsU32, EsU16, EsU8, - EsInt, EsI64, EsI32, EsI16, EsI8, - EsBool, - EsStr, - EsF64, EsF32, EsFloat, - EsEnum, EsEnumVid, EsEnumBody, - EsVec, EsVecLen, EsVecElt, + EsUint, // 0 + EsU64, // 1 + EsU32, // 2 + EsU16, // 3 + EsU8, // 4 + EsInt, // 5 + EsI64, // 6 + EsI32, // 7 + EsI16, // 8 + EsI8, // 9 + EsBool, // 10 + EsStr, // 11 + EsF64, // 12 + EsF32, // 13 + EsFloat, // 14 + EsEnum, // 15 + EsEnumVid, // 16 + EsEnumBody, // 17 + EsVec, // 18 + EsVecLen, // 19 + EsVecElt, // 20 EsOpaque, @@ -249,17 +263,27 @@ pub mod reader { pub fn doc_as_i32(d: Doc) -> i32 { doc_as_u32(d) as i32 } pub fn doc_as_i64(d: Doc) -> i64 { doc_as_u64(d) as i64 } - + #[cfg(stage0)] pub struct Decoder { priv mut parent: Doc, priv mut pos: uint, } + #[cfg(not(stage0))] + pub struct Decoder { + priv parent: Doc, + priv pos: uint, + } + pub fn Decoder(d: Doc) -> Decoder { - Decoder { parent: d, pos: d.start } + Decoder { + parent: d, + pos: d.start + } } priv impl Decoder { + #[cfg(stage0)] fn _check_label(&self, lbl: &str) { if self.pos < self.parent.end { let TaggedDoc { tag: r_tag, doc: r_doc } = @@ -269,13 +293,33 @@ pub mod reader { self.pos = r_doc.end; let str = doc_as_str(r_doc); if lbl != str { - fail!(fmt!("Expected label %s but found %s", lbl, - str)); + fail!(fmt!("Expected label %s but found %s", + lbl, + str)); + } + } + } + } + + #[cfg(not(stage0))] + fn _check_label(&mut self, lbl: &str) { + if self.pos < self.parent.end { + let TaggedDoc { tag: r_tag, doc: r_doc } = + doc_at(self.parent.data, self.pos); + + if r_tag == (EsLabel as uint) { + self.pos = r_doc.end; + let str = doc_as_str(r_doc); + if lbl != str { + fail!(fmt!("Expected label %s but found %s", + lbl, + str)); } } } } + #[cfg(stage0)] fn next_doc(&self, exp_tag: EbmlEncoderTag) -> Doc { debug!(". next_doc(exp_tag=%?)", exp_tag); if self.pos >= self.parent.end { @@ -298,6 +342,30 @@ pub mod reader { r_doc } + #[cfg(not(stage0))] + fn next_doc(&mut self, exp_tag: EbmlEncoderTag) -> Doc { + debug!(". next_doc(exp_tag=%?)", exp_tag); + if self.pos >= self.parent.end { + fail!(~"no more documents in current node!"); + } + let TaggedDoc { tag: r_tag, doc: r_doc } = + doc_at(self.parent.data, self.pos); + debug!("self.parent=%?-%? self.pos=%? r_tag=%? r_doc=%?-%?", + copy self.parent.start, copy self.parent.end, + copy self.pos, r_tag, r_doc.start, r_doc.end); + if r_tag != (exp_tag as uint) { + fail!(fmt!("expected EBML doc with tag %? but found tag %?", + exp_tag, r_tag)); + } + if r_doc.end > self.parent.end { + fail!(fmt!("invalid EBML, child extends to 0x%x, \ + parent to 0x%x", r_doc.end, self.parent.end)); + } + self.pos = r_doc.end; + r_doc + } + + #[cfg(stage0)] fn push_doc(&self, d: Doc, f: &fn() -> T) -> T { let old_parent = self.parent; let old_pos = self.pos; @@ -309,21 +377,58 @@ pub mod reader { r } + #[cfg(not(stage0))] + fn push_doc(&mut self, d: Doc, f: &fn() -> T) -> T { + let old_parent = self.parent; + let old_pos = self.pos; + self.parent = d; + self.pos = d.start; + let r = f(); + self.parent = old_parent; + self.pos = old_pos; + r + } + + #[cfg(stage0)] fn _next_uint(&self, exp_tag: EbmlEncoderTag) -> uint { let r = doc_as_u32(self.next_doc(exp_tag)); debug!("_next_uint exp_tag=%? result=%?", exp_tag, r); r as uint } + + #[cfg(not(stage0))] + fn _next_uint(&mut self, exp_tag: EbmlEncoderTag) -> uint { + let r = doc_as_u32(self.next_doc(exp_tag)); + debug!("_next_uint exp_tag=%? result=%?", exp_tag, r); + r as uint + } } pub impl Decoder { + #[cfg(stage0)] fn read_opaque(&self, op: &fn(Doc) -> R) -> R { do self.push_doc(self.next_doc(EsOpaque)) { op(copy self.parent) } } + + #[cfg(not(stage0))] + fn read_opaque(&mut self, op: &fn(&mut Decoder, Doc) -> R) -> R { + let doc = self.next_doc(EsOpaque); + + let (old_parent, old_pos) = (self.parent, self.pos); + self.parent = doc; + self.pos = doc.start; + + let result = op(self, doc); + + self.parent = old_parent; + self.pos = old_pos; + result + } } + #[cfg(stage0)] impl serialize::Decoder for Decoder { fn read_nil(&self) -> () { () } @@ -339,10 +444,18 @@ pub mod reader { v as uint } - fn read_i64(&self) -> i64 { doc_as_u64(self.next_doc(EsI64)) as i64 } - fn read_i32(&self) -> i32 { doc_as_u32(self.next_doc(EsI32)) as i32 } - fn read_i16(&self) -> i16 { doc_as_u16(self.next_doc(EsI16)) as i16 } - fn read_i8 (&self) -> i8 { doc_as_u8 (self.next_doc(EsI8 )) as i8 } + fn read_i64(&self) -> i64 { + doc_as_u64(self.next_doc(EsI64)) as i64 + } + fn read_i32(&self) -> i32 { + doc_as_u32(self.next_doc(EsI32)) as i32 + } + fn read_i16(&self) -> i16 { + doc_as_u16(self.next_doc(EsI16)) as i16 + } + fn read_i8 (&self) -> i8 { + doc_as_u8(self.next_doc(EsI8 )) as i8 + } fn read_int(&self) -> int { let v = doc_as_u64(self.next_doc(EsInt)) as i64; if v > (int::max_value as i64) || v < (int::min_value as i64) { @@ -351,8 +464,9 @@ pub mod reader { v as int } - fn read_bool(&self) -> bool { doc_as_u8(self.next_doc(EsBool)) - as bool } + fn read_bool(&self) -> bool { + doc_as_u8(self.next_doc(EsBool)) as bool + } fn read_f64(&self) -> f64 { fail!(~"read_f64()"); } fn read_f32(&self) -> f32 { fail!(~"read_f32()"); } @@ -367,7 +481,10 @@ pub mod reader { self.push_doc(self.next_doc(EsEnum), f) } - fn read_enum_variant(&self, _names: &[&str], f: &fn(uint) -> T) -> T { + fn read_enum_variant(&self, + _: &[&str], + f: &fn(uint) -> T) + -> T { debug!("read_enum_variant()"); let idx = self._next_uint(EsEnumVid); debug!(" idx=%u", idx); @@ -376,12 +493,17 @@ pub mod reader { } } - fn read_enum_variant_arg(&self, idx: uint, f: &fn() -> T) -> T { + fn read_enum_variant_arg(&self, + idx: uint, + f: &fn() -> T) -> T { debug!("read_enum_variant_arg(idx=%u)", idx); f() } - fn read_enum_struct_variant(&self, _names: &[&str], f: &fn(uint) -> T) -> T { + fn read_enum_struct_variant(&self, + _: &[&str], + f: &fn(uint) -> T) + -> T { debug!("read_enum_struct_variant()"); let idx = self._next_uint(EsEnumVid); debug!(" idx=%u", idx); @@ -390,32 +512,34 @@ pub mod reader { } } - fn read_enum_struct_variant_field(&self, name: &str, idx: uint, f: &fn() -> T) -> T { + fn read_enum_struct_variant_field(&self, + name: &str, + idx: uint, + f: &fn() -> T) + -> T { debug!("read_enum_struct_variant_arg(name=%?, idx=%u)", name, idx); f() } - fn read_struct(&self, name: &str, _len: uint, f: &fn() -> T) -> T { + fn read_struct(&self, + name: &str, + _: uint, + f: &fn() -> T) + -> T { debug!("read_struct(name=%s)", name); f() } - #[cfg(stage0)] - fn read_field(&self, name: &str, idx: uint, f: &fn() -> T) -> T { + fn read_field(&self, + name: &str, + idx: uint, + f: &fn() -> T) + -> T { debug!("read_field(name=%?, idx=%u)", name, idx); self._check_label(name); f() } - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] - fn read_struct_field(&self, name: &str, idx: uint, f: &fn() -> T) -> T { - debug!("read_struct_field(name=%?, idx=%u)", name, idx); - self._check_label(name); - f() - } - fn read_tuple(&self, f: &fn(uint) -> T) -> T { debug!("read_tuple()"); self.read_seq(f) @@ -426,12 +550,18 @@ pub mod reader { self.read_seq_elt(idx, f) } - fn read_tuple_struct(&self, name: &str, f: &fn(uint) -> T) -> T { + fn read_tuple_struct(&self, + name: &str, + f: &fn(uint) -> T) + -> T { debug!("read_tuple_struct(name=%?)", name); self.read_tuple(f) } - fn read_tuple_struct_arg(&self, idx: uint, f: &fn() -> T) -> T { + fn read_tuple_struct_arg(&self, + idx: uint, + f: &fn() -> T) + -> T { debug!("read_tuple_struct_arg(idx=%u)", idx); self.read_tuple_arg(idx, f) } @@ -478,6 +608,245 @@ pub mod reader { fail!(~"read_map_elt_val is unimplemented"); } } + + #[cfg(not(stage0))] + impl serialize::Decoder for Decoder { + fn read_nil(&mut self) -> () { () } + + fn read_u64(&mut self) -> u64 { doc_as_u64(self.next_doc(EsU64)) } + fn read_u32(&mut self) -> u32 { doc_as_u32(self.next_doc(EsU32)) } + fn read_u16(&mut self) -> u16 { doc_as_u16(self.next_doc(EsU16)) } + fn read_u8 (&mut self) -> u8 { doc_as_u8 (self.next_doc(EsU8 )) } + fn read_uint(&mut self) -> uint { + let v = doc_as_u64(self.next_doc(EsUint)); + if v > (::core::uint::max_value as u64) { + fail!(fmt!("uint %? too large for this architecture", v)); + } + v as uint + } + + fn read_i64(&mut self) -> i64 { + doc_as_u64(self.next_doc(EsI64)) as i64 + } + fn read_i32(&mut self) -> i32 { + doc_as_u32(self.next_doc(EsI32)) as i32 + } + fn read_i16(&mut self) -> i16 { + doc_as_u16(self.next_doc(EsI16)) as i16 + } + fn read_i8 (&mut self) -> i8 { + doc_as_u8(self.next_doc(EsI8 )) as i8 + } + fn read_int(&mut self) -> int { + let v = doc_as_u64(self.next_doc(EsInt)) as i64; + if v > (int::max_value as i64) || v < (int::min_value as i64) { + fail!(fmt!("int %? out of range for this architecture", v)); + } + v as int + } + + fn read_bool(&mut self) -> bool { + doc_as_u8(self.next_doc(EsBool)) as bool + } + + fn read_f64(&mut self) -> f64 { fail!(~"read_f64()"); } + fn read_f32(&mut self) -> f32 { fail!(~"read_f32()"); } + fn read_float(&mut self) -> float { fail!(~"read_float()"); } + fn read_char(&mut self) -> char { fail!(~"read_char()"); } + fn read_str(&mut self) -> ~str { doc_as_str(self.next_doc(EsStr)) } + + // Compound types: + fn read_enum(&mut self, + name: &str, + f: &fn(&mut Decoder) -> T) + -> T { + debug!("read_enum(%s)", name); + self._check_label(name); + + let doc = self.next_doc(EsEnum); + + let (old_parent, old_pos) = (self.parent, self.pos); + self.parent = doc; + self.pos = self.parent.start; + + let result = f(self); + + self.parent = old_parent; + self.pos = old_pos; + result + } + + fn read_enum_variant(&mut self, + _: &[&str], + f: &fn(&mut Decoder, uint) -> T) + -> T { + debug!("read_enum_variant()"); + let idx = self._next_uint(EsEnumVid); + debug!(" idx=%u", idx); + + let doc = self.next_doc(EsEnumBody); + + let (old_parent, old_pos) = (self.parent, self.pos); + self.parent = doc; + self.pos = self.parent.start; + + let result = f(self, idx); + + self.parent = old_parent; + self.pos = old_pos; + result + } + + fn read_enum_variant_arg(&mut self, + idx: uint, + f: &fn(&mut Decoder) -> T) -> T { + debug!("read_enum_variant_arg(idx=%u)", idx); + f(self) + } + + fn read_enum_struct_variant(&mut self, + _: &[&str], + f: &fn(&mut Decoder, uint) -> T) + -> T { + debug!("read_enum_struct_variant()"); + let idx = self._next_uint(EsEnumVid); + debug!(" idx=%u", idx); + + let doc = self.next_doc(EsEnumBody); + + let (old_parent, old_pos) = (self.parent, self.pos); + self.parent = doc; + self.pos = self.parent.start; + + let result = f(self, idx); + + self.parent = old_parent; + self.pos = old_pos; + result + } + + fn read_enum_struct_variant_field(&mut self, + name: &str, + idx: uint, + f: &fn(&mut Decoder) -> T) + -> T { + debug!("read_enum_struct_variant_arg(name=%?, idx=%u)", name, idx); + f(self) + } + + fn read_struct(&mut self, + name: &str, + _: uint, + f: &fn(&mut Decoder) -> T) + -> T { + debug!("read_struct(name=%s)", name); + f(self) + } + + fn read_struct_field(&mut self, + name: &str, + idx: uint, + f: &fn(&mut Decoder) -> T) + -> T { + debug!("read_struct_field(name=%?, idx=%u)", name, idx); + self._check_label(name); + f(self) + } + + fn read_tuple(&mut self, f: &fn(&mut Decoder, uint) -> T) -> T { + debug!("read_tuple()"); + self.read_seq(f) + } + + fn read_tuple_arg(&mut self, idx: uint, f: &fn(&mut Decoder) -> T) + -> T { + debug!("read_tuple_arg(idx=%u)", idx); + self.read_seq_elt(idx, f) + } + + fn read_tuple_struct(&mut self, + name: &str, + f: &fn(&mut Decoder, uint) -> T) + -> T { + debug!("read_tuple_struct(name=%?)", name); + self.read_tuple(f) + } + + fn read_tuple_struct_arg(&mut self, + idx: uint, + f: &fn(&mut Decoder) -> T) + -> T { + debug!("read_tuple_struct_arg(idx=%u)", idx); + self.read_tuple_arg(idx, f) + } + + fn read_option(&mut self, f: &fn(&mut Decoder, bool) -> T) -> T { + debug!("read_option()"); + do self.read_enum("Option") |this| { + do this.read_enum_variant(["None", "Some"]) |this, idx| { + match idx { + 0 => f(this, false), + 1 => f(this, true), + _ => fail!(), + } + } + } + } + + fn read_seq(&mut self, f: &fn(&mut Decoder, uint) -> T) -> T { + debug!("read_seq()"); + let doc = self.next_doc(EsVec); + + let (old_parent, old_pos) = (self.parent, self.pos); + self.parent = doc; + self.pos = self.parent.start; + + let len = self._next_uint(EsVecLen); + debug!(" len=%u", len); + let result = f(self, len); + + self.parent = old_parent; + self.pos = old_pos; + result + } + + fn read_seq_elt(&mut self, idx: uint, f: &fn(&mut Decoder) -> T) + -> T { + debug!("read_seq_elt(idx=%u)", idx); + let doc = self.next_doc(EsVecElt); + + let (old_parent, old_pos) = (self.parent, self.pos); + self.parent = doc; + self.pos = self.parent.start; + + let result = f(self); + + self.parent = old_parent; + self.pos = old_pos; + result + } + + fn read_map(&mut self, _: &fn(&mut Decoder, uint) -> T) -> T { + debug!("read_map()"); + fail!(~"read_map is unimplemented"); + } + + fn read_map_elt_key(&mut self, + idx: uint, + _: &fn(&mut Decoder) -> T) + -> T { + debug!("read_map_elt_key(idx=%u)", idx); + fail!(~"read_map_elt_val is unimplemented"); + } + + fn read_map_elt_val(&mut self, + idx: uint, + _: &fn(&mut Decoder) -> T) + -> T { + debug!("read_map_elt_val(idx=%u)", idx); + fail!(~"read_map_elt_val is unimplemented"); + } + } } pub mod writer { @@ -522,6 +891,7 @@ pub mod writer { } // FIXME (#2741): Provide a function to write the standard ebml header. + #[cfg(stage0)] pub impl Encoder { fn start_tag(&self, tag_id: uint) { debug!("Start tag %u", tag_id); @@ -617,13 +987,111 @@ pub mod writer { } } + // FIXME (#2741): Provide a function to write the standard ebml header. + #[cfg(not(stage0))] + pub impl Encoder { + fn start_tag(&mut self, tag_id: uint) { + debug!("Start tag %u", tag_id); + + // Write the enum ID: + write_vuint(self.writer, tag_id); + + // Write a placeholder four-byte size. + self.size_positions.push(self.writer.tell()); + let zeroes: &[u8] = &[0u8, 0u8, 0u8, 0u8]; + self.writer.write(zeroes); + } + + fn end_tag(&mut self) { + let last_size_pos = self.size_positions.pop(); + let cur_pos = self.writer.tell(); + self.writer.seek(last_size_pos as int, io::SeekSet); + let size = (cur_pos - last_size_pos - 4u); + write_sized_vuint(self.writer, size, 4u); + self.writer.seek(cur_pos as int, io::SeekSet); + + debug!("End tag (size = %u)", size); + } + + fn wr_tag(&mut self, tag_id: uint, blk: &fn()) { + self.start_tag(tag_id); + blk(); + self.end_tag(); + } + + fn wr_tagged_bytes(&mut self, tag_id: uint, b: &[u8]) { + write_vuint(self.writer, tag_id); + write_vuint(self.writer, vec::len(b)); + self.writer.write(b); + } + + fn wr_tagged_u64(&mut self, tag_id: uint, v: u64) { + do io::u64_to_be_bytes(v, 8u) |v| { + self.wr_tagged_bytes(tag_id, v); + } + } + + fn wr_tagged_u32(&mut self, tag_id: uint, v: u32) { + do io::u64_to_be_bytes(v as u64, 4u) |v| { + self.wr_tagged_bytes(tag_id, v); + } + } + + fn wr_tagged_u16(&mut self, tag_id: uint, v: u16) { + do io::u64_to_be_bytes(v as u64, 2u) |v| { + self.wr_tagged_bytes(tag_id, v); + } + } + + fn wr_tagged_u8(&mut self, tag_id: uint, v: u8) { + self.wr_tagged_bytes(tag_id, &[v]); + } + + fn wr_tagged_i64(&mut self, tag_id: uint, v: i64) { + do io::u64_to_be_bytes(v as u64, 8u) |v| { + self.wr_tagged_bytes(tag_id, v); + } + } + + fn wr_tagged_i32(&mut self, tag_id: uint, v: i32) { + do io::u64_to_be_bytes(v as u64, 4u) |v| { + self.wr_tagged_bytes(tag_id, v); + } + } + + fn wr_tagged_i16(&mut self, tag_id: uint, v: i16) { + do io::u64_to_be_bytes(v as u64, 2u) |v| { + self.wr_tagged_bytes(tag_id, v); + } + } + + fn wr_tagged_i8(&mut self, tag_id: uint, v: i8) { + self.wr_tagged_bytes(tag_id, &[v as u8]); + } + + fn wr_tagged_str(&mut self, tag_id: uint, v: &str) { + str::byte_slice(v, |b| self.wr_tagged_bytes(tag_id, b)); + } + + fn wr_bytes(&mut self, b: &[u8]) { + debug!("Write %u bytes", vec::len(b)); + self.writer.write(b); + } + + fn wr_str(&mut self, s: &str) { + debug!("Write str: %?", s); + self.writer.write(str::to_bytes(s)); + } + } + // FIXME (#2743): optionally perform "relaxations" on end_tag to more // efficiently encode sizes; this is a fixed point iteration // Set to true to generate more debugging in EBML code. // Totally lame approach. - static debug: bool = false; + static debug: bool = true; + #[cfg(stage0)] priv impl Encoder { // used internally to emit things like the vector length and so on fn _emit_tagged_uint(&self, t: EbmlEncoderTag, v: uint) { @@ -642,6 +1110,26 @@ pub mod writer { } } + #[cfg(not(stage0))] + priv impl Encoder { + // used internally to emit things like the vector length and so on + fn _emit_tagged_uint(&mut self, t: EbmlEncoderTag, v: uint) { + assert!(v <= 0xFFFF_FFFF_u); + self.wr_tagged_u32(t as uint, v as u32); + } + + fn _emit_label(&mut self, label: &str) { + // There are various strings that we have access to, such as + // the name of a record field, which do not actually appear in + // the encoded EBML (normally). This is just for + // efficiency. When debugging, though, we can emit such + // labels and then they will be checked by decoder to + // try and check failures more quickly. + if debug { self.wr_tagged_str(EsLabel as uint, label) } + } + } + + #[cfg(stage0)] pub impl Encoder { fn emit_opaque(&self, f: &fn()) { do self.wr_tag(EsOpaque as uint) { @@ -650,24 +1138,50 @@ pub mod writer { } } + #[cfg(not(stage0))] + pub impl Encoder { + fn emit_opaque(&mut self, f: &fn(&mut Encoder)) { + self.start_tag(EsOpaque as uint); + f(self); + self.end_tag(); + } + } + + #[cfg(stage0)] impl ::serialize::Encoder for Encoder { fn emit_nil(&self) {} fn emit_uint(&self, v: uint) { self.wr_tagged_u64(EsUint as uint, v as u64); } - fn emit_u64(&self, v: u64) { self.wr_tagged_u64(EsU64 as uint, v); } - fn emit_u32(&self, v: u32) { self.wr_tagged_u32(EsU32 as uint, v); } - fn emit_u16(&self, v: u16) { self.wr_tagged_u16(EsU16 as uint, v); } - fn emit_u8(&self, v: u8) { self.wr_tagged_u8 (EsU8 as uint, v); } + fn emit_u64(&self, v: u64) { + self.wr_tagged_u64(EsU64 as uint, v); + } + fn emit_u32(&self, v: u32) { + self.wr_tagged_u32(EsU32 as uint, v); + } + fn emit_u16(&self, v: u16) { + self.wr_tagged_u16(EsU16 as uint, v); + } + fn emit_u8(&self, v: u8) { + self.wr_tagged_u8(EsU8 as uint, v); + } fn emit_int(&self, v: int) { self.wr_tagged_i64(EsInt as uint, v as i64); } - fn emit_i64(&self, v: i64) { self.wr_tagged_i64(EsI64 as uint, v); } - fn emit_i32(&self, v: i32) { self.wr_tagged_i32(EsI32 as uint, v); } - fn emit_i16(&self, v: i16) { self.wr_tagged_i16(EsI16 as uint, v); } - fn emit_i8(&self, v: i8) { self.wr_tagged_i8 (EsI8 as uint, v); } + fn emit_i64(&self, v: i64) { + self.wr_tagged_i64(EsI64 as uint, v); + } + fn emit_i32(&self, v: i32) { + self.wr_tagged_i32(EsI32 as uint, v); + } + fn emit_i16(&self, v: i16) { + self.wr_tagged_i16(EsI16 as uint, v); + } + fn emit_i8(&self, v: i8) { + self.wr_tagged_i8(EsI8 as uint, v); + } fn emit_bool(&self, v: bool) { self.wr_tagged_u8(EsBool as uint, v as u8) @@ -697,41 +1211,56 @@ pub mod writer { self.wr_tag(EsEnum as uint, f) } - fn emit_enum_variant(&self, _v_name: &str, v_id: uint, _cnt: uint, + fn emit_enum_variant(&self, + _: &str, + v_id: uint, + _: uint, f: &fn()) { self._emit_tagged_uint(EsEnumVid, v_id); self.wr_tag(EsEnumBody as uint, f) } - fn emit_enum_variant_arg(&self, _idx: uint, f: &fn()) { f() } + fn emit_enum_variant_arg(&self, _: uint, f: &fn()) { + f() + } - fn emit_enum_struct_variant(&self, v_name: &str, v_id: uint, cnt: uint, f: &fn()) { + fn emit_enum_struct_variant(&self, + v_name: &str, + v_id: uint, + cnt: uint, + f: &fn()) { self.emit_enum_variant(v_name, v_id, cnt, f) } - fn emit_enum_struct_variant_field(&self, _f_name: &str, idx: uint, f: &fn()) { + fn emit_enum_struct_variant_field(&self, + _: &str, + idx: uint, + f: &fn()) { self.emit_enum_variant_arg(idx, f) } - fn emit_struct(&self, _name: &str, _len: uint, f: &fn()) { f() } - #[cfg(stage0)] - fn emit_field(&self, name: &str, _idx: uint, f: &fn()) { - self._emit_label(name); + fn emit_struct(&self, _: &str, _len: uint, f: &fn()) { f() } - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] - fn emit_struct_field(&self, name: &str, _idx: uint, f: &fn()) { + + fn emit_field(&self, name: &str, _idx: uint, f: &fn()) { self._emit_label(name); f() } - fn emit_tuple(&self, len: uint, f: &fn()) { self.emit_seq(len, f) } - fn emit_tuple_arg(&self, idx: uint, f: &fn()) { self.emit_seq_elt(idx, f) } + fn emit_tuple(&self, len: uint, f: &fn()) { + self.emit_seq(len, f) + } + fn emit_tuple_arg(&self, idx: uint, f: &fn()) { + self.emit_seq_elt(idx, f) + } - fn emit_tuple_struct(&self, _name: &str, len: uint, f: &fn()) { self.emit_seq(len, f) } - fn emit_tuple_struct_arg(&self, idx: uint, f: &fn()) { self.emit_seq_elt(idx, f) } + fn emit_tuple_struct(&self, _name: &str, len: uint, f: &fn()) { + self.emit_seq(len, f) + } + fn emit_tuple_struct_arg(&self, idx: uint, f: &fn()) { + self.emit_seq_elt(idx, f) + } fn emit_option(&self, f: &fn()) { self.emit_enum("Option", f); @@ -766,6 +1295,167 @@ pub mod writer { fail!(~"emit_map_elt_val is unimplemented"); } } + + #[cfg(not(stage0))] + impl ::serialize::Encoder for Encoder { + fn emit_nil(&mut self) {} + + fn emit_uint(&mut self, v: uint) { + self.wr_tagged_u64(EsUint as uint, v as u64); + } + fn emit_u64(&mut self, v: u64) { + self.wr_tagged_u64(EsU64 as uint, v); + } + fn emit_u32(&mut self, v: u32) { + self.wr_tagged_u32(EsU32 as uint, v); + } + fn emit_u16(&mut self, v: u16) { + self.wr_tagged_u16(EsU16 as uint, v); + } + fn emit_u8(&mut self, v: u8) { + self.wr_tagged_u8(EsU8 as uint, v); + } + + fn emit_int(&mut self, v: int) { + self.wr_tagged_i64(EsInt as uint, v as i64); + } + fn emit_i64(&mut self, v: i64) { + self.wr_tagged_i64(EsI64 as uint, v); + } + fn emit_i32(&mut self, v: i32) { + self.wr_tagged_i32(EsI32 as uint, v); + } + fn emit_i16(&mut self, v: i16) { + self.wr_tagged_i16(EsI16 as uint, v); + } + fn emit_i8(&mut self, v: i8) { + self.wr_tagged_i8(EsI8 as uint, v); + } + + fn emit_bool(&mut self, v: bool) { + self.wr_tagged_u8(EsBool as uint, v as u8) + } + + // FIXME (#2742): implement these + fn emit_f64(&mut self, _v: f64) { + fail!(~"Unimplemented: serializing an f64"); + } + fn emit_f32(&mut self, _v: f32) { + fail!(~"Unimplemented: serializing an f32"); + } + fn emit_float(&mut self, _v: float) { + fail!(~"Unimplemented: serializing a float"); + } + + fn emit_char(&mut self, _v: char) { + fail!(~"Unimplemented: serializing a char"); + } + + fn emit_str(&mut self, v: &str) { + self.wr_tagged_str(EsStr as uint, v) + } + + fn emit_enum(&mut self, name: &str, f: &fn(&mut Encoder)) { + self._emit_label(name); + self.start_tag(EsEnum as uint); + f(self); + self.end_tag(); + } + + fn emit_enum_variant(&mut self, + _: &str, + v_id: uint, + _: uint, + f: &fn(&mut Encoder)) { + self._emit_tagged_uint(EsEnumVid, v_id); + self.start_tag(EsEnumBody as uint); + f(self); + self.end_tag(); + } + + fn emit_enum_variant_arg(&mut self, _: uint, f: &fn(&mut Encoder)) { + f(self) + } + + fn emit_enum_struct_variant(&mut self, + v_name: &str, + v_id: uint, + cnt: uint, + f: &fn(&mut Encoder)) { + self.emit_enum_variant(v_name, v_id, cnt, f) + } + + fn emit_enum_struct_variant_field(&mut self, + _: &str, + idx: uint, + f: &fn(&mut Encoder)) { + self.emit_enum_variant_arg(idx, f) + } + + fn emit_struct(&mut self, _: &str, _len: uint, f: &fn(&mut Encoder)) { + f(self) + } + + fn emit_struct_field(&mut self, + name: &str, + _: uint, + f: &fn(&mut Encoder)) { + self._emit_label(name); + f(self) + } + + fn emit_tuple(&mut self, len: uint, f: &fn(&mut Encoder)) { + self.emit_seq(len, f) + } + fn emit_tuple_arg(&mut self, idx: uint, f: &fn(&mut Encoder)) { + self.emit_seq_elt(idx, f) + } + + fn emit_tuple_struct(&mut self, + _: &str, + len: uint, + f: &fn(&mut Encoder)) { + self.emit_seq(len, f) + } + fn emit_tuple_struct_arg(&mut self, idx: uint, f: &fn(&mut Encoder)) { + self.emit_seq_elt(idx, f) + } + + fn emit_option(&mut self, f: &fn(&mut Encoder)) { + self.emit_enum("Option", f); + } + fn emit_option_none(&mut self) { + self.emit_enum_variant("None", 0, 0, |_| ()) + } + fn emit_option_some(&mut self, f: &fn(&mut Encoder)) { + self.emit_enum_variant("Some", 1, 1, f) + } + + fn emit_seq(&mut self, len: uint, f: &fn(&mut Encoder)) { + self.start_tag(EsVec as uint); + self._emit_tagged_uint(EsVecLen, len); + f(self); + self.end_tag(); + } + + fn emit_seq_elt(&mut self, _idx: uint, f: &fn(&mut Encoder)) { + self.start_tag(EsVecElt as uint); + f(self); + self.end_tag(); + } + + fn emit_map(&mut self, _len: uint, _f: &fn(&mut Encoder)) { + fail!(~"emit_map is unimplemented"); + } + + fn emit_map_elt_key(&mut self, _idx: uint, _f: &fn(&mut Encoder)) { + fail!(~"emit_map_elt_key is unimplemented"); + } + + fn emit_map_elt_val(&mut self, _idx: uint, _f: &fn(&mut Encoder)) { + fail!(~"emit_map_elt_val is unimplemented"); + } + } } // ___________________________________________________________________________ @@ -786,12 +1476,12 @@ mod tests { fn test_v(v: Option) { debug!("v == %?", v); let bytes = do io::with_bytes_writer |wr| { - let ebml_w = writer::Encoder(wr); - v.encode(&ebml_w) + let mut ebml_w = writer::Encoder(wr); + v.encode(&mut ebml_w) }; let ebml_doc = reader::Doc(@bytes); - let deser = reader::Decoder(ebml_doc); - let v1 = serialize::Decodable::decode(&deser); + let mut deser = reader::Decoder(ebml_doc); + let v1 = serialize::Decodable::decode(&mut deser); debug!("v1 == %?", v1); assert!(v == v1); } diff --git a/src/libstd/flatpipes.rs b/src/libstd/flatpipes.rs index bd0acb849fcac..55ea9c2948b01 100644 --- a/src/libstd/flatpipes.rs +++ b/src/libstd/flatpipes.rs @@ -438,8 +438,11 @@ pub mod flatteners { SerializingFlattener */ + #[cfg(stage0)] pub fn deserialize_buffer>(buf: &[u8]) -> T { + T: Decodable>( + buf: &[u8]) + -> T { let buf = vec::from_slice(buf); let buf_reader = @BufReader::new(buf); let reader = buf_reader as @Reader; @@ -447,14 +450,40 @@ pub mod flatteners { Decodable::decode(&deser) } + #[cfg(not(stage0))] + pub fn deserialize_buffer>( + buf: &[u8]) + -> T { + let buf = vec::from_slice(buf); + let buf_reader = @BufReader::new(buf); + let reader = buf_reader as @Reader; + let mut deser: D = FromReader::from_reader(reader); + Decodable::decode(&mut deser) + } + + #[cfg(stage0)] pub fn serialize_value>(val: &T) -> ~[u8] { + T: Encodable>( + val: &T) + -> ~[u8] { do io::with_bytes_writer |writer| { let ser = FromWriter::from_writer(writer); val.encode(&ser); } } + #[cfg(not(stage0))] + pub fn serialize_value>( + val: &T) + -> ~[u8] { + do io::with_bytes_writer |writer| { + let mut ser = FromWriter::from_writer(writer); + val.encode(&mut ser); + } + } + pub trait FromReader { fn from_reader(r: @Reader) -> Self; } diff --git a/src/libstd/json.rs b/src/libstd/json.rs index 7353bec7333c5..6951ee377c92a 100644 --- a/src/libstd/json.rs +++ b/src/libstd/json.rs @@ -72,9 +72,12 @@ pub struct Encoder { } pub fn Encoder(wr: @io::Writer) -> Encoder { - Encoder { wr: wr } + Encoder { + wr: wr + } } +#[cfg(stage0)] impl serialize::Encoder for Encoder { fn emit_nil(&self) { self.wr.write_str("null") } @@ -109,7 +112,11 @@ impl serialize::Encoder for Encoder { fn emit_enum(&self, _name: &str, f: &fn()) { f() } - fn emit_enum_variant(&self, name: &str, _id: uint, cnt: uint, f: &fn()) { + fn emit_enum_variant(&self, + name: &str, + _id: uint, + cnt: uint, + f: &fn()) { // enums are encoded as strings or vectors: // Bunny => "Bunny" // Kangaroo(34,"William") => ["Kangaroo",[34,"William"]] @@ -130,19 +137,27 @@ impl serialize::Encoder for Encoder { f(); } - fn emit_enum_struct_variant(&self, name: &str, id: uint, cnt: uint, f: &fn()) { + fn emit_enum_struct_variant(&self, + name: &str, + id: uint, + cnt: uint, + f: &fn()) { self.emit_enum_variant(name, id, cnt, f) } - fn emit_enum_struct_variant_field(&self, _field: &str, idx: uint, f: &fn()) { + fn emit_enum_struct_variant_field(&self, + _: &str, + idx: uint, + f: &fn()) { self.emit_enum_variant_arg(idx, f) } - fn emit_struct(&self, _name: &str, _len: uint, f: &fn()) { + fn emit_struct(&self, _: &str, _: uint, f: &fn()) { self.wr.write_char('{'); f(); self.wr.write_char('}'); } + #[cfg(stage0)] fn emit_field(&self, name: &str, idx: uint, f: &fn()) { if idx != 0 { self.wr.write_char(','); } @@ -150,6 +165,7 @@ impl serialize::Encoder for Encoder { self.wr.write_char(':'); f(); } + #[cfg(stage1)] #[cfg(stage2)] #[cfg(stage3)] @@ -161,10 +177,16 @@ impl serialize::Encoder for Encoder { } fn emit_tuple(&self, len: uint, f: &fn()) { self.emit_seq(len, f) } - fn emit_tuple_arg(&self, idx: uint, f: &fn()) { self.emit_seq_elt(idx, f) } + fn emit_tuple_arg(&self, idx: uint, f: &fn()) { + self.emit_seq_elt(idx, f) + } - fn emit_tuple_struct(&self, _name: &str, len: uint, f: &fn()) { self.emit_seq(len, f) } - fn emit_tuple_struct_arg(&self, idx: uint, f: &fn()) { self.emit_seq_elt(idx, f) } + fn emit_tuple_struct(&self, _name: &str, len: uint, f: &fn()) { + self.emit_seq(len, f) + } + fn emit_tuple_struct_arg(&self, idx: uint, f: &fn()) { + self.emit_seq_elt(idx, f) + } fn emit_option(&self, f: &fn()) { f(); } fn emit_option_none(&self) { self.emit_nil(); } @@ -198,15 +220,163 @@ impl serialize::Encoder for Encoder { } } +#[cfg(not(stage0))] +impl serialize::Encoder for Encoder { + fn emit_nil(&mut self) { self.wr.write_str("null") } + + fn emit_uint(&mut self, v: uint) { self.emit_float(v as float); } + fn emit_u64(&mut self, v: u64) { self.emit_float(v as float); } + fn emit_u32(&mut self, v: u32) { self.emit_float(v as float); } + fn emit_u16(&mut self, v: u16) { self.emit_float(v as float); } + fn emit_u8(&mut self, v: u8) { self.emit_float(v as float); } + + fn emit_int(&mut self, v: int) { self.emit_float(v as float); } + fn emit_i64(&mut self, v: i64) { self.emit_float(v as float); } + fn emit_i32(&mut self, v: i32) { self.emit_float(v as float); } + fn emit_i16(&mut self, v: i16) { self.emit_float(v as float); } + fn emit_i8(&mut self, v: i8) { self.emit_float(v as float); } + + fn emit_bool(&mut self, v: bool) { + if v { + self.wr.write_str("true"); + } else { + self.wr.write_str("false"); + } + } + + fn emit_f64(&mut self, v: f64) { self.emit_float(v as float); } + fn emit_f32(&mut self, v: f32) { self.emit_float(v as float); } + fn emit_float(&mut self, v: float) { + self.wr.write_str(float::to_str_digits(v, 6u)); + } + + fn emit_char(&mut self, v: char) { self.emit_str(str::from_char(v)) } + fn emit_str(&mut self, v: &str) { self.wr.write_str(escape_str(v)) } + + fn emit_enum(&mut self, _name: &str, f: &fn(&mut Encoder)) { f(self) } + + fn emit_enum_variant(&mut self, + name: &str, + _id: uint, + cnt: uint, + f: &fn(&mut Encoder)) { + // enums are encoded as strings or vectors: + // Bunny => "Bunny" + // Kangaroo(34,"William") => ["Kangaroo",[34,"William"]] + + if cnt == 0 { + self.wr.write_str(escape_str(name)); + } else { + self.wr.write_char('['); + self.wr.write_str(escape_str(name)); + self.wr.write_char(','); + f(self); + self.wr.write_char(']'); + } + } + + fn emit_enum_variant_arg(&mut self, idx: uint, f: &fn(&mut Encoder)) { + if idx != 0 { + self.wr.write_char(','); + } + f(self); + } + + fn emit_enum_struct_variant(&mut self, + name: &str, + id: uint, + cnt: uint, + f: &fn(&mut Encoder)) { + self.emit_enum_variant(name, id, cnt, f) + } + + fn emit_enum_struct_variant_field(&mut self, + _: &str, + idx: uint, + f: &fn(&mut Encoder)) { + self.emit_enum_variant_arg(idx, f) + } + + fn emit_struct(&mut self, _: &str, _: uint, f: &fn(&mut Encoder)) { + self.wr.write_char('{'); + f(self); + self.wr.write_char('}'); + } + + fn emit_struct_field(&mut self, + name: &str, + idx: uint, + f: &fn(&mut Encoder)) { + if idx != 0 { self.wr.write_char(','); } + self.wr.write_str(escape_str(name)); + self.wr.write_char(':'); + f(self); + } + + fn emit_tuple(&mut self, len: uint, f: &fn(&mut Encoder)) { + self.emit_seq(len, f) + } + fn emit_tuple_arg(&mut self, idx: uint, f: &fn(&mut Encoder)) { + self.emit_seq_elt(idx, f) + } + + fn emit_tuple_struct(&mut self, + _name: &str, + len: uint, + f: &fn(&mut Encoder)) { + self.emit_seq(len, f) + } + fn emit_tuple_struct_arg(&mut self, idx: uint, f: &fn(&mut Encoder)) { + self.emit_seq_elt(idx, f) + } + + fn emit_option(&mut self, f: &fn(&mut Encoder)) { f(self); } + fn emit_option_none(&mut self) { self.emit_nil(); } + fn emit_option_some(&mut self, f: &fn(&mut Encoder)) { f(self); } + + fn emit_seq(&mut self, _len: uint, f: &fn(&mut Encoder)) { + self.wr.write_char('['); + f(self); + self.wr.write_char(']'); + } + + fn emit_seq_elt(&mut self, idx: uint, f: &fn(&mut Encoder)) { + if idx != 0 { + self.wr.write_char(','); + } + f(self) + } + + fn emit_map(&mut self, _len: uint, f: &fn(&mut Encoder)) { + self.wr.write_char('{'); + f(self); + self.wr.write_char('}'); + } + + fn emit_map_elt_key(&mut self, idx: uint, f: &fn(&mut Encoder)) { + if idx != 0 { self.wr.write_char(','); } + f(self) + } + + fn emit_map_elt_val(&mut self, _idx: uint, f: &fn(&mut Encoder)) { + self.wr.write_char(':'); + f(self) + } +} + pub struct PrettyEncoder { priv wr: @io::Writer, priv mut indent: uint, } pub fn PrettyEncoder(wr: @io::Writer) -> PrettyEncoder { - PrettyEncoder { wr: wr, indent: 0 } + PrettyEncoder { + wr: wr, + indent: 0, + } } +#[cfg(stage0)] impl serialize::Encoder for PrettyEncoder { fn emit_nil(&self) { self.wr.write_str("null") } @@ -241,7 +411,11 @@ impl serialize::Encoder for PrettyEncoder { fn emit_enum(&self, _name: &str, f: &fn()) { f() } - fn emit_enum_variant(&self, name: &str, _id: uint, cnt: uint, f: &fn()) { + fn emit_enum_variant(&self, + name: &str, + _: uint, + cnt: uint, + f: &fn()) { if cnt == 0 { self.wr.write_str(escape_str(name)); } else { @@ -267,11 +441,18 @@ impl serialize::Encoder for PrettyEncoder { f() } - fn emit_enum_struct_variant(&self, name: &str, id: uint, cnt: uint, f: &fn()) { + fn emit_enum_struct_variant(&self, + name: &str, + id: uint, + cnt: uint, + f: &fn()) { self.emit_enum_variant(name, id, cnt, f) } - fn emit_enum_struct_variant_field(&self, _field: &str, idx: uint, f: &fn()) { + fn emit_enum_struct_variant_field(&self, + _: &str, + idx: uint, + f: &fn()) { self.emit_enum_variant_arg(idx, f) } @@ -289,6 +470,7 @@ impl serialize::Encoder for PrettyEncoder { self.wr.write_char('}'); } } + #[cfg(stage0)] fn emit_field(&self, name: &str, idx: uint, f: &fn()) { if idx == 0 { @@ -301,6 +483,7 @@ impl serialize::Encoder for PrettyEncoder { self.wr.write_str(": "); f(); } + #[cfg(stage1)] #[cfg(stage2)] #[cfg(stage3)] @@ -316,11 +499,19 @@ impl serialize::Encoder for PrettyEncoder { f(); } - fn emit_tuple(&self, len: uint, f: &fn()) { self.emit_seq(len, f) } - fn emit_tuple_arg(&self, idx: uint, f: &fn()) { self.emit_seq_elt(idx, f) } + fn emit_tuple(&self, len: uint, f: &fn()) { + self.emit_seq(len, f) + } + fn emit_tuple_arg(&self, idx: uint, f: &fn()) { + self.emit_seq_elt(idx, f) + } - fn emit_tuple_struct(&self, _name: &str, len: uint, f: &fn()) { self.emit_seq(len, f) } - fn emit_tuple_struct_arg(&self, idx: uint, f: &fn()) { self.emit_seq_elt(idx, f) } + fn emit_tuple_struct(&self, _name: &str, len: uint, f: &fn()) { + self.emit_seq(len, f) + } + fn emit_tuple_struct_arg(&self, idx: uint, f: &fn()) { + self.emit_seq_elt(idx, f) + } fn emit_option(&self, f: &fn()) { f(); } fn emit_option_none(&self) { self.emit_nil(); } @@ -339,6 +530,7 @@ impl serialize::Encoder for PrettyEncoder { self.wr.write_char(']'); } } + fn emit_seq_elt(&self, idx: uint, f: &fn()) { if idx == 0 { self.wr.write_char('\n'); @@ -362,6 +554,7 @@ impl serialize::Encoder for PrettyEncoder { self.wr.write_char('}'); } } + fn emit_map_elt_key(&self, idx: uint, f: &fn()) { if idx == 0 { self.wr.write_char('\n'); @@ -378,6 +571,201 @@ impl serialize::Encoder for PrettyEncoder { } } +#[cfg(not(stage0))] +impl serialize::Encoder for PrettyEncoder { + fn emit_nil(&mut self) { self.wr.write_str("null") } + + fn emit_uint(&mut self, v: uint) { self.emit_float(v as float); } + fn emit_u64(&mut self, v: u64) { self.emit_float(v as float); } + fn emit_u32(&mut self, v: u32) { self.emit_float(v as float); } + fn emit_u16(&mut self, v: u16) { self.emit_float(v as float); } + fn emit_u8(&mut self, v: u8) { self.emit_float(v as float); } + + fn emit_int(&mut self, v: int) { self.emit_float(v as float); } + fn emit_i64(&mut self, v: i64) { self.emit_float(v as float); } + fn emit_i32(&mut self, v: i32) { self.emit_float(v as float); } + fn emit_i16(&mut self, v: i16) { self.emit_float(v as float); } + fn emit_i8(&mut self, v: i8) { self.emit_float(v as float); } + + fn emit_bool(&mut self, v: bool) { + if v { + self.wr.write_str("true"); + } else { + self.wr.write_str("false"); + } + } + + fn emit_f64(&mut self, v: f64) { self.emit_float(v as float); } + fn emit_f32(&mut self, v: f32) { self.emit_float(v as float); } + fn emit_float(&mut self, v: float) { + self.wr.write_str(float::to_str_digits(v, 6u)); + } + + fn emit_char(&mut self, v: char) { self.emit_str(str::from_char(v)) } + fn emit_str(&mut self, v: &str) { self.wr.write_str(escape_str(v)); } + + fn emit_enum(&mut self, _name: &str, f: &fn(&mut PrettyEncoder)) { + f(self) + } + + fn emit_enum_variant(&mut self, + name: &str, + _: uint, + cnt: uint, + f: &fn(&mut PrettyEncoder)) { + if cnt == 0 { + self.wr.write_str(escape_str(name)); + } else { + self.wr.write_char('['); + self.indent += 2; + self.wr.write_char('\n'); + self.wr.write_str(spaces(self.indent)); + self.wr.write_str(escape_str(name)); + self.wr.write_str(",\n"); + f(self); + self.wr.write_char('\n'); + self.indent -= 2; + self.wr.write_str(spaces(self.indent)); + self.wr.write_char(']'); + } + } + + fn emit_enum_variant_arg(&mut self, + idx: uint, + f: &fn(&mut PrettyEncoder)) { + if idx != 0 { + self.wr.write_str(",\n"); + } + self.wr.write_str(spaces(self.indent)); + f(self) + } + + fn emit_enum_struct_variant(&mut self, + name: &str, + id: uint, + cnt: uint, + f: &fn(&mut PrettyEncoder)) { + self.emit_enum_variant(name, id, cnt, f) + } + + fn emit_enum_struct_variant_field(&mut self, + _: &str, + idx: uint, + f: &fn(&mut PrettyEncoder)) { + self.emit_enum_variant_arg(idx, f) + } + + + fn emit_struct(&mut self, + _: &str, + len: uint, + f: &fn(&mut PrettyEncoder)) { + if len == 0 { + self.wr.write_str("{}"); + } else { + self.wr.write_char('{'); + self.indent += 2; + f(self); + self.wr.write_char('\n'); + self.indent -= 2; + self.wr.write_str(spaces(self.indent)); + self.wr.write_char('}'); + } + } + + fn emit_struct_field(&mut self, + name: &str, + idx: uint, + f: &fn(&mut PrettyEncoder)) { + if idx == 0 { + self.wr.write_char('\n'); + } else { + self.wr.write_str(",\n"); + } + self.wr.write_str(spaces(self.indent)); + self.wr.write_str(escape_str(name)); + self.wr.write_str(": "); + f(self); + } + + fn emit_tuple(&mut self, len: uint, f: &fn(&mut PrettyEncoder)) { + self.emit_seq(len, f) + } + fn emit_tuple_arg(&mut self, idx: uint, f: &fn(&mut PrettyEncoder)) { + self.emit_seq_elt(idx, f) + } + + fn emit_tuple_struct(&mut self, + _: &str, + len: uint, + f: &fn(&mut PrettyEncoder)) { + self.emit_seq(len, f) + } + fn emit_tuple_struct_arg(&mut self, + idx: uint, + f: &fn(&mut PrettyEncoder)) { + self.emit_seq_elt(idx, f) + } + + fn emit_option(&mut self, f: &fn(&mut PrettyEncoder)) { f(self); } + fn emit_option_none(&mut self) { self.emit_nil(); } + fn emit_option_some(&mut self, f: &fn(&mut PrettyEncoder)) { f(self); } + + fn emit_seq(&mut self, len: uint, f: &fn(&mut PrettyEncoder)) { + if len == 0 { + self.wr.write_str("[]"); + } else { + self.wr.write_char('['); + self.indent += 2; + f(self); + self.wr.write_char('\n'); + self.indent -= 2; + self.wr.write_str(spaces(self.indent)); + self.wr.write_char(']'); + } + } + + fn emit_seq_elt(&mut self, idx: uint, f: &fn(&mut PrettyEncoder)) { + if idx == 0 { + self.wr.write_char('\n'); + } else { + self.wr.write_str(",\n"); + } + self.wr.write_str(spaces(self.indent)); + f(self) + } + + fn emit_map(&mut self, len: uint, f: &fn(&mut PrettyEncoder)) { + if len == 0 { + self.wr.write_str("{}"); + } else { + self.wr.write_char('{'); + self.indent += 2; + f(self); + self.wr.write_char('\n'); + self.indent -= 2; + self.wr.write_str(spaces(self.indent)); + self.wr.write_char('}'); + } + } + + fn emit_map_elt_key(&mut self, idx: uint, f: &fn(&mut PrettyEncoder)) { + if idx == 0 { + self.wr.write_char('\n'); + } else { + self.wr.write_str(",\n"); + } + self.wr.write_str(spaces(self.indent)); + f(self); + } + + fn emit_map_elt_val(&mut self, _idx: uint, f: &fn(&mut PrettyEncoder)) { + self.wr.write_str(": "); + f(self); + } +} + +#[cfg(stage0)] impl serialize::Encodable for Json { fn encode(&self, e: &E) { match *self { @@ -391,9 +779,32 @@ impl serialize::Encodable for Json { } } +#[cfg(not(stage0))] +impl serialize::Encodable for Json { + fn encode(&self, e: &mut E) { + match *self { + Number(v) => v.encode(e), + String(ref v) => v.encode(e), + Boolean(v) => v.encode(e), + List(ref v) => v.encode(e), + Object(ref v) => v.encode(e), + Null => e.emit_nil(), + } + } +} + /// Encodes a json value into a io::writer +#[cfg(stage0)] pub fn to_writer(wr: @io::Writer, json: &Json) { - json.encode(&Encoder(wr)) + let encoder = Encoder(wr); + json.encode(&encoder) +} + +/// Encodes a json value into a io::writer +#[cfg(not(stage0))] +pub fn to_writer(wr: @io::Writer, json: &Json) { + let mut encoder = Encoder(wr); + json.encode(&mut encoder) } /// Encodes a json value into a string @@ -402,8 +813,17 @@ pub fn to_str(json: &Json) -> ~str { } /// Encodes a json value into a io::writer +#[cfg(stage0)] pub fn to_pretty_writer(wr: @io::Writer, json: &Json) { - json.encode(&PrettyEncoder(wr)) + let encoder = PrettyEncoder(wr); + json.encode(&encoder) +} + +/// Encodes a json value into a io::writer +#[cfg(not(stage0))] +pub fn to_pretty_writer(wr: @io::Writer, json: &Json) { + let mut encoder = PrettyEncoder(wr); + json.encode(&mut encoder) } /// Encodes a json value into a string @@ -794,9 +1214,12 @@ pub struct Decoder { } pub fn Decoder(json: Json) -> Decoder { - Decoder { stack: ~[json] } + Decoder { + stack: ~[json] + } } +#[cfg(stage0)] impl serialize::Decoder for Decoder { fn read_nil(&self) -> () { debug!("read_nil"); @@ -856,7 +1279,10 @@ impl serialize::Decoder for Decoder { f() } - fn read_enum_variant(&self, names: &[&str], f: &fn(uint) -> T) -> T { + fn read_enum_variant(&self, + names: &[&str], + f: &fn(uint) -> T) + -> T { debug!("read_enum_variant(names=%?)", names); let name = match self.stack.pop() { String(s) => s, @@ -883,13 +1309,20 @@ impl serialize::Decoder for Decoder { f() } - fn read_enum_struct_variant(&self, names: &[&str], f: &fn(uint) -> T) -> T { + fn read_enum_struct_variant(&self, + names: &[&str], + f: &fn(uint) -> T) + -> T { debug!("read_enum_struct_variant(names=%?)", names); self.read_enum_variant(names, f) } - fn read_enum_struct_variant_field(&self, name: &str, idx: uint, f: &fn() -> T) -> T { + fn read_enum_struct_variant_field(&self, + name: &str, + idx: uint, + f: &fn() -> T) + -> T { debug!("read_enum_struct_variant_field(name=%?, idx=%u)", name, idx); self.read_enum_variant_arg(idx, f) } @@ -924,7 +1357,11 @@ impl serialize::Decoder for Decoder { #[cfg(stage1)] #[cfg(stage2)] #[cfg(stage3)] - fn read_struct_field(&self, name: &str, idx: uint, f: &fn() -> T) -> T { + fn read_struct_field(&self, + name: &str, + idx: uint, + f: &fn() -> T) + -> T { debug!("read_struct_field(name=%?, idx=%u)", name, idx); match self.stack.pop() { Object(obj) => { @@ -1018,6 +1455,262 @@ impl serialize::Decoder for Decoder { } } +#[cfg(not(stage0))] +impl serialize::Decoder for Decoder { + fn read_nil(&mut self) -> () { + debug!("read_nil"); + match self.stack.pop() { + Null => (), + value => fail!(fmt!("not a null: %?", value)) + } + } + + fn read_u64(&mut self) -> u64 { self.read_float() as u64 } + fn read_u32(&mut self) -> u32 { self.read_float() as u32 } + fn read_u16(&mut self) -> u16 { self.read_float() as u16 } + fn read_u8 (&mut self) -> u8 { self.read_float() as u8 } + fn read_uint(&mut self) -> uint { self.read_float() as uint } + + fn read_i64(&mut self) -> i64 { self.read_float() as i64 } + fn read_i32(&mut self) -> i32 { self.read_float() as i32 } + fn read_i16(&mut self) -> i16 { self.read_float() as i16 } + fn read_i8 (&mut self) -> i8 { self.read_float() as i8 } + fn read_int(&mut self) -> int { self.read_float() as int } + + fn read_bool(&mut self) -> bool { + debug!("read_bool"); + match self.stack.pop() { + Boolean(b) => b, + value => fail!(fmt!("not a boolean: %?", value)) + } + } + + fn read_f64(&mut self) -> f64 { self.read_float() as f64 } + fn read_f32(&mut self) -> f32 { self.read_float() as f32 } + fn read_float(&mut self) -> float { + debug!("read_float"); + match self.stack.pop() { + Number(f) => f, + value => fail!(fmt!("not a number: %?", value)) + } + } + + fn read_char(&mut self) -> char { + let mut v = ~[]; + for str::each_char(self.read_str()) |c| { v.push(c) } + if v.len() != 1 { fail!(~"string must have one character") } + v[0] + } + + fn read_str(&mut self) -> ~str { + debug!("read_str"); + match self.stack.pop() { + String(s) => s, + json => fail!(fmt!("not a string: %?", json)) + } + } + + fn read_enum(&mut self, name: &str, f: &fn(&mut Decoder) -> T) -> T { + debug!("read_enum(%s)", name); + f(self) + } + + fn read_enum_variant(&mut self, + names: &[&str], + f: &fn(&mut Decoder, uint) -> T) + -> T { + debug!("read_enum_variant(names=%?)", names); + let name = match self.stack.pop() { + String(s) => s, + List(list) => { + do vec::consume_reverse(list) |_i, v| { + self.stack.push(v); + } + match self.stack.pop() { + String(s) => s, + value => fail!(fmt!("invalid variant name: %?", value)), + } + } + ref json => fail!(fmt!("invalid variant: %?", *json)), + }; + let idx = match vec::position(names, |n| str::eq_slice(*n, name)) { + Some(idx) => idx, + None => fail!(fmt!("Unknown variant name: %?", name)), + }; + f(self, idx) + } + + fn read_enum_variant_arg(&mut self, + idx: uint, + f: &fn(&mut Decoder) -> T) + -> T { + debug!("read_enum_variant_arg(idx=%u)", idx); + f(self) + } + + fn read_enum_struct_variant(&mut self, + names: &[&str], + f: &fn(&mut Decoder, uint) -> T) + -> T { + debug!("read_enum_struct_variant(names=%?)", names); + self.read_enum_variant(names, f) + } + + + fn read_enum_struct_variant_field(&mut self, + name: &str, + idx: uint, + f: &fn(&mut Decoder) -> T) + -> T { + debug!("read_enum_struct_variant_field(name=%?, idx=%u)", name, idx); + self.read_enum_variant_arg(idx, f) + } + + fn read_struct(&mut self, + name: &str, + len: uint, + f: &fn(&mut Decoder) -> T) + -> T { + debug!("read_struct(name=%s, len=%u)", name, len); + let value = f(self); + self.stack.pop(); + value + } + + #[cfg(stage0)] + fn read_field(&mut self, name: &str, idx: uint, f: &fn() -> T) -> T { + debug!("read_field(name=%?, idx=%u)", name, idx); + match self.stack.pop() { + Object(obj) => { + let mut obj = obj; + let value = match obj.pop(&name.to_owned()) { + None => fail!(fmt!("no such field: %s", name)), + Some(json) => { + self.stack.push(json); + f() + } + }; + self.stack.push(Object(obj)); + value + } + value => fail!(fmt!("not an object: %?", value)) + } + } + + #[cfg(stage1)] + #[cfg(stage2)] + #[cfg(stage3)] + fn read_struct_field(&mut self, + name: &str, + idx: uint, + f: &fn(&mut Decoder) -> T) + -> T { + debug!("read_struct_field(name=%?, idx=%u)", name, idx); + match self.stack.pop() { + Object(obj) => { + let mut obj = obj; + let value = match obj.pop(&name.to_owned()) { + None => fail!(fmt!("no such field: %s", name)), + Some(json) => { + self.stack.push(json); + f(self) + } + }; + self.stack.push(Object(obj)); + value + } + value => fail!(fmt!("not an object: %?", value)) + } + } + + fn read_tuple(&mut self, f: &fn(&mut Decoder, uint) -> T) -> T { + debug!("read_tuple()"); + self.read_seq(f) + } + + fn read_tuple_arg(&mut self, + idx: uint, + f: &fn(&mut Decoder) -> T) + -> T { + debug!("read_tuple_arg(idx=%u)", idx); + self.read_seq_elt(idx, f) + } + + fn read_tuple_struct(&mut self, + name: &str, + f: &fn(&mut Decoder, uint) -> T) + -> T { + debug!("read_tuple_struct(name=%?)", name); + self.read_tuple(f) + } + + fn read_tuple_struct_arg(&mut self, + idx: uint, + f: &fn(&mut Decoder) -> T) + -> T { + debug!("read_tuple_struct_arg(idx=%u)", idx); + self.read_tuple_arg(idx, f) + } + + fn read_option(&mut self, f: &fn(&mut Decoder, bool) -> T) -> T { + match self.stack.pop() { + Null => f(self, false), + value => { self.stack.push(value); f(self, true) } + } + } + + fn read_seq(&mut self, f: &fn(&mut Decoder, uint) -> T) -> T { + debug!("read_seq()"); + let len = match self.stack.pop() { + List(list) => { + let len = list.len(); + do vec::consume_reverse(list) |_i, v| { + self.stack.push(v); + } + len + } + _ => fail!(~"not a list"), + }; + f(self, len) + } + + fn read_seq_elt(&mut self, idx: uint, f: &fn(&mut Decoder) -> T) -> T { + debug!("read_seq_elt(idx=%u)", idx); + f(self) + } + + fn read_map(&mut self, f: &fn(&mut Decoder, uint) -> T) -> T { + debug!("read_map()"); + let len = match self.stack.pop() { + Object(obj) => { + let mut obj = obj; + let len = obj.len(); + do obj.consume |key, value| { + self.stack.push(value); + self.stack.push(String(key)); + } + len + } + json => fail!(fmt!("not an object: %?", json)), + }; + f(self, len) + } + + fn read_map_elt_key(&mut self, + idx: uint, + f: &fn(&mut Decoder) -> T) + -> T { + debug!("read_map_elt_key(idx=%u)", idx); + f(self) + } + + fn read_map_elt_val(&mut self, idx: uint, f: &fn(&mut Decoder) -> T) + -> T { + debug!("read_map_elt_val(idx=%u)", idx); + f(self) + } +} + impl Eq for Json { fn eq(&self, other: &Json) -> bool { match (self) { @@ -1452,15 +2145,15 @@ mod tests { let animal = Dog; assert_eq!( do io::with_str_writer |wr| { - let encoder = Encoder(wr); - animal.encode(&encoder); + let mut encoder = Encoder(wr); + animal.encode(&mut encoder); }, ~"\"Dog\"" ); assert_eq!( do io::with_str_writer |wr| { - let encoder = PrettyEncoder(wr); - animal.encode(&encoder); + let mut encoder = PrettyEncoder(wr); + animal.encode(&mut encoder); }, ~"\"Dog\"" ); @@ -1468,15 +2161,15 @@ mod tests { let animal = Frog(~"Henry", 349); assert_eq!( do io::with_str_writer |wr| { - let encoder = Encoder(wr); - animal.encode(&encoder); + let mut encoder = Encoder(wr); + animal.encode(&mut encoder); }, ~"[\"Frog\",\"Henry\",349]" ); assert_eq!( do io::with_str_writer |wr| { - let encoder = PrettyEncoder(wr); - animal.encode(&encoder); + let mut encoder = PrettyEncoder(wr); + animal.encode(&mut encoder); }, ~"\ [\n \ @@ -1491,15 +2184,15 @@ mod tests { fn test_write_some() { let value = Some(~"jodhpurs"); let s = do io::with_str_writer |wr| { - let encoder = Encoder(wr); - value.encode(&encoder); + let mut encoder = Encoder(wr); + value.encode(&mut encoder); }; assert_eq!(s, ~"\"jodhpurs\""); let value = Some(~"jodhpurs"); let s = do io::with_str_writer |wr| { - let encoder = PrettyEncoder(wr); - value.encode(&encoder); + let mut encoder = PrettyEncoder(wr); + value.encode(&mut encoder); }; assert_eq!(s, ~"\"jodhpurs\""); } @@ -1508,14 +2201,14 @@ mod tests { fn test_write_none() { let value: Option<~str> = None; let s = do io::with_str_writer |wr| { - let encoder = Encoder(wr); - value.encode(&encoder); + let mut encoder = Encoder(wr); + value.encode(&mut encoder); }; assert_eq!(s, ~"null"); let s = do io::with_str_writer |wr| { - let encoder = Encoder(wr); - value.encode(&encoder); + let mut encoder = Encoder(wr); + value.encode(&mut encoder); }; assert_eq!(s, ~"null"); } @@ -1563,13 +2256,16 @@ mod tests { #[test] fn test_decode_identifiers() { - let v: () = Decodable::decode(&Decoder(from_str(~"null").unwrap())); + let mut decoder = Decoder(from_str(~"null").unwrap()); + let v: () = Decodable::decode(&mut decoder); assert_eq!(v, ()); - let v: bool = Decodable::decode(&Decoder(from_str(~"true").unwrap())); + let mut decoder = Decoder(from_str(~"true").unwrap()); + let v: bool = Decodable::decode(&mut decoder); assert_eq!(v, true); - let v: bool = Decodable::decode(&Decoder(from_str(~"false").unwrap())); + let mut decoder = Decoder(from_str(~"false").unwrap()); + let v: bool = Decodable::decode(&mut decoder); assert_eq!(v, false); } @@ -1603,25 +2299,32 @@ mod tests { #[test] fn test_decode_numbers() { - let v: float = Decodable::decode(&Decoder(from_str(~"3").unwrap())); + let mut decoder = Decoder(from_str(~"3").unwrap()); + let v: float = Decodable::decode(&mut decoder); assert_eq!(v, 3f); - let v: float = Decodable::decode(&Decoder(from_str(~"3.1").unwrap())); + let mut decoder = Decoder(from_str(~"3.1").unwrap()); + let v: float = Decodable::decode(&mut decoder); assert_eq!(v, 3.1f); - let v: float = Decodable::decode(&Decoder(from_str(~"-1.2").unwrap())); + let mut decoder = Decoder(from_str(~"-1.2").unwrap()); + let v: float = Decodable::decode(&mut decoder); assert_eq!(v, -1.2f); - let v: float = Decodable::decode(&Decoder(from_str(~"0.4").unwrap())); + let mut decoder = Decoder(from_str(~"0.4").unwrap()); + let v: float = Decodable::decode(&mut decoder); assert_eq!(v, 0.4f); - let v: float = Decodable::decode(&Decoder(from_str(~"0.4e5").unwrap())); + let mut decoder = Decoder(from_str(~"0.4e5").unwrap()); + let v: float = Decodable::decode(&mut decoder); assert_eq!(v, 0.4e5f); - let v: float = Decodable::decode(&Decoder(from_str(~"0.4e15").unwrap())); + let mut decoder = Decoder(from_str(~"0.4e15").unwrap()); + let v: float = Decodable::decode(&mut decoder); assert_eq!(v, 0.4e15f); - let v: float = Decodable::decode(&Decoder(from_str(~"0.4e-01").unwrap())); + let mut decoder = Decoder(from_str(~"0.4e-01").unwrap()); + let v: float = Decodable::decode(&mut decoder); assert_eq!(v, 0.4e-01f); } @@ -1648,31 +2351,40 @@ mod tests { #[test] fn test_decode_str() { - let v: ~str = Decodable::decode(&Decoder(from_str(~"\"\"").unwrap())); + let mut decoder = Decoder(from_str(~"\"\"").unwrap()); + let v: ~str = Decodable::decode(&mut decoder); assert_eq!(v, ~""); - let v: ~str = Decodable::decode(&Decoder(from_str(~"\"foo\"").unwrap())); + let mut decoder = Decoder(from_str(~"\"foo\"").unwrap()); + let v: ~str = Decodable::decode(&mut decoder); assert_eq!(v, ~"foo"); - let v: ~str = Decodable::decode(&Decoder(from_str(~"\"\\\"\"").unwrap())); + let mut decoder = Decoder(from_str(~"\"\\\"\"").unwrap()); + let v: ~str = Decodable::decode(&mut decoder); assert_eq!(v, ~"\""); - let v: ~str = Decodable::decode(&Decoder(from_str(~"\"\\b\"").unwrap())); + let mut decoder = Decoder(from_str(~"\"\\b\"").unwrap()); + let v: ~str = Decodable::decode(&mut decoder); assert_eq!(v, ~"\x08"); - let v: ~str = Decodable::decode(&Decoder(from_str(~"\"\\n\"").unwrap())); + let mut decoder = Decoder(from_str(~"\"\\n\"").unwrap()); + let v: ~str = Decodable::decode(&mut decoder); assert_eq!(v, ~"\n"); - let v: ~str = Decodable::decode(&Decoder(from_str(~"\"\\r\"").unwrap())); + let mut decoder = Decoder(from_str(~"\"\\r\"").unwrap()); + let v: ~str = Decodable::decode(&mut decoder); assert_eq!(v, ~"\r"); - let v: ~str = Decodable::decode(&Decoder(from_str(~"\"\\t\"").unwrap())); + let mut decoder = Decoder(from_str(~"\"\\t\"").unwrap()); + let v: ~str = Decodable::decode(&mut decoder); assert_eq!(v, ~"\t"); - let v: ~str = Decodable::decode(&Decoder(from_str(~"\"\\u12ab\"").unwrap())); + let mut decoder = Decoder(from_str(~"\"\\u12ab\"").unwrap()); + let v: ~str = Decodable::decode(&mut decoder); assert_eq!(v, ~"\u12ab"); - let v: ~str = Decodable::decode(&Decoder(from_str(~"\"\\uAB12\"").unwrap())); + let mut decoder = Decoder(from_str(~"\"\\uAB12\"").unwrap()); + let v: ~str = Decodable::decode(&mut decoder); assert_eq!(v, ~"\uAB12"); } @@ -1704,23 +2416,28 @@ mod tests { #[test] fn test_decode_list() { - let v: ~[()] = Decodable::decode(&Decoder(from_str(~"[]").unwrap())); + let mut decoder = Decoder(from_str(~"[]").unwrap()); + let v: ~[()] = Decodable::decode(&mut decoder); assert_eq!(v, ~[]); - let v: ~[()] = Decodable::decode(&Decoder(from_str(~"[null]").unwrap())); + let mut decoder = Decoder(from_str(~"[null]").unwrap()); + let v: ~[()] = Decodable::decode(&mut decoder); assert_eq!(v, ~[()]); - - let v: ~[bool] = Decodable::decode(&Decoder(from_str(~"[true]").unwrap())); + let mut decoder = Decoder(from_str(~"[true]").unwrap()); + let v: ~[bool] = Decodable::decode(&mut decoder); assert_eq!(v, ~[true]); - let v: ~[bool] = Decodable::decode(&Decoder(from_str(~"[true]").unwrap())); + let mut decoder = Decoder(from_str(~"[true]").unwrap()); + let v: ~[bool] = Decodable::decode(&mut decoder); assert_eq!(v, ~[true]); - let v: ~[int] = Decodable::decode(&Decoder(from_str(~"[3, 1]").unwrap())); + let mut decoder = Decoder(from_str(~"[3, 1]").unwrap()); + let v: ~[int] = Decodable::decode(&mut decoder); assert_eq!(v, ~[3, 1]); - let v: ~[~[uint]] = Decodable::decode(&Decoder(from_str(~"[[3], [1, 2]]").unwrap())); + let mut decoder = Decoder(from_str(~"[[3], [1, 2]]").unwrap()); + let v: ~[~[uint]] = Decodable::decode(&mut decoder); assert_eq!(v, ~[~[3], ~[1, 2]]); } @@ -1822,7 +2539,8 @@ mod tests { { \"a\": null, \"b\": 2, \"c\": [\"abc\", \"xyz\"] } ] }"; - let v: Outer = Decodable::decode(&Decoder(from_str(s).unwrap())); + let mut decoder = Decoder(from_str(s).unwrap()); + let v: Outer = Decodable::decode(&mut decoder); assert_eq!( v, Outer { @@ -1835,31 +2553,32 @@ mod tests { #[test] fn test_decode_option() { - let decoder = Decoder(from_str(~"null").unwrap()); - let value: Option<~str> = Decodable::decode(&decoder); + let mut decoder = Decoder(from_str(~"null").unwrap()); + let value: Option<~str> = Decodable::decode(&mut decoder); assert_eq!(value, None); - let decoder = Decoder(from_str(~"\"jodhpurs\"").unwrap()); - let value: Option<~str> = Decodable::decode(&decoder); + let mut decoder = Decoder(from_str(~"\"jodhpurs\"").unwrap()); + let value: Option<~str> = Decodable::decode(&mut decoder); assert_eq!(value, Some(~"jodhpurs")); } #[test] fn test_decode_enum() { - let decoder = Decoder(from_str(~"\"Dog\"").unwrap()); - let value: Animal = Decodable::decode(&decoder); + let mut decoder = Decoder(from_str(~"\"Dog\"").unwrap()); + let value: Animal = Decodable::decode(&mut decoder); assert_eq!(value, Dog); - let decoder = Decoder(from_str(~"[\"Frog\",\"Henry\",349]").unwrap()); - let value: Animal = Decodable::decode(&decoder); + let mut decoder = + Decoder(from_str(~"[\"Frog\",\"Henry\",349]").unwrap()); + let value: Animal = Decodable::decode(&mut decoder); assert_eq!(value, Frog(~"Henry", 349)); } #[test] fn test_decode_map() { let s = ~"{\"a\": \"Dog\", \"b\": [\"Frog\", \"Henry\", 349]}"; - let decoder = Decoder(from_str(s).unwrap()); - let mut map: HashMap<~str, Animal> = Decodable::decode(&decoder); + let mut decoder = Decoder(from_str(s).unwrap()); + let mut map: HashMap<~str, Animal> = Decodable::decode(&mut decoder); assert_eq!(map.pop(&~"a"), Some(Dog)); assert_eq!(map.pop(&~"b"), Some(Frog(~"Henry", 349))); diff --git a/src/libstd/serialize.rs b/src/libstd/serialize.rs index 1ad581ba993e4..33efb2c6a5af4 100644 --- a/src/libstd/serialize.rs +++ b/src/libstd/serialize.rs @@ -25,6 +25,7 @@ use dlist::DList; #[cfg(stage3)] use treemap::{TreeMap, TreeSet}; +#[cfg(stage0)] pub trait Encoder { // Primitive types: fn emit_nil(&self); @@ -48,11 +49,22 @@ pub trait Encoder { // Compound types: fn emit_enum(&self, name: &str, f: &fn()); - fn emit_enum_variant(&self, v_name: &str, v_id: uint, len: uint, f: &fn()); + fn emit_enum_variant(&self, + v_name: &str, + v_id: uint, + len: uint, + f: &fn()); fn emit_enum_variant_arg(&self, a_idx: uint, f: &fn()); - fn emit_enum_struct_variant(&self, v_name: &str, v_id: uint, len: uint, f: &fn()); - fn emit_enum_struct_variant_field(&self, f_name: &str, f_idx: uint, f: &fn()); + fn emit_enum_struct_variant(&self, + v_name: &str, + v_id: uint, + len: uint, + f: &fn()); + fn emit_enum_struct_variant_field(&self, + f_name: &str, + f_idx: uint, + f: &fn()); fn emit_struct(&self, name: &str, len: uint, f: &fn()); #[cfg(stage0)] @@ -81,6 +93,73 @@ pub trait Encoder { fn emit_map_elt_val(&self, idx: uint, f: &fn()); } +#[cfg(not(stage0))] +pub trait Encoder { + // Primitive types: + fn emit_nil(&mut self); + fn emit_uint(&mut self, v: uint); + fn emit_u64(&mut self, v: u64); + fn emit_u32(&mut self, v: u32); + fn emit_u16(&mut self, v: u16); + fn emit_u8(&mut self, v: u8); + fn emit_int(&mut self, v: int); + fn emit_i64(&mut self, v: i64); + fn emit_i32(&mut self, v: i32); + fn emit_i16(&mut self, v: i16); + fn emit_i8(&mut self, v: i8); + fn emit_bool(&mut self, v: bool); + fn emit_float(&mut self, v: float); + fn emit_f64(&mut self, v: f64); + fn emit_f32(&mut self, v: f32); + fn emit_char(&mut self, v: char); + fn emit_str(&mut self, v: &str); + + // Compound types: + fn emit_enum(&mut self, name: &str, f: &fn(&mut Self)); + + fn emit_enum_variant(&mut self, + v_name: &str, + v_id: uint, + len: uint, + f: &fn(&mut Self)); + fn emit_enum_variant_arg(&mut self, a_idx: uint, f: &fn(&mut Self)); + + fn emit_enum_struct_variant(&mut self, + v_name: &str, + v_id: uint, + len: uint, + f: &fn(&mut Self)); + fn emit_enum_struct_variant_field(&mut self, + f_name: &str, + f_idx: uint, + f: &fn(&mut Self)); + + fn emit_struct(&mut self, name: &str, len: uint, f: &fn(&mut Self)); + fn emit_struct_field(&mut self, + f_name: &str, + f_idx: uint, + f: &fn(&mut Self)); + + fn emit_tuple(&mut self, len: uint, f: &fn(&mut Self)); + fn emit_tuple_arg(&mut self, idx: uint, f: &fn(&mut Self)); + + fn emit_tuple_struct(&mut self, name: &str, len: uint, f: &fn(&mut Self)); + fn emit_tuple_struct_arg(&mut self, f_idx: uint, f: &fn(&mut Self)); + + // Specialized types: + fn emit_option(&mut self, f: &fn(&mut Self)); + fn emit_option_none(&mut self); + fn emit_option_some(&mut self, f: &fn(&mut Self)); + + fn emit_seq(&mut self, len: uint, f: &fn(this: &mut Self)); + fn emit_seq_elt(&mut self, idx: uint, f: &fn(this: &mut Self)); + + fn emit_map(&mut self, len: uint, f: &fn(&mut Self)); + fn emit_map_elt_key(&mut self, idx: uint, f: &fn(&mut Self)); + fn emit_map_elt_val(&mut self, idx: uint, f: &fn(&mut Self)); +} + +#[cfg(stage0)] pub trait Decoder { // Primitive types: fn read_nil(&self) -> (); @@ -104,19 +183,37 @@ pub trait Decoder { // Compound types: fn read_enum(&self, name: &str, f: &fn() -> T) -> T; - fn read_enum_variant(&self, names: &[&str], f: &fn(uint) -> T) -> T; + fn read_enum_variant(&self, + names: &[&str], + f: &fn(uint) -> T) + -> T; fn read_enum_variant_arg(&self, a_idx: uint, f: &fn() -> T) -> T; - fn read_enum_struct_variant(&self, names: &[&str], f: &fn(uint) -> T) -> T; - fn read_enum_struct_variant_field(&self, &f_name: &str, f_idx: uint, f: &fn() -> T) -> T; + fn read_enum_struct_variant(&self, + names: &[&str], + f: &fn(uint) -> T) + -> T; + fn read_enum_struct_variant_field(&self, + &f_name: &str, + f_idx: uint, + f: &fn() -> T) + -> T; fn read_struct(&self, s_name: &str, len: uint, f: &fn() -> T) -> T; #[cfg(stage0)] - fn read_field(&self, f_name: &str, f_idx: uint, f: &fn() -> T) -> T; + fn read_field(&self, + f_name: &str, + f_idx: uint, + f: &fn() -> T) + -> T; #[cfg(stage1)] #[cfg(stage2)] #[cfg(stage3)] - fn read_struct_field(&self, f_name: &str, f_idx: uint, f: &fn() -> T) -> T; + fn read_struct_field(&self, + f_name: &str, + f_idx: uint, + f: &fn() -> T) + -> T; fn read_tuple(&self, f: &fn(uint) -> T) -> T; fn read_tuple_arg(&self, a_idx: uint, f: &fn() -> T) -> T; @@ -135,215 +232,673 @@ pub trait Decoder { fn read_map_elt_val(&self, idx: uint, f: &fn() -> T) -> T; } +#[cfg(not(stage0))] +pub trait Decoder { + // Primitive types: + fn read_nil(&mut self) -> (); + fn read_uint(&mut self) -> uint; + fn read_u64(&mut self) -> u64; + fn read_u32(&mut self) -> u32; + fn read_u16(&mut self) -> u16; + fn read_u8(&mut self) -> u8; + fn read_int(&mut self) -> int; + fn read_i64(&mut self) -> i64; + fn read_i32(&mut self) -> i32; + fn read_i16(&mut self) -> i16; + fn read_i8(&mut self) -> i8; + fn read_bool(&mut self) -> bool; + fn read_f64(&mut self) -> f64; + fn read_f32(&mut self) -> f32; + fn read_float(&mut self) -> float; + fn read_char(&mut self) -> char; + fn read_str(&mut self) -> ~str; + + // Compound types: + fn read_enum(&mut self, name: &str, f: &fn(&mut Self) -> T) -> T; + + fn read_enum_variant(&mut self, + names: &[&str], + f: &fn(&mut Self, uint) -> T) + -> T; + fn read_enum_variant_arg(&mut self, + a_idx: uint, + f: &fn(&mut Self) -> T) + -> T; + + fn read_enum_struct_variant(&mut self, + names: &[&str], + f: &fn(&mut Self, uint) -> T) + -> T; + fn read_enum_struct_variant_field(&mut self, + &f_name: &str, + f_idx: uint, + f: &fn(&mut Self) -> T) + -> T; + + fn read_struct(&mut self, + s_name: &str, + len: uint, + f: &fn(&mut Self) -> T) + -> T; + #[cfg(stage0)] + fn read_field(&mut self, + f_name: &str, + f_idx: uint, + f: &fn() -> T) + -> T; + #[cfg(stage1)] + #[cfg(stage2)] + #[cfg(stage3)] + fn read_struct_field(&mut self, + f_name: &str, + f_idx: uint, + f: &fn(&mut Self) -> T) + -> T; + + fn read_tuple(&mut self, f: &fn(&mut Self, uint) -> T) -> T; + fn read_tuple_arg(&mut self, a_idx: uint, f: &fn(&mut Self) -> T) -> T; + + fn read_tuple_struct(&mut self, + s_name: &str, + f: &fn(&mut Self, uint) -> T) + -> T; + fn read_tuple_struct_arg(&mut self, + a_idx: uint, + f: &fn(&mut Self) -> T) + -> T; + + // Specialized types: + fn read_option(&mut self, f: &fn(&mut Self, bool) -> T) -> T; + + fn read_seq(&mut self, f: &fn(&mut Self, uint) -> T) -> T; + fn read_seq_elt(&mut self, idx: uint, f: &fn(&mut Self) -> T) -> T; + + fn read_map(&mut self, f: &fn(&mut Self, uint) -> T) -> T; + fn read_map_elt_key(&mut self, idx: uint, f: &fn(&mut Self) -> T) -> T; + fn read_map_elt_val(&mut self, idx: uint, f: &fn(&mut Self) -> T) -> T; +} + +#[cfg(stage0)] pub trait Encodable { fn encode(&self, s: &S); } +#[cfg(not(stage0))] +pub trait Encodable { + fn encode(&self, s: &mut S); +} + +#[cfg(stage0)] pub trait Decodable { fn decode(d: &D) -> Self; } +#[cfg(not(stage0))] +pub trait Decodable { + fn decode(d: &mut D) -> Self; +} + +#[cfg(stage0)] impl Encodable for uint { - fn encode(&self, s: &S) { s.emit_uint(*self) } + fn encode(&self, s: &S) { + s.emit_uint(*self) + } } +#[cfg(not(stage0))] +impl Encodable for uint { + fn encode(&self, s: &mut S) { + s.emit_uint(*self) + } +} + +#[cfg(stage0)] impl Decodable for uint { fn decode(d: &D) -> uint { d.read_uint() } } +#[cfg(not(stage0))] +impl Decodable for uint { + fn decode(d: &mut D) -> uint { + d.read_uint() + } +} + +#[cfg(stage0)] impl Encodable for u8 { - fn encode(&self, s: &S) { s.emit_u8(*self) } + fn encode(&self, s: &S) { + s.emit_u8(*self) + } +} + +#[cfg(not(stage0))] +impl Encodable for u8 { + fn encode(&self, s: &mut S) { + s.emit_u8(*self) + } } +#[cfg(stage0)] impl Decodable for u8 { fn decode(d: &D) -> u8 { d.read_u8() } } +#[cfg(not(stage0))] +impl Decodable for u8 { + fn decode(d: &mut D) -> u8 { + d.read_u8() + } +} + +#[cfg(stage0)] impl Encodable for u16 { - fn encode(&self, s: &S) { s.emit_u16(*self) } + fn encode(&self, s: &S) { + s.emit_u16(*self) + } +} + +#[cfg(not(stage0))] +impl Encodable for u16 { + fn encode(&self, s: &mut S) { + s.emit_u16(*self) + } } +#[cfg(stage0)] impl Decodable for u16 { fn decode(d: &D) -> u16 { d.read_u16() } } +#[cfg(not(stage0))] +impl Decodable for u16 { + fn decode(d: &mut D) -> u16 { + d.read_u16() + } +} + +#[cfg(stage0)] impl Encodable for u32 { - fn encode(&self, s: &S) { s.emit_u32(*self) } + fn encode(&self, s: &S) { + s.emit_u32(*self) + } +} + +#[cfg(not(stage0))] +impl Encodable for u32 { + fn encode(&self, s: &mut S) { + s.emit_u32(*self) + } } +#[cfg(stage0)] impl Decodable for u32 { fn decode(d: &D) -> u32 { d.read_u32() } } +#[cfg(not(stage0))] +impl Decodable for u32 { + fn decode(d: &mut D) -> u32 { + d.read_u32() + } +} + +#[cfg(stage0)] +impl Encodable for u64 { + fn encode(&self, s: &S) { + s.emit_u64(*self) + } +} + +#[cfg(not(stage0))] impl Encodable for u64 { - fn encode(&self, s: &S) { s.emit_u64(*self) } + fn encode(&self, s: &mut S) { + s.emit_u64(*self) + } } +#[cfg(stage0)] impl Decodable for u64 { fn decode(d: &D) -> u64 { d.read_u64() } } +#[cfg(not(stage0))] +impl Decodable for u64 { + fn decode(d: &mut D) -> u64 { + d.read_u64() + } +} + +#[cfg(stage0)] impl Encodable for int { - fn encode(&self, s: &S) { s.emit_int(*self) } + fn encode(&self, s: &S) { + s.emit_int(*self) + } } +#[cfg(not(stage0))] +impl Encodable for int { + fn encode(&self, s: &mut S) { + s.emit_int(*self) + } +} + +#[cfg(stage0)] impl Decodable for int { fn decode(d: &D) -> int { d.read_int() } } +#[cfg(not(stage0))] +impl Decodable for int { + fn decode(d: &mut D) -> int { + d.read_int() + } +} + +#[cfg(stage0)] +impl Encodable for i8 { + fn encode(&self, s: &S) { + s.emit_i8(*self) + } +} + +#[cfg(not(stage0))] impl Encodable for i8 { - fn encode(&self, s: &S) { s.emit_i8(*self) } + fn encode(&self, s: &mut S) { + s.emit_i8(*self) + } } +#[cfg(stage0)] impl Decodable for i8 { fn decode(d: &D) -> i8 { d.read_i8() } } +#[cfg(not(stage0))] +impl Decodable for i8 { + fn decode(d: &mut D) -> i8 { + d.read_i8() + } +} + +#[cfg(stage0)] +impl Encodable for i16 { + fn encode(&self, s: &S) { + s.emit_i16(*self) + } +} + +#[cfg(not(stage0))] impl Encodable for i16 { - fn encode(&self, s: &S) { s.emit_i16(*self) } + fn encode(&self, s: &mut S) { + s.emit_i16(*self) + } } +#[cfg(stage0)] impl Decodable for i16 { fn decode(d: &D) -> i16 { d.read_i16() } } +#[cfg(not(stage0))] +impl Decodable for i16 { + fn decode(d: &mut D) -> i16 { + d.read_i16() + } +} + +#[cfg(stage0)] +impl Encodable for i32 { + fn encode(&self, s: &S) { + s.emit_i32(*self) + } +} + +#[cfg(not(stage0))] impl Encodable for i32 { - fn encode(&self, s: &S) { s.emit_i32(*self) } + fn encode(&self, s: &mut S) { + s.emit_i32(*self) + } } +#[cfg(stage0)] impl Decodable for i32 { fn decode(d: &D) -> i32 { d.read_i32() } } +#[cfg(not(stage0))] +impl Decodable for i32 { + fn decode(d: &mut D) -> i32 { + d.read_i32() + } +} + +#[cfg(stage0)] impl Encodable for i64 { - fn encode(&self, s: &S) { s.emit_i64(*self) } + fn encode(&self, s: &S) { + s.emit_i64(*self) + } +} + +#[cfg(not(stage0))] +impl Encodable for i64 { + fn encode(&self, s: &mut S) { + s.emit_i64(*self) + } } +#[cfg(stage0)] impl Decodable for i64 { fn decode(d: &D) -> i64 { d.read_i64() } } +#[cfg(not(stage0))] +impl Decodable for i64 { + fn decode(d: &mut D) -> i64 { + d.read_i64() + } +} + +#[cfg(stage0)] impl<'self, S:Encoder> Encodable for &'self str { - fn encode(&self, s: &S) { s.emit_str(*self) } + fn encode(&self, s: &S) { + s.emit_str(*self) + } } +#[cfg(not(stage0))] +impl<'self, S:Encoder> Encodable for &'self str { + fn encode(&self, s: &mut S) { + s.emit_str(*self) + } +} + +#[cfg(stage0)] +impl Encodable for ~str { + fn encode(&self, s: &S) { + s.emit_str(*self) + } +} + +#[cfg(not(stage0))] impl Encodable for ~str { - fn encode(&self, s: &S) { s.emit_str(*self) } + fn encode(&self, s: &mut S) { + s.emit_str(*self) + } } +#[cfg(stage0)] impl Decodable for ~str { fn decode(d: &D) -> ~str { d.read_str() } } +#[cfg(not(stage0))] +impl Decodable for ~str { + fn decode(d: &mut D) -> ~str { + d.read_str() + } +} + +#[cfg(stage0)] +impl Encodable for @str { + fn encode(&self, s: &S) { + s.emit_str(*self) + } +} + +#[cfg(not(stage0))] impl Encodable for @str { - fn encode(&self, s: &S) { s.emit_str(*self) } + fn encode(&self, s: &mut S) { + s.emit_str(*self) + } } +#[cfg(stage0)] impl Decodable for @str { - fn decode(d: &D) -> @str { d.read_str().to_managed() } + fn decode(d: &D) -> @str { + d.read_str().to_managed() + } } +#[cfg(not(stage0))] +impl Decodable for @str { + fn decode(d: &mut D) -> @str { + d.read_str().to_managed() + } +} + +#[cfg(stage0)] impl Encodable for float { - fn encode(&self, s: &S) { s.emit_float(*self) } + fn encode(&self, s: &S) { + s.emit_float(*self) + } } +#[cfg(not(stage0))] +impl Encodable for float { + fn encode(&self, s: &mut S) { + s.emit_float(*self) + } +} + +#[cfg(stage0)] impl Decodable for float { fn decode(d: &D) -> float { d.read_float() } } +#[cfg(not(stage0))] +impl Decodable for float { + fn decode(d: &mut D) -> float { + d.read_float() + } +} + +#[cfg(stage0)] +impl Encodable for f32 { + fn encode(&self, s: &S) { + s.emit_f32(*self) + } +} + +#[cfg(not(stage0))] impl Encodable for f32 { - fn encode(&self, s: &S) { s.emit_f32(*self) } + fn encode(&self, s: &mut S) { + s.emit_f32(*self) + } } +#[cfg(stage0)] impl Decodable for f32 { fn decode(d: &D) -> f32 { - d.read_f32() } + d.read_f32() + } } +#[cfg(not(stage0))] +impl Decodable for f32 { + fn decode(d: &mut D) -> f32 { + d.read_f32() + } +} + +#[cfg(stage0)] +impl Encodable for f64 { + fn encode(&self, s: &S) { + s.emit_f64(*self) + } +} + +#[cfg(not(stage0))] impl Encodable for f64 { - fn encode(&self, s: &S) { s.emit_f64(*self) } + fn encode(&self, s: &mut S) { + s.emit_f64(*self) + } } +#[cfg(stage0)] impl Decodable for f64 { fn decode(d: &D) -> f64 { d.read_f64() } } +#[cfg(not(stage0))] +impl Decodable for f64 { + fn decode(d: &mut D) -> f64 { + d.read_f64() + } +} + +#[cfg(stage0)] +impl Encodable for bool { + fn encode(&self, s: &S) { + s.emit_bool(*self) + } +} + +#[cfg(not(stage0))] impl Encodable for bool { - fn encode(&self, s: &S) { s.emit_bool(*self) } + fn encode(&self, s: &mut S) { + s.emit_bool(*self) + } } +#[cfg(stage0)] impl Decodable for bool { fn decode(d: &D) -> bool { d.read_bool() } } +#[cfg(not(stage0))] +impl Decodable for bool { + fn decode(d: &mut D) -> bool { + d.read_bool() + } +} + +#[cfg(stage0)] impl Encodable for () { - fn encode(&self, s: &S) { s.emit_nil() } + fn encode(&self, s: &S) { + s.emit_nil() + } } +#[cfg(not(stage0))] +impl Encodable for () { + fn encode(&self, s: &mut S) { + s.emit_nil() + } +} + +#[cfg(stage0)] impl Decodable for () { fn decode(d: &D) -> () { d.read_nil() } } +#[cfg(not(stage0))] +impl Decodable for () { + fn decode(d: &mut D) -> () { + d.read_nil() + } +} + +#[cfg(stage0)] impl<'self, S:Encoder,T:Encodable> Encodable for &'self T { fn encode(&self, s: &S) { (**self).encode(s) } } +#[cfg(not(stage0))] +impl<'self, S:Encoder,T:Encodable> Encodable for &'self T { + fn encode(&self, s: &mut S) { + (**self).encode(s) + } +} + +#[cfg(stage0)] impl> Encodable for ~T { fn encode(&self, s: &S) { (**self).encode(s) } } +#[cfg(not(stage0))] +impl> Encodable for ~T { + fn encode(&self, s: &mut S) { + (**self).encode(s) + } +} + +#[cfg(stage0)] impl> Decodable for ~T { fn decode(d: &D) -> ~T { ~Decodable::decode(d) } } +#[cfg(not(stage0))] +impl> Decodable for ~T { + fn decode(d: &mut D) -> ~T { + ~Decodable::decode(d) + } +} + +#[cfg(stage0)] impl> Encodable for @T { fn encode(&self, s: &S) { (**self).encode(s) } } +#[cfg(not(stage0))] +impl> Encodable for @T { + fn encode(&self, s: &mut S) { + (**self).encode(s) + } +} + +#[cfg(stage0)] impl> Decodable for @T { fn decode(d: &D) -> @T { @Decodable::decode(d) } } +#[cfg(not(stage0))] +impl> Decodable for @T { + fn decode(d: &mut D) -> @T { + @Decodable::decode(d) + } +} + +#[cfg(stage0)] impl<'self, S:Encoder,T:Encodable> Encodable for &'self [T] { fn encode(&self, s: &S) { do s.emit_seq(self.len()) { @@ -354,6 +909,18 @@ impl<'self, S:Encoder,T:Encodable> Encodable for &'self [T] { } } +#[cfg(not(stage0))] +impl<'self, S:Encoder,T:Encodable> Encodable for &'self [T] { + fn encode(&self, s: &mut S) { + do s.emit_seq(self.len()) |s| { + for self.eachi |i, e| { + s.emit_seq_elt(i, |s| e.encode(s)) + } + } + } +} + +#[cfg(stage0)] impl> Encodable for ~[T] { fn encode(&self, s: &S) { do s.emit_seq(self.len()) { @@ -364,6 +931,18 @@ impl> Encodable for ~[T] { } } +#[cfg(not(stage0))] +impl> Encodable for ~[T] { + fn encode(&self, s: &mut S) { + do s.emit_seq(self.len()) |s| { + for self.eachi |i, e| { + s.emit_seq_elt(i, |s| e.encode(s)) + } + } + } +} + +#[cfg(stage0)] impl> Decodable for ~[T] { fn decode(d: &D) -> ~[T] { do d.read_seq |len| { @@ -374,6 +953,18 @@ impl> Decodable for ~[T] { } } +#[cfg(not(stage0))] +impl> Decodable for ~[T] { + fn decode(d: &mut D) -> ~[T] { + do d.read_seq |d, len| { + do vec::from_fn(len) |i| { + d.read_seq_elt(i, |d| Decodable::decode(d)) + } + } + } +} + +#[cfg(stage0)] impl> Encodable for @[T] { fn encode(&self, s: &S) { do s.emit_seq(self.len()) { @@ -384,6 +975,18 @@ impl> Encodable for @[T] { } } +#[cfg(not(stage0))] +impl> Encodable for @[T] { + fn encode(&self, s: &mut S) { + do s.emit_seq(self.len()) |s| { + for self.eachi |i, e| { + s.emit_seq_elt(i, |s| e.encode(s)) + } + } + } +} + +#[cfg(stage0)] impl> Decodable for @[T] { fn decode(d: &D) -> @[T] { do d.read_seq |len| { @@ -394,6 +997,18 @@ impl> Decodable for @[T] { } } +#[cfg(not(stage0))] +impl> Decodable for @[T] { + fn decode(d: &mut D) -> @[T] { + do d.read_seq |d, len| { + do at_vec::from_fn(len) |i| { + d.read_seq_elt(i, |d| Decodable::decode(d)) + } + } + } +} + +#[cfg(stage0)] impl> Encodable for Option { fn encode(&self, s: &S) { do s.emit_option { @@ -405,6 +1020,19 @@ impl> Encodable for Option { } } +#[cfg(not(stage0))] +impl> Encodable for Option { + fn encode(&self, s: &mut S) { + do s.emit_option |s| { + match *self { + None => s.emit_option_none(), + Some(ref v) => s.emit_option_some(|s| v.encode(s)), + } + } + } +} + +#[cfg(stage0)] impl> Decodable for Option { fn decode(d: &D) -> Option { do d.read_option |b| { @@ -417,6 +1045,20 @@ impl> Decodable for Option { } } +#[cfg(not(stage0))] +impl> Decodable for Option { + fn decode(d: &mut D) -> Option { + do d.read_option |d, b| { + if b { + Some(Decodable::decode(d)) + } else { + None + } + } + } +} + +#[cfg(stage0)] impl,T1:Encodable> Encodable for (T0, T1) { fn encode(&self, s: &S) { match *self { @@ -430,6 +1072,21 @@ impl,T1:Encodable> Encodable for (T0, T1) { } } +#[cfg(not(stage0))] +impl,T1:Encodable> Encodable for (T0, T1) { + fn encode(&self, s: &mut S) { + match *self { + (ref t0, ref t1) => { + do s.emit_seq(2) |s| { + s.emit_seq_elt(0, |s| t0.encode(s)); + s.emit_seq_elt(1, |s| t1.encode(s)); + } + } + } + } +} + +#[cfg(stage0)] impl,T1:Decodable> Decodable for (T0, T1) { fn decode(d: &D) -> (T0, T1) { do d.read_seq |len| { @@ -442,6 +1099,20 @@ impl,T1:Decodable> Decodable for (T0, T1) { } } +#[cfg(not(stage0))] +impl,T1:Decodable> Decodable for (T0, T1) { + fn decode(d: &mut D) -> (T0, T1) { + do d.read_seq |d, len| { + assert!(len == 2); + ( + d.read_seq_elt(0, |d| Decodable::decode(d)), + d.read_seq_elt(1, |d| Decodable::decode(d)) + ) + } + } +} + +#[cfg(stage0)] impl< S: Encoder, T0: Encodable, @@ -461,6 +1132,27 @@ impl< } } +#[cfg(not(stage0))] +impl< + S: Encoder, + T0: Encodable, + T1: Encodable, + T2: Encodable +> Encodable for (T0, T1, T2) { + fn encode(&self, s: &mut S) { + match *self { + (ref t0, ref t1, ref t2) => { + do s.emit_seq(3) |s| { + s.emit_seq_elt(0, |s| t0.encode(s)); + s.emit_seq_elt(1, |s| t1.encode(s)); + s.emit_seq_elt(2, |s| t2.encode(s)); + } + } + } + } +} + +#[cfg(stage0)] impl< D: Decoder, T0: Decodable, @@ -479,6 +1171,26 @@ impl< } } +#[cfg(not(stage0))] +impl< + D: Decoder, + T0: Decodable, + T1: Decodable, + T2: Decodable +> Decodable for (T0, T1, T2) { + fn decode(d: &mut D) -> (T0, T1, T2) { + do d.read_seq |d, len| { + assert!(len == 3); + ( + d.read_seq_elt(0, |d| Decodable::decode(d)), + d.read_seq_elt(1, |d| Decodable::decode(d)), + d.read_seq_elt(2, |d| Decodable::decode(d)) + ) + } + } +} + +#[cfg(stage0)] impl< S: Encoder, T0: Encodable, @@ -500,6 +1212,29 @@ impl< } } +#[cfg(not(stage0))] +impl< + S: Encoder, + T0: Encodable, + T1: Encodable, + T2: Encodable, + T3: Encodable +> Encodable for (T0, T1, T2, T3) { + fn encode(&self, s: &mut S) { + match *self { + (ref t0, ref t1, ref t2, ref t3) => { + do s.emit_seq(4) |s| { + s.emit_seq_elt(0, |s| t0.encode(s)); + s.emit_seq_elt(1, |s| t1.encode(s)); + s.emit_seq_elt(2, |s| t2.encode(s)); + s.emit_seq_elt(3, |s| t3.encode(s)); + } + } + } + } +} + +#[cfg(stage0)] impl< D: Decoder, T0: Decodable, @@ -520,6 +1255,28 @@ impl< } } +#[cfg(not(stage0))] +impl< + D: Decoder, + T0: Decodable, + T1: Decodable, + T2: Decodable, + T3: Decodable +> Decodable for (T0, T1, T2, T3) { + fn decode(d: &mut D) -> (T0, T1, T2, T3) { + do d.read_seq |d, len| { + assert!(len == 4); + ( + d.read_seq_elt(0, |d| Decodable::decode(d)), + d.read_seq_elt(1, |d| Decodable::decode(d)), + d.read_seq_elt(2, |d| Decodable::decode(d)), + d.read_seq_elt(3, |d| Decodable::decode(d)) + ) + } + } +} + +#[cfg(stage0)] impl< S: Encoder, T0: Encodable, @@ -543,6 +1300,31 @@ impl< } } +#[cfg(not(stage0))] +impl< + S: Encoder, + T0: Encodable, + T1: Encodable, + T2: Encodable, + T3: Encodable, + T4: Encodable +> Encodable for (T0, T1, T2, T3, T4) { + fn encode(&self, s: &mut S) { + match *self { + (ref t0, ref t1, ref t2, ref t3, ref t4) => { + do s.emit_seq(5) |s| { + s.emit_seq_elt(0, |s| t0.encode(s)); + s.emit_seq_elt(1, |s| t1.encode(s)); + s.emit_seq_elt(2, |s| t2.encode(s)); + s.emit_seq_elt(3, |s| t3.encode(s)); + s.emit_seq_elt(4, |s| t4.encode(s)); + } + } + } + } +} + +#[cfg(stage0)] impl< D: Decoder, T0: Decodable, @@ -551,8 +1333,7 @@ impl< T3: Decodable, T4: Decodable > Decodable for (T0, T1, T2, T3, T4) { - fn decode(d: &D) - -> (T0, T1, T2, T3, T4) { + fn decode(d: &D) -> (T0, T1, T2, T3, T4) { do d.read_seq |len| { assert!(len == 5); ( @@ -566,6 +1347,30 @@ impl< } } +#[cfg(not(stage0))] +impl< + D: Decoder, + T0: Decodable, + T1: Decodable, + T2: Decodable, + T3: Decodable, + T4: Decodable +> Decodable for (T0, T1, T2, T3, T4) { + fn decode(d: &mut D) -> (T0, T1, T2, T3, T4) { + do d.read_seq |d, len| { + assert!(len == 5); + ( + d.read_seq_elt(0, |d| Decodable::decode(d)), + d.read_seq_elt(1, |d| Decodable::decode(d)), + d.read_seq_elt(2, |d| Decodable::decode(d)), + d.read_seq_elt(3, |d| Decodable::decode(d)), + d.read_seq_elt(4, |d| Decodable::decode(d)) + ) + } + } +} + +#[cfg(stage0)] impl< S: Encoder, T: Encodable + Copy @@ -581,6 +1386,23 @@ impl< } } +#[cfg(not(stage0))] +impl< + S: Encoder, + T: Encodable + Copy +> Encodable for @mut DList { + fn encode(&self, s: &mut S) { + do s.emit_seq(self.size) |s| { + let mut i = 0; + for self.each |e| { + s.emit_seq_elt(i, |s| e.encode(s)); + i += 1; + } + } + } +} + +#[cfg(stage0)] impl> Decodable for @mut DList { fn decode(d: &D) -> @mut DList { let list = DList(); @@ -593,6 +1415,20 @@ impl> Decodable for @mut DList { } } +#[cfg(not(stage0))] +impl> Decodable for @mut DList { + fn decode(d: &mut D) -> @mut DList { + let list = DList(); + do d.read_seq |d, len| { + for uint::range(0, len) |i| { + list.push(d.read_seq_elt(i, |d| Decodable::decode(d))); + } + } + list + } +} + +#[cfg(stage0)] impl< S: Encoder, T: Encodable @@ -606,6 +1442,21 @@ impl< } } +#[cfg(not(stage0))] +impl< + S: Encoder, + T: Encodable +> Encodable for Deque { + fn encode(&self, s: &mut S) { + do s.emit_seq(self.len()) |s| { + for self.eachi |i, e| { + s.emit_seq_elt(i, |s| e.encode(s)); + } + } + } +} + +#[cfg(stage0)] impl> Decodable for Deque { fn decode(d: &D) -> Deque { let mut deque = Deque::new(); @@ -618,6 +1469,20 @@ impl> Decodable for Deque { } } +#[cfg(not(stage0))] +impl> Decodable for Deque { + fn decode(d: &mut D) -> Deque { + let mut deque = Deque::new(); + do d.read_seq |d, len| { + for uint::range(0, len) |i| { + deque.add_back(d.read_seq_elt(i, |d| Decodable::decode(d))); + } + } + deque + } +} + +#[cfg(stage0)] impl< E: Encoder, K: Encodable + Hash + IterBytes + Eq, @@ -635,6 +1500,25 @@ impl< } } +#[cfg(not(stage0))] +impl< + E: Encoder, + K: Encodable + Hash + IterBytes + Eq, + V: Encodable +> Encodable for HashMap { + fn encode(&self, e: &mut E) { + do e.emit_map(self.len()) |e| { + let mut i = 0; + for self.each |key, val| { + e.emit_map_elt_key(i, |e| key.encode(e)); + e.emit_map_elt_val(i, |e| val.encode(e)); + i += 1; + } + } + } +} + +#[cfg(stage0)] impl< D: Decoder, K: Decodable + Hash + IterBytes + Eq, @@ -653,6 +1537,26 @@ impl< } } +#[cfg(not(stage0))] +impl< + D: Decoder, + K: Decodable + Hash + IterBytes + Eq, + V: Decodable +> Decodable for HashMap { + fn decode(d: &mut D) -> HashMap { + do d.read_map |d, len| { + let mut map = HashMap::with_capacity(len); + for uint::range(0, len) |i| { + let key = d.read_map_elt_key(i, |d| Decodable::decode(d)); + let val = d.read_map_elt_val(i, |d| Decodable::decode(d)); + map.insert(key, val); + } + map + } + } +} + +#[cfg(stage0)] impl< S: Encoder, T: Encodable + Hash + IterBytes + Eq @@ -668,6 +1572,23 @@ impl< } } +#[cfg(not(stage0))] +impl< + S: Encoder, + T: Encodable + Hash + IterBytes + Eq +> Encodable for HashSet { + fn encode(&self, s: &mut S) { + do s.emit_seq(self.len()) |s| { + let mut i = 0; + for self.each |e| { + s.emit_seq_elt(i, |s| e.encode(s)); + i += 1; + } + } + } +} + +#[cfg(stage0)] impl< D: Decoder, T: Decodable + Hash + IterBytes + Eq @@ -683,6 +1604,23 @@ impl< } } +#[cfg(not(stage0))] +impl< + D: Decoder, + T: Decodable + Hash + IterBytes + Eq +> Decodable for HashSet { + fn decode(d: &mut D) -> HashSet { + do d.read_seq |d, len| { + let mut set = HashSet::with_capacity(len); + for uint::range(0, len) |i| { + set.insert(d.read_seq_elt(i, |d| Decodable::decode(d))); + } + set + } + } +} + +#[cfg(stage0)] impl< E: Encoder, V: Encodable @@ -699,6 +1637,24 @@ impl< } } +#[cfg(not(stage0))] +impl< + E: Encoder, + V: Encodable +> Encodable for TrieMap { + fn encode(&self, e: &mut E) { + do e.emit_map(self.len()) |e| { + let mut i = 0; + for self.each |key, val| { + e.emit_map_elt_key(i, |e| key.encode(e)); + e.emit_map_elt_val(i, |e| val.encode(e)); + i += 1; + } + } + } +} + +#[cfg(stage0)] impl< D: Decoder, V: Decodable @@ -716,6 +1672,25 @@ impl< } } +#[cfg(not(stage0))] +impl< + D: Decoder, + V: Decodable +> Decodable for TrieMap { + fn decode(d: &mut D) -> TrieMap { + do d.read_map |d, len| { + let mut map = TrieMap::new(); + for uint::range(0, len) |i| { + let key = d.read_map_elt_key(i, |d| Decodable::decode(d)); + let val = d.read_map_elt_val(i, |d| Decodable::decode(d)); + map.insert(key, val); + } + map + } + } +} + +#[cfg(stage0)] impl Encodable for TrieSet { fn encode(&self, s: &S) { do s.emit_seq(self.len()) { @@ -728,6 +1703,20 @@ impl Encodable for TrieSet { } } +#[cfg(not(stage0))] +impl Encodable for TrieSet { + fn encode(&self, s: &mut S) { + do s.emit_seq(self.len()) |s| { + let mut i = 0; + for self.each |e| { + s.emit_seq_elt(i, |s| e.encode(s)); + i += 1; + } + } + } +} + +#[cfg(stage0)] impl Decodable for TrieSet { fn decode(d: &D) -> TrieSet { do d.read_seq |len| { @@ -740,40 +1729,49 @@ impl Decodable for TrieSet { } } -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] +#[cfg(not(stage0))] +impl Decodable for TrieSet { + fn decode(d: &mut D) -> TrieSet { + do d.read_seq |d, len| { + let mut set = TrieSet::new(); + for uint::range(0, len) |i| { + set.insert(d.read_seq_elt(i, |d| Decodable::decode(d))); + } + set + } + } +} + +#[cfg(not(stage0))] impl< E: Encoder, K: Encodable + Eq + TotalOrd, V: Encodable + Eq > Encodable for TreeMap { - fn encode(&self, e: &E) { - do e.emit_map(self.len()) { + fn encode(&self, e: &mut E) { + do e.emit_map(self.len()) |e| { let mut i = 0; for self.each |key, val| { - e.emit_map_elt_key(i, || key.encode(e)); - e.emit_map_elt_val(i, || val.encode(e)); + e.emit_map_elt_key(i, |e| key.encode(e)); + e.emit_map_elt_val(i, |e| val.encode(e)); i += 1; } } } } -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] +#[cfg(not(stage0))] impl< D: Decoder, K: Decodable + Eq + TotalOrd, V: Decodable + Eq > Decodable for TreeMap { - fn decode(d: &D) -> TreeMap { - do d.read_map |len| { + fn decode(d: &mut D) -> TreeMap { + do d.read_map |d, len| { let mut map = TreeMap::new(); for uint::range(0, len) |i| { - let key = d.read_map_elt_key(i, || Decodable::decode(d)); - let val = d.read_map_elt_val(i, || Decodable::decode(d)); + let key = d.read_map_elt_key(i, |d| Decodable::decode(d)); + let val = d.read_map_elt_val(i, |d| Decodable::decode(d)); map.insert(key, val); } map @@ -781,36 +1779,32 @@ impl< } } -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] +#[cfg(not(stage0))] impl< S: Encoder, T: Encodable + Eq + TotalOrd > Encodable for TreeSet { - fn encode(&self, s: &S) { - do s.emit_seq(self.len()) { + fn encode(&self, s: &mut S) { + do s.emit_seq(self.len()) |s| { let mut i = 0; for self.each |e| { - s.emit_seq_elt(i, || e.encode(s)); + s.emit_seq_elt(i, |s| e.encode(s)); i += 1; } } } } -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] +#[cfg(not(stage0))] impl< D: Decoder, T: Decodable + Eq + TotalOrd > Decodable for TreeSet { - fn decode(d: &D) -> TreeSet { - do d.read_seq |len| { + fn decode(d: &mut D) -> TreeSet { + do d.read_seq |d, len| { let mut set = TreeSet::new(); for uint::range(0, len) |i| { - set.insert(d.read_seq_elt(i, || Decodable::decode(d))); + set.insert(d.read_seq_elt(i, |d| Decodable::decode(d))); } set } @@ -822,10 +1816,17 @@ impl< // // In some cases, these should eventually be coded as traits. +#[cfg(stage0)] pub trait EncoderHelpers { fn emit_from_vec(&self, v: &[T], f: &fn(v: &T)); } +#[cfg(not(stage0))] +pub trait EncoderHelpers { + fn emit_from_vec(&mut self, v: &[T], f: &fn(&mut Self, v: &T)); +} + +#[cfg(stage0)] impl EncoderHelpers for S { fn emit_from_vec(&self, v: &[T], f: &fn(v: &T)) { do self.emit_seq(v.len()) { @@ -838,10 +1839,30 @@ impl EncoderHelpers for S { } } +#[cfg(not(stage0))] +impl EncoderHelpers for S { + fn emit_from_vec(&mut self, v: &[T], f: &fn(&mut S, &T)) { + do self.emit_seq(v.len()) |this| { + for v.eachi |i, e| { + do this.emit_seq_elt(i) |this| { + f(this, e) + } + } + } + } +} + +#[cfg(stage0)] pub trait DecoderHelpers { fn read_to_vec(&self, f: &fn() -> T) -> ~[T]; } +#[cfg(not(stage0))] +pub trait DecoderHelpers { + fn read_to_vec(&mut self, f: &fn(&mut Self) -> T) -> ~[T]; +} + +#[cfg(stage0)] impl DecoderHelpers for D { fn read_to_vec(&self, f: &fn() -> T) -> ~[T] { do self.read_seq |len| { @@ -851,3 +1872,15 @@ impl DecoderHelpers for D { } } } + +#[cfg(not(stage0))] +impl DecoderHelpers for D { + fn read_to_vec(&mut self, f: &fn(&mut D) -> T) -> ~[T] { + do self.read_seq |this, len| { + do vec::from_fn(len) |i| { + this.read_seq_elt(i, |this| f(this)) + } + } + } +} + diff --git a/src/libstd/workcache.rs b/src/libstd/workcache.rs index bb4a9e97ea1f4..2cdf36c71c79f 100644 --- a/src/libstd/workcache.rs +++ b/src/libstd/workcache.rs @@ -140,6 +140,7 @@ impl WorkMap { fn new() -> WorkMap { WorkMap(HashMap::new()) } } +#[cfg(stage0)] impl Encodable for WorkMap { fn encode(&self, s: &S) { let mut d = ~[]; @@ -151,6 +152,19 @@ impl Encodable for WorkMap { } } +#[cfg(not(stage0))] +impl Encodable for WorkMap { + fn encode(&self, s: &mut S) { + let mut d = ~[]; + for self.each |k, v| { + d.push((copy *k, copy *v)) + } + sort::tim_sort(d); + d.encode(s) + } +} + +#[cfg(stage0)] impl Decodable for WorkMap { fn decode(d: &D) -> WorkMap { let v : ~[(WorkKey,~str)] = Decodable::decode(d); @@ -162,6 +176,18 @@ impl Decodable for WorkMap { } } +#[cfg(not(stage0))] +impl Decodable for WorkMap { + fn decode(d: &mut D) -> WorkMap { + let v : ~[(WorkKey,~str)] = Decodable::decode(d); + let mut w = WorkMap::new(); + for v.each |&(k, v)| { + w.insert(copy k, copy v); + } + w + } +} + struct Database { db_filename: Path, db_cache: HashMap<~str, ~str>, @@ -171,8 +197,8 @@ struct Database { pub impl Database { fn prepare(&mut self, fn_name: &str, - declared_inputs: &WorkMap) -> Option<(WorkMap, WorkMap, ~str)> - { + declared_inputs: &WorkMap) + -> Option<(WorkMap, WorkMap, ~str)> { let k = json_encode(&(fn_name, declared_inputs)); match self.db_cache.find(&k) { None => None, @@ -229,17 +255,38 @@ struct Work { res: Option>> } +#[cfg(stage0)] fn json_encode>(t: &T) -> ~str { do io::with_str_writer |wr| { t.encode(&json::Encoder(wr)); } } +#[cfg(not(stage0))] +fn json_encode>(t: &T) -> ~str { + do io::with_str_writer |wr| { + let mut encoder = json::Encoder(wr); + t.encode(&mut encoder); + } +} + +// FIXME(#5121) +#[cfg(stage0)] +fn json_decode>(s: &str) -> T { + do io::with_str_reader(s) |rdr| { + let j = result::unwrap(json::from_reader(rdr)); + let decoder = json::Decoder(j); + Decodable::decode(&decoder) + } +} + // FIXME(#5121) +#[cfg(not(stage0))] fn json_decode>(s: &str) -> T { do io::with_str_reader(s) |rdr| { let j = result::unwrap(json::from_reader(rdr)); - Decodable::decode(&json::Decoder(j)) + let mut decoder = json::Decoder(j); + Decodable::decode(&mut decoder) } } diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index a295952439fba..77e7986616086 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -70,21 +70,53 @@ pub type Name = uint; // with a macro expansion pub type Mrk = uint; +#[cfg(stage0)] impl Encodable for ident { fn encode(&self, s: &S) { + unsafe { + let intr = + match task::local_data::local_data_get(interner_key!()) { + None => fail!(~"encode: TLS interner not set up"), + Some(intr) => intr + }; + + s.emit_str(*(*intr).get(*self)); + } + } +} + +#[cfg(not(stage0))] +impl Encodable for ident { + fn encode(&self, s: &mut S) { + unsafe { + let intr = + match task::local_data::local_data_get(interner_key!()) { + None => fail!(~"encode: TLS interner not set up"), + Some(intr) => intr + }; + + s.emit_str(*(*intr).get(*self)); + } + } +} + +#[cfg(stage0)] +impl Decodable for ident { + fn decode(d: &D) -> ident { let intr = match unsafe { task::local_data::local_data_get(interner_key!()) } { - None => fail!(~"encode: TLS interner not set up"), + None => fail!(~"decode: TLS interner not set up"), Some(intr) => intr }; - s.emit_str(*(*intr).get(*self)); + (*intr).intern(@d.read_str()) } } +#[cfg(not(stage0))] impl Decodable for ident { - fn decode(d: &D) -> ident { + fn decode(d: &mut D) -> ident { let intr = match unsafe { task::local_data::local_data_get(interner_key!()) } { diff --git a/src/libsyntax/codemap.rs b/src/libsyntax/codemap.rs index 5f4967351e11b..bbb390e9dc948 100644 --- a/src/libsyntax/codemap.rs +++ b/src/libsyntax/codemap.rs @@ -125,17 +125,34 @@ impl cmp::Eq for span { fn ne(&self, other: &span) -> bool { !(*self).eq(other) } } +#[cfg(stage0)] impl Encodable for span { /* Note #1972 -- spans are encoded but not decoded */ fn encode(&self, _s: &S) { _s.emit_nil() } } +#[cfg(not(stage0))] +impl Encodable for span { + /* Note #1972 -- spans are encoded but not decoded */ + fn encode(&self, s: &mut S) { + s.emit_nil() + } +} + +#[cfg(stage0)] impl Decodable for span { fn decode(_d: &D) -> span { dummy_sp() } } +#[cfg(not(stage0))] +impl Decodable for span { + fn decode(_d: &mut D) -> span { + dummy_sp() + } +} + pub fn spanned(lo: BytePos, hi: BytePos, t: T) -> spanned { respan(mk_sp(lo, hi), t) } diff --git a/src/libsyntax/ext/auto_encode.rs b/src/libsyntax/ext/auto_encode.rs index 2ceb6f0c4bb75..bdf0a2a1dd07c 100644 --- a/src/libsyntax/ext/auto_encode.rs +++ b/src/libsyntax/ext/auto_encode.rs @@ -238,7 +238,8 @@ trait ExtCtxtMethods { fn stmt(&self, expr: @ast::expr) -> @ast::stmt; fn lit_str(&self, span: span, s: @~str) -> @ast::expr; fn lit_uint(&self, span: span, i: uint) -> @ast::expr; - fn lambda(&self, blk: ast::blk) -> @ast::expr; + fn lambda0(&self, blk: ast::blk) -> @ast::expr; + fn lambda1(&self, blk: ast::blk, ident: ast::ident) -> @ast::expr; fn blk(&self, span: span, stmts: ~[@ast::stmt]) -> ast::blk; fn expr_blk(&self, expr: @ast::expr) -> ast::blk; fn expr_path(&self, span: span, strs: ~[ast::ident]) -> @ast::expr; @@ -254,8 +255,15 @@ trait ExtCtxtMethods { ident: ast::ident, args: ~[@ast::expr]) -> @ast::expr; - fn lambda_expr(&self, expr: @ast::expr) -> @ast::expr; - fn lambda_stmts(&self, span: span, stmts: ~[@ast::stmt]) -> @ast::expr; + fn lambda_expr_0(&self, expr: @ast::expr) -> @ast::expr; + fn lambda_expr_1(&self, expr: @ast::expr, ident: ast::ident) + -> @ast::expr; + fn lambda_stmts_0(&self, span: span, stmts: ~[@ast::stmt]) -> @ast::expr; + fn lambda_stmts_1(&self, + span: span, + stmts: ~[@ast::stmt], + ident: ast::ident) + -> @ast::expr; } impl ExtCtxtMethods for @ext_ctxt { @@ -388,12 +396,18 @@ impl ExtCtxtMethods for @ext_ctxt { span: span})) } - fn lambda(&self, blk: ast::blk) -> @ast::expr { + fn lambda0(&self, blk: ast::blk) -> @ast::expr { let ext_cx = *self; let blk_e = self.expr(copy blk.span, ast::expr_block(copy blk)); quote_expr!( || $blk_e ) } + fn lambda1(&self, blk: ast::blk, ident: ast::ident) -> @ast::expr { + let ext_cx = *self; + let blk_e = self.expr(copy blk.span, ast::expr_block(copy blk)); + quote_expr!( |$ident| $blk_e ) + } + fn blk(&self, span: span, stmts: ~[@ast::stmt]) -> ast::blk { codemap::spanned { node: ast::blk_ { @@ -461,15 +475,29 @@ impl ExtCtxtMethods for @ext_ctxt { ident: ast::ident, args: ~[@ast::expr] ) -> @ast::expr { - self.expr(span, ast::expr_method_call(expr, ident, ~[], args, ast::NoSugar)) + self.expr(span, + ast::expr_method_call(expr, ident, ~[], args, ast::NoSugar)) + } + + fn lambda_expr_0(&self, expr: @ast::expr) -> @ast::expr { + self.lambda0(self.expr_blk(expr)) + } + + fn lambda_expr_1(&self, expr: @ast::expr, ident: ast::ident) + -> @ast::expr { + self.lambda1(self.expr_blk(expr), ident) } - fn lambda_expr(&self, expr: @ast::expr) -> @ast::expr { - self.lambda(self.expr_blk(expr)) + fn lambda_stmts_0(&self, span: span, stmts: ~[@ast::stmt]) -> @ast::expr { + self.lambda0(self.blk(span, stmts)) } - fn lambda_stmts(&self, span: span, stmts: ~[@ast::stmt]) -> @ast::expr { - self.lambda(self.blk(span, stmts)) + fn lambda_stmts_1(&self, + span: span, + stmts: ~[@ast::stmt], + ident: ast::ident) + -> @ast::expr { + self.lambda1(self.blk(span, stmts), ident) } } @@ -644,7 +672,7 @@ fn mk_ser_method( None, ast::mt { ty: cx.ty_path(span, ~[cx.ident_of(~"__S")], ~[]), - mutbl: ast::m_imm + mutbl: ast::m_mutbl } ), span: span, @@ -706,7 +734,7 @@ fn mk_deser_method( None, ast::mt { ty: cx.ty_path(span, ~[cx.ident_of(~"__D")], ~[]), - mutbl: ast::m_imm + mutbl: ast::m_mutbl } ), span: span, @@ -758,8 +786,8 @@ fn mk_struct_ser_impl( generics: &ast::Generics ) -> @ast::item { let fields = do mk_struct_fields(fields).mapi |idx, field| { - // ast for `|| self.$(name).encode(__s)` - let expr_lambda = cx.lambda_expr( + // ast for `|__s| self.$(name).encode(__s)` + let expr_lambda = cx.lambda_expr_1( cx.expr_method_call( span, cx.expr_field( @@ -769,7 +797,8 @@ fn mk_struct_ser_impl( ), cx.ident_of(~"encode"), ~[cx.expr_var(span, ~"__s")] - ) + ), + cx.ident_of(~"__s") ); // ast for `__s.emit_struct_field($(name), $(idx), $(expr_lambda))` @@ -787,7 +816,7 @@ fn mk_struct_ser_impl( ) }; - // ast for `__s.emit_struct($(name), || $(fields))` + // ast for `__s.emit_struct($(name), |__s| $(fields))` let ser_body = cx.expr_method_call( span, cx.expr_var(span, ~"__s"), @@ -795,7 +824,7 @@ fn mk_struct_ser_impl( ~[ cx.lit_str(span, @cx.str_of(ident)), cx.lit_uint(span, vec::len(fields)), - cx.lambda_stmts(span, fields), + cx.lambda_stmts_1(span, fields, cx.ident_of(~"__s")), ] ); @@ -810,8 +839,8 @@ fn mk_struct_deser_impl( generics: &ast::Generics ) -> @ast::item { let fields = do mk_struct_fields(fields).mapi |idx, field| { - // ast for `|| std::serialize::decode(__d)` - let expr_lambda = cx.lambda( + // ast for `|__d| std::serialize::decode(__d)` + let expr_lambda = cx.lambda1( cx.expr_blk( cx.expr_call( span, @@ -823,7 +852,8 @@ fn mk_struct_deser_impl( ]), ~[cx.expr_var(span, ~"__d")] ) - ) + ), + cx.ident_of(~"__d") ); // ast for `__d.read_struct_field($(name), $(idx), $(expr_lambda))` @@ -848,7 +878,7 @@ fn mk_struct_deser_impl( } }; - // ast for `read_struct($(name), || $(fields))` + // ast for `read_struct($(name), |__d| $(fields))` let body = cx.expr_method_call( span, cx.expr_var(span, ~"__d"), @@ -856,7 +886,7 @@ fn mk_struct_deser_impl( ~[ cx.lit_str(span, @cx.str_of(ident)), cx.lit_uint(span, vec::len(fields)), - cx.lambda_expr( + cx.lambda_expr_1( cx.expr( span, ast::expr_struct( @@ -864,7 +894,8 @@ fn mk_struct_deser_impl( fields, None ) - ) + ), + cx.ident_of(~"__d") ), ] ); @@ -974,14 +1005,15 @@ fn ser_variant( cx.ident_of(~"emit_enum_variant_arg") ); - // ast for `|| $(v).encode(__s)` - let expr_encode = cx.lambda_expr( - cx.expr_method_call( + // ast for `|__s| $(v).encode(__s)` + let expr_encode = cx.lambda_expr_1( + cx.expr_method_call( span, cx.expr_path(span, ~[names[a_idx]]), cx.ident_of(~"encode"), ~[cx.expr_var(span, ~"__s")] - ) + ), + cx.ident_of(~"__s") ); // ast for `$(expr_emit)($(a_idx), $(expr_encode))` @@ -1003,7 +1035,7 @@ fn ser_variant( cx.lit_str(span, @cx.str_of(v_name)), cx.lit_uint(span, v_idx), cx.lit_uint(span, stmts.len()), - cx.lambda_stmts(span, stmts), + cx.lambda_stmts_1(span, stmts, cx.ident_of(~"__s")), ] ); @@ -1050,7 +1082,7 @@ fn mk_enum_ser_body( cx.ident_of(~"emit_enum"), ~[ cx.lit_str(span, @cx.str_of(name)), - cx.lambda_expr(match_expr), + cx.lambda_expr_1(match_expr, cx.ident_of(~"__s")), ] ) } @@ -1062,8 +1094,8 @@ fn mk_enum_deser_variant_nary( args: ~[ast::variant_arg] ) -> @ast::expr { let args = do args.mapi |idx, _arg| { - // ast for `|| std::serialize::decode(__d)` - let expr_lambda = cx.lambda_expr( + // ast for `|__s| std::serialize::decode(__d)` + let expr_lambda = cx.lambda_expr_1( cx.expr_call( span, cx.expr_path_global(span, ~[ @@ -1073,7 +1105,8 @@ fn mk_enum_deser_variant_nary( cx.ident_of(~"decode"), ]), ~[cx.expr_var(span, ~"__d")] - ) + ), + cx.ident_of(~"__d") ); // ast for `__d.read_enum_variant_arg($(a_idx), $(expr_lambda))` @@ -1163,24 +1196,44 @@ fn mk_enum_deser_body( span, ast::expr_fn_block( ast::fn_decl { - inputs: ~[ast::arg { - is_mutbl: false, - ty: @ast::Ty { + inputs: ~[ + ast::arg { + is_mutbl: false, + ty: @ast::Ty { + id: ext_cx.next_id(), + node: ast::ty_infer, + span: span + }, + pat: @ast::pat { + id: ext_cx.next_id(), + node: ast::pat_ident( + ast::bind_by_copy, + ast_util::ident_to_path(span, + ext_cx.ident_of(~"__d")), + None), + span: span, + }, id: ext_cx.next_id(), - node: ast::ty_infer, - span: span }, - pat: @ast::pat { + ast::arg { + is_mutbl: false, + ty: @ast::Ty { + id: ext_cx.next_id(), + node: ast::ty_infer, + span: span + }, + pat: @ast::pat { + id: ext_cx.next_id(), + node: ast::pat_ident( + ast::bind_by_copy, + ast_util::ident_to_path(span, + ext_cx.ident_of(~"i")), + None), + span: span, + }, id: ext_cx.next_id(), - node: ast::pat_ident( - ast::bind_by_copy, - ast_util::ident_to_path(span, - ext_cx.ident_of(~"i")), - None), - span: span, - }, - id: ext_cx.next_id(), - }], + } + ], output: @ast::Ty { id: ext_cx.next_id(), node: ast::ty_infer, @@ -1198,13 +1251,14 @@ fn mk_enum_deser_body( ); // ast for `__d.read_enum_variant($expr_arm_names, $(expr_lambda))` - let expr_lambda = ext_cx.lambda_expr( + let expr_lambda = ext_cx.lambda_expr_1( ext_cx.expr_method_call( span, ext_cx.expr_var(span, ~"__d"), ext_cx.ident_of(~"read_enum_variant"), ~[expr_arm_names, expr_lambda] - ) + ), + ext_cx.ident_of(~"__d") ); // ast for `__d.read_enum($(e_name), $(expr_lambda))` @@ -1256,105 +1310,147 @@ mod test { } impl Encoder for TestEncoder { - fn emit_nil(&self) { self.add_to_log(CallToEmitNil) } + fn emit_nil(&mut self) { self.add_to_log(CallToEmitNil) } - fn emit_uint(&self, v: uint) {self.add_to_log(CallToEmitUint(v)); } - fn emit_u64(&self, _v: u64) { self.add_unknown_to_log(); } - fn emit_u32(&self, _v: u32) { self.add_unknown_to_log(); } - fn emit_u16(&self, _v: u16) { self.add_unknown_to_log(); } - fn emit_u8(&self, _v: u8) { self.add_unknown_to_log(); } + fn emit_uint(&mut self, v: uint) { + self.add_to_log(CallToEmitUint(v)); + } + fn emit_u64(&mut self, _v: u64) { self.add_unknown_to_log(); } + fn emit_u32(&mut self, _v: u32) { self.add_unknown_to_log(); } + fn emit_u16(&mut self, _v: u16) { self.add_unknown_to_log(); } + fn emit_u8(&mut self, _v: u8) { self.add_unknown_to_log(); } - fn emit_int(&self, _v: int) { self.add_unknown_to_log(); } - fn emit_i64(&self, _v: i64) { self.add_unknown_to_log(); } - fn emit_i32(&self, _v: i32) { self.add_unknown_to_log(); } - fn emit_i16(&self, _v: i16) { self.add_unknown_to_log(); } - fn emit_i8(&self, _v: i8) { self.add_unknown_to_log(); } + fn emit_int(&mut self, _v: int) { self.add_unknown_to_log(); } + fn emit_i64(&mut self, _v: i64) { self.add_unknown_to_log(); } + fn emit_i32(&mut self, _v: i32) { self.add_unknown_to_log(); } + fn emit_i16(&mut self, _v: i16) { self.add_unknown_to_log(); } + fn emit_i8(&mut self, _v: i8) { self.add_unknown_to_log(); } - fn emit_bool(&self, _v: bool) { self.add_unknown_to_log(); } + fn emit_bool(&mut self, _v: bool) { self.add_unknown_to_log(); } - fn emit_f64(&self, _v: f64) { self.add_unknown_to_log(); } - fn emit_f32(&self, _v: f32) { self.add_unknown_to_log(); } - fn emit_float(&self, _v: float) { self.add_unknown_to_log(); } + fn emit_f64(&mut self, _v: f64) { self.add_unknown_to_log(); } + fn emit_f32(&mut self, _v: f32) { self.add_unknown_to_log(); } + fn emit_float(&mut self, _v: float) { self.add_unknown_to_log(); } - fn emit_char(&self, _v: char) { self.add_unknown_to_log(); } - fn emit_str(&self, _v: &str) { self.add_unknown_to_log(); } + fn emit_char(&mut self, _v: char) { self.add_unknown_to_log(); } + fn emit_str(&mut self, _v: &str) { self.add_unknown_to_log(); } - fn emit_enum(&self, name: &str, f: &fn()) { - self.add_to_log(CallToEmitEnum(name.to_str())); f(); } + fn emit_enum(&mut self, name: &str, f: &fn(&mut TestEncoder)) { + self.add_to_log(CallToEmitEnum(name.to_str())); + f(self); + } - fn emit_enum_variant(&self, name: &str, id: uint, - cnt: uint, f: &fn()) { - self.add_to_log(CallToEmitEnumVariant (name.to_str(),id,cnt)); - f(); + fn emit_enum_variant(&mut self, + name: &str, + id: uint, + cnt: uint, + f: &fn(&mut TestEncoder)) { + self.add_to_log(CallToEmitEnumVariant(name.to_str(), id, cnt)); + f(self); } - fn emit_enum_variant_arg(&self, idx: uint, f: &fn()) { - self.add_to_log(CallToEmitEnumVariantArg (idx)); f(); + fn emit_enum_variant_arg(&mut self, + idx: uint, + f: &fn(&mut TestEncoder)) { + self.add_to_log(CallToEmitEnumVariantArg(idx)); + f(self); } - fn emit_enum_struct_variant(&self, name: &str, id: uint, cnt: uint, f: &fn()) { + fn emit_enum_struct_variant(&mut self, + name: &str, + id: uint, + cnt: uint, + f: &fn(&mut TestEncoder)) { self.emit_enum_variant(name, id, cnt, f) } - fn emit_enum_struct_variant_field(&self, _name: &str, idx: uint, f: &fn()) { + fn emit_enum_struct_variant_field(&mut self, + _name: &str, + idx: uint, + f: &fn(&mut TestEncoder)) { self.emit_enum_variant_arg(idx, f) } - fn emit_struct(&self, name: &str, len: uint, f: &fn()) { - self.add_to_log(CallToEmitStruct (name.to_str(),len)); f(); + fn emit_struct(&mut self, + name: &str, + len: uint, + f: &fn(&mut TestEncoder)) { + self.add_to_log(CallToEmitStruct (name.to_str(),len)); + f(self); } - fn emit_struct_field(&self, name: &str, idx: uint, f: &fn()) { - self.add_to_log(CallToEmitField (name.to_str(),idx)); f(); + fn emit_struct_field(&mut self, + name: &str, + idx: uint, + f: &fn(&mut TestEncoder)) { + self.add_to_log(CallToEmitField (name.to_str(),idx)); + f(self); } - fn emit_tuple(&self, _len: uint, f: &fn()) { - self.add_unknown_to_log(); f(); + fn emit_tuple(&mut self, _len: uint, f: &fn(&mut TestEncoder)) { + self.add_unknown_to_log(); + f(self); } - fn emit_tuple_arg(&self, _idx: uint, f: &fn()) { - self.add_unknown_to_log(); f(); + fn emit_tuple_arg(&mut self, _idx: uint, f: &fn(&mut TestEncoder)) { + self.add_unknown_to_log(); + f(self); } - fn emit_tuple_struct(&self, _name: &str, _len: uint, f: &fn()) { - self.add_unknown_to_log(); f(); + fn emit_tuple_struct(&mut self, + _name: &str, + _len: uint, + f: &fn(&mut TestEncoder)) { + self.add_unknown_to_log(); + f(self); } - fn emit_tuple_struct_arg(&self, _idx: uint, f: &fn()) { - self.add_unknown_to_log(); f(); + + fn emit_tuple_struct_arg(&mut self, + _idx: uint, + f: &fn(&mut TestEncoder)) { + self.add_unknown_to_log(); + f(self); } - fn emit_option(&self, f: &fn()) { + fn emit_option(&mut self, f: &fn(&mut TestEncoder)) { self.add_to_log(CallToEmitOption); - f(); + f(self); } - fn emit_option_none(&self) { + fn emit_option_none(&mut self) { self.add_to_log(CallToEmitOptionNone); } - fn emit_option_some(&self, f: &fn()) { + fn emit_option_some(&mut self, f: &fn(&mut TestEncoder)) { self.add_to_log(CallToEmitOptionSome); - f(); + f(self); } - fn emit_seq(&self, _len: uint, f: &fn()) { - self.add_unknown_to_log(); f(); + fn emit_seq(&mut self, _len: uint, f: &fn(&mut TestEncoder)) { + self.add_unknown_to_log(); + f(self); } - fn emit_seq_elt(&self, _idx: uint, f: &fn()) { - self.add_unknown_to_log(); f(); + fn emit_seq_elt(&mut self, _idx: uint, f: &fn(&mut TestEncoder)) { + self.add_unknown_to_log(); + f(self); } - fn emit_map(&self, _len: uint, f: &fn()) { - self.add_unknown_to_log(); f(); + fn emit_map(&mut self, _len: uint, f: &fn(&mut TestEncoder)) { + self.add_unknown_to_log(); + f(self); } - fn emit_map_elt_key(&self, _idx: uint, f: &fn()) { - self.add_unknown_to_log(); f(); + fn emit_map_elt_key(&mut self, _idx: uint, f: &fn(&mut TestEncoder)) { + self.add_unknown_to_log(); + f(self); } - fn emit_map_elt_val(&self, _idx: uint, f: &fn()) { - self.add_unknown_to_log(); f(); + fn emit_map_elt_val(&mut self, _idx: uint, f: &fn(&mut TestEncoder)) { + self.add_unknown_to_log(); + f(self); } } fn to_call_log>(val: E) -> ~[call] { - let mut te = TestEncoder {call_log: @mut ~[]}; - val.encode(&te); + let mut te = TestEncoder { + call_log: @mut ~[] + }; + val.encode(&mut te); copy *te.call_log } diff --git a/src/libsyntax/ext/deriving/decodable.rs b/src/libsyntax/ext/deriving/decodable.rs index 48f6d5baa8b9f..fe270abc2e4f2 100644 --- a/src/libsyntax/ext/deriving/decodable.rs +++ b/src/libsyntax/ext/deriving/decodable.rs @@ -96,7 +96,7 @@ fn create_decode_method( cx, span, build::mk_simple_ty_path(cx, span, cx.ident_of(~"__D")), - ast::m_imm + ast::m_mutbl ); let d_ident = cx.ident_of(~"__d"); let d_arg = build::mk_arg(cx, span, d_ident, d_arg_type); @@ -219,6 +219,11 @@ fn create_read_struct_field( // Call the substructure method. let decode_expr = call_substructure_decode_method(cx, span); + let d_arg = build::mk_arg(cx, + span, + cx.ident_of(~"__d"), + build::mk_ty_infer(cx, span)); + let call_expr = build::mk_method_call( cx, span, @@ -227,7 +232,11 @@ fn create_read_struct_field( ~[ build::mk_base_str(cx, span, cx.str_of(ident)), build::mk_uint(cx, span, idx), - build::mk_lambda_no_args(cx, span, decode_expr), + build::mk_lambda(cx, + span, + build::mk_fn_decl(~[d_arg], + build::mk_ty_infer(cx, span)), + decode_expr), ] ); @@ -282,6 +291,11 @@ fn expand_deriving_decodable_struct_method( i += 1; } + let d_arg = build::mk_arg(cx, + span, + cx.ident_of(~"__d"), + build::mk_ty_infer(cx, span)); + let read_struct_expr = build::mk_method_call( cx, span, @@ -294,9 +308,10 @@ fn expand_deriving_decodable_struct_method( ~[ build::mk_base_str(cx, span, cx.str_of(type_ident)), build::mk_uint(cx, span, fields.len()), - build::mk_lambda_no_args( + build::mk_lambda( cx, span, + build::mk_fn_decl(~[d_arg], build::mk_ty_infer(cx, span)), build::mk_struct_e( cx, span, @@ -334,6 +349,12 @@ fn create_read_variant_arg( // Call the substructure method. let expr = call_substructure_decode_method(cx, span); + let d_arg = build::mk_arg(cx, + span, + cx.ident_of(~"__d"), + build::mk_ty_infer(cx, span)); + let t_infer = build::mk_ty_infer(cx, span); + let call_expr = build::mk_method_call( cx, span, @@ -341,7 +362,10 @@ fn create_read_variant_arg( cx.ident_of(~"read_enum_variant_arg"), ~[ build::mk_uint(cx, span, j), - build::mk_lambda_no_args(cx, span, expr), + build::mk_lambda(cx, + span, + build::mk_fn_decl(~[d_arg], t_infer), + expr), ] ); @@ -399,6 +423,12 @@ fn create_read_enum_variant( span, build::mk_fn_decl( ~[ + build::mk_arg( + cx, + span, + cx.ident_of(~"__d"), + build::mk_ty_infer(cx, span) + ), build::mk_arg( cx, span, @@ -434,6 +464,11 @@ fn expand_deriving_decodable_enum_method( enum_definition ); + let d_arg = build::mk_arg(cx, + span, + cx.ident_of(~"__d"), + build::mk_ty_infer(cx, span)); + // Create the read_enum expression let read_enum_expr = build::mk_method_call( cx, @@ -442,7 +477,11 @@ fn expand_deriving_decodable_enum_method( cx.ident_of(~"read_enum"), ~[ build::mk_base_str(cx, span, cx.str_of(type_ident)), - build::mk_lambda_no_args(cx, span, read_enum_variant_expr), + build::mk_lambda(cx, + span, + build::mk_fn_decl(~[d_arg], + build::mk_ty_infer(cx, span)), + read_enum_variant_expr), ] ); diff --git a/src/libsyntax/ext/deriving/encodable.rs b/src/libsyntax/ext/deriving/encodable.rs index 640d0d0ff2d23..8f8139790ade9 100644 --- a/src/libsyntax/ext/deriving/encodable.rs +++ b/src/libsyntax/ext/deriving/encodable.rs @@ -94,10 +94,9 @@ fn create_encode_method( cx, span, build::mk_simple_ty_path(cx, span, cx.ident_of(~"__E")), - ast::m_imm + ast::m_mutbl ); - let e_ident = cx.ident_of(~"__e"); - let e_arg = build::mk_arg(cx, span, e_ident, e_arg_type); + let e_arg = build::mk_arg(cx, span, cx.ident_of(~"__e"), e_arg_type); // Create the type of the return value. let output_type = @ast::Ty { id: cx.next_id(), node: ty_nil, span: span }; @@ -226,10 +225,16 @@ fn expand_deriving_encodable_struct_method( self_field ); + let e_ident = cx.ident_of(~"__e"); + let e_arg = build::mk_arg(cx, + span, + e_ident, + build::mk_ty_infer(cx, span)); + let blk_expr = build::mk_lambda( cx, span, - build::mk_fn_decl(~[], build::mk_ty_infer(cx, span)), + build::mk_fn_decl(~[e_arg], build::mk_ty_infer(cx, span)), encode_expr ); @@ -257,6 +262,11 @@ fn expand_deriving_encodable_struct_method( idx += 1; } + let e_arg = build::mk_arg(cx, + span, + cx.ident_of(~"__e"), + build::mk_ty_infer(cx, span)); + let emit_struct_stmt = build::mk_method_call( cx, span, @@ -272,7 +282,7 @@ fn expand_deriving_encodable_struct_method( build::mk_lambda_stmts( cx, span, - build::mk_fn_decl(~[], build::mk_ty_infer(cx, span)), + build::mk_fn_decl(~[e_arg], build::mk_ty_infer(cx, span)), statements ), ] @@ -309,10 +319,16 @@ fn expand_deriving_encodable_enum_method( // Call the substructure method. let expr = call_substructure_encode_method(cx, span, field); + let e_ident = cx.ident_of(~"__e"); + let e_arg = build::mk_arg(cx, + span, + e_ident, + build::mk_ty_infer(cx, span)); + let blk_expr = build::mk_lambda( cx, span, - build::mk_fn_decl(~[], build::mk_ty_infer(cx, span)), + build::mk_fn_decl(~[e_arg], build::mk_ty_infer(cx, span)), expr ); @@ -331,6 +347,10 @@ fn expand_deriving_encodable_enum_method( } // Create the pattern body. + let e_arg = build::mk_arg(cx, + span, + cx.ident_of(~"__e"), + build::mk_ty_infer(cx, span)); let call_expr = build::mk_method_call( cx, span, @@ -343,7 +363,7 @@ fn expand_deriving_encodable_enum_method( build::mk_lambda_stmts( cx, span, - build::mk_fn_decl(~[], build::mk_ty_infer(cx, span)), + build::mk_fn_decl(~[e_arg], build::mk_ty_infer(cx, span)), stmts ) ] @@ -359,11 +379,17 @@ fn expand_deriving_encodable_enum_method( } }; + let e_ident = cx.ident_of(~"__e"); + let e_arg = build::mk_arg(cx, + span, + e_ident, + build::mk_ty_infer(cx, span)); + // Create the method body. let lambda_expr = build::mk_lambda( cx, span, - build::mk_fn_decl(~[], build::mk_ty_infer(cx, span)), + build::mk_fn_decl(~[e_arg], build::mk_ty_infer(cx, span)), expand_enum_or_struct_match(cx, span, arms) ); diff --git a/src/libsyntax/parse/mod.rs b/src/libsyntax/parse/mod.rs index 4f1d41a4a7a17..0c024958a24d8 100644 --- a/src/libsyntax/parse/mod.rs +++ b/src/libsyntax/parse/mod.rs @@ -420,7 +420,8 @@ mod test { #[cfg(test)] fn to_json_str>(val: @E) -> ~str { do io::with_str_writer |writer| { - val.encode(~std::json::Encoder(writer)); + let mut encoder = std::json::Encoder(writer); + val.encode(&mut encoder); } } diff --git a/src/test/bench/shootout-binarytrees.rs b/src/test/bench/shootout-binarytrees.rs index 8d0675d0884e5..c420e0cbb2fd0 100644 --- a/src/test/bench/shootout-binarytrees.rs +++ b/src/test/bench/shootout-binarytrees.rs @@ -1,3 +1,7 @@ +// xfail-test + +// Broken due to arena API problems. + // Copyright 2012 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. @@ -10,7 +14,6 @@ extern mod std; use std::arena; -use methods = std::arena::Arena; enum tree<'self> { nil, @@ -26,9 +29,7 @@ fn item_check(t: &tree) -> int { } } -fn bottom_up_tree<'r>(arena: &'r arena::Arena, - item: int, - depth: int) +fn bottom_up_tree<'r>(arena: &'r mut arena::Arena, item: int, depth: int) -> &'r tree<'r> { if depth > 0 { return arena.alloc( @@ -58,25 +59,25 @@ fn main() { max_depth = n; } - let stretch_arena = arena::Arena(); + let mut stretch_arena = arena::Arena(); let stretch_depth = max_depth + 1; - let stretch_tree = bottom_up_tree(&stretch_arena, 0, stretch_depth); + let stretch_tree = bottom_up_tree(&mut stretch_arena, 0, stretch_depth); io::println(fmt!("stretch tree of depth %d\t check: %d", stretch_depth, item_check(stretch_tree))); - let long_lived_arena = arena::Arena(); - let long_lived_tree = bottom_up_tree(&long_lived_arena, 0, max_depth); + let mut long_lived_arena = arena::Arena(); + let long_lived_tree = bottom_up_tree(&mut long_lived_arena, 0, max_depth); let mut depth = min_depth; while depth <= max_depth { let iterations = int::pow(2, (max_depth - depth + min_depth) as uint); let mut chk = 0; let mut i = 1; while i <= iterations { - let mut temp_tree = bottom_up_tree(&long_lived_arena, i, depth); + let mut temp_tree = bottom_up_tree(&mut long_lived_arena, i, depth); chk += item_check(temp_tree); - temp_tree = bottom_up_tree(&long_lived_arena, -i, depth); + temp_tree = bottom_up_tree(&mut long_lived_arena, -i, depth); chk += item_check(temp_tree); i += 1; } @@ -87,5 +88,5 @@ fn main() { } io::println(fmt!("long lived trees of depth %d\t check: %d", max_depth, - item_check(long_lived_tree))); + item_check(long_lived_tree))); } diff --git a/src/test/run-pass/auto-encode.rs b/src/test/run-pass/auto-encode.rs index bfc15acaa763c..cfac8e8cd061f 100644 --- a/src/test/run-pass/auto-encode.rs +++ b/src/test/run-pass/auto-encode.rs @@ -31,11 +31,12 @@ fn test_ebml >(a1: &A) { let bytes = do io::with_bytes_writer |wr| { - let ebml_w = &EBWriter::Encoder(wr); - a1.encode(ebml_w) + let mut ebml_w = EBWriter::Encoder(wr); + a1.encode(&mut ebml_w) }; let d = EBReader::Doc(@bytes); - let a2: A = Decodable::decode(&EBReader::Decoder(d)); + let mut decoder = EBReader::Decoder(d); + let a2: A = Decodable::decode(&mut decoder); assert!(*a1 == a2); } diff --git a/src/test/run-pass/issue-4036.rs b/src/test/run-pass/issue-4036.rs index f24875cbf8e0b..8b514b11625e4 100644 --- a/src/test/run-pass/issue-4036.rs +++ b/src/test/run-pass/issue-4036.rs @@ -17,5 +17,6 @@ use self::std::serialize; pub fn main() { let json = json::from_str("[1]").unwrap(); - let _x: ~[int] = serialize::Decodable::decode(&json::Decoder(json)); + let mut decoder = json::Decoder(json); + let _x: ~[int] = serialize::Decodable::decode(&mut decoder); } diff --git a/src/test/run-pass/placement-new-arena.rs b/src/test/run-pass/placement-new-arena.rs index 12c804219328e..166435cbc3d50 100644 --- a/src/test/run-pass/placement-new-arena.rs +++ b/src/test/run-pass/placement-new-arena.rs @@ -14,7 +14,8 @@ extern mod std; use std::arena; pub fn main() { - let p = &arena::Arena(); + let mut arena = arena::Arena(); + let p = &mut arena; let x = p.alloc(|| 4u); io::print(fmt!("%u", *x)); assert!(*x == 4u); diff --git a/src/test/run-pass/regions-mock-trans-impls.rs b/src/test/run-pass/regions-mock-trans-impls.rs index c1f7a713ca679..e916350574883 100644 --- a/src/test/run-pass/regions-mock-trans-impls.rs +++ b/src/test/run-pass/regions-mock-trans-impls.rs @@ -21,7 +21,7 @@ struct Bcx<'self> { } struct Fcx<'self> { - arena: &'self Arena, + arena: &'self mut Arena, ccx: &'self Ccx } @@ -29,23 +29,27 @@ struct Ccx { x: int } -fn h<'r>(bcx : &'r Bcx<'r>) -> &'r Bcx<'r> { - return bcx.fcx.arena.alloc(|| Bcx { fcx: bcx.fcx }); +fn h<'r>(bcx : &'r mut Bcx<'r>) -> &'r mut Bcx<'r> { + // XXX: Arena has a bad interface here; it should return mutable pointers. + // But this patch is too big to roll that in. + unsafe { + cast::transmute(bcx.fcx.arena.alloc(|| Bcx { fcx: bcx.fcx })) + } } -fn g(fcx : &Fcx) { - let bcx = Bcx { fcx: fcx }; - h(&bcx); +fn g(fcx: &mut Fcx) { + let mut bcx = Bcx { fcx: fcx }; + h(&mut bcx); } -fn f(ccx : &Ccx) { - let a = Arena(); - let fcx = &Fcx { arena: &a, ccx: ccx }; - return g(fcx); +fn f(ccx: &mut Ccx) { + let mut a = Arena(); + let mut fcx = Fcx { arena: &mut a, ccx: ccx }; + return g(&mut fcx); } pub fn main() { - let ccx = Ccx { x: 0 }; - f(&ccx); + let mut ccx = Ccx { x: 0 }; + f(&mut ccx); } From 9bded762601e47b16bd97ef4439536fb9d7af0cd Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Thu, 2 May 2013 21:15:36 -0400 Subject: [PATCH 157/410] move @mut into scope_info --- src/librustc/middle/trans/base.rs | 67 ++++++++++++------------ src/librustc/middle/trans/common.rs | 37 +++++++------ src/librustc/middle/trans/controlflow.rs | 4 +- src/librustc/middle/trans/expr.rs | 1 - 4 files changed, 55 insertions(+), 54 deletions(-) diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs index 80cedf2372786..8a21d9116f5e6 100644 --- a/src/librustc/middle/trans/base.rs +++ b/src/librustc/middle/trans/base.rs @@ -34,7 +34,6 @@ use lib; use metadata::common::LinkMeta; use metadata::{csearch, cstore, encoder}; use middle::astencode; -use middle::borrowck::RootInfo; use middle::resolve; use middle::trans::_match; use middle::trans::adt; @@ -62,7 +61,6 @@ use middle::trans::type_of::*; use middle::ty; use util::common::indenter; use util::ppaux::{Repr, ty_to_str}; -use util::ppaux; use core::hash; use core::hashmap::{HashMap, HashSet}; @@ -887,11 +885,10 @@ pub fn need_invoke(bcx: block) -> bool { // Walk the scopes to look for cleanups let mut cur = bcx; loop { - let current = &mut *cur; - let kind = &mut *current.kind; - match *kind { - block_scope(ref mut inf) => { - for vec::each((*inf).cleanups) |cleanup| { + match cur.kind { + block_scope(inf) => { + let inf = &mut *inf; // FIXME(#5074) workaround old borrowck + for vec::each(inf.cleanups) |cleanup| { match *cleanup { clean(_, cleanup_type) | clean_temp(_, _, cleanup_type) => { if cleanup_type == normal_exit_and_unwind { @@ -903,7 +900,7 @@ pub fn need_invoke(bcx: block) -> bool { } _ => () } - cur = match current.parent { + cur = match cur.parent { Some(next) => next, None => return false } @@ -925,11 +922,13 @@ pub fn in_lpad_scope_cx(bcx: block, f: &fn(si: &mut scope_info)) { let mut bcx = bcx; loop { { - // FIXME #4280: Borrow check bug workaround. - let kind: &mut block_kind = &mut *bcx.kind; - match *kind { - block_scope(ref mut inf) => { - if inf.cleanups.len() > 0u || bcx.parent.is_none() { + match bcx.kind { + block_scope(inf) => { + let len = { // FIXME(#5074) workaround old borrowck + let inf = &mut *inf; + inf.cleanups.len() + }; + if len > 0u || bcx.parent.is_none() { f(inf); return; } @@ -1194,7 +1193,7 @@ pub fn new_block(cx: fn_ctxt, parent: Option, kind: block_kind, } pub fn simple_block_scope() -> block_kind { - block_scope(scope_info { + block_scope(@mut scope_info { loop_break: None, loop_label: None, cleanups: ~[], @@ -1222,7 +1221,7 @@ pub fn loop_scope_block(bcx: block, loop_label: Option, n: ~str, opt_node_info: Option) -> block { - return new_block(bcx.fcx, Some(bcx), block_scope(scope_info { + return new_block(bcx.fcx, Some(bcx), block_scope(@mut scope_info { loop_break: Some(loop_break), loop_label: loop_label, cleanups: ~[], @@ -1300,28 +1299,28 @@ pub fn cleanup_and_leave(bcx: block, @fmt!("cleanup_and_leave(%s)", cur.to_str())); } - { - // FIXME #4280: Borrow check bug workaround. - let kind: &mut block_kind = &mut *cur.kind; - match *kind { - block_scope(ref mut inf) if !inf.cleanups.is_empty() => { - for vec::find((*inf).cleanup_paths, - |cp| cp.target == leave).each |cp| { - Br(bcx, cp.dest); - return; - } - let sub_cx = sub_block(bcx, ~"cleanup"); - Br(bcx, sub_cx.llbb); - inf.cleanup_paths.push(cleanup_path { - target: leave, - dest: sub_cx.llbb - }); + match cur.kind { + block_scope(inf) if !inf.empty_cleanups() => { + let (sub_cx, inf_cleanups) = { + let inf = &mut *inf; // FIXME(#5074) workaround stage0 + for vec::find((*inf).cleanup_paths, + |cp| cp.target == leave).each |cp| { + Br(bcx, cp.dest); + return; + } + let sub_cx = sub_block(bcx, ~"cleanup"); + Br(bcx, sub_cx.llbb); + inf.cleanup_paths.push(cleanup_path { + target: leave, + dest: sub_cx.llbb + }); + (sub_cx, copy inf.cleanups) + }; bcx = trans_block_cleanups_(sub_cx, - inf.cleanups, + inf_cleanups, is_lpad); - } - _ => () } + _ => () } match upto { diff --git a/src/librustc/middle/trans/common.rs b/src/librustc/middle/trans/common.rs index dba9ddd2b1d1a..705a89381dfa5 100644 --- a/src/librustc/middle/trans/common.rs +++ b/src/librustc/middle/trans/common.rs @@ -532,6 +532,7 @@ pub fn add_clean_free(cx: block, ptr: ValueRef, heap: heap) { // drop glue checks whether it is zero. pub fn revoke_clean(cx: block, val: ValueRef) { do in_scope_cx(cx) |scope_info| { + let scope_info = &mut *scope_info; // FIXME(#5074) workaround borrowck let cleanup_pos = vec::position( scope_info.cleanups, |cu| match *cu { @@ -550,9 +551,9 @@ pub fn revoke_clean(cx: block, val: ValueRef) { } pub fn block_cleanups(bcx: block) -> ~[cleanup] { - match *bcx.kind { + match bcx.kind { block_non_scope => ~[], - block_scope(ref mut inf) => /*bad*/copy inf.cleanups + block_scope(inf) => /*bad*/copy inf.cleanups } } @@ -561,7 +562,7 @@ pub enum block_kind { // cleaned up. May correspond to an actual block in the language, but also // to an implicit scope, for example, calls introduce an implicit scope in // which the arguments are evaluated and cleaned up. - block_scope(scope_info), + block_scope(@mut scope_info), // A non-scope block is a basic block created as a translation artifact // from translating code that expresses conditional logic rather than by @@ -584,6 +585,12 @@ pub struct scope_info { landing_pad: Option, } +pub impl scope_info { + fn empty_cleanups(&mut self) -> bool { + self.cleanups.is_empty() + } +} + pub trait get_node_info { fn info(&self) -> Option; } @@ -632,7 +639,7 @@ pub struct block_ { unreachable: bool, parent: Option, // The 'kind' of basic block this is. - kind: @mut block_kind, + kind: block_kind, // Is this block part of a landing pad? is_lpad: bool, // info about the AST node this block originated from, if any @@ -651,7 +658,7 @@ pub fn block_(llbb: BasicBlockRef, parent: Option, kind: block_kind, terminated: false, unreachable: false, parent: parent, - kind: @mut kind, + kind: kind, is_lpad: is_lpad, node_info: node_info, fcx: fcx @@ -699,21 +706,17 @@ pub fn val_str(tn: @TypeNames, v: ValueRef) -> @str { return ty_str(tn, val_ty(v)); } -pub fn in_scope_cx(cx: block, f: &fn(si: &mut scope_info)) { +pub fn in_scope_cx(cx: block, f: &fn(si: @mut scope_info)) { let mut cur = cx; loop { - { - // XXX: Borrow check bug workaround. - let kind: &mut block_kind = &mut *cur.kind; - match *kind { - block_scope(ref mut inf) => { - debug!("in_scope_cx: selected cur=%s (cx=%s)", - cur.to_str(), cx.to_str()); - f(inf); - return; - } - _ => () + match cur.kind { + block_scope(inf) => { + debug!("in_scope_cx: selected cur=%s (cx=%s)", + cur.to_str(), cx.to_str()); + f(inf); + return; } + _ => () } cur = block_parent(cur); } diff --git a/src/librustc/middle/trans/controlflow.rs b/src/librustc/middle/trans/controlflow.rs index 113136fa58d13..60b6cf9e23f79 100644 --- a/src/librustc/middle/trans/controlflow.rs +++ b/src/librustc/middle/trans/controlflow.rs @@ -243,8 +243,8 @@ pub fn trans_break_cont(bcx: block, let mut unwind = bcx; let mut target; loop { - match *unwind.kind { - block_scope(scope_info { + match unwind.kind { + block_scope(@scope_info { loop_break: Some(brk), loop_label: l, _ diff --git a/src/librustc/middle/trans/expr.rs b/src/librustc/middle/trans/expr.rs index 30c541c0c055b..ff493c46a176a 100644 --- a/src/librustc/middle/trans/expr.rs +++ b/src/librustc/middle/trans/expr.rs @@ -123,7 +123,6 @@ use back::abi; use lib; use lib::llvm::{ValueRef, TypeRef, llvm}; use metadata::csearch; -use middle::borrowck::root_map_key; use middle::trans::_match; use middle::trans::adt; use middle::trans::asm; From c0f587de34f30b060df8a88c4068740e587b9340 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Thu, 2 May 2013 18:41:57 -0700 Subject: [PATCH 158/410] librustc: Make uninhabited enums not castable to int --- src/librustc/middle/ty.rs | 15 +++++++++------ src/test/compile-fail/uninhabited-enum-cast.rs | 7 +++++++ 2 files changed, 16 insertions(+), 6 deletions(-) create mode 100644 src/test/compile-fail/uninhabited-enum-cast.rs diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index c42c4c3cf0758..d28efcd55b00c 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -2509,12 +2509,15 @@ pub fn type_is_enum(ty: t) -> bool { // constructors pub fn type_is_c_like_enum(cx: ctxt, ty: t) -> bool { match get(ty).sty { - ty_enum(did, _) => { - let variants = enum_variants(cx, did); - let some_n_ary = vec::any(*variants, |v| vec::len(v.args) > 0u); - return !some_n_ary; - } - _ => return false + ty_enum(did, _) => { + let variants = enum_variants(cx, did); + if variants.len() == 0 { + false + } else { + variants.all(|v| v.args.len() == 0) + } + } + _ => false } } diff --git a/src/test/compile-fail/uninhabited-enum-cast.rs b/src/test/compile-fail/uninhabited-enum-cast.rs new file mode 100644 index 0000000000000..c4a5dc4710cba --- /dev/null +++ b/src/test/compile-fail/uninhabited-enum-cast.rs @@ -0,0 +1,7 @@ +enum E {} + +fn f(e: E) { + println((e as int).to_str()); //~ ERROR non-scalar cast +} + +fn main() {} From db6a62c537852a30f030f866598c358d01fb95cd Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Thu, 2 May 2013 18:42:07 -0700 Subject: [PATCH 159/410] rustc: Drop the visitor object from the visitor glue Recent demoding makes the visitor glue leak. It hasn't shown up in tests because the box annihilator deletes the leaked boxes. This affects the new scheduler though which does not yet have a box annihilator. I don't think there's any great way to test this besides setting up a task that doesn't run the box annihilator and I don't know that that's a capability we want tasks to have. --- src/librustc/middle/trans/glue.rs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/librustc/middle/trans/glue.rs b/src/librustc/middle/trans/glue.rs index 4c5a17056b2ea..4025835495b58 100644 --- a/src/librustc/middle/trans/glue.rs +++ b/src/librustc/middle/trans/glue.rs @@ -394,10 +394,15 @@ pub fn call_tydesc_glue(cx: block, v: ValueRef, t: ty::t, field: uint) pub fn make_visit_glue(bcx: block, v: ValueRef, t: ty::t) { let _icx = bcx.insn_ctxt("make_visit_glue"); - let mut bcx = bcx; - let (visitor_trait, object_ty) = ty::visitor_object_ty(bcx.tcx()); - let v = PointerCast(bcx, v, T_ptr(type_of::type_of(bcx.ccx(), object_ty))); - bcx = reflect::emit_calls_to_trait_visit_ty(bcx, t, v, visitor_trait.def_id); + let bcx = do with_scope(bcx, None, ~"visitor cleanup") |bcx| { + let mut bcx = bcx; + let (visitor_trait, object_ty) = ty::visitor_object_ty(bcx.tcx()); + let v = PointerCast(bcx, v, T_ptr(type_of::type_of(bcx.ccx(), object_ty))); + bcx = reflect::emit_calls_to_trait_visit_ty(bcx, t, v, visitor_trait.def_id); + // The visitor is a boxed object and needs to be dropped + add_clean(bcx, v, object_ty); + bcx + }; build_return(bcx); } From f8dffc6789113a10c9dbf1d815c3569b19b53e96 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Thu, 2 May 2013 19:13:56 -0700 Subject: [PATCH 160/410] core: Wire up the unwinder to newsched again This was some merge fallout --- src/libcore/sys.rs | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/src/libcore/sys.rs b/src/libcore/sys.rs index 215fc95f8c7d7..4a8d9fe27d915 100644 --- a/src/libcore/sys.rs +++ b/src/libcore/sys.rs @@ -204,22 +204,32 @@ impl FailWithCause for &'static str { #[cfg(stage0)] pub fn begin_unwind(msg: ~str, file: ~str, line: uint) -> ! { + do str::as_buf(msg) |msg_buf, _msg_len| { + do str::as_buf(file) |file_buf, _file_len| { + unsafe { + let msg_buf = cast::transmute(msg_buf); + let file_buf = cast::transmute(file_buf); + begin_unwind_(msg_buf, file_buf, line as libc::size_t) + } + } + } +} + +// FIXME #4427: Temporary until rt::rt_fail_ goes away +pub fn begin_unwind_(msg: *c_char, file: *c_char, line: size_t) -> ! { use rt::{context, OldTaskContext}; use rt::local_services::unsafe_borrow_local_services; match context() { OldTaskContext => { - do str::as_buf(msg) |msg_buf, _msg_len| { - do str::as_buf(file) |file_buf, _file_len| { - unsafe { - let msg_buf = cast::transmute(msg_buf); - let file_buf = cast::transmute(file_buf); - begin_unwind_(msg_buf, file_buf, line as libc::size_t) - } - } + unsafe { + gc::cleanup_stack_for_failure(); + rustrt::rust_upcall_fail(msg, file, line); + cast::transmute(()) } } _ => { + // XXX: Need to print the failure message gc::cleanup_stack_for_failure(); unsafe { let local_services = unsafe_borrow_local_services(); @@ -232,15 +242,6 @@ pub fn begin_unwind(msg: ~str, file: ~str, line: uint) -> ! { } } -// FIXME #4427: Temporary until rt::rt_fail_ goes away -pub fn begin_unwind_(msg: *c_char, file: *c_char, line: size_t) -> ! { - unsafe { - gc::cleanup_stack_for_failure(); - rustrt::rust_upcall_fail(msg, file, line); - cast::transmute(()) - } -} - // NOTE: remove function after snapshot #[cfg(stage0)] pub fn fail_assert(msg: &str, file: &str, line: uint) -> ! { From 17b368fd2225ffc65333a9a5293fca4f6bdcf7f5 Mon Sep 17 00:00:00 2001 From: Young-il Choi Date: Fri, 3 May 2013 11:14:01 +0900 Subject: [PATCH 161/410] mk: configurable android test directory --- mk/install.mk | 17 ++++++++++------- mk/tests.mk | 5 ++--- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/mk/install.mk b/mk/install.mk index 693589980ce03..71ea1d02a0e1e 100644 --- a/mk/install.mk +++ b/mk/install.mk @@ -164,7 +164,7 @@ endef $(foreach target,$(CFG_TARGET_TRIPLES), \ $(if $(findstring $(target),"arm-linux-androideabi"), \ $(if $(findstring adb,$(shell which adb)), \ - $(if $(findstring device,$(shell adb devices 2>/dev/null | grep -E '^[A-Za-z0-9]+[[:blank:]]+device')), \ + $(if $(findstring device,$(shell adb devices 2>/dev/null | grep -E '^[A-Za-z0-9-]+[[:blank:]]+device')), \ $(info install: install-runtime-target for arm-linux-androideabi enabled \ $(info install: android device attached) \ $(eval $(call DEF_ADB_STATUS, true))), \ @@ -181,6 +181,8 @@ $(foreach target,$(CFG_TARGET_TRIPLES), \ ifeq ($(CFG_ADB_DEVICE),true) +CFG_RUNTIME_PUSH_DIR=/system/lib + ifdef VERBOSE ADB = adb $(1) ADB_PUSH = adb push $(1) $(2) @@ -193,17 +195,18 @@ endif define INSTALL_RUNTIME_TARGET_N install-runtime-target-$(1)-host-$(2): $$(TSREQ$$(ISTAGE)_T_$(1)_H_$(2)) $$(SREQ$$(ISTAGE)_T_$(1)_H_$(2)) - $(Q)$(call ADB_PUSH,$$(TL$(1)$(2))/$$(CFG_RUNTIME_$(1)),/system/lib) - $(Q)$(call ADB_PUSH,$$(TL$(1)$(2))/$$(CORELIB_GLOB_$(1)),/system/lib) - $(Q)$(call ADB_PUSH,$$(TL$(1)$(2))/$$(STDLIB_GLOB_$(1)),/system/lib) + $(Q)$(call ADB_SHELL,mkdir,$(CFG_RUNTIME_PUSH_DIR)) + $(Q)$(call ADB_PUSH,$$(TL$(1)$(2))/$$(CFG_RUNTIME_$(1)),$(CFG_RUNTIME_PUSH_DIR)) + $(Q)$(call ADB_PUSH,$$(TL$(1)$(2))/$$(CORELIB_GLOB_$(1)),$(CFG_RUNTIME_PUSH_DIR)) + $(Q)$(call ADB_PUSH,$$(TL$(1)$(2))/$$(STDLIB_GLOB_$(1)),$(CFG_RUNTIME_PUSH_DIR)) endef define INSTALL_RUNTIME_TARGET_CLEANUP_N install-runtime-target-$(1)-cleanup: $(Q)$(call ADB,remount) - $(Q)$(call ADB_SHELL,rm,/system/lib/$(CFG_RUNTIME_$(1))) - $(Q)$(call ADB_SHELL,rm,/system/lib/$(CORELIB_GLOB_$(1))) - $(Q)$(call ADB_SHELL,rm,/system/lib/$(STDLIB_GLOB_$(1))) + $(Q)$(call ADB_SHELL,rm,$(CFG_RUNTIME_PUSH_DIR)/$(CFG_RUNTIME_$(1))) + $(Q)$(call ADB_SHELL,rm,$(CFG_RUNTIME_PUSH_DIR)/$(CORELIB_GLOB_$(1))) + $(Q)$(call ADB_SHELL,rm,$(CFG_RUNTIME_PUSH_DIR)/$(STDLIB_GLOB_$(1))) endef $(eval $(call INSTALL_RUNTIME_TARGET_N,arm-linux-androideabi,$(CFG_BUILD_TRIPLE))) diff --git a/mk/tests.mk b/mk/tests.mk index 310dec8de7977..7fbba3095625d 100644 --- a/mk/tests.mk +++ b/mk/tests.mk @@ -104,7 +104,7 @@ $(foreach target,$(CFG_TARGET_TRIPLES), \ $(eval $(call DEF_RUNNABLE_STATUS,$(target),true))), \ $(if $(findstring $(target),"arm-linux-androideabi"), \ $(if $(findstring adb,$(shell which adb)), \ - $(if $(findstring device,$(shell adb devices 2>/dev/null | grep -E '^[A-Za-z0-9]+[[:blank:]]+device')), \ + $(if $(findstring device,$(shell adb devices 2>/dev/null | grep -E '^[A-Za-z0-9-]+[[:blank:]]+device')), \ $(info check: $(target) test set is runnable \ $(info check: adb device attached) \ $(eval $(call DEF_RUNNABLE_STATUS,$(target),true))), \ @@ -129,9 +129,8 @@ CFG_ADB_PATH := $(shell which adb) CFG_ADB_TEST_DIR=/system/tmp $(info check: device $(CFG_ADB_TEST_DIR) \ + $(shell $(CFG_ADB_PATH) remount 1>/dev/null) \ $(shell $(CFG_ADB_PATH) shell mkdir $(CFG_ADB_TEST_DIR) 1>/dev/null) \ - $(shell $(CFG_ADB_PATH) shell rm $(CFG_ADB_TEST_DIR)/*-arm-linux-androideabi 1>/dev/null) \ - $(shell $(CFG_ADB_PATH) shell rm $(CFG_ADB_TEST_DIR)/*.so 1>/dev/null) \ ) endif From 76f7207af22d1c64280b1dcbf7d99d198781e0b2 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Thu, 2 May 2013 22:18:16 -0700 Subject: [PATCH 162/410] std: xfail test_serializing_pipes --- src/libstd/flatpipes.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libstd/flatpipes.rs b/src/libstd/flatpipes.rs index 55ea9c2948b01..52d6afbb93e86 100644 --- a/src/libstd/flatpipes.rs +++ b/src/libstd/flatpipes.rs @@ -678,6 +678,7 @@ mod test { } #[test] + #[ignore(reason = "FIXME #6211 failing on linux snapshot machine")] fn test_serializing_pipes() { let (port, chan) = serial::pipe_stream(); From f45c6b878ff11ca7d1927f330ee6f2c878893b29 Mon Sep 17 00:00:00 2001 From: kud1ing Date: Fri, 3 May 2013 09:20:01 +0300 Subject: [PATCH 163/410] Add a brief description to show up in http://static.rust-lang.org/doc/core/index.html --- src/libcore/str/ascii.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/libcore/str/ascii.rs b/src/libcore/str/ascii.rs index 9180c995ca28c..73f556518fa66 100644 --- a/src/libcore/str/ascii.rs +++ b/src/libcore/str/ascii.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +//! Operations on ASCII strings and characters. + use to_str::{ToStr,ToStrConsume}; use str; use cast; From e34a7ecbab8190560d50d4ccb21ffdae855b7c60 Mon Sep 17 00:00:00 2001 From: gifnksm Date: Fri, 3 May 2013 15:57:05 +0900 Subject: [PATCH 164/410] Remove extra `#[cfg(stage0)]` --- src/libcore/bool.rs | 3 --- src/libstd/net_url.rs | 2 -- 2 files changed, 5 deletions(-) diff --git a/src/libcore/bool.rs b/src/libcore/bool.rs index 1b5855049ca61..1b4b81dca267c 100644 --- a/src/libcore/bool.rs +++ b/src/libcore/bool.rs @@ -108,9 +108,6 @@ mod tests { #[test] fn test_bool_from_str() { - #[cfg(stage0)] - use from_str::FromStr; - do all_values |v| { assert!(Some(v) == FromStr::from_str(to_str(v))) } diff --git a/src/libstd/net_url.rs b/src/libstd/net_url.rs index fa872ffee87e6..21e1733cc3075 100644 --- a/src/libstd/net_url.rs +++ b/src/libstd/net_url.rs @@ -13,8 +13,6 @@ #[allow(deprecated_mode)]; use core::cmp::Eq; -#[cfg(stage0)] -use core::from_str::FromStr; use core::io::{Reader, ReaderUtil}; use core::io; use core::hashmap::HashMap; From 02889f75072cd3eb75afc4000d15b8174eda6155 Mon Sep 17 00:00:00 2001 From: Daniel Ralston Date: Fri, 3 May 2013 01:22:52 -0700 Subject: [PATCH 165/410] Add core::cmp::Equiv to prelude --- src/libcore/prelude.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libcore/prelude.rs b/src/libcore/prelude.rs index 4527fcf2923da..e394b5d31f68f 100644 --- a/src/libcore/prelude.rs +++ b/src/libcore/prelude.rs @@ -31,7 +31,7 @@ pub use io::{print, println}; /* Reexported types and traits */ pub use clone::Clone; -pub use cmp::{Eq, Ord, TotalEq, TotalOrd, Ordering, Less, Equal, Greater}; +pub use cmp::{Eq, Ord, TotalEq, TotalOrd, Ordering, Less, Equal, Greater, Equiv}; pub use container::{Container, Mutable, Map, Set}; pub use hash::Hash; pub use old_iter::{BaseIter, ReverseIter, MutableIter, ExtendedIter, EqIter}; From 47050c499a7cc6823ce8ac94f9766dd7a5e61108 Mon Sep 17 00:00:00 2001 From: Daniel Ralston Date: Fri, 3 May 2013 02:25:02 -0700 Subject: [PATCH 166/410] FIX: Export to_bytes::ToBytes --- src/libcore/to_bytes.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/libcore/to_bytes.rs b/src/libcore/to_bytes.rs index 7b4b6994e50a5..e563a304f0988 100644 --- a/src/libcore/to_bytes.rs +++ b/src/libcore/to_bytes.rs @@ -419,8 +419,7 @@ impl IterBytes for *const A { } } - -trait ToBytes { +pub trait ToBytes { fn to_bytes(&self, lsb0: bool) -> ~[u8]; } From 34024353e86e22e459a1981f563e3d4f43906432 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Fri, 3 May 2013 05:42:00 -0400 Subject: [PATCH 167/410] Change borrow debugging so it is disabled by -O --- src/libcore/rt/env.rs | 2 - src/libcore/unstable/lang.rs | 121 +++++++++++++++------------- src/librustc/middle/lang_items.rs | 20 ++++- src/librustc/middle/trans/common.rs | 32 ++++++-- src/librustc/middle/trans/datum.rs | 24 +++++- src/rt/rust_env.cpp | 2 - src/rt/rust_env.h | 1 - 7 files changed, 129 insertions(+), 73 deletions(-) diff --git a/src/libcore/rt/env.rs b/src/libcore/rt/env.rs index 1f52cf77868a2..e479375401a3b 100644 --- a/src/libcore/rt/env.rs +++ b/src/libcore/rt/env.rs @@ -33,8 +33,6 @@ pub struct Environment { argv: **c_char, /// Print GC debugging info (true if env var RUST_DEBUG_MEM is set) debug_mem: bool, - /// Track origin of `@mut` borrows (true if env var RUST_DEBUG_BORROWS is set) - debug_borrows: bool } /// Get the global environment settings diff --git a/src/libcore/unstable/lang.rs b/src/libcore/unstable/lang.rs index a3e44b5feea4a..27fc3287bdb39 100644 --- a/src/libcore/unstable/lang.rs +++ b/src/libcore/unstable/lang.rs @@ -19,7 +19,7 @@ use sys; use unstable::exchange_alloc; use cast::transmute; use task::rt::rust_get_task; -use option::{Some, None}; +use option::{Option, Some, None}; #[allow(non_camel_case_types)] pub type rust_task = c_void; @@ -79,6 +79,19 @@ struct BorrowRecord { line: size_t } +fn try_take_task_borrow_list() -> Option<~[BorrowRecord]> { + unsafe { + let cur_task = rust_get_task(); + let ptr = rustrt::rust_take_task_borrow_list(cur_task); + if ptr.is_null() { + None + } else { + let v: ~[BorrowRecord] = transmute(ptr); + Some(v) + } + } +} + fn swap_task_borrow_list(f: &fn(~[BorrowRecord]) -> ~[BorrowRecord]) { unsafe { let cur_task = rust_get_task(); @@ -93,23 +106,20 @@ fn swap_task_borrow_list(f: &fn(~[BorrowRecord]) -> ~[BorrowRecord]) { pub unsafe fn clear_task_borrow_list() { // pub because it is used by the box annihilator. - let cur_task = rust_get_task(); - let ptr = rustrt::rust_take_task_borrow_list(cur_task); - if !ptr.is_null() { - let _: ~[BorrowRecord] = transmute(ptr); - } + let _ = try_take_task_borrow_list(); } fn fail_borrowed(box: *mut BoxRepr, file: *c_char, line: size_t) { debug_ptr("fail_borrowed: ", box); - if !::rt::env::get().debug_borrows { - let msg = "borrowed"; - do str::as_buf(msg) |msg_p, _| { - fail_(msg_p as *c_char, file, line); + match try_take_task_borrow_list() { + None => { // not recording borrows + let msg = "borrowed"; + do str::as_buf(msg) |msg_p, _| { + fail_(msg_p as *c_char, file, line); + } } - } else { - do swap_task_borrow_list |borrow_list| { + Some(borrow_list) => { // recording borrows let mut msg = ~"borrowed"; let mut sep = " at "; for borrow_list.each_reverse |entry| { @@ -126,7 +136,6 @@ fn fail_borrowed(box: *mut BoxRepr, file: *c_char, line: size_t) { do str::as_buf(msg) |msg_p, _| { fail_(msg_p as *c_char, file, line) } - borrow_list } } } @@ -211,34 +220,6 @@ pub unsafe fn borrow_as_imm(a: *u8) { (*a).header.ref_count |= FROZEN_BIT; } -fn add_borrow_to_task_list(a: *mut BoxRepr, file: *c_char, line: size_t) { - do swap_task_borrow_list |borrow_list| { - let mut borrow_list = borrow_list; - borrow_list.push(BorrowRecord {box: a, file: file, line: line}); - borrow_list - } -} - -fn remove_borrow_from_task_list(a: *mut BoxRepr, file: *c_char, line: size_t) { - do swap_task_borrow_list |borrow_list| { - let mut borrow_list = borrow_list; - let br = BorrowRecord {box: a, file: file, line: line}; - match borrow_list.rposition_elem(&br) { - Some(idx) => { - borrow_list.remove(idx); - borrow_list - } - None => { - let err = fmt!("no borrow found, br=%?, borrow_list=%?", - br, borrow_list); - do str::as_buf(err) |msg_p, _| { - fail_(msg_p as *c_char, file, line) - } - } - } - } -} - #[cfg(not(stage0))] #[lang="borrow_as_imm"] #[inline(always)] @@ -252,12 +233,8 @@ pub unsafe fn borrow_as_imm(a: *u8, file: *c_char, line: size_t) -> uint { if (ref_count & MUT_BIT) != 0 { fail_borrowed(a, file, line); - } else { - (*a).header.ref_count |= FROZEN_BIT; - if ::rt::env::get().debug_borrows { - add_borrow_to_task_list(a, file, line); - } } + ref_count } @@ -273,15 +250,53 @@ pub unsafe fn borrow_as_mut(a: *u8, file: *c_char, line: size_t) -> uint { let ref_count = (*a).header.ref_count; if (ref_count & (MUT_BIT|FROZEN_BIT)) != 0 { fail_borrowed(a, file, line); - } else { - (*a).header.ref_count |= (MUT_BIT|FROZEN_BIT); - if ::rt::env::get().debug_borrows { - add_borrow_to_task_list(a, file, line); - } } ref_count } + +#[cfg(not(stage0))] +#[lang="record_borrow"] +pub unsafe fn record_borrow(a: *u8, old_ref_count: uint, + file: *c_char, line: size_t) { + if (old_ref_count & ALL_BITS) == 0 { + // was not borrowed before + let a: *mut BoxRepr = transmute(a); + do swap_task_borrow_list |borrow_list| { + let mut borrow_list = borrow_list; + borrow_list.push(BorrowRecord {box: a, file: file, line: line}); + borrow_list + } + } +} + +#[cfg(not(stage0))] +#[lang="unrecord_borrow"] +pub unsafe fn unrecord_borrow(a: *u8, old_ref_count: uint, + file: *c_char, line: size_t) { + if (old_ref_count & ALL_BITS) == 0 { + // was not borrowed before + let a: *mut BoxRepr = transmute(a); + do swap_task_borrow_list |borrow_list| { + let mut borrow_list = borrow_list; + let br = BorrowRecord {box: a, file: file, line: line}; + match borrow_list.rposition_elem(&br) { + Some(idx) => { + borrow_list.remove(idx); + borrow_list + } + None => { + let err = fmt!("no borrow found, br=%?, borrow_list=%?", + br, borrow_list); + do str::as_buf(err) |msg_p, _| { + fail_(msg_p as *c_char, file, line) + } + } + } + } + } +} + #[cfg(stage0)] #[lang="return_to_mut"] #[inline(always)] @@ -312,10 +327,6 @@ pub unsafe fn return_to_mut(a: *u8, old_ref_count: uint, debug_ptr(" (old) : ", old_ref_count as *()); debug_ptr(" (new) : ", ref_count as *()); debug_ptr(" (comb): ", combined as *()); - - if ::rt::env::get().debug_borrows { - remove_borrow_from_task_list(a, file, line); - } } } diff --git a/src/librustc/middle/lang_items.rs b/src/librustc/middle/lang_items.rs index 314b58d13e147..448f33796bcfd 100644 --- a/src/librustc/middle/lang_items.rs +++ b/src/librustc/middle/lang_items.rs @@ -70,18 +70,20 @@ pub enum LangItem { ReturnToMutFnLangItem, // 32 CheckNotBorrowedFnLangItem, // 33 StrDupUniqFnLangItem, // 34 + RecordBorrowFnLangItem, // 35 + UnrecordBorrowFnLangItem, // 36 - StartFnLangItem, // 35 + StartFnLangItem, // 37 } pub struct LanguageItems { - items: [Option, ..36] + items: [Option, ..38] } pub impl LanguageItems { pub fn new() -> LanguageItems { LanguageItems { - items: [ None, ..36 ] + items: [ None, ..38 ] } } @@ -133,8 +135,10 @@ pub impl LanguageItems { 32 => "return_to_mut", 33 => "check_not_borrowed", 34 => "strdup_uniq", + 35 => "record_borrow", + 36 => "unrecord_borrow", - 35 => "start", + 37 => "start", _ => "???" } @@ -251,6 +255,12 @@ pub impl LanguageItems { pub fn strdup_uniq_fn(&const self) -> def_id { self.items[StrDupUniqFnLangItem as uint].get() } + pub fn record_borrow_fn(&const self) -> def_id { + self.items[RecordBorrowFnLangItem as uint].get() + } + pub fn unrecord_borrow_fn(&const self) -> def_id { + self.items[UnrecordBorrowFnLangItem as uint].get() + } pub fn start_fn(&const self) -> def_id { self.items[StartFnLangItem as uint].get() } @@ -302,6 +312,8 @@ fn LanguageItemCollector(crate: @crate, item_refs.insert(@~"check_not_borrowed", CheckNotBorrowedFnLangItem as uint); item_refs.insert(@~"strdup_uniq", StrDupUniqFnLangItem as uint); + item_refs.insert(@~"record_borrow", RecordBorrowFnLangItem as uint); + item_refs.insert(@~"unrecord_borrow", UnrecordBorrowFnLangItem as uint); item_refs.insert(@~"start", StartFnLangItem as uint); LanguageItemCollector { diff --git a/src/librustc/middle/trans/common.rs b/src/librustc/middle/trans/common.rs index 705a89381dfa5..2a13cf73f8bba 100644 --- a/src/librustc/middle/trans/common.rs +++ b/src/librustc/middle/trans/common.rs @@ -489,15 +489,37 @@ pub fn add_clean_return_to_mut(bcx: block, clean_temp( frozen_val_ref, |bcx| { + let mut bcx = bcx; + + let box_ptr = + build::Load(bcx, + build::PointerCast(bcx, + frozen_val_ref, + T_ptr(T_ptr(T_i8())))); + + let bits_val = + build::Load(bcx, + bits_val_ref); + + if bcx.tcx().sess.opts.optimize == session::No { + bcx = callee::trans_lang_call( + bcx, + bcx.tcx().lang_items.unrecord_borrow_fn(), + ~[ + box_ptr, + bits_val, + filename_val, + line_val + ], + expr::Ignore); + } + callee::trans_lang_call( bcx, bcx.tcx().lang_items.return_to_mut_fn(), ~[ - build::Load(bcx, - build::PointerCast(bcx, - frozen_val_ref, - T_ptr(T_ptr(T_i8())))), - build::Load(bcx, bits_val_ref), + box_ptr, + bits_val, filename_val, line_val ], diff --git a/src/librustc/middle/trans/datum.rs b/src/librustc/middle/trans/datum.rs index d6df6c87dec43..af7165c53a7c2 100644 --- a/src/librustc/middle/trans/datum.rs +++ b/src/librustc/middle/trans/datum.rs @@ -101,6 +101,7 @@ use middle::trans::type_of; use middle::ty; use util::common::indenter; use util::ppaux::ty_to_str; +use driver::session; use core::container::Set; // XXX: this should not be necessary use core::to_bytes; @@ -564,19 +565,34 @@ pub impl Datum { DynaMut => bcx.tcx().lang_items.borrow_as_mut_fn(), }; + let box_ptr = Load(bcx, + PointerCast(bcx, + scratch.val, + T_ptr(T_ptr(T_i8())))); + bcx = callee::trans_lang_call( bcx, freeze_did, ~[ - Load(bcx, - PointerCast(bcx, - scratch.val, - T_ptr(T_ptr(T_i8())))), + box_ptr, filename, line ], expr::SaveIn(scratch_bits.val)); + if bcx.tcx().sess.opts.optimize == session::No { + bcx = callee::trans_lang_call( + bcx, + bcx.tcx().lang_items.record_borrow_fn(), + ~[ + box_ptr, + Load(bcx, scratch_bits.val), + filename, + line + ], + expr::Ignore); + } + add_clean_return_to_mut( cleanup_bcx, scratch.val, scratch_bits.val, filename, line); diff --git a/src/rt/rust_env.cpp b/src/rt/rust_env.cpp index e6fe35609ec93..041b4efac52a2 100644 --- a/src/rt/rust_env.cpp +++ b/src/rt/rust_env.cpp @@ -24,7 +24,6 @@ #define RUST_SEED "RUST_SEED" #define RUST_POISON_ON_FREE "RUST_POISON_ON_FREE" #define RUST_DEBUG_MEM "RUST_DEBUG_MEM" -#define RUST_DEBUG_BORROWS "RUST_DEBUG_BORROWS" #if defined(__WIN32__) static int @@ -131,7 +130,6 @@ load_env(int argc, char **argv) { env->argc = argc; env->argv = argv; env->debug_mem = getenv(RUST_DEBUG_MEM) != NULL; - env->debug_borrows = getenv(RUST_DEBUG_BORROWS) != NULL; return env; } diff --git a/src/rt/rust_env.h b/src/rt/rust_env.h index 322198bb031ff..df27f7674f265 100644 --- a/src/rt/rust_env.h +++ b/src/rt/rust_env.h @@ -28,7 +28,6 @@ struct rust_env { int argc; char **argv; rust_bool debug_mem; - rust_bool debug_borrows; }; rust_env* load_env(int argc, char **argv); From 2e3e0c0892d6fc9d20374d31db994eee4d083366 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Steinbrink?= Date: Fri, 3 May 2013 12:26:45 +0200 Subject: [PATCH 168/410] Avoid needless creation of unique strings in fmt!() Only the first portion has to be owned, as it acts as the buffer for the constructed string. The remaining strings can be static. --- src/libsyntax/ext/fmt.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/libsyntax/ext/fmt.rs b/src/libsyntax/ext/fmt.rs index 62641279f883a..e9eebe5b2acc6 100644 --- a/src/libsyntax/ext/fmt.rs +++ b/src/libsyntax/ext/fmt.rs @@ -273,15 +273,13 @@ fn pieces_to_expr(cx: @ext_ctxt, sp: span, match pc { /* Raw strings get appended via str::push_str */ PieceString(s) => { - let portion = mk_uniq_str(cx, fmt_sp, s); - /* If this is the first portion, then initialize the local buffer with it directly. If it's actually the only piece, then there's no need for it to be mutable */ if i == 0 { - stms.push(mk_local(cx, fmt_sp, npieces > 1, ident, portion)); + stms.push(mk_local(cx, fmt_sp, npieces > 1, ident, mk_uniq_str(cx, fmt_sp, s))); } else { - let args = ~[mk_mut_addr_of(cx, fmt_sp, buf()), portion]; + let args = ~[mk_mut_addr_of(cx, fmt_sp, buf()), mk_base_str(cx, fmt_sp, s)]; let call = mk_call_global(cx, fmt_sp, ~[str_ident, push_ident], From 35214d3c6cd5f70b38baa6d879ca40d9db8118ba Mon Sep 17 00:00:00 2001 From: Young-il Choi Date: Sat, 4 May 2013 00:46:52 +0900 Subject: [PATCH 169/410] configure: CFG_ADB for adb added --- configure | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/configure b/configure index 884ececa24b1e..0c4afa0566de3 100755 --- a/configure +++ b/configure @@ -439,6 +439,10 @@ then probe CFG_ZCAT zcat fi +step_msg "looking for target specific programs" + +probe CFG_ADB adb + if [ ! -z "$CFG_PANDOC" ] then PV_MAJOR_MINOR=$(pandoc --version | grep '^pandoc ' | From 9ecb97ae58c6fde97bfe58aeddd11790899bd4ec Mon Sep 17 00:00:00 2001 From: Young-il Choi Date: Sat, 4 May 2013 00:47:54 +0900 Subject: [PATCH 170/410] mk: install.mk directory argument pass for install-runtime-target --- mk/install.mk | 41 ++++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/mk/install.mk b/mk/install.mk index 71ea1d02a0e1e..5fa477a790d4f 100644 --- a/mk/install.mk +++ b/mk/install.mk @@ -157,40 +157,46 @@ uninstall: # target platform specific variables # for arm-linux-androidabi -define DEF_ADB_STATUS -CFG_ADB_DEVICE=$(1) +define DEF_ADB_DEVICE_STATUS +CFG_ADB_DEVICE_STATUS=$(1) endef $(foreach target,$(CFG_TARGET_TRIPLES), \ $(if $(findstring $(target),"arm-linux-androideabi"), \ - $(if $(findstring adb,$(shell which adb)), \ - $(if $(findstring device,$(shell adb devices 2>/dev/null | grep -E '^[A-Za-z0-9-]+[[:blank:]]+device')), \ - $(info install: install-runtime-target for arm-linux-androideabi enabled \ + $(if $(findstring adb,$(CFG_ADB)), \ + $(if $(findstring device,$(shell adb devices 2>/dev/null | grep -E '^[_A-Za-z0-9-]+[[:blank:]]+device')), \ + $(info install: install-runtime-target for $(target) enabled \ $(info install: android device attached) \ - $(eval $(call DEF_ADB_STATUS, true))), \ - $(info install: install-runtime-target for arm-linux-androideabi disabled \ + $(eval $(call DEF_ADB_DEVICE_STATUS, true))), \ + $(info install: install-runtime-target for $(target) disabled \ $(info install: android device not attached) \ - $(eval $(call DEF_ADB_STATUS, false))) \ + $(eval $(call DEF_ADB_DEVICE_STATUS, false))) \ ), \ - $(info install: install-runtime-target for arm-linux-androideabi disabled \ + $(info install: install-runtime-target for $(target) disabled \ $(info install: adb not found) \ - $(eval $(call DEF_ADB_STATUS, false))) \ + $(eval $(call DEF_ADB_DEVICE_STATUS, false))) \ ), \ ) \ ) -ifeq ($(CFG_ADB_DEVICE),true) - +ifeq (install-runtime-target,$(firstword $(MAKECMDGOALS))) +$(eval $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS)):;@:) +L_TOKEN := $(word 2,$(MAKECMDGOALS)) +ifeq ($(L_TOKEN),) CFG_RUNTIME_PUSH_DIR=/system/lib +else +CFG_RUNTIME_PUSH_DIR=$(L_TOKEN) +endif +ifeq ($(CFG_ADB_DEVICE_STATUS),true) ifdef VERBOSE ADB = adb $(1) ADB_PUSH = adb push $(1) $(2) ADB_SHELL = adb shell $(1) $(2) else - ADB = $(Q)$(call E, adb $(1)) && adb $(1) 1>/dev/null 2>/dev/null - ADB_PUSH = $(Q)$(call E, adb push $(1)) && adb push $(1) $(2) 1>/dev/null 2>/dev/null - ADB_SHELL = $(Q)$(call E, adb shell $(1) $(2)) && adb shell $(1) $(2) 1>/dev/null 2>/dev/null + ADB = $(Q)$(call E, adb $(1)) && adb $(1) 1>/dev/null + ADB_PUSH = $(Q)$(call E, adb push $(1)) && adb push $(1) $(2) 1>/dev/null + ADB_SHELL = $(Q)$(call E, adb shell $(1) $(2)) && adb shell $(1) $(2) 1>/dev/null endif define INSTALL_RUNTIME_TARGET_N @@ -215,8 +221,9 @@ $(eval $(call INSTALL_RUNTIME_TARGET_CLEANUP_N,arm-linux-androideabi)) install-runtime-target: \ install-runtime-target-arm-linux-androideabi-cleanup \ install-runtime-target-arm-linux-androideabi-host-$(CFG_BUILD_TRIPLE) - else install-runtime-target: - @echo + @echo "No device to install runtime library" + @echo +endif endif From 84bdd05accba00254e999e1d73b963cca3388d33 Mon Sep 17 00:00:00 2001 From: Young-il Choi Date: Sat, 4 May 2013 00:49:18 +0900 Subject: [PATCH 171/410] compiletest: fix decision rule to run and cleanup --- mk/tests.mk | 90 +++++++++++++--------------------- src/compiletest/compiletest.rc | 8 +-- src/compiletest/runtest.rs | 47 ++++++++++++------ 3 files changed, 72 insertions(+), 73 deletions(-) diff --git a/mk/tests.mk b/mk/tests.mk index 7fbba3095625d..9997f170a98f0 100644 --- a/mk/tests.mk +++ b/mk/tests.mk @@ -92,48 +92,44 @@ endef $(foreach target,$(CFG_TARGET_TRIPLES), \ $(eval $(call DEF_TARGET_COMMANDS,$(target)))) -# Target specific variables +# Target platform specific variables # for arm-linux-androidabi -define DEF_RUNNABLE_STATUS -CFG_RUNNABLE_$(1)=$(2) +define DEF_ADB_DEVICE_STATUS +CFG_ADB_DEVICE_STATUS=$(1) endef $(foreach target,$(CFG_TARGET_TRIPLES), \ - $(if $(findstring $(target),$(CFG_BUILD_TRIPLE)), \ - $(info check: $(target) test set is runnable \ - $(eval $(call DEF_RUNNABLE_STATUS,$(target),true))), \ - $(if $(findstring $(target),"arm-linux-androideabi"), \ - $(if $(findstring adb,$(shell which adb)), \ - $(if $(findstring device,$(shell adb devices 2>/dev/null | grep -E '^[A-Za-z0-9-]+[[:blank:]]+device')), \ - $(info check: $(target) test set is runnable \ - $(info check: adb device attached) \ - $(eval $(call DEF_RUNNABLE_STATUS,$(target),true))), \ - $(info check: $(target) test set is not runnable \ - $(info check: adb device not attached) \ - $(eval $(call DEF_RUNNABLE_STATUS,$(target),false))) \ - ), \ - $(info check: $(target) test set is not runnable \ - $(info check: adb not found) \ - $(eval $(call DEF_RUNNABLE_STATUS,$(target),false))) \ + $(if $(findstring $(target),"arm-linux-androideabi"), \ + $(if $(findstring adb,$(CFG_ADB)), \ + $(if $(findstring device,$(shell adb devices 2>/dev/null | grep -E '^[_A-Za-z0-9-]+[[:blank:]]+device')), \ + $(info check: $(target) test enabled \ + $(info check: android device attached) \ + $(eval $(call DEF_ADB_DEVICE_STATUS, true))), \ + $(info check: $(target) test disabled \ + $(info check: android device not attached) \ + $(eval $(call DEF_ADB_DEVICE_STATUS, false))) \ ), \ - $(info check: $(target) test set is not runnable \ - $(eval $(call DEF_RUNNABLE_STATUS,$(target),false)) \ - ) \ - ) \ + $(info check: $(target) test disabled \ + $(info check: adb not found) \ + $(eval $(call DEF_ADB_DEVICE_STATUS, false))) \ + ), \ ) \ ) -ifeq ($(CFG_RUNNABLE_arm-linux-androideabi),true) -CFG_ADB_DEVICE=true -CFG_ADB_PATH := $(shell which adb) -CFG_ADB_TEST_DIR=/system/tmp +ifeq ($(CFG_ADB_DEVICE_STATUS),true) +CFG_ADB_TEST_DIR=/data/tmp -$(info check: device $(CFG_ADB_TEST_DIR) \ - $(shell $(CFG_ADB_PATH) remount 1>/dev/null) \ - $(shell $(CFG_ADB_PATH) shell mkdir $(CFG_ADB_TEST_DIR) 1>/dev/null) \ +$(info check: android device test dir $(CFG_ADB_TEST_DIR) ready \ + $(shell adb remount 1>/dev/null) \ + $(shell adb shell mkdir $(CFG_ADB_TEST_DIR) 1>/dev/null) \ + $(shell adb push $(CFG_ANDROID_CROSS_PATH)/arm-linux-androideabi/lib/armv7-a/libgnustl_shared.so \ + $(CFG_ADB_TEST_DIR) 1>/dev/null) \ ) +else +CFG_ADB_TEST_DIR= endif + ###################################################################### # Main test targets ###################################################################### @@ -366,14 +362,15 @@ check-stage$(1)-T-$(2)-H-$(3)-$(4)-exec: $$(call TEST_OK_FILE,$(1),$(2),$(3),$(4 $$(call TEST_OK_FILE,$(1),$(2),$(3),$(4)): \ $(3)/test/$(4)test.stage$(1)-$(2)$$(X_$(2)) @$$(call E, run: $$< via adb) - @$(CFG_ADB_PATH) push $$< $(CFG_ADB_TEST_DIR) - @$(CFG_ADB_PATH) shell $(CFG_ADB_TEST_DIR)/`echo $$< | sed 's/.*\///'` \ + @$(CFG_ADB) push $$< $(CFG_ADB_TEST_DIR) + @$(CFG_ADB) shell LD_LIBRARY_PATH=$(CFG_ADB_TEST_DIR) \ + $(CFG_ADB_TEST_DIR)/`echo $$< | sed 's/.*\///'` \ --logfile $(CFG_ADB_TEST_DIR)/check-stage$(1)-T-$(2)-H-$(3)-$(4).log > \ tmp/check-stage$(1)-T-$(2)-H-$(3)-$(4).tmp @cat tmp/check-stage$(1)-T-$(2)-H-$(3)-$(4).tmp @touch tmp/check-stage$(1)-T-$(2)-H-$(3)-$(4).log - @$(CFG_ADB_PATH) pull $(CFG_ADB_TEST_DIR)/check-stage$(1)-T-$(2)-H-$(3)-$(4).log tmp/ - @$(CFG_ADB_PATH) shell rm $(CFG_ADB_TEST_DIR)/check-stage$(1)-T-$(2)-H-$(3)-$(4).log + @$(CFG_ADB) pull $(CFG_ADB_TEST_DIR)/check-stage$(1)-T-$(2)-H-$(3)-$(4).log tmp/ + @$(CFG_ADB) shell rm $(CFG_ADB_TEST_DIR)/check-stage$(1)-T-$(2)-H-$(3)-$(4).log @if grep -q "result: ok" tmp/check-stage$(1)-T-$(2)-H-$(3)-$(4).tmp; \ then \ rm tmp/check-stage$(1)-T-$(2)-H-$(3)-$(4).tmp; \ @@ -400,11 +397,11 @@ $(foreach host,$(CFG_HOST_TRIPLES), \ $(if $(findstring $(target),$(CFG_BUILD_TRIPLE)), \ $(eval $(call DEF_TEST_CRATE_RULES,$(stage),$(target),$(host),$(crate))), \ $(if $(findstring $(target),"arm-linux-androideabi"), \ - $(if $(findstring $(CFG_RUNNABLE_arm-linux-androideabi),"true"), \ + $(if $(findstring $(CFG_ADB_DEVICE_STATUS),"true"), \ $(eval $(call DEF_TEST_CRATE_RULES_arm-linux-androideabi,$(stage),$(target),$(host),$(crate))), \ $(eval $(call DEF_TEST_CRATE_RULES_null,$(stage),$(target),$(host),$(crate))) \ ), \ - $(eval $(call DEF_TEST_CRATE_RULES_null,$(stage),$(target),$(host),$(crate))) \ + $(eval $(call DEF_TEST_CRATE_RULES,$(stage),$(target),$(host),$(crate))) \ )))))) @@ -496,36 +493,19 @@ TEST_SREQ$(1)_T_$(2)_H_$(3) = \ # Rules for the cfail/rfail/rpass/bench/perf test runner -ifeq ($(CFG_ADB_DEVICE),true) - CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3) := \ --compile-lib-path $$(HLIB$(1)_H_$(3)) \ --run-lib-path $$(TLIB$(1)_T_$(2)_H_$(3)) \ - --rustc-path $$(HBIN$(1)_H_$(3))/rustc$$(X_$(3)) \ + --rustc-path $$(HBIN$(1)_H_$(3))/rustc$$(X_$(3)) \ --aux-base $$(S)src/test/auxiliary/ \ --stage-id stage$(1)-$(2) \ --host $(CFG_BUILD_TRIPLE) \ --target $(2) \ - --adb-path=$(CFG_ADB_PATH) \ + --adb-path=$(CFG_ADB) \ --adb-test-dir=$(CFG_ADB_TEST_DIR) \ --rustcflags "$(RUSTC_FLAGS_$(2)) $$(CFG_RUSTC_FLAGS) --target=$(2)" \ $$(CTEST_TESTARGS) -else - -CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3) := \ - --compile-lib-path $$(HLIB$(1)_H_$(3)) \ - --run-lib-path $$(TLIB$(1)_T_$(2)_H_$(3)) \ - --rustc-path $$(HBIN$(1)_H_$(3))/rustc$$(X_$(3)) \ - --aux-base $$(S)src/test/auxiliary/ \ - --stage-id stage$(1)-$(2) \ - --host $(CFG_BUILD_TRIPLE) \ - --target $(2) \ - --rustcflags "$(RUSTC_FLAGS_$(2)) $$(CFG_RUSTC_FLAGS) --target=$(2)" \ - $$(CTEST_TESTARGS) - -endif - CTEST_DEPS_rpass_$(1)-T-$(2)-H-$(3) = $$(RPASS_TESTS) CTEST_DEPS_rpass_full_$(1)-T-$(2)-H-$(3) = $$(RPASS_FULL_TESTS) $$(TLIBRUSTC_DEFAULT$(1)_T_$(2)_H_$(3)) CTEST_DEPS_rfail_$(1)-T-$(2)-H-$(3) = $$(RFAIL_TESTS) diff --git a/src/compiletest/compiletest.rc b/src/compiletest/compiletest.rc index 5575c01a9065b..fab73d78021c2 100644 --- a/src/compiletest/compiletest.rc +++ b/src/compiletest/compiletest.rc @@ -108,11 +108,13 @@ pub fn parse_config(args: ~[~str]) -> config { else { match getopts::opt_maybe_str(matches, ~"target") { Some(~"arm-linux-androideabi") => { - if (getopts::opt_maybe_str(matches, ~"adb-path") != - option::None) { true } + if (opt_str(getopts::opt_maybe_str(matches, ~"adb-test-dir")) != + ~"(none)" && + opt_str(getopts::opt_maybe_str(matches, ~"adb-test-dir")) != + ~"") { true } else { false } } - _ => { false } + _ => { true } } }, verbose: getopts::opt_present(matches, ~"verbose") diff --git a/src/compiletest/runtest.rs b/src/compiletest/runtest.rs index 142460fe0dc09..d1319c395add6 100644 --- a/src/compiletest/runtest.rs +++ b/src/compiletest/runtest.rs @@ -77,9 +77,18 @@ fn run_rfail_test(config: config, props: TestProps, testfile: &Path) { fatal_ProcRes(~"run-fail test isn't valgrind-clean!", ProcRes); } - if (config.flag_runnable) { + if (config.host == config.target) { check_correct_failure_status(ProcRes); check_error_patterns(props, testfile, ProcRes); + } else { + match (config.target, config.flag_runnable) { + + (~"arm-linux-androideabi", false) => { } + _ => { + check_correct_failure_status(ProcRes); + check_error_patterns(props, testfile, ProcRes); + } + } } } @@ -490,16 +499,10 @@ fn exec_compiled_test(config: config, props: TestProps, make_run_args(config, props, testfile), env, config.run_lib_path, None) - } - else { + } else { let args = make_run_args(config, props, testfile); let cmdline = make_cmdline(~"", args.prog, args.args); - let defaultRes = match config.mode { - mode_run_fail => ProcRes {status: 101, stdout: ~"", stderr: ~"", cmdline: cmdline}, - _ => ProcRes {status: 0, stdout: ~"", stderr: ~"", cmdline: cmdline} - }; - match (config.target, config.flag_runnable) { (~"arm-linux-androideabi", true) => { @@ -524,8 +527,8 @@ fn exec_compiled_test(config: config, props: TestProps, // execute program logv(config, fmt!("executing (%s) %s", config.target, cmdline)); - // NOTE : adb shell dose not forward to each stdout and stderr of internal result - // but forward to stdout only + // NOTE: adb shell dose not forward stdout and stderr of internal result + // to stdout and stderr seperately but to stdout only let mut newargs_out = ~[]; let mut newargs_err = ~[]; let subargs = args.args; @@ -534,12 +537,11 @@ fn exec_compiled_test(config: config, props: TestProps, let mut newcmd_out = ~""; let mut newcmd_err = ~""; - newcmd_out.push_str(fmt!( - "LD_LIBRARY_PATH=%s; export LD_LIBRARY_PATH; cd %s; ./%s", + + newcmd_out.push_str(fmt!("LD_LIBRARY_PATH=%s %s/%s", config.adb_test_dir, config.adb_test_dir, prog_short)); - newcmd_err.push_str(fmt!( - "LD_LIBRARY_PATH=%s; export LD_LIBRARY_PATH; cd %s; ./%s", + newcmd_err.push_str(fmt!("LD_LIBRARY_PATH=%s %s/%s", config.adb_test_dir, config.adb_test_dir, prog_short)); for vec::each(subargs) |tv| { @@ -569,7 +571,22 @@ fn exec_compiled_test(config: config, props: TestProps, stderr: exe_result_err.out, cmdline: cmdline } } } - _=> defaultRes + + (~"arm-linux-androideabi", false) => { + match config.mode { + mode_run_fail => ProcRes {status: 101, stdout: ~"", + stderr: ~"", cmdline: cmdline}, + _ => ProcRes {status: 0, stdout: ~"", + stderr: ~"", cmdline: cmdline} + } + } + + _=> { + compose_and_run(config, testfile, + make_run_args(config, props, testfile), + env, + config.run_lib_path, None) + } } } } From e7d96934c16c915d18be391836fbf0ebca6c558b Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Fri, 3 May 2013 12:11:15 -0400 Subject: [PATCH 172/410] Correct mismatch between the way that pattern ids and expression ids map to types (pattern ids map to the input type, expression ids map to the output type) --- src/librustc/middle/borrowck/check_loans.rs | 2 +- .../middle/borrowck/gather_loans/lifetime.rs | 8 +- src/librustc/middle/borrowck/mod.rs | 18 +- src/librustc/middle/mem_categorization.rs | 195 +++++++++--------- src/librustc/middle/trans/_match.rs | 17 +- src/librustc/middle/trans/datum.rs | 4 +- src/librustc/middle/trans/expr.rs | 2 +- 7 files changed, 131 insertions(+), 115 deletions(-) diff --git a/src/librustc/middle/borrowck/check_loans.rs b/src/librustc/middle/borrowck/check_loans.rs index 70da9c9380559..c2dc2fb22ab5b 100644 --- a/src/librustc/middle/borrowck/check_loans.rs +++ b/src/librustc/middle/borrowck/check_loans.rs @@ -378,7 +378,7 @@ pub impl<'self> CheckLoanCtxt<'self> { // Dynamically check writes to `@mut` let key = root_map_key { - id: base.id, + id: guarantor.id, derefs: deref_count }; debug!("Inserting write guard at %?", key); diff --git a/src/librustc/middle/borrowck/gather_loans/lifetime.rs b/src/librustc/middle/borrowck/gather_loans/lifetime.rs index fdfb26c0d0835..43fff110a7a7e 100644 --- a/src/librustc/middle/borrowck/gather_loans/lifetime.rs +++ b/src/librustc/middle/borrowck/gather_loans/lifetime.rs @@ -97,7 +97,7 @@ impl GuaranteeLifetimeContext { ); if !omit_root { - self.check_root(base, derefs, ptr_mutbl, discr_scope); + self.check_root(cmt, base, derefs, ptr_mutbl, discr_scope); } else { debug!("omitting root, base=%s, base_scope=%?", base.repr(self.tcx()), base_scope); @@ -168,12 +168,14 @@ impl GuaranteeLifetimeContext { } fn check_root(&self, + cmt_deref: mc::cmt, cmt_base: mc::cmt, derefs: uint, ptr_mutbl: ast::mutability, discr_scope: Option) { - debug!("check_root(cmt_base=%s, derefs=%? ptr_mutbl=%?, \ + debug!("check_root(cmt_deref=%s, cmt_base=%s, derefs=%?, ptr_mutbl=%?, \ discr_scope=%?)", + cmt_deref.repr(self.tcx()), cmt_base.repr(self.tcx()), derefs, ptr_mutbl, @@ -234,7 +236,7 @@ impl GuaranteeLifetimeContext { }; // Add a record of what is required - let rm_key = root_map_key {id: cmt_base.id, derefs: derefs}; + let rm_key = root_map_key {id: cmt_deref.id, derefs: derefs}; let root_info = RootInfo {scope: root_scope, freeze: opt_dyna}; self.bccx.root_map.insert(rm_key, root_info); diff --git a/src/librustc/middle/borrowck/mod.rs b/src/librustc/middle/borrowck/mod.rs index 3f10223723727..a44f743c9ead0 100644 --- a/src/librustc/middle/borrowck/mod.rs +++ b/src/librustc/middle/borrowck/mod.rs @@ -172,11 +172,19 @@ pub struct BorrowStats { pub type LoanMap = @mut HashMap; -// the keys to the root map combine the `id` of the expression with -// the number of types that it is autodereferenced. So, for example, -// if you have an expression `x.f` and x has type ~@T, we could add an -// entry {id:x, derefs:0} to refer to `x` itself, `{id:x, derefs:1}` -// to refer to the deref of the unique pointer, and so on. +// The keys to the root map combine the `id` of the deref expression +// with the number of types that it is *autodereferenced*. So, for +// example, imagine I have a variable `x: @@@T` and an expression +// `(*x).f`. This will have 3 derefs, one explicit and then two +// autoderefs. These are the relevant `root_map_key` values that could +// appear: +// +// {id:*x, derefs:0} --> roots `x` (type: @@@T, due to explicit deref) +// {id:*x, derefs:1} --> roots `*x` (type: @@T, due to autoderef #1) +// {id:*x, derefs:2} --> roots `**x` (type: @T, due to autoderef #2) +// +// Note that there is no entry with derefs:3---the type of that expression +// is T, which is not a box. #[deriving(Eq, IterBytes)] pub struct root_map_key { id: ast::node_id, diff --git a/src/librustc/middle/mem_categorization.rs b/src/librustc/middle/mem_categorization.rs index 5921e4b0e4ca0..f1c337125d704 100644 --- a/src/librustc/middle/mem_categorization.rs +++ b/src/librustc/middle/mem_categorization.rs @@ -92,12 +92,12 @@ pub enum ptr_kind { pub enum interior_kind { interior_tuple, // elt in a tuple interior_anon_field, // anonymous field (in e.g. - // struct Foo(int, int); + // struct Foo(int, int); interior_variant(ast::def_id), // internals to a variant of given enum interior_field(ast::ident, // name of field - ast::mutability), // declared mutability of field + ast::mutability), // declared mutability of field interior_index(ty::t, // type of vec/str/etc being deref'd - ast::mutability) // mutability of vec content + ast::mutability) // mutability of vec content } #[deriving(Eq)] @@ -108,18 +108,27 @@ pub enum MutabilityCategory { McInherited // Inherited from the fact that owner is mutable. } +// `cmt`: "Category, Mutability, and Type". +// // a complete categorization of a value indicating where it originated // and how it is located, as well as the mutability of the memory in // which the value is stored. // -// note: cmt stands for "categorized mutable type". +// *WARNING* The field `cmt.type` is NOT necessarily the same as the +// result of `node_id_to_type(cmt.id)`. This is because the `id` is +// always the `id` of the node producing the type; in an expression +// like `*x`, the type of this deref node is the deref'd type (`T`), +// but in a pattern like `@x`, the `@x` pattern is again a +// dereference, but its type is the type *before* the dereference +// (`@T`). So use `cmt.type` to find the type of the value in a consistent +// fashion. For more details, see the method `cat_pattern` #[deriving(Eq)] pub struct cmt_ { id: ast::node_id, // id of expr/pat producing this value span: span, // span of same expr/pat cat: categorization, // categorization of expr mutbl: MutabilityCategory, // mutability of expr as lvalue - ty: ty::t // type of the expr + ty: ty::t // type of the expr (*see WARNING above*) } pub type cmt = @cmt_; @@ -245,19 +254,6 @@ pub fn cat_def( return mcx.cat_def(expr_id, expr_span, expr_ty, def); } -pub fn cat_variant( - tcx: ty::ctxt, - method_map: typeck::method_map, - arg: N, - enum_did: ast::def_id, - cmt: cmt) -> cmt { - - let mcx = &mem_categorization_ctxt { - tcx: tcx, method_map: method_map - }; - return mcx.cat_variant(arg, enum_did, cmt); -} - pub trait ast_node { fn id(&self) -> ast::node_id; fn span(&self) -> span; @@ -273,16 +269,6 @@ impl ast_node for @ast::pat { fn span(&self) -> span { self.span } } -pub trait get_type_for_node { - fn ty(&self, node: N) -> ty::t; -} - -impl get_type_for_node for ty::ctxt { - fn ty(&self, node: N) -> ty::t { - ty::node_id_to_type(*self, node.id()) - } -} - pub struct mem_categorization_ctxt { tcx: ty::ctxt, method_map: typeck::method_map, @@ -336,6 +322,14 @@ pub impl MutabilityCategory { } pub impl mem_categorization_ctxt { + fn expr_ty(&self, expr: @ast::expr) -> ty::t { + ty::expr_ty(self.tcx, expr) + } + + fn pat_ty(&self, pat: @ast::pat) -> ty::t { + ty::node_id_to_type(self.tcx, pat.id) + } + fn cat_expr(&self, expr: @ast::expr) -> cmt { match self.tcx.adjustments.find(&expr.id) { None => { @@ -385,7 +379,7 @@ pub impl mem_categorization_ctxt { expr.id, pprust::expr_to_str(expr, self.tcx.sess.intr())); let tcx = self.tcx; - let expr_ty = tcx.ty(expr); + let expr_ty = self.expr_ty(expr); match expr.node { ast::expr_unary(ast::deref, e_base) => { if self.method_map.contains_key(&expr.id) { @@ -402,7 +396,8 @@ pub impl mem_categorization_ctxt { assert!(!self.method_map.contains_key(&expr.id)); let base_cmt = self.cat_expr(base); - self.cat_field(expr, base_cmt, f_name, expr.id) + self.cat_field(expr, base_cmt, f_name, + self.expr_ty(expr), expr.id) } ast::expr_index(base, _) => { @@ -554,19 +549,6 @@ pub impl mem_categorization_ctxt { } } - fn cat_variant(&self, - arg: N, - enum_did: ast::def_id, - cmt: cmt) -> cmt { - @cmt_ { - id: arg.id(), - span: arg.span(), - cat: cat_interior(cmt, interior_variant(enum_did)), - mutbl: cmt.mutbl.inherit(), - ty: self.tcx.ty(arg) - } - } - fn cat_rvalue(&self, elt: N, expr_ty: ty::t) -> cmt { @cmt_ { id:elt.id(), @@ -598,6 +580,7 @@ pub impl mem_categorization_ctxt { node: N, base_cmt: cmt, f_name: ast::ident, + f_ty: ty::t, field_id: ast::node_id) -> cmt { let f_mutbl = match field_mutbl(self.tcx, base_cmt.ty, f_name, field_id) { @@ -617,7 +600,7 @@ pub impl mem_categorization_ctxt { span: node.span(), cat: cat_interior(base_cmt, f_interior), mutbl: m, - ty: self.tcx.ty(node) + ty: f_ty } } @@ -697,8 +680,8 @@ pub impl mem_categorization_ctxt { } fn cat_index(&self, - elt: N, - base_cmt: cmt) -> cmt { + elt: N, + base_cmt: cmt) -> cmt { let mt = match ty::index(base_cmt.ty) { Some(mt) => mt, None => { @@ -756,27 +739,17 @@ pub impl mem_categorization_ctxt { } } - fn cat_tuple_elt(&self, - elt: N, - cmt: cmt) -> cmt { - @cmt_ { - id: elt.id(), - span: elt.span(), - cat: cat_interior(cmt, interior_tuple), - mutbl: cmt.mutbl.inherit(), - ty: self.tcx.ty(elt) - } - } - - fn cat_anon_struct_field(&self, - elt: N, - cmt: cmt) -> cmt { + fn cat_imm_interior(&self, + node: N, + base_cmt: cmt, + interior_ty: ty::t, + interior: interior_kind) -> cmt { @cmt_ { - id: elt.id(), - span: elt.span(), - cat: cat_interior(cmt, interior_anon_field), - mutbl: cmt.mutbl.inherit(), - ty: self.tcx.ty(elt) + id: node.id(), + span: node.span(), + cat: cat_interior(base_cmt, interior), + mutbl: base_cmt.mutbl.inherit(), + ty: interior_ty } } @@ -797,27 +770,37 @@ pub impl mem_categorization_ctxt { // we can be sure that the binding will remain valid for the // duration of the arm. // - // The correspondence between the id in the cmt and which - // pattern is being referred to is somewhat...subtle. In - // general, the id of the cmt is the id of the node that - // produces the value. For patterns, that's actually the - // *subpattern*, generally speaking. + // (*) There is subtlety concerning the correspondence between + // pattern ids and types as compared to *expression* ids and + // types. This is explained briefly. on the definition of the + // type `cmt`, so go off and read what it says there, then + // come back and I'll dive into a bit more detail here. :) OK, + // back? // - // To see what I mean about ids etc, consider: + // In general, the id of the cmt should be the node that + // "produces" the value---patterns aren't executable code + // exactly, but I consider them to "execute" when they match a + // value. So if you have something like: // // let x = @@3; // match x { // @@y { ... } // } // - // Here the cmt for `y` would be something like + // In this case, the cmt and the relevant ids would be: + // + // CMT Id Type of Id Type of cmt // // local(x)->@->@ + // ^~~~~~~^ `x` from discr @@int @@int + // ^~~~~~~~~~^ `@@y` pattern node @@int @int + // ^~~~~~~~~~~~~^ `@y` pattern node @int int // - // where the id of `local(x)` is the id of the `x` that appears - // in the match, the id of `local(x)->@` is the `@y` pattern, - // and the id of `local(x)->@->@` is the id of the `y` pattern. - + // You can see that the types of the id and the cmt are in + // sync in the first line, because that id is actually the id + // of an expression. But once we get to pattern ids, the types + // step out of sync again. So you'll see below that we always + // get the type of the *subpattern* and use that. let tcx = self.tcx; debug!("cat_pattern: id=%d pat=%s cmt=%s", @@ -839,22 +822,27 @@ pub impl mem_categorization_ctxt { match self.tcx.def_map.find(&pat.id) { Some(&ast::def_variant(enum_did, _)) => { // variant(x, y, z) - for subpats.each |subpat| { - let subcmt = self.cat_variant(*subpat, enum_did, cmt); - self.cat_pattern(subcmt, *subpat, op); + for subpats.each |&subpat| { + let subpat_ty = self.pat_ty(subpat); // see (*) + let subcmt = + self.cat_imm_interior(pat, cmt, subpat_ty, + interior_variant(enum_did)); + self.cat_pattern(subcmt, subpat, op); } } Some(&ast::def_fn(*)) | Some(&ast::def_struct(*)) => { - for subpats.each |subpat| { - let cmt_field = self.cat_anon_struct_field(*subpat, - cmt); - self.cat_pattern(cmt_field, *subpat, op); + for subpats.each |&subpat| { + let subpat_ty = self.pat_ty(subpat); // see (*) + let cmt_field = + self.cat_imm_interior(pat, cmt, subpat_ty, + interior_anon_field); + self.cat_pattern(cmt_field, subpat, op); } } Some(&ast::def_const(*)) => { - for subpats.each |subpat| { - self.cat_pattern(cmt, *subpat, op); + for subpats.each |&subpat| { + self.cat_pattern(cmt, subpat, op); } } _ => { @@ -876,39 +864,43 @@ pub impl mem_categorization_ctxt { ast::pat_struct(_, ref field_pats, _) => { // {f1: p1, ..., fN: pN} for field_pats.each |fp| { - let cmt_field = self.cat_field(fp.pat, cmt, fp.ident, pat.id); + let field_ty = self.pat_ty(fp.pat); // see (*) + let cmt_field = self.cat_field(pat, cmt, fp.ident, + field_ty, pat.id); self.cat_pattern(cmt_field, fp.pat, op); } } ast::pat_tup(ref subpats) => { // (p1, ..., pN) - for subpats.each |subpat| { - let subcmt = self.cat_tuple_elt(*subpat, cmt); - self.cat_pattern(subcmt, *subpat, op); + for subpats.each |&subpat| { + let subpat_ty = self.pat_ty(subpat); // see (*) + let subcmt = self.cat_imm_interior(pat, cmt, subpat_ty, + interior_tuple); + self.cat_pattern(subcmt, subpat, op); } } ast::pat_box(subpat) | ast::pat_uniq(subpat) | ast::pat_region(subpat) => { // @p1, ~p1 - let subcmt = self.cat_deref(subpat, cmt, 0); + let subcmt = self.cat_deref(pat, cmt, 0); self.cat_pattern(subcmt, subpat, op); } ast::pat_vec(ref before, slice, ref after) => { - for before.each |pat| { - let elt_cmt = self.cat_index(*pat, cmt); - self.cat_pattern(elt_cmt, *pat, op); + for before.each |&before_pat| { + let elt_cmt = self.cat_index(pat, cmt); + self.cat_pattern(elt_cmt, before_pat, op); } - for slice.each |slice_pat| { - let slice_ty = self.tcx.ty(*slice_pat); - let slice_cmt = self.cat_rvalue(*slice_pat, slice_ty); - self.cat_pattern(slice_cmt, *slice_pat, op); + for slice.each |&slice_pat| { + let slice_ty = self.pat_ty(slice_pat); + let slice_cmt = self.cat_rvalue(pat, slice_ty); + self.cat_pattern(slice_cmt, slice_pat, op); } - for after.each |pat| { - let elt_cmt = self.cat_index(*pat, cmt); - self.cat_pattern(elt_cmt, *pat, op); + for after.each |&after_pat| { + let elt_cmt = self.cat_index(pat, cmt); + self.cat_pattern(elt_cmt, after_pat, op); } } @@ -1145,4 +1137,3 @@ impl Repr for interior_kind { } } } - diff --git a/src/librustc/middle/trans/_match.rs b/src/librustc/middle/trans/_match.rs index be39edd2d9b78..80e34ca481426 100644 --- a/src/librustc/middle/trans/_match.rs +++ b/src/librustc/middle/trans/_match.rs @@ -947,6 +947,17 @@ pub fn collect_record_or_struct_fields(bcx: block, } } +pub fn pats_require_rooting(bcx: block, + m: &[@Match], + col: uint) + -> bool { + vec::any(m, |br| { + let pat_id = br.pats[col].id; + let key = root_map_key {id: pat_id, derefs: 0u }; + bcx.ccx().maps.root_map.contains_key(&key) + }) +} + pub fn root_pats_as_necessary(bcx: block, m: &[@Match], col: uint, @@ -1303,7 +1314,10 @@ pub fn compile_submatch(bcx: block, if pat_id == 0 { pat_id = br.pats[col].id; } } - bcx = root_pats_as_necessary(bcx, m, col, val); + // If we are not matching against an `@T`, we should not be + // required to root any values. + assert!(any_box_pat(m, col) || !pats_require_rooting(bcx, m, col)); + let rec_fields = collect_record_or_struct_fields(bcx, m, col); if rec_fields.len() > 0 { let pat_ty = node_id_type(bcx, pat_id); @@ -1364,6 +1378,7 @@ pub fn compile_submatch(bcx: block, // Unbox in case of a box field if any_box_pat(m, col) { + bcx = root_pats_as_necessary(bcx, m, col, val); let llbox = Load(bcx, val); let box_no_addrspace = non_gc_box_cast(bcx, llbox); let unboxed = diff --git a/src/librustc/middle/trans/datum.rs b/src/librustc/middle/trans/datum.rs index af7165c53a7c2..095798ae21272 100644 --- a/src/librustc/middle/trans/datum.rs +++ b/src/librustc/middle/trans/datum.rs @@ -675,7 +675,7 @@ pub impl Datum { fn try_deref(&self, bcx: block, // block wherein to generate insn's span: span, // location where deref occurs - expr_id: ast::node_id, // id of expr being deref'd + expr_id: ast::node_id, // id of deref expr derefs: uint, // number of times deref'd already is_auto: bool) // if true, only deref if auto-derefable -> (Option, block) @@ -810,7 +810,7 @@ pub impl Datum { } fn deref(&self, bcx: block, - expr: @ast::expr, // the expression whose value is being deref'd + expr: @ast::expr, // the deref expression derefs: uint) -> DatumBlock { match self.try_deref(bcx, expr.span, expr.id, derefs, false) { diff --git a/src/librustc/middle/trans/expr.rs b/src/librustc/middle/trans/expr.rs index ff493c46a176a..1a9824dcfe8a1 100644 --- a/src/librustc/middle/trans/expr.rs +++ b/src/librustc/middle/trans/expr.rs @@ -835,7 +835,7 @@ fn trans_lvalue_unadjusted(bcx: block, expr: @ast::expr) -> DatumBlock { } ast::expr_unary(ast::deref, base) => { let basedatum = unpack_datum!(bcx, trans_to_datum(bcx, base)); - basedatum.deref(bcx, base, 0) + basedatum.deref(bcx, expr, 0) } _ => { bcx.tcx().sess.span_bug( From 4dd0fa68766e84499bd1680043b38a34a9fc7606 Mon Sep 17 00:00:00 2001 From: "Felix S. Klock II" Date: Fri, 3 May 2013 18:53:47 +0200 Subject: [PATCH 173/410] Make build products depend on their target directories. This is an attempt to address Issue #3326 by adding [*order-only*][1] prerequsites of each build product on the directory where it is to go. It is important that the prerequisites be order-only, since the timestamp on a parent directory is not relevant to whether a product is out of date; the parent directory merely needs to exist. (This use case of generating target directories was provided as an [example][2] of how order-only prequisites are used.) [1]: http://www.gnu.org/software/make/manual/html_node/Prerequisite-Types.html [2]: http://www.kolpackov.net/pipermail/notes/2004-January/000001.html --- mk/host.mk | 35 +++++++++++++++++++++++++---------- mk/target.mk | 29 ++++++++++++++++++++--------- 2 files changed, 45 insertions(+), 19 deletions(-) diff --git a/mk/host.mk b/mk/host.mk index 13a8a5401172a..54e7e7ca09609 100644 --- a/mk/host.mk +++ b/mk/host.mk @@ -29,7 +29,9 @@ $$(HBIN$(2)_H_$(4))/rustc$$(X_$(4)): \ $$(HLIB$(2)_H_$(4))/$(CFG_RUSTLLVM_$(4)) \ $$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTC_$(4)) \ $$(HCORELIB_DEFAULT$(2)_H_$(4)) \ - $$(HSTDLIB_DEFAULT$(2)_H_$(4)) + $$(HSTDLIB_DEFAULT$(2)_H_$(4)) \ + | $$(HBIN$(2)_H_$(4))/ + @$$(call E, cp: $$@) $$(Q)cp $$< $$@ @@ -39,7 +41,9 @@ $$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTC_$(4)): \ $$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4)) \ $$(HLIB$(2)_H_$(4))/$(CFG_RUSTLLVM_$(4)) \ $$(HCORELIB_DEFAULT$(2)_H_$(4)) \ - $$(HSTDLIB_DEFAULT$(2)_H_$(4)) + $$(HSTDLIB_DEFAULT$(2)_H_$(4)) \ + | $$(HBIN$(2)_H_$(4))/ + @$$(call E, cp: $$@) $$(Q)cp $$< $$@ $$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTC_GLOB_$(4)) \ @@ -51,7 +55,8 @@ $$(HLIB$(2)_H_$(4))/$(CFG_LIBSYNTAX_$(4)): \ $$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4)) \ $$(HLIB$(2)_H_$(4))/$(CFG_RUSTLLVM_$(4)) \ $$(HCORELIB_DEFAULT$(2)_H_$(4)) \ - $$(HSTDLIB_DEFAULT$(2)_H_$(4)) + $$(HSTDLIB_DEFAULT$(2)_H_$(4)) \ + | $$(HBIN$(2)_H_$(4))/ @$$(call E, cp: $$@) $$(Q)cp $$< $$@ $$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBSYNTAX_GLOB_$(4)) \ @@ -59,13 +64,15 @@ $$(HLIB$(2)_H_$(4))/$(CFG_LIBSYNTAX_$(4)): \ $$(HLIB$(2)_H_$(4)) $$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4)): \ - $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_RUNTIME_$(4)) + $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_RUNTIME_$(4)) \ + | $$(HBIN$(2)_H_$(4))/ @$$(call E, cp: $$@) $$(Q)cp $$< $$@ $$(HLIB$(2)_H_$(4))/$(CFG_CORELIB_$(4)): \ $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_CORELIB_$(4)) \ - $$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4)) + $$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4)) \ + | $$(HBIN$(2)_H_$(4))/ @$$(call E, cp: $$@) $$(Q)cp $$< $$@ # Subtle: We do not let the shell expand $(CORELIB_DSYM_GLOB) directly rather @@ -82,7 +89,8 @@ $$(HLIB$(2)_H_$(4))/$(CFG_CORELIB_$(4)): \ $$(HLIB$(2)_H_$(4))/$(CFG_STDLIB_$(4)): \ $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_STDLIB_$(4)) \ $$(HLIB$(2)_H_$(4))/$(CFG_CORELIB_$(4)) \ - $$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4)) + $$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4)) \ + | $$(HBIN$(2)_H_$(4))/ @$$(call E, cp: $$@) $$(Q)cp $$< $$@ $$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(STDLIB_GLOB_$(4)) \ @@ -91,14 +99,16 @@ $$(HLIB$(2)_H_$(4))/$(CFG_STDLIB_$(4)): \ $$(HLIB$(2)_H_$(4))/libcore.rlib: \ $$(TLIB$(1)_T_$(4)_H_$(3))/libcore.rlib \ - $$(HLIB$(2)_H_$(4))/$$(CFG_RUNTIME_$(4)) + $$(HLIB$(2)_H_$(4))/$$(CFG_RUNTIME_$(4)) \ + | $$(HBIN$(2)_H_$(4))/ @$$(call E, cp: $$@) $$(Q)cp $$< $$@ $$(HLIB$(2)_H_$(4))/libstd.rlib: \ $$(TLIB$(1)_T_$(4)_H_$(3))/libstd.rlib \ $$(HLIB$(2)_H_$(4))/libcore.rlib \ - $$(HLIB$(2)_H_$(4))/$$(CFG_RUNTIME_$(4)) + $$(HLIB$(2)_H_$(4))/$$(CFG_RUNTIME_$(4)) \ + | $$(HBIN$(2)_H_$(4))/ @$$(call E, cp: $$@) $$(Q)cp $$< $$@ @@ -106,15 +116,20 @@ $$(HLIB$(2)_H_$(4))/librustc.rlib: \ $$(TLIB$(1)_T_$(4)_H_$(3))/librustc.rlib \ $$(HLIB$(2)_H_$(4))/libcore.rlib \ $$(HLIB$(2)_H_$(4))/libstd.rlib \ - $$(HLIB$(2)_H_$(4))/$$(CFG_RUNTIME_$(4)) + $$(HLIB$(2)_H_$(4))/$$(CFG_RUNTIME_$(4)) \ + | $$(HBIN$(2)_H_$(4))/ @$$(call E, cp: $$@) $$(Q)cp $$< $$@ $$(HLIB$(2)_H_$(4))/$(CFG_RUSTLLVM_$(4)): \ - $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_RUSTLLVM_$(4)) + $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_RUSTLLVM_$(4)) \ + | $$(HBIN$(2)_H_$(4))/ @$$(call E, cp: $$@) $$(Q)cp $$< $$@ +$$(HBIN$(2)_H_$(4))/: + mkdir -p $@ + endef $(foreach t,$(CFG_HOST_TRIPLES), \ diff --git a/mk/target.mk b/mk/target.mk index fba1a6e0ee591..a3e5a5caff107 100644 --- a/mk/target.mk +++ b/mk/target.mk @@ -18,25 +18,29 @@ define TARGET_STAGE_N $$(TLIB$(1)_T_$(2)_H_$(3))/libmorestack.a: \ - rt/$(2)/arch/$$(HOST_$(2))/libmorestack.a + rt/$(2)/arch/$$(HOST_$(2))/libmorestack.a \ + | $$(TLIB$(1)_T_$(2)_H_$(3))/ @$$(call E, cp: $$@) $$(Q)cp $$< $$@ $$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_RUNTIME_$(2)): \ - rt/$(2)/$(CFG_RUNTIME_$(2)) + rt/$(2)/$(CFG_RUNTIME_$(2)) \ + | $$(TLIB$(1)_T_$(2)_H_$(3))/ @$$(call E, cp: $$@) $$(Q)cp $$< $$@ $$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_CORELIB_$(2)): \ $$(CORELIB_CRATE) $$(CORELIB_INPUTS) \ - $$(TSREQ$(1)_T_$(2)_H_$(3)) + $$(TSREQ$(1)_T_$(2)_H_$(3)) \ + | $$(TLIB$(1)_T_$(2)_H_$(3))/ @$$(call E, compile_and_link: $$@) $$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< && touch $$@ $$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_STDLIB_$(2)): \ $$(STDLIB_CRATE) $$(STDLIB_INPUTS) \ $$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_CORELIB_$(2)) \ - $$(TSREQ$(1)_T_$(2)_H_$(3)) + $$(TSREQ$(1)_T_$(2)_H_$(3)) \ + | $$(TLIB$(1)_T_$(2)_H_$(3))/ @$$(call E, compile_and_link: $$@) $$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< && touch $$@ @@ -44,7 +48,8 @@ $$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_LIBSYNTAX_$(3)): \ $$(LIBSYNTAX_CRATE) $$(LIBSYNTAX_INPUTS) \ $$(TSREQ$(1)_T_$(2)_H_$(3)) \ $$(TCORELIB_DEFAULT$(1)_T_$(2)_H_$(3)) \ - $$(TSTDLIB_DEFAULT$(1)_T_$(2)_H_$(3)) + $$(TSTDLIB_DEFAULT$(1)_T_$(2)_H_$(3)) \ + | $$(TLIB$(1)_T_$(2)_H_$(3))/ @$$(call E, compile_and_link: $$@) $$(STAGE$(1)_T_$(2)_H_$(3)) $(BORROWCK) -o $$@ $$< && touch $$@ @@ -52,20 +57,23 @@ $$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_LIBSYNTAX_$(3)): \ ifneq ($$(findstring $(2),$$(CFG_HOST_TRIPLES)),) $$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_RUSTLLVM_$(3)): \ - rustllvm/$(2)/$(CFG_RUSTLLVM_$(3)) + rustllvm/$(2)/$(CFG_RUSTLLVM_$(3)) \ + | $$(TLIB$(1)_T_$(2)_H_$(3))/ @$$(call E, cp: $$@) $$(Q)cp $$< $$@ $$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_LIBRUSTC_$(3)): \ $$(COMPILER_CRATE) $$(COMPILER_INPUTS) \ $$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_LIBSYNTAX_$(3)) \ - $$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_RUSTLLVM_$(3)) + $$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_RUSTLLVM_$(3)) \ + | $$(TLIB$(1)_T_$(2)_H_$(3))/ @$$(call E, compile_and_link: $$@) $$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< && touch $$@ $$(TBIN$(1)_T_$(2)_H_$(3))/rustc$$(X_$(3)): \ - $$(DRIVER_CRATE) \ - $$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_LIBRUSTC_$(3)) + $$(DRIVER_CRATE) \ + $$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_LIBRUSTC_$(3)) \ + | $$(TLIB$(1)_T_$(2)_H_$(3))/ @$$(call E, compile_and_link: $$@) $$(STAGE$(1)_T_$(2)_H_$(3)) --cfg rustc -o $$@ $$< ifdef CFG_ENABLE_PAX_FLAGS @@ -75,6 +83,9 @@ endif endif +$$(TLIB$(1)_T_$(2)_H_$(3))/: + mkdir -p $@ + endef # In principle, each host can build each target: From f3a6ea26437e240b02d749331b3a2d60aab0588b Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Fri, 3 May 2013 15:12:04 -0400 Subject: [PATCH 174/410] lang: um, actually set locking bits! this code got lost. --- src/libcore/unstable/lang.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/libcore/unstable/lang.rs b/src/libcore/unstable/lang.rs index 27fc3287bdb39..01ab2345918b1 100644 --- a/src/libcore/unstable/lang.rs +++ b/src/libcore/unstable/lang.rs @@ -235,6 +235,8 @@ pub unsafe fn borrow_as_imm(a: *u8, file: *c_char, line: size_t) -> uint { fail_borrowed(a, file, line); } + (*a).header.ref_count = ref_count | FROZEN_BIT; + ref_count } @@ -251,6 +253,9 @@ pub unsafe fn borrow_as_mut(a: *u8, file: *c_char, line: size_t) -> uint { if (ref_count & (MUT_BIT|FROZEN_BIT)) != 0 { fail_borrowed(a, file, line); } + + (*a).header.ref_count = ref_count | MUT_BIT | FROZEN_BIT; + ref_count } @@ -349,7 +354,12 @@ pub unsafe fn check_not_borrowed(a: *u8, file: *c_char, line: size_t) { let a: *mut BoxRepr = transmute(a); - if ((*a).header.ref_count & FROZEN_BIT) != 0 { + let ref_count = (*a).header.ref_count; + debug_ptr("check_not_borrowed (ptr) : ", a); + debug_ptr(" (line): ", line as *()); + debug_ptr(" (rc) : ", ref_count as *()); + + if (ref_count & FROZEN_BIT) != 0 { fail_borrowed(a, file, line); } } From 832f7b758f28d36030df27c888ef9248ba584859 Mon Sep 17 00:00:00 2001 From: Luqman Aden Date: Thu, 2 May 2013 14:12:47 -0700 Subject: [PATCH 175/410] librustc: Add argument to allow choosing "linker" --- src/librustc/back/link.rs | 28 ++++++++++++++++++---------- src/librustc/driver/driver.rs | 4 +++- src/librustc/driver/session.rs | 4 +++- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/src/librustc/back/link.rs b/src/librustc/back/link.rs index 87e08a73fcb1c..de6469e81807d 100644 --- a/src/librustc/back/link.rs +++ b/src/librustc/back/link.rs @@ -752,18 +752,26 @@ pub fn link_binary(sess: Session, // instead of hard-coded gcc. // For win32, there is no cc command, // so we add a condition to make it use gcc. - let cc_prog: ~str = if sess.targ_cfg.os == session::os_android { - match &sess.opts.android_cross_path { - &Some(copy path) => { - fmt!("%s/bin/arm-linux-androideabi-gcc", path) - } - &None => { - sess.fatal(~"need Android NDK path for linking \ - (--android-cross-path)") + let cc_prog: ~str = match sess.opts.linker { + Some(copy linker) => linker, + None => { + if sess.targ_cfg.os == session::os_android { + match &sess.opts.android_cross_path { + &Some(copy path) => { + fmt!("%s/bin/arm-linux-androideabi-gcc", path) + } + &None => { + sess.fatal(~"need Android NDK path for linking \ + (--android-cross-path)") + } + } + } else if sess.targ_cfg.os == session::os_win32 { + ~"gcc" + } else { + ~"cc" } } - } else if sess.targ_cfg.os == session::os_win32 { ~"gcc" } - else { ~"cc" }; + }; // The invocations of cc share some flags across platforms diff --git a/src/librustc/driver/driver.rs b/src/librustc/driver/driver.rs index 5e5d0640d808e..02940ea9905ba 100644 --- a/src/librustc/driver/driver.rs +++ b/src/librustc/driver/driver.rs @@ -650,7 +650,7 @@ pub fn build_session_options(binary: @~str, }; let addl_lib_search_paths = getopts::opt_strs(matches, ~"L").map(|s| Path(*s)); - + let linker = getopts::opt_maybe_str(matches, ~"linker"); let linker_args = getopts::opt_strs(matches, ~"link-args").flat_map( |a| { let mut args = ~[]; for str::each_split_char(*a, ' ') |arg| { @@ -676,6 +676,7 @@ pub fn build_session_options(binary: @~str, jit: jit, output_type: output_type, addl_lib_search_paths: addl_lib_search_paths, + linker: linker, linker_args: linker_args, maybe_sysroot: sysroot_opt, target_triple: target, @@ -760,6 +761,7 @@ pub fn optgroups() -> ~[getopts::groups::OptGroup] { optmulti("L", "", "Add a directory to the library search path", "PATH"), optflag("", "lib", "Compile a library crate"), + optopt("", "linker", "Program to use for linking instead of the default.", "LINKER"), optmulti("", "link-args", "FLAGS is a space-separated list of flags passed to the linker", "FLAGS"), optflag("", "ls", "List the symbols defined by a library crate"), diff --git a/src/librustc/driver/session.rs b/src/librustc/driver/session.rs index 237b03bc20fb3..29cb5a71f3165 100644 --- a/src/librustc/driver/session.rs +++ b/src/librustc/driver/session.rs @@ -124,6 +124,7 @@ pub struct options { jit: bool, output_type: back::link::output_type, addl_lib_search_paths: ~[Path], + linker: Option<~str>, linker_args: ~[~str], maybe_sysroot: Option, target_triple: ~str, @@ -302,7 +303,8 @@ pub fn basic_options() -> @options { jit: false, output_type: link::output_type_exe, addl_lib_search_paths: ~[], - linker_args:~[], + linker: None, + linker_args: ~[], maybe_sysroot: None, target_triple: host_triple(), target_feature: ~"", From 13df2ea69c332d7a20c7ab394020430a09dad507 Mon Sep 17 00:00:00 2001 From: Tim Chevalier Date: Thu, 2 May 2013 15:38:19 -0700 Subject: [PATCH 176/410] rustc: Handle struct patterns where the expected type is an enum Previously, rustc would ICE if you matched on an enum-typed thing with a structure pattern. Error out correctly. --- src/librustc/middle/typeck/check/_match.rs | 78 +++++++++++++--------- src/libsyntax/ast_util.rs | 6 +- src/test/compile-fail/issue-5358-1.rs | 18 +++++ src/test/compile-fail/issue-5358.rs | 17 +++++ 4 files changed, 85 insertions(+), 34 deletions(-) create mode 100644 src/test/compile-fail/issue-5358-1.rs create mode 100644 src/test/compile-fail/issue-5358.rs diff --git a/src/librustc/middle/typeck/check/_match.rs b/src/librustc/middle/typeck/check/_match.rs index de384d02dc3bc..3937e54853efa 100644 --- a/src/librustc/middle/typeck/check/_match.rs +++ b/src/librustc/middle/typeck/check/_match.rs @@ -114,37 +114,53 @@ pub fn check_pat_variant(pcx: &pat_ctxt, pat: @ast::pat, path: @ast::Path, ty::ty_enum(_, ref expected_substs) => { // Lookup the enum and variant def ids: let v_def = lookup_def(pcx.fcx, pat.span, pat.id); - let (enm, var) = ast_util::variant_def_ids(v_def); - - // Assign the pattern the type of the *enum*, not the variant. - let enum_tpt = ty::lookup_item_type(tcx, enm); - instantiate_path(pcx.fcx, path, enum_tpt, pat.span, pat.id, - pcx.block_region); - - // check that the type of the value being matched is a subtype - // of the type of the pattern: - let pat_ty = fcx.node_ty(pat.id); - demand::subtype(fcx, pat.span, expected, pat_ty); - - // Get the expected types of the arguments. - arg_types = { - let vinfo = - ty::enum_variant_with_id(tcx, enm, var); - let var_tpt = ty::lookup_item_type(tcx, var); - vinfo.args.map(|t| { - if var_tpt.generics.type_param_defs.len() == - expected_substs.tps.len() - { - ty::subst(tcx, expected_substs, *t) - } - else { - *t // In this case, an error was already signaled - // anyway - } - }) - }; - - kind_name = "variant"; + match ast_util::variant_def_ids(v_def) { + Some((enm, var)) => { + // Assign the pattern the type of the *enum*, not the variant. + let enum_tpt = ty::lookup_item_type(tcx, enm); + instantiate_path(pcx.fcx, path, enum_tpt, pat.span, pat.id, + pcx.block_region); + + // check that the type of the value being matched is a subtype + // of the type of the pattern: + let pat_ty = fcx.node_ty(pat.id); + demand::subtype(fcx, pat.span, expected, pat_ty); + + // Get the expected types of the arguments. + arg_types = { + let vinfo = + ty::enum_variant_with_id(tcx, enm, var); + let var_tpt = ty::lookup_item_type(tcx, var); + vinfo.args.map(|t| { + if var_tpt.generics.type_param_defs.len() == + expected_substs.tps.len() + { + ty::subst(tcx, expected_substs, *t) + } + else { + *t // In this case, an error was already signaled + // anyway + } + }) + }; + + kind_name = "variant"; + } + None => { + let resolved_expected = + fcx.infcx().ty_to_str(fcx.infcx().resolve_type_vars_if_possible(expected)); + fcx.infcx().type_error_message_str(pat.span, + |actual| { + fmt!("mismatched types: expected `%s` but found %s", + resolved_expected, actual)}, + ~"a structure pattern", + None); + fcx.write_error(pat.id); + kind_name = "[error]"; + arg_types = (copy subpats).get_or_default(~[]).map(|_| + ty::mk_err()); + } + } } ty::ty_struct(struct_def_id, ref expected_substs) => { // Lookup the struct ctor def id diff --git a/src/libsyntax/ast_util.rs b/src/libsyntax/ast_util.rs index 47ef7227842e2..10350413f2d68 100644 --- a/src/libsyntax/ast_util.rs +++ b/src/libsyntax/ast_util.rs @@ -41,12 +41,12 @@ pub fn stmt_id(s: &stmt) -> node_id { } } -pub fn variant_def_ids(d: def) -> (def_id, def_id) { +pub fn variant_def_ids(d: def) -> Option<(def_id, def_id)> { match d { def_variant(enum_id, var_id) => { - return (enum_id, var_id); + Some((enum_id, var_id)) } - _ => fail!(~"non-variant in variant_def_ids") + _ => None } } diff --git a/src/test/compile-fail/issue-5358-1.rs b/src/test/compile-fail/issue-5358-1.rs new file mode 100644 index 0000000000000..0b6e2fb0ff5f2 --- /dev/null +++ b/src/test/compile-fail/issue-5358-1.rs @@ -0,0 +1,18 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +struct S(Either); + +fn main() { + match S(Left(5)) { + Right(_) => {} //~ ERROR mismatched types: expected `S` but found `core::either::Either + _ => {} + } +} diff --git a/src/test/compile-fail/issue-5358.rs b/src/test/compile-fail/issue-5358.rs new file mode 100644 index 0000000000000..7d11a127f9ae8 --- /dev/null +++ b/src/test/compile-fail/issue-5358.rs @@ -0,0 +1,17 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +struct S(Either); + +fn main() { + match *S(Left(5)) { + S(_) => {} //~ ERROR mismatched types: expected `core::either::Either` but found a structure pattern + } +} From 32b3d3e9ebd8dbc1073445b3be9676da85b6410c Mon Sep 17 00:00:00 2001 From: Tim Chevalier Date: Fri, 3 May 2013 13:03:01 -0700 Subject: [PATCH 177/410] tidy --- src/librustc/middle/typeck/check/_match.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/librustc/middle/typeck/check/_match.rs b/src/librustc/middle/typeck/check/_match.rs index 3937e54853efa..a139a26a597fc 100644 --- a/src/librustc/middle/typeck/check/_match.rs +++ b/src/librustc/middle/typeck/check/_match.rs @@ -120,12 +120,12 @@ pub fn check_pat_variant(pcx: &pat_ctxt, pat: @ast::pat, path: @ast::Path, let enum_tpt = ty::lookup_item_type(tcx, enm); instantiate_path(pcx.fcx, path, enum_tpt, pat.span, pat.id, pcx.block_region); - + // check that the type of the value being matched is a subtype // of the type of the pattern: let pat_ty = fcx.node_ty(pat.id); demand::subtype(fcx, pat.span, expected, pat_ty); - + // Get the expected types of the arguments. arg_types = { let vinfo = @@ -143,7 +143,7 @@ pub fn check_pat_variant(pcx: &pat_ctxt, pat: @ast::pat, path: @ast::Path, } }) }; - + kind_name = "variant"; } None => { @@ -151,10 +151,10 @@ pub fn check_pat_variant(pcx: &pat_ctxt, pat: @ast::pat, path: @ast::Path, fcx.infcx().ty_to_str(fcx.infcx().resolve_type_vars_if_possible(expected)); fcx.infcx().type_error_message_str(pat.span, |actual| { - fmt!("mismatched types: expected `%s` but found %s", - resolved_expected, actual)}, - ~"a structure pattern", - None); + fmt!("mismatched types: expected `%s` but found %s", + resolved_expected, actual)}, + ~"a structure pattern", + None); fcx.write_error(pat.id); kind_name = "[error]"; arg_types = (copy subpats).get_or_default(~[]).map(|_| From c15fa3a02aa3e7e5111f0410abf7321387a7a97f Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Mon, 29 Apr 2013 15:11:16 -0400 Subject: [PATCH 178/410] Be more careful about the order in which we read the next field during task annihilation, since it is easy to tread on freed memory. --- src/libcore/cleanup.rs | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/src/libcore/cleanup.rs b/src/libcore/cleanup.rs index a07c6b4811b6c..aca49c9464477 100644 --- a/src/libcore/cleanup.rs +++ b/src/libcore/cleanup.rs @@ -126,14 +126,17 @@ struct AnnihilateStats { n_bytes_freed: uint } -unsafe fn each_live_alloc(f: &fn(box: *mut BoxRepr, uniq: bool) -> bool) { +unsafe fn each_live_alloc(read_next_before: bool, + f: &fn(box: *mut BoxRepr, uniq: bool) -> bool) { + //! Walks the internal list of allocations + use managed; let task: *Task = transmute(rustrt::rust_get_task()); let box = (*task).boxed_region.live_allocs; let mut box: *mut BoxRepr = transmute(copy box); while box != mut_null() { - let next = transmute(copy (*box).header.next); + let next_before = transmute(copy (*box).header.next); let uniq = (*box).header.ref_count == managed::raw::RC_MANAGED_UNIQUE; @@ -141,7 +144,11 @@ unsafe fn each_live_alloc(f: &fn(box: *mut BoxRepr, uniq: bool) -> bool) { break } - box = next + if read_next_before { + box = next_before; + } else { + box = transmute(copy (*box).header.next); + } } } @@ -173,7 +180,10 @@ pub unsafe fn annihilate() { }; // Pass 1: Make all boxes immortal. - for each_live_alloc |box, uniq| { + // + // In this pass, nothing gets freed, so it does not matter whether + // we read the next field before or after the callback. + for each_live_alloc(true) |box, uniq| { stats.n_total_boxes += 1; if uniq { stats.n_unique_boxes += 1; @@ -183,7 +193,11 @@ pub unsafe fn annihilate() { } // Pass 2: Drop all boxes. - for each_live_alloc |box, uniq| { + // + // In this pass, unique-managed boxes may get freed, but not + // managed boxes, so we must read the `next` field *after* the + // callback, as the original value may have been freed. + for each_live_alloc(false) |box, uniq| { if !uniq { let tydesc: *TypeDesc = transmute(copy (*box).header.type_desc); let drop_glue: DropGlue = transmute(((*tydesc).drop_glue, 0)); @@ -192,7 +206,12 @@ pub unsafe fn annihilate() { } // Pass 3: Free all boxes. - for each_live_alloc |box, uniq| { + // + // In this pass, managed boxes may get freed (but not + // unique-managed boxes, though I think that none of those are + // left), so we must read the `next` field before, since it will + // not be valid after. + for each_live_alloc(true) |box, uniq| { if !uniq { stats.n_bytes_freed += (*((*box).header.type_desc)).size From be08c3e5146953619ff777aaa422152dfee4ad28 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Fri, 3 May 2013 16:26:43 -0400 Subject: [PATCH 179/410] rustc: add rooting, write-guards to slices etc --- src/librustc/middle/trans/_match.rs | 25 +++++-- src/librustc/middle/trans/controlflow.rs | 2 +- src/librustc/middle/trans/datum.rs | 70 ++++++++++++++----- src/librustc/middle/trans/expr.rs | 19 +++-- src/test/run-fail/borrowck-wg-fail-2.rs | 3 + src/test/run-fail/borrowck-wg-fail-3.rs | 3 + src/test/run-fail/borrowck-wg-fail.rs | 3 + ...orrowck-wg-one-mut-one-imm-slice-method.rs | 37 ++++++++++ .../borrowck-wg-one-mut-one-imm-slices.rs | 16 +++++ .../run-fail/borrowck-wg-one-mut-one-imm.rs | 17 +++++ .../run-fail/borrowck-wg-two-array-indices.rs | 17 +++++ .../run-pass/borrowck-wg-two-imm-borrows.rs | 14 ++++ 12 files changed, 194 insertions(+), 32 deletions(-) create mode 100644 src/test/run-fail/borrowck-wg-one-mut-one-imm-slice-method.rs create mode 100644 src/test/run-fail/borrowck-wg-one-mut-one-imm-slices.rs create mode 100644 src/test/run-fail/borrowck-wg-one-mut-one-imm.rs create mode 100644 src/test/run-fail/borrowck-wg-two-array-indices.rs create mode 100644 src/test/run-pass/borrowck-wg-two-imm-borrows.rs diff --git a/src/librustc/middle/trans/_match.rs b/src/librustc/middle/trans/_match.rs index 80e34ca481426..3b1cdf0ba47f7 100644 --- a/src/librustc/middle/trans/_match.rs +++ b/src/librustc/middle/trans/_match.rs @@ -866,7 +866,18 @@ pub fn extract_variant_args(bcx: block, ExtractedBlock { vals: args, bcx: bcx } } +fn match_datum(bcx: block, val: ValueRef, pat_id: ast::node_id) -> Datum { + //! Helper for converting from the ValueRef that we pass around in + //! the match code, which is always by ref, into a Datum. Eventually + //! we should just pass around a Datum and be done with it. + + let ty = node_id_type(bcx, pat_id); + Datum {val: val, ty: ty, mode: datum::ByRef, source: RevokeClean} +} + + pub fn extract_vec_elems(bcx: block, + pat_span: span, pat_id: ast::node_id, elem_count: uint, slice: Option, @@ -874,9 +885,9 @@ pub fn extract_vec_elems(bcx: block, count: ValueRef) -> ExtractedBlock { let _icx = bcx.insn_ctxt("match::extract_vec_elems"); + let vec_datum = match_datum(bcx, val, pat_id); + let (bcx, base, len) = vec_datum.get_vec_base_and_len(bcx, pat_span, pat_id); let vt = tvec::vec_types(bcx, node_id_type(bcx, pat_id)); - let unboxed = load_if_immediate(bcx, val, vt.vec_ty); - let (base, len) = tvec::get_base_and_len(bcx, unboxed, vt.vec_ty); let mut elems = do vec::from_fn(elem_count) |i| { match slice { @@ -1308,10 +1319,14 @@ pub fn compile_submatch(bcx: block, vec::slice(vals, col + 1u, vals.len())); let ccx = *bcx.fcx.ccx; let mut pat_id = 0; + let mut pat_span = dummy_sp(); for vec::each(m) |br| { // Find a real id (we're adding placeholder wildcard patterns, but // each column is guaranteed to have at least one real pattern) - if pat_id == 0 { pat_id = br.pats[col].id; } + if pat_id == 0 { + pat_id = br.pats[col].id; + pat_span = br.pats[col].span; + } } // If we are not matching against an `@T`, we should not be @@ -1579,8 +1594,8 @@ pub fn compile_submatch(bcx: block, vec_len_ge(_, i) => Some(i), _ => None }; - let args = extract_vec_elems(opt_cx, pat_id, n, slice, - val, test_val); + let args = extract_vec_elems(opt_cx, pat_span, pat_id, n, slice, + val, test_val); size = args.vals.len(); unpacked = /*bad*/copy args.vals; opt_cx = args.bcx; diff --git a/src/librustc/middle/trans/controlflow.rs b/src/librustc/middle/trans/controlflow.rs index 60b6cf9e23f79..c8699cc6371bc 100644 --- a/src/librustc/middle/trans/controlflow.rs +++ b/src/librustc/middle/trans/controlflow.rs @@ -333,7 +333,7 @@ pub fn trans_fail_expr(bcx: block, bcx, expr::trans_to_datum(bcx, arg_expr)); if ty::type_is_str(arg_datum.ty) { - let (lldata, _lllen) = arg_datum.get_base_and_len(bcx); + let (lldata, _) = arg_datum.get_vec_base_and_len_no_root(bcx); return trans_fail_value(bcx, sp_opt, lldata); } else if bcx.unreachable || ty::type_is_bot(arg_datum.ty) { return bcx; diff --git a/src/librustc/middle/trans/datum.rs b/src/librustc/middle/trans/datum.rs index 095798ae21272..6ffe504b804fb 100644 --- a/src/librustc/middle/trans/datum.rs +++ b/src/librustc/middle/trans/datum.rs @@ -603,6 +603,8 @@ pub impl Datum { } fn perform_write_guard(&self, bcx: block, span: span) -> block { + debug!("perform_write_guard"); + // Create scratch space, but do not root it. let llval = match self.mode { ByValue => self.val, @@ -682,25 +684,10 @@ pub impl Datum { { let ccx = bcx.ccx(); - debug!("try_deref(expr_id=%d, derefs=%?, is_auto=%b, self=%?)", + debug!("try_deref(expr_id=%?, derefs=%?, is_auto=%b, self=%?)", expr_id, derefs, is_auto, self.to_str(bcx.ccx())); - let _indenter = indenter(); - - // root the autoderef'd value, if necessary: - // - // (Note: root'd values are always boxes) - let key = root_map_key { id: expr_id, derefs: derefs }; - let bcx = match ccx.maps.root_map.find(&key) { - None => bcx, - Some(&root_info) => self.root(bcx, span, key, root_info) - }; - // Perform the write guard, if necessary. - // - // (Note: write-guarded values are always boxes) - let bcx = if ccx.maps.write_guard_map.contains(&key) { - self.perform_write_guard(bcx, span) - } else { bcx }; + let bcx = self.root_and_write_guard(bcx, span, expr_id, derefs); match ty::get(self.ty).sty { ty::ty_box(_) | ty::ty_uniq(_) => { @@ -854,8 +841,53 @@ pub impl Datum { DatumBlock { bcx: bcx, datum: datum } } - fn get_base_and_len(&self, bcx: block) -> (ValueRef, ValueRef) { - tvec::get_base_and_len(bcx, self.to_appropriate_llval(bcx), self.ty) + fn root_and_write_guard(&self, + mut bcx: block, + span: span, + expr_id: ast::node_id, + derefs: uint) -> block { + let key = root_map_key { id: expr_id, derefs: derefs }; + debug!("root_and_write_guard(key=%?)", key); + + // root the autoderef'd value, if necessary: + // + // (Note: root'd values are always boxes) + let ccx = bcx.ccx(); + bcx = match ccx.maps.root_map.find(&key) { + None => bcx, + Some(&root_info) => self.root(bcx, span, key, root_info) + }; + + // Perform the write guard, if necessary. + // + // (Note: write-guarded values are always boxes) + if ccx.maps.write_guard_map.contains(&key) { + self.perform_write_guard(bcx, span) + } else { + bcx + } + } + + fn get_vec_base_and_len(&self, + mut bcx: block, + span: span, + expr_id: ast::node_id) + -> (block, ValueRef, ValueRef) { + //! Converts a vector into the slice pair. Performs rooting + //! and write guards checks. + + // only imp't for @[] and @str, but harmless + bcx = self.root_and_write_guard(bcx, span, expr_id, 0); + let (base, len) = self.get_vec_base_and_len_no_root(bcx); + (bcx, base, len) + } + + fn get_vec_base_and_len_no_root(&self, bcx: block) -> (ValueRef, ValueRef) { + //! Converts a vector into the slice pair. Des not root + //! nor perform write guard checks. + + let llval = self.to_appropriate_llval(bcx); + tvec::get_base_and_len(bcx, llval, self.ty) } fn to_result(&self, bcx: block) -> common::Result { diff --git a/src/librustc/middle/trans/expr.rs b/src/librustc/middle/trans/expr.rs index 1a9824dcfe8a1..b8cdfeb796db0 100644 --- a/src/librustc/middle/trans/expr.rs +++ b/src/librustc/middle/trans/expr.rs @@ -218,10 +218,10 @@ pub fn trans_to_datum(bcx: block, expr: @ast::expr) -> DatumBlock { unpack_datum!(bcx, auto_ref(bcx, datum)) } Some(AutoBorrowVec(*)) => { - unpack_datum!(bcx, auto_slice(bcx, datum)) + unpack_datum!(bcx, auto_slice(bcx, expr, datum)) } Some(AutoBorrowVecRef(*)) => { - unpack_datum!(bcx, auto_slice_and_ref(bcx, datum)) + unpack_datum!(bcx, auto_slice_and_ref(bcx, expr, datum)) } Some(AutoBorrowFn(*)) => { // currently, all closure types are @@ -241,7 +241,7 @@ pub fn trans_to_datum(bcx: block, expr: @ast::expr) -> DatumBlock { DatumBlock {bcx: bcx, datum: datum.to_rptr(bcx)} } - fn auto_slice(bcx: block, datum: Datum) -> DatumBlock { + fn auto_slice(bcx: block, expr: @ast::expr, datum: Datum) -> DatumBlock { // This is not the most efficient thing possible; since slices // are two words it'd be better if this were compiled in // 'dest' mode, but I can't find a nice way to structure the @@ -250,7 +250,9 @@ pub fn trans_to_datum(bcx: block, expr: @ast::expr) -> DatumBlock { let tcx = bcx.tcx(); let unit_ty = ty::sequence_element_type(tcx, datum.ty); - let (base, len) = datum.get_base_and_len(bcx); + // NOTE prob need to distinguish "auto-slice" from explicit index? + let (bcx, base, len) = + datum.get_vec_base_and_len(bcx, expr.span, expr.id); // this type may have a different region/mutability than the // real one, but it will have the same runtime representation @@ -283,8 +285,10 @@ pub fn trans_to_datum(bcx: block, expr: @ast::expr) -> DatumBlock { DatumBlock {bcx: bcx, datum: scratch} } - fn auto_slice_and_ref(bcx: block, datum: Datum) -> DatumBlock { - let DatumBlock { bcx, datum } = auto_slice(bcx, datum); + fn auto_slice_and_ref(bcx: block, + expr: @ast::expr, + datum: Datum) -> DatumBlock { + let DatumBlock { bcx, datum } = auto_slice(bcx, expr, datum); auto_ref(bcx, datum) } } @@ -903,7 +907,8 @@ fn trans_lvalue_unadjusted(bcx: block, expr: @ast::expr) -> DatumBlock { let scaled_ix = Mul(bcx, ix_val, vt.llunit_size); base::maybe_name_value(bcx.ccx(), scaled_ix, ~"scaled_ix"); - let mut (base, len) = base_datum.get_base_and_len(bcx); + let mut (bcx, base, len) = + base_datum.get_vec_base_and_len(bcx, index_expr.span, index_expr.id); if ty::type_is_str(base_ty) { // acccount for null terminator in the case of string diff --git a/src/test/run-fail/borrowck-wg-fail-2.rs b/src/test/run-fail/borrowck-wg-fail-2.rs index 121ec9c79216f..59a5fecd34003 100644 --- a/src/test/run-fail/borrowck-wg-fail-2.rs +++ b/src/test/run-fail/borrowck-wg-fail-2.rs @@ -1,5 +1,8 @@ // error-pattern:borrowed +// Test that write guards trigger when there is a write to a field +// of a frozen structure. + struct S { x: int } diff --git a/src/test/run-fail/borrowck-wg-fail-3.rs b/src/test/run-fail/borrowck-wg-fail-3.rs index 2b95cf3fe5fa9..ebff553aafbad 100644 --- a/src/test/run-fail/borrowck-wg-fail-3.rs +++ b/src/test/run-fail/borrowck-wg-fail-3.rs @@ -1,5 +1,8 @@ // error-pattern:borrowed +// Test that write guards trigger when there is a write to a directly +// frozen @mut box. + fn main() { let x = @mut 3; let y: &mut int = x; diff --git a/src/test/run-fail/borrowck-wg-fail.rs b/src/test/run-fail/borrowck-wg-fail.rs index fd2d36b895ada..939d802c21ca1 100644 --- a/src/test/run-fail/borrowck-wg-fail.rs +++ b/src/test/run-fail/borrowck-wg-fail.rs @@ -1,5 +1,8 @@ // error-pattern:borrowed +// Test that write guards trigger when mut box is frozen +// as part of argument coercion. + fn f(_x: &int, y: @mut int) { *y = 2; } diff --git a/src/test/run-fail/borrowck-wg-one-mut-one-imm-slice-method.rs b/src/test/run-fail/borrowck-wg-one-mut-one-imm-slice-method.rs new file mode 100644 index 0000000000000..91df90f8b3ac9 --- /dev/null +++ b/src/test/run-fail/borrowck-wg-one-mut-one-imm-slice-method.rs @@ -0,0 +1,37 @@ +// error-pattern:borrowed + +// Test that write guards trigger when there is a coercion to +// a slice on the receiver of a method. + +trait MyMutSlice { + fn my_mut_slice(self) -> Self; +} + +impl<'self, T> MyMutSlice for &'self mut [T] { + fn my_mut_slice(self) -> &'self mut [T] { + self + } +} + +trait MySlice { + fn my_slice(self) -> Self; +} + +impl<'self, T> MySlice for &'self [T] { + fn my_slice(self) -> &'self [T] { + self + } +} + +fn add(x:&mut [int], y:&[int]) +{ + x[0] = x[0] + y[0]; +} + +pub fn main() +{ + let z = @mut [1,2,3]; + let z2 = z; + add(z.my_mut_slice(), z2.my_slice()); + print(fmt!("%d\n", z[0])); +} diff --git a/src/test/run-fail/borrowck-wg-one-mut-one-imm-slices.rs b/src/test/run-fail/borrowck-wg-one-mut-one-imm-slices.rs new file mode 100644 index 0000000000000..bae693ce4eae2 --- /dev/null +++ b/src/test/run-fail/borrowck-wg-one-mut-one-imm-slices.rs @@ -0,0 +1,16 @@ +// error-pattern:borrowed + +// Test that write guards trigger when arguments are coerced to slices. + +fn add(x:&mut [int], y:&[int]) +{ + x[0] = x[0] + y[0]; +} + +pub fn main() +{ + let z = @mut [1,2,3]; + let z2 = z; + add(z, z2); + print(fmt!("%d\n", z[0])); +} diff --git a/src/test/run-fail/borrowck-wg-one-mut-one-imm.rs b/src/test/run-fail/borrowck-wg-one-mut-one-imm.rs new file mode 100644 index 0000000000000..9e2a02b32dfed --- /dev/null +++ b/src/test/run-fail/borrowck-wg-one-mut-one-imm.rs @@ -0,0 +1,17 @@ +// error-pattern:borrowed + +// Test that write guards trigger when we are indexing into +// an @mut vector. + +fn add(x:&mut int, y:&int) +{ + *x = *x + *y; +} + +pub fn main() +{ + let z = @mut [1,2,3]; + let z2 = z; + add(&mut z[0], &z2[0]); + print(fmt!("%d\n", z[0])); +} diff --git a/src/test/run-fail/borrowck-wg-two-array-indices.rs b/src/test/run-fail/borrowck-wg-two-array-indices.rs new file mode 100644 index 0000000000000..ad68448876028 --- /dev/null +++ b/src/test/run-fail/borrowck-wg-two-array-indices.rs @@ -0,0 +1,17 @@ +// error-pattern:borrowed + +// Test that arguments trigger when there are *two mutable* borrows +// of indices. + +fn add(x:&mut int, y:&mut int) +{ + *x = *x + *y; +} + +pub fn main() +{ + let z = @mut [1,2,3]; + let z2 = z; + add(&mut z[0], &mut z2[0]); + print(fmt!("%d\n", z[0])); +} diff --git a/src/test/run-pass/borrowck-wg-two-imm-borrows.rs b/src/test/run-pass/borrowck-wg-two-imm-borrows.rs new file mode 100644 index 0000000000000..20f824e969a48 --- /dev/null +++ b/src/test/run-pass/borrowck-wg-two-imm-borrows.rs @@ -0,0 +1,14 @@ +// Test that we can borrow the same @mut box twice, so long as both are imm. + +fn add(x:&int, y:&int) +{ + *x + *y; +} + +pub fn main() +{ + let z = @mut [1,2,3]; + let z2 = z; + add(&z[0], &z2[0]); + print(fmt!("%d\n", z[0])); +} From 24cda9fbc20cad2d7f59a40973a51ff6355ababb Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Fri, 3 May 2013 17:10:32 -0400 Subject: [PATCH 180/410] Remove pub from core::{unicode,cmath,stackwalk,rt} --- src/libcore/char.rs | 33 ++++++++++++++++----------------- src/libcore/core.rc | 8 ++++---- src/libcore/gc.rs | 4 ++-- 3 files changed, 22 insertions(+), 23 deletions(-) diff --git a/src/libcore/char.rs b/src/libcore/char.rs index 7868b463807f6..a96f1a2ff8191 100644 --- a/src/libcore/char.rs +++ b/src/libcore/char.rs @@ -16,7 +16,7 @@ use option::{None, Option, Some}; use str; use u32; use uint; -use unicode; +use unicode::{derived_property, general_category}; #[cfg(notest)] use cmp::Eq; @@ -53,10 +53,9 @@ use unicode; Cn Unassigned a reserved unassigned code point or a noncharacter */ -pub use is_alphabetic = unicode::derived_property::Alphabetic; -pub use is_XID_start = unicode::derived_property::XID_Start; -pub use is_XID_continue = unicode::derived_property::XID_Continue; - +pub fn is_alphabetic(c: char) -> bool { derived_property::Alphabetic(c) } +pub fn is_XID_start(c: char) -> bool { derived_property::XID_Start(c) } +pub fn is_XID_continue(c: char) -> bool { derived_property::XID_Continue(c) } /** * Indicates whether a character is in lower case, defined @@ -64,7 +63,7 @@ pub use is_XID_continue = unicode::derived_property::XID_Continue; */ #[inline(always)] pub fn is_lowercase(c: char) -> bool { - return unicode::general_category::Ll(c); + return general_category::Ll(c); } /** @@ -73,7 +72,7 @@ pub fn is_lowercase(c: char) -> bool { */ #[inline(always)] pub fn is_uppercase(c: char) -> bool { - return unicode::general_category::Lu(c); + return general_category::Lu(c); } /** @@ -84,9 +83,9 @@ pub fn is_uppercase(c: char) -> bool { #[inline(always)] pub fn is_whitespace(c: char) -> bool { return ('\x09' <= c && c <= '\x0d') - || unicode::general_category::Zs(c) - || unicode::general_category::Zl(c) - || unicode::general_category::Zp(c); + || general_category::Zs(c) + || general_category::Zl(c) + || general_category::Zp(c); } /** @@ -96,18 +95,18 @@ pub fn is_whitespace(c: char) -> bool { */ #[inline(always)] pub fn is_alphanumeric(c: char) -> bool { - return unicode::derived_property::Alphabetic(c) || - unicode::general_category::Nd(c) || - unicode::general_category::Nl(c) || - unicode::general_category::No(c); + return derived_property::Alphabetic(c) || + general_category::Nd(c) || + general_category::Nl(c) || + general_category::No(c); } /// Indicates whether the character is numeric (Nd, Nl, or No) #[inline(always)] pub fn is_digit(c: char) -> bool { - return unicode::general_category::Nd(c) || - unicode::general_category::Nl(c) || - unicode::general_category::No(c); + return general_category::Nd(c) || + general_category::Nl(c) || + general_category::No(c); } /** diff --git a/src/libcore/core.rc b/src/libcore/core.rc index 75ef8ee0cbd13..630224cc37a7a 100644 --- a/src/libcore/core.rc +++ b/src/libcore/core.rc @@ -247,12 +247,12 @@ pub mod unstable; /* For internal use, not exported */ -pub mod unicode; +mod unicode; #[path = "num/cmath.rs"] -pub mod cmath; -pub mod stackwalk; +mod cmath; +mod stackwalk; #[path = "rt/mod.rs"] -pub mod rt; +mod rt; // A curious inner-module that's not exported that contains the binding // 'core' so that macro-expanded references to core::error and such diff --git a/src/libcore/gc.rs b/src/libcore/gc.rs index 0d0a98359d14c..9a7d0056b8245 100644 --- a/src/libcore/gc.rs +++ b/src/libcore/gc.rs @@ -44,7 +44,7 @@ use libc::{size_t, uintptr_t}; use option::{None, Option, Some}; use ptr; use hashmap::HashSet; -use stackwalk; +use stackwalk::walk_stack; use sys; pub use stackwalk::Word; @@ -230,7 +230,7 @@ unsafe fn walk_gc_roots(mem: Memory, sentinel: **Word, visitor: Visitor) { // frame is marked by a sentinel, which is a box pointer stored on // the stack. let mut reached_sentinel = ptr::is_null(sentinel); - for stackwalk::walk_stack |frame| { + for walk_stack |frame| { let pc = last_ret; let Segment {segment: next_segment, boundary: boundary} = find_segment_for_frame(frame.fp, segment); From 4d4cabff9ede49ae3642b05c4cfb023a0a9222b2 Mon Sep 17 00:00:00 2001 From: Tim Chevalier Date: Thu, 2 May 2013 13:09:28 -0700 Subject: [PATCH 181/410] rustpkg: Implement install command The install command should work now, though it only installs in-place (anything else has to wait until I implement RUST_PATH). Also including: core: Add remove_directory_recursive, change copy_file Make copy_file preserve permissions, and add a remove_directory_recursive function. --- src/libcore/os.rs | 37 ++++++++++ src/librustpkg/conditions.rs | 10 ++- src/librustpkg/path_util.rs | 130 +++++++++++++++++++++++++++++++--- src/librustpkg/rustpkg.rc | 132 +++++++++++++++++++++-------------- src/librustpkg/tests.rs | 71 +++++++++++++------ src/librustpkg/util.rs | 7 +- src/libstd/tempfile.rs | 26 ++++++- 7 files changed, 328 insertions(+), 85 deletions(-) diff --git a/src/libcore/os.rs b/src/libcore/os.rs index c4b03d76cefec..7b68e6597a179 100644 --- a/src/libcore/os.rs +++ b/src/libcore/os.rs @@ -772,6 +772,28 @@ pub fn list_dir_path(p: &Path) -> ~[~Path] { list_dir(p).map(|f| ~p.push(*f)) } +/// Removes a directory at the specified path, after removing +/// all its contents. Use carefully! +pub fn remove_dir_recursive(p: &Path) -> bool { + let mut error_happened = false; + for walk_dir(p) |inner| { + if !error_happened { + if path_is_dir(inner) { + if !remove_dir_recursive(inner) { + error_happened = true; + } + } + else { + if !remove_file(inner) { + error_happened = true; + } + } + } + }; + // Directory should now be empty + !error_happened && remove_dir(p) +} + /// Removes a directory at the specified path pub fn remove_dir(p: &Path) -> bool { return rmdir(p); @@ -877,6 +899,10 @@ pub fn copy_file(from: &Path, to: &Path) -> bool { if istream as uint == 0u { return false; } + // Preserve permissions + let from_mode = from.get_mode().expect("copy_file: couldn't get permissions \ + for source file"); + let ostream = do as_c_charp(to.to_str()) |top| { do as_c_charp("w+b") |modebuf| { libc::fopen(top, modebuf) @@ -908,6 +934,15 @@ pub fn copy_file(from: &Path, to: &Path) -> bool { } fclose(istream); fclose(ostream); + + // Give the new file the old file's permissions + unsafe { + if do str::as_c_str(to.to_str()) |to_buf| { + libc::chmod(to_buf, from_mode as mode_t) + } != 0 { + return false; // should be a condition... + } + } return ok; } } @@ -1594,6 +1629,7 @@ mod tests { == buf.len() as size_t)) } assert!((libc::fclose(ostream) == (0u as c_int))); + let in_mode = in.get_mode(); let rs = os::copy_file(&in, &out); if (!os::path_exists(&in)) { fail!(fmt!("%s doesn't exist", in.to_str())); @@ -1601,6 +1637,7 @@ mod tests { assert!((rs)); let rslt = run::run_program(~"diff", ~[in.to_str(), out.to_str()]); assert!((rslt == 0)); + assert!(out.get_mode() == in_mode); assert!((remove_file(&in))); assert!((remove_file(&out))); } diff --git a/src/librustpkg/conditions.rs b/src/librustpkg/conditions.rs index 35e70af7914c1..5b19a3bd66042 100644 --- a/src/librustpkg/conditions.rs +++ b/src/librustpkg/conditions.rs @@ -18,5 +18,13 @@ condition! { } condition! { - nonexistent_package: (super::PkgId, ~str) -> super::Path; + nonexistent_package: (super::PkgId, ~str) -> (); +} + +condition! { + copy_failed: (super::Path, super::Path) -> (); +} + +condition! { + missing_pkg_files: (super::PkgId) -> (); } diff --git a/src/librustpkg/path_util.rs b/src/librustpkg/path_util.rs index 0490f066f0bea..161cb75e9e50e 100644 --- a/src/librustpkg/path_util.rs +++ b/src/librustpkg/path_util.rs @@ -12,6 +12,7 @@ use util::PkgId; use core::libc::consts::os::posix88::{S_IRUSR, S_IWUSR, S_IXUSR}; +use core::os::mkdir_recursive; #[deriving(Eq)] pub enum OutputType { Main, Lib, Bench, Test } @@ -23,7 +24,7 @@ pub fn rust_path() -> ~[Path] { ~[Path(".")] } -static u_rwx: i32 = (S_IRUSR | S_IWUSR | S_IXUSR) as i32; +pub static u_rwx: i32 = (S_IRUSR | S_IWUSR | S_IXUSR) as i32; /// Creates a directory that is readable, writeable, /// and executable by the user. Returns true iff creation @@ -70,34 +71,137 @@ pub fn pkgid_src_in_workspace(pkgid: PkgId, workspace: &Path) -> Path { result.push(pkgid.path.to_str()) } +/// Figure out what the executable name for in 's build +/// directory is, and if the file exists, return it. +pub fn built_executable_in_workspace(pkgid: PkgId, workspace: &Path) -> Option { + let mut result = workspace.push("build"); + result = result.push_rel(&pkgid.path); + // should use a target-specific subdirectory + result = mk_output_path(Main, fmt!("%s-%s", pkgid.path.to_str(), pkgid.version.to_str()), + result); + debug!("built_executable_in_workspace: checking whether %s exists", + result.to_str()); + if os::path_exists(&result) { + Some(result) + } + else { + None + } +} + +/// Figure out what the library name for in 's build +/// directory is, and if the file exists, return it. +pub fn built_library_in_workspace(pkgid: PkgId, workspace: &Path) -> Option { + let mut result = workspace.push("build"); + result = result.push_rel(&pkgid.path); + // should use a target-specific subdirectory + result = mk_output_path(Lib, pkgid.path.to_str(), result); + debug!("built_library_in_workspace: checking whether %s exists", + result.to_str()); + + // We don't know what the hash is, so we have to search through the directory + // contents + let dir_contents = os::list_dir(&result.pop()); + debug!("dir has %? entries", dir_contents.len()); + + // n.b. This code assumes the pkgid's path only has one element + let lib_prefix = fmt!("%s%s", os::consts::DLL_PREFIX, pkgid.path.to_str()); + let lib_filetype = fmt!("%s%s", pkgid.version.to_str(), os::consts::DLL_SUFFIX); + + debug!("lib_prefix = %s and lib_filetype = %s", lib_prefix, lib_filetype); + + let mut result_filename = None; + for dir_contents.each |&p| { + let mut which = 0; + let mut hash = None; + // Find a filename that matches the pattern: (lib_prefix)-hash-(version)(lib_suffix) + // and remember what the hash was + for p.each_split_char('-') |piece| { + debug!("a piece = %s", piece); + if which == 0 && piece != lib_prefix { + break; + } + else if which == 0 { + which += 1; + } + else if which == 1 { + hash = Some(piece.to_owned()); + which += 1; + } + else if which == 2 && piece != lib_filetype { + hash = None; + break; + } + else if which == 2 { + break; + } + else { + // something went wrong + hash = None; + break; + } + } + if hash.is_some() { + result_filename = Some(p); + break; + } + } + + // Return the filename that matches, which we now know exists + // (if result_filename != None) + debug!("result_filename = %?", result_filename); + match result_filename { + None => None, + Some(result_filename) => { + let result_filename = result.with_filename(result_filename); + debug!("result_filename = %s", result_filename.to_str()); + Some(result_filename) + } + } +} + /// Returns the executable that would be installed for /// in +/// As a side effect, creates the bin-dir if it doesn't exist pub fn target_executable_in_workspace(pkgid: PkgId, workspace: &Path) -> Path { - let result = workspace.push("bin"); - // should use a target-specific subdirectory - mk_output_path(Main, pkgid.path.to_str(), result) + target_file_in_workspace(pkgid, workspace, Main) } /// Returns the executable that would be installed for /// in +/// As a side effect, creates the bin-dir if it doesn't exist pub fn target_library_in_workspace(pkgid: PkgId, workspace: &Path) -> Path { - let result = workspace.push("lib"); - mk_output_path(Lib, pkgid.path.to_str(), result) + target_file_in_workspace(pkgid, workspace, Lib) } /// Returns the test executable that would be installed for /// in pub fn target_test_in_workspace(pkgid: PkgId, workspace: &Path) -> Path { - let result = workspace.push("build"); - mk_output_path(Test, pkgid.path.to_str(), result) + target_file_in_workspace(pkgid, workspace, Test) } /// Returns the bench executable that would be installed for /// in pub fn target_bench_in_workspace(pkgid: PkgId, workspace: &Path) -> Path { - let result = workspace.push("build"); - mk_output_path(Bench, pkgid.path.to_str(), result) + target_file_in_workspace(pkgid, workspace, Bench) +} + +fn target_file_in_workspace(pkgid: PkgId, workspace: &Path, + what: OutputType) -> Path { + use conditions::bad_path::cond; + + let (subdir, create_dir) = match what { + Main => ("bin", true), Lib => ("lib", true), Test | Bench => ("build", false) + }; + let result = workspace.push(subdir); + if create_dir { + if !os::path_exists(&result) && !mkdir_recursive(&result, u_rwx) { + cond.raise((result, fmt!("I couldn't create the %s dir", subdir))); + } + } + mk_output_path(what, pkgid.path.to_str(), result) + } /// Return the directory for 's build artifacts in . @@ -123,7 +227,11 @@ pub fn mk_output_path(what: OutputType, short_name: ~str, dir: Path) -> Path { match what { Lib => dir.push(os::dll_filename(short_name)), _ => dir.push(fmt!("%s%s%s", short_name, - if what == Test { ~"test" } else { ~"" }, + match what { + Test => "test", + Bench => "bench", + _ => "" + } os::EXE_SUFFIX)) } } diff --git a/src/librustpkg/rustpkg.rc b/src/librustpkg/rustpkg.rc index a296f0ca32a48..cc74f464e0e82 100644 --- a/src/librustpkg/rustpkg.rc +++ b/src/librustpkg/rustpkg.rc @@ -34,6 +34,8 @@ use syntax::{ast, diagnostic}; use util::*; use path_util::normalize; use path_util::{build_pkg_id_in_workspace, pkgid_src_in_workspace}; +use path_util::{built_executable_in_workspace, built_library_in_workspace}; +use path_util::{target_executable_in_workspace, target_library_in_workspace}; use workspace::pkg_parent_workspaces; use rustc::driver::session::{lib_crate, bin_crate, crate_type}; use context::Ctx; @@ -188,49 +190,7 @@ impl Ctx { // argument let pkgid = PkgId::new(args[0]); for pkg_parent_workspaces(pkgid) |workspace| { - let src_dir = pkgid_src_in_workspace(pkgid, workspace); - let build_dir = build_pkg_id_in_workspace(pkgid, workspace); - debug!("Destination dir = %s", build_dir.to_str()); - - // Create the package source - let mut src = PkgSrc::new(&workspace.push("src"), &build_dir, &pkgid); - debug!("Package src = %?", src); - - // Is there custom build logic? If so, use it - let pkg_src_dir = src_dir; - let mut custom = false; - debug!("Package source directory = %s", pkg_src_dir.to_str()); - let cfgs = match src.package_script_option(&pkg_src_dir) { - Some(package_script_path) => { - let pscript = PkgScript::parse(package_script_path, - workspace, - pkgid); - // Limited right now -- we're only running the post_build - // hook and probably fail otherwise - // also post_build should be called pre_build - let (cfgs, hook_result) = pscript.run_custom(~"post_build"); - debug!("Command return code = %?", hook_result); - if hook_result != 0 { - fail!(fmt!("Error running custom build command")) - } - custom = true; - // otherwise, the package script succeeded - cfgs - } - None => { - debug!("No package script, continuing"); - ~[] - } - }; - - // If there was a package script, it should have finished - // the build already. Otherwise... - if !custom { - // Find crates inside the workspace - src.find_crates(); - // Build it! - src.build(&build_dir, cfgs); - } + self.build(workspace, pkgid); } } ~"clean" => { @@ -304,6 +264,53 @@ impl Ctx { fail!(~"`do` not yet implemented"); } + fn build(&self, workspace: &Path, pkgid: PkgId) { + let src_dir = pkgid_src_in_workspace(pkgid, workspace); + let build_dir = build_pkg_id_in_workspace(pkgid, workspace); + debug!("Destination dir = %s", build_dir.to_str()); + + // Create the package source + let mut src = PkgSrc::new(&workspace.push("src"), &build_dir, &pkgid); + debug!("Package src = %?", src); + + // Is there custom build logic? If so, use it + let pkg_src_dir = src_dir; + let mut custom = false; + debug!("Package source directory = %s", pkg_src_dir.to_str()); + let cfgs = match src.package_script_option(&pkg_src_dir) { + Some(package_script_path) => { + let pscript = PkgScript::parse(package_script_path, + workspace, + pkgid); + // Limited right now -- we're only running the post_build + // hook and probably fail otherwise + // also post_build should be called pre_build + let (cfgs, hook_result) = pscript.run_custom(~"post_build"); + debug!("Command return code = %?", hook_result); + if hook_result != 0 { + fail!(fmt!("Error running custom build command")) + } + custom = true; + // otherwise, the package script succeeded + cfgs + } + None => { + debug!("No package script, continuing"); + ~[] + } + }; + + // If there was a package script, it should have finished + // the build already. Otherwise... + if !custom { + // Find crates inside the workspace + src.find_crates(); + // Build it! + src.build(&build_dir, cfgs); + } + + } + fn clean(&self, workspace: &Path, id: PkgId) { // Could also support a custom build hook in the pkg // script for cleaning files rustpkg doesn't know about. @@ -325,9 +332,31 @@ impl Ctx { fail!(~"info not yet implemented"); } - fn install(&self, _workspace: &Path, _id: PkgId) { - // stub - fail!(~"install not yet implemented"); + fn install(&self, workspace: &Path, id: PkgId) { + use conditions::copy_failed::cond; + + // Should use RUST_PATH in the future. + // Also should use workcache to not build if not necessary. + self.build(workspace, id); + + // Now copy stuff into the install dirs + let maybe_executable = built_executable_in_workspace(id, workspace); + let maybe_library = built_library_in_workspace(id, workspace); + let target_exec = target_executable_in_workspace(id, workspace); + let target_lib = target_library_in_workspace(id, workspace); + + for maybe_executable.each |exec| { + debug!("Copying: %s -> %s", exec.to_str(), target_exec.to_str()); + if !os::copy_file(exec, &target_exec) { + cond.raise((*exec, target_exec)); + } + } + for maybe_library.each |lib| { + debug!("Copying: %s -> %s", lib.to_str(), target_lib.to_str()); + if !os::copy_file(lib, &target_lib) { + cond.raise((*lib, target_lib)); + } + } } fn fetch(&self, _dir: &Path, _url: ~str, _target: Option<~str>) { @@ -610,7 +639,7 @@ impl PkgSrc { fn check_dir(&self) -> Path { - use conditions::bad_path::cond; + use conditions::nonexistent_package::cond; debug!("Pushing onto root: %s | %s", self.id.path.to_str(), self.root.to_str()); @@ -620,12 +649,12 @@ impl PkgSrc { debug!("Checking dir: %s", dir.to_str()); if !os::path_exists(&dir) { - return cond.raise((dir, ~"missing package dir")); + cond.raise((self.id, ~"missing package dir")); } if !os::path_is_dir(&dir) { - return cond.raise((dir, ~"supplied path for package dir is a \ - non-directory")); + cond.raise((self.id, ~"supplied path for package dir is a \ + non-directory")); } dir @@ -680,6 +709,7 @@ impl PkgSrc { /// is no custom build logic fn find_crates(&mut self) { use PkgSrc::push_crate; + use conditions::missing_pkg_files::cond; let dir = self.check_dir(); let prefix = dir.components.len(); @@ -704,7 +734,7 @@ impl PkgSrc { util::note(~"Couldn't infer any crates to build.\n\ Try naming a crate `main.rs`, `lib.rs`, \ `test.rs`, or `bench.rs`."); - fail!(~"Failed to infer crates to build"); + cond.raise(self.id); } debug!("found %u libs, %u mains, %u tests, %u benchs", diff --git a/src/librustpkg/tests.rs b/src/librustpkg/tests.rs index bcee2992e5ab9..f38fc88f72791 100644 --- a/src/librustpkg/tests.rs +++ b/src/librustpkg/tests.rs @@ -17,7 +17,8 @@ use std::tempfile::mkdtemp; use util::{PkgId, default_version}; use path_util::{target_executable_in_workspace, target_library_in_workspace, target_test_in_workspace, target_bench_in_workspace, - make_dir_rwx}; + make_dir_rwx, u_rwx}; +use core::os::mkdir_recursive; fn fake_ctxt() -> Ctx { Ctx { @@ -33,8 +34,27 @@ fn fake_pkg() -> PkgId { } } -fn mk_temp_workspace() -> Path { - mkdtemp(&os::tmpdir(), "test").expect("couldn't create temp dir") +fn writeFile(file_path: &Path, contents: ~str) { + let out: @io::Writer = + result::get(&io::file_writer(file_path, + ~[io::Create, io::Truncate])); + out.write_line(contents); +} + +fn mk_temp_workspace(short_name: &Path) -> Path { + let workspace = mkdtemp(&os::tmpdir(), "test").expect("couldn't create temp dir"); + let package_dir = workspace.push(~"src").push_rel(short_name); + assert!(mkdir_recursive(&package_dir, u_rwx)); + // Create main, lib, test, and bench files + writeFile(&package_dir.push(~"main.rs"), + ~"fn main() { let _x = (); }"); + writeFile(&package_dir.push(~"lib.rs"), + ~"pub fn f() { let _x = (); }"); + writeFile(&package_dir.push(~"test.rs"), + ~"#[test] pub fn f() { (); }"); + writeFile(&package_dir.push(~"bench.rs"), + ~"#[bench] pub fn f() { (); }"); + workspace } fn is_rwx(p: &Path) -> bool { @@ -42,11 +62,10 @@ fn is_rwx(p: &Path) -> bool { match p.get_mode() { None => return false, - Some(m) => { + Some(m) => ((m & S_IRUSR as uint) == S_IRUSR as uint && (m & S_IWUSR as uint) == S_IWUSR as uint && (m & S_IXUSR as uint) == S_IXUSR as uint) - } } } @@ -54,48 +73,60 @@ fn is_rwx(p: &Path) -> bool { fn test_make_dir_rwx() { let temp = &os::tmpdir(); let dir = temp.push(~"quux"); - let _ = os::remove_dir(&dir); + assert!(!os::path_exists(&dir) || + os::remove_dir_recursive(&dir)); + debug!("Trying to make %s", dir.to_str()); assert!(make_dir_rwx(&dir)); assert!(os::path_is_dir(&dir)); assert!(is_rwx(&dir)); - assert!(os::remove_dir(&dir)); + assert!(os::remove_dir_recursive(&dir)); } #[test] -#[ignore(reason = "install not yet implemented")] fn test_install_valid() { + use rustc::metadata::filesearch; + + let sysroot = filesearch::get_rustpkg_sysroot(); + debug!("sysroot = %s", sysroot.get().to_str()); let ctxt = fake_ctxt(); let temp_pkg_id = fake_pkg(); - let temp_workspace = mk_temp_workspace(); + let temp_workspace = mk_temp_workspace(&temp_pkg_id.path); // should have test, bench, lib, and main ctxt.install(&temp_workspace, temp_pkg_id); // Check that all files exist let exec = target_executable_in_workspace(temp_pkg_id, &temp_workspace); + debug!("exec = %s", exec.to_str()); assert!(os::path_exists(&exec)); assert!(is_rwx(&exec)); let lib = target_library_in_workspace(temp_pkg_id, &temp_workspace); + debug!("lib = %s", lib.to_str()); assert!(os::path_exists(&lib)); assert!(is_rwx(&lib)); // And that the test and bench executables aren't installed assert!(!os::path_exists(&target_test_in_workspace(temp_pkg_id, &temp_workspace))); - assert!(!os::path_exists(&target_bench_in_workspace(temp_pkg_id, &temp_workspace))); + let bench = target_bench_in_workspace(temp_pkg_id, &temp_workspace); + debug!("bench = %s", bench.to_str()); + assert!(!os::path_exists(&bench)); } #[test] -#[ignore(reason = "install not yet implemented")] fn test_install_invalid() { use conditions::nonexistent_package::cond; + use cond1 = conditions::missing_pkg_files::cond; let ctxt = fake_ctxt(); let pkgid = fake_pkg(); - let temp_workspace = mk_temp_workspace(); - let expected_path = Path(~"quux"); - let substituted: Path = do cond.trap(|_| { - expected_path + let temp_workspace = mkdtemp(&os::tmpdir(), "test").expect("couldn't create temp dir"); + let mut error_occurred = false; + let mut error1_occurred = false; + do cond1.trap(|_| { + error1_occurred = true; }).in { - ctxt.install(&temp_workspace, pkgid); - // ok - fail!(~"test_install_invalid failed, should have raised a condition"); - }; - assert!(substituted == expected_path); + do cond.trap(|_| { + error_occurred = true; + }).in { + ctxt.install(&temp_workspace, pkgid); + } + } + assert!(error_occurred && error1_occurred); } diff --git a/src/librustpkg/util.rs b/src/librustpkg/util.rs index 28198e59f86d4..1b3d72bf6aa64 100644 --- a/src/librustpkg/util.rs +++ b/src/librustpkg/util.rs @@ -477,6 +477,8 @@ pub fn compile_input(sysroot: Option, let matches = getopts(~[~"-Z", ~"time-passes"] + if building_library { ~[~"--lib"] } + else if test { ~[~"--test"] } + // bench? else { ~[] } + flags + cfgs.flat_map(|&c| { ~[~"--cfg", c] }), @@ -540,9 +542,13 @@ pub fn compile_crate_from_input(input: driver::input, let (crate, _) = driver::compile_upto(sess, cfg, &input, driver::cu_parse, Some(outputs)); + debug!("About to inject link_meta info..."); // Inject the inferred link_meta info if it's not already there // (assumes that name and vers are the only linkage metas) let mut crate_to_use = crate; + + debug!("How many attrs? %?", attr::find_linkage_metas(crate.node.attrs).len()); + if attr::find_linkage_metas(crate.node.attrs).is_empty() { crate_to_use = add_attrs(*crate, ~[mk_attr(@dummy_spanned(meta_list(@~"link", // change PkgId to have a field? @@ -552,7 +558,6 @@ pub fn compile_crate_from_input(input: driver::input, mk_string_lit(@pkg_id.version.to_str())))])))]); } - driver::compile_rest(sess, cfg, what, Some(outputs), Some(crate_to_use)); crate_to_use } diff --git a/src/libstd/tempfile.rs b/src/libstd/tempfile.rs index 6da74834b1a49..3d4e5bb8b79c1 100644 --- a/src/libstd/tempfile.rs +++ b/src/libstd/tempfile.rs @@ -27,7 +27,8 @@ pub fn mkdtemp(tmpdir: &Path, suffix: &str) -> Option { mod tests { use tempfile::mkdtemp; use tempfile; - + use core::os; + #[test] fn test_mkdtemp() { let p = mkdtemp(&Path("."), "foobar").unwrap(); @@ -89,4 +90,27 @@ mod tests { assert!(os::path_is_dir(&path2.pop())); }); } + + // Ideally this would be in core, but needs mkdtemp + #[test] + pub fn test_rmdir_recursive_ok() { + use core::libc::consts::os::posix88::{S_IRUSR, S_IWUSR, S_IXUSR}; + use core::os; + + let rwx = (S_IRUSR | S_IWUSR | S_IXUSR) as i32; + + let tmpdir = mkdtemp(&os::tmpdir(), "test").expect("test_rmdir_recursive_ok: \ + couldn't create temp dir"); + let root = tmpdir.push("foo"); + + debug!("making %s", root.to_str()); + assert!(os::make_dir(&root, rwx)); + assert!(os::make_dir(&root.push("foo"), rwx)); + assert!(os::make_dir(&root.push("foo").push("bar"), rwx)); + assert!(os::make_dir(&root.push("foo").push("bar").push("blat"), rwx)); + assert!(os::remove_dir_recursive(&root)); + assert!(!os::path_exists(&root)); + assert!(!os::path_exists(&root.push("bar"))); + assert!(!os::path_exists(&root.push("bar").push("blat"))); + } } From 376a5526a78ab7acf9ba143264acc0c0e2e70541 Mon Sep 17 00:00:00 2001 From: Tim Chevalier Date: Thu, 2 May 2013 14:14:25 -0700 Subject: [PATCH 182/410] tidy --- src/libstd/tempfile.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libstd/tempfile.rs b/src/libstd/tempfile.rs index 3d4e5bb8b79c1..10645e947e2d9 100644 --- a/src/libstd/tempfile.rs +++ b/src/libstd/tempfile.rs @@ -28,7 +28,7 @@ mod tests { use tempfile::mkdtemp; use tempfile; use core::os; - + #[test] fn test_mkdtemp() { let p = mkdtemp(&Path("."), "foobar").unwrap(); From c42f1218a0a7b3a5c84502f9cb4b123d65148f4c Mon Sep 17 00:00:00 2001 From: Tim Chevalier Date: Fri, 3 May 2013 16:47:53 -0700 Subject: [PATCH 183/410] rustpkg: Handle sysroot more correctly In rustpkg, pass around sysroot; in rustpkg tests, set the sysroot manually so that tests can find libcore and such. With bonus metadata::filesearch refactoring to avoid copies. --- src/librustc/back/rpath.rs | 2 +- src/librustc/driver/driver.rs | 2 +- src/librustc/driver/session.rs | 2 +- src/librustc/metadata/filesearch.rs | 54 ++++++++++++++++------------ src/librustpkg/context.rs | 3 ++ src/librustpkg/path_util.rs | 6 +--- src/librustpkg/rustpkg.rc | 29 ++++++++------- src/librustpkg/tests.rs | 55 +++++++++++++++++++++++++---- src/librustpkg/util.rs | 5 +-- 9 files changed, 106 insertions(+), 52 deletions(-) diff --git a/src/librustc/back/rpath.rs b/src/librustc/back/rpath.rs index fab19b681740c..fceff55abf8d4 100644 --- a/src/librustc/back/rpath.rs +++ b/src/librustc/back/rpath.rs @@ -40,7 +40,7 @@ pub fn get_rpath_flags(sess: session::Session, out_filename: &Path) // where rustrt is and we know every rust program needs it let libs = vec::append_one(libs, get_sysroot_absolute_rt_lib(sess)); - let rpaths = get_rpaths(os, &sysroot, output, libs, + let rpaths = get_rpaths(os, sysroot, output, libs, sess.opts.target_triple); rpaths_to_flags(rpaths) } diff --git a/src/librustc/driver/driver.rs b/src/librustc/driver/driver.rs index 5e5d0640d808e..d968cf708d938 100644 --- a/src/librustc/driver/driver.rs +++ b/src/librustc/driver/driver.rs @@ -603,7 +603,7 @@ pub fn build_session_options(binary: @~str, link::output_type_bitcode } else { link::output_type_exe }; let sysroot_opt = getopts::opt_maybe_str(matches, ~"sysroot"); - let sysroot_opt = sysroot_opt.map(|m| Path(*m)); + let sysroot_opt = sysroot_opt.map(|m| @Path(*m)); let target_opt = getopts::opt_maybe_str(matches, ~"target"); let target_feature_opt = getopts::opt_maybe_str(matches, ~"target-feature"); let save_temps = getopts::opt_present(matches, ~"save-temps"); diff --git a/src/librustc/driver/session.rs b/src/librustc/driver/session.rs index 237b03bc20fb3..04cf3ca64f9d7 100644 --- a/src/librustc/driver/session.rs +++ b/src/librustc/driver/session.rs @@ -125,7 +125,7 @@ pub struct options { output_type: back::link::output_type, addl_lib_search_paths: ~[Path], linker_args: ~[~str], - maybe_sysroot: Option, + maybe_sysroot: Option<@Path>, target_triple: ~str, target_feature: ~str, // User-specified cfg meta items. The compiler itself will add additional diff --git a/src/librustc/metadata/filesearch.rs b/src/librustc/metadata/filesearch.rs index c88d5437c840e..ded0b314d44bb 100644 --- a/src/librustc/metadata/filesearch.rs +++ b/src/librustc/metadata/filesearch.rs @@ -20,41 +20,49 @@ pub fn pick_file(file: Path, path: &Path) -> Option { } pub trait FileSearch { - fn sysroot(&self) -> Path; - fn lib_search_paths(&self) -> ~[Path]; + fn sysroot(&self) -> @Path; + fn for_each_lib_search_path(&self, f: &fn(&Path) -> bool); fn get_target_lib_path(&self) -> Path; fn get_target_lib_file_path(&self, file: &Path) -> Path; } -pub fn mk_filesearch(maybe_sysroot: &Option, +pub fn mk_filesearch(maybe_sysroot: &Option<@Path>, target_triple: &str, addl_lib_search_paths: ~[Path]) -> @FileSearch { struct FileSearchImpl { - sysroot: Path, + sysroot: @Path, addl_lib_search_paths: ~[Path], target_triple: ~str } impl FileSearch for FileSearchImpl { - fn sysroot(&self) -> Path { /*bad*/copy self.sysroot } - fn lib_search_paths(&self) -> ~[Path] { - let mut paths = /*bad*/copy self.addl_lib_search_paths; - - paths.push( - make_target_lib_path(&self.sysroot, - self.target_triple)); - match get_rustpkg_lib_path_nearest() { - result::Ok(ref p) => paths.push((/*bad*/copy *p)), - result::Err(_) => () + fn sysroot(&self) -> @Path { self.sysroot } + fn for_each_lib_search_path(&self, f: &fn(&Path) -> bool) { + debug!("filesearch: searching additional lib search paths"); + if !self.addl_lib_search_paths.each(f) { + return; } - match get_rustpkg_lib_path() { - result::Ok(ref p) => paths.push((/*bad*/copy *p)), - result::Err(_) => () + + debug!("filesearch: searching target lib path"); + if !f(&make_target_lib_path(self.sysroot, + self.target_triple)) { + return; } - paths + debug!("filesearch: searching rustpkg lib path nearest"); + if match get_rustpkg_lib_path_nearest() { + result::Ok(ref p) => f(p), + result::Err(_) => true + } { + return; + } + debug!("filesearch: searching rustpkg lib path"); + match get_rustpkg_lib_path() { + result::Ok(ref p) => f(p), + result::Err(_) => true + } } fn get_target_lib_path(&self) -> Path { - make_target_lib_path(&self.sysroot, self.target_triple) + make_target_lib_path(self.sysroot, self.target_triple) } fn get_target_lib_file_path(&self, file: &Path) -> Path { self.get_target_lib_path().push_rel(file) @@ -72,7 +80,7 @@ pub fn mk_filesearch(maybe_sysroot: &Option, pub fn search(filesearch: @FileSearch, pick: pick) -> Option { let mut rslt = None; - for filesearch.lib_search_paths().each |lib_search_path| { + for filesearch.for_each_lib_search_path() |lib_search_path| { debug!("searching %s", lib_search_path.to_str()); for os::list_dir_path(lib_search_path).each |path| { debug!("testing %s", path.to_str()); @@ -108,10 +116,10 @@ fn get_or_default_sysroot() -> Path { } } -fn get_sysroot(maybe_sysroot: &Option) -> Path { +fn get_sysroot(maybe_sysroot: &Option<@Path>) -> @Path { match *maybe_sysroot { - option::Some(ref sr) => (/*bad*/copy *sr), - option::None => get_or_default_sysroot() + option::Some(sr) => sr, + option::None => @get_or_default_sysroot() } } diff --git a/src/librustpkg/context.rs b/src/librustpkg/context.rs index db036f44a185b..348d828bded2f 100644 --- a/src/librustpkg/context.rs +++ b/src/librustpkg/context.rs @@ -13,6 +13,9 @@ use core::hashmap::HashMap; pub struct Ctx { + // Sysroot -- if this is None, uses rustc filesearch's + // idea of the default + sysroot_opt: Option<@Path>, // I'm not sure what this is for json: bool, // Cache of hashes of things already installed diff --git a/src/librustpkg/path_util.rs b/src/librustpkg/path_util.rs index 161cb75e9e50e..d21fdcda7f76f 100644 --- a/src/librustpkg/path_util.rs +++ b/src/librustpkg/path_util.rs @@ -29,11 +29,7 @@ pub static u_rwx: i32 = (S_IRUSR | S_IWUSR | S_IXUSR) as i32; /// Creates a directory that is readable, writeable, /// and executable by the user. Returns true iff creation /// succeeded. -pub fn make_dir_rwx(p: &Path) -> bool { - use core::libc::consts::os::posix88::{S_IRUSR, S_IWUSR, S_IXUSR}; - - os::make_dir(p, u_rwx) -} +pub fn make_dir_rwx(p: &Path) -> bool { os::make_dir(p, u_rwx) } /// Replace all occurrences of '-' in the stem part of path with '_' /// This is because we treat rust-foo-bar-quux and rust_foo_bar_quux diff --git a/src/librustpkg/rustpkg.rc b/src/librustpkg/rustpkg.rc index cc74f464e0e82..dd5806ba01568 100644 --- a/src/librustpkg/rustpkg.rc +++ b/src/librustpkg/rustpkg.rc @@ -306,7 +306,7 @@ impl Ctx { // Find crates inside the workspace src.find_crates(); // Build it! - src.build(&build_dir, cfgs); + src.build(&build_dir, cfgs, self.sysroot_opt); } } @@ -506,6 +506,7 @@ pub fn main() { } Ctx { + sysroot_opt: None, // Currently, only tests override this json: json, dep_cache: @mut HashMap::new() }.run(cmd, args); @@ -648,6 +649,8 @@ impl PkgSrc { debug!("Checking dir: %s", dir.to_str()); + // tjc: Rather than erroring out, need to try downloading the + // contents of the path to a local directory (#5679) if !os::path_exists(&dir) { cond.raise((self.id, ~"missing package dir")); } @@ -744,18 +747,20 @@ impl PkgSrc { self.benchs.len()) } - fn build_crates(&self, dst_dir: &Path, - src_dir: &Path, - crates: &[Crate], - cfgs: ~[~str], - test: bool, crate_type: crate_type) { + fn build_crates(&self, + maybe_sysroot: Option<@Path>, + dst_dir: &Path, + src_dir: &Path, + crates: &[Crate], + cfgs: ~[~str], + test: bool, crate_type: crate_type) { for crates.each |&crate| { let path = &src_dir.push_rel(&crate.file).normalize(); util::note(fmt!("build_crates: compiling %s", path.to_str())); util::note(fmt!("build_crates: destination dir is %s", dst_dir.to_str())); - let result = util::compile_crate(None, self.id, path, + let result = util::compile_crate(maybe_sysroot, self.id, path, dst_dir, crate.flags, crate.cfgs + cfgs, @@ -769,15 +774,15 @@ impl PkgSrc { } } - fn build(&self, dst_dir: &Path, cfgs: ~[~str]) { + fn build(&self, dst_dir: &Path, cfgs: ~[~str], maybe_sysroot: Option<@Path>) { let dir = self.check_dir(); debug!("Building libs"); - self.build_crates(dst_dir, &dir, self.libs, cfgs, false, lib_crate); + self.build_crates(maybe_sysroot, dst_dir, &dir, self.libs, cfgs, false, lib_crate); debug!("Building mains"); - self.build_crates(dst_dir, &dir, self.mains, cfgs, false, bin_crate); + self.build_crates(maybe_sysroot, dst_dir, &dir, self.mains, cfgs, false, bin_crate); debug!("Building tests"); - self.build_crates(dst_dir, &dir, self.tests, cfgs, true, bin_crate); + self.build_crates(maybe_sysroot, dst_dir, &dir, self.tests, cfgs, true, bin_crate); debug!("Building benches"); - self.build_crates(dst_dir, &dir, self.benchs, cfgs, true, bin_crate); + self.build_crates(maybe_sysroot, dst_dir, &dir, self.benchs, cfgs, true, bin_crate); } } diff --git a/src/librustpkg/tests.rs b/src/librustpkg/tests.rs index f38fc88f72791..486e2959e9ed7 100644 --- a/src/librustpkg/tests.rs +++ b/src/librustpkg/tests.rs @@ -20,8 +20,9 @@ use path_util::{target_executable_in_workspace, target_library_in_workspace, make_dir_rwx, u_rwx}; use core::os::mkdir_recursive; -fn fake_ctxt() -> Ctx { +fn fake_ctxt(sysroot_opt: Option<@Path>) -> Ctx { Ctx { + sysroot_opt: sysroot_opt, json: false, dep_cache: @mut HashMap::new() } @@ -34,6 +35,13 @@ fn fake_pkg() -> PkgId { } } +fn remote_pkg() -> PkgId { + PkgId { + path: Path(~"github.com/catamorphism/test-pkg"), + version: default_version() + } +} + fn writeFile(file_path: &Path, contents: ~str) { let out: @io::Writer = result::get(&io::file_writer(file_path, @@ -69,6 +77,15 @@ fn is_rwx(p: &Path) -> bool { } } +#[cfg(test)] +fn test_sysroot() -> Path { + // Totally gross hack but it's just for test cases. + // Infer the sysroot from the exe name and tack "stage2" + // onto it. (Did I mention it was a gross hack?) + let self_path = os::self_exe_path().expect("Couldn't get self_exe path"); + self_path.pop().push("stage2") +} + #[test] fn test_make_dir_rwx() { let temp = &os::tmpdir(); @@ -84,11 +101,9 @@ fn test_make_dir_rwx() { #[test] fn test_install_valid() { - use rustc::metadata::filesearch; - - let sysroot = filesearch::get_rustpkg_sysroot(); - debug!("sysroot = %s", sysroot.get().to_str()); - let ctxt = fake_ctxt(); + let sysroot = test_sysroot(); + debug!("sysroot = %s", sysroot.to_str()); + let ctxt = fake_ctxt(Some(@sysroot)); let temp_pkg_id = fake_pkg(); let temp_workspace = mk_temp_workspace(&temp_pkg_id.path); // should have test, bench, lib, and main @@ -114,7 +129,7 @@ fn test_install_invalid() { use conditions::nonexistent_package::cond; use cond1 = conditions::missing_pkg_files::cond; - let ctxt = fake_ctxt(); + let ctxt = fake_ctxt(None); let pkgid = fake_pkg(); let temp_workspace = mkdtemp(&os::tmpdir(), "test").expect("couldn't create temp dir"); let mut error_occurred = false; @@ -130,3 +145,29 @@ fn test_install_invalid() { } assert!(error_occurred && error1_occurred); } + +#[test] +#[ignore(reason = "install from URL-fragment not yet implemented")] +fn test_install_url() { + let sysroot = test_sysroot(); + debug!("sysroot = %s", sysroot.to_str()); + let ctxt = fake_ctxt(Some(@sysroot)); + let temp_pkg_id = remote_pkg(); + let temp_workspace = mk_temp_workspace(&temp_pkg_id.path); + // should have test, bench, lib, and main + ctxt.install(&temp_workspace, temp_pkg_id); + // Check that all files exist + let exec = target_executable_in_workspace(temp_pkg_id, &temp_workspace); + debug!("exec = %s", exec.to_str()); + assert!(os::path_exists(&exec)); + assert!(is_rwx(&exec)); + let lib = target_library_in_workspace(temp_pkg_id, &temp_workspace); + debug!("lib = %s", lib.to_str()); + assert!(os::path_exists(&lib)); + assert!(is_rwx(&lib)); + // And that the test and bench executables aren't installed + assert!(!os::path_exists(&target_test_in_workspace(temp_pkg_id, &temp_workspace))); + let bench = target_bench_in_workspace(temp_pkg_id, &temp_workspace); + debug!("bench = %s", bench.to_str()); + assert!(!os::path_exists(&bench)); +} \ No newline at end of file diff --git a/src/librustpkg/util.rs b/src/librustpkg/util.rs index 1b3d72bf6aa64..0762fa4ad7fd3 100644 --- a/src/librustpkg/util.rs +++ b/src/librustpkg/util.rs @@ -435,7 +435,7 @@ pub fn add_pkg(pkg: &Pkg) -> bool { } // FIXME (#4432): Use workcache to only compile when needed -pub fn compile_input(sysroot: Option, +pub fn compile_input(sysroot: Option<@Path>, pkg_id: PkgId, in_file: &Path, out_dir: &Path, @@ -474,6 +474,7 @@ pub fn compile_input(sysroot: Option, out_file.to_str()); debug!("flags: %s", str::connect(flags, ~" ")); debug!("cfgs: %s", str::connect(cfgs, ~" ")); + debug!("compile_input's sysroot = %?", sysroot); let matches = getopts(~[~"-Z", ~"time-passes"] + if building_library { ~[~"--lib"] } @@ -587,7 +588,7 @@ fn add_attrs(c: ast::crate, new_attrs: ~[attribute]) -> @ast::crate { // Called by build_crates // FIXME (#4432): Use workcache to only compile when needed -pub fn compile_crate(sysroot: Option, pkg_id: PkgId, +pub fn compile_crate(sysroot: Option<@Path>, pkg_id: PkgId, crate: &Path, dir: &Path, flags: ~[~str], cfgs: ~[~str], opt: bool, test: bool, crate_type: crate_type) -> bool { From 5fb5a94118399e50c50f25586266c317ee5ba69b Mon Sep 17 00:00:00 2001 From: Tim Chevalier Date: Fri, 3 May 2013 15:47:32 -0700 Subject: [PATCH 184/410] core: Warning police --- src/libcore/task/mod.rs | 2 +- src/libcore/unstable/lang.rs | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/libcore/task/mod.rs b/src/libcore/task/mod.rs index ebf2494c8ee5b..fd695c16ea7cb 100644 --- a/src/libcore/task/mod.rs +++ b/src/libcore/task/mod.rs @@ -39,7 +39,7 @@ use result::Result; use comm::{stream, Chan, GenericChan, GenericPort, Port}; use prelude::*; use result; -use task::rt::{task_id, sched_id, rust_task}; +use task::rt::{task_id, sched_id}; use util; use util::replace; use unstable::finally::Finally; diff --git a/src/libcore/unstable/lang.rs b/src/libcore/unstable/lang.rs index a8a0d40db1f62..7cd218639c0a6 100644 --- a/src/libcore/unstable/lang.rs +++ b/src/libcore/unstable/lang.rs @@ -17,7 +17,9 @@ use str; use sys; use unstable::exchange_alloc; use cast::transmute; +#[cfg(not(stage0))] use rt::{context, OldTaskContext}; +#[cfg(not(stage0))] use rt::local_services::borrow_local_services; #[allow(non_camel_case_types)] From 18bf9bd55aa87d3da19e343241d1171414e2fc92 Mon Sep 17 00:00:00 2001 From: Tim Chevalier Date: Fri, 3 May 2013 15:57:18 -0700 Subject: [PATCH 185/410] std: Warning police --- src/libstd/arena.rs | 3 +-- src/libstd/future.rs | 2 +- src/libstd/net_tcp.rs | 2 -- src/libstd/net_url.rs | 2 -- src/libstd/workcache.rs | 4 +--- 5 files changed, 3 insertions(+), 10 deletions(-) diff --git a/src/libstd/arena.rs b/src/libstd/arena.rs index 0e9b2ed3da89c..67b5e5e654ad0 100644 --- a/src/libstd/arena.rs +++ b/src/libstd/arena.rs @@ -33,7 +33,6 @@ // to waste time running the destructors of POD. use list::{MutList, MutCons, MutNil}; -use list; use core::at_vec; use core::cast::{transmute, transmute_mut_region}; @@ -79,7 +78,7 @@ struct Chunk { } pub struct Arena { - // The head is seperated out from the list as a unbenchmarked + // The head is separated out from the list as a unbenchmarked // microoptimization, to avoid needing to case on the list to // access the head. priv head: Chunk, diff --git a/src/libstd/future.rs b/src/libstd/future.rs index f59abfa81ca10..a0312849a35cb 100644 --- a/src/libstd/future.rs +++ b/src/libstd/future.rs @@ -23,7 +23,7 @@ use core::cast; use core::cell::Cell; -use core::comm::{ChanOne, PortOne, oneshot, send_one}; +use core::comm::{PortOne, oneshot, send_one}; use core::pipes::recv; use core::task; diff --git a/src/libstd/net_tcp.rs b/src/libstd/net_tcp.rs index 764152d6812c5..6278db617c7da 100644 --- a/src/libstd/net_tcp.rs +++ b/src/libstd/net_tcp.rs @@ -11,8 +11,6 @@ //! High-level interface to libuv's TCP functionality // FIXME #4425: Need FFI fixes -#[allow(deprecated_mode)]; - use future; use future_spawn = future::spawn; use ip = net_ip; diff --git a/src/libstd/net_url.rs b/src/libstd/net_url.rs index 21e1733cc3075..ba3fd69e344c2 100644 --- a/src/libstd/net_url.rs +++ b/src/libstd/net_url.rs @@ -10,8 +10,6 @@ //! Types/fns concerning URLs (see RFC 3986) -#[allow(deprecated_mode)]; - use core::cmp::Eq; use core::io::{Reader, ReaderUtil}; use core::io; diff --git a/src/libstd/workcache.rs b/src/libstd/workcache.rs index 2cdf36c71c79f..f44d143004ede 100644 --- a/src/libstd/workcache.rs +++ b/src/libstd/workcache.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#[allow(deprecated_mode)]; - use json; use sha1; use serialize::{Encoder, Encodable, Decoder, Decodable}; @@ -17,7 +15,7 @@ use sort; use core::cell::Cell; use core::cmp; -use core::comm::{ChanOne, PortOne, oneshot, send_one}; +use core::comm::{PortOne, oneshot, send_one}; use core::either::{Either, Left, Right}; use core::hashmap::HashMap; use core::io; From 1a5f11a11b1b12f74fdb9e81b6c428901913246f Mon Sep 17 00:00:00 2001 From: Tim Chevalier Date: Fri, 3 May 2013 16:20:24 -0700 Subject: [PATCH 186/410] syntax: Warning police --- src/libsyntax/parse/parser.rs | 6 +++--- src/libsyntax/syntax.rc | 1 - 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 5ae101a567cc2..a6528160398e8 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -932,8 +932,8 @@ pub impl Parser { loop { match *self.token { token::MOD_SEP => { - match self.look_ahead(1u) { - token::IDENT(id,_) => { + match self.look_ahead(1) { + token::IDENT(*) => { self.bump(); ids.push(self.parse_ident()); } @@ -3693,7 +3693,7 @@ pub impl Parser { items: _, foreign_items: foreign_items } = self.parse_foreign_items(first_item_attrs, true); - let mut initial_attrs = attrs_remaining; + let _initial_attrs = attrs_remaining; assert!(*self.token == token::RBRACE); ast::foreign_mod { sort: sort, diff --git a/src/libsyntax/syntax.rc b/src/libsyntax/syntax.rc index a401d9eb8ace7..cea3b20e97e7d 100644 --- a/src/libsyntax/syntax.rc +++ b/src/libsyntax/syntax.rc @@ -22,7 +22,6 @@ #[allow(vecs_implicitly_copyable)]; #[allow(non_camel_case_types)]; -#[deny(deprecated_mode)]; #[deny(deprecated_pattern)]; extern mod std(vers = "0.7-pre"); From 2df8799f766c3a4871fe12761843ef9a5bc83659 Mon Sep 17 00:00:00 2001 From: Tim Chevalier Date: Fri, 3 May 2013 16:20:29 -0700 Subject: [PATCH 187/410] rustc: Warning police --- src/librustc/metadata/loader.rs | 2 +- src/librustc/middle/trans/base.rs | 14 ++++++-------- src/librustc/middle/ty.rs | 2 +- src/librustc/rustc.rc | 1 - 4 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/librustc/metadata/loader.rs b/src/librustc/metadata/loader.rs index d2982e58038dd..193f6fc8f0a3b 100644 --- a/src/librustc/metadata/loader.rs +++ b/src/librustc/metadata/loader.rs @@ -196,7 +196,7 @@ fn get_metadata_section(os: os, while llvm::LLVMIsSectionIteratorAtEnd(of.llof, si.llsi) == False { let name_buf = llvm::LLVMGetSectionName(si.llsi); let name = unsafe { str::raw::from_c_str(name_buf) }; - debug!("get_matadata_section: name %s", name); + debug!("get_metadata_section: name %s", name); if name == read_meta_section_name(os) { let cbuf = llvm::LLVMGetSectionContents(si.llsi); let csz = llvm::LLVMGetSectionSize(si.llsi) as uint; diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs index b5029ee6bd7d1..b8ab360b9e4e7 100644 --- a/src/librustc/middle/trans/base.rs +++ b/src/librustc/middle/trans/base.rs @@ -2096,8 +2096,7 @@ pub fn trans_tuple_struct(ccx: @CrateContext, } pub fn trans_enum_def(ccx: @CrateContext, enum_definition: &ast::enum_def, - id: ast::node_id, - path: @ast_map::path, vi: @~[ty::VariantInfo], + id: ast::node_id, vi: @~[ty::VariantInfo], i: &mut uint) { for vec::each(enum_definition.variants) |variant| { let disr_val = vi[*i].disr_val; @@ -2172,8 +2171,7 @@ pub fn trans_item(ccx: @CrateContext, item: &ast::item) { if !generics.is_type_parameterized() { let vi = ty::enum_variants(ccx.tcx, local_def(item.id)); let mut i = 0; - trans_enum_def(ccx, enum_definition, item.id, - path, vi, &mut i); + trans_enum_def(ccx, enum_definition, item.id, vi, &mut i); } } ast::item_const(_, expr) => consts::trans_const(ccx, expr, item.id), @@ -2430,13 +2428,13 @@ pub fn get_item_val(ccx: @CrateContext, id: ast::node_id) -> ValueRef { Some(&v) => v, None => { let mut exprt = false; - let val = match *ccx.tcx.items.get(&id) { + let val = match *tcx.items.get(&id) { ast_map::node_item(i, pth) => { let my_path = vec::append(/*bad*/copy *pth, ~[path_name(i.ident)]); match i.node { ast::item_const(_, expr) => { - let typ = ty::node_id_to_type(ccx.tcx, i.id); + let typ = ty::node_id_to_type(tcx, i.id); let s = mangle_exported_name(ccx, my_path, typ); // We need the translated value here, because for enums the // LLVM type is not fully determined by the Rust type. @@ -2495,7 +2493,7 @@ pub fn get_item_val(ccx: @CrateContext, id: ast::node_id) -> ValueRef { ni.attrs) } ast::foreign_item_const(*) => { - let typ = ty::node_id_to_type(ccx.tcx, ni.id); + let typ = ty::node_id_to_type(tcx, ni.id); let ident = ccx.sess.parse_sess.interner.get(ni.ident); let g = do str::as_c_str(*ident) |buf| { unsafe { @@ -2536,7 +2534,7 @@ pub fn get_item_val(ccx: @CrateContext, id: ast::node_id) -> ValueRef { // Only register the constructor if this is a tuple-like struct. match struct_def.ctor_id { None => { - ccx.tcx.sess.bug(~"attempt to register a constructor of \ + tcx.sess.bug(~"attempt to register a constructor of \ a non-tuple-like struct") } Some(ctor_id) => { diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index 411c953434311..abf82c511e551 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -33,7 +33,7 @@ use core::to_bytes; use core::hashmap::{HashMap, HashSet}; use std::smallintmap::SmallIntMap; use syntax::ast::*; -use syntax::ast_util::{is_local, local_def}; +use syntax::ast_util::is_local; use syntax::ast_util; use syntax::attr; use syntax::codemap::span; diff --git a/src/librustc/rustc.rc b/src/librustc/rustc.rc index adb1c2fcc4171..7a7dcbb8bfd8d 100644 --- a/src/librustc/rustc.rc +++ b/src/librustc/rustc.rc @@ -20,7 +20,6 @@ #[allow(non_implicitly_copyable_typarams)]; #[allow(non_camel_case_types)]; #[deny(deprecated_pattern)]; -#[deny(deprecated_mode)]; extern mod std(vers = "0.7-pre"); extern mod syntax(vers = "0.7-pre"); From 86efd97a10fda1f81f5bead0de36e3343a9faa0e Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Fri, 3 May 2013 19:25:04 -0400 Subject: [PATCH 188/410] add gitattributes and fix whitespace issues --- .gitattributes | 9 +++++ COPYRIGHT | 1 - RELEASES.txt | 6 +-- doc/README | 6 +-- doc/rust.md | 1 - doc/tutorial-macros.md | 1 - doc/tutorial-tasks.md | 1 - doc/tutorial.md | 8 ++-- doc/version_info.html.template | 1 - mk/platform.mk | 6 +-- mk/rt.mk | 12 +++--- mk/stage0.mk | 6 +-- mk/tests.mk | 5 +-- src/etc/check-links.pl | 5 +-- src/etc/gedit/readme.txt | 1 - .../language-specs/rust.lang | 5 +-- src/etc/gedit/share/mime/packages/rust.xml | 2 +- src/etc/indenter | 1 - src/etc/latest-unix-snaps.py | 2 - src/etc/libc.c | 1 - src/etc/licenseck.py | 1 - src/etc/local_stage0.sh | 4 +- src/etc/mirror-all-snapshots.py | 3 -- src/etc/monodebug.pl | 1 - src/etc/sugarise-doc-comments.py | 1 - src/etc/tidy.py | 1 - src/etc/x86.supp | 4 +- src/libcore/cleanup.rs | 1 - src/libcore/logging.rs | 1 - src/libcore/owned.rs | 1 - src/libcore/rt/context.rs | 1 - src/libcore/rt/io/comm_adapters.rs | 1 - src/libcore/rt/io/net/ip.rs | 1 - src/libcore/rt/io/net/udp.rs | 1 - src/libcore/rt/io/net/unix.rs | 1 - src/libcore/rt/local_heap.rs | 1 - src/libcore/rt/sched/local_sched.rs | 1 - src/libcore/stackwalk.rs | 1 - src/libcore/unicode.rs | 1 - src/libcore/unstable/exchange_alloc.rs | 1 - src/libcore/unstable/weak_task.rs | 1 - src/librustc/metadata/common.rs | 1 - src/librustc/metadata/mod.rs | 1 - src/librustc/middle/borrowck/check_loans.rs | 1 - src/librustc/middle/borrowck/gather_loans.rs | 1 - src/librustc/middle/borrowck/loan.rs | 1 - src/librustc/middle/lang_items.rs | 1 - src/librustc/middle/mem_categorization.rs | 1 - src/librustc/middle/pat_util.rs | 1 - src/librustc/middle/privacy.rs | 1 - src/librustc/middle/region.rs | 1 - src/librustc/middle/subst.rs | 1 - src/librustc/middle/trans/cabi.rs | 1 - src/librustc/middle/trans/callee.rs | 1 - src/librustc/middle/trans/closure.rs | 1 - src/librustc/middle/trans/controlflow.rs | 1 - src/librustc/middle/trans/datum.rs | 1 - src/librustc/middle/trans/inline.rs | 1 - src/librustc/middle/trans/machine.rs | 1 - src/librustc/middle/trans/macros.rs | 1 - src/librustc/middle/trans/reachable.rs | 1 - src/librustc/middle/trans/reflect.rs | 1 - src/librustc/middle/trans/shape.rs | 1 - src/librustc/middle/trans/type_use.rs | 1 - src/librustc/middle/typeck/check/_match.rs | 1 - src/librustc/middle/typeck/check/demand.rs | 2 - src/librustc/middle/typeck/check/vtable.rs | 2 - src/librustc/middle/typeck/coherence.rs | 1 - src/librustc/middle/typeck/infer/combine.rs | 1 - src/librustc/middle/typeck/infer/glb.rs | 1 - src/librustc/middle/typeck/infer/macros.rs | 1 - .../middle/typeck/infer/region_inference.rs | 1 - src/librustc/middle/typeck/infer/resolve.rs | 1 - src/librustc/middle/typeck/infer/sub.rs | 1 - src/librustc/middle/typeck/infer/unify.rs | 2 - src/librustdoc/path_pass.rs | 1 - src/librustpkg/testsuite/pass/commands.txt | 1 - .../src/deeply/nested/path/foo/src/main.rs | 1 - src/libstd/num/bigint.rs | 1 - src/libstd/serialize.rs | 1 - src/libstd/task_pool.rs | 1 - src/libsyntax/ext/pipes/check.rs | 1 - src/libsyntax/ext/pipes/liveness.rs | 1 - src/libsyntax/ext/pipes/mod.rs | 1 - src/libsyntax/ext/pipes/proto.rs | 1 - src/libsyntax/ext/quote.rs | 1 - src/libsyntax/parse/obsolete.rs | 1 - src/libsyntax/syntax.rc | 1 - src/rt/arch/arm/_context.S | 2 - src/rt/arch/arm/gpr.cpp | 1 - src/rt/arch/arm/gpr.h | 1 - src/rt/arch/arm/morestack.S | 4 +- src/rt/arch/arm/record_sp.S | 1 - src/rt/arch/arm/regs.h | 2 - src/rt/arch/i386/_context.S | 2 - src/rt/arch/i386/gpr.cpp | 1 - src/rt/arch/i386/gpr.h | 1 - src/rt/arch/i386/morestack.S | 3 +- src/rt/arch/mips/gpr.h | 1 - src/rt/arch/x86_64/_context.S | 1 - src/rt/arch/x86_64/gpr.cpp | 1 - src/rt/arch/x86_64/gpr.h | 1 - src/rt/arch/x86_64/regs.h | 2 - src/rt/isaac/rand.h | 2 - src/rt/rust_abi.cpp | 1 - src/rt/rust_abi.h | 1 - src/rt/rust_android_dummy.h | 1 - src/rt/rust_debug.cpp | 1 - src/rt/rust_debug.h | 1 - src/rt/rust_gpr_base.h | 1 - src/rustllvm/README | 1 - src/rustllvm/RustWrapper.cpp | 22 +++++------ src/snapshots.txt | 2 +- .../auxiliary/anon_trait_static_method_lib.rs | 1 - src/test/auxiliary/cci_class_2.rs | 1 - src/test/auxiliary/cci_class_6.rs | 1 - src/test/auxiliary/cci_class_cast.rs | 2 - src/test/auxiliary/cci_no_inline_lib.rs | 1 - src/test/auxiliary/explicit_self_xcrate.rs | 2 - src/test/auxiliary/extern_mod_ordering_lib.rs | 1 - src/test/auxiliary/foreign_lib.rs | 1 - src/test/auxiliary/impl_privacy_xc_1.rs | 1 - src/test/auxiliary/impl_privacy_xc_2.rs | 2 - src/test/auxiliary/issue-2414-a.rs | 1 - src/test/auxiliary/issue-2414-b.rs | 1 - src/test/auxiliary/issue-2526.rs | 1 - src/test/auxiliary/issue_2316_b.rs | 2 - src/test/auxiliary/issue_3136_a.rs | 5 +-- src/test/auxiliary/issue_3882.rs | 2 +- src/test/auxiliary/moves_based_on_type_lib.rs | 1 - src/test/auxiliary/newtype_struct_xc.rs | 1 - src/test/auxiliary/pub_use_mods_xcrate.rs | 1 - src/test/auxiliary/static_fn_inline_xc_aux.rs | 1 - .../struct_destructuring_cross_crate.rs | 1 - .../trait_inheritance_auto_xc_2_aux.rs | 2 - .../trait_inheritance_overloading_xc.rs | 1 - src/test/auxiliary/xc_private_method_lib.rs | 1 - src/test/bench/msgsend-pipes-shared.rs | 2 +- src/test/bench/msgsend-pipes.rs | 2 +- src/test/bench/msgsend-ring-mutex-arcs.rs | 2 +- src/test/bench/msgsend-ring-pipes.rs | 2 +- src/test/bench/msgsend-ring-rw-arcs.rs | 2 +- src/test/bench/pingpong.rs | 2 +- src/test/bench/shootout-chameneos-redux.rs | 1 - src/test/bench/shootout-fannkuch-redux.rs | 1 - src/test/bench/shootout-fasta-redux.rs | 1 - src/test/bench/shootout-k-nucleotide-pipes.rs | 1 - src/test/bench/shootout-k-nucleotide.rs | 3 +- src/test/bench/shootout-mandelbrot.rs | 1 - src/test/bench/shootout-pidigits.rs | 1 - src/test/bench/shootout-reverse-complement.rs | 1 - src/test/bench/sudoku.rs | 1 - src/test/compile-fail/alt-tag-nullary.rs | 1 - src/test/compile-fail/alt-tag-unary.rs | 1 - .../compile-fail/auto-ref-borrowck-failure.rs | 1 - src/test/compile-fail/bogus-tag.rs | 1 - .../compile-fail/borrowck-assign-comp-idx.rs | 1 - src/test/compile-fail/borrowck-assign-comp.rs | 1 - ...borrowck-call-method-from-mut-aliasable.rs | 1 - ...borrowck-loan-local-as-both-mut-and-imm.rs | 2 +- .../borrowck-loan-rcvr-overloaded-op.rs | 3 +- src/test/compile-fail/borrowck-loan-rcvr.rs | 1 - .../compile-fail/borrowck-mut-boxed-vec.rs | 1 - .../compile-fail/borrowck-ref-into-rvalue.rs | 5 +-- .../compile-fail/borrowck-uniq-via-box.rs | 1 - .../borrowck-vec-pattern-loan-from-mut.rs | 1 - .../borrowck-vec-pattern-nesting.rs | 1 - .../borrowck-wg-borrow-mut-to-imm-fail-2.rs | 1 - .../borrowck-wg-borrow-mut-to-imm-fail-3.rs | 1 - .../borrowck-wg-borrow-mut-to-imm-fail.rs | 1 - .../compile-fail/borrowck-wg-move-base-2.rs | 2 - .../compile-fail/by-move-pattern-binding.rs | 1 - src/test/compile-fail/dead-code-ret.rs | 1 - src/test/compile-fail/does-nothing.rs | 1 - src/test/compile-fail/drop-on-non-struct.rs | 2 - .../compile-fail/explicit-call-to-dtor.rs | 1 - .../explicit-call-to-supertrait-dtor.rs | 2 - .../float-literal-inference-restrictions.rs | 1 - .../compile-fail/foreign-unsafe-fn-called.rs | 1 - src/test/compile-fail/foreign-unsafe-fn.rs | 2 - src/test/compile-fail/issue-1451.rs | 1 - src/test/compile-fail/issue-2951.rs | 1 - src/test/compile-fail/issue-3044.rs | 1 - src/test/compile-fail/issue-3096-2.rs | 2 +- src/test/compile-fail/issue-3991.rs | 4 +- src/test/compile-fail/issue-4265.rs | 4 +- src/test/compile-fail/issue-4366.rs | 1 - src/test/compile-fail/issue-4968.rs | 1 - .../compile-fail/kindck-destructor-owned.rs | 1 - src/test/compile-fail/lint-default-methods.rs | 1 - src/test/compile-fail/lint-type-limits.rs | 1 - src/test/compile-fail/liveness-if-no-else.rs | 4 +- src/test/compile-fail/liveness-return.rs | 4 +- .../liveness-uninit-after-item.rs | 1 - src/test/compile-fail/liveness-uninit.rs | 4 +- .../compile-fail/macro-with-seps-err-msg.rs | 2 - .../compile-fail/missing-derivable-attr.rs | 1 - src/test/compile-fail/missing-return.rs | 1 - .../moves-based-on-type-block-bad.rs | 1 - .../moves-based-on-type-capture-clause-bad.rs | 1 - ...s-based-on-type-cyclic-types-issue-4821.rs | 1 - src/test/compile-fail/no-capture-arc.rs | 2 +- src/test/compile-fail/noexporttypeexe.rs | 1 - .../non-exhaustive-match-nested.rs | 1 - src/test/compile-fail/once-fn-subtyping.rs | 1 - src/test/compile-fail/private-impl-method.rs | 1 - src/test/compile-fail/private-item-simple.rs | 1 - .../compile-fail/private-method-inherited.rs | 1 - .../compile-fail/private-struct-field-ctor.rs | 1 - .../private-struct-field-pattern.rs | 1 - src/test/compile-fail/qquote-1.rs | 1 - src/test/compile-fail/qquote-2.rs | 1 - .../refutable-pattern-in-fn-arg.rs | 1 - src/test/compile-fail/regions-addr-of-self.rs | 1 - .../regions-infer-borrow-scope-too-big.rs | 1 - .../regions-infer-borrow-scope-within-loop.rs | 4 +- src/test/compile-fail/regions-ret.rs | 1 - .../compile-fail/repeat-to-run-dtor-twice.rs | 1 - .../compile-fail/static-method-privacy.rs | 1 - src/test/compile-fail/static-region-bound.rs | 1 - .../struct-like-enum-nonexhaustive.rs | 2 - src/test/compile-fail/super-at-top-level.rs | 2 - .../trait-impl-method-mismatch.rs | 4 -- .../trait-inheritance-missing-requirement.rs | 1 - .../tuple-struct-nonexhaustive.rs | 2 - .../tutorial-suffix-inference-test.rs | 4 +- .../compile-fail/unique-object-noncopyable.rs | 1 - .../use-after-move-based-on-type.rs | 1 - .../use-after-move-self-based-on-type.rs | 1 - src/test/compile-fail/use-after-move-self.rs | 1 - src/test/compile-fail/view-items-at-top.rs | 1 - src/test/compile-fail/while-type-error.rs | 1 - src/test/compile-fail/xc-private-method.rs | 1 - src/test/pretty/doc-comments.rs | 2 +- src/test/run-fail/assert-as-macro.rs | 1 - src/test/run-fail/borrowck-wg-fail-3.rs | 1 - src/test/run-fail/borrowck-wg-fail.rs | 1 - src/test/run-fail/unwind-resource-fail3.rs | 2 +- src/test/run-pass-fulldeps/qquote.rs | 1 - src/test/run-pass-fulldeps/quote-tokens.rs | 1 - src/test/run-pass/anon-trait-static-method.rs | 1 - .../run-pass/anon_trait_static_method_exe.rs | 3 -- src/test/run-pass/auto-ref-newtype.rs | 1 - src/test/run-pass/auto-ref.rs | 1 - .../autoderef-and-borrow-method-receiver.rs | 1 - src/test/run-pass/bare-static-string.rs | 1 - src/test/run-pass/binops.rs | 2 +- src/test/run-pass/block-arg-in-parentheses.rs | 1 - .../run-pass/borrow-by-val-method-receiver.rs | 1 - src/test/run-pass/borrowck-wg-simple.rs | 1 - src/test/run-pass/boxed-trait-with-vstore.rs | 1 - src/test/run-pass/break.rs | 6 +-- .../class-cast-to-trait-cross-crate-2.rs | 1 - .../class-impl-parameterized-trait.rs | 2 +- src/test/run-pass/cleanup-copy-mode.rs | 1 - src/test/run-pass/clone-with-exterior.rs | 2 +- src/test/run-pass/conditional-compile.rs | 2 +- src/test/run-pass/const-enum-vec-index.rs | 2 +- src/test/run-pass/const-enum-vec-ptr.rs | 2 +- src/test/run-pass/const-enum-vector.rs | 2 +- .../const-expr-in-fixed-length-vec.rs | 2 +- src/test/run-pass/const-expr-in-vec-repeat.rs | 2 +- src/test/run-pass/const-tuple-struct.rs | 1 - src/test/run-pass/const-unit-struct.rs | 1 - src/test/run-pass/const-vec-syntax.rs | 1 - src/test/run-pass/consts-in-patterns.rs | 1 - src/test/run-pass/cycle-collection.rs | 1 - src/test/run-pass/default-method-simple.rs | 1 - src/test/run-pass/deriving-clone-enum.rs | 1 - .../run-pass/deriving-clone-generic-enum.rs | 1 - .../run-pass/deriving-clone-generic-struct.rs | 1 - .../deriving-clone-generic-tuple-struct.rs | 1 - .../run-pass/deriving-clone-tuple-struct.rs | 1 - .../run-pass/deriving-via-extension-c-enum.rs | 1 - .../run-pass/deriving-via-extension-enum.rs | 1 - .../deriving-via-extension-iter-bytes-enum.rs | 1 - ...eriving-via-extension-iter-bytes-struct.rs | 2 - ...-via-extension-struct-like-enum-variant.rs | 1 - .../run-pass/deriving-via-extension-struct.rs | 1 - .../deriving-via-extension-type-params.rs | 1 - src/test/run-pass/drop-trait-generic.rs | 1 - src/test/run-pass/drop-trait.rs | 1 - .../run-pass/enum-discrim-range-overflow.rs | 24 ++++++------ src/test/run-pass/enum-disr-val-pretty.rs | 1 - src/test/run-pass/enum-export-inheritance.rs | 1 - .../enum-nullable-simplifycfg-misopt.rs | 6 +-- src/test/run-pass/explicit-self-generic.rs | 1 - .../run-pass/explicit-self-objects-box.rs | 2 - .../run-pass/explicit-self-objects-simple.rs | 2 - .../run-pass/explicit-self-objects-uniq.rs | 2 - src/test/run-pass/explicit_self_xcrate_exe.rs | 1 - src/test/run-pass/expr-repeat-vstore.rs | 1 - src/test/run-pass/extern-mod-abi.rs | 1 - src/test/run-pass/extern-mod-ordering-exe.rs | 1 - src/test/run-pass/extern-mod-syntax.rs | 1 - src/test/run-pass/extern-pass-TwoU16s.rs | 1 - src/test/run-pass/extern-pass-TwoU32s.rs | 1 - src/test/run-pass/extern-pass-TwoU64s-ref.rs | 1 - src/test/run-pass/extern-pass-TwoU64s.rs | 1 - src/test/run-pass/extern-pass-TwoU8s.rs | 1 - src/test/run-pass/extern-pass-char.rs | 1 - src/test/run-pass/extern-pass-double.rs | 1 - src/test/run-pass/extern-pass-u32.rs | 1 - src/test/run-pass/extern-pass-u64.rs | 1 - src/test/run-pass/extern-pub.rs | 2 - src/test/run-pass/fat-arrow-alt.rs | 1 - src/test/run-pass/fixed_length_copy.rs | 2 +- src/test/run-pass/float-literal-inference.rs | 1 - .../run-pass/fn-pattern-expected-type-2.rs | 1 - src/test/run-pass/fn-pattern-expected-type.rs | 1 - src/test/run-pass/foreign-mod-unused-const.rs | 1 - src/test/run-pass/functional-struct-update.rs | 1 - src/test/run-pass/generic-ivec-leak.rs | 1 - src/test/run-pass/generic-ivec.rs | 1 - src/test/run-pass/generic-newtype-struct.rs | 1 - src/test/run-pass/generic-object.rs | 1 - src/test/run-pass/global-scope.rs | 1 - src/test/run-pass/impl-privacy-xc-1.rs | 1 - src/test/run-pass/impl-privacy-xc-2.rs | 1 - src/test/run-pass/infinite-loops.rs | 4 +- src/test/run-pass/instantiable.rs | 1 - src/test/run-pass/int-conversion-coherence.rs | 1 - src/test/run-pass/intrinsics-integer.rs | 2 +- src/test/run-pass/intrinsics-math.rs | 4 +- src/test/run-pass/issue-1516.rs | 1 - src/test/run-pass/issue-2185.rs | 4 +- src/test/run-pass/issue-2216.rs | 2 +- src/test/run-pass/issue-2526-a.rs | 1 - src/test/run-pass/issue-2734.rs | 4 +- src/test/run-pass/issue-2904.rs | 2 +- src/test/run-pass/issue-3176.rs | 4 +- src/test/run-pass/issue-3250.rs | 2 - src/test/run-pass/issue-3429.rs | 1 - src/test/run-pass/issue-3461.rs | 2 +- src/test/run-pass/issue-3556.rs | 8 ++-- src/test/run-pass/issue-3563-3.rs | 5 +-- src/test/run-pass/issue-3609.rs | 1 - src/test/run-pass/issue-3860.rs | 2 +- src/test/run-pass/issue-3895.rs | 2 +- src/test/run-pass/issue-3979-2.rs | 1 - src/test/run-pass/issue-4241.rs | 2 +- src/test/run-pass/issue-4875.rs | 1 - src/test/run-pass/issue-868.rs | 1 - src/test/run-pass/issue_3136_b.rs | 1 - src/test/run-pass/ivec-add.rs | 1 - src/test/run-pass/ivec-pass-by-value.rs | 1 - src/test/run-pass/labeled-break.rs | 1 - src/test/run-pass/let-assignability.rs | 1 - .../liveness-assign-imm-local-after-loop.rs | 2 +- src/test/run-pass/log-linearized.rs | 1 - src/test/run-pass/max-min-classes.rs | 1 - .../module-qualified-struct-destructure.rs | 1 - src/test/run-pass/move-self.rs | 1 - .../moves-based-on-type-capture-clause.rs | 1 - src/test/run-pass/multiple-trait-bounds.rs | 1 - src/test/run-pass/mut-vstore-expr.rs | 1 - src/test/run-pass/nested-class.rs | 22 +++++------ src/test/run-pass/new-impl-syntax.rs | 1 - src/test/run-pass/new-import-syntax.rs | 1 - src/test/run-pass/new-style-constants.rs | 1 - .../run-pass/new-style-fixed-length-vec.rs | 3 -- .../run-pass/new-vstore-mut-box-syntax.rs | 1 - src/test/run-pass/newtype-struct-with-dtor.rs | 2 - src/test/run-pass/newtype-struct-xc-2.rs | 1 - src/test/run-pass/newtype-struct-xc.rs | 1 - .../nullable-pointer-iotareduction.rs | 2 +- src/test/run-pass/one-tuple.rs | 1 - src/test/run-pass/pattern-in-closure.rs | 1 - src/test/run-pass/pipe-detect-term.rs | 4 +- src/test/run-pass/pipe-pingpong-bounded.rs | 2 +- src/test/run-pass/pipe-pingpong-proto.rs | 2 +- src/test/run-pass/pipe-select.rs | 6 +-- src/test/run-pass/pipe-sleep.rs | 2 +- src/test/run-pass/pub-use-xcrate.rs | 1 - src/test/run-pass/pub_use_mods_xcrate_exe.rs | 1 - src/test/run-pass/reexport-star.rs | 1 - .../regions-addr-of-interior-of-unique-box.rs | 1 - src/test/run-pass/regions-addr-of-ret.rs | 1 - src/test/run-pass/regions-fn-subtyping-2.rs | 4 +- .../regions-infer-borrow-scope-addr-of.rs | 16 ++++---- .../regions-infer-borrow-scope-view.rs | 1 - ...gions-infer-borrow-scope-within-loop-ok.rs | 2 +- .../run-pass/regions-infer-borrow-scope.rs | 1 - src/test/run-pass/regions-mock-trans-impls.rs | 1 - src/test/run-pass/regions-mock-trans.rs | 1 - src/test/run-pass/regions-self-impls.rs | 1 - src/test/run-pass/regions-self-in-enums.rs | 1 - src/test/run-pass/regions-simple.rs | 2 - src/test/run-pass/repeated-vector-syntax.rs | 1 - src/test/run-pass/resource-cycle.rs | 4 +- src/test/run-pass/resource-cycle3.rs | 4 +- src/test/run-pass/self-type-param.rs | 1 - src/test/run-pass/static-methods-in-traits.rs | 37 +++++++++---------- src/test/run-pass/struct-deref.rs | 1 - .../run-pass/struct-field-assignability.rs | 1 - .../run-pass/struct-like-variant-construct.rs | 1 - .../run-pass/struct-like-variant-match.rs | 1 - src/test/run-pass/struct-pattern-matching.rs | 3 -- src/test/run-pass/super.rs | 1 - src/test/run-pass/tag-disr-val-shape.rs | 1 - src/test/run-pass/tag-variant-disr-val.rs | 2 - src/test/run-pass/threads.rs | 1 - .../run-pass/trait-composition-trivial.rs | 2 - .../run-pass/trait-inheritance-auto-xc-2.rs | 1 - .../run-pass/trait-inheritance-auto-xc.rs | 1 - src/test/run-pass/trait-inheritance-auto.rs | 1 - .../trait-inheritance-call-bound-inherited.rs | 1 - ...trait-inheritance-call-bound-inherited2.rs | 1 - ...ritance-cast-without-call-to-supertrait.rs | 1 - src/test/run-pass/trait-inheritance-cast.rs | 1 - .../trait-inheritance-cross-trait-call-xc.rs | 1 - .../trait-inheritance-cross-trait-call.rs | 1 - .../trait-inheritance-overloading-simple.rs | 1 - .../trait-inheritance-overloading-xc-exe.rs | 1 - .../run-pass/trait-inheritance-overloading.rs | 1 - src/test/run-pass/trait-inheritance-self.rs | 1 - src/test/run-pass/trait-inheritance-simple.rs | 1 - src/test/run-pass/trait-inheritance-subst.rs | 1 - src/test/run-pass/trait-inheritance-subst2.rs | 1 - src/test/run-pass/trait-inheritance2.rs | 1 - .../run-pass/trait-region-pointer-simple.rs | 1 - .../trait-static-method-overwriting.rs | 6 +-- src/test/run-pass/traits.rs | 1 - src/test/run-pass/tuple-struct-construct.rs | 1 - .../run-pass/tuple-struct-destructuring.rs | 1 - src/test/run-pass/tuple-struct-matching.rs | 1 - src/test/run-pass/tuple-struct-trivial.rs | 1 - .../run-pass/typeclasses-eq-example-static.rs | 2 +- src/test/run-pass/typeclasses-eq-example.rs | 2 +- src/test/run-pass/unique-object.rs | 1 - src/test/run-pass/unit-like-struct.rs | 1 - .../run-pass/unsafe-pointer-assignability.rs | 3 -- src/test/run-pass/vec-fixed-length.rs | 1 - 433 files changed, 196 insertions(+), 597 deletions(-) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000000..52370e4a509b0 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,9 @@ +[attr]rust text eol=lf whitespace=tab-in-indent,trailing-space,tabwidth=4 + +* text=auto +*.cpp rust +*.h rust +*.rs rust +src/rt/msvc/* -whitespace +src/rt/vg/* -whitespace +src/rt/linenoise/* -whitespace diff --git a/COPYRIGHT b/COPYRIGHT index 2315c6fe3cba2..ffbfadaa3391b 100644 --- a/COPYRIGHT +++ b/COPYRIGHT @@ -367,4 +367,3 @@ their own copyright notices and license terms: has chosen for the collective work, enumerated at the top of this file. The only difference is the retention of copyright itself, held by the contributor. - diff --git a/RELEASES.txt b/RELEASES.txt index 13e4e0c2039cc..fb2bbb45e7c83 100644 --- a/RELEASES.txt +++ b/RELEASES.txt @@ -250,7 +250,7 @@ Version 0.3 (July 2012) * Slices and fixed-size, interior-allocated vectors * #!-comments for lang versioning, shell execution * Destructors and iface implementation for classes; - type-parameterized classes and class methods + type-parameterized classes and class methods * 'const' type kind for types that can be used to implement shared-memory concurrency patterns @@ -261,7 +261,7 @@ Version 0.3 (July 2012) 'crust', 'native' (now 'extern'), 'cont' (now 'again') * Constructs: do-while loops ('do' repurposed), fn binding, - resources (replaced by destructors) + resources (replaced by destructors) * Compiler reorganization * Syntax-layer of compiler split into separate crate @@ -276,7 +276,7 @@ Version 0.3 (July 2012) * Extensive work on libuv interface * Much vector code moved to libraries * Syntax extensions: #line, #col, #file, #mod, #stringify, - #include, #include_str, #include_bin + #include, #include_str, #include_bin * Tool improvements * Cargo automatically resolves dependencies diff --git a/doc/README b/doc/README index 505b5383dcd80..c3bb28a9e85e9 100644 --- a/doc/README +++ b/doc/README @@ -1,6 +1,6 @@ The markdown docs are only generated by make when node is installed (use -`make doc`). If you don't have node installed you can generate them yourself. -Unfortunately there's no real standard for markdown and all the tools work +`make doc`). If you don't have node installed you can generate them yourself. +Unfortunately there's no real standard for markdown and all the tools work differently. pandoc is one that seems to work well. To generate an html version of a doc do something like: @@ -10,4 +10,4 @@ The syntax for pandoc flavored markdown can be found at: http://johnmacfarlane.net/pandoc/README.html#pandocs-markdown A nice quick reference (for non-pandoc markdown) is at: -http://kramdown.rubyforge.org/quickref.html \ No newline at end of file +http://kramdown.rubyforge.org/quickref.html diff --git a/doc/rust.md b/doc/rust.md index e23613e149ce7..ac7125be424d4 100644 --- a/doc/rust.md +++ b/doc/rust.md @@ -3351,4 +3351,3 @@ Additional specific influences can be seen from the following languages: * The typeclass system of Haskell. * The lexical identifier rule of Python. * The block syntax of Ruby. - diff --git a/doc/tutorial-macros.md b/doc/tutorial-macros.md index 24e9f4abc38e6..63fa7e06bae77 100644 --- a/doc/tutorial-macros.md +++ b/doc/tutorial-macros.md @@ -402,4 +402,3 @@ tricky. Invoking the `log_syntax!` macro can help elucidate intermediate states, invoking `trace_macros!(true)` will automatically print those intermediate states out, and passing the flag `--pretty expanded` as a command-line argument to the compiler will show the result of expansion. - diff --git a/doc/tutorial-tasks.md b/doc/tutorial-tasks.md index bed696748306e..053d9e6d98813 100644 --- a/doc/tutorial-tasks.md +++ b/doc/tutorial-tasks.md @@ -511,4 +511,3 @@ The parent task first calls `DuplexStream` to create a pair of bidirectional endpoints. It then uses `task::spawn` to create the child task, which captures one end of the communication channel. As a result, both parent and child can send and receive data to and from the other. - diff --git a/doc/tutorial.md b/doc/tutorial.md index 07eb3bc7681d7..90ae41affc9b9 100644 --- a/doc/tutorial.md +++ b/doc/tutorial.md @@ -1006,9 +1006,9 @@ let mut d = @mut 5; // mutable variable, mutable box d = @mut 15; ~~~~ -A mutable variable and an immutable variable can refer to the same box, given -that their types are compatible. Mutability of a box is a property of its type, -however, so for example a mutable handle to an immutable box cannot be +A mutable variable and an immutable variable can refer to the same box, given +that their types are compatible. Mutability of a box is a property of its type, +however, so for example a mutable handle to an immutable box cannot be assigned a reference to a mutable box. ~~~~ @@ -1041,7 +1041,7 @@ let y = x.clone(); // y is a newly allocated box let z = x; // no new memory allocated, x can no longer be used ~~~~ -Since in owned boxes mutability is a property of the owner, not the +Since in owned boxes mutability is a property of the owner, not the box, mutable boxes may become immutable when they are moved, and vice-versa. ~~~~ diff --git a/doc/version_info.html.template b/doc/version_info.html.template index 9376b29bcdf63..aa44097a337e9 100644 --- a/doc/version_info.html.template +++ b/doc/version_info.html.template @@ -7,4 +7,3 @@ - diff --git a/mk/platform.mk b/mk/platform.mk index 1e102587bf4a0..e03b7c152478f 100644 --- a/mk/platform.mk +++ b/mk/platform.mk @@ -11,7 +11,7 @@ # Create variables HOST_ containing the host part # of each target triple. For example, the triple i686-darwin-macos -# would create a variable HOST_i686-darwin-macos with the value +# would create a variable HOST_i686-darwin-macos with the value # i386. define DEF_HOST_VAR HOST_$(1) = $(subst i686,i386,$(word 1,$(subst -, ,$(1)))) @@ -276,8 +276,8 @@ CFG_GCCISH_CFLAGS_i686-pc-mingw32 := -Wall -Werror -g -march=i686 CFG_GCCISH_CXXFLAGS_i686-pc-mingw32 := -fno-rtti CFG_GCCISH_LINK_FLAGS_i686-pc-mingw32 := -shared -fPIC -g CFG_GCCISH_DEF_FLAG_i686-pc-mingw32 := -CFG_GCCISH_PRE_LIB_FLAGS_i686-pc-mingw32 := -CFG_GCCISH_POST_LIB_FLAGS_i686-pc-mingw32 := +CFG_GCCISH_PRE_LIB_FLAGS_i686-pc-mingw32 := +CFG_GCCISH_POST_LIB_FLAGS_i686-pc-mingw32 := CFG_DEF_SUFFIX_i686-pc-mingw32 := .mingw32.def CFG_INSTALL_NAME_i686-pc-mingw32 = CFG_LIBUV_LINK_FLAGS_i686-pc-mingw32 := -lWs2_32 -lpsapi -liphlpapi diff --git a/mk/rt.mk b/mk/rt.mk index c4c80b99fc085..30dda2fb276c9 100644 --- a/mk/rt.mk +++ b/mk/rt.mk @@ -1,27 +1,27 @@ # This is a procedure to define the targets for building -# the runtime. +# the runtime. # # Argument 1 is the target triple. # # This is not really the right place to explain this, but # for those of you who are not Makefile gurus, let me briefly -# cover the $ expansion system in use here, because it +# cover the $ expansion system in use here, because it # confused me for a while! The variable DEF_RUNTIME_TARGETS # will be defined once and then expanded with different # values substituted for $(1) each time it is called. -# That resulting text is then eval'd. +# That resulting text is then eval'd. # # For most variables, you could use a single $ sign. The result # is that the substitution would occur when the CALL occurs, # I believe. The problem is that the automatic variables $< and $@ # need to be expanded-per-rule. Therefore, for those variables at -# least, you need $$< and $$@ in the variable text. This way, after +# least, you need $$< and $$@ in the variable text. This way, after # the CALL substitution occurs, you will have $< and $@. This text # will then be evaluated, and all will work as you like. # # Reader beware, this explanantion could be wrong, but it seems to -# fit the experimental data (i.e., I was able to get the system -# working under these assumptions). +# fit the experimental data (i.e., I was able to get the system +# working under these assumptions). # Hack for passing flags into LIBUV, see below. LIBUV_FLAGS_i386 = -m32 -fPIC diff --git a/mk/stage0.mk b/mk/stage0.mk index 7b5cbef1d72c3..ac1b3e86ac918 100644 --- a/mk/stage0.mk +++ b/mk/stage0.mk @@ -7,16 +7,16 @@ $(HBIN0_H_$(CFG_BUILD_TRIPLE))/rustc$(X_$(CFG_BUILD_TRIPLE)): \ $(S)src/etc/get-snapshot.py $(MKFILE_DEPS) @$(call E, fetch: $@) # Note: the variable "SNAPSHOT_FILE" is generally not set, and so -# we generally only pass one argument to this script. +# we generally only pass one argument to this script. ifdef CFG_ENABLE_LOCAL_RUST $(Q)$(S)src/etc/local_stage0.sh $(CFG_BUILD_TRIPLE) $(CFG_LOCAL_RUST_ROOT) -else +else $(Q)$(CFG_PYTHON) $(S)src/etc/get-snapshot.py $(CFG_BUILD_TRIPLE) $(SNAPSHOT_FILE) ifdef CFG_ENABLE_PAX_FLAGS @$(call E, apply PaX flags: $@) @"$(CFG_PAXCTL)" -cm "$@" endif -endif +endif $(Q)touch $@ # Host libs will be extracted by the above rule diff --git a/mk/tests.mk b/mk/tests.mk index f96b7325f60d4..175e33c665411 100644 --- a/mk/tests.mk +++ b/mk/tests.mk @@ -179,9 +179,9 @@ tidy: $(Q)find $(S)src/etc -name '*.py' \ | xargs -n 10 $(CFG_PYTHON) $(S)src/etc/tidy.py $(Q)echo $(ALL_CS) \ - | xargs -n 10 $(CFG_PYTHON) $(S)src/etc/tidy.py + | xargs -n 10 $(CFG_PYTHON) $(S)src/etc/tidy.py $(Q)echo $(ALL_HS) \ - | xargs -n 10 $(CFG_PYTHON) $(S)src/etc/tidy.py + | xargs -n 10 $(CFG_PYTHON) $(S)src/etc/tidy.py endif @@ -709,4 +709,3 @@ endef $(foreach host,$(CFG_HOST_TRIPLES), \ $(eval $(call DEF_CHECK_FAST_FOR_H,$(host)))) - diff --git a/src/etc/check-links.pl b/src/etc/check-links.pl index a280ed55ba93f..6492be53d3481 100755 --- a/src/etc/check-links.pl +++ b/src/etc/check-links.pl @@ -9,7 +9,7 @@ my $i = 0; foreach $line (@lines) { $i++; - if ($line =~ m/id="([^"]+)"/) { + if ($line =~ m/id="([^"]+)"/) { $anchors->{$1} = $i; } } @@ -17,10 +17,9 @@ $i = 0; foreach $line (@lines) { $i++; - while ($line =~ m/href="#([^"]+)"/g) { + while ($line =~ m/href="#([^"]+)"/g) { if (! exists($anchors->{$1})) { print "$file:$i: $1 referenced\n"; } } } - diff --git a/src/etc/gedit/readme.txt b/src/etc/gedit/readme.txt index 735b023627662..e394f1916088f 100644 --- a/src/etc/gedit/readme.txt +++ b/src/etc/gedit/readme.txt @@ -8,4 +8,3 @@ Instructions for Ubuntu Linux 12.04+ 2) Copy the included "share" folder into "~/.local/" 3) Open a shell in "~/.local/share/" and run "update-mime-database mime" - diff --git a/src/etc/gedit/share/gtksourceview-3.0/language-specs/rust.lang b/src/etc/gedit/share/gtksourceview-3.0/language-specs/rust.lang index 0b23808b76524..a413d0a906222 100644 --- a/src/etc/gedit/share/gtksourceview-3.0/language-specs/rust.lang +++ b/src/etc/gedit/share/gtksourceview-3.0/language-specs/rust.lang @@ -123,11 +123,11 @@ mode_t ssize_t - + self - + true false @@ -261,4 +261,3 @@ - diff --git a/src/etc/gedit/share/mime/packages/rust.xml b/src/etc/gedit/share/mime/packages/rust.xml index 65168aae1d909..d75cffe960073 100644 --- a/src/etc/gedit/share/mime/packages/rust.xml +++ b/src/etc/gedit/share/mime/packages/rust.xml @@ -2,6 +2,6 @@ Rust Source - + diff --git a/src/etc/indenter b/src/etc/indenter index 017cb926981fb..1a3a446533572 100755 --- a/src/etc/indenter +++ b/src/etc/indenter @@ -14,4 +14,3 @@ while (<>) { $indent -= 1; } } - diff --git a/src/etc/latest-unix-snaps.py b/src/etc/latest-unix-snaps.py index 7a2ddba3a16aa..7cecf83716160 100755 --- a/src/etc/latest-unix-snaps.py +++ b/src/etc/latest-unix-snaps.py @@ -52,5 +52,3 @@ def download_new_file (date, rev, platform, hsh): for ff in newestSet["files"]: download_new_file (newestSet["date"], newestSet["rev"], ff["platform"], ff["hash"]) - - diff --git a/src/etc/libc.c b/src/etc/libc.c index 9acc122f32b99..e341f495eebb9 100644 --- a/src/etc/libc.c +++ b/src/etc/libc.c @@ -243,4 +243,3 @@ int main() { extra_consts(); printf("}\n"); } - diff --git a/src/etc/licenseck.py b/src/etc/licenseck.py index 973b7deb960db..1e0c541cd8927 100644 --- a/src/etc/licenseck.py +++ b/src/etc/licenseck.py @@ -96,4 +96,3 @@ def check_license(name, contents): return True return False - diff --git a/src/etc/local_stage0.sh b/src/etc/local_stage0.sh index 5898bc561aac3..8d2fd887e3ff7 100755 --- a/src/etc/local_stage0.sh +++ b/src/etc/local_stage0.sh @@ -1,13 +1,13 @@ #!/bin/sh -TARG_DIR=$1 +TARG_DIR=$1 PREFIX=$2 BINDIR=bin LIBDIR=lib OS=`uname -s` -case $OS in +case $OS in ("Linux"|"FreeBSD") BIN_SUF= LIB_SUF=.so diff --git a/src/etc/mirror-all-snapshots.py b/src/etc/mirror-all-snapshots.py index f1fce7a94b5b6..3b5f66c411730 100644 --- a/src/etc/mirror-all-snapshots.py +++ b/src/etc/mirror-all-snapshots.py @@ -33,6 +33,3 @@ print("got download with ok hash") else: raise Exception("bad hash on download") - - - diff --git a/src/etc/monodebug.pl b/src/etc/monodebug.pl index 324c576a4bda8..a2d27591cad93 100755 --- a/src/etc/monodebug.pl +++ b/src/etc/monodebug.pl @@ -77,4 +77,3 @@ } print "\n"; } - diff --git a/src/etc/sugarise-doc-comments.py b/src/etc/sugarise-doc-comments.py index 6399cff6b880d..7bd4175fbf0db 100755 --- a/src/etc/sugarise-doc-comments.py +++ b/src/etc/sugarise-doc-comments.py @@ -80,4 +80,3 @@ def sugarise_file(path): for (dirpath, dirnames, filenames) in os.walk('.'): for name in fnmatch.filter(filenames, '*.r[sc]'): sugarise_file(os.path.join(dirpath, name)) - diff --git a/src/etc/tidy.py b/src/etc/tidy.py index a5cf6141567be..06fcb5cb94586 100644 --- a/src/etc/tidy.py +++ b/src/etc/tidy.py @@ -81,4 +81,3 @@ def do_license_check(name, contents): sys.exit(err) - diff --git a/src/etc/x86.supp b/src/etc/x86.supp index 417f4c9d2c199..def1c5a53c1fd 100644 --- a/src/etc/x86.supp +++ b/src/etc/x86.supp @@ -366,7 +366,7 @@ ... } -{ +{ llvm-user-new-leak Memcheck:Leak fun:_Znwj @@ -401,7 +401,7 @@ Helgrind:Race fun:_ZN15lock_and_signal27lock_held_by_current_threadEv ... -} +} { lock_and_signal-probably-threadsafe-access-outside-of-lock2 diff --git a/src/libcore/cleanup.rs b/src/libcore/cleanup.rs index a07c6b4811b6c..bf92d605f2b24 100644 --- a/src/libcore/cleanup.rs +++ b/src/libcore/cleanup.rs @@ -226,4 +226,3 @@ pub mod rustrt { pub unsafe fn rust_get_task() -> *c_void; } } - diff --git a/src/libcore/logging.rs b/src/libcore/logging.rs index ba976de50ab48..afe8338f2ce6a 100644 --- a/src/libcore/logging.rs +++ b/src/libcore/logging.rs @@ -59,4 +59,3 @@ pub fn log_type(level: u32, object: &T) { rustrt::rust_log_str(level, transmute(vec::raw::to_ptr(bytes)), len); } } - diff --git a/src/libcore/owned.rs b/src/libcore/owned.rs index c483ec79e21d9..599591e2f6d7a 100644 --- a/src/libcore/owned.rs +++ b/src/libcore/owned.rs @@ -31,4 +31,3 @@ impl Ord for ~T { #[inline(always)] fn gt(&self, other: &~T) -> bool { *(*self) > *(*other) } } - diff --git a/src/libcore/rt/context.rs b/src/libcore/rt/context.rs index 4714be9e3d520..9c1e566f218f6 100644 --- a/src/libcore/rt/context.rs +++ b/src/libcore/rt/context.rs @@ -207,4 +207,3 @@ pub fn mut_offset(ptr: *mut T, count: int) -> *mut T { use core::sys::size_of; (ptr as int + count * (size_of::() as int)) as *mut T } - diff --git a/src/libcore/rt/io/comm_adapters.rs b/src/libcore/rt/io/comm_adapters.rs index 1d6893b3ca616..7e891f1718e21 100644 --- a/src/libcore/rt/io/comm_adapters.rs +++ b/src/libcore/rt/io/comm_adapters.rs @@ -56,4 +56,3 @@ impl WriterChan { impl GenericChan<~[u8]> for WriterChan { fn send(&self, _x: ~[u8]) { fail!() } } - diff --git a/src/libcore/rt/io/net/ip.rs b/src/libcore/rt/io/net/ip.rs index d9b7f4e6e4011..df1dfe4d38ad1 100644 --- a/src/libcore/rt/io/net/ip.rs +++ b/src/libcore/rt/io/net/ip.rs @@ -12,4 +12,3 @@ pub enum IpAddr { Ipv4(u8, u8, u8, u8, u16), Ipv6 } - diff --git a/src/libcore/rt/io/net/udp.rs b/src/libcore/rt/io/net/udp.rs index 0cb2978fb1a68..1f1254a7029f0 100644 --- a/src/libcore/rt/io/net/udp.rs +++ b/src/libcore/rt/io/net/udp.rs @@ -47,4 +47,3 @@ impl UdpListener { impl Listener for UdpListener { fn accept(&mut self) -> Option { fail!() } } - diff --git a/src/libcore/rt/io/net/unix.rs b/src/libcore/rt/io/net/unix.rs index 262816beecc98..f449a857467cc 100644 --- a/src/libcore/rt/io/net/unix.rs +++ b/src/libcore/rt/io/net/unix.rs @@ -47,4 +47,3 @@ impl UnixListener { impl Listener for UnixListener { fn accept(&mut self) -> Option { fail!() } } - diff --git a/src/libcore/rt/local_heap.rs b/src/libcore/rt/local_heap.rs index fbd4a77d79b98..6bf228a1b2201 100644 --- a/src/libcore/rt/local_heap.rs +++ b/src/libcore/rt/local_heap.rs @@ -78,4 +78,3 @@ extern { size: size_t) -> *OpaqueBox; fn rust_boxed_region_free(region: *BoxedRegion, box: *OpaqueBox); } - diff --git a/src/libcore/rt/sched/local_sched.rs b/src/libcore/rt/sched/local_sched.rs index 2d1e06163beb8..a7e02f30e0167 100644 --- a/src/libcore/rt/sched/local_sched.rs +++ b/src/libcore/rt/sched/local_sched.rs @@ -143,4 +143,3 @@ fn borrow_smoke_test() { } let _scheduler = take(); } - diff --git a/src/libcore/stackwalk.rs b/src/libcore/stackwalk.rs index ebf36e4e09ab4..272bdca8654f1 100644 --- a/src/libcore/stackwalk.rs +++ b/src/libcore/stackwalk.rs @@ -99,4 +99,3 @@ pub mod rusti { pub fn frame_address(+f: &once fn(x: *u8)); } } - diff --git a/src/libcore/unicode.rs b/src/libcore/unicode.rs index 34175f9888ffa..d6e2c5eee6aca 100644 --- a/src/libcore/unicode.rs +++ b/src/libcore/unicode.rs @@ -2642,4 +2642,3 @@ pub mod derived_property { bsearch_range_table(c, XID_Start_table) } } - diff --git a/src/libcore/unstable/exchange_alloc.rs b/src/libcore/unstable/exchange_alloc.rs index 8ca5486d92992..57ed579e88dda 100644 --- a/src/libcore/unstable/exchange_alloc.rs +++ b/src/libcore/unstable/exchange_alloc.rs @@ -81,4 +81,3 @@ extern { #[rust_stack] fn rust_get_exchange_count_ptr() -> *mut int; } - diff --git a/src/libcore/unstable/weak_task.rs b/src/libcore/unstable/weak_task.rs index 7a30bb92111b1..6edbdcb51b0cb 100644 --- a/src/libcore/unstable/weak_task.rs +++ b/src/libcore/unstable/weak_task.rs @@ -205,4 +205,3 @@ fn test_select_stream_and_oneshot() { chan.send(()); waitport.recv(); } - diff --git a/src/librustc/metadata/common.rs b/src/librustc/metadata/common.rs index 111c201d5023c..d2b71447f4778 100644 --- a/src/librustc/metadata/common.rs +++ b/src/librustc/metadata/common.rs @@ -169,4 +169,3 @@ pub struct LinkMeta { vers: @str, extras_hash: @str } - diff --git a/src/librustc/metadata/mod.rs b/src/librustc/metadata/mod.rs index 78d5be4d4ae19..24007380feec1 100644 --- a/src/librustc/metadata/mod.rs +++ b/src/librustc/metadata/mod.rs @@ -18,4 +18,3 @@ pub mod cstore; pub mod csearch; pub mod loader; pub mod filesearch; - diff --git a/src/librustc/middle/borrowck/check_loans.rs b/src/librustc/middle/borrowck/check_loans.rs index 526a5a3a9dd4c..4ab24a17d31b2 100644 --- a/src/librustc/middle/borrowck/check_loans.rs +++ b/src/librustc/middle/borrowck/check_loans.rs @@ -802,4 +802,3 @@ fn check_loans_in_block(blk: &ast::blk, visit::visit_block(blk, self, vt); } } - diff --git a/src/librustc/middle/borrowck/gather_loans.rs b/src/librustc/middle/borrowck/gather_loans.rs index da04853411865..fd1f6f5c450af 100644 --- a/src/librustc/middle/borrowck/gather_loans.rs +++ b/src/librustc/middle/borrowck/gather_loans.rs @@ -639,4 +639,3 @@ fn add_stmt_to_map(stmt: @ast::stmt, } visit::visit_stmt(stmt, self, vt); } - diff --git a/src/librustc/middle/borrowck/loan.rs b/src/librustc/middle/borrowck/loan.rs index 4dd727390aadc..641571373bda4 100644 --- a/src/librustc/middle/borrowck/loan.rs +++ b/src/librustc/middle/borrowck/loan.rs @@ -309,4 +309,3 @@ pub impl LoanContext { } } } - diff --git a/src/librustc/middle/lang_items.rs b/src/librustc/middle/lang_items.rs index 7298064e1c00d..f6d138a4a699e 100644 --- a/src/librustc/middle/lang_items.rs +++ b/src/librustc/middle/lang_items.rs @@ -423,4 +423,3 @@ pub fn collect_language_items(crate: @crate, collector.collect(); copy items } - diff --git a/src/librustc/middle/mem_categorization.rs b/src/librustc/middle/mem_categorization.rs index 866bd5377b9ba..29ca875806f93 100644 --- a/src/librustc/middle/mem_categorization.rs +++ b/src/librustc/middle/mem_categorization.rs @@ -1179,4 +1179,3 @@ pub impl categorization { } } } - diff --git a/src/librustc/middle/pat_util.rs b/src/librustc/middle/pat_util.rs index 3ca79982b7b9a..b87adb75bc37a 100644 --- a/src/librustc/middle/pat_util.rs +++ b/src/librustc/middle/pat_util.rs @@ -86,4 +86,3 @@ pub fn pat_binding_ids(dm: resolve::DefMap, pat: @pat) -> ~[node_id] { pat_bindings(dm, pat, |_bm, b_id, _sp, _pt| found.push(b_id) ); return found; } - diff --git a/src/librustc/middle/privacy.rs b/src/librustc/middle/privacy.rs index be98195621902..083c436c83e84 100644 --- a/src/librustc/middle/privacy.rs +++ b/src/librustc/middle/privacy.rs @@ -603,4 +603,3 @@ pub fn check_crate(tcx: ty::ctxt, }); visit::visit_crate(crate, method_map, visitor); } - diff --git a/src/librustc/middle/region.rs b/src/librustc/middle/region.rs index 4faa2150003f0..753a6d25cbb3d 100644 --- a/src/librustc/middle/region.rs +++ b/src/librustc/middle/region.rs @@ -968,4 +968,3 @@ pub fn determine_rp_in_crate(sess: Session, // return final set return cx.region_paramd_items; } - diff --git a/src/librustc/middle/subst.rs b/src/librustc/middle/subst.rs index c3a79373931a2..bf64134704a4c 100644 --- a/src/librustc/middle/subst.rs +++ b/src/librustc/middle/subst.rs @@ -186,4 +186,3 @@ impl Subst for ty::ty_param_bounds_and_ty { } } } - diff --git a/src/librustc/middle/trans/cabi.rs b/src/librustc/middle/trans/cabi.rs index ed028d14bd65f..d49e8e0969a1f 100644 --- a/src/librustc/middle/trans/cabi.rs +++ b/src/librustc/middle/trans/cabi.rs @@ -190,4 +190,3 @@ pub impl FnType { Store(bcx, llretval, llretptr); } } - diff --git a/src/librustc/middle/trans/callee.rs b/src/librustc/middle/trans/callee.rs index ed7f91bf04a6b..fc645e2bb6cd4 100644 --- a/src/librustc/middle/trans/callee.rs +++ b/src/librustc/middle/trans/callee.rs @@ -799,4 +799,3 @@ pub fn trans_arg_expr(bcx: block, debug!("--- trans_arg_expr passing %s", val_str(bcx.ccx().tn, val)); return rslt(bcx, val); } - diff --git a/src/librustc/middle/trans/closure.rs b/src/librustc/middle/trans/closure.rs index e35fef6b6f66a..84100d7195ea0 100644 --- a/src/librustc/middle/trans/closure.rs +++ b/src/librustc/middle/trans/closure.rs @@ -599,4 +599,3 @@ pub fn make_opaque_cbox_free_glue( } } } - diff --git a/src/librustc/middle/trans/controlflow.rs b/src/librustc/middle/trans/controlflow.rs index 113136fa58d13..c9a4f078c79db 100644 --- a/src/librustc/middle/trans/controlflow.rs +++ b/src/librustc/middle/trans/controlflow.rs @@ -398,4 +398,3 @@ pub fn trans_fail_bounds_check(bcx: block, sp: span, Unreachable(bcx); return bcx; } - diff --git a/src/librustc/middle/trans/datum.rs b/src/librustc/middle/trans/datum.rs index cf5fbb6e216ec..c6b32930c5f71 100644 --- a/src/librustc/middle/trans/datum.rs +++ b/src/librustc/middle/trans/datum.rs @@ -855,4 +855,3 @@ pub impl DatumBlock { self.datum.to_str(self.ccx()) } } - diff --git a/src/librustc/middle/trans/inline.rs b/src/librustc/middle/trans/inline.rs index ad06a9715b4af..35136410268ff 100644 --- a/src/librustc/middle/trans/inline.rs +++ b/src/librustc/middle/trans/inline.rs @@ -122,4 +122,3 @@ pub fn maybe_instantiate_inline(ccx: @CrateContext, fn_id: ast::def_id, } } } - diff --git a/src/librustc/middle/trans/machine.rs b/src/librustc/middle/trans/machine.rs index 3ae2421a55589..b1349104e5490 100644 --- a/src/librustc/middle/trans/machine.rs +++ b/src/librustc/middle/trans/machine.rs @@ -153,4 +153,3 @@ pub fn static_size_of_enum(cx: @CrateContext, t: ty::t) -> uint { _ => cx.sess.bug(~"static_size_of_enum called on non-enum") } } - diff --git a/src/librustc/middle/trans/macros.rs b/src/librustc/middle/trans/macros.rs index 14ed7692661d4..43cc66c556867 100644 --- a/src/librustc/middle/trans/macros.rs +++ b/src/librustc/middle/trans/macros.rs @@ -51,4 +51,3 @@ macro_rules! trace( } ) ) - diff --git a/src/librustc/middle/trans/reachable.rs b/src/librustc/middle/trans/reachable.rs index f301a7d297342..217eda870be9f 100644 --- a/src/librustc/middle/trans/reachable.rs +++ b/src/librustc/middle/trans/reachable.rs @@ -242,4 +242,3 @@ fn traverse_all_resources_and_impls(cx: &ctx, crate_mod: &_mod) { ..*visit::default_visitor() })); } - diff --git a/src/librustc/middle/trans/reflect.rs b/src/librustc/middle/trans/reflect.rs index 7e59f580a2c3c..9bae056091852 100644 --- a/src/librustc/middle/trans/reflect.rs +++ b/src/librustc/middle/trans/reflect.rs @@ -404,4 +404,3 @@ pub fn ast_purity_constant(purity: ast::purity) -> uint { ast::extern_fn => 3u } } - diff --git a/src/librustc/middle/trans/shape.rs b/src/librustc/middle/trans/shape.rs index 08337c918b0f5..6ff9e1cfc5717 100644 --- a/src/librustc/middle/trans/shape.rs +++ b/src/librustc/middle/trans/shape.rs @@ -74,4 +74,3 @@ pub fn add_substr(dest: &mut ~[u8], src: ~[u8]) { add_u16(&mut *dest, vec::len(src) as u16); *dest += src; } - diff --git a/src/librustc/middle/trans/type_use.rs b/src/librustc/middle/trans/type_use.rs index e19eba6ca98f9..794912d8307bc 100644 --- a/src/librustc/middle/trans/type_use.rs +++ b/src/librustc/middle/trans/type_use.rs @@ -383,4 +383,3 @@ pub fn handle_body(cx: Context, body: &blk) { }); (v.visit_block)(body, cx, v); } - diff --git a/src/librustc/middle/typeck/check/_match.rs b/src/librustc/middle/typeck/check/_match.rs index de384d02dc3bc..8eadf3acc98fe 100644 --- a/src/librustc/middle/typeck/check/_match.rs +++ b/src/librustc/middle/typeck/check/_match.rs @@ -633,4 +633,3 @@ pub fn check_pointer_pat(pcx: &pat_ctxt, #[deriving(Eq)] enum PointerKind { Managed, Owned, Borrowed } - diff --git a/src/librustc/middle/typeck/check/demand.rs b/src/librustc/middle/typeck/check/demand.rs index 1bb71c156c3dc..3fa551e4b057a 100644 --- a/src/librustc/middle/typeck/check/demand.rs +++ b/src/librustc/middle/typeck/check/demand.rs @@ -66,5 +66,3 @@ pub fn coerce(fcx: @mut FnCtxt, } } } - - diff --git a/src/librustc/middle/typeck/check/vtable.rs b/src/librustc/middle/typeck/check/vtable.rs index 532638faa68c7..7f390de1f4943 100644 --- a/src/librustc/middle/typeck/check/vtable.rs +++ b/src/librustc/middle/typeck/check/vtable.rs @@ -666,5 +666,3 @@ pub fn resolve_in_block(fcx: @mut FnCtxt, bl: &ast::blk) { .. *visit::default_visitor() })); } - - diff --git a/src/librustc/middle/typeck/coherence.rs b/src/librustc/middle/typeck/coherence.rs index 7fff756b01da5..fe07dc9412db2 100644 --- a/src/librustc/middle/typeck/coherence.rs +++ b/src/librustc/middle/typeck/coherence.rs @@ -1119,4 +1119,3 @@ pub fn check_coherence(crate_context: @mut CrateCtxt, crate: @crate) { let coherence_checker = @CoherenceChecker(crate_context); coherence_checker.check_coherence(crate); } - diff --git a/src/librustc/middle/typeck/infer/combine.rs b/src/librustc/middle/typeck/infer/combine.rs index de3ffcd63ab7c..362104e98b0bd 100644 --- a/src/librustc/middle/typeck/infer/combine.rs +++ b/src/librustc/middle/typeck/infer/combine.rs @@ -635,4 +635,3 @@ pub fn super_trait_refs( }) } } - diff --git a/src/librustc/middle/typeck/infer/glb.rs b/src/librustc/middle/typeck/infer/glb.rs index 2bbcd24595cba..dc1e3e845df4e 100644 --- a/src/librustc/middle/typeck/infer/glb.rs +++ b/src/librustc/middle/typeck/infer/glb.rs @@ -313,4 +313,3 @@ impl Combine for Glb { super_trait_refs(self, a, b) } } - diff --git a/src/librustc/middle/typeck/infer/macros.rs b/src/librustc/middle/typeck/infer/macros.rs index e02772d951c55..306f124be3c8f 100644 --- a/src/librustc/middle/typeck/infer/macros.rs +++ b/src/librustc/middle/typeck/infer/macros.rs @@ -18,4 +18,3 @@ macro_rules! if_ok( } ) ) - diff --git a/src/librustc/middle/typeck/infer/region_inference.rs b/src/librustc/middle/typeck/infer/region_inference.rs index 25e65d7a18bca..1ee59c3fe0649 100644 --- a/src/librustc/middle/typeck/infer/region_inference.rs +++ b/src/librustc/middle/typeck/infer/region_inference.rs @@ -1746,4 +1746,3 @@ fn iterate_until_fixed_point( } debug!("---- %s Complete after %u iteration(s)", tag, iteration); } - diff --git a/src/librustc/middle/typeck/infer/resolve.rs b/src/librustc/middle/typeck/infer/resolve.rs index 9b648f6a05341..2b88825c49a69 100644 --- a/src/librustc/middle/typeck/infer/resolve.rs +++ b/src/librustc/middle/typeck/infer/resolve.rs @@ -278,4 +278,3 @@ pub impl ResolveState { } } } - diff --git a/src/librustc/middle/typeck/infer/sub.rs b/src/librustc/middle/typeck/infer/sub.rs index 266d157c4d040..48d7765f88ec9 100644 --- a/src/librustc/middle/typeck/infer/sub.rs +++ b/src/librustc/middle/typeck/infer/sub.rs @@ -269,4 +269,3 @@ impl Combine for Sub { super_trait_refs(self, a, b) } } - diff --git a/src/librustc/middle/typeck/infer/unify.rs b/src/librustc/middle/typeck/infer/unify.rs index bc13074422450..e50f2089e4fb5 100644 --- a/src/librustc/middle/typeck/infer/unify.rs +++ b/src/librustc/middle/typeck/infer/unify.rs @@ -265,5 +265,3 @@ impl SimplyUnifiable for ast::float_ty { return ty::terr_float_mismatch(err); } } - - diff --git a/src/librustdoc/path_pass.rs b/src/librustdoc/path_pass.rs index 629c6955566f5..5560f21af61db 100644 --- a/src/librustdoc/path_pass.rs +++ b/src/librustdoc/path_pass.rs @@ -112,4 +112,3 @@ fn should_record_fn_paths() { assert!(doc.cratemod().mods()[0].fns()[0].path() == ~[~"a"]); } } - diff --git a/src/librustpkg/testsuite/pass/commands.txt b/src/librustpkg/testsuite/pass/commands.txt index e1a1b2462b253..baeaef1e3c791 100644 --- a/src/librustpkg/testsuite/pass/commands.txt +++ b/src/librustpkg/testsuite/pass/commands.txt @@ -32,4 +32,3 @@ Commands that should succeed: 15. `rustpkg test foo` runs tests and prints their output, if foo contains #[test]s. 16. If foo is installed, `rustpkg uninstall foo; rustpkg list` doesn't include foo in the list - diff --git a/src/librustpkg/testsuite/pass/src/deeply/nested/path/foo/src/main.rs b/src/librustpkg/testsuite/pass/src/deeply/nested/path/foo/src/main.rs index 41041ccb50912..62785c06db31a 100644 --- a/src/librustpkg/testsuite/pass/src/deeply/nested/path/foo/src/main.rs +++ b/src/librustpkg/testsuite/pass/src/deeply/nested/path/foo/src/main.rs @@ -15,4 +15,3 @@ The test runner should check that, after `rustpkg install deeply/nested/path/foo */ fn main() {} - diff --git a/src/libstd/num/bigint.rs b/src/libstd/num/bigint.rs index 497ce7f41aae3..cd347098e2511 100644 --- a/src/libstd/num/bigint.rs +++ b/src/libstd/num/bigint.rs @@ -1957,4 +1957,3 @@ mod bigint_tests { assert!(-Zero::zero::() == Zero::zero::()); } } - diff --git a/src/libstd/serialize.rs b/src/libstd/serialize.rs index 33efb2c6a5af4..39fb5a45d7e9c 100644 --- a/src/libstd/serialize.rs +++ b/src/libstd/serialize.rs @@ -1883,4 +1883,3 @@ impl DecoderHelpers for D { } } } - diff --git a/src/libstd/task_pool.rs b/src/libstd/task_pool.rs index 820536027552b..661247df1c144 100644 --- a/src/libstd/task_pool.rs +++ b/src/libstd/task_pool.rs @@ -100,4 +100,3 @@ fn test_task_pool() { pool.execute(|i| io::println(fmt!("Hello from thread %u!", *i))); } } - diff --git a/src/libsyntax/ext/pipes/check.rs b/src/libsyntax/ext/pipes/check.rs index c2c0c06342bae..38e43d1ade562 100644 --- a/src/libsyntax/ext/pipes/check.rs +++ b/src/libsyntax/ext/pipes/check.rs @@ -80,4 +80,3 @@ impl proto::visitor<(), (), ()> for @ext_ctxt { } } } - diff --git a/src/libsyntax/ext/pipes/liveness.rs b/src/libsyntax/ext/pipes/liveness.rs index 4597dab89cbfe..18faab8c88d70 100644 --- a/src/libsyntax/ext/pipes/liveness.rs +++ b/src/libsyntax/ext/pipes/liveness.rs @@ -104,4 +104,3 @@ pub fn analyze(proto: protocol, _cx: @ext_ctxt) { proto.bounded = Some(true); } } - diff --git a/src/libsyntax/ext/pipes/mod.rs b/src/libsyntax/ext/pipes/mod.rs index 81b2442ea8257..85c578bc2ce1a 100644 --- a/src/libsyntax/ext/pipes/mod.rs +++ b/src/libsyntax/ext/pipes/mod.rs @@ -85,4 +85,3 @@ pub fn expand_proto(cx: @ext_ctxt, _sp: span, id: ast::ident, // compile base::MRItem(proto.compile(cx)) } - diff --git a/src/libsyntax/ext/pipes/proto.rs b/src/libsyntax/ext/pipes/proto.rs index 79072a2f577ff..64e2f1041c1e1 100644 --- a/src/libsyntax/ext/pipes/proto.rs +++ b/src/libsyntax/ext/pipes/proto.rs @@ -217,4 +217,3 @@ pub fn visit>( }; visitor.visit_proto(proto, states) } - diff --git a/src/libsyntax/ext/quote.rs b/src/libsyntax/ext/quote.rs index f7412a4502c16..2bf4b05aa6b02 100644 --- a/src/libsyntax/ext/quote.rs +++ b/src/libsyntax/ext/quote.rs @@ -760,4 +760,3 @@ fn expand_parse_call(cx: @ext_ctxt, id_ext(cx, parse_method), arg_exprs) } - diff --git a/src/libsyntax/parse/obsolete.rs b/src/libsyntax/parse/obsolete.rs index c1afc53def0c2..e486a6254e76a 100644 --- a/src/libsyntax/parse/obsolete.rs +++ b/src/libsyntax/parse/obsolete.rs @@ -298,4 +298,3 @@ pub impl Parser { } } - diff --git a/src/libsyntax/syntax.rc b/src/libsyntax/syntax.rc index a401d9eb8ace7..d00719b259095 100644 --- a/src/libsyntax/syntax.rc +++ b/src/libsyntax/syntax.rc @@ -90,4 +90,3 @@ pub mod ext { pub mod trace_macros; } - diff --git a/src/rt/arch/arm/_context.S b/src/rt/arch/arm/_context.S index 9097ebfc07004..6441f59a4d30c 100644 --- a/src/rt/arch/arm/_context.S +++ b/src/rt/arch/arm/_context.S @@ -48,5 +48,3 @@ swap_registers: msr cpsr_cxsf, r2 mov pc, lr - - diff --git a/src/rt/arch/arm/gpr.cpp b/src/rt/arch/arm/gpr.cpp index 6dd385fb33025..77ec9d5182a17 100644 --- a/src/rt/arch/arm/gpr.cpp +++ b/src/rt/arch/arm/gpr.cpp @@ -14,4 +14,3 @@ void rust_gpr::load() { LOAD(r8); LOAD(r9); LOAD(r10); LOAD(r11); LOAD(r12); LOAD(r13); LOAD(r14); LOAD(r15); } - diff --git a/src/rt/arch/arm/gpr.h b/src/rt/arch/arm/gpr.h index 49db1429903d9..c8a3e916a371c 100644 --- a/src/rt/arch/arm/gpr.h +++ b/src/rt/arch/arm/gpr.h @@ -21,4 +21,3 @@ class rust_gpr : public rust_gpr_base { }; #endif - diff --git a/src/rt/arch/arm/morestack.S b/src/rt/arch/arm/morestack.S index 4f1431a33927a..f0ec3f4b7a511 100644 --- a/src/rt/arch/arm/morestack.S +++ b/src/rt/arch/arm/morestack.S @@ -35,7 +35,7 @@ __morestack: mov r0, r4 // The amount of stack needed add r1, fp, #20 // Address of stack arguments mov r2, r5 // Size of stack arguments - + // Create new stack bl upcall_new_stack@plt @@ -64,7 +64,7 @@ __morestack: // Restore return value mov r0, r4 mov r1, r5 - + // Return pop {r6, fp, lr} mov pc, lr diff --git a/src/rt/arch/arm/record_sp.S b/src/rt/arch/arm/record_sp.S index fe680004a89aa..95fce8746a118 100644 --- a/src/rt/arch/arm/record_sp.S +++ b/src/rt/arch/arm/record_sp.S @@ -28,4 +28,3 @@ get_sp_limit: get_sp: mov r0, sp mov pc, lr - diff --git a/src/rt/arch/arm/regs.h b/src/rt/arch/arm/regs.h index 2b44bd3af357d..0d1c24e0fb749 100644 --- a/src/rt/arch/arm/regs.h +++ b/src/rt/arch/arm/regs.h @@ -19,5 +19,3 @@ # define RUSTRT_ARG1_S r1 # define RUSTRT_ARG2_S r2 # define RUSTRT_ARG3_S r3 - - diff --git a/src/rt/arch/i386/_context.S b/src/rt/arch/i386/_context.S index d2643d07c3df6..e2e4ffe35b4e4 100644 --- a/src/rt/arch/i386/_context.S +++ b/src/rt/arch/i386/_context.S @@ -63,5 +63,3 @@ SWAP_REGISTERS: // Return! jmp *48(%eax) - - diff --git a/src/rt/arch/i386/gpr.cpp b/src/rt/arch/i386/gpr.cpp index bebf801942730..e5a59d664b0d0 100644 --- a/src/rt/arch/i386/gpr.cpp +++ b/src/rt/arch/i386/gpr.cpp @@ -20,4 +20,3 @@ void rust_gpr::load() { LOAD(eax); LOAD(ebx); LOAD(ecx); LOAD(edx); LOAD(esi); LOAD(edi); LOAD(ebp); LOAD(esi); } - diff --git a/src/rt/arch/i386/gpr.h b/src/rt/arch/i386/gpr.h index 6ae53e113f4da..1953170301c53 100644 --- a/src/rt/arch/i386/gpr.h +++ b/src/rt/arch/i386/gpr.h @@ -29,4 +29,3 @@ class rust_gpr : public rust_gpr_base { }; #endif - diff --git a/src/rt/arch/i386/morestack.S b/src/rt/arch/i386/morestack.S index e8a9c1312ed2c..c1cd11fa432af 100644 --- a/src/rt/arch/i386/morestack.S +++ b/src/rt/arch/i386/morestack.S @@ -97,7 +97,7 @@ #endif .globl MORESTACK -// FIXME: What about _WIN32? +// FIXME: What about _WIN32? #if defined(__linux__) || defined(__FreeBSD__) .hidden MORESTACK #else @@ -253,4 +253,3 @@ L_upcall_del_stack$stub: .subsections_via_symbols #endif - diff --git a/src/rt/arch/mips/gpr.h b/src/rt/arch/mips/gpr.h index 4ff0729633a64..b48c1d4e732a5 100644 --- a/src/rt/arch/mips/gpr.h +++ b/src/rt/arch/mips/gpr.h @@ -30,4 +30,3 @@ class rust_gpr : public rust_gpr_base { }; #endif - diff --git a/src/rt/arch/x86_64/_context.S b/src/rt/arch/x86_64/_context.S index bedd685546756..f718cac963470 100644 --- a/src/rt/arch/x86_64/_context.S +++ b/src/rt/arch/x86_64/_context.S @@ -121,4 +121,3 @@ SWAP_REGISTERS: // Jump to the instruction pointer // found in regs: jmp *(RUSTRT_IP*8)(ARG1) - diff --git a/src/rt/arch/x86_64/gpr.cpp b/src/rt/arch/x86_64/gpr.cpp index cf43125923ade..37247d1dfdc8b 100644 --- a/src/rt/arch/x86_64/gpr.cpp +++ b/src/rt/arch/x86_64/gpr.cpp @@ -22,4 +22,3 @@ void rust_gpr::load() { LOAD(r8); LOAD(r9); LOAD(r10); LOAD(r11); LOAD(r12); LOAD(r13); LOAD(r14); LOAD(r15); } - diff --git a/src/rt/arch/x86_64/gpr.h b/src/rt/arch/x86_64/gpr.h index 75c3b081e77e8..18ef77dbba631 100644 --- a/src/rt/arch/x86_64/gpr.h +++ b/src/rt/arch/x86_64/gpr.h @@ -30,4 +30,3 @@ class rust_gpr : public rust_gpr_base { }; #endif - diff --git a/src/rt/arch/x86_64/regs.h b/src/rt/arch/x86_64/regs.h index 7d0efd1eec87c..1aca452df108b 100644 --- a/src/rt/arch/x86_64/regs.h +++ b/src/rt/arch/x86_64/regs.h @@ -43,5 +43,3 @@ # define RUSTRT_ARG4_S %r8 # define RUSTRT_ARG5_S %r9 #endif - - diff --git a/src/rt/isaac/rand.h b/src/rt/isaac/rand.h index 3da2d71b20b2d..c28b35e688d5a 100644 --- a/src/rt/isaac/rand.h +++ b/src/rt/isaac/rand.h @@ -52,5 +52,3 @@ void isaac(randctx *r); (r)->randrsl[(r)->randcnt]) #endif /* RAND */ - - diff --git a/src/rt/rust_abi.cpp b/src/rt/rust_abi.cpp index ca8448b39a152..fd1b7860b29a4 100644 --- a/src/rt/rust_abi.cpp +++ b/src/rt/rust_abi.cpp @@ -86,4 +86,3 @@ symbolicate(const std::vector &frames) { } } // end namespace stack_walk - diff --git a/src/rt/rust_abi.h b/src/rt/rust_abi.h index c56bf96291fb2..4179bf751579f 100644 --- a/src/rt/rust_abi.h +++ b/src/rt/rust_abi.h @@ -76,4 +76,3 @@ std::string symbolicate(const std::vector &frames); uint32_t get_abi_version(); #endif - diff --git a/src/rt/rust_android_dummy.h b/src/rt/rust_android_dummy.h index 95a1774894bc5..3d6c949fd3460 100644 --- a/src/rt/rust_android_dummy.h +++ b/src/rt/rust_android_dummy.h @@ -12,4 +12,3 @@ char **backtrace_symbols (void *__const *__array, int __size); void backtrace_symbols_fd (void *__const *__array, int __size, int __fd); #endif - diff --git a/src/rt/rust_debug.cpp b/src/rt/rust_debug.cpp index 5c5be45bef8b8..f403b0434b649 100644 --- a/src/rt/rust_debug.cpp +++ b/src/rt/rust_debug.cpp @@ -58,4 +58,3 @@ dump_origin(rust_task *task, void *ptr) { } } // end namespace debug - diff --git a/src/rt/rust_debug.h b/src/rt/rust_debug.h index c9aad098d38f8..7f025bb908e2a 100644 --- a/src/rt/rust_debug.h +++ b/src/rt/rust_debug.h @@ -70,4 +70,3 @@ void dump_origin(rust_task *task, void *ptr); } // end namespace debug #endif - diff --git a/src/rt/rust_gpr_base.h b/src/rt/rust_gpr_base.h index 4df6ea3e9adbc..7ec2dda9cd40c 100644 --- a/src/rt/rust_gpr_base.h +++ b/src/rt/rust_gpr_base.h @@ -31,4 +31,3 @@ class rust_gpr_base { #endif - diff --git a/src/rustllvm/README b/src/rustllvm/README index 31495f22c0a50..c0db3f68a7620 100644 --- a/src/rustllvm/README +++ b/src/rustllvm/README @@ -1,3 +1,2 @@ This directory currently contains some LLVM support code. This will generally be sent upstream to LLVM in time; for now it lives here. - diff --git a/src/rustllvm/RustWrapper.cpp b/src/rustllvm/RustWrapper.cpp index 451a390876c6b..04e616de22334 100644 --- a/src/rustllvm/RustWrapper.cpp +++ b/src/rustllvm/RustWrapper.cpp @@ -120,18 +120,18 @@ void LLVMRustInitializeTargets() { LLVMInitializeX86TargetMC(); LLVMInitializeX86AsmPrinter(); LLVMInitializeX86AsmParser(); - + LLVMInitializeARMTargetInfo(); LLVMInitializeARMTarget(); LLVMInitializeARMTargetMC(); LLVMInitializeARMAsmPrinter(); - LLVMInitializeARMAsmParser(); + LLVMInitializeARMAsmParser(); LLVMInitializeMipsTargetInfo(); LLVMInitializeMipsTarget(); LLVMInitializeMipsTargetMC(); LLVMInitializeMipsAsmPrinter(); - LLVMInitializeMipsAsmParser(); + LLVMInitializeMipsAsmParser(); } // Custom memory manager for MCJITting. It needs special features @@ -438,7 +438,7 @@ LLVMRustWriteOutputFile(LLVMPassManagerRef PMR, const char *path, TargetMachine::CodeGenFileType FileType, CodeGenOpt::Level OptLevel, - bool EnableSegmentedStacks) { + bool EnableSegmentedStacks) { LLVMRustInitializeTargets(); @@ -449,7 +449,7 @@ LLVMRustWriteOutputFile(LLVMPassManagerRef PMR, if (!EnableARMEHABI) { int argc = 3; const char* argv[] = {"rustc", "-arm-enable-ehabi", - "-arm-enable-ehabi-descriptors"}; + "-arm-enable-ehabi-descriptors"}; cl::ParseCommandLineOptions(argc, argv); } @@ -467,8 +467,8 @@ LLVMRustWriteOutputFile(LLVMPassManagerRef PMR, const Target *TheTarget = TargetRegistry::lookupTarget(Trip, Err); TargetMachine *Target = TheTarget->createTargetMachine(Trip, CPUStr, FeaturesStr, - Options, Reloc::PIC_, - CodeModel::Default, OptLevel); + Options, Reloc::PIC_, + CodeModel::Default, OptLevel); Target->addAnalysisPasses(*PM); bool NoVerify = false; @@ -511,10 +511,10 @@ extern "C" LLVMValueRef LLVMRustConstSmallInt(LLVMTypeRef IntTy, unsigned N, return LLVMConstInt(IntTy, (unsigned long long)N, SignExtend); } -extern "C" LLVMValueRef LLVMRustConstInt(LLVMTypeRef IntTy, - unsigned N_hi, - unsigned N_lo, - LLVMBool SignExtend) { +extern "C" LLVMValueRef LLVMRustConstInt(LLVMTypeRef IntTy, + unsigned N_hi, + unsigned N_lo, + LLVMBool SignExtend) { unsigned long long N = N_hi; N <<= 32; N |= N_lo; diff --git a/src/snapshots.txt b/src/snapshots.txt index fafd5467655ce..00cabe90d840f 100644 --- a/src/snapshots.txt +++ b/src/snapshots.txt @@ -151,7 +151,7 @@ S 2012-10-03 5585514 winnt-i386 25680d15a358cf4163e08f4e56e54fb497de5eb4 S 2012-10-02 4d30b34 - macos-i386 2bcce3cde8a7e53df202972cda85b0b59ce4e50d + macos-i386 2bcce3cde8a7e53df202972cda85b0b59ce4e50d macos-x86_64 fc5592828392f9eabe8b51cc59639be6d709cc26 freebsd-x86_64 5e09dad0800f16f5d79286330bcb82b6d2b8782e linux-i386 92fc541d4dde19fe2af5930d72a5a50ca67bad60 diff --git a/src/test/auxiliary/anon_trait_static_method_lib.rs b/src/test/auxiliary/anon_trait_static_method_lib.rs index 9a778b1887414..6e111381cba34 100644 --- a/src/test/auxiliary/anon_trait_static_method_lib.rs +++ b/src/test/auxiliary/anon_trait_static_method_lib.rs @@ -17,4 +17,3 @@ pub impl Foo { Foo { x: 3 } } } - diff --git a/src/test/auxiliary/cci_class_2.rs b/src/test/auxiliary/cci_class_2.rs index 9dc27054ef738..b120a4d759f90 100644 --- a/src/test/auxiliary/cci_class_2.rs +++ b/src/test/auxiliary/cci_class_2.rs @@ -27,4 +27,3 @@ pub mod kitties { } } } - diff --git a/src/test/auxiliary/cci_class_6.rs b/src/test/auxiliary/cci_class_6.rs index 80990099cdab5..b09606ea1e21d 100644 --- a/src/test/auxiliary/cci_class_6.rs +++ b/src/test/auxiliary/cci_class_6.rs @@ -31,4 +31,3 @@ pub mod kitties { } } } - diff --git a/src/test/auxiliary/cci_class_cast.rs b/src/test/auxiliary/cci_class_cast.rs index edda0644b16a6..ae0407a5bed33 100644 --- a/src/test/auxiliary/cci_class_cast.rs +++ b/src/test/auxiliary/cci_class_cast.rs @@ -56,5 +56,3 @@ pub mod kitty { } } } - - diff --git a/src/test/auxiliary/cci_no_inline_lib.rs b/src/test/auxiliary/cci_no_inline_lib.rs index 407f62adb0251..f79227d87cd1f 100644 --- a/src/test/auxiliary/cci_no_inline_lib.rs +++ b/src/test/auxiliary/cci_no_inline_lib.rs @@ -19,4 +19,3 @@ pub fn iter(v: ~[uint], f: &fn(uint)) { i += 1u; } } - diff --git a/src/test/auxiliary/explicit_self_xcrate.rs b/src/test/auxiliary/explicit_self_xcrate.rs index c790252244f6b..058cb53f9186b 100644 --- a/src/test/auxiliary/explicit_self_xcrate.rs +++ b/src/test/auxiliary/explicit_self_xcrate.rs @@ -23,5 +23,3 @@ impl Foo for Bar { io::println((*self).x); } } - - diff --git a/src/test/auxiliary/extern_mod_ordering_lib.rs b/src/test/auxiliary/extern_mod_ordering_lib.rs index 8276cea465fd5..d04351203da36 100644 --- a/src/test/auxiliary/extern_mod_ordering_lib.rs +++ b/src/test/auxiliary/extern_mod_ordering_lib.rs @@ -3,4 +3,3 @@ pub mod extern_mod_ordering_lib { pub fn f() {} } - diff --git a/src/test/auxiliary/foreign_lib.rs b/src/test/auxiliary/foreign_lib.rs index 1561ec51ede0e..fe5b9e45593e3 100644 --- a/src/test/auxiliary/foreign_lib.rs +++ b/src/test/auxiliary/foreign_lib.rs @@ -15,4 +15,3 @@ pub mod rustrt { pub fn rust_get_argc() -> libc::c_int; } } - diff --git a/src/test/auxiliary/impl_privacy_xc_1.rs b/src/test/auxiliary/impl_privacy_xc_1.rs index 92452cbe8fdc4..4d98c4d9d2b54 100644 --- a/src/test/auxiliary/impl_privacy_xc_1.rs +++ b/src/test/auxiliary/impl_privacy_xc_1.rs @@ -7,4 +7,3 @@ pub struct Fish { pub impl Fish { fn swim(&self) {} } - diff --git a/src/test/auxiliary/impl_privacy_xc_2.rs b/src/test/auxiliary/impl_privacy_xc_2.rs index 0fa15fa14f613..7ef36b1fb6627 100644 --- a/src/test/auxiliary/impl_privacy_xc_2.rs +++ b/src/test/auxiliary/impl_privacy_xc_2.rs @@ -11,5 +11,3 @@ mod unexported { fn ne(&self, _: &Fish) -> bool { false } } } - - diff --git a/src/test/auxiliary/issue-2414-a.rs b/src/test/auxiliary/issue-2414-a.rs index 9f4f369b70def..54bb39fd2dfad 100644 --- a/src/test/auxiliary/issue-2414-a.rs +++ b/src/test/auxiliary/issue-2414-a.rs @@ -20,4 +20,3 @@ trait foo { impl foo for ~str { fn foo(&self) {} } - diff --git a/src/test/auxiliary/issue-2414-b.rs b/src/test/auxiliary/issue-2414-b.rs index 4bebe4e14208f..f4ef02a2b7f87 100644 --- a/src/test/auxiliary/issue-2414-b.rs +++ b/src/test/auxiliary/issue-2414-b.rs @@ -14,4 +14,3 @@ #[crate_type = "lib"]; extern mod a; - diff --git a/src/test/auxiliary/issue-2526.rs b/src/test/auxiliary/issue-2526.rs index fa32b9603a5da..0e9cf39929f1c 100644 --- a/src/test/auxiliary/issue-2526.rs +++ b/src/test/auxiliary/issue-2526.rs @@ -55,4 +55,3 @@ fn context_res() -> context_res { } pub type context = arc_destruct; - diff --git a/src/test/auxiliary/issue_2316_b.rs b/src/test/auxiliary/issue_2316_b.rs index ed8e69cb4da04..32283e5373ca6 100644 --- a/src/test/auxiliary/issue_2316_b.rs +++ b/src/test/auxiliary/issue_2316_b.rs @@ -17,5 +17,3 @@ pub mod cloth { gingham, flannel, calico } } - - diff --git a/src/test/auxiliary/issue_3136_a.rs b/src/test/auxiliary/issue_3136_a.rs index f7c866da9ae29..55de208cc905a 100644 --- a/src/test/auxiliary/issue_3136_a.rs +++ b/src/test/auxiliary/issue_3136_a.rs @@ -12,7 +12,7 @@ trait x { fn use_x(&self); } struct y(()); -impl x for y { +impl x for y { fn use_x(&self) { struct foo { //~ ERROR quux i: () @@ -20,6 +20,5 @@ impl x for y { fn new_foo(i: ()) -> foo { foo { i: i } } - } + } } - diff --git a/src/test/auxiliary/issue_3882.rs b/src/test/auxiliary/issue_3882.rs index 63275a05598eb..bb75758c741e9 100644 --- a/src/test/auxiliary/issue_3882.rs +++ b/src/test/auxiliary/issue_3882.rs @@ -12,7 +12,7 @@ mod issue_3882 { struct Completions { len: libc::size_t, } - + mod c { extern { fn linenoiseAddCompletion(lc: *mut Completions); diff --git a/src/test/auxiliary/moves_based_on_type_lib.rs b/src/test/auxiliary/moves_based_on_type_lib.rs index 826bd0db12964..857593a84d2c0 100644 --- a/src/test/auxiliary/moves_based_on_type_lib.rs +++ b/src/test/auxiliary/moves_based_on_type_lib.rs @@ -25,4 +25,3 @@ pub fn f() { let y = x; let z = y; } - diff --git a/src/test/auxiliary/newtype_struct_xc.rs b/src/test/auxiliary/newtype_struct_xc.rs index 90036e0f96cd8..e0d2541dbe3d1 100644 --- a/src/test/auxiliary/newtype_struct_xc.rs +++ b/src/test/auxiliary/newtype_struct_xc.rs @@ -1,4 +1,3 @@ #[crate_type="lib"]; pub struct Au(int); - diff --git a/src/test/auxiliary/pub_use_mods_xcrate.rs b/src/test/auxiliary/pub_use_mods_xcrate.rs index e085f2312dc50..e4890f4fe2d87 100644 --- a/src/test/auxiliary/pub_use_mods_xcrate.rs +++ b/src/test/auxiliary/pub_use_mods_xcrate.rs @@ -18,4 +18,3 @@ pub mod a { } } } - diff --git a/src/test/auxiliary/static_fn_inline_xc_aux.rs b/src/test/auxiliary/static_fn_inline_xc_aux.rs index 5fc6621f18658..a17a78bcea773 100644 --- a/src/test/auxiliary/static_fn_inline_xc_aux.rs +++ b/src/test/auxiliary/static_fn_inline_xc_aux.rs @@ -21,4 +21,3 @@ pub mod float { fn from_int2(n: int) -> float { return n as float; } } } - diff --git a/src/test/auxiliary/struct_destructuring_cross_crate.rs b/src/test/auxiliary/struct_destructuring_cross_crate.rs index ab7b1a636d3e3..8887cbee3fe2b 100644 --- a/src/test/auxiliary/struct_destructuring_cross_crate.rs +++ b/src/test/auxiliary/struct_destructuring_cross_crate.rs @@ -14,4 +14,3 @@ pub struct S { x: int, y: int } - diff --git a/src/test/auxiliary/trait_inheritance_auto_xc_2_aux.rs b/src/test/auxiliary/trait_inheritance_auto_xc_2_aux.rs index 1c7ebd941c34b..7d6178db485f1 100644 --- a/src/test/auxiliary/trait_inheritance_auto_xc_2_aux.rs +++ b/src/test/auxiliary/trait_inheritance_auto_xc_2_aux.rs @@ -17,5 +17,3 @@ pub struct A { x: int } impl Foo for A { fn f(&self) -> int { 10 } } impl Bar for A { fn g(&self) -> int { 20 } } impl Baz for A { fn h(&self) -> int { 30 } } - - diff --git a/src/test/auxiliary/trait_inheritance_overloading_xc.rs b/src/test/auxiliary/trait_inheritance_overloading_xc.rs index 1b480ff17b330..1fb0db25b31a8 100644 --- a/src/test/auxiliary/trait_inheritance_overloading_xc.rs +++ b/src/test/auxiliary/trait_inheritance_overloading_xc.rs @@ -38,4 +38,3 @@ impl Eq for MyInt { impl MyNum for MyInt; fn mi(v: int) -> MyInt { MyInt { val: v } } - diff --git a/src/test/auxiliary/xc_private_method_lib.rs b/src/test/auxiliary/xc_private_method_lib.rs index f9fda2b0810b3..05325c3b935c4 100644 --- a/src/test/auxiliary/xc_private_method_lib.rs +++ b/src/test/auxiliary/xc_private_method_lib.rs @@ -7,4 +7,3 @@ pub struct Foo { impl Foo { fn new() -> Foo { Foo { x: 1 } } } - diff --git a/src/test/bench/msgsend-pipes-shared.rs b/src/test/bench/msgsend-pipes-shared.rs index 3833c88465254..6cda0a1945a0d 100644 --- a/src/test/bench/msgsend-pipes-shared.rs +++ b/src/test/bench/msgsend-pipes-shared.rs @@ -104,7 +104,7 @@ fn main() { ~[~"", ~"10000", ~"4"] } else { copy args - }; + }; debug!("%?", args); run(args); diff --git a/src/test/bench/msgsend-pipes.rs b/src/test/bench/msgsend-pipes.rs index c4044d45f36c8..a8fb29a47e2fb 100644 --- a/src/test/bench/msgsend-pipes.rs +++ b/src/test/bench/msgsend-pipes.rs @@ -101,7 +101,7 @@ fn main() { ~[~"", ~"10000", ~"4"] } else { copy args - }; + }; debug!("%?", args); run(args); diff --git a/src/test/bench/msgsend-ring-mutex-arcs.rs b/src/test/bench/msgsend-ring-mutex-arcs.rs index a1ab7384d62a5..853b057277d8e 100644 --- a/src/test/bench/msgsend-ring-mutex-arcs.rs +++ b/src/test/bench/msgsend-ring-mutex-arcs.rs @@ -72,7 +72,7 @@ fn main() { ~[~"", ~"10", ~"100"] } else { copy args - }; + }; let num_tasks = uint::from_str(args[1]).get(); let msg_per_task = uint::from_str(args[2]).get(); diff --git a/src/test/bench/msgsend-ring-pipes.rs b/src/test/bench/msgsend-ring-pipes.rs index 14e955dd7bdae..1288ac290787a 100644 --- a/src/test/bench/msgsend-ring-pipes.rs +++ b/src/test/bench/msgsend-ring-pipes.rs @@ -65,7 +65,7 @@ fn main() { ~[~"", ~"100", ~"1000"] } else { copy args - }; + }; let num_tasks = uint::from_str(args[1]).get(); let msg_per_task = uint::from_str(args[2]).get(); diff --git a/src/test/bench/msgsend-ring-rw-arcs.rs b/src/test/bench/msgsend-ring-rw-arcs.rs index 8e819cc4aba00..2cf0fbfc397f3 100644 --- a/src/test/bench/msgsend-ring-rw-arcs.rs +++ b/src/test/bench/msgsend-ring-rw-arcs.rs @@ -73,7 +73,7 @@ fn main() { ~[~"", ~"10", ~"100"] } else { copy args - }; + }; let num_tasks = uint::from_str(args[1]).get(); let msg_per_task = uint::from_str(args[2]).get(); diff --git a/src/test/bench/pingpong.rs b/src/test/bench/pingpong.rs index 4a6e90f411686..09e663325ed49 100644 --- a/src/test/bench/pingpong.rs +++ b/src/test/bench/pingpong.rs @@ -11,7 +11,7 @@ // Compare bounded and unbounded protocol performance. // xfail-pretty - + extern mod std; use core::cell::Cell; diff --git a/src/test/bench/shootout-chameneos-redux.rs b/src/test/bench/shootout-chameneos-redux.rs index 9dad24646ded2..5d893d4ec07d0 100644 --- a/src/test/bench/shootout-chameneos-redux.rs +++ b/src/test/bench/shootout-chameneos-redux.rs @@ -218,4 +218,3 @@ fn main() { rendezvous(nn, ~[Blue, Red, Yellow, Red, Yellow, Blue, Red, Yellow, Red, Blue]); } - diff --git a/src/test/bench/shootout-fannkuch-redux.rs b/src/test/bench/shootout-fannkuch-redux.rs index 21f38245ca359..cb32e0e496e95 100644 --- a/src/test/bench/shootout-fannkuch-redux.rs +++ b/src/test/bench/shootout-fannkuch-redux.rs @@ -92,4 +92,3 @@ fn main() { let n: i32 = FromStr::from_str(os::args()[1]).get(); println(fmt!("Pfannkuchen(%d) = %d", n as int, fannkuch_redux(n) as int)); } - diff --git a/src/test/bench/shootout-fasta-redux.rs b/src/test/bench/shootout-fasta-redux.rs index 5ece98102063b..d6a0f4b8b255e 100644 --- a/src/test/bench/shootout-fasta-redux.rs +++ b/src/test/bench/shootout-fasta-redux.rs @@ -201,4 +201,3 @@ fn main() { fputc('\n' as c_int, stdout); } } - diff --git a/src/test/bench/shootout-k-nucleotide-pipes.rs b/src/test/bench/shootout-k-nucleotide-pipes.rs index 4cd7b58ce12a0..d1f3dbf22ce83 100644 --- a/src/test/bench/shootout-k-nucleotide-pipes.rs +++ b/src/test/bench/shootout-k-nucleotide-pipes.rs @@ -222,4 +222,3 @@ fn main() { io::println(from_child[ii].recv()); } } - diff --git a/src/test/bench/shootout-k-nucleotide.rs b/src/test/bench/shootout-k-nucleotide.rs index 224885a3f79b1..1791af67ed040 100644 --- a/src/test/bench/shootout-k-nucleotide.rs +++ b/src/test/bench/shootout-k-nucleotide.rs @@ -252,7 +252,7 @@ fn generate_frequencies(frequencies: &mut Table, mut input: &[u8], frame: i32) { let mut code = Code(0); - + // Pull first frame. for (frame as uint).times { code = code.push_char(input[0]); @@ -313,4 +313,3 @@ fn main() { print_occurrences(frequencies, occurrence); } } - diff --git a/src/test/bench/shootout-mandelbrot.rs b/src/test/bench/shootout-mandelbrot.rs index e62cb8ea849d1..7d2b25792ec57 100644 --- a/src/test/bench/shootout-mandelbrot.rs +++ b/src/test/bench/shootout-mandelbrot.rs @@ -57,4 +57,3 @@ fn main() { } } } - diff --git a/src/test/bench/shootout-pidigits.rs b/src/test/bench/shootout-pidigits.rs index 38e87358ee214..cb7fa969be7a7 100644 --- a/src/test/bench/shootout-pidigits.rs +++ b/src/test/bench/shootout-pidigits.rs @@ -175,4 +175,3 @@ fn main() { let n: u32 = FromStr::from_str(os::args()[1]).get(); pidigits(n); } - diff --git a/src/test/bench/shootout-reverse-complement.rs b/src/test/bench/shootout-reverse-complement.rs index 72c01c8d55cfb..a9cb3c7636a9b 100644 --- a/src/test/bench/shootout-reverse-complement.rs +++ b/src/test/bench/shootout-reverse-complement.rs @@ -152,4 +152,3 @@ fn main() { fwrite(transmute(out.unsafe_ref(0)), 1, pos as size_t, stdout); } } - diff --git a/src/test/bench/sudoku.rs b/src/test/bench/sudoku.rs index 9221da8b55738..8afddd3a31e91 100644 --- a/src/test/bench/sudoku.rs +++ b/src/test/bench/sudoku.rs @@ -274,4 +274,3 @@ fn main() { sudoku.solve(); sudoku.write(io::stdout()); } - diff --git a/src/test/compile-fail/alt-tag-nullary.rs b/src/test/compile-fail/alt-tag-nullary.rs index c74ee3d852a52..2b0c3dbf8e80f 100644 --- a/src/test/compile-fail/alt-tag-nullary.rs +++ b/src/test/compile-fail/alt-tag-nullary.rs @@ -14,4 +14,3 @@ enum a { A, } enum b { B, } fn main() { let x: a = A; match x { B => { } } } - diff --git a/src/test/compile-fail/alt-tag-unary.rs b/src/test/compile-fail/alt-tag-unary.rs index e01b9a045e531..a129ff19ac63e 100644 --- a/src/test/compile-fail/alt-tag-unary.rs +++ b/src/test/compile-fail/alt-tag-unary.rs @@ -14,4 +14,3 @@ enum a { A(int), } enum b { B(int), } fn main() { let x: a = A(0); match x { B(y) => { } } } - diff --git a/src/test/compile-fail/auto-ref-borrowck-failure.rs b/src/test/compile-fail/auto-ref-borrowck-failure.rs index 90b9b44cfbea3..894b71357b75a 100644 --- a/src/test/compile-fail/auto-ref-borrowck-failure.rs +++ b/src/test/compile-fail/auto-ref-borrowck-failure.rs @@ -28,4 +28,3 @@ fn main() { let x = Foo { x: 3 }; x.printme(); //~ ERROR illegal borrow } - diff --git a/src/test/compile-fail/bogus-tag.rs b/src/test/compile-fail/bogus-tag.rs index 12e8ba56532cb..89ad7b4245a07 100644 --- a/src/test/compile-fail/bogus-tag.rs +++ b/src/test/compile-fail/bogus-tag.rs @@ -21,4 +21,3 @@ fn main() { hsl(h, s, l) => { debug!("hsl"); } } } - diff --git a/src/test/compile-fail/borrowck-assign-comp-idx.rs b/src/test/compile-fail/borrowck-assign-comp-idx.rs index 25b56abb5ba00..a284cd5b4a791 100644 --- a/src/test/compile-fail/borrowck-assign-comp-idx.rs +++ b/src/test/compile-fail/borrowck-assign-comp-idx.rs @@ -45,4 +45,3 @@ fn c() { fn main() { } - diff --git a/src/test/compile-fail/borrowck-assign-comp.rs b/src/test/compile-fail/borrowck-assign-comp.rs index 283f04a283f4e..eb832fe738da2 100644 --- a/src/test/compile-fail/borrowck-assign-comp.rs +++ b/src/test/compile-fail/borrowck-assign-comp.rs @@ -42,4 +42,3 @@ fn d() { fn main() { } - diff --git a/src/test/compile-fail/borrowck-call-method-from-mut-aliasable.rs b/src/test/compile-fail/borrowck-call-method-from-mut-aliasable.rs index 2c68429baec92..f2c6ae98819e2 100644 --- a/src/test/compile-fail/borrowck-call-method-from-mut-aliasable.rs +++ b/src/test/compile-fail/borrowck-call-method-from-mut-aliasable.rs @@ -38,4 +38,3 @@ fn c(x: &const Foo) { fn main() { } - diff --git a/src/test/compile-fail/borrowck-loan-local-as-both-mut-and-imm.rs b/src/test/compile-fail/borrowck-loan-local-as-both-mut-and-imm.rs index a2ba5ad489167..1c2bd8dc8e10f 100644 --- a/src/test/compile-fail/borrowck-loan-local-as-both-mut-and-imm.rs +++ b/src/test/compile-fail/borrowck-loan-local-as-both-mut-and-imm.rs @@ -30,6 +30,6 @@ use core::either::{Either, Left, Right}; let y: &Either = &x; let z: &mut Either = &mut x; //~ ERROR conflicts with prior loan *z = *y; - } + } fn main() {} diff --git a/src/test/compile-fail/borrowck-loan-rcvr-overloaded-op.rs b/src/test/compile-fail/borrowck-loan-rcvr-overloaded-op.rs index a4ad7e69b3336..21bb7434f8d33 100644 --- a/src/test/compile-fail/borrowck-loan-rcvr-overloaded-op.rs +++ b/src/test/compile-fail/borrowck-loan-rcvr-overloaded-op.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -struct Point { +struct Point { x: int, y: int, } @@ -56,4 +56,3 @@ fn c() { fn main() { } - diff --git a/src/test/compile-fail/borrowck-loan-rcvr.rs b/src/test/compile-fail/borrowck-loan-rcvr.rs index 4473574926a34..36007abf05ea3 100644 --- a/src/test/compile-fail/borrowck-loan-rcvr.rs +++ b/src/test/compile-fail/borrowck-loan-rcvr.rs @@ -63,4 +63,3 @@ fn c() { fn main() { } - diff --git a/src/test/compile-fail/borrowck-mut-boxed-vec.rs b/src/test/compile-fail/borrowck-mut-boxed-vec.rs index d4c0b5a1e9bf9..e8ed362176f57 100644 --- a/src/test/compile-fail/borrowck-mut-boxed-vec.rs +++ b/src/test/compile-fail/borrowck-mut-boxed-vec.rs @@ -14,4 +14,3 @@ fn main() { v[1] = 4; } } - diff --git a/src/test/compile-fail/borrowck-ref-into-rvalue.rs b/src/test/compile-fail/borrowck-ref-into-rvalue.rs index 37ee747069ccf..84acd0df20b75 100644 --- a/src/test/compile-fail/borrowck-ref-into-rvalue.rs +++ b/src/test/compile-fail/borrowck-ref-into-rvalue.rs @@ -13,9 +13,8 @@ fn main() { match Some(~"Hello") { //~ ERROR illegal borrow Some(ref m) => { msg = m; - }, + }, None => { fail!() } - } + } io::println(*msg); } - diff --git a/src/test/compile-fail/borrowck-uniq-via-box.rs b/src/test/compile-fail/borrowck-uniq-via-box.rs index e1c0e67ff8dcc..97414ff5e786c 100644 --- a/src/test/compile-fail/borrowck-uniq-via-box.rs +++ b/src/test/compile-fail/borrowck-uniq-via-box.rs @@ -52,4 +52,3 @@ fn box_imm_recs(v: @Outer) { fn main() { } - diff --git a/src/test/compile-fail/borrowck-vec-pattern-loan-from-mut.rs b/src/test/compile-fail/borrowck-vec-pattern-loan-from-mut.rs index 27902100373a9..805b162f1d363 100644 --- a/src/test/compile-fail/borrowck-vec-pattern-loan-from-mut.rs +++ b/src/test/compile-fail/borrowck-vec-pattern-loan-from-mut.rs @@ -9,4 +9,3 @@ fn a() { } fn main() {} - diff --git a/src/test/compile-fail/borrowck-vec-pattern-nesting.rs b/src/test/compile-fail/borrowck-vec-pattern-nesting.rs index 05ff85d612c82..eef99aafd687c 100644 --- a/src/test/compile-fail/borrowck-vec-pattern-nesting.rs +++ b/src/test/compile-fail/borrowck-vec-pattern-nesting.rs @@ -18,4 +18,3 @@ fn b() { } fn main() {} - diff --git a/src/test/compile-fail/borrowck-wg-borrow-mut-to-imm-fail-2.rs b/src/test/compile-fail/borrowck-wg-borrow-mut-to-imm-fail-2.rs index e47ad721b0d7b..f9e6bc1b22e8c 100644 --- a/src/test/compile-fail/borrowck-wg-borrow-mut-to-imm-fail-2.rs +++ b/src/test/compile-fail/borrowck-wg-borrow-mut-to-imm-fail-2.rs @@ -3,4 +3,3 @@ fn main() { let _x = &mut *b; //~ NOTE prior loan as mutable granted here let _y = &mut *b; //~ ERROR loan of dereference of mutable ~ pointer as mutable conflicts with prior loan } - diff --git a/src/test/compile-fail/borrowck-wg-borrow-mut-to-imm-fail-3.rs b/src/test/compile-fail/borrowck-wg-borrow-mut-to-imm-fail-3.rs index 015f368ecb068..6c82b25a6a140 100644 --- a/src/test/compile-fail/borrowck-wg-borrow-mut-to-imm-fail-3.rs +++ b/src/test/compile-fail/borrowck-wg-borrow-mut-to-imm-fail-3.rs @@ -5,4 +5,3 @@ fn main() { let mut d = /*move*/ a; //~ ERROR moving out of mutable local variable prohibited due to outstanding loan *d += 1; } - diff --git a/src/test/compile-fail/borrowck-wg-borrow-mut-to-imm-fail.rs b/src/test/compile-fail/borrowck-wg-borrow-mut-to-imm-fail.rs index 36d32fddda150..dc453d981934d 100644 --- a/src/test/compile-fail/borrowck-wg-borrow-mut-to-imm-fail.rs +++ b/src/test/compile-fail/borrowck-wg-borrow-mut-to-imm-fail.rs @@ -4,4 +4,3 @@ fn main() { let mut y = /*move*/ b; //~ ERROR moving out of mutable local variable prohibited *y += 1; } - diff --git a/src/test/compile-fail/borrowck-wg-move-base-2.rs b/src/test/compile-fail/borrowck-wg-move-base-2.rs index ba85616e63f28..0ede523daa4c6 100644 --- a/src/test/compile-fail/borrowck-wg-move-base-2.rs +++ b/src/test/compile-fail/borrowck-wg-move-base-2.rs @@ -7,5 +7,3 @@ fn foo(x: &mut int) { fn main() { } - - diff --git a/src/test/compile-fail/by-move-pattern-binding.rs b/src/test/compile-fail/by-move-pattern-binding.rs index 95091f15ce0e5..1efed154286ec 100644 --- a/src/test/compile-fail/by-move-pattern-binding.rs +++ b/src/test/compile-fail/by-move-pattern-binding.rs @@ -20,4 +20,3 @@ fn main() { &Bar(ref identifier) => io::println(*identifier) }; } - diff --git a/src/test/compile-fail/dead-code-ret.rs b/src/test/compile-fail/dead-code-ret.rs index 182a41c1b1735..97f6149b162fc 100644 --- a/src/test/compile-fail/dead-code-ret.rs +++ b/src/test/compile-fail/dead-code-ret.rs @@ -15,4 +15,3 @@ fn f(caller: str) { debug!(caller); } fn main() { return f("main"); debug!("Paul is dead"); } - diff --git a/src/test/compile-fail/does-nothing.rs b/src/test/compile-fail/does-nothing.rs index a360d6579574f..699baad4d4308 100644 --- a/src/test/compile-fail/does-nothing.rs +++ b/src/test/compile-fail/does-nothing.rs @@ -1,3 +1,2 @@ // error-pattern: unresolved name: `this_does_nothing_what_the`. fn main() { debug!("doing"); this_does_nothing_what_the; debug!("boing"); } - diff --git a/src/test/compile-fail/drop-on-non-struct.rs b/src/test/compile-fail/drop-on-non-struct.rs index 4e5b64c8f3db4..b2f87686ac664 100644 --- a/src/test/compile-fail/drop-on-non-struct.rs +++ b/src/test/compile-fail/drop-on-non-struct.rs @@ -19,5 +19,3 @@ impl Drop for Foo { //~ ERROR the Drop trait may only be implemented fn main() { } - - diff --git a/src/test/compile-fail/explicit-call-to-dtor.rs b/src/test/compile-fail/explicit-call-to-dtor.rs index 71674186b6125..24fedaaabe3a0 100644 --- a/src/test/compile-fail/explicit-call-to-dtor.rs +++ b/src/test/compile-fail/explicit-call-to-dtor.rs @@ -22,4 +22,3 @@ fn main() { let x = Foo { x: 3 }; x.finalize(); //~ ERROR explicit call to destructor } - diff --git a/src/test/compile-fail/explicit-call-to-supertrait-dtor.rs b/src/test/compile-fail/explicit-call-to-supertrait-dtor.rs index 26b13566f7a0e..fd49889a3f796 100644 --- a/src/test/compile-fail/explicit-call-to-supertrait-dtor.rs +++ b/src/test/compile-fail/explicit-call-to-supertrait-dtor.rs @@ -31,5 +31,3 @@ impl Bar for Foo { fn main() { let x = Foo { x: 3 }; } - - diff --git a/src/test/compile-fail/float-literal-inference-restrictions.rs b/src/test/compile-fail/float-literal-inference-restrictions.rs index 80aefbbf48f81..48dbdd86b11f9 100644 --- a/src/test/compile-fail/float-literal-inference-restrictions.rs +++ b/src/test/compile-fail/float-literal-inference-restrictions.rs @@ -12,4 +12,3 @@ fn main() { let x: f32 = 1; //~ ERROR mismatched types let y: f32 = 1f; //~ ERROR mismatched types } - diff --git a/src/test/compile-fail/foreign-unsafe-fn-called.rs b/src/test/compile-fail/foreign-unsafe-fn-called.rs index 9122abab71321..ed8b8088ee41a 100644 --- a/src/test/compile-fail/foreign-unsafe-fn-called.rs +++ b/src/test/compile-fail/foreign-unsafe-fn-called.rs @@ -21,4 +21,3 @@ fn main() { test::free(); //~^ ERROR access to unsafe function requires unsafe function or block } - diff --git a/src/test/compile-fail/foreign-unsafe-fn.rs b/src/test/compile-fail/foreign-unsafe-fn.rs index 32fafe296466c..3633267d02c40 100644 --- a/src/test/compile-fail/foreign-unsafe-fn.rs +++ b/src/test/compile-fail/foreign-unsafe-fn.rs @@ -21,5 +21,3 @@ fn main() { let x = test::free; //~^ ERROR access to unsafe function requires unsafe function or block } - - diff --git a/src/test/compile-fail/issue-1451.rs b/src/test/compile-fail/issue-1451.rs index acc371076e704..a295e8eb7edb0 100644 --- a/src/test/compile-fail/issue-1451.rs +++ b/src/test/compile-fail/issue-1451.rs @@ -30,4 +30,3 @@ fn main() { fooT(T {f: x}); fooT(T {f: bar}); } - diff --git a/src/test/compile-fail/issue-2951.rs b/src/test/compile-fail/issue-2951.rs index 3874d9b13f5ca..e57d4f0917579 100644 --- a/src/test/compile-fail/issue-2951.rs +++ b/src/test/compile-fail/issue-2951.rs @@ -15,5 +15,4 @@ fn foo(x: T, y: U) { } fn main() { - } diff --git a/src/test/compile-fail/issue-3044.rs b/src/test/compile-fail/issue-3044.rs index fcd5b1deee552..635d0aa3df1e5 100644 --- a/src/test/compile-fail/issue-3044.rs +++ b/src/test/compile-fail/issue-3044.rs @@ -17,4 +17,3 @@ fn main() { // // the first error is, um, non-ideal. } - diff --git a/src/test/compile-fail/issue-3096-2.rs b/src/test/compile-fail/issue-3096-2.rs index da13d450273ba..eb58cf3e13b36 100644 --- a/src/test/compile-fail/issue-3096-2.rs +++ b/src/test/compile-fail/issue-3096-2.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -enum bottom { } +enum bottom { } fn main() { let x = ptr::to_unsafe_ptr(&()) as *bottom; diff --git a/src/test/compile-fail/issue-3991.rs b/src/test/compile-fail/issue-3991.rs index d1c9057b8807b..d3016f893b467 100644 --- a/src/test/compile-fail/issue-3991.rs +++ b/src/test/compile-fail/issue-3991.rs @@ -12,11 +12,11 @@ struct HasNested { mut nest: ~[~[int]], } - + impl HasNested { fn method_push_local(&self) { self.nest[0].push(0); } } - + fn main() {} diff --git a/src/test/compile-fail/issue-4265.rs b/src/test/compile-fail/issue-4265.rs index b6a32f5febae4..e76d211dedace 100644 --- a/src/test/compile-fail/issue-4265.rs +++ b/src/test/compile-fail/issue-4265.rs @@ -11,12 +11,12 @@ struct Foo { baz: uint } - + impl Foo { fn bar() { Foo { baz: 0 }.bar(); } - + fn bar() { //~ ERROR duplicate definition of value bar } } diff --git a/src/test/compile-fail/issue-4366.rs b/src/test/compile-fail/issue-4366.rs index 7d97932d9af6b..f4e571715997a 100644 --- a/src/test/compile-fail/issue-4366.rs +++ b/src/test/compile-fail/issue-4366.rs @@ -37,4 +37,3 @@ mod m1 { fn main() { foo(); //~ ERROR: unresolved name: `foo` } - diff --git a/src/test/compile-fail/issue-4968.rs b/src/test/compile-fail/issue-4968.rs index fc0c29e9a7987..700d8a61c3a39 100644 --- a/src/test/compile-fail/issue-4968.rs +++ b/src/test/compile-fail/issue-4968.rs @@ -14,4 +14,3 @@ static A: (int,int) = (4,2); fn main() { match 42 { A => () } //~ ERROR mismatched types: expected `` but found `(int,int)` (expected integral variable but found tuple) } - diff --git a/src/test/compile-fail/kindck-destructor-owned.rs b/src/test/compile-fail/kindck-destructor-owned.rs index e956f95b4229c..faad36a15d2fa 100644 --- a/src/test/compile-fail/kindck-destructor-owned.rs +++ b/src/test/compile-fail/kindck-destructor-owned.rs @@ -9,4 +9,3 @@ impl Drop for Foo { //~ ERROR cannot implement a destructor on a struct that is } fn main() { } - diff --git a/src/test/compile-fail/lint-default-methods.rs b/src/test/compile-fail/lint-default-methods.rs index 1350c3e3ad1cd..89b99fcebca5d 100644 --- a/src/test/compile-fail/lint-default-methods.rs +++ b/src/test/compile-fail/lint-default-methods.rs @@ -5,4 +5,3 @@ trait Foo { //~ ERROR default methods are experimental } fn main() {} - diff --git a/src/test/compile-fail/lint-type-limits.rs b/src/test/compile-fail/lint-type-limits.rs index e45ef38e97a94..2eb794fd1c296 100644 --- a/src/test/compile-fail/lint-type-limits.rs +++ b/src/test/compile-fail/lint-type-limits.rs @@ -32,4 +32,3 @@ fn qux() { i += 1; } } - diff --git a/src/test/compile-fail/liveness-if-no-else.rs b/src/test/compile-fail/liveness-if-no-else.rs index e37ee5bd4d4f2..22b1b5edbac70 100644 --- a/src/test/compile-fail/liveness-if-no-else.rs +++ b/src/test/compile-fail/liveness-if-no-else.rs @@ -11,6 +11,6 @@ fn foo(x: int) { debug!(x); } fn main() { - let x: int; if 1 > 2 { x = 10; } - foo(x); //~ ERROR use of possibly uninitialized variable: `x` + let x: int; if 1 > 2 { x = 10; } + foo(x); //~ ERROR use of possibly uninitialized variable: `x` } diff --git a/src/test/compile-fail/liveness-return.rs b/src/test/compile-fail/liveness-return.rs index 12f7aa434cce3..6558bc579685a 100644 --- a/src/test/compile-fail/liveness-return.rs +++ b/src/test/compile-fail/liveness-return.rs @@ -9,8 +9,8 @@ // except according to those terms. fn f() -> int { - let x: int; - return x; //~ ERROR use of possibly uninitialized variable: `x` + let x: int; + return x; //~ ERROR use of possibly uninitialized variable: `x` } fn main() { f(); } diff --git a/src/test/compile-fail/liveness-uninit-after-item.rs b/src/test/compile-fail/liveness-uninit-after-item.rs index b3ab005388837..a828b1d6b9f52 100644 --- a/src/test/compile-fail/liveness-uninit-after-item.rs +++ b/src/test/compile-fail/liveness-uninit-after-item.rs @@ -13,4 +13,3 @@ fn main() { fn baz(_x: int) { } baz(bar); //~ ERROR use of possibly uninitialized variable: `bar` } - diff --git a/src/test/compile-fail/liveness-uninit.rs b/src/test/compile-fail/liveness-uninit.rs index 8797132fd5083..a360f8e85a67d 100644 --- a/src/test/compile-fail/liveness-uninit.rs +++ b/src/test/compile-fail/liveness-uninit.rs @@ -11,6 +11,6 @@ fn foo(x: int) { debug!(x); } fn main() { - let x: int; - foo(x); //~ ERROR use of possibly uninitialized variable: `x` + let x: int; + foo(x); //~ ERROR use of possibly uninitialized variable: `x` } diff --git a/src/test/compile-fail/macro-with-seps-err-msg.rs b/src/test/compile-fail/macro-with-seps-err-msg.rs index 74c040238ac05..95250e36b8685 100644 --- a/src/test/compile-fail/macro-with-seps-err-msg.rs +++ b/src/test/compile-fail/macro-with-seps-err-msg.rs @@ -13,5 +13,3 @@ fn main() { globnar::brotz!(); } - - diff --git a/src/test/compile-fail/missing-derivable-attr.rs b/src/test/compile-fail/missing-derivable-attr.rs index 67cf67bfa5a04..eb27d51061fcc 100644 --- a/src/test/compile-fail/missing-derivable-attr.rs +++ b/src/test/compile-fail/missing-derivable-attr.rs @@ -24,4 +24,3 @@ impl MyEq for A; //~ ERROR missing method fn main() { } - diff --git a/src/test/compile-fail/missing-return.rs b/src/test/compile-fail/missing-return.rs index c0007d2bee807..1dc817cc6e6be 100644 --- a/src/test/compile-fail/missing-return.rs +++ b/src/test/compile-fail/missing-return.rs @@ -13,4 +13,3 @@ fn f() -> int { } fn main() { f(); } - diff --git a/src/test/compile-fail/moves-based-on-type-block-bad.rs b/src/test/compile-fail/moves-based-on-type-block-bad.rs index 020dadfc96cd2..67eb06ab424c5 100644 --- a/src/test/compile-fail/moves-based-on-type-block-bad.rs +++ b/src/test/compile-fail/moves-based-on-type-block-bad.rs @@ -24,4 +24,3 @@ fn main() { } } } - diff --git a/src/test/compile-fail/moves-based-on-type-capture-clause-bad.rs b/src/test/compile-fail/moves-based-on-type-capture-clause-bad.rs index 57829e72674e6..6dce011ddc896 100644 --- a/src/test/compile-fail/moves-based-on-type-capture-clause-bad.rs +++ b/src/test/compile-fail/moves-based-on-type-capture-clause-bad.rs @@ -5,4 +5,3 @@ fn main() { } io::println(x); //~ ERROR use of moved value } - diff --git a/src/test/compile-fail/moves-based-on-type-cyclic-types-issue-4821.rs b/src/test/compile-fail/moves-based-on-type-cyclic-types-issue-4821.rs index bee9596df727d..2b9291ce3284c 100644 --- a/src/test/compile-fail/moves-based-on-type-cyclic-types-issue-4821.rs +++ b/src/test/compile-fail/moves-based-on-type-cyclic-types-issue-4821.rs @@ -29,4 +29,3 @@ fn consume(v: ~List) -> int { } fn main() {} - diff --git a/src/test/compile-fail/no-capture-arc.rs b/src/test/compile-fail/no-capture-arc.rs index da75dfd010685..2c8c98ad5d6de 100644 --- a/src/test/compile-fail/no-capture-arc.rs +++ b/src/test/compile-fail/no-capture-arc.rs @@ -16,7 +16,7 @@ use std::arc; fn main() { let v = ~[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; let arc_v = arc::ARC(v); - + do task::spawn() { let v = *arc::get(&arc_v); assert!(v[3] == 4); diff --git a/src/test/compile-fail/noexporttypeexe.rs b/src/test/compile-fail/noexporttypeexe.rs index 8d9796c7c419b..95428568e4c35 100644 --- a/src/test/compile-fail/noexporttypeexe.rs +++ b/src/test/compile-fail/noexporttypeexe.rs @@ -20,4 +20,3 @@ fn main() { let x: int = noexporttypelib::foo(); //~^ ERROR expected `int` but found `core::option::Option` } - diff --git a/src/test/compile-fail/non-exhaustive-match-nested.rs b/src/test/compile-fail/non-exhaustive-match-nested.rs index 4d1db36237640..34fe6b0f67870 100644 --- a/src/test/compile-fail/non-exhaustive-match-nested.rs +++ b/src/test/compile-fail/non-exhaustive-match-nested.rs @@ -20,4 +20,3 @@ fn main() { b => { fail!(~"goodbye"); } } } - diff --git a/src/test/compile-fail/once-fn-subtyping.rs b/src/test/compile-fail/once-fn-subtyping.rs index 00009c706e33e..178c04dfc793c 100644 --- a/src/test/compile-fail/once-fn-subtyping.rs +++ b/src/test/compile-fail/once-fn-subtyping.rs @@ -14,4 +14,3 @@ fn main() { let h: &fn() = ||(); let i: &once fn() = h; // ok } - diff --git a/src/test/compile-fail/private-impl-method.rs b/src/test/compile-fail/private-impl-method.rs index 74bdcdc7f82d0..a6728f82ec3b3 100644 --- a/src/test/compile-fail/private-impl-method.rs +++ b/src/test/compile-fail/private-impl-method.rs @@ -22,4 +22,3 @@ fn main() { let s = a::Foo { x: 1 }; s.foo(); //~ ERROR method `foo` is private } - diff --git a/src/test/compile-fail/private-item-simple.rs b/src/test/compile-fail/private-item-simple.rs index e8038df188b7c..8776739db2d76 100644 --- a/src/test/compile-fail/private-item-simple.rs +++ b/src/test/compile-fail/private-item-simple.rs @@ -15,4 +15,3 @@ mod a { fn main() { a::f(); //~ ERROR unresolved name } - diff --git a/src/test/compile-fail/private-method-inherited.rs b/src/test/compile-fail/private-method-inherited.rs index 7b64623e16c3e..bc27027e886ba 100644 --- a/src/test/compile-fail/private-method-inherited.rs +++ b/src/test/compile-fail/private-method-inherited.rs @@ -12,4 +12,3 @@ fn main() { let x = a::Foo; x.f(); //~ ERROR method `f` is private } - diff --git a/src/test/compile-fail/private-struct-field-ctor.rs b/src/test/compile-fail/private-struct-field-ctor.rs index 43e7427dd740f..7ab28d72965fa 100644 --- a/src/test/compile-fail/private-struct-field-ctor.rs +++ b/src/test/compile-fail/private-struct-field-ctor.rs @@ -17,4 +17,3 @@ mod a { fn main() { let s = a::Foo { x: 1 }; //~ ERROR field `x` is private } - diff --git a/src/test/compile-fail/private-struct-field-pattern.rs b/src/test/compile-fail/private-struct-field-pattern.rs index 864c9bd98d7b3..6f524a8eaa401 100644 --- a/src/test/compile-fail/private-struct-field-pattern.rs +++ b/src/test/compile-fail/private-struct-field-pattern.rs @@ -25,4 +25,3 @@ fn main() { Foo { x: _ } => {} //~ ERROR field `x` is private } } - diff --git a/src/test/compile-fail/qquote-1.rs b/src/test/compile-fail/qquote-1.rs index eda207f711d68..4710d9dee4521 100644 --- a/src/test/compile-fail/qquote-1.rs +++ b/src/test/compile-fail/qquote-1.rs @@ -65,4 +65,3 @@ fn main() { fn check_pp(expr: T, f: &fn(pprust::ps, T), expect: str) { fail!(); } - diff --git a/src/test/compile-fail/qquote-2.rs b/src/test/compile-fail/qquote-2.rs index c669053400831..d377325610598 100644 --- a/src/test/compile-fail/qquote-2.rs +++ b/src/test/compile-fail/qquote-2.rs @@ -60,4 +60,3 @@ fn main() { fn check_pp(expr: T, f: &fn(pprust::ps, T), expect: str) { fail!(); } - diff --git a/src/test/compile-fail/refutable-pattern-in-fn-arg.rs b/src/test/compile-fail/refutable-pattern-in-fn-arg.rs index 5e157c1bd7b19..957925709e179 100644 --- a/src/test/compile-fail/refutable-pattern-in-fn-arg.rs +++ b/src/test/compile-fail/refutable-pattern-in-fn-arg.rs @@ -12,4 +12,3 @@ fn main() { let f = |3: int| io::println("hello"); //~ ERROR refutable pattern f(4); } - diff --git a/src/test/compile-fail/regions-addr-of-self.rs b/src/test/compile-fail/regions-addr-of-self.rs index 732d946bf9ee5..f96ef639e756c 100644 --- a/src/test/compile-fail/regions-addr-of-self.rs +++ b/src/test/compile-fail/regions-addr-of-self.rs @@ -35,4 +35,3 @@ fn main() { d.chase_cat(); debug!("cats_chased: %u", d.cats_chased); } - diff --git a/src/test/compile-fail/regions-infer-borrow-scope-too-big.rs b/src/test/compile-fail/regions-infer-borrow-scope-too-big.rs index a8b7ae1b9c8e4..6ee0216655e92 100644 --- a/src/test/compile-fail/regions-infer-borrow-scope-too-big.rs +++ b/src/test/compile-fail/regions-infer-borrow-scope-too-big.rs @@ -24,4 +24,3 @@ fn foo(p: @point) -> &int { } fn main() {} - diff --git a/src/test/compile-fail/regions-infer-borrow-scope-within-loop.rs b/src/test/compile-fail/regions-infer-borrow-scope-within-loop.rs index bf8f227b5730e..602f5dc6983c2 100644 --- a/src/test/compile-fail/regions-infer-borrow-scope-within-loop.rs +++ b/src/test/compile-fail/regions-infer-borrow-scope-within-loop.rs @@ -15,8 +15,8 @@ fn foo(cond: &fn() -> bool, box: &fn() -> @int) { loop { let x = box(); - // Here we complain because the resulting region - // of this borrow is the fn body as a whole. + // Here we complain because the resulting region + // of this borrow is the fn body as a whole. y = borrow(x); //~ ERROR illegal borrow: cannot root managed value long enough assert!(*x == *y); diff --git a/src/test/compile-fail/regions-ret.rs b/src/test/compile-fail/regions-ret.rs index be7b28f6ef4b5..cf7cb175bb8a4 100644 --- a/src/test/compile-fail/regions-ret.rs +++ b/src/test/compile-fail/regions-ret.rs @@ -14,4 +14,3 @@ fn f<'a>(_x : &'a int) -> &'a int { fn main() { } - diff --git a/src/test/compile-fail/repeat-to-run-dtor-twice.rs b/src/test/compile-fail/repeat-to-run-dtor-twice.rs index 18bdb564441d3..e1e1e2313f42a 100644 --- a/src/test/compile-fail/repeat-to-run-dtor-twice.rs +++ b/src/test/compile-fail/repeat-to-run-dtor-twice.rs @@ -26,4 +26,3 @@ fn main() { let a = Foo { x: 3 }; let _ = [ a, ..5 ]; //~ ERROR copying a value of non-copyable type } - diff --git a/src/test/compile-fail/static-method-privacy.rs b/src/test/compile-fail/static-method-privacy.rs index 50df4f04971c8..0fd82b5ace3a7 100644 --- a/src/test/compile-fail/static-method-privacy.rs +++ b/src/test/compile-fail/static-method-privacy.rs @@ -8,4 +8,3 @@ mod a { fn main() { let _ = a::S::new(); //~ ERROR function `new` is private } - diff --git a/src/test/compile-fail/static-region-bound.rs b/src/test/compile-fail/static-region-bound.rs index 500a5b0c8bcbc..ada3aebb2f420 100644 --- a/src/test/compile-fail/static-region-bound.rs +++ b/src/test/compile-fail/static-region-bound.rs @@ -6,4 +6,3 @@ fn main() { let x = &3; f(x); //~ ERROR instantiating a type parameter with an incompatible type } - diff --git a/src/test/compile-fail/struct-like-enum-nonexhaustive.rs b/src/test/compile-fail/struct-like-enum-nonexhaustive.rs index 52a61628c3562..91709e2ea7da0 100644 --- a/src/test/compile-fail/struct-like-enum-nonexhaustive.rs +++ b/src/test/compile-fail/struct-like-enum-nonexhaustive.rs @@ -20,5 +20,3 @@ fn main() { B { x: None } => {} } } - - diff --git a/src/test/compile-fail/super-at-top-level.rs b/src/test/compile-fail/super-at-top-level.rs index 21b9e5292b19e..f1064a6290561 100644 --- a/src/test/compile-fail/super-at-top-level.rs +++ b/src/test/compile-fail/super-at-top-level.rs @@ -2,6 +2,4 @@ use super::f; //~ ERROR unresolved name //~^ ERROR failed to resolve import fn main() { - } - diff --git a/src/test/compile-fail/trait-impl-method-mismatch.rs b/src/test/compile-fail/trait-impl-method-mismatch.rs index 7f4c227d2d083..54fa62f797766 100644 --- a/src/test/compile-fail/trait-impl-method-mismatch.rs +++ b/src/test/compile-fail/trait-impl-method-mismatch.rs @@ -19,7 +19,3 @@ impl Mumbo for uint { } fn main() {} - - - - diff --git a/src/test/compile-fail/trait-inheritance-missing-requirement.rs b/src/test/compile-fail/trait-inheritance-missing-requirement.rs index a341c24261135..5968c296e1382 100644 --- a/src/test/compile-fail/trait-inheritance-missing-requirement.rs +++ b/src/test/compile-fail/trait-inheritance-missing-requirement.rs @@ -30,4 +30,3 @@ impl Bar for A { fn main() { } - diff --git a/src/test/compile-fail/tuple-struct-nonexhaustive.rs b/src/test/compile-fail/tuple-struct-nonexhaustive.rs index 7cfdab2e96d57..de28a06ababcb 100644 --- a/src/test/compile-fail/tuple-struct-nonexhaustive.rs +++ b/src/test/compile-fail/tuple-struct-nonexhaustive.rs @@ -17,5 +17,3 @@ fn main() { Foo(2, b) => io::println(fmt!("%d", b)) } } - - diff --git a/src/test/compile-fail/tutorial-suffix-inference-test.rs b/src/test/compile-fail/tutorial-suffix-inference-test.rs index c68af84b95be0..d92aa8d640ab5 100644 --- a/src/test/compile-fail/tutorial-suffix-inference-test.rs +++ b/src/test/compile-fail/tutorial-suffix-inference-test.rs @@ -22,11 +22,11 @@ fn main() { //~^ ERROR mismatched types: expected `u16` but found `i32` let a = 3i; - + fn identity_i(n: int) -> int { n } identity_i(a); // ok - identity_u16(a); + identity_u16(a); //~^ ERROR mismatched types: expected `u16` but found `int` } diff --git a/src/test/compile-fail/unique-object-noncopyable.rs b/src/test/compile-fail/unique-object-noncopyable.rs index edc8a47822d72..95945b0b5baa4 100644 --- a/src/test/compile-fail/unique-object-noncopyable.rs +++ b/src/test/compile-fail/unique-object-noncopyable.rs @@ -31,4 +31,3 @@ fn main() { let y: ~Foo = x as ~Foo; let _z = copy y; //~ ERROR copying a value of non-copyable type } - diff --git a/src/test/compile-fail/use-after-move-based-on-type.rs b/src/test/compile-fail/use-after-move-based-on-type.rs index 6c268c5e13c83..3d176bb339d83 100644 --- a/src/test/compile-fail/use-after-move-based-on-type.rs +++ b/src/test/compile-fail/use-after-move-based-on-type.rs @@ -13,4 +13,3 @@ fn main() { let _y = x; io::println(x); //~ ERROR use of moved value } - diff --git a/src/test/compile-fail/use-after-move-self-based-on-type.rs b/src/test/compile-fail/use-after-move-self-based-on-type.rs index b0a2bc8ec1275..627b8924b6707 100644 --- a/src/test/compile-fail/use-after-move-self-based-on-type.rs +++ b/src/test/compile-fail/use-after-move-self-based-on-type.rs @@ -19,4 +19,3 @@ fn main() { let x = S { x: 1 }; io::println(x.foo().to_str()); } - diff --git a/src/test/compile-fail/use-after-move-self.rs b/src/test/compile-fail/use-after-move-self.rs index 3eded9fd4f39c..11f37df45417c 100644 --- a/src/test/compile-fail/use-after-move-self.rs +++ b/src/test/compile-fail/use-after-move-self.rs @@ -15,4 +15,3 @@ fn main() { let x = S { x: ~1 }; io::println(x.foo().to_str()); } - diff --git a/src/test/compile-fail/view-items-at-top.rs b/src/test/compile-fail/view-items-at-top.rs index a637836320df4..023be703cca77 100644 --- a/src/test/compile-fail/view-items-at-top.rs +++ b/src/test/compile-fail/view-items-at-top.rs @@ -19,4 +19,3 @@ use std::net; //~ ERROR view items must be declared at the top fn main() { } - diff --git a/src/test/compile-fail/while-type-error.rs b/src/test/compile-fail/while-type-error.rs index f9d3dce750890..ecab746373a98 100644 --- a/src/test/compile-fail/while-type-error.rs +++ b/src/test/compile-fail/while-type-error.rs @@ -11,4 +11,3 @@ // error-pattern: mismatched types fn main() { while main { } } - diff --git a/src/test/compile-fail/xc-private-method.rs b/src/test/compile-fail/xc-private-method.rs index d194820df9408..e8777a0a9f256 100644 --- a/src/test/compile-fail/xc-private-method.rs +++ b/src/test/compile-fail/xc-private-method.rs @@ -6,4 +6,3 @@ extern mod xc_private_method_lib; fn main() { let _ = xc_private_method_lib::Foo::new(); //~ ERROR function `new` is private } - diff --git a/src/test/pretty/doc-comments.rs b/src/test/pretty/doc-comments.rs index a866afd240592..45e242c0ca049 100644 --- a/src/test/pretty/doc-comments.rs +++ b/src/test/pretty/doc-comments.rs @@ -22,7 +22,7 @@ fn b() { ////////////////////////////////// // some single-line non-doc comment preceded by a separator -////////////////////////////////// +////////////////////////////////// /// some single-line outer-docs preceded by a separator /// (and trailing whitespaces) fn c() { } diff --git a/src/test/run-fail/assert-as-macro.rs b/src/test/run-fail/assert-as-macro.rs index 07813b91e571d..f715e21f781bd 100644 --- a/src/test/run-fail/assert-as-macro.rs +++ b/src/test/run-fail/assert-as-macro.rs @@ -3,4 +3,3 @@ fn main() { assert!(1 == 2); } - diff --git a/src/test/run-fail/borrowck-wg-fail-3.rs b/src/test/run-fail/borrowck-wg-fail-3.rs index ad4c794212121..b239bfc3b3142 100644 --- a/src/test/run-fail/borrowck-wg-fail-3.rs +++ b/src/test/run-fail/borrowck-wg-fail-3.rs @@ -5,4 +5,3 @@ fn main() { let y: &mut int = x; *x = 5; } - diff --git a/src/test/run-fail/borrowck-wg-fail.rs b/src/test/run-fail/borrowck-wg-fail.rs index d393832c6e862..93e7f9275b6cf 100644 --- a/src/test/run-fail/borrowck-wg-fail.rs +++ b/src/test/run-fail/borrowck-wg-fail.rs @@ -10,4 +10,3 @@ fn main() { let x = @mut 3; f(x, x); } - diff --git a/src/test/run-fail/unwind-resource-fail3.rs b/src/test/run-fail/unwind-resource-fail3.rs index d3ba5737b71f6..bfbad0b5aea62 100644 --- a/src/test/run-fail/unwind-resource-fail3.rs +++ b/src/test/run-fail/unwind-resource-fail3.rs @@ -14,7 +14,7 @@ struct faily_box { i: @int } // What happens to the box pointer owned by this class? - + fn faily_box(i: @int) -> faily_box { faily_box { i: i } } #[unsafe_destructor] diff --git a/src/test/run-pass-fulldeps/qquote.rs b/src/test/run-pass-fulldeps/qquote.rs index 9bfe29a5e8e4c..284195f3f04ec 100644 --- a/src/test/run-pass-fulldeps/qquote.rs +++ b/src/test/run-pass-fulldeps/qquote.rs @@ -85,4 +85,3 @@ fn check_pp(cx: fake_ext_ctxt, assert!(s == expect); } } - diff --git a/src/test/run-pass-fulldeps/quote-tokens.rs b/src/test/run-pass-fulldeps/quote-tokens.rs index ccee163eafe5b..3ec54955229d3 100644 --- a/src/test/run-pass-fulldeps/quote-tokens.rs +++ b/src/test/run-pass-fulldeps/quote-tokens.rs @@ -27,4 +27,3 @@ fn syntax_extension(ext_cx: @ext_ctxt) { fn main() { } - diff --git a/src/test/run-pass/anon-trait-static-method.rs b/src/test/run-pass/anon-trait-static-method.rs index 8e11786786ff9..91bbbf5c0a0df 100644 --- a/src/test/run-pass/anon-trait-static-method.rs +++ b/src/test/run-pass/anon-trait-static-method.rs @@ -22,4 +22,3 @@ pub fn main() { let x = Foo::new(); io::println(x.x.to_str()); } - diff --git a/src/test/run-pass/anon_trait_static_method_exe.rs b/src/test/run-pass/anon_trait_static_method_exe.rs index 5d8b79836883d..1baeca00083fd 100644 --- a/src/test/run-pass/anon_trait_static_method_exe.rs +++ b/src/test/run-pass/anon_trait_static_method_exe.rs @@ -18,6 +18,3 @@ pub fn main() { let x = Foo::new(); io::println(x.x.to_str()); } - - - diff --git a/src/test/run-pass/auto-ref-newtype.rs b/src/test/run-pass/auto-ref-newtype.rs index bac6d1aa740a8..a9fca0ccb1589 100644 --- a/src/test/run-pass/auto-ref-newtype.rs +++ b/src/test/run-pass/auto-ref-newtype.rs @@ -21,4 +21,3 @@ pub fn main() { let m = Foo(3); assert!(m.len() == 3); } - diff --git a/src/test/run-pass/auto-ref.rs b/src/test/run-pass/auto-ref.rs index f7c0f513a9df6..ee250b972190c 100644 --- a/src/test/run-pass/auto-ref.rs +++ b/src/test/run-pass/auto-ref.rs @@ -26,4 +26,3 @@ pub fn main() { let x = Foo { x: 3 }; x.printme(); } - diff --git a/src/test/run-pass/autoderef-and-borrow-method-receiver.rs b/src/test/run-pass/autoderef-and-borrow-method-receiver.rs index 883cffa792bfb..2bc6df4703042 100644 --- a/src/test/run-pass/autoderef-and-borrow-method-receiver.rs +++ b/src/test/run-pass/autoderef-and-borrow-method-receiver.rs @@ -22,4 +22,3 @@ fn g(x: &mut Foo) { pub fn main() { } - diff --git a/src/test/run-pass/bare-static-string.rs b/src/test/run-pass/bare-static-string.rs index d8015f0b92c7e..6208a9c3cc3e4 100644 --- a/src/test/run-pass/bare-static-string.rs +++ b/src/test/run-pass/bare-static-string.rs @@ -12,4 +12,3 @@ pub fn main() { let x: &'static str = "foo"; io::println(x); } - diff --git a/src/test/run-pass/binops.rs b/src/test/run-pass/binops.rs index e7624c9e3b939..e755a34f0589e 100644 --- a/src/test/run-pass/binops.rs +++ b/src/test/run-pass/binops.rs @@ -104,7 +104,7 @@ fn p(x: int, y: int) -> p { fn test_class() { let mut q = p(1, 2); let mut r = p(1, 2); - + unsafe { error!("q = %x, r = %x", (::core::cast::transmute::<*p, uint>(&q)), diff --git a/src/test/run-pass/block-arg-in-parentheses.rs b/src/test/run-pass/block-arg-in-parentheses.rs index ce0b85f414b39..ad53bd2275451 100644 --- a/src/test/run-pass/block-arg-in-parentheses.rs +++ b/src/test/run-pass/block-arg-in-parentheses.rs @@ -33,4 +33,3 @@ pub fn main() { assert!(w_paren2(~[0, 1, 2, 3]) == -4); assert!(w_ret(~[0, 1, 2, 3]) == -4); } - diff --git a/src/test/run-pass/borrow-by-val-method-receiver.rs b/src/test/run-pass/borrow-by-val-method-receiver.rs index fdb51124f0eb9..fb4316ca1f520 100644 --- a/src/test/run-pass/borrow-by-val-method-receiver.rs +++ b/src/test/run-pass/borrow-by-val-method-receiver.rs @@ -20,4 +20,3 @@ pub fn main() { let items = ~[ 3, 5, 1, 2, 4 ]; items.foo(); } - diff --git a/src/test/run-pass/borrowck-wg-simple.rs b/src/test/run-pass/borrowck-wg-simple.rs index adf2403ec63d6..f28b0e4c4ec13 100644 --- a/src/test/run-pass/borrowck-wg-simple.rs +++ b/src/test/run-pass/borrowck-wg-simple.rs @@ -6,4 +6,3 @@ pub fn main() { let x = @mut 3; f(x); } - diff --git a/src/test/run-pass/boxed-trait-with-vstore.rs b/src/test/run-pass/boxed-trait-with-vstore.rs index 1aac86238dc58..1313a17f81db0 100644 --- a/src/test/run-pass/boxed-trait-with-vstore.rs +++ b/src/test/run-pass/boxed-trait-with-vstore.rs @@ -22,4 +22,3 @@ pub fn main() { let x = @3 as @Foo; x.foo(); } - diff --git a/src/test/run-pass/break.rs b/src/test/run-pass/break.rs index b3f524c0ad713..a182dcf2ca0b2 100644 --- a/src/test/run-pass/break.rs +++ b/src/test/run-pass/break.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - - pub fn main() { let mut i = 0; while i < 20 { i += 1; if i == 10 { break; } } @@ -22,8 +20,8 @@ pub fn main() { i = 0; while i < 10 { i += 1; if i % 2 == 0 { loop; } assert!((i % 2 != 0)); } i = 0; - loop { - i += 1; if i % 2 == 0 { loop; } assert!((i % 2 != 0)); + loop { + i += 1; if i % 2 == 0 { loop; } assert!((i % 2 != 0)); if i >= 10 { break; } } for vec::each(~[1, 2, 3, 4, 5, 6]) |x| { diff --git a/src/test/run-pass/class-cast-to-trait-cross-crate-2.rs b/src/test/run-pass/class-cast-to-trait-cross-crate-2.rs index 68bc567cf5108..76f4e3b68f7c2 100644 --- a/src/test/run-pass/class-cast-to-trait-cross-crate-2.rs +++ b/src/test/run-pass/class-cast-to-trait-cross-crate-2.rs @@ -24,4 +24,3 @@ pub fn main() { let nyan : @ToStr = @cat(0u, 2, ~"nyan") as @ToStr; print_out(nyan, ~"nyan"); } - diff --git a/src/test/run-pass/class-impl-parameterized-trait.rs b/src/test/run-pass/class-impl-parameterized-trait.rs index 53ae0021a91b9..04784b5c51507 100644 --- a/src/test/run-pass/class-impl-parameterized-trait.rs +++ b/src/test/run-pass/class-impl-parameterized-trait.rs @@ -48,7 +48,7 @@ class cat : map { } fn size() -> uint { self.meows as uint } - fn insert(+k: int, +v: bool) -> bool { + fn insert(+k: int, +v: bool) -> bool { if v { self.meows += k; } else { self.meows -= k; }; true } diff --git a/src/test/run-pass/cleanup-copy-mode.rs b/src/test/run-pass/cleanup-copy-mode.rs index 41f76b1b4f2f3..b334f32f344b5 100644 --- a/src/test/run-pass/cleanup-copy-mode.rs +++ b/src/test/run-pass/cleanup-copy-mode.rs @@ -16,4 +16,3 @@ pub fn main() { adder(@2, failer()); () }))); } - diff --git a/src/test/run-pass/clone-with-exterior.rs b/src/test/run-pass/clone-with-exterior.rs index 57c4f91142dd8..ae2983b159425 100644 --- a/src/test/run-pass/clone-with-exterior.rs +++ b/src/test/run-pass/clone-with-exterior.rs @@ -18,7 +18,7 @@ struct Pair { pub fn main() { let z = ~Pair { a : 10, b : 12}; - + let f: ~fn() = || { assert!((z.a == 10)); assert!((z.b == 12)); diff --git a/src/test/run-pass/conditional-compile.rs b/src/test/run-pass/conditional-compile.rs index 609bfe7a4cb2a..73fdb219c1941 100644 --- a/src/test/run-pass/conditional-compile.rs +++ b/src/test/run-pass/conditional-compile.rs @@ -27,7 +27,7 @@ mod rustrt { // module was translated pub fn bogus(); } - + #[abi = "cdecl"] pub extern {} } diff --git a/src/test/run-pass/const-enum-vec-index.rs b/src/test/run-pass/const-enum-vec-index.rs index 01bab0778329f..4c81eaae1d802 100644 --- a/src/test/run-pass/const-enum-vec-index.rs +++ b/src/test/run-pass/const-enum-vec-index.rs @@ -14,7 +14,7 @@ static C0: E = C[0]; static C1: E = C[1]; pub fn main() { - match C0 { + match C0 { V0 => (), _ => fail!() } diff --git a/src/test/run-pass/const-enum-vec-ptr.rs b/src/test/run-pass/const-enum-vec-ptr.rs index 8615356965e35..95c4ed836c769 100644 --- a/src/test/run-pass/const-enum-vec-ptr.rs +++ b/src/test/run-pass/const-enum-vec-ptr.rs @@ -16,7 +16,7 @@ pub fn main() { V1(n) => assert!(n == 0xDEADBEE), _ => fail!() } - match C[2] { + match C[2] { V0 => (), _ => fail!() } diff --git a/src/test/run-pass/const-enum-vector.rs b/src/test/run-pass/const-enum-vector.rs index 7ae2c5a2fee7c..3dc5b918f7f58 100644 --- a/src/test/run-pass/const-enum-vector.rs +++ b/src/test/run-pass/const-enum-vector.rs @@ -16,7 +16,7 @@ pub fn main() { V1(n) => assert!(n == 0xDEADBEE), _ => fail!() } - match C[2] { + match C[2] { V0 => (), _ => fail!() } diff --git a/src/test/run-pass/const-expr-in-fixed-length-vec.rs b/src/test/run-pass/const-expr-in-fixed-length-vec.rs index c593fd39aaacd..48b41d0463307 100644 --- a/src/test/run-pass/const-expr-in-fixed-length-vec.rs +++ b/src/test/run-pass/const-expr-in-fixed-length-vec.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// Check that constant expressions can be used for declaring the +// Check that constant expressions can be used for declaring the // type of a fixed length vector. pub fn main() { diff --git a/src/test/run-pass/const-expr-in-vec-repeat.rs b/src/test/run-pass/const-expr-in-vec-repeat.rs index be54c6eb7be49..f10cef520ad24 100644 --- a/src/test/run-pass/const-expr-in-vec-repeat.rs +++ b/src/test/run-pass/const-expr-in-vec-repeat.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// Check that constant expressions can be used in vec repeat syntax. +// Check that constant expressions can be used in vec repeat syntax. pub fn main() { diff --git a/src/test/run-pass/const-tuple-struct.rs b/src/test/run-pass/const-tuple-struct.rs index a68e12b7b107a..828c20912a1cb 100644 --- a/src/test/run-pass/const-tuple-struct.rs +++ b/src/test/run-pass/const-tuple-struct.rs @@ -20,4 +20,3 @@ pub fn main() { } } } - diff --git a/src/test/run-pass/const-unit-struct.rs b/src/test/run-pass/const-unit-struct.rs index b4acde098baf3..7e6d9f0bee9b9 100644 --- a/src/test/run-pass/const-unit-struct.rs +++ b/src/test/run-pass/const-unit-struct.rs @@ -17,4 +17,3 @@ pub fn main() { Foo => {} } } - diff --git a/src/test/run-pass/const-vec-syntax.rs b/src/test/run-pass/const-vec-syntax.rs index c3e882ac04f9e..625f6ec30cc13 100644 --- a/src/test/run-pass/const-vec-syntax.rs +++ b/src/test/run-pass/const-vec-syntax.rs @@ -14,4 +14,3 @@ pub fn main() { let v = [ 1, 2, 3 ]; f(v); } - diff --git a/src/test/run-pass/consts-in-patterns.rs b/src/test/run-pass/consts-in-patterns.rs index 408c0e612f431..c0520cf737ffc 100644 --- a/src/test/run-pass/consts-in-patterns.rs +++ b/src/test/run-pass/consts-in-patterns.rs @@ -20,4 +20,3 @@ pub fn main() { }; assert!(y == 2); } - diff --git a/src/test/run-pass/cycle-collection.rs b/src/test/run-pass/cycle-collection.rs index 0512b8a1267cf..0e9be022113d6 100644 --- a/src/test/run-pass/cycle-collection.rs +++ b/src/test/run-pass/cycle-collection.rs @@ -21,4 +21,3 @@ fn f() { pub fn main() { f(); } - diff --git a/src/test/run-pass/default-method-simple.rs b/src/test/run-pass/default-method-simple.rs index 62b29d4e4eb2f..3f44f3f1ef88c 100644 --- a/src/test/run-pass/default-method-simple.rs +++ b/src/test/run-pass/default-method-simple.rs @@ -32,4 +32,3 @@ pub fn main() { let a = A { x: 1 }; a.f(); } - diff --git a/src/test/run-pass/deriving-clone-enum.rs b/src/test/run-pass/deriving-clone-enum.rs index 6caceeb2d7015..969e1fb5dd60e 100644 --- a/src/test/run-pass/deriving-clone-enum.rs +++ b/src/test/run-pass/deriving-clone-enum.rs @@ -16,4 +16,3 @@ enum E { } pub fn main() {} - diff --git a/src/test/run-pass/deriving-clone-generic-enum.rs b/src/test/run-pass/deriving-clone-generic-enum.rs index a868db2425cc2..23841017e933e 100644 --- a/src/test/run-pass/deriving-clone-generic-enum.rs +++ b/src/test/run-pass/deriving-clone-generic-enum.rs @@ -6,4 +6,3 @@ enum E { } fn main() {} - diff --git a/src/test/run-pass/deriving-clone-generic-struct.rs b/src/test/run-pass/deriving-clone-generic-struct.rs index b157cd321cf5a..0a7a5a3aa7549 100644 --- a/src/test/run-pass/deriving-clone-generic-struct.rs +++ b/src/test/run-pass/deriving-clone-generic-struct.rs @@ -16,4 +16,3 @@ struct S { } pub fn main() {} - diff --git a/src/test/run-pass/deriving-clone-generic-tuple-struct.rs b/src/test/run-pass/deriving-clone-generic-tuple-struct.rs index aeaa9ed726d2b..d6a69e8e6ac52 100644 --- a/src/test/run-pass/deriving-clone-generic-tuple-struct.rs +++ b/src/test/run-pass/deriving-clone-generic-tuple-struct.rs @@ -2,4 +2,3 @@ struct S(T, ()); fn main() {} - diff --git a/src/test/run-pass/deriving-clone-tuple-struct.rs b/src/test/run-pass/deriving-clone-tuple-struct.rs index c534883f600ce..1e5c8c80f8c49 100644 --- a/src/test/run-pass/deriving-clone-tuple-struct.rs +++ b/src/test/run-pass/deriving-clone-tuple-struct.rs @@ -12,4 +12,3 @@ struct S((), ()); pub fn main() {} - diff --git a/src/test/run-pass/deriving-via-extension-c-enum.rs b/src/test/run-pass/deriving-via-extension-c-enum.rs index 67893ae9c1eec..81c4ce013f24c 100644 --- a/src/test/run-pass/deriving-via-extension-c-enum.rs +++ b/src/test/run-pass/deriving-via-extension-c-enum.rs @@ -23,4 +23,3 @@ pub fn main() { assert!(a.eq(&b)); assert!(!a.ne(&b)); } - diff --git a/src/test/run-pass/deriving-via-extension-enum.rs b/src/test/run-pass/deriving-via-extension-enum.rs index 7481bae508b68..fac0d402a3826 100644 --- a/src/test/run-pass/deriving-via-extension-enum.rs +++ b/src/test/run-pass/deriving-via-extension-enum.rs @@ -22,4 +22,3 @@ pub fn main() { assert!(a.eq(&b)); assert!(!a.ne(&b)); } - diff --git a/src/test/run-pass/deriving-via-extension-iter-bytes-enum.rs b/src/test/run-pass/deriving-via-extension-iter-bytes-enum.rs index 5ceb8c48750d9..b08117b71fa2f 100644 --- a/src/test/run-pass/deriving-via-extension-iter-bytes-enum.rs +++ b/src/test/run-pass/deriving-via-extension-iter-bytes-enum.rs @@ -25,4 +25,3 @@ enum A { } pub fn main(){} - diff --git a/src/test/run-pass/deriving-via-extension-iter-bytes-struct.rs b/src/test/run-pass/deriving-via-extension-iter-bytes-struct.rs index 9f18cb6ac58a7..8369d12ecddcb 100644 --- a/src/test/run-pass/deriving-via-extension-iter-bytes-struct.rs +++ b/src/test/run-pass/deriving-via-extension-iter-bytes-struct.rs @@ -18,5 +18,3 @@ struct Foo { } pub fn main() {} - - diff --git a/src/test/run-pass/deriving-via-extension-struct-like-enum-variant.rs b/src/test/run-pass/deriving-via-extension-struct-like-enum-variant.rs index 712767efacfa0..4ef8fb6b5d9b7 100644 --- a/src/test/run-pass/deriving-via-extension-struct-like-enum-variant.rs +++ b/src/test/run-pass/deriving-via-extension-struct-like-enum-variant.rs @@ -9,4 +9,3 @@ pub fn main() { assert!(x == x); assert!(!(x != x)); } - diff --git a/src/test/run-pass/deriving-via-extension-struct.rs b/src/test/run-pass/deriving-via-extension-struct.rs index 1e004d1a8c00a..c0e7ee36b16da 100644 --- a/src/test/run-pass/deriving-via-extension-struct.rs +++ b/src/test/run-pass/deriving-via-extension-struct.rs @@ -23,4 +23,3 @@ pub fn main() { assert!(a.eq(&b)); assert!(!a.ne(&b)); } - diff --git a/src/test/run-pass/deriving-via-extension-type-params.rs b/src/test/run-pass/deriving-via-extension-type-params.rs index f310643f94393..85a89c629895d 100644 --- a/src/test/run-pass/deriving-via-extension-type-params.rs +++ b/src/test/run-pass/deriving-via-extension-type-params.rs @@ -26,4 +26,3 @@ pub fn main() { assert!(a.eq(&b)); assert!(!a.ne(&b)); } - diff --git a/src/test/run-pass/drop-trait-generic.rs b/src/test/run-pass/drop-trait-generic.rs index 21b85084117c4..65c3faac2b304 100644 --- a/src/test/run-pass/drop-trait-generic.rs +++ b/src/test/run-pass/drop-trait-generic.rs @@ -22,4 +22,3 @@ impl ::core::ops::Drop for S { pub fn main() { let x = S { x: 1 }; } - diff --git a/src/test/run-pass/drop-trait.rs b/src/test/run-pass/drop-trait.rs index 3eddda376a836..b516c6f6de4bd 100644 --- a/src/test/run-pass/drop-trait.rs +++ b/src/test/run-pass/drop-trait.rs @@ -21,4 +21,3 @@ impl Drop for Foo { pub fn main() { let x: Foo = Foo { x: 3 }; } - diff --git a/src/test/run-pass/enum-discrim-range-overflow.rs b/src/test/run-pass/enum-discrim-range-overflow.rs index a6806fba14269..37e457d547bf9 100644 --- a/src/test/run-pass/enum-discrim-range-overflow.rs +++ b/src/test/run-pass/enum-discrim-range-overflow.rs @@ -9,23 +9,23 @@ // except according to those terms. pub enum E64 { - H64 = 0x7FFF_FFFF_FFFF_FFFF, - L64 = 0x8000_0000_0000_0000 + H64 = 0x7FFF_FFFF_FFFF_FFFF, + L64 = 0x8000_0000_0000_0000 } pub enum E32 { - H32 = 0x7FFF_FFFF, - L32 = 0x8000_0000 + H32 = 0x7FFF_FFFF, + L32 = 0x8000_0000 } pub fn f(e64: E64, e32: E32) -> (bool,bool) { - (match e64 { - H64 => true, - L64 => false - }, - match e32 { - H32 => true, - L32 => false - }) + (match e64 { + H64 => true, + L64 => false + }, + match e32 { + H32 => true, + L32 => false + }) } pub fn main() { } diff --git a/src/test/run-pass/enum-disr-val-pretty.rs b/src/test/run-pass/enum-disr-val-pretty.rs index 39a807789ecec..2c61351cf44a5 100644 --- a/src/test/run-pass/enum-disr-val-pretty.rs +++ b/src/test/run-pass/enum-disr-val-pretty.rs @@ -23,4 +23,3 @@ fn test_color(color: color, val: int, name: ~str) { assert!(color as int == val); assert!(color as float == val as float); } - diff --git a/src/test/run-pass/enum-export-inheritance.rs b/src/test/run-pass/enum-export-inheritance.rs index c3beebdb8ae85..49823155043f4 100644 --- a/src/test/run-pass/enum-export-inheritance.rs +++ b/src/test/run-pass/enum-export-inheritance.rs @@ -19,4 +19,3 @@ mod a { pub fn main() { let x = a::Bar; } - diff --git a/src/test/run-pass/enum-nullable-simplifycfg-misopt.rs b/src/test/run-pass/enum-nullable-simplifycfg-misopt.rs index b5cf15f3b3863..4764dbb9417fb 100644 --- a/src/test/run-pass/enum-nullable-simplifycfg-misopt.rs +++ b/src/test/run-pass/enum-nullable-simplifycfg-misopt.rs @@ -17,8 +17,8 @@ enum List { Nil, Cons(X, @List) } pub fn main() { match Cons(10, @Nil) { - Cons(10, _) => {} - Nil => {} - _ => fail!() + Cons(10, _) => {} + Nil => {} + _ => fail!() } } diff --git a/src/test/run-pass/explicit-self-generic.rs b/src/test/run-pass/explicit-self-generic.rs index 1a2a8cab3032c..ac19592accf8b 100644 --- a/src/test/run-pass/explicit-self-generic.rs +++ b/src/test/run-pass/explicit-self-generic.rs @@ -40,4 +40,3 @@ pub fn main() { let mut m = ~linear_map::<(),()>(); assert!(m.len() == 0); } - diff --git a/src/test/run-pass/explicit-self-objects-box.rs b/src/test/run-pass/explicit-self-objects-box.rs index 105aad03083d7..12a1780e029b1 100644 --- a/src/test/run-pass/explicit-self-objects-box.rs +++ b/src/test/run-pass/explicit-self-objects-box.rs @@ -30,5 +30,3 @@ pub fn main() { y.f(); y.f(); } - - diff --git a/src/test/run-pass/explicit-self-objects-simple.rs b/src/test/run-pass/explicit-self-objects-simple.rs index de2926b0e7efc..814365a835429 100644 --- a/src/test/run-pass/explicit-self-objects-simple.rs +++ b/src/test/run-pass/explicit-self-objects-simple.rs @@ -27,5 +27,3 @@ pub fn main() { let y = x as @Foo; y.f(); } - - diff --git a/src/test/run-pass/explicit-self-objects-uniq.rs b/src/test/run-pass/explicit-self-objects-uniq.rs index e99a6bbedc06c..dadf53fb9bc6a 100644 --- a/src/test/run-pass/explicit-self-objects-uniq.rs +++ b/src/test/run-pass/explicit-self-objects-uniq.rs @@ -27,5 +27,3 @@ pub fn main() { let y = x as ~Foo; y.f(); } - - diff --git a/src/test/run-pass/explicit_self_xcrate_exe.rs b/src/test/run-pass/explicit_self_xcrate_exe.rs index e217e6ebd411d..6f6520e804043 100644 --- a/src/test/run-pass/explicit_self_xcrate_exe.rs +++ b/src/test/run-pass/explicit_self_xcrate_exe.rs @@ -18,4 +18,3 @@ pub fn main() { let x = Bar { x: ~"hello" }; x.f(); } - diff --git a/src/test/run-pass/expr-repeat-vstore.rs b/src/test/run-pass/expr-repeat-vstore.rs index 972b2763b1b59..e48abc5753492 100644 --- a/src/test/run-pass/expr-repeat-vstore.rs +++ b/src/test/run-pass/expr-repeat-vstore.rs @@ -20,4 +20,3 @@ fn main() { println((copy v[3]).to_str()); println((copy v[4]).to_str()); } - diff --git a/src/test/run-pass/extern-mod-abi.rs b/src/test/run-pass/extern-mod-abi.rs index 7eada51b7c719..84fd1b40bf7a5 100644 --- a/src/test/run-pass/extern-mod-abi.rs +++ b/src/test/run-pass/extern-mod-abi.rs @@ -13,4 +13,3 @@ extern "C" { } pub fn main() {} - diff --git a/src/test/run-pass/extern-mod-ordering-exe.rs b/src/test/run-pass/extern-mod-ordering-exe.rs index b60302277b326..5836245ff78cf 100644 --- a/src/test/run-pass/extern-mod-ordering-exe.rs +++ b/src/test/run-pass/extern-mod-ordering-exe.rs @@ -8,4 +8,3 @@ use extern_mod_ordering_lib::extern_mod_ordering_lib; fn main() { extern_mod_ordering_lib::f(); } - diff --git a/src/test/run-pass/extern-mod-syntax.rs b/src/test/run-pass/extern-mod-syntax.rs index b6b2e0042633d..c98b5ebc23854 100644 --- a/src/test/run-pass/extern-mod-syntax.rs +++ b/src/test/run-pass/extern-mod-syntax.rs @@ -16,4 +16,3 @@ use std::json::Object; pub fn main() { io::println("Hello world!"); } - diff --git a/src/test/run-pass/extern-pass-TwoU16s.rs b/src/test/run-pass/extern-pass-TwoU16s.rs index f0343c4d2a267..ec65cbb5670b9 100644 --- a/src/test/run-pass/extern-pass-TwoU16s.rs +++ b/src/test/run-pass/extern-pass-TwoU16s.rs @@ -29,4 +29,3 @@ pub fn main() { assert!(x == y); } } - diff --git a/src/test/run-pass/extern-pass-TwoU32s.rs b/src/test/run-pass/extern-pass-TwoU32s.rs index 16d14a96cfe4f..6ac5967c54fd5 100644 --- a/src/test/run-pass/extern-pass-TwoU32s.rs +++ b/src/test/run-pass/extern-pass-TwoU32s.rs @@ -27,4 +27,3 @@ pub fn main() { assert!(x == y); } } - diff --git a/src/test/run-pass/extern-pass-TwoU64s-ref.rs b/src/test/run-pass/extern-pass-TwoU64s-ref.rs index 56d3f8ebbff7f..2b18dba90f7fe 100644 --- a/src/test/run-pass/extern-pass-TwoU64s-ref.rs +++ b/src/test/run-pass/extern-pass-TwoU64s-ref.rs @@ -26,4 +26,3 @@ pub fn main() { assert!(x == y); } } - diff --git a/src/test/run-pass/extern-pass-TwoU64s.rs b/src/test/run-pass/extern-pass-TwoU64s.rs index 24dd3db8aca1c..3a1f4a51238f1 100644 --- a/src/test/run-pass/extern-pass-TwoU64s.rs +++ b/src/test/run-pass/extern-pass-TwoU64s.rs @@ -31,4 +31,3 @@ pub fn main() { assert!(x == y); } } - diff --git a/src/test/run-pass/extern-pass-TwoU8s.rs b/src/test/run-pass/extern-pass-TwoU8s.rs index 213e9a68a7f89..7d08b436908dc 100644 --- a/src/test/run-pass/extern-pass-TwoU8s.rs +++ b/src/test/run-pass/extern-pass-TwoU8s.rs @@ -29,4 +29,3 @@ pub fn main() { assert!(x == y); } } - diff --git a/src/test/run-pass/extern-pass-char.rs b/src/test/run-pass/extern-pass-char.rs index f4fa6bde392b9..645396e5a988d 100644 --- a/src/test/run-pass/extern-pass-char.rs +++ b/src/test/run-pass/extern-pass-char.rs @@ -19,4 +19,3 @@ pub fn main() { assert!(22_u8 == rust_dbg_extern_identity_u8(22_u8)); } } - diff --git a/src/test/run-pass/extern-pass-double.rs b/src/test/run-pass/extern-pass-double.rs index 4e16acb4ad580..3a6dd26a9dc6c 100644 --- a/src/test/run-pass/extern-pass-double.rs +++ b/src/test/run-pass/extern-pass-double.rs @@ -17,4 +17,3 @@ pub fn main() { assert!(22.0_f64 == rust_dbg_extern_identity_double(22.0_f64)); } } - diff --git a/src/test/run-pass/extern-pass-u32.rs b/src/test/run-pass/extern-pass-u32.rs index 14d05f821770a..19c4d6e153998 100644 --- a/src/test/run-pass/extern-pass-u32.rs +++ b/src/test/run-pass/extern-pass-u32.rs @@ -19,4 +19,3 @@ pub fn main() { assert!(22_u32 == rust_dbg_extern_identity_u32(22_u32)); } } - diff --git a/src/test/run-pass/extern-pass-u64.rs b/src/test/run-pass/extern-pass-u64.rs index 2b5a03a4d7122..cce669999222a 100644 --- a/src/test/run-pass/extern-pass-u64.rs +++ b/src/test/run-pass/extern-pass-u64.rs @@ -19,4 +19,3 @@ pub fn main() { assert!(22_u64 == rust_dbg_extern_identity_u64(22_u64)); } } - diff --git a/src/test/run-pass/extern-pub.rs b/src/test/run-pass/extern-pub.rs index 9bfeec8c7d6ce..f9b0ccbb5480e 100644 --- a/src/test/run-pass/extern-pub.rs +++ b/src/test/run-pass/extern-pub.rs @@ -6,5 +6,3 @@ extern { pub fn main() { } - - diff --git a/src/test/run-pass/fat-arrow-alt.rs b/src/test/run-pass/fat-arrow-alt.rs index 4b8b552bfaed3..f6b49960fad70 100644 --- a/src/test/run-pass/fat-arrow-alt.rs +++ b/src/test/run-pass/fat-arrow-alt.rs @@ -23,4 +23,3 @@ pub fn main() { blue => { 3 } }); } - diff --git a/src/test/run-pass/fixed_length_copy.rs b/src/test/run-pass/fixed_length_copy.rs index 5daa525d9b161..7ee3f5173b030 100644 --- a/src/test/run-pass/fixed_length_copy.rs +++ b/src/test/run-pass/fixed_length_copy.rs @@ -10,7 +10,7 @@ // error on implicit copies to check fixed length vectors -// are implicitly copyable +// are implicitly copyable #[deny(implicit_copies)] pub fn main() { let arr = [1,2,3]; diff --git a/src/test/run-pass/float-literal-inference.rs b/src/test/run-pass/float-literal-inference.rs index 2b59d7bfceeb2..a5246eef0b0ed 100644 --- a/src/test/run-pass/float-literal-inference.rs +++ b/src/test/run-pass/float-literal-inference.rs @@ -20,4 +20,3 @@ pub fn main() { let z = S { z: 1.0 }; io::println(z.z.to_str()); } - diff --git a/src/test/run-pass/fn-pattern-expected-type-2.rs b/src/test/run-pass/fn-pattern-expected-type-2.rs index f9bf9b5915eb1..501bd81d5589c 100644 --- a/src/test/run-pass/fn-pattern-expected-type-2.rs +++ b/src/test/run-pass/fn-pattern-expected-type-2.rs @@ -15,4 +15,3 @@ pub fn main() { io::println(x.to_str()); } } - diff --git a/src/test/run-pass/fn-pattern-expected-type.rs b/src/test/run-pass/fn-pattern-expected-type.rs index dc3f33a1991a4..f3949a0f43bf3 100644 --- a/src/test/run-pass/fn-pattern-expected-type.rs +++ b/src/test/run-pass/fn-pattern-expected-type.rs @@ -15,4 +15,3 @@ pub fn main() { }; f((1, 2)); } - diff --git a/src/test/run-pass/foreign-mod-unused-const.rs b/src/test/run-pass/foreign-mod-unused-const.rs index 430da7a3f608b..4909e9d7e568f 100644 --- a/src/test/run-pass/foreign-mod-unused-const.rs +++ b/src/test/run-pass/foreign-mod-unused-const.rs @@ -17,4 +17,3 @@ mod foo { pub fn main() { } - diff --git a/src/test/run-pass/functional-struct-update.rs b/src/test/run-pass/functional-struct-update.rs index f1db6db417a23..297b5e78a921c 100644 --- a/src/test/run-pass/functional-struct-update.rs +++ b/src/test/run-pass/functional-struct-update.rs @@ -18,4 +18,3 @@ pub fn main() { let c = Foo { x: 4, .. a}; io::println(fmt!("%?", c)); } - diff --git a/src/test/run-pass/generic-ivec-leak.rs b/src/test/run-pass/generic-ivec-leak.rs index 8d9b0fa6ddb85..ac6e3e1a69a99 100644 --- a/src/test/run-pass/generic-ivec-leak.rs +++ b/src/test/run-pass/generic-ivec-leak.rs @@ -11,4 +11,3 @@ enum wrapper { wrapped(T), } pub fn main() { let w = wrapped(~[1, 2, 3, 4, 5]); } - diff --git a/src/test/run-pass/generic-ivec.rs b/src/test/run-pass/generic-ivec.rs index 031821d990965..2a288c8abbf35 100644 --- a/src/test/run-pass/generic-ivec.rs +++ b/src/test/run-pass/generic-ivec.rs @@ -10,4 +10,3 @@ fn f(v: @T) { } pub fn main() { f(@~[1, 2, 3, 4, 5]); } - diff --git a/src/test/run-pass/generic-newtype-struct.rs b/src/test/run-pass/generic-newtype-struct.rs index 7c7d73eda1092..cf4279d67b84d 100644 --- a/src/test/run-pass/generic-newtype-struct.rs +++ b/src/test/run-pass/generic-newtype-struct.rs @@ -4,4 +4,3 @@ pub fn main() { let s = S(2i); io::println(s.to_str()); } - diff --git a/src/test/run-pass/generic-object.rs b/src/test/run-pass/generic-object.rs index ebfc362c72c43..54ae2c58e42ea 100644 --- a/src/test/run-pass/generic-object.rs +++ b/src/test/run-pass/generic-object.rs @@ -27,4 +27,3 @@ pub fn main() { let y = x as @Foo; assert!(y.get() == 1); } - diff --git a/src/test/run-pass/global-scope.rs b/src/test/run-pass/global-scope.rs index 3dd912dea9a13..9b292a325c03a 100644 --- a/src/test/run-pass/global-scope.rs +++ b/src/test/run-pass/global-scope.rs @@ -18,4 +18,3 @@ pub mod foo { } pub fn main() { return foo::g(); } - diff --git a/src/test/run-pass/impl-privacy-xc-1.rs b/src/test/run-pass/impl-privacy-xc-1.rs index df001c7ab212e..19d3caf818d19 100644 --- a/src/test/run-pass/impl-privacy-xc-1.rs +++ b/src/test/run-pass/impl-privacy-xc-1.rs @@ -7,4 +7,3 @@ pub fn main() { let fish = impl_privacy_xc_1::Fish { x: 1 }; fish.swim(); } - diff --git a/src/test/run-pass/impl-privacy-xc-2.rs b/src/test/run-pass/impl-privacy-xc-2.rs index 69bd31ab766da..74d9a34e1618c 100644 --- a/src/test/run-pass/impl-privacy-xc-2.rs +++ b/src/test/run-pass/impl-privacy-xc-2.rs @@ -8,4 +8,3 @@ pub fn main() { let fish2 = impl_privacy_xc_2::Fish { x: 2 }; io::println(if fish1.eq(&fish2) { "yes" } else { "no " }); } - diff --git a/src/test/run-pass/infinite-loops.rs b/src/test/run-pass/infinite-loops.rs index 611a4b9ccabdd..b2ed6d95c206a 100644 --- a/src/test/run-pass/infinite-loops.rs +++ b/src/test/run-pass/infinite-loops.rs @@ -21,9 +21,9 @@ fn loopy(n: int) { loop { } } -pub fn main() { +pub fn main() { // Commenting this out, as this will hang forever otherwise. // Even after seeing the comment above, I'm not sure what the // intention of this test is. - // do spawn { loopy(5) }; + // do spawn { loopy(5) }; } diff --git a/src/test/run-pass/instantiable.rs b/src/test/run-pass/instantiable.rs index c140a66ffe4d6..2173bae85e1e1 100644 --- a/src/test/run-pass/instantiable.rs +++ b/src/test/run-pass/instantiable.rs @@ -18,4 +18,3 @@ struct X { x: uint, nxt: *foo } pub fn main() { let x = foo(X {x: 0, nxt: ptr::null()}); } - diff --git a/src/test/run-pass/int-conversion-coherence.rs b/src/test/run-pass/int-conversion-coherence.rs index 235fab107e781..ef2a84da219c9 100644 --- a/src/test/run-pass/int-conversion-coherence.rs +++ b/src/test/run-pass/int-conversion-coherence.rs @@ -23,4 +23,3 @@ impl foo of plus for int { fn plus() -> int { self + 10 } } pub fn main() { assert!(10.plus() == 20); } - diff --git a/src/test/run-pass/intrinsics-integer.rs b/src/test/run-pass/intrinsics-integer.rs index b96ea8cbb7b43..1a0d97a5c5b03 100644 --- a/src/test/run-pass/intrinsics-integer.rs +++ b/src/test/run-pass/intrinsics-integer.rs @@ -89,7 +89,7 @@ pub fn main() { assert!((cttz16(-1i16) == 0i16)); assert!((cttz32(-1i32) == 0i32)); assert!((cttz64(-1i64) == 0i64)); - + assert!((cttz8(0i8) == 8i8)); assert!((cttz16(0i16) == 16i16)); assert!((cttz32(0i32) == 32i32)); diff --git a/src/test/run-pass/intrinsics-math.rs b/src/test/run-pass/intrinsics-math.rs index 60e32a56ee5d8..6f9179bc89d09 100644 --- a/src/test/run-pass/intrinsics-math.rs +++ b/src/test/run-pass/intrinsics-math.rs @@ -83,7 +83,7 @@ pub fn main() { assert!((log2f32(8f32).fuzzy_eq(&3f32))); assert!((log2f64(f64::consts::e).fuzzy_eq(&f64::consts::log2_e))); - + assert!((fmaf32(1.0f32, 2.0f32, 5.0f32).fuzzy_eq(&7.0f32))); assert!((fmaf64(0.0f64, -2.0f64, f64::consts::e).fuzzy_eq(&f64::consts::e))); @@ -97,7 +97,7 @@ pub fn main() { // undefined reference to llvm.ceil.f32/64 //assert!((ceilf32(-2.3f32) == -2.0f32)); //assert!((ceilf64(3.8f64) == 4.0f64)); - + // Causes linker error // undefined reference to llvm.trunc.f32/64 //assert!((truncf32(0.1f32) == 0.0f32)); diff --git a/src/test/run-pass/issue-1516.rs b/src/test/run-pass/issue-1516.rs index 33be716cc5f48..fe3feeb3dbf90 100644 --- a/src/test/run-pass/issue-1516.rs +++ b/src/test/run-pass/issue-1516.rs @@ -10,4 +10,3 @@ // xfail-test pub fn main() { let early_error: @fn(str) -> ! = {|msg| fail!() }; } - diff --git a/src/test/run-pass/issue-2185.rs b/src/test/run-pass/issue-2185.rs index 8a553784c5e2e..5b320ddc06bb6 100644 --- a/src/test/run-pass/issue-2185.rs +++ b/src/test/run-pass/issue-2185.rs @@ -15,7 +15,7 @@ // notes on this test case: // On Thu, Apr 18, 2013 at 6:30 PM, John Clements wrote: // the "issue-2185.rs" test was xfailed with a ref to #2263. Issue #2263 is now fixed, so I tried it again, and after adding some &self parameters, I got this error: -// +// // Running /usr/local/bin/rustc: // issue-2185.rs:24:0: 26:1 error: conflicting implementations for a trait // issue-2185.rs:24 impl iterable for @fn(&fn(uint)) { @@ -25,7 +25,7 @@ // issue-2185.rs:20 impl iterable for @fn(&fn(A)) { // issue-2185.rs:21 fn iter(&self, blk: &fn(A)) { self(blk); } // issue-2185.rs:22 } -// +// // … so it looks like it's just not possible to implement both the generic iterable and iterable for the type iterable. Is it okay if I just remove this test? // // but Niko responded: diff --git a/src/test/run-pass/issue-2216.rs b/src/test/run-pass/issue-2216.rs index 98965cb6d9102..c3a2a4c0b7e24 100644 --- a/src/test/run-pass/issue-2216.rs +++ b/src/test/run-pass/issue-2216.rs @@ -10,7 +10,7 @@ pub fn main() { let mut x = 0; - + 'foo: loop { 'bar: loop { 'quux: loop { diff --git a/src/test/run-pass/issue-2526-a.rs b/src/test/run-pass/issue-2526-a.rs index c91b5dd303c09..39ce74947e997 100644 --- a/src/test/run-pass/issue-2526-a.rs +++ b/src/test/run-pass/issue-2526-a.rs @@ -15,4 +15,3 @@ extern mod issue_2526; use issue_2526::*; pub fn main() {} - diff --git a/src/test/run-pass/issue-2734.rs b/src/test/run-pass/issue-2734.rs index 7125e89287cbd..319146d0a810d 100644 --- a/src/test/run-pass/issue-2734.rs +++ b/src/test/run-pass/issue-2734.rs @@ -8,8 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -trait hax { } -impl hax for A { } +trait hax { } +impl hax for A { } fn perform_hax(x: @T) -> @hax { @x as @hax diff --git a/src/test/run-pass/issue-2904.rs b/src/test/run-pass/issue-2904.rs index ef7fd69157791..77cc6b3e1b5b5 100644 --- a/src/test/run-pass/issue-2904.rs +++ b/src/test/run-pass/issue-2904.rs @@ -37,7 +37,7 @@ impl to_str::ToStr for square { closed_lift => { ~"L" } open_lift => { ~"O" } earth => { ~"." } - empty => { ~" " } + empty => { ~" " } } } } diff --git a/src/test/run-pass/issue-3176.rs b/src/test/run-pass/issue-3176.rs index 03b1c127c55ff..55d62a5bf8ee3 100644 --- a/src/test/run-pass/issue-3176.rs +++ b/src/test/run-pass/issue-3176.rs @@ -20,7 +20,7 @@ pub fn main() { p2.recv(); error!("sibling fails"); fail!(); - } + } let (p3,c3) = comm::stream(); c.send(c3); c2.send(()); @@ -28,7 +28,7 @@ pub fn main() { let (p, c) = comm::stream(); (p, p3).select(); c.send(()); - }; + }; error!("parent tries"); assert!(!p.recv().try_send(())); error!("all done!"); diff --git a/src/test/run-pass/issue-3250.rs b/src/test/run-pass/issue-3250.rs index a563544b5c70d..0a93b89a94d42 100644 --- a/src/test/run-pass/issue-3250.rs +++ b/src/test/run-pass/issue-3250.rs @@ -2,6 +2,4 @@ type t = (uint, uint); - - pub fn main() { } diff --git a/src/test/run-pass/issue-3429.rs b/src/test/run-pass/issue-3429.rs index 67877795cc0d8..7bfb928e86d7d 100644 --- a/src/test/run-pass/issue-3429.rs +++ b/src/test/run-pass/issue-3429.rs @@ -13,4 +13,3 @@ pub fn main() { let y: @fn() -> int = || x; let z = y(); } - diff --git a/src/test/run-pass/issue-3461.rs b/src/test/run-pass/issue-3461.rs index 4c4144f28e891..dae35d7237b85 100644 --- a/src/test/run-pass/issue-3461.rs +++ b/src/test/run-pass/issue-3461.rs @@ -12,6 +12,6 @@ pub fn main() { fn foo() { } - + let bar: ~fn() = ~foo; } diff --git a/src/test/run-pass/issue-3556.rs b/src/test/run-pass/issue-3556.rs index 703dcd54f0ac8..ff2fa80102bfc 100644 --- a/src/test/run-pass/issue-3556.rs +++ b/src/test/run-pass/issue-3556.rs @@ -10,7 +10,7 @@ extern mod std; use core::io::WriterUtil; - + enum Token { Text(@~str), ETag(@~[~str], @~str), @@ -19,7 +19,7 @@ enum Token { IncompleteSection(@~[~str], bool, @~str, bool), Partial(@~str, @~str, @~str), } - + fn check_strs(actual: &str, expected: &str) -> bool { if actual != expected @@ -29,12 +29,12 @@ fn check_strs(actual: &str, expected: &str) -> bool } return true; } - + pub fn main() { // assert!(check_strs(fmt!("%?", Text(@~"foo")), "Text(@~\"foo\")")); // assert!(check_strs(fmt!("%?", ETag(@~[~"foo"], @~"bar")), "ETag(@~[ ~\"foo\" ], @~\"bar\")")); - + let t = Text(@~"foo"); let u = Section(@~[~"alpha"], true, @~[t], @~"foo", @~"foo", @~"foo", @~"foo", @~"foo"); let v = fmt!("%?", u); // this is the line that causes the seg fault diff --git a/src/test/run-pass/issue-3563-3.rs b/src/test/run-pass/issue-3563-3.rs index 9b7ab67c1a3e8..96925a97a1016 100644 --- a/src/test/run-pass/issue-3563-3.rs +++ b/src/test/run-pass/issue-3563-3.rs @@ -62,7 +62,7 @@ impl Drop for AsciiArt { // It's common to define a constructor sort of function to create struct instances. // If there is a canonical constructor it is typically named the same as the type. -// Other constructor sort of functions are typically named from_foo, from_bar, etc. +// Other constructor sort of functions are typically named from_foo, from_bar, etc. fn AsciiArt(width: uint, height: uint, fill: char) -> AsciiArt { // Use an anonymous function to build a vector of vectors containing @@ -72,7 +72,7 @@ fn AsciiArt(width: uint, height: uint, fill: char) -> AsciiArt { for height.times { - let mut line = ~[]; + let mut line = ~[]; vec::grow_set(&mut line, width-1, &'.', '.'); push(line); } @@ -208,4 +208,3 @@ pub fn main() { test_add_pt(); test_shapes(); } - diff --git a/src/test/run-pass/issue-3609.rs b/src/test/run-pass/issue-3609.rs index fc6ceb4130fcd..6c26ac3f65e1c 100644 --- a/src/test/run-pass/issue-3609.rs +++ b/src/test/run-pass/issue-3609.rs @@ -24,4 +24,3 @@ fn foo(name: ~str, samples_chan: Chan) { } pub fn main() {} - diff --git a/src/test/run-pass/issue-3860.rs b/src/test/run-pass/issue-3860.rs index 46aa7187c9a02..778b2b72b13d9 100644 --- a/src/test/run-pass/issue-3860.rs +++ b/src/test/run-pass/issue-3860.rs @@ -19,6 +19,6 @@ pub impl Foo { pub fn main() { let mut x = @mut Foo { x: 3 }; // Neither of the next two lines should cause an error - let _ = x.stuff(); + let _ = x.stuff(); x.stuff(); } diff --git a/src/test/run-pass/issue-3895.rs b/src/test/run-pass/issue-3895.rs index d3820c1e54712..388e09ddb3e39 100644 --- a/src/test/run-pass/issue-3895.rs +++ b/src/test/run-pass/issue-3895.rs @@ -11,7 +11,7 @@ // xfail-test pub fn main() { enum State { BadChar, BadSyntax } - + match BadChar { _ if true => BadChar, BadChar | BadSyntax => fail!() , diff --git a/src/test/run-pass/issue-3979-2.rs b/src/test/run-pass/issue-3979-2.rs index c485590f4aa17..a04e35108028c 100644 --- a/src/test/run-pass/issue-3979-2.rs +++ b/src/test/run-pass/issue-3979-2.rs @@ -24,4 +24,3 @@ trait C: B { } pub fn main() {} - diff --git a/src/test/run-pass/issue-4241.rs b/src/test/run-pass/issue-4241.rs index 18bc471afab1d..e5905e7a5be21 100644 --- a/src/test/run-pass/issue-4241.rs +++ b/src/test/run-pass/issue-4241.rs @@ -55,7 +55,7 @@ priv fn parse_list(len: uint, io: @io::Reader) -> Result { priv fn chop(s: ~str) -> ~str { s.slice(0, s.len() - 1).to_owned() } - + priv fn parse_bulk(io: @io::Reader) -> Result { match int::from_str(chop(io.read_line())) { None => fail!(), diff --git a/src/test/run-pass/issue-4875.rs b/src/test/run-pass/issue-4875.rs index 51c23e7680826..81947791881fe 100644 --- a/src/test/run-pass/issue-4875.rs +++ b/src/test/run-pass/issue-4875.rs @@ -19,4 +19,3 @@ fn foo(Foo{_}: Foo) { pub fn main() { } - diff --git a/src/test/run-pass/issue-868.rs b/src/test/run-pass/issue-868.rs index 16e8fa18c2a02..2a82f559d547c 100644 --- a/src/test/run-pass/issue-868.rs +++ b/src/test/run-pass/issue-868.rs @@ -22,4 +22,3 @@ pub fn main() { let _ = f(||{}); let _ = (||{}); } - diff --git a/src/test/run-pass/issue_3136_b.rs b/src/test/run-pass/issue_3136_b.rs index c5b6b6b220cd0..b1d28a1eb67e9 100644 --- a/src/test/run-pass/issue_3136_b.rs +++ b/src/test/run-pass/issue_3136_b.rs @@ -13,4 +13,3 @@ extern mod issue_3136_a; pub fn main() {} - diff --git a/src/test/run-pass/ivec-add.rs b/src/test/run-pass/ivec-add.rs index 1b9e818421e2e..bd58ae6565143 100644 --- a/src/test/run-pass/ivec-add.rs +++ b/src/test/run-pass/ivec-add.rs @@ -21,4 +21,3 @@ pub fn main() { assert!((d[0] == 1)); assert!((d[1] == 1)); } - diff --git a/src/test/run-pass/ivec-pass-by-value.rs b/src/test/run-pass/ivec-pass-by-value.rs index 756f38196fded..3a3b5746b9d6f 100644 --- a/src/test/run-pass/ivec-pass-by-value.rs +++ b/src/test/run-pass/ivec-pass-by-value.rs @@ -10,4 +10,3 @@ fn f(a: ~[int]) { } pub fn main() { f(~[1, 2, 3, 4, 5]); } - diff --git a/src/test/run-pass/labeled-break.rs b/src/test/run-pass/labeled-break.rs index 06ca401a136e7..32cd7f0c7f8a7 100644 --- a/src/test/run-pass/labeled-break.rs +++ b/src/test/run-pass/labeled-break.rs @@ -18,4 +18,3 @@ pub fn main() { } } } - diff --git a/src/test/run-pass/let-assignability.rs b/src/test/run-pass/let-assignability.rs index 51fa84613cae9..0afc3ee87e0f4 100644 --- a/src/test/run-pass/let-assignability.rs +++ b/src/test/run-pass/let-assignability.rs @@ -17,4 +17,3 @@ fn f() { pub fn main() { f(); } - diff --git a/src/test/run-pass/liveness-assign-imm-local-after-loop.rs b/src/test/run-pass/liveness-assign-imm-local-after-loop.rs index f352a2b527306..5d59c4c14716f 100644 --- a/src/test/run-pass/liveness-assign-imm-local-after-loop.rs +++ b/src/test/run-pass/liveness-assign-imm-local-after-loop.rs @@ -16,5 +16,5 @@ fn test(cond: bool) { } pub fn main() { - // note: don't call test()... :) + // note: don't call test()... :) } diff --git a/src/test/run-pass/log-linearized.rs b/src/test/run-pass/log-linearized.rs index 919c53e033066..0f388489000fe 100644 --- a/src/test/run-pass/log-linearized.rs +++ b/src/test/run-pass/log-linearized.rs @@ -32,4 +32,3 @@ fn f() { pub fn main() { f::(); } - diff --git a/src/test/run-pass/max-min-classes.rs b/src/test/run-pass/max-min-classes.rs index 58dcb24edf917..d986d7e676a12 100644 --- a/src/test/run-pass/max-min-classes.rs +++ b/src/test/run-pass/max-min-classes.rs @@ -37,4 +37,3 @@ pub fn main() { let foo = Foo(3, 20); io::println(fmt!("%d %d", foo.sum(), foo.product())); } - diff --git a/src/test/run-pass/module-qualified-struct-destructure.rs b/src/test/run-pass/module-qualified-struct-destructure.rs index 6fb6d21f13f1a..87c854d32be8b 100644 --- a/src/test/run-pass/module-qualified-struct-destructure.rs +++ b/src/test/run-pass/module-qualified-struct-destructure.rs @@ -19,4 +19,3 @@ pub fn main() { let x = m::S { x: 1, y: 2 }; let m::S { x: a, y: b } = x; } - diff --git a/src/test/run-pass/move-self.rs b/src/test/run-pass/move-self.rs index d84646957283a..4ed1faf65b628 100644 --- a/src/test/run-pass/move-self.rs +++ b/src/test/run-pass/move-self.rs @@ -16,4 +16,3 @@ pub fn main() { let x = S { x: ~"Hello!" }; x.foo(); } - diff --git a/src/test/run-pass/moves-based-on-type-capture-clause.rs b/src/test/run-pass/moves-based-on-type-capture-clause.rs index 2f427ca48aab2..26d4773d961aa 100644 --- a/src/test/run-pass/moves-based-on-type-capture-clause.rs +++ b/src/test/run-pass/moves-based-on-type-capture-clause.rs @@ -4,4 +4,3 @@ pub fn main() { io::println(x); } } - diff --git a/src/test/run-pass/multiple-trait-bounds.rs b/src/test/run-pass/multiple-trait-bounds.rs index 3c6559b9c0dfd..cdfa93d309459 100644 --- a/src/test/run-pass/multiple-trait-bounds.rs +++ b/src/test/run-pass/multiple-trait-bounds.rs @@ -4,4 +4,3 @@ fn f(_: T) { pub fn main() { f(3); } - diff --git a/src/test/run-pass/mut-vstore-expr.rs b/src/test/run-pass/mut-vstore-expr.rs index 0ababc43c3f30..fa6dde5b3ef88 100644 --- a/src/test/run-pass/mut-vstore-expr.rs +++ b/src/test/run-pass/mut-vstore-expr.rs @@ -11,4 +11,3 @@ pub fn main() { let x: &mut [int] = &mut [ 1, 2, 3 ]; } - diff --git a/src/test/run-pass/nested-class.rs b/src/test/run-pass/nested-class.rs index 44348223b605d..83820f87d5030 100644 --- a/src/test/run-pass/nested-class.rs +++ b/src/test/run-pass/nested-class.rs @@ -9,14 +9,13 @@ // except according to those terms. pub fn main() { - - struct b { - i: int, - } + struct b { + i: int, + } - pub impl b { - fn do_stuff(&self) -> int { return 37; } - } + pub impl b { + fn do_stuff(&self) -> int { return 37; } + } fn b(i:int) -> b { b { @@ -24,10 +23,9 @@ pub fn main() { } } - // fn b(x:int) -> int { fail!(); } + // fn b(x:int) -> int { fail!(); } - let z = b(42); - assert!((z.i == 42)); - assert!((z.do_stuff() == 37)); - + let z = b(42); + assert!((z.i == 42)); + assert!((z.do_stuff() == 37)); } diff --git a/src/test/run-pass/new-impl-syntax.rs b/src/test/run-pass/new-impl-syntax.rs index 12b41fc91485e..2603353f0cff8 100644 --- a/src/test/run-pass/new-impl-syntax.rs +++ b/src/test/run-pass/new-impl-syntax.rs @@ -23,4 +23,3 @@ pub fn main() { io::println(Thingy { x: 1, y: 2 }.to_str()); io::println(PolymorphicThingy { x: Thingy { x: 1, y: 2 } }.to_str()); } - diff --git a/src/test/run-pass/new-import-syntax.rs b/src/test/run-pass/new-import-syntax.rs index 267f365c7134c..1390ae5f7ebe0 100644 --- a/src/test/run-pass/new-import-syntax.rs +++ b/src/test/run-pass/new-import-syntax.rs @@ -13,4 +13,3 @@ use core::io::println; pub fn main() { println("Hello world!"); } - diff --git a/src/test/run-pass/new-style-constants.rs b/src/test/run-pass/new-style-constants.rs index 9a319ea6a5c50..6fe4a88d07183 100644 --- a/src/test/run-pass/new-style-constants.rs +++ b/src/test/run-pass/new-style-constants.rs @@ -15,4 +15,3 @@ static FOO: int = 3; pub fn main() { println(fmt!("%d", FOO)); } - diff --git a/src/test/run-pass/new-style-fixed-length-vec.rs b/src/test/run-pass/new-style-fixed-length-vec.rs index 5d37a42af4242..6eea23f6b2b06 100644 --- a/src/test/run-pass/new-style-fixed-length-vec.rs +++ b/src/test/run-pass/new-style-fixed-length-vec.rs @@ -15,6 +15,3 @@ static FOO: [int, ..3] = [1, 2, 3]; pub fn main() { println(fmt!("%d %d %d", FOO[0], FOO[1], FOO[2])); } - - - diff --git a/src/test/run-pass/new-vstore-mut-box-syntax.rs b/src/test/run-pass/new-vstore-mut-box-syntax.rs index 971e870d1f8c0..63569c7198260 100644 --- a/src/test/run-pass/new-vstore-mut-box-syntax.rs +++ b/src/test/run-pass/new-vstore-mut-box-syntax.rs @@ -12,4 +12,3 @@ pub fn main() { let x: @mut [int] = @mut [ 1, 2, 3 ]; } - diff --git a/src/test/run-pass/newtype-struct-with-dtor.rs b/src/test/run-pass/newtype-struct-with-dtor.rs index b33bfa0388a59..eb3b74553b7ba 100644 --- a/src/test/run-pass/newtype-struct-with-dtor.rs +++ b/src/test/run-pass/newtype-struct-with-dtor.rs @@ -13,5 +13,3 @@ impl Drop for Fd { pub fn main() { } - - diff --git a/src/test/run-pass/newtype-struct-xc-2.rs b/src/test/run-pass/newtype-struct-xc-2.rs index 1fca01f737327..cedf1d42c3dcd 100644 --- a/src/test/run-pass/newtype-struct-xc-2.rs +++ b/src/test/run-pass/newtype-struct-xc-2.rs @@ -11,4 +11,3 @@ fn f() -> Au { pub fn main() { let _ = f(); } - diff --git a/src/test/run-pass/newtype-struct-xc.rs b/src/test/run-pass/newtype-struct-xc.rs index 49ce618e37b4c..2280b335f3f93 100644 --- a/src/test/run-pass/newtype-struct-xc.rs +++ b/src/test/run-pass/newtype-struct-xc.rs @@ -6,4 +6,3 @@ extern mod newtype_struct_xc; pub fn main() { let _ = newtype_struct_xc::Au(2); } - diff --git a/src/test/run-pass/nullable-pointer-iotareduction.rs b/src/test/run-pass/nullable-pointer-iotareduction.rs index 0c4d297403cfb..206381bcef72d 100644 --- a/src/test/run-pass/nullable-pointer-iotareduction.rs +++ b/src/test/run-pass/nullable-pointer-iotareduction.rs @@ -20,7 +20,7 @@ use core::{option, cast}; enum E { Thing(int, T), Nothing((), ((), ()), [i8, ..0]) } impl E { - fn is_none(&self) -> bool { + fn is_none(&self) -> bool { match *self { Thing(*) => false, Nothing(*) => true diff --git a/src/test/run-pass/one-tuple.rs b/src/test/run-pass/one-tuple.rs index 2efa0b98b6a27..eb32e7cda1ad8 100644 --- a/src/test/run-pass/one-tuple.rs +++ b/src/test/run-pass/one-tuple.rs @@ -21,4 +21,3 @@ pub fn main() { let (y,) = x; assert!(y == 'd'); } - diff --git a/src/test/run-pass/pattern-in-closure.rs b/src/test/run-pass/pattern-in-closure.rs index 7194fca519b7a..08c749235c2c8 100644 --- a/src/test/run-pass/pattern-in-closure.rs +++ b/src/test/run-pass/pattern-in-closure.rs @@ -19,4 +19,3 @@ pub fn main() { f((2, 3)); g(Foo { x: 1, y: 2 }); } - diff --git a/src/test/run-pass/pipe-detect-term.rs b/src/test/run-pass/pipe-detect-term.rs index bd0ffa6459067..55e43075204cc 100644 --- a/src/test/run-pass/pipe-detect-term.rs +++ b/src/test/run-pass/pipe-detect-term.rs @@ -29,7 +29,7 @@ proto! oneshot ( pub fn main() { let iotask = &uv::global_loop::get(); - + let (chan, port) = oneshot::init(); let port = Cell(port); do spawn { @@ -48,7 +48,7 @@ pub fn main() { fn failtest() { let (c, p) = oneshot::init(); - do task::spawn_with(c) |_c| { + do task::spawn_with(c) |_c| { fail!(); } diff --git a/src/test/run-pass/pipe-pingpong-bounded.rs b/src/test/run-pass/pipe-pingpong-bounded.rs index 6d82663d19560..69d87804b42dd 100644 --- a/src/test/run-pass/pipe-pingpong-bounded.rs +++ b/src/test/run-pass/pipe-pingpong-bounded.rs @@ -99,7 +99,7 @@ mod test { let pong(_chan) = recv(chan); error!("Received pong"); } - + pub fn server(+chan: ::pingpong::server::ping) { use pingpong::server; diff --git a/src/test/run-pass/pipe-pingpong-proto.rs b/src/test/run-pass/pipe-pingpong-proto.rs index 65a5672941f28..d1198f3611d15 100644 --- a/src/test/run-pass/pipe-pingpong-proto.rs +++ b/src/test/run-pass/pipe-pingpong-proto.rs @@ -37,7 +37,7 @@ mod test { let pong(_chan) = recv(chan); error!(~"Received pong"); } - + pub fn server(+chan: ::pingpong::server::ping) { use pingpong::server; diff --git a/src/test/run-pass/pipe-select.rs b/src/test/run-pass/pipe-select.rs index 12d60c9d6ab01..8782f6f6ebd15 100644 --- a/src/test/run-pass/pipe-select.rs +++ b/src/test/run-pass/pipe-select.rs @@ -55,8 +55,8 @@ pub fn main() { use stream::client::*; let iotask = &uv::global_loop::get(); - - let c = spawn_service(stream::init, |p| { + + let c = spawn_service(stream::init, |p| { error!("waiting for pipes"); let stream::send(x, p) = recv(p); error!("got pipes"); @@ -86,7 +86,7 @@ pub fn main() { let (_c2, p2) = oneshot::init(); let c = send(c, (p1, p2)); - + sleep(iotask, 100); signal(c1); diff --git a/src/test/run-pass/pipe-sleep.rs b/src/test/run-pass/pipe-sleep.rs index 86ffc96e89aec..da49a4303a6d7 100644 --- a/src/test/run-pass/pipe-sleep.rs +++ b/src/test/run-pass/pipe-sleep.rs @@ -55,6 +55,6 @@ pub fn main() { let iotask = &uv::global_loop::get(); sleep(iotask, 500); - + signal(c); } diff --git a/src/test/run-pass/pub-use-xcrate.rs b/src/test/run-pass/pub-use-xcrate.rs index 03004e5e47522..74ae81e63e239 100644 --- a/src/test/run-pass/pub-use-xcrate.rs +++ b/src/test/run-pass/pub-use-xcrate.rs @@ -21,4 +21,3 @@ pub fn main() { name: 0 }; } - diff --git a/src/test/run-pass/pub_use_mods_xcrate_exe.rs b/src/test/run-pass/pub_use_mods_xcrate_exe.rs index 1d60cab3a82ef..953a99e1fd5be 100644 --- a/src/test/run-pass/pub_use_mods_xcrate_exe.rs +++ b/src/test/run-pass/pub_use_mods_xcrate_exe.rs @@ -15,4 +15,3 @@ extern mod pub_use_mods_xcrate; use pub_use_mods_xcrate::a::c; pub fn main(){} - diff --git a/src/test/run-pass/reexport-star.rs b/src/test/run-pass/reexport-star.rs index 3b9fe688d4d1e..3cc250b170744 100644 --- a/src/test/run-pass/reexport-star.rs +++ b/src/test/run-pass/reexport-star.rs @@ -25,4 +25,3 @@ pub fn main() { b::f(); b::g(); } - diff --git a/src/test/run-pass/regions-addr-of-interior-of-unique-box.rs b/src/test/run-pass/regions-addr-of-interior-of-unique-box.rs index 1fb9c126e74e2..7efe62236f35e 100644 --- a/src/test/run-pass/regions-addr-of-interior-of-unique-box.rs +++ b/src/test/run-pass/regions-addr-of-interior-of-unique-box.rs @@ -26,4 +26,3 @@ fn get_x<'r>(x: &'r Character) -> &'r int { pub fn main() { } - diff --git a/src/test/run-pass/regions-addr-of-ret.rs b/src/test/run-pass/regions-addr-of-ret.rs index a9c65d012954c..9e19618f332e0 100644 --- a/src/test/run-pass/regions-addr-of-ret.rs +++ b/src/test/run-pass/regions-addr-of-ret.rs @@ -16,4 +16,3 @@ pub fn main() { let three = &3; error!(fmt!("%d", *f(three))); } - diff --git a/src/test/run-pass/regions-fn-subtyping-2.rs b/src/test/run-pass/regions-fn-subtyping-2.rs index a660b9c9ee2d5..ef8d9970c2b47 100644 --- a/src/test/run-pass/regions-fn-subtyping-2.rs +++ b/src/test/run-pass/regions-fn-subtyping-2.rs @@ -19,10 +19,8 @@ fn has_same_region(f: &fn<'a>(x: &'a int, g: &fn(y: &'a int))) { wants_same_region(f); } -fn wants_same_region(_f: &fn<'b>(x: &'b int, g: &fn(y: &'b int))) { +fn wants_same_region(_f: &fn<'b>(x: &'b int, g: &fn(y: &'b int))) { } pub fn main() { } - - diff --git a/src/test/run-pass/regions-infer-borrow-scope-addr-of.rs b/src/test/run-pass/regions-infer-borrow-scope-addr-of.rs index ee2682ff4ab93..39da08de6df2c 100644 --- a/src/test/run-pass/regions-infer-borrow-scope-addr-of.rs +++ b/src/test/run-pass/regions-infer-borrow-scope-addr-of.rs @@ -13,15 +13,15 @@ pub fn main() { for uint::range(0, 3) |i| { // ensure that the borrow in this alt - // does not inferfere with the swap - // below. note that it would it you - // naively borrowed &x for the lifetime - // of the variable x, as we once did + // does not inferfere with the swap + // below. note that it would it you + // naively borrowed &x for the lifetime + // of the variable x, as we once did match i { - i => { - let y = &x; - assert!(i < *y); - } + i => { + let y = &x; + assert!(i < *y); + } } let mut y = 4; y <-> x; diff --git a/src/test/run-pass/regions-infer-borrow-scope-view.rs b/src/test/run-pass/regions-infer-borrow-scope-view.rs index 9358ea8a77724..8f7452f2d06ed 100644 --- a/src/test/run-pass/regions-infer-borrow-scope-view.rs +++ b/src/test/run-pass/regions-infer-borrow-scope-view.rs @@ -16,4 +16,3 @@ pub fn main() { let y = view(x); assert!((v[0] == x[0]) && (v[0] == y[0])); } - diff --git a/src/test/run-pass/regions-infer-borrow-scope-within-loop-ok.rs b/src/test/run-pass/regions-infer-borrow-scope-within-loop-ok.rs index 08c54c790b1f0..73535f52043eb 100644 --- a/src/test/run-pass/regions-infer-borrow-scope-within-loop-ok.rs +++ b/src/test/run-pass/regions-infer-borrow-scope-within-loop-ok.rs @@ -15,6 +15,6 @@ pub fn main() { loop { let y = borrow(x); assert!(*x == *y); - break; + break; } } diff --git a/src/test/run-pass/regions-infer-borrow-scope.rs b/src/test/run-pass/regions-infer-borrow-scope.rs index e06a2fea1c194..61b9000aea318 100644 --- a/src/test/run-pass/regions-infer-borrow-scope.rs +++ b/src/test/run-pass/regions-infer-borrow-scope.rs @@ -19,4 +19,3 @@ pub fn main() { let xc = x_coord(p); assert!(*xc == 3); } - diff --git a/src/test/run-pass/regions-mock-trans-impls.rs b/src/test/run-pass/regions-mock-trans-impls.rs index e916350574883..d54aae7bb6337 100644 --- a/src/test/run-pass/regions-mock-trans-impls.rs +++ b/src/test/run-pass/regions-mock-trans-impls.rs @@ -52,4 +52,3 @@ pub fn main() { let mut ccx = Ccx { x: 0 }; f(&mut ccx); } - diff --git a/src/test/run-pass/regions-mock-trans.rs b/src/test/run-pass/regions-mock-trans.rs index c46e41ab0eb1c..0ea6f852a897c 100644 --- a/src/test/run-pass/regions-mock-trans.rs +++ b/src/test/run-pass/regions-mock-trans.rs @@ -52,4 +52,3 @@ pub fn main() { let ccx = Ccx { x: 0 }; f(&ccx); } - diff --git a/src/test/run-pass/regions-self-impls.rs b/src/test/run-pass/regions-self-impls.rs index 2f4eefe5243ad..c43fd0db5666c 100644 --- a/src/test/run-pass/regions-self-impls.rs +++ b/src/test/run-pass/regions-self-impls.rs @@ -25,4 +25,3 @@ pub fn main() { debug!(*clam.get_chowder()); clam.get_chowder(); } - diff --git a/src/test/run-pass/regions-self-in-enums.rs b/src/test/run-pass/regions-self-in-enums.rs index 78045e5e5d410..5f8b9ee333289 100644 --- a/src/test/run-pass/regions-self-in-enums.rs +++ b/src/test/run-pass/regions-self-in-enums.rs @@ -21,4 +21,3 @@ pub fn main() { } debug!(*z); } - diff --git a/src/test/run-pass/regions-simple.rs b/src/test/run-pass/regions-simple.rs index f7a50e6b114a3..436fede4dc11e 100644 --- a/src/test/run-pass/regions-simple.rs +++ b/src/test/run-pass/regions-simple.rs @@ -14,5 +14,3 @@ pub fn main() { *y = 5; debug!(*y); } - - diff --git a/src/test/run-pass/repeated-vector-syntax.rs b/src/test/run-pass/repeated-vector-syntax.rs index a22384a6b53d0..f3d6c1640d881 100644 --- a/src/test/run-pass/repeated-vector-syntax.rs +++ b/src/test/run-pass/repeated-vector-syntax.rs @@ -21,4 +21,3 @@ pub fn main() { error!("%?", x); error!("%?", y); } - diff --git a/src/test/run-pass/resource-cycle.rs b/src/test/run-pass/resource-cycle.rs index fdb8c2a496c6b..f498553834a1e 100644 --- a/src/test/run-pass/resource-cycle.rs +++ b/src/test/run-pass/resource-cycle.rs @@ -57,7 +57,7 @@ pub fn main() { debug!("r = %x", cast::transmute::<*r, uint>(&rs)); rs } }); - + debug!("x1 = %x, x1.r = %x", cast::transmute::<@mut t, uint>(x1), cast::transmute::<*r, uint>(&x1.r)); @@ -70,7 +70,7 @@ pub fn main() { rs } }); - + debug!("x2 = %x, x2.r = %x", cast::transmute::<@mut t, uint>(x2), cast::transmute::<*r, uint>(&(x2.r))); diff --git a/src/test/run-pass/resource-cycle3.rs b/src/test/run-pass/resource-cycle3.rs index 0d699a6e49b6c..ef71372477862 100644 --- a/src/test/run-pass/resource-cycle3.rs +++ b/src/test/run-pass/resource-cycle3.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// same as resource-cycle2, but be sure to give r multiple fields... +// same as resource-cycle2, but be sure to give r multiple fields... // Don't leak the unique pointers @@ -50,7 +50,7 @@ struct Node { r: R } -pub fn main() { +pub fn main() { unsafe { let i1 = ~0xA; let i1p = cast::transmute_copy(&i1); diff --git a/src/test/run-pass/self-type-param.rs b/src/test/run-pass/self-type-param.rs index 0af197968040f..d90ec51bedfa2 100644 --- a/src/test/run-pass/self-type-param.rs +++ b/src/test/run-pass/self-type-param.rs @@ -13,4 +13,3 @@ impl MyTrait for S { } pub fn main() {} - diff --git a/src/test/run-pass/static-methods-in-traits.rs b/src/test/run-pass/static-methods-in-traits.rs index d171434aa482d..42d0f02d6425c 100644 --- a/src/test/run-pass/static-methods-in-traits.rs +++ b/src/test/run-pass/static-methods-in-traits.rs @@ -9,27 +9,26 @@ // except according to those terms. mod a { - pub trait Foo { - pub fn foo() -> Self; - } + pub trait Foo { + pub fn foo() -> Self; + } - impl Foo for int { - pub fn foo() -> int { - 3 - } - } - - impl Foo for uint { - pub fn foo() -> uint { - 5u - } - } + impl Foo for int { + pub fn foo() -> int { + 3 + } + } + + impl Foo for uint { + pub fn foo() -> uint { + 5u + } + } } pub fn main() { - let x: int = a::Foo::foo(); - let y: uint = a::Foo::foo(); - assert!(x == 3); - assert!(y == 5); + let x: int = a::Foo::foo(); + let y: uint = a::Foo::foo(); + assert!(x == 3); + assert!(y == 5); } - diff --git a/src/test/run-pass/struct-deref.rs b/src/test/run-pass/struct-deref.rs index f71bc06a1cf8d..a52a2851689bb 100644 --- a/src/test/run-pass/struct-deref.rs +++ b/src/test/run-pass/struct-deref.rs @@ -14,4 +14,3 @@ pub fn main() { let x: Foo = Foo(2); assert!(*x == 2); } - diff --git a/src/test/run-pass/struct-field-assignability.rs b/src/test/run-pass/struct-field-assignability.rs index 1e13c7b86bf8c..0aca1a3d05fdf 100644 --- a/src/test/run-pass/struct-field-assignability.rs +++ b/src/test/run-pass/struct-field-assignability.rs @@ -6,4 +6,3 @@ pub fn main() { let f = Foo { x: @3 }; assert!(*f.x == 3); } - diff --git a/src/test/run-pass/struct-like-variant-construct.rs b/src/test/run-pass/struct-like-variant-construct.rs index 0d14d90c1f1aa..bc2dce680c956 100644 --- a/src/test/run-pass/struct-like-variant-construct.rs +++ b/src/test/run-pass/struct-like-variant-construct.rs @@ -22,4 +22,3 @@ enum Foo { pub fn main() { let x = Bar { a: 2, b: 3 }; } - diff --git a/src/test/run-pass/struct-like-variant-match.rs b/src/test/run-pass/struct-like-variant-match.rs index 3158d2836ddde..64a75ddab22b7 100644 --- a/src/test/run-pass/struct-like-variant-match.rs +++ b/src/test/run-pass/struct-like-variant-match.rs @@ -38,4 +38,3 @@ pub fn main() { let y = Baz { x: 1.0, y: 2.0 }; f(&y); } - diff --git a/src/test/run-pass/struct-pattern-matching.rs b/src/test/run-pass/struct-pattern-matching.rs index 1d7bcb2585fbd..1bda2d2412d2a 100644 --- a/src/test/run-pass/struct-pattern-matching.rs +++ b/src/test/run-pass/struct-pattern-matching.rs @@ -19,6 +19,3 @@ pub fn main() { Foo { x: x, y: y } => io::println(fmt!("yes, %d, %d", x, y)) } } - - - diff --git a/src/test/run-pass/super.rs b/src/test/run-pass/super.rs index 2fe0696b2f261..b5eb6e850456e 100644 --- a/src/test/run-pass/super.rs +++ b/src/test/run-pass/super.rs @@ -9,4 +9,3 @@ pub mod a { pub fn main() { } - diff --git a/src/test/run-pass/tag-disr-val-shape.rs b/src/test/run-pass/tag-disr-val-shape.rs index 50ab17fdeeae9..dd78dff0d6ea7 100644 --- a/src/test/run-pass/tag-disr-val-shape.rs +++ b/src/test/run-pass/tag-disr-val-shape.rs @@ -23,4 +23,3 @@ pub fn main() { assert!(~"green" == fmt!("%?", green)); assert!(~"white" == fmt!("%?", white)); } - diff --git a/src/test/run-pass/tag-variant-disr-val.rs b/src/test/run-pass/tag-variant-disr-val.rs index 0806f1ea92aec..d4eadd366de06 100644 --- a/src/test/run-pass/tag-variant-disr-val.rs +++ b/src/test/run-pass/tag-variant-disr-val.rs @@ -69,5 +69,3 @@ fn get_color_if(color: color) -> ~str { else if color == orange {~"orange"} else {~"unknown"} } - - diff --git a/src/test/run-pass/threads.rs b/src/test/run-pass/threads.rs index f736ded3db2a5..288a23b855b60 100644 --- a/src/test/run-pass/threads.rs +++ b/src/test/run-pass/threads.rs @@ -19,4 +19,3 @@ pub fn main() { } fn child(&&x: int) { debug!(x); } - diff --git a/src/test/run-pass/trait-composition-trivial.rs b/src/test/run-pass/trait-composition-trivial.rs index 328c0b6888cc9..de130bf1b41fe 100644 --- a/src/test/run-pass/trait-composition-trivial.rs +++ b/src/test/run-pass/trait-composition-trivial.rs @@ -17,5 +17,3 @@ trait Bar : Foo { } pub fn main() {} - - diff --git a/src/test/run-pass/trait-inheritance-auto-xc-2.rs b/src/test/run-pass/trait-inheritance-auto-xc-2.rs index 446dd4b3d8ee1..996f55d4019a8 100644 --- a/src/test/run-pass/trait-inheritance-auto-xc-2.rs +++ b/src/test/run-pass/trait-inheritance-auto-xc-2.rs @@ -30,4 +30,3 @@ pub fn main() { let a = &A { x: 3 }; f(a); } - diff --git a/src/test/run-pass/trait-inheritance-auto-xc.rs b/src/test/run-pass/trait-inheritance-auto-xc.rs index 03287809a9be1..3af8d606bf4ae 100644 --- a/src/test/run-pass/trait-inheritance-auto-xc.rs +++ b/src/test/run-pass/trait-inheritance-auto-xc.rs @@ -31,4 +31,3 @@ pub fn main() { let a = &A { x: 3 }; f(a); } - diff --git a/src/test/run-pass/trait-inheritance-auto.rs b/src/test/run-pass/trait-inheritance-auto.rs index b74064591d3bc..fb97dd5e7741a 100644 --- a/src/test/run-pass/trait-inheritance-auto.rs +++ b/src/test/run-pass/trait-inheritance-auto.rs @@ -34,4 +34,3 @@ pub fn main() { let a = &A { x: 3 }; f(a); } - diff --git a/src/test/run-pass/trait-inheritance-call-bound-inherited.rs b/src/test/run-pass/trait-inheritance-call-bound-inherited.rs index 26b96f933269b..805c9655d81d4 100644 --- a/src/test/run-pass/trait-inheritance-call-bound-inherited.rs +++ b/src/test/run-pass/trait-inheritance-call-bound-inherited.rs @@ -25,4 +25,3 @@ pub fn main() { let a = &A { x: 3 }; assert!(gg(a) == 10); } - diff --git a/src/test/run-pass/trait-inheritance-call-bound-inherited2.rs b/src/test/run-pass/trait-inheritance-call-bound-inherited2.rs index 5e612bbca6487..0b35fd90bbd19 100644 --- a/src/test/run-pass/trait-inheritance-call-bound-inherited2.rs +++ b/src/test/run-pass/trait-inheritance-call-bound-inherited2.rs @@ -28,4 +28,3 @@ pub fn main() { let a = &A { x: 3 }; assert!(gg(a) == 10); } - diff --git a/src/test/run-pass/trait-inheritance-cast-without-call-to-supertrait.rs b/src/test/run-pass/trait-inheritance-cast-without-call-to-supertrait.rs index 6efd854e01b42..df9cc4fb8b6d4 100644 --- a/src/test/run-pass/trait-inheritance-cast-without-call-to-supertrait.rs +++ b/src/test/run-pass/trait-inheritance-cast-without-call-to-supertrait.rs @@ -38,4 +38,3 @@ pub fn main() { assert!(afoo.f() == 10); assert!(abar.g() == 20); } - diff --git a/src/test/run-pass/trait-inheritance-cast.rs b/src/test/run-pass/trait-inheritance-cast.rs index 023827977976e..75c121e10b014 100644 --- a/src/test/run-pass/trait-inheritance-cast.rs +++ b/src/test/run-pass/trait-inheritance-cast.rs @@ -40,4 +40,3 @@ pub fn main() { assert!(abar.g() == 20); assert!(abar.f() == 10); } - diff --git a/src/test/run-pass/trait-inheritance-cross-trait-call-xc.rs b/src/test/run-pass/trait-inheritance-cross-trait-call-xc.rs index 3c1bf2035aa71..976c9a0243927 100644 --- a/src/test/run-pass/trait-inheritance-cross-trait-call-xc.rs +++ b/src/test/run-pass/trait-inheritance-cross-trait-call-xc.rs @@ -27,4 +27,3 @@ pub fn main() { let a = &aux::A { x: 3 }; assert!(a.g() == 10); } - diff --git a/src/test/run-pass/trait-inheritance-cross-trait-call.rs b/src/test/run-pass/trait-inheritance-cross-trait-call.rs index 997f13d0e5e35..20dac16b4927d 100644 --- a/src/test/run-pass/trait-inheritance-cross-trait-call.rs +++ b/src/test/run-pass/trait-inheritance-cross-trait-call.rs @@ -24,4 +24,3 @@ pub fn main() { let a = &A { x: 3 }; assert!(a.g() == 10); } - diff --git a/src/test/run-pass/trait-inheritance-overloading-simple.rs b/src/test/run-pass/trait-inheritance-overloading-simple.rs index 711571e8c64f5..3a1c3716df442 100644 --- a/src/test/run-pass/trait-inheritance-overloading-simple.rs +++ b/src/test/run-pass/trait-inheritance-overloading-simple.rs @@ -32,4 +32,3 @@ pub fn main() { assert!(x != y); assert!(x == z); } - diff --git a/src/test/run-pass/trait-inheritance-overloading-xc-exe.rs b/src/test/run-pass/trait-inheritance-overloading-xc-exe.rs index 9f745db76386c..d89852e2b05f9 100644 --- a/src/test/run-pass/trait-inheritance-overloading-xc-exe.rs +++ b/src/test/run-pass/trait-inheritance-overloading-xc-exe.rs @@ -27,4 +27,3 @@ pub fn main() { assert!(b == mi(-2)); assert!(c == mi(15)); } - diff --git a/src/test/run-pass/trait-inheritance-overloading.rs b/src/test/run-pass/trait-inheritance-overloading.rs index 5b68aff269e3c..e58ec24f1b7d4 100644 --- a/src/test/run-pass/trait-inheritance-overloading.rs +++ b/src/test/run-pass/trait-inheritance-overloading.rs @@ -46,4 +46,3 @@ pub fn main() { assert!(b == mi(-2)); assert!(c == mi(15)); } - diff --git a/src/test/run-pass/trait-inheritance-self.rs b/src/test/run-pass/trait-inheritance-self.rs index 02ed518ff6591..5eb87b7a96b8b 100644 --- a/src/test/run-pass/trait-inheritance-self.rs +++ b/src/test/run-pass/trait-inheritance-self.rs @@ -26,4 +26,3 @@ pub fn main() { let s = S { x: 1 }; s.g(); } - diff --git a/src/test/run-pass/trait-inheritance-simple.rs b/src/test/run-pass/trait-inheritance-simple.rs index 779dfb65944c9..2da1f02779e0a 100644 --- a/src/test/run-pass/trait-inheritance-simple.rs +++ b/src/test/run-pass/trait-inheritance-simple.rs @@ -29,4 +29,3 @@ pub fn main() { assert!(ff(a) == 10); assert!(gg(a) == 20); } - diff --git a/src/test/run-pass/trait-inheritance-subst.rs b/src/test/run-pass/trait-inheritance-subst.rs index 22efdabec83ab..479f293a396e3 100644 --- a/src/test/run-pass/trait-inheritance-subst.rs +++ b/src/test/run-pass/trait-inheritance-subst.rs @@ -33,4 +33,3 @@ pub fn main() { let z = f(x, y); assert!(z.val == 8) } - diff --git a/src/test/run-pass/trait-inheritance-subst2.rs b/src/test/run-pass/trait-inheritance-subst2.rs index 4f3b808f8ebc0..5d1741a45f327 100644 --- a/src/test/run-pass/trait-inheritance-subst2.rs +++ b/src/test/run-pass/trait-inheritance-subst2.rs @@ -43,4 +43,3 @@ pub fn main() { let z = f(x, y); assert!(z.val == 13); } - diff --git a/src/test/run-pass/trait-inheritance2.rs b/src/test/run-pass/trait-inheritance2.rs index 5d6913d4146b9..adb7ab018d6c4 100644 --- a/src/test/run-pass/trait-inheritance2.rs +++ b/src/test/run-pass/trait-inheritance2.rs @@ -31,4 +31,3 @@ pub fn main() { let a = &A { x: 3 }; f(a); } - diff --git a/src/test/run-pass/trait-region-pointer-simple.rs b/src/test/run-pass/trait-region-pointer-simple.rs index 285b0e65daf67..a2742828a1bc0 100644 --- a/src/test/run-pass/trait-region-pointer-simple.rs +++ b/src/test/run-pass/trait-region-pointer-simple.rs @@ -28,4 +28,3 @@ pub fn main() { let b = (&a) as &Foo; assert!(b.f() == 3); } - diff --git a/src/test/run-pass/trait-static-method-overwriting.rs b/src/test/run-pass/trait-static-method-overwriting.rs index a8a579422a372..86ebc5356ebdc 100644 --- a/src/test/run-pass/trait-static-method-overwriting.rs +++ b/src/test/run-pass/trait-static-method-overwriting.rs @@ -21,7 +21,7 @@ mod base { impl ::base::HasNew for Foo { fn new() -> Foo { - unsafe { io::println("Foo"); } + unsafe { io::println("Foo"); } Foo { dummy: () } } } @@ -32,7 +32,7 @@ mod base { impl ::base::HasNew for Bar { fn new() -> Bar { - unsafe { io::println("Bar"); } + unsafe { io::println("Bar"); } Bar { dummy: () } } } @@ -40,5 +40,5 @@ mod base { pub fn main() { let f: base::Foo = base::HasNew::new::(); - let b: base::Bar = base::HasNew::new::(); + let b: base::Bar = base::HasNew::new::(); } diff --git a/src/test/run-pass/traits.rs b/src/test/run-pass/traits.rs index c4ec15ff2730a..ba3e8e082b345 100644 --- a/src/test/run-pass/traits.rs +++ b/src/test/run-pass/traits.rs @@ -53,4 +53,3 @@ impl Ord for int { self == (*a) } } - diff --git a/src/test/run-pass/tuple-struct-construct.rs b/src/test/run-pass/tuple-struct-construct.rs index ea410093c4bd2..c5ea3e14d3924 100644 --- a/src/test/run-pass/tuple-struct-construct.rs +++ b/src/test/run-pass/tuple-struct-construct.rs @@ -14,4 +14,3 @@ pub fn main() { let x = Foo(1, 2); io::println(fmt!("%?", x)); } - diff --git a/src/test/run-pass/tuple-struct-destructuring.rs b/src/test/run-pass/tuple-struct-destructuring.rs index 7e6b9570defae..1cb944da0403e 100644 --- a/src/test/run-pass/tuple-struct-destructuring.rs +++ b/src/test/run-pass/tuple-struct-destructuring.rs @@ -17,4 +17,3 @@ pub fn main() { assert!(y == 1); assert!(z == 2); } - diff --git a/src/test/run-pass/tuple-struct-matching.rs b/src/test/run-pass/tuple-struct-matching.rs index 405616f9b1fef..e3cbd1201c127 100644 --- a/src/test/run-pass/tuple-struct-matching.rs +++ b/src/test/run-pass/tuple-struct-matching.rs @@ -20,4 +20,3 @@ pub fn main() { } } } - diff --git a/src/test/run-pass/tuple-struct-trivial.rs b/src/test/run-pass/tuple-struct-trivial.rs index 8ddc04a186f2c..c6c32cf49c682 100644 --- a/src/test/run-pass/tuple-struct-trivial.rs +++ b/src/test/run-pass/tuple-struct-trivial.rs @@ -14,4 +14,3 @@ struct Foo(int, int, int); pub fn main() { } - diff --git a/src/test/run-pass/typeclasses-eq-example-static.rs b/src/test/run-pass/typeclasses-eq-example-static.rs index 9c5f8c3218a93..c14dd0471f91e 100644 --- a/src/test/run-pass/typeclasses-eq-example-static.rs +++ b/src/test/run-pass/typeclasses-eq-example-static.rs @@ -38,7 +38,7 @@ impl Equal for ColorTree { fn isEq(a: ColorTree, b: ColorTree) -> bool { match (a, b) { (leaf(x), leaf(y)) => { Equal::isEq(x, y) } - (branch(l1, r1), branch(l2, r2)) => { + (branch(l1, r1), branch(l2, r2)) => { Equal::isEq(*l1, *l2) && Equal::isEq(*r1, *r2) } _ => { false } diff --git a/src/test/run-pass/typeclasses-eq-example.rs b/src/test/run-pass/typeclasses-eq-example.rs index 51c19cef50afd..18a68bc1c34f9 100644 --- a/src/test/run-pass/typeclasses-eq-example.rs +++ b/src/test/run-pass/typeclasses-eq-example.rs @@ -37,7 +37,7 @@ impl Equal for ColorTree { fn isEq(&self, a: ColorTree) -> bool { match (*self, a) { (leaf(x), leaf(y)) => { x.isEq(y) } - (branch(l1, r1), branch(l2, r2)) => { + (branch(l1, r1), branch(l2, r2)) => { (*l1).isEq(*l2) && (*r1).isEq(*r2) } _ => { false } diff --git a/src/test/run-pass/unique-object.rs b/src/test/run-pass/unique-object.rs index 1cf4cf09b81cd..5e0954969ef8d 100644 --- a/src/test/run-pass/unique-object.rs +++ b/src/test/run-pass/unique-object.rs @@ -27,4 +27,3 @@ pub fn main() { let y = x as ~Foo; assert!(y.f() == 10); } - diff --git a/src/test/run-pass/unit-like-struct.rs b/src/test/run-pass/unit-like-struct.rs index 837bfa50b8e05..1b81015b02910 100644 --- a/src/test/run-pass/unit-like-struct.rs +++ b/src/test/run-pass/unit-like-struct.rs @@ -16,4 +16,3 @@ pub fn main() { Foo => { io::println("hi"); } } } - diff --git a/src/test/run-pass/unsafe-pointer-assignability.rs b/src/test/run-pass/unsafe-pointer-assignability.rs index 05c9cd8a57400..f19558fbb1d01 100644 --- a/src/test/run-pass/unsafe-pointer-assignability.rs +++ b/src/test/run-pass/unsafe-pointer-assignability.rs @@ -17,6 +17,3 @@ fn f(x: *int) { pub fn main() { f(&3); } - - - diff --git a/src/test/run-pass/vec-fixed-length.rs b/src/test/run-pass/vec-fixed-length.rs index 5ce1b04dbe9a0..2c4add63e8b87 100644 --- a/src/test/run-pass/vec-fixed-length.rs +++ b/src/test/run-pass/vec-fixed-length.rs @@ -12,4 +12,3 @@ pub fn main() { let x: [int, ..4] = [1, 2, 3, 4]; io::println(fmt!("%d", x[0])); } - From 9f76ca6508d82036e6ff1723dcd395998a4baa81 Mon Sep 17 00:00:00 2001 From: Tim Chevalier Date: Fri, 3 May 2013 17:24:44 -0700 Subject: [PATCH 189/410] rustpkg: Make code actually compile oops. --- src/librustc/metadata/filesearch.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/librustc/metadata/filesearch.rs b/src/librustc/metadata/filesearch.rs index ded0b314d44bb..7547f7f763af0 100644 --- a/src/librustc/metadata/filesearch.rs +++ b/src/librustc/metadata/filesearch.rs @@ -39,9 +39,8 @@ pub fn mk_filesearch(maybe_sysroot: &Option<@Path>, fn sysroot(&self) -> @Path { self.sysroot } fn for_each_lib_search_path(&self, f: &fn(&Path) -> bool) { debug!("filesearch: searching additional lib search paths"); - if !self.addl_lib_search_paths.each(f) { - return; - } + // a little weird + self.addl_lib_search_paths.each(f); debug!("filesearch: searching target lib path"); if !f(&make_target_lib_path(self.sysroot, @@ -59,7 +58,7 @@ pub fn mk_filesearch(maybe_sysroot: &Option<@Path>, match get_rustpkg_lib_path() { result::Ok(ref p) => f(p), result::Err(_) => true - } + }; } fn get_target_lib_path(&self) -> Path { make_target_lib_path(self.sysroot, self.target_triple) From 5681571f6c3480ececdefd07eb313baa6c13ae22 Mon Sep 17 00:00:00 2001 From: Young-il Choi Date: Sat, 4 May 2013 10:35:07 +0900 Subject: [PATCH 190/410] compiletest: remove --host and cleanup --- mk/tests.mk | 3 +- src/compiletest/common.rs | 9 +- src/compiletest/compiletest.rc | 29 ++-- src/compiletest/runtest.rs | 250 +++++++++++++++++---------------- 4 files changed, 145 insertions(+), 146 deletions(-) diff --git a/mk/tests.mk b/mk/tests.mk index 9997f170a98f0..35ced32f1f2e9 100644 --- a/mk/tests.mk +++ b/mk/tests.mk @@ -497,9 +497,8 @@ CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3) := \ --compile-lib-path $$(HLIB$(1)_H_$(3)) \ --run-lib-path $$(TLIB$(1)_T_$(2)_H_$(3)) \ --rustc-path $$(HBIN$(1)_H_$(3))/rustc$$(X_$(3)) \ - --aux-base $$(S)src/test/auxiliary/ \ + --aux-base $$(S)src/test/auxiliary/ \ --stage-id stage$(1)-$(2) \ - --host $(CFG_BUILD_TRIPLE) \ --target $(2) \ --adb-path=$(CFG_ADB) \ --adb-test-dir=$(CFG_ADB_TEST_DIR) \ diff --git a/src/compiletest/common.rs b/src/compiletest/common.rs index 87a7dae5a7f6e..38289f6274180 100644 --- a/src/compiletest/common.rs +++ b/src/compiletest/common.rs @@ -64,10 +64,7 @@ pub struct config { // Run tests using the new runtime newrt: bool, - // Host System to be built - host: ~str, - - // Target System to be executed + // Target system to be tested target: ~str, // Extra parameter to run adb on arm-linux-androideabi @@ -76,8 +73,8 @@ pub struct config { // Extra parameter to run test sute on arm-linux-androideabi adb_test_dir: ~str, - // check if can be run or not - flag_runnable: bool, + // status whether android device available or not + adb_device_status: bool, // Explain what's going on verbose: bool diff --git a/src/compiletest/compiletest.rc b/src/compiletest/compiletest.rc index fab73d78021c2..3fb6937819ee3 100644 --- a/src/compiletest/compiletest.rc +++ b/src/compiletest/compiletest.rc @@ -61,7 +61,6 @@ pub fn parse_config(args: ~[~str]) -> config { getopts::optopt(~"logfile"), getopts::optflag(~"jit"), getopts::optflag(~"newrt"), - getopts::optopt(~"host"), getopts::optopt(~"target"), getopts::optopt(~"adb-path"), getopts::optopt(~"adb-test-dir") @@ -98,25 +97,18 @@ pub fn parse_config(args: ~[~str]) -> config { rustcflags: getopts::opt_maybe_str(matches, ~"rustcflags"), jit: getopts::opt_present(matches, ~"jit"), newrt: getopts::opt_present(matches, ~"newrt"), - host: opt_str(getopts::opt_maybe_str(matches, ~"host")), target: opt_str(getopts::opt_maybe_str(matches, ~"target")), adb_path: opt_str(getopts::opt_maybe_str(matches, ~"adb-path")), adb_test_dir: opt_str(getopts::opt_maybe_str(matches, ~"adb-test-dir")), - flag_runnable: - if (getopts::opt_maybe_str(matches, ~"host") == - getopts::opt_maybe_str(matches, ~"target")) { true } - else { - match getopts::opt_maybe_str(matches, ~"target") { - Some(~"arm-linux-androideabi") => { - if (opt_str(getopts::opt_maybe_str(matches, ~"adb-test-dir")) != - ~"(none)" && - opt_str(getopts::opt_maybe_str(matches, ~"adb-test-dir")) != - ~"") { true } - else { false } - } - _ => { true } - } - }, + adb_device_status: + if (opt_str(getopts::opt_maybe_str(matches, ~"target")) == + ~"arm-linux-androideabi") { + if (opt_str(getopts::opt_maybe_str(matches, ~"adb-test-dir")) != + ~"(none)" && + opt_str(getopts::opt_maybe_str(matches, ~"adb-test-dir")) != + ~"") { true } + else { false } + } else { false }, verbose: getopts::opt_present(matches, ~"verbose") } } @@ -137,11 +129,10 @@ pub fn log_config(config: config) { logv(c, fmt!("rustcflags: %s", opt_str(config.rustcflags))); logv(c, fmt!("jit: %b", config.jit)); logv(c, fmt!("newrt: %b", config.newrt)); - logv(c, fmt!("host: %s", config.host)); logv(c, fmt!("target: %s", config.target)); logv(c, fmt!("adb_path: %s", config.adb_path)); logv(c, fmt!("adb_test_dir: %s", config.adb_test_dir)); - logv(c, fmt!("flag_runnable: %b", config.flag_runnable)); + logv(c, fmt!("adb_device_status: %b", config.adb_device_status)); logv(c, fmt!("verbose: %b", config.verbose)); logv(c, fmt!("\n")); } diff --git a/src/compiletest/runtest.rs b/src/compiletest/runtest.rs index d1319c395add6..07b439174be33 100644 --- a/src/compiletest/runtest.rs +++ b/src/compiletest/runtest.rs @@ -77,18 +77,19 @@ fn run_rfail_test(config: config, props: TestProps, testfile: &Path) { fatal_ProcRes(~"run-fail test isn't valgrind-clean!", ProcRes); } - if (config.host == config.target) { - check_correct_failure_status(ProcRes); - check_error_patterns(props, testfile, ProcRes); - } else { - match (config.target, config.flag_runnable) { + match config.target { - (~"arm-linux-androideabi", false) => { } - _ => { + ~"arm-linux-androideabi" => { + if (config.adb_device_status) { check_correct_failure_status(ProcRes); check_error_patterns(props, testfile, ProcRes); } } + + _=> { + check_correct_failure_status(ProcRes); + check_error_patterns(props, testfile, ProcRes); + } } } @@ -494,99 +495,21 @@ fn exec_compiled_test(config: config, props: TestProps, props.exec_env }; - if (config.host == config.target) { - compose_and_run(config, testfile, - make_run_args(config, props, testfile), - env, - config.run_lib_path, None) - } else { - let args = make_run_args(config, props, testfile); - let cmdline = make_cmdline(~"", args.prog, args.args); - - match (config.target, config.flag_runnable) { - - (~"arm-linux-androideabi", true) => { - - // get bare program string - let mut tvec = ~[]; - let tstr = args.prog; - for str::each_split_char(tstr, '/') |ts| { tvec.push(ts.to_owned()) } - let prog_short = tvec.pop(); - - // copy to target - let copy_result = procsrv::run(~"", config.adb_path, - ~[~"push", args.prog, config.adb_test_dir], - ~[(~"",~"")], Some(~"")); - - if config.verbose { - io::stdout().write_str(fmt!("push (%s) %s %s %s", - config.target, args.prog, - copy_result.out, copy_result.err)); - } - - // execute program - logv(config, fmt!("executing (%s) %s", config.target, cmdline)); - - // NOTE: adb shell dose not forward stdout and stderr of internal result - // to stdout and stderr seperately but to stdout only - let mut newargs_out = ~[]; - let mut newargs_err = ~[]; - let subargs = args.args; - newargs_out.push(~"shell"); - newargs_err.push(~"shell"); - - let mut newcmd_out = ~""; - let mut newcmd_err = ~""; - - newcmd_out.push_str(fmt!("LD_LIBRARY_PATH=%s %s/%s", - config.adb_test_dir, config.adb_test_dir, prog_short)); - - newcmd_err.push_str(fmt!("LD_LIBRARY_PATH=%s %s/%s", - config.adb_test_dir, config.adb_test_dir, prog_short)); - - for vec::each(subargs) |tv| { - newcmd_out.push_str(" "); - newcmd_err.push_str(" "); - newcmd_out.push_str(tv.to_owned()); - newcmd_err.push_str(tv.to_owned()); - } - - newcmd_out.push_str(" 2>/dev/null"); - newcmd_err.push_str(" 1>/dev/null"); - - newargs_out.push(newcmd_out); - newargs_err.push(newcmd_err); - - let exe_result_out = procsrv::run(~"", config.adb_path, - newargs_out, ~[(~"",~"")], Some(~"")); - let exe_result_err = procsrv::run(~"", config.adb_path, - newargs_err, ~[(~"",~"")], Some(~"")); + match config.target { - dump_output(config, testfile, exe_result_out.out, exe_result_err.out); - - match exe_result_err.out { - ~"" => ProcRes {status: exe_result_out.status, stdout: exe_result_out.out, - stderr: exe_result_err.out, cmdline: cmdline }, - _ => ProcRes {status: 101, stdout: exe_result_out.out, - stderr: exe_result_err.out, cmdline: cmdline } - } - } - - (~"arm-linux-androideabi", false) => { - match config.mode { - mode_run_fail => ProcRes {status: 101, stdout: ~"", - stderr: ~"", cmdline: cmdline}, - _ => ProcRes {status: 0, stdout: ~"", - stderr: ~"", cmdline: cmdline} - } + ~"arm-linux-androideabi" => { + if (config.adb_device_status) { + _arm_exec_compiled_test(config, props, testfile) + } else { + _dummy_exec_compiled_test(config, props, testfile) } + } - _=> { - compose_and_run(config, testfile, - make_run_args(config, props, testfile), - env, - config.run_lib_path, None) - } + _=> { + compose_and_run(config, testfile, + make_run_args(config, props, testfile), + env, + config.run_lib_path, None) } } } @@ -618,32 +541,16 @@ fn compose_and_run_compiler( abs_ab.to_str()), auxres); } - if (config.host != config.target) - { - match (config.target, config.flag_runnable) { - - (~"arm-linux-androideabi", true) => { - - let tstr = aux_output_dir_name(config, testfile).to_str(); - - for os::list_dir_path(&Path(tstr)).each |file| { - if (file.filetype() == Some(~".so")) { + match config.target { - let copy_result = procsrv::run(~"", config.adb_path, - ~[~"push", file.to_str(), config.adb_test_dir], - ~[(~"",~"")], Some(~"")); - - if config.verbose { - io::stdout().write_str(fmt!("push (%s) %s %s %s", - config.target, file.to_str(), - copy_result.out, copy_result.err)); - } - } - } + ~"arm-linux-androideabi" => { + if (config.adb_device_status) { + _arm_push_aux_shared_library(config, testfile); } - _=> () } + + _=> { } } } @@ -829,3 +736,108 @@ stderr:\n\ io::stdout().write_str(msg); fail!(); } + +fn _arm_exec_compiled_test(config: config, props: TestProps, + testfile: &Path) -> ProcRes { + + let args = make_run_args(config, props, testfile); + let cmdline = make_cmdline(~"", args.prog, args.args); + + // get bare program string + let mut tvec = ~[]; + let tstr = args.prog; + for str::each_split_char(tstr, '/') |ts| { tvec.push(ts.to_owned()) } + let prog_short = tvec.pop(); + + // copy to target + let copy_result = procsrv::run(~"", config.adb_path, + ~[~"push", args.prog, config.adb_test_dir], + ~[(~"",~"")], Some(~"")); + + if config.verbose { + io::stdout().write_str(fmt!("push (%s) %s %s %s", + config.target, args.prog, + copy_result.out, copy_result.err)); + } + + // execute program + logv(config, fmt!("executing (%s) %s", config.target, cmdline)); + + // adb shell dose not forward stdout and stderr of internal result + // to stdout and stderr seperately but to stdout only + let mut newargs_out = ~[]; + let mut newargs_err = ~[]; + let subargs = args.args; + newargs_out.push(~"shell"); + newargs_err.push(~"shell"); + + let mut newcmd_out = ~""; + let mut newcmd_err = ~""; + + newcmd_out.push_str(fmt!("LD_LIBRARY_PATH=%s %s/%s", + config.adb_test_dir, config.adb_test_dir, prog_short)); + + newcmd_err.push_str(fmt!("LD_LIBRARY_PATH=%s %s/%s", + config.adb_test_dir, config.adb_test_dir, prog_short)); + + for vec::each(subargs) |tv| { + newcmd_out.push_str(" "); + newcmd_err.push_str(" "); + newcmd_out.push_str(tv.to_owned()); + newcmd_err.push_str(tv.to_owned()); + } + + newcmd_out.push_str(" 2>/dev/null"); + newcmd_err.push_str(" 1>/dev/null"); + + newargs_out.push(newcmd_out); + newargs_err.push(newcmd_err); + + let exe_result_out = procsrv::run(~"", config.adb_path, + newargs_out, ~[(~"",~"")], Some(~"")); + let exe_result_err = procsrv::run(~"", config.adb_path, + newargs_err, ~[(~"",~"")], Some(~"")); + + dump_output(config, testfile, exe_result_out.out, exe_result_err.out); + + match exe_result_err.out { + ~"" => ProcRes {status: exe_result_out.status, stdout: exe_result_out.out, + stderr: exe_result_err.out, cmdline: cmdline }, + _ => ProcRes {status: 101, stdout: exe_result_out.out, + stderr: exe_result_err.out, cmdline: cmdline } + } +} + +fn _dummy_exec_compiled_test(config: config, props: TestProps, + testfile: &Path) -> ProcRes { + + let args = make_run_args(config, props, testfile); + let cmdline = make_cmdline(~"", args.prog, args.args); + + match config.mode { + mode_run_fail => ProcRes {status: 101, stdout: ~"", + stderr: ~"", cmdline: cmdline}, + _ => ProcRes {status: 0, stdout: ~"", + stderr: ~"", cmdline: cmdline} + } +} + +fn _arm_push_aux_shared_library(config: config, testfile: &Path) { + let tstr = aux_output_dir_name(config, testfile).to_str(); + + for os::list_dir_path(&Path(tstr)).each |file| { + + if (file.filetype() == Some(~".so")) { + + let copy_result = procsrv::run(~"", config.adb_path, + ~[~"push", file.to_str(), config.adb_test_dir], + ~[(~"",~"")], Some(~"")); + + if config.verbose { + io::stdout().write_str(fmt!("push (%s) %s %s %s", + config.target, file.to_str(), + copy_result.out, copy_result.err)); + } + } + } +} From 0ff8200671c38e0068ba40267d02f99737e77cab Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Fri, 3 May 2013 22:07:33 -0400 Subject: [PATCH 191/410] factor code for write guards into its own module; add neglected resolve_stage0 --- src/librustc/middle/resolve_stage0.rs | 5313 ++++++++++++++++++++++ src/librustc/middle/trans/write_guard.rs | 201 + 2 files changed, 5514 insertions(+) create mode 100644 src/librustc/middle/resolve_stage0.rs create mode 100644 src/librustc/middle/trans/write_guard.rs diff --git a/src/librustc/middle/resolve_stage0.rs b/src/librustc/middle/resolve_stage0.rs new file mode 100644 index 0000000000000..ff46abaf7128c --- /dev/null +++ b/src/librustc/middle/resolve_stage0.rs @@ -0,0 +1,5313 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +use driver::session; +use driver::session::Session; +use metadata::csearch::{each_path, get_trait_method_def_ids}; +use metadata::csearch::get_method_name_and_self_ty; +use metadata::csearch::get_static_methods_if_impl; +use metadata::csearch::get_type_name_if_impl; +use metadata::cstore::find_extern_mod_stmt_cnum; +use metadata::decoder::{def_like, dl_def, dl_field, dl_impl}; +use middle::lang_items::LanguageItems; +use middle::lint::{allow, level, unused_imports}; +use middle::lint::{get_lint_level, get_lint_settings_level}; +use middle::pat_util::pat_bindings; + +use syntax::ast::{RegionTyParamBound, TraitTyParamBound, _mod, add, arm}; +use syntax::ast::{binding_mode, bitand, bitor, bitxor, blk}; +use syntax::ast::{bind_infer, bind_by_ref, bind_by_copy}; +use syntax::ast::{crate, decl_item, def, def_arg, def_binding}; +use syntax::ast::{def_const, def_foreign_mod, def_fn, def_id, def_label}; +use syntax::ast::{def_local, def_mod, def_prim_ty, def_region, def_self}; +use syntax::ast::{def_self_ty, def_static_method, def_struct, def_ty}; +use syntax::ast::{def_ty_param, def_typaram_binder, def_trait}; +use syntax::ast::{def_upvar, def_use, def_variant, expr, expr_assign_op}; +use syntax::ast::{expr_binary, expr_break, expr_field}; +use syntax::ast::{expr_fn_block, expr_index, expr_method_call, expr_path}; +use syntax::ast::{def_prim_ty, def_region, def_self, def_ty, def_ty_param}; +use syntax::ast::{def_upvar, def_use, def_variant, quot, eq}; +use syntax::ast::{expr, expr_again, expr_assign_op}; +use syntax::ast::{expr_index, expr_loop}; +use syntax::ast::{expr_path, expr_struct, expr_unary, fn_decl}; +use syntax::ast::{foreign_item, foreign_item_const, foreign_item_fn, ge}; +use syntax::ast::Generics; +use syntax::ast::{gt, ident, inherited, item, item_struct}; +use syntax::ast::{item_const, item_enum, item_fn, item_foreign_mod}; +use syntax::ast::{item_impl, item_mac, item_mod, item_trait, item_ty, le}; +use syntax::ast::{local, local_crate, lt, method, mul}; +use syntax::ast::{named_field, ne, neg, node_id, pat, pat_enum, pat_ident}; +use syntax::ast::{Path, pat_lit, pat_range, pat_struct}; +use syntax::ast::{prim_ty, private, provided}; +use syntax::ast::{public, required, rem, self_ty_, shl, shr, stmt_decl}; +use syntax::ast::{struct_dtor, struct_field, struct_variant_kind}; +use syntax::ast::{sty_static, subtract, trait_ref, tuple_variant_kind, Ty}; +use syntax::ast::{ty_bool, ty_char, ty_f, ty_f32, ty_f64, ty_float, ty_i}; +use syntax::ast::{ty_i16, ty_i32, ty_i64, ty_i8, ty_int, TyParam, ty_path}; +use syntax::ast::{ty_str, ty_u, ty_u16, ty_u32, ty_u64, ty_u8, ty_uint}; +use syntax::ast::unnamed_field; +use syntax::ast::{variant, view_item, view_item_extern_mod}; +use syntax::ast::{view_item_use, view_path_glob, view_path_list}; +use syntax::ast::{view_path_simple, anonymous, named, not}; +use syntax::ast::{unsafe_fn}; +use syntax::ast_util::{def_id_of_def, local_def}; +use syntax::ast_util::{path_to_ident, walk_pat, trait_method_to_ty_method}; +use syntax::ast_util::{Privacy, Public, Private}; +use syntax::ast_util::{variant_visibility_to_privacy, visibility_to_privacy}; +use syntax::attr::{attr_metas, contains_name, attrs_contains_name}; +use syntax::parse::token::ident_interner; +use syntax::parse::token::special_idents; +use syntax::print::pprust::path_to_str; +use syntax::codemap::{span, dummy_sp}; +use syntax::visit::{default_visitor, mk_vt, Visitor, visit_block}; +use syntax::visit::{visit_crate, visit_expr, visit_expr_opt}; +use syntax::visit::{visit_foreign_item, visit_item}; +use syntax::visit::{visit_mod, visit_ty, vt}; +use syntax::opt_vec::OptVec; + +use core::option::Some; +use core::str::each_split_str; +use core::hashmap::{HashMap, HashSet}; +use core::util; + +// Definition mapping +pub type DefMap = @mut HashMap; + +pub struct binding_info { + span: span, + binding_mode: binding_mode, +} + +// Map from the name in a pattern to its binding mode. +pub type BindingMap = HashMap; + +// Implementation resolution +// +// FIXME #4946: This kind of duplicates information kept in +// ty::method. Maybe it should go away. + +pub struct MethodInfo { + did: def_id, + n_tps: uint, + ident: ident, + self_type: self_ty_ +} + +pub struct Impl { + did: def_id, + ident: ident, + methods: ~[@MethodInfo] +} + +// Trait method resolution +pub type TraitMap = HashMap; + +// This is the replacement export map. It maps a module to all of the exports +// within. +pub type ExportMap2 = @mut HashMap; + +pub struct Export2 { + name: @~str, // The name of the target. + def_id: def_id, // The definition of the target. + reexport: bool, // Whether this is a reexport. +} + +#[deriving(Eq)] +pub enum PatternBindingMode { + RefutableMode, + LocalIrrefutableMode, + ArgumentIrrefutableMode, +} + +#[deriving(Eq)] +pub enum Namespace { + TypeNS, + ValueNS +} + +/// A NamespaceResult represents the result of resolving an import in +/// a particular namespace. The result is either definitely-resolved, +/// definitely- unresolved, or unknown. +pub enum NamespaceResult { + /// Means that resolve hasn't gathered enough information yet to determine + /// whether the name is bound in this namespace. (That is, it hasn't + /// resolved all `use` directives yet.) + UnknownResult, + /// Means that resolve has determined that the name is definitely + /// not bound in the namespace. + UnboundResult, + /// Means that resolve has determined that the name is bound in the Module + /// argument, and specified by the NameBindings argument. + BoundResult(@mut Module, @mut NameBindings) +} + +pub impl NamespaceResult { + fn is_unknown(&self) -> bool { + match *self { + UnknownResult => true, + _ => false + } + } +} + +pub enum NameDefinition { + NoNameDefinition, //< The name was unbound. + ChildNameDefinition(def), //< The name identifies an immediate child. + ImportNameDefinition(def) //< The name identifies an import. +} + +#[deriving(Eq)] +pub enum Mutability { + Mutable, + Immutable +} + +pub enum SelfBinding { + NoSelfBinding, + HasSelfBinding(node_id, bool /* is implicit */) +} + +pub type ResolveVisitor = vt<()>; + +/// Contains data for specific types of import directives. +pub enum ImportDirectiveSubclass { + SingleImport(ident /* target */, ident /* source */), + GlobImport +} + +/// The context that we thread through while building the reduced graph. +pub enum ReducedGraphParent { + ModuleReducedGraphParent(@mut Module) +} + +pub enum ResolveResult { + Failed, // Failed to resolve the name. + Indeterminate, // Couldn't determine due to unresolved globs. + Success(T) // Successfully resolved the import. +} + +pub impl ResolveResult { + fn failed(&self) -> bool { + match *self { Failed => true, _ => false } + } + fn indeterminate(&self) -> bool { + match *self { Indeterminate => true, _ => false } + } +} + +pub enum TypeParameters<'self> { + NoTypeParameters, //< No type parameters. + HasTypeParameters(&'self Generics, //< Type parameters. + node_id, //< ID of the enclosing item + + // The index to start numbering the type parameters at. + // This is zero if this is the outermost set of type + // parameters, or equal to the number of outer type + // parameters. For example, if we have: + // + // impl I { + // fn method() { ... } + // } + // + // The index at the method site will be 1, because the + // outer T had index 0. + uint, + + // The kind of the rib used for type parameters. + RibKind) +} + +// The rib kind controls the translation of argument or local definitions +// (`def_arg` or `def_local`) to upvars (`def_upvar`). + +pub enum RibKind { + // No translation needs to be applied. + NormalRibKind, + + // We passed through a function scope at the given node ID. Translate + // upvars as appropriate. + FunctionRibKind(node_id /* func id */, node_id /* body id */), + + // We passed through an impl or trait and are now in one of its + // methods. Allow references to ty params that that impl or trait + // binds. Disallow any other upvars (including other ty params that are + // upvars). + // parent; method itself + MethodRibKind(node_id, MethodSort), + + // We passed through a function *item* scope. Disallow upvars. + OpaqueFunctionRibKind, + + // We're in a constant item. Can't refer to dynamic stuff. + ConstantItemRibKind +} + +// Methods can be required or provided. Required methods only occur in traits. +pub enum MethodSort { + Required, + Provided(node_id) +} + +// The X-ray flag indicates that a context has the X-ray privilege, which +// allows it to reference private names. Currently, this is used for the test +// runner. +// +// FIXME #4947: The X-ray flag is kind of questionable in the first +// place. It might be better to introduce an expr_xray_path instead. + +#[deriving(Eq)] +pub enum XrayFlag { + NoXray, //< Private items cannot be accessed. + Xray //< Private items can be accessed. +} + +pub enum UseLexicalScopeFlag { + DontUseLexicalScope, + UseLexicalScope +} + +pub enum SearchThroughModulesFlag { + DontSearchThroughModules, + SearchThroughModules +} + +pub enum ModulePrefixResult { + NoPrefixFound, + PrefixFound(@mut Module, uint) +} + +#[deriving(Eq)] +pub enum AllowCapturingSelfFlag { + AllowCapturingSelf, //< The "self" definition can be captured. + DontAllowCapturingSelf, //< The "self" definition cannot be captured. +} + +#[deriving(Eq)] +enum NameSearchType { + SearchItemsAndPublicImports, //< Search items and public imports. + SearchItemsAndAllImports, //< Search items and all imports. +} + +pub enum BareIdentifierPatternResolution { + FoundStructOrEnumVariant(def), + FoundConst(def), + BareIdentifierPatternUnresolved +} + +// Specifies how duplicates should be handled when adding a child item if +// another item exists with the same name in some namespace. +#[deriving(Eq)] +pub enum DuplicateCheckingMode { + ForbidDuplicateModules, + ForbidDuplicateTypes, + ForbidDuplicateValues, + ForbidDuplicateTypesAndValues, + OverwriteDuplicates +} + +// Returns the namespace associated with the given duplicate checking mode, +// or fails for OverwriteDuplicates. This is used for error messages. +pub fn namespace_for_duplicate_checking_mode(mode: DuplicateCheckingMode) + -> Namespace { + match mode { + ForbidDuplicateModules | ForbidDuplicateTypes | + ForbidDuplicateTypesAndValues => TypeNS, + ForbidDuplicateValues => ValueNS, + OverwriteDuplicates => fail!(~"OverwriteDuplicates has no namespace") + } +} + +/// One local scope. +pub struct Rib { + bindings: @mut HashMap, + kind: RibKind, +} + +pub fn Rib(kind: RibKind) -> Rib { + Rib { + bindings: @mut HashMap::new(), + kind: kind + } +} + + +/// One import directive. +pub struct ImportDirective { + privacy: Privacy, + module_path: ~[ident], + subclass: @ImportDirectiveSubclass, + span: span, +} + +pub fn ImportDirective(privacy: Privacy, + module_path: ~[ident], + subclass: @ImportDirectiveSubclass, + span: span) + -> ImportDirective { + ImportDirective { + privacy: privacy, + module_path: module_path, + subclass: subclass, + span: span + } +} + +/// The item that an import resolves to. +pub struct Target { + target_module: @mut Module, + bindings: @mut NameBindings, +} + +pub fn Target(target_module: @mut Module, + bindings: @mut NameBindings) + -> Target { + Target { + target_module: target_module, + bindings: bindings + } +} + +/// An ImportResolution represents a particular `use` directive. +pub struct ImportResolution { + /// The privacy of this `use` directive (whether it's `use` or + /// `pub use`. + privacy: Privacy, + span: span, + + // The number of outstanding references to this name. When this reaches + // zero, outside modules can count on the targets being correct. Before + // then, all bets are off; future imports could override this name. + + outstanding_references: uint, + + /// The value that this `use` directive names, if there is one. + value_target: Option, + /// The type that this `use` directive names, if there is one. + type_target: Option, + + /// There exists one state per import statement + state: @mut ImportState, +} + +pub fn ImportResolution(privacy: Privacy, + span: span, + state: @mut ImportState) -> ImportResolution { + ImportResolution { + privacy: privacy, + span: span, + outstanding_references: 0, + value_target: None, + type_target: None, + state: state, + } +} + +pub impl ImportResolution { + fn target_for_namespace(&self, namespace: Namespace) -> Option { + match namespace { + TypeNS => return copy self.type_target, + ValueNS => return copy self.value_target + } + } +} + +pub struct ImportState { + used: bool, + warned: bool +} + +pub fn ImportState() -> ImportState { + ImportState{ used: false, warned: false } +} + +/// The link from a module up to its nearest parent node. +pub enum ParentLink { + NoParentLink, + ModuleParentLink(@mut Module, ident), + BlockParentLink(@mut Module, node_id) +} + +/// The type of module this is. +pub enum ModuleKind { + NormalModuleKind, + ExternModuleKind, + TraitModuleKind, + AnonymousModuleKind, +} + +/// One node in the tree of modules. +pub struct Module { + parent_link: ParentLink, + def_id: Option, + kind: ModuleKind, + + children: @mut HashMap, + imports: @mut ~[@ImportDirective], + + // The external module children of this node that were declared with + // `extern mod`. + external_module_children: @mut HashMap, + + // The anonymous children of this node. Anonymous children are pseudo- + // modules that are implicitly created around items contained within + // blocks. + // + // For example, if we have this: + // + // fn f() { + // fn g() { + // ... + // } + // } + // + // There will be an anonymous module created around `g` with the ID of the + // entry block for `f`. + + anonymous_children: @mut HashMap, + + // The status of resolving each import in this module. + import_resolutions: @mut HashMap, + + // The number of unresolved globs that this module exports. + glob_count: uint, + + // The index of the import we're resolving. + resolved_import_count: uint, +} + +pub fn Module(parent_link: ParentLink, + def_id: Option, + kind: ModuleKind) + -> Module { + Module { + parent_link: parent_link, + def_id: def_id, + kind: kind, + children: @mut HashMap::new(), + imports: @mut ~[], + external_module_children: @mut HashMap::new(), + anonymous_children: @mut HashMap::new(), + import_resolutions: @mut HashMap::new(), + glob_count: 0, + resolved_import_count: 0 + } +} + +pub impl Module { + fn all_imports_resolved(&self) -> bool { + let imports = &mut *self.imports; + return imports.len() == self.resolved_import_count; + } +} + +// Records a possibly-private type definition. +pub struct TypeNsDef { + privacy: Privacy, + module_def: Option<@mut Module>, + type_def: Option +} + +// Records a possibly-private value definition. +pub struct ValueNsDef { + privacy: Privacy, + def: def, +} + +// Records the definitions (at most one for each namespace) that a name is +// bound to. +pub struct NameBindings { + type_def: Option, //< Meaning in type namespace. + value_def: Option, //< Meaning in value namespace. + + // For error reporting + // FIXME (#3783): Merge me into TypeNsDef and ValueNsDef. + type_span: Option, + value_span: Option, +} + +pub impl NameBindings { + /// Creates a new module in this set of name bindings. + fn define_module(@mut self, + privacy: Privacy, + parent_link: ParentLink, + def_id: Option, + kind: ModuleKind, + sp: span) { + // Merges the module with the existing type def or creates a new one. + let module_ = @mut Module(parent_link, def_id, kind); + match self.type_def { + None => { + self.type_def = Some(TypeNsDef { + privacy: privacy, + module_def: Some(module_), + type_def: None + }); + } + Some(copy type_def) => { + self.type_def = Some(TypeNsDef { + privacy: privacy, + module_def: Some(module_), + .. type_def + }); + } + } + self.type_span = Some(sp); + } + + /// Records a type definition. + fn define_type(@mut self, privacy: Privacy, def: def, sp: span) { + // Merges the type with the existing type def or creates a new one. + match self.type_def { + None => { + self.type_def = Some(TypeNsDef { + privacy: privacy, + module_def: None, + type_def: Some(def) + }); + } + Some(copy type_def) => { + self.type_def = Some(TypeNsDef { + privacy: privacy, + type_def: Some(def), + .. type_def + }); + } + } + self.type_span = Some(sp); + } + + /// Records a value definition. + fn define_value(@mut self, privacy: Privacy, def: def, sp: span) { + self.value_def = Some(ValueNsDef { privacy: privacy, def: def }); + self.value_span = Some(sp); + } + + /// Returns the module node if applicable. + fn get_module_if_available(&self) -> Option<@mut Module> { + match self.type_def { + Some(ref type_def) => (*type_def).module_def, + None => None + } + } + + /** + * Returns the module node. Fails if this node does not have a module + * definition. + */ + fn get_module(@mut self) -> @mut Module { + match self.get_module_if_available() { + None => { + fail!(~"get_module called on a node with no module \ + definition!") + } + Some(module_def) => module_def + } + } + + fn defined_in_namespace(&self, namespace: Namespace) -> bool { + match namespace { + TypeNS => return self.type_def.is_some(), + ValueNS => return self.value_def.is_some() + } + } + + fn defined_in_public_namespace(&self, namespace: Namespace) -> bool { + match namespace { + TypeNS => match self.type_def { + Some(def) => def.privacy != Private, + None => false + }, + ValueNS => match self.value_def { + Some(def) => def.privacy != Private, + None => false + } + } + } + + fn def_for_namespace(&self, namespace: Namespace) -> Option { + match namespace { + TypeNS => { + match self.type_def { + None => None, + Some(ref type_def) => { + // FIXME (#3784): This is reallllly questionable. + // Perhaps the right thing to do is to merge def_mod + // and def_ty. + match (*type_def).type_def { + Some(type_def) => Some(type_def), + None => { + match (*type_def).module_def { + Some(module_def) => { + let module_def = &mut *module_def; + module_def.def_id.map(|def_id| + def_mod(*def_id)) + } + None => None + } + } + } + } + } + } + ValueNS => { + match self.value_def { + None => None, + Some(value_def) => Some(value_def.def) + } + } + } + } + + fn privacy_for_namespace(&self, namespace: Namespace) -> Option { + match namespace { + TypeNS => { + match self.type_def { + None => None, + Some(ref type_def) => Some((*type_def).privacy) + } + } + ValueNS => { + match self.value_def { + None => None, + Some(value_def) => Some(value_def.privacy) + } + } + } + } + + fn span_for_namespace(&self, namespace: Namespace) -> Option { + if self.defined_in_namespace(namespace) { + match namespace { + TypeNS => self.type_span, + ValueNS => self.value_span, + } + } else { + None + } + } +} + +pub fn NameBindings() -> NameBindings { + NameBindings { + type_def: None, + value_def: None, + type_span: None, + value_span: None + } +} + +/// Interns the names of the primitive types. +pub struct PrimitiveTypeTable { + primitive_types: HashMap, +} + +pub impl PrimitiveTypeTable { + fn intern(&mut self, intr: @ident_interner, string: @~str, + primitive_type: prim_ty) { + let ident = intr.intern(string); + self.primitive_types.insert(ident, primitive_type); + } +} + +pub fn PrimitiveTypeTable(intr: @ident_interner) -> PrimitiveTypeTable { + let mut table = PrimitiveTypeTable { + primitive_types: HashMap::new() + }; + + table.intern(intr, @~"bool", ty_bool); + table.intern(intr, @~"char", ty_int(ty_char)); + table.intern(intr, @~"float", ty_float(ty_f)); + table.intern(intr, @~"f32", ty_float(ty_f32)); + table.intern(intr, @~"f64", ty_float(ty_f64)); + table.intern(intr, @~"int", ty_int(ty_i)); + table.intern(intr, @~"i8", ty_int(ty_i8)); + table.intern(intr, @~"i16", ty_int(ty_i16)); + table.intern(intr, @~"i32", ty_int(ty_i32)); + table.intern(intr, @~"i64", ty_int(ty_i64)); + table.intern(intr, @~"str", ty_str); + table.intern(intr, @~"uint", ty_uint(ty_u)); + table.intern(intr, @~"u8", ty_uint(ty_u8)); + table.intern(intr, @~"u16", ty_uint(ty_u16)); + table.intern(intr, @~"u32", ty_uint(ty_u32)); + table.intern(intr, @~"u64", ty_uint(ty_u64)); + + return table; +} + + +pub fn namespace_to_str(ns: Namespace) -> ~str { + match ns { + TypeNS => ~"type", + ValueNS => ~"value", + } +} + +pub fn Resolver(session: Session, + lang_items: LanguageItems, + crate: @crate) + -> Resolver { + let graph_root = @mut NameBindings(); + + graph_root.define_module(Public, + NoParentLink, + Some(def_id { crate: 0, node: 0 }), + NormalModuleKind, + crate.span); + + let current_module = graph_root.get_module(); + + let self = Resolver { + session: @session, + lang_items: copy lang_items, + crate: crate, + + // The outermost module has def ID 0; this is not reflected in the + // AST. + + graph_root: graph_root, + + trait_info: HashMap::new(), + structs: HashSet::new(), + + unresolved_imports: 0, + + current_module: current_module, + value_ribs: ~[], + type_ribs: ~[], + label_ribs: ~[], + + xray_context: NoXray, + current_trait_refs: None, + + self_ident: special_idents::self_, + type_self_ident: special_idents::type_self, + + primitive_type_table: @PrimitiveTypeTable(session. + parse_sess.interner), + + namespaces: ~[ TypeNS, ValueNS ], + + attr_main_fn: None, + main_fns: ~[], + + start_fn: None, + + def_map: @mut HashMap::new(), + export_map2: @mut HashMap::new(), + trait_map: HashMap::new(), + + intr: session.intr() + }; + + self +} + +/// The main resolver class. +pub struct Resolver { + session: @Session, + lang_items: LanguageItems, + crate: @crate, + + intr: @ident_interner, + + graph_root: @mut NameBindings, + + trait_info: HashMap>, + structs: HashSet, + + // The number of imports that are currently unresolved. + unresolved_imports: uint, + + // The module that represents the current item scope. + current_module: @mut Module, + + // The current set of local scopes, for values. + // FIXME #4948: Reuse ribs to avoid allocation. + value_ribs: ~[@Rib], + + // The current set of local scopes, for types. + type_ribs: ~[@Rib], + + // The current set of local scopes, for labels. + label_ribs: ~[@Rib], + + // Whether the current context is an X-ray context. An X-ray context is + // allowed to access private names of any module. + xray_context: XrayFlag, + + // The trait that the current context can refer to. + current_trait_refs: Option<~[def_id]>, + + // The ident for the keyword "self". + self_ident: ident, + // The ident for the non-keyword "Self". + type_self_ident: ident, + + // The idents for the primitive types. + primitive_type_table: @PrimitiveTypeTable, + + // The four namespaces. + namespaces: ~[Namespace], + + // The function that has attribute named 'main' + attr_main_fn: Option<(node_id, span)>, + + // The functions that could be main functions + main_fns: ~[Option<(node_id, span)>], + + // The function that has the attribute 'start' on it + start_fn: Option<(node_id, span)>, + + def_map: DefMap, + export_map2: ExportMap2, + trait_map: TraitMap, +} + +pub impl Resolver { + /// The main name resolution procedure. + fn resolve(@mut self) { + self.build_reduced_graph(); + self.session.abort_if_errors(); + + self.resolve_imports(); + self.session.abort_if_errors(); + + self.record_exports(); + self.session.abort_if_errors(); + + self.resolve_crate(); + self.session.abort_if_errors(); + + self.check_duplicate_main(); + self.check_for_unused_imports_if_necessary(); + } + + // + // Reduced graph building + // + // Here we build the "reduced graph": the graph of the module tree without + // any imports resolved. + // + + /// Constructs the reduced graph for the entire crate. + fn build_reduced_graph(@mut self) { + let initial_parent = + ModuleReducedGraphParent(self.graph_root.get_module()); + visit_crate(self.crate, initial_parent, mk_vt(@Visitor { + visit_item: |item, context, visitor| + self.build_reduced_graph_for_item(item, context, visitor), + + visit_foreign_item: |foreign_item, context, visitor| + self.build_reduced_graph_for_foreign_item(foreign_item, + context, + visitor), + + visit_view_item: |view_item, context, visitor| + self.build_reduced_graph_for_view_item(view_item, + context, + visitor), + + visit_block: |block, context, visitor| + self.build_reduced_graph_for_block(block, + context, + visitor), + + .. *default_visitor() + })); + } + + /// Returns the current module tracked by the reduced graph parent. + fn get_module_from_parent(@mut self, + reduced_graph_parent: ReducedGraphParent) + -> @mut Module { + match reduced_graph_parent { + ModuleReducedGraphParent(module_) => { + return module_; + } + } + } + + /** + * Adds a new child item to the module definition of the parent node and + * returns its corresponding name bindings as well as the current parent. + * Or, if we're inside a block, creates (or reuses) an anonymous module + * corresponding to the innermost block ID and returns the name bindings + * as well as the newly-created parent. + * + * If this node does not have a module definition and we are not inside + * a block, fails. + */ + fn add_child(@mut self, + name: ident, + reduced_graph_parent: ReducedGraphParent, + duplicate_checking_mode: DuplicateCheckingMode, + // For printing errors + sp: span) + -> (@mut NameBindings, ReducedGraphParent) { + + // If this is the immediate descendant of a module, then we add the + // child name directly. Otherwise, we create or reuse an anonymous + // module and add the child to that. + + let module_; + match reduced_graph_parent { + ModuleReducedGraphParent(parent_module) => { + module_ = parent_module; + } + } + + // Add or reuse the child. + let new_parent = ModuleReducedGraphParent(module_); + match module_.children.find(&name) { + None => { + let child = @mut NameBindings(); + module_.children.insert(name, child); + return (child, new_parent); + } + Some(&child) => { + // Enforce the duplicate checking mode: + // + // * If we're requesting duplicate module checking, check that + // there isn't a module in the module with the same name. + // + // * If we're requesting duplicate type checking, check that + // there isn't a type in the module with the same name. + // + // * If we're requesting duplicate value checking, check that + // there isn't a value in the module with the same name. + // + // * If we're requesting duplicate type checking and duplicate + // value checking, check that there isn't a duplicate type + // and a duplicate value with the same name. + // + // * If no duplicate checking was requested at all, do + // nothing. + + let mut is_duplicate = false; + match duplicate_checking_mode { + ForbidDuplicateModules => { + is_duplicate = + child.get_module_if_available().is_some(); + } + ForbidDuplicateTypes => { + match child.def_for_namespace(TypeNS) { + Some(def_mod(_)) | None => {} + Some(_) => is_duplicate = true + } + } + ForbidDuplicateValues => { + is_duplicate = child.defined_in_namespace(ValueNS); + } + ForbidDuplicateTypesAndValues => { + match child.def_for_namespace(TypeNS) { + Some(def_mod(_)) | None => {} + Some(_) => is_duplicate = true + }; + if child.defined_in_namespace(ValueNS) { + is_duplicate = true; + } + } + OverwriteDuplicates => {} + } + if duplicate_checking_mode != OverwriteDuplicates && + is_duplicate { + // Return an error here by looking up the namespace that + // had the duplicate. + let ns = namespace_for_duplicate_checking_mode( + duplicate_checking_mode); + self.session.span_err(sp, + fmt!("duplicate definition of %s %s", + namespace_to_str(ns), + *self.session.str_of(name))); + for child.span_for_namespace(ns).each |sp| { + self.session.span_note(*sp, + fmt!("first definition of %s %s here:", + namespace_to_str(ns), + *self.session.str_of(name))); + } + } + return (child, new_parent); + } + } + } + + fn block_needs_anonymous_module(@mut self, block: &blk) -> bool { + // If the block has view items, we need an anonymous module. + if block.node.view_items.len() > 0 { + return true; + } + + // Check each statement. + for block.node.stmts.each |statement| { + match statement.node { + stmt_decl(declaration, _) => { + match declaration.node { + decl_item(_) => { + return true; + } + _ => { + // Keep searching. + } + } + } + _ => { + // Keep searching. + } + } + } + + // If we found neither view items nor items, we don't need to create + // an anonymous module. + + return false; + } + + fn get_parent_link(@mut self, + parent: ReducedGraphParent, + name: ident) + -> ParentLink { + match parent { + ModuleReducedGraphParent(module_) => { + return ModuleParentLink(module_, name); + } + } + } + + /// Constructs the reduced graph for one item. + fn build_reduced_graph_for_item(@mut self, + item: @item, + parent: ReducedGraphParent, + visitor: vt) { + let ident = item.ident; + let sp = item.span; + let privacy = visibility_to_privacy(item.vis); + + match item.node { + item_mod(ref module_) => { + let (name_bindings, new_parent) = + self.add_child(ident, parent, ForbidDuplicateModules, sp); + + let parent_link = self.get_parent_link(new_parent, ident); + let def_id = def_id { crate: 0, node: item.id }; + name_bindings.define_module(privacy, + parent_link, + Some(def_id), + NormalModuleKind, + sp); + + let new_parent = + ModuleReducedGraphParent(name_bindings.get_module()); + + visit_mod(module_, sp, item.id, new_parent, visitor); + } + + item_foreign_mod(ref fm) => { + let new_parent = match fm.sort { + named => { + let (name_bindings, new_parent) = + self.add_child(ident, parent, + ForbidDuplicateModules, sp); + + let parent_link = self.get_parent_link(new_parent, + ident); + let def_id = def_id { crate: 0, node: item.id }; + name_bindings.define_module(privacy, + parent_link, + Some(def_id), + ExternModuleKind, + sp); + + ModuleReducedGraphParent(name_bindings.get_module()) + } + + // For anon foreign mods, the contents just go in the + // current scope + anonymous => parent + }; + + visit_item(item, new_parent, visitor); + } + + // These items live in the value namespace. + item_const(*) => { + let (name_bindings, _) = + self.add_child(ident, parent, ForbidDuplicateValues, sp); + + name_bindings.define_value + (privacy, def_const(local_def(item.id)), sp); + } + item_fn(_, purity, _, _, _) => { + let (name_bindings, new_parent) = + self.add_child(ident, parent, ForbidDuplicateValues, sp); + + let def = def_fn(local_def(item.id), purity); + name_bindings.define_value(privacy, def, sp); + visit_item(item, new_parent, visitor); + } + + // These items live in the type namespace. + item_ty(*) => { + let (name_bindings, _) = + self.add_child(ident, parent, ForbidDuplicateTypes, sp); + + name_bindings.define_type + (privacy, def_ty(local_def(item.id)), sp); + } + + item_enum(ref enum_definition, _) => { + let (name_bindings, new_parent) = + self.add_child(ident, parent, ForbidDuplicateTypes, sp); + + name_bindings.define_type + (privacy, def_ty(local_def(item.id)), sp); + + for (*enum_definition).variants.each |variant| { + self.build_reduced_graph_for_variant(variant, + local_def(item.id), + // inherited => privacy of the enum item + variant_visibility_to_privacy(variant.node.vis, + privacy == Public), + new_parent, + visitor); + } + } + + // These items live in both the type and value namespaces. + item_struct(struct_def, _) => { + let (name_bindings, new_parent) = + self.add_child(ident, parent, ForbidDuplicateTypes, sp); + + name_bindings.define_type( + privacy, def_ty(local_def(item.id)), sp); + + // If this struct is tuple-like or enum-like, define a name + // in the value namespace. + match struct_def.ctor_id { + None => {} + Some(ctor_id) => { + name_bindings.define_value( + privacy, + def_struct(local_def(ctor_id)), + sp); + } + } + + // Record the def ID of this struct. + self.structs.insert(local_def(item.id)); + + visit_item(item, new_parent, visitor); + } + + item_impl(_, trait_ref_opt, ty, ref methods) => { + // If this implements an anonymous trait and it has static + // methods, then add all the static methods within to a new + // module, if the type was defined within this module. + // + // FIXME (#3785): This is quite unsatisfactory. Perhaps we + // should modify anonymous traits to only be implementable in + // the same module that declared the type. + + // Bail out early if there are no static methods. + let mut has_static_methods = false; + for methods.each |method| { + match method.self_ty.node { + sty_static => has_static_methods = true, + _ => {} + } + } + + // If there are static methods, then create the module + // and add them. + match (trait_ref_opt, ty) { + (None, @Ty { node: ty_path(path, _), _ }) if + has_static_methods && path.idents.len() == 1 => { + // Create the module. + let name = path_to_ident(path); + let (name_bindings, new_parent) = + self.add_child(name, + parent, + ForbidDuplicateModules, + sp); + + let parent_link = self.get_parent_link(new_parent, + ident); + let def_id = local_def(item.id); + name_bindings.define_module(Public, + parent_link, + Some(def_id), + TraitModuleKind, + sp); + + let new_parent = ModuleReducedGraphParent( + name_bindings.get_module()); + + // For each static method... + for methods.each |method| { + match method.self_ty.node { + sty_static => { + // Add the static method to the + // module. + let ident = method.ident; + let (method_name_bindings, _) = + self.add_child( + ident, + new_parent, + ForbidDuplicateValues, + method.span); + let def = def_fn(local_def(method.id), + method.purity); + method_name_bindings.define_value( + Public, def, method.span); + } + _ => {} + } + } + } + _ => {} + } + + visit_item(item, parent, visitor); + } + + item_trait(_, _, ref methods) => { + let (name_bindings, new_parent) = + self.add_child(ident, parent, ForbidDuplicateTypes, sp); + + // If the trait has static methods, then add all the static + // methods within to a new module. + // + // We only need to create the module if the trait has static + // methods, so check that first. + let mut has_static_methods = false; + for (*methods).each |method| { + let ty_m = trait_method_to_ty_method(method); + match ty_m.self_ty.node { + sty_static => { + has_static_methods = true; + break; + } + _ => {} + } + } + + // Create the module if necessary. + let module_parent_opt; + if has_static_methods { + let parent_link = self.get_parent_link(parent, ident); + name_bindings.define_module(privacy, + parent_link, + Some(local_def(item.id)), + TraitModuleKind, + sp); + module_parent_opt = Some(ModuleReducedGraphParent( + name_bindings.get_module())); + } else { + module_parent_opt = None; + } + + // Add the names of all the methods to the trait info. + let mut method_names = HashSet::new(); + for methods.each |method| { + let ty_m = trait_method_to_ty_method(method); + + let ident = ty_m.ident; + // Add it to the trait info if not static, + // add it as a name in the trait module otherwise. + match ty_m.self_ty.node { + sty_static => { + let def = def_static_method( + local_def(ty_m.id), + Some(local_def(item.id)), + ty_m.purity); + + let (method_name_bindings, _) = + self.add_child(ident, + module_parent_opt.get(), + ForbidDuplicateValues, + ty_m.span); + method_name_bindings.define_value(Public, + def, + ty_m.span); + } + _ => { + method_names.insert(ident); + } + } + } + + let def_id = local_def(item.id); + self.trait_info.insert(def_id, method_names); + + name_bindings.define_type(privacy, def_trait(def_id), sp); + visit_item(item, new_parent, visitor); + } + + item_mac(*) => { + fail!(~"item macros unimplemented") + } + } + } + + // Constructs the reduced graph for one variant. Variants exist in the + // type and/or value namespaces. + fn build_reduced_graph_for_variant(@mut self, + variant: &variant, + item_id: def_id, + parent_privacy: Privacy, + parent: ReducedGraphParent, + _visitor: vt) { + let ident = variant.node.name; + let (child, _) = self.add_child(ident, parent, ForbidDuplicateValues, + variant.span); + + let privacy; + match variant.node.vis { + public => privacy = Public, + private => privacy = Private, + inherited => privacy = parent_privacy + } + + match variant.node.kind { + tuple_variant_kind(_) => { + child.define_value(privacy, + def_variant(item_id, + local_def(variant.node.id)), + variant.span); + } + struct_variant_kind(_) => { + child.define_type(privacy, + def_variant(item_id, + local_def(variant.node.id)), + variant.span); + self.structs.insert(local_def(variant.node.id)); + } + } + } + + /** + * Constructs the reduced graph for one 'view item'. View items consist + * of imports and use directives. + */ + fn build_reduced_graph_for_view_item(@mut self, + view_item: @view_item, + parent: ReducedGraphParent, + _visitor: vt) { + let privacy = visibility_to_privacy(view_item.vis); + match view_item.node { + view_item_use(ref view_paths) => { + for view_paths.each |view_path| { + // Extract and intern the module part of the path. For + // globs and lists, the path is found directly in the AST; + // for simple paths we have to munge the path a little. + + let mut module_path = ~[]; + match view_path.node { + view_path_simple(_, full_path, _) => { + let path_len = full_path.idents.len(); + assert!(path_len != 0); + + for full_path.idents.eachi |i, ident| { + if i != path_len - 1 { + module_path.push(*ident); + } + } + } + + view_path_glob(module_ident_path, _) | + view_path_list(module_ident_path, _, _) => { + for module_ident_path.idents.each |ident| { + module_path.push(*ident); + } + } + } + + // Build up the import directives. + let module_ = self.get_module_from_parent(parent); + match view_path.node { + view_path_simple(binding, full_path, _) => { + let source_ident = *full_path.idents.last(); + let subclass = @SingleImport(binding, + source_ident); + self.build_import_directive(privacy, + module_, + module_path, + subclass, + view_path.span); + } + view_path_list(_, ref source_idents, _) => { + for source_idents.each |source_ident| { + let name = source_ident.node.name; + let subclass = @SingleImport(name, name); + self.build_import_directive(privacy, + module_, + copy module_path, + subclass, + source_ident.span); + } + } + view_path_glob(_, _) => { + self.build_import_directive(privacy, + module_, + module_path, + @GlobImport, + view_path.span); + } + } + } + } + + view_item_extern_mod(name, _, node_id) => { + match find_extern_mod_stmt_cnum(self.session.cstore, + node_id) { + Some(crate_id) => { + let def_id = def_id { crate: crate_id, node: 0 }; + let parent_link = ModuleParentLink + (self.get_module_from_parent(parent), name); + let external_module = @mut Module(parent_link, + Some(def_id), + NormalModuleKind); + + parent.external_module_children.insert( + name, + external_module); + + self.build_reduced_graph_for_external_crate( + external_module); + } + None => {} // Ignore. + } + } + } + } + + /// Constructs the reduced graph for one foreign item. + fn build_reduced_graph_for_foreign_item(@mut self, + foreign_item: @foreign_item, + parent: ReducedGraphParent, + visitor: + vt) { + let name = foreign_item.ident; + let (name_bindings, new_parent) = + self.add_child(name, parent, ForbidDuplicateValues, + foreign_item.span); + + match foreign_item.node { + foreign_item_fn(_, _, ref generics) => { + let def = def_fn(local_def(foreign_item.id), unsafe_fn); + name_bindings.define_value(Public, def, foreign_item.span); + + do self.with_type_parameter_rib( + HasTypeParameters( + generics, foreign_item.id, 0, NormalRibKind)) + { + visit_foreign_item(foreign_item, new_parent, visitor); + } + } + foreign_item_const(*) => { + let def = def_const(local_def(foreign_item.id)); + name_bindings.define_value(Public, def, foreign_item.span); + + visit_foreign_item(foreign_item, new_parent, visitor); + } + } + } + + fn build_reduced_graph_for_block(@mut self, + block: &blk, + parent: ReducedGraphParent, + visitor: vt) { + let new_parent; + if self.block_needs_anonymous_module(block) { + let block_id = block.node.id; + + debug!("(building reduced graph for block) creating a new \ + anonymous module for block %d", + block_id); + + let parent_module = self.get_module_from_parent(parent); + let new_module = @mut Module( + BlockParentLink(parent_module, block_id), + None, + AnonymousModuleKind); + parent_module.anonymous_children.insert(block_id, new_module); + new_parent = ModuleReducedGraphParent(new_module); + } else { + new_parent = parent; + } + + visit_block(block, new_parent, visitor); + } + + fn handle_external_def(@mut self, + def: def, + modules: &mut HashMap, + child_name_bindings: @mut NameBindings, + final_ident: &str, + ident: ident, + new_parent: ReducedGraphParent) { + match def { + def_mod(def_id) | def_foreign_mod(def_id) => { + match child_name_bindings.type_def { + Some(TypeNsDef { module_def: Some(copy module_def), _ }) => { + debug!("(building reduced graph for external crate) \ + already created module"); + module_def.def_id = Some(def_id); + modules.insert(def_id, module_def); + } + Some(_) | None => { + debug!("(building reduced graph for \ + external crate) building module \ + %s", final_ident); + let parent_link = self.get_parent_link(new_parent, ident); + + // FIXME (#5074): this should be a match on find + if !modules.contains_key(&def_id) { + child_name_bindings.define_module(Public, + parent_link, + Some(def_id), + NormalModuleKind, + dummy_sp()); + modules.insert(def_id, + child_name_bindings.get_module()); + } else { + let existing_module = *modules.get(&def_id); + // Create an import resolution to + // avoid creating cycles in the + // module graph. + + let resolution = + @mut ImportResolution(Public, + dummy_sp(), + @mut ImportState()); + resolution.outstanding_references = 0; + + match existing_module.parent_link { + NoParentLink | + BlockParentLink(*) => { + fail!(~"can't happen"); + } + ModuleParentLink(parent_module, ident) => { + let name_bindings = parent_module.children.get( + &ident); + resolution.type_target = + Some(Target(parent_module, *name_bindings)); + } + } + + debug!("(building reduced graph for external crate) \ + ... creating import resolution"); + + new_parent.import_resolutions.insert(ident, resolution); + } + } + } + } + def_fn(*) | def_static_method(*) | def_const(*) | + def_variant(*) => { + debug!("(building reduced graph for external \ + crate) building value %s", final_ident); + child_name_bindings.define_value(Public, def, dummy_sp()); + } + def_trait(def_id) => { + debug!("(building reduced graph for external \ + crate) building type %s", final_ident); + + // If this is a trait, add all the method names + // to the trait info. + + let method_def_ids = get_trait_method_def_ids(self.session.cstore, + def_id); + let mut interned_method_names = HashSet::new(); + for method_def_ids.each |&method_def_id| { + let (method_name, self_ty) = + get_method_name_and_self_ty(self.session.cstore, + method_def_id); + + debug!("(building reduced graph for \ + external crate) ... adding \ + trait method '%s'", + *self.session.str_of(method_name)); + + // Add it to the trait info if not static. + if self_ty != sty_static { + interned_method_names.insert(method_name); + } + } + self.trait_info.insert(def_id, interned_method_names); + + child_name_bindings.define_type(Public, def, dummy_sp()); + } + def_ty(_) => { + debug!("(building reduced graph for external \ + crate) building type %s", final_ident); + + child_name_bindings.define_type(Public, def, dummy_sp()); + } + def_struct(def_id) => { + debug!("(building reduced graph for external \ + crate) building type %s", + final_ident); + child_name_bindings.define_type(Public, def, dummy_sp()); + self.structs.insert(def_id); + } + def_self(*) | def_arg(*) | def_local(*) | + def_prim_ty(*) | def_ty_param(*) | def_binding(*) | + def_use(*) | def_upvar(*) | def_region(*) | + def_typaram_binder(*) | def_label(*) | def_self_ty(*) => { + fail!(fmt!("didn't expect `%?`", def)); + } + } + } + + /** + * Builds the reduced graph rooted at the 'use' directive for an external + * crate. + */ + fn build_reduced_graph_for_external_crate(@mut self, root: @mut Module) { + let mut modules = HashMap::new(); + + // Create all the items reachable by paths. + for each_path(self.session.cstore, root.def_id.get().crate) + |path_string, def_like| { + + debug!("(building reduced graph for external crate) found path \ + entry: %s (%?)", + path_string, def_like); + + let mut pieces = ~[]; + for each_split_str(path_string, "::") |s| { pieces.push(s.to_owned()) } + let final_ident_str = pieces.pop(); + let final_ident = self.session.ident_of(final_ident_str); + + // Find the module we need, creating modules along the way if we + // need to. + + let mut current_module = root; + for pieces.each |ident_str| { + let ident = self.session.ident_of(/*bad*/copy *ident_str); + // Create or reuse a graph node for the child. + let (child_name_bindings, new_parent) = + self.add_child(ident, + ModuleReducedGraphParent(current_module), + OverwriteDuplicates, + dummy_sp()); + + // Define or reuse the module node. + match child_name_bindings.type_def { + None => { + debug!("(building reduced graph for external crate) \ + autovivifying missing type def %s", + *ident_str); + let parent_link = self.get_parent_link(new_parent, + ident); + child_name_bindings.define_module(Public, + parent_link, + None, + NormalModuleKind, + dummy_sp()); + } + Some(copy type_ns_def) + if type_ns_def.module_def.is_none() => { + debug!("(building reduced graph for external crate) \ + autovivifying missing module def %s", + *ident_str); + let parent_link = self.get_parent_link(new_parent, + ident); + child_name_bindings.define_module(Public, + parent_link, + None, + NormalModuleKind, + dummy_sp()); + } + _ => {} // Fall through. + } + + current_module = child_name_bindings.get_module(); + } + + match def_like { + dl_def(def) => { + // Add the new child item. + let (child_name_bindings, new_parent) = + self.add_child(final_ident, + ModuleReducedGraphParent( + current_module), + OverwriteDuplicates, + dummy_sp()); + + self.handle_external_def(def, + &mut modules, + child_name_bindings, + *self.session.str_of( + final_ident), + final_ident, + new_parent); + } + dl_impl(def) => { + // We only process static methods of impls here. + match get_type_name_if_impl(self.session.cstore, def) { + None => {} + Some(final_ident) => { + let static_methods_opt = + get_static_methods_if_impl( + self.session.cstore, def); + match static_methods_opt { + Some(ref static_methods) if + static_methods.len() >= 1 => { + debug!("(building reduced graph for \ + external crate) processing \ + static methods for type name %s", + *self.session.str_of( + final_ident)); + + let (child_name_bindings, new_parent) = + self.add_child(final_ident, + ModuleReducedGraphParent( + current_module), + OverwriteDuplicates, + dummy_sp()); + + // Process the static methods. First, + // create the module. + let type_module; + match child_name_bindings.type_def { + Some(TypeNsDef { + module_def: Some(copy module_def), + _ + }) => { + // We already have a module. This + // is OK. + type_module = module_def; + } + Some(_) | None => { + let parent_link = + self.get_parent_link( + new_parent, final_ident); + child_name_bindings.define_module( + Public, + parent_link, + Some(def), + NormalModuleKind, + dummy_sp()); + type_module = + child_name_bindings. + get_module(); + } + } + + // Add each static method to the module. + let new_parent = ModuleReducedGraphParent( + type_module); + for static_methods.each + |static_method_info| { + let ident = static_method_info.ident; + debug!("(building reduced graph for \ + external crate) creating \ + static method '%s'", + *self.session.str_of(ident)); + + let (method_name_bindings, _) = + self.add_child( + ident, + new_parent, + OverwriteDuplicates, + dummy_sp()); + let def = def_fn( + static_method_info.def_id, + static_method_info.purity); + method_name_bindings.define_value( + Public, def, dummy_sp()); + } + } + + // Otherwise, do nothing. + Some(_) | None => {} + } + } + } + } + dl_field => { + debug!("(building reduced graph for external crate) \ + ignoring field"); + } + } + } + } + + /// Creates and adds an import directive to the given module. + fn build_import_directive(@mut self, + privacy: Privacy, + module_: @mut Module, + module_path: ~[ident], + subclass: @ImportDirectiveSubclass, + span: span) { + let directive = @ImportDirective(privacy, module_path, + subclass, span); + module_.imports.push(directive); + + // Bump the reference count on the name. Or, if this is a glob, set + // the appropriate flag. + + match *subclass { + SingleImport(target, _) => { + debug!("(building import directive) building import \ + directive: privacy %? %s::%s", + privacy, + self.idents_to_str(directive.module_path), + *self.session.str_of(target)); + + match module_.import_resolutions.find(&target) { + Some(&resolution) => { + debug!("(building import directive) bumping \ + reference"); + resolution.outstanding_references += 1; + } + None => { + debug!("(building import directive) creating new"); + let state = @mut ImportState(); + let resolution = @mut ImportResolution(privacy, + span, + state); + let name = self.idents_to_str(directive.module_path); + // Don't warn about unused intrinsics because they're + // automatically appended to all files + if name == ~"intrinsic::rusti" { + resolution.state.warned = true; + } + resolution.outstanding_references = 1; + module_.import_resolutions.insert(target, resolution); + } + } + } + GlobImport => { + // Set the glob flag. This tells us that we don't know the + // module's exports ahead of time. + + module_.glob_count += 1; + } + } + + self.unresolved_imports += 1; + } + + // Import resolution + // + // This is a fixed-point algorithm. We resolve imports until our efforts + // are stymied by an unresolved import; then we bail out of the current + // module and continue. We terminate successfully once no more imports + // remain or unsuccessfully when no forward progress in resolving imports + // is made. + + /** + * Resolves all imports for the crate. This method performs the fixed- + * point iteration. + */ + fn resolve_imports(@mut self) { + let mut i = 0; + let mut prev_unresolved_imports = 0; + loop { + debug!("(resolving imports) iteration %u, %u imports left", + i, self.unresolved_imports); + + let module_root = self.graph_root.get_module(); + self.resolve_imports_for_module_subtree(module_root); + + if self.unresolved_imports == 0 { + debug!("(resolving imports) success"); + break; + } + + if self.unresolved_imports == prev_unresolved_imports { + self.session.err(~"failed to resolve imports"); + self.report_unresolved_imports(module_root); + break; + } + + i += 1; + prev_unresolved_imports = self.unresolved_imports; + } + } + + /// Attempts to resolve imports for the given module and all of its + /// submodules. + fn resolve_imports_for_module_subtree(@mut self, module_: @mut Module) { + debug!("(resolving imports for module subtree) resolving %s", + self.module_to_str(module_)); + self.resolve_imports_for_module(module_); + + for module_.children.each_value |&child_node| { + match child_node.get_module_if_available() { + None => { + // Nothing to do. + } + Some(child_module) => { + self.resolve_imports_for_module_subtree(child_module); + } + } + } + + for module_.anonymous_children.each_value |&child_module| { + self.resolve_imports_for_module_subtree(child_module); + } + } + + /// Attempts to resolve imports for the given module only. + fn resolve_imports_for_module(@mut self, module: @mut Module) { + if module.all_imports_resolved() { + debug!("(resolving imports for module) all imports resolved for \ + %s", + self.module_to_str(module)); + return; + } + + let imports = &mut *module.imports; + let import_count = imports.len(); + while module.resolved_import_count < import_count { + let import_index = module.resolved_import_count; + let import_directive = imports[import_index]; + match self.resolve_import_for_module(module, import_directive) { + Failed => { + // We presumably emitted an error. Continue. + let msg = fmt!("failed to resolve import: %s", + *self.import_path_to_str( + import_directive.module_path, + *import_directive.subclass)); + self.session.span_err(import_directive.span, msg); + } + Indeterminate => { + // Bail out. We'll come around next time. + break; + } + Success(()) => { + // Good. Continue. + } + } + + module.resolved_import_count += 1; + } + } + + fn idents_to_str(@mut self, idents: &[ident]) -> ~str { + let mut first = true; + let mut result = ~""; + for idents.each |ident| { + if first { first = false; } else { result += "::" }; + result += *self.session.str_of(*ident); + }; + return result; + } + + fn import_directive_subclass_to_str(@mut self, + subclass: ImportDirectiveSubclass) + -> @~str { + match subclass { + SingleImport(_target, source) => self.session.str_of(source), + GlobImport => @~"*" + } + } + + fn import_path_to_str(@mut self, + idents: &[ident], + subclass: ImportDirectiveSubclass) + -> @~str { + if idents.is_empty() { + self.import_directive_subclass_to_str(subclass) + } else { + @fmt!("%s::%s", + self.idents_to_str(idents), + *self.import_directive_subclass_to_str(subclass)) + } + } + + /// Attempts to resolve the given import. The return value indicates + /// failure if we're certain the name does not exist, indeterminate if we + /// don't know whether the name exists at the moment due to other + /// currently-unresolved imports, or success if we know the name exists. + /// If successful, the resolved bindings are written into the module. + fn resolve_import_for_module(@mut self, module_: @mut Module, + import_directive: @ImportDirective) + -> ResolveResult<()> { + let mut resolution_result = Failed; + let module_path = &import_directive.module_path; + + debug!("(resolving import for module) resolving import `%s::...` in \ + `%s`", + self.idents_to_str(*module_path), + self.module_to_str(module_)); + + // First, resolve the module path for the directive, if necessary. + let containing_module = if module_path.len() == 0 { + // Use the crate root. + Some(self.graph_root.get_module()) + } else { + match self.resolve_module_path_for_import(module_, + *module_path, + DontUseLexicalScope, + import_directive.span) { + + Failed => None, + Indeterminate => { + resolution_result = Indeterminate; + None + } + Success(containing_module) => Some(containing_module), + } + }; + + match containing_module { + None => {} + Some(containing_module) => { + // We found the module that the target is contained + // within. Attempt to resolve the import within it. + + match *import_directive.subclass { + SingleImport(target, source) => { + resolution_result = + self.resolve_single_import(module_, + containing_module, + target, + source); + } + GlobImport => { + let span = import_directive.span; + let privacy = import_directive.privacy; + resolution_result = + self.resolve_glob_import(privacy, + module_, + containing_module, + span); + } + } + } + } + + // Decrement the count of unresolved imports. + match resolution_result { + Success(()) => { + assert!(self.unresolved_imports >= 1); + self.unresolved_imports -= 1; + } + _ => { + // Nothing to do here; just return the error. + } + } + + // Decrement the count of unresolved globs if necessary. But only if + // the resolution result is indeterminate -- otherwise we'll stop + // processing imports here. (See the loop in + // resolve_imports_for_module.) + + if !resolution_result.indeterminate() { + match *import_directive.subclass { + GlobImport => { + assert!(module_.glob_count >= 1); + module_.glob_count -= 1; + } + SingleImport(*) => { + // Ignore. + } + } + } + + return resolution_result; + } + + fn create_name_bindings_from_module(module: @mut Module) -> NameBindings { + NameBindings { + type_def: Some(TypeNsDef { + privacy: Public, + module_def: Some(module), + type_def: None, + }), + value_def: None, + type_span: None, + value_span: None, + } + } + + fn resolve_single_import(@mut self, + module_: @mut Module, + containing_module: @mut Module, + target: ident, + source: ident) + -> ResolveResult<()> { + debug!("(resolving single import) resolving `%s` = `%s::%s` from \ + `%s`", + *self.session.str_of(target), + self.module_to_str(containing_module), + *self.session.str_of(source), + self.module_to_str(module_)); + + // We need to resolve both namespaces for this to succeed. + // + // FIXME #4949: See if there's some way of handling namespaces in + // a more generic way. We have two of them; it seems worth + // doing... + + let mut value_result = UnknownResult; + let mut type_result = UnknownResult; + + // Search for direct children of the containing module. + match containing_module.children.find(&source) { + None => { + // Continue. + } + Some(child_name_bindings) => { + if child_name_bindings.defined_in_namespace(ValueNS) { + value_result = BoundResult(containing_module, + *child_name_bindings); + } + if child_name_bindings.defined_in_namespace(TypeNS) { + type_result = BoundResult(containing_module, + *child_name_bindings); + } + } + } + + // Unless we managed to find a result in both namespaces (unlikely), + // search imports as well. + match (value_result, type_result) { + (BoundResult(*), BoundResult(*)) => { + // Continue. + } + _ => { + // If there is an unresolved glob at this point in the + // containing module, bail out. We don't know enough to be + // able to resolve this import. + + if containing_module.glob_count > 0 { + debug!("(resolving single import) unresolved glob; \ + bailing out"); + return Indeterminate; + } + + // Now search the exported imports within the containing + // module. + + match containing_module.import_resolutions.find(&source) { + None => { + // The containing module definitely doesn't have an + // exported import with the name in question. We can + // therefore accurately report that the names are + // unbound. + + if value_result.is_unknown() { + value_result = UnboundResult; + } + if type_result.is_unknown() { + type_result = UnboundResult; + } + } + Some(import_resolution) + if import_resolution.outstanding_references + == 0 => { + + fn get_binding(import_resolution: + @mut ImportResolution, + namespace: Namespace) + -> NamespaceResult { + + // Import resolutions must be declared with "pub" + // in order to be exported. + if import_resolution.privacy == Private { + return UnboundResult; + } + + match (*import_resolution). + target_for_namespace(namespace) { + None => { + return UnboundResult; + } + Some(target) => { + import_resolution.state.used = true; + return BoundResult(target.target_module, + target.bindings); + } + } + } + + // The name is an import which has been fully + // resolved. We can, therefore, just follow it. + if value_result.is_unknown() { + value_result = get_binding(*import_resolution, + ValueNS); + } + if type_result.is_unknown() { + type_result = get_binding(*import_resolution, + TypeNS); + } + } + Some(_) => { + // The import is unresolved. Bail out. + debug!("(resolving single import) unresolved import; \ + bailing out"); + return Indeterminate; + } + } + } + } + + // If we didn't find a result in the type namespace, search the + // external modules. + match type_result { + BoundResult(*) => {} + _ => { + match containing_module.external_module_children + .find(&source) { + None => {} // Continue. + Some(module) => { + let name_bindings = + @mut Resolver::create_name_bindings_from_module( + *module); + type_result = BoundResult(containing_module, + name_bindings); + } + } + } + } + + // We've successfully resolved the import. Write the results in. + assert!(module_.import_resolutions.contains_key(&target)); + let import_resolution = module_.import_resolutions.get(&target); + + match value_result { + BoundResult(target_module, name_bindings) => { + import_resolution.value_target = + Some(Target(target_module, name_bindings)); + } + UnboundResult => { /* Continue. */ } + UnknownResult => { + fail!(~"value result should be known at this point"); + } + } + match type_result { + BoundResult(target_module, name_bindings) => { + import_resolution.type_target = + Some(Target(target_module, name_bindings)); + } + UnboundResult => { /* Continue. */ } + UnknownResult => { + fail!(~"type result should be known at this point"); + } + } + + let i = import_resolution; + match (i.value_target, i.type_target) { + // If this name wasn't found in either namespace, it's definitely + // unresolved. + (None, None) => { return Failed; } + // If it's private, it's also unresolved. + (Some(t), None) | (None, Some(t)) => { + let bindings = &mut *t.bindings; + match bindings.type_def { + Some(ref type_def) => { + if type_def.privacy == Private { + return Failed; + } + } + _ => () + } + match bindings.value_def { + Some(ref value_def) => { + if value_def.privacy == Private { + return Failed; + } + } + _ => () + } + } + // It's also an error if there's both a type and a value with this + // name, but both are private + (Some(val), Some(ty)) => { + match (val.bindings.value_def, ty.bindings.value_def) { + (Some(ref value_def), Some(ref type_def)) => + if value_def.privacy == Private + && type_def.privacy == Private { + return Failed; + }, + _ => () + } + } + } + + assert!(import_resolution.outstanding_references >= 1); + import_resolution.outstanding_references -= 1; + + debug!("(resolving single import) successfully resolved import"); + return Success(()); + } + + // Resolves a glob import. Note that this function cannot fail; it either + // succeeds or bails out (as importing * from an empty module or a module + // that exports nothing is valid). + fn resolve_glob_import(@mut self, + privacy: Privacy, + module_: @mut Module, + containing_module: @mut Module, + span: span) + -> ResolveResult<()> { + // This function works in a highly imperative manner; it eagerly adds + // everything it can to the list of import resolutions of the module + // node. + debug!("(resolving glob import) resolving %? glob import", privacy); + let state = @mut ImportState(); + + // We must bail out if the node has unresolved imports of any kind + // (including globs). + if !(*containing_module).all_imports_resolved() { + debug!("(resolving glob import) target module has unresolved \ + imports; bailing out"); + return Indeterminate; + } + + assert!(containing_module.glob_count == 0); + + // Add all resolved imports from the containing module. + for containing_module.import_resolutions.each + |ident, target_import_resolution| { + + debug!("(resolving glob import) writing module resolution \ + %? into `%s`", + target_import_resolution.type_target.is_none(), + self.module_to_str(module_)); + + // Here we merge two import resolutions. + match module_.import_resolutions.find(ident) { + None if target_import_resolution.privacy == Public => { + // Simple: just copy the old import resolution. + let new_import_resolution = + @mut ImportResolution(privacy, + target_import_resolution.span, + state); + new_import_resolution.value_target = + copy target_import_resolution.value_target; + new_import_resolution.type_target = + copy target_import_resolution.type_target; + + module_.import_resolutions.insert + (*ident, new_import_resolution); + } + None => { /* continue ... */ } + Some(&dest_import_resolution) => { + // Merge the two import resolutions at a finer-grained + // level. + + match target_import_resolution.value_target { + None => { + // Continue. + } + Some(copy value_target) => { + dest_import_resolution.value_target = + Some(value_target); + } + } + match target_import_resolution.type_target { + None => { + // Continue. + } + Some(copy type_target) => { + dest_import_resolution.type_target = + Some(type_target); + } + } + } + } + } + + let merge_import_resolution = |ident, + name_bindings: @mut NameBindings| { + let dest_import_resolution; + match module_.import_resolutions.find(ident) { + None => { + // Create a new import resolution from this child. + dest_import_resolution = @mut ImportResolution(privacy, + span, + state); + module_.import_resolutions.insert + (*ident, dest_import_resolution); + } + Some(&existing_import_resolution) => { + dest_import_resolution = existing_import_resolution; + } + } + + debug!("(resolving glob import) writing resolution `%s` in `%s` \ + to `%s`, privacy=%?", + *self.session.str_of(*ident), + self.module_to_str(containing_module), + self.module_to_str(module_), + copy dest_import_resolution.privacy); + + // Merge the child item into the import resolution. + if name_bindings.defined_in_public_namespace(ValueNS) { + debug!("(resolving glob import) ... for value target"); + dest_import_resolution.value_target = + Some(Target(containing_module, name_bindings)); + } + if name_bindings.defined_in_public_namespace(TypeNS) { + debug!("(resolving glob import) ... for type target"); + dest_import_resolution.type_target = + Some(Target(containing_module, name_bindings)); + } + }; + + // Add all children from the containing module. + for containing_module.children.each |ident, name_bindings| { + merge_import_resolution(ident, *name_bindings); + } + + // Add external module children from the containing module. + for containing_module.external_module_children.each + |ident, module| { + let name_bindings = + @mut Resolver::create_name_bindings_from_module(*module); + merge_import_resolution(ident, name_bindings); + } + + debug!("(resolving glob import) successfully resolved import"); + return Success(()); + } + + /// Resolves the given module path from the given root `module_`. + fn resolve_module_path_from_root(@mut self, + module_: @mut Module, + module_path: &[ident], + index: uint, + span: span, + mut name_search_type: NameSearchType) + -> ResolveResult<@mut Module> { + let mut search_module = module_; + let mut index = index; + let module_path_len = module_path.len(); + + // Resolve the module part of the path. This does not involve looking + // upward though scope chains; we simply resolve names directly in + // modules as we go. + + while index < module_path_len { + let name = module_path[index]; + match self.resolve_name_in_module(search_module, + name, + TypeNS, + name_search_type) { + Failed => { + self.session.span_err(span, ~"unresolved name"); + return Failed; + } + Indeterminate => { + debug!("(resolving module path for import) module \ + resolution is indeterminate: %s", + *self.session.str_of(name)); + return Indeterminate; + } + Success(target) => { + // Check to see whether there are type bindings, and, if + // so, whether there is a module within. + match target.bindings.type_def { + Some(copy type_def) => { + match type_def.module_def { + None => { + // Not a module. + self.session.span_err(span, + fmt!("not a \ + module: %s", + *self.session. + str_of( + name))); + return Failed; + } + Some(copy module_def) => { + search_module = module_def; + } + } + } + None => { + // There are no type bindings at all. + self.session.span_err(span, + fmt!("not a module: %s", + *self.session.str_of( + name))); + return Failed; + } + } + } + } + + index += 1; + + // After the first element of the path, allow searching through + // items and imports unconditionally. This allows things like: + // + // pub mod core { + // pub use vec; + // } + // + // pub mod something_else { + // use core::vec; + // } + + name_search_type = SearchItemsAndPublicImports; + } + + return Success(search_module); + } + + /// Attempts to resolve the module part of an import directive or path + /// rooted at the given module. + fn resolve_module_path_for_import(@mut self, + module_: @mut Module, + module_path: &[ident], + use_lexical_scope: UseLexicalScopeFlag, + span: span) + -> ResolveResult<@mut Module> { + let module_path_len = module_path.len(); + assert!(module_path_len > 0); + + debug!("(resolving module path for import) processing `%s` rooted at \ + `%s`", + self.idents_to_str(module_path), + self.module_to_str(module_)); + + // Resolve the module prefix, if any. + let module_prefix_result = self.resolve_module_prefix(module_, + module_path); + + let search_module; + let start_index; + match module_prefix_result { + Failed => { + self.session.span_err(span, ~"unresolved name"); + return Failed; + } + Indeterminate => { + debug!("(resolving module path for import) indeterminate; \ + bailing"); + return Indeterminate; + } + Success(NoPrefixFound) => { + // There was no prefix, so we're considering the first element + // of the path. How we handle this depends on whether we were + // instructed to use lexical scope or not. + match use_lexical_scope { + DontUseLexicalScope => { + // This is a crate-relative path. We will start the + // resolution process at index zero. + search_module = self.graph_root.get_module(); + start_index = 0; + } + UseLexicalScope => { + // This is not a crate-relative path. We resolve the + // first component of the path in the current lexical + // scope and then proceed to resolve below that. + let result = self.resolve_module_in_lexical_scope( + module_, + module_path[0]); + match result { + Failed => { + self.session.span_err(span, + ~"unresolved name"); + return Failed; + } + Indeterminate => { + debug!("(resolving module path for import) \ + indeterminate; bailing"); + return Indeterminate; + } + Success(containing_module) => { + search_module = containing_module; + start_index = 1; + } + } + } + } + } + Success(PrefixFound(containing_module, index)) => { + search_module = containing_module; + start_index = index; + } + } + + self.resolve_module_path_from_root(search_module, + module_path, + start_index, + span, + SearchItemsAndPublicImports) + } + + /// Invariant: This must only be called during main resolution, not during + /// import resolution. + fn resolve_item_in_lexical_scope(@mut self, + module_: @mut Module, + name: ident, + namespace: Namespace, + search_through_modules: + SearchThroughModulesFlag) + -> ResolveResult { + debug!("(resolving item in lexical scope) resolving `%s` in \ + namespace %? in `%s`", + *self.session.str_of(name), + namespace, + self.module_to_str(module_)); + + // The current module node is handled specially. First, check for + // its immediate children. + match module_.children.find(&name) { + Some(name_bindings) + if name_bindings.defined_in_namespace(namespace) => { + return Success(Target(module_, *name_bindings)); + } + Some(_) | None => { /* Not found; continue. */ } + } + + // Now check for its import directives. We don't have to have resolved + // all its imports in the usual way; this is because chains of + // adjacent import statements are processed as though they mutated the + // current scope. + match module_.import_resolutions.find(&name) { + None => { + // Not found; continue. + } + Some(import_resolution) => { + match (*import_resolution).target_for_namespace(namespace) { + None => { + // Not found; continue. + debug!("(resolving item in lexical scope) found \ + import resolution, but not in namespace %?", + namespace); + } + Some(target) => { + debug!("(resolving item in lexical scope) using \ + import resolution"); + import_resolution.state.used = true; + return Success(copy target); + } + } + } + } + + // Search for external modules. + if namespace == TypeNS { + match module_.external_module_children.find(&name) { + None => {} + Some(module) => { + let name_bindings = + @mut Resolver::create_name_bindings_from_module( + *module); + return Success(Target(module_, name_bindings)); + } + } + } + + // Finally, proceed up the scope chain looking for parent modules. + let mut search_module = module_; + loop { + // Go to the next parent. + match search_module.parent_link { + NoParentLink => { + // No more parents. This module was unresolved. + debug!("(resolving item in lexical scope) unresolved \ + module"); + return Failed; + } + ModuleParentLink(parent_module_node, _) => { + match search_through_modules { + DontSearchThroughModules => { + match search_module.kind { + NormalModuleKind => { + // We stop the search here. + debug!("(resolving item in lexical \ + scope) unresolved module: not \ + searching through module \ + parents"); + return Failed; + } + ExternModuleKind | + TraitModuleKind | + AnonymousModuleKind => { + search_module = parent_module_node; + } + } + } + SearchThroughModules => { + search_module = parent_module_node; + } + } + } + BlockParentLink(parent_module_node, _) => { + search_module = parent_module_node; + } + } + + // Resolve the name in the parent module. + match self.resolve_name_in_module(search_module, + name, + namespace, + SearchItemsAndAllImports) { + Failed => { + // Continue up the search chain. + } + Indeterminate => { + // We couldn't see through the higher scope because of an + // unresolved import higher up. Bail. + + debug!("(resolving item in lexical scope) indeterminate \ + higher scope; bailing"); + return Indeterminate; + } + Success(target) => { + // We found the module. + return Success(copy target); + } + } + } + } + + /** Resolves a module name in the current lexical scope. */ + fn resolve_module_in_lexical_scope(@mut self, + module_: @mut Module, + name: ident) + -> ResolveResult<@mut Module> { + // If this module is an anonymous module, resolve the item in the + // lexical scope. Otherwise, resolve the item from the crate root. + let resolve_result = self.resolve_item_in_lexical_scope( + module_, name, TypeNS, DontSearchThroughModules); + match resolve_result { + Success(target) => { + let bindings = &mut *target.bindings; + match bindings.type_def { + Some(ref type_def) => { + match (*type_def).module_def { + None => { + error!("!!! (resolving module in lexical \ + scope) module wasn't actually a \ + module!"); + return Failed; + } + Some(module_def) => { + return Success(module_def); + } + } + } + None => { + error!("!!! (resolving module in lexical scope) module + wasn't actually a module!"); + return Failed; + } + } + } + Indeterminate => { + debug!("(resolving module in lexical scope) indeterminate; \ + bailing"); + return Indeterminate; + } + Failed => { + debug!("(resolving module in lexical scope) failed to \ + resolve"); + return Failed; + } + } + } + + /** + * Returns the nearest normal module parent of the given module. + */ + fn get_nearest_normal_module_parent(@mut self, module_: @mut Module) + -> Option<@mut Module> { + let mut module_ = module_; + loop { + match module_.parent_link { + NoParentLink => return None, + ModuleParentLink(new_module, _) | + BlockParentLink(new_module, _) => { + match new_module.kind { + NormalModuleKind => return Some(new_module), + ExternModuleKind | + TraitModuleKind | + AnonymousModuleKind => module_ = new_module, + } + } + } + } + } + + /** + * Returns the nearest normal module parent of the given module, or the + * module itself if it is a normal module. + */ + fn get_nearest_normal_module_parent_or_self(@mut self, + module_: @mut Module) + -> @mut Module { + match module_.kind { + NormalModuleKind => return module_, + ExternModuleKind | TraitModuleKind | AnonymousModuleKind => { + match self.get_nearest_normal_module_parent(module_) { + None => module_, + Some(new_module) => new_module + } + } + } + } + + /** + * Resolves a "module prefix". A module prefix is one of (a) `self::`; + * (b) some chain of `super::`. + */ + fn resolve_module_prefix(@mut self, + module_: @mut Module, + module_path: &[ident]) + -> ResolveResult { + let interner = self.session.parse_sess.interner; + + // Start at the current module if we see `self` or `super`, or at the + // top of the crate otherwise. + let mut containing_module; + let mut i; + if *interner.get(module_path[0]) == ~"self" { + containing_module = + self.get_nearest_normal_module_parent_or_self(module_); + i = 1; + } else if *interner.get(module_path[0]) == ~"super" { + containing_module = + self.get_nearest_normal_module_parent_or_self(module_); + i = 0; // We'll handle `super` below. + } else { + return Success(NoPrefixFound); + } + + // Now loop through all the `super`s we find. + while i < module_path.len() && + *interner.get(module_path[i]) == ~"super" { + debug!("(resolving module prefix) resolving `super` at %s", + self.module_to_str(containing_module)); + match self.get_nearest_normal_module_parent(containing_module) { + None => return Failed, + Some(new_module) => { + containing_module = new_module; + i += 1; + } + } + } + + debug!("(resolving module prefix) finished resolving prefix at %s", + self.module_to_str(containing_module)); + + return Success(PrefixFound(containing_module, i)); + } + + /// Attempts to resolve the supplied name in the given module for the + /// given namespace. If successful, returns the target corresponding to + /// the name. + fn resolve_name_in_module(@mut self, + module_: @mut Module, + name: ident, + namespace: Namespace, + name_search_type: NameSearchType) + -> ResolveResult { + debug!("(resolving name in module) resolving `%s` in `%s`", + *self.session.str_of(name), + self.module_to_str(module_)); + + // First, check the direct children of the module. + match module_.children.find(&name) { + Some(name_bindings) + if name_bindings.defined_in_namespace(namespace) => { + debug!("(resolving name in module) found node as child"); + return Success(Target(module_, *name_bindings)); + } + Some(_) | None => { + // Continue. + } + } + + // Next, check the module's imports if necessary. + + // If this is a search of all imports, we should be done with glob + // resolution at this point. + if name_search_type == SearchItemsAndAllImports { + assert!(module_.glob_count == 0); + } + + // Check the list of resolved imports. + match module_.import_resolutions.find(&name) { + Some(import_resolution) => { + if import_resolution.privacy == Public && + import_resolution.outstanding_references != 0 { + debug!("(resolving name in module) import \ + unresolved; bailing out"); + return Indeterminate; + } + + match import_resolution.target_for_namespace(namespace) { + None => { + debug!("(resolving name in module) name found, \ + but not in namespace %?", + namespace); + } + Some(target) + if name_search_type == + SearchItemsAndAllImports || + import_resolution.privacy == Public => { + debug!("(resolving name in module) resolved to \ + import"); + import_resolution.state.used = true; + return Success(copy target); + } + Some(_) => { + debug!("(resolving name in module) name found, \ + but not public"); + } + } + } + None => {} // Continue. + } + + // Finally, search through external children. + if namespace == TypeNS { + match module_.external_module_children.find(&name) { + None => {} + Some(module) => { + let name_bindings = + @mut Resolver::create_name_bindings_from_module( + *module); + return Success(Target(module_, name_bindings)); + } + } + } + + // We're out of luck. + debug!("(resolving name in module) failed to resolve %s", + *self.session.str_of(name)); + return Failed; + } + + fn report_unresolved_imports(@mut self, module_: @mut Module) { + let index = module_.resolved_import_count; + let imports: &mut ~[@ImportDirective] = &mut *module_.imports; + let import_count = imports.len(); + if index != import_count { + let sn = self.session.codemap.span_to_snippet(imports[index].span); + if str::contains(sn, "::") { + self.session.span_err(imports[index].span, ~"unresolved import"); + } else { + let err = fmt!("unresolved import (maybe you meant `%s::*`?)", + sn.slice(0, sn.len() - 1)); // -1 to adjust for semicolon + self.session.span_err(imports[index].span, err); + } + } + + // Descend into children and anonymous children. + for module_.children.each_value |&child_node| { + match child_node.get_module_if_available() { + None => { + // Continue. + } + Some(child_module) => { + self.report_unresolved_imports(child_module); + } + } + } + + for module_.anonymous_children.each_value |&module_| { + self.report_unresolved_imports(module_); + } + } + + // Export recording + // + // This pass simply determines what all "export" keywords refer to and + // writes the results into the export map. + // + // FIXME #4953 This pass will be removed once exports change to per-item. + // Then this operation can simply be performed as part of item (or import) + // processing. + + fn record_exports(@mut self) { + let root_module = self.graph_root.get_module(); + self.record_exports_for_module_subtree(root_module); + } + + fn record_exports_for_module_subtree(@mut self, module_: @mut Module) { + // If this isn't a local crate, then bail out. We don't need to record + // exports for nonlocal crates. + + match module_.def_id { + Some(def_id) if def_id.crate == local_crate => { + // OK. Continue. + debug!("(recording exports for module subtree) recording \ + exports for local module"); + } + None => { + // Record exports for the root module. + debug!("(recording exports for module subtree) recording \ + exports for root module"); + } + Some(_) => { + // Bail out. + debug!("(recording exports for module subtree) not recording \ + exports for `%s`", + self.module_to_str(module_)); + return; + } + } + + self.record_exports_for_module(module_); + + for module_.children.each_value |&child_name_bindings| { + match child_name_bindings.get_module_if_available() { + None => { + // Nothing to do. + } + Some(child_module) => { + self.record_exports_for_module_subtree(child_module); + } + } + } + + for module_.anonymous_children.each_value |&child_module| { + self.record_exports_for_module_subtree(child_module); + } + } + + fn record_exports_for_module(@mut self, module_: @mut Module) { + let mut exports2 = ~[]; + + self.add_exports_for_module(&mut exports2, module_); + match /*bad*/copy module_.def_id { + Some(def_id) => { + self.export_map2.insert(def_id.node, exports2); + debug!("(computing exports) writing exports for %d (some)", + def_id.node); + } + None => {} + } + } + + fn add_exports_of_namebindings(@mut self, + exports2: &mut ~[Export2], + ident: ident, + namebindings: @mut NameBindings, + ns: Namespace, + reexport: bool) { + match (namebindings.def_for_namespace(ns), + namebindings.privacy_for_namespace(ns)) { + (Some(d), Some(Public)) => { + debug!("(computing exports) YES: %s '%s' => %?", + if reexport { ~"reexport" } else { ~"export"}, + *self.session.str_of(ident), + def_id_of_def(d)); + exports2.push(Export2 { + reexport: reexport, + name: self.session.str_of(ident), + def_id: def_id_of_def(d) + }); + } + (Some(_), Some(privacy)) => { + debug!("(computing reexports) NO: privacy %?", privacy); + } + (d_opt, p_opt) => { + debug!("(computing reexports) NO: %?, %?", d_opt, p_opt); + } + } + } + + fn add_exports_for_module(@mut self, + exports2: &mut ~[Export2], + module_: @mut Module) { + for module_.children.each |ident, namebindings| { + debug!("(computing exports) maybe export '%s'", + *self.session.str_of(*ident)); + self.add_exports_of_namebindings(&mut *exports2, + *ident, + *namebindings, + TypeNS, + false); + self.add_exports_of_namebindings(&mut *exports2, + *ident, + *namebindings, + ValueNS, + false); + } + + for module_.import_resolutions.each |ident, importresolution| { + if importresolution.privacy != Public { + debug!("(computing exports) not reexporting private `%s`", + *self.session.str_of(*ident)); + loop; + } + for [ TypeNS, ValueNS ].each |ns| { + match importresolution.target_for_namespace(*ns) { + Some(target) => { + debug!("(computing exports) maybe reexport '%s'", + *self.session.str_of(*ident)); + self.add_exports_of_namebindings(&mut *exports2, + *ident, + target.bindings, + *ns, + true) + } + _ => () + } + } + } + } + + // AST resolution + // + // We maintain a list of value ribs and type ribs. + // + // Simultaneously, we keep track of the current position in the module + // graph in the `current_module` pointer. When we go to resolve a name in + // the value or type namespaces, we first look through all the ribs and + // then query the module graph. When we resolve a name in the module + // namespace, we can skip all the ribs (since nested modules are not + // allowed within blocks in Rust) and jump straight to the current module + // graph node. + // + // Named implementations are handled separately. When we find a method + // call, we consult the module node to find all of the implementations in + // scope. This information is lazily cached in the module node. We then + // generate a fake "implementation scope" containing all the + // implementations thus found, for compatibility with old resolve pass. + + fn with_scope(@mut self, name: Option, f: &fn()) { + let orig_module = self.current_module; + + // Move down in the graph. + match name { + None => { + // Nothing to do. + } + Some(name) => { + match orig_module.children.find(&name) { + None => { + debug!("!!! (with scope) didn't find `%s` in `%s`", + *self.session.str_of(name), + self.module_to_str(orig_module)); + } + Some(name_bindings) => { + match (*name_bindings).get_module_if_available() { + None => { + debug!("!!! (with scope) didn't find module \ + for `%s` in `%s`", + *self.session.str_of(name), + self.module_to_str(orig_module)); + } + Some(module_) => { + self.current_module = module_; + } + } + } + } + } + } + + f(); + + self.current_module = orig_module; + } + + // Wraps the given definition in the appropriate number of `def_upvar` + // wrappers. + + fn upvarify(@mut self, + ribs: &mut ~[@Rib], + rib_index: uint, + def_like: def_like, + span: span, + allow_capturing_self: AllowCapturingSelfFlag) + -> Option { + let mut def; + let is_ty_param; + + match def_like { + dl_def(d @ def_local(*)) | dl_def(d @ def_upvar(*)) | + dl_def(d @ def_arg(*)) | dl_def(d @ def_binding(*)) => { + def = d; + is_ty_param = false; + } + dl_def(d @ def_ty_param(*)) => { + def = d; + is_ty_param = true; + } + dl_def(d @ def_self(*)) + if allow_capturing_self == DontAllowCapturingSelf => { + def = d; + is_ty_param = false; + } + _ => { + return Some(def_like); + } + } + + let mut rib_index = rib_index + 1; + while rib_index < ribs.len() { + match ribs[rib_index].kind { + NormalRibKind => { + // Nothing to do. Continue. + } + FunctionRibKind(function_id, body_id) => { + if !is_ty_param { + def = def_upvar(def_id_of_def(def).node, + @def, + function_id, + body_id); + } + } + MethodRibKind(item_id, _) => { + // If the def is a ty param, and came from the parent + // item, it's ok + match def { + def_ty_param(did, _) + if self.def_map.find(&did.node).map_consume(|x| *x) + == Some(def_typaram_binder(item_id)) => { + // ok + } + _ => { + if !is_ty_param { + // This was an attempt to access an upvar inside a + // named function item. This is not allowed, so we + // report an error. + + self.session.span_err( + span, + ~"attempted dynamic environment-capture"); + } else { + // This was an attempt to use a type parameter outside + // its scope. + + self.session.span_err(span, + ~"attempt to use a type \ + argument out of scope"); + } + + return None; + } + } + } + OpaqueFunctionRibKind => { + if !is_ty_param { + // This was an attempt to access an upvar inside a + // named function item. This is not allowed, so we + // report an error. + + self.session.span_err( + span, + ~"attempted dynamic environment-capture"); + } else { + // This was an attempt to use a type parameter outside + // its scope. + + self.session.span_err(span, + ~"attempt to use a type \ + argument out of scope"); + } + + return None; + } + ConstantItemRibKind => { + // Still doesn't deal with upvars + self.session.span_err(span, + ~"attempt to use a non-constant \ + value in a constant"); + + } + } + + rib_index += 1; + } + + return Some(dl_def(def)); + } + + fn search_ribs(@mut self, + ribs: &mut ~[@Rib], + name: ident, + span: span, + allow_capturing_self: AllowCapturingSelfFlag) + -> Option { + // FIXME #4950: This should not use a while loop. + // FIXME #4950: Try caching? + + let mut i = ribs.len(); + while i != 0 { + i -= 1; + match ribs[i].bindings.find(&name) { + Some(&def_like) => { + return self.upvarify(ribs, i, def_like, span, + allow_capturing_self); + } + None => { + // Continue. + } + } + } + + return None; + } + + fn resolve_crate(@mut self) { + debug!("(resolving crate) starting"); + + visit_crate(self.crate, (), mk_vt(@Visitor { + visit_item: |item, _context, visitor| + self.resolve_item(item, visitor), + visit_arm: |arm, _context, visitor| + self.resolve_arm(arm, visitor), + visit_block: |block, _context, visitor| + self.resolve_block(block, visitor), + visit_expr: |expr, _context, visitor| + self.resolve_expr(expr, visitor), + visit_local: |local, _context, visitor| + self.resolve_local(local, visitor), + visit_ty: |ty, _context, visitor| + self.resolve_type(ty, visitor), + .. *default_visitor() + })); + } + + fn resolve_item(@mut self, item: @item, visitor: ResolveVisitor) { + debug!("(resolving item) resolving %s", + *self.session.str_of(item.ident)); + + // Items with the !resolve_unexported attribute are X-ray contexts. + // This is used to allow the test runner to run unexported tests. + let orig_xray_flag = self.xray_context; + if contains_name(attr_metas(item.attrs), + ~"!resolve_unexported") { + self.xray_context = Xray; + } + + match item.node { + + // enum item: resolve all the variants' discrs, + // then resolve the ty params + item_enum(ref enum_def, ref generics) => { + for (*enum_def).variants.each() |variant| { + for variant.node.disr_expr.each |dis_expr| { + // resolve the discriminator expr + // as a constant + self.with_constant_rib(|| { + self.resolve_expr(*dis_expr, visitor); + }); + } + } + + // n.b. the discr expr gets visted twice. + // but maybe it's okay since the first time will signal an + // error if there is one? -- tjc + do self.with_type_parameter_rib( + HasTypeParameters( + generics, item.id, 0, NormalRibKind)) { + visit_item(item, (), visitor); + } + } + + item_ty(_, ref generics) => { + do self.with_type_parameter_rib + (HasTypeParameters(generics, item.id, 0, + NormalRibKind)) + || { + + visit_item(item, (), visitor); + } + } + + item_impl(ref generics, + implemented_traits, + self_type, + ref methods) => { + self.resolve_implementation(item.id, + generics, + implemented_traits, + self_type, + *methods, + visitor); + } + + item_trait(ref generics, ref traits, ref methods) => { + // Create a new rib for the self type. + let self_type_rib = @Rib(NormalRibKind); + self.type_ribs.push(self_type_rib); + self_type_rib.bindings.insert(self.type_self_ident, + dl_def(def_self_ty(item.id))); + + // Create a new rib for the trait-wide type parameters. + do self.with_type_parameter_rib + (HasTypeParameters(generics, item.id, 0, + NormalRibKind)) { + + self.resolve_type_parameters(&generics.ty_params, + visitor); + + // Resolve derived traits. + for traits.each |trt| { + match self.resolve_path(trt.path, TypeNS, true, + visitor) { + None => + self.session.span_err(trt.path.span, + ~"attempt to derive a \ + nonexistent trait"), + Some(def) => { + // Write a mapping from the trait ID to the + // definition of the trait into the definition + // map. + + debug!("(resolving trait) found trait def: \ + %?", def); + + self.record_def(trt.ref_id, def); + } + } + } + + for (*methods).each |method| { + // Create a new rib for the method-specific type + // parameters. + // + // FIXME #4951: Do we need a node ID here? + + match *method { + required(ref ty_m) => { + do self.with_type_parameter_rib + (HasTypeParameters(&ty_m.generics, + item.id, + generics.ty_params.len(), + MethodRibKind(item.id, Required))) { + + // Resolve the method-specific type + // parameters. + self.resolve_type_parameters( + &ty_m.generics.ty_params, + visitor); + + for ty_m.decl.inputs.each |argument| { + self.resolve_type(argument.ty, visitor); + } + + self.resolve_type(ty_m.decl.output, visitor); + } + } + provided(m) => { + self.resolve_method(MethodRibKind(item.id, + Provided(m.id)), + m, + generics.ty_params.len(), + visitor) + } + } + } + } + + self.type_ribs.pop(); + } + + item_struct(ref struct_def, ref generics) => { + self.resolve_struct(item.id, + generics, + struct_def.fields, + &struct_def.dtor, + visitor); + } + + item_mod(ref module_) => { + do self.with_scope(Some(item.ident)) { + self.resolve_module(module_, item.span, item.ident, + item.id, visitor); + } + } + + item_foreign_mod(ref foreign_module) => { + do self.with_scope(Some(item.ident)) { + for foreign_module.items.each |foreign_item| { + match foreign_item.node { + foreign_item_fn(_, _, ref generics) => { + self.with_type_parameter_rib( + HasTypeParameters( + generics, foreign_item.id, 0, + NormalRibKind), + || visit_foreign_item(*foreign_item, (), + visitor)); + } + foreign_item_const(_) => { + visit_foreign_item(*foreign_item, (), + visitor); + } + } + } + } + } + + item_fn(ref fn_decl, _, _, ref generics, ref block) => { + // If this is the main function, we must record it in the + // session. + + // FIXME #4404 android JNI hacks + if !*self.session.building_library || + self.session.targ_cfg.os == session::os_android { + + if self.attr_main_fn.is_none() && + item.ident == special_idents::main { + + self.main_fns.push(Some((item.id, item.span))); + } + + if attrs_contains_name(item.attrs, ~"main") { + if self.attr_main_fn.is_none() { + self.attr_main_fn = Some((item.id, item.span)); + } else { + self.session.span_err( + item.span, + ~"multiple 'main' functions"); + } + } + + if attrs_contains_name(item.attrs, ~"start") { + if self.start_fn.is_none() { + self.start_fn = Some((item.id, item.span)); + } else { + self.session.span_err( + item.span, + ~"multiple 'start' functions"); + } + } + } + + self.resolve_function(OpaqueFunctionRibKind, + Some(fn_decl), + HasTypeParameters + (generics, + item.id, + 0, + OpaqueFunctionRibKind), + block, + NoSelfBinding, + visitor); + } + + item_const(*) => { + self.with_constant_rib(|| { + visit_item(item, (), visitor); + }); + } + + item_mac(*) => { + fail!(~"item macros unimplemented") + } + } + + self.xray_context = orig_xray_flag; + } + + fn with_type_parameter_rib(@mut self, + type_parameters: TypeParameters, + f: &fn()) { + match type_parameters { + HasTypeParameters(generics, node_id, initial_index, + rib_kind) => { + + let function_type_rib = @Rib(rib_kind); + self.type_ribs.push(function_type_rib); + + for generics.ty_params.eachi |index, type_parameter| { + let name = type_parameter.ident; + debug!("with_type_parameter_rib: %d %d", node_id, + type_parameter.id); + let def_like = dl_def(def_ty_param + (local_def(type_parameter.id), + index + initial_index)); + // Associate this type parameter with + // the item that bound it + self.record_def(type_parameter.id, + def_typaram_binder(node_id)); + function_type_rib.bindings.insert(name, def_like); + } + } + + NoTypeParameters => { + // Nothing to do. + } + } + + f(); + + match type_parameters { + HasTypeParameters(*) => { + self.type_ribs.pop(); + } + + NoTypeParameters => { + // Nothing to do. + } + } + } + + fn with_label_rib(@mut self, f: &fn()) { + self.label_ribs.push(@Rib(NormalRibKind)); + f(); + self.label_ribs.pop(); + } + + fn with_constant_rib(@mut self, f: &fn()) { + self.value_ribs.push(@Rib(ConstantItemRibKind)); + f(); + self.value_ribs.pop(); + } + + fn resolve_function(@mut self, + rib_kind: RibKind, + optional_declaration: Option<&fn_decl>, + type_parameters: TypeParameters, + block: &blk, + self_binding: SelfBinding, + visitor: ResolveVisitor) { + // Create a value rib for the function. + let function_value_rib = @Rib(rib_kind); + self.value_ribs.push(function_value_rib); + + // Create a label rib for the function. + let function_label_rib = @Rib(rib_kind); + self.label_ribs.push(function_label_rib); + + // If this function has type parameters, add them now. + do self.with_type_parameter_rib(type_parameters) { + // Resolve the type parameters. + match type_parameters { + NoTypeParameters => { + // Continue. + } + HasTypeParameters(ref generics, _, _, _) => { + self.resolve_type_parameters(&generics.ty_params, + visitor); + } + } + + // Add self to the rib, if necessary. + match self_binding { + NoSelfBinding => { + // Nothing to do. + } + HasSelfBinding(self_node_id, is_implicit) => { + let def_like = dl_def(def_self(self_node_id, + is_implicit)); + (*function_value_rib).bindings.insert(self.self_ident, + def_like); + } + } + + // Add each argument to the rib. + match optional_declaration { + None => { + // Nothing to do. + } + Some(declaration) => { + for declaration.inputs.each |argument| { + let binding_mode = ArgumentIrrefutableMode; + let mutability = + if argument.is_mutbl {Mutable} else {Immutable}; + self.resolve_pattern(argument.pat, + binding_mode, + mutability, + None, + visitor); + + self.resolve_type(argument.ty, visitor); + + debug!("(resolving function) recorded argument"); + } + + self.resolve_type(declaration.output, visitor); + } + } + + // Resolve the function body. + self.resolve_block(block, visitor); + + debug!("(resolving function) leaving function"); + } + + self.label_ribs.pop(); + self.value_ribs.pop(); + } + + fn resolve_type_parameters(@mut self, + type_parameters: &OptVec, + visitor: ResolveVisitor) { + for type_parameters.each |type_parameter| { + for type_parameter.bounds.each |&bound| { + match bound { + TraitTyParamBound(tref) => { + self.resolve_trait_reference(tref, visitor) + } + RegionTyParamBound => {} + } + } + } + } + + fn resolve_trait_reference(@mut self, + trait_reference: &trait_ref, + visitor: ResolveVisitor) { + match self.resolve_path(trait_reference.path, TypeNS, true, visitor) { + None => { + self.session.span_err(trait_reference.path.span, + ~"attempt to implement an \ + unknown trait"); + } + Some(def) => { + self.record_def(trait_reference.ref_id, def); + } + } + } + + fn resolve_struct(@mut self, + id: node_id, + generics: &Generics, + fields: &[@struct_field], + optional_destructor: &Option, + visitor: ResolveVisitor) { + // If applicable, create a rib for the type parameters. + do self.with_type_parameter_rib(HasTypeParameters + (generics, id, 0, + OpaqueFunctionRibKind)) { + + // Resolve the type parameters. + self.resolve_type_parameters(&generics.ty_params, visitor); + + // Resolve fields. + for fields.each |field| { + self.resolve_type(field.node.ty, visitor); + } + + // Resolve the destructor, if applicable. + match *optional_destructor { + None => { + // Nothing to do. + } + Some(ref destructor) => { + self.resolve_function(NormalRibKind, + None, + NoTypeParameters, + &destructor.node.body, + HasSelfBinding + ((*destructor).node.self_id, + true), + visitor); + } + } + } + } + + // Does this really need to take a RibKind or is it always going + // to be NormalRibKind? + fn resolve_method(@mut self, + rib_kind: RibKind, + method: @method, + outer_type_parameter_count: uint, + visitor: ResolveVisitor) { + let method_generics = &method.generics; + let type_parameters = + HasTypeParameters(method_generics, + method.id, + outer_type_parameter_count, + rib_kind); + // we only have self ty if it is a non static method + let self_binding = match method.self_ty.node { + sty_static => { NoSelfBinding } + _ => { HasSelfBinding(method.self_id, false) } + }; + + self.resolve_function(rib_kind, + Some(&method.decl), + type_parameters, + &method.body, + self_binding, + visitor); + } + + fn resolve_implementation(@mut self, + id: node_id, + generics: &Generics, + opt_trait_reference: Option<@trait_ref>, + self_type: @Ty, + methods: &[@method], + visitor: ResolveVisitor) { + // If applicable, create a rib for the type parameters. + let outer_type_parameter_count = generics.ty_params.len(); + do self.with_type_parameter_rib(HasTypeParameters + (generics, id, 0, + NormalRibKind)) { + // Resolve the type parameters. + self.resolve_type_parameters(&generics.ty_params, + visitor); + + // Resolve the trait reference, if necessary. + let original_trait_refs; + match opt_trait_reference { + Some(trait_reference) => { + self.resolve_trait_reference(trait_reference, visitor); + + // Record the current set of trait references. + let mut new_trait_refs = ~[]; + for self.def_map.find(&trait_reference.ref_id).each |&def| { + new_trait_refs.push(def_id_of_def(*def)); + } + original_trait_refs = Some(util::replace( + &mut self.current_trait_refs, + Some(new_trait_refs))); + } + None => { + original_trait_refs = None; + } + } + + // Resolve the self type. + self.resolve_type(self_type, visitor); + + for methods.each |method| { + // We also need a new scope for the method-specific + // type parameters. + self.resolve_method(MethodRibKind( + id, + Provided(method.id)), + *method, + outer_type_parameter_count, + visitor); +/* + let borrowed_type_parameters = &method.tps; + self.resolve_function(MethodRibKind( + id, + Provided(method.id)), + Some(@method.decl), + HasTypeParameters + (borrowed_type_parameters, + method.id, + outer_type_parameter_count, + NormalRibKind), + method.body, + HasSelfBinding(method.self_id), + visitor); +*/ + } + + // Restore the original trait references. + match original_trait_refs { + Some(r) => { self.current_trait_refs = r; } + None => () + } + } + } + + fn resolve_module(@mut self, + module_: &_mod, + span: span, + _name: ident, + id: node_id, + visitor: ResolveVisitor) { + // Write the implementations in scope into the module metadata. + debug!("(resolving module) resolving module ID %d", id); + visit_mod(module_, span, id, (), visitor); + } + + fn resolve_local(@mut self, local: @local, visitor: ResolveVisitor) { + let mutability = if local.node.is_mutbl {Mutable} else {Immutable}; + + // Resolve the type. + self.resolve_type(local.node.ty, visitor); + + // Resolve the initializer, if necessary. + match local.node.init { + None => { + // Nothing to do. + } + Some(initializer) => { + self.resolve_expr(initializer, visitor); + } + } + + // Resolve the pattern. + self.resolve_pattern(local.node.pat, LocalIrrefutableMode, mutability, + None, visitor); + } + + fn binding_mode_map(@mut self, pat: @pat) -> BindingMap { + let mut result = HashMap::new(); + do pat_bindings(self.def_map, pat) |binding_mode, _id, sp, path| { + let ident = path_to_ident(path); + result.insert(ident, + binding_info {span: sp, + binding_mode: binding_mode}); + } + return result; + } + + fn check_consistent_bindings(@mut self, arm: &arm) { + if arm.pats.len() == 0 { return; } + let map_0 = self.binding_mode_map(arm.pats[0]); + for arm.pats.eachi() |i, p| { + let map_i = self.binding_mode_map(*p); + + for map_0.each |&key, &binding_0| { + match map_i.find(&key) { + None => { + self.session.span_err( + p.span, + fmt!("variable `%s` from pattern #1 is \ + not bound in pattern #%u", + *self.session.str_of(key), i + 1)); + } + Some(binding_i) => { + if binding_0.binding_mode != binding_i.binding_mode { + self.session.span_err( + binding_i.span, + fmt!("variable `%s` is bound with different \ + mode in pattern #%u than in pattern #1", + *self.session.str_of(key), i + 1)); + } + } + } + } + + for map_i.each |&key, &binding| { + if !map_0.contains_key(&key) { + self.session.span_err( + binding.span, + fmt!("variable `%s` from pattern #%u is \ + not bound in pattern #1", + *self.session.str_of(key), i + 1)); + } + } + } + } + + fn resolve_arm(@mut self, arm: &arm, visitor: ResolveVisitor) { + self.value_ribs.push(@Rib(NormalRibKind)); + + let bindings_list = @mut HashMap::new(); + for arm.pats.each |pattern| { + self.resolve_pattern(*pattern, RefutableMode, Immutable, + Some(bindings_list), visitor); + } + + // This has to happen *after* we determine which + // pat_idents are variants + self.check_consistent_bindings(arm); + + visit_expr_opt(arm.guard, (), visitor); + self.resolve_block(&arm.body, visitor); + + self.value_ribs.pop(); + } + + fn resolve_block(@mut self, block: &blk, visitor: ResolveVisitor) { + debug!("(resolving block) entering block"); + self.value_ribs.push(@Rib(NormalRibKind)); + + // Move down in the graph, if there's an anonymous module rooted here. + let orig_module = self.current_module; + match self.current_module.anonymous_children.find(&block.node.id) { + None => { /* Nothing to do. */ } + Some(&anonymous_module) => { + debug!("(resolving block) found anonymous module, moving \ + down"); + self.current_module = anonymous_module; + } + } + + // Descend into the block. + visit_block(block, (), visitor); + + // Move back up. + self.current_module = orig_module; + + self.value_ribs.pop(); + debug!("(resolving block) leaving block"); + } + + fn resolve_type(@mut self, ty: @Ty, visitor: ResolveVisitor) { + match ty.node { + // Like path expressions, the interpretation of path types depends + // on whether the path has multiple elements in it or not. + + ty_path(path, path_id) => { + // This is a path in the type namespace. Walk through scopes + // scopes looking for it. + let mut result_def = None; + + // First, check to see whether the name is a primitive type. + if path.idents.len() == 1 { + let name = *path.idents.last(); + + match self.primitive_type_table + .primitive_types + .find(&name) { + + Some(&primitive_type) => { + result_def = + Some(def_prim_ty(primitive_type)); + } + None => { + // Continue. + } + } + } + + match result_def { + None => { + match self.resolve_path(path, TypeNS, true, visitor) { + Some(def) => { + debug!("(resolving type) resolved `%s` to \ + type %?", + *self.session.str_of( + *path.idents.last()), + def); + result_def = Some(def); + } + None => { + result_def = None; + } + } + } + Some(_) => { + // Continue. + } + } + + match result_def { + Some(def) => { + // Write the result into the def map. + debug!("(resolving type) writing resolution for `%s` \ + (id %d)", + self.idents_to_str(path.idents), + path_id); + self.record_def(path_id, def); + } + None => { + self.session.span_err + (ty.span, fmt!("use of undeclared type name `%s`", + self.idents_to_str(path.idents))); + } + } + } + + _ => { + // Just resolve embedded types. + visit_ty(ty, (), visitor); + } + } + } + + fn resolve_pattern(@mut self, + pattern: @pat, + mode: PatternBindingMode, + mutability: Mutability, + // Maps idents to the node ID for the (outermost) + // pattern that binds them + bindings_list: Option<@mut HashMap>, + visitor: ResolveVisitor) { + let pat_id = pattern.id; + do walk_pat(pattern) |pattern| { + match pattern.node { + pat_ident(binding_mode, path, _) + if !path.global && path.idents.len() == 1 => { + + // The meaning of pat_ident with no type parameters + // depends on whether an enum variant or unit-like struct + // with that name is in scope. The probing lookup has to + // be careful not to emit spurious errors. Only matching + // patterns (match) can match nullary variants or + // unit-like structs. For binding patterns (let), matching + // such a value is simply disallowed (since it's rarely + // what you want). + + let ident = path.idents[0]; + + match self.resolve_bare_identifier_pattern(ident) { + FoundStructOrEnumVariant(def) + if mode == RefutableMode => { + debug!("(resolving pattern) resolving `%s` to \ + struct or enum variant", + *self.session.str_of(ident)); + + self.enforce_default_binding_mode( + pattern, + binding_mode, + "an enum variant"); + self.record_def(pattern.id, def); + } + FoundStructOrEnumVariant(_) => { + self.session.span_err(pattern.span, + fmt!("declaration of `%s` \ + shadows an enum \ + variant or unit-like \ + struct in scope", + *self.session + .str_of(ident))); + } + FoundConst(def) if mode == RefutableMode => { + debug!("(resolving pattern) resolving `%s` to \ + constant", + *self.session.str_of(ident)); + + self.enforce_default_binding_mode( + pattern, + binding_mode, + "a constant"); + self.record_def(pattern.id, def); + } + FoundConst(_) => { + self.session.span_err(pattern.span, + ~"only refutable patterns \ + allowed here"); + } + BareIdentifierPatternUnresolved => { + debug!("(resolving pattern) binding `%s`", + *self.session.str_of(ident)); + + let is_mutable = mutability == Mutable; + + let def = match mode { + RefutableMode => { + // For pattern arms, we must use + // `def_binding` definitions. + + def_binding(pattern.id, binding_mode) + } + LocalIrrefutableMode => { + // But for locals, we use `def_local`. + def_local(pattern.id, is_mutable) + } + ArgumentIrrefutableMode => { + // And for function arguments, `def_arg`. + def_arg(pattern.id, is_mutable) + } + }; + + // Record the definition so that later passes + // will be able to distinguish variants from + // locals in patterns. + + self.record_def(pattern.id, def); + + // Add the binding to the local ribs, if it + // doesn't already exist in the bindings list. (We + // must not add it if it's in the bindings list + // because that breaks the assumptions later + // passes make about or-patterns.) + + match bindings_list { + Some(bindings_list) + if !bindings_list.contains_key(&ident) => { + let this = &mut *self; + let last_rib = this.value_ribs[ + this.value_ribs.len() - 1]; + last_rib.bindings.insert(ident, + dl_def(def)); + bindings_list.insert(ident, pat_id); + } + Some(b) => { + if b.find(&ident) == Some(&pat_id) { + // Then this is a duplicate variable + // in the same disjunct, which is an + // error + self.session.span_err(pattern.span, + fmt!("Identifier %s is bound more \ + than once in the same pattern", + path_to_str(path, self.session + .intr()))); + } + // Not bound in the same pattern: do nothing + } + None => { + let this = &mut *self; + let last_rib = this.value_ribs[ + this.value_ribs.len() - 1]; + last_rib.bindings.insert(ident, + dl_def(def)); + } + } + } + } + + // Check the types in the path pattern. + for path.types.each |ty| { + self.resolve_type(*ty, visitor); + } + } + + pat_ident(binding_mode, path, _) => { + // This must be an enum variant, struct, or constant. + match self.resolve_path(path, ValueNS, false, visitor) { + Some(def @ def_variant(*)) | + Some(def @ def_struct(*)) => { + self.record_def(pattern.id, def); + } + Some(def @ def_const(*)) => { + self.enforce_default_binding_mode( + pattern, + binding_mode, + "a constant"); + self.record_def(pattern.id, def); + } + Some(_) => { + self.session.span_err( + path.span, + fmt!("not an enum variant or constant: %s", + *self.session.str_of( + *path.idents.last()))); + } + None => { + self.session.span_err(path.span, + ~"unresolved enum variant"); + } + } + + // Check the types in the path pattern. + for path.types.each |ty| { + self.resolve_type(*ty, visitor); + } + } + + pat_enum(path, _) => { + // This must be an enum variant, struct or const. + match self.resolve_path(path, ValueNS, false, visitor) { + Some(def @ def_fn(*)) | + Some(def @ def_variant(*)) | + Some(def @ def_struct(*)) | + Some(def @ def_const(*)) => { + self.record_def(pattern.id, def); + } + Some(_) => { + self.session.span_err( + path.span, + fmt!("not an enum variant, struct or const: %s", + *self.session.str_of( + *path.idents.last()))); + } + None => { + self.session.span_err(path.span, + ~"unresolved enum variant, \ + struct or const"); + } + } + + // Check the types in the path pattern. + for path.types.each |ty| { + self.resolve_type(*ty, visitor); + } + } + + pat_lit(expr) => { + self.resolve_expr(expr, visitor); + } + + pat_range(first_expr, last_expr) => { + self.resolve_expr(first_expr, visitor); + self.resolve_expr(last_expr, visitor); + } + + pat_struct(path, _, _) => { + let structs: &mut HashSet = &mut self.structs; + match self.resolve_path(path, TypeNS, false, visitor) { + Some(def_ty(class_id)) + if structs.contains(&class_id) => { + let class_def = def_struct(class_id); + self.record_def(pattern.id, class_def); + } + Some(definition @ def_struct(class_id)) + if structs.contains(&class_id) => { + self.record_def(pattern.id, definition); + } + Some(definition @ def_variant(_, variant_id)) + if structs.contains(&variant_id) => { + self.record_def(pattern.id, definition); + } + result => { + debug!("(resolving pattern) didn't find struct \ + def: %?", result); + self.session.span_err( + path.span, + fmt!("`%s` does not name a structure", + self.idents_to_str(path.idents))); + } + } + } + + _ => { + // Nothing to do. + } + } + } + } + + fn resolve_bare_identifier_pattern(@mut self, name: ident) + -> BareIdentifierPatternResolution { + match self.resolve_item_in_lexical_scope(self.current_module, + name, + ValueNS, + SearchThroughModules) { + Success(target) => { + match target.bindings.value_def { + None => { + fail!(~"resolved name in the value namespace to a \ + set of name bindings with no def?!"); + } + Some(def) => { + match def.def { + def @ def_variant(*) | def @ def_struct(*) => { + return FoundStructOrEnumVariant(def); + } + def @ def_const(*) => { + return FoundConst(def); + } + _ => { + return BareIdentifierPatternUnresolved; + } + } + } + } + } + + Indeterminate => { + fail!(~"unexpected indeterminate result"); + } + + Failed => { + return BareIdentifierPatternUnresolved; + } + } + } + + /// If `check_ribs` is true, checks the local definitions first; i.e. + /// doesn't skip straight to the containing module. + fn resolve_path(@mut self, + path: @Path, + namespace: Namespace, + check_ribs: bool, + visitor: ResolveVisitor) + -> Option { + // First, resolve the types. + for path.types.each |ty| { + self.resolve_type(*ty, visitor); + } + + if path.global { + return self.resolve_crate_relative_path(path, + self.xray_context, + namespace); + } + + if path.idents.len() > 1 { + return self.resolve_module_relative_path(path, + self.xray_context, + namespace); + } + + return self.resolve_identifier(*path.idents.last(), + namespace, + check_ribs, + path.span); + } + + fn resolve_identifier(@mut self, + identifier: ident, + namespace: Namespace, + check_ribs: bool, + span: span) + -> Option { + if check_ribs { + match self.resolve_identifier_in_local_ribs(identifier, + namespace, + span) { + Some(def) => { + return Some(def); + } + None => { + // Continue. + } + } + } + + return self.resolve_item_by_identifier_in_lexical_scope(identifier, + namespace); + } + + // FIXME #4952: Merge me with resolve_name_in_module? + fn resolve_definition_of_name_in_module(@mut self, + containing_module: @mut Module, + name: ident, + namespace: Namespace, + xray: XrayFlag) + -> NameDefinition { + // First, search children. + match containing_module.children.find(&name) { + Some(child_name_bindings) => { + match (child_name_bindings.def_for_namespace(namespace), + child_name_bindings.privacy_for_namespace(namespace)) { + (Some(def), Some(Public)) => { + // Found it. Stop the search here. + return ChildNameDefinition(def); + } + (Some(def), _) if xray == Xray => { + // Found it. Stop the search here. + return ChildNameDefinition(def); + } + (Some(_), _) | (None, _) => { + // Continue. + } + } + } + None => { + // Continue. + } + } + + // Next, search import resolutions. + match containing_module.import_resolutions.find(&name) { + Some(import_resolution) if import_resolution.privacy == Public || + xray == Xray => { + match (*import_resolution).target_for_namespace(namespace) { + Some(target) => { + match (target.bindings.def_for_namespace(namespace), + target.bindings.privacy_for_namespace( + namespace)) { + (Some(def), Some(Public)) => { + // Found it. + import_resolution.state.used = true; + return ImportNameDefinition(def); + } + (Some(_), _) | (None, _) => { + // This can happen with external impls, due to + // the imperfect way we read the metadata. + } + } + } + None => {} + } + } + Some(_) | None => {} // Continue. + } + + // Finally, search through external children. + if namespace == TypeNS { + match containing_module.external_module_children.find(&name) { + None => {} + Some(module) => { + match module.def_id { + None => {} // Continue. + Some(def_id) => { + return ChildNameDefinition(def_mod(def_id)); + } + } + } + } + } + + return NoNameDefinition; + } + + fn intern_module_part_of_path(@mut self, path: @Path) -> ~[ident] { + let mut module_path_idents = ~[]; + for path.idents.eachi |index, ident| { + if index == path.idents.len() - 1 { + break; + } + + module_path_idents.push(*ident); + } + + return module_path_idents; + } + + fn resolve_module_relative_path(@mut self, + path: @Path, + xray: XrayFlag, + namespace: Namespace) + -> Option { + let module_path_idents = self.intern_module_part_of_path(path); + + let containing_module; + match self.resolve_module_path_for_import(self.current_module, + module_path_idents, + UseLexicalScope, + path.span) { + Failed => { + self.session.span_err(path.span, + fmt!("use of undeclared module `%s`", + self.idents_to_str( + module_path_idents))); + return None; + } + + Indeterminate => { + fail!(~"indeterminate unexpected"); + } + + Success(resulting_module) => { + containing_module = resulting_module; + } + } + + let name = *path.idents.last(); + match self.resolve_definition_of_name_in_module(containing_module, + name, + namespace, + xray) { + NoNameDefinition => { + // We failed to resolve the name. Report an error. + return None; + } + ChildNameDefinition(def) | ImportNameDefinition(def) => { + return Some(def); + } + } + } + + /// Invariant: This must be called only during main resolution, not during + /// import resolution. + fn resolve_crate_relative_path(@mut self, + path: @Path, + xray: XrayFlag, + namespace: Namespace) + -> Option { + let module_path_idents = self.intern_module_part_of_path(path); + + let root_module = self.graph_root.get_module(); + + let containing_module; + match self.resolve_module_path_from_root(root_module, + module_path_idents, + 0, + path.span, + SearchItemsAndAllImports) { + Failed => { + self.session.span_err(path.span, + fmt!("use of undeclared module `::%s`", + self.idents_to_str( + module_path_idents))); + return None; + } + + Indeterminate => { + fail!(~"indeterminate unexpected"); + } + + Success(resulting_module) => { + containing_module = resulting_module; + } + } + + let name = *path.idents.last(); + match self.resolve_definition_of_name_in_module(containing_module, + name, + namespace, + xray) { + NoNameDefinition => { + // We failed to resolve the name. Report an error. + return None; + } + ChildNameDefinition(def) | ImportNameDefinition(def) => { + return Some(def); + } + } + } + + fn resolve_identifier_in_local_ribs(@mut self, + ident: ident, + namespace: Namespace, + span: span) + -> Option { + // Check the local set of ribs. + let search_result; + match namespace { + ValueNS => { + search_result = self.search_ribs(&mut self.value_ribs, ident, + span, + DontAllowCapturingSelf); + } + TypeNS => { + search_result = self.search_ribs(&mut self.type_ribs, ident, + span, AllowCapturingSelf); + } + } + + match search_result { + Some(dl_def(def)) => { + debug!("(resolving path in local ribs) resolved `%s` to \ + local: %?", + *self.session.str_of(ident), + def); + return Some(def); + } + Some(dl_field) | Some(dl_impl(_)) | None => { + return None; + } + } + } + + fn resolve_item_by_identifier_in_lexical_scope(@mut self, + ident: ident, + namespace: Namespace) + -> Option { + // Check the items. + match self.resolve_item_in_lexical_scope(self.current_module, + ident, + namespace, + DontSearchThroughModules) { + Success(target) => { + match (*target.bindings).def_for_namespace(namespace) { + None => { + // This can happen if we were looking for a type and + // found a module instead. Modules don't have defs. + return None; + } + Some(def) => { + debug!("(resolving item path in lexical scope) \ + resolved `%s` to item", + *self.session.str_of(ident)); + return Some(def); + } + } + } + Indeterminate => { + fail!(~"unexpected indeterminate result"); + } + Failed => { + return None; + } + } + } + + fn find_best_match_for_name(@mut self, name: &str, max_distance: uint) -> Option<~str> { + let this = &mut *self; + + let mut maybes: ~[~str] = ~[]; + let mut values: ~[uint] = ~[]; + + let mut j = this.value_ribs.len(); + while j != 0 { + j -= 1; + for this.value_ribs[j].bindings.each_key |&k| { + vec::push(&mut maybes, copy *this.session.str_of(k)); + vec::push(&mut values, uint::max_value); + } + } + + let mut smallest = 0; + for vec::eachi(maybes) |i, &other| { + + values[i] = str::levdistance(name, other); + + if values[i] <= values[smallest] { + smallest = i; + } + } + + if vec::len(values) > 0 && + values[smallest] != uint::max_value && + values[smallest] < str::len(name) + 2 && + values[smallest] <= max_distance && + maybes[smallest] != name.to_owned() { + + Some(vec::swap_remove(&mut maybes, smallest)) + + } else { + None + } + } + + fn name_exists_in_scope_struct(@mut self, name: &str) -> bool { + let this = &mut *self; + + let mut i = this.type_ribs.len(); + while i != 0 { + i -= 1; + match this.type_ribs[i].kind { + MethodRibKind(node_id, _) => + for this.crate.node.module.items.each |item| { + if item.id == node_id { + match item.node { + item_struct(class_def, _) => { + for vec::each(class_def.fields) |field| { + match field.node.kind { + unnamed_field => {}, + named_field(ident, _, _) => { + if str::eq_slice(*this.session.str_of(ident), + name) { + return true + } + } + } + } + } + _ => {} + } + } + }, + _ => {} + } + } + return false; + } + + fn resolve_expr(@mut self, expr: @expr, visitor: ResolveVisitor) { + // First, record candidate traits for this expression if it could + // result in the invocation of a method call. + + self.record_candidate_traits_for_expr_if_necessary(expr); + + // Next, resolve the node. + match expr.node { + // The interpretation of paths depends on whether the path has + // multiple elements in it or not. + + expr_path(path) => { + // This is a local path in the value namespace. Walk through + // scopes looking for it. + + match self.resolve_path(path, ValueNS, true, visitor) { + Some(def) => { + // Write the result into the def map. + debug!("(resolving expr) resolved `%s`", + self.idents_to_str(path.idents)); + self.record_def(expr.id, def); + } + None => { + let wrong_name = self.idents_to_str( + path.idents); + if self.name_exists_in_scope_struct(wrong_name) { + self.session.span_err(expr.span, + fmt!("unresolved name: `%s`. \ + Did you mean: `self.%s`?", + wrong_name, + wrong_name)); + } + else { + // limit search to 5 to reduce the number + // of stupid suggestions + match self.find_best_match_for_name(wrong_name, 5) { + Some(m) => { + self.session.span_err(expr.span, + fmt!("unresolved name: `%s`. \ + Did you mean: `%s`?", + wrong_name, m)); + } + None => { + self.session.span_err(expr.span, + fmt!("unresolved name: `%s`.", + wrong_name)); + } + } + } + } + } + + visit_expr(expr, (), visitor); + } + + expr_fn_block(ref fn_decl, ref block) => { + self.resolve_function(FunctionRibKind(expr.id, block.node.id), + Some(fn_decl), + NoTypeParameters, + block, + NoSelfBinding, + visitor); + } + + expr_struct(path, _, _) => { + // Resolve the path to the structure it goes to. + let structs: &mut HashSet = &mut self.structs; + match self.resolve_path(path, TypeNS, false, visitor) { + Some(def_ty(class_id)) | Some(def_struct(class_id)) + if structs.contains(&class_id) => { + let class_def = def_struct(class_id); + self.record_def(expr.id, class_def); + } + Some(definition @ def_variant(_, class_id)) + if structs.contains(&class_id) => { + self.record_def(expr.id, definition); + } + _ => { + self.session.span_err( + path.span, + fmt!("`%s` does not name a structure", + self.idents_to_str(path.idents))); + } + } + + visit_expr(expr, (), visitor); + } + + expr_loop(_, Some(label)) => { + do self.with_label_rib { + let this = &mut *self; + let def_like = dl_def(def_label(expr.id)); + let rib = this.label_ribs[this.label_ribs.len() - 1]; + rib.bindings.insert(label, def_like); + + visit_expr(expr, (), visitor); + } + } + + expr_break(Some(label)) | expr_again(Some(label)) => { + match self.search_ribs(&mut self.label_ribs, label, expr.span, + DontAllowCapturingSelf) { + None => + self.session.span_err(expr.span, + fmt!("use of undeclared label \ + `%s`", + *self.session.str_of( + label))), + Some(dl_def(def @ def_label(_))) => + self.record_def(expr.id, def), + Some(_) => + self.session.span_bug(expr.span, + ~"label wasn't mapped to a \ + label def!") + } + } + + _ => { + visit_expr(expr, (), visitor); + } + } + } + + fn record_candidate_traits_for_expr_if_necessary(@mut self, expr: @expr) { + match expr.node { + expr_field(_, ident, _) => { + let traits = self.search_for_traits_containing_method(ident); + self.trait_map.insert(expr.id, @mut traits); + } + expr_method_call(_, ident, _, _, _) => { + let traits = self.search_for_traits_containing_method(ident); + self.trait_map.insert(expr.id, @mut traits); + } + expr_binary(add, _, _) | expr_assign_op(add, _, _) => { + self.add_fixed_trait_for_expr(expr.id, + self.lang_items.add_trait()); + } + expr_binary(subtract, _, _) | expr_assign_op(subtract, _, _) => { + self.add_fixed_trait_for_expr(expr.id, + self.lang_items.sub_trait()); + } + expr_binary(mul, _, _) | expr_assign_op(mul, _, _) => { + self.add_fixed_trait_for_expr(expr.id, + self.lang_items.mul_trait()); + } + expr_binary(quot, _, _) | expr_assign_op(quot, _, _) => { + self.add_fixed_trait_for_expr(expr.id, + self.lang_items.quot_trait()); + } + expr_binary(rem, _, _) | expr_assign_op(rem, _, _) => { + self.add_fixed_trait_for_expr(expr.id, + self.lang_items.rem_trait()); + } + expr_binary(bitxor, _, _) | expr_assign_op(bitxor, _, _) => { + self.add_fixed_trait_for_expr(expr.id, + self.lang_items.bitxor_trait()); + } + expr_binary(bitand, _, _) | expr_assign_op(bitand, _, _) => { + self.add_fixed_trait_for_expr(expr.id, + self.lang_items.bitand_trait()); + } + expr_binary(bitor, _, _) | expr_assign_op(bitor, _, _) => { + self.add_fixed_trait_for_expr(expr.id, + self.lang_items.bitor_trait()); + } + expr_binary(shl, _, _) | expr_assign_op(shl, _, _) => { + self.add_fixed_trait_for_expr(expr.id, + self.lang_items.shl_trait()); + } + expr_binary(shr, _, _) | expr_assign_op(shr, _, _) => { + self.add_fixed_trait_for_expr(expr.id, + self.lang_items.shr_trait()); + } + expr_binary(lt, _, _) | expr_binary(le, _, _) | + expr_binary(ge, _, _) | expr_binary(gt, _, _) => { + self.add_fixed_trait_for_expr(expr.id, + self.lang_items.ord_trait()); + } + expr_binary(eq, _, _) | expr_binary(ne, _, _) => { + self.add_fixed_trait_for_expr(expr.id, + self.lang_items.eq_trait()); + } + expr_unary(neg, _) => { + self.add_fixed_trait_for_expr(expr.id, + self.lang_items.neg_trait()); + } + expr_unary(not, _) => { + self.add_fixed_trait_for_expr(expr.id, + self.lang_items.not_trait()); + } + expr_index(*) => { + self.add_fixed_trait_for_expr(expr.id, + self.lang_items.index_trait()); + } + _ => { + // Nothing to do. + } + } + } + + fn search_for_traits_containing_method(@mut self, + name: ident) + -> ~[def_id] { + debug!("(searching for traits containing method) looking for '%s'", + *self.session.str_of(name)); + + let mut found_traits = ~[]; + let mut search_module = self.current_module; + loop { + // Look for the current trait. + match /*bad*/copy self.current_trait_refs { + Some(trait_def_ids) => { + for trait_def_ids.each |trait_def_id| { + self.add_trait_info_if_containing_method( + &mut found_traits, *trait_def_id, name); + } + } + None => { + // Nothing to do. + } + } + + // Look for trait children. + for search_module.children.each_value |&child_name_bindings| { + match child_name_bindings.def_for_namespace(TypeNS) { + Some(def) => { + match def { + def_trait(trait_def_id) => { + self.add_trait_info_if_containing_method( + &mut found_traits, trait_def_id, name); + } + _ => { + // Continue. + } + } + } + None => { + // Continue. + } + } + } + + // Look for imports. + for search_module.import_resolutions.each_value + |&import_resolution| { + + match import_resolution.target_for_namespace(TypeNS) { + None => { + // Continue. + } + Some(target) => { + match target.bindings.def_for_namespace(TypeNS) { + Some(def) => { + match def { + def_trait(trait_def_id) => { + let added = self. + add_trait_info_if_containing_method( + &mut found_traits, + trait_def_id, name); + if added { + import_resolution.state.used = + true; + } + } + _ => { + // Continue. + } + } + } + None => { + // Continue. + } + } + } + } + } + + // Move to the next parent. + match search_module.parent_link { + NoParentLink => { + // Done. + break; + } + ModuleParentLink(parent_module, _) | + BlockParentLink(parent_module, _) => { + search_module = parent_module; + } + } + } + + return found_traits; + } + + fn add_trait_info_if_containing_method(&self, + found_traits: &mut ~[def_id], + trait_def_id: def_id, + name: ident) + -> bool { + debug!("(adding trait info if containing method) trying trait %d:%d \ + for method '%s'", + trait_def_id.crate, + trait_def_id.node, + *self.session.str_of(name)); + + match self.trait_info.find(&trait_def_id) { + Some(trait_info) if trait_info.contains(&name) => { + debug!("(adding trait info if containing method) found trait \ + %d:%d for method '%s'", + trait_def_id.crate, + trait_def_id.node, + *self.session.str_of(name)); + found_traits.push(trait_def_id); + true + } + Some(_) | None => { + false + } + } + } + + fn add_fixed_trait_for_expr(@mut self, + expr_id: node_id, + trait_id: def_id) { + self.trait_map.insert(expr_id, @mut ~[trait_id]); + } + + fn record_def(@mut self, node_id: node_id, def: def) { + debug!("(recording def) recording %? for %?", def, node_id); + self.def_map.insert(node_id, def); + } + + fn enforce_default_binding_mode(@mut self, + pat: @pat, + pat_binding_mode: binding_mode, + descr: &str) { + match pat_binding_mode { + bind_infer => {} + bind_by_copy => { + self.session.span_err( + pat.span, + fmt!("cannot use `copy` binding mode with %s", + descr)); + } + bind_by_ref(*) => { + self.session.span_err( + pat.span, + fmt!("cannot use `ref` binding mode with %s", + descr)); + } + } + } + + // + // main function checking + // + // be sure that there is only one main function + // + fn check_duplicate_main(@mut self) { + let this = &mut *self; + if this.attr_main_fn.is_none() && this.start_fn.is_none() { + if this.main_fns.len() >= 1u { + let mut i = 1u; + while i < this.main_fns.len() { + let (_, dup_main_span) = this.main_fns[i].unwrap(); + this.session.span_err( + dup_main_span, + ~"multiple 'main' functions"); + i += 1; + } + *this.session.entry_fn = this.main_fns[0]; + *this.session.entry_type = Some(session::EntryMain); + } + } else if !this.start_fn.is_none() { + *this.session.entry_fn = this.start_fn; + *this.session.entry_type = Some(session::EntryStart); + } else { + *this.session.entry_fn = this.attr_main_fn; + *this.session.entry_type = Some(session::EntryMain); + } + } + + // + // Unused import checking + // + // Although this is a lint pass, it lives in here because it depends on + // resolve data structures. + // + + fn unused_import_lint_level(@mut self, m: @mut Module) -> level { + let settings = self.session.lint_settings; + match m.def_id { + Some(def) => get_lint_settings_level(settings, unused_imports, + def.node, def.node), + None => get_lint_level(settings.default_settings, unused_imports) + } + } + + fn check_for_unused_imports_if_necessary(@mut self) { + if self.unused_import_lint_level(self.current_module) == allow { + return; + } + + let root_module = self.graph_root.get_module(); + self.check_for_unused_imports_in_module_subtree(root_module); + } + + fn check_for_unused_imports_in_module_subtree(@mut self, + module_: @mut Module) { + // If this isn't a local crate, then bail out. We don't need to check + // for unused imports in external crates. + + match module_.def_id { + Some(def_id) if def_id.crate == local_crate => { + // OK. Continue. + } + None => { + // Check for unused imports in the root module. + } + Some(_) => { + // Bail out. + debug!("(checking for unused imports in module subtree) not \ + checking for unused imports for `%s`", + self.module_to_str(module_)); + return; + } + } + + self.check_for_unused_imports_in_module(module_); + + for module_.children.each_value |&child_name_bindings| { + match (*child_name_bindings).get_module_if_available() { + None => { + // Nothing to do. + } + Some(child_module) => { + self.check_for_unused_imports_in_module_subtree + (child_module); + } + } + } + + for module_.anonymous_children.each_value |&child_module| { + self.check_for_unused_imports_in_module_subtree(child_module); + } + } + + fn check_for_unused_imports_in_module(@mut self, module_: @mut Module) { + for module_.import_resolutions.each_value |&import_resolution| { + // Ignore dummy spans for things like automatically injected + // imports for the prelude, and also don't warn about the same + // import statement being unused more than once. Furthermore, if + // the import is public, then we can't be sure whether it's unused + // or not so don't warn about it. + if !import_resolution.state.used && + !import_resolution.state.warned && + import_resolution.span != dummy_sp() && + import_resolution.privacy != Public { + import_resolution.state.warned = true; + let span = import_resolution.span; + self.session.span_lint_level( + self.unused_import_lint_level(module_), + span, + ~"unused import"); + } + } + } + + + // + // Diagnostics + // + // Diagnostics are not particularly efficient, because they're rarely + // hit. + // + + /// A somewhat inefficient routine to obtain the name of a module. + fn module_to_str(@mut self, module_: @mut Module) -> ~str { + let mut idents = ~[]; + let mut current_module = module_; + loop { + match current_module.parent_link { + NoParentLink => { + break; + } + ModuleParentLink(module_, name) => { + idents.push(name); + current_module = module_; + } + BlockParentLink(module_, _) => { + idents.push(special_idents::opaque); + current_module = module_; + } + } + } + + if idents.len() == 0 { + return ~"???"; + } + return self.idents_to_str(vec::reversed(idents)); + } + + fn dump_module(@mut self, module_: @mut Module) { + debug!("Dump of module `%s`:", self.module_to_str(module_)); + + debug!("Children:"); + for module_.children.each_key |&name| { + debug!("* %s", *self.session.str_of(name)); + } + + debug!("Import resolutions:"); + for module_.import_resolutions.each |name, import_resolution| { + let value_repr; + match import_resolution.target_for_namespace(ValueNS) { + None => { value_repr = ~""; } + Some(_) => { + value_repr = ~" value:?"; + // FIXME #4954 + } + } + + let type_repr; + match import_resolution.target_for_namespace(TypeNS) { + None => { type_repr = ~""; } + Some(_) => { + type_repr = ~" type:?"; + // FIXME #4954 + } + } + + debug!("* %s:%s%s", *self.session.str_of(*name), + value_repr, type_repr); + } + } +} + +pub struct CrateMap { + def_map: DefMap, + exp_map2: ExportMap2, + trait_map: TraitMap +} + +/// Entry point to crate resolution. +pub fn resolve_crate(session: Session, + lang_items: LanguageItems, + crate: @crate) + -> CrateMap { + let resolver = @mut Resolver(session, lang_items, crate); + resolver.resolve(); + let @Resolver{def_map, export_map2, trait_map, _} = resolver; + CrateMap { + def_map: def_map, + exp_map2: export_map2, + trait_map: trait_map + } +} diff --git a/src/librustc/middle/trans/write_guard.rs b/src/librustc/middle/trans/write_guard.rs new file mode 100644 index 0000000000000..18f21b489b0b8 --- /dev/null +++ b/src/librustc/middle/trans/write_guard.rs @@ -0,0 +1,201 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! Logic relating to rooting and write guards for managed values +//! (`@` and `@mut`). This code is primarily for use by datum; +//! it exists in its own module both to keep datum.rs bite-sized +//! and for each in debugging (e.g., so you can use +//! `RUST_LOG=rustc::middle::trans::write_guard`). + +use lib::llvm::ValueRef; +use middle::borrowck::{RootInfo, root_map_key, DynaImm, DynaMut}; +use middle::trans::base::*; +use middle::trans::build::*; +use middle::trans::callee; +use middle::trans::common::*; +use middle::trans::datum::*; +use middle::trans::expr; +use middle::ty; +use driver::session; +use syntax::codemap::span; +use syntax::ast; + +pub fn root_and_write_guard(datum: &Datum, + mut bcx: block, + span: span, + expr_id: ast::node_id, + derefs: uint) -> block { + let key = root_map_key { id: expr_id, derefs: derefs }; + debug!("write_guard::root_and_write_guard(key=%?)", key); + + // root the autoderef'd value, if necessary: + // + // (Note: root'd values are always boxes) + let ccx = bcx.ccx(); + bcx = match ccx.maps.root_map.find(&key) { + None => bcx, + Some(&root_info) => root(datum, bcx, span, key, root_info) + }; + + // Perform the write guard, if necessary. + // + // (Note: write-guarded values are always boxes) + if ccx.maps.write_guard_map.contains(&key) { + perform_write_guard(datum, bcx, span) + } else { + bcx + } +} + +pub fn return_to_mut(mut bcx: block, + root_key: root_map_key, + frozen_val_ref: ValueRef, + bits_val_ref: ValueRef, + filename_val: ValueRef, + line_val: ValueRef) -> block { + debug!("write_guard::return_to_mut(root_key=%?, %s, %s, %s)", + root_key, + bcx.to_str(), + val_str(bcx.ccx().tn, frozen_val_ref), + val_str(bcx.ccx().tn, bits_val_ref)); + + let box_ptr = + Load(bcx, PointerCast(bcx, + frozen_val_ref, + T_ptr(T_ptr(T_i8())))); + + let bits_val = + Load(bcx, bits_val_ref); + + if bcx.tcx().sess.opts.optimize == session::No { + bcx = callee::trans_lang_call( + bcx, + bcx.tcx().lang_items.unrecord_borrow_fn(), + ~[ + box_ptr, + bits_val, + filename_val, + line_val + ], + expr::Ignore); + } + + callee::trans_lang_call( + bcx, + bcx.tcx().lang_items.return_to_mut_fn(), + ~[ + box_ptr, + bits_val, + filename_val, + line_val + ], + expr::Ignore + ) +} + +fn root(datum: &Datum, + mut bcx: block, + span: span, + root_key: root_map_key, + root_info: RootInfo) -> block { + //! In some cases, borrowck will decide that an @T/@[]/@str + //! value must be rooted for the program to be safe. In that + //! case, we will call this function, which will stash a copy + //! away until we exit the scope `scope_id`. + + debug!("write_guard::root(root_key=%?, root_info=%?, datum=%?)", + root_key, root_info, datum.to_str(bcx.ccx())); + + if bcx.sess().trace() { + trans_trace( + bcx, None, + @fmt!("preserving until end of scope %d", + root_info.scope)); + } + + // First, root the datum. Note that we must zero this value, + // because sometimes we root on one path but not another. + // See e.g. #4904. + let scratch = scratch_datum(bcx, datum.ty, true); + datum.copy_to_datum(bcx, INIT, scratch); + let cleanup_bcx = find_bcx_for_scope(bcx, root_info.scope); + add_clean_temp_mem(cleanup_bcx, scratch.val, scratch.ty); + + // Now, consider also freezing it. + match root_info.freeze { + None => {} + Some(freeze_kind) => { + let (filename, line) = filename_and_line_num_from_span(bcx, span); + + // in this case, we don't have to zero, because + // scratch.val will be NULL should the cleanup get + // called without the freezing actually occurring, and + // return_to_mut checks for this condition. + let scratch_bits = scratch_datum(bcx, ty::mk_uint(), false); + + let freeze_did = match freeze_kind { + DynaImm => bcx.tcx().lang_items.borrow_as_imm_fn(), + DynaMut => bcx.tcx().lang_items.borrow_as_mut_fn(), + }; + + let box_ptr = Load(bcx, + PointerCast(bcx, + scratch.val, + T_ptr(T_ptr(T_i8())))); + + bcx = callee::trans_lang_call( + bcx, + freeze_did, + ~[ + box_ptr, + filename, + line + ], + expr::SaveIn(scratch_bits.val)); + + if bcx.tcx().sess.opts.optimize == session::No { + bcx = callee::trans_lang_call( + bcx, + bcx.tcx().lang_items.record_borrow_fn(), + ~[ + box_ptr, + Load(bcx, scratch_bits.val), + filename, + line + ], + expr::Ignore); + } + + add_clean_return_to_mut( + cleanup_bcx, root_key, scratch.val, scratch_bits.val, + filename, line); + } + } + + bcx +} + +fn perform_write_guard(datum: &Datum, + bcx: block, + span: span) -> block { + debug!("perform_write_guard"); + + let llval = datum.to_value_llval(bcx); + let (filename, line) = filename_and_line_num_from_span(bcx, span); + + callee::trans_lang_call( + bcx, + bcx.tcx().lang_items.check_not_borrowed_fn(), + ~[PointerCast(bcx, llval, T_ptr(T_i8())), + filename, + line], + expr::Ignore) +} + From 7ac657116343c599806e733c2caf896681ab3bd1 Mon Sep 17 00:00:00 2001 From: Young-il Choi Date: Sat, 4 May 2013 16:00:11 +0900 Subject: [PATCH 192/410] rt: glob, globfree dummy function for android --- src/rt/rust_android_dummy.cpp | 15 +++++++++++++-- src/rt/rust_android_dummy.h | 23 +++++++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/rt/rust_android_dummy.cpp b/src/rt/rust_android_dummy.cpp index 3c7034a2f9561..0032e9c6e7fea 100644 --- a/src/rt/rust_android_dummy.cpp +++ b/src/rt/rust_android_dummy.cpp @@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef __ANDROID__ + #include "rust_android_dummy.h" #include #include -#ifdef __ANDROID__ - int backtrace(void **array, int size) { return 0; } char **backtrace_symbols(void *const *array, int size) { return 0; } @@ -59,7 +59,18 @@ extern "C" void srand() extern "C" void atof() { } + extern "C" void tgammaf() { } + +extern "C" int glob(const char *pattern, int flags, int (*errfunc) (const char *epath, int eerrno), glob_t *pglob) +{ + return 0; +} + +extern "C" void globfree(glob_t *pglob) +{ +} + #endif diff --git a/src/rt/rust_android_dummy.h b/src/rt/rust_android_dummy.h index 95a1774894bc5..a7c63035c00dc 100644 --- a/src/rt/rust_android_dummy.h +++ b/src/rt/rust_android_dummy.h @@ -11,5 +11,28 @@ char **backtrace_symbols (void *__const *__array, int __size); void backtrace_symbols_fd (void *__const *__array, int __size, int __fd); +#include + +struct stat; +typedef struct { + size_t gl_pathc; /* Count of total paths so far. */ + size_t gl_matchc; /* Count of paths matching pattern. */ + size_t gl_offs; /* Reserved at beginning of gl_pathv. */ + int gl_flags; /* Copy of flags parameter to glob. */ + char **gl_pathv; /* List of paths matching pattern. */ + /* Copy of errfunc parameter to glob. */ + int (*gl_errfunc)(const char *, int); + + /* + * Alternate filesystem access methods for glob; replacement + * versions of closedir(3), readdir(3), opendir(3), stat(2) + * and lstat(2). + */ + void (*gl_closedir)(void *); + struct dirent *(*gl_readdir)(void *); + void *(*gl_opendir)(const char *); + int (*gl_lstat)(const char *, struct stat *); +} glob_t; + #endif From 495bceb9b0df3cc98cfd0fc041a9eb87edba5025 Mon Sep 17 00:00:00 2001 From: "Felix S. Klock II" Date: Sat, 4 May 2013 10:57:56 +0200 Subject: [PATCH 193/410] Fix syntax: had to use escaped $$ to have an effect after first expansion. --- mk/host.mk | 2 +- mk/target.mk | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mk/host.mk b/mk/host.mk index 54e7e7ca09609..e67aa27e56c56 100644 --- a/mk/host.mk +++ b/mk/host.mk @@ -128,7 +128,7 @@ $$(HLIB$(2)_H_$(4))/$(CFG_RUSTLLVM_$(4)): \ $$(Q)cp $$< $$@ $$(HBIN$(2)_H_$(4))/: - mkdir -p $@ + mkdir -p $$@ endef diff --git a/mk/target.mk b/mk/target.mk index a3e5a5caff107..4bcb1004a08d9 100644 --- a/mk/target.mk +++ b/mk/target.mk @@ -84,7 +84,7 @@ endif endif $$(TLIB$(1)_T_$(2)_H_$(3))/: - mkdir -p $@ + mkdir -p $$@ endef From 175a5eea420af5f23c356da7def52d82903bceed Mon Sep 17 00:00:00 2001 From: "Felix S. Klock II" Date: Sat, 4 May 2013 12:46:11 +0200 Subject: [PATCH 194/410] Fix another goof: consistently use parent directory of target for rule. (I wonder if there's a better way to write this in the rule itself; i.e. something like `$$(dirname $$@)`. But for now this will do.) --- mk/host.mk | 21 ++++++++++++--------- mk/target.mk | 5 ++++- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/mk/host.mk b/mk/host.mk index e67aa27e56c56..0c00a7e1d6469 100644 --- a/mk/host.mk +++ b/mk/host.mk @@ -42,7 +42,7 @@ $$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTC_$(4)): \ $$(HLIB$(2)_H_$(4))/$(CFG_RUSTLLVM_$(4)) \ $$(HCORELIB_DEFAULT$(2)_H_$(4)) \ $$(HSTDLIB_DEFAULT$(2)_H_$(4)) \ - | $$(HBIN$(2)_H_$(4))/ + | $$(HLIB$(2)_H_$(4))/ @$$(call E, cp: $$@) $$(Q)cp $$< $$@ @@ -56,7 +56,7 @@ $$(HLIB$(2)_H_$(4))/$(CFG_LIBSYNTAX_$(4)): \ $$(HLIB$(2)_H_$(4))/$(CFG_RUSTLLVM_$(4)) \ $$(HCORELIB_DEFAULT$(2)_H_$(4)) \ $$(HSTDLIB_DEFAULT$(2)_H_$(4)) \ - | $$(HBIN$(2)_H_$(4))/ + | $$(HLIB$(2)_H_$(4))/ @$$(call E, cp: $$@) $$(Q)cp $$< $$@ $$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBSYNTAX_GLOB_$(4)) \ @@ -65,14 +65,14 @@ $$(HLIB$(2)_H_$(4))/$(CFG_LIBSYNTAX_$(4)): \ $$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4)): \ $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_RUNTIME_$(4)) \ - | $$(HBIN$(2)_H_$(4))/ + | $$(HLIB$(2)_H_$(4))/ @$$(call E, cp: $$@) $$(Q)cp $$< $$@ $$(HLIB$(2)_H_$(4))/$(CFG_CORELIB_$(4)): \ $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_CORELIB_$(4)) \ $$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4)) \ - | $$(HBIN$(2)_H_$(4))/ + | $$(HLIB$(2)_H_$(4))/ @$$(call E, cp: $$@) $$(Q)cp $$< $$@ # Subtle: We do not let the shell expand $(CORELIB_DSYM_GLOB) directly rather @@ -90,7 +90,7 @@ $$(HLIB$(2)_H_$(4))/$(CFG_STDLIB_$(4)): \ $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_STDLIB_$(4)) \ $$(HLIB$(2)_H_$(4))/$(CFG_CORELIB_$(4)) \ $$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4)) \ - | $$(HBIN$(2)_H_$(4))/ + | $$(HLIB$(2)_H_$(4))/ @$$(call E, cp: $$@) $$(Q)cp $$< $$@ $$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(STDLIB_GLOB_$(4)) \ @@ -100,7 +100,7 @@ $$(HLIB$(2)_H_$(4))/$(CFG_STDLIB_$(4)): \ $$(HLIB$(2)_H_$(4))/libcore.rlib: \ $$(TLIB$(1)_T_$(4)_H_$(3))/libcore.rlib \ $$(HLIB$(2)_H_$(4))/$$(CFG_RUNTIME_$(4)) \ - | $$(HBIN$(2)_H_$(4))/ + | $$(HLIB$(2)_H_$(4))/ @$$(call E, cp: $$@) $$(Q)cp $$< $$@ @@ -108,7 +108,7 @@ $$(HLIB$(2)_H_$(4))/libstd.rlib: \ $$(TLIB$(1)_T_$(4)_H_$(3))/libstd.rlib \ $$(HLIB$(2)_H_$(4))/libcore.rlib \ $$(HLIB$(2)_H_$(4))/$$(CFG_RUNTIME_$(4)) \ - | $$(HBIN$(2)_H_$(4))/ + | $$(HLIB$(2)_H_$(4))/ @$$(call E, cp: $$@) $$(Q)cp $$< $$@ @@ -117,19 +117,22 @@ $$(HLIB$(2)_H_$(4))/librustc.rlib: \ $$(HLIB$(2)_H_$(4))/libcore.rlib \ $$(HLIB$(2)_H_$(4))/libstd.rlib \ $$(HLIB$(2)_H_$(4))/$$(CFG_RUNTIME_$(4)) \ - | $$(HBIN$(2)_H_$(4))/ + | $$(HLIB$(2)_H_$(4))/ @$$(call E, cp: $$@) $$(Q)cp $$< $$@ $$(HLIB$(2)_H_$(4))/$(CFG_RUSTLLVM_$(4)): \ $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_RUSTLLVM_$(4)) \ - | $$(HBIN$(2)_H_$(4))/ + | $$(HLIB$(2)_H_$(4))/ @$$(call E, cp: $$@) $$(Q)cp $$< $$@ $$(HBIN$(2)_H_$(4))/: mkdir -p $$@ +$$(HLIB$(2)_H_$(4))/: + mkdir -p $$@ + endef $(foreach t,$(CFG_HOST_TRIPLES), \ diff --git a/mk/target.mk b/mk/target.mk index 4bcb1004a08d9..2223531c3ec5e 100644 --- a/mk/target.mk +++ b/mk/target.mk @@ -73,7 +73,7 @@ $$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_LIBRUSTC_$(3)): \ $$(TBIN$(1)_T_$(2)_H_$(3))/rustc$$(X_$(3)): \ $$(DRIVER_CRATE) \ $$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_LIBRUSTC_$(3)) \ - | $$(TLIB$(1)_T_$(2)_H_$(3))/ + | $$(TBIN$(1)_T_$(2)_H_$(3))/ @$$(call E, compile_and_link: $$@) $$(STAGE$(1)_T_$(2)_H_$(3)) --cfg rustc -o $$@ $$< ifdef CFG_ENABLE_PAX_FLAGS @@ -83,6 +83,9 @@ endif endif +$$(TBIN$(1)_T_$(2)_H_$(3))/: + mkdir -p $$@ + $$(TLIB$(1)_T_$(2)_H_$(3))/: mkdir -p $$@ From e5ca35d567e7d243c81d8c41fa0e7268ae8df58f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Steinbrink?= Date: Sat, 4 May 2013 18:21:27 +0200 Subject: [PATCH 195/410] Reduce code bloat from managed allocations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In commit d7f5e43 "core::rt: Add the local heap to newsched tasks", local_malloc and local_free have become rather big and their forced inlining causes quite a bit of code bloat. Compile times for crates affected by the bloat (e.g. rustc) improve, while others (e.g. libstd) seem to be unaffected, so I guess the inlining doesn't gain us much. Sizes: | librustc | libsytax ---------------|–-----------|------------ with inlining | 18,547,824 | 7,110,848 w/o inlining | 15,092,040 | 5,518,608 --- src/libcore/unstable/lang.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/libcore/unstable/lang.rs b/src/libcore/unstable/lang.rs index 7cd218639c0a6..460285bfcfda0 100644 --- a/src/libcore/unstable/lang.rs +++ b/src/libcore/unstable/lang.rs @@ -98,7 +98,6 @@ pub unsafe fn local_malloc(td: *c_char, size: uintptr_t) -> *c_char { } #[lang="malloc"] -#[inline(always)] #[cfg(not(stage0))] pub unsafe fn local_malloc(td: *c_char, size: uintptr_t) -> *c_char { match context() { @@ -129,7 +128,6 @@ pub unsafe fn local_free(ptr: *c_char) { // inside a landing pad may corrupt the state of the exception handler. If a // problem occurs, call exit instead. #[lang="free"] -#[inline(always)] #[cfg(not(stage0))] pub unsafe fn local_free(ptr: *c_char) { match context() { From bf2d3c71e37d3b7aabe57a3d9ea3fada449715c1 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Sat, 4 May 2013 14:25:15 -0400 Subject: [PATCH 196/410] improve DEBUG_BORROW printouts --- src/libcore/cleanup.rs | 17 +++-- src/libcore/rt/env.rs | 2 + src/libcore/unstable/lang.rs | 139 ++++++++++++++++++++++++----------- src/rt/rust_env.cpp | 2 + src/rt/rust_env.h | 1 + 5 files changed, 109 insertions(+), 52 deletions(-) diff --git a/src/libcore/cleanup.rs b/src/libcore/cleanup.rs index 5e2f4af184dc4..3f7366c6c452b 100644 --- a/src/libcore/cleanup.rs +++ b/src/libcore/cleanup.rs @@ -167,7 +167,8 @@ fn debug_mem() -> bool { #[cfg(notest)] #[lang="annihilate"] pub unsafe fn annihilate() { - use unstable::lang::{local_free, debug_ptr}; + use unstable::lang::{local_free}; + use unstable::lang; use io::WriterUtil; use io; use libc; @@ -191,10 +192,10 @@ pub unsafe fn annihilate() { for each_live_alloc(true) |box, uniq| { stats.n_total_boxes += 1; if uniq { - debug_ptr("Managed-uniq: ", &*box); + lang::debug_mem("Managed-uniq: ", &*box); stats.n_unique_boxes += 1; } else { - debug_ptr("Immortalizing: ", &*box); + lang::debug_mem("Immortalizing: ", &*box); (*box).header.ref_count = managed::raw::RC_IMMORTAL; } } @@ -206,13 +207,13 @@ pub unsafe fn annihilate() { // callback, as the original value may have been freed. for each_live_alloc(false) |box, uniq| { if !uniq { - debug_ptr("Invoking tydesc/glue on: ", &*box); + lang::debug_mem("Invoking tydesc/glue on: ", &*box); let tydesc: *TypeDesc = transmute(copy (*box).header.type_desc); let drop_glue: DropGlue = transmute(((*tydesc).drop_glue, 0)); - debug_ptr("Box data: ", &(*box).data); - debug_ptr("Type descriptor: ", tydesc); + lang::debug_mem("Box data: ", &(*box).data); + lang::debug_mem("Type descriptor: ", tydesc); drop_glue(to_unsafe_ptr(&tydesc), transmute(&(*box).data)); - debug_ptr("Dropped ", &*box); + lang::debug_mem("Dropped ", &*box); } } @@ -224,7 +225,7 @@ pub unsafe fn annihilate() { // not be valid after. for each_live_alloc(true) |box, uniq| { if !uniq { - debug_ptr("About to free: ", &*box); + lang::debug_mem("About to free: ", &*box); stats.n_bytes_freed += (*((*box).header.type_desc)).size + sys::size_of::(); diff --git a/src/libcore/rt/env.rs b/src/libcore/rt/env.rs index e479375401a3b..1d7ff17314901 100644 --- a/src/libcore/rt/env.rs +++ b/src/libcore/rt/env.rs @@ -33,6 +33,8 @@ pub struct Environment { argv: **c_char, /// Print GC debugging info (true if env var RUST_DEBUG_MEM is set) debug_mem: bool, + /// Print GC debugging info (true if env var RUST_DEBUG_BORROW is set) + debug_borrow: bool, } /// Get the global environment settings diff --git a/src/libcore/unstable/lang.rs b/src/libcore/unstable/lang.rs index 01ab2345918b1..5a65a5c24bb57 100644 --- a/src/libcore/unstable/lang.rs +++ b/src/libcore/unstable/lang.rs @@ -20,6 +20,7 @@ use unstable::exchange_alloc; use cast::transmute; use task::rt::rust_get_task; use option::{Option, Some, None}; +use io; #[allow(non_camel_case_types)] pub type rust_task = c_void; @@ -109,8 +110,8 @@ pub unsafe fn clear_task_borrow_list() { let _ = try_take_task_borrow_list(); } -fn fail_borrowed(box: *mut BoxRepr, file: *c_char, line: size_t) { - debug_ptr("fail_borrowed: ", box); +unsafe fn fail_borrowed(box: *mut BoxRepr, file: *c_char, line: size_t) { + debug_borrow("fail_borrowed: ", box, 0, 0, file, line); match try_take_task_borrow_list() { None => { // not recording borrows @@ -145,42 +146,95 @@ fn fail_borrowed(box: *mut BoxRepr, file: *c_char, line: size_t) { #[inline(always)] pub unsafe fn exchange_malloc(td: *c_char, size: uintptr_t) -> *c_char { let result = transmute(exchange_alloc::malloc(transmute(td), transmute(size))); - debug_ptr("exchange_malloc: ", result); + debug_mem("exchange_malloc: ", result); return result; } /// Because this code is so perf. sensitive, use a static constant so that /// debug printouts are compiled out most of the time. -static ENABLE_DEBUG_PTR: bool = true; +static ENABLE_DEBUG: bool = true; #[inline] -pub fn debug_ptr(tag: &'static str, p: *const T) { +pub fn debug_mem(tag: &'static str, p: *const T) { //! A useful debugging function that prints a pointer + tag + newline //! without allocating memory. - if ENABLE_DEBUG_PTR && ::rt::env::get().debug_mem { - debug_ptr_slow(tag, p); + if ENABLE_DEBUG && ::rt::env::get().debug_mem { + debug_mem_slow(tag, p); } - fn debug_ptr_slow(tag: &'static str, p: *const T) { - use io; + fn debug_mem_slow(tag: &'static str, p: *const T) { let dbg = STDERR_FILENO as io::fd_t; - let letters = ['0', '1', '2', '3', '4', '5', '6', '7', '8', - '9', 'a', 'b', 'c', 'd', 'e', 'f']; dbg.write_str(tag); + dbg.write_hex(p as uint); + dbg.write_str("\n"); + } +} + +#[inline] +unsafe fn debug_borrow(tag: &'static str, + p: *const T, + old_bits: uint, + new_bits: uint, + filename: *c_char, + line: size_t) { + //! A useful debugging function that prints a pointer + tag + newline + //! without allocating memory. + + if ENABLE_DEBUG && ::rt::env::get().debug_borrow { + debug_borrow_slow(tag, p, old_bits, new_bits, filename, line); + } + + unsafe fn debug_borrow_slow(tag: &'static str, + p: *const T, + old_bits: uint, + new_bits: uint, + filename: *c_char, + line: size_t) { + let dbg = STDERR_FILENO as io::fd_t; + dbg.write_str(tag); + dbg.write_hex(p as uint); + dbg.write_str(" "); + dbg.write_hex(old_bits); + dbg.write_str(" "); + dbg.write_hex(new_bits); + dbg.write_str(" "); + dbg.write_cstr(filename); + dbg.write_str(":"); + dbg.write_hex(line as uint); + dbg.write_str("\n"); + } +} + +trait DebugPrints { + fn write_hex(&self, val: uint); + unsafe fn write_cstr(&self, str: *c_char); +} +impl DebugPrints for io::fd_t { + fn write_hex(&self, mut i: uint) { + let letters = ['0', '1', '2', '3', '4', '5', '6', '7', '8', + '9', 'a', 'b', 'c', 'd', 'e', 'f']; static uint_nibbles: uint = ::uint::bytes << 1; let mut buffer = [0_u8, ..uint_nibbles+1]; - let mut i = p as uint; let mut c = uint_nibbles; while c > 0 { c -= 1; buffer[c] = letters[i & 0xF] as u8; i >>= 4; } - dbg.write(buffer.slice(0, uint_nibbles)); + self.write(buffer.slice(0, uint_nibbles)); + } - dbg.write_str("\n"); + unsafe fn write_cstr(&self, p: *c_char) { + use libc::strlen; + use vec; + + let len = strlen(p); + let p: *u8 = transmute(p); + do vec::raw::buf_as_slice(p, len as uint) |s| { + self.write(s); + } } } @@ -190,7 +244,7 @@ pub fn debug_ptr(tag: &'static str, p: *const T) { #[lang="exchange_free"] #[inline(always)] pub unsafe fn exchange_free(ptr: *c_char) { - debug_ptr("exchange_free: ", ptr); + debug_mem("exchange_free: ", ptr); exchange_alloc::free(transmute(ptr)) } @@ -198,7 +252,7 @@ pub unsafe fn exchange_free(ptr: *c_char) { #[inline(always)] pub unsafe fn local_malloc(td: *c_char, size: uintptr_t) -> *c_char { let result = rustrt::rust_upcall_malloc_noswitch(td, size); - debug_ptr("local_malloc: ", result); + debug_mem("local_malloc: ", result); return result; } @@ -208,7 +262,7 @@ pub unsafe fn local_malloc(td: *c_char, size: uintptr_t) -> *c_char { #[lang="free"] #[inline(always)] pub unsafe fn local_free(ptr: *c_char) { - debug_ptr("local_free: ", ptr); + debug_mem("local_free: ", ptr); rustrt::rust_upcall_free_noswitch(ptr); } @@ -225,19 +279,18 @@ pub unsafe fn borrow_as_imm(a: *u8) { #[inline(always)] pub unsafe fn borrow_as_imm(a: *u8, file: *c_char, line: size_t) -> uint { let a: *mut BoxRepr = transmute(a); - let ref_count = (*a).header.ref_count; + let old_ref_count = (*a).header.ref_count; + let new_ref_count = old_ref_count | FROZEN_BIT; - debug_ptr("borrow_as_imm (ptr) :", a); - debug_ptr(" (ref) :", ref_count as *()); - debug_ptr(" (line): ", line as *()); + debug_borrow("borrow_as_imm:", a, old_ref_count, new_ref_count, file, line); - if (ref_count & MUT_BIT) != 0 { + if (old_ref_count & MUT_BIT) != 0 { fail_borrowed(a, file, line); } - (*a).header.ref_count = ref_count | FROZEN_BIT; + (*a).header.ref_count = new_ref_count; - ref_count + old_ref_count } #[cfg(not(stage0))] @@ -245,18 +298,18 @@ pub unsafe fn borrow_as_imm(a: *u8, file: *c_char, line: size_t) -> uint { #[inline(always)] pub unsafe fn borrow_as_mut(a: *u8, file: *c_char, line: size_t) -> uint { let a: *mut BoxRepr = transmute(a); + let old_ref_count = (*a).header.ref_count; + let new_ref_count = old_ref_count | MUT_BIT | FROZEN_BIT; - debug_ptr("borrow_as_mut (ptr): ", a); - debug_ptr(" (line): ", line as *()); + debug_borrow("borrow_as_mut:", a, old_ref_count, new_ref_count, file, line); - let ref_count = (*a).header.ref_count; - if (ref_count & (MUT_BIT|FROZEN_BIT)) != 0 { + if (old_ref_count & (MUT_BIT|FROZEN_BIT)) != 0 { fail_borrowed(a, file, line); } - (*a).header.ref_count = ref_count | MUT_BIT | FROZEN_BIT; + (*a).header.ref_count = new_ref_count; - ref_count + old_ref_count } @@ -267,6 +320,7 @@ pub unsafe fn record_borrow(a: *u8, old_ref_count: uint, if (old_ref_count & ALL_BITS) == 0 { // was not borrowed before let a: *mut BoxRepr = transmute(a); + debug_borrow("record_borrow:", a, old_ref_count, 0, file, line); do swap_task_borrow_list |borrow_list| { let mut borrow_list = borrow_list; borrow_list.push(BorrowRecord {box: a, file: file, line: line}); @@ -282,6 +336,7 @@ pub unsafe fn unrecord_borrow(a: *u8, old_ref_count: uint, if (old_ref_count & ALL_BITS) == 0 { // was not borrowed before let a: *mut BoxRepr = transmute(a); + debug_borrow("unrecord_borrow:", a, old_ref_count, 0, file, line); do swap_task_borrow_list |borrow_list| { let mut borrow_list = borrow_list; let br = BorrowRecord {box: a, file: file, line: line}; @@ -317,21 +372,20 @@ pub unsafe fn return_to_mut(a: *u8) { #[cfg(not(stage0))] #[lang="return_to_mut"] #[inline(always)] -pub unsafe fn return_to_mut(a: *u8, old_ref_count: uint, +pub unsafe fn return_to_mut(a: *u8, orig_ref_count: uint, file: *c_char, line: size_t) { // Sometimes the box is null, if it is conditionally frozen. // See e.g. #4904. if !a.is_null() { let a: *mut BoxRepr = transmute(a); - let ref_count = (*a).header.ref_count; - let combined = (ref_count & !ALL_BITS) | (old_ref_count & ALL_BITS); - (*a).header.ref_count = combined; - - debug_ptr("return_to_mut (ptr) : ", a); - debug_ptr(" (line): ", line as *()); - debug_ptr(" (old) : ", old_ref_count as *()); - debug_ptr(" (new) : ", ref_count as *()); - debug_ptr(" (comb): ", combined as *()); + let old_ref_count = (*a).header.ref_count; + let new_ref_count = + (old_ref_count & !ALL_BITS) | (orig_ref_count & ALL_BITS); + + debug_borrow("return_to_mut:", + a, old_ref_count, new_ref_count, file, line); + + (*a).header.ref_count = new_ref_count; } } @@ -355,10 +409,7 @@ pub unsafe fn check_not_borrowed(a: *u8, line: size_t) { let a: *mut BoxRepr = transmute(a); let ref_count = (*a).header.ref_count; - debug_ptr("check_not_borrowed (ptr) : ", a); - debug_ptr(" (line): ", line as *()); - debug_ptr(" (rc) : ", ref_count as *()); - + debug_borrow("check_not_borrowed:", a, ref_count, 0, file, line); if (ref_count & FROZEN_BIT) != 0 { fail_borrowed(a, file, line); } diff --git a/src/rt/rust_env.cpp b/src/rt/rust_env.cpp index 041b4efac52a2..360d611492853 100644 --- a/src/rt/rust_env.cpp +++ b/src/rt/rust_env.cpp @@ -24,6 +24,7 @@ #define RUST_SEED "RUST_SEED" #define RUST_POISON_ON_FREE "RUST_POISON_ON_FREE" #define RUST_DEBUG_MEM "RUST_DEBUG_MEM" +#define RUST_DEBUG_BORROW "RUST_DEBUG_BORROW" #if defined(__WIN32__) static int @@ -130,6 +131,7 @@ load_env(int argc, char **argv) { env->argc = argc; env->argv = argv; env->debug_mem = getenv(RUST_DEBUG_MEM) != NULL; + env->debug_borrow = getenv(RUST_DEBUG_BORROW) != NULL; return env; } diff --git a/src/rt/rust_env.h b/src/rt/rust_env.h index df27f7674f265..b897f0c09a90b 100644 --- a/src/rt/rust_env.h +++ b/src/rt/rust_env.h @@ -28,6 +28,7 @@ struct rust_env { int argc; char **argv; rust_bool debug_mem; + rust_bool debug_borrow; }; rust_env* load_env(int argc, char **argv); From ccf2f7b979ad4e4defd9b856f6d16108c5760829 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Sat, 4 May 2013 14:29:08 -0400 Subject: [PATCH 197/410] make asm_comments something that you opt in to --- src/librustc/driver/driver.rs | 5 ----- src/librustc/driver/session.rs | 6 +++--- src/librustc/middle/borrowck/check_loans.rs | 2 +- src/librustc/middle/mem_categorization.rs | 1 - src/librustc/middle/trans/base.rs | 2 +- src/librustc/middle/trans/build.rs | 4 ++-- src/librustc/middle/trans/closure.rs | 2 +- 7 files changed, 8 insertions(+), 14 deletions(-) diff --git a/src/librustc/driver/driver.rs b/src/librustc/driver/driver.rs index e899b1abc2648..6ce62a1382d3d 100644 --- a/src/librustc/driver/driver.rs +++ b/src/librustc/driver/driver.rs @@ -600,11 +600,6 @@ pub fn build_session_options(binary: @~str, let target_opt = getopts::opt_maybe_str(matches, ~"target"); let target_feature_opt = getopts::opt_maybe_str(matches, ~"target-feature"); let save_temps = getopts::opt_present(matches, ~"save-temps"); - match output_type { - // unless we're emitting huamn-readable assembly, omit comments. - link::output_type_llvm_assembly | link::output_type_assembly => (), - _ => debugging_opts |= session::no_asm_comments - } let opt_level = { if (debugging_opts & session::no_opt) != 0 { No diff --git a/src/librustc/driver/session.rs b/src/librustc/driver/session.rs index fff97d2436af3..15067b785d9ca 100644 --- a/src/librustc/driver/session.rs +++ b/src/librustc/driver/session.rs @@ -45,7 +45,7 @@ pub static time_passes: uint = 1 << 1; pub static count_llvm_insns: uint = 1 << 2; pub static time_llvm_passes: uint = 1 << 3; pub static trans_stats: uint = 1 << 4; -pub static no_asm_comments: uint = 1 << 5; +pub static asm_comments: uint = 1 << 5; pub static no_verify: uint = 1 << 6; pub static trace: uint = 1 << 7; pub static coherence: uint = 1 << 8; @@ -72,7 +72,7 @@ pub fn debugging_opts_map() -> ~[(~str, ~str, uint)] { (~"time-llvm-passes", ~"measure time of each LLVM pass", time_llvm_passes), (~"trans-stats", ~"gather trans statistics", trans_stats), - (~"no-asm-comments", ~"omit comments when using -S", no_asm_comments), + (~"asm-comments", ~"generate comments into the assembly (may change behavior)", asm_comments), (~"no-verify", ~"skip LLVM verification", no_verify), (~"trace", ~"emit trace logs", trace), (~"coherence", ~"perform coherence checking", coherence), @@ -267,7 +267,7 @@ pub impl Session_ { } fn trans_stats(@self) -> bool { self.debugging_opt(trans_stats) } fn meta_stats(@self) -> bool { self.debugging_opt(meta_stats) } - fn no_asm_comments(@self) -> bool { self.debugging_opt(no_asm_comments) } + fn asm_comments(@self) -> bool { self.debugging_opt(asm_comments) } fn no_verify(@self) -> bool { self.debugging_opt(no_verify) } fn trace(@self) -> bool { self.debugging_opt(trace) } fn coherence(@self) -> bool { self.debugging_opt(coherence) } diff --git a/src/librustc/middle/borrowck/check_loans.rs b/src/librustc/middle/borrowck/check_loans.rs index c2dc2fb22ab5b..25d57662c6e07 100644 --- a/src/librustc/middle/borrowck/check_loans.rs +++ b/src/librustc/middle/borrowck/check_loans.rs @@ -374,7 +374,7 @@ pub impl<'self> CheckLoanCtxt<'self> { } } - mc::cat_deref(base, deref_count, mc::gc_ptr(ast::m_mutbl)) => { + mc::cat_deref(_, deref_count, mc::gc_ptr(ast::m_mutbl)) => { // Dynamically check writes to `@mut` let key = root_map_key { diff --git a/src/librustc/middle/mem_categorization.rs b/src/librustc/middle/mem_categorization.rs index f1c337125d704..2e5e53654a455 100644 --- a/src/librustc/middle/mem_categorization.rs +++ b/src/librustc/middle/mem_categorization.rs @@ -378,7 +378,6 @@ pub impl mem_categorization_ctxt { debug!("cat_expr: id=%d expr=%s", expr.id, pprust::expr_to_str(expr, self.tcx.sess.intr())); - let tcx = self.tcx; let expr_ty = self.expr_ty(expr); match expr.node { ast::expr_unary(ast::deref, e_base) => { diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs index 8a21d9116f5e6..47363aa9263f2 100644 --- a/src/librustc/middle/trans/base.rs +++ b/src/librustc/middle/trans/base.rs @@ -1133,7 +1133,7 @@ pub fn trans_stmt(cx: block, s: &ast::stmt) -> block { let _icx = cx.insn_ctxt("trans_stmt"); debug!("trans_stmt(%s)", stmt_to_str(s, cx.tcx().sess.intr())); - if !cx.sess().no_asm_comments() { + if cx.sess().asm_comments() { add_span_comment(cx, s.span, stmt_to_str(s, cx.ccx().sess.intr())); } diff --git a/src/librustc/middle/trans/build.rs b/src/librustc/middle/trans/build.rs index f5c496484a037..a9ed80d1eaaf7 100644 --- a/src/librustc/middle/trans/build.rs +++ b/src/librustc/middle/trans/build.rs @@ -846,7 +846,7 @@ pub fn _UndefReturn(cx: block, Fn: ValueRef) -> ValueRef { pub fn add_span_comment(bcx: block, sp: span, text: &str) { let ccx = bcx.ccx(); - if !ccx.sess.no_asm_comments() { + if ccx.sess.asm_comments() { let s = fmt!("%s (%s)", text, ccx.sess.codemap.span_to_str(sp)); debug!("%s", copy s); add_comment(bcx, s); @@ -856,7 +856,7 @@ pub fn add_span_comment(bcx: block, sp: span, text: &str) { pub fn add_comment(bcx: block, text: &str) { unsafe { let ccx = bcx.ccx(); - if !ccx.sess.no_asm_comments() { + if ccx.sess.asm_comments() { let sanitized = str::replace(text, ~"$", ~""); let comment_text = ~"# " + str::replace(sanitized, ~"\n", ~"\n\t# "); diff --git a/src/librustc/middle/trans/closure.rs b/src/librustc/middle/trans/closure.rs index e35fef6b6f66a..acd52907b9f73 100644 --- a/src/librustc/middle/trans/closure.rs +++ b/src/librustc/middle/trans/closure.rs @@ -224,7 +224,7 @@ pub fn store_environment(bcx: block, for vec::eachi(bound_values) |i, bv| { debug!("Copy %s into closure", bv.to_str(ccx)); - if !ccx.sess.no_asm_comments() { + if ccx.sess.asm_comments() { add_comment(bcx, fmt!("Copy %s into closure", bv.to_str(ccx))); } From 989d008124d62f7c1284633e6619db1a9e8b6598 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Sat, 4 May 2013 14:29:32 -0400 Subject: [PATCH 198/410] separate out write_guard code into its own module --- Makefile.in | 3 + src/librustc/middle/trans/_match.rs | 23 +--- src/librustc/middle/trans/common.rs | 58 +++------ src/librustc/middle/trans/controlflow.rs | 8 +- src/librustc/middle/trans/datum.rs | 152 ++--------------------- src/librustc/rustc.rc | 1 + 6 files changed, 41 insertions(+), 204 deletions(-) diff --git a/Makefile.in b/Makefile.in index dd2e6a95861bd..111ad1369deb9 100644 --- a/Makefile.in +++ b/Makefile.in @@ -110,6 +110,9 @@ endif ifdef SAVE_TEMPS CFG_RUSTC_FLAGS += --save-temps endif +ifdef ASM_COMMENTS + CFG_RUSTC_FLAGS += -z asm-comments +endif ifdef TIME_PASSES CFG_RUSTC_FLAGS += -Z time-passes endif diff --git a/src/librustc/middle/trans/_match.rs b/src/librustc/middle/trans/_match.rs index 3b1cdf0ba47f7..1a81d483dfc3c 100644 --- a/src/librustc/middle/trans/_match.rs +++ b/src/librustc/middle/trans/_match.rs @@ -969,30 +969,17 @@ pub fn pats_require_rooting(bcx: block, }) } -pub fn root_pats_as_necessary(bcx: block, +pub fn root_pats_as_necessary(mut bcx: block, m: &[@Match], col: uint, val: ValueRef) -> block { - let mut bcx = bcx; for vec::each(m) |br| { let pat_id = br.pats[col].id; - - let key = root_map_key {id: pat_id, derefs: 0u }; - match bcx.ccx().maps.root_map.find(&key) { - None => (), - Some(&root_info) => { - // Note: the scope_id will always be the id of the match. See - // the extended comment in rustc::middle::borrowck::preserve() - // for details (look for the case covering cat_discr). - - let datum = Datum {val: val, ty: node_id_type(bcx, pat_id), - mode: ByRef, source: ZeroMem}; - bcx = datum.root(bcx, br.pats[col].span, key, root_info); - // If we kept going, we'd only re-root the same value, so - // return now. - return bcx; - } + if pat_id != 0 { + let datum = Datum {val: val, ty: node_id_type(bcx, pat_id), + mode: ByRef, source: ZeroMem}; + bcx = datum.root_and_write_guard(bcx, br.pats[col].span, pat_id, 0); } } return bcx; diff --git a/src/librustc/middle/trans/common.rs b/src/librustc/middle/trans/common.rs index 2a13cf73f8bba..f8b75838b8726 100644 --- a/src/librustc/middle/trans/common.rs +++ b/src/librustc/middle/trans/common.rs @@ -27,18 +27,18 @@ use middle::resolve; use middle::trans::adt; use middle::trans::base; use middle::trans::build; -use middle::trans::callee; use middle::trans::datum; use middle::trans::debuginfo; -use middle::trans::expr; use middle::trans::glue; use middle::trans::reachable; use middle::trans::shape; use middle::trans::type_of; use middle::trans::type_use; +use middle::trans::write_guard; use middle::ty::substs; use middle::ty; use middle::typeck; +use middle::borrowck::root_map_key; use util::ppaux::{Repr}; use core::cast::transmute; @@ -468,6 +468,7 @@ pub fn add_clean_temp_mem(bcx: block, val: ValueRef, t: ty::t) { } } pub fn add_clean_return_to_mut(bcx: block, + root_key: root_map_key, frozen_val_ref: ValueRef, bits_val_ref: ValueRef, filename_val: ValueRef, @@ -488,44 +489,12 @@ pub fn add_clean_return_to_mut(bcx: block, scope_info.cleanups.push( clean_temp( frozen_val_ref, - |bcx| { - let mut bcx = bcx; - - let box_ptr = - build::Load(bcx, - build::PointerCast(bcx, - frozen_val_ref, - T_ptr(T_ptr(T_i8())))); - - let bits_val = - build::Load(bcx, - bits_val_ref); - - if bcx.tcx().sess.opts.optimize == session::No { - bcx = callee::trans_lang_call( - bcx, - bcx.tcx().lang_items.unrecord_borrow_fn(), - ~[ - box_ptr, - bits_val, - filename_val, - line_val - ], - expr::Ignore); - } - - callee::trans_lang_call( - bcx, - bcx.tcx().lang_items.return_to_mut_fn(), - ~[ - box_ptr, - bits_val, - filename_val, - line_val - ], - expr::Ignore - ) - }, + |bcx| write_guard::return_to_mut(bcx, + root_key, + frozen_val_ref, + bits_val_ref, + filename_val, + line_val), normal_exit_only)); scope_clean_changed(scope_info); } @@ -1563,6 +1532,15 @@ pub fn dummy_substs(tps: ~[ty::t]) -> ty::substs { } } +pub fn filename_and_line_num_from_span(bcx: block, + span: span) -> (ValueRef, ValueRef) { + let loc = bcx.sess().parse_sess.cm.lookup_char_pos(span.lo); + let filename_cstr = C_cstr(bcx.ccx(), @/*bad*/copy loc.file.name); + let filename = build::PointerCast(bcx, filename_cstr, T_ptr(T_i8())); + let line = C_int(bcx.ccx(), loc.line as int); + (filename, line) +} + // Casts a Rust bool value to an i1. pub fn bool_to_i1(bcx: block, llval: ValueRef) -> ValueRef { build::ICmp(bcx, lib::llvm::IntNE, llval, C_bool(false)) diff --git a/src/librustc/middle/trans/controlflow.rs b/src/librustc/middle/trans/controlflow.rs index c8699cc6371bc..e91bec5efed4a 100644 --- a/src/librustc/middle/trans/controlflow.rs +++ b/src/librustc/middle/trans/controlflow.rs @@ -385,13 +385,7 @@ fn trans_fail_value(bcx: block, pub fn trans_fail_bounds_check(bcx: block, sp: span, index: ValueRef, len: ValueRef) -> block { let _icx = bcx.insn_ctxt("trans_fail_bounds_check"); - let ccx = bcx.ccx(); - - let loc = bcx.sess().parse_sess.cm.lookup_char_pos(sp.lo); - let line = C_int(ccx, loc.line as int); - let filename_cstr = C_cstr(bcx.ccx(), @/*bad*/copy loc.file.name); - let filename = PointerCast(bcx, filename_cstr, T_ptr(T_i8())); - + let (filename, line) = filename_and_line_num_from_span(bcx, sp); let args = ~[filename, line, index, len]; let bcx = callee::trans_lang_call( bcx, bcx.tcx().lang_items.fail_bounds_check_fn(), args, expr::Ignore); diff --git a/src/librustc/middle/trans/datum.rs b/src/librustc/middle/trans/datum.rs index 6ffe504b804fb..d4ca0f3c4bed2 100644 --- a/src/librustc/middle/trans/datum.rs +++ b/src/librustc/middle/trans/datum.rs @@ -87,21 +87,19 @@ use lib; use lib::llvm::ValueRef; -use middle::borrowck::{RootInfo, root_map_key, DynaImm, DynaMut}; use middle::trans::adt; use middle::trans::base::*; use middle::trans::build::*; -use middle::trans::callee; use middle::trans::common::*; use middle::trans::common; use middle::trans::expr; use middle::trans::glue; use middle::trans::tvec; use middle::trans::type_of; +use middle::trans::write_guard; use middle::ty; use util::common::indenter; use util::ppaux::ty_to_str; -use driver::session; use core::container::Set; // XXX: this should not be necessary use core::to_bytes; @@ -518,113 +516,6 @@ pub impl Datum { } } - fn root(&self, mut bcx: block, span: span, - root_key: root_map_key, root_info: RootInfo) -> block { - /*! - * - * In some cases, borrowck will decide that an @T/@[]/@str - * value must be rooted for the program to be safe. In that - * case, we will call this function, which will stash a copy - * away until we exit the scope `scope_id`. */ - - debug!("root(root_map_key=%?, root_info=%?, self=%?)", - root_key, root_info, self.to_str(bcx.ccx())); - - if bcx.sess().trace() { - trans_trace( - bcx, None, - @fmt!("preserving until end of scope %d", - root_info.scope)); - } - - // First, root the datum. Note that we must zero this value, - // because sometimes we root on one path but not another. - // See e.g. #4904. - let scratch = scratch_datum(bcx, self.ty, true); - self.copy_to_datum(bcx, INIT, scratch); - let cleanup_bcx = find_bcx_for_scope(bcx, root_info.scope); - add_clean_temp_mem(cleanup_bcx, scratch.val, scratch.ty); - - // Now, consider also freezing it. - match root_info.freeze { - None => {} - Some(freeze_kind) => { - let loc = bcx.sess().parse_sess.cm.lookup_char_pos(span.lo); - let line = C_int(bcx.ccx(), loc.line as int); - let filename_cstr = C_cstr(bcx.ccx(), @/*bad*/copy loc.file.name); - let filename = PointerCast(bcx, filename_cstr, T_ptr(T_i8())); - - // in this case, we don't have to zero, because - // scratch.val will be NULL should the cleanup get - // called without the freezing actually occurring, and - // return_to_mut checks for this condition. - let scratch_bits = scratch_datum(bcx, ty::mk_uint(), false); - - let freeze_did = match freeze_kind { - DynaImm => bcx.tcx().lang_items.borrow_as_imm_fn(), - DynaMut => bcx.tcx().lang_items.borrow_as_mut_fn(), - }; - - let box_ptr = Load(bcx, - PointerCast(bcx, - scratch.val, - T_ptr(T_ptr(T_i8())))); - - bcx = callee::trans_lang_call( - bcx, - freeze_did, - ~[ - box_ptr, - filename, - line - ], - expr::SaveIn(scratch_bits.val)); - - if bcx.tcx().sess.opts.optimize == session::No { - bcx = callee::trans_lang_call( - bcx, - bcx.tcx().lang_items.record_borrow_fn(), - ~[ - box_ptr, - Load(bcx, scratch_bits.val), - filename, - line - ], - expr::Ignore); - } - - add_clean_return_to_mut( - cleanup_bcx, scratch.val, scratch_bits.val, - filename, line); - } - } - - bcx - } - - fn perform_write_guard(&self, bcx: block, span: span) -> block { - debug!("perform_write_guard"); - - // Create scratch space, but do not root it. - let llval = match self.mode { - ByValue => self.val, - ByRef => Load(bcx, self.val), - }; - - let loc = bcx.sess().parse_sess.cm.lookup_char_pos(span.lo); - let line = C_int(bcx.ccx(), loc.line as int); - let filename_cstr = C_cstr(bcx.ccx(), @/*bad*/copy loc.file.name); - let filename = PointerCast(bcx, filename_cstr, T_ptr(T_i8())); - - callee::trans_lang_call( - bcx, - bcx.tcx().lang_items.check_not_borrowed_fn(), - ~[PointerCast(bcx, llval, T_ptr(T_i8())), - filename, - line], - expr::Ignore) - } - fn drop_val(&self, bcx: block) -> block { if !ty::type_needs_drop(bcx.tcx(), self.ty) { return bcx; @@ -687,7 +578,9 @@ pub impl Datum { debug!("try_deref(expr_id=%?, derefs=%?, is_auto=%b, self=%?)", expr_id, derefs, is_auto, self.to_str(bcx.ccx())); - let bcx = self.root_and_write_guard(bcx, span, expr_id, derefs); + let bcx = + write_guard::root_and_write_guard( + self, bcx, span, expr_id, derefs); match ty::get(self.ty).sty { ty::ty_box(_) | ty::ty_uniq(_) => { @@ -841,33 +734,6 @@ pub impl Datum { DatumBlock { bcx: bcx, datum: datum } } - fn root_and_write_guard(&self, - mut bcx: block, - span: span, - expr_id: ast::node_id, - derefs: uint) -> block { - let key = root_map_key { id: expr_id, derefs: derefs }; - debug!("root_and_write_guard(key=%?)", key); - - // root the autoderef'd value, if necessary: - // - // (Note: root'd values are always boxes) - let ccx = bcx.ccx(); - bcx = match ccx.maps.root_map.find(&key) { - None => bcx, - Some(&root_info) => self.root(bcx, span, key, root_info) - }; - - // Perform the write guard, if necessary. - // - // (Note: write-guarded values are always boxes) - if ccx.maps.write_guard_map.contains(&key) { - self.perform_write_guard(bcx, span) - } else { - bcx - } - } - fn get_vec_base_and_len(&self, mut bcx: block, span: span, @@ -877,7 +743,7 @@ pub impl Datum { //! and write guards checks. // only imp't for @[] and @str, but harmless - bcx = self.root_and_write_guard(bcx, span, expr_id, 0); + bcx = write_guard::root_and_write_guard(self, bcx, span, expr_id, 0); let (base, len) = self.get_vec_base_and_len_no_root(bcx); (bcx, base, len) } @@ -890,6 +756,14 @@ pub impl Datum { tvec::get_base_and_len(bcx, llval, self.ty) } + fn root_and_write_guard(&self, + bcx: block, + span: span, + expr_id: ast::node_id, + derefs: uint) -> block { + write_guard::root_and_write_guard(self, bcx, span, expr_id, derefs) + } + fn to_result(&self, bcx: block) -> common::Result { rslt(bcx, self.to_appropriate_llval(bcx)) } diff --git a/src/librustc/rustc.rc b/src/librustc/rustc.rc index 1ecb38854c815..7191a98e5dbc6 100644 --- a/src/librustc/rustc.rc +++ b/src/librustc/rustc.rc @@ -47,6 +47,7 @@ pub mod middle { pub mod controlflow; pub mod glue; pub mod datum; + pub mod write_guard; pub mod callee; pub mod expr; pub mod common; From 8081e8debf63726865e869aaacbd040755285a51 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sat, 4 May 2013 14:25:41 -0700 Subject: [PATCH 199/410] Register snapshots --- src/libcore/cast.rs | 46 - src/libcore/container.rs | 36 - src/libcore/core.rc | 3 - src/libcore/hashmap.rs | 168 --- src/libcore/num/f32.rs | 7 +- src/libcore/num/f64.rs | 6 +- src/libcore/num/float.rs | 7 +- src/libcore/num/int-template.rs | 7 +- src/libcore/num/num.rs | 23 +- src/libcore/num/strconv.rs | 7 - src/libcore/num/uint-template.rs | 7 +- src/libcore/ops.rs | 6 - src/libcore/option.rs | 104 -- src/libcore/prelude.rs | 3 - src/libcore/reflect.rs | 33 +- src/libcore/repr.rs | 111 +- src/libcore/result.rs | 7 - src/libcore/rt/io/mod.rs | 3 - src/libcore/rt/mod.rs | 21 - src/libcore/rt/rtio.rs | 5 - src/libcore/rt/uvio.rs | 16 - src/libcore/stackwalk.rs | 3 - src/libcore/sys.rs | 22 - src/libcore/trie.rs | 95 -- src/libcore/tuple.rs | 28 - src/libcore/unstable/intrinsics.rs | 4 - src/libcore/unstable/lang.rs | 47 - src/libcore/vec.rs | 226 ---- src/librustc/metadata/decoder.rs | 8 - src/librustc/metadata/encoder.rs | 1536 +++------------------------- src/librustc/middle/astencode.rs | 774 -------------- src/libstd/arena.rs | 59 -- src/libstd/deque.rs | 122 --- src/libstd/ebml.rs | 539 ---------- src/libstd/flatpipes.rs | 25 - src/libstd/future.rs | 29 - src/libstd/json.rs | 631 ------------ src/libstd/priority_queue.rs | 16 - src/libstd/serialize.rs | 990 +----------------- src/libstd/smallintmap.rs | 77 -- src/libstd/std.rc | 4 - src/libstd/workcache.rs | 45 - src/libsyntax/ast.rs | 31 - src/libsyntax/codemap.rs | 15 - src/libsyntax/ext/base.rs | 11 - src/libsyntax/opt_vec.rs | 9 - src/snapshots.txt | 8 + 47 files changed, 138 insertions(+), 5842 deletions(-) diff --git a/src/libcore/cast.rs b/src/libcore/cast.rs index 22f31d52d2d54..96e1c3bd1249b 100644 --- a/src/libcore/cast.rs +++ b/src/libcore/cast.rs @@ -10,9 +10,7 @@ //! Unsafe casting functions -#[cfg(not(stage0))] use sys; -#[cfg(not(stage0))] use unstable; pub mod rusti { @@ -21,35 +19,11 @@ pub mod rusti { pub extern "rust-intrinsic" { fn forget(+x: T); - #[cfg(stage0)] - fn reinterpret_cast(&&e: T) -> U; - - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn transmute(e: T) -> U; } } /// Casts the value at `src` to U. The two types must have the same length. -#[inline(always)] -#[cfg(stage0)] -pub unsafe fn reinterpret_cast(src: &T) -> U { - rusti::reinterpret_cast(*src) -} - -/// Unsafely copies and casts the value at `src` to U, even if the value is -/// noncopyable. The two types must have the same length. -#[inline(always)] -#[cfg(stage0)] -pub unsafe fn transmute_copy(src: &T) -> U { - rusti::reinterpret_cast(*src) -} - -#[inline(always)] -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] pub unsafe fn transmute_copy(src: &T) -> U { let mut dest: U = unstable::intrinsics::init(); { @@ -90,17 +64,6 @@ pub unsafe fn bump_box_refcount(t: @T) { forget(t); } * assert!(transmute("L") == ~[76u8, 0u8]); */ #[inline(always)] -#[cfg(stage0)] -pub unsafe fn transmute(thing: L) -> G { - let newthing: G = reinterpret_cast(&thing); - forget(thing); - newthing -} - -#[inline(always)] -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] pub unsafe fn transmute(thing: L) -> G { rusti::transmute(thing) } @@ -161,15 +124,6 @@ mod tests { use cast::{bump_box_refcount, transmute}; #[test] - #[cfg(stage0)] - fn test_reinterpret_cast() { - assert!(1u == unsafe { ::cast::reinterpret_cast(&1) }); - } - - #[test] - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn test_transmute_copy() { assert!(1u == unsafe { ::cast::transmute_copy(&1) }); } diff --git a/src/libcore/container.rs b/src/libcore/container.rs index 88c78aebfc5c7..00ea4a9322111 100644 --- a/src/libcore/container.rs +++ b/src/libcore/container.rs @@ -25,42 +25,6 @@ pub trait Mutable: Container { fn clear(&mut self); } -#[cfg(stage0)] -pub trait Map: Mutable { - /// Return true if the map contains a value for the specified key - fn contains_key(&self, key: &K) -> bool; - - // Visits all keys and values - fn each(&self, f: &fn(&K, &V) -> bool); - - /// Visit all keys - fn each_key(&self, f: &fn(&K) -> bool); - - /// Visit all values - fn each_value(&self, f: &fn(&V) -> bool); - - /// Iterate over the map and mutate the contained values - fn mutate_values(&mut self, f: &fn(&K, &mut V) -> bool); - - /// Return a reference to the value corresponding to the key - fn find(&self, key: &K) -> Option<&'self V>; - - /// Return a mutable reference to the value corresponding to the key - fn find_mut(&mut self, key: &K) -> Option<&'self mut V>; - - /// Insert a key-value pair into the map. An existing value for a - /// key is replaced by the new value. Return true if the key did - /// not already exist in the map. - fn insert(&mut self, key: K, value: V) -> bool; - - /// Remove a key-value pair from the map. Return true if the key - /// was present in the map, otherwise false. - fn remove(&mut self, key: &K) -> bool; -} - -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] pub trait Map: Mutable { /// Return true if the map contains a value for the specified key fn contains_key(&self, key: &K) -> bool; diff --git a/src/libcore/core.rc b/src/libcore/core.rc index 75ef8ee0cbd13..9672bf887caff 100644 --- a/src/libcore/core.rc +++ b/src/libcore/core.rc @@ -74,9 +74,6 @@ they contained the following prologue: pub use kinds::{Const, Copy, Owned, Durable}; pub use ops::{Drop}; -#[cfg(stage0)] -pub use ops::{Add, Sub, Mul, Div, Modulo, Neg, Not}; -#[cfg(not(stage0))] pub use ops::{Add, Sub, Mul, Div, Rem, Neg, Not}; pub use ops::{BitAnd, BitOr, BitXor}; pub use ops::{Shl, Shr, Index}; diff --git a/src/libcore/hashmap.rs b/src/libcore/hashmap.rs index 9b82a8dad059e..392ad38e20931 100644 --- a/src/libcore/hashmap.rs +++ b/src/libcore/hashmap.rs @@ -184,18 +184,6 @@ priv impl HashMap { } } - #[cfg(stage0)] - #[inline(always)] - fn value_for_bucket(&self, idx: uint) -> &'self V { - match self.buckets[idx] { - Some(ref bkt) => &bkt.value, - None => fail!(~"HashMap::find: internal logic error"), - } - } - - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] #[inline(always)] fn value_for_bucket<'a>(&'a self, idx: uint) -> &'a V { match self.buckets[idx] { @@ -204,18 +192,6 @@ priv impl HashMap { } } - #[cfg(stage0)] - #[inline(always)] - fn mut_value_for_bucket(&mut self, idx: uint) -> &'self mut V { - match self.buckets[idx] { - Some(ref mut bkt) => &mut bkt.value, - None => unreachable() - } - } - - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] #[inline(always)] fn mut_value_for_bucket<'a>(&'a mut self, idx: uint) -> &'a mut V { match self.buckets[idx] { @@ -329,21 +305,6 @@ impl Map for HashMap { } /// Visit all key-value pairs - #[cfg(stage0)] - fn each(&self, blk: &fn(&'self K, &'self V) -> bool) { - for uint::range(0, self.buckets.len()) |i| { - for self.buckets[i].each |bucket| { - if !blk(&bucket.key, &bucket.value) { - return; - } - } - } - } - - /// Visit all key-value pairs - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn each<'a>(&'a self, blk: &fn(&'a K, &'a V) -> bool) { for uint::range(0, self.buckets.len()) |i| { for self.buckets[i].each |bucket| { @@ -360,15 +321,6 @@ impl Map for HashMap { } /// Visit all values - #[cfg(stage0)] - fn each_value(&self, blk: &fn(v: &V) -> bool) { - self.each(|_, v| blk(v)) - } - - /// Visit all values - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn each_value<'a>(&'a self, blk: &fn(v: &'a V) -> bool) { self.each(|_, v| blk(v)) } @@ -386,18 +338,6 @@ impl Map for HashMap { } /// Return a reference to the value corresponding to the key - #[cfg(stage0)] - fn find(&self, k: &K) -> Option<&'self V> { - match self.bucket_for_key(k) { - FoundEntry(idx) => Some(self.value_for_bucket(idx)), - TableFull | FoundHole(_) => None, - } - } - - /// Return a reference to the value corresponding to the key - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn find<'a>(&'a self, k: &K) -> Option<&'a V> { match self.bucket_for_key(k) { FoundEntry(idx) => Some(self.value_for_bucket(idx)), @@ -406,21 +346,6 @@ impl Map for HashMap { } /// Return a mutable reference to the value corresponding to the key - #[cfg(stage0)] - fn find_mut(&mut self, k: &K) -> Option<&'self mut V> { - let idx = match self.bucket_for_key(k) { - FoundEntry(idx) => idx, - TableFull | FoundHole(_) => return None - }; - unsafe { // FIXME(#4903)---requires flow-sensitive borrow checker - Some(::cast::transmute_mut_region(self.mut_value_for_bucket(idx))) - } - } - - /// Return a mutable reference to the value corresponding to the key - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn find_mut<'a>(&'a mut self, k: &K) -> Option<&'a mut V> { let idx = match self.bucket_for_key(k) { FoundEntry(idx) => idx, @@ -503,40 +428,6 @@ pub impl HashMap { /// Return the value corresponding to the key in the map, or insert /// and return the value if it doesn't exist. - #[cfg(stage0)] - fn find_or_insert(&mut self, k: K, v: V) -> &'self V { - if self.size >= self.resize_at { - // n.b.: We could also do this after searching, so - // that we do not resize if this call to insert is - // simply going to update a key in place. My sense - // though is that it's worse to have to search through - // buckets to find the right spot twice than to just - // resize in this corner case. - self.expand(); - } - - let hash = k.hash_keyed(self.k0, self.k1) as uint; - let idx = match self.bucket_for_key_with_hash(hash, &k) { - TableFull => fail!(~"Internal logic error"), - FoundEntry(idx) => idx, - FoundHole(idx) => { - self.buckets[idx] = Some(Bucket{hash: hash, key: k, - value: v}); - self.size += 1; - idx - }, - }; - - unsafe { // FIXME(#4903)---requires flow-sensitive borrow checker - ::cast::transmute_region(self.value_for_bucket(idx)) - } - } - - /// Return the value corresponding to the key in the map, or insert - /// and return the value if it doesn't exist. - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn find_or_insert<'a>(&'a mut self, k: K, v: V) -> &'a V { if self.size >= self.resize_at { // n.b.: We could also do this after searching, so @@ -567,41 +458,6 @@ pub impl HashMap { /// Return the value corresponding to the key in the map, or create, /// insert, and return a new value if it doesn't exist. - #[cfg(stage0)] - fn find_or_insert_with(&mut self, k: K, f: &fn(&K) -> V) -> &'self V { - if self.size >= self.resize_at { - // n.b.: We could also do this after searching, so - // that we do not resize if this call to insert is - // simply going to update a key in place. My sense - // though is that it's worse to have to search through - // buckets to find the right spot twice than to just - // resize in this corner case. - self.expand(); - } - - let hash = k.hash_keyed(self.k0, self.k1) as uint; - let idx = match self.bucket_for_key_with_hash(hash, &k) { - TableFull => fail!(~"Internal logic error"), - FoundEntry(idx) => idx, - FoundHole(idx) => { - let v = f(&k); - self.buckets[idx] = Some(Bucket{hash: hash, key: k, - value: v}); - self.size += 1; - idx - }, - }; - - unsafe { // FIXME(#4903)---requires flow-sensitive borrow checker - ::cast::transmute_region(self.value_for_bucket(idx)) - } - } - - /// Return the value corresponding to the key in the map, or create, - /// insert, and return a new value if it doesn't exist. - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn find_or_insert_with<'a>(&'a mut self, k: K, f: &fn(&K) -> V) -> &'a V { if self.size >= self.resize_at { // n.b.: We could also do this after searching, so @@ -647,17 +503,6 @@ pub impl HashMap { } } - #[cfg(stage0)] - fn get(&self, k: &K) -> &'self V { - match self.find(k) { - Some(v) => v, - None => fail!(fmt!("No entry found for key: %?", k)), - } - } - - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn get<'a>(&'a self, k: &K) -> &'a V { match self.find(k) { Some(v) => v, @@ -676,19 +521,6 @@ pub impl HashMap { /// Return the value corresponding to the key in the map, using /// equivalence - #[cfg(stage0)] - fn find_equiv>(&self, k: &Q) -> Option<&'self V> { - match self.bucket_for_key_equiv(k) { - FoundEntry(idx) => Some(self.value_for_bucket(idx)), - TableFull | FoundHole(_) => None, - } - } - - /// Return the value corresponding to the key in the map, using - /// equivalence - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn find_equiv<'a, Q:Hash + Equiv>(&'a self, k: &Q) -> Option<&'a V> { match self.bucket_for_key_equiv(k) { FoundEntry(idx) => Some(self.value_for_bucket(idx)), diff --git a/src/libcore/num/f32.rs b/src/libcore/num/f32.rs index 1b4c679ea07b4..416ec2069b521 100644 --- a/src/libcore/num/f32.rs +++ b/src/libcore/num/f32.rs @@ -284,12 +284,7 @@ impl Div for f32 { fn div(&self, other: &f32) -> f32 { *self / *other } } -#[cfg(stage0,notest)] -impl Modulo for f32 { - #[inline(always)] - fn modulo(&self, other: &f32) -> f32 { *self % *other } -} -#[cfg(not(stage0),notest)] +#[cfg(notest)] impl Rem for f32 { #[inline(always)] fn rem(&self, other: &f32) -> f32 { *self % *other } diff --git a/src/libcore/num/f64.rs b/src/libcore/num/f64.rs index 0f7647fa8680d..6e09ca61a7d4c 100644 --- a/src/libcore/num/f64.rs +++ b/src/libcore/num/f64.rs @@ -299,11 +299,7 @@ impl Mul for f64 { impl Div for f64 { fn div(&self, other: &f64) -> f64 { *self / *other } } -#[cfg(stage0,notest)] -impl Modulo for f64 { - fn modulo(&self, other: &f64) -> f64 { *self % *other } -} -#[cfg(not(stage0),notest)] +#[cfg(notest)] impl Rem for f64 { #[inline(always)] fn rem(&self, other: &f64) -> f64 { *self % *other } diff --git a/src/libcore/num/float.rs b/src/libcore/num/float.rs index 16bb2aa128651..da9d03f6a7bc3 100644 --- a/src/libcore/num/float.rs +++ b/src/libcore/num/float.rs @@ -697,12 +697,7 @@ impl Div for float { fn div(&self, other: &float) -> float { *self / *other } } -#[cfg(stage0,notest)] -impl Modulo for float { - #[inline(always)] - fn modulo(&self, other: &float) -> float { *self % *other } -} -#[cfg(not(stage0),notest)] +#[cfg(notest)] impl Rem for float { #[inline(always)] fn rem(&self, other: &float) -> float { *self % *other } diff --git a/src/libcore/num/int-template.rs b/src/libcore/num/int-template.rs index 090e0256abf6e..95c187a7be22e 100644 --- a/src/libcore/num/int-template.rs +++ b/src/libcore/num/int-template.rs @@ -224,12 +224,7 @@ impl Div for T { fn div(&self, other: &T) -> T { *self / *other } } -#[cfg(stage0,notest)] -impl Modulo for T { - #[inline(always)] - fn modulo(&self, other: &T) -> T { *self % *other } -} -#[cfg(not(stage0),notest)] +#[cfg(notest)] impl Rem for T { /// /// Returns the integer remainder after division, satisfying: diff --git a/src/libcore/num/num.rs b/src/libcore/num/num.rs index b8f47db7d128e..1a59a069df7e8 100644 --- a/src/libcore/num/num.rs +++ b/src/libcore/num/num.rs @@ -10,11 +10,6 @@ //! An interface for numeric types use cmp::{Eq, Ord}; -#[cfg(stage0)] -use ops::{Add, Sub, Mul, Div, Neg}; -#[cfg(stage0)] -use Rem = ops::Modulo; -#[cfg(not(stage0))] use ops::{Add, Sub, Mul, Div, Rem, Neg}; use ops::{Not, BitAnd, BitOr, BitXor, Shl, Shr}; use option::Option; @@ -391,23 +386,7 @@ pub fn pow_with_uint+Mul>( } /// Helper function for testing numeric operations -#[cfg(stage0,test)] -pub fn test_num(ten: T, two: T) { - assert_eq!(ten.add(&two), cast(12)); - assert_eq!(ten.sub(&two), cast(8)); - assert_eq!(ten.mul(&two), cast(20)); - assert_eq!(ten.div(&two), cast(5)); - assert_eq!(ten.modulo(&two), cast(0)); - - assert_eq!(ten.add(&two), ten + two); - assert_eq!(ten.sub(&two), ten - two); - assert_eq!(ten.mul(&two), ten * two); - assert_eq!(ten.div(&two), ten / two); - assert_eq!(ten.modulo(&two), ten % two); -} -#[cfg(stage1,test)] -#[cfg(stage2,test)] -#[cfg(stage3,test)] +#[cfg(test)] pub fn test_num(ten: T, two: T) { assert_eq!(ten.add(&two), cast(12)); assert_eq!(ten.sub(&two), cast(8)); diff --git a/src/libcore/num/strconv.rs b/src/libcore/num/strconv.rs index 68e3b407a8bc2..c16a29f8295e7 100644 --- a/src/libcore/num/strconv.rs +++ b/src/libcore/num/strconv.rs @@ -9,13 +9,6 @@ // except according to those terms. use core::cmp::{Ord, Eq}; -#[cfg(stage0)] -use ops::{Add, Sub, Mul, Div, Neg}; -#[cfg(stage0)] -use Rem = ops::Modulo; -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] use ops::{Add, Sub, Mul, Div, Rem, Neg}; use option::{None, Option, Some}; use char; diff --git a/src/libcore/num/uint-template.rs b/src/libcore/num/uint-template.rs index 379c1834543d2..6d0f1fe1fc72b 100644 --- a/src/libcore/num/uint-template.rs +++ b/src/libcore/num/uint-template.rs @@ -171,12 +171,7 @@ impl Div for T { fn div(&self, other: &T) -> T { *self / *other } } -#[cfg(stage0,notest)] -impl Modulo for T { - #[inline(always)] - fn modulo(&self, other: &T) -> T { *self % *other } -} -#[cfg(not(stage0),notest)] +#[cfg(notest)] impl Rem for T { #[inline(always)] fn rem(&self, other: &T) -> T { *self % *other } diff --git a/src/libcore/ops.rs b/src/libcore/ops.rs index 5ba860c89c9b9..47ff45be68726 100644 --- a/src/libcore/ops.rs +++ b/src/libcore/ops.rs @@ -35,13 +35,7 @@ pub trait Div { fn div(&self, rhs: &RHS) -> Result; } -#[lang="modulo"] -#[cfg(stage0)] -pub trait Modulo { - fn modulo(&self, rhs: &RHS) -> Result; -} #[lang="rem"] -#[cfg(not(stage0))] pub trait Rem { fn rem(&self, rhs: &RHS) -> Result; } diff --git a/src/libcore/option.rs b/src/libcore/option.rs index 47ec1fabcb822..b7c51147fba78 100644 --- a/src/libcore/option.rs +++ b/src/libcore/option.rs @@ -100,16 +100,6 @@ impl> Add, Option> for Option { impl BaseIter for Option { /// Performs an operation on the contained value by reference - #[cfg(stage0)] - #[inline(always)] - fn each(&self, f: &fn(x: &'self T) -> bool) { - match *self { None => (), Some(ref t) => { f(t); } } - } - - /// Performs an operation on the contained value by reference - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] #[inline(always)] fn each<'a>(&'a self, f: &fn(x: &'a T) -> bool) { match *self { None => (), Some(ref t) => { f(t); } } @@ -122,15 +112,6 @@ impl BaseIter for Option { } impl MutableIter for Option { - #[cfg(stage0)] - #[inline(always)] - fn each_mut(&mut self, f: &fn(&'self mut T) -> bool) { - match *self { None => (), Some(ref mut t) => { f(t); } } - } - - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] #[inline(always)] fn each_mut<'a>(&'a mut self, f: &fn(&'a mut T) -> bool) { match *self { None => (), Some(ref mut t) => { f(t); } } @@ -200,35 +181,12 @@ pub impl Option { * Update an optional value by optionally running its content by reference * through a function that returns an option. */ - #[cfg(stage0)] - #[inline(always)] - fn chain_ref(&self, f: &fn(x: &'self T) -> Option) -> Option { - match *self { Some(ref x) => f(x), None => None } - } - - /** - * Update an optional value by optionally running its content by reference - * through a function that returns an option. - */ - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] #[inline(always)] fn chain_ref<'a, U>(&'a self, f: &fn(x: &'a T) -> Option) -> Option { match *self { Some(ref x) => f(x), None => None } } /// Maps a `some` value from one type to another by reference - #[cfg(stage0)] - #[inline(always)] - fn map(&self, f: &fn(&'self T) -> U) -> Option { - match *self { Some(ref x) => Some(f(x)), None => None } - } - - /// Maps a `some` value from one type to another by reference - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] #[inline(always)] fn map<'a, U>(&self, f: &fn(&'a T) -> U) -> Option { match *self { Some(ref x) => Some(f(x)), None => None } @@ -242,16 +200,6 @@ pub impl Option { } /// Applies a function to the contained value or returns a default - #[cfg(stage0)] - #[inline(always)] - fn map_default(&self, def: U, f: &fn(&'self T) -> U) -> U { - match *self { None => def, Some(ref t) => f(t) } - } - - /// Applies a function to the contained value or returns a default - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] #[inline(always)] fn map_default<'a, U>(&'a self, def: U, f: &fn(&'a T) -> U) -> U { match *self { None => def, Some(ref t) => f(t) } @@ -295,32 +243,6 @@ pub impl Option { case explicitly. */ #[inline(always)] - #[cfg(stage0)] - fn get_ref(&self) -> &'self T { - match *self { - Some(ref x) => x, - None => fail!(~"option::get_ref none") - } - } - - /** - Gets an immutable reference to the value inside an option. - - # Failure - - Fails if the value equals `None` - - # Safety note - - In general, because this function may fail, its use is discouraged - (calling `get` on `None` is akin to dereferencing a null pointer). - Instead, prefer to use pattern matching and handle the `None` - case explicitly. - */ - #[inline(always)] - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn get_ref<'a>(&'a self) -> &'a T { match *self { Some(ref x) => x, @@ -343,32 +265,6 @@ pub impl Option { case explicitly. */ #[inline(always)] - #[cfg(stage0)] - fn get_mut_ref(&mut self) -> &'self mut T { - match *self { - Some(ref mut x) => x, - None => fail!(~"option::get_mut_ref none") - } - } - - /** - Gets a mutable reference to the value inside an option. - - # Failure - - Fails if the value equals `None` - - # Safety note - - In general, because this function may fail, its use is discouraged - (calling `get` on `None` is akin to dereferencing a null pointer). - Instead, prefer to use pattern matching and handle the `None` - case explicitly. - */ - #[inline(always)] - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn get_mut_ref<'a>(&'a mut self) -> &'a mut T { match *self { Some(ref mut x) => x, diff --git a/src/libcore/prelude.rs b/src/libcore/prelude.rs index 0dad9fc91d4ce..42401ae5a1fcd 100644 --- a/src/libcore/prelude.rs +++ b/src/libcore/prelude.rs @@ -14,9 +14,6 @@ pub use either::{Either, Left, Right}; pub use kinds::{Const, Copy, Owned, Durable}; -#[cfg(stage0)] -pub use ops::{Add, Sub, Mul, Div, Modulo, Neg, Not}; -#[cfg(not(stage0))] pub use ops::{Add, Sub, Mul, Div, Rem, Neg, Not}; pub use ops::{BitAnd, BitOr, BitXor}; pub use ops::{Drop}; diff --git a/src/libcore/reflect.rs b/src/libcore/reflect.rs index 9a0526b4351ba..47de360f58995 100644 --- a/src/libcore/reflect.rs +++ b/src/libcore/reflect.rs @@ -15,7 +15,7 @@ Runtime type reflection */ use intrinsic::{TyDesc, TyVisitor}; -#[cfg(not(stage0))] use intrinsic::Opaque; +use intrinsic::Opaque; use libc::c_void; use sys; use vec; @@ -394,17 +394,6 @@ impl TyVisitor for MovePtrAdaptor { true } - #[cfg(stage0)] - fn visit_enter_enum(&self, n_variants: uint, sz: uint, align: uint) - -> bool { - self.align(align); - if ! self.inner.visit_enter_enum(n_variants, sz, align) { - return false; - } - true - } - - #[cfg(not(stage0))] fn visit_enter_enum(&self, n_variants: uint, get_disr: extern unsafe fn(ptr: *Opaque) -> int, sz: uint, align: uint) @@ -428,15 +417,6 @@ impl TyVisitor for MovePtrAdaptor { true } - #[cfg(stage0)] - fn visit_enum_variant_field(&self, i: uint, inner: *TyDesc) -> bool { - unsafe { self.align((*inner).align); } - if ! self.inner.visit_enum_variant_field(i, inner) { return false; } - unsafe { self.bump((*inner).size); } - true - } - - #[cfg(not(stage0))] fn visit_enum_variant_field(&self, i: uint, offset: uint, inner: *TyDesc) -> bool { self.inner.push_ptr(); self.bump(offset); @@ -457,17 +437,6 @@ impl TyVisitor for MovePtrAdaptor { true } - #[cfg(stage0)] - fn visit_leave_enum(&self, n_variants: uint, sz: uint, align: uint) - -> bool { - if ! self.inner.visit_leave_enum(n_variants, sz, align) { - return false; - } - self.bump(sz); - true - } - - #[cfg(not(stage0))] fn visit_leave_enum(&self, n_variants: uint, get_disr: extern unsafe fn(ptr: *Opaque) -> int, sz: uint, align: uint) -> bool { diff --git a/src/libcore/repr.rs b/src/libcore/repr.rs index 29b8400706ce0..3d52599325928 100644 --- a/src/libcore/repr.rs +++ b/src/libcore/repr.rs @@ -18,12 +18,11 @@ use cast::transmute; use char; use intrinsic; use intrinsic::{TyDesc, TyVisitor, visit_tydesc}; -#[cfg(not(stage0))] use intrinsic::Opaque; +use intrinsic::Opaque; use io::{Writer, WriterUtil}; use libc::c_void; use managed; use ptr; -#[cfg(stage0)] use sys; use reflect; use reflect::{MovePtr, align}; use to_str::ToStr; @@ -138,14 +137,6 @@ impl Repr for char { // New implementation using reflect::MovePtr -#[cfg(stage0)] -enum VariantState { - Degenerate, - TagMatch, - TagMismatch, -} - -#[cfg(not(stage0))] enum VariantState { SearchingFor(int), Matched, @@ -190,18 +181,6 @@ pub impl ReprVisitor { true } - #[cfg(stage0)] #[inline(always)] - fn bump(&self, sz: uint) { - do self.move_ptr() |p| { - ((p as uint) + sz) as *c_void - }; - } - - #[cfg(stage0)] #[inline(always)] - fn bump_past(&self) { - self.bump(sys::size_of::()); - } - #[inline(always)] fn visit_inner(&self, inner: *TyDesc) -> bool { self.visit_ptr_inner(self.ptr, inner) @@ -467,18 +446,6 @@ impl TyVisitor for ReprVisitor { true } - #[cfg(stage0)] - fn visit_enter_enum(&self, n_variants: uint, - _sz: uint, _align: uint) -> bool { - if n_variants == 1 { - self.var_stk.push(Degenerate) - } else { - self.var_stk.push(TagMatch) - } - true - } - - #[cfg(not(stage0))] fn visit_enter_enum(&self, _n_variants: uint, get_disr: extern unsafe fn(ptr: *Opaque) -> int, _sz: uint, _align: uint) -> bool { @@ -487,40 +454,6 @@ impl TyVisitor for ReprVisitor { true } - #[cfg(stage0)] - fn visit_enter_enum_variant(&self, _variant: uint, - disr_val: int, - n_fields: uint, - name: &str) -> bool { - let mut write = false; - match self.var_stk.pop() { - Degenerate => { - write = true; - self.var_stk.push(Degenerate); - } - TagMatch | TagMismatch => { - do self.get::() |t| { - if disr_val == *t { - write = true; - self.var_stk.push(TagMatch); - } else { - self.var_stk.push(TagMismatch); - } - }; - self.bump_past::(); - } - } - - if write { - self.writer.write_str(name); - if n_fields > 0 { - self.writer.write_char('('); - } - } - true - } - - #[cfg(not(stage0))] fn visit_enter_enum_variant(&self, _variant: uint, disr_val: int, n_fields: uint, @@ -549,23 +482,6 @@ impl TyVisitor for ReprVisitor { true } - #[cfg(stage0)] - fn visit_enum_variant_field(&self, i: uint, inner: *TyDesc) -> bool { - match self.var_stk[vec::uniq_len(&const self.var_stk) - 1] { - Degenerate | TagMatch => { - if i != 0 { - self.writer.write_str(", "); - } - if ! self.visit_inner(inner) { - return false; - } - } - TagMismatch => () - } - true - } - - #[cfg(not(stage0))] fn visit_enum_variant_field(&self, i: uint, _offset: uint, inner: *TyDesc) -> bool { match self.var_stk[vec::uniq_len(&const self.var_stk) - 1] { Matched => { @@ -581,23 +497,6 @@ impl TyVisitor for ReprVisitor { true } - #[cfg(stage0)] - fn visit_leave_enum_variant(&self, _variant: uint, - _disr_val: int, - n_fields: uint, - _name: &str) -> bool { - match self.var_stk[vec::uniq_len(&const self.var_stk) - 1] { - Degenerate | TagMatch => { - if n_fields > 0 { - self.writer.write_char(')'); - } - } - TagMismatch => () - } - true - } - - #[cfg(not(stage0))] fn visit_leave_enum_variant(&self, _variant: uint, _disr_val: int, n_fields: uint, @@ -613,14 +512,6 @@ impl TyVisitor for ReprVisitor { true } - #[cfg(stage0)] - fn visit_leave_enum(&self, _n_variants: uint, - _sz: uint, _align: uint) -> bool { - self.var_stk.pop(); - true - } - - #[cfg(not(stage0))] fn visit_leave_enum(&self, _n_variants: uint, _get_disr: extern unsafe fn(ptr: *Opaque) -> int, _sz: uint, _align: uint) -> bool { diff --git a/src/libcore/result.rs b/src/libcore/result.rs index 9171c5167bc7b..17cc07c660d1a 100644 --- a/src/libcore/result.rs +++ b/src/libcore/result.rs @@ -226,13 +226,6 @@ pub fn map_err(res: &Result, op: &fn(&E) -> F) } pub impl Result { - #[cfg(stage0)] - #[inline(always)] - fn get_ref(&self) -> &'self T { get_ref(self) } - - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] #[inline(always)] fn get_ref<'a>(&'a self) -> &'a T { get_ref(self) } diff --git a/src/libcore/rt/io/mod.rs b/src/libcore/rt/io/mod.rs index ced4ba0ee2309..97b3ee3e30ef6 100644 --- a/src/libcore/rt/io/mod.rs +++ b/src/libcore/rt/io/mod.rs @@ -275,7 +275,6 @@ pub mod net { } /// Readers and Writers for memory buffers and strings. -#[cfg(not(stage0))] // XXX Using unsnapshotted features pub mod mem; /// Non-blocking access to stdin, stdout, stderr @@ -286,11 +285,9 @@ pub mod stdio; mod option; /// Basic stream compression. XXX: Belongs with other flate code -#[cfg(not(stage0))] // XXX Using unsnapshotted features pub mod flate; /// Interop between byte streams and pipes. Not sure where it belongs -#[cfg(not(stage0))] // XXX " pub mod comm_adapters; /// Extension traits diff --git a/src/libcore/rt/mod.rs b/src/libcore/rt/mod.rs index 56ed7dc95b6df..a072fccd33d6c 100644 --- a/src/libcore/rt/mod.rs +++ b/src/libcore/rt/mod.rs @@ -37,27 +37,6 @@ mod local_heap; #[cfg(test)] pub mod test; -#[cfg(stage0)] -pub fn start(main: *u8, _argc: int, _argv: *c_char, _crate_map: *u8) -> int { - use self::sched::{Scheduler, Task}; - use self::uvio::UvEventLoop; - - let loop_ = ~UvEventLoop::new(); - let mut sched = ~Scheduler::new(loop_); - let main_task = ~do Task::new(&mut sched.stack_pool) { - // XXX: Can't call a C function pointer from Rust yet - unsafe { rust_call_nullary_fn(main) }; - }; - sched.task_queue.push_back(main_task); - sched.run(); - return 0; - - extern { - fn rust_call_nullary_fn(f: *u8); - } -} - -#[cfg(not(stage0))] pub fn start(main: *u8, _argc: int, _argv: **c_char, _crate_map: *u8) -> int { use self::sched::{Scheduler, Task}; use self::uvio::UvEventLoop; diff --git a/src/libcore/rt/rtio.rs b/src/libcore/rt/rtio.rs index 66eb79ba6ae4e..fd64438c61b46 100644 --- a/src/libcore/rt/rtio.rs +++ b/src/libcore/rt/rtio.rs @@ -24,11 +24,6 @@ pub trait EventLoop { fn run(&mut self); fn callback(&mut self, ~fn()); /// The asynchronous I/O services. Not all event loops may provide one - #[cfg(stage0)] - fn io(&mut self) -> Option<&'self mut IoFactoryObject>; - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn io<'a>(&'a mut self) -> Option<&'a mut IoFactoryObject>; } diff --git a/src/libcore/rt/uvio.rs b/src/libcore/rt/uvio.rs index 94f8c0bf707dd..ab8aea2b63c4f 100644 --- a/src/libcore/rt/uvio.rs +++ b/src/libcore/rt/uvio.rs @@ -68,14 +68,6 @@ impl EventLoop for UvEventLoop { } } - #[cfg(stage0)] - fn io(&mut self) -> Option<&'self mut IoFactoryObject> { - Some(&mut self.uvio) - } - - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn io<'a>(&'a mut self) -> Option<&'a mut IoFactoryObject> { Some(&mut self.uvio) } @@ -98,14 +90,6 @@ fn test_callback_run_once() { pub struct UvIoFactory(Loop); pub impl UvIoFactory { - #[cfg(stage0)] - fn uv_loop(&mut self) -> &'self mut Loop { - match self { &UvIoFactory(ref mut ptr) => ptr } - } - - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn uv_loop<'a>(&'a mut self) -> &'a mut Loop { match self { &UvIoFactory(ref mut ptr) => ptr } } diff --git a/src/libcore/stackwalk.rs b/src/libcore/stackwalk.rs index 272bdca8654f1..987d4064ab9f6 100644 --- a/src/libcore/stackwalk.rs +++ b/src/libcore/stackwalk.rs @@ -93,9 +93,6 @@ pub mod rustrt { pub mod rusti { #[abi = "rust-intrinsic"] pub extern "rust-intrinsic" { - #[cfg(stage0)] - pub fn frame_address(f: &once fn(x: *u8)); - #[cfg(not(stage0))] pub fn frame_address(+f: &once fn(x: *u8)); } } diff --git a/src/libcore/sys.rs b/src/libcore/sys.rs index dd36604883433..4eca7ebbb371e 100644 --- a/src/libcore/sys.rs +++ b/src/libcore/sys.rs @@ -200,21 +200,6 @@ impl FailWithCause for &'static str { } } -// NOTE: remove function after snapshot -#[cfg(stage0)] -pub fn begin_unwind(msg: ~str, file: ~str, line: uint) -> ! { - - do str::as_buf(msg) |msg_buf, _msg_len| { - do str::as_buf(file) |file_buf, _file_len| { - unsafe { - let msg_buf = cast::transmute(msg_buf); - let file_buf = cast::transmute(file_buf); - begin_unwind_(msg_buf, file_buf, line as libc::size_t) - } - } - } -} - // FIXME #4427: Temporary until rt::rt_fail_ goes away pub fn begin_unwind_(msg: *c_char, file: *c_char, line: size_t) -> ! { use rt::{context, OldTaskContext}; @@ -242,13 +227,6 @@ pub fn begin_unwind_(msg: *c_char, file: *c_char, line: size_t) -> ! { } } -// NOTE: remove function after snapshot -#[cfg(stage0)] -pub fn fail_assert(msg: &str, file: &str, line: uint) -> ! { - let (msg, file) = (msg.to_owned(), file.to_owned()); - begin_unwind(~"assertion failed: " + msg, file, line) -} - #[cfg(test)] mod tests { use cast; diff --git a/src/libcore/trie.rs b/src/libcore/trie.rs index f4e9ddbdd90a1..f0756be994432 100644 --- a/src/libcore/trie.rs +++ b/src/libcore/trie.rs @@ -56,16 +56,6 @@ impl Map for TrieMap { /// Visit all key-value pairs in order #[inline(always)] - #[cfg(stage0)] - fn each(&self, f: &fn(&uint, &'self T) -> bool) { - self.root.each(f); - } - - /// Visit all key-value pairs in order - #[inline(always)] - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn each<'a>(&'a self, f: &fn(&uint, &'a T) -> bool) { self.root.each(f); } @@ -78,16 +68,6 @@ impl Map for TrieMap { /// Visit all values in order #[inline(always)] - #[cfg(stage0)] - fn each_value(&self, f: &fn(&T) -> bool) { - self.each(|_, v| f(v)) - } - - /// Visit all values in order - #[inline(always)] - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn each_value<'a>(&'a self, f: &fn(&'a T) -> bool) { self.each(|_, v| f(v)) } @@ -99,31 +79,6 @@ impl Map for TrieMap { } /// Return a reference to the value corresponding to the key - #[cfg(stage0)] - #[inline(hint)] - fn find(&self, key: &uint) -> Option<&'self T> { - let mut node: &'self TrieNode = &self.root; - let mut idx = 0; - loop { - match node.children[chunk(*key, idx)] { - Internal(ref x) => node = &**x, - External(stored, ref value) => { - if stored == *key { - return Some(value) - } else { - return None - } - } - Nothing => return None - } - idx += 1; - } - } - - /// Return a reference to the value corresponding to the key - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] #[inline(hint)] fn find<'a>(&'a self, key: &uint) -> Option<&'a T> { let mut node: &'a TrieNode = &self.root; @@ -145,16 +100,6 @@ impl Map for TrieMap { } /// Return a mutable reference to the value corresponding to the key - #[cfg(stage0)] - #[inline(always)] - fn find_mut(&mut self, key: &uint) -> Option<&'self mut T> { - find_mut(&mut self.root.children[chunk(*key, 0)], *key, 1) - } - - /// Return a mutable reference to the value corresponding to the key - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] #[inline(always)] fn find_mut<'a>(&'a mut self, key: &uint) -> Option<&'a mut T> { find_mut(&mut self.root.children[chunk(*key, 0)], *key, 1) @@ -193,16 +138,6 @@ pub impl TrieMap { /// Visit all key-value pairs in reverse order #[inline(always)] - #[cfg(stage0)] - fn each_reverse(&self, f: &fn(&uint, &'self T) -> bool) { - self.root.each_reverse(f); - } - - /// Visit all key-value pairs in reverse order - #[inline(always)] - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn each_reverse<'a>(&'a self, f: &fn(&uint, &'a T) -> bool) { self.root.each_reverse(f); } @@ -298,21 +233,6 @@ impl TrieNode { } impl TrieNode { - #[cfg(stage0)] - fn each(&self, f: &fn(&uint, &'self T) -> bool) -> bool { - for uint::range(0, self.children.len()) |idx| { - match self.children[idx] { - Internal(ref x) => if !x.each(f) { return false }, - External(k, ref v) => if !f(&k, v) { return false }, - Nothing => () - } - } - true - } - - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn each<'a>(&'a self, f: &fn(&uint, &'a T) -> bool) -> bool { for uint::range(0, self.children.len()) |idx| { match self.children[idx] { @@ -324,21 +244,6 @@ impl TrieNode { true } - #[cfg(stage0)] - fn each_reverse(&self, f: &fn(&uint, &'self T) -> bool) -> bool { - for uint::range_rev(self.children.len(), 0) |idx| { - match self.children[idx - 1] { - Internal(ref x) => if !x.each_reverse(f) { return false }, - External(k, ref v) => if !f(&k, v) { return false }, - Nothing => () - } - } - true - } - - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn each_reverse<'a>(&'a self, f: &fn(&uint, &'a T) -> bool) -> bool { for uint::range_rev(self.children.len(), 0) |idx| { match self.children[idx - 1] { diff --git a/src/libcore/tuple.rs b/src/libcore/tuple.rs index a2b6f0eb1a714..6da22657906dd 100644 --- a/src/libcore/tuple.rs +++ b/src/libcore/tuple.rs @@ -56,39 +56,11 @@ impl Clone for (T, U) { } } -#[cfg(stage0)] -pub trait ImmutableTuple { - fn first_ref(&self) -> &'self T; - fn second_ref(&self) -> &'self U; -} - -#[cfg(stage0)] -impl ImmutableTuple for (T, U) { - #[inline(always)] - fn first_ref(&self) -> &'self T { - match *self { - (ref t, _) => t, - } - } - #[inline(always)] - fn second_ref(&self) -> &'self U { - match *self { - (_, ref u) => u, - } - } -} - -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] pub trait ImmutableTuple { fn first_ref<'a>(&'a self) -> &'a T; fn second_ref<'a>(&'a self) -> &'a U; } -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] impl ImmutableTuple for (T, U) { #[inline(always)] fn first_ref<'a>(&'a self) -> &'a T { diff --git a/src/libcore/unstable/intrinsics.rs b/src/libcore/unstable/intrinsics.rs index b58429a10aad5..65cfc6ec1fe05 100644 --- a/src/libcore/unstable/intrinsics.rs +++ b/src/libcore/unstable/intrinsics.rs @@ -46,10 +46,6 @@ pub extern "rust-intrinsic" { pub fn forget(_: T) -> (); - // XXX: intrinsic uses legacy modes - #[cfg(stage0)] - fn reinterpret_cast(&&src: T) -> U; - pub fn needs_drop() -> bool; // XXX: intrinsic uses legacy modes and has reference to TyDesc diff --git a/src/libcore/unstable/lang.rs b/src/libcore/unstable/lang.rs index 460285bfcfda0..7f6faa81012e8 100644 --- a/src/libcore/unstable/lang.rs +++ b/src/libcore/unstable/lang.rs @@ -17,9 +17,7 @@ use str; use sys; use unstable::exchange_alloc; use cast::transmute; -#[cfg(not(stage0))] use rt::{context, OldTaskContext}; -#[cfg(not(stage0))] use rt::local_services::borrow_local_services; #[allow(non_camel_case_types)] @@ -91,14 +89,6 @@ pub unsafe fn exchange_free(ptr: *c_char) { } #[lang="malloc"] -#[inline(always)] -#[cfg(stage0)] // For some reason this isn't working on windows in stage0 -pub unsafe fn local_malloc(td: *c_char, size: uintptr_t) -> *c_char { - return rustrt::rust_upcall_malloc_noswitch(td, size); -} - -#[lang="malloc"] -#[cfg(not(stage0))] pub unsafe fn local_malloc(td: *c_char, size: uintptr_t) -> *c_char { match context() { OldTaskContext => { @@ -118,17 +108,6 @@ pub unsafe fn local_malloc(td: *c_char, size: uintptr_t) -> *c_char { // inside a landing pad may corrupt the state of the exception handler. If a // problem occurs, call exit instead. #[lang="free"] -#[inline(always)] -#[cfg(stage0)] -pub unsafe fn local_free(ptr: *c_char) { - rustrt::rust_upcall_free_noswitch(ptr); -} - -// NB: Calls to free CANNOT be allowed to fail, as throwing an exception from -// inside a landing pad may corrupt the state of the exception handler. If a -// problem occurs, call exit instead. -#[lang="free"] -#[cfg(not(stage0))] pub unsafe fn local_free(ptr: *c_char) { match context() { OldTaskContext => { @@ -176,32 +155,6 @@ pub unsafe fn strdup_uniq(ptr: *c_uchar, len: uint) -> ~str { } #[lang="start"] -#[cfg(stage0)] -pub fn start(main: *u8, argc: int, argv: *c_char, - crate_map: *u8) -> int { - use libc::getenv; - use rt::start; - - unsafe { - let use_old_rt = do str::as_c_str("RUST_NEWRT") |s| { - getenv(s).is_null() - }; - if use_old_rt { - return rust_start(main as *c_void, argc as c_int, argv, - crate_map as *c_void) as int; - } else { - return start(main, argc, argv, crate_map); - } - } - - extern { - fn rust_start(main: *c_void, argc: c_int, argv: *c_char, - crate_map: *c_void) -> c_int; - } -} - -#[lang="start"] -#[cfg(not(stage0))] pub fn start(main: *u8, argc: int, argv: **c_char, crate_map: *u8) -> int { use libc::getenv; diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs index 081efe48e1eb5..6ffb0b30917a3 100644 --- a/src/libcore/vec.rs +++ b/src/libcore/vec.rs @@ -19,9 +19,6 @@ use cmp::{Eq, Ord, TotalEq, TotalOrd, Ordering, Less, Equal, Greater}; use clone::Clone; use old_iter::BaseIter; use old_iter; -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] use iterator::Iterator; use kinds::Copy; use libc; @@ -1566,16 +1563,6 @@ pub fn each_permutation(v: &[T], put: &fn(ts: &[T]) -> bool) { } } -// see doc below -#[cfg(stage0)] // XXX: lifetimes! -pub fn windowed(n: uint, v: &[T], it: &fn(&[T]) -> bool) { - assert!(1u <= n); - if n > v.len() { return; } - for uint::range(0, v.len() - n + 1) |i| { - if !it(v.slice(i, i+n)) { return } - } -} - /** * Iterate over all contiguous windows of length `n` of the vector `v`. * @@ -1590,9 +1577,6 @@ pub fn windowed(n: uint, v: &[T], it: &fn(&[T]) -> bool) { * ~~~ * */ -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] pub fn windowed<'r, T>(n: uint, v: &'r [T], it: &fn(&'r [T]) -> bool) { assert!(1u <= n); if n > v.len() { return; } @@ -1854,150 +1838,6 @@ impl<'self,T:Copy> CopyableVector for &'self const [T] { } } -#[cfg(stage0)] -pub trait ImmutableVector { - fn slice(&self, start: uint, end: uint) -> &'self [T]; - fn head(&self) -> &'self T; - fn head_opt(&self) -> Option<&'self T>; - fn tail(&self) -> &'self [T]; - fn tailn(&self, n: uint) -> &'self [T]; - fn init(&self) -> &'self [T]; - fn initn(&self, n: uint) -> &'self [T]; - fn last(&self) -> &'self T; - fn last_opt(&self) -> Option<&'self T>; - fn each_reverse(&self, blk: &fn(&T) -> bool); - fn eachi_reverse(&self, blk: &fn(uint, &T) -> bool); - fn foldr(&self, z: U, p: &fn(t: &T, u: U) -> U) -> U; - fn map(&self, f: &fn(t: &T) -> U) -> ~[U]; - fn mapi(&self, f: &fn(uint, t: &T) -> U) -> ~[U]; - fn map_r(&self, f: &fn(x: &T) -> U) -> ~[U]; - fn alli(&self, f: &fn(uint, t: &T) -> bool) -> bool; - fn flat_map(&self, f: &fn(t: &T) -> ~[U]) -> ~[U]; - fn filter_mapped(&self, f: &fn(t: &T) -> Option) -> ~[U]; - unsafe fn unsafe_ref(&self, index: uint) -> *T; -} - -/// Extension methods for vectors -#[cfg(stage0)] -impl<'self,T> ImmutableVector for &'self [T] { - /// Return a slice that points into another slice. - #[inline] - fn slice(&self, start: uint, end: uint) -> &'self [T] { - slice(*self, start, end) - } - - /// Returns the first element of a vector, failing if the vector is empty. - #[inline] - fn head(&self) -> &'self T { head(*self) } - - /// Returns the first element of a vector - #[inline] - fn head_opt(&self) -> Option<&'self T> { head_opt(*self) } - - /// Returns all but the first element of a vector - #[inline] - fn tail(&self) -> &'self [T] { tail(*self) } - - /// Returns all but the first `n' elements of a vector - #[inline] - fn tailn(&self, n: uint) -> &'self [T] { tailn(*self, n) } - - /// Returns all but the last elemnt of a vector - #[inline] - fn init(&self) -> &'self [T] { init(*self) } - - /// Returns all but the last `n' elemnts of a vector - #[inline] - fn initn(&self, n: uint) -> &'self [T] { initn(*self, n) } - - /// Returns the last element of a `v`, failing if the vector is empty. - #[inline] - fn last(&self) -> &'self T { last(*self) } - - /// Returns the last element of a `v`, failing if the vector is empty. - #[inline] - fn last_opt(&self) -> Option<&'self T> { last_opt(*self) } - - /// Iterates over a vector's elements in reverse. - #[inline] - fn each_reverse(&self, blk: &fn(&T) -> bool) { - each_reverse(*self, blk) - } - - /// Iterates over a vector's elements and indices in reverse. - #[inline] - fn eachi_reverse(&self, blk: &fn(uint, &T) -> bool) { - eachi_reverse(*self, blk) - } - - /// Reduce a vector from right to left - #[inline] - fn foldr(&self, z: U, p: &fn(t: &T, u: U) -> U) -> U { - foldr(*self, z, p) - } - - /// Apply a function to each element of a vector and return the results - #[inline] - fn map(&self, f: &fn(t: &T) -> U) -> ~[U] { map(*self, f) } - - /** - * Apply a function to the index and value of each element in the vector - * and return the results - */ - fn mapi(&self, f: &fn(uint, t: &T) -> U) -> ~[U] { - mapi(*self, f) - } - - #[inline] - fn map_r(&self, f: &fn(x: &T) -> U) -> ~[U] { - let mut r = ~[]; - let mut i = 0; - while i < self.len() { - r.push(f(&self[i])); - i += 1; - } - r - } - - /** - * Returns true if the function returns true for all elements. - * - * If the vector is empty, true is returned. - */ - fn alli(&self, f: &fn(uint, t: &T) -> bool) -> bool { - alli(*self, f) - } - /** - * Apply a function to each element of a vector and return a concatenation - * of each result vector - */ - #[inline] - fn flat_map(&self, f: &fn(t: &T) -> ~[U]) -> ~[U] { - flat_map(*self, f) - } - /** - * Apply a function to each element of a vector and return the results - * - * If function `f` returns `none` then that element is excluded from - * the resulting vector. - */ - #[inline] - fn filter_mapped(&self, f: &fn(t: &T) -> Option) -> ~[U] { - filter_mapped(*self, f) - } - - /// Returns a pointer to the element at the given index, without doing - /// bounds checking. - #[inline(always)] - unsafe fn unsafe_ref(&self, index: uint) -> *T { - let (ptr, _): (*T, uint) = transmute(*self); - ptr.offset(index) - } -} - -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] pub trait ImmutableVector<'self, T> { fn slice(&self, start: uint, end: uint) -> &'self [T]; fn iter(self) -> VecIterator<'self, T>; @@ -2022,9 +1862,6 @@ pub trait ImmutableVector<'self, T> { } /// Extension methods for vectors -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] impl<'self,T> ImmutableVector<'self, T> for &'self [T] { /// Return a slice that points into another slice. #[inline] @@ -2634,17 +2471,6 @@ pub mod bytes { // ___________________________________________________________________________ // ITERATION TRAIT METHODS -#[cfg(stage0)] -impl<'self,A> old_iter::BaseIter for &'self [A] { - #[inline(always)] - fn each(&self, blk: &fn(v: &'self A) -> bool) { each(*self, blk) } - #[inline(always)] - fn size_hint(&self) -> Option { Some(self.len()) } -} - -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] impl<'self,A> old_iter::BaseIter for &'self [A] { #[inline(always)] fn each<'a>(&'a self, blk: &fn(v: &'a A) -> bool) { each(*self, blk) } @@ -2653,18 +2479,6 @@ impl<'self,A> old_iter::BaseIter for &'self [A] { } // FIXME(#4148): This should be redundant -#[cfg(stage0)] -impl old_iter::BaseIter for ~[A] { - #[inline(always)] - fn each(&self, blk: &fn(v: &'self A) -> bool) { each(*self, blk) } - #[inline(always)] - fn size_hint(&self) -> Option { Some(self.len()) } -} - -// FIXME(#4148): This should be redundant -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] impl old_iter::BaseIter for ~[A] { #[inline(always)] fn each<'a>(&'a self, blk: &fn(v: &'a A) -> bool) { each(*self, blk) } @@ -2673,18 +2487,6 @@ impl old_iter::BaseIter for ~[A] { } // FIXME(#4148): This should be redundant -#[cfg(stage0)] -impl old_iter::BaseIter for @[A] { - #[inline(always)] - fn each(&self, blk: &fn(v: &'self A) -> bool) { each(*self, blk) } - #[inline(always)] - fn size_hint(&self) -> Option { Some(self.len()) } -} - -// FIXME(#4148): This should be redundant -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] impl old_iter::BaseIter for @[A] { #[inline(always)] fn each<'a>(&'a self, blk: &fn(v: &'a A) -> bool) { each(*self, blk) } @@ -2692,17 +2494,6 @@ impl old_iter::BaseIter for @[A] { fn size_hint(&self) -> Option { Some(self.len()) } } -#[cfg(stage0)] -impl<'self,A> old_iter::MutableIter for &'self mut [A] { - #[inline(always)] - fn each_mut(&mut self, blk: &fn(v: &'self mut A) -> bool) { - each_mut(*self, blk) - } -} - -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] impl<'self,A> old_iter::MutableIter for &'self mut [A] { #[inline(always)] fn each_mut<'a>(&'a mut self, blk: &fn(v: &'a mut A) -> bool) { @@ -2711,17 +2502,6 @@ impl<'self,A> old_iter::MutableIter for &'self mut [A] { } // FIXME(#4148): This should be redundant -#[cfg(stage0)] -impl old_iter::MutableIter for ~[A] { - #[inline(always)] - fn each_mut(&mut self, blk: &fn(v: &'self mut A) -> bool) { - each_mut(*self, blk) - } -} - -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] impl old_iter::MutableIter for ~[A] { #[inline(always)] fn each_mut<'a>(&'a mut self, blk: &fn(v: &'a mut A) -> bool) { @@ -2927,18 +2707,12 @@ impl Clone for ~[A] { } // could be implemented with &[T] with .slice(), but this avoids bounds checks -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] pub struct VecIterator<'self, T> { priv ptr: *T, priv end: *T, priv lifetime: &'self T // FIXME: #5922 } -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] impl<'self, T> Iterator<&'self T> for VecIterator<'self, T> { #[inline] fn next(&mut self) -> Option<&'self T> { diff --git a/src/librustc/metadata/decoder.rs b/src/librustc/metadata/decoder.rs index 1be49528b9e79..1347fec5d667a 100644 --- a/src/librustc/metadata/decoder.rs +++ b/src/librustc/metadata/decoder.rs @@ -272,14 +272,6 @@ fn item_ty_param_defs(item: ebml::Doc, tcx: ty::ctxt, cdata: cmd, @bounds } -#[cfg(stage0)] -fn item_ty_region_param(item: ebml::Doc) -> Option { - reader::maybe_get_doc(item, tag_region_param).map(|doc| { - Decodable::decode(&reader::Decoder(*doc)) - }) -} - -#[cfg(not(stage0))] fn item_ty_region_param(item: ebml::Doc) -> Option { reader::maybe_get_doc(item, tag_region_param).map(|doc| { let mut decoder = reader::Decoder(*doc); diff --git a/src/librustc/metadata/encoder.rs b/src/librustc/metadata/encoder.rs index 77373076137b9..6a9c564f36828 100644 --- a/src/librustc/metadata/encoder.rs +++ b/src/librustc/metadata/encoder.rs @@ -42,13 +42,6 @@ use writer = std::ebml::writer; // used by astencode: type abbrev_map = @mut HashMap; -#[cfg(stage0)] -pub type encode_inlined_item = @fn(ecx: @EncodeContext, - ebml_w: &writer::Encoder, - path: &[ast_map::path_elt], - ii: ast::inlined_item); - -#[cfg(not(stage0))] pub type encode_inlined_item = @fn(ecx: @EncodeContext, ebml_w: &mut writer::Encoder, path: &[ast_map::path_elt], @@ -98,27 +91,12 @@ pub fn reachable(ecx: @EncodeContext, id: node_id) -> bool { ecx.reachable.contains(&id) } -#[cfg(stage0)] -fn encode_name(ecx: @EncodeContext, ebml_w: &writer::Encoder, name: ident) { - ebml_w.wr_tagged_str(tag_paths_data_name, *ecx.tcx.sess.str_of(name)); -} - -#[cfg(not(stage0))] fn encode_name(ecx: @EncodeContext, ebml_w: &mut writer::Encoder, name: ident) { ebml_w.wr_tagged_str(tag_paths_data_name, *ecx.tcx.sess.str_of(name)); } -#[cfg(stage0)] -fn encode_impl_type_basename(ecx: @EncodeContext, - ebml_w: &writer::Encoder, - name: ident) { - ebml_w.wr_tagged_str(tag_item_impl_type_basename, - *ecx.tcx.sess.str_of(name)); -} - -#[cfg(not(stage0))] fn encode_impl_type_basename(ecx: @EncodeContext, ebml_w: &mut writer::Encoder, name: ident) { @@ -126,29 +104,10 @@ fn encode_impl_type_basename(ecx: @EncodeContext, *ecx.tcx.sess.str_of(name)); } -#[cfg(stage0)] -pub fn encode_def_id(ebml_w: &writer::Encoder, id: def_id) { - ebml_w.wr_tagged_str(tag_def_id, def_to_str(id)); -} - -#[cfg(not(stage0))] pub fn encode_def_id(ebml_w: &mut writer::Encoder, id: def_id) { ebml_w.wr_tagged_str(tag_def_id, def_to_str(id)); } -#[cfg(stage0)] -fn encode_region_param(ecx: @EncodeContext, - ebml_w: &writer::Encoder, - it: @ast::item) { - let opt_rp = ecx.tcx.region_paramd_items.find(&it.id); - for opt_rp.each |rp| { - do ebml_w.wr_tag(tag_region_param) { - rp.encode(ebml_w); - } - } -} - -#[cfg(not(stage0))] fn encode_region_param(ecx: @EncodeContext, ebml_w: &mut writer::Encoder, it: @ast::item) { @@ -160,18 +119,6 @@ fn encode_region_param(ecx: @EncodeContext, } } -#[cfg(stage0)] -fn encode_mutability(ebml_w: &writer::Encoder, mt: struct_mutability) { - do ebml_w.wr_tag(tag_struct_mut) { - let val = match mt { - struct_immutable => 'a', - struct_mutable => 'm' - }; - ebml_w.writer.write(&[val as u8]); - } -} - -#[cfg(not(stage0))] fn encode_mutability(ebml_w: &mut writer::Encoder, mt: struct_mutability) { ebml_w.start_tag(tag_struct_mut); let val = match mt { @@ -187,24 +134,6 @@ struct entry { pos: uint } -#[cfg(stage0)] -fn add_to_index(ecx: @EncodeContext, - ebml_w: &writer::Encoder, - path: &[ident], - index: &mut ~[entry<~str>], - name: ident) { - let mut full_path = ~[]; - full_path.push_all(path); - full_path.push(name); - index.push( - entry { - val: ast_util::path_name_i(full_path, - ecx.tcx.sess.parse_sess.interner), - pos: ebml_w.writer.tell() - }); -} - -#[cfg(not(stage0))] fn add_to_index(ecx: @EncodeContext, ebml_w: &mut writer::Encoder, path: &[ident], @@ -221,24 +150,6 @@ fn add_to_index(ecx: @EncodeContext, }); } -#[cfg(stage0)] -fn encode_trait_ref(ebml_w: &writer::Encoder, - ecx: @EncodeContext, - trait_ref: &ty::TraitRef, - tag: uint) { - let ty_str_ctxt = @tyencode::ctxt { - diag: ecx.diag, - ds: def_to_str, - tcx: ecx.tcx, - reachable: |a| reachable(ecx, a), - abbrevs: tyencode::ac_use_abbrevs(ecx.type_abbrevs)}; - - ebml_w.start_tag(tag); - tyencode::enc_trait_ref(ebml_w.writer, ty_str_ctxt, trait_ref); - ebml_w.end_tag(); -} - -#[cfg(not(stage0))] fn encode_trait_ref(ebml_w: &mut writer::Encoder, ecx: @EncodeContext, trait_ref: &ty::TraitRef, @@ -256,15 +167,6 @@ fn encode_trait_ref(ebml_w: &mut writer::Encoder, } // Item info table encoding -#[cfg(stage0)] -fn encode_family(ebml_w: &writer::Encoder, c: char) { - ebml_w.start_tag(tag_items_data_item_family); - ebml_w.writer.write(&[c as u8]); - ebml_w.end_tag(); -} - -// Item info table encoding -#[cfg(not(stage0))] fn encode_family(ebml_w: &mut writer::Encoder, c: char) { ebml_w.start_tag(tag_items_data_item_family); ebml_w.writer.write(&[c as u8]); @@ -275,25 +177,6 @@ pub fn def_to_str(did: def_id) -> ~str { fmt!("%d:%d", did.crate, did.node) } -#[cfg(stage0)] -fn encode_ty_type_param_defs(ebml_w: &writer::Encoder, - ecx: @EncodeContext, - params: @~[ty::TypeParameterDef], - tag: uint) { - let ty_str_ctxt = @tyencode::ctxt { - diag: ecx.diag, - ds: def_to_str, - tcx: ecx.tcx, - reachable: |a| reachable(ecx, a), - abbrevs: tyencode::ac_use_abbrevs(ecx.type_abbrevs)}; - for params.each |param| { - ebml_w.start_tag(tag); - tyencode::enc_type_param_def(ebml_w.writer, ty_str_ctxt, param); - ebml_w.end_tag(); - } -} - -#[cfg(not(stage0))] fn encode_ty_type_param_defs(ebml_w: &mut writer::Encoder, ecx: @EncodeContext, params: @~[ty::TypeParameterDef], @@ -311,17 +194,6 @@ fn encode_ty_type_param_defs(ebml_w: &mut writer::Encoder, } } -#[cfg(stage0)] -fn encode_type_param_bounds(ebml_w: &writer::Encoder, - ecx: @EncodeContext, - params: &OptVec) { - let ty_param_defs = - @params.map_to_vec(|param| *ecx.tcx.ty_param_defs.get(¶m.id)); - encode_ty_type_param_defs(ebml_w, ecx, ty_param_defs, - tag_items_data_item_ty_param_bounds); -} - -#[cfg(not(stage0))] fn encode_type_param_bounds(ebml_w: &mut writer::Encoder, ecx: @EncodeContext, params: &OptVec) { @@ -331,32 +203,12 @@ fn encode_type_param_bounds(ebml_w: &mut writer::Encoder, tag_items_data_item_ty_param_bounds); } -#[cfg(stage0)] -fn encode_variant_id(ebml_w: &writer::Encoder, vid: def_id) { - ebml_w.start_tag(tag_items_data_item_variant); - ebml_w.writer.write(str::to_bytes(def_to_str(vid))); - ebml_w.end_tag(); -} - -#[cfg(not(stage0))] fn encode_variant_id(ebml_w: &mut writer::Encoder, vid: def_id) { ebml_w.start_tag(tag_items_data_item_variant); ebml_w.writer.write(str::to_bytes(def_to_str(vid))); ebml_w.end_tag(); } -#[cfg(stage0)] -pub fn write_type(ecx: @EncodeContext, ebml_w: &writer::Encoder, typ: ty::t) { - let ty_str_ctxt = @tyencode::ctxt { - diag: ecx.diag, - ds: def_to_str, - tcx: ecx.tcx, - reachable: |a| reachable(ecx, a), - abbrevs: tyencode::ac_use_abbrevs(ecx.type_abbrevs)}; - tyencode::enc_ty(ebml_w.writer, ty_str_ctxt, typ); -} - -#[cfg(not(stage0))] pub fn write_type(ecx: @EncodeContext, ebml_w: &mut writer::Encoder, typ: ty::t) { @@ -369,20 +221,6 @@ pub fn write_type(ecx: @EncodeContext, tyencode::enc_ty(ebml_w.writer, ty_str_ctxt, typ); } -#[cfg(stage0)] -pub fn write_vstore(ecx: @EncodeContext, - ebml_w: &writer::Encoder, - vstore: ty::vstore) { - let ty_str_ctxt = @tyencode::ctxt { - diag: ecx.diag, - ds: def_to_str, - tcx: ecx.tcx, - reachable: |a| reachable(ecx, a), - abbrevs: tyencode::ac_use_abbrevs(ecx.type_abbrevs)}; - tyencode::enc_vstore(ebml_w.writer, ty_str_ctxt, vstore); -} - -#[cfg(not(stage0))] pub fn write_vstore(ecx: @EncodeContext, ebml_w: &mut writer::Encoder, vstore: ty::vstore) { @@ -395,14 +233,6 @@ pub fn write_vstore(ecx: @EncodeContext, tyencode::enc_vstore(ebml_w.writer, ty_str_ctxt, vstore); } -#[cfg(stage0)] -fn encode_type(ecx: @EncodeContext, ebml_w: &writer::Encoder, typ: ty::t) { - ebml_w.start_tag(tag_items_data_item_type); - write_type(ecx, ebml_w, typ); - ebml_w.end_tag(); -} - -#[cfg(not(stage0))] fn encode_type(ecx: @EncodeContext, ebml_w: &mut writer::Encoder, typ: ty::t) { @@ -411,18 +241,6 @@ fn encode_type(ecx: @EncodeContext, ebml_w.end_tag(); } -#[cfg(stage0)] -fn encode_transformed_self_ty(ecx: @EncodeContext, - ebml_w: &writer::Encoder, - opt_typ: Option) { - for opt_typ.each |&typ| { - ebml_w.start_tag(tag_item_method_transformed_self_ty); - write_type(ecx, ebml_w, typ); - ebml_w.end_tag(); - } -} - -#[cfg(not(stage0))] fn encode_transformed_self_ty(ecx: @EncodeContext, ebml_w: &mut writer::Encoder, opt_typ: Option) { @@ -433,24 +251,6 @@ fn encode_transformed_self_ty(ecx: @EncodeContext, } } -#[cfg(stage0)] -fn encode_method_fty(ecx: @EncodeContext, - ebml_w: &writer::Encoder, - typ: &ty::BareFnTy) { - ebml_w.start_tag(tag_item_method_fty); - - let ty_str_ctxt = @tyencode::ctxt { - diag: ecx.diag, - ds: def_to_str, - tcx: ecx.tcx, - reachable: |a| reachable(ecx, a), - abbrevs: tyencode::ac_use_abbrevs(ecx.type_abbrevs)}; - tyencode::enc_bare_fn_ty(ebml_w.writer, ty_str_ctxt, typ); - - ebml_w.end_tag(); -} - -#[cfg(not(stage0))] fn encode_method_fty(ecx: @EncodeContext, ebml_w: &mut writer::Encoder, typ: &ty::BareFnTy) { @@ -467,23 +267,6 @@ fn encode_method_fty(ecx: @EncodeContext, ebml_w.end_tag(); } -#[cfg(stage0)] -fn encode_symbol(ecx: @EncodeContext, ebml_w: &writer::Encoder, id: node_id) { - ebml_w.start_tag(tag_items_data_item_symbol); - match ecx.item_symbols.find(&id) { - Some(x) => { - debug!("encode_symbol(id=%?, str=%s)", id, *x); - ebml_w.writer.write(str::to_bytes(*x)); - } - None => { - ecx.diag.handler().bug( - fmt!("encode_symbol: id not found %d", id)); - } - } - ebml_w.end_tag(); -} - -#[cfg(not(stage0))] fn encode_symbol(ecx: @EncodeContext, ebml_w: &mut writer::Encoder, id: node_id) { @@ -501,16 +284,6 @@ fn encode_symbol(ecx: @EncodeContext, ebml_w.end_tag(); } -#[cfg(stage0)] -fn encode_discriminant(ecx: @EncodeContext, - ebml_w: &writer::Encoder, - id: node_id) { - ebml_w.start_tag(tag_items_data_item_symbol); - ebml_w.writer.write(str::to_bytes(**ecx.discrim_symbols.get(&id))); - ebml_w.end_tag(); -} - -#[cfg(not(stage0))] fn encode_discriminant(ecx: @EncodeContext, ebml_w: &mut writer::Encoder, id: node_id) { @@ -519,16 +292,6 @@ fn encode_discriminant(ecx: @EncodeContext, ebml_w.end_tag(); } -#[cfg(stage0)] -fn encode_disr_val(_: @EncodeContext, - ebml_w: &writer::Encoder, - disr_val: int) { - ebml_w.start_tag(tag_disr_val); - ebml_w.writer.write(str::to_bytes(int::to_str(disr_val))); - ebml_w.end_tag(); -} - -#[cfg(not(stage0))] fn encode_disr_val(_: @EncodeContext, ebml_w: &mut writer::Encoder, disr_val: int) { @@ -537,65 +300,12 @@ fn encode_disr_val(_: @EncodeContext, ebml_w.end_tag(); } -#[cfg(stage0)] -fn encode_parent_item(ebml_w: &writer::Encoder, id: def_id) { - ebml_w.start_tag(tag_items_data_parent_item); - ebml_w.writer.write(str::to_bytes(def_to_str(id))); - ebml_w.end_tag(); -} - -#[cfg(not(stage0))] fn encode_parent_item(ebml_w: &mut writer::Encoder, id: def_id) { ebml_w.start_tag(tag_items_data_parent_item); ebml_w.writer.write(str::to_bytes(def_to_str(id))); ebml_w.end_tag(); } -#[cfg(stage0)] -fn encode_enum_variant_info(ecx: @EncodeContext, - ebml_w: &writer::Encoder, - id: node_id, - variants: &[variant], - path: &[ast_map::path_elt], - index: @mut ~[entry], - generics: &ast::Generics) { - debug!("encode_enum_variant_info(id=%?)", id); - - let mut disr_val = 0; - let mut i = 0; - let vi = ty::enum_variants(ecx.tcx, - ast::def_id { crate: local_crate, node: id }); - for variants.each |variant| { - index.push(entry {val: variant.node.id, pos: ebml_w.writer.tell()}); - ebml_w.start_tag(tag_items_data_item); - encode_def_id(ebml_w, local_def(variant.node.id)); - encode_family(ebml_w, 'v'); - encode_name(ecx, ebml_w, variant.node.name); - encode_parent_item(ebml_w, local_def(id)); - encode_type(ecx, ebml_w, - node_id_to_type(ecx.tcx, variant.node.id)); - match variant.node.kind { - ast::tuple_variant_kind(ref args) - if args.len() > 0 && generics.ty_params.len() == 0 => { - encode_symbol(ecx, ebml_w, variant.node.id); - } - ast::tuple_variant_kind(_) | ast::struct_variant_kind(_) => {} - } - encode_discriminant(ecx, ebml_w, variant.node.id); - if vi[i].disr_val != disr_val { - encode_disr_val(ecx, ebml_w, vi[i].disr_val); - disr_val = vi[i].disr_val; - } - encode_type_param_bounds(ebml_w, ecx, &generics.ty_params); - encode_path(ecx, ebml_w, path, - ast_map::path_name(variant.node.name)); - ebml_w.end_tag(); - disr_val += 1; - i += 1; - } -} - -#[cfg(not(stage0))] fn encode_enum_variant_info(ecx: @EncodeContext, ebml_w: &mut writer::Encoder, id: node_id, @@ -639,31 +349,6 @@ fn encode_enum_variant_info(ecx: @EncodeContext, } } -#[cfg(stage0)] -fn encode_path(ecx: @EncodeContext, - ebml_w: &writer::Encoder, - path: &[ast_map::path_elt], - name: ast_map::path_elt) { - fn encode_path_elt(ecx: @EncodeContext, ebml_w: &writer::Encoder, - elt: ast_map::path_elt) { - let (tag, name) = match elt { - ast_map::path_mod(name) => (tag_path_elt_mod, name), - ast_map::path_name(name) => (tag_path_elt_name, name) - }; - - ebml_w.wr_tagged_str(tag, *ecx.tcx.sess.str_of(name)); - } - - do ebml_w.wr_tag(tag_path) { - ebml_w.wr_tagged_u32(tag_path_len, (path.len() + 1) as u32); - for path.each |pe| { - encode_path_elt(ecx, ebml_w, *pe); - } - encode_path_elt(ecx, ebml_w, name); - } -} - -#[cfg(not(stage0))] fn encode_path(ecx: @EncodeContext, ebml_w: &mut writer::Encoder, path: &[ast_map::path_elt], @@ -688,9 +373,8 @@ fn encode_path(ecx: @EncodeContext, ebml_w.end_tag(); } -#[cfg(stage0)] fn encode_info_for_mod(ecx: @EncodeContext, - ebml_w: &writer::Encoder, + ebml_w: &mut writer::Encoder, md: &_mod, id: node_id, path: &[ast_map::path_elt], @@ -750,101 +434,15 @@ fn encode_info_for_mod(ecx: @EncodeContext, ebml_w.end_tag(); } -#[cfg(not(stage0))] -fn encode_info_for_mod(ecx: @EncodeContext, - ebml_w: &mut writer::Encoder, - md: &_mod, - id: node_id, - path: &[ast_map::path_elt], - name: ident) { - ebml_w.start_tag(tag_items_data_item); - encode_def_id(ebml_w, local_def(id)); - encode_family(ebml_w, 'm'); - encode_name(ecx, ebml_w, name); - debug!("(encoding info for module) encoding info for module ID %d", id); +fn encode_struct_field_family(ebml_w: &mut writer::Encoder, + visibility: visibility) { + encode_family(ebml_w, match visibility { + public => 'g', + private => 'j', + inherited => 'N' + }); +} - // Encode info about all the module children. - for md.items.each |item| { - match item.node { - item_impl(*) => { - let (ident, did) = (item.ident, item.id); - debug!("(encoding info for module) ... encoding impl %s \ - (%?/%?)", - *ecx.tcx.sess.str_of(ident), - did, - ast_map::node_id_to_str(ecx.tcx.items, did, ecx.tcx - .sess.parse_sess.interner)); - - ebml_w.start_tag(tag_mod_impl); - ebml_w.wr_str(def_to_str(local_def(did))); - ebml_w.end_tag(); - } - _ => {} // FIXME #4573: Encode these too. - } - } - - encode_path(ecx, ebml_w, path, ast_map::path_mod(name)); - - // Encode the reexports of this module. - debug!("(encoding info for module) encoding reexports for %d", id); - match ecx.reexports2.find(&id) { - Some(ref exports) => { - debug!("(encoding info for module) found reexports for %d", id); - for exports.each |exp| { - debug!("(encoding info for module) reexport '%s' for %d", - *exp.name, id); - ebml_w.start_tag(tag_items_data_item_reexport); - ebml_w.start_tag(tag_items_data_item_reexport_def_id); - ebml_w.wr_str(def_to_str(exp.def_id)); - ebml_w.end_tag(); - ebml_w.start_tag(tag_items_data_item_reexport_name); - ebml_w.wr_str(*exp.name); - ebml_w.end_tag(); - ebml_w.end_tag(); - } - } - None => { - debug!("(encoding info for module) found no reexports for %d", - id); - } - } - - ebml_w.end_tag(); -} - -#[cfg(stage0)] -fn encode_struct_field_family(ebml_w: &writer::Encoder, - visibility: visibility) { - encode_family(ebml_w, match visibility { - public => 'g', - private => 'j', - inherited => 'N' - }); -} - -#[cfg(not(stage0))] -fn encode_struct_field_family(ebml_w: &mut writer::Encoder, - visibility: visibility) { - encode_family(ebml_w, match visibility { - public => 'g', - private => 'j', - inherited => 'N' - }); -} - -#[cfg(stage0)] -fn encode_visibility(ebml_w: &writer::Encoder, visibility: visibility) { - ebml_w.start_tag(tag_items_data_item_visibility); - let ch = match visibility { - public => 'y', - private => 'n', - inherited => 'i', - }; - ebml_w.wr_str(str::from_char(ch)); - ebml_w.end_tag(); -} - -#[cfg(not(stage0))] fn encode_visibility(ebml_w: &mut writer::Encoder, visibility: visibility) { ebml_w.start_tag(tag_items_data_item_visibility); let ch = match visibility { @@ -856,52 +454,6 @@ fn encode_visibility(ebml_w: &mut writer::Encoder, visibility: visibility) { ebml_w.end_tag(); } -#[cfg(stage0)] -fn encode_self_type(ebml_w: &writer::Encoder, self_type: ast::self_ty_) { - ebml_w.start_tag(tag_item_trait_method_self_ty); - - // Encode the base self type. - match self_type { - sty_static => { - ebml_w.writer.write(&[ 's' as u8 ]); - } - sty_value => { - ebml_w.writer.write(&[ 'v' as u8 ]); - } - sty_region(_, m) => { - // FIXME(#4846) encode custom lifetime - ebml_w.writer.write(&[ '&' as u8 ]); - encode_mutability(ebml_w, m); - } - sty_box(m) => { - ebml_w.writer.write(&[ '@' as u8 ]); - encode_mutability(ebml_w, m); - } - sty_uniq(m) => { - ebml_w.writer.write(&[ '~' as u8 ]); - encode_mutability(ebml_w, m); - } - } - - ebml_w.end_tag(); - - fn encode_mutability(ebml_w: &writer::Encoder, - m: ast::mutability) { - match m { - m_imm => { - ebml_w.writer.write(&[ 'i' as u8 ]); - } - m_mutbl => { - ebml_w.writer.write(&[ 'm' as u8 ]); - } - m_const => { - ebml_w.writer.write(&[ 'c' as u8 ]); - } - } - } -} - -#[cfg(not(stage0))] fn encode_self_type(ebml_w: &mut writer::Encoder, self_type: ast::self_ty_) { ebml_w.start_tag(tag_item_trait_method_self_ty); @@ -946,14 +498,6 @@ fn encode_self_type(ebml_w: &mut writer::Encoder, self_type: ast::self_ty_) { } } -#[cfg(stage0)] -fn encode_method_sort(ebml_w: &writer::Encoder, sort: char) { - ebml_w.start_tag(tag_item_trait_method_sort); - ebml_w.writer.write(&[ sort as u8 ]); - ebml_w.end_tag(); -} - -#[cfg(not(stage0))] fn encode_method_sort(ebml_w: &mut writer::Encoder, sort: char) { ebml_w.start_tag(tag_item_trait_method_sort); ebml_w.writer.write(&[ sort as u8 ]); @@ -961,47 +505,6 @@ fn encode_method_sort(ebml_w: &mut writer::Encoder, sort: char) { } /* Returns an index of items in this class */ -#[cfg(stage0)] -fn encode_info_for_struct(ecx: @EncodeContext, - ebml_w: &writer::Encoder, - path: &[ast_map::path_elt], - fields: &[@struct_field], - global_index: @mut~[entry]) - -> ~[entry] { - /* Each class has its own index, since different classes - may have fields with the same name */ - let index = @mut ~[]; - let tcx = ecx.tcx; - /* We encode both private and public fields -- need to include - private fields to get the offsets right */ - for fields.each |field| { - let (nm, mt, vis) = match field.node.kind { - named_field(nm, mt, vis) => (nm, mt, vis), - unnamed_field => ( - special_idents::unnamed_field, - struct_immutable, - inherited - ) - }; - - let id = field.node.id; - index.push(entry {val: id, pos: ebml_w.writer.tell()}); - global_index.push(entry {val: id, pos: ebml_w.writer.tell()}); - ebml_w.start_tag(tag_items_data_item); - debug!("encode_info_for_struct: doing %s %d", - *tcx.sess.str_of(nm), id); - encode_struct_field_family(ebml_w, vis); - encode_name(ecx, ebml_w, nm); - encode_path(ecx, ebml_w, path, ast_map::path_name(nm)); - encode_type(ecx, ebml_w, node_id_to_type(tcx, id)); - encode_mutability(ebml_w, mt); - encode_def_id(ebml_w, local_def(id)); - ebml_w.end_tag(); - } - /*bad*/copy *index -} - -#[cfg(not(stage0))] fn encode_info_for_struct(ecx: @EncodeContext, ebml_w: &mut writer::Encoder, path: &[ast_map::path_elt], @@ -1042,37 +545,6 @@ fn encode_info_for_struct(ecx: @EncodeContext, } // This is for encoding info for ctors and dtors -#[cfg(stage0)] -fn encode_info_for_ctor(ecx: @EncodeContext, - ebml_w: &writer::Encoder, - id: node_id, - ident: ident, - path: &[ast_map::path_elt], - item: Option, - generics: &ast::Generics) { - ebml_w.start_tag(tag_items_data_item); - encode_name(ecx, ebml_w, ident); - encode_def_id(ebml_w, local_def(id)); - encode_family(ebml_w, purity_fn_family(ast::impure_fn)); - encode_type_param_bounds(ebml_w, ecx, &generics.ty_params); - let its_ty = node_id_to_type(ecx.tcx, id); - debug!("fn name = %s ty = %s its node id = %d", - *ecx.tcx.sess.str_of(ident), - ty_to_str(ecx.tcx, its_ty), id); - encode_type(ecx, ebml_w, its_ty); - encode_path(ecx, ebml_w, path, ast_map::path_name(ident)); - match item { - Some(it) => { - (ecx.encode_inlined_item)(ecx, ebml_w, path, it); - } - None => { - encode_symbol(ecx, ebml_w, id); - } - } - ebml_w.end_tag(); -} - -#[cfg(not(stage0))] fn encode_info_for_ctor(ecx: @EncodeContext, ebml_w: &mut writer::Encoder, id: node_id, @@ -1094,512 +566,121 @@ fn encode_info_for_ctor(ecx: @EncodeContext, match item { Some(it) => { (ecx.encode_inlined_item)(ecx, ebml_w, path, it); - } - None => { - encode_symbol(ecx, ebml_w, id); - } - } - ebml_w.end_tag(); -} - -#[cfg(stage0)] -fn encode_info_for_struct_ctor(ecx: @EncodeContext, - ebml_w: &writer::Encoder, - path: &[ast_map::path_elt], - name: ast::ident, - ctor_id: node_id, - index: @mut ~[entry]) { - index.push(entry { val: ctor_id, pos: ebml_w.writer.tell() }); - - ebml_w.start_tag(tag_items_data_item); - encode_def_id(ebml_w, local_def(ctor_id)); - encode_family(ebml_w, 'f'); - encode_name(ecx, ebml_w, name); - encode_type(ecx, ebml_w, node_id_to_type(ecx.tcx, ctor_id)); - encode_path(ecx, ebml_w, path, ast_map::path_name(name)); - - if ecx.item_symbols.contains_key(&ctor_id) { - encode_symbol(ecx, ebml_w, ctor_id); - } - - ebml_w.end_tag(); -} - -#[cfg(not(stage0))] -fn encode_info_for_struct_ctor(ecx: @EncodeContext, - ebml_w: &mut writer::Encoder, - path: &[ast_map::path_elt], - name: ast::ident, - ctor_id: node_id, - index: @mut ~[entry]) { - index.push(entry { val: ctor_id, pos: ebml_w.writer.tell() }); - - ebml_w.start_tag(tag_items_data_item); - encode_def_id(ebml_w, local_def(ctor_id)); - encode_family(ebml_w, 'f'); - encode_name(ecx, ebml_w, name); - encode_type(ecx, ebml_w, node_id_to_type(ecx.tcx, ctor_id)); - encode_path(ecx, ebml_w, path, ast_map::path_name(name)); - - if ecx.item_symbols.contains_key(&ctor_id) { - encode_symbol(ecx, ebml_w, ctor_id); - } - - ebml_w.end_tag(); -} - -#[cfg(stage0)] -fn encode_method_ty_fields(ecx: @EncodeContext, - ebml_w: &writer::Encoder, - method_ty: &ty::method) { - encode_def_id(ebml_w, method_ty.def_id); - encode_name(ecx, ebml_w, method_ty.ident); - encode_ty_type_param_defs(ebml_w, ecx, - method_ty.generics.type_param_defs, - tag_item_method_tps); - encode_transformed_self_ty(ecx, ebml_w, method_ty.transformed_self_ty); - encode_method_fty(ecx, ebml_w, &method_ty.fty); - encode_visibility(ebml_w, method_ty.vis); - encode_self_type(ebml_w, method_ty.self_ty); -} - -#[cfg(not(stage0))] -fn encode_method_ty_fields(ecx: @EncodeContext, - ebml_w: &mut writer::Encoder, - method_ty: &ty::method) { - encode_def_id(ebml_w, method_ty.def_id); - encode_name(ecx, ebml_w, method_ty.ident); - encode_ty_type_param_defs(ebml_w, ecx, - method_ty.generics.type_param_defs, - tag_item_method_tps); - encode_transformed_self_ty(ecx, ebml_w, method_ty.transformed_self_ty); - encode_method_fty(ecx, ebml_w, &method_ty.fty); - encode_visibility(ebml_w, method_ty.vis); - encode_self_type(ebml_w, method_ty.self_ty); -} - -#[cfg(stage0)] -fn encode_info_for_method(ecx: @EncodeContext, - ebml_w: &writer::Encoder, - impl_path: &[ast_map::path_elt], - should_inline: bool, - parent_id: node_id, - m: @method, - owner_generics: &ast::Generics, - method_generics: &ast::Generics) { - debug!("encode_info_for_method: %d %s %u %u", m.id, - *ecx.tcx.sess.str_of(m.ident), - owner_generics.ty_params.len(), - method_generics.ty_params.len()); - ebml_w.start_tag(tag_items_data_item); - - let method_def_id = local_def(m.id); - let method_ty: @ty::method = ty::method(ecx.tcx, method_def_id); - encode_method_ty_fields(ecx, ebml_w, method_ty); - - match m.self_ty.node { - ast::sty_static => { - encode_family(ebml_w, purity_static_method_family(m.purity)); - } - _ => encode_family(ebml_w, purity_fn_family(m.purity)) - } - - let mut combined_ty_params = opt_vec::Empty; - combined_ty_params.push_all(&owner_generics.ty_params); - combined_ty_params.push_all(&method_generics.ty_params); - let len = combined_ty_params.len(); - encode_type_param_bounds(ebml_w, ecx, &combined_ty_params); - - encode_type(ecx, ebml_w, node_id_to_type(ecx.tcx, m.id)); - encode_path(ecx, ebml_w, impl_path, ast_map::path_name(m.ident)); - - if len > 0u || should_inline { - (ecx.encode_inlined_item)( - ecx, ebml_w, impl_path, - ii_method(local_def(parent_id), m)); - } else { - encode_symbol(ecx, ebml_w, m.id); - } - - ebml_w.end_tag(); -} - -#[cfg(not(stage0))] -fn encode_info_for_method(ecx: @EncodeContext, - ebml_w: &mut writer::Encoder, - impl_path: &[ast_map::path_elt], - should_inline: bool, - parent_id: node_id, - m: @method, - owner_generics: &ast::Generics, - method_generics: &ast::Generics) { - debug!("encode_info_for_method: %d %s %u %u", m.id, - *ecx.tcx.sess.str_of(m.ident), - owner_generics.ty_params.len(), - method_generics.ty_params.len()); - ebml_w.start_tag(tag_items_data_item); - - let method_def_id = local_def(m.id); - let method_ty: @ty::method = ty::method(ecx.tcx, method_def_id); - encode_method_ty_fields(ecx, ebml_w, method_ty); - - match m.self_ty.node { - ast::sty_static => { - encode_family(ebml_w, purity_static_method_family(m.purity)); - } - _ => encode_family(ebml_w, purity_fn_family(m.purity)) - } - - let mut combined_ty_params = opt_vec::Empty; - combined_ty_params.push_all(&owner_generics.ty_params); - combined_ty_params.push_all(&method_generics.ty_params); - let len = combined_ty_params.len(); - encode_type_param_bounds(ebml_w, ecx, &combined_ty_params); - - encode_type(ecx, ebml_w, node_id_to_type(ecx.tcx, m.id)); - encode_path(ecx, ebml_w, impl_path, ast_map::path_name(m.ident)); - - if len > 0u || should_inline { - (ecx.encode_inlined_item)( - ecx, ebml_w, impl_path, - ii_method(local_def(parent_id), m)); - } else { - encode_symbol(ecx, ebml_w, m.id); - } - - ebml_w.end_tag(); -} - -fn purity_fn_family(p: purity) -> char { - match p { - unsafe_fn => 'u', - pure_fn => 'p', - impure_fn => 'f', - extern_fn => 'e' - } -} - -fn purity_static_method_family(p: purity) -> char { - match p { - unsafe_fn => 'U', - pure_fn => 'P', - impure_fn => 'F', - _ => fail!(~"extern fn can't be static") - } -} - - -fn should_inline(attrs: &[attribute]) -> bool { - match attr::find_inline_attr(attrs) { - attr::ia_none | attr::ia_never => false, - attr::ia_hint | attr::ia_always => true - } -} - -#[cfg(stage0)] -fn encode_info_for_item(ecx: @EncodeContext, - ebml_w: &writer::Encoder, - item: @item, - index: @mut ~[entry], - path: &[ast_map::path_elt]) { - let tcx = ecx.tcx; - let must_write = - match item.node { - item_enum(_, _) | item_impl(*) | item_trait(*) | item_struct(*) | - item_mod(*) | item_foreign_mod(*) | item_const(*) => true, - _ => false - }; - if !must_write && !reachable(ecx, item.id) { return; } - - fn add_to_index_(item: @item, ebml_w: &writer::Encoder, - index: @mut ~[entry]) { - index.push(entry { val: item.id, pos: ebml_w.writer.tell() }); - } - let add_to_index: &fn() = || add_to_index_(item, ebml_w, index); - - debug!("encoding info for item at %s", - ecx.tcx.sess.codemap.span_to_str(item.span)); - - match item.node { - item_const(_, _) => { - add_to_index(); - ebml_w.start_tag(tag_items_data_item); - encode_def_id(ebml_w, local_def(item.id)); - encode_family(ebml_w, 'c'); - encode_type(ecx, ebml_w, node_id_to_type(tcx, item.id)); - encode_symbol(ecx, ebml_w, item.id); - encode_path(ecx, ebml_w, path, ast_map::path_name(item.ident)); - (ecx.encode_inlined_item)(ecx, ebml_w, path, ii_item(item)); - ebml_w.end_tag(); - } - item_fn(_, purity, _, ref generics, _) => { - add_to_index(); - ebml_w.start_tag(tag_items_data_item); - encode_def_id(ebml_w, local_def(item.id)); - encode_family(ebml_w, purity_fn_family(purity)); - let tps_len = generics.ty_params.len(); - encode_type_param_bounds(ebml_w, ecx, &generics.ty_params); - encode_type(ecx, ebml_w, node_id_to_type(tcx, item.id)); - encode_path(ecx, ebml_w, path, ast_map::path_name(item.ident)); - encode_attributes(ebml_w, item.attrs); - if tps_len > 0u || should_inline(item.attrs) { - (ecx.encode_inlined_item)(ecx, ebml_w, path, ii_item(item)); - } else { - encode_symbol(ecx, ebml_w, item.id); - } - ebml_w.end_tag(); - } - item_mod(ref m) => { - add_to_index(); - encode_info_for_mod(ecx, ebml_w, m, item.id, path, item.ident); - } - item_foreign_mod(_) => { - add_to_index(); - ebml_w.start_tag(tag_items_data_item); - encode_def_id(ebml_w, local_def(item.id)); - encode_family(ebml_w, 'n'); - encode_name(ecx, ebml_w, item.ident); - encode_path(ecx, ebml_w, path, ast_map::path_name(item.ident)); - ebml_w.end_tag(); - } - item_ty(_, ref generics) => { - add_to_index(); - ebml_w.start_tag(tag_items_data_item); - encode_def_id(ebml_w, local_def(item.id)); - encode_family(ebml_w, 'y'); - encode_type_param_bounds(ebml_w, ecx, &generics.ty_params); - encode_type(ecx, ebml_w, node_id_to_type(tcx, item.id)); - encode_name(ecx, ebml_w, item.ident); - encode_path(ecx, ebml_w, path, ast_map::path_name(item.ident)); - encode_region_param(ecx, ebml_w, item); - ebml_w.end_tag(); - } - item_enum(ref enum_definition, ref generics) => { - add_to_index(); - do ebml_w.wr_tag(tag_items_data_item) { - encode_def_id(ebml_w, local_def(item.id)); - encode_family(ebml_w, 't'); - encode_type_param_bounds(ebml_w, ecx, &generics.ty_params); - encode_type(ecx, ebml_w, node_id_to_type(tcx, item.id)); - encode_name(ecx, ebml_w, item.ident); - for (*enum_definition).variants.each |v| { - encode_variant_id(ebml_w, local_def(v.node.id)); - } - (ecx.encode_inlined_item)(ecx, ebml_w, path, ii_item(item)); - encode_path(ecx, ebml_w, path, ast_map::path_name(item.ident)); - encode_region_param(ecx, ebml_w, item); - } - encode_enum_variant_info(ecx, - ebml_w, - item.id, - (*enum_definition).variants, - path, - index, - generics); - } - item_struct(struct_def, ref generics) => { - /* First, encode the fields - These come first because we need to write them to make - the index, and the index needs to be in the item for the - class itself */ - let idx = encode_info_for_struct(ecx, ebml_w, path, - struct_def.fields, index); - - /* Index the class*/ - add_to_index(); - - /* Now, make an item for the class itself */ - ebml_w.start_tag(tag_items_data_item); - encode_def_id(ebml_w, local_def(item.id)); - encode_family(ebml_w, 'S'); - encode_type_param_bounds(ebml_w, ecx, &generics.ty_params); - encode_type(ecx, ebml_w, node_id_to_type(tcx, item.id)); - - // If this is a tuple- or enum-like struct, encode the type of the - // constructor. - if struct_def.fields.len() > 0 && - struct_def.fields[0].node.kind == ast::unnamed_field { - let ctor_id = match struct_def.ctor_id { - Some(ctor_id) => ctor_id, - None => ecx.tcx.sess.bug(~"struct def didn't have ctor id"), - }; - - encode_info_for_struct_ctor(ecx, - ebml_w, - path, - item.ident, - ctor_id, - index); - } - - encode_name(ecx, ebml_w, item.ident); - encode_path(ecx, ebml_w, path, ast_map::path_name(item.ident)); - encode_region_param(ecx, ebml_w, item); - - /* Encode def_ids for each field and method - for methods, write all the stuff get_trait_method - needs to know*/ - for struct_def.fields.each |f| { - match f.node.kind { - named_field(ident, _, vis) => { - ebml_w.start_tag(tag_item_field); - encode_struct_field_family(ebml_w, vis); - encode_name(ecx, ebml_w, ident); - encode_def_id(ebml_w, local_def(f.node.id)); - ebml_w.end_tag(); - } - unnamed_field => { - ebml_w.start_tag(tag_item_unnamed_field); - encode_def_id(ebml_w, local_def(f.node.id)); - ebml_w.end_tag(); - } - } - } - - /* Each class has its own index -- encode it */ - let bkts = create_index(idx); - encode_index(ebml_w, bkts, write_int); - ebml_w.end_tag(); - } - item_impl(ref generics, opt_trait, ty, ref methods) => { - add_to_index(); - ebml_w.start_tag(tag_items_data_item); - encode_def_id(ebml_w, local_def(item.id)); - encode_family(ebml_w, 'i'); - encode_region_param(ecx, ebml_w, item); - encode_type_param_bounds(ebml_w, ecx, &generics.ty_params); - encode_type(ecx, ebml_w, node_id_to_type(tcx, item.id)); - encode_name(ecx, ebml_w, item.ident); - encode_attributes(ebml_w, item.attrs); - match ty.node { - ast::ty_path(path, _) if path.idents.len() == 1 => { - encode_impl_type_basename(ecx, ebml_w, - ast_util::path_to_ident(path)); - } - _ => {} - } - for methods.each |m| { - ebml_w.start_tag(tag_item_impl_method); - let method_def_id = local_def(m.id); - ebml_w.writer.write(str::to_bytes(def_to_str(method_def_id))); - ebml_w.end_tag(); - } - for opt_trait.each |ast_trait_ref| { - let trait_ref = ty::node_id_to_trait_ref(ecx.tcx, ast_trait_ref.ref_id); - encode_trait_ref(ebml_w, ecx, trait_ref, tag_item_trait_ref); - } - encode_path(ecx, ebml_w, path, ast_map::path_name(item.ident)); - ebml_w.end_tag(); - - // >:-< - let mut impl_path = vec::append(~[], path); - impl_path += ~[ast_map::path_name(item.ident)]; - - for methods.each |m| { - index.push(entry {val: m.id, pos: ebml_w.writer.tell()}); - encode_info_for_method(ecx, - ebml_w, - impl_path, - should_inline(m.attrs), - item.id, - *m, - generics, - &m.generics); - } - } - item_trait(ref generics, ref super_traits, ref ms) => { - add_to_index(); - ebml_w.start_tag(tag_items_data_item); - encode_def_id(ebml_w, local_def(item.id)); - encode_family(ebml_w, 'I'); - encode_region_param(ecx, ebml_w, item); - encode_type_param_bounds(ebml_w, ecx, &generics.ty_params); - let trait_def = ty::lookup_trait_def(tcx, local_def(item.id)); - encode_trait_ref(ebml_w, ecx, trait_def.trait_ref, tag_item_trait_ref); - encode_name(ecx, ebml_w, item.ident); - encode_attributes(ebml_w, item.attrs); - for ty::trait_method_def_ids(tcx, local_def(item.id)).each |&method_def_id| { - ebml_w.start_tag(tag_item_trait_method); - encode_def_id(ebml_w, method_def_id); - ebml_w.end_tag(); - } - encode_path(ecx, ebml_w, path, ast_map::path_name(item.ident)); - for super_traits.each |ast_trait_ref| { - let trait_ref = ty::node_id_to_trait_ref(ecx.tcx, ast_trait_ref.ref_id); - encode_trait_ref(ebml_w, ecx, trait_ref, tag_item_super_trait_ref); + } + None => { + encode_symbol(ecx, ebml_w, id); + } } ebml_w.end_tag(); +} - // Now output the method info for each method. - for ty::trait_method_def_ids(tcx, local_def(item.id)).eachi |i, &method_def_id| { - assert!(method_def_id.crate == ast::local_crate); +fn encode_info_for_struct_ctor(ecx: @EncodeContext, + ebml_w: &mut writer::Encoder, + path: &[ast_map::path_elt], + name: ast::ident, + ctor_id: node_id, + index: @mut ~[entry]) { + index.push(entry { val: ctor_id, pos: ebml_w.writer.tell() }); - let method_ty: @ty::method = ty::method(tcx, method_def_id); + ebml_w.start_tag(tag_items_data_item); + encode_def_id(ebml_w, local_def(ctor_id)); + encode_family(ebml_w, 'f'); + encode_name(ecx, ebml_w, name); + encode_type(ecx, ebml_w, node_id_to_type(ecx.tcx, ctor_id)); + encode_path(ecx, ebml_w, path, ast_map::path_name(name)); - index.push(entry {val: method_def_id.node, pos: ebml_w.writer.tell()}); + if ecx.item_symbols.contains_key(&ctor_id) { + encode_symbol(ecx, ebml_w, ctor_id); + } - ebml_w.start_tag(tag_items_data_item); + ebml_w.end_tag(); +} - encode_method_ty_fields(ecx, ebml_w, method_ty); +fn encode_method_ty_fields(ecx: @EncodeContext, + ebml_w: &mut writer::Encoder, + method_ty: &ty::method) { + encode_def_id(ebml_w, method_ty.def_id); + encode_name(ecx, ebml_w, method_ty.ident); + encode_ty_type_param_defs(ebml_w, ecx, + method_ty.generics.type_param_defs, + tag_item_method_tps); + encode_transformed_self_ty(ecx, ebml_w, method_ty.transformed_self_ty); + encode_method_fty(ecx, ebml_w, &method_ty.fty); + encode_visibility(ebml_w, method_ty.vis); + encode_self_type(ebml_w, method_ty.self_ty); +} - encode_parent_item(ebml_w, local_def(item.id)); +fn encode_info_for_method(ecx: @EncodeContext, + ebml_w: &mut writer::Encoder, + impl_path: &[ast_map::path_elt], + should_inline: bool, + parent_id: node_id, + m: @method, + owner_generics: &ast::Generics, + method_generics: &ast::Generics) { + debug!("encode_info_for_method: %d %s %u %u", m.id, + *ecx.tcx.sess.str_of(m.ident), + owner_generics.ty_params.len(), + method_generics.ty_params.len()); + ebml_w.start_tag(tag_items_data_item); - let mut trait_path = vec::append(~[], path); - trait_path.push(ast_map::path_name(item.ident)); - encode_path(ecx, ebml_w, trait_path, ast_map::path_name(method_ty.ident)); + let method_def_id = local_def(m.id); + let method_ty: @ty::method = ty::method(ecx.tcx, method_def_id); + encode_method_ty_fields(ecx, ebml_w, method_ty); - match method_ty.self_ty { - sty_static => { - encode_family(ebml_w, - purity_static_method_family( - method_ty.fty.purity)); + match m.self_ty.node { + ast::sty_static => { + encode_family(ebml_w, purity_static_method_family(m.purity)); + } + _ => encode_family(ebml_w, purity_fn_family(m.purity)) + } - let tpt = ty::lookup_item_type(tcx, method_def_id); - encode_ty_type_param_defs(ebml_w, ecx, - tpt.generics.type_param_defs, - tag_items_data_item_ty_param_bounds); - encode_type(ecx, ebml_w, tpt.ty); - } + let mut combined_ty_params = opt_vec::Empty; + combined_ty_params.push_all(&owner_generics.ty_params); + combined_ty_params.push_all(&method_generics.ty_params); + let len = combined_ty_params.len(); + encode_type_param_bounds(ebml_w, ecx, &combined_ty_params); - _ => { - encode_family(ebml_w, - purity_fn_family( - method_ty.fty.purity)); - } - } + encode_type(ecx, ebml_w, node_id_to_type(ecx.tcx, m.id)); + encode_path(ecx, ebml_w, impl_path, ast_map::path_name(m.ident)); - match ms[i] { - required(_) => { - encode_method_sort(ebml_w, 'r'); - } + if len > 0u || should_inline { + (ecx.encode_inlined_item)( + ecx, ebml_w, impl_path, + ii_method(local_def(parent_id), m)); + } else { + encode_symbol(ecx, ebml_w, m.id); + } - provided(m) => { - // This is obviously a bogus assert but I don't think this - // ever worked before anyhow...near as I can tell, before - // we would emit two items. - if method_ty.self_ty == sty_static { - tcx.sess.span_unimpl( - item.span, - fmt!("Method %s is both provided and static", - *tcx.sess.intr().get(method_ty.ident))); - } - encode_type_param_bounds(ebml_w, ecx, - &m.generics.ty_params); - encode_method_sort(ebml_w, 'p'); - (ecx.encode_inlined_item)( - ecx, ebml_w, path, - ii_method(local_def(item.id), m)); - } - } + ebml_w.end_tag(); +} - ebml_w.end_tag(); - } - } - item_mac(*) => fail!(~"item macros unimplemented") +fn purity_fn_family(p: purity) -> char { + match p { + unsafe_fn => 'u', + pure_fn => 'p', + impure_fn => 'f', + extern_fn => 'e' + } +} + +fn purity_static_method_family(p: purity) -> char { + match p { + unsafe_fn => 'U', + pure_fn => 'P', + impure_fn => 'F', + _ => fail!(~"extern fn can't be static") + } +} + + +fn should_inline(attrs: &[attribute]) -> bool { + match attr::find_inline_attr(attrs) { + attr::ia_none | attr::ia_never => false, + attr::ia_hint | attr::ia_always => true } } -#[cfg(not(stage0))] fn encode_info_for_item(ecx: @EncodeContext, ebml_w: &mut writer::Encoder, item: @item, @@ -1904,42 +985,6 @@ fn encode_info_for_item(ecx: @EncodeContext, } } -#[cfg(stage0)] -fn encode_info_for_foreign_item(ecx: @EncodeContext, - ebml_w: &writer::Encoder, - nitem: @foreign_item, - index: @mut ~[entry], - path: ast_map::path, - abi: AbiSet) { - if !reachable(ecx, nitem.id) { return; } - index.push(entry { val: nitem.id, pos: ebml_w.writer.tell() }); - - ebml_w.start_tag(tag_items_data_item); - match nitem.node { - foreign_item_fn(_, purity, ref generics) => { - encode_def_id(ebml_w, local_def(nitem.id)); - encode_family(ebml_w, purity_fn_family(purity)); - encode_type_param_bounds(ebml_w, ecx, &generics.ty_params); - encode_type(ecx, ebml_w, node_id_to_type(ecx.tcx, nitem.id)); - if abi.is_intrinsic() { - (ecx.encode_inlined_item)(ecx, ebml_w, path, ii_foreign(nitem)); - } else { - encode_symbol(ecx, ebml_w, nitem.id); - } - encode_path(ecx, ebml_w, path, ast_map::path_name(nitem.ident)); - } - foreign_item_const(*) => { - encode_def_id(ebml_w, local_def(nitem.id)); - encode_family(ebml_w, 'c'); - encode_type(ecx, ebml_w, node_id_to_type(ecx.tcx, nitem.id)); - encode_symbol(ecx, ebml_w, nitem.id); - encode_path(ecx, ebml_w, path, ast_map::path_name(nitem.ident)); - } - } - ebml_w.end_tag(); -} - -#[cfg(not(stage0))] fn encode_info_for_foreign_item(ecx: @EncodeContext, ebml_w: &mut writer::Encoder, nitem: @foreign_item, @@ -1974,54 +1019,6 @@ fn encode_info_for_foreign_item(ecx: @EncodeContext, ebml_w.end_tag(); } -#[cfg(stage0)] -fn encode_info_for_items(ecx: @EncodeContext, - ebml_w: &writer::Encoder, - crate: &crate) - -> ~[entry] { - let index = @mut ~[]; - ebml_w.start_tag(tag_items_data); - index.push(entry { val: crate_node_id, pos: ebml_w.writer.tell() }); - encode_info_for_mod(ecx, ebml_w, &crate.node.module, - crate_node_id, ~[], - syntax::parse::token::special_idents::invalid); - visit::visit_crate(crate, (), visit::mk_vt(@visit::Visitor { - visit_expr: |_e, _cx, _v| { }, - visit_item: { - let ebml_w = copy *ebml_w; - |i, cx, v| { - visit::visit_item(i, cx, v); - match *ecx.tcx.items.get(&i.id) { - ast_map::node_item(_, pt) => { - encode_info_for_item(ecx, &ebml_w, i, - index, *pt); - } - _ => fail!(~"bad item") - } - } - }, - visit_foreign_item: { - let ebml_w = copy *ebml_w; - |ni, cx, v| { - visit::visit_foreign_item(ni, cx, v); - match *ecx.tcx.items.get(&ni.id) { - ast_map::node_foreign_item(_, abi, _, pt) => { - encode_info_for_foreign_item(ecx, &ebml_w, ni, - index, /*bad*/copy *pt, - abi); - } - // case for separate item and foreign-item tables - _ => fail!(~"bad foreign item") - } - } - }, - ..*visit::default_visitor() - })); - ebml_w.end_tag(); - return /*bad*/copy *index; -} - -#[cfg(not(stage0))] fn encode_info_for_items(ecx: @EncodeContext, ebml_w: &mut writer::Encoder, crate: &crate) @@ -2077,51 +1074,20 @@ fn encode_info_for_items(ecx: @EncodeContext, fn create_index(index: ~[entry]) -> ~[@~[entry]] { - let mut buckets: ~[@mut ~[entry]] = ~[]; - for uint::range(0u, 256u) |_i| { buckets.push(@mut ~[]); }; - for index.each |elt| { - let h = elt.val.hash() as uint; - buckets[h % 256].push(*elt); - } - - let mut buckets_frozen = ~[]; - for buckets.each |bucket| { - buckets_frozen.push(@/*bad*/copy **bucket); - } - return buckets_frozen; -} - -#[cfg(stage0)] -fn encode_index(ebml_w: &writer::Encoder, - buckets: ~[@~[entry]], - write_fn: &fn(@io::Writer, &T)) { - let writer = ebml_w.writer; - ebml_w.start_tag(tag_index); - let mut bucket_locs: ~[uint] = ~[]; - ebml_w.start_tag(tag_index_buckets); - for buckets.each |bucket| { - bucket_locs.push(ebml_w.writer.tell()); - ebml_w.start_tag(tag_index_buckets_bucket); - for vec::each(**bucket) |elt| { - ebml_w.start_tag(tag_index_buckets_bucket_elt); - assert!(elt.pos < 0xffff_ffff); - writer.write_be_u32(elt.pos as u32); - write_fn(writer, &elt.val); - ebml_w.end_tag(); - } - ebml_w.end_tag(); + let mut buckets: ~[@mut ~[entry]] = ~[]; + for uint::range(0u, 256u) |_i| { buckets.push(@mut ~[]); }; + for index.each |elt| { + let h = elt.val.hash() as uint; + buckets[h % 256].push(*elt); } - ebml_w.end_tag(); - ebml_w.start_tag(tag_index_table); - for bucket_locs.each |pos| { - assert!(*pos < 0xffff_ffff); - writer.write_be_u32(*pos as u32); + + let mut buckets_frozen = ~[]; + for buckets.each |bucket| { + buckets_frozen.push(@/*bad*/copy **bucket); } - ebml_w.end_tag(); - ebml_w.end_tag(); + return buckets_frozen; } -#[cfg(not(stage0))] fn encode_index(ebml_w: &mut writer::Encoder, buckets: ~[@~[entry]], write_fn: &fn(@io::Writer, &T)) { @@ -2160,45 +1126,6 @@ fn write_int(writer: @io::Writer, &n: &int) { writer.write_be_u32(n as u32); } -#[cfg(stage0)] -fn encode_meta_item(ebml_w: &writer::Encoder, mi: @meta_item) { - match mi.node { - meta_word(name) => { - ebml_w.start_tag(tag_meta_item_word); - ebml_w.start_tag(tag_meta_item_name); - ebml_w.writer.write(str::to_bytes(*name)); - ebml_w.end_tag(); - ebml_w.end_tag(); - } - meta_name_value(name, value) => { - match value.node { - lit_str(value) => { - ebml_w.start_tag(tag_meta_item_name_value); - ebml_w.start_tag(tag_meta_item_name); - ebml_w.writer.write(str::to_bytes(*name)); - ebml_w.end_tag(); - ebml_w.start_tag(tag_meta_item_value); - ebml_w.writer.write(str::to_bytes(*value)); - ebml_w.end_tag(); - ebml_w.end_tag(); - } - _ => {/* FIXME (#623): encode other variants */ } - } - } - meta_list(name, ref items) => { - ebml_w.start_tag(tag_meta_item_list); - ebml_w.start_tag(tag_meta_item_name); - ebml_w.writer.write(str::to_bytes(*name)); - ebml_w.end_tag(); - for items.each |inner_item| { - encode_meta_item(ebml_w, *inner_item); - } - ebml_w.end_tag(); - } - } -} - -#[cfg(not(stage0))] fn encode_meta_item(ebml_w: &mut writer::Encoder, mi: @meta_item) { match mi.node { meta_word(name) => { @@ -2236,18 +1163,6 @@ fn encode_meta_item(ebml_w: &mut writer::Encoder, mi: @meta_item) { } } -#[cfg(stage0)] -fn encode_attributes(ebml_w: &writer::Encoder, attrs: &[attribute]) { - ebml_w.start_tag(tag_attributes); - for attrs.each |attr| { - ebml_w.start_tag(tag_attribute); - encode_meta_item(ebml_w, attr.node.value); - ebml_w.end_tag(); - } - ebml_w.end_tag(); -} - -#[cfg(not(stage0))] fn encode_attributes(ebml_w: &mut writer::Encoder, attrs: &[attribute]) { ebml_w.start_tag(tag_attributes); for attrs.each |attr| { @@ -2312,50 +1227,6 @@ fn synthesize_crate_attrs(ecx: @EncodeContext, return attrs; } -#[cfg(stage0)] -fn encode_crate_deps(ecx: @EncodeContext, - ebml_w: &writer::Encoder, - cstore: @mut cstore::CStore) { - fn get_ordered_deps(ecx: @EncodeContext, cstore: @mut cstore::CStore) - -> ~[decoder::crate_dep] { - type numdep = decoder::crate_dep; - - // Pull the cnums and name,vers,hash out of cstore - let mut deps = ~[]; - do cstore::iter_crate_data(cstore) |key, val| { - let dep = decoder::crate_dep {cnum: key, - name: ecx.tcx.sess.ident_of(/*bad*/ copy *val.name), - vers: decoder::get_crate_vers(val.data), - hash: decoder::get_crate_hash(val.data)}; - deps.push(dep); - }; - - // Sort by cnum - std::sort::quick_sort(deps, |kv1, kv2| kv1.cnum <= kv2.cnum); - - // Sanity-check the crate numbers - let mut expected_cnum = 1; - for deps.each |n| { - assert!((n.cnum == expected_cnum)); - expected_cnum += 1; - } - - // mut -> immutable hack for vec::map - deps.slice(0, deps.len()).to_owned() - } - - // We're just going to write a list of crate 'name-hash-version's, with - // the assumption that they are numbered 1 to n. - // FIXME (#2166): This is not nearly enough to support correct versioning - // but is enough to get transitive crate dependencies working. - ebml_w.start_tag(tag_crate_deps); - for get_ordered_deps(ecx, cstore).each |dep| { - encode_crate_dep(ecx, ebml_w, *dep); - } - ebml_w.end_tag(); -} - -#[cfg(not(stage0))] fn encode_crate_deps(ecx: @EncodeContext, ebml_w: &mut writer::Encoder, cstore: @mut cstore::CStore) { @@ -2398,32 +1269,6 @@ fn encode_crate_deps(ecx: @EncodeContext, ebml_w.end_tag(); } -#[cfg(stage0)] -fn encode_lang_items(ecx: @EncodeContext, ebml_w: &writer::Encoder) { - ebml_w.start_tag(tag_lang_items); - - for ecx.tcx.lang_items.each_item |def_id, i| { - if def_id.crate != local_crate { - loop; - } - - ebml_w.start_tag(tag_lang_items_item); - - ebml_w.start_tag(tag_lang_items_item_id); - ebml_w.writer.write_be_u32(i as u32); - ebml_w.end_tag(); // tag_lang_items_item_id - - ebml_w.start_tag(tag_lang_items_item_node_id); - ebml_w.writer.write_be_u32(def_id.node as u32); - ebml_w.end_tag(); // tag_lang_items_item_node_id - - ebml_w.end_tag(); // tag_lang_items_item - } - - ebml_w.end_tag(); // tag_lang_items -} - -#[cfg(not(stage0))] fn encode_lang_items(ecx: @EncodeContext, ebml_w: &mut writer::Encoder) { ebml_w.start_tag(tag_lang_items); @@ -2448,21 +1293,6 @@ fn encode_lang_items(ecx: @EncodeContext, ebml_w: &mut writer::Encoder) { ebml_w.end_tag(); // tag_lang_items } -#[cfg(stage0)] -fn encode_link_args(ecx: @EncodeContext, ebml_w: &writer::Encoder) { - ebml_w.start_tag(tag_link_args); - - let link_args = cstore::get_used_link_args(ecx.cstore); - for link_args.each |link_arg| { - ebml_w.start_tag(tag_link_args_arg); - ebml_w.writer.write_str(link_arg.to_str()); - ebml_w.end_tag(); - } - - ebml_w.end_tag(); -} - -#[cfg(not(stage0))] fn encode_link_args(ecx: @EncodeContext, ebml_w: &mut writer::Encoder) { ebml_w.start_tag(tag_link_args); @@ -2476,24 +1306,6 @@ fn encode_link_args(ecx: @EncodeContext, ebml_w: &mut writer::Encoder) { ebml_w.end_tag(); } -#[cfg(stage0)] -fn encode_crate_dep(ecx: @EncodeContext, - ebml_w: &writer::Encoder, - dep: decoder::crate_dep) { - ebml_w.start_tag(tag_crate_dep); - ebml_w.start_tag(tag_crate_dep_name); - ebml_w.writer.write(str::to_bytes(*ecx.tcx.sess.str_of(dep.name))); - ebml_w.end_tag(); - ebml_w.start_tag(tag_crate_dep_vers); - ebml_w.writer.write(str::to_bytes(*dep.vers)); - ebml_w.end_tag(); - ebml_w.start_tag(tag_crate_dep_hash); - ebml_w.writer.write(str::to_bytes(*dep.hash)); - ebml_w.end_tag(); - ebml_w.end_tag(); -} - -#[cfg(not(stage0))] fn encode_crate_dep(ecx: @EncodeContext, ebml_w: &mut writer::Encoder, dep: decoder::crate_dep) { @@ -2510,14 +1322,6 @@ fn encode_crate_dep(ecx: @EncodeContext, ebml_w.end_tag(); } -#[cfg(stage0)] -fn encode_hash(ebml_w: &writer::Encoder, hash: &str) { - ebml_w.start_tag(tag_crate_hash); - ebml_w.writer.write(str::to_bytes(hash)); - ebml_w.end_tag(); -} - -#[cfg(not(stage0))] fn encode_hash(ebml_w: &mut writer::Encoder, hash: &str) { ebml_w.start_tag(tag_crate_hash); ebml_w.writer.write(str::to_bytes(hash)); @@ -2532,114 +1336,6 @@ pub static metadata_encoding_version : &'static [u8] = 0x74, //'t' as u8, 0, 0, 0, 1 ]; -#[cfg(stage0)] -pub fn encode_metadata(parms: EncodeParams, crate: &crate) -> ~[u8] { - let wr = @io::BytesWriter(); - let stats = Stats { - inline_bytes: 0, - attr_bytes: 0, - dep_bytes: 0, - lang_item_bytes: 0, - link_args_bytes: 0, - item_bytes: 0, - index_bytes: 0, - zero_bytes: 0, - total_bytes: 0, - n_inlines: 0 - }; - let EncodeParams{item_symbols, diag, tcx, reachable, reexports2, - discrim_symbols, cstore, encode_inlined_item, - link_meta, _} = parms; - let ecx = @EncodeContext { - diag: diag, - tcx: tcx, - stats: @mut stats, - reachable: reachable, - reexports2: reexports2, - item_symbols: item_symbols, - discrim_symbols: discrim_symbols, - link_meta: link_meta, - cstore: cstore, - encode_inlined_item: encode_inlined_item, - type_abbrevs: @mut HashMap::new() - }; - - let ebml_w = writer::Encoder(wr as @io::Writer); - - encode_hash(&ebml_w, ecx.link_meta.extras_hash); - - let mut i = wr.pos; - let crate_attrs = synthesize_crate_attrs(ecx, crate); - encode_attributes(&ebml_w, crate_attrs); - ecx.stats.attr_bytes = wr.pos - i; - - i = wr.pos; - encode_crate_deps(ecx, &ebml_w, ecx.cstore); - ecx.stats.dep_bytes = wr.pos - i; - - // Encode the language items. - i = wr.pos; - encode_lang_items(ecx, &ebml_w); - ecx.stats.lang_item_bytes = wr.pos - i; - - // Encode the link args. - i = wr.pos; - encode_link_args(ecx, &ebml_w); - ecx.stats.link_args_bytes = wr.pos - i; - - // Encode and index the items. - ebml_w.start_tag(tag_items); - i = wr.pos; - let items_index = encode_info_for_items(ecx, &ebml_w, crate); - ecx.stats.item_bytes = wr.pos - i; - - i = wr.pos; - let items_buckets = create_index(items_index); - encode_index(&ebml_w, items_buckets, write_int); - ecx.stats.index_bytes = wr.pos - i; - ebml_w.end_tag(); - - ecx.stats.total_bytes = wr.pos; - - if (tcx.sess.meta_stats()) { - - do wr.bytes.each |e| { - if *e == 0 { - ecx.stats.zero_bytes += 1; - } - true - } - - io::println("metadata stats:"); - io::println(fmt!(" inline bytes: %u", ecx.stats.inline_bytes)); - io::println(fmt!(" attribute bytes: %u", ecx.stats.attr_bytes)); - io::println(fmt!(" dep bytes: %u", ecx.stats.dep_bytes)); - io::println(fmt!(" lang item bytes: %u", ecx.stats.lang_item_bytes)); - io::println(fmt!(" link args bytes: %u", ecx.stats.link_args_bytes)); - io::println(fmt!(" item bytes: %u", ecx.stats.item_bytes)); - io::println(fmt!(" index bytes: %u", ecx.stats.index_bytes)); - io::println(fmt!(" zero bytes: %u", ecx.stats.zero_bytes)); - io::println(fmt!(" total bytes: %u", ecx.stats.total_bytes)); - } - - // Pad this, since something (LLVM, presumably) is cutting off the - // remaining % 4 bytes. - wr.write(&[0u8, 0u8, 0u8, 0u8]); - - // FIXME #3396: weird bug here, for reasons unclear this emits random - // looking bytes (mostly 0x1) if we use the version byte-array constant - // above; so we use a string constant inline instead. - // - // Should be: - // - // vec::from_slice(metadata_encoding_version) + - - (do str::as_bytes(&~"rust\x00\x00\x00\x01") |bytes| { - vec::slice(*bytes, 0, 8).to_vec() - }) + flate::deflate_bytes(wr.bytes) -} - -#[cfg(not(stage0))] pub fn encode_metadata(parms: EncodeParams, crate: &crate) -> ~[u8] { let wr = @io::BytesWriter(); let stats = Stats { diff --git a/src/librustc/middle/astencode.rs b/src/librustc/middle/astencode.rs index 2a9f19fc84695..c6f01153a906e 100644 --- a/src/librustc/middle/astencode.rs +++ b/src/librustc/middle/astencode.rs @@ -77,31 +77,6 @@ trait tr_intern { // ______________________________________________________________________ // Top-level methods. -#[cfg(stage0)] -pub fn encode_inlined_item(ecx: @e::EncodeContext, - ebml_w: &writer::Encoder, - path: &[ast_map::path_elt], - ii: ast::inlined_item, - maps: Maps) { - debug!("> Encoding inlined item: %s::%s (%u)", - ast_map::path_to_str(path, ecx.tcx.sess.parse_sess.interner), - *ecx.tcx.sess.str_of(ii.ident()), - ebml_w.writer.tell()); - - let id_range = ast_util::compute_id_range_for_inlined_item(&ii); - do ebml_w.wr_tag(c::tag_ast as uint) { - id_range.encode(ebml_w); - encode_ast(ebml_w, simplify_ast(&ii)); - encode_side_tables_for_ii(ecx, maps, ebml_w, &ii); - } - - debug!("< Encoded inlined fn: %s::%s (%u)", - ast_map::path_to_str(path, ecx.tcx.sess.parse_sess.interner), - *ecx.tcx.sess.str_of(ii.ident()), - ebml_w.writer.tell()); -} - -#[cfg(not(stage0))] pub fn encode_inlined_item(ecx: @e::EncodeContext, ebml_w: &mut writer::Encoder, path: &[ast_map::path_elt], @@ -126,53 +101,6 @@ pub fn encode_inlined_item(ecx: @e::EncodeContext, ebml_w.writer.tell()); } -#[cfg(stage0)] -pub fn decode_inlined_item(cdata: @cstore::crate_metadata, - tcx: ty::ctxt, - maps: Maps, - path: ast_map::path, - par_doc: ebml::Doc) - -> Option { - let dcx = @DecodeContext { - cdata: cdata, - tcx: tcx, - maps: maps - }; - match par_doc.opt_child(c::tag_ast) { - None => None, - Some(ast_doc) => { - debug!("> Decoding inlined fn: %s::?", - ast_map::path_to_str(path, tcx.sess.parse_sess.interner)); - let ast_dsr = &reader::Decoder(ast_doc); - let from_id_range = Decodable::decode(ast_dsr); - let to_id_range = reserve_id_range(dcx.tcx.sess, from_id_range); - let xcx = @ExtendedDecodeContext { - dcx: dcx, - from_id_range: from_id_range, - to_id_range: to_id_range - }; - let raw_ii = decode_ast(ast_doc); - let ii = renumber_ast(xcx, raw_ii); - debug!("Fn named: %s", *tcx.sess.str_of(ii.ident())); - debug!("< Decoded inlined fn: %s::%s", - ast_map::path_to_str(path, tcx.sess.parse_sess.interner), - *tcx.sess.str_of(ii.ident())); - ast_map::map_decoded_item(tcx.sess.diagnostic(), - dcx.tcx.items, path, &ii); - decode_side_tables(xcx, ast_doc); - match ii { - ast::ii_item(i) => { - debug!(">>> DECODED ITEM >>>\n%s\n<<< DECODED ITEM <<<", - syntax::print::pprust::item_to_str(i, tcx.sess.intr())); - } - _ => { } - } - Some(ii) - } - } -} - -#[cfg(not(stage0))] pub fn decode_inlined_item(cdata: @cstore::crate_metadata, tcx: ty::ctxt, maps: Maps, @@ -309,49 +237,20 @@ impl tr for span { } } -#[cfg(stage0)] -trait def_id_encoder_helpers { - fn emit_def_id(&self, did: ast::def_id); -} - -#[cfg(not(stage0))] trait def_id_encoder_helpers { fn emit_def_id(&mut self, did: ast::def_id); } -#[cfg(stage0)] -impl def_id_encoder_helpers for S { - fn emit_def_id(&self, did: ast::def_id) { - did.encode(self) - } -} - -#[cfg(not(stage0))] impl def_id_encoder_helpers for S { fn emit_def_id(&mut self, did: ast::def_id) { did.encode(self) } } -#[cfg(stage0)] -trait def_id_decoder_helpers { - fn read_def_id(&self, xcx: @ExtendedDecodeContext) -> ast::def_id; -} - -#[cfg(not(stage0))] trait def_id_decoder_helpers { fn read_def_id(&mut self, xcx: @ExtendedDecodeContext) -> ast::def_id; } -#[cfg(stage0)] -impl def_id_decoder_helpers for D { - fn read_def_id(&self, xcx: @ExtendedDecodeContext) -> ast::def_id { - let did: ast::def_id = Decodable::decode(self); - did.tr(xcx) - } -} - -#[cfg(not(stage0))] impl def_id_decoder_helpers for D { fn read_def_id(&mut self, xcx: @ExtendedDecodeContext) -> ast::def_id { let did: ast::def_id = Decodable::decode(self); @@ -374,14 +273,6 @@ impl def_id_decoder_helpers for D { // We also have to adjust the spans: for now we just insert a dummy span, // but eventually we should add entries to the local codemap as required. -#[cfg(stage0)] -fn encode_ast(ebml_w: &writer::Encoder, item: ast::inlined_item) { - do ebml_w.wr_tag(c::tag_tree as uint) { - item.encode(ebml_w) - } -} - -#[cfg(not(stage0))] fn encode_ast(ebml_w: &mut writer::Encoder, item: ast::inlined_item) { ebml_w.start_tag(c::tag_tree as uint); item.encode(ebml_w); @@ -439,14 +330,6 @@ fn simplify_ast(ii: &ast::inlined_item) -> ast::inlined_item { } } -#[cfg(stage0)] -fn decode_ast(par_doc: ebml::Doc) -> ast::inlined_item { - let chi_doc = par_doc.get(c::tag_tree as uint); - let d = &reader::Decoder(chi_doc); - Decodable::decode(d) -} - -#[cfg(not(stage0))] fn decode_ast(par_doc: ebml::Doc) -> ast::inlined_item { let chi_doc = par_doc.get(c::tag_tree as uint); let mut d = reader::Decoder(chi_doc); @@ -477,24 +360,10 @@ fn renumber_ast(xcx: @ExtendedDecodeContext, ii: ast::inlined_item) // ______________________________________________________________________ // Encoding and decoding of ast::def -#[cfg(stage0)] -fn encode_def(ebml_w: &writer::Encoder, def: ast::def) { - def.encode(ebml_w) -} - -#[cfg(not(stage0))] fn encode_def(ebml_w: &mut writer::Encoder, def: ast::def) { def.encode(ebml_w) } -#[cfg(stage0)] -fn decode_def(xcx: @ExtendedDecodeContext, doc: ebml::Doc) -> ast::def { - let dsr = &reader::Decoder(doc); - let def: ast::def = Decodable::decode(dsr); - def.tr(xcx) -} - -#[cfg(not(stage0))] fn decode_def(xcx: @ExtendedDecodeContext, doc: ebml::Doc) -> ast::def { let mut dsr = reader::Decoder(doc); let def: ast::def = Decodable::decode(&mut dsr); @@ -602,38 +471,15 @@ impl tr for ty::bound_region { // ______________________________________________________________________ // Encoding and decoding of freevar information -#[cfg(stage0)] -fn encode_freevar_entry(ebml_w: &writer::Encoder, fv: @freevar_entry) { - (*fv).encode(ebml_w) -} - -#[cfg(not(stage0))] fn encode_freevar_entry(ebml_w: &mut writer::Encoder, fv: @freevar_entry) { (*fv).encode(ebml_w) } -#[cfg(stage0)] -trait ebml_decoder_helper { - fn read_freevar_entry(&self, xcx: @ExtendedDecodeContext) - -> freevar_entry; -} - -#[cfg(not(stage0))] trait ebml_decoder_helper { fn read_freevar_entry(&mut self, xcx: @ExtendedDecodeContext) -> freevar_entry; } -#[cfg(stage0)] -impl ebml_decoder_helper for reader::Decoder { - fn read_freevar_entry(&self, xcx: @ExtendedDecodeContext) - -> freevar_entry { - let fv: freevar_entry = Decodable::decode(self); - fv.tr(xcx) - } -} - -#[cfg(not(stage0))] impl ebml_decoder_helper for reader::Decoder { fn read_freevar_entry(&mut self, xcx: @ExtendedDecodeContext) -> freevar_entry { @@ -654,28 +500,11 @@ impl tr for freevar_entry { // ______________________________________________________________________ // Encoding and decoding of CaptureVar information -#[cfg(stage0)] -trait capture_var_helper { - fn read_capture_var(&self, xcx: @ExtendedDecodeContext) - -> moves::CaptureVar; -} - -#[cfg(not(stage0))] trait capture_var_helper { fn read_capture_var(&mut self, xcx: @ExtendedDecodeContext) -> moves::CaptureVar; } -#[cfg(stage0)] -impl capture_var_helper for reader::Decoder { - fn read_capture_var(&self, xcx: @ExtendedDecodeContext) - -> moves::CaptureVar { - let cvar: moves::CaptureVar = Decodable::decode(self); - cvar.tr(xcx) - } -} - -#[cfg(not(stage0))] impl capture_var_helper for reader::Decoder { fn read_capture_var(&mut self, xcx: @ExtendedDecodeContext) -> moves::CaptureVar { @@ -698,35 +527,10 @@ impl tr for moves::CaptureVar { // Encoding and decoding of method_map_entry trait read_method_map_entry_helper { - #[cfg(stage0)] - fn read_method_map_entry(&self, xcx: @ExtendedDecodeContext) - -> method_map_entry; - #[cfg(not(stage0))] fn read_method_map_entry(&mut self, xcx: @ExtendedDecodeContext) -> method_map_entry; } -#[cfg(stage0)] -fn encode_method_map_entry(ecx: @e::EncodeContext, - ebml_w: &writer::Encoder, - mme: method_map_entry) { - do ebml_w.emit_struct("method_map_entry", 3) { - do ebml_w.emit_field(~"self_arg", 0u) { - ebml_w.emit_arg(ecx, mme.self_arg); - } - do ebml_w.emit_field(~"explicit_self", 2u) { - mme.explicit_self.encode(ebml_w); - } - do ebml_w.emit_field(~"origin", 1u) { - mme.origin.encode(ebml_w); - } - do ebml_w.emit_field(~"self_mode", 3) { - mme.self_mode.encode(ebml_w); - } - } -} - -#[cfg(not(stage0))] fn encode_method_map_entry(ecx: @e::EncodeContext, ebml_w: &mut writer::Encoder, mme: method_map_entry) { @@ -747,32 +551,6 @@ fn encode_method_map_entry(ecx: @e::EncodeContext, } impl read_method_map_entry_helper for reader::Decoder { - #[cfg(stage0)] - fn read_method_map_entry(&self, xcx: @ExtendedDecodeContext) - -> method_map_entry { - do self.read_struct("method_map_entry", 3) { - method_map_entry { - self_arg: self.read_field(~"self_arg", 0u, || { - self.read_arg(xcx) - }), - explicit_self: self.read_field(~"explicit_self", 2u, || { - let self_type: ast::self_ty_ = Decodable::decode(self); - self_type - }), - origin: self.read_field(~"origin", 1u, || { - let method_origin: method_origin = - Decodable::decode(self); - method_origin.tr(xcx) - }), - self_mode: self.read_field(~"self_mode", 3, || { - let self_mode: ty::SelfMode = Decodable::decode(self); - self_mode - }), - } - } - } - - #[cfg(not(stage0))] fn read_method_map_entry(&mut self, xcx: @ExtendedDecodeContext) -> method_map_entry { do self.read_struct("method_map_entry", 3) |this| { @@ -830,20 +608,6 @@ impl tr for method_origin { // ______________________________________________________________________ // Encoding and decoding vtable_res -#[cfg(stage0)] -fn encode_vtable_res(ecx: @e::EncodeContext, - ebml_w: &writer::Encoder, - dr: typeck::vtable_res) { - // can't autogenerate this code because automatic code of - // ty::t doesn't work, and there is no way (atm) to have - // hand-written encoding routines combine with auto-generated - // ones. perhaps we should fix this. - do ebml_w.emit_from_vec(*dr) |vtable_origin| { - encode_vtable_origin(ecx, ebml_w, vtable_origin) - } -} - -#[cfg(not(stage0))] fn encode_vtable_res(ecx: @e::EncodeContext, ebml_w: &mut writer::Encoder, dr: typeck::vtable_res) { @@ -856,40 +620,6 @@ fn encode_vtable_res(ecx: @e::EncodeContext, } } -#[cfg(stage0)] -fn encode_vtable_origin(ecx: @e::EncodeContext, - ebml_w: &writer::Encoder, - vtable_origin: &typeck::vtable_origin) { - do ebml_w.emit_enum(~"vtable_origin") { - match *vtable_origin { - typeck::vtable_static(def_id, ref tys, vtable_res) => { - do ebml_w.emit_enum_variant(~"vtable_static", 0u, 3u) { - do ebml_w.emit_enum_variant_arg(0u) { - ebml_w.emit_def_id(def_id) - } - do ebml_w.emit_enum_variant_arg(1u) { - ebml_w.emit_tys(ecx, /*bad*/copy *tys); - } - do ebml_w.emit_enum_variant_arg(2u) { - encode_vtable_res(ecx, ebml_w, vtable_res); - } - } - } - typeck::vtable_param(pn, bn) => { - do ebml_w.emit_enum_variant(~"vtable_param", 1u, 2u) { - do ebml_w.emit_enum_variant_arg(0u) { - ebml_w.emit_uint(pn); - } - do ebml_w.emit_enum_variant_arg(1u) { - ebml_w.emit_uint(bn); - } - } - } - } - } -} - -#[cfg(not(stage0))] fn encode_vtable_origin(ecx: @e::EncodeContext, ebml_w: &mut writer::Encoder, vtable_origin: &typeck::vtable_origin) { @@ -923,70 +653,18 @@ fn encode_vtable_origin(ecx: @e::EncodeContext, } trait vtable_decoder_helpers { - #[cfg(stage0)] - fn read_vtable_res(&self, xcx: @ExtendedDecodeContext) - -> typeck::vtable_res; - #[cfg(not(stage0))] fn read_vtable_res(&mut self, xcx: @ExtendedDecodeContext) -> typeck::vtable_res; - #[cfg(stage0)] - fn read_vtable_origin(&self, xcx: @ExtendedDecodeContext) - -> typeck::vtable_origin; - #[cfg(not(stage0))] fn read_vtable_origin(&mut self, xcx: @ExtendedDecodeContext) -> typeck::vtable_origin; } impl vtable_decoder_helpers for reader::Decoder { - #[cfg(stage0)] - fn read_vtable_res(&self, xcx: @ExtendedDecodeContext) - -> typeck::vtable_res { - @self.read_to_vec(|| self.read_vtable_origin(xcx)) - } - - #[cfg(not(stage0))] fn read_vtable_res(&mut self, xcx: @ExtendedDecodeContext) -> typeck::vtable_res { @self.read_to_vec(|this| this.read_vtable_origin(xcx)) } - #[cfg(stage0)] - fn read_vtable_origin(&self, xcx: @ExtendedDecodeContext) - -> typeck::vtable_origin { - do self.read_enum("vtable_origin") { - do self.read_enum_variant(["vtable_static", "vtable_param"]) |i| { - match i { - 0 => { - typeck::vtable_static( - do self.read_enum_variant_arg(0u) { - self.read_def_id(xcx) - }, - do self.read_enum_variant_arg(1u) { - self.read_tys(xcx) - }, - do self.read_enum_variant_arg(2u) { - self.read_vtable_res(xcx) - } - ) - } - 1 => { - typeck::vtable_param( - do self.read_enum_variant_arg(0u) { - self.read_uint() - }, - do self.read_enum_variant_arg(1u) { - self.read_uint() - } - ) - } - // hard to avoid - user input - _ => fail!(~"bad enum variant") - } - } - } - } - - #[cfg(not(stage0))] fn read_vtable_origin(&mut self, xcx: @ExtendedDecodeContext) -> typeck::vtable_origin { do self.read_enum("vtable_origin") |this| { @@ -1042,20 +720,6 @@ impl get_ty_str_ctxt for e::EncodeContext { } } -#[cfg(stage0)] -trait ebml_writer_helpers { - fn emit_arg(&self, ecx: @e::EncodeContext, arg: ty::arg); - fn emit_ty(&self, ecx: @e::EncodeContext, ty: ty::t); - fn emit_vstore(&self, ecx: @e::EncodeContext, vstore: ty::vstore); - fn emit_tys(&self, ecx: @e::EncodeContext, tys: ~[ty::t]); - fn emit_type_param_def(&self, - ecx: @e::EncodeContext, - type_param_def: &ty::TypeParameterDef); - fn emit_tpbt(&self, ecx: @e::EncodeContext, - tpbt: ty::ty_param_bounds_and_ty); -} - -#[cfg(not(stage0))] trait ebml_writer_helpers { fn emit_arg(&mut self, ecx: @e::EncodeContext, arg: ty::arg); fn emit_ty(&mut self, ecx: @e::EncodeContext, ty: ty::t); @@ -1070,73 +734,30 @@ trait ebml_writer_helpers { } impl ebml_writer_helpers for writer::Encoder { - #[cfg(stage0)] - fn emit_ty(&self, ecx: @e::EncodeContext, ty: ty::t) { - do self.emit_opaque { - e::write_type(ecx, self, ty) - } - } - - #[cfg(not(stage0))] fn emit_ty(&mut self, ecx: @e::EncodeContext, ty: ty::t) { do self.emit_opaque |this| { e::write_type(ecx, this, ty) } } - #[cfg(stage0)] - fn emit_vstore(&self, ecx: @e::EncodeContext, vstore: ty::vstore) { - do self.emit_opaque { - e::write_vstore(ecx, self, vstore) - } - } - - #[cfg(not(stage0))] fn emit_vstore(&mut self, ecx: @e::EncodeContext, vstore: ty::vstore) { do self.emit_opaque |this| { e::write_vstore(ecx, this, vstore) } } - #[cfg(stage0)] - fn emit_arg(&self, ecx: @e::EncodeContext, arg: ty::arg) { - do self.emit_opaque { - tyencode::enc_arg(self.writer, ecx.ty_str_ctxt(), arg); - } - } - - #[cfg(not(stage0))] fn emit_arg(&mut self, ecx: @e::EncodeContext, arg: ty::arg) { do self.emit_opaque |this| { tyencode::enc_arg(this.writer, ecx.ty_str_ctxt(), arg); } } - #[cfg(stage0)] - fn emit_tys(&self, ecx: @e::EncodeContext, tys: ~[ty::t]) { - do self.emit_from_vec(tys) |ty| { - self.emit_ty(ecx, *ty) - } - } - - #[cfg(not(stage0))] fn emit_tys(&mut self, ecx: @e::EncodeContext, tys: ~[ty::t]) { do self.emit_from_vec(tys) |this, ty| { this.emit_ty(ecx, *ty) } } - #[cfg(stage0)] - fn emit_type_param_def(&self, - ecx: @e::EncodeContext, - type_param_def: &ty::TypeParameterDef) { - do self.emit_opaque { - tyencode::enc_type_param_def(self.writer, ecx.ty_str_ctxt(), - type_param_def) - } - } - - #[cfg(not(stage0))] fn emit_type_param_def(&mut self, ecx: @e::EncodeContext, type_param_def: &ty::TypeParameterDef) { @@ -1147,31 +768,6 @@ impl ebml_writer_helpers for writer::Encoder { } } - #[cfg(stage0)] - fn emit_tpbt(&self, - ecx: @e::EncodeContext, - tpbt: ty::ty_param_bounds_and_ty) { - do self.emit_struct("ty_param_bounds_and_ty", 2) { - do self.emit_field(~"generics", 0) { - do self.emit_struct("Generics", 2) { - do self.emit_field(~"type_param_defs", 0) { - do self.emit_from_vec(*tpbt.generics.type_param_defs) - |type_param_def| { - self.emit_type_param_def(ecx, type_param_def); - } - } - do self.emit_field(~"region_param", 1) { - tpbt.generics.region_param.encode(self); - } - } - } - do self.emit_field(~"ty", 1) { - self.emit_ty(ecx, tpbt.ty); - } - } - } - - #[cfg(not(stage0))] fn emit_tpbt(&mut self, ecx: @e::EncodeContext, tpbt: ty::ty_param_bounds_and_ty) { @@ -1196,30 +792,11 @@ impl ebml_writer_helpers for writer::Encoder { } } -#[cfg(stage0)] -trait write_tag_and_id { - fn tag(&self, tag_id: c::astencode_tag, f: &fn()); - fn id(&self, id: ast::node_id); -} - -#[cfg(not(stage0))] trait write_tag_and_id { fn tag(&mut self, tag_id: c::astencode_tag, f: &fn(&mut Self)); fn id(&mut self, id: ast::node_id); } -#[cfg(stage0)] -impl write_tag_and_id for writer::Encoder { - fn tag(&self, tag_id: c::astencode_tag, f: &fn()) { - do self.wr_tag(tag_id as uint) { f() } - } - - fn id(&self, id: ast::node_id) { - self.wr_tagged_u64(c::tag_table_id as uint, id as u64) - } -} - -#[cfg(not(stage0))] impl write_tag_and_id for writer::Encoder { fn tag(&mut self, tag_id: c::astencode_tag, @@ -1234,26 +811,6 @@ impl write_tag_and_id for writer::Encoder { } } -#[cfg(stage0)] -fn encode_side_tables_for_ii(ecx: @e::EncodeContext, - maps: Maps, - ebml_w: &writer::Encoder, - ii: &ast::inlined_item) { - do ebml_w.wr_tag(c::tag_table as uint) { - let ebml_w = copy *ebml_w; - ast_util::visit_ids_for_inlined_item( - ii, - |id: ast::node_id| { - // Note: this will cause a copy of ebml_w, which is bad as - // it has mut fields. But I believe it's harmless since - // we generate balanced EBML. - /*let ebml_w = copy ebml_w;*/ - encode_side_tables_for_id(ecx, maps, &ebml_w, id) - }); - } -} - -#[cfg(not(stage0))] fn encode_side_tables_for_ii(ecx: @e::EncodeContext, maps: Maps, ebml_w: &mut writer::Encoder, @@ -1272,137 +829,6 @@ fn encode_side_tables_for_ii(ecx: @e::EncodeContext, ebml_w.end_tag(); } -#[cfg(stage0)] -fn encode_side_tables_for_id(ecx: @e::EncodeContext, - maps: Maps, - ebml_w: &writer::Encoder, - id: ast::node_id) { - let tcx = ecx.tcx; - - debug!("Encoding side tables for id %d", id); - - for tcx.def_map.find(&id).each |def| { - do ebml_w.tag(c::tag_table_def) { - ebml_w.id(id); - do ebml_w.tag(c::tag_table_val) { - (*def).encode(ebml_w) - } - } - } - - for tcx.node_types.find(&(id as uint)).each |&ty| { - do ebml_w.tag(c::tag_table_node_type) { - ebml_w.id(id); - do ebml_w.tag(c::tag_table_val) { - ebml_w.emit_ty(ecx, *ty); - } - } - } - - for tcx.node_type_substs.find(&id).each |tys| { - do ebml_w.tag(c::tag_table_node_type_subst) { - ebml_w.id(id); - do ebml_w.tag(c::tag_table_val) { - // FIXME(#5562): removing this copy causes a segfault - // before stage2 - ebml_w.emit_tys(ecx, /*bad*/copy **tys) - } - } - } - - for tcx.freevars.find(&id).each |&fv| { - do ebml_w.tag(c::tag_table_freevars) { - ebml_w.id(id); - do ebml_w.tag(c::tag_table_val) { - do ebml_w.emit_from_vec(**fv) |fv_entry| { - encode_freevar_entry(ebml_w, *fv_entry) - } - } - } - } - - let lid = ast::def_id { crate: ast::local_crate, node: id }; - for tcx.tcache.find(&lid).each |&tpbt| { - do ebml_w.tag(c::tag_table_tcache) { - ebml_w.id(id); - do ebml_w.tag(c::tag_table_val) { - ebml_w.emit_tpbt(ecx, *tpbt); - } - } - } - - for tcx.ty_param_defs.find(&id).each |&type_param_def| { - do ebml_w.tag(c::tag_table_param_defs) { - ebml_w.id(id); - do ebml_w.tag(c::tag_table_val) { - ebml_w.emit_type_param_def(ecx, type_param_def) - } - } - } - - if maps.mutbl_map.contains(&id) { - do ebml_w.tag(c::tag_table_mutbl) { - ebml_w.id(id); - } - } - - for maps.last_use_map.find(&id).each |&m| { - do ebml_w.tag(c::tag_table_last_use) { - ebml_w.id(id); - do ebml_w.tag(c::tag_table_val) { - do ebml_w.emit_from_vec(/*bad*/ copy **m) |id| { - id.encode(ebml_w); - } - } - } - } - - for maps.method_map.find(&id).each |&mme| { - do ebml_w.tag(c::tag_table_method_map) { - ebml_w.id(id); - do ebml_w.tag(c::tag_table_val) { - encode_method_map_entry(ecx, ebml_w, *mme) - } - } - } - - for maps.vtable_map.find(&id).each |&dr| { - do ebml_w.tag(c::tag_table_vtable_map) { - ebml_w.id(id); - do ebml_w.tag(c::tag_table_val) { - encode_vtable_res(ecx, ebml_w, *dr); - } - } - } - - for tcx.adjustments.find(&id).each |adj| { - do ebml_w.tag(c::tag_table_adjustments) { - ebml_w.id(id); - do ebml_w.tag(c::tag_table_val) { - (**adj).encode(ebml_w) - } - } - } - - if maps.moves_map.contains(&id) { - do ebml_w.tag(c::tag_table_moves_map) { - ebml_w.id(id); - } - } - - for maps.capture_map.find(&id).each |&cap_vars| { - do ebml_w.tag(c::tag_table_capture_map) { - ebml_w.id(id); - do ebml_w.tag(c::tag_table_val) { - do ebml_w.emit_from_vec(*cap_vars) |cap_var| { - cap_var.encode(ebml_w); - } - } - } - } -} - -#[cfg(not(stage0))] fn encode_side_tables_for_id(ecx: @e::EncodeContext, maps: Maps, ebml_w: &mut writer::Encoder, @@ -1544,20 +970,6 @@ impl doc_decoder_helpers for ebml::Doc { } } -#[cfg(stage0)] -trait ebml_decoder_decoder_helpers { - fn read_arg(&self, xcx: @ExtendedDecodeContext) -> ty::arg; - fn read_ty(&self, xcx: @ExtendedDecodeContext) -> ty::t; - fn read_tys(&self, xcx: @ExtendedDecodeContext) -> ~[ty::t]; - fn read_type_param_def(&self, xcx: @ExtendedDecodeContext) -> ty::TypeParameterDef; - fn read_ty_param_bounds_and_ty(&self, xcx: @ExtendedDecodeContext) - -> ty::ty_param_bounds_and_ty; - fn convert_def_id(&self, xcx: @ExtendedDecodeContext, - source: DefIdSource, - did: ast::def_id) -> ast::def_id; -} - -#[cfg(not(stage0))] trait ebml_decoder_decoder_helpers { fn read_arg(&mut self, xcx: @ExtendedDecodeContext) -> ty::arg; fn read_ty(&mut self, xcx: @ExtendedDecodeContext) -> ty::t; @@ -1574,16 +986,6 @@ trait ebml_decoder_decoder_helpers { } impl ebml_decoder_decoder_helpers for reader::Decoder { - #[cfg(stage0)] - fn read_arg(&self, xcx: @ExtendedDecodeContext) -> ty::arg { - do self.read_opaque |doc| { - tydecode::parse_arg_data( - doc.data, xcx.dcx.cdata.cnum, doc.start, xcx.dcx.tcx, - |s, a| self.convert_def_id(xcx, s, a)) - } - } - - #[cfg(not(stage0))] fn read_arg(&mut self, xcx: @ExtendedDecodeContext) -> ty::arg { do self.read_opaque |this, doc| { tydecode::parse_arg_data( @@ -1595,35 +997,6 @@ impl ebml_decoder_decoder_helpers for reader::Decoder { } } - #[cfg(stage0)] - fn read_ty(&self, xcx: @ExtendedDecodeContext) -> ty::t { - // Note: regions types embed local node ids. In principle, we - // should translate these node ids into the new decode - // context. However, we do not bother, because region types - // are not used during trans. - - return do self.read_opaque |doc| { - - let ty = tydecode::parse_ty_data( - doc.data, xcx.dcx.cdata.cnum, doc.start, xcx.dcx.tcx, - |s, a| self.convert_def_id(xcx, s, a)); - - debug!("read_ty(%s) = %s", - type_string(doc), ty_to_str(xcx.dcx.tcx, ty)); - - ty - }; - - fn type_string(doc: ebml::Doc) -> ~str { - let mut str = ~""; - for uint::range(doc.start, doc.end) |i| { - str::push_char(&mut str, doc.data[i] as char); - } - str - } - } - - #[cfg(not(stage0))] fn read_ty(&mut self, xcx: @ExtendedDecodeContext) -> ty::t { // Note: regions types embed local node ids. In principle, we // should translate these node ids into the new decode @@ -1654,27 +1027,10 @@ impl ebml_decoder_decoder_helpers for reader::Decoder { } } - #[cfg(stage0)] - fn read_tys(&self, xcx: @ExtendedDecodeContext) -> ~[ty::t] { - self.read_to_vec(|| self.read_ty(xcx) ) - } - - #[cfg(not(stage0))] fn read_tys(&mut self, xcx: @ExtendedDecodeContext) -> ~[ty::t] { self.read_to_vec(|this| this.read_ty(xcx) ) } - #[cfg(stage0)] - fn read_type_param_def(&self, xcx: @ExtendedDecodeContext) - -> ty::TypeParameterDef { - do self.read_opaque |doc| { - tydecode::parse_type_param_def_data( - doc.data, doc.start, xcx.dcx.cdata.cnum, xcx.dcx.tcx, - |s, a| self.convert_def_id(xcx, s, a)) - } - } - - #[cfg(not(stage0))] fn read_type_param_def(&mut self, xcx: @ExtendedDecodeContext) -> ty::TypeParameterDef { do self.read_opaque |this, doc| { @@ -1687,31 +1043,6 @@ impl ebml_decoder_decoder_helpers for reader::Decoder { } } - #[cfg(stage0)] - fn read_ty_param_bounds_and_ty(&self, xcx: @ExtendedDecodeContext) - -> ty::ty_param_bounds_and_ty { - do self.read_struct("ty_param_bounds_and_ty", 2) { - ty::ty_param_bounds_and_ty { - generics: do self.read_field("generics", 0) { - do self.read_struct("Generics", 2) { - ty::Generics { - type_param_defs: self.read_field("type_param_defs", 0, || { - @self.read_to_vec(|| self.read_type_param_def(xcx)) - }), - region_param: self.read_field(~"region_param", 1, || { - Decodable::decode(self) - }) - } - } - }, - ty: self.read_field(~"ty", 1, || { - self.read_ty(xcx) - }) - } - } - } - - #[cfg(not(stage0))] fn read_ty_param_bounds_and_ty(&mut self, xcx: @ExtendedDecodeContext) -> ty::ty_param_bounds_and_ty { do self.read_struct("ty_param_bounds_and_ty", 2) |this| { @@ -1742,35 +1073,6 @@ impl ebml_decoder_decoder_helpers for reader::Decoder { } } - #[cfg(stage0)] - fn convert_def_id(&self, - xcx: @ExtendedDecodeContext, - source: tydecode::DefIdSource, - did: ast::def_id) - -> ast::def_id { - /*! - * - * Converts a def-id that appears in a type. The correct - * translation will depend on what kind of def-id this is. - * This is a subtle point: type definitions are not - * inlined into the current crate, so if the def-id names - * a nominal type or type alias, then it should be - * translated to refer to the source crate. - * - * However, *type parameters* are cloned along with the function - * they are attached to. So we should translate those def-ids - * to refer to the new, cloned copy of the type parameter. - */ - - let r = match source { - NominalType | TypeWithId => xcx.tr_def_id(did), - TypeParameter => xcx.tr_intern_def_id(did) - }; - debug!("convert_def_id(source=%?, did=%?)=%?", source, did, r); - return r; - } - - #[cfg(not(stage0))] fn convert_def_id(&mut self, xcx: @ExtendedDecodeContext, source: tydecode::DefIdSource, @@ -1799,82 +1101,6 @@ impl ebml_decoder_decoder_helpers for reader::Decoder { } } -#[cfg(stage0)] -fn decode_side_tables(xcx: @ExtendedDecodeContext, - ast_doc: ebml::Doc) { - let dcx = xcx.dcx; - let tbl_doc = ast_doc.get(c::tag_table as uint); - for reader::docs(tbl_doc) |tag, entry_doc| { - let id0 = entry_doc.get(c::tag_table_id as uint).as_int(); - let id = xcx.tr_id(id0); - - debug!(">> Side table document with tag 0x%x \ - found for id %d (orig %d)", - tag, id, id0); - - if tag == (c::tag_table_mutbl as uint) { - dcx.maps.mutbl_map.insert(id); - } else if tag == (c::tag_table_moves_map as uint) { - dcx.maps.moves_map.insert(id); - } else { - let val_doc = entry_doc.get(c::tag_table_val as uint); - let val_dsr = &reader::Decoder(val_doc); - if tag == (c::tag_table_def as uint) { - let def = decode_def(xcx, val_doc); - dcx.tcx.def_map.insert(id, def); - } else if tag == (c::tag_table_node_type as uint) { - let ty = val_dsr.read_ty(xcx); - debug!("inserting ty for node %?: %s", - id, ty_to_str(dcx.tcx, ty)); - dcx.tcx.node_types.insert(id as uint, ty); - } else if tag == (c::tag_table_node_type_subst as uint) { - let tys = val_dsr.read_tys(xcx); - dcx.tcx.node_type_substs.insert(id, tys); - } else if tag == (c::tag_table_freevars as uint) { - let fv_info = @val_dsr.read_to_vec(|| { - @val_dsr.read_freevar_entry(xcx) - }); - dcx.tcx.freevars.insert(id, fv_info); - } else if tag == (c::tag_table_tcache as uint) { - let tpbt = val_dsr.read_ty_param_bounds_and_ty(xcx); - let lid = ast::def_id { crate: ast::local_crate, node: id }; - dcx.tcx.tcache.insert(lid, tpbt); - } else if tag == (c::tag_table_param_defs as uint) { - let bounds = val_dsr.read_type_param_def(xcx); - dcx.tcx.ty_param_defs.insert(id, bounds); - } else if tag == (c::tag_table_last_use as uint) { - let ids = val_dsr.read_to_vec(|| { - xcx.tr_id(val_dsr.read_int()) - }); - dcx.maps.last_use_map.insert(id, @mut ids); - } else if tag == (c::tag_table_method_map as uint) { - dcx.maps.method_map.insert( - id, - val_dsr.read_method_map_entry(xcx)); - } else if tag == (c::tag_table_vtable_map as uint) { - dcx.maps.vtable_map.insert(id, - val_dsr.read_vtable_res(xcx)); - } else if tag == (c::tag_table_adjustments as uint) { - let adj: @ty::AutoAdjustment = @Decodable::decode(val_dsr); - adj.tr(xcx); - dcx.tcx.adjustments.insert(id, adj); - } else if tag == (c::tag_table_capture_map as uint) { - let cvars = - at_vec::from_owned( - val_dsr.read_to_vec( - || val_dsr.read_capture_var(xcx))); - dcx.maps.capture_map.insert(id, cvars); - } else { - xcx.dcx.tcx.sess.bug( - fmt!("unknown tag found in side tables: %x", tag)); - } - } - - debug!(">< Side table doc loaded"); - } -} - -#[cfg(not(stage0))] fn decode_side_tables(xcx: @ExtendedDecodeContext, ast_doc: ebml::Doc) { let dcx = xcx.dcx; diff --git a/src/libstd/arena.rs b/src/libstd/arena.rs index 67b5e5e654ad0..b9a09323f81d0 100644 --- a/src/libstd/arena.rs +++ b/src/libstd/arena.rs @@ -203,21 +203,6 @@ pub impl Arena { } #[inline(always)] - #[cfg(stage0)] - priv fn alloc_pod(&mut self, op: &fn() -> T) -> &'self T { - unsafe { - let tydesc = sys::get_type_desc::(); - let ptr = self.alloc_pod_inner((*tydesc).size, (*tydesc).align); - let ptr: *mut T = transmute(ptr); - rusti::move_val_init(&mut (*ptr), op()); - return transmute(ptr); - } - } - - #[inline(always)] - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] priv fn alloc_pod<'a, T>(&'a mut self, op: &fn() -> T) -> &'a T { unsafe { let tydesc = sys::get_type_desc::(); @@ -265,31 +250,6 @@ pub impl Arena { } #[inline(always)] - #[cfg(stage0)] - priv fn alloc_nonpod(&mut self, op: &fn() -> T) -> &'self T { - unsafe { - let tydesc = sys::get_type_desc::(); - let (ty_ptr, ptr) = - self.alloc_nonpod_inner((*tydesc).size, (*tydesc).align); - let ty_ptr: *mut uint = transmute(ty_ptr); - let ptr: *mut T = transmute(ptr); - // Write in our tydesc along with a bit indicating that it - // has *not* been initialized yet. - *ty_ptr = transmute(tydesc); - // Actually initialize it - rusti::move_val_init(&mut(*ptr), op()); - // Now that we are done, update the tydesc to indicate that - // the object is there. - *ty_ptr = bitpack_tydesc_ptr(tydesc, true); - - return transmute(ptr); - } - } - - #[inline(always)] - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] priv fn alloc_nonpod<'a, T>(&'a mut self, op: &fn() -> T) -> &'a T { unsafe { let tydesc = sys::get_type_desc::(); @@ -312,25 +272,6 @@ pub impl Arena { // The external interface #[inline(always)] - #[cfg(stage0)] - fn alloc(&mut self, op: &fn() -> T) -> &'self T { - unsafe { - // XXX: Borrow check - let this = transmute_mut_region(self); - if !rusti::needs_drop::() { - return this.alloc_pod(op); - } - // XXX: Borrow check - let this = transmute_mut_region(self); - this.alloc_nonpod(op) - } - } - - // The external interface - #[inline(always)] - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn alloc<'a, T>(&'a mut self, op: &fn() -> T) -> &'a T { unsafe { // XXX: Borrow check diff --git a/src/libstd/deque.rs b/src/libstd/deque.rs index 8a310a9f52b5e..65e71869a1f0f 100644 --- a/src/libstd/deque.rs +++ b/src/libstd/deque.rs @@ -37,128 +37,6 @@ impl Mutable for Deque { } } -#[cfg(stage0)] -pub impl Deque { - /// Create an empty Deque - fn new() -> Deque { - Deque{nelts: 0, lo: 0, hi: 0, - elts: vec::from_fn(initial_capacity, |_| None)} - } - - /// Return a reference to the first element in the deque - /// - /// Fails if the deque is empty - #[cfg(stage0)] - fn peek_front(&self) -> &'self T { get(self.elts, self.lo) } - - /// Return a reference to the first element in the deque - /// - /// Fails if the deque is empty - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] - fn peek_front<'a>(&'a self) -> &'a T { get(self.elts, self.lo) } - - /// Return a reference to the last element in the deque - /// - /// Fails if the deque is empty - #[cfg(stage0)] - fn peek_back(&self) -> &'self T { get(self.elts, self.hi - 1u) } - - /// Return a reference to the last element in the deque - /// - /// Fails if the deque is empty - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] - fn peek_back<'a>(&'a self) -> &'a T { get(self.elts, self.hi - 1u) } - - /// Retrieve an element in the deque by index - /// - /// Fails if there is no element with the given index - #[cfg(stage0)] - fn get(&self, i: int) -> &'self T { - let idx = (self.lo + (i as uint)) % self.elts.len(); - get(self.elts, idx) - } - - /// Retrieve an element in the deque by index - /// - /// Fails if there is no element with the given index - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] - fn get<'a>(&'a self, i: int) -> &'a T { - let idx = (self.lo + (i as uint)) % self.elts.len(); - get(self.elts, idx) - } - - /// Iterate over the elements in the deque - fn each(&self, f: &fn(&T) -> bool) { - self.eachi(|_i, e| f(e)) - } - - /// Iterate over the elements in the deque by index - fn eachi(&self, f: &fn(uint, &T) -> bool) { - for uint::range(0, self.nelts) |i| { - if !f(i, self.get(i as int)) { return; } - } - } - - /// Remove and return the first element in the deque - /// - /// Fails if the deque is empty - fn pop_front(&mut self) -> T { - let result = self.elts[self.lo].swap_unwrap(); - self.lo = (self.lo + 1u) % self.elts.len(); - self.nelts -= 1u; - result - } - - /// Remove and return the last element in the deque - /// - /// Fails if the deque is empty - fn pop_back(&mut self) -> T { - if self.hi == 0u { - self.hi = self.elts.len() - 1u; - } else { self.hi -= 1u; } - let result = self.elts[self.hi].swap_unwrap(); - self.elts[self.hi] = None; - self.nelts -= 1u; - result - } - - /// Prepend an element to the deque - fn add_front(&mut self, t: T) { - let oldlo = self.lo; - if self.lo == 0u { - self.lo = self.elts.len() - 1u; - } else { self.lo -= 1u; } - if self.lo == self.hi { - self.elts = grow(self.nelts, oldlo, self.elts); - self.lo = self.elts.len() - 1u; - self.hi = self.nelts; - } - self.elts[self.lo] = Some(t); - self.nelts += 1u; - } - - /// Append an element to the deque - fn add_back(&mut self, t: T) { - if self.lo == self.hi && self.nelts != 0u { - self.elts = grow(self.nelts, self.lo, self.elts); - self.lo = 0u; - self.hi = self.nelts; - } - self.elts[self.hi] = Some(t); - self.hi = (self.hi + 1u) % self.elts.len(); - self.nelts += 1u; - } -} - -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] pub impl Deque { /// Create an empty Deque fn new() -> Deque { diff --git a/src/libstd/ebml.rs b/src/libstd/ebml.rs index 41c5a0f7690cb..8a4bc823fd881 100644 --- a/src/libstd/ebml.rs +++ b/src/libstd/ebml.rs @@ -263,13 +263,6 @@ pub mod reader { pub fn doc_as_i32(d: Doc) -> i32 { doc_as_u32(d) as i32 } pub fn doc_as_i64(d: Doc) -> i64 { doc_as_u64(d) as i64 } - #[cfg(stage0)] - pub struct Decoder { - priv mut parent: Doc, - priv mut pos: uint, - } - - #[cfg(not(stage0))] pub struct Decoder { priv parent: Doc, priv pos: uint, @@ -283,25 +276,6 @@ pub mod reader { } priv impl Decoder { - #[cfg(stage0)] - fn _check_label(&self, lbl: &str) { - if self.pos < self.parent.end { - let TaggedDoc { tag: r_tag, doc: r_doc } = - doc_at(self.parent.data, self.pos); - - if r_tag == (EsLabel as uint) { - self.pos = r_doc.end; - let str = doc_as_str(r_doc); - if lbl != str { - fail!(fmt!("Expected label %s but found %s", - lbl, - str)); - } - } - } - } - - #[cfg(not(stage0))] fn _check_label(&mut self, lbl: &str) { if self.pos < self.parent.end { let TaggedDoc { tag: r_tag, doc: r_doc } = @@ -319,30 +293,6 @@ pub mod reader { } } - #[cfg(stage0)] - fn next_doc(&self, exp_tag: EbmlEncoderTag) -> Doc { - debug!(". next_doc(exp_tag=%?)", exp_tag); - if self.pos >= self.parent.end { - fail!(~"no more documents in current node!"); - } - let TaggedDoc { tag: r_tag, doc: r_doc } = - doc_at(self.parent.data, self.pos); - debug!("self.parent=%?-%? self.pos=%? r_tag=%? r_doc=%?-%?", - copy self.parent.start, copy self.parent.end, - copy self.pos, r_tag, r_doc.start, r_doc.end); - if r_tag != (exp_tag as uint) { - fail!(fmt!("expected EBML doc with tag %? but found tag %?", - exp_tag, r_tag)); - } - if r_doc.end > self.parent.end { - fail!(fmt!("invalid EBML, child extends to 0x%x, \ - parent to 0x%x", r_doc.end, self.parent.end)); - } - self.pos = r_doc.end; - r_doc - } - - #[cfg(not(stage0))] fn next_doc(&mut self, exp_tag: EbmlEncoderTag) -> Doc { debug!(". next_doc(exp_tag=%?)", exp_tag); if self.pos >= self.parent.end { @@ -365,19 +315,6 @@ pub mod reader { r_doc } - #[cfg(stage0)] - fn push_doc(&self, d: Doc, f: &fn() -> T) -> T { - let old_parent = self.parent; - let old_pos = self.pos; - self.parent = d; - self.pos = d.start; - let r = f(); - self.parent = old_parent; - self.pos = old_pos; - r - } - - #[cfg(not(stage0))] fn push_doc(&mut self, d: Doc, f: &fn() -> T) -> T { let old_parent = self.parent; let old_pos = self.pos; @@ -389,14 +326,6 @@ pub mod reader { r } - #[cfg(stage0)] - fn _next_uint(&self, exp_tag: EbmlEncoderTag) -> uint { - let r = doc_as_u32(self.next_doc(exp_tag)); - debug!("_next_uint exp_tag=%? result=%?", exp_tag, r); - r as uint - } - - #[cfg(not(stage0))] fn _next_uint(&mut self, exp_tag: EbmlEncoderTag) -> uint { let r = doc_as_u32(self.next_doc(exp_tag)); debug!("_next_uint exp_tag=%? result=%?", exp_tag, r); @@ -405,14 +334,6 @@ pub mod reader { } pub impl Decoder { - #[cfg(stage0)] - fn read_opaque(&self, op: &fn(Doc) -> R) -> R { - do self.push_doc(self.next_doc(EsOpaque)) { - op(copy self.parent) - } - } - - #[cfg(not(stage0))] fn read_opaque(&mut self, op: &fn(&mut Decoder, Doc) -> R) -> R { let doc = self.next_doc(EsOpaque); @@ -428,188 +349,6 @@ pub mod reader { } } - #[cfg(stage0)] - impl serialize::Decoder for Decoder { - fn read_nil(&self) -> () { () } - - fn read_u64(&self) -> u64 { doc_as_u64(self.next_doc(EsU64)) } - fn read_u32(&self) -> u32 { doc_as_u32(self.next_doc(EsU32)) } - fn read_u16(&self) -> u16 { doc_as_u16(self.next_doc(EsU16)) } - fn read_u8 (&self) -> u8 { doc_as_u8 (self.next_doc(EsU8 )) } - fn read_uint(&self) -> uint { - let v = doc_as_u64(self.next_doc(EsUint)); - if v > (::core::uint::max_value as u64) { - fail!(fmt!("uint %? too large for this architecture", v)); - } - v as uint - } - - fn read_i64(&self) -> i64 { - doc_as_u64(self.next_doc(EsI64)) as i64 - } - fn read_i32(&self) -> i32 { - doc_as_u32(self.next_doc(EsI32)) as i32 - } - fn read_i16(&self) -> i16 { - doc_as_u16(self.next_doc(EsI16)) as i16 - } - fn read_i8 (&self) -> i8 { - doc_as_u8(self.next_doc(EsI8 )) as i8 - } - fn read_int(&self) -> int { - let v = doc_as_u64(self.next_doc(EsInt)) as i64; - if v > (int::max_value as i64) || v < (int::min_value as i64) { - fail!(fmt!("int %? out of range for this architecture", v)); - } - v as int - } - - fn read_bool(&self) -> bool { - doc_as_u8(self.next_doc(EsBool)) as bool - } - - fn read_f64(&self) -> f64 { fail!(~"read_f64()"); } - fn read_f32(&self) -> f32 { fail!(~"read_f32()"); } - fn read_float(&self) -> float { fail!(~"read_float()"); } - fn read_char(&self) -> char { fail!(~"read_char()"); } - fn read_str(&self) -> ~str { doc_as_str(self.next_doc(EsStr)) } - - // Compound types: - fn read_enum(&self, name: &str, f: &fn() -> T) -> T { - debug!("read_enum(%s)", name); - self._check_label(name); - self.push_doc(self.next_doc(EsEnum), f) - } - - fn read_enum_variant(&self, - _: &[&str], - f: &fn(uint) -> T) - -> T { - debug!("read_enum_variant()"); - let idx = self._next_uint(EsEnumVid); - debug!(" idx=%u", idx); - do self.push_doc(self.next_doc(EsEnumBody)) { - f(idx) - } - } - - fn read_enum_variant_arg(&self, - idx: uint, - f: &fn() -> T) -> T { - debug!("read_enum_variant_arg(idx=%u)", idx); - f() - } - - fn read_enum_struct_variant(&self, - _: &[&str], - f: &fn(uint) -> T) - -> T { - debug!("read_enum_struct_variant()"); - let idx = self._next_uint(EsEnumVid); - debug!(" idx=%u", idx); - do self.push_doc(self.next_doc(EsEnumBody)) { - f(idx) - } - } - - fn read_enum_struct_variant_field(&self, - name: &str, - idx: uint, - f: &fn() -> T) - -> T { - debug!("read_enum_struct_variant_arg(name=%?, idx=%u)", name, idx); - f() - } - - fn read_struct(&self, - name: &str, - _: uint, - f: &fn() -> T) - -> T { - debug!("read_struct(name=%s)", name); - f() - } - - fn read_field(&self, - name: &str, - idx: uint, - f: &fn() -> T) - -> T { - debug!("read_field(name=%?, idx=%u)", name, idx); - self._check_label(name); - f() - } - - fn read_tuple(&self, f: &fn(uint) -> T) -> T { - debug!("read_tuple()"); - self.read_seq(f) - } - - fn read_tuple_arg(&self, idx: uint, f: &fn() -> T) -> T { - debug!("read_tuple_arg(idx=%u)", idx); - self.read_seq_elt(idx, f) - } - - fn read_tuple_struct(&self, - name: &str, - f: &fn(uint) -> T) - -> T { - debug!("read_tuple_struct(name=%?)", name); - self.read_tuple(f) - } - - fn read_tuple_struct_arg(&self, - idx: uint, - f: &fn() -> T) - -> T { - debug!("read_tuple_struct_arg(idx=%u)", idx); - self.read_tuple_arg(idx, f) - } - - fn read_option(&self, f: &fn(bool) -> T) -> T { - debug!("read_option()"); - do self.read_enum("Option") || { - do self.read_enum_variant(["None", "Some"]) |idx| { - match idx { - 0 => f(false), - 1 => f(true), - _ => fail!(), - } - } - } - } - - fn read_seq(&self, f: &fn(uint) -> T) -> T { - debug!("read_seq()"); - do self.push_doc(self.next_doc(EsVec)) { - let len = self._next_uint(EsVecLen); - debug!(" len=%u", len); - f(len) - } - } - - fn read_seq_elt(&self, idx: uint, f: &fn() -> T) -> T { - debug!("read_seq_elt(idx=%u)", idx); - self.push_doc(self.next_doc(EsVecElt), f) - } - - fn read_map(&self, _f: &fn(uint) -> T) -> T { - debug!("read_map()"); - fail!(~"read_map is unimplemented"); - } - - fn read_map_elt_key(&self, idx: uint, _f: &fn() -> T) -> T { - debug!("read_map_elt_key(idx=%u)", idx); - fail!(~"read_map_elt_val is unimplemented"); - } - - fn read_map_elt_val(&self, idx: uint, _f: &fn() -> T) -> T { - debug!("read_map_elt_val(idx=%u)", idx); - fail!(~"read_map_elt_val is unimplemented"); - } - } - - #[cfg(not(stage0))] impl serialize::Decoder for Decoder { fn read_nil(&mut self) -> () { () } @@ -891,104 +630,6 @@ pub mod writer { } // FIXME (#2741): Provide a function to write the standard ebml header. - #[cfg(stage0)] - pub impl Encoder { - fn start_tag(&self, tag_id: uint) { - debug!("Start tag %u", tag_id); - - // Write the enum ID: - write_vuint(self.writer, tag_id); - - // Write a placeholder four-byte size. - self.size_positions.push(self.writer.tell()); - let zeroes: &[u8] = &[0u8, 0u8, 0u8, 0u8]; - self.writer.write(zeroes); - } - - fn end_tag(&self) { - let last_size_pos = self.size_positions.pop(); - let cur_pos = self.writer.tell(); - self.writer.seek(last_size_pos as int, io::SeekSet); - let size = (cur_pos - last_size_pos - 4u); - write_sized_vuint(self.writer, size, 4u); - self.writer.seek(cur_pos as int, io::SeekSet); - - debug!("End tag (size = %u)", size); - } - - fn wr_tag(&self, tag_id: uint, blk: &fn()) { - self.start_tag(tag_id); - blk(); - self.end_tag(); - } - - fn wr_tagged_bytes(&self, tag_id: uint, b: &[u8]) { - write_vuint(self.writer, tag_id); - write_vuint(self.writer, vec::len(b)); - self.writer.write(b); - } - - fn wr_tagged_u64(&self, tag_id: uint, v: u64) { - do io::u64_to_be_bytes(v, 8u) |v| { - self.wr_tagged_bytes(tag_id, v); - } - } - - fn wr_tagged_u32(&self, tag_id: uint, v: u32) { - do io::u64_to_be_bytes(v as u64, 4u) |v| { - self.wr_tagged_bytes(tag_id, v); - } - } - - fn wr_tagged_u16(&self, tag_id: uint, v: u16) { - do io::u64_to_be_bytes(v as u64, 2u) |v| { - self.wr_tagged_bytes(tag_id, v); - } - } - - fn wr_tagged_u8(&self, tag_id: uint, v: u8) { - self.wr_tagged_bytes(tag_id, &[v]); - } - - fn wr_tagged_i64(&self, tag_id: uint, v: i64) { - do io::u64_to_be_bytes(v as u64, 8u) |v| { - self.wr_tagged_bytes(tag_id, v); - } - } - - fn wr_tagged_i32(&self, tag_id: uint, v: i32) { - do io::u64_to_be_bytes(v as u64, 4u) |v| { - self.wr_tagged_bytes(tag_id, v); - } - } - - fn wr_tagged_i16(&self, tag_id: uint, v: i16) { - do io::u64_to_be_bytes(v as u64, 2u) |v| { - self.wr_tagged_bytes(tag_id, v); - } - } - - fn wr_tagged_i8(&self, tag_id: uint, v: i8) { - self.wr_tagged_bytes(tag_id, &[v as u8]); - } - - fn wr_tagged_str(&self, tag_id: uint, v: &str) { - str::byte_slice(v, |b| self.wr_tagged_bytes(tag_id, b)); - } - - fn wr_bytes(&self, b: &[u8]) { - debug!("Write %u bytes", vec::len(b)); - self.writer.write(b); - } - - fn wr_str(&self, s: &str) { - debug!("Write str: %?", s); - self.writer.write(str::to_bytes(s)); - } - } - - // FIXME (#2741): Provide a function to write the standard ebml header. - #[cfg(not(stage0))] pub impl Encoder { fn start_tag(&mut self, tag_id: uint) { debug!("Start tag %u", tag_id); @@ -1091,26 +732,6 @@ pub mod writer { // Totally lame approach. static debug: bool = true; - #[cfg(stage0)] - priv impl Encoder { - // used internally to emit things like the vector length and so on - fn _emit_tagged_uint(&self, t: EbmlEncoderTag, v: uint) { - assert!(v <= 0xFFFF_FFFF_u); - self.wr_tagged_u32(t as uint, v as u32); - } - - fn _emit_label(&self, label: &str) { - // There are various strings that we have access to, such as - // the name of a record field, which do not actually appear in - // the encoded EBML (normally). This is just for - // efficiency. When debugging, though, we can emit such - // labels and then they will be checked by decoder to - // try and check failures more quickly. - if debug { self.wr_tagged_str(EsLabel as uint, label) } - } - } - - #[cfg(not(stage0))] priv impl Encoder { // used internally to emit things like the vector length and so on fn _emit_tagged_uint(&mut self, t: EbmlEncoderTag, v: uint) { @@ -1129,16 +750,6 @@ pub mod writer { } } - #[cfg(stage0)] - pub impl Encoder { - fn emit_opaque(&self, f: &fn()) { - do self.wr_tag(EsOpaque as uint) { - f() - } - } - } - - #[cfg(not(stage0))] pub impl Encoder { fn emit_opaque(&mut self, f: &fn(&mut Encoder)) { self.start_tag(EsOpaque as uint); @@ -1147,156 +758,6 @@ pub mod writer { } } - #[cfg(stage0)] - impl ::serialize::Encoder for Encoder { - fn emit_nil(&self) {} - - fn emit_uint(&self, v: uint) { - self.wr_tagged_u64(EsUint as uint, v as u64); - } - fn emit_u64(&self, v: u64) { - self.wr_tagged_u64(EsU64 as uint, v); - } - fn emit_u32(&self, v: u32) { - self.wr_tagged_u32(EsU32 as uint, v); - } - fn emit_u16(&self, v: u16) { - self.wr_tagged_u16(EsU16 as uint, v); - } - fn emit_u8(&self, v: u8) { - self.wr_tagged_u8(EsU8 as uint, v); - } - - fn emit_int(&self, v: int) { - self.wr_tagged_i64(EsInt as uint, v as i64); - } - fn emit_i64(&self, v: i64) { - self.wr_tagged_i64(EsI64 as uint, v); - } - fn emit_i32(&self, v: i32) { - self.wr_tagged_i32(EsI32 as uint, v); - } - fn emit_i16(&self, v: i16) { - self.wr_tagged_i16(EsI16 as uint, v); - } - fn emit_i8(&self, v: i8) { - self.wr_tagged_i8(EsI8 as uint, v); - } - - fn emit_bool(&self, v: bool) { - self.wr_tagged_u8(EsBool as uint, v as u8) - } - - // FIXME (#2742): implement these - fn emit_f64(&self, _v: f64) { - fail!(~"Unimplemented: serializing an f64"); - } - fn emit_f32(&self, _v: f32) { - fail!(~"Unimplemented: serializing an f32"); - } - fn emit_float(&self, _v: float) { - fail!(~"Unimplemented: serializing a float"); - } - - fn emit_char(&self, _v: char) { - fail!(~"Unimplemented: serializing a char"); - } - - fn emit_str(&self, v: &str) { - self.wr_tagged_str(EsStr as uint, v) - } - - fn emit_enum(&self, name: &str, f: &fn()) { - self._emit_label(name); - self.wr_tag(EsEnum as uint, f) - } - - fn emit_enum_variant(&self, - _: &str, - v_id: uint, - _: uint, - f: &fn()) { - self._emit_tagged_uint(EsEnumVid, v_id); - self.wr_tag(EsEnumBody as uint, f) - } - - fn emit_enum_variant_arg(&self, _: uint, f: &fn()) { - f() - } - - fn emit_enum_struct_variant(&self, - v_name: &str, - v_id: uint, - cnt: uint, - f: &fn()) { - self.emit_enum_variant(v_name, v_id, cnt, f) - } - - fn emit_enum_struct_variant_field(&self, - _: &str, - idx: uint, - f: &fn()) { - self.emit_enum_variant_arg(idx, f) - } - - fn emit_struct(&self, _: &str, _len: uint, f: &fn()) { - f() - } - - fn emit_field(&self, name: &str, _idx: uint, f: &fn()) { - self._emit_label(name); - f() - } - - fn emit_tuple(&self, len: uint, f: &fn()) { - self.emit_seq(len, f) - } - fn emit_tuple_arg(&self, idx: uint, f: &fn()) { - self.emit_seq_elt(idx, f) - } - - fn emit_tuple_struct(&self, _name: &str, len: uint, f: &fn()) { - self.emit_seq(len, f) - } - fn emit_tuple_struct_arg(&self, idx: uint, f: &fn()) { - self.emit_seq_elt(idx, f) - } - - fn emit_option(&self, f: &fn()) { - self.emit_enum("Option", f); - } - fn emit_option_none(&self) { - self.emit_enum_variant("None", 0, 0, || ()) - } - fn emit_option_some(&self, f: &fn()) { - self.emit_enum_variant("Some", 1, 1, f) - } - - fn emit_seq(&self, len: uint, f: &fn()) { - do self.wr_tag(EsVec as uint) { - self._emit_tagged_uint(EsVecLen, len); - f() - } - } - - fn emit_seq_elt(&self, _idx: uint, f: &fn()) { - self.wr_tag(EsVecElt as uint, f) - } - - fn emit_map(&self, _len: uint, _f: &fn()) { - fail!(~"emit_map is unimplemented"); - } - - fn emit_map_elt_key(&self, _idx: uint, _f: &fn()) { - fail!(~"emit_map_elt_key is unimplemented"); - } - - fn emit_map_elt_val(&self, _idx: uint, _f: &fn()) { - fail!(~"emit_map_elt_val is unimplemented"); - } - } - - #[cfg(not(stage0))] impl ::serialize::Encoder for Encoder { fn emit_nil(&mut self) {} diff --git a/src/libstd/flatpipes.rs b/src/libstd/flatpipes.rs index 52d6afbb93e86..88de53f360519 100644 --- a/src/libstd/flatpipes.rs +++ b/src/libstd/flatpipes.rs @@ -438,19 +438,6 @@ pub mod flatteners { SerializingFlattener */ - #[cfg(stage0)] - pub fn deserialize_buffer>( - buf: &[u8]) - -> T { - let buf = vec::from_slice(buf); - let buf_reader = @BufReader::new(buf); - let reader = buf_reader as @Reader; - let deser: D = FromReader::from_reader(reader); - Decodable::decode(&deser) - } - - #[cfg(not(stage0))] pub fn deserialize_buffer>( buf: &[u8]) @@ -462,18 +449,6 @@ pub mod flatteners { Decodable::decode(&mut deser) } - #[cfg(stage0)] - pub fn serialize_value>( - val: &T) - -> ~[u8] { - do io::with_bytes_writer |writer| { - let ser = FromWriter::from_writer(writer); - val.encode(&ser); - } - } - - #[cfg(not(stage0))] pub fn serialize_value>( val: &T) diff --git a/src/libstd/future.rs b/src/libstd/future.rs index a0312849a35cb..5e3e64b2f1cfa 100644 --- a/src/libstd/future.rs +++ b/src/libstd/future.rs @@ -54,35 +54,6 @@ pub impl Future { } pub impl Future { - #[cfg(stage0)] - fn get_ref(&self) -> &'self A { - /*! - * Executes the future's closure and then returns a borrowed - * pointer to the result. The borrowed pointer lasts as long as - * the future. - */ - unsafe { - match self.state { - Forced(ref mut v) => { return cast::transmute(v); } - Evaluating => fail!(~"Recursive forcing of future!"), - Pending(_) => {} - } - - let mut state = Evaluating; - self.state <-> state; - match state { - Forced(_) | Evaluating => fail!(~"Logic error."), - Pending(f) => { - self.state = Forced(f()); - self.get_ref() - } - } - } - } - - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn get_ref<'a>(&'a self) -> &'a A { /*! * Executes the future's closure and then returns a borrowed diff --git a/src/libstd/json.rs b/src/libstd/json.rs index 6951ee377c92a..3960a07dfce7b 100644 --- a/src/libstd/json.rs +++ b/src/libstd/json.rs @@ -77,150 +77,6 @@ pub fn Encoder(wr: @io::Writer) -> Encoder { } } -#[cfg(stage0)] -impl serialize::Encoder for Encoder { - fn emit_nil(&self) { self.wr.write_str("null") } - - fn emit_uint(&self, v: uint) { self.emit_float(v as float); } - fn emit_u64(&self, v: u64) { self.emit_float(v as float); } - fn emit_u32(&self, v: u32) { self.emit_float(v as float); } - fn emit_u16(&self, v: u16) { self.emit_float(v as float); } - fn emit_u8(&self, v: u8) { self.emit_float(v as float); } - - fn emit_int(&self, v: int) { self.emit_float(v as float); } - fn emit_i64(&self, v: i64) { self.emit_float(v as float); } - fn emit_i32(&self, v: i32) { self.emit_float(v as float); } - fn emit_i16(&self, v: i16) { self.emit_float(v as float); } - fn emit_i8(&self, v: i8) { self.emit_float(v as float); } - - fn emit_bool(&self, v: bool) { - if v { - self.wr.write_str("true"); - } else { - self.wr.write_str("false"); - } - } - - fn emit_f64(&self, v: f64) { self.emit_float(v as float); } - fn emit_f32(&self, v: f32) { self.emit_float(v as float); } - fn emit_float(&self, v: float) { - self.wr.write_str(float::to_str_digits(v, 6u)); - } - - fn emit_char(&self, v: char) { self.emit_str(str::from_char(v)) } - fn emit_str(&self, v: &str) { self.wr.write_str(escape_str(v)) } - - fn emit_enum(&self, _name: &str, f: &fn()) { f() } - - fn emit_enum_variant(&self, - name: &str, - _id: uint, - cnt: uint, - f: &fn()) { - // enums are encoded as strings or vectors: - // Bunny => "Bunny" - // Kangaroo(34,"William") => ["Kangaroo",[34,"William"]] - - if cnt == 0 { - self.wr.write_str(escape_str(name)); - } else { - self.wr.write_char('['); - self.wr.write_str(escape_str(name)); - self.wr.write_char(','); - f(); - self.wr.write_char(']'); - } - } - - fn emit_enum_variant_arg(&self, idx: uint, f: &fn()) { - if idx != 0 {self.wr.write_char(',');} - f(); - } - - fn emit_enum_struct_variant(&self, - name: &str, - id: uint, - cnt: uint, - f: &fn()) { - self.emit_enum_variant(name, id, cnt, f) - } - - fn emit_enum_struct_variant_field(&self, - _: &str, - idx: uint, - f: &fn()) { - self.emit_enum_variant_arg(idx, f) - } - - fn emit_struct(&self, _: &str, _: uint, f: &fn()) { - self.wr.write_char('{'); - f(); - self.wr.write_char('}'); - } - - #[cfg(stage0)] - fn emit_field(&self, name: &str, idx: uint, f: &fn()) { - if idx != 0 { self.wr.write_char(','); } - self.wr.write_str(escape_str(name)); - self.wr.write_char(':'); - f(); - } - - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] - fn emit_struct_field(&self, name: &str, idx: uint, f: &fn()) { - if idx != 0 { self.wr.write_char(','); } - self.wr.write_str(escape_str(name)); - self.wr.write_char(':'); - f(); - } - - fn emit_tuple(&self, len: uint, f: &fn()) { self.emit_seq(len, f) } - fn emit_tuple_arg(&self, idx: uint, f: &fn()) { - self.emit_seq_elt(idx, f) - } - - fn emit_tuple_struct(&self, _name: &str, len: uint, f: &fn()) { - self.emit_seq(len, f) - } - fn emit_tuple_struct_arg(&self, idx: uint, f: &fn()) { - self.emit_seq_elt(idx, f) - } - - fn emit_option(&self, f: &fn()) { f(); } - fn emit_option_none(&self) { self.emit_nil(); } - fn emit_option_some(&self, f: &fn()) { f(); } - - fn emit_seq(&self, _len: uint, f: &fn()) { - self.wr.write_char('['); - f(); - self.wr.write_char(']'); - } - - fn emit_seq_elt(&self, idx: uint, f: &fn()) { - if idx != 0 { self.wr.write_char(','); } - f() - } - - fn emit_map(&self, _len: uint, f: &fn()) { - self.wr.write_char('{'); - f(); - self.wr.write_char('}'); - } - - fn emit_map_elt_key(&self, idx: uint, f: &fn()) { - if idx != 0 { self.wr.write_char(','); } - f() - } - - fn emit_map_elt_val(&self, _idx: uint, f: &fn()) { - self.wr.write_char(':'); - f() - } -} - -#[cfg(not(stage0))] impl serialize::Encoder for Encoder { fn emit_nil(&mut self) { self.wr.write_str("null") } @@ -376,202 +232,6 @@ pub fn PrettyEncoder(wr: @io::Writer) -> PrettyEncoder { } } -#[cfg(stage0)] -impl serialize::Encoder for PrettyEncoder { - fn emit_nil(&self) { self.wr.write_str("null") } - - fn emit_uint(&self, v: uint) { self.emit_float(v as float); } - fn emit_u64(&self, v: u64) { self.emit_float(v as float); } - fn emit_u32(&self, v: u32) { self.emit_float(v as float); } - fn emit_u16(&self, v: u16) { self.emit_float(v as float); } - fn emit_u8(&self, v: u8) { self.emit_float(v as float); } - - fn emit_int(&self, v: int) { self.emit_float(v as float); } - fn emit_i64(&self, v: i64) { self.emit_float(v as float); } - fn emit_i32(&self, v: i32) { self.emit_float(v as float); } - fn emit_i16(&self, v: i16) { self.emit_float(v as float); } - fn emit_i8(&self, v: i8) { self.emit_float(v as float); } - - fn emit_bool(&self, v: bool) { - if v { - self.wr.write_str("true"); - } else { - self.wr.write_str("false"); - } - } - - fn emit_f64(&self, v: f64) { self.emit_float(v as float); } - fn emit_f32(&self, v: f32) { self.emit_float(v as float); } - fn emit_float(&self, v: float) { - self.wr.write_str(float::to_str_digits(v, 6u)); - } - - fn emit_char(&self, v: char) { self.emit_str(str::from_char(v)) } - fn emit_str(&self, v: &str) { self.wr.write_str(escape_str(v)); } - - fn emit_enum(&self, _name: &str, f: &fn()) { f() } - - fn emit_enum_variant(&self, - name: &str, - _: uint, - cnt: uint, - f: &fn()) { - if cnt == 0 { - self.wr.write_str(escape_str(name)); - } else { - self.wr.write_char('['); - self.indent += 2; - self.wr.write_char('\n'); - self.wr.write_str(spaces(self.indent)); - self.wr.write_str(escape_str(name)); - self.wr.write_str(",\n"); - f(); - self.wr.write_char('\n'); - self.indent -= 2; - self.wr.write_str(spaces(self.indent)); - self.wr.write_char(']'); - } - } - - fn emit_enum_variant_arg(&self, idx: uint, f: &fn()) { - if idx != 0 { - self.wr.write_str(",\n"); - } - self.wr.write_str(spaces(self.indent)); - f() - } - - fn emit_enum_struct_variant(&self, - name: &str, - id: uint, - cnt: uint, - f: &fn()) { - self.emit_enum_variant(name, id, cnt, f) - } - - fn emit_enum_struct_variant_field(&self, - _: &str, - idx: uint, - f: &fn()) { - self.emit_enum_variant_arg(idx, f) - } - - - fn emit_struct(&self, _name: &str, len: uint, f: &fn()) { - if len == 0 { - self.wr.write_str("{}"); - } else { - self.wr.write_char('{'); - self.indent += 2; - f(); - self.wr.write_char('\n'); - self.indent -= 2; - self.wr.write_str(spaces(self.indent)); - self.wr.write_char('}'); - } - } - - #[cfg(stage0)] - fn emit_field(&self, name: &str, idx: uint, f: &fn()) { - if idx == 0 { - self.wr.write_char('\n'); - } else { - self.wr.write_str(",\n"); - } - self.wr.write_str(spaces(self.indent)); - self.wr.write_str(escape_str(name)); - self.wr.write_str(": "); - f(); - } - - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] - fn emit_struct_field(&self, name: &str, idx: uint, f: &fn()) { - if idx == 0 { - self.wr.write_char('\n'); - } else { - self.wr.write_str(",\n"); - } - self.wr.write_str(spaces(self.indent)); - self.wr.write_str(escape_str(name)); - self.wr.write_str(": "); - f(); - } - - fn emit_tuple(&self, len: uint, f: &fn()) { - self.emit_seq(len, f) - } - fn emit_tuple_arg(&self, idx: uint, f: &fn()) { - self.emit_seq_elt(idx, f) - } - - fn emit_tuple_struct(&self, _name: &str, len: uint, f: &fn()) { - self.emit_seq(len, f) - } - fn emit_tuple_struct_arg(&self, idx: uint, f: &fn()) { - self.emit_seq_elt(idx, f) - } - - fn emit_option(&self, f: &fn()) { f(); } - fn emit_option_none(&self) { self.emit_nil(); } - fn emit_option_some(&self, f: &fn()) { f(); } - - fn emit_seq(&self, len: uint, f: &fn()) { - if len == 0 { - self.wr.write_str("[]"); - } else { - self.wr.write_char('['); - self.indent += 2; - f(); - self.wr.write_char('\n'); - self.indent -= 2; - self.wr.write_str(spaces(self.indent)); - self.wr.write_char(']'); - } - } - - fn emit_seq_elt(&self, idx: uint, f: &fn()) { - if idx == 0 { - self.wr.write_char('\n'); - } else { - self.wr.write_str(",\n"); - } - self.wr.write_str(spaces(self.indent)); - f() - } - - fn emit_map(&self, len: uint, f: &fn()) { - if len == 0 { - self.wr.write_str("{}"); - } else { - self.wr.write_char('{'); - self.indent += 2; - f(); - self.wr.write_char('\n'); - self.indent -= 2; - self.wr.write_str(spaces(self.indent)); - self.wr.write_char('}'); - } - } - - fn emit_map_elt_key(&self, idx: uint, f: &fn()) { - if idx == 0 { - self.wr.write_char('\n'); - } else { - self.wr.write_str(",\n"); - } - self.wr.write_str(spaces(self.indent)); - f(); - } - - fn emit_map_elt_val(&self, _idx: uint, f: &fn()) { - self.wr.write_str(": "); - f(); - } -} - -#[cfg(not(stage0))] impl serialize::Encoder for PrettyEncoder { fn emit_nil(&mut self) { self.wr.write_str("null") } @@ -765,21 +425,6 @@ impl serialize::Encoder for PrettyEncoder { } } -#[cfg(stage0)] -impl serialize::Encodable for Json { - fn encode(&self, e: &E) { - match *self { - Number(v) => v.encode(e), - String(ref v) => v.encode(e), - Boolean(v) => v.encode(e), - List(ref v) => v.encode(e), - Object(ref v) => v.encode(e), - Null => e.emit_nil(), - } - } -} - -#[cfg(not(stage0))] impl serialize::Encodable for Json { fn encode(&self, e: &mut E) { match *self { @@ -794,14 +439,6 @@ impl serialize::Encodable for Json { } /// Encodes a json value into a io::writer -#[cfg(stage0)] -pub fn to_writer(wr: @io::Writer, json: &Json) { - let encoder = Encoder(wr); - json.encode(&encoder) -} - -/// Encodes a json value into a io::writer -#[cfg(not(stage0))] pub fn to_writer(wr: @io::Writer, json: &Json) { let mut encoder = Encoder(wr); json.encode(&mut encoder) @@ -813,14 +450,6 @@ pub fn to_str(json: &Json) -> ~str { } /// Encodes a json value into a io::writer -#[cfg(stage0)] -pub fn to_pretty_writer(wr: @io::Writer, json: &Json) { - let encoder = PrettyEncoder(wr); - json.encode(&encoder) -} - -/// Encodes a json value into a io::writer -#[cfg(not(stage0))] pub fn to_pretty_writer(wr: @io::Writer, json: &Json) { let mut encoder = PrettyEncoder(wr); json.encode(&mut encoder) @@ -1219,243 +848,6 @@ pub fn Decoder(json: Json) -> Decoder { } } -#[cfg(stage0)] -impl serialize::Decoder for Decoder { - fn read_nil(&self) -> () { - debug!("read_nil"); - match self.stack.pop() { - Null => (), - value => fail!(fmt!("not a null: %?", value)) - } - } - - fn read_u64(&self) -> u64 { self.read_float() as u64 } - fn read_u32(&self) -> u32 { self.read_float() as u32 } - fn read_u16(&self) -> u16 { self.read_float() as u16 } - fn read_u8 (&self) -> u8 { self.read_float() as u8 } - fn read_uint(&self) -> uint { self.read_float() as uint } - - fn read_i64(&self) -> i64 { self.read_float() as i64 } - fn read_i32(&self) -> i32 { self.read_float() as i32 } - fn read_i16(&self) -> i16 { self.read_float() as i16 } - fn read_i8 (&self) -> i8 { self.read_float() as i8 } - fn read_int(&self) -> int { self.read_float() as int } - - fn read_bool(&self) -> bool { - debug!("read_bool"); - match self.stack.pop() { - Boolean(b) => b, - value => fail!(fmt!("not a boolean: %?", value)) - } - } - - fn read_f64(&self) -> f64 { self.read_float() as f64 } - fn read_f32(&self) -> f32 { self.read_float() as f32 } - fn read_float(&self) -> float { - debug!("read_float"); - match self.stack.pop() { - Number(f) => f, - value => fail!(fmt!("not a number: %?", value)) - } - } - - fn read_char(&self) -> char { - let mut v = ~[]; - for str::each_char(self.read_str()) |c| { v.push(c) } - if v.len() != 1 { fail!(~"string must have one character") } - v[0] - } - - fn read_str(&self) -> ~str { - debug!("read_str"); - match self.stack.pop() { - String(s) => s, - json => fail!(fmt!("not a string: %?", json)) - } - } - - fn read_enum(&self, name: &str, f: &fn() -> T) -> T { - debug!("read_enum(%s)", name); - f() - } - - fn read_enum_variant(&self, - names: &[&str], - f: &fn(uint) -> T) - -> T { - debug!("read_enum_variant(names=%?)", names); - let name = match self.stack.pop() { - String(s) => s, - List(list) => { - do vec::consume_reverse(list) |_i, v| { - self.stack.push(v); - } - match self.stack.pop() { - String(s) => s, - value => fail!(fmt!("invalid variant name: %?", value)), - } - } - ref json => fail!(fmt!("invalid variant: %?", *json)), - }; - let idx = match vec::position(names, |n| str::eq_slice(*n, name)) { - Some(idx) => idx, - None => fail!(fmt!("Unknown variant name: %?", name)), - }; - f(idx) - } - - fn read_enum_variant_arg(&self, idx: uint, f: &fn() -> T) -> T { - debug!("read_enum_variant_arg(idx=%u)", idx); - f() - } - - fn read_enum_struct_variant(&self, - names: &[&str], - f: &fn(uint) -> T) - -> T { - debug!("read_enum_struct_variant(names=%?)", names); - self.read_enum_variant(names, f) - } - - - fn read_enum_struct_variant_field(&self, - name: &str, - idx: uint, - f: &fn() -> T) - -> T { - debug!("read_enum_struct_variant_field(name=%?, idx=%u)", name, idx); - self.read_enum_variant_arg(idx, f) - } - - fn read_struct(&self, name: &str, len: uint, f: &fn() -> T) -> T { - debug!("read_struct(name=%s, len=%u)", name, len); - let value = f(); - self.stack.pop(); - value - } - - #[cfg(stage0)] - fn read_field(&self, name: &str, idx: uint, f: &fn() -> T) -> T { - debug!("read_field(name=%?, idx=%u)", name, idx); - match self.stack.pop() { - Object(obj) => { - let mut obj = obj; - let value = match obj.pop(&name.to_owned()) { - None => fail!(fmt!("no such field: %s", name)), - Some(json) => { - self.stack.push(json); - f() - } - }; - self.stack.push(Object(obj)); - value - } - value => fail!(fmt!("not an object: %?", value)) - } - } - - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] - fn read_struct_field(&self, - name: &str, - idx: uint, - f: &fn() -> T) - -> T { - debug!("read_struct_field(name=%?, idx=%u)", name, idx); - match self.stack.pop() { - Object(obj) => { - let mut obj = obj; - let value = match obj.pop(&name.to_owned()) { - None => fail!(fmt!("no such field: %s", name)), - Some(json) => { - self.stack.push(json); - f() - } - }; - self.stack.push(Object(obj)); - value - } - value => fail!(fmt!("not an object: %?", value)) - } - } - - fn read_tuple(&self, f: &fn(uint) -> T) -> T { - debug!("read_tuple()"); - self.read_seq(f) - } - - fn read_tuple_arg(&self, idx: uint, f: &fn() -> T) -> T { - debug!("read_tuple_arg(idx=%u)", idx); - self.read_seq_elt(idx, f) - } - - fn read_tuple_struct(&self, name: &str, f: &fn(uint) -> T) -> T { - debug!("read_tuple_struct(name=%?)", name); - self.read_tuple(f) - } - - fn read_tuple_struct_arg(&self, idx: uint, f: &fn() -> T) -> T { - debug!("read_tuple_struct_arg(idx=%u)", idx); - self.read_tuple_arg(idx, f) - } - - fn read_option(&self, f: &fn(bool) -> T) -> T { - match self.stack.pop() { - Null => f(false), - value => { self.stack.push(value); f(true) } - } - } - - fn read_seq(&self, f: &fn(uint) -> T) -> T { - debug!("read_seq()"); - let len = match self.stack.pop() { - List(list) => { - let len = list.len(); - do vec::consume_reverse(list) |_i, v| { - self.stack.push(v); - } - len - } - _ => fail!(~"not a list"), - }; - f(len) - } - - fn read_seq_elt(&self, idx: uint, f: &fn() -> T) -> T { - debug!("read_seq_elt(idx=%u)", idx); - f() - } - - fn read_map(&self, f: &fn(uint) -> T) -> T { - debug!("read_map()"); - let len = match self.stack.pop() { - Object(obj) => { - let mut obj = obj; - let len = obj.len(); - do obj.consume |key, value| { - self.stack.push(value); - self.stack.push(String(key)); - } - len - } - json => fail!(fmt!("not an object: %?", json)), - }; - f(len) - } - - fn read_map_elt_key(&self, idx: uint, f: &fn() -> T) -> T { - debug!("read_map_elt_key(idx=%u)", idx); - f() - } - - fn read_map_elt_val(&self, idx: uint, f: &fn() -> T) -> T { - debug!("read_map_elt_val(idx=%u)", idx); - f() - } -} - -#[cfg(not(stage0))] impl serialize::Decoder for Decoder { fn read_nil(&mut self) -> () { debug!("read_nil"); @@ -1577,29 +969,6 @@ impl serialize::Decoder for Decoder { value } - #[cfg(stage0)] - fn read_field(&mut self, name: &str, idx: uint, f: &fn() -> T) -> T { - debug!("read_field(name=%?, idx=%u)", name, idx); - match self.stack.pop() { - Object(obj) => { - let mut obj = obj; - let value = match obj.pop(&name.to_owned()) { - None => fail!(fmt!("no such field: %s", name)), - Some(json) => { - self.stack.push(json); - f() - } - }; - self.stack.push(Object(obj)); - value - } - value => fail!(fmt!("not an object: %?", value)) - } - } - - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn read_struct_field(&mut self, name: &str, idx: uint, diff --git a/src/libstd/priority_queue.rs b/src/libstd/priority_queue.rs index 47af3576c9062..33fe1cfff8e59 100644 --- a/src/libstd/priority_queue.rs +++ b/src/libstd/priority_queue.rs @@ -45,25 +45,9 @@ impl Mutable for PriorityQueue { pub impl PriorityQueue { /// Returns the greatest item in the queue - fails if empty - #[cfg(stage0)] - fn top(&self) -> &'self T { &self.data[0] } - - /// Returns the greatest item in the queue - fails if empty - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn top<'a>(&'a self) -> &'a T { &self.data[0] } /// Returns the greatest item in the queue - None if empty - #[cfg(stage0)] - fn maybe_top(&self) -> Option<&'self T> { - if self.is_empty() { None } else { Some(self.top()) } - } - - /// Returns the greatest item in the queue - None if empty - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn maybe_top<'a>(&'a self) -> Option<&'a T> { if self.is_empty() { None } else { Some(self.top()) } } diff --git a/src/libstd/serialize.rs b/src/libstd/serialize.rs index 39fb5a45d7e9c..a5d2604b6f6db 100644 --- a/src/libstd/serialize.rs +++ b/src/libstd/serialize.rs @@ -20,80 +20,8 @@ use core::hashmap::{HashMap, HashSet}; use core::trie::{TrieMap, TrieSet}; use deque::Deque; use dlist::DList; -#[cfg(stage1)] -#[cfg(stage2)] -#[cfg(stage3)] use treemap::{TreeMap, TreeSet}; -#[cfg(stage0)] -pub trait Encoder { - // Primitive types: - fn emit_nil(&self); - fn emit_uint(&self, v: uint); - fn emit_u64(&self, v: u64); - fn emit_u32(&self, v: u32); - fn emit_u16(&self, v: u16); - fn emit_u8(&self, v: u8); - fn emit_int(&self, v: int); - fn emit_i64(&self, v: i64); - fn emit_i32(&self, v: i32); - fn emit_i16(&self, v: i16); - fn emit_i8(&self, v: i8); - fn emit_bool(&self, v: bool); - fn emit_float(&self, v: float); - fn emit_f64(&self, v: f64); - fn emit_f32(&self, v: f32); - fn emit_char(&self, v: char); - fn emit_str(&self, v: &str); - - // Compound types: - fn emit_enum(&self, name: &str, f: &fn()); - - fn emit_enum_variant(&self, - v_name: &str, - v_id: uint, - len: uint, - f: &fn()); - fn emit_enum_variant_arg(&self, a_idx: uint, f: &fn()); - - fn emit_enum_struct_variant(&self, - v_name: &str, - v_id: uint, - len: uint, - f: &fn()); - fn emit_enum_struct_variant_field(&self, - f_name: &str, - f_idx: uint, - f: &fn()); - - fn emit_struct(&self, name: &str, len: uint, f: &fn()); - #[cfg(stage0)] - fn emit_field(&self, f_name: &str, f_idx: uint, f: &fn()); - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] - fn emit_struct_field(&self, f_name: &str, f_idx: uint, f: &fn()); - - fn emit_tuple(&self, len: uint, f: &fn()); - fn emit_tuple_arg(&self, idx: uint, f: &fn()); - - fn emit_tuple_struct(&self, name: &str, len: uint, f: &fn()); - fn emit_tuple_struct_arg(&self, f_idx: uint, f: &fn()); - - // Specialized types: - fn emit_option(&self, f: &fn()); - fn emit_option_none(&self); - fn emit_option_some(&self, f: &fn()); - - fn emit_seq(&self, len: uint, f: &fn()); - fn emit_seq_elt(&self, idx: uint, f: &fn()); - - fn emit_map(&self, len: uint, f: &fn()); - fn emit_map_elt_key(&self, idx: uint, f: &fn()); - fn emit_map_elt_val(&self, idx: uint, f: &fn()); -} - -#[cfg(not(stage0))] pub trait Encoder { // Primitive types: fn emit_nil(&mut self); @@ -159,80 +87,6 @@ pub trait Encoder { fn emit_map_elt_val(&mut self, idx: uint, f: &fn(&mut Self)); } -#[cfg(stage0)] -pub trait Decoder { - // Primitive types: - fn read_nil(&self) -> (); - fn read_uint(&self) -> uint; - fn read_u64(&self) -> u64; - fn read_u32(&self) -> u32; - fn read_u16(&self) -> u16; - fn read_u8(&self) -> u8; - fn read_int(&self) -> int; - fn read_i64(&self) -> i64; - fn read_i32(&self) -> i32; - fn read_i16(&self) -> i16; - fn read_i8(&self) -> i8; - fn read_bool(&self) -> bool; - fn read_f64(&self) -> f64; - fn read_f32(&self) -> f32; - fn read_float(&self) -> float; - fn read_char(&self) -> char; - fn read_str(&self) -> ~str; - - // Compound types: - fn read_enum(&self, name: &str, f: &fn() -> T) -> T; - - fn read_enum_variant(&self, - names: &[&str], - f: &fn(uint) -> T) - -> T; - fn read_enum_variant_arg(&self, a_idx: uint, f: &fn() -> T) -> T; - - fn read_enum_struct_variant(&self, - names: &[&str], - f: &fn(uint) -> T) - -> T; - fn read_enum_struct_variant_field(&self, - &f_name: &str, - f_idx: uint, - f: &fn() -> T) - -> T; - - fn read_struct(&self, s_name: &str, len: uint, f: &fn() -> T) -> T; - #[cfg(stage0)] - fn read_field(&self, - f_name: &str, - f_idx: uint, - f: &fn() -> T) - -> T; - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] - fn read_struct_field(&self, - f_name: &str, - f_idx: uint, - f: &fn() -> T) - -> T; - - fn read_tuple(&self, f: &fn(uint) -> T) -> T; - fn read_tuple_arg(&self, a_idx: uint, f: &fn() -> T) -> T; - - fn read_tuple_struct(&self, s_name: &str, f: &fn(uint) -> T) -> T; - fn read_tuple_struct_arg(&self, a_idx: uint, f: &fn() -> T) -> T; - - // Specialized types: - fn read_option(&self, f: &fn(bool) -> T) -> T; - - fn read_seq(&self, f: &fn(uint) -> T) -> T; - fn read_seq_elt(&self, idx: uint, f: &fn() -> T) -> T; - - fn read_map(&self, f: &fn(uint) -> T) -> T; - fn read_map_elt_key(&self, idx: uint, f: &fn() -> T) -> T; - fn read_map_elt_val(&self, idx: uint, f: &fn() -> T) -> T; -} - -#[cfg(not(stage0))] pub trait Decoder { // Primitive types: fn read_nil(&mut self) -> (); @@ -280,15 +134,6 @@ pub trait Decoder { len: uint, f: &fn(&mut Self) -> T) -> T; - #[cfg(stage0)] - fn read_field(&mut self, - f_name: &str, - f_idx: uint, - f: &fn() -> T) - -> T; - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn read_struct_field(&mut self, f_name: &str, f_idx: uint, @@ -318,598 +163,254 @@ pub trait Decoder { fn read_map_elt_val(&mut self, idx: uint, f: &fn(&mut Self) -> T) -> T; } -#[cfg(stage0)] -pub trait Encodable { - fn encode(&self, s: &S); -} - -#[cfg(not(stage0))] pub trait Encodable { fn encode(&self, s: &mut S); } -#[cfg(stage0)] -pub trait Decodable { - fn decode(d: &D) -> Self; -} - -#[cfg(not(stage0))] pub trait Decodable { fn decode(d: &mut D) -> Self; } -#[cfg(stage0)] -impl Encodable for uint { - fn encode(&self, s: &S) { - s.emit_uint(*self) - } -} - -#[cfg(not(stage0))] impl Encodable for uint { fn encode(&self, s: &mut S) { s.emit_uint(*self) } } -#[cfg(stage0)] -impl Decodable for uint { - fn decode(d: &D) -> uint { - d.read_uint() - } -} - -#[cfg(not(stage0))] impl Decodable for uint { fn decode(d: &mut D) -> uint { d.read_uint() } } -#[cfg(stage0)] -impl Encodable for u8 { - fn encode(&self, s: &S) { - s.emit_u8(*self) - } -} - -#[cfg(not(stage0))] impl Encodable for u8 { fn encode(&self, s: &mut S) { s.emit_u8(*self) } } -#[cfg(stage0)] -impl Decodable for u8 { - fn decode(d: &D) -> u8 { - d.read_u8() - } -} - -#[cfg(not(stage0))] impl Decodable for u8 { fn decode(d: &mut D) -> u8 { d.read_u8() } } -#[cfg(stage0)] -impl Encodable for u16 { - fn encode(&self, s: &S) { - s.emit_u16(*self) - } -} - -#[cfg(not(stage0))] impl Encodable for u16 { fn encode(&self, s: &mut S) { s.emit_u16(*self) } } -#[cfg(stage0)] -impl Decodable for u16 { - fn decode(d: &D) -> u16 { - d.read_u16() - } -} - -#[cfg(not(stage0))] impl Decodable for u16 { fn decode(d: &mut D) -> u16 { d.read_u16() } } -#[cfg(stage0)] -impl Encodable for u32 { - fn encode(&self, s: &S) { - s.emit_u32(*self) - } -} - -#[cfg(not(stage0))] impl Encodable for u32 { fn encode(&self, s: &mut S) { s.emit_u32(*self) } } -#[cfg(stage0)] -impl Decodable for u32 { - fn decode(d: &D) -> u32 { - d.read_u32() - } -} - -#[cfg(not(stage0))] impl Decodable for u32 { fn decode(d: &mut D) -> u32 { d.read_u32() } } -#[cfg(stage0)] -impl Encodable for u64 { - fn encode(&self, s: &S) { - s.emit_u64(*self) - } -} - -#[cfg(not(stage0))] impl Encodable for u64 { fn encode(&self, s: &mut S) { s.emit_u64(*self) } } -#[cfg(stage0)] -impl Decodable for u64 { - fn decode(d: &D) -> u64 { - d.read_u64() - } -} - -#[cfg(not(stage0))] impl Decodable for u64 { fn decode(d: &mut D) -> u64 { d.read_u64() } } -#[cfg(stage0)] -impl Encodable for int { - fn encode(&self, s: &S) { - s.emit_int(*self) - } -} - -#[cfg(not(stage0))] impl Encodable for int { fn encode(&self, s: &mut S) { s.emit_int(*self) } } -#[cfg(stage0)] -impl Decodable for int { - fn decode(d: &D) -> int { - d.read_int() - } -} - -#[cfg(not(stage0))] impl Decodable for int { fn decode(d: &mut D) -> int { d.read_int() } } -#[cfg(stage0)] -impl Encodable for i8 { - fn encode(&self, s: &S) { - s.emit_i8(*self) - } -} - -#[cfg(not(stage0))] impl Encodable for i8 { fn encode(&self, s: &mut S) { s.emit_i8(*self) } } -#[cfg(stage0)] -impl Decodable for i8 { - fn decode(d: &D) -> i8 { - d.read_i8() - } -} - -#[cfg(not(stage0))] impl Decodable for i8 { fn decode(d: &mut D) -> i8 { d.read_i8() } } -#[cfg(stage0)] -impl Encodable for i16 { - fn encode(&self, s: &S) { - s.emit_i16(*self) - } -} - -#[cfg(not(stage0))] impl Encodable for i16 { fn encode(&self, s: &mut S) { s.emit_i16(*self) } } -#[cfg(stage0)] -impl Decodable for i16 { - fn decode(d: &D) -> i16 { - d.read_i16() - } -} - -#[cfg(not(stage0))] impl Decodable for i16 { fn decode(d: &mut D) -> i16 { d.read_i16() } } -#[cfg(stage0)] -impl Encodable for i32 { - fn encode(&self, s: &S) { - s.emit_i32(*self) - } -} - -#[cfg(not(stage0))] impl Encodable for i32 { fn encode(&self, s: &mut S) { s.emit_i32(*self) } } -#[cfg(stage0)] -impl Decodable for i32 { - fn decode(d: &D) -> i32 { - d.read_i32() - } -} - -#[cfg(not(stage0))] impl Decodable for i32 { fn decode(d: &mut D) -> i32 { d.read_i32() } } -#[cfg(stage0)] -impl Encodable for i64 { - fn encode(&self, s: &S) { - s.emit_i64(*self) - } -} - -#[cfg(not(stage0))] impl Encodable for i64 { fn encode(&self, s: &mut S) { s.emit_i64(*self) } } -#[cfg(stage0)] -impl Decodable for i64 { - fn decode(d: &D) -> i64 { - d.read_i64() - } -} - -#[cfg(not(stage0))] impl Decodable for i64 { fn decode(d: &mut D) -> i64 { d.read_i64() } } -#[cfg(stage0)] -impl<'self, S:Encoder> Encodable for &'self str { - fn encode(&self, s: &S) { - s.emit_str(*self) - } -} - -#[cfg(not(stage0))] impl<'self, S:Encoder> Encodable for &'self str { fn encode(&self, s: &mut S) { s.emit_str(*self) } } -#[cfg(stage0)] -impl Encodable for ~str { - fn encode(&self, s: &S) { - s.emit_str(*self) - } -} - -#[cfg(not(stage0))] impl Encodable for ~str { fn encode(&self, s: &mut S) { s.emit_str(*self) } } -#[cfg(stage0)] -impl Decodable for ~str { - fn decode(d: &D) -> ~str { - d.read_str() - } -} - -#[cfg(not(stage0))] impl Decodable for ~str { fn decode(d: &mut D) -> ~str { d.read_str() } } -#[cfg(stage0)] -impl Encodable for @str { - fn encode(&self, s: &S) { - s.emit_str(*self) - } -} - -#[cfg(not(stage0))] impl Encodable for @str { fn encode(&self, s: &mut S) { s.emit_str(*self) } } -#[cfg(stage0)] -impl Decodable for @str { - fn decode(d: &D) -> @str { - d.read_str().to_managed() - } -} - -#[cfg(not(stage0))] impl Decodable for @str { fn decode(d: &mut D) -> @str { d.read_str().to_managed() } } -#[cfg(stage0)] -impl Encodable for float { - fn encode(&self, s: &S) { - s.emit_float(*self) - } -} - -#[cfg(not(stage0))] impl Encodable for float { fn encode(&self, s: &mut S) { s.emit_float(*self) } } -#[cfg(stage0)] -impl Decodable for float { - fn decode(d: &D) -> float { - d.read_float() - } -} - -#[cfg(not(stage0))] impl Decodable for float { fn decode(d: &mut D) -> float { d.read_float() } } -#[cfg(stage0)] -impl Encodable for f32 { - fn encode(&self, s: &S) { - s.emit_f32(*self) - } -} - -#[cfg(not(stage0))] impl Encodable for f32 { fn encode(&self, s: &mut S) { s.emit_f32(*self) } } -#[cfg(stage0)] -impl Decodable for f32 { - fn decode(d: &D) -> f32 { - d.read_f32() - } -} - -#[cfg(not(stage0))] impl Decodable for f32 { fn decode(d: &mut D) -> f32 { d.read_f32() } } -#[cfg(stage0)] -impl Encodable for f64 { - fn encode(&self, s: &S) { - s.emit_f64(*self) - } -} - -#[cfg(not(stage0))] impl Encodable for f64 { fn encode(&self, s: &mut S) { s.emit_f64(*self) } } -#[cfg(stage0)] -impl Decodable for f64 { - fn decode(d: &D) -> f64 { - d.read_f64() - } -} - -#[cfg(not(stage0))] impl Decodable for f64 { fn decode(d: &mut D) -> f64 { d.read_f64() } } -#[cfg(stage0)] -impl Encodable for bool { - fn encode(&self, s: &S) { - s.emit_bool(*self) - } -} - -#[cfg(not(stage0))] impl Encodable for bool { fn encode(&self, s: &mut S) { s.emit_bool(*self) } } -#[cfg(stage0)] -impl Decodable for bool { - fn decode(d: &D) -> bool { - d.read_bool() - } -} - -#[cfg(not(stage0))] impl Decodable for bool { fn decode(d: &mut D) -> bool { d.read_bool() } } -#[cfg(stage0)] -impl Encodable for () { - fn encode(&self, s: &S) { - s.emit_nil() - } -} - -#[cfg(not(stage0))] impl Encodable for () { fn encode(&self, s: &mut S) { s.emit_nil() } } -#[cfg(stage0)] -impl Decodable for () { - fn decode(d: &D) -> () { - d.read_nil() - } -} - -#[cfg(not(stage0))] impl Decodable for () { fn decode(d: &mut D) -> () { d.read_nil() } } -#[cfg(stage0)] -impl<'self, S:Encoder,T:Encodable> Encodable for &'self T { - fn encode(&self, s: &S) { - (**self).encode(s) - } -} - -#[cfg(not(stage0))] impl<'self, S:Encoder,T:Encodable> Encodable for &'self T { fn encode(&self, s: &mut S) { (**self).encode(s) } } -#[cfg(stage0)] -impl> Encodable for ~T { - fn encode(&self, s: &S) { - (**self).encode(s) - } -} - -#[cfg(not(stage0))] impl> Encodable for ~T { fn encode(&self, s: &mut S) { (**self).encode(s) } } -#[cfg(stage0)] -impl> Decodable for ~T { - fn decode(d: &D) -> ~T { - ~Decodable::decode(d) - } -} - -#[cfg(not(stage0))] impl> Decodable for ~T { fn decode(d: &mut D) -> ~T { ~Decodable::decode(d) } } -#[cfg(stage0)] -impl> Encodable for @T { - fn encode(&self, s: &S) { - (**self).encode(s) - } -} - -#[cfg(not(stage0))] impl> Encodable for @T { fn encode(&self, s: &mut S) { (**self).encode(s) } } -#[cfg(stage0)] -impl> Decodable for @T { - fn decode(d: &D) -> @T { - @Decodable::decode(d) - } -} - -#[cfg(not(stage0))] impl> Decodable for @T { fn decode(d: &mut D) -> @T { @Decodable::decode(d) } } -#[cfg(stage0)] -impl<'self, S:Encoder,T:Encodable> Encodable for &'self [T] { - fn encode(&self, s: &S) { - do s.emit_seq(self.len()) { - for self.eachi |i, e| { - s.emit_seq_elt(i, || e.encode(s)) - } - } - } -} - -#[cfg(not(stage0))] impl<'self, S:Encoder,T:Encodable> Encodable for &'self [T] { fn encode(&self, s: &mut S) { do s.emit_seq(self.len()) |s| { @@ -920,18 +421,6 @@ impl<'self, S:Encoder,T:Encodable> Encodable for &'self [T] { } } -#[cfg(stage0)] -impl> Encodable for ~[T] { - fn encode(&self, s: &S) { - do s.emit_seq(self.len()) { - for self.eachi |i, e| { - s.emit_seq_elt(i, || e.encode(s)) - } - } - } -} - -#[cfg(not(stage0))] impl> Encodable for ~[T] { fn encode(&self, s: &mut S) { do s.emit_seq(self.len()) |s| { @@ -942,18 +431,6 @@ impl> Encodable for ~[T] { } } -#[cfg(stage0)] -impl> Decodable for ~[T] { - fn decode(d: &D) -> ~[T] { - do d.read_seq |len| { - do vec::from_fn(len) |i| { - d.read_seq_elt(i, || Decodable::decode(d)) - } - } - } -} - -#[cfg(not(stage0))] impl> Decodable for ~[T] { fn decode(d: &mut D) -> ~[T] { do d.read_seq |d, len| { @@ -964,18 +441,6 @@ impl> Decodable for ~[T] { } } -#[cfg(stage0)] -impl> Encodable for @[T] { - fn encode(&self, s: &S) { - do s.emit_seq(self.len()) { - for self.eachi |i, e| { - s.emit_seq_elt(i, || e.encode(s)) - } - } - } -} - -#[cfg(not(stage0))] impl> Encodable for @[T] { fn encode(&self, s: &mut S) { do s.emit_seq(self.len()) |s| { @@ -986,18 +451,6 @@ impl> Encodable for @[T] { } } -#[cfg(stage0)] -impl> Decodable for @[T] { - fn decode(d: &D) -> @[T] { - do d.read_seq |len| { - do at_vec::from_fn(len) |i| { - d.read_seq_elt(i, || Decodable::decode(d)) - } - } - } -} - -#[cfg(not(stage0))] impl> Decodable for @[T] { fn decode(d: &mut D) -> @[T] { do d.read_seq |d, len| { @@ -1008,19 +461,6 @@ impl> Decodable for @[T] { } } -#[cfg(stage0)] -impl> Encodable for Option { - fn encode(&self, s: &S) { - do s.emit_option { - match *self { - None => s.emit_option_none(), - Some(ref v) => s.emit_option_some(|| v.encode(s)), - } - } - } -} - -#[cfg(not(stage0))] impl> Encodable for Option { fn encode(&self, s: &mut S) { do s.emit_option |s| { @@ -1032,47 +472,18 @@ impl> Encodable for Option { } } -#[cfg(stage0)] -impl> Decodable for Option { - fn decode(d: &D) -> Option { - do d.read_option |b| { - if b { - Some(Decodable::decode(d)) - } else { - None - } - } - } -} - -#[cfg(not(stage0))] impl> Decodable for Option { - fn decode(d: &mut D) -> Option { - do d.read_option |d, b| { - if b { - Some(Decodable::decode(d)) - } else { - None - } - } - } -} - -#[cfg(stage0)] -impl,T1:Encodable> Encodable for (T0, T1) { - fn encode(&self, s: &S) { - match *self { - (ref t0, ref t1) => { - do s.emit_seq(2) { - s.emit_seq_elt(0, || t0.encode(s)); - s.emit_seq_elt(1, || t1.encode(s)); - } + fn decode(d: &mut D) -> Option { + do d.read_option |d, b| { + if b { + Some(Decodable::decode(d)) + } else { + None } } } } -#[cfg(not(stage0))] impl,T1:Encodable> Encodable for (T0, T1) { fn encode(&self, s: &mut S) { match *self { @@ -1086,20 +497,6 @@ impl,T1:Encodable> Encodable for (T0, T1) { } } -#[cfg(stage0)] -impl,T1:Decodable> Decodable for (T0, T1) { - fn decode(d: &D) -> (T0, T1) { - do d.read_seq |len| { - assert!(len == 2); - ( - d.read_seq_elt(0, || Decodable::decode(d)), - d.read_seq_elt(1, || Decodable::decode(d)) - ) - } - } -} - -#[cfg(not(stage0))] impl,T1:Decodable> Decodable for (T0, T1) { fn decode(d: &mut D) -> (T0, T1) { do d.read_seq |d, len| { @@ -1112,27 +509,6 @@ impl,T1:Decodable> Decodable for (T0, T1) { } } -#[cfg(stage0)] -impl< - S: Encoder, - T0: Encodable, - T1: Encodable, - T2: Encodable -> Encodable for (T0, T1, T2) { - fn encode(&self, s: &S) { - match *self { - (ref t0, ref t1, ref t2) => { - do s.emit_seq(3) { - s.emit_seq_elt(0, || t0.encode(s)); - s.emit_seq_elt(1, || t1.encode(s)); - s.emit_seq_elt(2, || t2.encode(s)); - } - } - } - } -} - -#[cfg(not(stage0))] impl< S: Encoder, T0: Encodable, @@ -1152,26 +528,6 @@ impl< } } -#[cfg(stage0)] -impl< - D: Decoder, - T0: Decodable, - T1: Decodable, - T2: Decodable -> Decodable for (T0, T1, T2) { - fn decode(d: &D) -> (T0, T1, T2) { - do d.read_seq |len| { - assert!(len == 3); - ( - d.read_seq_elt(0, || Decodable::decode(d)), - d.read_seq_elt(1, || Decodable::decode(d)), - d.read_seq_elt(2, || Decodable::decode(d)) - ) - } - } -} - -#[cfg(not(stage0))] impl< D: Decoder, T0: Decodable, @@ -1190,29 +546,6 @@ impl< } } -#[cfg(stage0)] -impl< - S: Encoder, - T0: Encodable, - T1: Encodable, - T2: Encodable, - T3: Encodable -> Encodable for (T0, T1, T2, T3) { - fn encode(&self, s: &S) { - match *self { - (ref t0, ref t1, ref t2, ref t3) => { - do s.emit_seq(4) { - s.emit_seq_elt(0, || t0.encode(s)); - s.emit_seq_elt(1, || t1.encode(s)); - s.emit_seq_elt(2, || t2.encode(s)); - s.emit_seq_elt(3, || t3.encode(s)); - } - } - } - } -} - -#[cfg(not(stage0))] impl< S: Encoder, T0: Encodable, @@ -1234,28 +567,6 @@ impl< } } -#[cfg(stage0)] -impl< - D: Decoder, - T0: Decodable, - T1: Decodable, - T2: Decodable, - T3: Decodable -> Decodable for (T0, T1, T2, T3) { - fn decode(d: &D) -> (T0, T1, T2, T3) { - do d.read_seq |len| { - assert!(len == 4); - ( - d.read_seq_elt(0, || Decodable::decode(d)), - d.read_seq_elt(1, || Decodable::decode(d)), - d.read_seq_elt(2, || Decodable::decode(d)), - d.read_seq_elt(3, || Decodable::decode(d)) - ) - } - } -} - -#[cfg(not(stage0))] impl< D: Decoder, T0: Decodable, @@ -1276,31 +587,6 @@ impl< } } -#[cfg(stage0)] -impl< - S: Encoder, - T0: Encodable, - T1: Encodable, - T2: Encodable, - T3: Encodable, - T4: Encodable -> Encodable for (T0, T1, T2, T3, T4) { - fn encode(&self, s: &S) { - match *self { - (ref t0, ref t1, ref t2, ref t3, ref t4) => { - do s.emit_seq(5) { - s.emit_seq_elt(0, || t0.encode(s)); - s.emit_seq_elt(1, || t1.encode(s)); - s.emit_seq_elt(2, || t2.encode(s)); - s.emit_seq_elt(3, || t3.encode(s)); - s.emit_seq_elt(4, || t4.encode(s)); - } - } - } - } -} - -#[cfg(not(stage0))] impl< S: Encoder, T0: Encodable, @@ -1324,30 +610,6 @@ impl< } } -#[cfg(stage0)] -impl< - D: Decoder, - T0: Decodable, - T1: Decodable, - T2: Decodable, - T3: Decodable, - T4: Decodable -> Decodable for (T0, T1, T2, T3, T4) { - fn decode(d: &D) -> (T0, T1, T2, T3, T4) { - do d.read_seq |len| { - assert!(len == 5); - ( - d.read_seq_elt(0, || Decodable::decode(d)), - d.read_seq_elt(1, || Decodable::decode(d)), - d.read_seq_elt(2, || Decodable::decode(d)), - d.read_seq_elt(3, || Decodable::decode(d)), - d.read_seq_elt(4, || Decodable::decode(d)) - ) - } - } -} - -#[cfg(not(stage0))] impl< D: Decoder, T0: Decodable, @@ -1370,23 +632,6 @@ impl< } } -#[cfg(stage0)] -impl< - S: Encoder, - T: Encodable + Copy -> Encodable for @mut DList { - fn encode(&self, s: &S) { - do s.emit_seq(self.size) { - let mut i = 0; - for self.each |e| { - s.emit_seq_elt(i, || e.encode(s)); - i += 1; - } - } - } -} - -#[cfg(not(stage0))] impl< S: Encoder, T: Encodable + Copy @@ -1402,20 +647,6 @@ impl< } } -#[cfg(stage0)] -impl> Decodable for @mut DList { - fn decode(d: &D) -> @mut DList { - let list = DList(); - do d.read_seq |len| { - for uint::range(0, len) |i| { - list.push(d.read_seq_elt(i, || Decodable::decode(d))); - } - } - list - } -} - -#[cfg(not(stage0))] impl> Decodable for @mut DList { fn decode(d: &mut D) -> @mut DList { let list = DList(); @@ -1428,21 +659,6 @@ impl> Decodable for @mut DList { } } -#[cfg(stage0)] -impl< - S: Encoder, - T: Encodable -> Encodable for Deque { - fn encode(&self, s: &S) { - do s.emit_seq(self.len()) { - for self.eachi |i, e| { - s.emit_seq_elt(i, || e.encode(s)); - } - } - } -} - -#[cfg(not(stage0))] impl< S: Encoder, T: Encodable @@ -1456,20 +672,6 @@ impl< } } -#[cfg(stage0)] -impl> Decodable for Deque { - fn decode(d: &D) -> Deque { - let mut deque = Deque::new(); - do d.read_seq |len| { - for uint::range(0, len) |i| { - deque.add_back(d.read_seq_elt(i, || Decodable::decode(d))); - } - } - deque - } -} - -#[cfg(not(stage0))] impl> Decodable for Deque { fn decode(d: &mut D) -> Deque { let mut deque = Deque::new(); @@ -1482,25 +684,6 @@ impl> Decodable for Deque { } } -#[cfg(stage0)] -impl< - E: Encoder, - K: Encodable + Hash + IterBytes + Eq, - V: Encodable -> Encodable for HashMap { - fn encode(&self, e: &E) { - do e.emit_map(self.len()) { - let mut i = 0; - for self.each |key, val| { - e.emit_map_elt_key(i, || key.encode(e)); - e.emit_map_elt_val(i, || val.encode(e)); - i += 1; - } - } - } -} - -#[cfg(not(stage0))] impl< E: Encoder, K: Encodable + Hash + IterBytes + Eq, @@ -1518,26 +701,6 @@ impl< } } -#[cfg(stage0)] -impl< - D: Decoder, - K: Decodable + Hash + IterBytes + Eq, - V: Decodable -> Decodable for HashMap { - fn decode(d: &D) -> HashMap { - do d.read_map |len| { - let mut map = HashMap::with_capacity(len); - for uint::range(0, len) |i| { - let key = d.read_map_elt_key(i, || Decodable::decode(d)); - let val = d.read_map_elt_val(i, || Decodable::decode(d)); - map.insert(key, val); - } - map - } - } -} - -#[cfg(not(stage0))] impl< D: Decoder, K: Decodable + Hash + IterBytes + Eq, @@ -1556,23 +719,6 @@ impl< } } -#[cfg(stage0)] -impl< - S: Encoder, - T: Encodable + Hash + IterBytes + Eq -> Encodable for HashSet { - fn encode(&self, s: &S) { - do s.emit_seq(self.len()) { - let mut i = 0; - for self.each |e| { - s.emit_seq_elt(i, || e.encode(s)); - i += 1; - } - } - } -} - -#[cfg(not(stage0))] impl< S: Encoder, T: Encodable + Hash + IterBytes + Eq @@ -1588,23 +734,6 @@ impl< } } -#[cfg(stage0)] -impl< - D: Decoder, - T: Decodable + Hash + IterBytes + Eq -> Decodable for HashSet { - fn decode(d: &D) -> HashSet { - do d.read_seq |len| { - let mut set = HashSet::with_capacity(len); - for uint::range(0, len) |i| { - set.insert(d.read_seq_elt(i, || Decodable::decode(d))); - } - set - } - } -} - -#[cfg(not(stage0))] impl< D: Decoder, T: Decodable + Hash + IterBytes + Eq @@ -1620,24 +749,6 @@ impl< } } -#[cfg(stage0)] -impl< - E: Encoder, - V: Encodable -> Encodable for TrieMap { - fn encode(&self, e: &E) { - do e.emit_map(self.len()) { - let mut i = 0; - for self.each |key, val| { - e.emit_map_elt_key(i, || key.encode(e)); - e.emit_map_elt_val(i, || val.encode(e)); - i += 1; - } - } - } -} - -#[cfg(not(stage0))] impl< E: Encoder, V: Encodable @@ -1654,25 +765,6 @@ impl< } } -#[cfg(stage0)] -impl< - D: Decoder, - V: Decodable -> Decodable for TrieMap { - fn decode(d: &D) -> TrieMap { - do d.read_map |len| { - let mut map = TrieMap::new(); - for uint::range(0, len) |i| { - let key = d.read_map_elt_key(i, || Decodable::decode(d)); - let val = d.read_map_elt_val(i, || Decodable::decode(d)); - map.insert(key, val); - } - map - } - } -} - -#[cfg(not(stage0))] impl< D: Decoder, V: Decodable @@ -1690,20 +782,6 @@ impl< } } -#[cfg(stage0)] -impl Encodable for TrieSet { - fn encode(&self, s: &S) { - do s.emit_seq(self.len()) { - let mut i = 0; - for self.each |e| { - s.emit_seq_elt(i, || e.encode(s)); - i += 1; - } - } - } -} - -#[cfg(not(stage0))] impl Encodable for TrieSet { fn encode(&self, s: &mut S) { do s.emit_seq(self.len()) |s| { @@ -1716,20 +794,6 @@ impl Encodable for TrieSet { } } -#[cfg(stage0)] -impl Decodable for TrieSet { - fn decode(d: &D) -> TrieSet { - do d.read_seq |len| { - let mut set = TrieSet::new(); - for uint::range(0, len) |i| { - set.insert(d.read_seq_elt(i, || Decodable::decode(d))); - } - set - } - } -} - -#[cfg(not(stage0))] impl Decodable for TrieSet { fn decode(d: &mut D) -> TrieSet { do d.read_seq |d, len| { @@ -1742,7 +806,6 @@ impl Decodable for TrieSet { } } -#[cfg(not(stage0))] impl< E: Encoder, K: Encodable + Eq + TotalOrd, @@ -1760,7 +823,6 @@ impl< } } -#[cfg(not(stage0))] impl< D: Decoder, K: Decodable + Eq + TotalOrd, @@ -1779,7 +841,6 @@ impl< } } -#[cfg(not(stage0))] impl< S: Encoder, T: Encodable + Eq + TotalOrd @@ -1795,7 +856,6 @@ impl< } } -#[cfg(not(stage0))] impl< D: Decoder, T: Decodable + Eq + TotalOrd @@ -1816,30 +876,10 @@ impl< // // In some cases, these should eventually be coded as traits. -#[cfg(stage0)] -pub trait EncoderHelpers { - fn emit_from_vec(&self, v: &[T], f: &fn(v: &T)); -} - -#[cfg(not(stage0))] pub trait EncoderHelpers { fn emit_from_vec(&mut self, v: &[T], f: &fn(&mut Self, v: &T)); } -#[cfg(stage0)] -impl EncoderHelpers for S { - fn emit_from_vec(&self, v: &[T], f: &fn(v: &T)) { - do self.emit_seq(v.len()) { - for v.eachi |i, e| { - do self.emit_seq_elt(i) { - f(e) - } - } - } - } -} - -#[cfg(not(stage0))] impl EncoderHelpers for S { fn emit_from_vec(&mut self, v: &[T], f: &fn(&mut S, &T)) { do self.emit_seq(v.len()) |this| { @@ -1852,28 +892,10 @@ impl EncoderHelpers for S { } } -#[cfg(stage0)] -pub trait DecoderHelpers { - fn read_to_vec(&self, f: &fn() -> T) -> ~[T]; -} - -#[cfg(not(stage0))] pub trait DecoderHelpers { fn read_to_vec(&mut self, f: &fn(&mut Self) -> T) -> ~[T]; } -#[cfg(stage0)] -impl DecoderHelpers for D { - fn read_to_vec(&self, f: &fn() -> T) -> ~[T] { - do self.read_seq |len| { - do vec::from_fn(len) |i| { - self.read_seq_elt(i, || f()) - } - } - } -} - -#[cfg(not(stage0))] impl DecoderHelpers for D { fn read_to_vec(&mut self, f: &fn(&mut D) -> T) -> ~[T] { do self.read_seq |this, len| { diff --git a/src/libstd/smallintmap.rs b/src/libstd/smallintmap.rs index fb17d4e50900c..1b72300a178ba 100644 --- a/src/libstd/smallintmap.rs +++ b/src/libstd/smallintmap.rs @@ -50,20 +50,6 @@ impl Map for SmallIntMap { } /// Visit all key-value pairs in order - #[cfg(stage0)] - fn each(&self, it: &fn(&uint, &'self V) -> bool) { - for uint::range(0, self.v.len()) |i| { - match self.v[i] { - Some(ref elt) => if !it(&i, elt) { break }, - None => () - } - } - } - - /// Visit all key-value pairs in order - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn each<'a>(&'a self, it: &fn(&uint, &'a V) -> bool) { for uint::range(0, self.v.len()) |i| { match self.v[i] { @@ -79,15 +65,6 @@ impl Map for SmallIntMap { } /// Visit all values in order - #[cfg(stage0)] - fn each_value(&self, blk: &fn(value: &V) -> bool) { - self.each(|_, v| blk(v)) - } - - /// Visit all values in order - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn each_value<'a>(&'a self, blk: &fn(value: &'a V) -> bool) { self.each(|_, v| blk(v)) } @@ -103,22 +80,6 @@ impl Map for SmallIntMap { } /// Return a reference to the value corresponding to the key - #[cfg(stage0)] - fn find(&self, key: &uint) -> Option<&'self V> { - if *key < self.v.len() { - match self.v[*key] { - Some(ref value) => Some(value), - None => None - } - } else { - None - } - } - - /// Return a reference to the value corresponding to the key - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn find<'a>(&'a self, key: &uint) -> Option<&'a V> { if *key < self.v.len() { match self.v[*key] { @@ -131,22 +92,6 @@ impl Map for SmallIntMap { } /// Return a mutable reference to the value corresponding to the key - #[cfg(stage0)] - fn find_mut(&mut self, key: &uint) -> Option<&'self mut V> { - if *key < self.v.len() { - match self.v[*key] { - Some(ref mut value) => Some(value), - None => None - } - } else { - None - } - } - - /// Return a mutable reference to the value corresponding to the key - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn find_mut<'a>(&'a mut self, key: &uint) -> Option<&'a mut V> { if *key < self.v.len() { match self.v[*key] { @@ -188,20 +133,6 @@ pub impl SmallIntMap { fn new() -> SmallIntMap { SmallIntMap{v: ~[]} } /// Visit all key-value pairs in reverse order - #[cfg(stage0)] - fn each_reverse(&self, it: &fn(uint, &'self V) -> bool) { - for uint::range_rev(self.v.len(), 0) |i| { - match self.v[i - 1] { - Some(ref elt) => if !it(i - 1, elt) { break }, - None => () - } - } - } - - /// Visit all key-value pairs in reverse order - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn each_reverse<'a>(&'a self, it: &fn(uint, &'a V) -> bool) { for uint::range_rev(self.v.len(), 0) |i| { match self.v[i - 1] { @@ -211,14 +142,6 @@ pub impl SmallIntMap { } } - #[cfg(stage0)] - fn get(&self, key: &uint) -> &'self V { - self.find(key).expect("key not present") - } - - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn get<'a>(&'a self, key: &uint) -> &'a V { self.find(key).expect("key not present") } diff --git a/src/libstd/std.rc b/src/libstd/std.rc index ea099090ebaba..4f9de29e7262f 100644 --- a/src/libstd/std.rc +++ b/src/libstd/std.rc @@ -71,7 +71,6 @@ pub mod rope; pub mod smallintmap; pub mod sort; pub mod dlist; -#[cfg(not(stage0))] pub mod treemap; // And ... other stuff @@ -91,13 +90,10 @@ pub mod cmp; pub mod base64; pub mod rl; pub mod workcache; -#[cfg(not(stage0))] #[path="num/bigint.rs"] pub mod bigint; -#[cfg(not(stage0))] #[path="num/rational.rs"] pub mod rational; -#[cfg(not(stage0))] #[path="num/complex.rs"] pub mod complex; pub mod stats; diff --git a/src/libstd/workcache.rs b/src/libstd/workcache.rs index f44d143004ede..e681382ffc828 100644 --- a/src/libstd/workcache.rs +++ b/src/libstd/workcache.rs @@ -138,19 +138,6 @@ impl WorkMap { fn new() -> WorkMap { WorkMap(HashMap::new()) } } -#[cfg(stage0)] -impl Encodable for WorkMap { - fn encode(&self, s: &S) { - let mut d = ~[]; - for self.each |k, v| { - d.push((copy *k, copy *v)) - } - sort::tim_sort(d); - d.encode(s) - } -} - -#[cfg(not(stage0))] impl Encodable for WorkMap { fn encode(&self, s: &mut S) { let mut d = ~[]; @@ -162,19 +149,6 @@ impl Encodable for WorkMap { } } -#[cfg(stage0)] -impl Decodable for WorkMap { - fn decode(d: &D) -> WorkMap { - let v : ~[(WorkKey,~str)] = Decodable::decode(d); - let mut w = WorkMap::new(); - for v.each |&(k, v)| { - w.insert(copy k, copy v); - } - w - } -} - -#[cfg(not(stage0))] impl Decodable for WorkMap { fn decode(d: &mut D) -> WorkMap { let v : ~[(WorkKey,~str)] = Decodable::decode(d); @@ -253,14 +227,6 @@ struct Work { res: Option>> } -#[cfg(stage0)] -fn json_encode>(t: &T) -> ~str { - do io::with_str_writer |wr| { - t.encode(&json::Encoder(wr)); - } -} - -#[cfg(not(stage0))] fn json_encode>(t: &T) -> ~str { do io::with_str_writer |wr| { let mut encoder = json::Encoder(wr); @@ -269,17 +235,6 @@ fn json_encode>(t: &T) -> ~str { } // FIXME(#5121) -#[cfg(stage0)] -fn json_decode>(s: &str) -> T { - do io::with_str_reader(s) |rdr| { - let j = result::unwrap(json::from_reader(rdr)); - let decoder = json::Decoder(j); - Decodable::decode(&decoder) - } -} - -// FIXME(#5121) -#[cfg(not(stage0))] fn json_decode>(s: &str) -> T { do io::with_str_reader(s) |rdr| { let j = result::unwrap(json::from_reader(rdr)); diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index 77e7986616086..2216226ecb3ab 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -70,22 +70,6 @@ pub type Name = uint; // with a macro expansion pub type Mrk = uint; -#[cfg(stage0)] -impl Encodable for ident { - fn encode(&self, s: &S) { - unsafe { - let intr = - match task::local_data::local_data_get(interner_key!()) { - None => fail!(~"encode: TLS interner not set up"), - Some(intr) => intr - }; - - s.emit_str(*(*intr).get(*self)); - } - } -} - -#[cfg(not(stage0))] impl Encodable for ident { fn encode(&self, s: &mut S) { unsafe { @@ -100,21 +84,6 @@ impl Encodable for ident { } } -#[cfg(stage0)] -impl Decodable for ident { - fn decode(d: &D) -> ident { - let intr = match unsafe { - task::local_data::local_data_get(interner_key!()) - } { - None => fail!(~"decode: TLS interner not set up"), - Some(intr) => intr - }; - - (*intr).intern(@d.read_str()) - } -} - -#[cfg(not(stage0))] impl Decodable for ident { fn decode(d: &mut D) -> ident { let intr = match unsafe { diff --git a/src/libsyntax/codemap.rs b/src/libsyntax/codemap.rs index bbb390e9dc948..66ed52f03528e 100644 --- a/src/libsyntax/codemap.rs +++ b/src/libsyntax/codemap.rs @@ -125,13 +125,6 @@ impl cmp::Eq for span { fn ne(&self, other: &span) -> bool { !(*self).eq(other) } } -#[cfg(stage0)] -impl Encodable for span { - /* Note #1972 -- spans are encoded but not decoded */ - fn encode(&self, _s: &S) { _s.emit_nil() } -} - -#[cfg(not(stage0))] impl Encodable for span { /* Note #1972 -- spans are encoded but not decoded */ fn encode(&self, s: &mut S) { @@ -139,14 +132,6 @@ impl Encodable for span { } } -#[cfg(stage0)] -impl Decodable for span { - fn decode(_d: &D) -> span { - dummy_sp() - } -} - -#[cfg(not(stage0))] impl Decodable for span { fn decode(_d: &mut D) -> span { dummy_sp() diff --git a/src/libsyntax/ext/base.rs b/src/libsyntax/ext/base.rs index db4912d213108..e56dab6db207e 100644 --- a/src/libsyntax/ext/base.rs +++ b/src/libsyntax/ext/base.rs @@ -451,17 +451,6 @@ impl MapChain{ // ugh: can't get this to compile with mut because of the // lack of flow sensitivity. - #[cfg(stage0)] - fn get_map(&self) -> &'self HashMap { - match *self { - BaseMapChain (~ref map) => map, - ConsMapChain (~ref map,_) => map - } - } - - // ugh: can't get this to compile with mut because of the - // lack of flow sensitivity. - #[cfg(not(stage0))] fn get_map<'a>(&'a self) -> &'a HashMap { match *self { BaseMapChain (~ref map) => map, diff --git a/src/libsyntax/opt_vec.rs b/src/libsyntax/opt_vec.rs index 6cf7bba600ec0..600ab964e5238 100644 --- a/src/libsyntax/opt_vec.rs +++ b/src/libsyntax/opt_vec.rs @@ -61,15 +61,6 @@ impl OptVec { } } - #[cfg(stage0)] - fn get(&self, i: uint) -> &'self T { - match *self { - Empty => fail!(fmt!("Invalid index %u", i)), - Vec(ref v) => &v[i] - } - } - - #[cfg(not(stage0))] fn get<'a>(&'a self, i: uint) -> &'a T { match *self { Empty => fail!(fmt!("Invalid index %u", i)), diff --git a/src/snapshots.txt b/src/snapshots.txt index 00cabe90d840f..c643b4dd25d43 100644 --- a/src/snapshots.txt +++ b/src/snapshots.txt @@ -1,3 +1,11 @@ +S 2013-05-03 213f7b2 + macos-i386 0bf8b88ea01cc4cdd81ac4db1d301ea9b3371f13 + macos-x86_64 2da3990639ab5a9c9d51b3478c437cb459de84e3 + linux-i386 094500e587bfac27d7be752b635c242e07774c0d + linux-x86_64 75733a5a58f53aa783253c8cfd56923b78676705 + winnt-i386 bd07c935a917c0796d4dc803d973b864d4794ade + freebsd-x86_64 b95d648d9bfeacdd04cc5213bdc803b0fd94add7 + S 2013-03-28 f7a2371 macos-i386 2e05a33716fc4982db53946c3b0dccf0194826fe macos-x86_64 fbd3feec8dd17a6b6c8df114e6e9b4cd17cc6172 From 8f2d71ac009e1f93c14266ecebb1c105a0a907e3 Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Sat, 4 May 2013 21:53:43 -0400 Subject: [PATCH 200/410] small fix to the tutorial-ffi destructor example The previous example was erroneously attempting to destroy uninitialized memory, which was often zeroed (masking the bug). --- doc/tutorial-ffi.md | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/doc/tutorial-ffi.md b/doc/tutorial-ffi.md index 127f81589234f..b806df5dd20b5 100644 --- a/doc/tutorial-ffi.md +++ b/doc/tutorial-ffi.md @@ -150,11 +150,7 @@ wrapping `malloc` and `free`: ~~~~ use core::libc::{c_void, size_t, malloc, free}; - -#[abi = "rust-intrinsic"] -extern "rust-intrinsic" mod rusti { - fn init() -> T; -} +use core::unstable::intrinsics; // a wrapper around the handle returned by the foreign code pub struct Unique { @@ -166,7 +162,8 @@ pub impl<'self, T: Owned> Unique { unsafe { let ptr = malloc(core::sys::size_of::() as size_t) as *mut T; assert!(!ptr::is_null(ptr)); - *ptr = value; + // `*ptr` is uninitialized, and `*ptr = value` would attempt to destroy it + intrinsics::move_val_init(&mut *ptr, value); Unique{ptr: ptr} } } @@ -186,7 +183,7 @@ pub impl<'self, T: Owned> Unique { impl Drop for Unique { fn finalize(&self) { unsafe { - let mut x = rusti::init(); // dummy value to swap in + let mut x = intrinsics::init(); // dummy value to swap in x <-> *self.ptr; // moving the object out is needed to call the destructor free(self.ptr as *c_void) } From cb918e1a831782d6072a0b93dd57614cb9c2d961 Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Sun, 5 May 2013 10:57:14 +0900 Subject: [PATCH 201/410] Allow non-literal static range pattern for match arms Fix unintended error problem of: static s: int = 1; static e: int = 42; fn main() { match 7 { s..e => (), ^~ error: expected `=>` but found `..` _ => (), } } --- src/libsyntax/parse/parser.rs | 10 ++++++++-- src/test/run-pass/match-range-static.rs | 10 ++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 src/test/run-pass/match-range-static.rs diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index a6528160398e8..de88089b1bf7d 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -2383,7 +2383,13 @@ pub impl Parser { can_be_enum_or_struct = false } - if is_plain_ident(&*self.token) && !can_be_enum_or_struct { + if self.look_ahead(1) == token::DOTDOT { + let start = self.parse_expr_res(RESTRICT_NO_BAR_OP); + self.eat(&token::DOTDOT); + let end = self.parse_expr_res(RESTRICT_NO_BAR_OP); + pat = pat_range(start, end); + } + else if is_plain_ident(&*self.token) && !can_be_enum_or_struct { let name = self.parse_path_without_tps(); let sub; if self.eat(&token::AT) { @@ -2392,7 +2398,7 @@ pub impl Parser { } else { // or just foo sub = None; - }; + } pat = pat_ident(binding_mode, name, sub); } else { // parse an enum pat diff --git a/src/test/run-pass/match-range-static.rs b/src/test/run-pass/match-range-static.rs new file mode 100644 index 0000000000000..3eefc386250ed --- /dev/null +++ b/src/test/run-pass/match-range-static.rs @@ -0,0 +1,10 @@ +static s: int = 1; +static e: int = 42; + +fn main() { + match 7 { + s..e => (), + _ => (), + } +} + From 987ad9c8782ba254c8326c9caac9796bcce9beb9 Mon Sep 17 00:00:00 2001 From: Young-il Choi Date: Sun, 5 May 2013 14:00:53 +0900 Subject: [PATCH 202/410] rt: rust_android_dummy.cpp fix for make tidy --- src/rt/rust_android_dummy.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/rt/rust_android_dummy.cpp b/src/rt/rust_android_dummy.cpp index 0032e9c6e7fea..b6fe78288e97a 100644 --- a/src/rt/rust_android_dummy.cpp +++ b/src/rt/rust_android_dummy.cpp @@ -64,7 +64,10 @@ extern "C" void tgammaf() { } -extern "C" int glob(const char *pattern, int flags, int (*errfunc) (const char *epath, int eerrno), glob_t *pglob) +extern "C" int glob(const char *pattern, + int flags, + int (*errfunc) (const char *epath, int eerrno), + glob_t *pglob) { return 0; } From 6806900a7c63950feb2540347fc3f94d83074bbd Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Sun, 5 May 2013 07:43:43 -0400 Subject: [PATCH 203/410] disable lang debug for perf --- src/libcore/unstable/lang.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libcore/unstable/lang.rs b/src/libcore/unstable/lang.rs index 5a65a5c24bb57..6b61df31fdc87 100644 --- a/src/libcore/unstable/lang.rs +++ b/src/libcore/unstable/lang.rs @@ -152,7 +152,7 @@ pub unsafe fn exchange_malloc(td: *c_char, size: uintptr_t) -> *c_char { /// Because this code is so perf. sensitive, use a static constant so that /// debug printouts are compiled out most of the time. -static ENABLE_DEBUG: bool = true; +static ENABLE_DEBUG: bool = false; #[inline] pub fn debug_mem(tag: &'static str, p: *const T) { From 0b0b8018a6a1271e6c8e82230e2e8496eebbba3f Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Sun, 5 May 2013 12:17:59 -0400 Subject: [PATCH 204/410] add warning for #6248 and remove instances of it --- src/libcore/hashmap.rs | 13 +++++++ src/librustc/metadata/encoder.rs | 8 ++--- .../middle/borrowck/gather_loans/lifetime.rs | 36 +++++++++++++++---- src/librustc/middle/check_const.rs | 2 +- src/librustc/middle/check_match.rs | 4 +-- src/librustc/middle/kind.rs | 8 ++--- src/librustc/middle/lint.rs | 2 +- src/librustc/middle/liveness.rs | 8 ++--- src/librustc/middle/mem_categorization.rs | 4 +-- src/librustc/middle/moves.rs | 2 +- src/librustc/middle/privacy.rs | 4 +-- src/librustc/middle/region.rs | 2 +- src/librustc/middle/trans/_match.rs | 6 ++-- src/librustc/middle/trans/base.rs | 6 ++-- src/librustc/middle/trans/closure.rs | 2 +- src/librustc/middle/trans/consts.rs | 6 ++-- src/librustc/middle/trans/controlflow.rs | 2 +- src/librustc/middle/trans/debuginfo.rs | 6 ++-- src/librustc/middle/trans/expr.rs | 4 +-- src/librustc/middle/trans/foreign.rs | 2 +- src/librustc/middle/trans/machine.rs | 2 +- src/librustc/middle/trans/meth.rs | 8 ++--- src/librustc/middle/trans/monomorphize.rs | 14 ++++---- src/librustc/middle/trans/reachable.rs | 19 ++++++---- src/librustc/middle/trans/reflect.rs | 7 ++-- src/librustc/middle/trans/type_use.rs | 33 +++++++++-------- src/librustc/middle/ty.rs | 4 +-- src/librustc/middle/typeck/check/_match.rs | 2 +- src/librustc/middle/typeck/check/mod.rs | 8 ++--- src/librustc/middle/typeck/check/vtable.rs | 2 +- src/librustc/middle/typeck/coherence.rs | 6 ++-- src/librustc/middle/typeck/collect.rs | 2 +- 32 files changed, 142 insertions(+), 92 deletions(-) diff --git a/src/libcore/hashmap.rs b/src/libcore/hashmap.rs index ad1994a92d2bb..8ed54741f1276 100644 --- a/src/libcore/hashmap.rs +++ b/src/libcore/hashmap.rs @@ -25,6 +25,7 @@ use rand; use uint; use vec; use util::unreachable; +use kinds::Copy; static INITIAL_CAPACITY: uint = 32u; // 2^5 @@ -529,6 +530,18 @@ pub impl HashMap { } } +pub impl HashMap { + /// Like `find`, but returns a copy of the value. + fn find_copy(&self, k: &K) -> Option { + self.find(k).map_consume(|v| copy *v) + } + + /// Like `get`, but returns a copy of the value. + fn get_copy(&self, k: &K) -> V { + copy *self.get(k) + } +} + impl Eq for HashMap { fn eq(&self, other: &HashMap) -> bool { if self.len() != other.len() { return false; } diff --git a/src/librustc/metadata/encoder.rs b/src/librustc/metadata/encoder.rs index dd4ef0d2e688f..6d7442b1ed5ee 100644 --- a/src/librustc/metadata/encoder.rs +++ b/src/librustc/metadata/encoder.rs @@ -190,7 +190,7 @@ fn encode_type_param_bounds(ebml_w: &writer::Encoder, ecx: @EncodeContext, params: &OptVec) { let ty_param_defs = - @params.map_to_vec(|param| *ecx.tcx.ty_param_defs.get(¶m.id)); + @params.map_to_vec(|param| ecx.tcx.ty_param_defs.get_copy(¶m.id)); encode_ty_type_param_defs(ebml_w, ecx, ty_param_defs, tag_items_data_item_ty_param_bounds); } @@ -275,7 +275,7 @@ fn encode_symbol(ecx: @EncodeContext, ebml_w: &writer::Encoder, id: node_id) { fn encode_discriminant(ecx: @EncodeContext, ebml_w: &writer::Encoder, id: node_id) { ebml_w.start_tag(tag_items_data_item_symbol); - ebml_w.writer.write(str::to_bytes(**ecx.discrim_symbols.get(&id))); + ebml_w.writer.write(str::to_bytes(*ecx.discrim_symbols.get_copy(&id))); ebml_w.end_tag(); } @@ -1035,7 +1035,7 @@ fn encode_info_for_items(ecx: @EncodeContext, ebml_w: &writer::Encoder, let ebml_w = copy *ebml_w; |i, cx, v| { visit::visit_item(i, cx, v); - match *ecx.tcx.items.get(&i.id) { + match ecx.tcx.items.get_copy(&i.id) { ast_map::node_item(_, pt) => { encode_info_for_item(ecx, &ebml_w, i, index, *pt); @@ -1048,7 +1048,7 @@ fn encode_info_for_items(ecx: @EncodeContext, ebml_w: &writer::Encoder, let ebml_w = copy *ebml_w; |ni, cx, v| { visit::visit_foreign_item(ni, cx, v); - match *ecx.tcx.items.get(&ni.id) { + match ecx.tcx.items.get_copy(&ni.id) { ast_map::node_foreign_item(_, abi, _, pt) => { encode_info_for_foreign_item(ecx, &ebml_w, ni, index, /*bad*/copy *pt, diff --git a/src/librustc/middle/borrowck/gather_loans/lifetime.rs b/src/librustc/middle/borrowck/gather_loans/lifetime.rs index 43fff110a7a7e..330d60a59d3ae 100644 --- a/src/librustc/middle/borrowck/gather_loans/lifetime.rs +++ b/src/librustc/middle/borrowck/gather_loans/lifetime.rs @@ -18,6 +18,7 @@ use middle::ty; use syntax::ast::{m_const, m_imm, m_mutbl}; use syntax::ast; use syntax::codemap::span; +use util::ppaux::{note_and_explain_region}; pub fn guarantee_lifetime(bccx: @BorrowckCtxt, item_scope_id: ast::node_id, @@ -215,13 +216,6 @@ impl GuaranteeLifetimeContext { } }; - // FIXME(#3511) grow to the nearest cleanup scope---this can - // cause observable errors if freezing! - if !self.bccx.tcx.region_maps.is_cleanup_scope(root_scope) { - debug!("%? is not a cleanup scope, adjusting", root_scope); - root_scope = self.bccx.tcx.region_maps.cleanup_scope(root_scope); - } - // If we are borrowing the inside of an `@mut` box, // we need to dynamically mark it to prevent incompatible // borrows from happening later. @@ -235,6 +229,34 @@ impl GuaranteeLifetimeContext { } }; + // FIXME(#3511) grow to the nearest cleanup scope---this can + // cause observable errors if freezing! + if !self.bccx.tcx.region_maps.is_cleanup_scope(root_scope) { + debug!("%? is not a cleanup scope, adjusting", root_scope); + + let cleanup_scope = + self.bccx.tcx.region_maps.cleanup_scope(root_scope); + + if opt_dyna.is_some() { + self.tcx().sess.span_warn( + self.span, + fmt!("Dynamic freeze scope artifically extended \ + (see Issue #6248)")); + note_and_explain_region( + self.bccx.tcx, + "managed value only needs to be frozen for ", + ty::re_scope(root_scope), + "..."); + note_and_explain_region( + self.bccx.tcx, + "...but due to Issue #6248, it will be frozen for ", + ty::re_scope(cleanup_scope), + ""); + } + + root_scope = cleanup_scope; + } + // Add a record of what is required let rm_key = root_map_key {id: cmt_deref.id, derefs: derefs}; let root_info = RootInfo {scope: root_scope, freeze: opt_dyna}; diff --git a/src/librustc/middle/check_const.rs b/src/librustc/middle/check_const.rs index 6a47eedcea8c3..0bb156dd5f642 100644 --- a/src/librustc/middle/check_const.rs +++ b/src/librustc/middle/check_const.rs @@ -237,7 +237,7 @@ pub fn check_item_recursion(sess: Session, match env.def_map.find(&e.id) { Some(&def_const(def_id)) => { if ast_util::is_local(def_id) { - match *env.ast_map.get(&def_id.node) { + match env.ast_map.get_copy(&def_id.node) { ast_map::node_item(it, _) => { (v.visit_item)(it, env, v); } diff --git a/src/librustc/middle/check_match.rs b/src/librustc/middle/check_match.rs index 852eb1b50a499..5be0c09f4ae4a 100644 --- a/src/librustc/middle/check_match.rs +++ b/src/librustc/middle/check_match.rs @@ -523,7 +523,7 @@ pub fn specialize(cx: @MatchCheckCtxt, } } pat_enum(_, args) => { - match *cx.tcx.def_map.get(&pat_id) { + match cx.tcx.def_map.get_copy(&pat_id) { def_const(did) => { let const_expr = lookup_const_by_id(cx.tcx, did).get(); @@ -567,7 +567,7 @@ pub fn specialize(cx: @MatchCheckCtxt, } pat_struct(_, ref flds, _) => { // Is this a struct or an enum variant? - match *cx.tcx.def_map.get(&pat_id) { + match cx.tcx.def_map.get_copy(&pat_id) { def_variant(_, variant_id) => { if variant(variant_id) == *ctor_id { // FIXME #4731: Is this right? --pcw diff --git a/src/librustc/middle/kind.rs b/src/librustc/middle/kind.rs index 199eb274ab9e1..3afe8c3b9d68f 100644 --- a/src/librustc/middle/kind.rs +++ b/src/librustc/middle/kind.rs @@ -128,7 +128,7 @@ fn check_item(item: @item, cx: Context, visitor: visit::vt) { // Yes, it's a destructor. match self_type.node { ty_path(_, path_node_id) => { - let struct_def = *cx.tcx.def_map.get( + let struct_def = cx.tcx.def_map.get_copy( &path_node_id); let struct_did = ast_util::def_id_of_def(struct_def); @@ -272,7 +272,7 @@ pub fn check_expr(e: @expr, cx: Context, v: visit::vt) { let ts = /*bad*/ copy **ts; let type_param_defs = match e.node { expr_path(_) => { - let did = ast_util::def_id_of_def(*cx.tcx.def_map.get(&e.id)); + let did = ast_util::def_id_of_def(cx.tcx.def_map.get_copy(&e.id)); ty::lookup_item_type(cx.tcx, did).generics.type_param_defs } _ => { @@ -333,7 +333,7 @@ fn check_ty(aty: @Ty, cx: Context, v: visit::vt) { for cx.tcx.node_type_substs.find(&id).each |ts| { // FIXME(#5562): removing this copy causes a segfault before stage2 let ts = /*bad*/ copy **ts; - let did = ast_util::def_id_of_def(*cx.tcx.def_map.get(&id)); + let did = ast_util::def_id_of_def(cx.tcx.def_map.get_copy(&id)); let type_param_defs = ty::lookup_item_type(cx.tcx, did).generics.type_param_defs; for vec::each2(ts, *type_param_defs) |&ty, type_param_def| { @@ -399,7 +399,7 @@ pub fn check_bounds(cx: Context, fn is_nullary_variant(cx: Context, ex: @expr) -> bool { match ex.node { expr_path(_) => { - match *cx.tcx.def_map.get(&ex.id) { + match cx.tcx.def_map.get_copy(&ex.id) { def_variant(edid, vdid) => { vec::len(ty::enum_variant_with_id(cx.tcx, edid, vdid).args) == 0u } diff --git a/src/librustc/middle/lint.rs b/src/librustc/middle/lint.rs index faf4b1c31061b..c54ff6075faa7 100644 --- a/src/librustc/middle/lint.rs +++ b/src/librustc/middle/lint.rs @@ -696,7 +696,7 @@ fn check_item_ctypes(cx: ty::ctxt, it: @ast::item) { for vec::each(vec::append_one(tys, decl.output)) |ty| { match ty.node { ast::ty_path(_, id) => { - match *cx.def_map.get(&id) { + match cx.def_map.get_copy(&id) { ast::def_prim_ty(ast::ty_int(ast::ty_i)) => { cx.sess.span_lint( ctypes, id, fn_id, diff --git a/src/librustc/middle/liveness.rs b/src/librustc/middle/liveness.rs index 59a6e6469e2bb..60ce34c3af271 100644 --- a/src/librustc/middle/liveness.rs +++ b/src/librustc/middle/liveness.rs @@ -469,7 +469,7 @@ fn visit_expr(expr: @expr, self: @mut IrMaps, vt: vt<@mut IrMaps>) { match expr.node { // live nodes required for uses or definitions of variables: expr_path(_) => { - let def = *self.tcx.def_map.get(&expr.id); + let def = self.tcx.def_map.get_copy(&expr.id); debug!("expr %d: path that leads to %?", expr.id, def); if moves::moved_variable_node_id_from_def(def).is_some() { self.add_live_node_for_node(expr.id, ExprNode(expr.span)); @@ -616,7 +616,7 @@ pub impl Liveness { fn variable_from_path(&self, expr: @expr) -> Option { match expr.node { expr_path(_) => { - let def = *self.tcx.def_map.get(&expr.id); + let def = self.tcx.def_map.get_copy(&expr.id); moves::moved_variable_node_id_from_def(def).map( |rdef| self.variable(*rdef, expr.span) ) @@ -1338,7 +1338,7 @@ pub impl Liveness { fn access_path(&self, expr: @expr, succ: LiveNode, acc: uint) -> LiveNode { - let def = *self.tcx.def_map.get(&expr.id); + let def = self.tcx.def_map.get_copy(&expr.id); match moves::moved_variable_node_id_from_def(def) { Some(nid) => { let ln = self.live_node(expr.id, expr.span); @@ -1605,7 +1605,7 @@ pub impl Liveness { fn check_lvalue(@self, expr: @expr, vt: vt<@Liveness>) { match expr.node { expr_path(_) => { - match *self.tcx.def_map.get(&expr.id) { + match self.tcx.def_map.get_copy(&expr.id) { def_local(nid, mutbl) => { // Assignment to an immutable variable or argument: only legal // if there is no later assignment. If this local is actually diff --git a/src/librustc/middle/mem_categorization.rs b/src/librustc/middle/mem_categorization.rs index 2e5e53654a455..da0a3ba25d071 100644 --- a/src/librustc/middle/mem_categorization.rs +++ b/src/librustc/middle/mem_categorization.rs @@ -409,7 +409,7 @@ pub impl mem_categorization_ctxt { } ast::expr_path(_) => { - let def = *self.tcx.def_map.get(&expr.id); + let def = self.tcx.def_map.get_copy(&expr.id); self.cat_def(expr.id, expr.span, expr_ty, def) } @@ -977,7 +977,7 @@ pub fn field_mutbl(tcx: ty::ctxt, } } ty::ty_enum(*) => { - match *tcx.def_map.get(&node_id) { + match tcx.def_map.get_copy(&node_id) { ast::def_variant(_, variant_id) => { for ty::lookup_struct_fields(tcx, variant_id).each |fld| { if fld.ident == f_name { diff --git a/src/librustc/middle/moves.rs b/src/librustc/middle/moves.rs index 0daad80af5db7..58345302d16fb 100644 --- a/src/librustc/middle/moves.rs +++ b/src/librustc/middle/moves.rs @@ -441,7 +441,7 @@ pub impl VisitContext { self.move_maps.variable_moves_map.insert( expr.id, entire_expr); - let def = *self.tcx.def_map.get(&expr.id); + let def = self.tcx.def_map.get_copy(&expr.id); for moved_variable_node_id_from_def(def).each |&id| { self.move_maps.moved_variables_set.insert(id); } diff --git a/src/librustc/middle/privacy.rs b/src/librustc/middle/privacy.rs index a37ebdcfaa263..0df09553ad014 100644 --- a/src/librustc/middle/privacy.rs +++ b/src/librustc/middle/privacy.rs @@ -481,7 +481,7 @@ pub fn check_crate(tcx: ty::ctxt, } } expr_path(path) => { - check_path(expr.span, *tcx.def_map.get(&expr.id), path); + check_path(expr.span, tcx.def_map.get_copy(&expr.id), path); } expr_struct(_, ref fields, _) => { match ty::get(ty::expr_ty(tcx, expr)).sty { @@ -499,7 +499,7 @@ pub fn check_crate(tcx: ty::ctxt, ty_enum(id, _) => { if id.crate != local_crate || !privileged_items.contains(&(id.node)) { - match *tcx.def_map.get(&expr.id) { + match tcx.def_map.get_copy(&expr.id) { def_variant(_, variant_id) => { for (*fields).each |field| { debug!("(privacy checking) \ diff --git a/src/librustc/middle/region.rs b/src/librustc/middle/region.rs index 06eb2542235e4..d23a798b6239e 100644 --- a/src/librustc/middle/region.rs +++ b/src/librustc/middle/region.rs @@ -949,7 +949,7 @@ pub fn determine_rp_in_crate(sess: Session, let cx = &mut *cx; while cx.worklist.len() != 0 { let c_id = cx.worklist.pop(); - let c_variance = { *cx.region_paramd_items.get(&c_id) }; + let c_variance = cx.region_paramd_items.get_copy(&c_id); // NOTE cleanup scopes cause an exaggerated lock here debug!("popped %d from worklist", c_id); match cx.dep_map.find(&c_id) { diff --git a/src/librustc/middle/trans/_match.rs b/src/librustc/middle/trans/_match.rs index 1a81d483dfc3c..61a8b367d6cf6 100644 --- a/src/librustc/middle/trans/_match.rs +++ b/src/librustc/middle/trans/_match.rs @@ -280,7 +280,7 @@ pub fn trans_opt(bcx: block, o: &Opt) -> opt_result { pub fn variant_opt(bcx: block, pat_id: ast::node_id) -> Opt { let ccx = bcx.ccx(); - match *ccx.tcx.def_map.get(&pat_id) { + match ccx.tcx.def_map.get_copy(&pat_id) { ast::def_variant(enum_id, var_id) => { let variants = ty::enum_variants(ccx.tcx, enum_id); for vec::each(*variants) |v| { @@ -516,7 +516,7 @@ pub fn enter_opt<'r>(bcx: block, match p.node { ast::pat_enum(*) | ast::pat_ident(_, _, None) if pat_is_const(tcx.def_map, p) => { - let const_def = *tcx.def_map.get(&p.id); + let const_def = tcx.def_map.get_copy(&p.id); let const_def_id = ast_util::def_id_of_def(const_def); if opt_eq(tcx, &lit(ConstLit(const_def_id)), opt) { Some(~[]) @@ -552,7 +552,7 @@ pub fn enter_opt<'r>(bcx: block, if opt_eq(tcx, &variant_opt(bcx, p.id), opt) { // Look up the struct variant ID. let struct_id; - match *tcx.def_map.get(&p.id) { + match tcx.def_map.get_copy(&p.id) { ast::def_variant(_, found_struct_id) => { struct_id = found_struct_id; } diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs index 47363aa9263f2..5419628cd958a 100644 --- a/src/librustc/middle/trans/base.rs +++ b/src/librustc/middle/trans/base.rs @@ -2052,7 +2052,7 @@ pub fn trans_tuple_struct(ccx: @CrateContext, fcx.llretptr.get(), 0, i); - let llarg = match *fcx.llargs.get(&field.node.id) { + let llarg = match fcx.llargs.get_copy(&field.node.id) { local_mem(x) => x, _ => { ccx.tcx.sess.bug(~"trans_tuple_struct: llarg wasn't \ @@ -2141,7 +2141,7 @@ pub fn trans_enum_def(ccx: @CrateContext, enum_definition: &ast::enum_def, pub fn trans_item(ccx: @CrateContext, item: &ast::item) { let _icx = ccx.insn_ctxt("trans_item"); - let path = match *ccx.tcx.items.get(&item.id) { + let path = match ccx.tcx.items.get_copy(&item.id) { ast_map::node_item(_, p) => p, // tjc: ? _ => fail!(~"trans_item"), @@ -2443,7 +2443,7 @@ pub fn fill_fn_pair(bcx: block, pair: ValueRef, llfn: ValueRef, } pub fn item_path(ccx: @CrateContext, i: @ast::item) -> path { - let base = match *ccx.tcx.items.get(&i.id) { + let base = match ccx.tcx.items.get_copy(&i.id) { ast_map::node_item(_, p) => p, // separate map for paths? _ => fail!(~"item_path") diff --git a/src/librustc/middle/trans/closure.rs b/src/librustc/middle/trans/closure.rs index acd52907b9f73..a2a1f3d8b72fb 100644 --- a/src/librustc/middle/trans/closure.rs +++ b/src/librustc/middle/trans/closure.rs @@ -424,7 +424,7 @@ pub fn trans_expr_fn(bcx: block, let Result {bcx: bcx, val: closure} = match sigil { ast::BorrowedSigil | ast::ManagedSigil | ast::OwnedSigil => { - let cap_vars = *ccx.maps.capture_map.get(&user_id); + let cap_vars = ccx.maps.capture_map.get_copy(&user_id); let ret_handle = match is_loop_body {Some(x) => x, None => None}; let ClosureResult {llbox, cdata_ty, bcx} diff --git a/src/librustc/middle/trans/consts.rs b/src/librustc/middle/trans/consts.rs index 3a331e8791ba2..dd68670287b7b 100644 --- a/src/librustc/middle/trans/consts.rs +++ b/src/librustc/middle/trans/consts.rs @@ -158,7 +158,7 @@ pub fn get_const_val(cx: @CrateContext, def_id: ast::def_id) -> ValueRef { if !ast_util::is_local(def_id) { def_id = inline::maybe_instantiate_inline(cx, def_id, true); } - match *cx.tcx.items.get(&def_id.node) { + match cx.tcx.items.get_copy(&def_id.node) { ast_map::node_item(@ast::item { node: ast::item_const(_, subexpr), _ }, _) => { @@ -167,7 +167,7 @@ pub fn get_const_val(cx: @CrateContext, def_id: ast::def_id) -> ValueRef { _ => cx.tcx.sess.bug(~"expected a const to be an item") } } - *cx.const_values.get(&def_id.node) + cx.const_values.get_copy(&def_id.node) } pub fn const_expr(cx: @CrateContext, e: @ast::expr) -> ValueRef { @@ -560,7 +560,7 @@ pub fn trans_const(ccx: @CrateContext, _e: @ast::expr, id: ast::node_id) { let g = base::get_item_val(ccx, id); // At this point, get_item_val has already translated the // constant's initializer to determine its LLVM type. - let v = *ccx.const_values.get(&id); + let v = ccx.const_values.get_copy(&id); llvm::LLVMSetInitializer(g, v); llvm::LLVMSetGlobalConstant(g, True); } diff --git a/src/librustc/middle/trans/controlflow.rs b/src/librustc/middle/trans/controlflow.rs index e91bec5efed4a..b16b77320860c 100644 --- a/src/librustc/middle/trans/controlflow.rs +++ b/src/librustc/middle/trans/controlflow.rs @@ -193,7 +193,7 @@ pub fn trans_log(log_ex: @ast::expr, }; let global = if ccx.module_data.contains_key(&modname) { - *ccx.module_data.get(&modname) + ccx.module_data.get_copy(&modname) } else { let s = link::mangle_internal_name_by_path_and_seq( ccx, modpath, ~"loglevel"); diff --git a/src/librustc/middle/trans/debuginfo.rs b/src/librustc/middle/trans/debuginfo.rs index 2a2bf7ba4ad68..1571fd71152cc 100644 --- a/src/librustc/middle/trans/debuginfo.rs +++ b/src/librustc/middle/trans/debuginfo.rs @@ -864,7 +864,7 @@ pub fn create_local_var(bcx: block, local: @ast::local) something weird"); } option::None => { - match *bcx.fcx.lllocals.get(&local.node.pat.id) { + match bcx.fcx.lllocals.get_copy(&local.node.pat.id) { local_imm(v) => v, _ => bcx.tcx().sess.span_bug(local.span, ~"local is bound to \ something weird") @@ -917,7 +917,7 @@ pub fn create_arg(bcx: block, arg: ast::arg, sp: span) }; update_cache(cache, tg, argument_metadata(mdval)); - let llptr = match *fcx.llargs.get(&arg.id) { + let llptr = match fcx.llargs.get_copy(&arg.id) { local_mem(v) | local_imm(v) => v, }; let declargs = ~[llmdnode(~[llptr]), mdnode]; @@ -960,7 +960,7 @@ pub fn create_function(fcx: fn_ctxt) -> @Metadata { let sp = fcx.span.get(); debug!("%s", cx.sess.codemap.span_to_str(sp)); - let (ident, ret_ty, id) = match *cx.tcx.items.get(&fcx.id) { + let (ident, ret_ty, id) = match cx.tcx.items.get_copy(&fcx.id) { ast_map::node_item(item, _) => { match item.node { ast::item_fn(ref decl, _, _, _, _) => { diff --git a/src/librustc/middle/trans/expr.rs b/src/librustc/middle/trans/expr.rs index b8cdfeb796db0..d961c0705e44c 100644 --- a/src/librustc/middle/trans/expr.rs +++ b/src/librustc/middle/trans/expr.rs @@ -1117,7 +1117,7 @@ pub fn with_field_tys(tcx: ty::ctxt, ty.repr(tcx))); } Some(node_id) => { - match *tcx.def_map.get(&node_id) { + match tcx.def_map.get_copy(&node_id) { ast::def_variant(enum_id, variant_id) => { let variant_info = ty::enum_variant_with_id( tcx, enum_id, variant_id); @@ -1536,7 +1536,7 @@ fn trans_overloaded_op(bcx: block, ret_ty: ty::t, dest: Dest) -> block { - let origin = *bcx.ccx().maps.method_map.get(&expr.id); + let origin = bcx.ccx().maps.method_map.get_copy(&expr.id); let fty = node_id_type(bcx, expr.callee_id); callee::trans_call_inner(bcx, expr.info(), diff --git a/src/librustc/middle/trans/foreign.rs b/src/librustc/middle/trans/foreign.rs index c45ba64c58470..f49a7fb0de41f 100644 --- a/src/librustc/middle/trans/foreign.rs +++ b/src/librustc/middle/trans/foreign.rs @@ -724,7 +724,7 @@ pub fn trans_intrinsic(ccx: @CrateContext, let in_type_size = machine::llbitsize_of_real(ccx, llintype); let out_type_size = machine::llbitsize_of_real(ccx, llouttype); if in_type_size != out_type_size { - let sp = match *ccx.tcx.items.get(&ref_id.get()) { + let sp = match ccx.tcx.items.get_copy(&ref_id.get()) { ast_map::node_expr(e) => e.span, _ => fail!(~"transmute has non-expr arg"), }; diff --git a/src/librustc/middle/trans/machine.rs b/src/librustc/middle/trans/machine.rs index 3ae2421a55589..73b79fa37e2ee 100644 --- a/src/librustc/middle/trans/machine.rs +++ b/src/librustc/middle/trans/machine.rs @@ -118,7 +118,7 @@ pub fn llalign_of(cx: @CrateContext, t: TypeRef) -> ValueRef { // Computes the size of the data part of an enum. pub fn static_size_of_enum(cx: @CrateContext, t: ty::t) -> uint { if cx.enum_sizes.contains_key(&t) { - return *cx.enum_sizes.get(&t); + return cx.enum_sizes.get_copy(&t); } debug!("static_size_of_enum %s", ty_to_str(cx.tcx, t)); diff --git a/src/librustc/middle/trans/meth.rs b/src/librustc/middle/trans/meth.rs index 86b087b937f25..693947d7e99bd 100644 --- a/src/librustc/middle/trans/meth.rs +++ b/src/librustc/middle/trans/meth.rs @@ -312,7 +312,7 @@ pub fn trans_static_method_callee(bcx: block, }; let mname = if method_id.crate == ast::local_crate { - match *bcx.tcx().items.get(&method_id.node) { + match bcx.tcx().items.get_copy(&method_id.node) { ast_map::node_trait_method(trait_method, _, _) => { ast_util::trait_method_to_ty_method(trait_method).ident } @@ -329,7 +329,7 @@ pub fn trans_static_method_callee(bcx: block, name=%s", method_id, callee_id, *ccx.sess.str_of(mname)); let vtbls = resolve_vtables_in_fn_ctxt( - bcx.fcx, *ccx.maps.vtable_map.get(&callee_id)); + bcx.fcx, ccx.maps.vtable_map.get_copy(&callee_id)); match vtbls[bound_index] { typeck::vtable_static(impl_did, ref rcvr_substs, rcvr_origins) => { @@ -367,7 +367,7 @@ pub fn method_from_methods(ms: &[@ast::method], name: ast::ident) pub fn method_with_name(ccx: @CrateContext, impl_id: ast::def_id, name: ast::ident) -> ast::def_id { if impl_id.crate == ast::local_crate { - match *ccx.tcx.items.get(&impl_id.node) { + match ccx.tcx.items.get_copy(&impl_id.node) { ast_map::node_item(@ast::item { node: ast::item_impl(_, _, _, ref ms), _ @@ -385,7 +385,7 @@ pub fn method_with_name_or_default(ccx: @CrateContext, impl_id: ast::def_id, name: ast::ident) -> ast::def_id { if impl_id.crate == ast::local_crate { - match *ccx.tcx.items.get(&impl_id.node) { + match ccx.tcx.items.get_copy(&impl_id.node) { ast_map::node_item(@ast::item { node: ast::item_impl(_, _, _, ref ms), _ }, _) => { diff --git a/src/librustc/middle/trans/monomorphize.rs b/src/librustc/middle/trans/monomorphize.rs index 98db829370c0c..e1b81933e6881 100644 --- a/src/librustc/middle/trans/monomorphize.rs +++ b/src/librustc/middle/trans/monomorphize.rs @@ -101,12 +101,14 @@ pub fn monomorphic_fn(ccx: @CrateContext, let tpt = ty::lookup_item_type(ccx.tcx, fn_id); let llitem_ty = tpt.ty; - let map_node = session::expect(ccx.sess, ccx.tcx.items.find(&fn_id.node), - || fmt!("While monomorphizing %?, couldn't find it in the item map \ - (may have attempted to monomorphize an item defined in a different \ - crate?)", fn_id)); + let map_node = session::expect( + ccx.sess, + ccx.tcx.items.find_copy(&fn_id.node), + || fmt!("While monomorphizing %?, couldn't find it in the item map \ + (may have attempted to monomorphize an item \ + defined in a different crate?)", fn_id)); // Get the path so that we can create a symbol - let (pt, name, span) = match *map_node { + let (pt, name, span) = match map_node { ast_map::node_item(i, pt) => (pt, i.ident, i.span), ast_map::node_variant(ref v, enm, pt) => (pt, (*v).node.name, enm.span), ast_map::node_method(m, _, pt) => (pt, m.ident, m.span), @@ -188,7 +190,7 @@ pub fn monomorphic_fn(ccx: @CrateContext, self_ty: impl_ty_opt }); - let lldecl = match *map_node { + let lldecl = match map_node { ast_map::node_item(i@@ast::item { node: ast::item_fn(ref decl, _, _, _, ref body), _ diff --git a/src/librustc/middle/trans/reachable.rs b/src/librustc/middle/trans/reachable.rs index a446408d00a10..058ce638030b9 100644 --- a/src/librustc/middle/trans/reachable.rs +++ b/src/librustc/middle/trans/reachable.rs @@ -109,7 +109,8 @@ fn traverse_public_item(cx: @mut ctx, item: @item) { item_foreign_mod(ref nm) => { if !traverse_exports(cx, item.id) { for nm.items.each |item| { - (&mut *cx).rmap.insert(item.id); // NOTE reborrow @mut + let cx = &mut *cx; // NOTE reborrow @mut + cx.rmap.insert(item.id); } } } @@ -125,17 +126,24 @@ fn traverse_public_item(cx: @mut ctx, item: @item) { m.generics.ty_params.len() > 0u || attr::find_inline_attr(m.attrs) != attr::ia_none { - (&mut *cx).rmap.insert(m.id); // NOTE reborrow @mut + { + let cx = &mut *cx; // NOTE reborrow @mut + cx.rmap.insert(m.id); + } traverse_inline_body(cx, &m.body); } } } item_struct(ref struct_def, ref generics) => { for struct_def.ctor_id.each |&ctor_id| { - (&mut *cx).rmap.insert(ctor_id); // NOTE reborrow @mut + let cx = &mut *cx; // NOTE reborrow @mut + cx.rmap.insert(ctor_id); } for struct_def.dtor.each |dtor| { - (&mut *cx).rmap.insert(dtor.node.id); + { + let cx = &mut *cx; // NOTE reborrow @mut + cx.rmap.insert(dtor.node.id); + } if generics.ty_params.len() > 0u || attr::find_inline_attr(dtor.node.attrs) != attr::ia_none { @@ -156,8 +164,7 @@ fn traverse_public_item(cx: @mut ctx, item: @item) { fn traverse_ty<'a>(ty: @Ty, cx: @mut ctx<'a>, v: visit::vt<@mut ctx<'a>>) { { - // FIXME #6021: naming rmap shouldn't be necessary - let cx = &mut *cx; + let cx = &mut *cx; // NOTE reborrow @mut if cx.rmap.contains(&ty.id) { return; } cx.rmap.insert(ty.id); } diff --git a/src/librustc/middle/trans/reflect.rs b/src/librustc/middle/trans/reflect.rs index 7e59f580a2c3c..5f77173f56321 100644 --- a/src/librustc/middle/trans/reflect.rs +++ b/src/librustc/middle/trans/reflect.rs @@ -274,8 +274,9 @@ pub impl Reflector { let repr = adt::represent_type(bcx.ccx(), t); let variants = ty::substd_enum_variants(ccx.tcx, did, substs); let llptrty = T_ptr(type_of(ccx, t)); - let (_, opaquety) = *(ccx.tcx.intrinsic_defs.find(&ccx.sess.ident_of(~"Opaque")) - .expect("Failed to resolve intrinsic::Opaque")); + let (_, opaquety) = + ccx.tcx.intrinsic_defs.find_copy(&ccx.sess.ident_of(~"Opaque")) + .expect("Failed to resolve intrinsic::Opaque"); let opaqueptrty = ty::mk_ptr(ccx.tcx, ty::mt { ty: opaquety, mutbl: ast::m_imm }); let make_get_disr = || { @@ -374,7 +375,7 @@ pub fn emit_calls_to_trait_visit_ty(bcx: block, use syntax::parse::token::special_idents::tydesc; let final = sub_block(bcx, ~"final"); assert!(bcx.ccx().tcx.intrinsic_defs.contains_key(&tydesc)); - let (_, tydesc_ty) = *bcx.ccx().tcx.intrinsic_defs.get(&tydesc); + let (_, tydesc_ty) = bcx.ccx().tcx.intrinsic_defs.get_copy(&tydesc); let tydesc_ty = type_of(bcx.ccx(), tydesc_ty); let mut r = Reflector { visitor_val: visitor_val, diff --git a/src/librustc/middle/trans/type_use.rs b/src/librustc/middle/trans/type_use.rs index 33145dd4334a5..fb2358a57e2a7 100644 --- a/src/librustc/middle/trans/type_use.rs +++ b/src/librustc/middle/trans/type_use.rs @@ -239,18 +239,11 @@ pub fn node_type_needs(cx: Context, use_: uint, id: node_id) { } pub fn mark_for_method_call(cx: Context, e_id: node_id, callee_id: node_id) { + let mut opt_static_did = None; for cx.ccx.maps.method_map.find(&e_id).each |mth| { match mth.origin { typeck::method_static(did) => { - for cx.ccx.tcx.node_type_substs.find(&callee_id).each |ts| { - // FIXME(#5562): removing this copy causes a segfault - // before stage2 - let ts = /*bad*/ copy **ts; - let type_uses = type_uses_for(cx.ccx, did, ts.len()); - for vec::each2(*type_uses, ts) |uses, subst| { - type_needs(cx, *uses, *subst) - } - } + opt_static_did = Some(did); } typeck::method_param(typeck::method_param { param_num: param, @@ -262,6 +255,19 @@ pub fn mark_for_method_call(cx: Context, e_id: node_id, callee_id: node_id) { | typeck::method_super(*) => (), } } + + // Note: we do not execute this code from within the each() call + // above because the recursive call to `type_needs` can trigger + // inlining and hence can cause `method_map` and + // `node_type_substs` to be modified. + for opt_static_did.each |did| { + for cx.ccx.tcx.node_type_substs.find_copy(&callee_id).each |ts| { + let type_uses = type_uses_for(cx.ccx, did, ts.len()); + for vec::each2(*type_uses, ts) |uses, subst| { + type_needs(cx, *uses, *subst) + } + } + } } pub fn mark_for_expr(cx: Context, e: @expr) { @@ -291,12 +297,11 @@ pub fn mark_for_expr(cx: Context, e: @expr) { } } expr_path(_) => { - for cx.ccx.tcx.node_type_substs.find(&e.id).each |ts| { - // FIXME(#5562): removing this copy causes a segfault before stage2 - let ts = copy **ts; - let id = ast_util::def_id_of_def(*cx.ccx.tcx.def_map.get(&e.id)); + let opt_ts = cx.ccx.tcx.node_type_substs.find_copy(&e.id); + for opt_ts.each |ts| { + let id = ast_util::def_id_of_def(cx.ccx.tcx.def_map.get_copy(&e.id)); let uses_for_ts = type_uses_for(cx.ccx, id, ts.len()); - for vec::each2(*uses_for_ts, ts) |uses, subst| { + for vec::each2(*uses_for_ts, *ts) |uses, subst| { type_needs(cx, *uses, *subst) } } diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index b17dac82048bf..eac73ce1a2e0a 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -3893,7 +3893,7 @@ pub fn enum_variants(cx: ctxt, id: ast::def_id) -> @~[VariantInfo] { call eval_const_expr, it should never get called twice for the same expr, since check_enum_variants also updates the enum_var_cache */ - match *cx.items.get(&id.node) { + match cx.items.get_copy(&id.node) { ast_map::node_item(@ast::item { node: ast::item_enum(ref enum_definition, _), _ @@ -4424,7 +4424,7 @@ pub fn get_impl_id(tcx: ctxt, trait_id: def_id, self_ty: t) -> def_id { pub fn visitor_object_ty(tcx: ctxt) -> (@TraitRef, t) { let ty_visitor_name = special_idents::ty_visitor; assert!(tcx.intrinsic_traits.contains_key(&ty_visitor_name)); - let trait_ref = *tcx.intrinsic_traits.get(&ty_visitor_name); + let trait_ref = tcx.intrinsic_traits.get_copy(&ty_visitor_name); (trait_ref, mk_trait(tcx, trait_ref.def_id, copy trait_ref.substs, BoxTraitStore, ast::m_imm)) } diff --git a/src/librustc/middle/typeck/check/_match.rs b/src/librustc/middle/typeck/check/_match.rs index 0c9b61164d231..a3bf1a5ef52d4 100644 --- a/src/librustc/middle/typeck/check/_match.rs +++ b/src/librustc/middle/typeck/check/_match.rs @@ -404,7 +404,7 @@ pub fn check_pat(pcx: &pat_ctxt, pat: @ast::pat, expected: ty::t) { } ast::pat_enum(*) | ast::pat_ident(*) if pat_is_const(tcx.def_map, pat) => { - let const_did = ast_util::def_id_of_def(*tcx.def_map.get(&pat.id)); + let const_did = ast_util::def_id_of_def(tcx.def_map.get_copy(&pat.id)); let const_tpt = ty::lookup_item_type(tcx, const_did); demand::suptype(fcx, pat.span, expected, const_tpt.ty); fcx.write_ty(pat.id, const_tpt.ty); diff --git a/src/librustc/middle/typeck/check/mod.rs b/src/librustc/middle/typeck/check/mod.rs index 70282fdc57cfe..09022b5829a14 100644 --- a/src/librustc/middle/typeck/check/mod.rs +++ b/src/librustc/middle/typeck/check/mod.rs @@ -433,7 +433,7 @@ pub fn check_fn(ccx: @mut CrateCtxt, assign(self_info.self_id, Some(self_info.self_ty)); debug!("self is assigned to %s", fcx.infcx().ty_to_str( - *fcx.inh.locals.get(&self_info.self_id))); + fcx.inh.locals.get_copy(&self_info.self_id))); } // Add formal parameters. @@ -466,7 +466,7 @@ pub fn check_fn(ccx: @mut CrateCtxt, debug!("Local variable %s is assigned type %s", fcx.pat_to_str(local.node.pat), fcx.infcx().ty_to_str( - *fcx.inh.locals.get(&local.node.id))); + fcx.inh.locals.get_copy(&local.node.id))); visit::visit_local(local, e, v); }; @@ -479,7 +479,7 @@ pub fn check_fn(ccx: @mut CrateCtxt, debug!("Pattern binding %s is assigned to %s", *tcx.sess.str_of(path.idents[0]), fcx.infcx().ty_to_str( - *fcx.inh.locals.get(&p.id))); + fcx.inh.locals.get_copy(&p.id))); } _ => {} } @@ -3492,7 +3492,7 @@ pub fn check_intrinsic_type(ccx: @mut CrateCtxt, it: @ast::foreign_item) { ~"visit_tydesc" => { let tydesc_name = special_idents::tydesc; assert!(tcx.intrinsic_defs.contains_key(&tydesc_name)); - let (_, tydesc_ty) = *tcx.intrinsic_defs.get(&tydesc_name); + let (_, tydesc_ty) = tcx.intrinsic_defs.get_copy(&tydesc_name); let (_, visitor_object_ty) = ty::visitor_object_ty(tcx); let td_ptr = ty::mk_ptr(ccx.tcx, ty::mt { ty: tydesc_ty, diff --git a/src/librustc/middle/typeck/check/vtable.rs b/src/librustc/middle/typeck/check/vtable.rs index c177d5ab0eb3a..100e23e024c45 100644 --- a/src/librustc/middle/typeck/check/vtable.rs +++ b/src/librustc/middle/typeck/check/vtable.rs @@ -490,7 +490,7 @@ pub fn early_resolve_expr(ex: @ast::expr, for fcx.opt_node_ty_substs(ex.id) |substs| { debug!("vtable resolution on parameter bounds for expr %s", ex.repr(fcx.tcx())); - let def = *cx.tcx.def_map.get(&ex.id); + let def = cx.tcx.def_map.get_copy(&ex.id); let did = ast_util::def_id_of_def(def); let item_ty = ty::lookup_item_type(cx.tcx, did); debug!("early resolve expr: def %? %?, %?, %s", ex.id, did, def, diff --git a/src/librustc/middle/typeck/coherence.rs b/src/librustc/middle/typeck/coherence.rs index d779c20b3e81c..09f0b83e61689 100644 --- a/src/librustc/middle/typeck/coherence.rs +++ b/src/librustc/middle/typeck/coherence.rs @@ -651,7 +651,7 @@ pub impl CoherenceChecker { fn get_self_type_for_implementation(&self, implementation: @Impl) -> ty_param_bounds_and_ty { - return *self.crate_context.tcx.tcache.get(&implementation.did); + return self.crate_context.tcx.tcache.get_copy(&implementation.did); } // Privileged scope checking @@ -711,7 +711,7 @@ pub impl CoherenceChecker { fn trait_ref_to_trait_def_id(&self, trait_ref: @trait_ref) -> def_id { let def_map = self.crate_context.tcx.def_map; - let trait_def = *def_map.get(&trait_ref.ref_id); + let trait_def = def_map.get_copy(&trait_ref.ref_id); let trait_id = def_id_of_def(trait_def); return trait_id; } @@ -751,7 +751,7 @@ pub impl CoherenceChecker { -> bool { match original_type.node { ty_path(_, path_id) => { - match *self.crate_context.tcx.def_map.get(&path_id) { + match self.crate_context.tcx.def_map.get_copy(&path_id) { def_ty(def_id) | def_struct(def_id) => { if def_id.crate != local_crate { return false; diff --git a/src/librustc/middle/typeck/collect.rs b/src/librustc/middle/typeck/collect.rs index 0ffd398d03c19..3da6995b42362 100644 --- a/src/librustc/middle/typeck/collect.rs +++ b/src/librustc/middle/typeck/collect.rs @@ -220,7 +220,7 @@ pub fn ensure_trait_methods(ccx: &CrateCtxt, { let tcx = ccx.tcx; let region_paramd = tcx.region_paramd_items.find(&trait_id).map(|&x| *x); - match *tcx.items.get(&trait_id) { + match tcx.items.get_copy(&trait_id) { ast_map::node_item(@ast::item { node: ast::item_trait(ref generics, _, ref ms), _ From 6cb273ed4efb6724b1c713c3ac35d14e52999fb1 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Sun, 5 May 2013 13:50:10 -0400 Subject: [PATCH 205/410] Address all FIXMEs from #5562 --- src/librustc/middle/astencode.rs | 8 +++----- src/librustc/middle/kind.rs | 8 ++------ src/librustc/middle/trans/base.rs | 2 +- src/librustc/middle/trans/callee.rs | 6 +----- src/librustc/middle/trans/type_of.rs | 6 ++---- src/librustc/middle/trans/type_use.rs | 4 ++-- 6 files changed, 11 insertions(+), 23 deletions(-) diff --git a/src/librustc/middle/astencode.rs b/src/librustc/middle/astencode.rs index 7a3bdce875da2..fad1af749ea7e 100644 --- a/src/librustc/middle/astencode.rs +++ b/src/librustc/middle/astencode.rs @@ -739,7 +739,7 @@ trait ebml_writer_helpers { fn emit_arg(&self, ecx: @e::EncodeContext, arg: ty::arg); fn emit_ty(&self, ecx: @e::EncodeContext, ty: ty::t); fn emit_vstore(&self, ecx: @e::EncodeContext, vstore: ty::vstore); - fn emit_tys(&self, ecx: @e::EncodeContext, tys: ~[ty::t]); + fn emit_tys(&self, ecx: @e::EncodeContext, tys: &[ty::t]); fn emit_type_param_def(&self, ecx: @e::EncodeContext, type_param_def: &ty::TypeParameterDef); @@ -766,7 +766,7 @@ impl ebml_writer_helpers for writer::Encoder { } } - fn emit_tys(&self, ecx: @e::EncodeContext, tys: ~[ty::t]) { + fn emit_tys(&self, ecx: @e::EncodeContext, tys: &[ty::t]) { do self.emit_from_vec(tys) |ty| { self.emit_ty(ecx, *ty) } @@ -868,9 +868,7 @@ fn encode_side_tables_for_id(ecx: @e::EncodeContext, do ebml_w.tag(c::tag_table_node_type_subst) { ebml_w.id(id); do ebml_w.tag(c::tag_table_val) { - // FIXME(#5562): removing this copy causes a segfault - // before stage2 - ebml_w.emit_tys(ecx, /*bad*/copy **tys) + ebml_w.emit_tys(ecx, **tys) } } } diff --git a/src/librustc/middle/kind.rs b/src/librustc/middle/kind.rs index 3afe8c3b9d68f..44090e32880bc 100644 --- a/src/librustc/middle/kind.rs +++ b/src/librustc/middle/kind.rs @@ -268,8 +268,6 @@ pub fn check_expr(e: @expr, cx: Context, v: visit::vt) { _ => e.id }; for cx.tcx.node_type_substs.find(&type_parameter_id).each |ts| { - // FIXME(#5562): removing this copy causes a segfault before stage2 - let ts = /*bad*/ copy **ts; let type_param_defs = match e.node { expr_path(_) => { let did = ast_util::def_id_of_def(cx.tcx.def_map.get_copy(&e.id)); @@ -293,7 +291,7 @@ pub fn check_expr(e: @expr, cx: Context, v: visit::vt) { ts.repr(cx.tcx), type_param_defs.repr(cx.tcx))); } - for vec::each2(ts, *type_param_defs) |&ty, type_param_def| { + for vec::each2(**ts, *type_param_defs) |&ty, type_param_def| { check_bounds(cx, type_parameter_id, e.span, ty, type_param_def) } } @@ -331,12 +329,10 @@ fn check_ty(aty: @Ty, cx: Context, v: visit::vt) { match aty.node { ty_path(_, id) => { for cx.tcx.node_type_substs.find(&id).each |ts| { - // FIXME(#5562): removing this copy causes a segfault before stage2 - let ts = /*bad*/ copy **ts; let did = ast_util::def_id_of_def(cx.tcx.def_map.get_copy(&id)); let type_param_defs = ty::lookup_item_type(cx.tcx, did).generics.type_param_defs; - for vec::each2(ts, *type_param_defs) |&ty, type_param_def| { + for vec::each2(**ts, *type_param_defs) |&ty, type_param_def| { check_bounds(cx, aty.id, aty.span, ty, type_param_def) } } diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs index 5419628cd958a..8082e9cce5171 100644 --- a/src/librustc/middle/trans/base.rs +++ b/src/librustc/middle/trans/base.rs @@ -2501,7 +2501,7 @@ pub fn get_item_val(ccx: @CrateContext, id: ast::node_id) -> ValueRef { Some(&v) => v, None => { let mut exprt = false; - let val = match *ccx.tcx.items.get(&id) { + let val = match ccx.tcx.items.get_copy(&id) { ast_map::node_item(i, pth) => { let my_path = vec::append(/*bad*/copy *pth, ~[path_name(i.ident)]); diff --git a/src/librustc/middle/trans/callee.rs b/src/librustc/middle/trans/callee.rs index c4c6133b405c0..12f91fb8597bd 100644 --- a/src/librustc/middle/trans/callee.rs +++ b/src/librustc/middle/trans/callee.rs @@ -339,16 +339,12 @@ pub fn trans_method_call(in_cx: block, node_id_type(in_cx, call_ex.callee_id), expr_ty(in_cx, call_ex), |cx| { - match cx.ccx().maps.method_map.find(&call_ex.id) { + match cx.ccx().maps.method_map.find_copy(&call_ex.id) { Some(origin) => { debug!("origin for %s: %s", call_ex.repr(in_cx.tcx()), origin.repr(in_cx.tcx())); - // FIXME(#5562): removing this copy causes a segfault - // before stage2 - let origin = /*bad*/ copy *origin; - meth::trans_method_callee(cx, call_ex.callee_id, rcvr, diff --git a/src/librustc/middle/trans/type_of.rs b/src/librustc/middle/trans/type_of.rs index a842f91f0ed6e..fc27c11c06f24 100644 --- a/src/librustc/middle/trans/type_of.rs +++ b/src/librustc/middle/trans/type_of.rs @@ -110,8 +110,7 @@ pub fn type_of_non_gc_box(cx: @CrateContext, t: ty::t) -> TypeRef { pub fn sizing_type_of(cx: @CrateContext, t: ty::t) -> TypeRef { match cx.llsizingtypes.find(&t) { - // FIXME(#5562): removing this copy causes a segfault in stage1 core - Some(t) => return /*bad*/ copy *t, + Some(t) => return *t, None => () } @@ -178,8 +177,7 @@ pub fn type_of(cx: @CrateContext, t: ty::t) -> TypeRef { // Check the cache. match cx.lltypes.find(&t) { - // FIXME(#5562): removing this copy causes a segfault in stage1 core - Some(t) => return /*bad*/ copy *t, + Some(&t) => return t, None => () } diff --git a/src/librustc/middle/trans/type_use.rs b/src/librustc/middle/trans/type_use.rs index fb2358a57e2a7..46cc99e71cc11 100644 --- a/src/librustc/middle/trans/type_use.rs +++ b/src/librustc/middle/trans/type_use.rs @@ -260,10 +260,10 @@ pub fn mark_for_method_call(cx: Context, e_id: node_id, callee_id: node_id) { // above because the recursive call to `type_needs` can trigger // inlining and hence can cause `method_map` and // `node_type_substs` to be modified. - for opt_static_did.each |did| { + for opt_static_did.each |&did| { for cx.ccx.tcx.node_type_substs.find_copy(&callee_id).each |ts| { let type_uses = type_uses_for(cx.ccx, did, ts.len()); - for vec::each2(*type_uses, ts) |uses, subst| { + for vec::each2(*type_uses, *ts) |uses, subst| { type_needs(cx, *uses, *subst) } } From aca2a00fb4cf2ec182cb7802194813c5dd6bbf27 Mon Sep 17 00:00:00 2001 From: Seo Sanghyeon Date: Mon, 6 May 2013 03:09:19 +0900 Subject: [PATCH 206/410] Fix span tests --- src/libsyntax/parse/mod.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libsyntax/parse/mod.rs b/src/libsyntax/parse/mod.rs index 74e4f562ce5c5..4e6abc68ffa75 100644 --- a/src/libsyntax/parse/mod.rs +++ b/src/libsyntax/parse/mod.rs @@ -590,7 +590,7 @@ mod test { types: ~[]}, None // no idea ), - span: sp(0,3)}, // really? + span: sp(0,1)}, id: 4 // fixme }) } @@ -627,7 +627,7 @@ mod test { types: ~[]}, None // no idea ), - span: sp(6,9)}, // bleah. + span: sp(6,7)}, id: 4 // fixme }], output: @ast::Ty{id:5, // fixme From 58c0df2af6559f460e4dc58a45473f47d07b8431 Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Sun, 5 May 2013 13:48:32 -0400 Subject: [PATCH 207/410] add #[non_owned] and #[mutable] attributes --- src/librustc/middle/ty.rs | 69 +++++++++++++++++++++++++-------------- 1 file changed, 44 insertions(+), 25 deletions(-) diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index abf82c511e551..a4e5849e3c6be 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -1784,7 +1784,7 @@ pub impl TypeContents { } fn nonowned(_cx: ctxt) -> TypeContents { - TC_MANAGED + TC_BORROWED_POINTER + TC_MANAGED + TC_BORROWED_POINTER + TC_NON_OWNED } fn contains_managed(&self) -> bool { @@ -1838,40 +1838,43 @@ impl ToStr for TypeContents { } /// Constant for a type containing nothing of interest. -static TC_NONE: TypeContents = TypeContents{bits:0b0000_00000000}; +static TC_NONE: TypeContents = TypeContents{bits: 0b0000_0000_0000}; /// Contains a borrowed value with a lifetime other than static -static TC_BORROWED_POINTER: TypeContents = TypeContents{bits:0b0000_00000001}; +static TC_BORROWED_POINTER: TypeContents = TypeContents{bits: 0b0000_0000_0001}; /// Contains an owned pointer (~T) but not slice of some kind -static TC_OWNED_POINTER: TypeContents = TypeContents{bits:0b000000000010}; +static TC_OWNED_POINTER: TypeContents = TypeContents{bits: 0b0000_0000_0010}; /// Contains an owned vector ~[] or owned string ~str -static TC_OWNED_VEC: TypeContents = TypeContents{bits:0b000000000100}; +static TC_OWNED_VEC: TypeContents = TypeContents{bits: 0b0000_0000_0100}; /// Contains a ~fn() or a ~Trait, which is non-copyable. -static TC_OWNED_CLOSURE: TypeContents = TypeContents{bits:0b000000001000}; +static TC_OWNED_CLOSURE: TypeContents = TypeContents{bits: 0b0000_0000_1000}; /// Type with a destructor -static TC_DTOR: TypeContents = TypeContents{bits:0b000000010000}; +static TC_DTOR: TypeContents = TypeContents{bits: 0b0000_0001_0000}; /// Contains a managed value -static TC_MANAGED: TypeContents = TypeContents{bits:0b000000100000}; +static TC_MANAGED: TypeContents = TypeContents{bits: 0b0000_0010_0000}; /// &mut with any region -static TC_BORROWED_MUT: TypeContents = TypeContents{bits:0b000001000000}; +static TC_BORROWED_MUT: TypeContents = TypeContents{bits: 0b0000_0100_0000}; /// Mutable content, whether owned or by ref -static TC_MUTABLE: TypeContents = TypeContents{bits:0b000010000000}; +static TC_MUTABLE: TypeContents = TypeContents{bits: 0b0000_1000_0000}; -/// Mutable content, whether owned or by ref -static TC_ONCE_CLOSURE: TypeContents = TypeContents{bits:0b000100000000}; +/// One-shot closure +static TC_ONCE_CLOSURE: TypeContents = TypeContents{bits: 0b0001_0000_0000}; /// An enum with no variants. -static TC_EMPTY_ENUM: TypeContents = TypeContents{bits:0b010000000000}; +static TC_EMPTY_ENUM: TypeContents = TypeContents{bits: 0b0010_0000_0000}; + +/// Contains a type marked with `#[non_owned]` +static TC_NON_OWNED: TypeContents = TypeContents{bits: 0b0100_0000_0000}; /// All possible contents. -static TC_ALL: TypeContents = TypeContents{bits:0b011111111111}; +static TC_ALL: TypeContents = TypeContents{bits: 0b0111_1111_1111}; pub fn type_is_copyable(cx: ctxt, t: ty::t) -> bool { type_contents(cx, t).is_copy(cx) @@ -1939,7 +1942,7 @@ pub fn type_contents(cx: ctxt, ty: t) -> TypeContents { let _i = indenter(); - let mut result = match get(ty).sty { + let result = match get(ty).sty { // Scalar and unique types are sendable, constant, and owned ty_nil | ty_bot | ty_bool | ty_int(_) | ty_uint(_) | ty_float(_) | ty_bare_fn(_) | ty_ptr(_) => { @@ -2013,14 +2016,19 @@ pub fn type_contents(cx: ctxt, ty: t) -> TypeContents { ty_struct(did, ref substs) => { let flds = struct_fields(cx, did, substs); - let flds_tc = flds.foldl( + let mut res = flds.foldl( TC_NONE, |tc, f| tc + tc_mt(cx, f.mt, cache)); if ty::has_dtor(cx, did) { - flds_tc + TC_DTOR - } else { - flds_tc + res += TC_DTOR; + } + if has_attr(cx, did, "mutable") { + res += TC_MUTABLE; } + if has_attr(cx, did, "non_owned") { + res += TC_NON_OWNED; + } + res } ty_tup(ref tys) => { @@ -2029,7 +2037,7 @@ pub fn type_contents(cx: ctxt, ty: t) -> TypeContents { ty_enum(did, ref substs) => { let variants = substd_enum_variants(cx, did, substs); - if variants.is_empty() { + let mut res = if variants.is_empty() { // we somewhat arbitrary declare that empty enums // are non-copyable TC_EMPTY_ENUM @@ -2039,7 +2047,14 @@ pub fn type_contents(cx: ctxt, ty: t) -> TypeContents { *tc, |tc, arg_ty| *tc + tc_ty(cx, *arg_ty, cache)) }) + }; + if has_attr(cx, did, "mutable") { + res += TC_MUTABLE; + } + if has_attr(cx, did, "non_owned") { + res += TC_NON_OWNED; } + res } ty_param(p) => { @@ -3841,28 +3856,32 @@ pub fn lookup_trait_def(cx: ctxt, did: ast::def_id) -> @ty::TraitDef { } } -// Determine whether an item is annotated with #[packed] or not -pub fn lookup_packed(tcx: ctxt, - did: def_id) -> bool { +/// Determine whether an item is annotated with an attribute +pub fn has_attr(tcx: ctxt, did: def_id, attr: &str) -> bool { if is_local(did) { match tcx.items.find(&did.node) { Some( &ast_map::node_item(@ast::item { attrs: ref attrs, _ - }, _)) => attr::attrs_contains_name(*attrs, "packed"), + }, _)) => attr::attrs_contains_name(*attrs, attr), _ => tcx.sess.bug(fmt!("lookup_packed: %? is not an item", did)) } } else { let mut ret = false; do csearch::get_item_attrs(tcx.cstore, did) |meta_items| { - ret = attr::contains_name(meta_items, "packed"); + ret = attr::contains_name(meta_items, attr); } ret } } +/// Determine whether an item is annotated with `#[packed]` or not +pub fn lookup_packed(tcx: ctxt, did: def_id) -> bool { + has_attr(tcx, did, "packed") +} + // Look up a field ID, whether or not it's local // Takes a list of type substs in case the struct is generic pub fn lookup_field_type(tcx: ctxt, From 66842c857635f7f35523bea87fc04700d68dfad7 Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Sun, 5 May 2013 15:42:03 -0400 Subject: [PATCH 208/410] mark Cell as non-Const with #[mutable] --- src/libcore/cell.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libcore/cell.rs b/src/libcore/cell.rs index 27e03d2bf3103..30b56a28a58fe 100644 --- a/src/libcore/cell.rs +++ b/src/libcore/cell.rs @@ -19,6 +19,7 @@ A dynamic, mutable location. Similar to a mutable option type, but friendlier. */ +#[mutable] pub struct Cell { priv value: Option } From bc52224d479c0af1e36d2b12e5cf00c0c0fb3810 Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Sun, 5 May 2013 15:48:28 -0400 Subject: [PATCH 209/410] factor out the has_attr checks --- src/librustc/middle/ty.rs | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index a4e5849e3c6be..476ec2c11035b 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -2022,13 +2022,7 @@ pub fn type_contents(cx: ctxt, ty: t) -> TypeContents { if ty::has_dtor(cx, did) { res += TC_DTOR; } - if has_attr(cx, did, "mutable") { - res += TC_MUTABLE; - } - if has_attr(cx, did, "non_owned") { - res += TC_NON_OWNED; - } - res + apply_tc_attr(cx, did, res) } ty_tup(ref tys) => { @@ -2037,7 +2031,7 @@ pub fn type_contents(cx: ctxt, ty: t) -> TypeContents { ty_enum(did, ref substs) => { let variants = substd_enum_variants(cx, did, substs); - let mut res = if variants.is_empty() { + let res = if variants.is_empty() { // we somewhat arbitrary declare that empty enums // are non-copyable TC_EMPTY_ENUM @@ -2048,13 +2042,7 @@ pub fn type_contents(cx: ctxt, ty: t) -> TypeContents { |tc, arg_ty| *tc + tc_ty(cx, *arg_ty, cache)) }) }; - if has_attr(cx, did, "mutable") { - res += TC_MUTABLE; - } - if has_attr(cx, did, "non_owned") { - res += TC_NON_OWNED; - } - res + apply_tc_attr(cx, did, res) } ty_param(p) => { @@ -2114,6 +2102,16 @@ pub fn type_contents(cx: ctxt, ty: t) -> TypeContents { mc + tc_ty(cx, mt.ty, cache) } + fn apply_tc_attr(cx: ctxt, did: def_id, mut tc: TypeContents) -> TypeContents { + if has_attr(cx, did, "mutable") { + tc += TC_MUTABLE; + } + if has_attr(cx, did, "non_owned") { + tc += TC_NON_OWNED; + } + tc + } + fn borrowed_contents(region: ty::Region, mutbl: ast::mutability) -> TypeContents { From e7f6c4c75406c3ecd117d7213e1be3438454b47e Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Sun, 5 May 2013 15:55:32 -0400 Subject: [PATCH 210/410] compile-fail tests for #[non_owned] and #[mutable] --- src/test/compile-fail/mutable-enum.rs | 19 +++++++++++++++++++ src/test/compile-fail/mutable-struct.rs | 19 +++++++++++++++++++ src/test/compile-fail/non_owned-enum.rs | 19 +++++++++++++++++++ src/test/compile-fail/non_owned-struct.rs | 19 +++++++++++++++++++ 4 files changed, 76 insertions(+) create mode 100644 src/test/compile-fail/mutable-enum.rs create mode 100644 src/test/compile-fail/mutable-struct.rs create mode 100644 src/test/compile-fail/non_owned-enum.rs create mode 100644 src/test/compile-fail/non_owned-struct.rs diff --git a/src/test/compile-fail/mutable-enum.rs b/src/test/compile-fail/mutable-enum.rs new file mode 100644 index 0000000000000..2368e5eb5c51f --- /dev/null +++ b/src/test/compile-fail/mutable-enum.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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[mutable] +enum Foo { A } + +fn bar(_: T) {} + +fn main() { + let x = A; + bar(x); //~ ERROR instantiating a type parameter with an incompatible type `Foo`, which does not fulfill `Const` +} diff --git a/src/test/compile-fail/mutable-struct.rs b/src/test/compile-fail/mutable-struct.rs new file mode 100644 index 0000000000000..ee040506c40bd --- /dev/null +++ b/src/test/compile-fail/mutable-struct.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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[mutable] +struct Foo { a: int } + +fn bar(_: T) {} + +fn main() { + let x = Foo { a: 5 }; + bar(x); //~ ERROR instantiating a type parameter with an incompatible type `Foo`, which does not fulfill `Const` +} diff --git a/src/test/compile-fail/non_owned-enum.rs b/src/test/compile-fail/non_owned-enum.rs new file mode 100644 index 0000000000000..79c2be8183a62 --- /dev/null +++ b/src/test/compile-fail/non_owned-enum.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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[non_owned] +enum Foo { A } + +fn bar(_: T) {} + +fn main() { + let x = A; + bar(x); //~ ERROR instantiating a type parameter with an incompatible type `Foo`, which does not fulfill `Owned` +} diff --git a/src/test/compile-fail/non_owned-struct.rs b/src/test/compile-fail/non_owned-struct.rs new file mode 100644 index 0000000000000..2d0bc9a7e8e46 --- /dev/null +++ b/src/test/compile-fail/non_owned-struct.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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[non_owned] +struct Foo { a: int } + +fn bar(_: T) {} + +fn main() { + let x = Foo { a: 5 }; + bar(x); //~ ERROR instantiating a type parameter with an incompatible type `Foo`, which does not fulfill `Owned` +} From 7b36e34c89372b4a159d4ad565ce11d412fbea04 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Sun, 5 May 2013 21:05:37 -0400 Subject: [PATCH 211/410] Fix two more write guard failures --- src/librustc/middle/resolve.rs | 10 ++-- src/libsyntax/ext/pipes/liveness.rs | 2 +- src/test/run-fail/borrowck-wg-imm-then-mut.rs | 19 +++++++ src/test/run-fail/borrowck-wg-mut-then-imm.rs | 19 +++++++ src/test/run-pass/regions-mock-trans-impls.rs | 54 ------------------- 5 files changed, 45 insertions(+), 59 deletions(-) create mode 100644 src/test/run-fail/borrowck-wg-imm-then-mut.rs create mode 100644 src/test/run-fail/borrowck-wg-mut-then-imm.rs delete mode 100644 src/test/run-pass/regions-mock-trans-impls.rs diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs index 911e265e6163c..946bf26fd2713 100644 --- a/src/librustc/middle/resolve.rs +++ b/src/librustc/middle/resolve.rs @@ -4825,10 +4825,12 @@ pub impl Resolver { expr_loop(_, Some(label)) => { do self.with_label_rib { - let this = &mut *self; - let def_like = dl_def(def_label(expr.id)); - let rib = this.label_ribs[this.label_ribs.len() - 1]; - rib.bindings.insert(label, def_like); + { + let this = &mut *self; + let def_like = dl_def(def_label(expr.id)); + let rib = this.label_ribs[this.label_ribs.len() - 1]; + rib.bindings.insert(label, def_like); + } visit_expr(expr, (), visitor); } diff --git a/src/libsyntax/ext/pipes/liveness.rs b/src/libsyntax/ext/pipes/liveness.rs index bd5353b210031..8799bd064f658 100644 --- a/src/libsyntax/ext/pipes/liveness.rs +++ b/src/libsyntax/ext/pipes/liveness.rs @@ -42,7 +42,7 @@ use ext::pipes::proto::{protocol_}; use std::bitv::Bitv; -pub fn analyze(proto: &mut protocol_, _cx: @ext_ctxt) { +pub fn analyze(proto: @mut protocol_, _cx: @ext_ctxt) { debug!("initializing colive analysis"); let num_states = proto.num_states(); let mut colive = do (copy proto.states).map_to_vec |state| { diff --git a/src/test/run-fail/borrowck-wg-imm-then-mut.rs b/src/test/run-fail/borrowck-wg-imm-then-mut.rs new file mode 100644 index 0000000000000..e2c8a0b549c36 --- /dev/null +++ b/src/test/run-fail/borrowck-wg-imm-then-mut.rs @@ -0,0 +1,19 @@ +// error-pattern:borrowed + +// Test that if you imm borrow then mut borrow it fails. + +fn add1(a:@mut int) +{ + add2(a); // already frozen +} + +fn add2(_:&mut int) +{ +} + +pub fn main() +{ + let a = @mut 3; + let b = &*a; // freezes a + add1(a); +} diff --git a/src/test/run-fail/borrowck-wg-mut-then-imm.rs b/src/test/run-fail/borrowck-wg-mut-then-imm.rs new file mode 100644 index 0000000000000..58b2a1d87beed --- /dev/null +++ b/src/test/run-fail/borrowck-wg-mut-then-imm.rs @@ -0,0 +1,19 @@ +// error-pattern:borrowed + +// Test that if you mut borrow then imm borrow it fails. + +fn add1(a:@mut int) +{ + add2(a); // already frozen +} + +fn add2(_:&int) +{ +} + +pub fn main() +{ + let a = @mut 3; + let b = &mut *a; // freezes a + add1(a); +} diff --git a/src/test/run-pass/regions-mock-trans-impls.rs b/src/test/run-pass/regions-mock-trans-impls.rs deleted file mode 100644 index d54aae7bb6337..0000000000000 --- a/src/test/run-pass/regions-mock-trans-impls.rs +++ /dev/null @@ -1,54 +0,0 @@ -// xfail-fast - -// Copyright 2012 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 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -extern mod std; -use core::libc; -use core::sys; -use core::cast; -use std::arena::Arena; - -struct Bcx<'self> { - fcx: &'self Fcx<'self> -} - -struct Fcx<'self> { - arena: &'self mut Arena, - ccx: &'self Ccx -} - -struct Ccx { - x: int -} - -fn h<'r>(bcx : &'r mut Bcx<'r>) -> &'r mut Bcx<'r> { - // XXX: Arena has a bad interface here; it should return mutable pointers. - // But this patch is too big to roll that in. - unsafe { - cast::transmute(bcx.fcx.arena.alloc(|| Bcx { fcx: bcx.fcx })) - } -} - -fn g(fcx: &mut Fcx) { - let mut bcx = Bcx { fcx: fcx }; - h(&mut bcx); -} - -fn f(ccx: &mut Ccx) { - let mut a = Arena(); - let mut fcx = Fcx { arena: &mut a, ccx: ccx }; - return g(&mut fcx); -} - -pub fn main() { - let mut ccx = Ccx { x: 0 }; - f(&mut ccx); -} From 24de5bb649434fc57e1c06bbbe74bbc4662526ce Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sun, 5 May 2013 20:13:32 -0700 Subject: [PATCH 212/410] core: Remove a call to `breakpoint` from a test These breakpoints make it difficult to debug coretest --- src/libcore/stackwalk.rs | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/src/libcore/stackwalk.rs b/src/libcore/stackwalk.rs index 987d4064ab9f6..24237694502a8 100644 --- a/src/libcore/stackwalk.rs +++ b/src/libcore/stackwalk.rs @@ -64,7 +64,7 @@ fn test_simple_deep() { if i == 0 { return } for walk_stack |_frame| { - breakpoint(); + // Would be nice to test something here... } run(i - 1); } @@ -72,24 +72,12 @@ fn test_simple_deep() { run(10); } -fn breakpoint() { - unsafe { - rustrt::rust_dbg_breakpoint() - } -} - fn frame_address(f: &fn(x: *u8)) { unsafe { rusti::frame_address(f) } } -pub mod rustrt { - pub extern { - pub unsafe fn rust_dbg_breakpoint(); - } -} - pub mod rusti { #[abi = "rust-intrinsic"] pub extern "rust-intrinsic" { From 44c1e46ef5bb78b61e4aec28c0b8cef312404d18 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Sun, 5 May 2013 15:04:19 -0400 Subject: [PATCH 213/410] Improve lifetimes on foldl/foldr and lift the Copy requirement --- src/libcore/vec.rs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs index 6ffb0b30917a3..53124d1302437 100644 --- a/src/libcore/vec.rs +++ b/src/libcore/vec.rs @@ -991,7 +991,7 @@ pub fn connect(v: &[~[T]], sep: &T) -> ~[T] { * ~~~ * */ -pub fn foldl(z: T, v: &[U], p: &fn(t: T, u: &U) -> T) -> T { +pub fn foldl<'a, T, U>(z: T, v: &'a [U], p: &fn(t: T, u: &'a U) -> T) -> T { let mut accum = z; let mut i = 0; let l = v.len(); @@ -1023,12 +1023,13 @@ pub fn foldl(z: T, v: &[U], p: &fn(t: T, u: &U) -> T) -> T { * ~~~ * */ -pub fn foldr(v: &[T], z: U, p: &fn(t: &T, u: U) -> U) -> U { - let mut accum = z; - for v.each_reverse |elt| { - accum = p(elt, accum); +pub fn foldr<'a, T, U>(v: &'a [T], mut z: U, p: &fn(t: &'a T, u: U) -> U) -> U { + let mut i = v.len(); + while i > 0 { + i -= 1; + z = p(&v[i], z); } - accum + return z; } /** @@ -1851,7 +1852,7 @@ pub trait ImmutableVector<'self, T> { fn last_opt(&self) -> Option<&'self T>; fn each_reverse(&self, blk: &fn(&T) -> bool); fn eachi_reverse(&self, blk: &fn(uint, &T) -> bool); - fn foldr(&self, z: U, p: &fn(t: &T, u: U) -> U) -> U; + fn foldr<'a, U>(&'a self, z: U, p: &fn(t: &'a T, u: U) -> U) -> U; fn map(&self, f: &fn(t: &T) -> U) -> ~[U]; fn mapi(&self, f: &fn(uint, t: &T) -> U) -> ~[U]; fn map_r(&self, f: &fn(x: &T) -> U) -> ~[U]; @@ -1924,7 +1925,7 @@ impl<'self,T> ImmutableVector<'self, T> for &'self [T] { /// Reduce a vector from right to left #[inline] - fn foldr(&self, z: U, p: &fn(t: &T, u: U) -> U) -> U { + fn foldr<'a, U>(&'a self, z: U, p: &fn(t: &'a T, u: U) -> U) -> U { foldr(*self, z, p) } From 4dc62dfcf35bda8c8edf424c6c50f8584f554217 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Mon, 6 May 2013 05:17:36 -0400 Subject: [PATCH 214/410] do not run regionck if there have been type errors --- src/librustc/middle/typeck/check/regionck.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/librustc/middle/typeck/check/regionck.rs b/src/librustc/middle/typeck/check/regionck.rs index 36606ab7d8990..b4a1cab7b219c 100644 --- a/src/librustc/middle/typeck/check/regionck.rs +++ b/src/librustc/middle/typeck/check/regionck.rs @@ -138,15 +138,19 @@ pub impl Rcx { pub fn regionck_expr(fcx: @mut FnCtxt, e: @ast::expr) { let rcx = @mut Rcx { fcx: fcx, errors_reported: 0 }; - let v = regionck_visitor(); - (v.visit_expr)(e, rcx, v); + if !fcx.tcx().sess.has_errors() { // regionck assumes typeck succeeded + let v = regionck_visitor(); + (v.visit_expr)(e, rcx, v); + } fcx.infcx().resolve_regions(); } pub fn regionck_fn(fcx: @mut FnCtxt, blk: &ast::blk) { let rcx = @mut Rcx { fcx: fcx, errors_reported: 0 }; - let v = regionck_visitor(); - (v.visit_block)(blk, rcx, v); + if !fcx.tcx().sess.has_errors() { // regionck assumes typeck succeeded + let v = regionck_visitor(); + (v.visit_block)(blk, rcx, v); + } fcx.infcx().resolve_regions(); } From e235f6ca53bac14158a6320aab49f31bd8e8bbe0 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Mon, 6 May 2013 05:18:23 -0400 Subject: [PATCH 215/410] remove some unused mut decls and vars --- src/librustc/back/link.rs | 2 +- src/librustc/middle/trans/closure.rs | 4 ---- src/librustc/middle/trans/reachable.rs | 2 +- src/librustc/middle/ty.rs | 2 +- 4 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/librustc/back/link.rs b/src/librustc/back/link.rs index de6469e81807d..c34c7fe303ee2 100644 --- a/src/librustc/back/link.rs +++ b/src/librustc/back/link.rs @@ -788,7 +788,7 @@ pub fn link_binary(sess: Session, }; debug!("output: %s", output.to_str()); - let mut cc_args = link_args(sess, obj_filename, out_filename, lm); + let cc_args = link_args(sess, obj_filename, out_filename, lm); debug!("%s link args: %s", cc_prog, str::connect(cc_args, ~" ")); // We run 'cc' here let prog = run::program_output(cc_prog, cc_args); diff --git a/src/librustc/middle/trans/closure.rs b/src/librustc/middle/trans/closure.rs index 5742463174f65..e0a20f6490715 100644 --- a/src/librustc/middle/trans/closure.rs +++ b/src/librustc/middle/trans/closure.rs @@ -208,7 +208,6 @@ pub fn store_environment(bcx: block, // allocate closure in the heap let Result {bcx: bcx, val: llbox} = allocate_cbox(bcx, sigil, cdata_ty); - let mut temp_cleanups = ~[]; // cbox_ty has the form of a tuple: (a, b, c) we want a ptr to a // tuple. This could be a ptr in uniq or a box or on stack, @@ -244,9 +243,6 @@ pub fn store_environment(bcx: block, } } - for vec::each(temp_cleanups) |cleanup| { - revoke_clean(bcx, *cleanup); - } ClosureResult { llbox: llbox, cdata_ty: cdata_ty, bcx: bcx } } diff --git a/src/librustc/middle/trans/reachable.rs b/src/librustc/middle/trans/reachable.rs index 4d5a7a72a8d5c..1dd73f76da735 100644 --- a/src/librustc/middle/trans/reachable.rs +++ b/src/librustc/middle/trans/reachable.rs @@ -42,7 +42,7 @@ pub fn find_reachable(crate_mod: &_mod, exp_map2: resolve::ExportMap2, tcx: ty::ctxt, method_map: typeck::method_map) -> map { let mut rmap = HashSet::new(); { - let mut cx = @mut ctx { + let cx = @mut ctx { exp_map2: exp_map2, tcx: tcx, method_map: method_map, diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index 03704afdb861f..d3875bad13a7b 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -1950,7 +1950,7 @@ pub fn type_contents(cx: ctxt, ty: t) -> TypeContents { let _i = indenter(); - let mut result = match get(ty).sty { + let result = match get(ty).sty { // Scalar and unique types are sendable, constant, and owned ty_nil | ty_bot | ty_bool | ty_int(_) | ty_uint(_) | ty_float(_) | ty_bare_fn(_) | ty_ptr(_) => { From 02118330084539fdc87533d46aabeef2257ee835 Mon Sep 17 00:00:00 2001 From: Brendan Zabarauskas Date: Mon, 6 May 2013 16:10:26 +1000 Subject: [PATCH 216/410] Move FuzzyEq trait into core::cmp and rename it to 'ApproxEq' --- src/libcore/cmp.rs | 7 ++ src/libcore/num/f32.rs | 25 +++++ src/libcore/num/f64.rs | 25 +++++ src/libcore/num/float.rs | 25 +++++ src/libcore/num/num.rs | 5 +- src/libcore/prelude.rs | 2 +- src/libstd/cmp.rs | 102 -------------------- src/libstd/std.rc | 1 - src/test/run-pass/intrinsics-math.rs | 56 +++++------ src/test/run-pass/trait-inheritance-num.rs | 3 +- src/test/run-pass/trait-inheritance-num2.rs | 3 +- 11 files changed, 114 insertions(+), 140 deletions(-) delete mode 100644 src/libstd/cmp.rs diff --git a/src/libcore/cmp.rs b/src/libcore/cmp.rs index b933b60a39f1f..80f1f05961a5d 100644 --- a/src/libcore/cmp.rs +++ b/src/libcore/cmp.rs @@ -66,6 +66,13 @@ totaleq_impl!(uint) totaleq_impl!(char) +/// Trait for testing approximate equality +pub trait ApproxEq { + fn approx_epsilon() -> Eps; + fn approx_eq(&self, other: &Self) -> bool; + fn approx_eq_eps(&self, other: &Self, approx_epsilon: &Eps) -> bool; +} + #[deriving(Clone, Eq)] pub enum Ordering { Less = -1, Equal = 0, Greater = 1 } diff --git a/src/libcore/num/f32.rs b/src/libcore/num/f32.rs index 416ec2069b521..feeb2c3f83605 100644 --- a/src/libcore/num/f32.rs +++ b/src/libcore/num/f32.rs @@ -210,6 +210,22 @@ impl Eq for f32 { fn ne(&self, other: &f32) -> bool { (*self) != (*other) } } +#[cfg(notest)] +impl ApproxEq for f32 { + #[inline(always)] + fn approx_epsilon() -> f32 { 1.0e-6 } + + #[inline(always)] + fn approx_eq(&self, other: &f32) -> bool { + self.approx_eq_eps(other, &ApproxEq::approx_epsilon::()) + } + + #[inline(always)] + fn approx_eq_eps(&self, other: &f32, approx_epsilon: &f32) -> bool { + (*self - *other).abs() < *approx_epsilon + } +} + #[cfg(notest)] impl Ord for f32 { #[inline(always)] @@ -974,6 +990,15 @@ mod tests { assert!(!NaN.is_negative()); } + #[test] + fn test_approx_eq() { + assert!(1.0f32.approx_eq(&1f32)); + assert!(0.9999999f32.approx_eq(&1f32)); + assert!(1.000001f32.approx_eq_eps(&1f32, &1.0e-5)); + assert!(1.0000001f32.approx_eq_eps(&1f32, &1.0e-6)); + assert!(!1.0000001f32.approx_eq_eps(&1f32, &1.0e-7)); + } + #[test] fn test_primitive() { assert_eq!(Primitive::bits::(), sys::size_of::() * 8); diff --git a/src/libcore/num/f64.rs b/src/libcore/num/f64.rs index 6e09ca61a7d4c..08f9c341188ad 100644 --- a/src/libcore/num/f64.rs +++ b/src/libcore/num/f64.rs @@ -233,6 +233,22 @@ impl Eq for f64 { fn ne(&self, other: &f64) -> bool { (*self) != (*other) } } +#[cfg(notest)] +impl ApproxEq for f64 { + #[inline(always)] + fn approx_epsilon() -> f64 { 1.0e-6 } + + #[inline(always)] + fn approx_eq(&self, other: &f64) -> bool { + self.approx_eq_eps(other, &ApproxEq::approx_epsilon::()) + } + + #[inline(always)] + fn approx_eq_eps(&self, other: &f64, approx_epsilon: &f64) -> bool { + (*self - *other).abs() < *approx_epsilon + } +} + #[cfg(notest)] impl Ord for f64 { #[inline(always)] @@ -1022,6 +1038,15 @@ mod tests { assert!(!NaN.is_negative()); } + #[test] + fn test_approx_eq() { + assert!(1.0f64.approx_eq(&1f64)); + assert!(0.9999999f64.approx_eq(&1f64)); + assert!(1.000001f64.approx_eq_eps(&1f64, &1.0e-5)); + assert!(1.0000001f64.approx_eq_eps(&1f64, &1.0e-6)); + assert!(!1.0000001f64.approx_eq_eps(&1f64, &1.0e-7)); + } + #[test] fn test_primitive() { assert_eq!(Primitive::bits::(), sys::size_of::() * 8); diff --git a/src/libcore/num/float.rs b/src/libcore/num/float.rs index da9d03f6a7bc3..61dd741b671b5 100644 --- a/src/libcore/num/float.rs +++ b/src/libcore/num/float.rs @@ -371,6 +371,22 @@ impl Eq for float { fn ne(&self, other: &float) -> bool { (*self) != (*other) } } +#[cfg(notest)] +impl ApproxEq for float { + #[inline(always)] + fn approx_epsilon() -> float { 1.0e-6 } + + #[inline(always)] + fn approx_eq(&self, other: &float) -> bool { + self.approx_eq_eps(other, &ApproxEq::approx_epsilon::()) + } + + #[inline(always)] + fn approx_eq_eps(&self, other: &float, approx_epsilon: &float) -> bool { + (*self - *other).abs() < *approx_epsilon + } +} + #[cfg(notest)] impl Ord for float { #[inline(always)] @@ -985,6 +1001,15 @@ mod tests { assert!(!NaN.is_negative()); } + #[test] + fn test_approx_eq() { + assert!(1.0f.approx_eq(&1f)); + assert!(0.9999999f.approx_eq(&1f)); + assert!(1.000001f.approx_eq_eps(&1f, &1.0e-5)); + assert!(1.0000001f.approx_eq_eps(&1f, &1.0e-6)); + assert!(!1.0000001f.approx_eq_eps(&1f, &1.0e-7)); + } + #[test] fn test_primitive() { assert_eq!(Primitive::bits::(), sys::size_of::() * 8); diff --git a/src/libcore/num/num.rs b/src/libcore/num/num.rs index 1a59a069df7e8..caa14ea802f6c 100644 --- a/src/libcore/num/num.rs +++ b/src/libcore/num/num.rs @@ -9,7 +9,7 @@ // except according to those terms. //! An interface for numeric types -use cmp::{Eq, Ord}; +use cmp::{Eq, ApproxEq, Ord}; use ops::{Add, Sub, Mul, Div, Rem, Neg}; use ops::{Not, BitAnd, BitOr, BitXor, Shl, Shr}; use option::Option; @@ -240,7 +240,8 @@ pub trait Int: Integer /// pub trait Float: Real + Signed - + Primitive { + + Primitive + + ApproxEq { // FIXME (#5527): These should be associated constants fn NaN() -> Self; fn infinity() -> Self; diff --git a/src/libcore/prelude.rs b/src/libcore/prelude.rs index 42401ae5a1fcd..10b36d38d43ae 100644 --- a/src/libcore/prelude.rs +++ b/src/libcore/prelude.rs @@ -28,7 +28,7 @@ pub use io::{print, println}; /* Reexported types and traits */ pub use clone::Clone; -pub use cmp::{Eq, Ord, TotalEq, TotalOrd, Ordering, Less, Equal, Greater, Equiv}; +pub use cmp::{Eq, ApproxEq, Ord, TotalEq, TotalOrd, Ordering, Less, Equal, Greater, Equiv}; pub use container::{Container, Mutable, Map, Set}; pub use hash::Hash; pub use old_iter::{BaseIter, ReverseIter, MutableIter, ExtendedIter, EqIter}; diff --git a/src/libstd/cmp.rs b/src/libstd/cmp.rs deleted file mode 100644 index ea3793c137483..0000000000000 --- a/src/libstd/cmp.rs +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright 2012-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 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -//! Additional general-purpose comparison functionality. - -use core::f32; -use core::f64; -use core::float; - -pub static FUZZY_EPSILON: float = 1.0e-6; - -pub trait FuzzyEq { - fn fuzzy_eq(&self, other: &Self) -> bool; - fn fuzzy_eq_eps(&self, other: &Self, epsilon: &Eps) -> bool; -} - -impl FuzzyEq for float { - fn fuzzy_eq(&self, other: &float) -> bool { - self.fuzzy_eq_eps(other, &FUZZY_EPSILON) - } - - fn fuzzy_eq_eps(&self, other: &float, epsilon: &float) -> bool { - float::abs(*self - *other) < *epsilon - } -} - -impl FuzzyEq for f32 { - fn fuzzy_eq(&self, other: &f32) -> bool { - self.fuzzy_eq_eps(other, &(FUZZY_EPSILON as f32)) - } - - fn fuzzy_eq_eps(&self, other: &f32, epsilon: &f32) -> bool { - f32::abs(*self - *other) < *epsilon - } -} - -impl FuzzyEq for f64 { - fn fuzzy_eq(&self, other: &f64) -> bool { - self.fuzzy_eq_eps(other, &(FUZZY_EPSILON as f64)) - } - - fn fuzzy_eq_eps(&self, other: &f64, epsilon: &f64) -> bool { - f64::abs(*self - *other) < *epsilon - } -} - -#[test] -fn test_fuzzy_equals() { - assert!((&1.0f).fuzzy_eq(&1.0)); - assert!((&1.0f32).fuzzy_eq(&1.0f32)); - assert!((&1.0f64).fuzzy_eq(&1.0f64)); -} - -#[test] -fn test_fuzzy_eq_eps() { - assert!((&1.2f).fuzzy_eq_eps(&0.9, &0.5)); - assert!(!(&1.5f).fuzzy_eq_eps(&0.9, &0.5)); -} - -#[cfg(test)] -mod test_complex{ - use cmp::*; - - struct Complex { r: float, i: float } - - impl FuzzyEq for Complex { - fn fuzzy_eq(&self, other: &Complex) -> bool { - self.fuzzy_eq_eps(other, &FUZZY_EPSILON) - } - - fn fuzzy_eq_eps(&self, other: &Complex, - epsilon: &float) -> bool { - self.r.fuzzy_eq_eps(&other.r, epsilon) && - self.i.fuzzy_eq_eps(&other.i, epsilon) - } - } - - #[test] - fn test_fuzzy_equals() { - let a = Complex {r: 0.9, i: 0.9}; - let b = Complex {r: 0.9, i: 0.9}; - - assert!((a.fuzzy_eq(&b))); - } - - #[test] - fn test_fuzzy_eq_eps() { - let other = Complex {r: 0.9, i: 0.9}; - - assert!((&Complex {r: 0.9, i: 1.2}).fuzzy_eq_eps(&other, &0.5)); - assert!((&Complex {r: 1.2, i: 0.9}).fuzzy_eq_eps(&other, &0.5)); - assert!(!(&Complex {r: 0.9, i: 1.5}).fuzzy_eq_eps(&other, &0.5)); - assert!(!(&Complex {r: 1.5, i: 0.9}).fuzzy_eq_eps(&other, &0.5)); - } -} diff --git a/src/libstd/std.rc b/src/libstd/std.rc index 4f9de29e7262f..32c7c82a3127e 100644 --- a/src/libstd/std.rc +++ b/src/libstd/std.rc @@ -86,7 +86,6 @@ pub mod term; pub mod time; pub mod arena; pub mod par; -pub mod cmp; pub mod base64; pub mod rl; pub mod workcache; diff --git a/src/test/run-pass/intrinsics-math.rs b/src/test/run-pass/intrinsics-math.rs index 6f9179bc89d09..c73df8209e8b9 100644 --- a/src/test/run-pass/intrinsics-math.rs +++ b/src/test/run-pass/intrinsics-math.rs @@ -10,10 +10,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -extern mod std; - -use std::cmp::FuzzyEq; - mod rusti { #[abi = "rust-intrinsic"] pub extern "rust-intrinsic" { @@ -54,44 +50,44 @@ pub fn main() { unsafe { use rusti::*; - assert!((sqrtf32(64f32).fuzzy_eq(&8f32))); - assert!((sqrtf64(64f64).fuzzy_eq(&8f64))); + assert!((sqrtf32(64f32).approx_eq(&8f32))); + assert!((sqrtf64(64f64).approx_eq(&8f64))); - assert!((powif32(25f32, -2i32).fuzzy_eq(&0.0016f32))); - assert!((powif64(23.2f64, 2i32).fuzzy_eq(&538.24f64))); + assert!((powif32(25f32, -2i32).approx_eq(&0.0016f32))); + assert!((powif64(23.2f64, 2i32).approx_eq(&538.24f64))); - assert!((sinf32(0f32).fuzzy_eq(&0f32))); - assert!((sinf64(f64::consts::pi / 2f64).fuzzy_eq(&1f64))); + assert!((sinf32(0f32).approx_eq(&0f32))); + assert!((sinf64(f64::consts::pi / 2f64).approx_eq(&1f64))); - assert!((cosf32(0f32).fuzzy_eq(&1f32))); - assert!((cosf64(f64::consts::pi * 2f64).fuzzy_eq(&1f64))); + assert!((cosf32(0f32).approx_eq(&1f32))); + assert!((cosf64(f64::consts::pi * 2f64).approx_eq(&1f64))); - assert!((powf32(25f32, -2f32).fuzzy_eq(&0.0016f32))); - assert!((powf64(400f64, 0.5f64).fuzzy_eq(&20f64))); + assert!((powf32(25f32, -2f32).approx_eq(&0.0016f32))); + assert!((powf64(400f64, 0.5f64).approx_eq(&20f64))); - assert!((fabsf32(expf32(1f32) - f32::consts::e).fuzzy_eq(&0f32))); - assert!((expf64(1f64).fuzzy_eq(&f64::consts::e))); + assert!((fabsf32(expf32(1f32) - f32::consts::e).approx_eq(&0f32))); + assert!((expf64(1f64).approx_eq(&f64::consts::e))); - assert!((exp2f32(10f32).fuzzy_eq(&1024f32))); - assert!((exp2f64(50f64).fuzzy_eq(&1125899906842624f64))); + assert!((exp2f32(10f32).approx_eq(&1024f32))); + assert!((exp2f64(50f64).approx_eq(&1125899906842624f64))); - assert!((fabsf32(logf32(f32::consts::e) - 1f32).fuzzy_eq(&0f32))); - assert!((logf64(1f64).fuzzy_eq(&0f64))); + assert!((fabsf32(logf32(f32::consts::e) - 1f32).approx_eq(&0f32))); + assert!((logf64(1f64).approx_eq(&0f64))); - assert!((log10f32(10f32).fuzzy_eq(&1f32))); - assert!((log10f64(f64::consts::e).fuzzy_eq(&f64::consts::log10_e))); + assert!((log10f32(10f32).approx_eq(&1f32))); + assert!((log10f64(f64::consts::e).approx_eq(&f64::consts::log10_e))); - assert!((log2f32(8f32).fuzzy_eq(&3f32))); - assert!((log2f64(f64::consts::e).fuzzy_eq(&f64::consts::log2_e))); + assert!((log2f32(8f32).approx_eq(&3f32))); + assert!((log2f64(f64::consts::e).approx_eq(&f64::consts::log2_e))); - assert!((fmaf32(1.0f32, 2.0f32, 5.0f32).fuzzy_eq(&7.0f32))); - assert!((fmaf64(0.0f64, -2.0f64, f64::consts::e).fuzzy_eq(&f64::consts::e))); + assert!((fmaf32(1.0f32, 2.0f32, 5.0f32).approx_eq(&7.0f32))); + assert!((fmaf64(0.0f64, -2.0f64, f64::consts::e).approx_eq(&f64::consts::e))); - assert!((fabsf32(-1.0f32).fuzzy_eq(&1.0f32))); - assert!((fabsf64(34.2f64).fuzzy_eq(&34.2f64))); + assert!((fabsf32(-1.0f32).approx_eq(&1.0f32))); + assert!((fabsf64(34.2f64).approx_eq(&34.2f64))); - assert!((floorf32(3.8f32).fuzzy_eq(&3.0f32))); - assert!((floorf64(-1.1f64).fuzzy_eq(&-2.0f64))); + assert!((floorf32(3.8f32).approx_eq(&3.0f32))); + assert!((floorf64(-1.1f64).approx_eq(&-2.0f64))); // Causes linker error // undefined reference to llvm.ceil.f32/64 diff --git a/src/test/run-pass/trait-inheritance-num.rs b/src/test/run-pass/trait-inheritance-num.rs index 0fb2a6b2e724b..5179d13813cea 100644 --- a/src/test/run-pass/trait-inheritance-num.rs +++ b/src/test/run-pass/trait-inheritance-num.rs @@ -14,11 +14,10 @@ extern mod std; use core::cmp::{Eq, Ord}; use core::num::NumCast::from; -use std::cmp::FuzzyEq; pub trait NumExt: Num + NumCast + Eq + Ord {} -pub trait FloatExt: NumExt + FuzzyEq {} +pub trait FloatExt: NumExt + ApproxEq {} fn greater_than_one(n: &T) -> bool { *n > from(1) } fn greater_than_one_float(n: &T) -> bool { *n > from(1) } diff --git a/src/test/run-pass/trait-inheritance-num2.rs b/src/test/run-pass/trait-inheritance-num2.rs index b40f647814f0c..f7edd2855a4cd 100644 --- a/src/test/run-pass/trait-inheritance-num2.rs +++ b/src/test/run-pass/trait-inheritance-num2.rs @@ -16,7 +16,6 @@ extern mod std; use core::cmp::{Eq, Ord}; use core::num::NumCast::from; -use std::cmp::FuzzyEq; pub trait TypeExt {} @@ -94,7 +93,7 @@ impl IntegerExt for i64 {} impl IntegerExt for int {} -pub trait FloatExt: NumExt + FuzzyEq {} +pub trait FloatExt: NumExt + ApproxEq {} impl FloatExt for f32 {} impl FloatExt for f64 {} From 0e2242f6d62d6d49bf8a2d1860a41273c1fdfa0d Mon Sep 17 00:00:00 2001 From: Brendan Zabarauskas Date: Mon, 6 May 2013 21:51:48 +1000 Subject: [PATCH 217/410] Add assert_approx_eq! macro --- src/libcore/num/f32.rs | 139 ++++++++--------- src/libcore/num/f64.rs | 140 ++++++++---------- src/libcore/num/float.rs | 139 ++++++++--------- src/libsyntax/ext/expand.rs | 36 +++++ .../assert-approx-eq-eps-macro-fail.rs | 14 ++ .../run-fail/assert-approx-eq-macro-fail.rs | 14 ++ .../assert-approx-eq-macro-success.rs | 16 ++ 7 files changed, 275 insertions(+), 223 deletions(-) create mode 100644 src/test/run-fail/assert-approx-eq-eps-macro-fail.rs create mode 100644 src/test/run-fail/assert-approx-eq-macro-fail.rs create mode 100644 src/test/run-pass/assert-approx-eq-macro-success.rs diff --git a/src/libcore/num/f32.rs b/src/libcore/num/f32.rs index feeb2c3f83605..7c13f136a80f2 100644 --- a/src/libcore/num/f32.rs +++ b/src/libcore/num/f32.rs @@ -826,15 +826,6 @@ mod tests { use super::*; use prelude::*; - macro_rules! assert_fuzzy_eq( - ($a:expr, $b:expr) => ({ - let a = $a, b = $b; - if !((a - b).abs() < 1.0e-6) { - fail!(fmt!("The values were not approximately equal. Found: %? and %?", a, b)); - } - }) - ) - #[test] fn test_num() { num::test_num(10f32, 2f32); @@ -864,91 +855,91 @@ mod tests { #[test] fn test_floor() { - assert_fuzzy_eq!(1.0f32.floor(), 1.0f32); - assert_fuzzy_eq!(1.3f32.floor(), 1.0f32); - assert_fuzzy_eq!(1.5f32.floor(), 1.0f32); - assert_fuzzy_eq!(1.7f32.floor(), 1.0f32); - assert_fuzzy_eq!(0.0f32.floor(), 0.0f32); - assert_fuzzy_eq!((-0.0f32).floor(), -0.0f32); - assert_fuzzy_eq!((-1.0f32).floor(), -1.0f32); - assert_fuzzy_eq!((-1.3f32).floor(), -2.0f32); - assert_fuzzy_eq!((-1.5f32).floor(), -2.0f32); - assert_fuzzy_eq!((-1.7f32).floor(), -2.0f32); + assert_approx_eq!(1.0f32.floor(), 1.0f32); + assert_approx_eq!(1.3f32.floor(), 1.0f32); + assert_approx_eq!(1.5f32.floor(), 1.0f32); + assert_approx_eq!(1.7f32.floor(), 1.0f32); + assert_approx_eq!(0.0f32.floor(), 0.0f32); + assert_approx_eq!((-0.0f32).floor(), -0.0f32); + assert_approx_eq!((-1.0f32).floor(), -1.0f32); + assert_approx_eq!((-1.3f32).floor(), -2.0f32); + assert_approx_eq!((-1.5f32).floor(), -2.0f32); + assert_approx_eq!((-1.7f32).floor(), -2.0f32); } #[test] fn test_ceil() { - assert_fuzzy_eq!(1.0f32.ceil(), 1.0f32); - assert_fuzzy_eq!(1.3f32.ceil(), 2.0f32); - assert_fuzzy_eq!(1.5f32.ceil(), 2.0f32); - assert_fuzzy_eq!(1.7f32.ceil(), 2.0f32); - assert_fuzzy_eq!(0.0f32.ceil(), 0.0f32); - assert_fuzzy_eq!((-0.0f32).ceil(), -0.0f32); - assert_fuzzy_eq!((-1.0f32).ceil(), -1.0f32); - assert_fuzzy_eq!((-1.3f32).ceil(), -1.0f32); - assert_fuzzy_eq!((-1.5f32).ceil(), -1.0f32); - assert_fuzzy_eq!((-1.7f32).ceil(), -1.0f32); + assert_approx_eq!(1.0f32.ceil(), 1.0f32); + assert_approx_eq!(1.3f32.ceil(), 2.0f32); + assert_approx_eq!(1.5f32.ceil(), 2.0f32); + assert_approx_eq!(1.7f32.ceil(), 2.0f32); + assert_approx_eq!(0.0f32.ceil(), 0.0f32); + assert_approx_eq!((-0.0f32).ceil(), -0.0f32); + assert_approx_eq!((-1.0f32).ceil(), -1.0f32); + assert_approx_eq!((-1.3f32).ceil(), -1.0f32); + assert_approx_eq!((-1.5f32).ceil(), -1.0f32); + assert_approx_eq!((-1.7f32).ceil(), -1.0f32); } #[test] fn test_round() { - assert_fuzzy_eq!(1.0f32.round(), 1.0f32); - assert_fuzzy_eq!(1.3f32.round(), 1.0f32); - assert_fuzzy_eq!(1.5f32.round(), 2.0f32); - assert_fuzzy_eq!(1.7f32.round(), 2.0f32); - assert_fuzzy_eq!(0.0f32.round(), 0.0f32); - assert_fuzzy_eq!((-0.0f32).round(), -0.0f32); - assert_fuzzy_eq!((-1.0f32).round(), -1.0f32); - assert_fuzzy_eq!((-1.3f32).round(), -1.0f32); - assert_fuzzy_eq!((-1.5f32).round(), -2.0f32); - assert_fuzzy_eq!((-1.7f32).round(), -2.0f32); + assert_approx_eq!(1.0f32.round(), 1.0f32); + assert_approx_eq!(1.3f32.round(), 1.0f32); + assert_approx_eq!(1.5f32.round(), 2.0f32); + assert_approx_eq!(1.7f32.round(), 2.0f32); + assert_approx_eq!(0.0f32.round(), 0.0f32); + assert_approx_eq!((-0.0f32).round(), -0.0f32); + assert_approx_eq!((-1.0f32).round(), -1.0f32); + assert_approx_eq!((-1.3f32).round(), -1.0f32); + assert_approx_eq!((-1.5f32).round(), -2.0f32); + assert_approx_eq!((-1.7f32).round(), -2.0f32); } #[test] fn test_trunc() { - assert_fuzzy_eq!(1.0f32.trunc(), 1.0f32); - assert_fuzzy_eq!(1.3f32.trunc(), 1.0f32); - assert_fuzzy_eq!(1.5f32.trunc(), 1.0f32); - assert_fuzzy_eq!(1.7f32.trunc(), 1.0f32); - assert_fuzzy_eq!(0.0f32.trunc(), 0.0f32); - assert_fuzzy_eq!((-0.0f32).trunc(), -0.0f32); - assert_fuzzy_eq!((-1.0f32).trunc(), -1.0f32); - assert_fuzzy_eq!((-1.3f32).trunc(), -1.0f32); - assert_fuzzy_eq!((-1.5f32).trunc(), -1.0f32); - assert_fuzzy_eq!((-1.7f32).trunc(), -1.0f32); + assert_approx_eq!(1.0f32.trunc(), 1.0f32); + assert_approx_eq!(1.3f32.trunc(), 1.0f32); + assert_approx_eq!(1.5f32.trunc(), 1.0f32); + assert_approx_eq!(1.7f32.trunc(), 1.0f32); + assert_approx_eq!(0.0f32.trunc(), 0.0f32); + assert_approx_eq!((-0.0f32).trunc(), -0.0f32); + assert_approx_eq!((-1.0f32).trunc(), -1.0f32); + assert_approx_eq!((-1.3f32).trunc(), -1.0f32); + assert_approx_eq!((-1.5f32).trunc(), -1.0f32); + assert_approx_eq!((-1.7f32).trunc(), -1.0f32); } #[test] fn test_fract() { - assert_fuzzy_eq!(1.0f32.fract(), 0.0f32); - assert_fuzzy_eq!(1.3f32.fract(), 0.3f32); - assert_fuzzy_eq!(1.5f32.fract(), 0.5f32); - assert_fuzzy_eq!(1.7f32.fract(), 0.7f32); - assert_fuzzy_eq!(0.0f32.fract(), 0.0f32); - assert_fuzzy_eq!((-0.0f32).fract(), -0.0f32); - assert_fuzzy_eq!((-1.0f32).fract(), -0.0f32); - assert_fuzzy_eq!((-1.3f32).fract(), -0.3f32); - assert_fuzzy_eq!((-1.5f32).fract(), -0.5f32); - assert_fuzzy_eq!((-1.7f32).fract(), -0.7f32); + assert_approx_eq!(1.0f32.fract(), 0.0f32); + assert_approx_eq!(1.3f32.fract(), 0.3f32); + assert_approx_eq!(1.5f32.fract(), 0.5f32); + assert_approx_eq!(1.7f32.fract(), 0.7f32); + assert_approx_eq!(0.0f32.fract(), 0.0f32); + assert_approx_eq!((-0.0f32).fract(), -0.0f32); + assert_approx_eq!((-1.0f32).fract(), -0.0f32); + assert_approx_eq!((-1.3f32).fract(), -0.3f32); + assert_approx_eq!((-1.5f32).fract(), -0.5f32); + assert_approx_eq!((-1.7f32).fract(), -0.7f32); } #[test] fn test_real_consts() { - assert_fuzzy_eq!(Real::two_pi::(), 2f32 * Real::pi::()); - assert_fuzzy_eq!(Real::frac_pi_2::(), Real::pi::() / 2f32); - assert_fuzzy_eq!(Real::frac_pi_3::(), Real::pi::() / 3f32); - assert_fuzzy_eq!(Real::frac_pi_4::(), Real::pi::() / 4f32); - assert_fuzzy_eq!(Real::frac_pi_6::(), Real::pi::() / 6f32); - assert_fuzzy_eq!(Real::frac_pi_8::(), Real::pi::() / 8f32); - assert_fuzzy_eq!(Real::frac_1_pi::(), 1f32 / Real::pi::()); - assert_fuzzy_eq!(Real::frac_2_pi::(), 2f32 / Real::pi::()); - assert_fuzzy_eq!(Real::frac_2_sqrtpi::(), 2f32 / Real::pi::().sqrt()); - assert_fuzzy_eq!(Real::sqrt2::(), 2f32.sqrt()); - assert_fuzzy_eq!(Real::frac_1_sqrt2::(), 1f32 / 2f32.sqrt()); - assert_fuzzy_eq!(Real::log2_e::(), Real::e::().log2()); - assert_fuzzy_eq!(Real::log10_e::(), Real::e::().log10()); - assert_fuzzy_eq!(Real::log_2::(), 2f32.log()); - assert_fuzzy_eq!(Real::log_10::(), 10f32.log()); + assert_approx_eq!(Real::two_pi::(), 2f32 * Real::pi::()); + assert_approx_eq!(Real::frac_pi_2::(), Real::pi::() / 2f32); + assert_approx_eq!(Real::frac_pi_3::(), Real::pi::() / 3f32); + assert_approx_eq!(Real::frac_pi_4::(), Real::pi::() / 4f32); + assert_approx_eq!(Real::frac_pi_6::(), Real::pi::() / 6f32); + assert_approx_eq!(Real::frac_pi_8::(), Real::pi::() / 8f32); + assert_approx_eq!(Real::frac_1_pi::(), 1f32 / Real::pi::()); + assert_approx_eq!(Real::frac_2_pi::(), 2f32 / Real::pi::()); + assert_approx_eq!(Real::frac_2_sqrtpi::(), 2f32 / Real::pi::().sqrt()); + assert_approx_eq!(Real::sqrt2::(), 2f32.sqrt()); + assert_approx_eq!(Real::frac_1_sqrt2::(), 1f32 / 2f32.sqrt()); + assert_approx_eq!(Real::log2_e::(), Real::e::().log2()); + assert_approx_eq!(Real::log10_e::(), Real::e::().log10()); + assert_approx_eq!(Real::log_2::(), 2f32.log()); + assert_approx_eq!(Real::log_10::(), 10f32.log()); } #[test] diff --git a/src/libcore/num/f64.rs b/src/libcore/num/f64.rs index 08f9c341188ad..e5f10c23ecd87 100644 --- a/src/libcore/num/f64.rs +++ b/src/libcore/num/f64.rs @@ -869,16 +869,6 @@ mod tests { use super::*; use prelude::*; - macro_rules! assert_fuzzy_eq( - ($a:expr, $b:expr) => ({ - let a = $a, b = $b; - if !((a - b).abs() < 1.0e-6) { - fail!(fmt!("The values were not approximately equal. \ - Found: %? and expected %?", a, b)); - } - }) - ) - #[test] fn test_num() { num::test_num(10f64, 2f64); @@ -912,91 +902,91 @@ mod tests { #[test] fn test_floor() { - assert_fuzzy_eq!(1.0f64.floor(), 1.0f64); - assert_fuzzy_eq!(1.3f64.floor(), 1.0f64); - assert_fuzzy_eq!(1.5f64.floor(), 1.0f64); - assert_fuzzy_eq!(1.7f64.floor(), 1.0f64); - assert_fuzzy_eq!(0.0f64.floor(), 0.0f64); - assert_fuzzy_eq!((-0.0f64).floor(), -0.0f64); - assert_fuzzy_eq!((-1.0f64).floor(), -1.0f64); - assert_fuzzy_eq!((-1.3f64).floor(), -2.0f64); - assert_fuzzy_eq!((-1.5f64).floor(), -2.0f64); - assert_fuzzy_eq!((-1.7f64).floor(), -2.0f64); + assert_approx_eq!(1.0f64.floor(), 1.0f64); + assert_approx_eq!(1.3f64.floor(), 1.0f64); + assert_approx_eq!(1.5f64.floor(), 1.0f64); + assert_approx_eq!(1.7f64.floor(), 1.0f64); + assert_approx_eq!(0.0f64.floor(), 0.0f64); + assert_approx_eq!((-0.0f64).floor(), -0.0f64); + assert_approx_eq!((-1.0f64).floor(), -1.0f64); + assert_approx_eq!((-1.3f64).floor(), -2.0f64); + assert_approx_eq!((-1.5f64).floor(), -2.0f64); + assert_approx_eq!((-1.7f64).floor(), -2.0f64); } #[test] fn test_ceil() { - assert_fuzzy_eq!(1.0f64.ceil(), 1.0f64); - assert_fuzzy_eq!(1.3f64.ceil(), 2.0f64); - assert_fuzzy_eq!(1.5f64.ceil(), 2.0f64); - assert_fuzzy_eq!(1.7f64.ceil(), 2.0f64); - assert_fuzzy_eq!(0.0f64.ceil(), 0.0f64); - assert_fuzzy_eq!((-0.0f64).ceil(), -0.0f64); - assert_fuzzy_eq!((-1.0f64).ceil(), -1.0f64); - assert_fuzzy_eq!((-1.3f64).ceil(), -1.0f64); - assert_fuzzy_eq!((-1.5f64).ceil(), -1.0f64); - assert_fuzzy_eq!((-1.7f64).ceil(), -1.0f64); + assert_approx_eq!(1.0f64.ceil(), 1.0f64); + assert_approx_eq!(1.3f64.ceil(), 2.0f64); + assert_approx_eq!(1.5f64.ceil(), 2.0f64); + assert_approx_eq!(1.7f64.ceil(), 2.0f64); + assert_approx_eq!(0.0f64.ceil(), 0.0f64); + assert_approx_eq!((-0.0f64).ceil(), -0.0f64); + assert_approx_eq!((-1.0f64).ceil(), -1.0f64); + assert_approx_eq!((-1.3f64).ceil(), -1.0f64); + assert_approx_eq!((-1.5f64).ceil(), -1.0f64); + assert_approx_eq!((-1.7f64).ceil(), -1.0f64); } #[test] fn test_round() { - assert_fuzzy_eq!(1.0f64.round(), 1.0f64); - assert_fuzzy_eq!(1.3f64.round(), 1.0f64); - assert_fuzzy_eq!(1.5f64.round(), 2.0f64); - assert_fuzzy_eq!(1.7f64.round(), 2.0f64); - assert_fuzzy_eq!(0.0f64.round(), 0.0f64); - assert_fuzzy_eq!((-0.0f64).round(), -0.0f64); - assert_fuzzy_eq!((-1.0f64).round(), -1.0f64); - assert_fuzzy_eq!((-1.3f64).round(), -1.0f64); - assert_fuzzy_eq!((-1.5f64).round(), -2.0f64); - assert_fuzzy_eq!((-1.7f64).round(), -2.0f64); + assert_approx_eq!(1.0f64.round(), 1.0f64); + assert_approx_eq!(1.3f64.round(), 1.0f64); + assert_approx_eq!(1.5f64.round(), 2.0f64); + assert_approx_eq!(1.7f64.round(), 2.0f64); + assert_approx_eq!(0.0f64.round(), 0.0f64); + assert_approx_eq!((-0.0f64).round(), -0.0f64); + assert_approx_eq!((-1.0f64).round(), -1.0f64); + assert_approx_eq!((-1.3f64).round(), -1.0f64); + assert_approx_eq!((-1.5f64).round(), -2.0f64); + assert_approx_eq!((-1.7f64).round(), -2.0f64); } #[test] fn test_trunc() { - assert_fuzzy_eq!(1.0f64.trunc(), 1.0f64); - assert_fuzzy_eq!(1.3f64.trunc(), 1.0f64); - assert_fuzzy_eq!(1.5f64.trunc(), 1.0f64); - assert_fuzzy_eq!(1.7f64.trunc(), 1.0f64); - assert_fuzzy_eq!(0.0f64.trunc(), 0.0f64); - assert_fuzzy_eq!((-0.0f64).trunc(), -0.0f64); - assert_fuzzy_eq!((-1.0f64).trunc(), -1.0f64); - assert_fuzzy_eq!((-1.3f64).trunc(), -1.0f64); - assert_fuzzy_eq!((-1.5f64).trunc(), -1.0f64); - assert_fuzzy_eq!((-1.7f64).trunc(), -1.0f64); + assert_approx_eq!(1.0f64.trunc(), 1.0f64); + assert_approx_eq!(1.3f64.trunc(), 1.0f64); + assert_approx_eq!(1.5f64.trunc(), 1.0f64); + assert_approx_eq!(1.7f64.trunc(), 1.0f64); + assert_approx_eq!(0.0f64.trunc(), 0.0f64); + assert_approx_eq!((-0.0f64).trunc(), -0.0f64); + assert_approx_eq!((-1.0f64).trunc(), -1.0f64); + assert_approx_eq!((-1.3f64).trunc(), -1.0f64); + assert_approx_eq!((-1.5f64).trunc(), -1.0f64); + assert_approx_eq!((-1.7f64).trunc(), -1.0f64); } #[test] fn test_fract() { - assert_fuzzy_eq!(1.0f64.fract(), 0.0f64); - assert_fuzzy_eq!(1.3f64.fract(), 0.3f64); - assert_fuzzy_eq!(1.5f64.fract(), 0.5f64); - assert_fuzzy_eq!(1.7f64.fract(), 0.7f64); - assert_fuzzy_eq!(0.0f64.fract(), 0.0f64); - assert_fuzzy_eq!((-0.0f64).fract(), -0.0f64); - assert_fuzzy_eq!((-1.0f64).fract(), -0.0f64); - assert_fuzzy_eq!((-1.3f64).fract(), -0.3f64); - assert_fuzzy_eq!((-1.5f64).fract(), -0.5f64); - assert_fuzzy_eq!((-1.7f64).fract(), -0.7f64); + assert_approx_eq!(1.0f64.fract(), 0.0f64); + assert_approx_eq!(1.3f64.fract(), 0.3f64); + assert_approx_eq!(1.5f64.fract(), 0.5f64); + assert_approx_eq!(1.7f64.fract(), 0.7f64); + assert_approx_eq!(0.0f64.fract(), 0.0f64); + assert_approx_eq!((-0.0f64).fract(), -0.0f64); + assert_approx_eq!((-1.0f64).fract(), -0.0f64); + assert_approx_eq!((-1.3f64).fract(), -0.3f64); + assert_approx_eq!((-1.5f64).fract(), -0.5f64); + assert_approx_eq!((-1.7f64).fract(), -0.7f64); } #[test] fn test_real_consts() { - assert_fuzzy_eq!(Real::two_pi::(), 2.0 * Real::pi::()); - assert_fuzzy_eq!(Real::frac_pi_2::(), Real::pi::() / 2f64); - assert_fuzzy_eq!(Real::frac_pi_3::(), Real::pi::() / 3f64); - assert_fuzzy_eq!(Real::frac_pi_4::(), Real::pi::() / 4f64); - assert_fuzzy_eq!(Real::frac_pi_6::(), Real::pi::() / 6f64); - assert_fuzzy_eq!(Real::frac_pi_8::(), Real::pi::() / 8f64); - assert_fuzzy_eq!(Real::frac_1_pi::(), 1f64 / Real::pi::()); - assert_fuzzy_eq!(Real::frac_2_pi::(), 2f64 / Real::pi::()); - assert_fuzzy_eq!(Real::frac_2_sqrtpi::(), 2f64 / Real::pi::().sqrt()); - assert_fuzzy_eq!(Real::sqrt2::(), 2f64.sqrt()); - assert_fuzzy_eq!(Real::frac_1_sqrt2::(), 1f64 / 2f64.sqrt()); - assert_fuzzy_eq!(Real::log2_e::(), Real::e::().log2()); - assert_fuzzy_eq!(Real::log10_e::(), Real::e::().log10()); - assert_fuzzy_eq!(Real::log_2::(), 2f64.log()); - assert_fuzzy_eq!(Real::log_10::(), 10f64.log()); + assert_approx_eq!(Real::two_pi::(), 2.0 * Real::pi::()); + assert_approx_eq!(Real::frac_pi_2::(), Real::pi::() / 2f64); + assert_approx_eq!(Real::frac_pi_3::(), Real::pi::() / 3f64); + assert_approx_eq!(Real::frac_pi_4::(), Real::pi::() / 4f64); + assert_approx_eq!(Real::frac_pi_6::(), Real::pi::() / 6f64); + assert_approx_eq!(Real::frac_pi_8::(), Real::pi::() / 8f64); + assert_approx_eq!(Real::frac_1_pi::(), 1f64 / Real::pi::()); + assert_approx_eq!(Real::frac_2_pi::(), 2f64 / Real::pi::()); + assert_approx_eq!(Real::frac_2_sqrtpi::(), 2f64 / Real::pi::().sqrt()); + assert_approx_eq!(Real::sqrt2::(), 2f64.sqrt()); + assert_approx_eq!(Real::frac_1_sqrt2::(), 1f64 / 2f64.sqrt()); + assert_approx_eq!(Real::log2_e::(), Real::e::().log2()); + assert_approx_eq!(Real::log10_e::(), Real::e::().log10()); + assert_approx_eq!(Real::log_2::(), 2f64.log()); + assert_approx_eq!(Real::log_10::(), 10f64.log()); } #[test] diff --git a/src/libcore/num/float.rs b/src/libcore/num/float.rs index 61dd741b671b5..a548165326396 100644 --- a/src/libcore/num/float.rs +++ b/src/libcore/num/float.rs @@ -837,15 +837,6 @@ mod tests { use super::*; use prelude::*; - macro_rules! assert_fuzzy_eq( - ($a:expr, $b:expr) => ({ - let a = $a, b = $b; - if !((a - b).abs() < 1.0e-6) { - fail!(fmt!("The values were not approximately equal. Found: %? and %?", a, b)); - } - }) - ) - #[test] fn test_num() { num::test_num(10f, 2f); @@ -875,91 +866,91 @@ mod tests { #[test] fn test_floor() { - assert_fuzzy_eq!(1.0f.floor(), 1.0f); - assert_fuzzy_eq!(1.3f.floor(), 1.0f); - assert_fuzzy_eq!(1.5f.floor(), 1.0f); - assert_fuzzy_eq!(1.7f.floor(), 1.0f); - assert_fuzzy_eq!(0.0f.floor(), 0.0f); - assert_fuzzy_eq!((-0.0f).floor(), -0.0f); - assert_fuzzy_eq!((-1.0f).floor(), -1.0f); - assert_fuzzy_eq!((-1.3f).floor(), -2.0f); - assert_fuzzy_eq!((-1.5f).floor(), -2.0f); - assert_fuzzy_eq!((-1.7f).floor(), -2.0f); + assert_approx_eq!(1.0f.floor(), 1.0f); + assert_approx_eq!(1.3f.floor(), 1.0f); + assert_approx_eq!(1.5f.floor(), 1.0f); + assert_approx_eq!(1.7f.floor(), 1.0f); + assert_approx_eq!(0.0f.floor(), 0.0f); + assert_approx_eq!((-0.0f).floor(), -0.0f); + assert_approx_eq!((-1.0f).floor(), -1.0f); + assert_approx_eq!((-1.3f).floor(), -2.0f); + assert_approx_eq!((-1.5f).floor(), -2.0f); + assert_approx_eq!((-1.7f).floor(), -2.0f); } #[test] fn test_ceil() { - assert_fuzzy_eq!(1.0f.ceil(), 1.0f); - assert_fuzzy_eq!(1.3f.ceil(), 2.0f); - assert_fuzzy_eq!(1.5f.ceil(), 2.0f); - assert_fuzzy_eq!(1.7f.ceil(), 2.0f); - assert_fuzzy_eq!(0.0f.ceil(), 0.0f); - assert_fuzzy_eq!((-0.0f).ceil(), -0.0f); - assert_fuzzy_eq!((-1.0f).ceil(), -1.0f); - assert_fuzzy_eq!((-1.3f).ceil(), -1.0f); - assert_fuzzy_eq!((-1.5f).ceil(), -1.0f); - assert_fuzzy_eq!((-1.7f).ceil(), -1.0f); + assert_approx_eq!(1.0f.ceil(), 1.0f); + assert_approx_eq!(1.3f.ceil(), 2.0f); + assert_approx_eq!(1.5f.ceil(), 2.0f); + assert_approx_eq!(1.7f.ceil(), 2.0f); + assert_approx_eq!(0.0f.ceil(), 0.0f); + assert_approx_eq!((-0.0f).ceil(), -0.0f); + assert_approx_eq!((-1.0f).ceil(), -1.0f); + assert_approx_eq!((-1.3f).ceil(), -1.0f); + assert_approx_eq!((-1.5f).ceil(), -1.0f); + assert_approx_eq!((-1.7f).ceil(), -1.0f); } #[test] fn test_round() { - assert_fuzzy_eq!(1.0f.round(), 1.0f); - assert_fuzzy_eq!(1.3f.round(), 1.0f); - assert_fuzzy_eq!(1.5f.round(), 2.0f); - assert_fuzzy_eq!(1.7f.round(), 2.0f); - assert_fuzzy_eq!(0.0f.round(), 0.0f); - assert_fuzzy_eq!((-0.0f).round(), -0.0f); - assert_fuzzy_eq!((-1.0f).round(), -1.0f); - assert_fuzzy_eq!((-1.3f).round(), -1.0f); - assert_fuzzy_eq!((-1.5f).round(), -2.0f); - assert_fuzzy_eq!((-1.7f).round(), -2.0f); + assert_approx_eq!(1.0f.round(), 1.0f); + assert_approx_eq!(1.3f.round(), 1.0f); + assert_approx_eq!(1.5f.round(), 2.0f); + assert_approx_eq!(1.7f.round(), 2.0f); + assert_approx_eq!(0.0f.round(), 0.0f); + assert_approx_eq!((-0.0f).round(), -0.0f); + assert_approx_eq!((-1.0f).round(), -1.0f); + assert_approx_eq!((-1.3f).round(), -1.0f); + assert_approx_eq!((-1.5f).round(), -2.0f); + assert_approx_eq!((-1.7f).round(), -2.0f); } #[test] fn test_trunc() { - assert_fuzzy_eq!(1.0f.trunc(), 1.0f); - assert_fuzzy_eq!(1.3f.trunc(), 1.0f); - assert_fuzzy_eq!(1.5f.trunc(), 1.0f); - assert_fuzzy_eq!(1.7f.trunc(), 1.0f); - assert_fuzzy_eq!(0.0f.trunc(), 0.0f); - assert_fuzzy_eq!((-0.0f).trunc(), -0.0f); - assert_fuzzy_eq!((-1.0f).trunc(), -1.0f); - assert_fuzzy_eq!((-1.3f).trunc(), -1.0f); - assert_fuzzy_eq!((-1.5f).trunc(), -1.0f); - assert_fuzzy_eq!((-1.7f).trunc(), -1.0f); + assert_approx_eq!(1.0f.trunc(), 1.0f); + assert_approx_eq!(1.3f.trunc(), 1.0f); + assert_approx_eq!(1.5f.trunc(), 1.0f); + assert_approx_eq!(1.7f.trunc(), 1.0f); + assert_approx_eq!(0.0f.trunc(), 0.0f); + assert_approx_eq!((-0.0f).trunc(), -0.0f); + assert_approx_eq!((-1.0f).trunc(), -1.0f); + assert_approx_eq!((-1.3f).trunc(), -1.0f); + assert_approx_eq!((-1.5f).trunc(), -1.0f); + assert_approx_eq!((-1.7f).trunc(), -1.0f); } #[test] fn test_fract() { - assert_fuzzy_eq!(1.0f.fract(), 0.0f); - assert_fuzzy_eq!(1.3f.fract(), 0.3f); - assert_fuzzy_eq!(1.5f.fract(), 0.5f); - assert_fuzzy_eq!(1.7f.fract(), 0.7f); - assert_fuzzy_eq!(0.0f.fract(), 0.0f); - assert_fuzzy_eq!((-0.0f).fract(), -0.0f); - assert_fuzzy_eq!((-1.0f).fract(), -0.0f); - assert_fuzzy_eq!((-1.3f).fract(), -0.3f); - assert_fuzzy_eq!((-1.5f).fract(), -0.5f); - assert_fuzzy_eq!((-1.7f).fract(), -0.7f); + assert_approx_eq!(1.0f.fract(), 0.0f); + assert_approx_eq!(1.3f.fract(), 0.3f); + assert_approx_eq!(1.5f.fract(), 0.5f); + assert_approx_eq!(1.7f.fract(), 0.7f); + assert_approx_eq!(0.0f.fract(), 0.0f); + assert_approx_eq!((-0.0f).fract(), -0.0f); + assert_approx_eq!((-1.0f).fract(), -0.0f); + assert_approx_eq!((-1.3f).fract(), -0.3f); + assert_approx_eq!((-1.5f).fract(), -0.5f); + assert_approx_eq!((-1.7f).fract(), -0.7f); } #[test] fn test_real_consts() { - assert_fuzzy_eq!(Real::two_pi::(), 2f * Real::pi::()); - assert_fuzzy_eq!(Real::frac_pi_2::(), Real::pi::() / 2f); - assert_fuzzy_eq!(Real::frac_pi_3::(), Real::pi::() / 3f); - assert_fuzzy_eq!(Real::frac_pi_4::(), Real::pi::() / 4f); - assert_fuzzy_eq!(Real::frac_pi_6::(), Real::pi::() / 6f); - assert_fuzzy_eq!(Real::frac_pi_8::(), Real::pi::() / 8f); - assert_fuzzy_eq!(Real::frac_1_pi::(), 1f / Real::pi::()); - assert_fuzzy_eq!(Real::frac_2_pi::(), 2f / Real::pi::()); - assert_fuzzy_eq!(Real::frac_2_sqrtpi::(), 2f / Real::pi::().sqrt()); - assert_fuzzy_eq!(Real::sqrt2::(), 2f.sqrt()); - assert_fuzzy_eq!(Real::frac_1_sqrt2::(), 1f / 2f.sqrt()); - assert_fuzzy_eq!(Real::log2_e::(), Real::e::().log2()); - assert_fuzzy_eq!(Real::log10_e::(), Real::e::().log10()); - assert_fuzzy_eq!(Real::log_2::(), 2f.log()); - assert_fuzzy_eq!(Real::log_10::(), 10f.log()); + assert_approx_eq!(Real::two_pi::(), 2f * Real::pi::()); + assert_approx_eq!(Real::frac_pi_2::(), Real::pi::() / 2f); + assert_approx_eq!(Real::frac_pi_3::(), Real::pi::() / 3f); + assert_approx_eq!(Real::frac_pi_4::(), Real::pi::() / 4f); + assert_approx_eq!(Real::frac_pi_6::(), Real::pi::() / 6f); + assert_approx_eq!(Real::frac_pi_8::(), Real::pi::() / 8f); + assert_approx_eq!(Real::frac_1_pi::(), 1f / Real::pi::()); + assert_approx_eq!(Real::frac_2_pi::(), 2f / Real::pi::()); + assert_approx_eq!(Real::frac_2_sqrtpi::(), 2f / Real::pi::().sqrt()); + assert_approx_eq!(Real::sqrt2::(), 2f.sqrt()); + assert_approx_eq!(Real::frac_1_sqrt2::(), 1f / 2f.sqrt()); + assert_approx_eq!(Real::log2_e::(), Real::e::().log2()); + assert_approx_eq!(Real::log10_e::(), Real::e::().log10()); + assert_approx_eq!(Real::log_2::(), 2f.log()); + assert_approx_eq!(Real::log_10::(), 10f.log()); } #[test] diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs index 02721a02fbd0c..9363807ab9b9e 100644 --- a/src/libsyntax/ext/expand.rs +++ b/src/libsyntax/ext/expand.rs @@ -483,6 +483,42 @@ pub fn core_macros() -> ~str { ) ) + macro_rules! assert_approx_eq ( + ($given:expr , $expected:expr) => ( + { + use core::cmp::ApproxEq; + + let given_val = $given; + let expected_val = $expected; + // check both directions of equality.... + if !( + given_val.approx_eq(&expected_val) && + expected_val.approx_eq(&given_val) + ) { + fail!(\"left: %? does not approximately equal right: %?\", + given_val, expected_val); + } + } + ); + ($given:expr , $expected:expr , $epsilon:expr) => ( + { + use core::cmp::ApproxEq; + + let given_val = $given; + let expected_val = $expected; + let epsilon_val = $epsilon; + // check both directions of equality.... + if !( + given_val.approx_eq_eps(&expected_val, &epsilon_val) && + expected_val.approx_eq_eps(&given_val, &epsilon_val) + ) { + fail!(\"left: %? does not approximately equal right: %? with epsilon: %?\", + given_val, expected_val, epsilon_val); + } + } + ) + ) + macro_rules! condition ( { $c:ident: $in:ty -> $out:ty; } => { diff --git a/src/test/run-fail/assert-approx-eq-eps-macro-fail.rs b/src/test/run-fail/assert-approx-eq-eps-macro-fail.rs new file mode 100644 index 0000000000000..c0c20f7af4351 --- /dev/null +++ b/src/test/run-fail/assert-approx-eq-eps-macro-fail.rs @@ -0,0 +1,14 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// error-pattern:left: 1.0000001 does not approximately equal right: 1 with epsilon: 0.0000001 +pub fn main() { + assert_approx_eq!(1.0000001f, 1.0f, 1.0e-7); +} diff --git a/src/test/run-fail/assert-approx-eq-macro-fail.rs b/src/test/run-fail/assert-approx-eq-macro-fail.rs new file mode 100644 index 0000000000000..43de4f92b63b1 --- /dev/null +++ b/src/test/run-fail/assert-approx-eq-macro-fail.rs @@ -0,0 +1,14 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// error-pattern:left: 1.00001 does not approximately equal right: 1 +pub fn main() { + assert_approx_eq!(1.00001f, 1.0f); +} diff --git a/src/test/run-pass/assert-approx-eq-macro-success.rs b/src/test/run-pass/assert-approx-eq-macro-success.rs new file mode 100644 index 0000000000000..5c7c11ef50343 --- /dev/null +++ b/src/test/run-pass/assert-approx-eq-macro-success.rs @@ -0,0 +1,16 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub fn main() { + assert_approx_eq!(1.0f, 1.0f); + assert_approx_eq!(1.0000001f, 1.0f); + assert_approx_eq!(1.0000001f, 1.0f, 1.0e-6); + assert_approx_eq!(1.000001f, 1.0f, 1.0e-5); +} From 2ea52a38e59b85b4b6998661b38425ce29839aed Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Mon, 6 May 2013 09:00:37 -0400 Subject: [PATCH 218/410] refinement to technique used to not run regionck --- src/libcore/cleanup.rs | 2 +- src/librustc/driver/session.rs | 3 ++ src/librustc/middle/typeck/check/mod.rs | 18 +++++-- src/librustc/middle/typeck/check/regionck.rs | 54 +++++++++---------- src/librustc/middle/typeck/mod.rs | 6 ++- src/libsyntax/diagnostic.rs | 8 ++- src/test/compile-fail/dead-code-ret.rs | 12 +++-- src/test/compile-fail/for-loop-decl.rs | 35 ------------ src/test/compile-fail/regions-bounds.rs | 6 +-- .../compile-fail/regions-ret-borrowed-1.rs | 2 - src/test/compile-fail/regions-ret-borrowed.rs | 2 - src/test/compile-fail/type-shadow.rs | 7 +-- 12 files changed, 66 insertions(+), 89 deletions(-) delete mode 100644 src/test/compile-fail/for-loop-decl.rs diff --git a/src/libcore/cleanup.rs b/src/libcore/cleanup.rs index 435b1cb7f34c3..06f6185586d85 100644 --- a/src/libcore/cleanup.rs +++ b/src/libcore/cleanup.rs @@ -15,7 +15,7 @@ use ptr::mut_null; use repr::BoxRepr; use sys::TypeDesc; use cast::transmute; -use unstable::lang::clear_task_borrow_list; +#[cfg(notest)] use unstable::lang::clear_task_borrow_list; #[cfg(notest)] use ptr::to_unsafe_ptr; diff --git a/src/librustc/driver/session.rs b/src/librustc/driver/session.rs index 3b9bbbb9f1c5d..582e1d606bca6 100644 --- a/src/librustc/driver/session.rs +++ b/src/librustc/driver/session.rs @@ -188,6 +188,9 @@ pub impl Session_ { fn err(@self, msg: &str) { self.span_diagnostic.handler().err(msg) } + fn err_count(@self) -> uint { + self.span_diagnostic.handler().err_count() + } fn has_errors(@self) -> bool { self.span_diagnostic.handler().has_errors() } diff --git a/src/librustc/middle/typeck/check/mod.rs b/src/librustc/middle/typeck/check/mod.rs index 5357d092a9077..7e63db89edbcc 100644 --- a/src/librustc/middle/typeck/check/mod.rs +++ b/src/librustc/middle/typeck/check/mod.rs @@ -207,9 +207,11 @@ pub impl PurityState { } pub struct FnCtxt { - // var_bindings, locals and next_var_id are shared - // with any nested functions that capture the environment - // (and with any functions whose environment is being captured). + // Number of errors that had been reported when we started + // checking this function. On exit, if we find that *more* errors + // have been reported, we will skip regionck and other work that + // expects the types within the function to be consistent. + err_count_on_creation: uint, ret_ty: ty::t, // Used by loop bodies that return from the outer function @@ -263,6 +265,7 @@ pub fn blank_fn_ctxt(ccx: @mut CrateCtxt, // It's kind of a kludge to manufacture a fake function context // and statement context, but we might as well do write the code only once @mut FnCtxt { + err_count_on_creation: ccx.tcx.sess.err_count(), ret_ty: rty, indirect_ret_ty: None, ps: PurityState::function(ast::pure_fn, 0), @@ -328,6 +331,7 @@ pub fn check_fn(ccx: @mut CrateCtxt, */ let tcx = ccx.tcx; + let err_count_on_creation = tcx.sess.err_count(); // ______________________________________________________________________ // First, we have to replace any bound regions in the fn and self @@ -368,6 +372,7 @@ pub fn check_fn(ccx: @mut CrateCtxt, }; @mut FnCtxt { + err_count_on_creation: err_count_on_creation, ret_ty: ret_ty, indirect_ret_ty: indirect_ret_ty, ps: PurityState::function(purity, id), @@ -642,7 +647,12 @@ impl AstConv for FnCtxt { } pub impl FnCtxt { - fn infcx(&self) -> @mut infer::InferCtxt { self.inh.infcx } + fn infcx(&self) -> @mut infer::InferCtxt { + self.inh.infcx + } + fn err_count_since_creation(&self) -> uint { + self.ccx.tcx.sess.err_count() - self.err_count_on_creation + } fn search_in_scope_regions( &self, span: span, diff --git a/src/librustc/middle/typeck/check/regionck.rs b/src/librustc/middle/typeck/check/regionck.rs index b4a1cab7b219c..03dd32353db6a 100644 --- a/src/librustc/middle/typeck/check/regionck.rs +++ b/src/librustc/middle/typeck/check/regionck.rs @@ -138,7 +138,8 @@ pub impl Rcx { pub fn regionck_expr(fcx: @mut FnCtxt, e: @ast::expr) { let rcx = @mut Rcx { fcx: fcx, errors_reported: 0 }; - if !fcx.tcx().sess.has_errors() { // regionck assumes typeck succeeded + if fcx.err_count_since_creation() == 0 { + // regionck assumes typeck succeeded let v = regionck_visitor(); (v.visit_expr)(e, rcx, v); } @@ -147,7 +148,8 @@ pub fn regionck_expr(fcx: @mut FnCtxt, e: @ast::expr) { pub fn regionck_fn(fcx: @mut FnCtxt, blk: &ast::blk) { let rcx = @mut Rcx { fcx: fcx, errors_reported: 0 }; - if !fcx.tcx().sess.has_errors() { // regionck assumes typeck succeeded + if fcx.err_count_since_creation() == 0 { + // regionck assumes typeck succeeded let v = regionck_visitor(); (v.visit_block)(blk, rcx, v); } @@ -409,10 +411,6 @@ fn constrain_callee(rcx: @mut Rcx, let call_region = ty::re_scope(call_expr.id); let callee_ty = rcx.resolve_node_type(call_expr.callee_id); - if ty::type_is_error(callee_ty) { - return; - } - match ty::get(callee_ty).sty { ty::ty_bare_fn(*) => { } ty::ty_closure(ref closure_ty) => { @@ -432,9 +430,12 @@ fn constrain_callee(rcx: @mut Rcx, } } _ => { - tcx.sess.span_bug( - callee_expr.span, - fmt!("Calling non-function: %s", callee_ty.repr(tcx))); + // this should not happen, but it does if the program is + // erroneous + // + // tcx.sess.span_bug( + // callee_expr.span, + // fmt!("Calling non-function: %s", callee_ty.repr(tcx))); } } } @@ -456,9 +457,6 @@ fn constrain_call(rcx: @mut Rcx, debug!("constrain_call(call_expr=%s, implicitly_ref_args=%?)", call_expr.repr(tcx), implicitly_ref_args); let callee_ty = rcx.resolve_node_type(call_expr.callee_id); - if ty::type_is_error(callee_ty) { - return; - } let fn_sig = ty::ty_fn_sig(callee_ty); // `callee_region` is the scope representing the time in which the @@ -919,7 +917,7 @@ pub mod guarantor { // expressions, both of which always yield a region variable, so // mk_subr should never fail. let rptr_ty = rcx.resolve_node_type(id); - if !ty::type_is_error(rptr_ty) && !ty::type_is_bot(rptr_ty) { + if !ty::type_is_bot(rptr_ty) { let tcx = rcx.fcx.ccx.tcx; debug!("rptr_ty=%s", ty_to_str(tcx, rptr_ty)); let r = ty::ty_region(tcx, span, rptr_ty); @@ -1216,29 +1214,25 @@ pub mod guarantor { } ast::pat_region(p) => { let rptr_ty = rcx.resolve_node_type(pat.id); - if !ty::type_is_error(rptr_ty) { - let r = ty::ty_region(rcx.fcx.tcx(), pat.span, rptr_ty); - link_ref_bindings_in_pat(rcx, p, Some(r)); - } + let r = ty::ty_region(rcx.fcx.tcx(), pat.span, rptr_ty); + link_ref_bindings_in_pat(rcx, p, Some(r)); } ast::pat_lit(*) => {} ast::pat_range(*) => {} ast::pat_vec(ref before, ref slice, ref after) => { let vec_ty = rcx.resolve_node_type(pat.id); - if !ty::type_is_error(vec_ty) { - let vstore = ty::ty_vstore(vec_ty); - let guarantor1 = match vstore { - ty::vstore_fixed(_) | ty::vstore_uniq => guarantor, - ty::vstore_slice(r) => Some(r), - ty::vstore_box => None - }; - - link_ref_bindings_in_pats(rcx, before, guarantor1); - for slice.each |&p| { - link_ref_bindings_in_pat(rcx, p, guarantor); - } - link_ref_bindings_in_pats(rcx, after, guarantor1); + let vstore = ty::ty_vstore(vec_ty); + let guarantor1 = match vstore { + ty::vstore_fixed(_) | ty::vstore_uniq => guarantor, + ty::vstore_slice(r) => Some(r), + ty::vstore_box => None + }; + + link_ref_bindings_in_pats(rcx, before, guarantor1); + for slice.each |&p| { + link_ref_bindings_in_pat(rcx, p, guarantor); } + link_ref_bindings_in_pats(rcx, after, guarantor1); } } } diff --git a/src/librustc/middle/typeck/mod.rs b/src/librustc/middle/typeck/mod.rs index 0012eb700302a..1a152f3c29119 100644 --- a/src/librustc/middle/typeck/mod.rs +++ b/src/librustc/middle/typeck/mod.rs @@ -414,7 +414,11 @@ pub fn check_crate(tcx: ty::ctxt, time(time_passes, ~"type collecting", || collect::collect_item_types(ccx, crate)); - time(time_passes, ~"method resolution", || + // this ensures that later parts of type checking can assume that items + // have valid types and not error + tcx.sess.abort_if_errors(); + + time(time_passes, ~"coherence checking", || coherence::check_coherence(ccx, crate)); time(time_passes, ~"type checking", || diff --git a/src/libsyntax/diagnostic.rs b/src/libsyntax/diagnostic.rs index 0f2374a892b4a..b313a2fc6fcc9 100644 --- a/src/libsyntax/diagnostic.rs +++ b/src/libsyntax/diagnostic.rs @@ -24,6 +24,7 @@ pub trait handler { fn fatal(@mut self, msg: &str) -> !; fn err(@mut self, msg: &str); fn bump_err_count(@mut self); + fn err_count(@mut self) -> uint; fn has_errors(@mut self) -> bool; fn abort_if_errors(@mut self); fn warn(@mut self, msg: &str); @@ -98,7 +99,12 @@ impl handler for HandlerT { fn bump_err_count(@mut self) { self.err_count += 1u; } - fn has_errors(@mut self) -> bool { self.err_count > 0u } + fn err_count(@mut self) -> uint { + self.err_count + } + fn has_errors(@mut self) -> bool { + self.err_count > 0u + } fn abort_if_errors(@mut self) { let s; match self.err_count { diff --git a/src/test/compile-fail/dead-code-ret.rs b/src/test/compile-fail/dead-code-ret.rs index 97f6149b162fc..5fa796db88444 100644 --- a/src/test/compile-fail/dead-code-ret.rs +++ b/src/test/compile-fail/dead-code-ret.rs @@ -10,8 +10,12 @@ // except according to those terms. -// error-pattern: dead +fn f(caller: &str) { + debug!(caller); + let x: uint = 0u32; // induce type error //~ ERROR mismatched types +} -fn f(caller: str) { debug!(caller); } - -fn main() { return f("main"); debug!("Paul is dead"); } +fn main() { + return f("main"); + debug!("Paul is dead"); //~ WARNING unreachable +} diff --git a/src/test/compile-fail/for-loop-decl.rs b/src/test/compile-fail/for-loop-decl.rs deleted file mode 100644 index de28d72677728..0000000000000 --- a/src/test/compile-fail/for-loop-decl.rs +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2012 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 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -// error-pattern: mismatched types -extern mod std; -use std::bitv; -use core::hashmap::HashMap; - -struct FnInfo { - vars: HashMap -} - -struct VarInfo { - a: uint, - b: uint, -} - -fn bitv_to_str(enclosing: FnInfo, v: ~bitv::Bitv) -> str { - let s = ""; - - // error is that the value type in the hash map is var_info, not a box - for enclosing.vars.each_value |val| { - if *v.get(val) { s += "foo"; } - } - return s; -} - -fn main() { debug!("OK"); } diff --git a/src/test/compile-fail/regions-bounds.rs b/src/test/compile-fail/regions-bounds.rs index cccd135e9f836..ab2620d46fdc5 100644 --- a/src/test/compile-fail/regions-bounds.rs +++ b/src/test/compile-fail/regions-bounds.rs @@ -23,10 +23,8 @@ fn a_fn3<'a,'b>(e: a_class<'a>) -> a_class<'b> { return e; //~ ERROR mismatched types: expected `a_class/&'b ` but found `a_class/&'a ` } -fn a_fn4<'a,'b>(e: int<'a>) -> int<'b> { - //~^ ERROR region parameters are not allowed on this type - //~^^ ERROR region parameters are not allowed on this type - return e; +fn a_fn4<'a,'b>() { + let _: int<'a> = 1; //~ ERROR region parameters are not allowed on this type } fn main() { } diff --git a/src/test/compile-fail/regions-ret-borrowed-1.rs b/src/test/compile-fail/regions-ret-borrowed-1.rs index f600f6f6edd92..a572d90313b6a 100644 --- a/src/test/compile-fail/regions-ret-borrowed-1.rs +++ b/src/test/compile-fail/regions-ret-borrowed-1.rs @@ -18,8 +18,6 @@ fn with<'a, R>(f: &fn(x: &'a int) -> R) -> R { fn return_it<'a>() -> &'a int { with(|o| o) //~ ERROR mismatched types - //~^ ERROR reference is not valid outside of its lifetime - //~^^ ERROR reference is not valid outside of its lifetime } fn main() { diff --git a/src/test/compile-fail/regions-ret-borrowed.rs b/src/test/compile-fail/regions-ret-borrowed.rs index a3540f8f931f9..ec9a908ba9876 100644 --- a/src/test/compile-fail/regions-ret-borrowed.rs +++ b/src/test/compile-fail/regions-ret-borrowed.rs @@ -21,8 +21,6 @@ fn with(f: &fn(x: &int) -> R) -> R { fn return_it() -> &int { with(|o| o) //~ ERROR mismatched types - //~^ ERROR reference is not valid outside of its lifetime - //~^^ ERROR reference is not valid outside of its lifetime } fn main() { diff --git a/src/test/compile-fail/type-shadow.rs b/src/test/compile-fail/type-shadow.rs index a9b4a85e6385c..c4a412f64c8d4 100644 --- a/src/test/compile-fail/type-shadow.rs +++ b/src/test/compile-fail/type-shadow.rs @@ -9,14 +9,11 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -// error-pattern: mismatched types - fn main() { type X = int; type Y = X; if true { - type X = str; - let y: Y = "hello"; + type X = &'static str; + let y: Y = "hello"; //~ ERROR mismatched types } } From 84f7ecce5c8b727309d0d48e84a965a5a3437fd1 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Mon, 6 May 2013 09:56:17 -0400 Subject: [PATCH 219/410] Adust arena test: can no longer allocate recursively --- src/libstd/arena.rs | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/libstd/arena.rs b/src/libstd/arena.rs index b9a09323f81d0..da882d53fcffa 100644 --- a/src/libstd/arena.rs +++ b/src/libstd/arena.rs @@ -315,9 +315,6 @@ fn test_arena_destructors_fail() { } // Now, fail while allocating do arena.alloc::<@int> { - // First, recursively allocate something else; that needs to - // get freed too. - do arena.alloc { @20 }; // Now fail. fail!(); }; From 502817a9c19752cafcc270d9d3e5a5104ce2eac9 Mon Sep 17 00:00:00 2001 From: Seo Sanghyeon Date: Mon, 6 May 2013 23:35:27 +0900 Subject: [PATCH 220/410] Fix cross-crate packed structs --- src/librustc/metadata/encoder.rs | 1 + src/test/auxiliary/packed.rs | 5 +++++ src/test/run-pass/packed-struct-size-xc.rs | 8 ++++++++ 3 files changed, 14 insertions(+) create mode 100644 src/test/auxiliary/packed.rs create mode 100644 src/test/run-pass/packed-struct-size-xc.rs diff --git a/src/librustc/metadata/encoder.rs b/src/librustc/metadata/encoder.rs index 6a9c564f36828..7db362c692030 100644 --- a/src/librustc/metadata/encoder.rs +++ b/src/librustc/metadata/encoder.rs @@ -819,6 +819,7 @@ fn encode_info_for_item(ecx: @EncodeContext, } encode_name(ecx, ebml_w, item.ident); + encode_attributes(ebml_w, item.attrs); encode_path(ecx, ebml_w, path, ast_map::path_name(item.ident)); encode_region_param(ecx, ebml_w, item); diff --git a/src/test/auxiliary/packed.rs b/src/test/auxiliary/packed.rs new file mode 100644 index 0000000000000..478d51b540cdf --- /dev/null +++ b/src/test/auxiliary/packed.rs @@ -0,0 +1,5 @@ +#[packed] +struct S { + a: u8, + b: u32 +} diff --git a/src/test/run-pass/packed-struct-size-xc.rs b/src/test/run-pass/packed-struct-size-xc.rs new file mode 100644 index 0000000000000..ddfc2b17aa706 --- /dev/null +++ b/src/test/run-pass/packed-struct-size-xc.rs @@ -0,0 +1,8 @@ +// xfail-fast +// aux-build:packed.rs + +extern mod packed; + +fn main() { + assert_eq!(sys::size_of::(), 5); +} From c50a9d5b664478e533ba1d1d353213d70c8ad589 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Mon, 6 May 2013 11:16:17 -0400 Subject: [PATCH 221/410] Use rust_try_get_task for compat with new rt, and strenghten assumptions about borrow list --- src/libcore/unstable/lang.rs | 62 +++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 30 deletions(-) diff --git a/src/libcore/unstable/lang.rs b/src/libcore/unstable/lang.rs index deff06d46f6c9..934874968d716 100644 --- a/src/libcore/unstable/lang.rs +++ b/src/libcore/unstable/lang.rs @@ -22,7 +22,6 @@ use rt::{context, OldTaskContext}; use rt::local_services::borrow_local_services; use option::{Option, Some, None}; use io; -use task::rt::rust_get_task; #[allow(non_camel_case_types)] pub type rust_task = c_void; @@ -56,6 +55,9 @@ pub mod rustrt { #[rust_stack] fn rust_set_task_borrow_list(task: *rust_task, map: *c_void); + #[rust_stack] + fn rust_try_get_task() -> *rust_task; + fn rust_dbg_breakpoint(); } } @@ -84,26 +86,32 @@ struct BorrowRecord { fn try_take_task_borrow_list() -> Option<~[BorrowRecord]> { unsafe { - let cur_task = rust_get_task(); - let ptr = rustrt::rust_take_task_borrow_list(cur_task); - if ptr.is_null() { - None + let cur_task: *rust_task = rustrt::rust_try_get_task(); + if cur_task.is_not_null() { + let ptr = rustrt::rust_take_task_borrow_list(cur_task); + if ptr.is_null() { + None + } else { + let v: ~[BorrowRecord] = transmute(ptr); + Some(v) + } } else { - let v: ~[BorrowRecord] = transmute(ptr); - Some(v) + None } } } fn swap_task_borrow_list(f: &fn(~[BorrowRecord]) -> ~[BorrowRecord]) { unsafe { - let cur_task = rust_get_task(); - let mut borrow_list: ~[BorrowRecord] = { - let ptr = rustrt::rust_take_task_borrow_list(cur_task); - if ptr.is_null() { ~[] } else { transmute(ptr) } - }; - borrow_list = f(borrow_list); - rustrt::rust_set_task_borrow_list(cur_task, transmute(borrow_list)); + let cur_task: *rust_task = rustrt::rust_try_get_task(); + if cur_task.is_not_null() { + let mut borrow_list: ~[BorrowRecord] = { + let ptr = rustrt::rust_take_task_borrow_list(cur_task); + if ptr.is_null() { ~[] } else { transmute(ptr) } + }; + borrow_list = f(borrow_list); + rustrt::rust_set_task_borrow_list(cur_task, transmute(borrow_list)); + } } } @@ -128,9 +136,7 @@ unsafe fn fail_borrowed(box: *mut BoxRepr, file: *c_char, line: size_t) { for borrow_list.each_reverse |entry| { if entry.box == box { str::push_str(&mut msg, sep); - let filename = unsafe { - str::raw::from_c_str(entry.file) - }; + let filename = str::raw::from_c_str(entry.file); str::push_str(&mut msg, filename); str::push_str(&mut msg, fmt!(":%u", entry.line as uint)); sep = " and at "; @@ -351,25 +357,21 @@ pub unsafe fn record_borrow(a: *u8, old_ref_count: uint, pub unsafe fn unrecord_borrow(a: *u8, old_ref_count: uint, file: *c_char, line: size_t) { if (old_ref_count & ALL_BITS) == 0 { - // was not borrowed before + // was not borrowed before, so we should find the record at + // the end of the list let a: *mut BoxRepr = transmute(a); debug_borrow("unrecord_borrow:", a, old_ref_count, 0, file, line); do swap_task_borrow_list |borrow_list| { let mut borrow_list = borrow_list; - let br = BorrowRecord {box: a, file: file, line: line}; - match borrow_list.rposition_elem(&br) { - Some(idx) => { - borrow_list.remove(idx); - borrow_list - } - None => { - let err = fmt!("no borrow found, br=%?, borrow_list=%?", - br, borrow_list); - do str::as_buf(err) |msg_p, _| { - fail_(msg_p as *c_char, file, line) - } + assert!(!borrow_list.is_empty()); + let br = borrow_list.pop(); + if br.box != a || br.file != file || br.line != line { + let err = fmt!("wrong borrow found, br=%?", br); + do str::as_buf(err) |msg_p, _| { + fail_(msg_p as *c_char, file, line) } } + borrow_list } } } From b20eb970e18377191465cb37f2074f467dfd61b1 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Tue, 7 May 2013 01:23:51 +1000 Subject: [PATCH 222/410] libsyntax: extend generic deriving code to handle almost all possible traits. This adds support for static methods, and arguments of most types, traits with type parameters, methods with type parameters (and lifetimes for both), as well as making the code more robust to support deriving on types with lifetimes (i.e. 'self). --- src/libsyntax/ext/build.rs | 84 ++- src/libsyntax/ext/deriving/clone.rs | 13 +- src/libsyntax/ext/deriving/cmp/eq.rs | 19 +- src/libsyntax/ext/deriving/cmp/ord.rs | 42 +- src/libsyntax/ext/deriving/cmp/totaleq.rs | 13 +- src/libsyntax/ext/deriving/cmp/totalord.rs | 12 +- src/libsyntax/ext/deriving/decodable.rs | 4 +- src/libsyntax/ext/deriving/encodable.rs | 12 +- src/libsyntax/ext/deriving/generic.rs | 785 +++++++++++---------- src/libsyntax/ext/deriving/mod.rs | 264 +++---- src/libsyntax/ext/deriving/ty.rs | 242 +++++++ 11 files changed, 936 insertions(+), 554 deletions(-) create mode 100644 src/libsyntax/ext/deriving/ty.rs diff --git a/src/libsyntax/ext/build.rs b/src/libsyntax/ext/build.rs index 4c876669f471d..c1163fda844f6 100644 --- a/src/libsyntax/ext/build.rs +++ b/src/libsyntax/ext/build.rs @@ -54,43 +54,52 @@ pub fn mk_binary(cx: @ext_ctxt, sp: span, op: ast::binop, cx.next_id(); // see ast_util::op_expr_callee_id mk_expr(cx, sp, ast::expr_binary(op, lhs, rhs)) } + +pub fn mk_deref(cx: @ext_ctxt, sp: span, e: @ast::expr) -> @ast::expr { + mk_unary(cx, sp, ast::deref, e) +} pub fn mk_unary(cx: @ext_ctxt, sp: span, op: ast::unop, e: @ast::expr) -> @ast::expr { cx.next_id(); // see ast_util::op_expr_callee_id mk_expr(cx, sp, ast::expr_unary(op, e)) } pub fn mk_raw_path(sp: span, idents: ~[ast::ident]) -> @ast::Path { - mk_raw_path_(sp, idents, ~[]) + mk_raw_path_(sp, idents, None, ~[]) } pub fn mk_raw_path_(sp: span, idents: ~[ast::ident], + rp: Option<@ast::Lifetime>, types: ~[@ast::Ty]) -> @ast::Path { @ast::Path { span: sp, global: false, idents: idents, - rp: None, + rp: rp, types: types } } pub fn mk_raw_path_global(sp: span, idents: ~[ast::ident]) -> @ast::Path { - mk_raw_path_global_(sp, idents, ~[]) + mk_raw_path_global_(sp, idents, None, ~[]) } pub fn mk_raw_path_global_(sp: span, idents: ~[ast::ident], + rp: Option<@ast::Lifetime>, types: ~[@ast::Ty]) -> @ast::Path { @ast::Path { span: sp, global: true, idents: idents, - rp: None, + rp: rp, types: types } } +pub fn mk_path_raw(cx: @ext_ctxt, sp: span, path: @ast::Path)-> @ast::expr { + mk_expr(cx, sp, ast::expr_path(path)) +} pub fn mk_path(cx: @ext_ctxt, sp: span, idents: ~[ast::ident]) -> @ast::expr { - mk_expr(cx, sp, ast::expr_path(mk_raw_path(sp, idents))) + mk_path_raw(cx, sp, mk_raw_path(sp, idents)) } pub fn mk_path_global(cx: @ext_ctxt, sp: span, idents: ~[ast::ident]) -> @ast::expr { - mk_expr(cx, sp, ast::expr_path(mk_raw_path_global(sp, idents))) + mk_path_raw(cx, sp, mk_raw_path_global(sp, idents)) } pub fn mk_access_(cx: @ext_ctxt, sp: span, p: @ast::expr, m: ast::ident) -> @ast::expr { @@ -354,44 +363,69 @@ pub fn mk_stmt(cx: @ext_ctxt, span: span, expr: @ast::expr) -> @ast::stmt { let stmt_ = ast::stmt_semi(expr, cx.next_id()); @codemap::spanned { node: stmt_, span: span } } + +pub fn mk_ty_mt(ty: @ast::Ty, mutbl: ast::mutability) -> ast::mt { + ast::mt { + ty: ty, + mutbl: mutbl + } +} + +pub fn mk_ty(cx: @ext_ctxt, + span: span, + ty: ast::ty_) -> @ast::Ty { + @ast::Ty { + id: cx.next_id(), + span: span, + node: ty + } +} + pub fn mk_ty_path(cx: @ext_ctxt, span: span, idents: ~[ ast::ident ]) -> @ast::Ty { let ty = build::mk_raw_path(span, idents); - let ty = ast::ty_path(ty, cx.next_id()); - let ty = @ast::Ty { id: cx.next_id(), node: ty, span: span }; - ty + mk_ty_path_path(cx, span, ty) } + pub fn mk_ty_path_global(cx: @ext_ctxt, span: span, idents: ~[ ast::ident ]) -> @ast::Ty { let ty = build::mk_raw_path_global(span, idents); - let ty = ast::ty_path(ty, cx.next_id()); - let ty = @ast::Ty { id: cx.next_id(), node: ty, span: span }; - ty + mk_ty_path_path(cx, span, ty) } + +pub fn mk_ty_path_path(cx: @ext_ctxt, + span: span, + path: @ast::Path) + -> @ast::Ty { + let ty = ast::ty_path(path, cx.next_id()); + mk_ty(cx, span, ty) +} + pub fn mk_ty_rptr(cx: @ext_ctxt, span: span, ty: @ast::Ty, + lifetime: Option<@ast::Lifetime>, mutbl: ast::mutability) -> @ast::Ty { - @ast::Ty { - id: cx.next_id(), - span: span, - node: ast::ty_rptr( - None, - ast::mt { ty: ty, mutbl: mutbl } - ), - } + mk_ty(cx, span, + ast::ty_rptr(lifetime, mk_ty_mt(ty, mutbl))) +} +pub fn mk_ty_uniq(cx: @ext_ctxt, span: span, ty: @ast::Ty) -> @ast::Ty { + mk_ty(cx, span, ast::ty_uniq(mk_ty_mt(ty, ast::m_imm))) } +pub fn mk_ty_box(cx: @ext_ctxt, span: span, + ty: @ast::Ty, mutbl: ast::mutability) -> @ast::Ty { + mk_ty(cx, span, ast::ty_box(mk_ty_mt(ty, mutbl))) +} + + + pub fn mk_ty_infer(cx: @ext_ctxt, span: span) -> @ast::Ty { - @ast::Ty { - id: cx.next_id(), - node: ast::ty_infer, - span: span, - } + mk_ty(cx, span, ast::ty_infer) } pub fn mk_trait_ref_global(cx: @ext_ctxt, span: span, diff --git a/src/libsyntax/ext/deriving/clone.rs b/src/libsyntax/ext/deriving/clone.rs index d996bca60a367..1c33fe3507076 100644 --- a/src/libsyntax/ext/deriving/clone.rs +++ b/src/libsyntax/ext/deriving/clone.rs @@ -13,7 +13,6 @@ use codemap::span; use ext::base::ext_ctxt; use ext::build; use ext::deriving::generic::*; -use core::option::{None,Some}; pub fn expand_deriving_clone(cx: @ext_ctxt, @@ -22,13 +21,16 @@ pub fn expand_deriving_clone(cx: @ext_ctxt, in_items: ~[@item]) -> ~[@item] { let trait_def = TraitDef { - path: ~[~"core", ~"clone", ~"Clone"], + path: Path::new(~[~"core", ~"clone", ~"Clone"]), additional_bounds: ~[], + generics: LifetimeBounds::empty(), methods: ~[ MethodDef { name: ~"clone", - nargs: 0, - output_type: None, // return Self + generics: LifetimeBounds::empty(), + self_ty: borrowed_explicit_self(), + args: ~[], + ret_ty: Self, const_nonmatching: false, combine_substructure: cs_clone } @@ -66,7 +68,8 @@ fn cs_clone(cx: @ext_ctxt, span: span, ctor_ident = ~[ variant.node.name ]; all_fields = af; }, - EnumNonMatching(*) => cx.bug("Non-matching enum variants in `deriving(Clone)`") + EnumNonMatching(*) => cx.span_bug(span, "Non-matching enum variants in `deriving(Clone)`"), + StaticEnum(*) | StaticStruct(*) => cx.span_bug(span, "Static method in `deriving(Clone)`") } match all_fields { diff --git a/src/libsyntax/ext/deriving/cmp/eq.rs b/src/libsyntax/ext/deriving/cmp/eq.rs index c0060cc67dc33..e431e1f78bff9 100644 --- a/src/libsyntax/ext/deriving/cmp/eq.rs +++ b/src/libsyntax/ext/deriving/cmp/eq.rs @@ -8,15 +8,12 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - use ast::{meta_item, item, expr}; use codemap::span; use ext::base::ext_ctxt; use ext::build; use ext::deriving::generic::*; -use core::option::Some; - pub fn expand_deriving_eq(cx: @ext_ctxt, span: span, mitem: @meta_item, @@ -24,28 +21,32 @@ pub fn expand_deriving_eq(cx: @ext_ctxt, // structures are equal if all fields are equal, and non equal, if // any fields are not equal or if the enum variants are different fn cs_eq(cx: @ext_ctxt, span: span, substr: &Substructure) -> @expr { - cs_and(|cx, span, _| build::mk_bool(cx, span, false), + cs_and(|cx, span, _, _| build::mk_bool(cx, span, false), cx, span, substr) } fn cs_ne(cx: @ext_ctxt, span: span, substr: &Substructure) -> @expr { - cs_or(|cx, span, _| build::mk_bool(cx, span, true), + cs_or(|cx, span, _, _| build::mk_bool(cx, span, true), cx, span, substr) } + macro_rules! md ( ($name:expr, $f:ident) => { MethodDef { name: $name, - output_type: Some(~[~"bool"]), - nargs: 1, + generics: LifetimeBounds::empty(), + self_ty: borrowed_explicit_self(), + args: ~[borrowed_self()], + ret_ty: Literal(Path::new(~[~"bool"])), const_nonmatching: true, combine_substructure: $f }, } - ) + ); let trait_def = TraitDef { - path: ~[~"core", ~"cmp", ~"Eq"], + path: Path::new(~[~"core", ~"cmp", ~"Eq"]), additional_bounds: ~[], + generics: LifetimeBounds::empty(), methods: ~[ md!(~"eq", cs_eq), md!(~"ne", cs_ne) diff --git a/src/libsyntax/ext/deriving/cmp/ord.rs b/src/libsyntax/ext/deriving/cmp/ord.rs index 398e27eb3e385..5998fc7145df3 100644 --- a/src/libsyntax/ext/deriving/cmp/ord.rs +++ b/src/libsyntax/ext/deriving/cmp/ord.rs @@ -14,29 +14,33 @@ use codemap::span; use ext::base::ext_ctxt; use ext::build; use ext::deriving::generic::*; -use core::option::Some; - -macro_rules! md { - ($name:expr, $less:expr, $equal:expr) => { - MethodDef { - name: $name, - output_type: Some(~[~"bool"]), - nargs: 1, - const_nonmatching: false, - combine_substructure: |cx, span, substr| - cs_ord($less, $equal, cx, span, substr) - } - } -} pub fn expand_deriving_ord(cx: @ext_ctxt, span: span, mitem: @meta_item, in_items: ~[@item]) -> ~[@item] { + macro_rules! md ( + ($name:expr, $less:expr, $equal:expr) => { + MethodDef { + name: $name, + generics: LifetimeBounds::empty(), + self_ty: borrowed_explicit_self(), + args: ~[borrowed_self()], + ret_ty: Literal(Path::new(~[~"bool"])), + const_nonmatching: false, + combine_substructure: |cx, span, substr| + cs_ord($less, $equal, cx, span, substr) + } + } + ); + + + let trait_def = TraitDef { - path: ~[~"core", ~"cmp", ~"Ord"], + path: Path::new(~[~"core", ~"cmp", ~"Ord"]), // XXX: Ord doesn't imply Eq yet - additional_bounds: ~[~[~"core", ~"cmp", ~"Eq"]], + additional_bounds: ~[Literal(Path::new(~[~"core", ~"cmp", ~"Eq"]))], + generics: LifetimeBounds::empty(), methods: ~[ md!(~"lt", true, false), md!(~"le", true, true), @@ -97,19 +101,19 @@ fn cs_ord(less: bool, equal: bool, } let cmp = build::mk_method_call(cx, span, - self_f, cx.ident_of(~"eq"), other_fs); + self_f, cx.ident_of(~"eq"), other_fs.to_owned()); let subexpr = build::mk_simple_block(cx, span, subexpr); let elseif = expr_if(cmp, subexpr, Some(false_blk_expr)); let elseif = build::mk_expr(cx, span, elseif); let cmp = build::mk_method_call(cx, span, - self_f, binop, other_fs); + self_f, binop, other_fs.to_owned()); let if_ = expr_if(cmp, true_blk, Some(elseif)); build::mk_expr(cx, span, if_) }, base, - |cx, span, args| { + |cx, span, args, _| { // nonmatching enums, order by the order the variants are // written match args { diff --git a/src/libsyntax/ext/deriving/cmp/totaleq.rs b/src/libsyntax/ext/deriving/cmp/totaleq.rs index fc8ec103a6021..068a7bc06b1e5 100644 --- a/src/libsyntax/ext/deriving/cmp/totaleq.rs +++ b/src/libsyntax/ext/deriving/cmp/totaleq.rs @@ -15,26 +15,27 @@ use ext::base::ext_ctxt; use ext::build; use ext::deriving::generic::*; -use core::option::Some; - pub fn expand_deriving_totaleq(cx: @ext_ctxt, span: span, mitem: @meta_item, in_items: ~[@item]) -> ~[@item] { fn cs_equals(cx: @ext_ctxt, span: span, substr: &Substructure) -> @expr { - cs_and(|cx, span, _| build::mk_bool(cx, span, false), + cs_and(|cx, span, _, _| build::mk_bool(cx, span, false), cx, span, substr) } let trait_def = TraitDef { - path: ~[~"core", ~"cmp", ~"TotalEq"], + path: Path::new(~[~"core", ~"cmp", ~"TotalEq"]), additional_bounds: ~[], + generics: LifetimeBounds::empty(), methods: ~[ MethodDef { name: ~"equals", - output_type: Some(~[~"bool"]), - nargs: 1, + generics: LifetimeBounds::empty(), + self_ty: borrowed_explicit_self(), + args: ~[borrowed_self()], + ret_ty: Literal(Path::new(~[~"bool"])), const_nonmatching: true, combine_substructure: cs_equals } diff --git a/src/libsyntax/ext/deriving/cmp/totalord.rs b/src/libsyntax/ext/deriving/cmp/totalord.rs index a098a7463d3e7..ac873c5bd123c 100644 --- a/src/libsyntax/ext/deriving/cmp/totalord.rs +++ b/src/libsyntax/ext/deriving/cmp/totalord.rs @@ -14,20 +14,22 @@ use ext::base::ext_ctxt; use ext::build; use ext::deriving::generic::*; use core::cmp::{Ordering, Equal, Less, Greater}; -use core::option::Some; pub fn expand_deriving_totalord(cx: @ext_ctxt, span: span, mitem: @meta_item, in_items: ~[@item]) -> ~[@item] { let trait_def = TraitDef { - path: ~[~"core", ~"cmp", ~"TotalOrd"], + path: Path::new(~[~"core", ~"cmp", ~"TotalOrd"]), additional_bounds: ~[], + generics: LifetimeBounds::empty(), methods: ~[ MethodDef { name: ~"cmp", - output_type: Some(~[~"core", ~"cmp", ~"Ordering"]), - nargs: 1, + generics: LifetimeBounds::empty(), + self_ty: borrowed_explicit_self(), + args: ~[borrowed_self()], + ret_ty: Literal(Path::new(~[~"core", ~"cmp", ~"Ordering"])), const_nonmatching: false, combine_substructure: cs_cmp } @@ -64,7 +66,7 @@ pub fn cs_cmp(cx: @ext_ctxt, span: span, build::mk_call_global(cx, span, lexical_ord, ~[old, new]) }, ordering_const(cx, span, Equal), - |cx, span, list| { + |cx, span, list, _| { match list { // an earlier nonmatching variant is Less than a // later one diff --git a/src/libsyntax/ext/deriving/decodable.rs b/src/libsyntax/ext/deriving/decodable.rs index fe270abc2e4f2..79cc4a3bda84f 100644 --- a/src/libsyntax/ext/deriving/decodable.rs +++ b/src/libsyntax/ext/deriving/decodable.rs @@ -66,6 +66,7 @@ fn create_derived_decodable_impl( cx.ident_of(~"serialize"), cx.ident_of(~"Decodable") ], + None, ~[ build::mk_simple_ty_path(cx, span, cx.ident_of(~"__D")) ] @@ -77,7 +78,7 @@ fn create_derived_decodable_impl( generics, methods, trait_path, - generic_ty_params, + Generics { ty_params: generic_ty_params, lifetimes: opt_vec::Empty }, opt_vec::Empty ) } @@ -96,6 +97,7 @@ fn create_decode_method( cx, span, build::mk_simple_ty_path(cx, span, cx.ident_of(~"__D")), + None, ast::m_mutbl ); let d_ident = cx.ident_of(~"__d"); diff --git a/src/libsyntax/ext/deriving/encodable.rs b/src/libsyntax/ext/deriving/encodable.rs index 8f8139790ade9..8b86173dc24e7 100644 --- a/src/libsyntax/ext/deriving/encodable.rs +++ b/src/libsyntax/ext/deriving/encodable.rs @@ -66,6 +66,7 @@ fn create_derived_encodable_impl( cx.ident_of(~"serialize"), cx.ident_of(~"Encodable") ], + None, ~[ build::mk_simple_ty_path(cx, span, cx.ident_of(~"__E")) ] @@ -77,7 +78,7 @@ fn create_derived_encodable_impl( generics, methods, trait_path, - generic_ty_params, + Generics { ty_params: generic_ty_params, lifetimes: opt_vec::Empty }, opt_vec::Empty ) } @@ -94,6 +95,7 @@ fn create_encode_method( cx, span, build::mk_simple_ty_path(cx, span, cx.ident_of(~"__E")), + None, ast::m_mutbl ); let e_arg = build::mk_arg(cx, span, cx.ident_of(~"__e"), e_arg_type); @@ -303,7 +305,7 @@ fn expand_deriving_encodable_enum_method( // Create the arms of the match in the method body. let arms = do enum_definition.variants.mapi |i, variant| { // Create the matching pattern. - let pat = create_enum_variant_pattern(cx, span, variant, ~"__self"); + let (pat, fields) = create_enum_variant_pattern(cx, span, variant, ~"__self", ast::m_imm); // Feed the discriminant to the encode function. let mut stmts = ~[]; @@ -311,11 +313,7 @@ fn expand_deriving_encodable_enum_method( // Feed each argument in this variant to the encode function // as well. let variant_arg_len = variant_arg_count(cx, span, variant); - for uint::range(0, variant_arg_len) |j| { - // Create the expression for this field. - let field_ident = cx.ident_of(~"__self_" + j.to_str()); - let field = build::mk_path(cx, span, ~[ field_ident ]); - + for fields.eachi |j, &(_, field)| { // Call the substructure method. let expr = call_substructure_encode_method(cx, span, field); diff --git a/src/libsyntax/ext/deriving/generic.rs b/src/libsyntax/ext/deriving/generic.rs index 05941f4cbd655..565d6dd59baac 100644 --- a/src/libsyntax/ext/deriving/generic.rs +++ b/src/libsyntax/ext/deriving/generic.rs @@ -16,23 +16,22 @@ access to the fields of the 4 different sorts of structs and enum variants, as well as creating the method and impl ast instances. Supported features (fairly exhaustive): -- Methods taking any number of parameters of type `&Self`, including - none other than `self`. (`MethodDef.nargs`) -- Methods returning `Self` or a non-parameterised type - (e.g. `bool` or `core::cmp::Ordering`). (`MethodDef.output_type`) -- Generating `impl`s for types with type parameters +- Methods taking any number of parameters of any type, and returning + any type, other than vectors, bottom and closures. +- Generating `impl`s for types with type parameters and lifetimes (e.g. `Option`), the parameters are automatically given the - current trait as a bound. + current trait as a bound. (This includes separate type parameters + and lifetimes for methods.) - Additional bounds on the type parameters, e.g. the `Ord` instance requires an explicit `Eq` bound at the moment. (`TraitDef.additional_bounds`) -(Key unsupported things: methods with arguments of non-`&Self` type, -traits with parameters, methods returning parameterised types, static -methods.) +Unsupported: FIXME #6257: calling methods on borrowed pointer fields, +e.g. deriving TotalEq/TotalOrd/Clone don't work on `struct A(&int)`, +because of how the auto-dereferencing happens. The most important thing for implementers is the `Substructure` and -`SubstructureFields` objects. The latter groups 3 possibilities of the +`SubstructureFields` objects. The latter groups 5 possibilities of the arguments: - `Struct`, when `Self` is a struct (including tuple structs, e.g @@ -42,42 +41,57 @@ arguments: - `EnumNonMatching` when `Self` is an enum and the arguments are not the same variant (e.g. `None`, `Some(1)` and `None`). If `const_nonmatching` is true, this will contain an empty list. +- `StaticEnum` and `StaticStruct` for static methods, where the type + being derived upon is either a enum or struct respectively. (Any + argument with type Self is just grouped among the non-self + arguments.) In the first two cases, the values from the corresponding fields in all the arguments are grouped together. In the `EnumNonMatching` case this isn't possible (different variants have different fields), so the -fields are grouped by which argument they come from. +fields are grouped by which argument they come from. There are no +fields with values in the static cases, so these are treated entirely +differently. -All of the cases have `Option` in several places associated +The non-static cases have `Option` in several places associated with field `expr`s. This represents the name of the field it is associated with. It is only not `None` when the associated field has an identifier in the source code. For example, the `x`s in the following snippet - struct A { x : int } +~~~ +struct A { x : int } - struct B(int); +struct B(int); - enum C { - C0(int), - C1 { x: int } - } +enum C { + C0(int), + C1 { x: int } +} The `int`s in `B` and `C0` don't have an identifier, so the `Option`s would be `None` for them. +In the static cases, the structure is summarised, either into the +number of fields or a list of field idents (for tuple structs and +record structs, respectively), or a list of these, for enums (one for +each variant). For empty struct and empty enum variants, it is +represented as a count of 0. + # Examples The following simplified `Eq` is used for in-code examples: - trait Eq { - fn eq(&self, other: &Self); - } - impl Eq for int { - fn eq(&self, other: &int) -> bool { - *self == *other - } +~~~ +trait Eq { + fn eq(&self, other: &Self); +} +impl Eq for int { + fn eq(&self, other: &int) -> bool { + *self == *other } +} +~~~ Some examples of the values of `SubstructureFields` follow, using the above `Eq`, `A`, `B` and `C`. @@ -86,65 +100,85 @@ above `Eq`, `A`, `B` and `C`. When generating the `expr` for the `A` impl, the `SubstructureFields` is - Struct(~[(Some(), - , - ~[), + , + ~[ - ~[])]) +~~~ +Struct(~[(None, + + ~[])]) +~~~ ## Enums When generating the `expr` for a call with `self == C0(a)` and `other == C0(b)`, the SubstructureFields is - EnumMatching(0, , - ~[None, - , - ~[]]) +~~~ +EnumMatching(0, , + ~[None, + , + ~[]]) +~~~ For `C1 {x}` and `C1 {x}`, - EnumMatching(1, , - ~[Some(), - , - ~[]]) +~~~ +EnumMatching(1, , + ~[Some(), + , + ~[]]) +~~~ For `C0(a)` and `C1 {x}` , - EnumNonMatching(~[(0, , - ~[(None, )]), - (1, , - ~[(Some(), - )])]) +~~~ +EnumNonMatching(~[(0, , + ~[(None, )]), + (1, , + ~[(Some(), + )])]) +~~~ + +(and vice versa, but with the order of the outermost list flipped.) -(and vice verse, but with the order of the outermost list flipped.) +## Static + +A static method on the above would result in, + +~~~~ +StaticStruct(, Right(~[])) + +StaticStruct(, Left(1)) + +StaticEnum(, ~[(, Left(1)), + (, Right(~[]))]) +~~~ */ use ast; +use ast::{enum_def, expr, ident, Generics, struct_def}; -use ast::{ - and, binop, deref, enum_def, expr, expr_match, ident, impure_fn, - item, Generics, m_imm, meta_item, method, named_field, or, - pat_wild, public, struct_def, sty_region, ty_rptr, ty_path, - variant}; - -use ast_util; use ext::base::ext_ctxt; use ext::build; use ext::deriving::*; use codemap::{span,respan}; use opt_vec; +pub use self::ty::*; +mod ty; + pub fn expand_deriving_generic(cx: @ext_ctxt, span: span, - _mitem: @meta_item, - in_items: ~[@item], - trait_def: &TraitDef) -> ~[@item] { + _mitem: @ast::meta_item, + in_items: ~[@ast::item], + trait_def: &TraitDef) -> ~[@ast::item] { let expand_enum: ExpandDerivingEnumDefFn = |cx, span, enum_def, type_ident, generics| { trait_def.expand_enum_def(cx, span, enum_def, type_ident, generics) @@ -160,25 +194,38 @@ pub fn expand_deriving_generic(cx: @ext_ctxt, } pub struct TraitDef<'self> { - /// Path of the trait - path: ~[~str], - /// Additional bounds required of any type parameters, other than - /// the current trait - additional_bounds: ~[~[~str]], + /// Path of the trait, including any type parameters + path: Path, + /// Additional bounds required of any type parameters of the type, + /// other than the current trait + additional_bounds: ~[Ty], + + /// Any extra lifetimes and/or bounds, e.g. `D: std::serialize::Decoder` + generics: LifetimeBounds, + methods: ~[MethodDef<'self>] } + pub struct MethodDef<'self> { /// name of the method name: ~str, - /// The path of return type of the method, e.g. `~[~"core", - /// ~"cmp", ~"Eq"]`. `None` for `Self`. - output_type: Option<~[~str]>, - /// Number of arguments other than `self` (all of type `&Self`) - nargs: uint, + /// List of generics, e.g. `R: core::rand::Rng` + generics: LifetimeBounds, + + /// Whether there is a self argument (outer Option) i.e. whether + /// this is a static function, and whether it is a pointer (inner + /// Option) + self_ty: Option>, + + /// Arguments other than the self argument + args: ~[Ty], + + /// Return type + ret_ty: Ty, /// if the value of the nonmatching enums is independent of the - /// actual enums, i.e. can use _ => .. match. + /// actual enum variants, i.e. can use _ => .. match. const_nonmatching: bool, combine_substructure: CombineSubstructureFunc<'self> @@ -186,18 +233,24 @@ pub struct MethodDef<'self> { /// All the data about the data structure/method being derived upon. pub struct Substructure<'self> { + /// ident of self type_ident: ident, + /// ident of the method method_ident: ident, - fields: &'self SubstructureFields + /// dereferenced access to any Self or Ptr(Self, _) arguments + self_args: &'self [@expr], + /// verbatim access to any other arguments + nonself_args: &'self [@expr], + fields: &'self SubstructureFields<'self> } /// A summary of the possible sets of fields. See above for details /// and examples -pub enum SubstructureFields { +pub enum SubstructureFields<'self> { /** - Vec of `(field ident, self, [others])` where the field ident is - the ident of the current field (`None` for all fields in tuple - structs) + Vec of `(field ident, self_or_other)` where the field + ident is the ident of the current field (`None` for all fields in tuple + structs). */ Struct(~[(Option, @expr, ~[@expr])]), @@ -206,17 +259,23 @@ pub enum SubstructureFields { fields: `(field ident, self, [others])`, where the field ident is only non-`None` in the case of a struct variant. */ - EnumMatching(uint, variant, ~[(Option, @expr, ~[@expr])]), + EnumMatching(uint, ast::variant, ~[(Option, @expr, ~[@expr])]), /** non-matching variants of the enum, [(variant index, ast::variant, [field ident, fields])] (i.e. all fields for self are in the first tuple, for other1 are in the second tuple, etc.) */ - EnumNonMatching(~[(uint, variant, ~[(Option, @expr)])]) + EnumNonMatching(~[(uint, ast::variant, ~[(Option, @expr)])]), + + /// A static method where Self is a struct + StaticStruct(&'self ast::struct_def, Either), + /// A static method where Self is an enum + StaticEnum(&'self ast::enum_def, ~[(ident, Either)]) } + /** Combine the values of all the fields together. The last argument is all the fields of all the structures, see above for details. @@ -225,31 +284,34 @@ pub type CombineSubstructureFunc<'self> = &'self fn(@ext_ctxt, span, &Substructure) -> @expr; /** -Deal with non-matching enum variants, the argument is a list +Deal with non-matching enum variants, the arguments are a list representing each variant: (variant index, ast::variant instance, -[variant fields]) +[variant fields]), and a list of the nonself args of the type */ pub type EnumNonMatchFunc<'self> = - &'self fn(@ext_ctxt, span, ~[(uint, variant, ~[(Option, @expr)])]) -> @expr; - + &'self fn(@ext_ctxt, span, + ~[(uint, ast::variant, + ~[(Option, @expr)])], + &[@expr]) -> @expr; impl<'self> TraitDef<'self> { fn create_derived_impl(&self, cx: @ext_ctxt, span: span, type_ident: ident, generics: &Generics, - methods: ~[@method]) -> @item { - let trait_path = build::mk_raw_path_global( - span, - do self.path.map |&s| { cx.ident_of(s) }); + methods: ~[@ast::method]) -> @ast::item { + let trait_path = self.path.to_path(cx, span, type_ident, generics); + + let trait_generics = self.generics.to_generics(cx, span, type_ident, generics); let additional_bounds = opt_vec::from( - do self.additional_bounds.map |v| { - do v.map |&s| { cx.ident_of(s) } + do self.additional_bounds.map |p| { + p.to_path(cx, span, type_ident, generics) }); + create_derived_impl(cx, span, type_ident, generics, methods, trait_path, - opt_vec::Empty, + trait_generics, additional_bounds) } @@ -257,22 +319,28 @@ impl<'self> TraitDef<'self> { span: span, struct_def: &struct_def, type_ident: ident, - generics: &Generics) - -> @item { - let is_tuple = is_struct_tuple(struct_def); - + generics: &Generics) -> @ast::item { let methods = do self.methods.map |method_def| { - let body = if is_tuple { - method_def.expand_struct_tuple_method_body(cx, span, - struct_def, - type_ident) + let (self_ty, self_args, nonself_args, tys) = + method_def.split_self_nonself_args(cx, span, type_ident, generics); + + let body = if method_def.is_static() { + method_def.expand_static_struct_method_body( + cx, span, + struct_def, + type_ident, + self_args, nonself_args) } else { method_def.expand_struct_method_body(cx, span, struct_def, - type_ident) + type_ident, + self_args, nonself_args) }; - method_def.create_method(cx, span, type_ident, generics, body) + method_def.create_method(cx, span, + type_ident, generics, + self_ty, tys, + body) }; self.create_derived_impl(cx, span, type_ident, generics, methods) @@ -282,13 +350,28 @@ impl<'self> TraitDef<'self> { cx: @ext_ctxt, span: span, enum_def: &enum_def, type_ident: ident, - generics: &Generics) -> @item { + generics: &Generics) -> @ast::item { let methods = do self.methods.map |method_def| { - let body = method_def.expand_enum_method_body(cx, span, - enum_def, - type_ident); + let (self_ty, self_args, nonself_args, tys) = + method_def.split_self_nonself_args(cx, span, type_ident, generics); + + let body = if method_def.is_static() { + method_def.expand_static_enum_method_body( + cx, span, + enum_def, + type_ident, + self_args, nonself_args) + } else { + method_def.expand_enum_method_body(cx, span, + enum_def, + type_ident, + self_args, nonself_args) + }; - method_def.create_method(cx, span, type_ident, generics, body) + method_def.create_method(cx, span, + type_ident, generics, + self_ty, tys, + body) }; self.create_derived_impl(cx, span, type_ident, generics, methods) @@ -300,266 +383,241 @@ impl<'self> MethodDef<'self> { cx: @ext_ctxt, span: span, type_ident: ident, + self_args: &[@expr], + nonself_args: &[@expr], fields: &SubstructureFields) -> @expr { let substructure = Substructure { type_ident: type_ident, method_ident: cx.ident_of(self.name), + self_args: self_args, + nonself_args: nonself_args, fields: fields }; (self.combine_substructure)(cx, span, &substructure) } - fn get_output_type_path(&self, cx: @ext_ctxt, span: span, - generics: &Generics, type_ident: ident) -> @ast::Path { - match self.output_type { - None => { // Self, add any type parameters - let out_ty_params = do vec::build |push| { - for generics.ty_params.each |ty_param| { - push(build::mk_ty_path(cx, span, ~[ ty_param.ident ])); - } - }; + fn get_ret_ty(&self, cx: @ext_ctxt, span: span, + generics: &Generics, type_ident: ident) -> @ast::Ty { + self.ret_ty.to_ty(cx, span, type_ident, generics) + } + + fn is_static(&self) -> bool { + self.self_ty.is_none() + } - build::mk_raw_path_(span, ~[ type_ident ], out_ty_params) + fn split_self_nonself_args(&self, cx: @ext_ctxt, span: span, + type_ident: ident, generics: &Generics) + -> (ast::self_ty, ~[@expr], ~[@expr], ~[(ident, @ast::Ty)]) { + + let mut self_args = ~[], nonself_args = ~[], arg_tys = ~[]; + let mut ast_self_ty = respan(span, ast::sty_static); + let mut nonstatic = false; + + match self.self_ty { + Some(self_ptr) => { + let (self_expr, self_ty) = ty::get_explicit_self(cx, span, self_ptr); + + ast_self_ty = self_ty; + self_args.push(self_expr); + nonstatic = true; } - Some(str_path) => { - let p = do str_path.map |&s| { cx.ident_of(s) }; - build::mk_raw_path_global(span, p) + _ => {} + } + + for self.args.eachi |i, ty| { + let ast_ty = ty.to_ty(cx, span, type_ident, generics); + let ident = cx.ident_of(fmt!("__arg_%u", i)); + arg_tys.push((ident, ast_ty)); + + let arg_expr = build::mk_path(cx, span, ~[ident]); + + match *ty { + // for static methods, just treat any Self + // arguments as a normal arg + Self if nonstatic => { + self_args.push(arg_expr); + } + Ptr(~Self, _) if nonstatic => { + self_args.push(build::mk_deref(cx, span, arg_expr)) + } + _ => { + nonself_args.push(arg_expr); + } } } + + (ast_self_ty, self_args, nonself_args, arg_tys) } fn create_method(&self, cx: @ext_ctxt, span: span, type_ident: ident, - generics: &Generics, body: @expr) -> @method { - // Create the `Self` type of the `other` parameters. - let arg_path_type = create_self_type_with_params(cx, - span, - type_ident, - generics); - let arg_type = ty_rptr( - None, - ast::mt { ty: arg_path_type, mutbl: m_imm } - ); - let arg_type = @ast::Ty { - id: cx.next_id(), - node: arg_type, - span: span, + generics: &Generics, + self_ty: ast::self_ty, + arg_types: ~[(ident, @ast::Ty)], + body: @expr) -> @ast::method { + // create the generics that aren't for Self + let fn_generics = self.generics.to_generics(cx, span, type_ident, generics); + + let args = do arg_types.map |&(id, ty)| { + build::mk_arg(cx, span, id, ty) }; - // create the arguments - let other_idents = create_other_idents(cx, self.nargs); - let args = do other_idents.map |&id| { - build::mk_arg(cx, span, id, arg_type) - }; - - let output_type = self.get_output_type_path(cx, span, generics, type_ident); - let output_type = ty_path(output_type, cx.next_id()); - let output_type = @ast::Ty { - id: cx.next_id(), - node: output_type, - span: span, - }; + let ret_type = self.get_ret_ty(cx, span, generics, type_ident); let method_ident = cx.ident_of(self.name); - let fn_decl = build::mk_fn_decl(args, output_type); + let fn_decl = build::mk_fn_decl(args, ret_type); let body_block = build::mk_simple_block(cx, span, body); + // Create the method. - let self_ty = respan(span, sty_region(None, m_imm)); @ast::method { ident: method_ident, attrs: ~[], - generics: ast_util::empty_generics(), + generics: fn_generics, self_ty: self_ty, - purity: impure_fn, + purity: ast::impure_fn, decl: fn_decl, body: body_block, id: cx.next_id(), span: span, self_id: cx.next_id(), - vis: public + vis: ast::public } } /** - ``` + ~~~ #[deriving(Eq)] - struct A(int, int); + struct A { x: int, y: int } // equivalent to: - impl Eq for A { - fn eq(&self, __other_1: &A) -> bool { + fn eq(&self, __arg_1: &A) -> bool { match *self { - (ref self_1, ref self_2) => { - match *__other_1 { - (ref __other_1_1, ref __other_1_2) => { - self_1.eq(__other_1_1) && self_2.eq(__other_1_2) + A {x: ref __self_0_0, y: ref __self_0_1} => { + match *__arg_1 { + A {x: ref __self_1_0, y: ref __self_1_1} => { + __self_0_0.eq(__self_1_0) && __self_0_1.eq(__self_1_1) } } } } } } - ``` + ~~~ */ - fn expand_struct_tuple_method_body(&self, - cx: @ext_ctxt, - span: span, - struct_def: &struct_def, - type_ident: ident) -> @expr { - let self_str = ~"self"; - let other_strs = create_other_strs(self.nargs); - let num_fields = struct_def.fields.len(); - - - let fields = do struct_def.fields.mapi |i, _| { - let other_fields = do other_strs.map |&other_str| { - let other_field_ident = cx.ident_of(fmt!("%s_%u", other_str, i)); - build::mk_path(cx, span, ~[ other_field_ident ]) - }; - - let self_field_ident = cx.ident_of(fmt!("%s_%u", self_str, i)); - let self_field = build::mk_path(cx, span, ~[ self_field_ident ]); + fn expand_struct_method_body(&self, + cx: @ext_ctxt, + span: span, + struct_def: &struct_def, + type_ident: ident, + self_args: &[@expr], + nonself_args: &[@expr]) + -> @expr { - (None, self_field, other_fields) + let mut raw_fields = ~[], // ~[[fields of self], [fields of next Self arg], [etc]] + patterns = ~[]; + for uint::range(0, self_args.len()) |i| { + let (pat, ident_expr) = create_struct_pattern(cx, span, + type_ident, struct_def, + fmt!("__self_%u", i), ast::m_imm); + patterns.push(pat); + raw_fields.push(ident_expr); }; - let mut match_body = self.call_substructure_method(cx, span, type_ident, &Struct(fields)); - - let type_path = build::mk_raw_path(span, ~[type_ident]); - - // create the matches from inside to out (i.e. other_{self.nargs} to other_1) - for other_strs.each_reverse |&other_str| { - match_body = create_deref_match(cx, span, type_path, - other_str, num_fields, - match_body) - } - - // create the match on self - return create_deref_match(cx, span, type_path, - ~"self", num_fields, match_body); - - /** - Creates a match expression against a tuple that needs to - be dereferenced, but nothing else + // transpose raw_fields + let fields = match raw_fields { + [self_arg, .. rest] => { + do self_arg.mapi |i, &(opt_id, field)| { + let other_fields = do rest.map |l| { + match &l[i] { + &(_, ex) => ex + } + }; + (opt_id, field, other_fields) + } + } + [] => { cx.span_bug(span, ~"No self arguments to non-static \ + method in generic `deriving`") } + }; - ``` - match *`to_match` { - (`to_match`_1, ..., `to_match`_`num_fields`) => `match_body` - } - ``` - */ - fn create_deref_match(cx: @ext_ctxt, - span: span, - type_path: @ast::Path, - to_match: ~str, - num_fields: uint, - match_body: @expr) -> @expr { - let match_subpats = create_subpatterns(cx, span, to_match, num_fields); + // body of the inner most destructuring match + let mut body = self.call_substructure_method( + cx, span, + type_ident, + self_args, + nonself_args, + &Struct(fields)); + + // make a series of nested matches, to destructure the + // structs. This is actually right-to-left, but it shoudn't + // matter. + for vec::each2(self_args, patterns) |&arg_expr, &pat| { let match_arm = ast::arm { - pats: ~[ build::mk_pat_enum(cx, span, type_path, match_subpats) ], + pats: ~[ pat ], guard: None, - body: build::mk_simple_block(cx, span, match_body), + body: build::mk_simple_block(cx, span, body) }; - let deref_expr = build::mk_unary(cx, span, deref, - build::mk_path(cx, span, - ~[ cx.ident_of(to_match)])); - let match_expr = build::mk_expr(cx, span, expr_match(deref_expr, ~[match_arm])); - - match_expr + body = build::mk_expr(cx, span, ast::expr_match(arg_expr, ~[match_arm])) } + body } - /** - ``` - #[deriving(Eq)] - struct A { x: int, y: int } - - // equivalent to: - - impl Eq for A { - fn eq(&self, __other_1: &A) -> bool { - self.x.eq(&__other_1.x) && - self.y.eq(&__other_1.y) - } - } - ``` - */ - fn expand_struct_method_body(&self, - cx: @ext_ctxt, - span: span, - struct_def: &struct_def, - type_ident: ident) + fn expand_static_struct_method_body(&self, + cx: @ext_ctxt, + span: span, + struct_def: &struct_def, + type_ident: ident, + self_args: &[@expr], + nonself_args: &[@expr]) -> @expr { - let self_ident = cx.ident_of(~"self"); - let other_idents = create_other_idents(cx, self.nargs); - - let fields = do struct_def.fields.map |struct_field| { - match struct_field.node.kind { - named_field(ident, _, _) => { - // Create the accessor for this field in the other args. - let other_fields = do other_idents.map |&id| { - build::mk_access(cx, span, ~[id], ident) - }; - let other_field_refs = do other_fields.map |&other_field| { - build::mk_addr_of(cx, span, other_field) - }; + let summary = summarise_struct(cx, span, struct_def); - // Create the accessor for this field in self. - let self_field = - build::mk_access( - cx, span, - ~[ self_ident ], - ident); - - (Some(ident), self_field, other_field_refs) - } - unnamed_field => { - cx.span_unimpl(span, ~"unnamed fields with `deriving_generic`"); - } - } - }; - - self.call_substructure_method(cx, span, type_ident, &Struct(fields)) + self.call_substructure_method(cx, span, + type_ident, + self_args, nonself_args, + &StaticStruct(struct_def, summary)) } /** - ``` + ~~~ #[deriving(Eq)] enum A { A1 A2(int) } - // is equivalent to + // is equivalent to (with const_nonmatching == false) impl Eq for A { - fn eq(&self, __other_1: &A) { + fn eq(&self, __arg_1: &A) { match *self { - A1 => match *__other_1 { - A1 => true, - A2(ref __other_1_1) => false + A1 => match *__arg_1 { + A1 => true + A2(ref __arg_1_1) => false }, - A2(self_1) => match *__other_1 { + A2(self_1) => match *__arg_1 { A1 => false, - A2(ref __other_1_1) => self_1.eq(__other_1_1) + A2(ref __arg_1_1) => self_1.eq(__arg_1_1) } } } } - ``` + ~~~ */ fn expand_enum_method_body(&self, cx: @ext_ctxt, span: span, enum_def: &enum_def, - type_ident: ident) + type_ident: ident, + self_args: &[@expr], + nonself_args: &[@expr]) -> @expr { self.build_enum_match(cx, span, enum_def, type_ident, + self_args, nonself_args, None, ~[], 0) } @@ -567,13 +625,13 @@ impl<'self> MethodDef<'self> { /** Creates the nested matches for an enum definition recursively, i.e. - ``` + ~~~ match self { Variant1 => match other { Variant1 => matching, Variant2 => nonmatching, ... }, Variant2 => match other { Variant1 => nonmatching, Variant2 => matching, ... }, ... } - ``` + ~~~ It acts in the most naive way, so every branch (and subbranch, subsubbranch, etc) exists, not just the ones where all the variants in @@ -589,15 +647,17 @@ impl<'self> MethodDef<'self> { cx: @ext_ctxt, span: span, enum_def: &enum_def, type_ident: ident, + self_args: &[@expr], + nonself_args: &[@expr], matching: Option, - matches_so_far: ~[(uint, variant, + matches_so_far: ~[(uint, ast::variant, ~[(Option, @expr)])], match_count: uint) -> @expr { - if match_count == self.nargs + 1 { + if match_count == self_args.len() { // we've matched against all arguments, so make the final // expression at the bottom of the match tree match matches_so_far { - [] => cx.bug(~"no self match on an enum in `deriving_generic`"), + [] => cx.span_bug(span, ~"no self match on an enum in generic `deriving`"), _ => { // we currently have a vec of vecs, where each // subvec is the fields of one of the arguments, @@ -637,16 +697,17 @@ impl<'self> MethodDef<'self> { substructure = EnumNonMatching(matches_so_far); } } - self.call_substructure_method(cx, span, type_ident, &substructure) + self.call_substructure_method(cx, span, type_ident, + self_args, nonself_args, + &substructure) } } } else { // there are still matches to create - let (current_match_ident, current_match_str) = if match_count == 0 { - (cx.ident_of(~"self"), ~"__self") + let current_match_str = if match_count == 0 { + ~"__self" } else { - let s = fmt!("__other_%u", matches_so_far.len() - 1); - (cx.ident_of(s), s) + fmt!("__arg_%u", match_count) }; let mut arms = ~[]; @@ -654,80 +715,50 @@ impl<'self> MethodDef<'self> { // this is used as a stack let mut matches_so_far = matches_so_far; - macro_rules! mk_arm( - ($pat:expr, $expr:expr) => { - { - let blk = build::mk_simple_block(cx, span, $expr); - let arm = ast::arm { - pats: ~[$ pat ], - guard: None, - body: blk - }; - arm - } - } - ) - // the code for nonmatching variants only matters when // we've seen at least one other variant already if self.const_nonmatching && match_count > 0 { // make a matching-variant match, and a _ match. let index = match matching { Some(i) => i, - None => cx.span_bug(span, ~"Non-matching variants when required to\ - be matching in `deriving_generic`") + None => cx.span_bug(span, ~"Non-matching variants when required to \ + be matching in generic `deriving`") }; // matching-variant match let variant = &enum_def.variants[index]; - let pattern = create_enum_variant_pattern(cx, span, - variant, - current_match_str); - - let idents = do vec::build |push| { - for each_variant_arg_ident(cx, span, variant) |i, field_id| { - let id = cx.ident_of(fmt!("%s_%u", current_match_str, i)); - push((field_id, build::mk_path(cx, span, ~[ id ]))); - } - }; + let (pattern, idents) = create_enum_variant_pattern(cx, span, + variant, + current_match_str, + ast::m_imm); matches_so_far.push((index, *variant, idents)); let arm_expr = self.build_enum_match(cx, span, enum_def, type_ident, + self_args, nonself_args, matching, matches_so_far, match_count + 1); matches_so_far.pop(); - let arm = mk_arm!(pattern, arm_expr); - arms.push(arm); + arms.push(build::mk_arm(cx, span, ~[ pattern ], arm_expr)); if enum_def.variants.len() > 1 { - // _ match, if necessary - let wild_pat = @ast::pat { - id: cx.next_id(), - node: pat_wild, - span: span - }; - let wild_expr = self.call_substructure_method(cx, span, type_ident, + self_args, nonself_args, &EnumNonMatching(~[])); - let wild_arm = mk_arm!(wild_pat, wild_expr); + let wild_arm = build::mk_arm(cx, span, + ~[ build::mk_pat_wild(cx, span) ], + wild_expr); arms.push(wild_arm); } } else { // create an arm matching on each variant for enum_def.variants.eachi |index, variant| { - let pattern = create_enum_variant_pattern(cx, span, - variant, - current_match_str); - - let idents = do vec::build |push| { - for each_variant_arg_ident(cx, span, variant) |i, field_id| { - let id = cx.ident_of(fmt!("%s_%u", current_match_str, i)); - push((field_id, build::mk_path(cx, span, ~[ id ]))); - } - }; + let (pattern, idents) = create_enum_variant_pattern(cx, span, + variant, + current_match_str, + ast::m_imm); matches_so_far.push((index, *variant, idents)); let new_matching = @@ -739,44 +770,75 @@ impl<'self> MethodDef<'self> { let arm_expr = self.build_enum_match(cx, span, enum_def, type_ident, + self_args, nonself_args, new_matching, matches_so_far, match_count + 1); matches_so_far.pop(); - let arm = mk_arm!(pattern, arm_expr); + let arm = build::mk_arm(cx, span, ~[ pattern ], arm_expr); arms.push(arm); } } - let deref_expr = build::mk_unary(cx, span, deref, - build::mk_path(cx, span, - ~[ current_match_ident ])); - let match_expr = build::mk_expr(cx, span, - expr_match(deref_expr, arms)); - match_expr + // match foo { arm, arm, arm, ... } + build::mk_expr(cx, span, + ast::expr_match(self_args[match_count], arms)) } } + + fn expand_static_enum_method_body(&self, + cx: @ext_ctxt, + span: span, + enum_def: &enum_def, + type_ident: ident, + self_args: &[@expr], + nonself_args: &[@expr]) + -> @expr { + let summary = do enum_def.variants.map |v| { + let ident = v.node.name; + let summary = match v.node.kind { + ast::tuple_variant_kind(ref args) => Left(args.len()), + ast::struct_variant_kind(struct_def) => { + summarise_struct(cx, span, struct_def) + } + }; + (ident, summary) + }; + self.call_substructure_method(cx, + span, type_ident, + self_args, nonself_args, + &StaticEnum(enum_def, summary)) + } } -/// Create variable names (as strings) to refer to the non-self -/// parameters -fn create_other_strs(n: uint) -> ~[~str] { - do vec::build |push| { - for uint::range(0, n) |i| { - push(fmt!("__other_%u", i)); +fn summarise_struct(cx: @ext_ctxt, span: span, + struct_def: &struct_def) -> Either { + let mut named_idents = ~[]; + let mut unnamed_count = 0; + for struct_def.fields.each |field| { + match field.node.kind { + ast::named_field(ident, _, _) => { + named_idents.push(ident) + } + ast::unnamed_field => { + unnamed_count += 1; + } } } -} -/// Like `create_other_strs`, but returns idents for the strings -fn create_other_idents(cx: @ext_ctxt, n: uint) -> ~[ident] { - do create_other_strs(n).map |&s| { - cx.ident_of(s) + + match (unnamed_count > 0, named_idents.is_empty()) { + (true, false) => cx.span_bug(span, + "A struct with named and unnamed \ + fields in generic `deriving`"), + // named fields + (_, false) => Right(named_idents), + // tuple structs (includes empty structs) + (_, _) => Left(unnamed_count) } } - /* helpful premade recipes */ /** @@ -786,7 +848,7 @@ left-to-right (`true`) or right-to-left (`false`). pub fn cs_fold(use_foldl: bool, f: &fn(@ext_ctxt, span, old: @expr, - self_f: @expr, other_fs: ~[@expr]) -> @expr, + self_f: @expr, other_fs: &[@expr]) -> @expr, base: @expr, enum_nonmatch_f: EnumNonMatchFunc, cx: @ext_ctxt, span: span, @@ -803,7 +865,11 @@ pub fn cs_fold(use_foldl: bool, } } }, - EnumNonMatching(all_enums) => enum_nonmatch_f(cx, span, all_enums) + EnumNonMatching(all_enums) => enum_nonmatch_f(cx, span, + all_enums, substructure.nonself_args), + StaticEnum(*) | StaticStruct(*) => { + cx.span_bug(span, "Static function in `deriving`") + } } } @@ -812,11 +878,12 @@ pub fn cs_fold(use_foldl: bool, Call the method that is being derived on all the fields, and then process the collected results. i.e. -``` -f(cx, span, ~[self_1.method(__other_1_1, __other_2_1), - self_2.method(__other_1_2, __other_2_2)]) -``` +~~~ +f(cx, span, ~[self_1.method(__arg_1_1, __arg_2_1), + self_2.method(__arg_1_2, __arg_2_2)]) +~~~ */ +#[inline(always)] pub fn cs_same_method(f: &fn(@ext_ctxt, span, ~[@expr]) -> @expr, enum_nonmatch_f: EnumNonMatchFunc, cx: @ext_ctxt, span: span, @@ -833,7 +900,11 @@ pub fn cs_same_method(f: &fn(@ext_ctxt, span, ~[@expr]) -> @expr, f(cx, span, called) }, - EnumNonMatching(all_enums) => enum_nonmatch_f(cx, span, all_enums) + EnumNonMatching(all_enums) => enum_nonmatch_f(cx, span, + all_enums, substructure.nonself_args), + StaticEnum(*) | StaticStruct(*) => { + cx.span_bug(span, "Static function in `deriving`") + } } } @@ -842,6 +913,7 @@ Fold together the results of calling the derived method on all the fields. `use_foldl` controls whether this is done left-to-right (`true`) or right-to-left (`false`). */ +#[inline(always)] pub fn cs_same_method_fold(use_foldl: bool, f: &fn(@ext_ctxt, span, @expr, @expr) -> @expr, base: @expr, @@ -869,7 +941,8 @@ pub fn cs_same_method_fold(use_foldl: bool, Use a given binop to combine the result of calling the derived method on all the fields. */ -pub fn cs_binop(binop: binop, base: @expr, +#[inline(always)] +pub fn cs_binop(binop: ast::binop, base: @expr, enum_nonmatch_f: EnumNonMatchFunc, cx: @ext_ctxt, span: span, substructure: &Substructure) -> @expr { @@ -887,18 +960,20 @@ pub fn cs_binop(binop: binop, base: @expr, } /// cs_binop with binop == or +#[inline(always)] pub fn cs_or(enum_nonmatch_f: EnumNonMatchFunc, cx: @ext_ctxt, span: span, substructure: &Substructure) -> @expr { - cs_binop(or, build::mk_bool(cx, span, false), + cs_binop(ast::or, build::mk_bool(cx, span, false), enum_nonmatch_f, cx, span, substructure) } /// cs_binop with binop == and +#[inline(always)] pub fn cs_and(enum_nonmatch_f: EnumNonMatchFunc, cx: @ext_ctxt, span: span, substructure: &Substructure) -> @expr { - cs_binop(and, build::mk_bool(cx, span, true), + cs_binop(ast::and, build::mk_bool(cx, span, true), enum_nonmatch_f, cx, span, substructure) } diff --git a/src/libsyntax/ext/deriving/mod.rs b/src/libsyntax/ext/deriving/mod.rs index 5aeeef2b17aee..9f3972e71ac8a 100644 --- a/src/libsyntax/ext/deriving/mod.rs +++ b/src/libsyntax/ext/deriving/mod.rs @@ -12,14 +12,7 @@ /// #[deriving(IterBytes)] extensions. use ast; -use ast::{Ty, bind_by_ref, deref, enum_def}; -use ast::{expr, expr_match, ident, item, item_}; -use ast::{item_enum, item_impl, item_struct, Generics}; -use ast::{m_imm, meta_item, method}; -use ast::{named_field, pat, pat_ident, public}; -use ast::{struct_def, struct_variant_kind}; -use ast::{tuple_variant_kind}; -use ast::{ty_path, unnamed_field, variant}; +use ast::{Ty, enum_def, expr, ident, item, Generics, meta_item, struct_def}; use ext::base::ext_ctxt; use ext::build; use codemap::{span, respan}; @@ -78,23 +71,21 @@ pub fn expand_meta_deriving(cx: @ext_ctxt, meta_name_value(tname, _) | meta_list(tname, _) | meta_word(tname) => { + macro_rules! expand(($func:path) => ($func(cx, titem.span, + titem, in_items))); match *tname { - ~"Clone" => clone::expand_deriving_clone(cx, - titem.span, titem, in_items), - ~"IterBytes" => iter_bytes::expand_deriving_iter_bytes(cx, - titem.span, titem, in_items), - ~"Encodable" => encodable::expand_deriving_encodable(cx, - titem.span, titem, in_items), - ~"Decodable" => decodable::expand_deriving_decodable(cx, - titem.span, titem, in_items), - ~"Eq" => eq::expand_deriving_eq(cx, titem.span, - titem, in_items), - ~"TotalEq" => totaleq::expand_deriving_totaleq(cx, titem.span, - titem, in_items), - ~"Ord" => ord::expand_deriving_ord(cx, titem.span, - titem, in_items), - ~"TotalOrd" => totalord::expand_deriving_totalord(cx, titem.span, - titem, in_items), + ~"Clone" => expand!(clone::expand_deriving_clone), + + ~"IterBytes" => expand!(iter_bytes::expand_deriving_iter_bytes), + + ~"Encodable" => expand!(encodable::expand_deriving_encodable), + ~"Decodable" => expand!(decodable::expand_deriving_decodable), + + ~"Eq" => expand!(eq::expand_deriving_eq), + ~"TotalEq" => expand!(totaleq::expand_deriving_totaleq), + ~"Ord" => expand!(ord::expand_deriving_ord), + ~"TotalOrd" => expand!(totalord::expand_deriving_totalord), + tname => { cx.span_err(titem.span, fmt!("unknown \ `deriving` trait: `%s`", tname)); @@ -118,14 +109,14 @@ pub fn expand_deriving(cx: @ext_ctxt, for in_items.each |item| { result.push(copy *item); match item.node { - item_struct(struct_def, ref generics) => { + ast::item_struct(struct_def, ref generics) => { result.push(expand_deriving_struct_def(cx, span, struct_def, item.ident, generics)); } - item_enum(ref enum_definition, ref generics) => { + ast::item_enum(ref enum_definition, ref generics) => { result.push(expand_deriving_enum_def(cx, span, enum_definition, @@ -138,7 +129,7 @@ pub fn expand_deriving(cx: @ext_ctxt, result } -fn create_impl_item(cx: @ext_ctxt, span: span, item: item_) -> @item { +fn create_impl_item(cx: @ext_ctxt, span: span, item: ast::item_) -> @item { let doc_attr = respan(span, ast::lit_str(@~"Automatically derived.")); let doc_attr = respan(span, ast::meta_name_value(@~"doc", doc_attr)); @@ -154,7 +145,7 @@ fn create_impl_item(cx: @ext_ctxt, span: span, item: item_) -> @item { attrs: ~[doc_attr], id: cx.next_id(), node: item, - vis: public, + vis: ast::public, span: span, } } @@ -173,22 +164,29 @@ pub fn create_self_type_with_params(cx: @ext_ctxt, self_ty_params.push(self_ty_param); } + let lifetime = if generics.lifetimes.is_empty() { + None + } else { + Some(@*generics.lifetimes.get(0)) + }; + + // Create the type of `self`. let self_type = build::mk_raw_path_(span, ~[ type_ident ], + lifetime, self_ty_params); - let self_type = ty_path(self_type, cx.next_id()); - @ast::Ty { id: cx.next_id(), node: self_type, span: span } + build::mk_ty_path_path(cx, span, self_type) } pub fn create_derived_impl(cx: @ext_ctxt, span: span, type_ident: ident, generics: &Generics, - methods: &[@method], + methods: &[@ast::method], trait_path: @ast::Path, - mut impl_ty_params: opt_vec::OptVec, - bounds_paths: opt_vec::OptVec<~[ident]>) + mut impl_generics: Generics, + bounds_paths: opt_vec::OptVec<@ast::Path>) -> @item { /*! * @@ -204,21 +202,22 @@ pub fn create_derived_impl(cx: @ext_ctxt, */ // Copy the lifetimes - let impl_lifetimes = generics.lifetimes.map(|l| { - build::mk_lifetime(cx, l.span, l.ident) - }); + for generics.lifetimes.each |l| { + impl_generics.lifetimes.push(copy *l) + }; // Create the type parameters. for generics.ty_params.each |ty_param| { + // extra restrictions on the generics parameters to the type being derived upon let mut bounds = do bounds_paths.map |&bound_path| { - build::mk_trait_ty_param_bound_global(cx, span, bound_path) + build::mk_trait_ty_param_bound_(cx, bound_path) }; let this_trait_bound = build::mk_trait_ty_param_bound_(cx, trait_path); bounds.push(this_trait_bound); - impl_ty_params.push(build::mk_ty_param(cx, ty_param.ident, @bounds)); + impl_generics.ty_params.push(build::mk_ty_param(cx, ty_param.ident, @bounds)); } // Create the reference to the trait. @@ -231,8 +230,7 @@ pub fn create_derived_impl(cx: @ext_ctxt, generics); // Create the impl item. - let impl_item = item_impl(Generics {lifetimes: impl_lifetimes, - ty_params: impl_ty_params}, + let impl_item = ast::item_impl(impl_generics, Some(trait_ref), self_type, methods.map(|x| *x)); @@ -240,106 +238,128 @@ pub fn create_derived_impl(cx: @ext_ctxt, } pub fn create_subpatterns(cx: @ext_ctxt, - span: span, - prefix: ~str, - n: uint) - -> ~[@pat] { - let mut subpats = ~[]; - for uint::range(0, n) |_i| { - // Create the subidentifier. - let index = subpats.len(); - let ident = cx.ident_of(fmt!("%s_%u", prefix, index)); - - // Create the subpattern. - let subpath = build::mk_raw_path(span, ~[ ident ]); - let subpat = pat_ident(bind_by_ref(m_imm), subpath, None); - let subpat = build::mk_pat(cx, span, subpat); - subpats.push(subpat); + span: span, + field_paths: ~[@ast::Path], + mutbl: ast::mutability) + -> ~[@ast::pat] { + do field_paths.map |&path| { + build::mk_pat(cx, span, + ast::pat_ident(ast::bind_by_ref(mutbl), path, None)) } - return subpats; } -pub fn is_struct_tuple(struct_def: &struct_def) -> bool { - struct_def.fields.len() > 0 && struct_def.fields.all(|f| { - match f.node.kind { - named_field(*) => false, - unnamed_field => true - } - }) +#[deriving(Eq)] // dogfooding! +enum StructType { + Unknown, Record, Tuple +} + +pub fn create_struct_pattern(cx: @ext_ctxt, + span: span, + struct_ident: ident, + struct_def: &struct_def, + prefix: ~str, + mutbl: ast::mutability) + -> (@ast::pat, ~[(Option, @expr)]) { + if struct_def.fields.is_empty() { + return ( + build::mk_pat_ident_with_binding_mode( + cx, span, struct_ident, ast::bind_infer), + ~[]); + } + + let matching_path = build::mk_raw_path(span, ~[ struct_ident ]); + + let mut paths = ~[], ident_expr = ~[]; + + let mut struct_type = Unknown; + + for struct_def.fields.eachi |i, struct_field| { + let opt_id = match struct_field.node.kind { + ast::named_field(ident, _, _) if (struct_type == Unknown || + struct_type == Record) => { + struct_type = Record; + Some(ident) + } + ast::unnamed_field if (struct_type == Unknown || + struct_type == Tuple) => { + struct_type = Tuple; + None + } + _ => { + cx.span_bug(span, "A struct with named and unnamed fields in `deriving`"); + } + }; + let path = build::mk_raw_path(span, + ~[ cx.ident_of(fmt!("%s_%u", prefix, i)) ]); + paths.push(path); + ident_expr.push((opt_id, build::mk_path_raw(cx, span, path))); + } + + let subpats = create_subpatterns(cx, span, paths, mutbl); + + // struct_type is definitely not Unknown, since struct_def.fields + // must be nonempty to reach here + let pattern = if struct_type == Record { + let field_pats = do vec::build |push| { + for vec::each2(subpats, ident_expr) |&pat, &(id, _)| { + // id is guaranteed to be Some + push(ast::field_pat { ident: id.get(), pat: pat }) + } + }; + build::mk_pat_struct(cx, span, matching_path, field_pats) + } else { + build::mk_pat_enum(cx, span, matching_path, subpats) + }; + + (pattern, ident_expr) } pub fn create_enum_variant_pattern(cx: @ext_ctxt, - span: span, - variant: &variant, - prefix: ~str) - -> @pat { + span: span, + variant: &ast::variant, + prefix: ~str, + mutbl: ast::mutability) + -> (@ast::pat, ~[(Option, @expr)]) { + let variant_ident = variant.node.name; match variant.node.kind { - tuple_variant_kind(ref variant_args) => { - if variant_args.len() == 0 { - return build::mk_pat_ident_with_binding_mode( - cx, span, variant_ident, ast::bind_infer); + ast::tuple_variant_kind(ref variant_args) => { + if variant_args.is_empty() { + return (build::mk_pat_ident_with_binding_mode( + cx, span, variant_ident, ast::bind_infer), ~[]); } let matching_path = build::mk_raw_path(span, ~[ variant_ident ]); - let subpats = create_subpatterns(cx, - span, - prefix, - variant_args.len()); - return build::mk_pat_enum(cx, span, matching_path, subpats); - } - struct_variant_kind(struct_def) => { - let matching_path = build::mk_raw_path(span, ~[ variant_ident ]); - let subpats = create_subpatterns(cx, - span, - prefix, - struct_def.fields.len()); - - let field_pats = do struct_def.fields.mapi |i, struct_field| { - let ident = match struct_field.node.kind { - named_field(ident, _, _) => ident, - unnamed_field => { - cx.span_bug(span, ~"unexpected unnamed field"); - } - }; - ast::field_pat { ident: ident, pat: subpats[i] } - }; + let mut paths = ~[], ident_expr = ~[]; + for uint::range(0, variant_args.len()) |i| { + let path = build::mk_raw_path(span, + ~[ cx.ident_of(fmt!("%s_%u", prefix, i)) ]); - build::mk_pat_struct(cx, span, matching_path, field_pats) - } - } -} + paths.push(path); + ident_expr.push((None, build::mk_path_raw(cx, span, path))); + } -pub fn variant_arg_count(_cx: @ext_ctxt, _span: span, variant: &variant) -> uint { - match variant.node.kind { - tuple_variant_kind(ref args) => args.len(), - struct_variant_kind(ref struct_def) => struct_def.fields.len(), - } -} + let subpats = create_subpatterns(cx, span, paths, mutbl); -/// Iterate through the idents of the variant arguments. The field is -/// unnamed (i.e. it's not a struct-like enum), then `None`. -pub fn each_variant_arg_ident(_cx: @ext_ctxt, _span: span, - variant: &variant, it: &fn(uint, Option) -> bool) { - match variant.node.kind { - tuple_variant_kind(ref args) => { - for uint::range(0, args.len()) |i| { - if !it(i, None) { break } - } + (build::mk_pat_enum(cx, span, matching_path, subpats), + ident_expr) } - struct_variant_kind(ref struct_def) => { - for struct_def.fields.eachi |i, f| { - let id = match f.node.kind { - named_field(ident, _, _) => Some(ident), - unnamed_field => None - }; - if !it(i, id) { break } - } + ast::struct_variant_kind(struct_def) => { + create_struct_pattern(cx, span, + variant_ident, struct_def, + prefix, + mutbl) } } } +pub fn variant_arg_count(_cx: @ext_ctxt, _span: span, variant: &ast::variant) -> uint { + match variant.node.kind { + ast::tuple_variant_kind(ref args) => args.len(), + ast::struct_variant_kind(ref struct_def) => struct_def.fields.len(), + } +} pub fn expand_enum_or_struct_match(cx: @ext_ctxt, span: span, @@ -347,7 +367,7 @@ pub fn expand_enum_or_struct_match(cx: @ext_ctxt, -> @expr { let self_ident = cx.ident_of(~"self"); let self_expr = build::mk_path(cx, span, ~[ self_ident ]); - let self_expr = build::mk_unary(cx, span, deref, self_expr); - let self_match_expr = expr_match(self_expr, arms); + let self_expr = build::mk_unary(cx, span, ast::deref, self_expr); + let self_match_expr = ast::expr_match(self_expr, arms); build::mk_expr(cx, span, self_match_expr) } diff --git a/src/libsyntax/ext/deriving/ty.rs b/src/libsyntax/ext/deriving/ty.rs new file mode 100644 index 0000000000000..6195a3a64249e --- /dev/null +++ b/src/libsyntax/ext/deriving/ty.rs @@ -0,0 +1,242 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +/*! +A mini version of ast::Ty, which is easier to use, and features an +explicit `Self` type to use when specifying impls to be derived. +*/ + +use ast; +use ast::{expr,Generics,ident}; +use ext::base::ext_ctxt; +use ext::build; +use codemap::{span,respan}; +use opt_vec; + +/// The types of pointers +#[deriving(Eq)] +pub enum PtrTy { + Owned, // ~ + Managed(ast::mutability), // @[mut] + Borrowed(Option<~str>, ast::mutability), // &['lifetime] [mut] +} + +/// A path, e.g. `::core::option::Option::` (global). Has support +/// for type parameters and a lifetime. +#[deriving(Eq)] +pub struct Path { + path: ~[~str], + lifetime: Option<~str>, + params: ~[~Ty], + global: bool +} + +pub impl Path { + fn new(path: ~[~str]) -> Path { + Path::new_(path, None, ~[], true) + } + fn new_local(path: ~str) -> Path { + Path::new_(~[ path ], None, ~[], false) + } + fn new_(path: ~[~str], lifetime: Option<~str>, params: ~[~Ty], global: bool) -> Path { + Path { + path: path, + lifetime: lifetime, + params: params, + global: global + } + } + + fn to_ty(&self, cx: @ext_ctxt, span: span, + self_ty: ident, self_generics: &Generics) -> @ast::Ty { + build::mk_ty_path_path(cx, span, + self.to_path(cx, span, + self_ty, self_generics)) + } + fn to_path(&self, cx: @ext_ctxt, span: span, + self_ty: ident, self_generics: &Generics) -> @ast::Path { + let idents = self.path.map(|s| cx.ident_of(*s) ); + let lt = mk_lifetime(cx, span, self.lifetime); + let tys = self.params.map(|t| t.to_ty(cx, span, self_ty, self_generics)); + + if self.global { + build::mk_raw_path_global_(span, idents, lt, tys) + } else { + build::mk_raw_path_(span, idents, lt, tys) + } + } +} + +/// A type. Supports pointers (except for *), Self, and literals +#[deriving(Eq)] +pub enum Ty { + Self, + // &/~/@ Ty + Ptr(~Ty, PtrTy), + // mod::mod::Type<[lifetime], [Params...]>, including a plain type + // parameter, and things like `int` + Literal(Path), + // includes nil + Tuple(~[Ty]) +} + +pub fn borrowed_ptrty() -> PtrTy { + Borrowed(None, ast::m_imm) +} +pub fn borrowed(ty: ~Ty) -> Ty { + Ptr(ty, borrowed_ptrty()) +} + +pub fn borrowed_explicit_self() -> Option> { + Some(Some(borrowed_ptrty())) +} + +pub fn borrowed_self() -> Ty { + borrowed(~Self) +} + +pub fn nil_ty() -> Ty { + Tuple(~[]) +} + +fn mk_lifetime(cx: @ext_ctxt, span: span, lt: Option<~str>) -> Option<@ast::Lifetime> { + match lt { + Some(s) => Some(@build::mk_lifetime(cx, span, cx.ident_of(s))), + None => None + } +} + +pub impl Ty { + fn to_ty(&self, cx: @ext_ctxt, span: span, + self_ty: ident, self_generics: &Generics) -> @ast::Ty { + match *self { + Ptr(ref ty, ref ptr) => { + let raw_ty = ty.to_ty(cx, span, self_ty, self_generics); + match *ptr { + Owned => { + build::mk_ty_uniq(cx, span, raw_ty) + } + Managed(copy mutbl) => { + build::mk_ty_box(cx, span, raw_ty, mutbl) + } + Borrowed(copy lt, copy mutbl) => { + let lt = mk_lifetime(cx, span, lt); + build::mk_ty_rptr(cx, span, raw_ty, lt, mutbl) + } + } + } + Literal(ref p) => { p.to_ty(cx, span, self_ty, self_generics) } + Self => { + build::mk_ty_path_path(cx, span, self.to_path(cx, span, self_ty, self_generics)) + } + Tuple(ref fields) => { + let ty = if fields.is_empty() { + ast::ty_nil + } else { + ast::ty_tup(fields.map(|f| f.to_ty(cx, span, self_ty, self_generics))) + }; + + build::mk_ty(cx, span, ty) + } + } + } + + fn to_path(&self, cx: @ext_ctxt, span: span, + self_ty: ident, self_generics: &Generics) -> @ast::Path { + match *self { + Self => { + let self_params = do self_generics.ty_params.map |ty_param| { + build::mk_ty_path(cx, span, ~[ ty_param.ident ]) + }; + let lifetime = if self_generics.lifetimes.is_empty() { + None + } else { + Some(@*self_generics.lifetimes.get(0)) + }; + + build::mk_raw_path_(span, ~[self_ty], lifetime, + opt_vec::take_vec(self_params)) + } + Literal(ref p) => { + p.to_path(cx, span, self_ty, self_generics) + } + Ptr(*) => { cx.span_bug(span, ~"Pointer in a path in generic `deriving`") } + Tuple(*) => { cx.span_bug(span, ~"Tuple in a path in generic `deriving`") } + } + } +} + + +fn mk_ty_param(cx: @ext_ctxt, span: span, name: ~str, bounds: ~[Path], + self_ident: ident, self_generics: &Generics) -> ast::TyParam { + let bounds = opt_vec::from( + do bounds.map |b| { + let path = b.to_path(cx, span, self_ident, self_generics); + build::mk_trait_ty_param_bound_(cx, path) + }); + build::mk_ty_param(cx, cx.ident_of(name), @bounds) +} + +fn mk_generics(lifetimes: ~[ast::Lifetime], ty_params: ~[ast::TyParam]) -> Generics { + Generics { + lifetimes: opt_vec::from(lifetimes), + ty_params: opt_vec::from(ty_params) + } +} + +/// Lifetimes and bounds on type paramers +pub struct LifetimeBounds { + lifetimes: ~[~str], + bounds: ~[(~str, ~[Path])] +} + +pub impl LifetimeBounds { + fn empty() -> LifetimeBounds { + LifetimeBounds { + lifetimes: ~[], bounds: ~[] + } + } + fn to_generics(&self, cx: @ext_ctxt, span: span, + self_ty: ident, self_generics: &Generics) -> Generics { + let lifetimes = do self.lifetimes.map |<| { + build::mk_lifetime(cx, span, cx.ident_of(lt)) + }; + let ty_params = do self.bounds.map |&(name, bounds)| { + mk_ty_param(cx, span, name, bounds, self_ty, self_generics) + }; + mk_generics(lifetimes, ty_params) + } +} + + +pub fn get_explicit_self(cx: @ext_ctxt, span: span, self_ptr: Option) + -> (@expr, ast::self_ty) { + let self_path = build::mk_path(cx, span, ~[cx.ident_of(~"self")]); + match self_ptr { + None => { + (self_path, respan(span, ast::sty_value)) + } + Some(ptr) => { + let self_ty = respan( + span, + match ptr { + Owned => ast::sty_uniq(ast::m_imm), + Managed(mutbl) => ast::sty_box(mutbl), + Borrowed(lt, mutbl) => { + let lt = lt.map(|s| @build::mk_lifetime(cx, span, + cx.ident_of(*s))); + ast::sty_region(lt, mutbl) + } + }); + let self_expr = build::mk_deref(cx, span, self_path); + (self_expr, self_ty) + } + } +} From 1cf2108a2b09942d6b225700b9d39dc9fa070463 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Tue, 7 May 2013 01:30:00 +1000 Subject: [PATCH 223/410] libsyntax: convert #[deriving(IterBytes)] to generic deriving --- src/libsyntax/ext/deriving/iter_bytes.rs | 284 +++++------------------ 1 file changed, 61 insertions(+), 223 deletions(-) diff --git a/src/libsyntax/ext/deriving/iter_bytes.rs b/src/libsyntax/ext/deriving/iter_bytes.rs index f03306ea07ac8..c1c34c9a53a60 100644 --- a/src/libsyntax/ext/deriving/iter_bytes.rs +++ b/src/libsyntax/ext/deriving/iter_bytes.rs @@ -1,4 +1,4 @@ -// Copyright 2012-2013 The Rust Project Developers. See the COPYRIGHT +// 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. // @@ -8,25 +8,37 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use ast; -use ast::*; +use ast::{meta_item, item, expr}; +use codemap::span; use ext::base::ext_ctxt; use ext::build; -use ext::deriving::*; -use codemap::{span, spanned}; -use ast_util; -use opt_vec; +use ext::deriving::generic::*; pub fn expand_deriving_iter_bytes(cx: @ext_ctxt, span: span, - _mitem: @meta_item, - in_items: ~[@item]) - -> ~[@item] { - expand_deriving(cx, - span, - in_items, - expand_deriving_iter_bytes_struct_def, - expand_deriving_iter_bytes_enum_def) + mitem: @meta_item, + in_items: ~[@item]) -> ~[@item] { + let trait_def = TraitDef { + path: Path::new(~[~"core", ~"to_bytes", ~"IterBytes"]), + additional_bounds: ~[], + generics: LifetimeBounds::empty(), + methods: ~[ + MethodDef { + name: ~"iter_bytes", + generics: LifetimeBounds::empty(), + self_ty: borrowed_explicit_self(), + args: ~[ + Literal(Path::new(~[~"bool"])), + Literal(Path::new(~[~"core", ~"to_bytes", ~"Cb"])) + ], + ret_ty: nil_ty(), + const_nonmatching: false, + combine_substructure: iter_bytes_substructure + } + ] + }; + + expand_deriving_generic(cx, span, mitem, in_items, &trait_def) } pub fn expand_deriving_obsolete(cx: @ext_ctxt, @@ -39,217 +51,43 @@ pub fn expand_deriving_obsolete(cx: @ext_ctxt, in_items } -fn create_derived_iter_bytes_impl(cx: @ext_ctxt, - span: span, - type_ident: ident, - generics: &Generics, - method: @method) - -> @item { - let methods = [ method ]; - let trait_path = ~[ - cx.ident_of(~"core"), - cx.ident_of(~"to_bytes"), - cx.ident_of(~"IterBytes") - ]; - let trait_path = build::mk_raw_path_global(span, trait_path); - create_derived_impl(cx, span, type_ident, generics, methods, trait_path, - opt_vec::Empty, opt_vec::Empty) -} - -// Creates a method from the given set of statements conforming to the -// signature of the `iter_bytes` method. -fn create_iter_bytes_method(cx: @ext_ctxt, - span: span, - statements: ~[@stmt]) - -> @method { - // Create the `lsb0` parameter. - let bool_ident = cx.ident_of(~"bool"); - let lsb0_arg_type = build::mk_simple_ty_path(cx, span, bool_ident); - let lsb0_ident = cx.ident_of(~"__lsb0"); - let lsb0_arg = build::mk_arg(cx, span, lsb0_ident, lsb0_arg_type); - - // Create the `f` parameter. - let core_ident = cx.ident_of(~"core"); - let to_bytes_ident = cx.ident_of(~"to_bytes"); - let cb_ident = cx.ident_of(~"Cb"); - let core_to_bytes_cb_ident = ~[ core_ident, to_bytes_ident, cb_ident ]; - let f_arg_type = build::mk_ty_path(cx, span, core_to_bytes_cb_ident); - let f_ident = cx.ident_of(~"__f"); - let f_arg = build::mk_arg(cx, span, f_ident, f_arg_type); - - // Create the type of the return value. - let output_type = @ast::Ty { id: cx.next_id(), node: ty_nil, span: span }; - - // Create the function declaration. - let inputs = ~[ lsb0_arg, f_arg ]; - let fn_decl = build::mk_fn_decl(inputs, output_type); - - // Create the body block. - let body_block = build::mk_block_(cx, span, statements); - - // Create the method. - let self_ty = spanned { node: sty_region(None, m_imm), span: span }; - let method_ident = cx.ident_of(~"iter_bytes"); - @ast::method { - ident: method_ident, - attrs: ~[], - generics: ast_util::empty_generics(), - self_ty: self_ty, - purity: impure_fn, - decl: fn_decl, - body: body_block, - id: cx.next_id(), - span: span, - self_id: cx.next_id(), - vis: public - } -} - -fn call_substructure_iter_bytes_method(cx: @ext_ctxt, - span: span, - self_field: @expr) - -> @stmt { - // Gather up the parameters we want to chain along. - let lsb0_ident = cx.ident_of(~"__lsb0"); - let f_ident = cx.ident_of(~"__f"); - let lsb0_expr = build::mk_path(cx, span, ~[ lsb0_ident ]); - let f_expr = build::mk_path(cx, span, ~[ f_ident ]); - - // Call the substructure method. - let iter_bytes_ident = cx.ident_of(~"iter_bytes"); - let self_call = build::mk_method_call(cx, - span, - self_field, - iter_bytes_ident, - ~[ lsb0_expr, f_expr ]); - - // Create a statement out of this expression. - build::mk_stmt(cx, span, self_call) -} - -fn expand_deriving_iter_bytes_struct_def(cx: @ext_ctxt, - span: span, - struct_def: &struct_def, - type_ident: ident, - generics: &Generics) - -> @item { - // Create the method. - let method = expand_deriving_iter_bytes_struct_method(cx, - span, - struct_def); - - // Create the implementation. - return create_derived_iter_bytes_impl(cx, - span, - type_ident, - generics, - method); -} - -fn expand_deriving_iter_bytes_enum_def(cx: @ext_ctxt, - span: span, - enum_definition: &enum_def, - type_ident: ident, - generics: &Generics) - -> @item { - // Create the method. - let method = expand_deriving_iter_bytes_enum_method(cx, - span, - enum_definition); - - // Create the implementation. - return create_derived_iter_bytes_impl(cx, - span, - type_ident, - generics, - method); -} - -fn expand_deriving_iter_bytes_struct_method(cx: @ext_ctxt, - span: span, - struct_def: &struct_def) - -> @method { - let self_ident = cx.ident_of(~"self"); - - // Create the body of the method. - let mut statements = ~[]; - for struct_def.fields.each |struct_field| { - match struct_field.node.kind { - named_field(ident, _, _) => { - // Create the accessor for this field. - let self_field = build::mk_access(cx, - span, - ~[ self_ident ], - ident); - - // Call the substructure method. - let stmt = call_substructure_iter_bytes_method(cx, - span, - self_field); - statements.push(stmt); - } - unnamed_field => { - cx.span_unimpl(span, - ~"unnamed fields with `deriving(IterBytes)`"); - } - } - } - - // Create the method itself. - return create_iter_bytes_method(cx, span, statements); -} - -fn expand_deriving_iter_bytes_enum_method(cx: @ext_ctxt, - span: span, - enum_definition: &enum_def) - -> @method { - // Create the arms of the match in the method body. - let arms = do enum_definition.variants.mapi |i, variant| { - // Create the matching pattern. - let pat = create_enum_variant_pattern(cx, span, variant, ~"__self"); - - // Determine the discriminant. We will feed this value to the byte - // iteration function. - let discriminant; - match variant.node.disr_expr { - Some(copy disr_expr) => discriminant = disr_expr, - None => discriminant = build::mk_uint(cx, span, i), - } - - // Feed the discriminant to the byte iteration function. - let mut stmts = ~[]; - let discrim_stmt = call_substructure_iter_bytes_method(cx, - span, - discriminant); - stmts.push(discrim_stmt); - - // Feed each argument in this variant to the byte iteration function - // as well. - for uint::range(0, variant_arg_count(cx, span, variant)) |j| { - // Create the expression for this field. - let field_ident = cx.ident_of(~"__self_" + j.to_str()); - let field = build::mk_path(cx, span, ~[ field_ident ]); - - // Call the substructure method. - let stmt = call_substructure_iter_bytes_method(cx, span, field); - stmts.push(stmt); +fn iter_bytes_substructure(cx: @ext_ctxt, span: span, substr: &Substructure) -> @expr { + let lsb0_f = match substr.nonself_args { + [l, f] => ~[l, f], + _ => cx.span_bug(span, "Incorrect number of arguments in `deriving(IterBytes)`") + }; + let iter_bytes_ident = substr.method_ident; + let call_iterbytes = |thing_expr| { + build::mk_stmt( + cx, span, + build::mk_method_call(cx, span, + thing_expr, iter_bytes_ident, + copy lsb0_f)) + }; + let mut stmts = ~[]; + let fields; + match *substr.fields { + Struct(ref fs) => { + fields = fs } + EnumMatching(copy index, ref variant, ref fs) => { + // Determine the discriminant. We will feed this value to the byte + // iteration function. + let discriminant = match variant.node.disr_expr { + Some(copy d)=> d, + None => build::mk_uint(cx, span, index) + }; - // Create the pattern body. - let match_body_block = build::mk_block_(cx, span, stmts); + stmts.push(call_iterbytes(discriminant)); - // Create the arm. - ast::arm { - pats: ~[ pat ], - guard: None, - body: match_body_block, + fields = fs; } - }; + _ => cx.span_bug(span, "Impossible substructure in `deriving(IterBytes)`") + } - // Create the method body. - let self_match_expr = expand_enum_or_struct_match(cx, span, arms); - let self_match_stmt = build::mk_stmt(cx, span, self_match_expr); + for fields.each |&(_, field, _)| { + stmts.push(call_iterbytes(field)); + } - // Create the method. - create_iter_bytes_method(cx, span, ~[ self_match_stmt ]) -} + build::mk_block(cx, span, ~[], stmts, None) +} \ No newline at end of file From 5e1d6c2c8011f466d2a524231e5386df0b5ed841 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Tue, 7 May 2013 01:30:42 +1000 Subject: [PATCH 224/410] libsyntax: add #[deriving(Rand, ToStr)]. The former fills each field of a struct or enum variant with a random value (and picks a random enum variant). The latter makes the .to_str method have the same output as fmt!("%?", ..). --- src/libsyntax/ext/deriving/mod.rs | 6 ++ src/libsyntax/ext/deriving/rand.rs | 136 +++++++++++++++++++++++++++ src/libsyntax/ext/deriving/to_str.rs | 54 +++++++++++ 3 files changed, 196 insertions(+) create mode 100644 src/libsyntax/ext/deriving/rand.rs create mode 100644 src/libsyntax/ext/deriving/to_str.rs diff --git a/src/libsyntax/ext/deriving/mod.rs b/src/libsyntax/ext/deriving/mod.rs index 9f3972e71ac8a..d48ff98be06ee 100644 --- a/src/libsyntax/ext/deriving/mod.rs +++ b/src/libsyntax/ext/deriving/mod.rs @@ -23,6 +23,8 @@ pub mod clone; pub mod iter_bytes; pub mod encodable; pub mod decodable; +pub mod rand; +pub mod to_str; #[path="cmp/eq.rs"] pub mod eq; @@ -86,6 +88,10 @@ pub fn expand_meta_deriving(cx: @ext_ctxt, ~"Ord" => expand!(ord::expand_deriving_ord), ~"TotalOrd" => expand!(totalord::expand_deriving_totalord), + ~"Rand" => expand!(rand::expand_deriving_rand), + + ~"ToStr" => expand!(to_str::expand_deriving_to_str), + tname => { cx.span_err(titem.span, fmt!("unknown \ `deriving` trait: `%s`", tname)); diff --git a/src/libsyntax/ext/deriving/rand.rs b/src/libsyntax/ext/deriving/rand.rs new file mode 100644 index 0000000000000..03202801d206d --- /dev/null +++ b/src/libsyntax/ext/deriving/rand.rs @@ -0,0 +1,136 @@ +// Copyright 2012-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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +use ast; +use ast::{meta_item, item, expr, ident}; +use codemap::span; +use ext::base::ext_ctxt; +use ext::build; +use ext::deriving::generic::*; + +pub fn expand_deriving_rand(cx: @ext_ctxt, + span: span, + mitem: @meta_item, + in_items: ~[@item]) + -> ~[@item] { + let trait_def = TraitDef { + path: Path::new(~[~"core", ~"rand", ~"Rand"]), + additional_bounds: ~[], + generics: LifetimeBounds::empty(), + methods: ~[ + MethodDef { + name: ~"rand", + generics: LifetimeBounds { + lifetimes: ~[], + bounds: ~[(~"R", + ~[ Path::new(~[~"core", ~"rand", ~"Rng"]) ])] + }, + self_ty: None, + args: ~[ + Ptr(~Literal(Path::new_local(~"R")), + Borrowed(None, ast::m_imm)) + ], + ret_ty: Self, + const_nonmatching: false, + combine_substructure: rand_substructure + } + ] + }; + + expand_deriving_generic(cx, span, mitem, in_items, &trait_def) +} + +fn rand_substructure(cx: @ext_ctxt, span: span, substr: &Substructure) -> @expr { + let rng = match substr.nonself_args { + [rng] => ~[ rng ], + _ => cx.bug("Incorrect number of arguments to `rand` in `deriving(Rand)`") + }; + let rand_ident = ~[ + cx.ident_of(~"core"), + cx.ident_of(~"rand"), + cx.ident_of(~"Rand"), + cx.ident_of(~"rand") + ]; + let rand_call = || { + build::mk_call_global(cx, span, + copy rand_ident, copy rng) + }; + + return match *substr.fields { + StaticStruct(_, ref summary) => { + rand_thing(cx, span, substr.type_ident, summary, rand_call) + } + StaticEnum(_, ref variants) => { + if variants.is_empty() { + cx.span_fatal(span, "`Rand` cannot be derived for enums with no variants"); + } + + let variant_count = build::mk_uint(cx, span, variants.len()); + + // need to specify the uint-ness of the random number + let u32_ty = build::mk_ty_path(cx, span, ~[cx.ident_of(~"uint")]); + let r_ty = build::mk_ty_path(cx, span, ~[cx.ident_of(~"R")]); + let rand_name = build::mk_raw_path_(span, copy rand_ident, None, ~[ u32_ty, r_ty ]); + let rand_name = build::mk_path_raw(cx, span, rand_name); + + let rv_call = build::mk_call_(cx, span, rand_name, copy rng); + + // rand() % variants.len() + let rand_variant = build::mk_binary(cx, span, ast::rem, + rv_call, variant_count); + + let mut arms = do variants.mapi |i, id_sum| { + let i_expr = build::mk_uint(cx, span, i); + let pat = build::mk_pat_lit(cx, span, i_expr); + + match *id_sum { + (ident, ref summary) => { + build::mk_arm(cx, span, + ~[ pat ], + rand_thing(cx, span, ident, summary, rand_call)) + } + } + }; + + // _ => {} at the end. Should never occur + arms.push(build::mk_unreachable_arm(cx, span)); + + build::mk_expr(cx, span, + ast::expr_match(rand_variant, arms)) + } + _ => cx.bug("Non-static method in `deriving(Rand)`") + }; + + fn rand_thing(cx: @ext_ctxt, span: span, + ctor_ident: ident, + summary: &Either, + rand_call: &fn() -> @expr) -> @expr { + let ctor_ident = ~[ ctor_ident ]; + match *summary { + Left(copy count) => { + if count == 0 { + build::mk_path(cx, span, ctor_ident) + } else { + let exprs = vec::from_fn(count, |_| rand_call()); + build::mk_call(cx, span, ctor_ident, exprs) + } + } + Right(ref fields) => { + let rand_fields = do fields.map |ident| { + build::Field { + ident: *ident, + ex: rand_call() + } + }; + build::mk_struct_e(cx, span, ctor_ident, rand_fields) + } + } + } +} \ No newline at end of file diff --git a/src/libsyntax/ext/deriving/to_str.rs b/src/libsyntax/ext/deriving/to_str.rs new file mode 100644 index 0000000000000..2c7d449585f1e --- /dev/null +++ b/src/libsyntax/ext/deriving/to_str.rs @@ -0,0 +1,54 @@ +// Copyright 2012-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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +use ast::{meta_item, item, expr}; +use codemap::span; +use ext::base::ext_ctxt; +use ext::build; +use ext::deriving::generic::*; + +pub fn expand_deriving_to_str(cx: @ext_ctxt, + span: span, + mitem: @meta_item, + in_items: ~[@item]) + -> ~[@item] { + let trait_def = TraitDef { + path: Path::new(~[~"core", ~"to_str", ~"ToStr"]), + additional_bounds: ~[], + generics: LifetimeBounds::empty(), + methods: ~[ + MethodDef { + name: ~"to_str", + generics: LifetimeBounds::empty(), + self_ty: borrowed_explicit_self(), + args: ~[], + ret_ty: Ptr(~Literal(Path::new_local(~"str")), Owned), + const_nonmatching: false, + combine_substructure: to_str_substructure + } + ] + }; + + expand_deriving_generic(cx, span, mitem, in_items, &trait_def) +} + +fn to_str_substructure(cx: @ext_ctxt, span: span, substr: &Substructure) -> @expr { + match substr.self_args { + [self_obj] => { + let self_addr = build::mk_addr_of(cx, span, self_obj); + build::mk_call_global(cx, span, + ~[cx.ident_of(~"core"), + cx.ident_of(~"sys"), + cx.ident_of(~"log_str")], + ~[self_addr]) + } + _ => cx.span_bug(span, ~"Invalid number of arguments in `deriving(ToStr)`") + } +} \ No newline at end of file From 4a43c1babbdf453fc4af25cf06aae7c96213d918 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Tue, 7 May 2013 01:32:34 +1000 Subject: [PATCH 225/410] testsuite: tests for deriving changes and additions --- src/test/run-pass/deriving-rand.rs | 38 ++++++++++++++++ ...deriving-self-lifetime-totalord-totaleq.rs | 32 ++++++++++++++ src/test/run-pass/deriving-self-lifetime.rs | 33 ++++++++++++++ src/test/run-pass/deriving-to-str.rs | 44 +++++++++++++++++++ 4 files changed, 147 insertions(+) create mode 100644 src/test/run-pass/deriving-rand.rs create mode 100644 src/test/run-pass/deriving-self-lifetime-totalord-totaleq.rs create mode 100644 src/test/run-pass/deriving-self-lifetime.rs create mode 100644 src/test/run-pass/deriving-to-str.rs diff --git a/src/test/run-pass/deriving-rand.rs b/src/test/run-pass/deriving-rand.rs new file mode 100644 index 0000000000000..290dc02dcdb28 --- /dev/null +++ b/src/test/run-pass/deriving-rand.rs @@ -0,0 +1,38 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[deriving(Rand)] +struct A; + +#[deriving(Rand)] +struct B(int, int); + +#[deriving(Rand)] +struct C { + x: f64, + y: (u8, u8) +} + +#[deriving(Rand)] +enum D { + D0, + D1(uint), + D2 { x: (), y: () } +} + +fn main() { + // check there's no segfaults + for 20.times { + rand::random::(); + rand::random::(); + rand::random::(); + rand::random::(); + } +} \ No newline at end of file diff --git a/src/test/run-pass/deriving-self-lifetime-totalord-totaleq.rs b/src/test/run-pass/deriving-self-lifetime-totalord-totaleq.rs new file mode 100644 index 0000000000000..b0b03d8419b8c --- /dev/null +++ b/src/test/run-pass/deriving-self-lifetime-totalord-totaleq.rs @@ -0,0 +1,32 @@ +// xfail-test FIXME #6257 + +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +use core::cmp::{Less,Equal,Greater}; + +#[deriving(TotalEq,TotalOrd)] +struct A<'self> { + x: &'self int +} + +fn main() { + let a = A { x: &1 }, b = A { x: &2 }; + + assert!(a.equals(&a)); + assert!(b.equals(&b)); + + + assert_eq!(a.cmp(&a), Equal); + assert_eq!(b.cmp(&b), Equal); + + assert_eq!(a.cmp(&b), Less); + assert_eq!(b.cmp(&a), Greater); +} diff --git a/src/test/run-pass/deriving-self-lifetime.rs b/src/test/run-pass/deriving-self-lifetime.rs new file mode 100644 index 0000000000000..549a9b398a219 --- /dev/null +++ b/src/test/run-pass/deriving-self-lifetime.rs @@ -0,0 +1,33 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[deriving(Eq,Ord)] +struct A<'self> { + x: &'self int +} + +fn main() { + let a = A { x: &1 }, b = A { x: &2 }; + + assert_eq!(a, a); + assert_eq!(b, b); + + + assert!(a < b); + assert!(b > a); + + assert!(a <= b); + assert!(a <= a); + assert!(b <= b); + + assert!(b >= a); + assert!(b >= b); + assert!(a >= a); +} diff --git a/src/test/run-pass/deriving-to-str.rs b/src/test/run-pass/deriving-to-str.rs new file mode 100644 index 0000000000000..10f6bcbeff767 --- /dev/null +++ b/src/test/run-pass/deriving-to-str.rs @@ -0,0 +1,44 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[deriving(Rand,ToStr)] +struct A; + +#[deriving(Rand,ToStr)] +struct B(int, int); + +#[deriving(Rand,ToStr)] +struct C { + x: f64, + y: (u8, u8) +} + +#[deriving(Rand,ToStr)] +enum D { + D0, + D1(uint), + D2 { x: (), y: () } +} + +fn main() { + macro_rules! t( + ($ty:ty) => {{ + let x =rand::random::<$ty>(); + assert_eq!(x.to_str(), fmt!("%?", x)); + }} + ); + + for 20.times { + t!(A); + t!(B); + t!(C); + t!(D); + } +} \ No newline at end of file From 1cbf0a84dc9d12d4c15379537a51ad75fcb1bdcf Mon Sep 17 00:00:00 2001 From: "Felix S. Klock II" Date: Mon, 6 May 2013 19:05:36 +0200 Subject: [PATCH 226/410] Step one for 'proper' pub condition: support pub keyword in form. --- src/libcore/rt/io/mod.rs | 3 ++- src/libsyntax/ext/expand.rs | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/libcore/rt/io/mod.rs b/src/libcore/rt/io/mod.rs index 97b3ee3e30ef6..fea32bc5b7509 100644 --- a/src/libcore/rt/io/mod.rs +++ b/src/libcore/rt/io/mod.rs @@ -337,7 +337,8 @@ pub enum IoErrorKind { // XXX: Can't put doc comments on macros // Raised by `I/O` operations on error. condition! { - io_error: super::IoError -> (); + // FIXME (#6009): uncomment `pub` after expansion support lands. + /*pub*/ io_error: super::IoError -> (); } pub trait Reader { diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs index 02721a02fbd0c..b1267ee757816 100644 --- a/src/libsyntax/ext/expand.rs +++ b/src/libsyntax/ext/expand.rs @@ -485,8 +485,23 @@ pub fn core_macros() -> ~str { macro_rules! condition ( + { pub $c:ident: $in:ty -> $out:ty; } => { + + pub mod $c { + fn key(_x: @::core::condition::Handler<$in,$out>) { } + + pub static cond : + ::core::condition::Condition<'static,$in,$out> = + ::core::condition::Condition { + name: stringify!($c), + key: key + }; + } + }; + { $c:ident: $in:ty -> $out:ty; } => { + // FIXME (#6009): remove mod's `pub` below once variant above lands. pub mod $c { fn key(_x: @::core::condition::Handler<$in,$out>) { } From 0ef4e860da1fb755b9fff5d1b30bee3974514ea2 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Mon, 6 May 2013 14:02:28 -0400 Subject: [PATCH 227/410] Replace NOTE with FIXME --- src/librustc/middle/borrowck/check_loans.rs | 4 ++-- .../middle/borrowck/gather_loans/mod.rs | 2 +- src/librustc/middle/borrowck/mod.rs | 2 +- src/librustc/middle/dataflow.rs | 2 +- src/librustc/middle/region.rs | 3 +-- src/librustc/middle/trans/base.rs | 2 +- src/librustc/middle/trans/expr.rs | 3 ++- src/librustc/middle/trans/reachable.rs | 12 ++++++------ src/librustc/middle/typeck/check/mod.rs | 11 +++++------ src/librustc/middle/typeck/check/regionck.rs | 19 +++++++++++-------- 10 files changed, 31 insertions(+), 29 deletions(-) diff --git a/src/librustc/middle/borrowck/check_loans.rs b/src/librustc/middle/borrowck/check_loans.rs index b9a3f4bd6fcbb..ba719fe34d719 100644 --- a/src/librustc/middle/borrowck/check_loans.rs +++ b/src/librustc/middle/borrowck/check_loans.rs @@ -579,7 +579,7 @@ pub impl<'self> CheckLoanCtxt<'self> { } } - // NOTE inadequare if/when we permit `move a.b` + // FIXME(#4384) inadequare if/when we permit `move a.b` // check for a conflicting loan: for opt_loan_path(cmt).each |&lp| { @@ -604,7 +604,7 @@ pub impl<'self> CheckLoanCtxt<'self> { // However, I added it for consistency and lest the system // should change in the future. // - // FIXME(#5074) nested method calls + // FIXME(#6268) nested method calls // self.check_for_conflicting_loans(callee_id); } } diff --git a/src/librustc/middle/borrowck/gather_loans/mod.rs b/src/librustc/middle/borrowck/gather_loans/mod.rs index 922af0cadec6c..5f3c5d977fef5 100644 --- a/src/librustc/middle/borrowck/gather_loans/mod.rs +++ b/src/librustc/middle/borrowck/gather_loans/mod.rs @@ -389,7 +389,7 @@ pub impl GatherLoanCtxt { self.all_loans.push(loan); // if loan_gen_scope != borrow_id { - // NOTE handle case where gen_scope is not borrow_id + // FIXME(#6268) Nested method calls // // Typically, the scope of the loan includes the point at // which the loan is originated. This diff --git a/src/librustc/middle/borrowck/mod.rs b/src/librustc/middle/borrowck/mod.rs index c9a4de3830719..68e70d245f779 100644 --- a/src/librustc/middle/borrowck/mod.rs +++ b/src/librustc/middle/borrowck/mod.rs @@ -516,7 +516,7 @@ pub impl BorrowckCtxt { fmt!("%s in an aliasable location", prefix)); } mc::AliasableManaged(ast::m_mutbl) => { - // FIXME(#5074) we should prob do this borrow + // FIXME(#6269) reborrow @mut to &mut self.tcx.sess.span_err( span, fmt!("%s in a `@mut` pointer; \ diff --git a/src/librustc/middle/dataflow.rs b/src/librustc/middle/dataflow.rs index 9d032a1839e23..ccb34851046bd 100644 --- a/src/librustc/middle/dataflow.rs +++ b/src/librustc/middle/dataflow.rs @@ -808,7 +808,7 @@ impl<'self, O:DataFlowOperator> PropagationContext<'self, O> { self.walk_expr(arg0, in_out, loop_scopes); self.walk_exprs(args, in_out, loop_scopes); - // FIXME(#5074) nested method calls + // FIXME(#6268) nested method calls // self.merge_with_entry_set(callee_id, in_out); // self.dfcx.apply_gen_kill(callee_id, in_out); diff --git a/src/librustc/middle/region.rs b/src/librustc/middle/region.rs index 5834ae1d78055..cdc3aa9fedb7e 100644 --- a/src/librustc/middle/region.rs +++ b/src/librustc/middle/region.rs @@ -393,7 +393,7 @@ pub fn resolve_expr(expr: @ast::expr, cx: Context, visitor: visit::vt) match expr.node { ast::expr_assign_op(*) | ast::expr_index(*) | ast::expr_binary(*) | ast::expr_unary(*) | ast::expr_call(*) | ast::expr_method_call(*) => { - // FIXME(#5074) Nested method calls + // FIXME(#6268) Nested method calls // // The lifetimes for a call or method call look as follows: // @@ -949,7 +949,6 @@ pub fn determine_rp_in_crate(sess: Session, while cx.worklist.len() != 0 { let c_id = cx.worklist.pop(); let c_variance = cx.region_paramd_items.get_copy(&c_id); - // NOTE cleanup scopes cause an exaggerated lock here debug!("popped %d from worklist", c_id); match cx.dep_map.find(&c_id) { None => {} diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs index 90dd9103011d5..34f798ec7a631 100644 --- a/src/librustc/middle/trans/base.rs +++ b/src/librustc/middle/trans/base.rs @@ -998,7 +998,7 @@ pub fn find_bcx_for_scope(bcx: block, scope_id: ast::node_id) -> block { return bcx_sid } - // NOTE This is messier than it ought to be and not really right + // FIXME(#6268, #6248) hacky cleanup for nested method calls Some(NodeInfo { callee_id: Some(id), _ }) if id == scope_id => { return bcx_sid } diff --git a/src/librustc/middle/trans/expr.rs b/src/librustc/middle/trans/expr.rs index 6f1dbd8c2fec4..0e8b2e0474661 100644 --- a/src/librustc/middle/trans/expr.rs +++ b/src/librustc/middle/trans/expr.rs @@ -250,7 +250,8 @@ pub fn trans_to_datum(bcx: block, expr: @ast::expr) -> DatumBlock { let tcx = bcx.tcx(); let unit_ty = ty::sequence_element_type(tcx, datum.ty); - // NOTE prob need to distinguish "auto-slice" from explicit index? + + // FIXME(#6272) need to distinguish "auto-slice" from explicit index? let (bcx, base, len) = datum.get_vec_base_and_len(bcx, expr.span, expr.id); diff --git a/src/librustc/middle/trans/reachable.rs b/src/librustc/middle/trans/reachable.rs index 1dd73f76da735..9bbf50397c35a 100644 --- a/src/librustc/middle/trans/reachable.rs +++ b/src/librustc/middle/trans/reachable.rs @@ -75,11 +75,11 @@ fn traverse_def_id(cx: @mut ctx, did: def_id) { Some(&ast_map::node_item(item, _)) => traverse_public_item(cx, item), Some(&ast_map::node_method(_, impl_id, _)) => traverse_def_id(cx, impl_id), Some(&ast_map::node_foreign_item(item, _, _, _)) => { - let cx = &mut *cx; // NOTE reborrow @mut + let cx = &mut *cx; // FIXME(#6269) reborrow @mut to &mut cx.rmap.insert(item.id); } Some(&ast_map::node_variant(ref v, _, _)) => { - let cx = &mut *cx; // NOTE reborrow @mut + let cx = &mut *cx; // FIXME(#6269) reborrow @mut to &mut cx.rmap.insert(v.node.id); } _ => () @@ -109,7 +109,7 @@ fn traverse_public_item(cx: @mut ctx, item: @item) { item_foreign_mod(ref nm) => { if !traverse_exports(cx, item.id) { for nm.items.each |item| { - let cx = &mut *cx; // NOTE reborrow @mut + let cx = &mut *cx; // FIXME(#6269) reborrow @mut to &mut cx.rmap.insert(item.id); } } @@ -127,7 +127,7 @@ fn traverse_public_item(cx: @mut ctx, item: @item) { attr::find_inline_attr(m.attrs) != attr::ia_none { { - let cx = &mut *cx; // NOTE reborrow @mut + let cx = &mut *cx; // FIXME(#6269) reborrow @mut to &mut cx.rmap.insert(m.id); } traverse_inline_body(cx, &m.body); @@ -136,7 +136,7 @@ fn traverse_public_item(cx: @mut ctx, item: @item) { } item_struct(ref struct_def, _) => { for struct_def.ctor_id.each |&ctor_id| { - let cx = &mut *cx; // NOTE reborrow @mut + let cx = &mut *cx; // FIXME(#6269) reborrow @mut to &mut cx.rmap.insert(ctor_id); } } @@ -153,7 +153,7 @@ fn traverse_public_item(cx: @mut ctx, item: @item) { fn traverse_ty<'a>(ty: @Ty, cx: @mut ctx<'a>, v: visit::vt<@mut ctx<'a>>) { { - let cx = &mut *cx; // NOTE reborrow @mut + let cx = &mut *cx; // FIXME(#6269) reborrow @mut to &mut if cx.rmap.contains(&ty.id) { return; } cx.rmap.insert(ty.id); } diff --git a/src/librustc/middle/typeck/check/mod.rs b/src/librustc/middle/typeck/check/mod.rs index 7e63db89edbcc..e171765ef6c4e 100644 --- a/src/librustc/middle/typeck/check/mod.rs +++ b/src/librustc/middle/typeck/check/mod.rs @@ -1301,12 +1301,11 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt, // Store the type of `f` as the type of the callee let fn_ty = fcx.expr_ty(f); - // NOTE here we write the callee type before regions have been - // substituted; in the method case, we write the type after - // regions have been substituted. Methods are correct, but it - // is awkward to deal with this now. Best thing would I think - // be to just have a separate "callee table" that contains the - // FnSig and not a general purpose ty::t + // FIXME(#6273) should write callee type AFTER regions have + // been subst'd. However, it is awkward to deal with this + // now. Best thing would I think be to just have a separate + // "callee table" that contains the FnSig and not a general + // purpose ty::t fcx.write_ty(call_expr.callee_id, fn_ty); // Extract the function signature from `in_fty`. diff --git a/src/librustc/middle/typeck/check/regionck.rs b/src/librustc/middle/typeck/check/regionck.rs index 03dd32353db6a..491c7fadb18bd 100644 --- a/src/librustc/middle/typeck/check/regionck.rs +++ b/src/librustc/middle/typeck/check/regionck.rs @@ -157,14 +157,17 @@ pub fn regionck_fn(fcx: @mut FnCtxt, blk: &ast::blk) { } fn regionck_visitor() -> rvt { + // FIXME(#3238) should use visit_pat, not visit_arm/visit_local, + // However, right now we run into an issue whereby some free + // regions are not properly related if they appear within the + // types of arguments that must be inferred. This could be + // addressed by deferring the construction of the region + // hierarchy, and in particular the relationships between free + // regions, until regionck, as described in #3238. visit::mk_vt(@visit::Visitor {visit_item: visit_item, visit_expr: visit_expr, - // NOTE this should be visit_pat - // but causes errors in formal - // arguments in closures due to - // #XYZ! - //visit_pat: visit_pat, + //visit_pat: visit_pat, // (*) see FIXME above visit_arm: visit_arm, visit_local: visit_local, @@ -294,7 +297,7 @@ fn visit_expr(expr: @ast::expr, rcx: @mut Rcx, v: rvt) { // Require that the resulting region encompasses // the current node. // - // FIXME(#5074) remove to support nested method calls + // FIXME(#6268) remove to support nested method calls constrain_regions_in_type_of_node( rcx, expr.id, ty::re_scope(expr.id), expr.span); } @@ -374,7 +377,7 @@ fn visit_expr(expr: @ast::expr, rcx: @mut Rcx, v: rvt) { // the type of the node expr.id here *before applying // adjustments*. // - // FIXME(#5074) nested method calls requires that this rule change + // FIXME(#6268) nested method calls requires that this rule change let ty0 = rcx.resolve_node_type(expr.id); constrain_regions_in_type(rcx, ty::re_scope(expr.id), expr.span, ty0); } @@ -462,7 +465,7 @@ fn constrain_call(rcx: @mut Rcx, // `callee_region` is the scope representing the time in which the // call occurs. // - // FIXME(#5074) to support nested method calls, should be callee_id + // FIXME(#6268) to support nested method calls, should be callee_id let callee_scope = call_expr.id; let callee_region = ty::re_scope(callee_scope); From 3cafe905a406a2645f8bc7a2a6d50f24817faa4a Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Mon, 29 Apr 2013 18:21:43 -0700 Subject: [PATCH 228/410] std: Workaround bustage on incoming. #6122 --- src/libstd/ebml.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libstd/ebml.rs b/src/libstd/ebml.rs index 8a4bc823fd881..27c7605eb0302 100644 --- a/src/libstd/ebml.rs +++ b/src/libstd/ebml.rs @@ -379,6 +379,7 @@ pub mod reader { fn read_int(&mut self) -> int { let v = doc_as_u64(self.next_doc(EsInt)) as i64; if v > (int::max_value as i64) || v < (int::min_value as i64) { + debug!("FIXME #6122: Removing this makes this function miscompile"); fail!(fmt!("int %? out of range for this architecture", v)); } v as int From de8071234f66b984bf5a2ce33ec9100cb3204ea2 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Fri, 3 May 2013 16:08:43 -0700 Subject: [PATCH 229/410] Move core::run tests of process killing into standalone run-pass tests These cause valgrind errors in subprocesses. I don't *think* these errors lead to actual test failures but they are very confusing. --- src/libcore/run.rs | 70 --------------------- src/test/run-pass/core-run-destroy.rs | 89 +++++++++++++++++++++++++++ 2 files changed, 89 insertions(+), 70 deletions(-) create mode 100644 src/test/run-pass/core-run-destroy.rs diff --git a/src/libcore/run.rs b/src/libcore/run.rs index 7e73b3a3f80be..55b6c5100dd4f 100644 --- a/src/libcore/run.rs +++ b/src/libcore/run.rs @@ -855,74 +855,4 @@ mod tests { fn waitpid_non_existant_pid() { run::waitpid(123456789); // assume that this pid doesn't exist } - - #[test] - fn test_destroy_once() { - let mut p = run::start_program("echo", []); - p.destroy(); // this shouldn't crash (and nor should the destructor) - } - - #[test] - fn test_destroy_twice() { - let mut p = run::start_program("echo", []); - p.destroy(); // this shouldnt crash... - p.destroy(); // ...and nor should this (and nor should the destructor) - } - - fn test_destroy_actually_kills(force: bool) { - - #[cfg(unix)] - static BLOCK_COMMAND: &'static str = "cat"; - - #[cfg(windows)] - static BLOCK_COMMAND: &'static str = "cmd"; - - #[cfg(unix)] - fn process_exists(pid: libc::pid_t) -> bool { - run::program_output("ps", [~"-p", pid.to_str()]).out.contains(pid.to_str()) - } - - #[cfg(windows)] - fn process_exists(pid: libc::pid_t) -> bool { - - use libc::types::os::arch::extra::DWORD; - use libc::funcs::extra::kernel32::{CloseHandle, GetExitCodeProcess, OpenProcess}; - use libc::consts::os::extra::{FALSE, PROCESS_QUERY_INFORMATION, STILL_ACTIVE }; - - unsafe { - let proc = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid as DWORD); - if proc.is_null() { - return false; - } - // proc will be non-null if the process is alive, or if it died recently - let mut status = 0; - GetExitCodeProcess(proc, &mut status); - CloseHandle(proc); - return status == STILL_ACTIVE; - } - } - - // this program will stay alive indefinitely trying to read from stdin - let mut p = run::start_program(BLOCK_COMMAND, []); - - assert!(process_exists(p.get_id())); - - if force { - p.force_destroy(); - } else { - p.destroy(); - } - - assert!(!process_exists(p.get_id())); - } - - #[test] - fn test_unforced_destroy_actually_kills() { - test_destroy_actually_kills(false); - } - - #[test] - fn test_forced_destroy_actually_kills() { - test_destroy_actually_kills(true); - } } diff --git a/src/test/run-pass/core-run-destroy.rs b/src/test/run-pass/core-run-destroy.rs new file mode 100644 index 0000000000000..a4f3f59f46baa --- /dev/null +++ b/src/test/run-pass/core-run-destroy.rs @@ -0,0 +1,89 @@ +// Copyright 2012-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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// xfail-fast +// compile-flags:--test + +// NB: These tests kill child processes. Valgrind sees these children as leaking +// memory, which makes for some *confusing* logs. That's why these are here +// instead of in core. + +use core::run; +use core::run::*; + +#[test] +fn test_destroy_once() { + let mut p = run::start_program("echo", []); + p.destroy(); // this shouldn't crash (and nor should the destructor) +} + +#[test] +fn test_destroy_twice() { + let mut p = run::start_program("echo", []); + p.destroy(); // this shouldnt crash... + p.destroy(); // ...and nor should this (and nor should the destructor) +} + +fn test_destroy_actually_kills(force: bool) { + + #[cfg(unix)] + static BLOCK_COMMAND: &'static str = "cat"; + + #[cfg(windows)] + static BLOCK_COMMAND: &'static str = "cmd"; + + #[cfg(unix)] + fn process_exists(pid: libc::pid_t) -> bool { + run::program_output("ps", [~"-p", pid.to_str()]).out.contains(pid.to_str()) + } + + #[cfg(windows)] + fn process_exists(pid: libc::pid_t) -> bool { + + use core::libc::types::os::arch::extra::DWORD; + use core::libc::funcs::extra::kernel32::{CloseHandle, GetExitCodeProcess, OpenProcess}; + use core::libc::consts::os::extra::{FALSE, PROCESS_QUERY_INFORMATION, STILL_ACTIVE }; + + unsafe { + let proc = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid as DWORD); + if proc.is_null() { + return false; + } + // proc will be non-null if the process is alive, or if it died recently + let mut status = 0; + GetExitCodeProcess(proc, &mut status); + CloseHandle(proc); + return status == STILL_ACTIVE; + } + } + + // this program will stay alive indefinitely trying to read from stdin + let mut p = run::start_program(BLOCK_COMMAND, []); + + assert!(process_exists(p.get_id())); + + if force { + p.force_destroy(); + } else { + p.destroy(); + } + + assert!(!process_exists(p.get_id())); +} + +#[test] +fn test_unforced_destroy_actually_kills() { + test_destroy_actually_kills(false); +} + +#[test] +fn test_forced_destroy_actually_kills() { + test_destroy_actually_kills(true); +} From 3d526d1af369472944b65e23c665a62c3254619d Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Sat, 4 May 2013 19:51:05 -0400 Subject: [PATCH 230/410] add task-local reference counted smart pointers To provide a reference counted pointer type with deterministic destruction once managed boxes are switched over to a garbage collector. Unlike managed boxes, these can be moved instead of just copied/cloned which is helpful for avoiding reference counts. --- src/libstd/rc.rs | 275 ++++++++++++++++++++++++++++++++++++++++++++++ src/libstd/std.rc | 1 + 2 files changed, 276 insertions(+) create mode 100644 src/libstd/rc.rs diff --git a/src/libstd/rc.rs b/src/libstd/rc.rs new file mode 100644 index 0000000000000..3eb480f9ea893 --- /dev/null +++ b/src/libstd/rc.rs @@ -0,0 +1,275 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +/** Task-local reference counted smart pointers + +Task-local reference counted smart pointers are an alternative to managed boxes with deterministic +destruction. They are restricted to containing `Owned` types in order to prevent cycles. + +*/ + +use core::libc::{c_void, size_t, malloc, free}; +use core::unstable::intrinsics; + +struct RcBox { + value: T, + count: uint +} + +/// Immutable reference counted pointer type +pub struct Rc { + priv ptr: *mut RcBox, + priv non_owned: Option<@()> // FIXME: #5601: replace with `#[non_owned]` +} + +pub impl<'self, T: Owned> Rc { + fn new(value: T) -> Rc { + unsafe { + let ptr = malloc(sys::size_of::>() as size_t) as *mut RcBox; + assert!(!ptr::is_null(ptr)); + intrinsics::move_val_init(&mut *ptr, RcBox{value: value, count: 1}); + Rc{ptr: ptr, non_owned: None} + } + } + + #[inline(always)] + fn borrow(&self) -> &'self T { + unsafe { cast::transmute_region(&(*self.ptr).value) } + } +} + +#[unsafe_destructor] +impl Drop for Rc { + fn finalize(&self) { + unsafe { + (*self.ptr).count -= 1; + if (*self.ptr).count == 0 { + let mut x = intrinsics::init(); + x <-> *self.ptr; + free(self.ptr as *c_void) + } + } + } +} + +impl Clone for Rc { + #[inline] + fn clone(&self) -> Rc { + unsafe { + (*self.ptr).count += 1; + Rc{ptr: self.ptr, non_owned: None} + } + } +} + +#[cfg(test)] +mod test_rc { + use super::*; + + #[test] + fn test_simple() { + let x = Rc::new(5); + assert_eq!(*x.borrow(), 5); + } + + #[test] + fn test_clone() { + let x = Rc::new(5); + let y = x.clone(); + assert_eq!(*x.borrow(), 5); + assert_eq!(*y.borrow(), 5); + } + + #[test] + fn test_destructor() { + let x = Rc::new(~5); + assert_eq!(**x.borrow(), 5); + } +} + +#[abi = "rust-intrinsic"] +extern "rust-intrinsic" mod rusti { + fn init() -> T; +} + +#[deriving(Eq)] +enum Borrow { + Mutable, + Immutable, + Nothing +} + +struct RcMutBox { + value: T, + count: uint, + borrow: Borrow +} + +/// Mutable reference counted pointer type +pub struct RcMut { + priv ptr: *mut RcMutBox, + priv non_owned: Option<@mut ()> // FIXME: #5601: replace with `#[non_owned]` and `#[non_const]` +} + +pub impl<'self, T: Owned> RcMut { + fn new(value: T) -> RcMut { + unsafe { + let ptr = malloc(sys::size_of::>() as size_t) as *mut RcMutBox; + assert!(!ptr::is_null(ptr)); + intrinsics::move_val_init(&mut *ptr, RcMutBox{value: value, count: 1, borrow: Nothing}); + RcMut{ptr: ptr, non_owned: None} + } + } + + /// Fails if there is already a mutable borrow of the box + #[inline] + fn with_borrow(&self, f: &fn(&T)) { + unsafe { + assert!((*self.ptr).borrow != Mutable); + let previous = (*self.ptr).borrow; + (*self.ptr).borrow = Immutable; + f(cast::transmute_region(&(*self.ptr).value)); + (*self.ptr).borrow = previous; + } + } + + /// Fails if there is already a mutable or immutable borrow of the box + #[inline] + fn with_mut_borrow(&self, f: &fn(&mut T)) { + unsafe { + assert!((*self.ptr).borrow == Nothing); + (*self.ptr).borrow = Mutable; + f(cast::transmute_mut_region(&mut (*self.ptr).value)); + (*self.ptr).borrow = Nothing; + } + } +} + +#[unsafe_destructor] +impl Drop for RcMut { + fn finalize(&self) { + unsafe { + (*self.ptr).count -= 1; + if (*self.ptr).count == 0 { + let mut x = rusti::init(); + x <-> *self.ptr; + free(self.ptr as *c_void) + } + } + } +} + +impl Clone for RcMut { + #[inline] + fn clone(&self) -> RcMut { + unsafe { + (*self.ptr).count += 1; + RcMut{ptr: self.ptr, non_owned: None} + } + } +} + +#[cfg(test)] +mod test_rc_mut { + use super::*; + + #[test] + fn borrow_many() { + let x = RcMut::new(5); + let y = x.clone(); + + do x.with_borrow |a| { + assert_eq!(*a, 5); + do y.with_borrow |b| { + assert_eq!(*b, 5); + do x.with_borrow |c| { + assert_eq!(*c, 5); + } + } + } + } + + #[test] + fn modify() { + let x = RcMut::new(5); + let y = x.clone(); + + do y.with_mut_borrow |a| { + assert_eq!(*a, 5); + *a = 6; + } + + do x.with_borrow |a| { + assert_eq!(*a, 6); + } + } + + #[test] + fn release_immutable() { + let x = RcMut::new(5); + do x.with_borrow |_| {} + do x.with_mut_borrow |_| {} + } + + #[test] + fn release_mutable() { + let x = RcMut::new(5); + do x.with_mut_borrow |_| {} + do x.with_borrow |_| {} + } + + #[test] + #[should_fail] + fn frozen() { + let x = RcMut::new(5); + let y = x.clone(); + + do x.with_borrow |_| { + do y.with_mut_borrow |_| { + } + } + } + + #[test] + #[should_fail] + fn mutable_dupe() { + let x = RcMut::new(5); + let y = x.clone(); + + do x.with_mut_borrow |_| { + do y.with_mut_borrow |_| { + } + } + } + + #[test] + #[should_fail] + fn mutable_freeze() { + let x = RcMut::new(5); + let y = x.clone(); + + do x.with_mut_borrow |_| { + do y.with_borrow |_| { + } + } + } + + #[test] + #[should_fail] + fn restore_freeze() { + let x = RcMut::new(5); + let y = x.clone(); + + do x.with_borrow |_| { + do x.with_borrow |_| {} + do y.with_mut_borrow |_| {} + } + } +} diff --git a/src/libstd/std.rc b/src/libstd/std.rc index 32c7c82a3127e..e208d7219d9bf 100644 --- a/src/libstd/std.rc +++ b/src/libstd/std.rc @@ -50,6 +50,7 @@ pub mod uv_global_loop; pub mod c_vec; pub mod timer; pub mod io_util; +pub mod rc; // Concurrency From d0827e3d36e14d07d1e6dde992c2d2053cb0a22b Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Mon, 6 May 2013 19:17:55 -0400 Subject: [PATCH 231/410] Add a test for issue 5517 --- src/test/run-pass/issue-5517.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 src/test/run-pass/issue-5517.rs diff --git a/src/test/run-pass/issue-5517.rs b/src/test/run-pass/issue-5517.rs new file mode 100644 index 0000000000000..b929dbf51d395 --- /dev/null +++ b/src/test/run-pass/issue-5517.rs @@ -0,0 +1,14 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +fn main() { + let box1 = @mut 42; + let _x = *(&mut *box1) == 42 || *(&mut *box1) == 31337; +} From 8b32bde408bb6fdf6fcf4e7c2727fff3a31dd8b1 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Mon, 6 May 2013 20:10:11 -0400 Subject: [PATCH 232/410] add rust_take_task_borrow_list and rust_set_task_borrow_list to rustrt.def.in --- src/rt/rustrt.def.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/rt/rustrt.def.in b/src/rt/rustrt.def.in index 3ca05b94711e8..1c3f6370deda4 100644 --- a/src/rt/rustrt.def.in +++ b/src/rt/rustrt.def.in @@ -233,3 +233,5 @@ rust_boxed_region_malloc rust_boxed_region_free rust_try rust_begin_unwind +rust_take_task_borrow_list +rust_set_task_borrow_list From ce45f390dd55fbd8ebaf1be07ad1b3b3bb5d2f4d Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Mon, 6 May 2013 20:14:54 -0400 Subject: [PATCH 233/410] Remove debug_mem since @graydon said it conflicted with GC changes --- src/libcore/cleanup.rs | 10 +--------- src/libcore/unstable/lang.rs | 22 +--------------------- 2 files changed, 2 insertions(+), 30 deletions(-) diff --git a/src/libcore/cleanup.rs b/src/libcore/cleanup.rs index 06f6185586d85..424cc3483092d 100644 --- a/src/libcore/cleanup.rs +++ b/src/libcore/cleanup.rs @@ -167,8 +167,7 @@ fn debug_mem() -> bool { #[cfg(notest)] #[lang="annihilate"] pub unsafe fn annihilate() { - use unstable::lang::{local_free}; - use unstable::lang; + use unstable::lang::local_free; use io::WriterUtil; use io; use libc; @@ -192,10 +191,8 @@ pub unsafe fn annihilate() { for each_live_alloc(true) |box, uniq| { stats.n_total_boxes += 1; if uniq { - lang::debug_mem("Managed-uniq: ", &*box); stats.n_unique_boxes += 1; } else { - lang::debug_mem("Immortalizing: ", &*box); (*box).header.ref_count = managed::raw::RC_IMMORTAL; } } @@ -207,13 +204,9 @@ pub unsafe fn annihilate() { // callback, as the original value may have been freed. for each_live_alloc(false) |box, uniq| { if !uniq { - lang::debug_mem("Invoking tydesc/glue on: ", &*box); let tydesc: *TypeDesc = transmute(copy (*box).header.type_desc); let drop_glue: DropGlue = transmute(((*tydesc).drop_glue, 0)); - lang::debug_mem("Box data: ", &(*box).data); - lang::debug_mem("Type descriptor: ", tydesc); drop_glue(to_unsafe_ptr(&tydesc), transmute(&(*box).data)); - lang::debug_mem("Dropped ", &*box); } } @@ -225,7 +218,6 @@ pub unsafe fn annihilate() { // not be valid after. for each_live_alloc(true) |box, uniq| { if !uniq { - lang::debug_mem("About to free: ", &*box); stats.n_bytes_freed += (*((*box).header.type_desc)).size + sys::size_of::(); diff --git a/src/libcore/unstable/lang.rs b/src/libcore/unstable/lang.rs index 934874968d716..8153c2d43d998 100644 --- a/src/libcore/unstable/lang.rs +++ b/src/libcore/unstable/lang.rs @@ -153,32 +153,13 @@ unsafe fn fail_borrowed(box: *mut BoxRepr, file: *c_char, line: size_t) { #[lang="exchange_malloc"] #[inline(always)] pub unsafe fn exchange_malloc(td: *c_char, size: uintptr_t) -> *c_char { - let result = transmute(exchange_alloc::malloc(transmute(td), transmute(size))); - debug_mem("exchange_malloc: ", result); - return result; + transmute(exchange_alloc::malloc(transmute(td), transmute(size))) } /// Because this code is so perf. sensitive, use a static constant so that /// debug printouts are compiled out most of the time. static ENABLE_DEBUG: bool = false; -#[inline] -pub fn debug_mem(tag: &'static str, p: *const T) { - //! A useful debugging function that prints a pointer + tag + newline - //! without allocating memory. - - if ENABLE_DEBUG && ::rt::env::get().debug_mem { - debug_mem_slow(tag, p); - } - - fn debug_mem_slow(tag: &'static str, p: *const T) { - let dbg = STDERR_FILENO as io::fd_t; - dbg.write_str(tag); - dbg.write_hex(p as uint); - dbg.write_str("\n"); - } -} - #[inline] unsafe fn debug_borrow(tag: &'static str, p: *const T, @@ -252,7 +233,6 @@ impl DebugPrints for io::fd_t { #[lang="exchange_free"] #[inline(always)] pub unsafe fn exchange_free(ptr: *c_char) { - debug_mem("exchange_free: ", ptr); exchange_alloc::free(transmute(ptr)) } From 39a119074aa27234a68bcf57899c8c4e015cd478 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Mon, 6 May 2013 20:27:59 -0400 Subject: [PATCH 234/410] appease the tidy gods with respect to a FIXME --- src/librustc/middle/typeck/check/regionck.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/librustc/middle/typeck/check/regionck.rs b/src/librustc/middle/typeck/check/regionck.rs index 491c7fadb18bd..6db6b7556aee4 100644 --- a/src/librustc/middle/typeck/check/regionck.rs +++ b/src/librustc/middle/typeck/check/regionck.rs @@ -157,7 +157,7 @@ pub fn regionck_fn(fcx: @mut FnCtxt, blk: &ast::blk) { } fn regionck_visitor() -> rvt { - // FIXME(#3238) should use visit_pat, not visit_arm/visit_local, + // (*) FIXME(#3238) should use visit_pat, not visit_arm/visit_local, // However, right now we run into an issue whereby some free // regions are not properly related if they appear within the // types of arguments that must be inferred. This could be @@ -167,7 +167,7 @@ fn regionck_visitor() -> rvt { visit::mk_vt(@visit::Visitor {visit_item: visit_item, visit_expr: visit_expr, - //visit_pat: visit_pat, // (*) see FIXME above + //visit_pat: visit_pat, // (*) see above visit_arm: visit_arm, visit_local: visit_local, From 4f436a8b85b7e8c54ba4402004dc5a27d389450b Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Mon, 6 May 2013 18:50:21 -0700 Subject: [PATCH 235/410] Enable test for #3707 --- src/test/compile-fail/issue-3707.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/test/compile-fail/issue-3707.rs b/src/test/compile-fail/issue-3707.rs index 2c8f94c4695b0..5e8230686d506 100644 --- a/src/test/compile-fail/issue-3707.rs +++ b/src/test/compile-fail/issue-3707.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// xfail-test struct Obj { member: uint } @@ -17,8 +16,8 @@ pub impl Obj { fn boom() -> bool { return 1+1 == 2 } - fn chirp() { - self.boom(); //~ ERROR wat + fn chirp(&self) { + self.boom(); //~ ERROR `&Obj` does not implement any method in scope named `boom` } } From ebe35f3873b0ad48d48b009a871843e583584379 Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Mon, 6 May 2013 23:29:54 -0400 Subject: [PATCH 236/410] remove borrowck workarounds from the containers --- src/libcore/hashmap.rs | 78 ++++++++++++++++++++++++++++++++++++++++-- src/libcore/trie.rs | 15 ++++++-- 2 files changed, 87 insertions(+), 6 deletions(-) diff --git a/src/libcore/hashmap.rs b/src/libcore/hashmap.rs index 9b01c1dad06e9..4ec2e911bf862 100644 --- a/src/libcore/hashmap.rs +++ b/src/libcore/hashmap.rs @@ -347,16 +347,27 @@ impl Map for HashMap { } /// Return a mutable reference to the value corresponding to the key + #[cfg(stage0)] fn find_mut<'a>(&'a mut self, k: &K) -> Option<&'a mut V> { let idx = match self.bucket_for_key(k) { FoundEntry(idx) => idx, TableFull | FoundHole(_) => return None }; - unsafe { // FIXME(#4903)---requires flow-sensitive borrow checker + unsafe { Some(::cast::transmute_mut_region(self.mut_value_for_bucket(idx))) } } + /// Return a mutable reference to the value corresponding to the key + #[cfg(not(stage0))] + fn find_mut<'a>(&'a mut self, k: &K) -> Option<&'a mut V> { + let idx = match self.bucket_for_key(k) { + FoundEntry(idx) => idx, + TableFull | FoundHole(_) => return None + }; + Some(self.mut_value_for_bucket(idx)) + } + /// Insert a key-value pair into the map. An existing value for a /// key is replaced by the new value. Return true if the key did /// not already exist in the map. @@ -429,6 +440,7 @@ pub impl HashMap { /// Return the value corresponding to the key in the map, or insert /// and return the value if it doesn't exist. + #[cfg(stage0)] fn find_or_insert<'a>(&'a mut self, k: K, v: V) -> &'a V { if self.size >= self.resize_at { // n.b.: We could also do this after searching, so @@ -452,13 +464,43 @@ pub impl HashMap { }, }; - unsafe { // FIXME(#4903)---requires flow-sensitive borrow checker + unsafe { ::cast::transmute_region(self.value_for_bucket(idx)) } } + /// Return the value corresponding to the key in the map, or insert + /// and return the value if it doesn't exist. + #[cfg(not(stage0))] + fn find_or_insert<'a>(&'a mut self, k: K, v: V) -> &'a V { + if self.size >= self.resize_at { + // n.b.: We could also do this after searching, so + // that we do not resize if this call to insert is + // simply going to update a key in place. My sense + // though is that it's worse to have to search through + // buckets to find the right spot twice than to just + // resize in this corner case. + self.expand(); + } + + let hash = k.hash_keyed(self.k0, self.k1) as uint; + let idx = match self.bucket_for_key_with_hash(hash, &k) { + TableFull => fail!(~"Internal logic error"), + FoundEntry(idx) => idx, + FoundHole(idx) => { + self.buckets[idx] = Some(Bucket{hash: hash, key: k, + value: v}); + self.size += 1; + idx + }, + }; + + self.value_for_bucket(idx) + } + /// Return the value corresponding to the key in the map, or create, /// insert, and return a new value if it doesn't exist. + #[cfg(stage0)] fn find_or_insert_with<'a>(&'a mut self, k: K, f: &fn(&K) -> V) -> &'a V { if self.size >= self.resize_at { // n.b.: We could also do this after searching, so @@ -483,11 +525,41 @@ pub impl HashMap { }, }; - unsafe { // FIXME(#4903)---requires flow-sensitive borrow checker + unsafe { ::cast::transmute_region(self.value_for_bucket(idx)) } } + /// Return the value corresponding to the key in the map, or create, + /// insert, and return a new value if it doesn't exist. + #[cfg(not(stage0))] + fn find_or_insert_with<'a>(&'a mut self, k: K, f: &fn(&K) -> V) -> &'a V { + if self.size >= self.resize_at { + // n.b.: We could also do this after searching, so + // that we do not resize if this call to insert is + // simply going to update a key in place. My sense + // though is that it's worse to have to search through + // buckets to find the right spot twice than to just + // resize in this corner case. + self.expand(); + } + + let hash = k.hash_keyed(self.k0, self.k1) as uint; + let idx = match self.bucket_for_key_with_hash(hash, &k) { + TableFull => fail!(~"Internal logic error"), + FoundEntry(idx) => idx, + FoundHole(idx) => { + let v = f(&k); + self.buckets[idx] = Some(Bucket{hash: hash, key: k, + value: v}); + self.size += 1; + idx + }, + }; + + self.value_for_bucket(idx) + } + fn consume(&mut self, f: &fn(K, V)) { let mut buckets = ~[]; self.buckets <-> buckets; diff --git a/src/libcore/trie.rs b/src/libcore/trie.rs index f0756be994432..f6cd898e08afc 100644 --- a/src/libcore/trie.rs +++ b/src/libcore/trie.rs @@ -276,9 +276,9 @@ fn chunk(n: uint, idx: uint) -> uint { (n >> sh) & MASK } -fn find_mut<'r, T>(child: &'r mut Child, key: uint, idx: uint) - -> Option<&'r mut T> { - unsafe { // FIXME(#4903)---requires flow-sensitive borrow checker +#[cfg(stage0)] +fn find_mut<'r, T>(child: &'r mut Child, key: uint, idx: uint) -> Option<&'r mut T> { + unsafe { (match *child { External(_, ref value) => Some(cast::transmute_mut(value)), Internal(ref x) => find_mut(cast::transmute_mut(&x.children[chunk(key, idx)]), @@ -288,6 +288,15 @@ fn find_mut<'r, T>(child: &'r mut Child, key: uint, idx: uint) } } +#[cfg(not(stage0))] +fn find_mut<'r, T>(child: &'r mut Child, key: uint, idx: uint) -> Option<&'r mut T> { + match *child { + External(_, ref mut value) => Some(value), + Internal(ref mut x) => find_mut(&mut x.children[chunk(key, idx)], key, idx + 1), + Nothing => None + } +} + fn insert(count: &mut uint, child: &mut Child, key: uint, value: T, idx: uint) -> bool { let mut tmp = Nothing; From d800147abba010328c00e7518073085ed6ceb133 Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Mon, 6 May 2013 21:09:34 -0400 Subject: [PATCH 237/410] minor automatic whitespace fixes --- mk/install.mk | 8 ++++---- mk/tests.mk | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/mk/install.mk b/mk/install.mk index 5fa477a790d4f..47fcb224a7348 100644 --- a/mk/install.mk +++ b/mk/install.mk @@ -192,9 +192,9 @@ ifeq ($(CFG_ADB_DEVICE_STATUS),true) ifdef VERBOSE ADB = adb $(1) ADB_PUSH = adb push $(1) $(2) - ADB_SHELL = adb shell $(1) $(2) + ADB_SHELL = adb shell $(1) $(2) else - ADB = $(Q)$(call E, adb $(1)) && adb $(1) 1>/dev/null + ADB = $(Q)$(call E, adb $(1)) && adb $(1) 1>/dev/null ADB_PUSH = $(Q)$(call E, adb push $(1)) && adb push $(1) $(2) 1>/dev/null ADB_SHELL = $(Q)$(call E, adb shell $(1) $(2)) && adb shell $(1) $(2) 1>/dev/null endif @@ -222,8 +222,8 @@ install-runtime-target: \ install-runtime-target-arm-linux-androideabi-cleanup \ install-runtime-target-arm-linux-androideabi-host-$(CFG_BUILD_TRIPLE) else -install-runtime-target: +install-runtime-target: @echo "No device to install runtime library" - @echo + @echo endif endif diff --git a/mk/tests.mk b/mk/tests.mk index a04ec3e651403..8ac2ad68e3ab8 100644 --- a/mk/tests.mk +++ b/mk/tests.mk @@ -92,7 +92,7 @@ endef $(foreach target,$(CFG_TARGET_TRIPLES), \ $(eval $(call DEF_TARGET_COMMANDS,$(target)))) -# Target platform specific variables +# Target platform specific variables # for arm-linux-androidabi define DEF_ADB_DEVICE_STATUS CFG_ADB_DEVICE_STATUS=$(1) @@ -402,7 +402,7 @@ $(foreach host,$(CFG_HOST_TRIPLES), \ $(eval $(call DEF_TEST_CRATE_RULES_null,$(stage),$(target),$(host),$(crate))) \ ), \ $(eval $(call DEF_TEST_CRATE_RULES,$(stage),$(target),$(host),$(crate))) \ - )))))) + )))))) ###################################################################### From dfe608dc9949f913985bc8cfd8aedfe61b57d1d6 Mon Sep 17 00:00:00 2001 From: Youngsoo Son Date: Tue, 7 May 2013 14:07:56 +0900 Subject: [PATCH 238/410] renamed tests --- src/libcore/vec.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs index ced3c300a359a..4c1a329e8e03d 100644 --- a/src/libcore/vec.rs +++ b/src/libcore/vec.rs @@ -3304,7 +3304,7 @@ mod tests { } #[test] - fn test_iter_nonempty() { + fn test_each_nonempty() { let mut i = 0; for each(~[1, 2, 3]) |v| { i += *v; @@ -3313,7 +3313,7 @@ mod tests { } #[test] - fn test_iteri() { + fn test_eachi() { let mut i = 0; for eachi(~[1, 2, 3]) |j, v| { if i == 0 { assert!(*v == 1); } From 393a409b5d418be30f4e959cce74daacad112f75 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Sat, 4 May 2013 09:54:58 -0400 Subject: [PATCH 239/410] Add pop() and swap() to the Map trait --- src/libcore/container.rs | 8 ++ src/libcore/hashmap.rs | 65 +++++++--------- src/libcore/trie.rs | 75 +++++++++++++----- src/libstd/smallintmap.rs | 40 +++++++++- src/libstd/treemap.rs | 78 +++++++++++++------ .../class-impl-very-parameterized-trait.rs | 4 + 6 files changed, 187 insertions(+), 83 deletions(-) diff --git a/src/libcore/container.rs b/src/libcore/container.rs index 00ea4a9322111..37b904bbe6327 100644 --- a/src/libcore/container.rs +++ b/src/libcore/container.rs @@ -55,6 +55,14 @@ pub trait Map: Mutable { /// Remove a key-value pair from the map. Return true if the key /// was present in the map, otherwise false. fn remove(&mut self, key: &K) -> bool; + + /// Insert a key-value pair from the map. If the key already had a value + /// present in the map, that value is returned. Otherwise None is returned. + fn swap(&mut self, k: K, v: V) -> Option; + + /// Removes a key from the map, returning the value at the key if the key + /// was previously in the map. + fn pop(&mut self, k: &K) -> Option; } pub trait Set: Mutable { diff --git a/src/libcore/hashmap.rs b/src/libcore/hashmap.rs index 9b01c1dad06e9..33fdc98137e8d 100644 --- a/src/libcore/hashmap.rs +++ b/src/libcore/hashmap.rs @@ -24,8 +24,8 @@ use rand::RngUtil; use rand; use uint; use vec; -use util::unreachable; use kinds::Copy; +use util::{replace, unreachable}; static INITIAL_CAPACITY: uint = 32u; // 2^5 @@ -204,7 +204,7 @@ priv impl HashMap { /// Inserts the key value pair into the buckets. /// Assumes that there will be a bucket. /// True if there was no previous entry with that key - fn insert_internal(&mut self, hash: uint, k: K, v: V) -> bool { + fn insert_internal(&mut self, hash: uint, k: K, v: V) -> Option { match self.bucket_for_key_with_hash(hash, &k) { TableFull => { fail!(~"Internal logic error"); } FoundHole(idx) => { @@ -213,14 +213,19 @@ priv impl HashMap { self.buckets[idx] = Some(Bucket{hash: hash, key: k, value: v}); self.size += 1; - true + None } FoundEntry(idx) => { debug!("insert overwrite (%?->%?) at idx %?, hash %?", k, v, idx, hash); - self.buckets[idx] = Some(Bucket{hash: hash, key: k, - value: v}); - false + match self.buckets[idx] { + None => { fail!(~"insert_internal: Internal logic error") } + Some(ref mut b) => { + b.hash = hash; + b.key = k; + Some(replace(&mut b.value, v)) + } + } } } } @@ -361,6 +366,20 @@ impl Map for HashMap { /// key is replaced by the new value. Return true if the key did /// not already exist in the map. fn insert(&mut self, k: K, v: V) -> bool { + self.swap(k, v).is_none() + } + + /// Remove a key-value pair from the map. Return true if the key + /// was present in the map, otherwise false. + fn remove(&mut self, k: &K) -> bool { + self.pop(k).is_some() + } + + /// Insert a key-value pair from the map. If the key already had a value + /// present in the map, that value is returned. Otherwise None is returned. + fn swap(&mut self, k: K, v: V) -> Option { + // this could be faster. + if self.size >= self.resize_at { // n.b.: We could also do this after searching, so // that we do not resize if this call to insert is @@ -375,10 +394,11 @@ impl Map for HashMap { self.insert_internal(hash, k, v) } - /// Remove a key-value pair from the map. Return true if the key - /// was present in the map, otherwise false. - fn remove(&mut self, k: &K) -> bool { - self.pop(k).is_some() + /// Removes a key from the map, returning the value at the key if the key + /// was previously in the map. + fn pop(&mut self, k: &K) -> Option { + let hash = k.hash_keyed(self.k0, self.k1) as uint; + self.pop_internal(hash, k) } } @@ -402,31 +422,6 @@ pub impl HashMap { } } - fn pop(&mut self, k: &K) -> Option { - let hash = k.hash_keyed(self.k0, self.k1) as uint; - self.pop_internal(hash, k) - } - - fn swap(&mut self, k: K, v: V) -> Option { - // this could be faster. - let hash = k.hash_keyed(self.k0, self.k1) as uint; - let old_value = self.pop_internal(hash, &k); - - if self.size >= self.resize_at { - // n.b.: We could also do this after searching, so - // that we do not resize if this call to insert is - // simply going to update a key in place. My sense - // though is that it's worse to have to search through - // buckets to find the right spot twice than to just - // resize in this corner case. - self.expand(); - } - - self.insert_internal(hash, k, v); - - old_value - } - /// Return the value corresponding to the key in the map, or insert /// and return the value if it doesn't exist. fn find_or_insert<'a>(&'a mut self, k: K, v: V) -> &'a V { diff --git a/src/libcore/trie.rs b/src/libcore/trie.rs index f0756be994432..380ad11ae9245 100644 --- a/src/libcore/trie.rs +++ b/src/libcore/trie.rs @@ -11,6 +11,7 @@ //! An ordered map and set for integer keys implemented as a radix trie use prelude::*; +use util::{swap, replace}; // FIXME: #5244: need to manually update the TrieNode constructor static SHIFT: uint = 4; @@ -110,21 +111,33 @@ impl Map for TrieMap { /// not already exist in the map. #[inline(always)] fn insert(&mut self, key: uint, value: T) -> bool { - let ret = insert(&mut self.root.count, - &mut self.root.children[chunk(key, 0)], - key, value, 1); - if ret { self.length += 1 } - ret + self.swap(key, value).is_none() } /// Remove a key-value pair from the map. Return true if the key /// was present in the map, otherwise false. #[inline(always)] fn remove(&mut self, key: &uint) -> bool { + self.pop(key).is_some() + } + + /// Insert a key-value pair from the map. If the key already had a value + /// present in the map, that value is returned. Otherwise None is returned. + fn swap(&mut self, key: uint, value: T) -> Option { + let ret = insert(&mut self.root.count, + &mut self.root.children[chunk(key, 0)], + key, value, 1); + if ret.is_none() { self.length += 1 } + ret + } + + /// Removes a key from the map, returning the value at the key if the key + /// was previously in the map. + fn pop(&mut self, key: &uint) -> Option { let ret = remove(&mut self.root.count, &mut self.root.children[chunk(*key, 0)], *key, 1); - if ret { self.length -= 1 } + if ret.is_some() { self.length -= 1 } ret } } @@ -289,14 +302,15 @@ fn find_mut<'r, T>(child: &'r mut Child, key: uint, idx: uint) } fn insert(count: &mut uint, child: &mut Child, key: uint, value: T, - idx: uint) -> bool { + idx: uint) -> Option { let mut tmp = Nothing; - tmp <-> *child; - let mut added = false; + let ret; + swap(&mut tmp, child); *child = match tmp { External(stored_key, stored_value) => { if stored_key == key { + ret = Some(stored_value); External(stored_key, value) } else { // conflict - split the node @@ -304,46 +318,49 @@ fn insert(count: &mut uint, child: &mut Child, key: uint, value: T, insert(&mut new.count, &mut new.children[chunk(stored_key, idx)], stored_key, stored_value, idx + 1); - insert(&mut new.count, &mut new.children[chunk(key, idx)], key, - value, idx + 1); - added = true; + ret = insert(&mut new.count, &mut new.children[chunk(key, idx)], + key, value, idx + 1); Internal(new) } } Internal(x) => { let mut x = x; - added = insert(&mut x.count, &mut x.children[chunk(key, idx)], key, - value, idx + 1); + ret = insert(&mut x.count, &mut x.children[chunk(key, idx)], key, + value, idx + 1); Internal(x) } Nothing => { *count += 1; - added = true; + ret = None; External(key, value) } }; - added + return ret; } fn remove(count: &mut uint, child: &mut Child, key: uint, - idx: uint) -> bool { + idx: uint) -> Option { let (ret, this) = match *child { - External(stored, _) => { - if stored == key { (true, true) } else { (false, false) } + External(stored, _) if stored == key => { + match replace(child, Nothing) { + External(_, value) => (Some(value), true), + _ => fail!() + } } + External(*) => (None, false), Internal(ref mut x) => { let ret = remove(&mut x.count, &mut x.children[chunk(key, idx)], key, idx + 1); (ret, x.count == 0) } - Nothing => (false, false) + Nothing => (None, false) }; if this { *child = Nothing; *count -= 1; } - ret + return ret; } #[cfg(test)] @@ -516,4 +533,20 @@ mod tests { i += 1; } } + + #[test] + fn test_swap() { + let mut m = TrieMap::new(); + assert!(m.swap(1, 2) == None); + assert!(m.swap(1, 3) == Some(2)); + assert!(m.swap(1, 4) == Some(3)); + } + + #[test] + fn test_pop() { + let mut m = TrieMap::new(); + m.insert(1, 2); + assert!(m.pop(&1) == Some(2)); + assert!(m.pop(&1) == None); + } } diff --git a/src/libstd/smallintmap.rs b/src/libstd/smallintmap.rs index 1b72300a178ba..fc83a39cacf9a 100644 --- a/src/libstd/smallintmap.rs +++ b/src/libstd/smallintmap.rs @@ -16,6 +16,7 @@ use core::container::{Container, Mutable, Map, Set}; use core::old_iter::{BaseIter}; use core::option::{Some, None}; +use core::util::replace; pub struct SmallIntMap { priv v: ~[Option], @@ -119,12 +120,27 @@ impl Map for SmallIntMap { /// Remove a key-value pair from the map. Return true if the key /// was present in the map, otherwise false. fn remove(&mut self, key: &uint) -> bool { + self.pop(key).is_some() + } + + /// Insert a key-value pair from the map. If the key already had a value + /// present in the map, that value is returned. Otherwise None is returned. + fn swap(&mut self, key: uint, value: V) -> Option { + match self.find_mut(&key) { + Some(loc) => { return Some(replace(loc, value)); } + None => () + } + self.insert(key, value); + return None; + } + + /// Removes a key from the map, returning the value at the key if the key + /// was previously in the map. + fn pop(&mut self, key: &uint) -> Option { if *key >= self.v.len() { - return false; + return None; } - let removed = self.v[*key].is_some(); - self.v[*key] = None; - removed + replace(&mut self.v[*key], None) } } @@ -237,4 +253,20 @@ mod tests { // sadly, no sevens were counted assert!(map.find(&7).is_none()); } + + #[test] + fn test_swap() { + let mut m = SmallIntMap::new(); + assert!(m.swap(1, 2) == None); + assert!(m.swap(1, 3) == Some(2)); + assert!(m.swap(1, 4) == Some(3)); + } + + #[test] + fn test_pop() { + let mut m = SmallIntMap::new(); + m.insert(1, 2); + assert!(m.pop(&1) == Some(2)); + assert!(m.pop(&1) == None); + } } diff --git a/src/libstd/treemap.rs b/src/libstd/treemap.rs index 51695f2fa7d28..c8ab48e65c065 100644 --- a/src/libstd/treemap.rs +++ b/src/libstd/treemap.rs @@ -13,6 +13,7 @@ //! `TotalOrd`. use core::iterator::*; +use core::util::replace; // This is implemented as an AA tree, which is a simplified variation of // a red-black tree where where red (horizontal) nodes can only be added @@ -150,16 +151,28 @@ impl Map for TreeMap { /// key is replaced by the new value. Return true if the key did /// not already exist in the map. fn insert(&mut self, key: K, value: V) -> bool { - let ret = insert(&mut self.root, key, value); - if ret { self.length += 1 } - ret + self.swap(key, value).is_none() } /// Remove a key-value pair from the map. Return true if the key /// was present in the map, otherwise false. fn remove(&mut self, key: &K) -> bool { + self.pop(key).is_some() + } + + /// Insert a key-value pair from the map. If the key already had a value + /// present in the map, that value is returned. Otherwise None is returned. + fn swap(&mut self, key: K, value: V) -> Option { + let ret = insert(&mut self.root, key, value); + if ret.is_none() { self.length += 1 } + ret + } + + /// Removes a key from the map, returning the value at the key if the key + /// was previously in the map. + fn pop(&mut self, key: &K) -> Option { let ret = remove(&mut self.root, key); - if ret { self.length -= 1 } + if ret.is_some() { self.length -= 1 } ret } } @@ -581,7 +594,8 @@ fn find_mut<'r, K: TotalOrd, V>(node: &'r mut Option<~TreeNode>, } } -fn insert(node: &mut Option<~TreeNode>, key: K, value: V) -> bool { +fn insert(node: &mut Option<~TreeNode>, + key: K, value: V) -> Option { match *node { Some(ref mut save) => { match key.cmp(&save.key) { @@ -599,20 +613,19 @@ fn insert(node: &mut Option<~TreeNode>, key: K, value: V) } Equal => { save.key = key; - save.value = value; - false + Some(replace(&mut save.value, value)) } } } None => { *node = Some(~TreeNode::new(key, value)); - true + None } } } fn remove(node: &mut Option<~TreeNode>, - key: &K) -> bool { + key: &K) -> Option { fn heir_swap(node: &mut ~TreeNode, child: &mut Option<~TreeNode>) { // *could* be done without recursion, but it won't borrow check @@ -628,12 +641,12 @@ fn remove(node: &mut Option<~TreeNode>, match *node { None => { - return false // bottom of tree + return None; // bottom of tree } Some(ref mut save) => { - let (removed, this) = match key.cmp(&save.key) { - Less => (remove(&mut save.left, key), false), - Greater => (remove(&mut save.right, key), false), + let (ret, rebalance) = match key.cmp(&save.key) { + Less => (remove(&mut save.left, key), true), + Greater => (remove(&mut save.right, key), true), Equal => { if save.left.is_some() { if save.right.is_some() { @@ -645,21 +658,24 @@ fn remove(node: &mut Option<~TreeNode>, save.value <-> left.value; } save.left = Some(left); - remove(&mut save.left, key); + (remove(&mut save.left, key), true) } else { + let new = save.left.swap_unwrap(); + let ~TreeNode{value, _} = replace(save, new); *save = save.left.swap_unwrap(); + (Some(value), true) } - (true, false) } else if save.right.is_some() { - *save = save.right.swap_unwrap(); - (true, false) + let new = save.right.swap_unwrap(); + let ~TreeNode{value, _} = replace(save, new); + (Some(value), true) } else { - (true, true) + (None, false) } } }; - if !this { + if rebalance { let left_level = save.left.map_default(0, |x| x.level); let right_level = save.right.map_default(0, |x| x.level); @@ -682,13 +698,13 @@ fn remove(node: &mut Option<~TreeNode>, for save.right.each_mut |x| { split(x) } } - return removed; + return ret; } } } - - *node = None; - true + return match replace(node, None) { + Some(~TreeNode{value, _}) => Some(value), None => fail!() + }; } #[cfg(test)] @@ -1217,4 +1233,20 @@ mod test_set { let result: Option<(&uint, & &'static str)> = z.next(); assert!(result.is_none()); } + + #[test] + fn test_swap() { + let mut m = TreeMap::new(); + assert!(m.swap(1, 2) == None); + assert!(m.swap(1, 3) == Some(2)); + assert!(m.swap(1, 4) == Some(3)); + } + + #[test] + fn test_pop() { + let mut m = TreeMap::new(); + m.insert(1, 2); + assert!(m.pop(&1) == Some(2)); + assert!(m.pop(&1) == None); + } } diff --git a/src/test/run-pass/class-impl-very-parameterized-trait.rs b/src/test/run-pass/class-impl-very-parameterized-trait.rs index cf887758bff7d..b89bf06409274 100644 --- a/src/test/run-pass/class-impl-very-parameterized-trait.rs +++ b/src/test/run-pass/class-impl-very-parameterized-trait.rs @@ -103,6 +103,10 @@ impl Map for cat { false } } + + fn pop(&mut self, _k: &int) -> Option { fail!() } + + fn swap(&mut self, _k: int, _v: T) -> Option { fail!() } } pub impl cat { From db38ab9ad9dd5f5f2407129c44eb06e94fa7974b Mon Sep 17 00:00:00 2001 From: Young-il Choi Date: Tue, 7 May 2013 15:26:55 +0900 Subject: [PATCH 240/410] mk: rt.mk regression patch for mingw32 after #6176 --- mk/rt.mk | 2 -- 1 file changed, 2 deletions(-) diff --git a/mk/rt.mk b/mk/rt.mk index 30dda2fb276c9..ab91dca62182c 100644 --- a/mk/rt.mk +++ b/mk/rt.mk @@ -163,8 +163,6 @@ endif ifdef CFG_WINDOWSY_$(1) $$(LIBUV_LIB_$(1)): $$(LIBUV_DEPS) $$(Q)$$(MAKE) -C $$(S)src/libuv/ \ - CFLAGS="$$(CFG_GCCISH_CFLAGS)" \ - LDFLAGS="$$(CFG_GCCISH_LINK_FLAGS)" \ builddir_name="$$(CFG_BUILD_DIR)/rt/$(1)/libuv" \ OS=mingw \ V=$$(VERBOSE) From 930908aa90af3635af3744b08bf2aaaee4e3b381 Mon Sep 17 00:00:00 2001 From: Young-il Choi Date: Tue, 7 May 2013 15:29:05 +0900 Subject: [PATCH 241/410] mk: target.mk host.mk fix for duplicated rules of mingw32 after #6235 --- mk/host.mk | 2 ++ mk/target.mk | 2 ++ 2 files changed, 4 insertions(+) diff --git a/mk/host.mk b/mk/host.mk index 0c00a7e1d6469..92c6ffbbe172f 100644 --- a/mk/host.mk +++ b/mk/host.mk @@ -130,8 +130,10 @@ $$(HLIB$(2)_H_$(4))/$(CFG_RUSTLLVM_$(4)): \ $$(HBIN$(2)_H_$(4))/: mkdir -p $$@ +ifneq ($(CFG_LIBDIR),bin) $$(HLIB$(2)_H_$(4))/: mkdir -p $$@ +endif endef diff --git a/mk/target.mk b/mk/target.mk index 2223531c3ec5e..3cecc3940e62f 100644 --- a/mk/target.mk +++ b/mk/target.mk @@ -86,8 +86,10 @@ endif $$(TBIN$(1)_T_$(2)_H_$(3))/: mkdir -p $$@ +ifneq ($(CFG_LIBDIR),bin) $$(TLIB$(1)_T_$(2)_H_$(3))/: mkdir -p $$@ +endif endef From 7455f986a8cbf2ee628cf0fb4c164012e9a06031 Mon Sep 17 00:00:00 2001 From: Sangeun Kim Date: Tue, 7 May 2013 16:28:58 +0900 Subject: [PATCH 242/410] Make lint_table static --- src/librustc/middle/lint.rs | 289 ++++++++++++++++++------------------ 1 file changed, 145 insertions(+), 144 deletions(-) diff --git a/src/librustc/middle/lint.rs b/src/librustc/middle/lint.rs index 265d6b0c7677c..aad64d2ffe368 100644 --- a/src/librustc/middle/lint.rs +++ b/src/librustc/middle/lint.rs @@ -90,156 +90,157 @@ struct LintSpec { pub type LintDict = @HashMap<~str, LintSpec>; +static lint_table: &'static [(&'static str, LintSpec)] = &[ + ("ctypes", + LintSpec { + lint: ctypes, + desc: "proper use of core::libc types in foreign modules", + default: warn + }), + + ("unused_imports", + LintSpec { + lint: unused_imports, + desc: "imports that are never used", + default: warn + }), + + ("while_true", + LintSpec { + lint: while_true, + desc: "suggest using loop { } instead of while(true) { }", + default: warn + }), + + ("path_statement", + LintSpec { + lint: path_statement, + desc: "path statements with no effect", + default: warn + }), + + ("unrecognized_lint", + LintSpec { + lint: unrecognized_lint, + desc: "unrecognized lint attribute", + default: warn + }), + + ("non_implicitly_copyable_typarams", + LintSpec { + lint: non_implicitly_copyable_typarams, + desc: "passing non implicitly copyable types as copy type params", + default: warn + }), + + ("vecs_implicitly_copyable", + LintSpec { + lint: vecs_implicitly_copyable, + desc: "make vecs and strs not implicitly copyable \ + (only checked at top level)", + default: warn + }), + + ("implicit_copies", + LintSpec { + lint: implicit_copies, + desc: "implicit copies of non implicitly copyable data", + default: warn + }), + + ("deprecated_pattern", + LintSpec { + lint: deprecated_pattern, + desc: "warn about deprecated uses of pattern bindings", + default: allow + }), + + ("non_camel_case_types", + LintSpec { + lint: non_camel_case_types, + desc: "types, variants and traits should have camel case names", + default: allow + }), + + ("managed_heap_memory", + LintSpec { + lint: managed_heap_memory, + desc: "use of managed (@ type) heap memory", + default: allow + }), + + ("owned_heap_memory", + LintSpec { + lint: owned_heap_memory, + desc: "use of owned (~ type) heap memory", + default: allow + }), + + ("heap_memory", + LintSpec { + lint: heap_memory, + desc: "use of any (~ type or @ type) heap memory", + default: allow + }), + + ("type_limits", + LintSpec { + lint: type_limits, + desc: "comparisons made useless by limits of the types involved", + default: warn + }), + + ("default_methods", + LintSpec { + lint: default_methods, + desc: "allow default methods", + default: deny + }), + + ("deprecated_mutable_fields", + LintSpec { + lint: deprecated_mutable_fields, + desc: "deprecated mutable fields in structures", + default: deny + }), + + ("unused_unsafe", + LintSpec { + lint: unused_unsafe, + desc: "unnecessary use of an `unsafe` block", + default: warn + }), + + ("unused_variable", + LintSpec { + lint: unused_variable, + desc: "detect variables which are not used in any way", + default: warn + }), + + ("dead_assignment", + LintSpec { + lint: dead_assignment, + desc: "detect assignments that will never be read", + default: warn + }), + + ("unused_mut", + LintSpec { + lint: unused_mut, + desc: "detect mut variables which don't need to be mutable", + default: warn + }), +]; + /* Pass names should not contain a '-', as the compiler normalizes '-' to '_' in command-line flags */ pub fn get_lint_dict() -> LintDict { - let v = ~[ - (~"ctypes", - LintSpec { - lint: ctypes, - desc: "proper use of core::libc types in foreign modules", - default: warn - }), - - (~"unused_imports", - LintSpec { - lint: unused_imports, - desc: "imports that are never used", - default: warn - }), - - (~"while_true", - LintSpec { - lint: while_true, - desc: "suggest using loop { } instead of while(true) { }", - default: warn - }), - - (~"path_statement", - LintSpec { - lint: path_statement, - desc: "path statements with no effect", - default: warn - }), - - (~"unrecognized_lint", - LintSpec { - lint: unrecognized_lint, - desc: "unrecognized lint attribute", - default: warn - }), - - (~"non_implicitly_copyable_typarams", - LintSpec { - lint: non_implicitly_copyable_typarams, - desc: "passing non implicitly copyable types as copy type params", - default: warn - }), - - (~"vecs_implicitly_copyable", - LintSpec { - lint: vecs_implicitly_copyable, - desc: "make vecs and strs not implicitly copyable \ - (only checked at top level)", - default: warn - }), - - (~"implicit_copies", - LintSpec { - lint: implicit_copies, - desc: "implicit copies of non implicitly copyable data", - default: warn - }), - - (~"deprecated_pattern", - LintSpec { - lint: deprecated_pattern, - desc: "warn about deprecated uses of pattern bindings", - default: allow - }), - - (~"non_camel_case_types", - LintSpec { - lint: non_camel_case_types, - desc: "types, variants and traits should have camel case names", - default: allow - }), - - (~"managed_heap_memory", - LintSpec { - lint: managed_heap_memory, - desc: "use of managed (@ type) heap memory", - default: allow - }), - - (~"owned_heap_memory", - LintSpec { - lint: owned_heap_memory, - desc: "use of owned (~ type) heap memory", - default: allow - }), - - (~"heap_memory", - LintSpec { - lint: heap_memory, - desc: "use of any (~ type or @ type) heap memory", - default: allow - }), - - (~"type_limits", - LintSpec { - lint: type_limits, - desc: "comparisons made useless by limits of the types involved", - default: warn - }), - - (~"default_methods", - LintSpec { - lint: default_methods, - desc: "allow default methods", - default: deny - }), - - (~"deprecated_mutable_fields", - LintSpec { - lint: deprecated_mutable_fields, - desc: "deprecated mutable fields in structures", - default: deny - }), - - (~"unused_unsafe", - LintSpec { - lint: unused_unsafe, - desc: "unnecessary use of an `unsafe` block", - default: warn - }), - - (~"unused_variable", - LintSpec { - lint: unused_variable, - desc: "detect variables which are not used in any way", - default: warn - }), - - (~"dead_assignment", - LintSpec { - lint: dead_assignment, - desc: "detect assignments that will never be read", - default: warn - }), - - (~"unused_mut", - LintSpec { - lint: unused_mut, - desc: "detect mut variables which don't need to be mutable", - default: warn - }), - ]; let mut map = HashMap::new(); - do vec::consume(v) |_, (k, v)| { - map.insert(k, v); + for lint_table.each() |&(k, v)| { + map.insert(k.to_str(), v); } return @map; } From 9b09dce3e1a9935bbe443a976e47ed9f71227883 Mon Sep 17 00:00:00 2001 From: Brendan Zabarauskas Date: Tue, 7 May 2013 03:09:09 +1000 Subject: [PATCH 243/410] Switch to using 'ln' for the natural logarithm and 'log' for arbitrary base logarithms --- src/libcore/num/f32.rs | 26 ++++++++++++++------------ src/libcore/num/f64.rs | 26 ++++++++++++++------------ src/libcore/num/float.rs | 26 +++++++++++++++++--------- src/libcore/num/num.rs | 7 ++++--- 4 files changed, 49 insertions(+), 36 deletions(-) diff --git a/src/libcore/num/f32.rs b/src/libcore/num/f32.rs index 7c13f136a80f2..8a0b6567898e0 100644 --- a/src/libcore/num/f32.rs +++ b/src/libcore/num/f32.rs @@ -195,11 +195,6 @@ pub mod consts { pub static ln_10: f32 = 2.30258509299404568401799145468436421_f32; } -#[inline(always)] -pub fn logarithm(n: f32, b: f32) -> f32 { - return log2(n) / log2(b); -} - impl Num for f32 {} #[cfg(notest)] @@ -422,12 +417,19 @@ impl Exponential for f32 { #[inline(always)] fn expm1(&self) -> f32 { expm1(*self) } + /// Returns the natural logarithm of the number #[inline(always)] - fn log(&self) -> f32 { ln(*self) } + fn ln(&self) -> f32 { ln(*self) } + /// Returns the logarithm of the number with respect to an arbitrary base + #[inline(always)] + fn log(&self, base: f32) -> f32 { self.ln() / base.ln() } + + /// Returns the base 2 logarithm of the number #[inline(always)] fn log2(&self) -> f32 { log2(*self) } + /// Returns the base 10 logarithm of the number #[inline(always)] fn log10(&self) -> f32 { log10(*self) } } @@ -504,13 +506,13 @@ impl Real for f32 { #[inline(always)] fn log10_e() -> f32 { 0.434294481903251827651128918916605082 } - /// log(2.0) + /// ln(2.0) #[inline(always)] - fn log_2() -> f32 { 0.693147180559945309417232121458176568 } + fn ln_2() -> f32 { 0.693147180559945309417232121458176568 } - /// log(10.0) + /// ln(10.0) #[inline(always)] - fn log_10() -> f32 { 2.30258509299404568401799145468436421 } + fn ln_10() -> f32 { 2.30258509299404568401799145468436421 } /// Converts to degrees, assuming the number is in radians #[inline(always)] @@ -938,8 +940,8 @@ mod tests { assert_approx_eq!(Real::frac_1_sqrt2::(), 1f32 / 2f32.sqrt()); assert_approx_eq!(Real::log2_e::(), Real::e::().log2()); assert_approx_eq!(Real::log10_e::(), Real::e::().log10()); - assert_approx_eq!(Real::log_2::(), 2f32.log()); - assert_approx_eq!(Real::log_10::(), 10f32.log()); + assert_approx_eq!(Real::ln_2::(), 2f32.ln()); + assert_approx_eq!(Real::ln_10::(), 10f32.ln()); } #[test] diff --git a/src/libcore/num/f64.rs b/src/libcore/num/f64.rs index e5f10c23ecd87..6d2fd3d1b81b6 100644 --- a/src/libcore/num/f64.rs +++ b/src/libcore/num/f64.rs @@ -218,11 +218,6 @@ pub mod consts { pub static ln_10: f64 = 2.30258509299404568401799145468436421_f64; } -#[inline(always)] -pub fn logarithm(n: f64, b: f64) -> f64 { - return log2(n) / log2(b); -} - impl Num for f64 {} #[cfg(notest)] @@ -435,12 +430,19 @@ impl Exponential for f64 { #[inline(always)] fn expm1(&self) -> f64 { expm1(*self) } + /// Returns the natural logarithm of the number #[inline(always)] - fn log(&self) -> f64 { ln(*self) } + fn ln(&self) -> f64 { ln(*self) } + /// Returns the logarithm of the number with respect to an arbitrary base + #[inline(always)] + fn log(&self, base: f64) -> f64 { self.ln() / base.ln() } + + /// Returns the base 2 logarithm of the number #[inline(always)] fn log2(&self) -> f64 { log2(*self) } + /// Returns the base 10 logarithm of the number #[inline(always)] fn log10(&self) -> f64 { log10(*self) } } @@ -517,13 +519,13 @@ impl Real for f64 { #[inline(always)] fn log10_e() -> f64 { 0.434294481903251827651128918916605082 } - /// log(2.0) + /// ln(2.0) #[inline(always)] - fn log_2() -> f64 { 0.693147180559945309417232121458176568 } + fn ln_2() -> f64 { 0.693147180559945309417232121458176568 } - /// log(10.0) + /// ln(10.0) #[inline(always)] - fn log_10() -> f64 { 2.30258509299404568401799145468436421 } + fn ln_10() -> f64 { 2.30258509299404568401799145468436421 } /// Converts to degrees, assuming the number is in radians #[inline(always)] @@ -985,8 +987,8 @@ mod tests { assert_approx_eq!(Real::frac_1_sqrt2::(), 1f64 / 2f64.sqrt()); assert_approx_eq!(Real::log2_e::(), Real::e::().log2()); assert_approx_eq!(Real::log10_e::(), Real::e::().log10()); - assert_approx_eq!(Real::log_2::(), 2f64.log()); - assert_approx_eq!(Real::log_10::(), 10f64.log()); + assert_approx_eq!(Real::ln_2::(), 2f64.ln()); + assert_approx_eq!(Real::ln_10::(), 10f64.ln()); } #[test] diff --git a/src/libcore/num/float.rs b/src/libcore/num/float.rs index a548165326396..18c512b485fb1 100644 --- a/src/libcore/num/float.rs +++ b/src/libcore/num/float.rs @@ -25,7 +25,6 @@ use num::{Zero, One, strconv}; use prelude::*; pub use f64::{add, sub, mul, div, rem, lt, le, eq, ne, ge, gt}; -pub use f64::logarithm; pub use f64::{acos, asin, atan2, cbrt, ceil, copysign, cosh, floor}; pub use f64::{erf, erfc, exp, expm1, exp2, abs_sub}; pub use f64::{mul_add, fmax, fmin, next_after, frexp, hypot, ldexp}; @@ -548,16 +547,25 @@ impl Exponential for float { (*self as f64).expm1() as float } + /// Returns the natural logarithm of the number #[inline(always)] - fn log(&self) -> float { - (*self as f64).log() as float + fn ln(&self) -> float { + (*self as f64).ln() as float } + /// Returns the logarithm of the number with respect to an arbitrary base + #[inline(always)] + fn log(&self, base: float) -> float { + (*self as f64).log(base as f64) as float + } + + /// Returns the base 2 logarithm of the number #[inline(always)] fn log2(&self) -> float { (*self as f64).log2() as float } + /// Returns the base 10 logarithm of the number #[inline(always)] fn log10(&self) -> float { (*self as f64).log10() as float @@ -642,13 +650,13 @@ impl Real for float { #[inline(always)] fn log10_e() -> float { 0.434294481903251827651128918916605082 } - /// log(2.0) + /// ln(2.0) #[inline(always)] - fn log_2() -> float { 0.693147180559945309417232121458176568 } + fn ln_2() -> float { 0.693147180559945309417232121458176568 } - /// log(10.0) + /// ln(10.0) #[inline(always)] - fn log_10() -> float { 2.30258509299404568401799145468436421 } + fn ln_10() -> float { 2.30258509299404568401799145468436421 } /// Converts to degrees, assuming the number is in radians #[inline(always)] @@ -949,8 +957,8 @@ mod tests { assert_approx_eq!(Real::frac_1_sqrt2::(), 1f / 2f.sqrt()); assert_approx_eq!(Real::log2_e::(), Real::e::().log2()); assert_approx_eq!(Real::log10_e::(), Real::e::().log10()); - assert_approx_eq!(Real::log_2::(), 2f.log()); - assert_approx_eq!(Real::log_10::(), 10f.log()); + assert_approx_eq!(Real::ln_2::(), 2f.ln()); + assert_approx_eq!(Real::ln_10::(), 10f.ln()); } #[test] diff --git a/src/libcore/num/num.rs b/src/libcore/num/num.rs index caa14ea802f6c..7fcd16c199a70 100644 --- a/src/libcore/num/num.rs +++ b/src/libcore/num/num.rs @@ -122,7 +122,8 @@ pub trait Exponential { fn exp(&self) -> Self; fn exp2(&self) -> Self; fn expm1(&self) -> Self; - fn log(&self) -> Self; + fn ln(&self) -> Self; + fn log(&self, base: Self) -> Self; fn log2(&self) -> Self; fn log10(&self) -> Self; } @@ -158,8 +159,8 @@ pub trait Real: Signed fn e() -> Self; fn log2_e() -> Self; fn log10_e() -> Self; - fn log_2() -> Self; - fn log_10() -> Self; + fn ln_2() -> Self; + fn ln_10() -> Self; // Angular conversions fn to_degrees(&self) -> Self; From 06c5e7f383405094ab95229da7854aa61bb9df7f Mon Sep 17 00:00:00 2001 From: Brendan Zabarauskas Date: Tue, 7 May 2013 04:47:46 +1000 Subject: [PATCH 244/410] Implement exp_m1 and ln_1p as methods for Float Both expm1 and ln1p have been renamed to exp_m1 and ln_1p in order to be consistent with the underscore usage elsewhere. The exp_m1 method is used for increased accuracy when doing floating point calculations, so this has been moved from the more general 'Exponential' trait into 'Float'. --- src/libcore/num/cmath.rs | 9 +++++---- src/libcore/num/f32.rs | 23 ++++++++++++++++++----- src/libcore/num/f64.rs | 23 ++++++++++++++++++----- src/libcore/num/float.rs | 29 ++++++++++++++++++++++------- src/libcore/num/num.rs | 3 ++- 5 files changed, 65 insertions(+), 22 deletions(-) diff --git a/src/libcore/num/cmath.rs b/src/libcore/num/cmath.rs index 8a0a88235d20c..a80703fafa3d2 100644 --- a/src/libcore/num/cmath.rs +++ b/src/libcore/num/cmath.rs @@ -33,7 +33,8 @@ pub mod c_double_utils { unsafe fn erf(n: c_double) -> c_double; unsafe fn erfc(n: c_double) -> c_double; unsafe fn exp(n: c_double) -> c_double; - unsafe fn expm1(n: c_double) -> c_double; + // rename: for consistency with underscore usage elsewhere + #[link_name="expm1"] unsafe fn exp_m1(n: c_double) -> c_double; unsafe fn exp2(n: c_double) -> c_double; #[link_name="fabs"] unsafe fn abs(n: c_double) -> c_double; // rename: for clarity and consistency with add/sub/mul/div @@ -63,7 +64,7 @@ pub mod c_double_utils { // renamed: "logb" /often/ is confused for log2 by beginners #[link_name="logb"] unsafe fn log_radix(n: c_double) -> c_double; // renamed: to be consitent with log as ln - #[link_name="log1p"] unsafe fn ln1p(n: c_double) -> c_double; + #[link_name="log1p"] unsafe fn ln_1p(n: c_double) -> c_double; unsafe fn log10(n: c_double) -> c_double; unsafe fn log2(n: c_double) -> c_double; #[link_name="ilogb"] unsafe fn ilog_radix(n: c_double) -> c_int; @@ -117,7 +118,7 @@ pub mod c_float_utils { #[link_name="erff"] unsafe fn erf(n: c_float) -> c_float; #[link_name="erfcf"] unsafe fn erfc(n: c_float) -> c_float; #[link_name="expf"] unsafe fn exp(n: c_float) -> c_float; - #[link_name="expm1f"]unsafe fn expm1(n: c_float) -> c_float; + #[link_name="expm1f"]unsafe fn exp_m1(n: c_float) -> c_float; #[link_name="exp2f"] unsafe fn exp2(n: c_float) -> c_float; #[link_name="fabsf"] unsafe fn abs(n: c_float) -> c_float; #[link_name="fdimf"] @@ -148,7 +149,7 @@ pub mod c_float_utils { #[link_name="logf"] unsafe fn ln(n: c_float) -> c_float; #[link_name="logbf"] unsafe fn log_radix(n: c_float) -> c_float; - #[link_name="log1pf"] unsafe fn ln1p(n: c_float) -> c_float; + #[link_name="log1pf"] unsafe fn ln_1p(n: c_float) -> c_float; #[link_name="log2f"] unsafe fn log2(n: c_float) -> c_float; #[link_name="log10f"] unsafe fn log10(n: c_float) -> c_float; #[link_name="ilogbf"] unsafe fn ilog_radix(n: c_float) -> c_int; diff --git a/src/libcore/num/f32.rs b/src/libcore/num/f32.rs index 8a0b6567898e0..58dc6f4f45b57 100644 --- a/src/libcore/num/f32.rs +++ b/src/libcore/num/f32.rs @@ -82,7 +82,7 @@ delegate!( fn cosh(n: c_float) -> c_float = c_float_utils::cosh, fn erf(n: c_float) -> c_float = c_float_utils::erf, fn erfc(n: c_float) -> c_float = c_float_utils::erfc, - fn expm1(n: c_float) -> c_float = c_float_utils::expm1, + fn exp_m1(n: c_float) -> c_float = c_float_utils::exp_m1, fn abs_sub(a: c_float, b: c_float) -> c_float = c_float_utils::abs_sub, fn fmax(a: c_float, b: c_float) -> c_float = c_float_utils::fmax, fn fmin(a: c_float, b: c_float) -> c_float = c_float_utils::fmin, @@ -92,7 +92,7 @@ delegate!( fn ldexp(x: c_float, n: c_int) -> c_float = c_float_utils::ldexp, fn lgamma(n: c_float, sign: &mut c_int) -> c_float = c_float_utils::lgamma, fn log_radix(n: c_float) -> c_float = c_float_utils::log_radix, - fn ln1p(n: c_float) -> c_float = c_float_utils::ln1p, + fn ln_1p(n: c_float) -> c_float = c_float_utils::ln_1p, fn ilog_radix(n: c_float) -> c_int = c_float_utils::ilog_radix, fn modf(n: c_float, iptr: &mut c_float) -> c_float = c_float_utils::modf, fn round(n: c_float) -> c_float = c_float_utils::round, @@ -408,15 +408,14 @@ impl Trigonometric for f32 { } impl Exponential for f32 { + /// Returns the exponential of the number #[inline(always)] fn exp(&self) -> f32 { exp(*self) } + /// Returns 2 raised to the power of the number #[inline(always)] fn exp2(&self) -> f32 { exp2(*self) } - #[inline(always)] - fn expm1(&self) -> f32 { expm1(*self) } - /// Returns the natural logarithm of the number #[inline(always)] fn ln(&self) -> f32 { ln(*self) } @@ -588,6 +587,20 @@ impl Float for f32 { !(self.is_NaN() || self.is_infinite()) } + /// + /// Returns the exponential of the number, minus `1`, in a way that is accurate + /// even if the number is close to zero + /// + #[inline(always)] + fn exp_m1(&self) -> f32 { exp_m1(*self) } + + /// + /// Returns the natural logarithm of the number plus `1` (`ln(1+n)`) more accurately + /// than if the operations were performed separately + /// + #[inline(always)] + fn ln_1p(&self) -> f32 { ln_1p(*self) } + /// /// Fused multiply-add. Computes `(self * a) + b` with only one rounding error. This /// produces a more accurate result with better performance than a separate multiplication diff --git a/src/libcore/num/f64.rs b/src/libcore/num/f64.rs index 6d2fd3d1b81b6..41fc9cca66e5a 100644 --- a/src/libcore/num/f64.rs +++ b/src/libcore/num/f64.rs @@ -84,7 +84,7 @@ delegate!( fn cosh(n: c_double) -> c_double = c_double_utils::cosh, fn erf(n: c_double) -> c_double = c_double_utils::erf, fn erfc(n: c_double) -> c_double = c_double_utils::erfc, - fn expm1(n: c_double) -> c_double = c_double_utils::expm1, + fn exp_m1(n: c_double) -> c_double = c_double_utils::exp_m1, fn abs_sub(a: c_double, b: c_double) -> c_double = c_double_utils::abs_sub, fn fmax(a: c_double, b: c_double) -> c_double = c_double_utils::fmax, fn fmin(a: c_double, b: c_double) -> c_double = c_double_utils::fmin, @@ -94,7 +94,7 @@ delegate!( fn ldexp(x: c_double, n: c_int) -> c_double = c_double_utils::ldexp, fn lgamma(n: c_double, sign: &mut c_int) -> c_double = c_double_utils::lgamma, fn log_radix(n: c_double) -> c_double = c_double_utils::log_radix, - fn ln1p(n: c_double) -> c_double = c_double_utils::ln1p, + fn ln_1p(n: c_double) -> c_double = c_double_utils::ln_1p, fn ilog_radix(n: c_double) -> c_int = c_double_utils::ilog_radix, fn modf(n: c_double, iptr: &mut c_double) -> c_double = c_double_utils::modf, fn round(n: c_double) -> c_double = c_double_utils::round, @@ -421,15 +421,14 @@ impl Trigonometric for f64 { } impl Exponential for f64 { + /// Returns the exponential of the number #[inline(always)] fn exp(&self) -> f64 { exp(*self) } + /// Returns 2 raised to the power of the number #[inline(always)] fn exp2(&self) -> f64 { exp2(*self) } - #[inline(always)] - fn expm1(&self) -> f64 { expm1(*self) } - /// Returns the natural logarithm of the number #[inline(always)] fn ln(&self) -> f64 { ln(*self) } @@ -631,6 +630,20 @@ impl Float for f64 { #[inline(always)] fn max_10_exp() -> int { 308 } + /// + /// Returns the exponential of the number, minus `1`, in a way that is accurate + /// even if the number is close to zero + /// + #[inline(always)] + fn exp_m1(&self) -> f64 { exp_m1(*self) } + + /// + /// Returns the natural logarithm of the number plus `1` (`ln(1+n)`) more accurately + /// than if the operations were performed separately + /// + #[inline(always)] + fn ln_1p(&self) -> f64 { ln_1p(*self) } + /// /// Fused multiply-add. Computes `(self * a) + b` with only one rounding error. This /// produces a more accurate result with better performance than a separate multiplication diff --git a/src/libcore/num/float.rs b/src/libcore/num/float.rs index 18c512b485fb1..512d3afc2b622 100644 --- a/src/libcore/num/float.rs +++ b/src/libcore/num/float.rs @@ -26,9 +26,9 @@ use prelude::*; pub use f64::{add, sub, mul, div, rem, lt, le, eq, ne, ge, gt}; pub use f64::{acos, asin, atan2, cbrt, ceil, copysign, cosh, floor}; -pub use f64::{erf, erfc, exp, expm1, exp2, abs_sub}; +pub use f64::{erf, erfc, exp, exp_m1, exp2, abs_sub}; pub use f64::{mul_add, fmax, fmin, next_after, frexp, hypot, ldexp}; -pub use f64::{lgamma, ln, log_radix, ln1p, log10, log2, ilog_radix}; +pub use f64::{lgamma, ln, log_radix, ln_1p, log10, log2, ilog_radix}; pub use f64::{modf, pow, powi, round, sinh, tanh, tgamma, trunc}; pub use f64::{j0, j1, jn, y0, y1, yn}; @@ -532,21 +532,18 @@ impl Trigonometric for float { } impl Exponential for float { + /// Returns the exponential of the number #[inline(always)] fn exp(&self) -> float { (*self as f64).exp() as float } + /// Returns 2 raised to the power of the number #[inline(always)] fn exp2(&self) -> float { (*self as f64).exp2() as float } - #[inline(always)] - fn expm1(&self) -> float { - (*self as f64).expm1() as float - } - /// Returns the natural logarithm of the number #[inline(always)] fn ln(&self) -> float { @@ -823,6 +820,24 @@ impl Float for float { !(self.is_NaN() || self.is_infinite()) } + /// + /// Returns the exponential of the number, minus `1`, in a way that is accurate + /// even if the number is close to zero + /// + #[inline(always)] + fn exp_m1(&self) -> float { + (*self as f64).exp_m1() as float + } + + /// + /// Returns the natural logarithm of the number plus `1` (`ln(1+n)`) more accurately + /// than if the operations were performed separately + /// + #[inline(always)] + fn ln_1p(&self) -> float { + (*self as f64).ln_1p() as float + } + /// /// Fused multiply-add. Computes `(self * a) + b` with only one rounding error. This /// produces a more accurate result with better performance than a separate multiplication diff --git a/src/libcore/num/num.rs b/src/libcore/num/num.rs index 7fcd16c199a70..2496ba497dcc4 100644 --- a/src/libcore/num/num.rs +++ b/src/libcore/num/num.rs @@ -121,7 +121,6 @@ pub trait Trigonometric { pub trait Exponential { fn exp(&self) -> Self; fn exp2(&self) -> Self; - fn expm1(&self) -> Self; fn ln(&self) -> Self; fn log(&self, base: Self) -> Self; fn log2(&self) -> Self; @@ -261,6 +260,8 @@ pub trait Float: Real fn min_10_exp() -> int; fn max_10_exp() -> int; + fn exp_m1(&self) -> Self; + fn ln_1p(&self) -> Self; fn mul_add(&self, a: Self, b: Self) -> Self; fn next_after(&self, other: Self) -> Self; } From 314b485c9c480c4a7f47c28716e629d642e2d412 Mon Sep 17 00:00:00 2001 From: Brendan Zabarauskas Date: Tue, 7 May 2013 14:35:01 +1000 Subject: [PATCH 245/410] Fix order of methods --- src/libcore/num/f32.rs | 25 +++++++++++++------------ src/libcore/num/float.rs | 25 +++++++++++++------------ 2 files changed, 26 insertions(+), 24 deletions(-) diff --git a/src/libcore/num/f32.rs b/src/libcore/num/f32.rs index 58dc6f4f45b57..580a612aebb48 100644 --- a/src/libcore/num/f32.rs +++ b/src/libcore/num/f32.rs @@ -551,9 +551,22 @@ impl Float for f32 { #[inline(always)] fn neg_zero() -> f32 { -0.0 } + /// Returns `true` if the number is NaN #[inline(always)] fn is_NaN(&self) -> bool { *self != *self } + /// Returns `true` if the number is infinite + #[inline(always)] + fn is_infinite(&self) -> bool { + *self == Float::infinity() || *self == Float::neg_infinity() + } + + /// Returns `true` if the number is not infinite or NaN + #[inline(always)] + fn is_finite(&self) -> bool { + !(self.is_NaN() || self.is_infinite()) + } + #[inline(always)] fn mantissa_digits() -> uint { 24 } @@ -575,18 +588,6 @@ impl Float for f32 { #[inline(always)] fn max_10_exp() -> int { 38 } - /// Returns `true` if the number is infinite - #[inline(always)] - fn is_infinite(&self) -> bool { - *self == Float::infinity() || *self == Float::neg_infinity() - } - - /// Returns `true` if the number is finite - #[inline(always)] - fn is_finite(&self) -> bool { - !(self.is_NaN() || self.is_infinite()) - } - /// /// Returns the exponential of the number, minus `1`, in a way that is accurate /// even if the number is close to zero diff --git a/src/libcore/num/float.rs b/src/libcore/num/float.rs index 512d3afc2b622..95f3a76b80084 100644 --- a/src/libcore/num/float.rs +++ b/src/libcore/num/float.rs @@ -784,9 +784,22 @@ impl Float for float { #[inline(always)] fn neg_zero() -> float { -0.0 } + /// Returns `true` if the number is NaN #[inline(always)] fn is_NaN(&self) -> bool { *self != *self } + /// Returns `true` if the number is infinite + #[inline(always)] + fn is_infinite(&self) -> bool { + *self == Float::infinity() || *self == Float::neg_infinity() + } + + /// Returns `true` if the number is not infinite or NaN + #[inline(always)] + fn is_finite(&self) -> bool { + !(self.is_NaN() || self.is_infinite()) + } + #[inline(always)] fn mantissa_digits() -> uint { Float::mantissa_digits::() } @@ -808,18 +821,6 @@ impl Float for float { #[inline(always)] fn max_10_exp() -> int { Float::max_10_exp::() } - /// Returns `true` if the number is infinite - #[inline(always)] - fn is_infinite(&self) -> bool { - *self == Float::infinity() || *self == Float::neg_infinity() - } - - /// Returns `true` if the number is finite - #[inline(always)] - fn is_finite(&self) -> bool { - !(self.is_NaN() || self.is_infinite()) - } - /// /// Returns the exponential of the number, minus `1`, in a way that is accurate /// even if the number is close to zero From a9ac2b95f485c31e40273dee7f09dcfff8340777 Mon Sep 17 00:00:00 2001 From: Brendan Zabarauskas Date: Tue, 7 May 2013 14:36:32 +1000 Subject: [PATCH 246/410] Add abs_sub method to Signed trait --- src/libcore/num/f32.rs | 32 +++++++++++++++++++++++++++++- src/libcore/num/f64.rs | 35 +++++++++++++++++++++++++++++++-- src/libcore/num/float.rs | 34 +++++++++++++++++++++++++++++++- src/libcore/num/int-template.rs | 28 +++++++++++++++++++++++++- src/libcore/num/num.rs | 2 ++ src/libstd/num/bigint.rs | 14 +++++++++++++ 6 files changed, 140 insertions(+), 5 deletions(-) diff --git a/src/libcore/num/f32.rs b/src/libcore/num/f32.rs index 580a612aebb48..bdd11200419f4 100644 --- a/src/libcore/num/f32.rs +++ b/src/libcore/num/f32.rs @@ -312,6 +312,13 @@ impl Signed for f32 { #[inline(always)] fn abs(&self) -> f32 { abs(*self) } + /// + /// The positive difference of two numbers. Returns `0.0` if the number is less than or + /// equal to `other`, otherwise the difference between`self` and `other` is returned. + /// + #[inline(always)] + fn abs_sub(&self, other: &f32) -> f32 { abs_sub(*self, *other) } + /// /// # Returns /// @@ -959,7 +966,7 @@ mod tests { } #[test] - pub fn test_signed() { + pub fn test_abs() { assert_eq!(infinity.abs(), infinity); assert_eq!(1f32.abs(), 1f32); assert_eq!(0f32.abs(), 0f32); @@ -968,7 +975,24 @@ mod tests { assert_eq!(neg_infinity.abs(), infinity); assert_eq!((1f32/neg_infinity).abs(), 0f32); assert!(NaN.abs().is_NaN()); + } + #[test] + fn test_abs_sub() { + assert_eq!((-1f32).abs_sub(&1f32), 0f32); + assert_eq!(1f32.abs_sub(&1f32), 0f32); + assert_eq!(1f32.abs_sub(&0f32), 1f32); + assert_eq!(1f32.abs_sub(&-1f32), 2f32); + assert_eq!(neg_infinity.abs_sub(&0f32), 0f32); + assert_eq!(infinity.abs_sub(&1f32), infinity); + assert_eq!(0f32.abs_sub(&neg_infinity), infinity); + assert_eq!(0f32.abs_sub(&infinity), 0f32); + assert!(NaN.abs_sub(&-1f32).is_NaN()); + assert!(1f32.abs_sub(&NaN).is_NaN()); + } + + #[test] + fn test_signum() { assert_eq!(infinity.signum(), 1f32); assert_eq!(1f32.signum(), 1f32); assert_eq!(0f32.signum(), 1f32); @@ -977,7 +1001,10 @@ mod tests { assert_eq!(neg_infinity.signum(), -1f32); assert_eq!((1f32/neg_infinity).signum(), -1f32); assert!(NaN.signum().is_NaN()); + } + #[test] + fn test_is_positive() { assert!(infinity.is_positive()); assert!(1f32.is_positive()); assert!(0f32.is_positive()); @@ -986,7 +1013,10 @@ mod tests { assert!(!neg_infinity.is_positive()); assert!(!(1f32/neg_infinity).is_positive()); assert!(!NaN.is_positive()); + } + #[test] + fn test_is_negative() { assert!(!infinity.is_negative()); assert!(!1f32.is_negative()); assert!(!0f32.is_negative()); diff --git a/src/libcore/num/f64.rs b/src/libcore/num/f64.rs index 41fc9cca66e5a..7c6246757cd8e 100644 --- a/src/libcore/num/f64.rs +++ b/src/libcore/num/f64.rs @@ -325,6 +325,13 @@ impl Signed for f64 { #[inline(always)] fn abs(&self) -> f64 { abs(*self) } + /// + /// The positive difference of two numbers. Returns `0.0` if the number is less than or + /// equal to `other`, otherwise the difference between`self` and `other` is returned. + /// + #[inline(always)] + fn abs_sub(&self, other: &f64) -> f64 { abs_sub(*self, *other) } + /// /// # Returns /// @@ -594,6 +601,7 @@ impl Float for f64 { #[inline(always)] fn neg_zero() -> f64 { -0.0 } + /// Returns `true` if the number is NaN #[inline(always)] fn is_NaN(&self) -> bool { *self != *self } @@ -603,7 +611,7 @@ impl Float for f64 { *self == Float::infinity() || *self == Float::neg_infinity() } - /// Returns `true` if the number is finite + /// Returns `true` if the number is not infinite or NaN #[inline(always)] fn is_finite(&self) -> bool { !(self.is_NaN() || self.is_infinite()) @@ -1005,7 +1013,7 @@ mod tests { } #[test] - pub fn test_signed() { + pub fn test_abs() { assert_eq!(infinity.abs(), infinity); assert_eq!(1f64.abs(), 1f64); assert_eq!(0f64.abs(), 0f64); @@ -1014,7 +1022,24 @@ mod tests { assert_eq!(neg_infinity.abs(), infinity); assert_eq!((1f64/neg_infinity).abs(), 0f64); assert!(NaN.abs().is_NaN()); + } + #[test] + fn test_abs_sub() { + assert_eq!((-1f64).abs_sub(&1f64), 0f64); + assert_eq!(1f64.abs_sub(&1f64), 0f64); + assert_eq!(1f64.abs_sub(&0f64), 1f64); + assert_eq!(1f64.abs_sub(&-1f64), 2f64); + assert_eq!(neg_infinity.abs_sub(&0f64), 0f64); + assert_eq!(infinity.abs_sub(&1f64), infinity); + assert_eq!(0f64.abs_sub(&neg_infinity), infinity); + assert_eq!(0f64.abs_sub(&infinity), 0f64); + assert!(NaN.abs_sub(&-1f64).is_NaN()); + assert!(1f64.abs_sub(&NaN).is_NaN()); + } + + #[test] + fn test_signum() { assert_eq!(infinity.signum(), 1f64); assert_eq!(1f64.signum(), 1f64); assert_eq!(0f64.signum(), 1f64); @@ -1023,7 +1048,10 @@ mod tests { assert_eq!(neg_infinity.signum(), -1f64); assert_eq!((1f64/neg_infinity).signum(), -1f64); assert!(NaN.signum().is_NaN()); + } + #[test] + fn test_is_positive() { assert!(infinity.is_positive()); assert!(1f64.is_positive()); assert!(0f64.is_positive()); @@ -1032,7 +1060,10 @@ mod tests { assert!(!neg_infinity.is_positive()); assert!(!(1f64/neg_infinity).is_positive()); assert!(!NaN.is_positive()); + } + #[test] + fn test_is_negative() { assert!(!infinity.is_negative()); assert!(!1f64.is_negative()); assert!(!0f64.is_negative()); diff --git a/src/libcore/num/float.rs b/src/libcore/num/float.rs index 95f3a76b80084..35e113094876f 100644 --- a/src/libcore/num/float.rs +++ b/src/libcore/num/float.rs @@ -734,6 +734,15 @@ impl Signed for float { #[inline(always)] fn abs(&self) -> float { abs(*self) } + /// + /// The positive difference of two numbers. Returns `0.0` if the number is less than or + /// equal to `other`, otherwise the difference between`self` and `other` is returned. + /// + #[inline(always)] + fn abs_sub(&self, other: &float) -> float { + (*self as f64).abs_sub(&(*other as f64)) as float + } + /// /// # Returns /// @@ -978,7 +987,7 @@ mod tests { } #[test] - fn test_signed() { + fn test_abs() { assert_eq!(infinity.abs(), infinity); assert_eq!(1f.abs(), 1f); assert_eq!(0f.abs(), 0f); @@ -987,7 +996,24 @@ mod tests { assert_eq!(neg_infinity.abs(), infinity); assert_eq!((1f/neg_infinity).abs(), 0f); assert!(NaN.abs().is_NaN()); + } + + #[test] + fn test_abs_sub() { + assert_eq!((-1f).abs_sub(&1f), 0f); + assert_eq!(1f.abs_sub(&1f), 0f); + assert_eq!(1f.abs_sub(&0f), 1f); + assert_eq!(1f.abs_sub(&-1f), 2f); + assert_eq!(neg_infinity.abs_sub(&0f), 0f); + assert_eq!(infinity.abs_sub(&1f), infinity); + assert_eq!(0f.abs_sub(&neg_infinity), infinity); + assert_eq!(0f.abs_sub(&infinity), 0f); + assert!(NaN.abs_sub(&-1f).is_NaN()); + assert!(1f.abs_sub(&NaN).is_NaN()); + } + #[test] + fn test_signum() { assert_eq!(infinity.signum(), 1f); assert_eq!(1f.signum(), 1f); assert_eq!(0f.signum(), 1f); @@ -996,7 +1022,10 @@ mod tests { assert_eq!(neg_infinity.signum(), -1f); assert_eq!((1f/neg_infinity).signum(), -1f); assert!(NaN.signum().is_NaN()); + } + #[test] + fn test_is_positive() { assert!(infinity.is_positive()); assert!(1f.is_positive()); assert!(0f.is_positive()); @@ -1005,7 +1034,10 @@ mod tests { assert!(!neg_infinity.is_positive()); assert!(!(1f/neg_infinity).is_positive()); assert!(!NaN.is_positive()); + } + #[test] + fn test_is_negative() { assert!(!infinity.is_negative()); assert!(!1f.is_negative()); assert!(!0f.is_negative()); diff --git a/src/libcore/num/int-template.rs b/src/libcore/num/int-template.rs index 95c187a7be22e..06a9a0b45627d 100644 --- a/src/libcore/num/int-template.rs +++ b/src/libcore/num/int-template.rs @@ -264,6 +264,15 @@ impl Signed for T { if self.is_negative() { -*self } else { *self } } + /// + /// The positive difference of two numbers. Returns `0` if the number is less than or + /// equal to `other`, otherwise the difference between`self` and `other` is returned. + /// + #[inline(always)] + fn abs_sub(&self, other: &T) -> T { + if *self <= *other { 0 } else { *self - *other } + } + /// /// # Returns /// @@ -554,21 +563,38 @@ mod tests { } #[test] - pub fn test_signed() { + pub fn test_abs() { assert_eq!((1 as T).abs(), 1 as T); assert_eq!((0 as T).abs(), 0 as T); assert_eq!((-1 as T).abs(), 1 as T); + } + + #[test] + fn test_abs_sub() { + assert_eq!((-1 as T).abs_sub(&(1 as T)), 0 as T); + assert_eq!((1 as T).abs_sub(&(1 as T)), 0 as T); + assert_eq!((1 as T).abs_sub(&(0 as T)), 1 as T); + assert_eq!((1 as T).abs_sub(&(-1 as T)), 2 as T); + } + #[test] + fn test_signum() { assert_eq!((1 as T).signum(), 1 as T); assert_eq!((0 as T).signum(), 0 as T); assert_eq!((-0 as T).signum(), 0 as T); assert_eq!((-1 as T).signum(), -1 as T); + } + #[test] + fn test_is_positive() { assert!((1 as T).is_positive()); assert!(!(0 as T).is_positive()); assert!(!(-0 as T).is_positive()); assert!(!(-1 as T).is_positive()); + } + #[test] + fn test_is_negative() { assert!(!(1 as T).is_negative()); assert!(!(0 as T).is_negative()); assert!(!(-0 as T).is_negative()); diff --git a/src/libcore/num/num.rs b/src/libcore/num/num.rs index 2496ba497dcc4..7a71729e3e73f 100644 --- a/src/libcore/num/num.rs +++ b/src/libcore/num/num.rs @@ -55,7 +55,9 @@ pub trait One { pub trait Signed: Num + Neg { fn abs(&self) -> Self; + fn abs_sub(&self, other: &Self) -> Self; fn signum(&self) -> Self; + fn is_positive(&self) -> bool; fn is_negative(&self) -> bool; } diff --git a/src/libstd/num/bigint.rs b/src/libstd/num/bigint.rs index cd347098e2511..a5cf929ed93a2 100644 --- a/src/libstd/num/bigint.rs +++ b/src/libstd/num/bigint.rs @@ -831,6 +831,11 @@ impl Signed for BigInt { } } + #[inline(always)] + fn abs_sub(&self, other: &BigInt) -> BigInt { + if *self <= *other { Zero::zero() } else { *self - *other } + } + #[inline(always)] fn signum(&self) -> BigInt { match self.sign { @@ -1920,6 +1925,15 @@ mod bigint_tests { check(11, 5, 55); } + #[test] + fn test_abs_sub() { + assert_eq!((-One::one::()).abs_sub(&One::one()), Zero::zero()); + assert_eq!(One::one::().abs_sub(&One::one()), Zero::zero()); + assert_eq!(One::one::().abs_sub(&Zero::zero()), One::one()); + assert_eq!(One::one::().abs_sub(&-One::one::()), + IntConvertible::from_int(2)); + } + #[test] fn test_to_str_radix() { fn check(n: int, ans: &str) { From 387d6c597aeb4d067998cb59f5526cee92994efa Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Mon, 18 Mar 2013 20:54:36 -0400 Subject: [PATCH 247/410] Lift restriction on calling extern C functions, and propagate the ABI as part of the type of an extern fn. cc #3678 --- src/librustc/middle/typeck/check/mod.rs | 15 +---------- src/librustc/middle/typeck/collect.rs | 33 +++++++++++++++++++------ 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/src/librustc/middle/typeck/check/mod.rs b/src/librustc/middle/typeck/check/mod.rs index e171765ef6c4e..68700d6218769 100644 --- a/src/librustc/middle/typeck/check/mod.rs +++ b/src/librustc/middle/typeck/check/mod.rs @@ -1311,19 +1311,6 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt, // Extract the function signature from `in_fty`. let fn_sty = structure_of(fcx, f.span, fn_ty); - // FIXME(#3678) For now, do not permit calls to C abi functions. - match fn_sty { - ty::ty_bare_fn(ty::BareFnTy {abis, _}) => { - if !abis.is_rust() { - fcx.tcx().sess.span_err( - call_expr.span, - fmt!("Calls to C ABI functions are not (yet) \ - supported; be patient, dear user")); - } - } - _ => {} - } - let fn_sig = match fn_sty { ty::ty_bare_fn(ty::BareFnTy {sig: sig, _}) | ty::ty_closure(ty::ClosureTy {sig: sig, _}) => sig, @@ -3607,7 +3594,7 @@ pub fn check_intrinsic_type(ccx: @mut CrateCtxt, it: @ast::foreign_item) { }; let fty = ty::mk_bare_fn(tcx, ty::BareFnTy { purity: ast::unsafe_fn, - abis: AbiSet::Rust(), + abis: AbiSet::Intrinsic(), sig: FnSig {bound_lifetime_names: opt_vec::Empty, inputs: inputs, output: output} diff --git a/src/librustc/middle/typeck/collect.rs b/src/librustc/middle/typeck/collect.rs index 22850c16f9436..1c3896ef5b9ee 100644 --- a/src/librustc/middle/typeck/collect.rs +++ b/src/librustc/middle/typeck/collect.rs @@ -134,8 +134,8 @@ impl AstConv for CrateCtxt { Some(&ast_map::node_item(item, _)) => { ty_of_item(self, item) } - Some(&ast_map::node_foreign_item(foreign_item, _, _, _)) => { - ty_of_foreign_item(self, foreign_item) + Some(&ast_map::node_foreign_item(foreign_item, abis, _, _)) => { + ty_of_foreign_item(self, foreign_item, abis) } ref x => { self.tcx.sess.bug(fmt!("unexpected sort of item \ @@ -932,7 +932,20 @@ pub fn convert_foreign(ccx: &CrateCtxt, i: @ast::foreign_item) { // As above, this call populates the type table with the converted // type of the foreign item. We simply write it into the node type // table. - let tpt = ty_of_foreign_item(ccx, i); + + // For reasons I cannot fully articulate, I do so hate the AST + // map, and I regard each time that I use it as a personal and + // moral failing, but at the moment it seems like the only + // convenient way to extract the ABI. - ndm + let abis = match ccx.tcx.items.find(&i.id) { + Some(&ast_map::node_foreign_item(_, abis, _, _)) => abis, + ref x => { + ccx.tcx.sess.bug(fmt!("unexpected sort of item \ + in get_item_ty(): %?", (*x))); + } + }; + + let tpt = ty_of_foreign_item(ccx, i, abis); write_ty_to_tcx(ccx.tcx, i.id, tpt.ty); ccx.tcx.tcache.insert(local_def(i.id), tpt); } @@ -1103,14 +1116,17 @@ pub fn ty_of_item(ccx: &CrateCtxt, it: @ast::item) } } -pub fn ty_of_foreign_item(ccx: &CrateCtxt, it: @ast::foreign_item) - -> ty::ty_param_bounds_and_ty { +pub fn ty_of_foreign_item(ccx: &CrateCtxt, + it: @ast::foreign_item, + abis: AbiSet) -> ty::ty_param_bounds_and_ty +{ match it.node { ast::foreign_item_fn(ref fn_decl, _, ref generics) => { ty_of_foreign_fn_decl(ccx, fn_decl, local_def(it.id), - generics) + generics, + abis) } ast::foreign_item_const(t) => { ty::ty_param_bounds_and_ty { @@ -1197,7 +1213,8 @@ pub fn ty_generics(ccx: &CrateCtxt, pub fn ty_of_foreign_fn_decl(ccx: &CrateCtxt, decl: &ast::fn_decl, def_id: ast::def_id, - ast_generics: &ast::Generics) + ast_generics: &ast::Generics, + abis: AbiSet) -> ty::ty_param_bounds_and_ty { let ty_generics = ty_generics(ccx, None, ast_generics, 0); let region_param_names = RegionParamNames::from_generics(ast_generics); @@ -1208,7 +1225,7 @@ pub fn ty_of_foreign_fn_decl(ccx: &CrateCtxt, let t_fn = ty::mk_bare_fn( ccx.tcx, ty::BareFnTy { - abis: AbiSet::Rust(), + abis: abis, purity: ast::unsafe_fn, sig: ty::FnSig {bound_lifetime_names: opt_vec::Empty, inputs: input_tys, From cc51186be0c68897042a72bd52147e345ad2a2cd Mon Sep 17 00:00:00 2001 From: Brendan Zabarauskas Date: Tue, 7 May 2013 20:30:51 +1000 Subject: [PATCH 248/410] Add is_normal and classify methods to Float trait --- src/libcore/num/f32.rs | 55 ++++++++++++++++++++++++++++++++++++- src/libcore/num/f64.rs | 54 +++++++++++++++++++++++++++++++++++- src/libcore/num/float.rs | 59 ++++++++++++++++++++++++++++++---------- src/libcore/num/num.rs | 19 +++++++++++++ 4 files changed, 170 insertions(+), 17 deletions(-) diff --git a/src/libcore/num/f32.rs b/src/libcore/num/f32.rs index bdd11200419f4..3c4faa95dd190 100644 --- a/src/libcore/num/f32.rs +++ b/src/libcore/num/f32.rs @@ -11,6 +11,7 @@ //! Operations and constants for `f32` use num::{Zero, One, strconv}; +use num::{FPCategory, FPNaN, FPInfinite , FPZero, FPSubnormal, FPNormal}; use prelude::*; pub use cmath::c_float_targ_consts::*; @@ -568,12 +569,39 @@ impl Float for f32 { *self == Float::infinity() || *self == Float::neg_infinity() } - /// Returns `true` if the number is not infinite or NaN + /// Returns `true` if the number is neither infinite or NaN #[inline(always)] fn is_finite(&self) -> bool { !(self.is_NaN() || self.is_infinite()) } + /// Returns `true` if the number is neither zero, infinite, subnormal or NaN + #[inline(always)] + fn is_normal(&self) -> bool { + match self.classify() { + FPNormal => true, + _ => false, + } + } + + /// Returns the floating point category of the number. If only one property is going to + /// be tested, it is generally faster to use the specific predicate instead. + fn classify(&self) -> FPCategory { + static EXP_MASK: u32 = 0x7f800000; + static MAN_MASK: u32 = 0x007fffff; + + match ( + unsafe { ::cast::transmute::(*self) } & EXP_MASK, + unsafe { ::cast::transmute::(*self) } & MAN_MASK + ) { + (EXP_MASK, 0) => FPInfinite, + (EXP_MASK, _) => FPNaN, + (exp, _) if exp != 0 => FPNormal, + _ if self.is_zero() => FPZero, + _ => FPSubnormal, + } + } + #[inline(always)] fn mantissa_digits() -> uint { 24 } @@ -846,6 +874,7 @@ impl num::FromStrRadix for f32 { #[cfg(test)] mod tests { use f32::*; + use num::*; use super::*; use prelude::*; @@ -1041,4 +1070,28 @@ mod tests { assert_eq!(Primitive::bits::(), sys::size_of::() * 8); assert_eq!(Primitive::bytes::(), sys::size_of::()); } + + #[test] + fn test_is_normal() { + assert!(!Float::NaN::().is_normal()); + assert!(!Float::infinity::().is_normal()); + assert!(!Float::neg_infinity::().is_normal()); + assert!(!Zero::zero::().is_normal()); + assert!(!Float::neg_zero::().is_normal()); + assert!(1f32.is_normal()); + assert!(1e-37f32.is_normal()); + assert!(!1e-38f32.is_normal()); + } + + #[test] + fn test_classify() { + assert_eq!(Float::NaN::().classify(), FPNaN); + assert_eq!(Float::infinity::().classify(), FPInfinite); + assert_eq!(Float::neg_infinity::().classify(), FPInfinite); + assert_eq!(Zero::zero::().classify(), FPZero); + assert_eq!(Float::neg_zero::().classify(), FPZero); + assert_eq!(1f32.classify(), FPNormal); + assert_eq!(1e-37f32.classify(), FPNormal); + assert_eq!(1e-38f32.classify(), FPSubnormal); + } } diff --git a/src/libcore/num/f64.rs b/src/libcore/num/f64.rs index 7c6246757cd8e..30c101fe8a9c6 100644 --- a/src/libcore/num/f64.rs +++ b/src/libcore/num/f64.rs @@ -12,6 +12,7 @@ use libc::c_int; use num::{Zero, One, strconv}; +use num::{FPCategory, FPNaN, FPInfinite , FPZero, FPSubnormal, FPNormal}; use prelude::*; pub use cmath::c_double_targ_consts::*; @@ -611,12 +612,39 @@ impl Float for f64 { *self == Float::infinity() || *self == Float::neg_infinity() } - /// Returns `true` if the number is not infinite or NaN + /// Returns `true` if the number is neither infinite or NaN #[inline(always)] fn is_finite(&self) -> bool { !(self.is_NaN() || self.is_infinite()) } + /// Returns `true` if the number is neither zero, infinite, subnormal or NaN + #[inline(always)] + fn is_normal(&self) -> bool { + match self.classify() { + FPNormal => true, + _ => false, + } + } + + /// Returns the floating point category of the number. If only one property is going to + /// be tested, it is generally faster to use the specific predicate instead. + fn classify(&self) -> FPCategory { + static EXP_MASK: u64 = 0x7ff0000000000000; + static MAN_MASK: u64 = 0x000fffffffffffff; + + match ( + unsafe { ::cast::transmute::(*self) } & EXP_MASK, + unsafe { ::cast::transmute::(*self) } & MAN_MASK + ) { + (EXP_MASK, 0) => FPInfinite, + (EXP_MASK, _) => FPNaN, + (exp, _) if exp != 0 => FPNormal, + _ if self.is_zero() => FPZero, + _ => FPSubnormal, + } + } + #[inline(always)] fn mantissa_digits() -> uint { 53 } @@ -889,6 +917,7 @@ impl num::FromStrRadix for f64 { #[cfg(test)] mod tests { use f64::*; + use num::*; use super::*; use prelude::*; @@ -1088,4 +1117,27 @@ mod tests { assert_eq!(Primitive::bits::(), sys::size_of::() * 8); assert_eq!(Primitive::bytes::(), sys::size_of::()); } + + #[test] + fn test_is_normal() { + assert!(!Float::NaN::().is_normal()); + assert!(!Float::infinity::().is_normal()); + assert!(!Float::neg_infinity::().is_normal()); + assert!(!Zero::zero::().is_normal()); + assert!(!Float::neg_zero::().is_normal()); + assert!(1f64.is_normal()); + assert!(1e-307f64.is_normal()); + assert!(!1e-308f64.is_normal()); + } + + #[test] + fn test_classify() { + assert_eq!(Float::NaN::().classify(), FPNaN); + assert_eq!(Float::infinity::().classify(), FPInfinite); + assert_eq!(Float::neg_infinity::().classify(), FPInfinite); + assert_eq!(Zero::zero::().classify(), FPZero); + assert_eq!(Float::neg_zero::().classify(), FPZero); + assert_eq!(1e-307f64.classify(), FPNormal); + assert_eq!(1e-308f64.classify(), FPSubnormal); + } } diff --git a/src/libcore/num/float.rs b/src/libcore/num/float.rs index 35e113094876f..9c3d30be0d499 100644 --- a/src/libcore/num/float.rs +++ b/src/libcore/num/float.rs @@ -22,6 +22,7 @@ use libc::c_int; use num::{Zero, One, strconv}; +use num::FPCategory; use prelude::*; pub use f64::{add, sub, mul, div, rem, lt, le, eq, ne, ge, gt}; @@ -782,32 +783,37 @@ impl Primitive for float { impl Float for float { #[inline(always)] - fn NaN() -> float { 0.0 / 0.0 } + fn NaN() -> float { Float::NaN::() as float } #[inline(always)] - fn infinity() -> float { 1.0 / 0.0 } + fn infinity() -> float { Float::infinity::() as float } #[inline(always)] - fn neg_infinity() -> float { -1.0 / 0.0 } + fn neg_infinity() -> float { Float::neg_infinity::() as float } #[inline(always)] - fn neg_zero() -> float { -0.0 } + fn neg_zero() -> float { Float::neg_zero::() as float } /// Returns `true` if the number is NaN #[inline(always)] - fn is_NaN(&self) -> bool { *self != *self } + fn is_NaN(&self) -> bool { (*self as f64).is_NaN() } /// Returns `true` if the number is infinite #[inline(always)] - fn is_infinite(&self) -> bool { - *self == Float::infinity() || *self == Float::neg_infinity() - } + fn is_infinite(&self) -> bool { (*self as f64).is_infinite() } - /// Returns `true` if the number is not infinite or NaN + /// Returns `true` if the number is neither infinite or NaN #[inline(always)] - fn is_finite(&self) -> bool { - !(self.is_NaN() || self.is_infinite()) - } + fn is_finite(&self) -> bool { (*self as f64).is_finite() } + + /// Returns `true` if the number is neither zero, infinite, subnormal or NaN + #[inline(always)] + fn is_normal(&self) -> bool { (*self as f64).is_normal() } + + /// Returns the floating point category of the number. If only one property is going to + /// be tested, it is generally faster to use the specific predicate instead. + #[inline(always)] + fn classify(&self) -> FPCategory { (*self as f64).classify() } #[inline(always)] fn mantissa_digits() -> uint { Float::mantissa_digits::() } @@ -844,9 +850,7 @@ impl Float for float { /// than if the operations were performed separately /// #[inline(always)] - fn ln_1p(&self) -> float { - (*self as f64).ln_1p() as float - } + fn ln_1p(&self) -> float { (*self as f64).ln_1p() as float } /// /// Fused multiply-add. Computes `(self * a) + b` with only one rounding error. This @@ -867,6 +871,7 @@ impl Float for float { #[cfg(test)] mod tests { + use num::*; use super::*; use prelude::*; @@ -1063,6 +1068,30 @@ mod tests { assert_eq!(Primitive::bytes::(), sys::size_of::()); } + #[test] + fn test_is_normal() { + assert!(!Float::NaN::().is_normal()); + assert!(!Float::infinity::().is_normal()); + assert!(!Float::neg_infinity::().is_normal()); + assert!(!Zero::zero::().is_normal()); + assert!(!Float::neg_zero::().is_normal()); + assert!(1f.is_normal()); + assert!(1e-307f.is_normal()); + assert!(!1e-308f.is_normal()); + } + + #[test] + fn test_classify() { + assert_eq!(Float::NaN::().classify(), FPNaN); + assert_eq!(Float::infinity::().classify(), FPInfinite); + assert_eq!(Float::neg_infinity::().classify(), FPInfinite); + assert_eq!(Zero::zero::().classify(), FPZero); + assert_eq!(Float::neg_zero::().classify(), FPZero); + assert_eq!(1f.classify(), FPNormal); + assert_eq!(1e-307f.classify(), FPNormal); + assert_eq!(1e-308f.classify(), FPSubnormal); + } + #[test] pub fn test_to_str_exact_do_decimal() { let s = to_str_exact(5.0, 4u); diff --git a/src/libcore/num/num.rs b/src/libcore/num/num.rs index 7a71729e3e73f..50ba55039d408 100644 --- a/src/libcore/num/num.rs +++ b/src/libcore/num/num.rs @@ -237,6 +237,23 @@ pub trait Int: Integer + Bitwise + BitCount {} +/// +/// Used for representing the classification of floating point numbers +/// +#[deriving(Eq)] +pub enum FPCategory { + /// "Not a Number", often obtained by dividing by zero + FPNaN, + /// Positive or negative infinity + FPInfinite , + /// Positive or negative zero + FPZero, + /// De-normalized floating point representation (less precise than `FPNormal`) + FPSubnormal, + /// A regular floating point number + FPNormal, +} + /// /// Primitive floating point numbers /// @@ -253,6 +270,8 @@ pub trait Float: Real fn is_NaN(&self) -> bool; fn is_infinite(&self) -> bool; fn is_finite(&self) -> bool; + fn is_normal(&self) -> bool; + fn classify(&self) -> FPCategory; fn mantissa_digits() -> uint; fn digits() -> uint; From 8e0c6fa5b693e90498045e582a5f66f6a78d67d0 Mon Sep 17 00:00:00 2001 From: Seo Sanghyeon Date: Thu, 2 May 2013 16:59:26 +0900 Subject: [PATCH 249/410] Port IRBuilder::CreateVectorSplat --- src/librustc/middle/trans/build.rs | 20 ++++++++++++++------ src/librustc/middle/trans/common.rs | 6 ++++++ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/librustc/middle/trans/build.rs b/src/librustc/middle/trans/build.rs index c3dc4f1e8eb2b..29fd90edce898 100644 --- a/src/librustc/middle/trans/build.rs +++ b/src/librustc/middle/trans/build.rs @@ -963,20 +963,28 @@ pub fn ExtractElement(cx: block, VecVal: ValueRef, Index: ValueRef) -> } pub fn InsertElement(cx: block, VecVal: ValueRef, EltVal: ValueRef, - Index: ValueRef) { + Index: ValueRef) -> ValueRef { unsafe { - if cx.unreachable { return; } + if cx.unreachable { return llvm::LLVMGetUndef(T_nil()); } count_insn(cx, "insertelement"); - llvm::LLVMBuildInsertElement(B(cx), VecVal, EltVal, Index, noname()); + llvm::LLVMBuildInsertElement(B(cx), VecVal, EltVal, Index, noname()) } } pub fn ShuffleVector(cx: block, V1: ValueRef, V2: ValueRef, - Mask: ValueRef) { + Mask: ValueRef) -> ValueRef { unsafe { - if cx.unreachable { return; } + if cx.unreachable { return llvm::LLVMGetUndef(T_nil()); } count_insn(cx, "shufflevector"); - llvm::LLVMBuildShuffleVector(B(cx), V1, V2, Mask, noname()); + llvm::LLVMBuildShuffleVector(B(cx), V1, V2, Mask, noname()) + } +} + +pub fn VectorSplat(cx: block, NumElts: uint, EltVal: ValueRef) -> ValueRef { + unsafe { + let Undef = llvm::LLVMGetUndef(T_vector(val_ty(EltVal), NumElts)); + let VecVal = InsertElement(cx, Undef, EltVal, C_i32(0)); + ShuffleVector(cx, VecVal, Undef, C_null(T_vector(T_i32(), NumElts))) } } diff --git a/src/librustc/middle/trans/common.rs b/src/librustc/middle/trans/common.rs index 442b5d25c8ba2..b004ba9d41f34 100644 --- a/src/librustc/middle/trans/common.rs +++ b/src/librustc/middle/trans/common.rs @@ -984,6 +984,12 @@ pub fn T_array(t: TypeRef, n: uint) -> TypeRef { } } +pub fn T_vector(t: TypeRef, n: uint) -> TypeRef { + unsafe { + return llvm::LLVMVectorType(t, n as c_uint); + } +} + // Interior vector. pub fn T_vec2(targ_cfg: @session::config, t: TypeRef) -> TypeRef { return T_struct(~[T_int(targ_cfg), // fill From f3217a5c9c2e838cacaf68fe9d54230be7faca6c Mon Sep 17 00:00:00 2001 From: Seo Sanghyeon Date: Thu, 2 May 2013 20:47:11 +0900 Subject: [PATCH 250/410] Check SIMD vector types --- src/librustc/middle/ty.rs | 17 ++++++++++-- src/librustc/middle/typeck/check/mod.rs | 37 ++++++++++++++++++++++++- 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index 892635416c2a4..d06c1efbc3045 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -2381,6 +2381,14 @@ pub fn type_is_signed(ty: t) -> bool { } } +pub fn type_is_machine(ty: t) -> bool { + match get(ty).sty { + ty_int(ast::ty_i) | ty_uint(ast::ty_u) | ty_float(ast::ty_f) => false, + ty_int(*) | ty_uint(*) | ty_float(*) => true, + _ => false + } +} + // Whether a type is Plain Old Data -- meaning it does not contain pointers // that the cycle collector might care about. pub fn type_is_pod(cx: ctxt, ty: t) -> bool { @@ -3896,7 +3904,7 @@ pub fn has_attr(tcx: ctxt, did: def_id, attr: &str) -> bool { attrs: ref attrs, _ }, _)) => attr::attrs_contains_name(*attrs, attr), - _ => tcx.sess.bug(fmt!("lookup_packed: %? is not an item", + _ => tcx.sess.bug(fmt!("has_attr: %? is not an item", did)) } } else { @@ -3908,11 +3916,16 @@ pub fn has_attr(tcx: ctxt, did: def_id, attr: &str) -> bool { } } -/// Determine whether an item is annotated with `#[packed]` or not +/// Determine whether an item is annotated with `#[packed]` pub fn lookup_packed(tcx: ctxt, did: def_id) -> bool { has_attr(tcx, did, "packed") } +/// Determine whether an item is annotated with `#[simd]` +pub fn lookup_simd(tcx: ctxt, did: def_id) -> bool { + has_attr(tcx, did, "simd") +} + // Look up a field ID, whether or not it's local // Takes a list of type substs in case the struct is generic pub fn lookup_field_type(tcx: ctxt, diff --git a/src/librustc/middle/typeck/check/mod.rs b/src/librustc/middle/typeck/check/mod.rs index e171765ef6c4e..9d547a9584f7c 100644 --- a/src/librustc/middle/typeck/check/mod.rs +++ b/src/librustc/middle/typeck/check/mod.rs @@ -561,8 +561,14 @@ pub fn check_no_duplicate_fields(tcx: ty::ctxt, } pub fn check_struct(ccx: @mut CrateCtxt, id: ast::node_id, span: span) { + let tcx = ccx.tcx; + // Check that the class is instantiable - check_instantiable(ccx.tcx, span, id); + check_instantiable(tcx, span, id); + + if ty::lookup_simd(tcx, local_def(id)) { + check_simd(tcx, span, id); + } } pub fn check_item(ccx: @mut CrateCtxt, it: @ast::item) { @@ -3047,6 +3053,35 @@ pub fn check_instantiable(tcx: ty::ctxt, } } +pub fn check_simd(tcx: ty::ctxt, sp: span, id: ast::node_id) { + let t = ty::node_id_to_type(tcx, id); + if ty::type_needs_subst(t) { + tcx.sess.span_err(sp, "SIMD vector cannot be generic"); + return; + } + match ty::get(t).sty { + ty::ty_struct(did, ref substs) => { + let fields = ty::lookup_struct_fields(tcx, did); + if fields.is_empty() { + tcx.sess.span_err(sp, "SIMD vector cannot be empty"); + return; + } + let e = ty::lookup_field_type(tcx, did, fields[0].id, substs); + if !vec::all(fields, + |f| ty::lookup_field_type(tcx, did, f.id, substs) == e) { + tcx.sess.span_err(sp, "SIMD vector should be homogeneous"); + return; + } + if !ty::type_is_machine(e) { + tcx.sess.span_err(sp, "SIMD vector element type should be \ + machine type"); + return; + } + } + _ => () + } +} + pub fn check_enum_variants(ccx: @mut CrateCtxt, sp: span, vs: &[ast::variant], From c5a7be624a85e876ac8dacf0e53d64f0916112d1 Mon Sep 17 00:00:00 2001 From: Seo Sanghyeon Date: Thu, 2 May 2013 21:33:41 +0900 Subject: [PATCH 251/410] Add core::simd and define SIMD vector types --- src/libcore/core.rc | 1 + src/libcore/simd.rs | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 src/libcore/simd.rs diff --git a/src/libcore/core.rc b/src/libcore/core.rc index 127d6dbc77432..5c05c83e35aae 100644 --- a/src/libcore/core.rc +++ b/src/libcore/core.rc @@ -164,6 +164,7 @@ pub mod nil; pub mod bool; pub mod char; pub mod tuple; +pub mod simd; pub mod vec; pub mod at_vec; diff --git a/src/libcore/simd.rs b/src/libcore/simd.rs new file mode 100644 index 0000000000000..a05f6e8af5a64 --- /dev/null +++ b/src/libcore/simd.rs @@ -0,0 +1,43 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! SIMD vectors + +#[allow(non_camel_case_types)]; + +#[simd] +pub struct i8x16(i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8); + +#[simd] +pub struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16); + +#[simd] +pub struct i32x4(i32, i32, i32, i32); + +#[simd] +pub struct i64x2(i64, i64); + +#[simd] +pub struct u8x16(u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8); + +#[simd] +pub struct u16x8(u16, u16, u16, u16, u16, u16, u16, u16); + +#[simd] +pub struct u32x4(u32, u32, u32, u32); + +#[simd] +pub struct u64x2(u64, u64); + +#[simd] +pub struct f32x4(f32, f32, f32, f32); + +#[simd] +pub struct f64x2(f64, f64); From 0e052f5685aa6ae69eb96609c6de3785b312d32d Mon Sep 17 00:00:00 2001 From: Seo Sanghyeon Date: Fri, 3 May 2013 16:19:29 +0900 Subject: [PATCH 252/410] Add SIMD vector type tests --- src/test/compile-fail/simd-type.rs | 13 +++++++++++++ src/test/run-pass/simd-type.rs | 9 +++++++++ 2 files changed, 22 insertions(+) create mode 100644 src/test/compile-fail/simd-type.rs create mode 100644 src/test/run-pass/simd-type.rs diff --git a/src/test/compile-fail/simd-type.rs b/src/test/compile-fail/simd-type.rs new file mode 100644 index 0000000000000..8387b2bc723fa --- /dev/null +++ b/src/test/compile-fail/simd-type.rs @@ -0,0 +1,13 @@ +#[simd] +struct vec4(T, T, T, T); //~ ERROR SIMD vector cannot be generic + +#[simd] +struct empty; //~ ERROR SIMD vector cannot be empty + +#[simd] +struct i64f64(i64, f64); //~ ERROR SIMD vector should be homogeneous + +#[simd] +struct int4(int, int, int, int); //~ ERROR SIMD vector element type should be machine type + +fn main() {} diff --git a/src/test/run-pass/simd-type.rs b/src/test/run-pass/simd-type.rs new file mode 100644 index 0000000000000..c3bcc9d0b7a02 --- /dev/null +++ b/src/test/run-pass/simd-type.rs @@ -0,0 +1,9 @@ +#[simd] +struct RGBA { + r: f32, + g: f32, + b: f32, + a: f32 +} + +fn main() {} From 11f7cb26c27c3eb3af3f7ef4f9cdb85327e6e030 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Tue, 7 May 2013 11:41:27 -0400 Subject: [PATCH 253/410] When autoborrowing a fn in trans, adjust the type of the datum to be `&fn`. Fixes #6141. --- src/librustc/middle/trans/datum.rs | 8 +-- src/librustc/middle/trans/expr.rs | 65 ++++++++++--------- src/librustc/middle/ty.rs | 8 +-- src/librustc/middle/typeck/check/regionck.rs | 25 +++++-- src/rt/rust_task.cpp | 11 +--- .../run-pass/issue-6141-leaking-owned-fn.rs | 8 +++ 6 files changed, 71 insertions(+), 54 deletions(-) create mode 100644 src/test/run-pass/issue-6141-leaking-owned-fn.rs diff --git a/src/librustc/middle/trans/datum.rs b/src/librustc/middle/trans/datum.rs index c19650e3b6848..3b885ae9b94ab 100644 --- a/src/librustc/middle/trans/datum.rs +++ b/src/librustc/middle/trans/datum.rs @@ -548,11 +548,9 @@ pub impl Datum { } fn to_rptr(&self, bcx: block) -> Datum { - //! - // - // Returns a new datum of region-pointer type containing the - // the same ptr as this datum (after converting to by-ref - // using `to_ref_llval()`). + //! Returns a new datum of region-pointer type containing the + //! the same ptr as this datum (after converting to by-ref + //! using `to_ref_llval()`). // Convert to ref, yielding lltype *T. Then create a Rust // type &'static T (which translates to *T). Construct new diff --git a/src/librustc/middle/trans/expr.rs b/src/librustc/middle/trans/expr.rs index 0e8b2e0474661..2c59d5c6bd635 100644 --- a/src/librustc/middle/trans/expr.rs +++ b/src/librustc/middle/trans/expr.rs @@ -183,30 +183,25 @@ fn drop_and_cancel_clean(bcx: block, dat: Datum) -> block { pub fn trans_to_datum(bcx: block, expr: @ast::expr) -> DatumBlock { debug!("trans_to_datum(expr=%s)", bcx.expr_to_str(expr)); - return match bcx.tcx().adjustments.find(&expr.id) { - None => { - trans_to_datum_unadjusted(bcx, expr) - } - Some(&@AutoAddEnv(*)) => { - let mut bcx = bcx; - let datum = unpack_datum!(bcx, { - trans_to_datum_unadjusted(bcx, expr) - }); - add_env(bcx, expr, datum) - } - Some(&@AutoDerefRef(ref adj)) => { - let mut bcx = bcx; - let mut datum = unpack_datum!(bcx, { - trans_to_datum_unadjusted(bcx, expr) - }); - - debug!("unadjusted datum: %s", datum.to_str(bcx.ccx())); + let mut bcx = bcx; + let mut datum = unpack_datum!(bcx, trans_to_datum_unadjusted(bcx, expr)); + let adjustment = match bcx.tcx().adjustments.find_copy(&expr.id) { + None => { return DatumBlock {bcx: bcx, datum: datum}; } + Some(adj) => { adj } + }; + debug!("unadjusted datum: %s", datum.to_str(bcx.ccx())); + match *adjustment { + AutoAddEnv(*) => { + datum = unpack_datum!(bcx, add_env(bcx, expr, datum)); + } + AutoDerefRef(ref adj) => { if adj.autoderefs > 0 { - let DatumBlock { bcx: new_bcx, datum: new_datum } = - datum.autoderef(bcx, expr.span, expr.id, adj.autoderefs); - datum = new_datum; - bcx = new_bcx; + datum = + unpack_datum!( + bcx, + datum.autoderef(bcx, expr.span, + expr.id, adj.autoderefs)); } datum = match adj.autoref { @@ -224,23 +219,31 @@ pub fn trans_to_datum(bcx: block, expr: @ast::expr) -> DatumBlock { unpack_datum!(bcx, auto_slice_and_ref(bcx, expr, datum)) } Some(AutoBorrowFn(*)) => { - // currently, all closure types are - // represented precisely the same, so no - // runtime adjustment is required: - datum + let adjusted_ty = ty::adjust_ty(bcx.tcx(), expr.span, + datum.ty, Some(adjustment)); + unpack_datum!(bcx, auto_borrow_fn(bcx, adjusted_ty, datum)) } }; - - debug!("after adjustments, datum=%s", datum.to_str(bcx.ccx())); - - return DatumBlock {bcx: bcx, datum: datum}; } - }; + } + debug!("after adjustments, datum=%s", datum.to_str(bcx.ccx())); + return DatumBlock {bcx: bcx, datum: datum}; fn auto_ref(bcx: block, datum: Datum) -> DatumBlock { DatumBlock {bcx: bcx, datum: datum.to_rptr(bcx)} } + fn auto_borrow_fn(bcx: block, + adjusted_ty: ty::t, + datum: Datum) -> DatumBlock { + // Currently, all closure types are represented precisely the + // same, so no runtime adjustment is required, but we still + // must patchup the type. + DatumBlock {bcx: bcx, + datum: Datum {val: datum.val, ty: adjusted_ty, + mode: datum.mode, source: datum.source}} + } + fn auto_slice(bcx: block, expr: @ast::expr, datum: Datum) -> DatumBlock { // This is not the most efficient thing possible; since slices // are two words it'd be better if this were compiled in diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index 892635416c2a4..b6e024b011e25 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -2893,20 +2893,20 @@ pub fn expr_ty_adjusted(cx: ctxt, expr: @ast::expr) -> t { */ let unadjusted_ty = expr_ty(cx, expr); - adjust_ty(cx, expr.span, unadjusted_ty, cx.adjustments.find(&expr.id)) + adjust_ty(cx, expr.span, unadjusted_ty, cx.adjustments.find_copy(&expr.id)) } pub fn adjust_ty(cx: ctxt, span: span, unadjusted_ty: ty::t, - adjustment: Option<&@AutoAdjustment>) -> ty::t + adjustment: Option<@AutoAdjustment>) -> ty::t { /*! See `expr_ty_adjusted` */ return match adjustment { None => unadjusted_ty, - Some(&@AutoAddEnv(r, s)) => { + Some(@AutoAddEnv(r, s)) => { match ty::get(unadjusted_ty).sty { ty::ty_bare_fn(ref b) => { ty::mk_closure( @@ -2924,7 +2924,7 @@ pub fn adjust_ty(cx: ctxt, } } - Some(&@AutoDerefRef(ref adj)) => { + Some(@AutoDerefRef(ref adj)) => { let mut adjusted_ty = unadjusted_ty; for uint::range(0, adj.autoderefs) |i| { diff --git a/src/librustc/middle/typeck/check/regionck.rs b/src/librustc/middle/typeck/check/regionck.rs index 6db6b7556aee4..2274259f18c19 100644 --- a/src/librustc/middle/typeck/check/regionck.rs +++ b/src/librustc/middle/typeck/check/regionck.rs @@ -118,6 +118,7 @@ pub impl Rcx { } /// Try to resolve the type for the given node. + #[config(stage0)] fn resolve_expr_type_adjusted(@mut self, expr: @ast::expr) -> ty::t { let ty_unadjusted = self.resolve_node_type(expr.id); if ty::type_is_error(ty_unadjusted) || ty::type_is_bot(ty_unadjusted) { @@ -125,15 +126,29 @@ pub impl Rcx { } else { let tcx = self.fcx.tcx(); let adjustments = self.fcx.inh.adjustments; - match adjustments.find(&expr.id) { + match adjustments.find_copy(&expr.id) { None => ty_unadjusted, - Some(&adjustment) => { - // FIXME(#3850) --- avoid region scoping errors - ty::adjust_ty(tcx, expr.span, ty_unadjusted, Some(&adjustment)) + Some(adjustment) => { + ty::adjust_ty(tcx, expr.span, ty_unadjusted, + Some(adjustment)) } } } } + + /// Try to resolve the type for the given node. + #[config(not(stage0))] + fn resolve_expr_type_adjusted(@mut self, expr: @ast::expr) -> ty::t { + let ty_unadjusted = self.resolve_node_type(expr.id); + if ty::type_is_error(ty_unadjusted) || ty::type_is_bot(ty_unadjusted) { + ty_unadjusted + } else { + let tcx = self.fcx.tcx(); + let adjustments = self.fcx.inh.adjustments; + ty::adjust_ty(tcx, expr.span, ty_unadjusted, + adjustments.find_copy(&expr.id)) + } + } } pub fn regionck_expr(fcx: @mut FnCtxt, e: @ast::expr) { @@ -650,7 +665,7 @@ fn constrain_regions_in_type_of_node( // is going to fail anyway, so just stop here and let typeck // report errors later on in the writeback phase. let ty0 = rcx.resolve_node_type(id); - let adjustment = rcx.fcx.inh.adjustments.find(&id); + let adjustment = rcx.fcx.inh.adjustments.find_copy(&id); let ty = ty::adjust_ty(tcx, span, ty0, adjustment); debug!("constrain_regions_in_type_of_node(\ ty=%s, ty0=%s, id=%d, minimum_lifetime=%?, adjustment=%?)", diff --git a/src/rt/rust_task.cpp b/src/rt/rust_task.cpp index 23e705357685d..266c0652c6e59 100644 --- a/src/rt/rust_task.cpp +++ b/src/rt/rust_task.cpp @@ -76,15 +76,8 @@ rust_task::delete_this() assert(ref_count == 0); // || // (ref_count == 1 && this == sched->root_task)); - if (borrow_list) { - // NOTE should free borrow_list from within rust code! - // If there is a pointer in there, it is a ~[BorrowRecord] pointer, - // which are currently allocated with LIBC malloc/free. But this is - // not really the right way to do this, we should be freeing this - // pointer from Rust code. - free(borrow_list); - borrow_list = NULL; - } + // The borrow list should be freed in the task annihilator + assert(!borrow_list); sched_loop->release_task(this); } diff --git a/src/test/run-pass/issue-6141-leaking-owned-fn.rs b/src/test/run-pass/issue-6141-leaking-owned-fn.rs new file mode 100644 index 0000000000000..fe11bb0a972ad --- /dev/null +++ b/src/test/run-pass/issue-6141-leaking-owned-fn.rs @@ -0,0 +1,8 @@ +fn run(f: &fn()) { + f() +} + +fn main() { + let f: ~fn() = || (); + run(f); +} \ No newline at end of file From 6af447a271a52d0eb4b5e8e3d66e7aede967ac52 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Tue, 7 May 2013 11:58:57 -0400 Subject: [PATCH 254/410] Add test for #4666, which didn't *quite* seem to be covered by existing tests. The bug itself was fixed as part of recent borrowck reform. Fixes #4666. --- .../borrowck-scope-of-deref-issue-4666.rs | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 src/test/run-pass/borrowck-scope-of-deref-issue-4666.rs diff --git a/src/test/run-pass/borrowck-scope-of-deref-issue-4666.rs b/src/test/run-pass/borrowck-scope-of-deref-issue-4666.rs new file mode 100644 index 0000000000000..59e82a038bc79 --- /dev/null +++ b/src/test/run-pass/borrowck-scope-of-deref-issue-4666.rs @@ -0,0 +1,50 @@ +// Copyright 2012-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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Tests that the scope of the pointer returned from `get()` is +// limited to the deref operation itself, and does not infect the +// block as a whole. + +struct Box { + x: uint +} + +impl Box { + fn get<'a>(&'a self) -> &'a uint { + &self.x + } + fn set(&mut self, x: uint) { + self.x = x; + } +} + +fn fun1() { + // in the past, borrow checker behaved differently when + // init and decl of `v` were distinct + let v; + let mut box = Box {x: 0}; + box.set(22); + v = *box.get(); + box.set(v+1); + assert_eq!(23, *box.get()); +} + +fn fun2() { + let mut box = Box {x: 0}; + box.set(22); + let v = *box.get(); + box.set(v+1); + assert_eq!(23, *box.get()); +} + +pub fn main() { + fun1(); + fun2(); +} \ No newline at end of file From 784e8369caf0e04fb7fe5a5330f286aa195dfb82 Mon Sep 17 00:00:00 2001 From: Seo Sanghyeon Date: Wed, 8 May 2013 01:01:31 +0900 Subject: [PATCH 255/410] Remove trailing whitespace --- src/librustc/middle/ty.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index d06c1efbc3045..2b46497b77d0b 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -3921,7 +3921,7 @@ pub fn lookup_packed(tcx: ctxt, did: def_id) -> bool { has_attr(tcx, did, "packed") } -/// Determine whether an item is annotated with `#[simd]` +/// Determine whether an item is annotated with `#[simd]` pub fn lookup_simd(tcx: ctxt, did: def_id) -> bool { has_attr(tcx, did, "simd") } From 43165b54e05d0640fda8cf419de09d9f6d032724 Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Tue, 7 May 2013 12:57:28 -0400 Subject: [PATCH 256/410] rc: remove the managed pointer workaround --- src/libstd/rc.rs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/libstd/rc.rs b/src/libstd/rc.rs index 3eb480f9ea893..6f72d8dc16dfd 100644 --- a/src/libstd/rc.rs +++ b/src/libstd/rc.rs @@ -24,9 +24,9 @@ struct RcBox { } /// Immutable reference counted pointer type +#[non_owned] pub struct Rc { priv ptr: *mut RcBox, - priv non_owned: Option<@()> // FIXME: #5601: replace with `#[non_owned]` } pub impl<'self, T: Owned> Rc { @@ -35,7 +35,7 @@ pub impl<'self, T: Owned> Rc { let ptr = malloc(sys::size_of::>() as size_t) as *mut RcBox; assert!(!ptr::is_null(ptr)); intrinsics::move_val_init(&mut *ptr, RcBox{value: value, count: 1}); - Rc{ptr: ptr, non_owned: None} + Rc{ptr: ptr} } } @@ -64,7 +64,7 @@ impl Clone for Rc { fn clone(&self) -> Rc { unsafe { (*self.ptr).count += 1; - Rc{ptr: self.ptr, non_owned: None} + Rc{ptr: self.ptr} } } } @@ -113,9 +113,10 @@ struct RcMutBox { } /// Mutable reference counted pointer type +#[non_owned] +#[mutable] pub struct RcMut { priv ptr: *mut RcMutBox, - priv non_owned: Option<@mut ()> // FIXME: #5601: replace with `#[non_owned]` and `#[non_const]` } pub impl<'self, T: Owned> RcMut { @@ -124,7 +125,7 @@ pub impl<'self, T: Owned> RcMut { let ptr = malloc(sys::size_of::>() as size_t) as *mut RcMutBox; assert!(!ptr::is_null(ptr)); intrinsics::move_val_init(&mut *ptr, RcMutBox{value: value, count: 1, borrow: Nothing}); - RcMut{ptr: ptr, non_owned: None} + RcMut{ptr: ptr} } } @@ -171,7 +172,7 @@ impl Clone for RcMut { fn clone(&self) -> RcMut { unsafe { (*self.ptr).count += 1; - RcMut{ptr: self.ptr, non_owned: None} + RcMut{ptr: self.ptr} } } } From 96eb1e50a49ce24adf198458e3d09fcd1117a70f Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Tue, 7 May 2013 13:00:00 -0400 Subject: [PATCH 257/410] arc: mark RWARC as non-Const --- src/libstd/arc.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libstd/arc.rs b/src/libstd/arc.rs index 98d7a01b928b0..6c39fa1f9dcbb 100644 --- a/src/libstd/arc.rs +++ b/src/libstd/arc.rs @@ -252,6 +252,7 @@ struct RWARCInner { lock: RWlock, failed: bool, data: T } * * Unlike mutex_arcs, rw_arcs are safe, because they cannot be nested. */ +#[mutable] struct RWARC { x: SharedMutableState>, cant_nest: () From 0ed4495ac4c262a8361dded6900e4e69b1faaee1 Mon Sep 17 00:00:00 2001 From: Seo Sanghyeon Date: Wed, 8 May 2013 02:09:19 +0900 Subject: [PATCH 258/410] Generate LLVM SIMD vector types --- src/librustc/middle/trans/type_of.rs | 43 ++++++++++++++++++---------- src/librustc/middle/ty.rs | 27 +++++++++++++++++ 2 files changed, 55 insertions(+), 15 deletions(-) diff --git a/src/librustc/middle/trans/type_of.rs b/src/librustc/middle/trans/type_of.rs index fc27c11c06f24..b8e0b58f86634 100644 --- a/src/librustc/middle/trans/type_of.rs +++ b/src/librustc/middle/trans/type_of.rs @@ -155,9 +155,15 @@ pub fn sizing_type_of(cx: @CrateContext, t: ty::t) -> TypeRef { } ty::ty_struct(did, _) => { - let repr = adt::represent_type(cx, t); - let packed = ty::lookup_packed(cx.tcx, did); - T_struct(adt::sizing_fields_of(cx, repr), packed) + if ty::type_is_simd(cx.tcx, t) { + let et = ty::simd_type(cx.tcx, t); + let n = ty::simd_size(cx.tcx, t); + T_vector(type_of(cx, et), n) + } else { + let repr = adt::represent_type(cx, t); + let packed = ty::lookup_packed(cx.tcx, did); + T_struct(adt::sizing_fields_of(cx, repr), packed) + } } ty::ty_self(_) | ty::ty_infer(*) | ty::ty_param(*) | ty::ty_err(*) => { @@ -263,14 +269,19 @@ pub fn type_of(cx: @CrateContext, t: ty::t) -> TypeRef { } ty::ty_opaque_closure_ptr(_) => T_opaque_box_ptr(cx), ty::ty_struct(did, ref substs) => { - // Only create the named struct, but don't fill it in. We fill it - // in *after* placing it into the type cache. This prevents - // infinite recursion with recursive struct types. - - common::T_named_struct(llvm_type_name(cx, - a_struct, - did, - /*bad*/ copy substs.tps)) + if ty::type_is_simd(cx.tcx, t) { + let et = ty::simd_type(cx.tcx, t); + let n = ty::simd_size(cx.tcx, t); + T_vector(type_of(cx, et), n) + } else { + // Only create the named struct, but don't fill it in. We fill it + // in *after* placing it into the type cache. This prevents + // infinite recursion with recursive struct types. + T_named_struct(llvm_type_name(cx, + a_struct, + did, + /*bad*/ copy substs.tps)) + } } ty::ty_self(*) => cx.tcx.sess.unimpl(~"type_of: ty_self"), ty::ty_infer(*) => cx.tcx.sess.bug(~"type_of with ty_infer"), @@ -289,10 +300,12 @@ pub fn type_of(cx: @CrateContext, t: ty::t) -> TypeRef { } ty::ty_struct(did, _) => { - let repr = adt::represent_type(cx, t); - let packed = ty::lookup_packed(cx.tcx, did); - common::set_struct_body(llty, adt::fields_of(cx, repr), - packed); + if !ty::type_is_simd(cx.tcx, t) { + let repr = adt::represent_type(cx, t); + let packed = ty::lookup_packed(cx.tcx, did); + common::set_struct_body(llty, adt::fields_of(cx, repr), + packed); + } } _ => () } diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index 2b46497b77d0b..4d1d271698c42 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -1567,6 +1567,13 @@ pub fn type_is_sequence(ty: t) -> bool { } } +pub fn type_is_simd(cx: ctxt, ty: t) -> bool { + match get(ty).sty { + ty_struct(did, _) => lookup_simd(cx, did), + _ => false + } +} + pub fn type_is_str(ty: t) -> bool { match get(ty).sty { ty_estr(_) => true, @@ -1583,6 +1590,26 @@ pub fn sequence_element_type(cx: ctxt, ty: t) -> t { } } +pub fn simd_type(cx: ctxt, ty: t) -> t { + match get(ty).sty { + ty_struct(did, ref substs) => { + let fields = lookup_struct_fields(cx, did); + lookup_field_type(cx, did, fields[0].id, substs) + } + _ => fail!(~"simd_type called on invalid type") + } +} + +pub fn simd_size(cx: ctxt, ty: t) -> uint { + match get(ty).sty { + ty_struct(did, _) => { + let fields = lookup_struct_fields(cx, did); + fields.len() + } + _ => fail!(~"simd_size called on invalid type") + } +} + pub fn get_element_type(ty: t, i: uint) -> t { match get(ty).sty { ty_tup(ref ts) => return ts[i], From 4cd51c416b8cf1a9d89089c99b8a1e2ac2f7255a Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Mon, 6 May 2013 16:29:54 -0700 Subject: [PATCH 259/410] rt: Move win32_require out of the rust_kernel type This is only used on rust_rng, which I am trying to extricate from the kernel. --- src/rt/rust_kernel.cpp | 19 ------------------- src/rt/rust_kernel.h | 4 ---- src/rt/rust_rng.cpp | 26 +++++++++++++++++++++++--- 3 files changed, 23 insertions(+), 26 deletions(-) diff --git a/src/rt/rust_kernel.cpp b/src/rt/rust_kernel.cpp index 761dbeade538b..bf48554696ebd 100644 --- a/src/rt/rust_kernel.cpp +++ b/src/rt/rust_kernel.cpp @@ -257,25 +257,6 @@ rust_kernel::generate_task_id() { return id; } -#ifdef __WIN32__ -void -rust_kernel::win32_require(LPCTSTR fn, BOOL ok) { - if (!ok) { - LPTSTR buf; - DWORD err = GetLastError(); - FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, err, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPTSTR) &buf, 0, NULL ); - KLOG_ERR_(dom, "%s failed with error %ld: %s", fn, err, buf); - LocalFree((HLOCAL)buf); - assert(ok); - } -} -#endif - void rust_kernel::set_exit_status(int code) { scoped_lock with(rval_lock); diff --git a/src/rt/rust_kernel.h b/src/rt/rust_kernel.h index ec0515faeafc0..4976dec149a02 100644 --- a/src/rt/rust_kernel.h +++ b/src/rt/rust_kernel.h @@ -147,10 +147,6 @@ class rust_kernel { void wait_for_schedulers(); int run(); -#ifdef __WIN32__ - void win32_require(LPCTSTR fn, BOOL ok); -#endif - rust_task_id generate_task_id(); void set_exit_status(int code); diff --git a/src/rt/rust_rng.cpp b/src/rt/rust_rng.cpp index 2c11691bf86b9..d55f9b5f2bcd9 100644 --- a/src/rt/rust_rng.cpp +++ b/src/rt/rust_rng.cpp @@ -12,6 +12,26 @@ #include "rust_rng.h" #include "rust_util.h" + +#ifdef __WIN32__ +void +win32_require(LPCTSTR fn, BOOL ok) { + if (!ok) { + LPTSTR buf; + DWORD err = GetLastError(); + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, err, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPTSTR) &buf, 0, NULL ); + fprintf(stderr, "%s failed with error %ld: %s", fn, err, buf); + LocalFree((HLOCAL)buf); + abort(); + } +} +#endif + size_t rng_seed_size() { randctx rctx; @@ -24,13 +44,13 @@ void rng_gen_seed(rust_kernel* kernel, uint8_t* dest, size_t size) { #ifdef __WIN32__ HCRYPTPROV hProv; - kernel->win32_require + win32_require (_T("CryptAcquireContext"), CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT|CRYPT_SILENT)); - kernel->win32_require + win32_require (_T("CryptGenRandom"), CryptGenRandom(hProv, size, (BYTE*) dest)); - kernel->win32_require + win32_require (_T("CryptReleaseContext"), CryptReleaseContext(hProv, 0)); #else int fd = open("/dev/urandom", O_RDONLY); From 21aaa7fb13793e7a4cf0c62653035f6f09a20d9e Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Mon, 6 May 2013 17:07:38 -0700 Subject: [PATCH 260/410] rt: Eliminate the dependency on rust_kernel from rust_rng --- src/rt/rust_builtin.cpp | 9 +++---- src/rt/rust_rng.cpp | 50 ++++++++++++++++++++------------------ src/rt/rust_rng.h | 7 +++--- src/rt/rust_sched_loop.cpp | 4 +-- 4 files changed, 36 insertions(+), 34 deletions(-) diff --git a/src/rt/rust_builtin.cpp b/src/rt/rust_builtin.cpp index a491379153e1a..885b40c0a5062 100644 --- a/src/rt/rust_builtin.cpp +++ b/src/rt/rust_builtin.cpp @@ -88,8 +88,7 @@ rand_seed_size() { extern "C" CDECL void rand_gen_seed(uint8_t* dest, size_t size) { - rust_task *task = rust_get_current_task(); - rng_gen_seed(task->kernel, dest, size); + rng_gen_seed(dest, size); } extern "C" CDECL void * @@ -101,14 +100,14 @@ rand_new_seeded(uint8_t* seed, size_t seed_size) { task->fail(); return NULL; } - rng_init(task->kernel, rng, seed, seed_size); + char *env_seed = task->kernel->env->rust_seed; + rng_init(rng, env_seed, seed, seed_size); return rng; } extern "C" CDECL uint32_t rand_next(rust_rng *rng) { - rust_task *task = rust_get_current_task(); - return rng_gen_u32(task->kernel, rng); + return rng_gen_u32(rng); } extern "C" CDECL void diff --git a/src/rt/rust_rng.cpp b/src/rt/rust_rng.cpp index d55f9b5f2bcd9..27015891feebd 100644 --- a/src/rt/rust_rng.cpp +++ b/src/rt/rust_rng.cpp @@ -41,7 +41,7 @@ rng_seed_size() { // Initialization helpers for ISAAC RNG void -rng_gen_seed(rust_kernel* kernel, uint8_t* dest, size_t size) { +rng_gen_seed(uint8_t* dest, size_t size) { #ifdef __WIN32__ HCRYPTPROV hProv; win32_require @@ -54,31 +54,37 @@ rng_gen_seed(rust_kernel* kernel, uint8_t* dest, size_t size) { (_T("CryptReleaseContext"), CryptReleaseContext(hProv, 0)); #else int fd = open("/dev/urandom", O_RDONLY); - if (fd == -1) - kernel->fatal("error opening /dev/urandom: %s", strerror(errno)); + if (fd == -1) { + fprintf(stderr, "error opening /dev/urandom: %s", strerror(errno)); + abort(); + } size_t amount = 0; do { ssize_t ret = read(fd, dest+amount, size-amount); - if (ret < 0) - kernel->fatal("error reading /dev/urandom: %s", strerror(errno)); - else if (ret == 0) - kernel->fatal("somehow hit eof reading from /dev/urandom"); + if (ret < 0) { + fprintf(stderr, "error reading /dev/urandom: %s", strerror(errno)); + abort(); + } + else if (ret == 0) { + fprintf(stderr, "somehow hit eof reading from /dev/urandom"); + abort(); + } amount += (size_t)ret; } while (amount < size); int ret = close(fd); - // FIXME #3697: Why does this fail sometimes? - if (ret != 0) - kernel->log(log_warn, "error closing /dev/urandom: %s", - strerror(errno)); + if (ret != 0) { + fprintf(stderr, "error closing /dev/urandom: %s", strerror(errno)); + // FIXME #3697: Why does this fail sometimes? + // abort(); + } #endif } static void -isaac_init(rust_kernel *kernel, randctx *rctx, +isaac_init(randctx *rctx, char *env_seed, uint8_t* user_seed, size_t seed_len) { memset(rctx, 0, sizeof(randctx)); - char *env_seed = kernel->env->rust_seed; if (user_seed != NULL) { // ignore bytes after the required length if (seed_len > sizeof(rctx->randrsl)) { @@ -92,8 +98,7 @@ isaac_init(rust_kernel *kernel, randctx *rctx, seed = (seed + 0x7ed55d16) + (seed << 12); } } else { - rng_gen_seed(kernel, - (uint8_t*)&rctx->randrsl, + rng_gen_seed((uint8_t*)&rctx->randrsl, sizeof(rctx->randrsl)); } @@ -101,14 +106,14 @@ isaac_init(rust_kernel *kernel, randctx *rctx, } void -rng_init(rust_kernel* kernel, rust_rng* rng, +rng_init(rust_rng* rng, char* env_seed, uint8_t *user_seed, size_t seed_len) { - isaac_init(kernel, &rng->rctx, user_seed, seed_len); - rng->reseedable = !user_seed && !kernel->env->rust_seed; + isaac_init(&rng->rctx, env_seed, user_seed, seed_len); + rng->reseedable = !user_seed && !env_seed; } static void -rng_maybe_reseed(rust_kernel* kernel, rust_rng* rng) { +rng_maybe_reseed(rust_rng* rng) { // If this RNG has generated more than 32KB of random data and was not // seeded by the user or RUST_SEED, then we should reseed now. const size_t RESEED_THRESHOLD = 32 * 1024; @@ -116,16 +121,15 @@ rng_maybe_reseed(rust_kernel* kernel, rust_rng* rng) { if (bytes_generated < RESEED_THRESHOLD || !rng->reseedable) { return; } - rng_gen_seed(kernel, - (uint8_t*)rng->rctx.randrsl, + rng_gen_seed((uint8_t*)rng->rctx.randrsl, sizeof(rng->rctx.randrsl)); randinit(&rng->rctx, 1); } uint32_t -rng_gen_u32(rust_kernel* kernel, rust_rng* rng) { +rng_gen_u32(rust_rng* rng) { uint32_t x = isaac_rand(&rng->rctx); - rng_maybe_reseed(kernel, rng); + rng_maybe_reseed(rng); return x; } diff --git a/src/rt/rust_rng.h b/src/rt/rust_rng.h index 3879b1138fa20..a13b5acd0eff2 100644 --- a/src/rt/rust_rng.h +++ b/src/rt/rust_rng.h @@ -23,11 +23,10 @@ struct rust_rng { }; size_t rng_seed_size(); -void rng_gen_seed(rust_kernel* kernel, - uint8_t* dest, size_t size); -void rng_init(rust_kernel *kernel, rust_rng *rng, +void rng_gen_seed(uint8_t* dest, size_t size); +void rng_init(rust_rng *rng, char *env_seed, uint8_t *user_seed, size_t seed_len); -uint32_t rng_gen_u32(rust_kernel *kernel, rust_rng *rng); +uint32_t rng_gen_u32(rust_rng *rng); // // Local Variables: diff --git a/src/rt/rust_sched_loop.cpp b/src/rt/rust_sched_loop.cpp index 2911b970b1359..1f718df32aac9 100644 --- a/src/rt/rust_sched_loop.cpp +++ b/src/rt/rust_sched_loop.cpp @@ -43,7 +43,7 @@ rust_sched_loop::rust_sched_loop(rust_scheduler *sched, int id, bool killed) : name("main") { LOGPTR(this, "new dom", (uintptr_t)this); - rng_init(kernel, &rng, NULL, 0); + rng_init(&rng, kernel->env->rust_seed, NULL, 0); if (!tls_initialized) init_tls(); @@ -154,7 +154,7 @@ rust_sched_loop::schedule_task() { lock.must_have_lock(); size_t tasks = running_tasks.length(); if (tasks > 0) { - size_t i = (tasks > 1) ? (rng_gen_u32(kernel, &rng) % tasks) : 0; + size_t i = (tasks > 1) ? (rng_gen_u32(&rng) % tasks) : 0; return running_tasks[i]; } return NULL; From 3b6a32d7c90805dab8c08f6969249ac01bce875a Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Mon, 6 May 2013 18:24:37 -0700 Subject: [PATCH 261/410] core::rt: Add a test that rng works with new tasks --- src/libcore/rt/local_services.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/libcore/rt/local_services.rs b/src/libcore/rt/local_services.rs index a03bc6c409f8b..b83e1d2464890 100644 --- a/src/libcore/rt/local_services.rs +++ b/src/libcore/rt/local_services.rs @@ -220,4 +220,13 @@ mod test { assert!(result.is_err()); } } + + #[test] + fn rng() { + do run_in_newsched_task() { + use rand::{rng, Rng}; + let r = rng(); + let _ = r.next(); + } + } } \ No newline at end of file From 6bcc3a6c5742b5436d0c7f8be4bfb79f7eacd760 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Tue, 7 May 2013 13:53:25 -0700 Subject: [PATCH 262/410] Add some tests for local data + borrowed pointers --- src/libcore/task/local_data.rs | 9 ++++++++ .../compile-fail/core-tls-store-pointer.rs | 21 +++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 src/test/compile-fail/core-tls-store-pointer.rs diff --git a/src/libcore/task/local_data.rs b/src/libcore/task/local_data.rs index dff5908c04796..89a31b7b3f598 100644 --- a/src/libcore/task/local_data.rs +++ b/src/libcore/task/local_data.rs @@ -215,3 +215,12 @@ fn test_tls_cleanup_on_failure() { fail!(); } } + +#[test] +fn test_static_pointer() { + unsafe { + fn key(_x: @&'static int) { } + static VALUE: int = 0; + local_data_set(key, @&VALUE); + } +} \ No newline at end of file diff --git a/src/test/compile-fail/core-tls-store-pointer.rs b/src/test/compile-fail/core-tls-store-pointer.rs new file mode 100644 index 0000000000000..42cf9c793d118 --- /dev/null +++ b/src/test/compile-fail/core-tls-store-pointer.rs @@ -0,0 +1,21 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Testing that we can't store a borrowed pointer it task-local storage + +use core::task::local_data::*; + +fn key(_x: @&int) { } + +fn main() { + unsafe { + local_data_set(key, @&0); //~ ERROR does not fulfill `'static` + } +} \ No newline at end of file From db1a274bf54343605c8ac3a38a6c69f7d930192b Mon Sep 17 00:00:00 2001 From: Fedor Indutny Date: Wed, 8 May 2013 01:01:04 +0400 Subject: [PATCH 263/410] io: handle fread() errors When, occasionally, trying to read directory instead of file, `fread()` returns `EISDIR` error. And, considering, absence of error handling, `read_whole_stream()` just loops indefinitely. --- src/libcore/io.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/libcore/io.rs b/src/libcore/io.rs index 460fd60d4c56b..64b69a7928b5f 100644 --- a/src/libcore/io.rs +++ b/src/libcore/io.rs @@ -868,9 +868,19 @@ impl Reader for *libc::FILE { assert!(buf_len >= len); let count = libc::fread(buf_p as *mut c_void, 1u as size_t, - len as size_t, *self); + len as size_t, *self) as uint; + if count < len { + match libc::ferror(*self) { + 0 => (), + _ => { + error!("error reading buffer"); + error!("%s", os::last_os_error()); + fail!(); + } + } + } - count as uint + count } } } From 398cd18bfeba5d2c143b4b4e722a16ec9a2de2e8 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Tue, 7 May 2013 14:43:48 -0700 Subject: [PATCH 264/410] core: Replace Durable with 'static --- src/libcore/task/local_data.rs | 8 ++++---- src/libcore/task/local_data_priv.rs | 16 ++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/libcore/task/local_data.rs b/src/libcore/task/local_data.rs index 89a31b7b3f598..d4b02a0ad9bbf 100644 --- a/src/libcore/task/local_data.rs +++ b/src/libcore/task/local_data.rs @@ -49,7 +49,7 @@ pub type LocalDataKey<'self,T> = &'self fn(v: @T); * Remove a task-local data value from the table, returning the * reference that was originally created to insert it. */ -pub unsafe fn local_data_pop( +pub unsafe fn local_data_pop( key: LocalDataKey) -> Option<@T> { local_pop(Handle::new(), key) @@ -58,7 +58,7 @@ pub unsafe fn local_data_pop( * Retrieve a task-local data value. It will also be kept alive in the * table until explicitly removed. */ -pub unsafe fn local_data_get( +pub unsafe fn local_data_get( key: LocalDataKey) -> Option<@T> { local_get(Handle::new(), key) @@ -67,7 +67,7 @@ pub unsafe fn local_data_get( * Store a value in task-local data. If this key already has a value, * that value is overwritten (and its destructor is run). */ -pub unsafe fn local_data_set( +pub unsafe fn local_data_set( key: LocalDataKey, data: @T) { local_set(Handle::new(), key, data) @@ -76,7 +76,7 @@ pub unsafe fn local_data_set( * Modify a task-local data value. If the function returns 'None', the * data is removed (and its reference dropped). */ -pub unsafe fn local_data_modify( +pub unsafe fn local_data_modify( key: LocalDataKey, modify_fn: &fn(Option<@T>) -> Option<@T>) { diff --git a/src/libcore/task/local_data_priv.rs b/src/libcore/task/local_data_priv.rs index 10a40887e5792..7240e0ca0a5ff 100644 --- a/src/libcore/task/local_data_priv.rs +++ b/src/libcore/task/local_data_priv.rs @@ -44,7 +44,7 @@ impl Handle { } pub trait LocalData { } -impl LocalData for @T { } +impl LocalData for @T { } impl Eq for @LocalData { fn eq(&self, other: &@LocalData) -> bool { @@ -131,7 +131,7 @@ unsafe fn get_newsched_local_map(local: *mut LocalStorage) -> TaskLocalMap { } } -unsafe fn key_to_key_value(key: LocalDataKey) -> *libc::c_void { +unsafe fn key_to_key_value(key: LocalDataKey) -> *libc::c_void { // Keys are closures, which are (fnptr,envptr) pairs. Use fnptr. // Use reintepret_cast -- transmute would leak (forget) the closure. let pair: (*libc::c_void, *libc::c_void) = cast::transmute_copy(&key); @@ -139,7 +139,7 @@ unsafe fn key_to_key_value(key: LocalDataKey) -> *libc::c_void { } // If returning Some(..), returns with @T with the map's reference. Careful! -unsafe fn local_data_lookup( +unsafe fn local_data_lookup( map: TaskLocalMap, key: LocalDataKey) -> Option<(uint, *libc::c_void)> { @@ -157,7 +157,7 @@ unsafe fn local_data_lookup( } } -unsafe fn local_get_helper( +unsafe fn local_get_helper( handle: Handle, key: LocalDataKey, do_pop: bool) -> Option<@T> { @@ -179,21 +179,21 @@ unsafe fn local_get_helper( } -pub unsafe fn local_pop( +pub unsafe fn local_pop( handle: Handle, key: LocalDataKey) -> Option<@T> { local_get_helper(handle, key, true) } -pub unsafe fn local_get( +pub unsafe fn local_get( handle: Handle, key: LocalDataKey) -> Option<@T> { local_get_helper(handle, key, false) } -pub unsafe fn local_set( +pub unsafe fn local_set( handle: Handle, key: LocalDataKey, data: @T) { let map = get_local_map(handle); @@ -225,7 +225,7 @@ pub unsafe fn local_set( } } -pub unsafe fn local_modify( +pub unsafe fn local_modify( handle: Handle, key: LocalDataKey, modify_fn: &fn(Option<@T>) -> Option<@T>) { From ccc4c1a5e01e5bc7ea389511e906c4bb160783e8 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Tue, 7 May 2013 14:54:42 -0700 Subject: [PATCH 265/410] std: Replace Durable with 'static --- src/libstd/deque.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libstd/deque.rs b/src/libstd/deque.rs index 65e71869a1f0f..4c7f2edc6b048 100644 --- a/src/libstd/deque.rs +++ b/src/libstd/deque.rs @@ -148,7 +148,7 @@ fn get<'r, T>(elts: &'r [Option], i: uint) -> &'r T { mod tests { use super::*; use core::cmp::Eq; - use core::kinds::{Durable, Copy}; + use core::kinds::Copy; #[test] fn test_simple() { @@ -232,7 +232,7 @@ mod tests { } #[cfg(test)] - fn test_parameterized(a: T, b: T, c: T, d: T) { + fn test_parameterized(a: T, b: T, c: T, d: T) { let mut deq = Deque::new(); assert!(deq.len() == 0); deq.add_front(a); From d8ef723d490a8c98a4324a850a629e476011faf4 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Tue, 7 May 2013 15:30:57 -0700 Subject: [PATCH 266/410] rustc: Replace Durable with 'static --- src/librustc/middle/typeck/astconv.rs | 28 +++++++++++++-------------- src/librustc/middle/typeck/collect.rs | 4 ++-- src/librustc/middle/typeck/rscope.rs | 2 +- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/librustc/middle/typeck/astconv.rs b/src/librustc/middle/typeck/astconv.rs index 7ef77646f5203..0baad7e7b7a7b 100644 --- a/src/librustc/middle/typeck/astconv.rs +++ b/src/librustc/middle/typeck/astconv.rs @@ -101,7 +101,7 @@ pub fn get_region_reporting_err( } } -pub fn ast_region_to_region( +pub fn ast_region_to_region( self: &AC, rscope: &RS, default_span: span, @@ -126,7 +126,7 @@ pub fn ast_region_to_region( get_region_reporting_err(self.tcx(), span, opt_lifetime, res) } -fn ast_path_substs( +fn ast_path_substs( self: &AC, rscope: &RS, def_id: ast::def_id, @@ -180,7 +180,7 @@ fn ast_path_substs( substs {self_r:self_r, self_ty:self_ty, tps:tps} } -pub fn ast_path_to_substs_and_ty( +pub fn ast_path_to_substs_and_ty( self: &AC, rscope: &RS, did: ast::def_id, @@ -197,7 +197,7 @@ pub fn ast_path_to_substs_and_ty( ty_param_substs_and_ty { substs: substs, ty: ty } } -pub fn ast_path_to_trait_ref( +pub fn ast_path_to_trait_ref( self: &AC, rscope: &RS, trait_def_id: ast::def_id, @@ -221,7 +221,7 @@ pub fn ast_path_to_trait_ref( } -pub fn ast_path_to_ty( +pub fn ast_path_to_ty( self: &AC, rscope: &RS, did: ast::def_id, @@ -243,10 +243,10 @@ pub static NO_TPS: uint = 2; // Parses the programmer's textual representation of a type into our // internal notion of a type. `getter` is a function that returns the type // corresponding to a definition ID: -pub fn ast_ty_to_ty( +pub fn ast_ty_to_ty( self: &AC, rscope: &RS, ast_ty: @ast::Ty) -> ty::t { - fn ast_mt_to_mt( + fn ast_mt_to_mt( self: &AC, rscope: &RS, mt: &ast::mt) -> ty::mt { ty::mt {ty: ast_ty_to_ty(self, rscope, mt.ty), mutbl: mt.mutbl} @@ -255,7 +255,7 @@ pub fn ast_ty_to_ty( // Handle @, ~, and & being able to mean estrs and evecs. // If a_seq_ty is a str or a vec, make it an estr/evec. // Also handle first-class trait types. - fn mk_pointer( + fn mk_pointer( self: &AC, rscope: &RS, a_seq_ty: &ast::mt, @@ -497,7 +497,7 @@ pub fn ast_ty_to_ty( } pub fn ty_of_arg( + RS:region_scope + Copy + 'static>( self: &AC, rscope: &RS, a: ast::arg, @@ -549,7 +549,7 @@ struct SelfInfo { self_transform: ast::self_ty } -pub fn ty_of_method( +pub fn ty_of_method( self: &AC, rscope: &RS, purity: ast::purity, @@ -567,7 +567,7 @@ pub fn ty_of_method( (a.get(), b) } -pub fn ty_of_bare_fn( +pub fn ty_of_bare_fn( self: &AC, rscope: &RS, purity: ast::purity, @@ -580,7 +580,7 @@ pub fn ty_of_bare_fn( b } -fn ty_of_method_or_bare_fn( +fn ty_of_method_or_bare_fn( self: &AC, rscope: &RS, purity: ast::purity, @@ -616,7 +616,7 @@ fn ty_of_method_or_bare_fn( output: output_ty} }); - fn transform_self_ty( + fn transform_self_ty( self: &AC, rscope: &RS, self_info: &SelfInfo) -> Option @@ -649,7 +649,7 @@ fn ty_of_method_or_bare_fn( } } -pub fn ty_of_closure( +pub fn ty_of_closure( self: &AC, rscope: &RS, sigil: ast::Sigil, diff --git a/src/librustc/middle/typeck/collect.rs b/src/librustc/middle/typeck/collect.rs index 22850c16f9436..13d1428c30aa4 100644 --- a/src/librustc/middle/typeck/collect.rs +++ b/src/librustc/middle/typeck/collect.rs @@ -116,7 +116,7 @@ pub fn collect_item_types(ccx: @mut CrateCtxt, crate: @ast::crate) { } impl CrateCtxt { - fn to_ty( + fn to_ty( &self, rs: &RS, ast_ty: @ast::Ty) -> ty::t { ast_ty_to_ty(self, rs, ast_ty) @@ -1163,7 +1163,7 @@ pub fn ty_generics(ccx: &CrateCtxt, * enum consisting of a newtyped Ty or a region) to ty's * notion of ty param bounds, which can either be user-defined * traits, or one of the four built-in traits (formerly known - * as kinds): Const, Copy, Durable, and Send. + * as kinds): Const, Copy, and Send. */ @ast_bounds.flat_map_to_vec(|b| { diff --git a/src/librustc/middle/typeck/rscope.rs b/src/librustc/middle/typeck/rscope.rs index 65f5b910f3772..316792f688f46 100644 --- a/src/librustc/middle/typeck/rscope.rs +++ b/src/librustc/middle/typeck/rscope.rs @@ -266,7 +266,7 @@ pub struct binding_rscope { region_param_names: RegionParamNames, } -pub fn in_binding_rscope( +pub fn in_binding_rscope( self: &RS, region_param_names: RegionParamNames) -> binding_rscope { From 0addefa68a85974a0b3906e7a46376a98ad513cc Mon Sep 17 00:00:00 2001 From: James Miller Date: Mon, 6 May 2013 15:24:38 +1200 Subject: [PATCH 267/410] Improved vim indent file for rust --- src/etc/vim/indent/rust.vim | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/etc/vim/indent/rust.vim b/src/etc/vim/indent/rust.vim index 43fd917fc97bb..8d973c9a87069 100644 --- a/src/etc/vim/indent/rust.vim +++ b/src/etc/vim/indent/rust.vim @@ -5,4 +5,7 @@ if exists("b:did_indent") endif let b:did_indent = 1 -setlocal smartindent + +setlocal cindent +setlocal cinoptions=L0,(0,Ws,JN +setlocal cinkeys=0{,0},!^F,o,O From 80b2926357232f8674df2c1db24bb91f24628e2f Mon Sep 17 00:00:00 2001 From: James Miller Date: Mon, 6 May 2013 16:05:07 +1200 Subject: [PATCH 268/410] General fixes for vim Makes colorcolumn setlocal instead of set. Makes conceal opt-in. Removes the seem-to-be obsolete old keywords/types --- src/etc/vim/after/ftplugin/rust.vim | 2 +- src/etc/vim/after/syntax/rust.vim | 2 +- src/etc/vim/syntax/rust.vim | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/etc/vim/after/ftplugin/rust.vim b/src/etc/vim/after/ftplugin/rust.vim index f0f1c85ee9720..a053f8b40f863 100644 --- a/src/etc/vim/after/ftplugin/rust.vim +++ b/src/etc/vim/after/ftplugin/rust.vim @@ -1,5 +1,5 @@ "Highlight the 100th text column "Feature became available in v7.3 if version >= 703 - set colorcolumn=100 + setlocal colorcolumn=100 endif diff --git a/src/etc/vim/after/syntax/rust.vim b/src/etc/vim/after/syntax/rust.vim index 58a623cb4e478..75afe3d03684f 100644 --- a/src/etc/vim/after/syntax/rust.vim +++ b/src/etc/vim/after/syntax/rust.vim @@ -1,4 +1,4 @@ -if exists('g:no_rust_conceal') || !has('conceal') || &enc != 'utf-8' +if !exists('g:rust_conceal') || !has('conceal') || &enc != 'utf-8' finish endif diff --git a/src/etc/vim/syntax/rust.vim b/src/etc/vim/syntax/rust.vim index eab3627ae16d1..3b5324f5cced3 100644 --- a/src/etc/vim/syntax/rust.vim +++ b/src/etc/vim/syntax/rust.vim @@ -29,7 +29,7 @@ syn match rustIdentifier contains=rustIdentifierPrime "\%([^[:cntrl:][:spac syn match rustFuncName "\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*" display contained " Reserved words -syn keyword rustKeyword m32 m64 m128 f80 f16 f128 be +"syn keyword rustKeyword m32 m64 m128 f80 f16 f128 be " These are obsolete syn keyword rustType int uint float char bool u8 u16 u32 u64 f32 syn keyword rustType f64 i8 i16 i32 i64 str Self From 1755eec87f8757c08d49c1465b6880dc40a5d901 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Tue, 7 May 2013 17:50:27 -0700 Subject: [PATCH 269/410] test: Replace Durable with 'static --- src/test/auxiliary/issue4516_ty_param_lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/auxiliary/issue4516_ty_param_lib.rs b/src/test/auxiliary/issue4516_ty_param_lib.rs index dd2ffd5002c94..391e9b39610c0 100644 --- a/src/test/auxiliary/issue4516_ty_param_lib.rs +++ b/src/test/auxiliary/issue4516_ty_param_lib.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -pub fn to_closure(x: A) -> @fn() -> A { +pub fn to_closure(x: A) -> @fn() -> A { let result: @fn() -> A = || copy x; result } From 3df7ed15b788508f711889eef1e3825352a46354 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Tue, 7 May 2013 17:50:42 -0700 Subject: [PATCH 270/410] Remove Durable from the language --- src/libcore/core.rc | 2 +- src/libcore/kinds.rs | 3 +- src/libcore/prelude.rs | 2 +- src/librustc/middle/lang_items.rs | 164 +++++++++++++------------- src/librustc/middle/typeck/collect.rs | 2 - 5 files changed, 82 insertions(+), 91 deletions(-) diff --git a/src/libcore/core.rc b/src/libcore/core.rc index 127d6dbc77432..15b0be7b4bce5 100644 --- a/src/libcore/core.rc +++ b/src/libcore/core.rc @@ -72,7 +72,7 @@ they contained the following prologue: /* Reexported core operators */ -pub use kinds::{Const, Copy, Owned, Durable}; +pub use kinds::{Const, Copy, Owned}; pub use ops::{Drop}; pub use ops::{Add, Sub, Mul, Div, Rem, Neg, Not}; pub use ops::{BitAnd, BitOr, BitXor}; diff --git a/src/libcore/kinds.rs b/src/libcore/kinds.rs index 82ba0d42ce094..eeafc4cf786a5 100644 --- a/src/libcore/kinds.rs +++ b/src/libcore/kinds.rs @@ -30,8 +30,6 @@ The 4 kinds are * Const - types that are deeply immutable. Const types are used for freezable data structures. -* Durable - types that do not contain borrowed pointers. - `Copy` types include both implicitly copyable types that the compiler will copy automatically and non-implicitly copyable types that require the `copy` keyword to copy. Types that do not implement `Copy` may @@ -55,6 +53,7 @@ pub trait Const { } #[lang="durable"] +#[cfg(stage0)] pub trait Durable { // Empty. } diff --git a/src/libcore/prelude.rs b/src/libcore/prelude.rs index 10b36d38d43ae..d263d2cdbee9e 100644 --- a/src/libcore/prelude.rs +++ b/src/libcore/prelude.rs @@ -13,7 +13,7 @@ /* Reexported core operators */ pub use either::{Either, Left, Right}; -pub use kinds::{Const, Copy, Owned, Durable}; +pub use kinds::{Const, Copy, Owned}; pub use ops::{Add, Sub, Mul, Div, Rem, Neg, Not}; pub use ops::{BitAnd, BitOr, BitXor}; pub use ops::{Drop}; diff --git a/src/librustc/middle/lang_items.rs b/src/librustc/middle/lang_items.rs index 001218ea0cf62..c94dc3046dfd4 100644 --- a/src/librustc/middle/lang_items.rs +++ b/src/librustc/middle/lang_items.rs @@ -34,56 +34,55 @@ pub enum LangItem { ConstTraitLangItem, // 0 CopyTraitLangItem, // 1 OwnedTraitLangItem, // 2 - DurableTraitLangItem, // 3 - - DropTraitLangItem, // 4 - - AddTraitLangItem, // 5 - SubTraitLangItem, // 6 - MulTraitLangItem, // 7 - DivTraitLangItem, // 8 - RemTraitLangItem, // 9 - NegTraitLangItem, // 10 - NotTraitLangItem, // 11 - BitXorTraitLangItem, // 12 - BitAndTraitLangItem, // 13 - BitOrTraitLangItem, // 14 - ShlTraitLangItem, // 15 - ShrTraitLangItem, // 16 - IndexTraitLangItem, // 17 - - EqTraitLangItem, // 18 - OrdTraitLangItem, // 19 - - StrEqFnLangItem, // 20 - UniqStrEqFnLangItem, // 21 - AnnihilateFnLangItem, // 22 - LogTypeFnLangItem, // 23 - FailFnLangItem, // 24 - FailBoundsCheckFnLangItem, // 25 - ExchangeMallocFnLangItem, // 26 - ExchangeFreeFnLangItem, // 27 - MallocFnLangItem, // 28 - FreeFnLangItem, // 29 - BorrowAsImmFnLangItem, // 30 - BorrowAsMutFnLangItem, // 31 - ReturnToMutFnLangItem, // 32 - CheckNotBorrowedFnLangItem, // 33 - StrDupUniqFnLangItem, // 34 - RecordBorrowFnLangItem, // 35 - UnrecordBorrowFnLangItem, // 36 - - StartFnLangItem, // 37 + + DropTraitLangItem, // 3 + + AddTraitLangItem, // 4 + SubTraitLangItem, // 5 + MulTraitLangItem, // 6 + DivTraitLangItem, // 7 + RemTraitLangItem, // 8 + NegTraitLangItem, // 9 + NotTraitLangItem, // 10 + BitXorTraitLangItem, // 11 + BitAndTraitLangItem, // 12 + BitOrTraitLangItem, // 13 + ShlTraitLangItem, // 14 + ShrTraitLangItem, // 15 + IndexTraitLangItem, // 16 + + EqTraitLangItem, // 17 + OrdTraitLangItem, // 18 + + StrEqFnLangItem, // 19 + UniqStrEqFnLangItem, // 20 + AnnihilateFnLangItem, // 21 + LogTypeFnLangItem, // 22 + FailFnLangItem, // 23 + FailBoundsCheckFnLangItem, // 24 + ExchangeMallocFnLangItem, // 25 + ExchangeFreeFnLangItem, // 26 + MallocFnLangItem, // 27 + FreeFnLangItem, // 28 + BorrowAsImmFnLangItem, // 29 + BorrowAsMutFnLangItem, // 30 + ReturnToMutFnLangItem, // 31 + CheckNotBorrowedFnLangItem, // 32 + StrDupUniqFnLangItem, // 33 + RecordBorrowFnLangItem, // 34 + UnrecordBorrowFnLangItem, // 35 + + StartFnLangItem, // 36 } pub struct LanguageItems { - items: [Option, ..38] + items: [Option, ..37] } pub impl LanguageItems { pub fn new() -> LanguageItems { LanguageItems { - items: [ None, ..38 ] + items: [ None, ..37 ] } } @@ -100,45 +99,44 @@ pub impl LanguageItems { 0 => "const", 1 => "copy", 2 => "owned", - 3 => "durable", - - 4 => "drop", - - 5 => "add", - 6 => "sub", - 7 => "mul", - 8 => "div", - 9 => "rem", - 10 => "neg", - 11 => "not", - 12 => "bitxor", - 13 => "bitand", - 14 => "bitor", - 15 => "shl", - 16 => "shr", - 17 => "index", - 18 => "eq", - 19 => "ord", - - 20 => "str_eq", - 21 => "uniq_str_eq", - 22 => "annihilate", - 23 => "log_type", - 24 => "fail_", - 25 => "fail_bounds_check", - 26 => "exchange_malloc", - 27 => "exchange_free", - 28 => "malloc", - 29 => "free", - 30 => "borrow_as_imm", - 31 => "borrow_as_mut", - 32 => "return_to_mut", - 33 => "check_not_borrowed", - 34 => "strdup_uniq", - 35 => "record_borrow", - 36 => "unrecord_borrow", - - 37 => "start", + + 3 => "drop", + + 4 => "add", + 5 => "sub", + 6 => "mul", + 7 => "div", + 8 => "rem", + 9 => "neg", + 10 => "not", + 11 => "bitxor", + 12 => "bitand", + 13 => "bitor", + 14 => "shl", + 15 => "shr", + 16 => "index", + 17 => "eq", + 18 => "ord", + + 19 => "str_eq", + 20 => "uniq_str_eq", + 21 => "annihilate", + 22 => "log_type", + 23 => "fail_", + 24 => "fail_bounds_check", + 25 => "exchange_malloc", + 26 => "exchange_free", + 27 => "malloc", + 28 => "free", + 29 => "borrow_as_imm", + 30 => "borrow_as_mut", + 31 => "return_to_mut", + 32 => "check_not_borrowed", + 33 => "strdup_uniq", + 34 => "record_borrow", + 35 => "unrecord_borrow", + + 36 => "start", _ => "???" } @@ -155,9 +153,6 @@ pub impl LanguageItems { pub fn owned_trait(&const self) -> def_id { self.items[OwnedTraitLangItem as uint].get() } - pub fn durable_trait(&const self) -> def_id { - self.items[DurableTraitLangItem as uint].get() - } pub fn drop_trait(&const self) -> def_id { self.items[DropTraitLangItem as uint].get() @@ -274,7 +269,6 @@ fn LanguageItemCollector(crate: @crate, item_refs.insert(@~"const", ConstTraitLangItem as uint); item_refs.insert(@~"copy", CopyTraitLangItem as uint); item_refs.insert(@~"owned", OwnedTraitLangItem as uint); - item_refs.insert(@~"durable", DurableTraitLangItem as uint); item_refs.insert(@~"drop", DropTraitLangItem as uint); diff --git a/src/librustc/middle/typeck/collect.rs b/src/librustc/middle/typeck/collect.rs index 13d1428c30aa4..290bc9ab33d44 100644 --- a/src/librustc/middle/typeck/collect.rs +++ b/src/librustc/middle/typeck/collect.rs @@ -1178,8 +1178,6 @@ pub fn ty_generics(ccx: &CrateCtxt, ~[ty::bound_copy] } else if trait_ref.def_id == li.const_trait() { ~[ty::bound_const] - } else if trait_ref.def_id == li.durable_trait() { - ~[ty::bound_durable] } else { // Must be a user-defined trait ~[ty::bound_trait(trait_ref)] From 356ebe879276c5627d6010fce9dc8b054165e17b Mon Sep 17 00:00:00 2001 From: Sangeun Kim Date: Wed, 8 May 2013 10:42:47 +0900 Subject: [PATCH 271/410] extranous thing is removed --- src/librustc/middle/lint.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/librustc/middle/lint.rs b/src/librustc/middle/lint.rs index aad64d2ffe368..59b7a5ff111c9 100644 --- a/src/librustc/middle/lint.rs +++ b/src/librustc/middle/lint.rs @@ -239,7 +239,7 @@ static lint_table: &'static [(&'static str, LintSpec)] = &[ */ pub fn get_lint_dict() -> LintDict { let mut map = HashMap::new(); - for lint_table.each() |&(k, v)| { + for lint_table.each|&(k, v)| { map.insert(k.to_str(), v); } return @map; From 1813ab594da579bf20ba84664c3aaea30445a928 Mon Sep 17 00:00:00 2001 From: ILyoan Date: Wed, 8 May 2013 13:15:08 +0900 Subject: [PATCH 272/410] testsuite: update a test for #4350 --- src/test/run-pass/traits-default-method-self.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/test/run-pass/traits-default-method-self.rs b/src/test/run-pass/traits-default-method-self.rs index a377c86068cd7..c17b45d6ea1fd 100644 --- a/src/test/run-pass/traits-default-method-self.rs +++ b/src/test/run-pass/traits-default-method-self.rs @@ -10,16 +10,16 @@ //xfail-test -// Currently failing with an ICE in trans. (FIXME: #2794) +// Currently failing with an ICE in trans. (FIXME: #4350) trait Cat { - fn meow() -> bool; - fn scratch() -> bool { self.purr() } - fn purr() -> bool { true } + fn meow(&self) -> bool; + fn scratch(&self) -> bool { self.purr() } + fn purr(&self) -> bool { true } } impl Cat for int { - fn meow() -> bool { + fn meow(&self) -> bool { self.scratch() } } From eb5fa061136a1f4eb4d7c3c58f396edea43c234d Mon Sep 17 00:00:00 2001 From: Seo Sanghyeon Date: Wed, 8 May 2013 14:37:18 +0900 Subject: [PATCH 273/410] Move core::simd to core::unstable::simd --- src/libcore/core.rc | 1 - src/libcore/unstable.rs | 2 ++ src/libcore/{ => unstable}/simd.rs | 0 3 files changed, 2 insertions(+), 1 deletion(-) rename src/libcore/{ => unstable}/simd.rs (100%) diff --git a/src/libcore/core.rc b/src/libcore/core.rc index 5c05c83e35aae..127d6dbc77432 100644 --- a/src/libcore/core.rc +++ b/src/libcore/core.rc @@ -164,7 +164,6 @@ pub mod nil; pub mod bool; pub mod char; pub mod tuple; -pub mod simd; pub mod vec; pub mod at_vec; diff --git a/src/libcore/unstable.rs b/src/libcore/unstable.rs index 4a69de26f6b13..0b96e649178a1 100644 --- a/src/libcore/unstable.rs +++ b/src/libcore/unstable.rs @@ -30,6 +30,8 @@ pub mod weak_task; pub mod exchange_alloc; #[path = "unstable/intrinsics.rs"] pub mod intrinsics; +#[path = "unstable/simd.rs"] +pub mod simd; #[path = "unstable/extfmt.rs"] pub mod extfmt; #[path = "unstable/lang.rs"] diff --git a/src/libcore/simd.rs b/src/libcore/unstable/simd.rs similarity index 100% rename from src/libcore/simd.rs rename to src/libcore/unstable/simd.rs From 80061ecb1d11afd7c450673676e7708f85b73f12 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Tue, 7 May 2013 23:01:02 -0700 Subject: [PATCH 274/410] rt: Remove rust_call_nullary_fn There's no need to delegate to C to call the Rust main function. --- src/libcore/rt/mod.rs | 25 +++++++++++++++++++------ src/rt/rust_builtin.cpp | 7 ------- src/rt/rustrt.def.in | 1 - 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/libcore/rt/mod.rs b/src/libcore/rt/mod.rs index a072fccd33d6c..25f6c870654a6 100644 --- a/src/libcore/rt/mod.rs +++ b/src/libcore/rt/mod.rs @@ -38,22 +38,35 @@ mod local_heap; pub mod test; pub fn start(main: *u8, _argc: int, _argv: **c_char, _crate_map: *u8) -> int { + use self::sched::{Scheduler, Task}; use self::uvio::UvEventLoop; + use sys::Closure; + use ptr; + use cast; let loop_ = ~UvEventLoop::new(); let mut sched = ~Scheduler::new(loop_); + let main_task = ~do Task::new(&mut sched.stack_pool) { - // XXX: Can't call a C function pointer from Rust yet - unsafe { rust_call_nullary_fn(main) }; + + unsafe { + // `main` is an `fn() -> ()` that doesn't take an environment + // XXX: Could also call this as an `extern "Rust" fn` once they work + let main = Closure { + code: main as *(), + env: ptr::null(), + }; + let mainfn: &fn() = cast::transmute(main); + + mainfn(); + } }; + sched.task_queue.push_back(main_task); sched.run(); - return 0; - extern { - fn rust_call_nullary_fn(f: *u8); - } + return 0; } /// Possible contexts in which Rust code may be executing. diff --git a/src/rt/rust_builtin.cpp b/src/rt/rust_builtin.cpp index a491379153e1a..24666b95f0d3c 100644 --- a/src/rt/rust_builtin.cpp +++ b/src/rt/rust_builtin.cpp @@ -830,13 +830,6 @@ rust_get_rt_env() { return task->kernel->env; } -typedef void *(*nullary_fn)(); - -extern "C" CDECL void -rust_call_nullary_fn(nullary_fn f) { - f(); -} - #ifndef _WIN32 pthread_key_t sched_key; #else diff --git a/src/rt/rustrt.def.in b/src/rt/rustrt.def.in index 1c3f6370deda4..6be41251f1bd9 100644 --- a/src/rt/rustrt.def.in +++ b/src/rt/rustrt.def.in @@ -222,7 +222,6 @@ rust_uv_ip4_addrp rust_uv_ip6_addrp rust_uv_free_ip4_addr rust_uv_free_ip6_addr -rust_call_nullary_fn rust_initialize_global_state rust_dbg_next_port rust_new_memory_region From dc48a558b654795ac6326d75546ae49a1af959ab Mon Sep 17 00:00:00 2001 From: Sangeun Kim Date: Wed, 8 May 2013 17:23:48 +0900 Subject: [PATCH 275/410] Show lint names --- src/librustc/driver/session.rs | 1 + src/librustc/middle/lint.rs | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/src/librustc/driver/session.rs b/src/librustc/driver/session.rs index c7b336de09112..3fdf4126c15b4 100644 --- a/src/librustc/driver/session.rs +++ b/src/librustc/driver/session.rs @@ -234,6 +234,7 @@ pub impl Session_ { msg: &str) { let level = lint::get_lint_settings_level( self.lint_settings, lint_mode, expr_id, item_id); + let msg = fmt!("%s [-W%s]", msg, lint::get_lint_name(lint_mode)); self.span_lint_level(level, span, msg); } fn next_node_id(@self) -> ast::node_id { diff --git a/src/librustc/middle/lint.rs b/src/librustc/middle/lint.rs index 59b7a5ff111c9..6494ac0f9e8dd 100644 --- a/src/librustc/middle/lint.rs +++ b/src/librustc/middle/lint.rs @@ -245,6 +245,14 @@ pub fn get_lint_dict() -> LintDict { return @map; } +pub fn get_lint_name(lint_mode: lint) -> ~str { + for lint_table.each |&(name, spec)| { + if spec.lint == lint_mode { + return name.to_str(); + } + } + fail!(); +} // This is a highly not-optimal set of data structure decisions. type LintModes = @mut SmallIntMap; type LintModeMap = @mut HashMap; From 35323500163a17fc9c6fbbd2298d31ad171b4296 Mon Sep 17 00:00:00 2001 From: Zack Corr Date: Wed, 8 May 2013 20:02:16 +1000 Subject: [PATCH 276/410] Add #[cfg(debug)] flag to rust suite compilation. Closes #3068 --- Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.in b/Makefile.in index d531b9879a9a8..8ab704ebe1719 100644 --- a/Makefile.in +++ b/Makefile.in @@ -101,7 +101,7 @@ endif ifdef CFG_ENABLE_DEBUG $(info cfg: enabling more debugging (CFG_ENABLE_DEBUG)) - CFG_RUSTC_FLAGS += + CFG_RUSTC_FLAGS += --cfg debug CFG_GCCISH_CFLAGS += -DRUST_DEBUG else CFG_GCCISH_CFLAGS += -DRUST_NDEBUG From cb66d8948a9375e7be65296d19586166157ec667 Mon Sep 17 00:00:00 2001 From: Zack Corr Date: Wed, 8 May 2013 21:11:23 +1000 Subject: [PATCH 277/410] Remove #[cfg(notest)] and use #[cfg(not(test))] to cooincide with #[cfg(debug)] --- src/libcore/at_vec.rs | 2 +- src/libcore/bool.rs | 8 ++++---- src/libcore/char.rs | 8 ++++---- src/libcore/cleanup.rs | 6 +++--- src/libcore/core.rc | 6 +++--- src/libcore/logging.rs | 2 +- src/libcore/managed.rs | 10 +++++----- src/libcore/nil.rs | 10 +++++----- src/libcore/num/f32.rs | 18 ++++++++--------- src/libcore/num/f64.rs | 18 ++++++++--------- src/libcore/num/float.rs | 18 ++++++++--------- src/libcore/num/int-template.rs | 28 +++++++++++++------------- src/libcore/num/uint-template.rs | 28 +++++++++++++------------- src/libcore/owned.rs | 6 +++--- src/libcore/ptr.rs | 10 +++++----- src/libcore/str.rs | 34 ++++++++++++++++---------------- src/libcore/tuple.rs | 14 ++++++------- src/libcore/unstable.rs | 2 +- src/libcore/vec.rs | 30 ++++++++++++++-------------- src/librustc/driver/driver.rs | 5 ++--- 20 files changed, 131 insertions(+), 132 deletions(-) diff --git a/src/libcore/at_vec.rs b/src/libcore/at_vec.rs index 9f59f1d8fe48d..d797e02f5408d 100644 --- a/src/libcore/at_vec.rs +++ b/src/libcore/at_vec.rs @@ -166,7 +166,7 @@ pub fn from_slice(v: &[T]) -> @[T] { from_fn(v.len(), |i| v[i]) } -#[cfg(notest)] +#[cfg(not(test))] pub mod traits { use at_vec::append; use kinds::Copy; diff --git a/src/libcore/bool.rs b/src/libcore/bool.rs index 1b4b81dca267c..76a8f456cd5f3 100644 --- a/src/libcore/bool.rs +++ b/src/libcore/bool.rs @@ -10,7 +10,7 @@ //! Boolean logic -#[cfg(notest)] +#[cfg(not(test))] use cmp::{Eq, Ord, TotalOrd, Ordering}; use option::{None, Option, Some}; use from_str::FromStr; @@ -75,7 +75,7 @@ pub fn all_values(blk: &fn(v: bool)) { #[inline(always)] pub fn to_bit(v: bool) -> u8 { if v { 1u8 } else { 0u8 } } -#[cfg(notest)] +#[cfg(not(test))] impl Ord for bool { #[inline(always)] fn lt(&self, other: &bool) -> bool { to_bit(*self) < to_bit(*other) } @@ -87,13 +87,13 @@ impl Ord for bool { fn ge(&self, other: &bool) -> bool { to_bit(*self) >= to_bit(*other) } } -#[cfg(notest)] +#[cfg(not(test))] impl TotalOrd for bool { #[inline(always)] fn cmp(&self, other: &bool) -> Ordering { to_bit(*self).cmp(&to_bit(*other)) } } -#[cfg(notest)] +#[cfg(not(test))] impl Eq for bool { #[inline(always)] fn eq(&self, other: &bool) -> bool { (*self) == (*other) } diff --git a/src/libcore/char.rs b/src/libcore/char.rs index a96f1a2ff8191..a9c46b81f862e 100644 --- a/src/libcore/char.rs +++ b/src/libcore/char.rs @@ -10,7 +10,7 @@ //! Utilities for manipulating the char type -#[cfg(notest)] +#[cfg(not(test))] use cmp::Ord; use option::{None, Option, Some}; use str; @@ -18,7 +18,7 @@ use u32; use uint; use unicode::{derived_property, general_category}; -#[cfg(notest)] use cmp::Eq; +#[cfg(not(test))] use cmp::Eq; /* Lu Uppercase_Letter an uppercase letter @@ -244,7 +244,7 @@ pub fn len_utf8_bytes(c: char) -> uint { else { fail!(~"invalid character!") } } -#[cfg(notest)] +#[cfg(not(test))] impl Eq for char { #[inline(always)] fn eq(&self, other: &char) -> bool { (*self) == (*other) } @@ -252,7 +252,7 @@ impl Eq for char { fn ne(&self, other: &char) -> bool { (*self) != (*other) } } -#[cfg(notest)] +#[cfg(not(test))] impl Ord for char { #[inline(always)] fn lt(&self, other: &char) -> bool { *self < *other } diff --git a/src/libcore/cleanup.rs b/src/libcore/cleanup.rs index 424cc3483092d..912f965db7c9a 100644 --- a/src/libcore/cleanup.rs +++ b/src/libcore/cleanup.rs @@ -15,9 +15,9 @@ use ptr::mut_null; use repr::BoxRepr; use sys::TypeDesc; use cast::transmute; -#[cfg(notest)] use unstable::lang::clear_task_borrow_list; +#[cfg(not(test))] use unstable::lang::clear_task_borrow_list; -#[cfg(notest)] use ptr::to_unsafe_ptr; +#[cfg(not(test))] use ptr::to_unsafe_ptr; /** * Runtime structures @@ -164,7 +164,7 @@ fn debug_mem() -> bool { } /// Destroys all managed memory (i.e. @ boxes) held by the current task. -#[cfg(notest)] +#[cfg(not(test))] #[lang="annihilate"] pub unsafe fn annihilate() { use unstable::lang::local_free; diff --git a/src/libcore/core.rc b/src/libcore/core.rc index 127d6dbc77432..c8ab49f273e12 100644 --- a/src/libcore/core.rc +++ b/src/libcore/core.rc @@ -179,9 +179,9 @@ pub mod managed; /* Core language traits */ -#[cfg(notest)] pub mod kinds; -#[cfg(notest)] pub mod ops; -#[cfg(notest)] pub mod cmp; +#[cfg(not(test))] pub mod kinds; +#[cfg(not(test))] pub mod ops; +#[cfg(not(test))] pub mod cmp; /* Common traits */ diff --git a/src/libcore/logging.rs b/src/libcore/logging.rs index afe8338f2ce6a..69ecad56a8f5c 100644 --- a/src/libcore/logging.rs +++ b/src/libcore/logging.rs @@ -42,7 +42,7 @@ pub fn console_off() { } } -#[cfg(notest)] +#[cfg(not(test))] #[lang="log_type"] pub fn log_type(level: u32, object: &T) { use cast::transmute; diff --git a/src/libcore/managed.rs b/src/libcore/managed.rs index debca1ead82f8..d2bb88ca30202 100644 --- a/src/libcore/managed.rs +++ b/src/libcore/managed.rs @@ -12,7 +12,7 @@ use ptr::to_unsafe_ptr; -#[cfg(notest)] use cmp::{Eq, Ord}; +#[cfg(not(test))] use cmp::{Eq, Ord}; pub mod raw { use intrinsic::TyDesc; @@ -49,7 +49,7 @@ pub fn mut_ptr_eq(a: @mut T, b: @mut T) -> bool { a_ptr == b_ptr } -#[cfg(notest)] +#[cfg(not(test))] impl Eq for @T { #[inline(always)] fn eq(&self, other: &@T) -> bool { *(*self) == *(*other) } @@ -57,7 +57,7 @@ impl Eq for @T { fn ne(&self, other: &@T) -> bool { *(*self) != *(*other) } } -#[cfg(notest)] +#[cfg(not(test))] impl Eq for @mut T { #[inline(always)] fn eq(&self, other: &@mut T) -> bool { *(*self) == *(*other) } @@ -65,7 +65,7 @@ impl Eq for @mut T { fn ne(&self, other: &@mut T) -> bool { *(*self) != *(*other) } } -#[cfg(notest)] +#[cfg(not(test))] impl Ord for @T { #[inline(always)] fn lt(&self, other: &@T) -> bool { *(*self) < *(*other) } @@ -77,7 +77,7 @@ impl Ord for @T { fn gt(&self, other: &@T) -> bool { *(*self) > *(*other) } } -#[cfg(notest)] +#[cfg(not(test))] impl Ord for @mut T { #[inline(always)] fn lt(&self, other: &@mut T) -> bool { *(*self) < *(*other) } diff --git a/src/libcore/nil.rs b/src/libcore/nil.rs index 6b8c390fc2575..833bd3459cebf 100644 --- a/src/libcore/nil.rs +++ b/src/libcore/nil.rs @@ -14,10 +14,10 @@ Functions for the unit type. */ -#[cfg(notest)] +#[cfg(not(test))] use prelude::*; -#[cfg(notest)] +#[cfg(not(test))] impl Eq for () { #[inline(always)] fn eq(&self, _other: &()) -> bool { true } @@ -25,7 +25,7 @@ impl Eq for () { fn ne(&self, _other: &()) -> bool { false } } -#[cfg(notest)] +#[cfg(not(test))] impl Ord for () { #[inline(always)] fn lt(&self, _other: &()) -> bool { false } @@ -37,13 +37,13 @@ impl Ord for () { fn gt(&self, _other: &()) -> bool { false } } -#[cfg(notest)] +#[cfg(not(test))] impl TotalOrd for () { #[inline(always)] fn cmp(&self, _other: &()) -> Ordering { Equal } } -#[cfg(notest)] +#[cfg(not(test))] impl TotalEq for () { #[inline(always)] fn equals(&self, _other: &()) -> bool { true } diff --git a/src/libcore/num/f32.rs b/src/libcore/num/f32.rs index 3c4faa95dd190..93e881c50e82f 100644 --- a/src/libcore/num/f32.rs +++ b/src/libcore/num/f32.rs @@ -198,7 +198,7 @@ pub mod consts { impl Num for f32 {} -#[cfg(notest)] +#[cfg(not(test))] impl Eq for f32 { #[inline(always)] fn eq(&self, other: &f32) -> bool { (*self) == (*other) } @@ -206,7 +206,7 @@ impl Eq for f32 { fn ne(&self, other: &f32) -> bool { (*self) != (*other) } } -#[cfg(notest)] +#[cfg(not(test))] impl ApproxEq for f32 { #[inline(always)] fn approx_epsilon() -> f32 { 1.0e-6 } @@ -222,7 +222,7 @@ impl ApproxEq for f32 { } } -#[cfg(notest)] +#[cfg(not(test))] impl Ord for f32 { #[inline(always)] fn lt(&self, other: &f32) -> bool { (*self) < (*other) } @@ -272,37 +272,37 @@ impl One for f32 { fn one() -> f32 { 1.0 } } -#[cfg(notest)] +#[cfg(not(test))] impl Add for f32 { #[inline(always)] fn add(&self, other: &f32) -> f32 { *self + *other } } -#[cfg(notest)] +#[cfg(not(test))] impl Sub for f32 { #[inline(always)] fn sub(&self, other: &f32) -> f32 { *self - *other } } -#[cfg(notest)] +#[cfg(not(test))] impl Mul for f32 { #[inline(always)] fn mul(&self, other: &f32) -> f32 { *self * *other } } -#[cfg(notest)] +#[cfg(not(test))] impl Div for f32 { #[inline(always)] fn div(&self, other: &f32) -> f32 { *self / *other } } -#[cfg(notest)] +#[cfg(not(test))] impl Rem for f32 { #[inline(always)] fn rem(&self, other: &f32) -> f32 { *self % *other } } -#[cfg(notest)] +#[cfg(not(test))] impl Neg for f32 { #[inline(always)] fn neg(&self) -> f32 { -*self } diff --git a/src/libcore/num/f64.rs b/src/libcore/num/f64.rs index 30c101fe8a9c6..096206d718301 100644 --- a/src/libcore/num/f64.rs +++ b/src/libcore/num/f64.rs @@ -221,7 +221,7 @@ pub mod consts { impl Num for f64 {} -#[cfg(notest)] +#[cfg(not(test))] impl Eq for f64 { #[inline(always)] fn eq(&self, other: &f64) -> bool { (*self) == (*other) } @@ -229,7 +229,7 @@ impl Eq for f64 { fn ne(&self, other: &f64) -> bool { (*self) != (*other) } } -#[cfg(notest)] +#[cfg(not(test))] impl ApproxEq for f64 { #[inline(always)] fn approx_epsilon() -> f64 { 1.0e-6 } @@ -245,7 +245,7 @@ impl ApproxEq for f64 { } } -#[cfg(notest)] +#[cfg(not(test))] impl Ord for f64 { #[inline(always)] fn lt(&self, other: &f64) -> bool { (*self) < (*other) } @@ -295,28 +295,28 @@ impl One for f64 { fn one() -> f64 { 1.0 } } -#[cfg(notest)] +#[cfg(not(test))] impl Add for f64 { fn add(&self, other: &f64) -> f64 { *self + *other } } -#[cfg(notest)] +#[cfg(not(test))] impl Sub for f64 { fn sub(&self, other: &f64) -> f64 { *self - *other } } -#[cfg(notest)] +#[cfg(not(test))] impl Mul for f64 { fn mul(&self, other: &f64) -> f64 { *self * *other } } -#[cfg(notest)] +#[cfg(not(test))] impl Div for f64 { fn div(&self, other: &f64) -> f64 { *self / *other } } -#[cfg(notest)] +#[cfg(not(test))] impl Rem for f64 { #[inline(always)] fn rem(&self, other: &f64) -> f64 { *self % *other } } -#[cfg(notest)] +#[cfg(not(test))] impl Neg for f64 { fn neg(&self) -> f64 { -*self } } diff --git a/src/libcore/num/float.rs b/src/libcore/num/float.rs index 9c3d30be0d499..e6a2ed7ea9759 100644 --- a/src/libcore/num/float.rs +++ b/src/libcore/num/float.rs @@ -363,7 +363,7 @@ pub fn tan(x: float) -> float { impl Num for float {} -#[cfg(notest)] +#[cfg(not(test))] impl Eq for float { #[inline(always)] fn eq(&self, other: &float) -> bool { (*self) == (*other) } @@ -371,7 +371,7 @@ impl Eq for float { fn ne(&self, other: &float) -> bool { (*self) != (*other) } } -#[cfg(notest)] +#[cfg(not(test))] impl ApproxEq for float { #[inline(always)] fn approx_epsilon() -> float { 1.0e-6 } @@ -387,7 +387,7 @@ impl ApproxEq for float { } } -#[cfg(notest)] +#[cfg(not(test))] impl Ord for float { #[inline(always)] fn lt(&self, other: &float) -> bool { (*self) < (*other) } @@ -695,36 +695,36 @@ impl RealExt for float { fn yn(&self, n: int) -> float { yn(n as c_int, *self as f64) as float } } -#[cfg(notest)] +#[cfg(not(test))] impl Add for float { #[inline(always)] fn add(&self, other: &float) -> float { *self + *other } } -#[cfg(notest)] +#[cfg(not(test))] impl Sub for float { #[inline(always)] fn sub(&self, other: &float) -> float { *self - *other } } -#[cfg(notest)] +#[cfg(not(test))] impl Mul for float { #[inline(always)] fn mul(&self, other: &float) -> float { *self * *other } } -#[cfg(notest)] +#[cfg(not(test))] impl Div for float { #[inline(always)] fn div(&self, other: &float) -> float { *self / *other } } -#[cfg(notest)] +#[cfg(not(test))] impl Rem for float { #[inline(always)] fn rem(&self, other: &float) -> float { *self % *other } } -#[cfg(notest)] +#[cfg(not(test))] impl Neg for float { #[inline(always)] fn neg(&self) -> float { -*self } diff --git a/src/libcore/num/int-template.rs b/src/libcore/num/int-template.rs index 06a9a0b45627d..9ee5ba4753db0 100644 --- a/src/libcore/num/int-template.rs +++ b/src/libcore/num/int-template.rs @@ -131,7 +131,7 @@ pub fn abs(i: T) -> T { i.abs() } impl Num for T {} -#[cfg(notest)] +#[cfg(not(test))] impl Ord for T { #[inline(always)] fn lt(&self, other: &T) -> bool { return (*self) < (*other); } @@ -143,7 +143,7 @@ impl Ord for T { fn gt(&self, other: &T) -> bool { return (*self) > (*other); } } -#[cfg(notest)] +#[cfg(not(test))] impl Eq for T { #[inline(always)] fn eq(&self, other: &T) -> bool { return (*self) == (*other); } @@ -182,25 +182,25 @@ impl One for T { fn one() -> T { 1 } } -#[cfg(notest)] +#[cfg(not(test))] impl Add for T { #[inline(always)] fn add(&self, other: &T) -> T { *self + *other } } -#[cfg(notest)] +#[cfg(not(test))] impl Sub for T { #[inline(always)] fn sub(&self, other: &T) -> T { *self - *other } } -#[cfg(notest)] +#[cfg(not(test))] impl Mul for T { #[inline(always)] fn mul(&self, other: &T) -> T { *self * *other } } -#[cfg(notest)] +#[cfg(not(test))] impl Div for T { /// /// Integer division, truncated towards 0. As this behaviour reflects the underlying @@ -224,7 +224,7 @@ impl Div for T { fn div(&self, other: &T) -> T { *self / *other } } -#[cfg(notest)] +#[cfg(not(test))] impl Rem for T { /// /// Returns the integer remainder after division, satisfying: @@ -251,7 +251,7 @@ impl Rem for T { fn rem(&self, other: &T) -> T { *self % *other } } -#[cfg(notest)] +#[cfg(not(test))] impl Neg for T { #[inline(always)] fn neg(&self) -> T { -*self } @@ -417,37 +417,37 @@ impl Integer for T { impl Bitwise for T {} -#[cfg(notest)] +#[cfg(not(test))] impl BitOr for T { #[inline(always)] fn bitor(&self, other: &T) -> T { *self | *other } } -#[cfg(notest)] +#[cfg(not(test))] impl BitAnd for T { #[inline(always)] fn bitand(&self, other: &T) -> T { *self & *other } } -#[cfg(notest)] +#[cfg(not(test))] impl BitXor for T { #[inline(always)] fn bitxor(&self, other: &T) -> T { *self ^ *other } } -#[cfg(notest)] +#[cfg(not(test))] impl Shl for T { #[inline(always)] fn shl(&self, other: &T) -> T { *self << *other } } -#[cfg(notest)] +#[cfg(not(test))] impl Shr for T { #[inline(always)] fn shr(&self, other: &T) -> T { *self >> *other } } -#[cfg(notest)] +#[cfg(not(test))] impl Not for T { #[inline(always)] fn not(&self) -> T { !*self } diff --git a/src/libcore/num/uint-template.rs b/src/libcore/num/uint-template.rs index 6d0f1fe1fc72b..dcb0865cb9b98 100644 --- a/src/libcore/num/uint-template.rs +++ b/src/libcore/num/uint-template.rs @@ -96,7 +96,7 @@ pub fn compl(i: T) -> T { impl Num for T {} -#[cfg(notest)] +#[cfg(not(test))] impl Ord for T { #[inline(always)] fn lt(&self, other: &T) -> bool { (*self) < (*other) } @@ -108,7 +108,7 @@ impl Ord for T { fn gt(&self, other: &T) -> bool { (*self) > (*other) } } -#[cfg(notest)] +#[cfg(not(test))] impl Eq for T { #[inline(always)] fn eq(&self, other: &T) -> bool { return (*self) == (*other); } @@ -147,37 +147,37 @@ impl One for T { fn one() -> T { 1 } } -#[cfg(notest)] +#[cfg(not(test))] impl Add for T { #[inline(always)] fn add(&self, other: &T) -> T { *self + *other } } -#[cfg(notest)] +#[cfg(not(test))] impl Sub for T { #[inline(always)] fn sub(&self, other: &T) -> T { *self - *other } } -#[cfg(notest)] +#[cfg(not(test))] impl Mul for T { #[inline(always)] fn mul(&self, other: &T) -> T { *self * *other } } -#[cfg(notest)] +#[cfg(not(test))] impl Div for T { #[inline(always)] fn div(&self, other: &T) -> T { *self / *other } } -#[cfg(notest)] +#[cfg(not(test))] impl Rem for T { #[inline(always)] fn rem(&self, other: &T) -> T { *self % *other } } -#[cfg(notest)] +#[cfg(not(test))] impl Neg for T { #[inline(always)] fn neg(&self) -> T { -*self } @@ -240,37 +240,37 @@ impl Integer for T { impl Bitwise for T {} -#[cfg(notest)] +#[cfg(not(test))] impl BitOr for T { #[inline(always)] fn bitor(&self, other: &T) -> T { *self | *other } } -#[cfg(notest)] +#[cfg(not(test))] impl BitAnd for T { #[inline(always)] fn bitand(&self, other: &T) -> T { *self & *other } } -#[cfg(notest)] +#[cfg(not(test))] impl BitXor for T { #[inline(always)] fn bitxor(&self, other: &T) -> T { *self ^ *other } } -#[cfg(notest)] +#[cfg(not(test))] impl Shl for T { #[inline(always)] fn shl(&self, other: &T) -> T { *self << *other } } -#[cfg(notest)] +#[cfg(not(test))] impl Shr for T { #[inline(always)] fn shr(&self, other: &T) -> T { *self >> *other } } -#[cfg(notest)] +#[cfg(not(test))] impl Not for T { #[inline(always)] fn not(&self) -> T { !*self } diff --git a/src/libcore/owned.rs b/src/libcore/owned.rs index 599591e2f6d7a..3262fb4afdcf6 100644 --- a/src/libcore/owned.rs +++ b/src/libcore/owned.rs @@ -10,9 +10,9 @@ //! Operations on unique pointer types -#[cfg(notest)] use cmp::{Eq, Ord}; +#[cfg(not(test))] use cmp::{Eq, Ord}; -#[cfg(notest)] +#[cfg(not(test))] impl Eq for ~T { #[inline(always)] fn eq(&self, other: &~T) -> bool { *(*self) == *(*other) } @@ -20,7 +20,7 @@ impl Eq for ~T { fn ne(&self, other: &~T) -> bool { *(*self) != *(*other) } } -#[cfg(notest)] +#[cfg(not(test))] impl Ord for ~T { #[inline(always)] fn lt(&self, other: &~T) -> bool { *(*self) < *(*other) } diff --git a/src/libcore/ptr.rs b/src/libcore/ptr.rs index 85e46a0feff6b..7f2165185eb88 100644 --- a/src/libcore/ptr.rs +++ b/src/libcore/ptr.rs @@ -15,7 +15,7 @@ use libc; use libc::{c_void, size_t}; use sys; -#[cfg(notest)] use cmp::{Eq, Ord}; +#[cfg(not(test))] use cmp::{Eq, Ord}; use uint; pub mod libc_ { @@ -243,7 +243,7 @@ impl Ptr for *mut T { } // Equality for pointers -#[cfg(notest)] +#[cfg(not(test))] impl Eq for *const T { #[inline(always)] fn eq(&self, other: &*const T) -> bool { @@ -258,7 +258,7 @@ impl Eq for *const T { } // Comparison for pointers -#[cfg(notest)] +#[cfg(not(test))] impl Ord for *const T { #[inline(always)] fn lt(&self, other: &*const T) -> bool { @@ -295,7 +295,7 @@ impl Ord for *const T { } // Equality for region pointers -#[cfg(notest)] +#[cfg(not(test))] impl<'self,T:Eq> Eq for &'self T { #[inline(always)] fn eq(&self, other: & &'self T) -> bool { @@ -308,7 +308,7 @@ impl<'self,T:Eq> Eq for &'self T { } // Comparison for region pointers -#[cfg(notest)] +#[cfg(not(test))] impl<'self,T:Ord> Ord for &'self T { #[inline(always)] fn lt(&self, other: & &'self T) -> bool { diff --git a/src/libcore/str.rs b/src/libcore/str.rs index a41c99b266b11..44c07e86814f2 100644 --- a/src/libcore/str.rs +++ b/src/libcore/str.rs @@ -32,7 +32,7 @@ use uint; use vec; use to_str::ToStr; -#[cfg(notest)] use cmp::{Eq, Ord, Equiv, TotalEq}; +#[cfg(not(test))] use cmp::{Eq, Ord, Equiv, TotalEq}; /* Section: Creating a string @@ -913,7 +913,7 @@ Section: Comparing strings */ /// Bytewise slice equality -#[cfg(notest)] +#[cfg(not(test))] #[lang="str_eq"] #[inline] pub fn eq_slice(a: &str, b: &str) -> bool { @@ -949,7 +949,7 @@ pub fn eq_slice(a: &str, b: &str) -> bool { } /// Bytewise string equality -#[cfg(notest)] +#[cfg(not(test))] #[lang="uniq_str_eq"] #[inline] pub fn eq(a: &~str, b: &~str) -> bool { @@ -977,19 +977,19 @@ fn cmp(a: &str, b: &str) -> Ordering { a.len().cmp(&b.len()) } -#[cfg(notest)] +#[cfg(not(test))] impl<'self> TotalOrd for &'self str { #[inline] fn cmp(&self, other: & &'self str) -> Ordering { cmp(*self, *other) } } -#[cfg(notest)] +#[cfg(not(test))] impl TotalOrd for ~str { #[inline] fn cmp(&self, other: &~str) -> Ordering { cmp(*self, *other) } } -#[cfg(notest)] +#[cfg(not(test))] impl TotalOrd for @str { #[inline] fn cmp(&self, other: &@str) -> Ordering { cmp(*self, *other) } @@ -1030,7 +1030,7 @@ fn gt(a: &str, b: &str) -> bool { !le(a, b) } -#[cfg(notest)] +#[cfg(not(test))] impl<'self> Eq for &'self str { #[inline(always)] fn eq(&self, other: & &'self str) -> bool { @@ -1040,7 +1040,7 @@ impl<'self> Eq for &'self str { fn ne(&self, other: & &'self str) -> bool { !(*self).eq(other) } } -#[cfg(notest)] +#[cfg(not(test))] impl Eq for ~str { #[inline(always)] fn eq(&self, other: &~str) -> bool { @@ -1050,7 +1050,7 @@ impl Eq for ~str { fn ne(&self, other: &~str) -> bool { !(*self).eq(other) } } -#[cfg(notest)] +#[cfg(not(test))] impl Eq for @str { #[inline(always)] fn eq(&self, other: &@str) -> bool { @@ -1060,7 +1060,7 @@ impl Eq for @str { fn ne(&self, other: &@str) -> bool { !(*self).eq(other) } } -#[cfg(notest)] +#[cfg(not(test))] impl<'self> TotalEq for &'self str { #[inline(always)] fn equals(&self, other: & &'self str) -> bool { @@ -1068,7 +1068,7 @@ impl<'self> TotalEq for &'self str { } } -#[cfg(notest)] +#[cfg(not(test))] impl TotalEq for ~str { #[inline(always)] fn equals(&self, other: &~str) -> bool { @@ -1076,7 +1076,7 @@ impl TotalEq for ~str { } } -#[cfg(notest)] +#[cfg(not(test))] impl TotalEq for @str { #[inline(always)] fn equals(&self, other: &@str) -> bool { @@ -1084,7 +1084,7 @@ impl TotalEq for @str { } } -#[cfg(notest)] +#[cfg(not(test))] impl Ord for ~str { #[inline(always)] fn lt(&self, other: &~str) -> bool { lt((*self), (*other)) } @@ -1096,7 +1096,7 @@ impl Ord for ~str { fn gt(&self, other: &~str) -> bool { gt((*self), (*other)) } } -#[cfg(notest)] +#[cfg(not(test))] impl<'self> Ord for &'self str { #[inline(always)] fn lt(&self, other: & &'self str) -> bool { lt((*self), (*other)) } @@ -1108,7 +1108,7 @@ impl<'self> Ord for &'self str { fn gt(&self, other: & &'self str) -> bool { gt((*self), (*other)) } } -#[cfg(notest)] +#[cfg(not(test))] impl Ord for @str { #[inline(always)] fn lt(&self, other: &@str) -> bool { lt((*self), (*other)) } @@ -1120,7 +1120,7 @@ impl Ord for @str { fn gt(&self, other: &@str) -> bool { gt((*self), (*other)) } } -#[cfg(notest)] +#[cfg(not(test))] impl<'self> Equiv<~str> for &'self str { #[inline(always)] fn equiv(&self, other: &~str) -> bool { eq_slice(*self, *other) } @@ -2451,7 +2451,7 @@ pub mod raw { } -#[cfg(notest)] +#[cfg(not(test))] pub mod traits { use ops::Add; use str::append; diff --git a/src/libcore/tuple.rs b/src/libcore/tuple.rs index 6da22657906dd..b29a4e55426df 100644 --- a/src/libcore/tuple.rs +++ b/src/libcore/tuple.rs @@ -14,7 +14,7 @@ use clone::Clone; use kinds::Copy; use vec; -#[cfg(notest)] use cmp::{Eq, Ord}; +#[cfg(not(test))] use cmp::{Eq, Ord}; pub trait CopyableTuple { fn first(&self) -> T; @@ -122,7 +122,7 @@ impl ExtendedTupleOps for (~[A], ~[B]) { } } -#[cfg(notest)] +#[cfg(not(test))] impl Eq for (A,) { #[inline(always)] fn eq(&self, other: &(A,)) -> bool { @@ -138,7 +138,7 @@ impl Eq for (A,) { fn ne(&self, other: &(A,)) -> bool { !(*self).eq(other) } } -#[cfg(notest)] +#[cfg(not(test))] impl Ord for (A,) { #[inline(always)] fn lt(&self, other: &(A,)) -> bool { @@ -161,7 +161,7 @@ impl Ord for (A,) { fn gt(&self, other: &(A,)) -> bool { other.lt(&(*self)) } } -#[cfg(notest)] +#[cfg(not(test))] impl Eq for (A, B) { #[inline(always)] fn eq(&self, other: &(A, B)) -> bool { @@ -177,7 +177,7 @@ impl Eq for (A, B) { fn ne(&self, other: &(A, B)) -> bool { !(*self).eq(other) } } -#[cfg(notest)] +#[cfg(not(test))] impl Ord for (A, B) { #[inline(always)] fn lt(&self, other: &(A, B)) -> bool { @@ -202,7 +202,7 @@ impl Ord for (A, B) { fn gt(&self, other: &(A, B)) -> bool { (*other).lt(&(*self)) } } -#[cfg(notest)] +#[cfg(not(test))] impl Eq for (A, B, C) { #[inline(always)] fn eq(&self, other: &(A, B, C)) -> bool { @@ -219,7 +219,7 @@ impl Eq for (A, B, C) { fn ne(&self, other: &(A, B, C)) -> bool { !(*self).eq(other) } } -#[cfg(notest)] +#[cfg(not(test))] impl Ord for (A, B, C) { #[inline(always)] fn lt(&self, other: &(A, B, C)) -> bool { diff --git a/src/libcore/unstable.rs b/src/libcore/unstable.rs index 4a69de26f6b13..400830c0a6db9 100644 --- a/src/libcore/unstable.rs +++ b/src/libcore/unstable.rs @@ -33,7 +33,7 @@ pub mod intrinsics; #[path = "unstable/extfmt.rs"] pub mod extfmt; #[path = "unstable/lang.rs"] -#[cfg(notest)] +#[cfg(not(test))] pub mod lang; mod rustrt { diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs index 947146dee0e74..5e2f0926c980b 100644 --- a/src/libcore/vec.rs +++ b/src/libcore/vec.rs @@ -30,7 +30,7 @@ use uint; use unstable::intrinsics; use vec; -#[cfg(notest)] use cmp::Equiv; +#[cfg(not(test))] use cmp::Equiv; pub mod rustrt { use libc; @@ -1656,7 +1656,7 @@ fn equals(a: &[T], b: &[T]) -> bool { true } -#[cfg(notest)] +#[cfg(not(test))] impl<'self,T:Eq> Eq for &'self [T] { #[inline(always)] fn eq(&self, other: & &'self [T]) -> bool { eq(*self, *other) } @@ -1664,7 +1664,7 @@ impl<'self,T:Eq> Eq for &'self [T] { fn ne(&self, other: & &'self [T]) -> bool { !self.eq(other) } } -#[cfg(notest)] +#[cfg(not(test))] impl Eq for ~[T] { #[inline(always)] fn eq(&self, other: &~[T]) -> bool { eq(*self, *other) } @@ -1672,7 +1672,7 @@ impl Eq for ~[T] { fn ne(&self, other: &~[T]) -> bool { !self.eq(other) } } -#[cfg(notest)] +#[cfg(not(test))] impl Eq for @[T] { #[inline(always)] fn eq(&self, other: &@[T]) -> bool { eq(*self, *other) } @@ -1680,25 +1680,25 @@ impl Eq for @[T] { fn ne(&self, other: &@[T]) -> bool { !self.eq(other) } } -#[cfg(notest)] +#[cfg(not(test))] impl<'self,T:TotalEq> TotalEq for &'self [T] { #[inline(always)] fn equals(&self, other: & &'self [T]) -> bool { equals(*self, *other) } } -#[cfg(notest)] +#[cfg(not(test))] impl TotalEq for ~[T] { #[inline(always)] fn equals(&self, other: &~[T]) -> bool { equals(*self, *other) } } -#[cfg(notest)] +#[cfg(not(test))] impl TotalEq for @[T] { #[inline(always)] fn equals(&self, other: &@[T]) -> bool { equals(*self, *other) } } -#[cfg(notest)] +#[cfg(not(test))] impl<'self,T:Eq> Equiv<~[T]> for &'self [T] { #[inline(always)] fn equiv(&self, other: &~[T]) -> bool { eq(*self, *other) } @@ -1720,19 +1720,19 @@ fn cmp(a: &[T], b: &[T]) -> Ordering { a.len().cmp(&b.len()) } -#[cfg(notest)] +#[cfg(not(test))] impl<'self,T:TotalOrd> TotalOrd for &'self [T] { #[inline(always)] fn cmp(&self, other: & &'self [T]) -> Ordering { cmp(*self, *other) } } -#[cfg(notest)] +#[cfg(not(test))] impl TotalOrd for ~[T] { #[inline(always)] fn cmp(&self, other: &~[T]) -> Ordering { cmp(*self, *other) } } -#[cfg(notest)] +#[cfg(not(test))] impl TotalOrd for @[T] { #[inline(always)] fn cmp(&self, other: &@[T]) -> Ordering { cmp(*self, *other) } @@ -1757,7 +1757,7 @@ fn le(a: &[T], b: &[T]) -> bool { !lt(b, a) } fn ge(a: &[T], b: &[T]) -> bool { !lt(a, b) } fn gt(a: &[T], b: &[T]) -> bool { lt(b, a) } -#[cfg(notest)] +#[cfg(not(test))] impl<'self,T:Ord> Ord for &'self [T] { #[inline(always)] fn lt(&self, other: & &'self [T]) -> bool { lt((*self), (*other)) } @@ -1769,7 +1769,7 @@ impl<'self,T:Ord> Ord for &'self [T] { fn gt(&self, other: & &'self [T]) -> bool { gt((*self), (*other)) } } -#[cfg(notest)] +#[cfg(not(test))] impl Ord for ~[T] { #[inline(always)] fn lt(&self, other: &~[T]) -> bool { lt((*self), (*other)) } @@ -1781,7 +1781,7 @@ impl Ord for ~[T] { fn gt(&self, other: &~[T]) -> bool { gt((*self), (*other)) } } -#[cfg(notest)] +#[cfg(not(test))] impl Ord for @[T] { #[inline(always)] fn lt(&self, other: &@[T]) -> bool { lt((*self), (*other)) } @@ -1793,7 +1793,7 @@ impl Ord for @[T] { fn gt(&self, other: &@[T]) -> bool { gt((*self), (*other)) } } -#[cfg(notest)] +#[cfg(not(test))] pub mod traits { use kinds::Copy; use ops::Add; diff --git a/src/librustc/driver/driver.rs b/src/librustc/driver/driver.rs index 5e8dab0f77287..43d90095424ef 100644 --- a/src/librustc/driver/driver.rs +++ b/src/librustc/driver/driver.rs @@ -119,9 +119,8 @@ pub fn build_configuration(sess: Session, argv0: @~str, input: &input) -> let default_cfg = default_configuration(sess, argv0, input); let user_cfg = /*bad*/copy sess.opts.cfg; // If the user wants a test runner, then add the test cfg - let user_cfg = append_configuration( - user_cfg, - if sess.opts.test { ~"test" } else { ~"notest" }); + let user_cfg = if sess.opts.test { append_configuration(user_cfg, ~"test") } + else { user_cfg }; // If the user requested GC, then add the GC cfg let user_cfg = append_configuration( user_cfg, From 08c80544662f53867551e689e47f8c4f363199cd Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Tue, 7 May 2013 22:46:27 +1000 Subject: [PATCH 278/410] testsuite: xfail tests for windows --- src/test/run-pass/deriving-rand.rs | 1 + src/test/run-pass/deriving-to-str.rs | 1 + 2 files changed, 2 insertions(+) diff --git a/src/test/run-pass/deriving-rand.rs b/src/test/run-pass/deriving-rand.rs index 290dc02dcdb28..dd4664e7446fb 100644 --- a/src/test/run-pass/deriving-rand.rs +++ b/src/test/run-pass/deriving-rand.rs @@ -1,3 +1,4 @@ +// xfail-fast #6330 // 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. diff --git a/src/test/run-pass/deriving-to-str.rs b/src/test/run-pass/deriving-to-str.rs index 10f6bcbeff767..4b98f9a73c586 100644 --- a/src/test/run-pass/deriving-to-str.rs +++ b/src/test/run-pass/deriving-to-str.rs @@ -1,3 +1,4 @@ +// xfail-fast #6330 // 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. From ad5ee00c93043f08626efae8547587b640cf2630 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Wed, 8 May 2013 23:50:15 +1000 Subject: [PATCH 279/410] libstd: convert chained ifs to a match in base64. --- src/libstd/base64.rs | 44 ++++++++++++++++++++------------------------ 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/src/libstd/base64.rs b/src/libstd/base64.rs index b26296c9acae4..85ba2707863dc 100644 --- a/src/libstd/base64.rs +++ b/src/libstd/base64.rs @@ -156,31 +156,27 @@ impl FromBase64 for ~[u8] { let ch = self[i] as char; n <<= 6u; - if ch >= 'A' && ch <= 'Z' { - n |= (ch as uint) - 0x41u; - } else if ch >= 'a' && ch <= 'z' { - n |= (ch as uint) - 0x47u; - } else if ch >= '0' && ch <= '9' { - n |= (ch as uint) + 0x04u; - } else if ch == '+' { - n |= 0x3Eu; - } else if ch == '/' { - n |= 0x3Fu; - } else if ch == '=' { - match len - i { - 1u => { - r.push(((n >> 16u) & 0xFFu) as u8); - r.push(((n >> 8u ) & 0xFFu) as u8); - return copy r; - } - 2u => { - r.push(((n >> 10u) & 0xFFu) as u8); - return copy r; - } - _ => fail!(~"invalid base64 padding") + match ch { + 'A'..'Z' => n |= (ch as uint) - 0x41, + 'a'..'z' => n |= (ch as uint) - 0x47, + '0'..'9' => n |= (ch as uint) + 0x04, + '+' => n |= 0x3E, + '/' => n |= 0x3F, + '=' => { + match len - i { + 1u => { + r.push(((n >> 16u) & 0xFFu) as u8); + r.push(((n >> 8u ) & 0xFFu) as u8); + return copy r; + } + 2u => { + r.push(((n >> 10u) & 0xFFu) as u8); + return copy r; + } + _ => fail!(~"invalid base64 padding") + } } - } else { - fail!(~"invalid base64 character"); + _ => fail!(~"invalid base64 character") } i += 1u; From bd4ee7c7d2f00e8c41824fac7e5d155dff40c25f Mon Sep 17 00:00:00 2001 From: Sean Moon Date: Thu, 9 May 2013 02:34:47 +0900 Subject: [PATCH 280/410] Fix typos --- src/compiletest/runtest.rs | 2 +- src/libcore/at_vec.rs | 6 +++--- src/libcore/rt/io/extensions.rs | 2 +- src/libcore/task/local_data_priv.rs | 2 +- src/libcore/vec.rs | 2 +- src/librustc/middle/trans/machine.rs | 4 ++-- src/librustc/middle/typeck/check/vtable.rs | 2 +- src/libstd/arena.rs | 2 +- src/libstd/flatpipes.rs | 8 ++++---- src/libstd/getopts.rs | 2 +- src/libstd/net_ip.rs | 2 +- src/libstd/rope.rs | 2 +- src/libstd/test.rs | 2 +- src/libstd/uv_global_loop.rs | 2 +- src/libstd/uv_iotask.rs | 2 +- src/libstd/uv_ll.rs | 6 +++--- src/libsyntax/ext/quote.rs | 2 +- src/rt/rust_log.cpp | 2 +- src/rt/rust_signal.h | 2 +- src/test/compile-fail/borrowck-lend-flow-match.rs | 2 +- src/test/compile-fail/borrowck-pat-reassign-binding.rs | 2 +- src/test/compile-fail/issue-1448-2.rs | 2 +- src/test/compile-fail/issue-4935.rs | 2 +- src/test/run-fail/too-much-recursion-unwinding.rs | 2 +- src/test/run-pass/extern-pass-TwoU64s.rs | 2 +- src/test/run-pass/issue-2989.rs | 2 +- src/test/run-pass/while-cont.rs | 2 +- 27 files changed, 35 insertions(+), 35 deletions(-) diff --git a/src/compiletest/runtest.rs b/src/compiletest/runtest.rs index 8777eedd7da7e..33f6dd36161a1 100644 --- a/src/compiletest/runtest.rs +++ b/src/compiletest/runtest.rs @@ -764,7 +764,7 @@ fn _arm_exec_compiled_test(config: config, props: TestProps, logv(config, fmt!("executing (%s) %s", config.target, cmdline)); // adb shell dose not forward stdout and stderr of internal result - // to stdout and stderr seperately but to stdout only + // to stdout and stderr separately but to stdout only let mut newargs_out = ~[]; let mut newargs_err = ~[]; let subargs = args.args; diff --git a/src/libcore/at_vec.rs b/src/libcore/at_vec.rs index 9f59f1d8fe48d..b03a1404f8e66 100644 --- a/src/libcore/at_vec.rs +++ b/src/libcore/at_vec.rs @@ -52,7 +52,7 @@ pub fn capacity(v: @[T]) -> uint { * # Arguments * * * size - An initial size of the vector to reserve - * * builder - A function that will construct the vector. It recieves + * * builder - A function that will construct the vector. It receives * as an argument a function that will push an element * onto the vector being constructed. */ @@ -70,7 +70,7 @@ pub fn build_sized(size: uint, builder: &fn(push: &fn(v: A))) -> @[A] { * * # Arguments * - * * builder - A function that will construct the vector. It recieves + * * builder - A function that will construct the vector. It receives * as an argument a function that will push an element * onto the vector being constructed. */ @@ -87,7 +87,7 @@ pub fn build(builder: &fn(push: &fn(v: A))) -> @[A] { * # Arguments * * * size - An option, maybe containing initial size of the vector to reserve - * * builder - A function that will construct the vector. It recieves + * * builder - A function that will construct the vector. It receives * as an argument a function that will push an element * onto the vector being constructed. */ diff --git a/src/libcore/rt/io/extensions.rs b/src/libcore/rt/io/extensions.rs index cff224a80bee2..bb025b0ccb6d5 100644 --- a/src/libcore/rt/io/extensions.rs +++ b/src/libcore/rt/io/extensions.rs @@ -11,7 +11,7 @@ //! Utility mixins that apply to all Readers and Writers // XXX: Not sure how this should be structured -// XXX: Iteration should probably be considered seperately +// XXX: Iteration should probably be considered separately pub trait ReaderUtil { diff --git a/src/libcore/task/local_data_priv.rs b/src/libcore/task/local_data_priv.rs index 7240e0ca0a5ff..97628f38a7b81 100644 --- a/src/libcore/task/local_data_priv.rs +++ b/src/libcore/task/local_data_priv.rs @@ -133,7 +133,7 @@ unsafe fn get_newsched_local_map(local: *mut LocalStorage) -> TaskLocalMap { unsafe fn key_to_key_value(key: LocalDataKey) -> *libc::c_void { // Keys are closures, which are (fnptr,envptr) pairs. Use fnptr. - // Use reintepret_cast -- transmute would leak (forget) the closure. + // Use reinterpret_cast -- transmute would leak (forget) the closure. let pair: (*libc::c_void, *libc::c_void) = cast::transmute_copy(&key); pair.first() } diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs index 947146dee0e74..bd8a1c8a1564c 100644 --- a/src/libcore/vec.rs +++ b/src/libcore/vec.rs @@ -219,7 +219,7 @@ pub fn build(builder: &fn(push: &fn(v: A))) -> ~[A] { * # Arguments * * * size - An option, maybe containing initial size of the vector to reserve - * * builder - A function that will construct the vector. It recieves + * * builder - A function that will construct the vector. It receives * as an argument a function that will push an element * onto the vector being constructed. */ diff --git a/src/librustc/middle/trans/machine.rs b/src/librustc/middle/trans/machine.rs index ff9faa24376d9..038c5e0369b8c 100644 --- a/src/librustc/middle/trans/machine.rs +++ b/src/librustc/middle/trans/machine.rs @@ -87,7 +87,7 @@ pub fn nonzero_llsize_of(cx: @CrateContext, t: TypeRef) -> ValueRef { } // Returns the preferred alignment of the given type for the current target. -// The preffered alignment may be larger than the alignment used when +// The preferred alignment may be larger than the alignment used when // packing the type into structs. This will be used for things like // allocations inside a stack frame, which LLVM has a free hand in. pub fn llalign_of_pref(cx: @CrateContext, t: TypeRef) -> uint { @@ -96,7 +96,7 @@ pub fn llalign_of_pref(cx: @CrateContext, t: TypeRef) -> uint { } } -// Returns the minimum alignment of a type required by the plattform. +// Returns the minimum alignment of a type required by the platform. // This is the alignment that will be used for struct fields, arrays, // and similar ABI-mandated things. pub fn llalign_of_min(cx: @CrateContext, t: TypeRef) -> uint { diff --git a/src/librustc/middle/typeck/check/vtable.rs b/src/librustc/middle/typeck/check/vtable.rs index b5bd5a48e9d78..a744751ea917c 100644 --- a/src/librustc/middle/typeck/check/vtable.rs +++ b/src/librustc/middle/typeck/check/vtable.rs @@ -31,7 +31,7 @@ use syntax::print::pprust::expr_to_str; use syntax::visit; // vtable resolution looks for places where trait bounds are -// subsituted in and figures out which vtable is used. There is some +// substituted in and figures out which vtable is used. There is some // extra complication thrown in to support early "opportunistic" // vtable resolution. This is a hacky mechanism that is invoked while // typechecking function calls (after typechecking non-closure diff --git a/src/libstd/arena.rs b/src/libstd/arena.rs index da882d53fcffa..3a55d3e337c68 100644 --- a/src/libstd/arena.rs +++ b/src/libstd/arena.rs @@ -20,7 +20,7 @@ // calling the destructors on them. // One subtle point that needs to be addressed is how to handle // failures while running the user provided initializer function. It -// is important to not run the destructor on uninitalized objects, but +// is important to not run the destructor on uninitialized objects, but // how to detect them is somewhat subtle. Since alloc() can be invoked // recursively, it is not sufficient to simply exclude the most recent // object. To solve this without requiring extra space, we use the low diff --git a/src/libstd/flatpipes.rs b/src/libstd/flatpipes.rs index 88de53f360519..874b96fd588df 100644 --- a/src/libstd/flatpipes.rs +++ b/src/libstd/flatpipes.rs @@ -15,7 +15,7 @@ or transformed to and from, byte vectors. The `FlatPort` and `FlatChan` types implement the generic channel and port interface for arbitrary types and transport strategies. It can -particularly be used to send and recieve serializable types over I/O +particularly be used to send and receive serializable types over I/O streams. `FlatPort` and `FlatChan` implement the same comm traits as pipe-based @@ -55,7 +55,7 @@ use core::sys::size_of; use core::vec; /** -A FlatPort, consisting of a `BytePort` that recieves byte vectors, +A FlatPort, consisting of a `BytePort` that receives byte vectors, and an `Unflattener` that converts the bytes to a value. Create using the constructors in the `serial` and `pod` modules. @@ -819,7 +819,7 @@ mod test { } } - // Reciever task + // Receiver task do task::spawn || { // Wait for a connection let (conn, res_chan) = accept_port.recv(); @@ -838,7 +838,7 @@ mod test { for int::range(0, 10) |i| { let j = port.recv(); - debug!("receieved %?", j); + debug!("received %?", j); assert!(i == j); } diff --git a/src/libstd/getopts.rs b/src/libstd/getopts.rs index c03042fe9c2bf..781e44a8f3f9c 100644 --- a/src/libstd/getopts.rs +++ b/src/libstd/getopts.rs @@ -623,7 +623,7 @@ pub mod groups { desc_sep }; - // Normalize desc to contain words seperated by one space character + // Normalize desc to contain words separated by one space character let mut desc_normalized_whitespace = ~""; for str::each_word(desc) |word| { desc_normalized_whitespace.push_str(word); diff --git a/src/libstd/net_ip.rs b/src/libstd/net_ip.rs index 800144c0ca7be..aac0ff6316613 100644 --- a/src/libstd/net_ip.rs +++ b/src/libstd/net_ip.rs @@ -420,7 +420,7 @@ mod test { if result::is_err(&ga_result) { fail!(~"got err result from net::ip::get_addr();") } - // note really sure how to realiably test/assert + // note really sure how to reliably test/assert // this.. mostly just wanting to see it work, atm. let results = result::unwrap(ga_result); debug!("test_get_addr: Number of results for %s: %?", diff --git a/src/libstd/rope.rs b/src/libstd/rope.rs index 93364f8a319ee..9931b667f8f75 100644 --- a/src/libstd/rope.rs +++ b/src/libstd/rope.rs @@ -565,7 +565,7 @@ pub mod node { * * # Fields * - * * byte_offset = The number of bytes skippen in `content` + * * byte_offset = The number of bytes skipped in `content` * * byte_len - The number of bytes of `content` to use * * char_len - The number of chars in the leaf. * * content - Contents of the leaf. diff --git a/src/libstd/test.rs b/src/libstd/test.rs index 65fb0c7426a4e..95bfc80ac5582 100644 --- a/src/libstd/test.rs +++ b/src/libstd/test.rs @@ -32,7 +32,7 @@ pub mod rustrt { } // The name of a test. By convention this follows the rules for rust -// paths; i.e. it should be a series of identifiers seperated by double +// paths; i.e. it should be a series of identifiers separated by double // colons. This way if some test runner wants to arrange the tests // hierarchically it may. diff --git a/src/libstd/uv_global_loop.rs b/src/libstd/uv_global_loop.rs index e49cee434f81f..c8311cff2cf02 100644 --- a/src/libstd/uv_global_loop.rs +++ b/src/libstd/uv_global_loop.rs @@ -222,6 +222,6 @@ mod test { exit_po.recv(); }; debug!(~"test_stress_gl_uv_global_loop_high_level_global_timer"+ - ~" exiting sucessfully!"); + ~" exiting successfully!"); } } diff --git a/src/libstd/uv_iotask.rs b/src/libstd/uv_iotask.rs index e19010e8552a2..79a40559971e8 100644 --- a/src/libstd/uv_iotask.rs +++ b/src/libstd/uv_iotask.rs @@ -243,7 +243,7 @@ fn impl_uv_iotask_async(iotask: &IoTask) { exit_po.recv(); } -// this fn documents the bear minimum neccesary to roll your own +// this fn documents the bear minimum necessary to roll your own // high_level_loop #[cfg(test)] fn spawn_test_loop(exit_ch: ~Chan<()>) -> IoTask { diff --git a/src/libstd/uv_ll.rs b/src/libstd/uv_ll.rs index 8d7a97e2e483c..afc7b9c8106a8 100644 --- a/src/libstd/uv_ll.rs +++ b/src/libstd/uv_ll.rs @@ -269,7 +269,7 @@ pub struct sockaddr_in { } // unix size: 28 .. FIXME #1645 -// stuck with 32 becuse of rust padding structs? +// stuck with 32 because of rust padding structs? #[cfg(target_arch="x86_64")] pub struct sockaddr_in6 { a0: *u8, a1: *u8, @@ -286,7 +286,7 @@ pub struct sockaddr_in6 { } // unix size: 28 .. FIXME #1645 -// stuck with 32 becuse of rust padding structs? +// stuck with 32 because of rust padding structs? pub type addr_in = addr_in_impl::addr_in; #[cfg(unix)] pub mod addr_in_impl { @@ -1376,7 +1376,7 @@ mod test { let tcp_init_result = tcp_init(test_loop as *libc::c_void, tcp_handle_ptr); if (tcp_init_result == 0) { - debug!(~"sucessful tcp_init_result"); + debug!(~"successful tcp_init_result"); debug!(~"building addr..."); let addr = ip4_addr(ip, port); diff --git a/src/libsyntax/ext/quote.rs b/src/libsyntax/ext/quote.rs index 2bf4b05aa6b02..917d11a0d23bf 100644 --- a/src/libsyntax/ext/quote.rs +++ b/src/libsyntax/ext/quote.rs @@ -697,7 +697,7 @@ fn expand_tts(cx: @ext_ctxt, // compiler (which we don't really want to do) and, in any case, only // pushed the problem a very small step further back: an error // resulting from a parse of the resulting quote is still attributed to - // the site the string literal occured, which was in a source file + // the site the string literal occurred, which was in a source file // _other_ than the one the user has control over. For example, an // error in a quote from the protocol compiler, invoked in user code // using proto! for example, will be attributed to the pipec.rs file in diff --git a/src/rt/rust_log.cpp b/src/rt/rust_log.cpp index 32723cf31bc6f..c2b58c9fda732 100644 --- a/src/rt/rust_log.cpp +++ b/src/rt/rust_log.cpp @@ -24,7 +24,7 @@ */ static lock_and_signal _log_lock; /** - * Indicates whether we are outputing to the console. + * Indicates whether we are outputting to the console. * Protected by _log_lock; */ static bool _log_to_console = true; diff --git a/src/rt/rust_signal.h b/src/rt/rust_signal.h index bfea68a1aad50..4281092f83511 100644 --- a/src/rt/rust_signal.h +++ b/src/rt/rust_signal.h @@ -11,7 +11,7 @@ #ifndef RUST_SIGNAL_H #define RUST_SIGNAL_H -// Just an abstrict class that reperesents something that can be signalled +// Just an abstract class that represents something that can be signalled class rust_signal { public: virtual void signal() = 0; diff --git a/src/test/compile-fail/borrowck-lend-flow-match.rs b/src/test/compile-fail/borrowck-lend-flow-match.rs index 7603fdc82a824..fcb31b7b7e039 100644 --- a/src/test/compile-fail/borrowck-lend-flow-match.rs +++ b/src/test/compile-fail/borrowck-lend-flow-match.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// xfail-pretty -- comments are infaithfully preserved +// xfail-pretty -- comments are unfaithfully preserved #[allow(unused_variable)]; #[allow(dead_assignment)]; diff --git a/src/test/compile-fail/borrowck-pat-reassign-binding.rs b/src/test/compile-fail/borrowck-pat-reassign-binding.rs index d05160132c6c2..be2aee5d1b82c 100644 --- a/src/test/compile-fail/borrowck-pat-reassign-binding.rs +++ b/src/test/compile-fail/borrowck-pat-reassign-binding.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// xfail-pretty -- comments are infaithfully preserved +// xfail-pretty -- comments are unfaithfully preserved fn main() { let mut x: Option = None; diff --git a/src/test/compile-fail/issue-1448-2.rs b/src/test/compile-fail/issue-1448-2.rs index 17402e8973023..e329ed4d6710d 100644 --- a/src/test/compile-fail/issue-1448-2.rs +++ b/src/test/compile-fail/issue-1448-2.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// Regresion test for issue #1448 and #1386 +// Regression test for issue #1448 and #1386 fn main() { debug!("%u", 10i); //~ ERROR mismatched types diff --git a/src/test/compile-fail/issue-4935.rs b/src/test/compile-fail/issue-4935.rs index 4bb3a5119448e..3a0db4246be62 100644 --- a/src/test/compile-fail/issue-4935.rs +++ b/src/test/compile-fail/issue-4935.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// Regresion test for issue #4935 +// Regression test for issue #4935 fn foo(a: uint) {} fn main() { foo(5, 6) } //~ ERROR this function takes 1 parameter but 2 parameters were supplied diff --git a/src/test/run-fail/too-much-recursion-unwinding.rs b/src/test/run-fail/too-much-recursion-unwinding.rs index 3890e24cdfe05..1c668dfc90d41 100644 --- a/src/test/run-fail/too-much-recursion-unwinding.rs +++ b/src/test/run-fail/too-much-recursion-unwinding.rs @@ -11,7 +11,7 @@ // xfail-test leaks // error-pattern:ran out of stack -// Test that the task fails after hiting the recursion limit +// Test that the task fails after hitting the recursion limit // during unwinding fn recurse() { diff --git a/src/test/run-pass/extern-pass-TwoU64s.rs b/src/test/run-pass/extern-pass-TwoU64s.rs index 3a1f4a51238f1..cd6226b61c984 100644 --- a/src/test/run-pass/extern-pass-TwoU64s.rs +++ b/src/test/run-pass/extern-pass-TwoU64s.rs @@ -13,7 +13,7 @@ // xfail-fast This works standalone on windows but not with check-fast. // possibly because there is another test that uses this extern fn but gives it -// a diferent signature +// a different signature #[deriving(Eq)] struct TwoU64s { diff --git a/src/test/run-pass/issue-2989.rs b/src/test/run-pass/issue-2989.rs index af8190f32a75e..fb5df6d50e01f 100644 --- a/src/test/run-pass/issue-2989.rs +++ b/src/test/run-pass/issue-2989.rs @@ -21,7 +21,7 @@ impl methods for () { } // the position of this function is significant! - if it comes before methods -// then it works, if it comes after it then it doesnt! +// then it works, if it comes after it then it doesn't! fn to_bools(bitv: Storage) -> ~[bool] { vec::from_fn(8, |i| { let w = i / 64; diff --git a/src/test/run-pass/while-cont.rs b/src/test/run-pass/while-cont.rs index 37528a7cfaece..add9ba54aa6aa 100644 --- a/src/test/run-pass/while-cont.rs +++ b/src/test/run-pass/while-cont.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// Issue #825: Should recheck the loop contition after continuing +// Issue #825: Should recheck the loop condition after continuing pub fn main() { let mut i = 1; while i > 0 { From 3970d02ec5fb33b2e10132b48dd193b86c245596 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Mon, 6 May 2013 18:48:24 -0700 Subject: [PATCH 281/410] rustc: Fix the logic for finding the Android main function I don't understand what this logic is doing --- src/librustc/middle/entry.rs | 32 +++++++++++-------- src/test/compile-fail/issue-2995.rs | 2 ++ src/test/compile-fail/tag-variant-disr-dup.rs | 2 ++ 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/src/librustc/middle/entry.rs b/src/librustc/middle/entry.rs index 47873b3fa1f6a..9ffd0e6f22c3c 100644 --- a/src/librustc/middle/entry.rs +++ b/src/librustc/middle/entry.rs @@ -42,8 +42,8 @@ type EntryVisitor = vt<@mut EntryContext>; pub fn find_entry_point(session: Session, crate: @crate, ast_map: ast_map::map) { // FIXME #4404 android JNI hacks - if *session.building_library || - session.targ_cfg.os == session::os_android { + if *session.building_library && + session.targ_cfg.os != session::os_android { // No need to find a main function return; } @@ -127,18 +127,24 @@ fn configure_main(ctxt: @mut EntryContext) { *this.session.entry_fn = this.main_fn; *this.session.entry_type = Some(session::EntryMain); } else { - // No main function - this.session.err(~"main function not found"); - if !this.non_main_fns.is_empty() { - // There were some functions named 'main' though. Try to give the user a hint. - this.session.note(~"the main function must be defined at the crate level \ - but you have one or more functions named 'main' that are not \ - defined at the crate level. Either move the definition or attach \ - the `#[main]` attribute to override this behavior."); - for this.non_main_fns.each |&(_, span)| { - this.session.span_note(span, ~"here is a function named 'main'"); + if !*this.session.building_library { + // No main function + this.session.err(~"main function not found"); + if !this.non_main_fns.is_empty() { + // There were some functions named 'main' though. Try to give the user a hint. + this.session.note(~"the main function must be defined at the crate level \ + but you have one or more functions named 'main' that are not \ + defined at the crate level. Either move the definition or \ + attach the `#[main]` attribute to override this behavior."); + for this.non_main_fns.each |&(_, span)| { + this.session.span_note(span, ~"here is a function named 'main'"); + } } + this.session.abort_if_errors(); + } else { + // If we *are* building a library, then we're on android where we still might + // optionally want to translate main $4404 + assert!(this.session.targ_cfg.os == session::os_android); } - this.session.abort_if_errors(); } } diff --git a/src/test/compile-fail/issue-2995.rs b/src/test/compile-fail/issue-2995.rs index 5c48416667fe1..3e771eef970f7 100644 --- a/src/test/compile-fail/issue-2995.rs +++ b/src/test/compile-fail/issue-2995.rs @@ -11,3 +11,5 @@ fn bad (p: *int) { let _q: &int = p as ∫ //~ ERROR non-scalar cast } + +fn main() { } \ No newline at end of file diff --git a/src/test/compile-fail/tag-variant-disr-dup.rs b/src/test/compile-fail/tag-variant-disr-dup.rs index be53b6a0ba3fa..216779fac7c46 100644 --- a/src/test/compile-fail/tag-variant-disr-dup.rs +++ b/src/test/compile-fail/tag-variant-disr-dup.rs @@ -19,3 +19,5 @@ enum color { black = 0x000000, white = 0x000000, } + +fn main() { } \ No newline at end of file From 044abef0e56f02c36cf93fd9572813c2b27f98af Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Wed, 8 May 2013 15:03:39 -0400 Subject: [PATCH 282/410] fix incorrect region code based on the old 'self also removes unnecessary casts from the RcMut implementation --- doc/tutorial-ffi.md | 14 +++++++------- src/libcore/cast.rs | 6 ++++++ src/libstd/rc.rs | 12 ++++++------ 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/doc/tutorial-ffi.md b/doc/tutorial-ffi.md index b806df5dd20b5..2a3d8dc14817c 100644 --- a/doc/tutorial-ffi.md +++ b/doc/tutorial-ffi.md @@ -157,7 +157,7 @@ pub struct Unique { priv ptr: *mut T } -pub impl<'self, T: Owned> Unique { +pub impl Unique { fn new(value: T) -> Unique { unsafe { let ptr = malloc(core::sys::size_of::() as size_t) as *mut T; @@ -168,14 +168,14 @@ pub impl<'self, T: Owned> Unique { } } - // the 'self lifetime results in the same semantics as `&*x` with ~T - fn borrow(&self) -> &'self T { - unsafe { cast::transmute(self.ptr) } + // the 'r lifetime results in the same semantics as `&*x` with ~T + fn borrow<'r>(&'r self) -> &'r T { + unsafe { cast::copy_lifetime(self, &*self.ptr) } } - // the 'self lifetime results in the same semantics as `&mut *x` with ~T - fn borrow_mut(&mut self) -> &'self mut T { - unsafe { cast::transmute(self.ptr) } + // the 'r lifetime results in the same semantics as `&mut *x` with ~T + fn borrow_mut<'r>(&'r mut self) -> &'r mut T { + unsafe { cast::copy_mut_lifetime(self, &mut *self.ptr) } } } diff --git a/src/libcore/cast.rs b/src/libcore/cast.rs index 96e1c3bd1249b..c648ec198e1f7 100644 --- a/src/libcore/cast.rs +++ b/src/libcore/cast.rs @@ -108,6 +108,12 @@ pub unsafe fn copy_lifetime<'a,S,T>(_ptr: &'a S, ptr: &T) -> &'a T { transmute_region(ptr) } +/// Transforms lifetime of the second pointer to match the first. +#[inline(always)] +pub unsafe fn copy_mut_lifetime<'a,S,T>(_ptr: &'a mut S, ptr: &mut T) -> &'a mut T { + transmute_mut_region(ptr) +} + /// Transforms lifetime of the second pointer to match the first. #[inline(always)] pub unsafe fn copy_lifetime_vec<'a,S,T>(_ptr: &'a [S], ptr: &T) -> &'a T { diff --git a/src/libstd/rc.rs b/src/libstd/rc.rs index 6f72d8dc16dfd..815f03f426913 100644 --- a/src/libstd/rc.rs +++ b/src/libstd/rc.rs @@ -29,7 +29,7 @@ pub struct Rc { priv ptr: *mut RcBox, } -pub impl<'self, T: Owned> Rc { +pub impl Rc { fn new(value: T) -> Rc { unsafe { let ptr = malloc(sys::size_of::>() as size_t) as *mut RcBox; @@ -40,8 +40,8 @@ pub impl<'self, T: Owned> Rc { } #[inline(always)] - fn borrow(&self) -> &'self T { - unsafe { cast::transmute_region(&(*self.ptr).value) } + fn borrow<'r>(&'r self) -> &'r T { + unsafe { cast::copy_lifetime(self, &(*self.ptr).value) } } } @@ -119,7 +119,7 @@ pub struct RcMut { priv ptr: *mut RcMutBox, } -pub impl<'self, T: Owned> RcMut { +pub impl RcMut { fn new(value: T) -> RcMut { unsafe { let ptr = malloc(sys::size_of::>() as size_t) as *mut RcMutBox; @@ -136,7 +136,7 @@ pub impl<'self, T: Owned> RcMut { assert!((*self.ptr).borrow != Mutable); let previous = (*self.ptr).borrow; (*self.ptr).borrow = Immutable; - f(cast::transmute_region(&(*self.ptr).value)); + f(&(*self.ptr).value); (*self.ptr).borrow = previous; } } @@ -147,7 +147,7 @@ pub impl<'self, T: Owned> RcMut { unsafe { assert!((*self.ptr).borrow == Nothing); (*self.ptr).borrow = Mutable; - f(cast::transmute_mut_region(&mut (*self.ptr).value)); + f(&mut (*self.ptr).value); (*self.ptr).borrow = Nothing; } } From 0c02d0f92ecabb9486482c3e4d660e736346803b Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Wed, 8 May 2013 18:49:32 -0400 Subject: [PATCH 283/410] rename iter::iter_to_vec to iter::to_vec it's silly to duplicate the namespace in the fn name --- src/libcore/iter.rs | 11 +++++------ src/libcore/iterator.rs | 2 +- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/libcore/iter.rs b/src/libcore/iter.rs index 8fc2db6d6f19a..b68d11583349a 100644 --- a/src/libcore/iter.rs +++ b/src/libcore/iter.rs @@ -17,8 +17,7 @@ breaking out of iteration. The adaptors in the module work with any such iterato tied to specific traits. For example: ~~~~ -use core::iter::iter_to_vec; -println(iter_to_vec(|f| uint::range(0, 20, f)).to_str()); +println(iter::to_vec(|f| uint::range(0, 20, f)).to_str()); ~~~~ An external iterator object implementing the interface in the `iterator` module can be used as an @@ -55,12 +54,12 @@ pub trait Times { * * ~~~ * let xs = ~[1, 2, 3]; - * let ys = do iter_to_vec |f| { xs.each(|x| f(*x)) }; + * let ys = do iter::to_vec |f| { xs.each(|x| f(*x)) }; * assert_eq!(xs, ys); * ~~~ */ #[inline(always)] -pub fn iter_to_vec(iter: &fn(f: &fn(T) -> bool)) -> ~[T] { +pub fn to_vec(iter: &fn(f: &fn(T) -> bool)) -> ~[T] { let mut v = ~[]; for iter |x| { v.push(x) } v @@ -185,9 +184,9 @@ mod tests { use prelude::*; #[test] - fn test_iter_to_vec() { + fn test_to_vec() { let xs = ~[1, 2, 3]; - let ys = do iter_to_vec |f| { xs.each(|x| f(*x)) }; + let ys = do to_vec |f| { xs.each(|x| f(*x)) }; assert_eq!(xs, ys); } diff --git a/src/libcore/iterator.rs b/src/libcore/iterator.rs index 5e95485b27360..29dd4538aa251 100644 --- a/src/libcore/iterator.rs +++ b/src/libcore/iterator.rs @@ -378,7 +378,7 @@ mod tests { #[test] fn test_counter_to_vec() { let mut it = Counter::new(0, 5).take(10); - let xs = iter::iter_to_vec(|f| it.advance(f)); + let xs = iter::to_vec(|f| it.advance(f)); assert_eq!(xs, ~[0, 5, 10, 15, 20, 25, 30, 35, 40, 45]); } From da2ac908126ec52e60e621416ce84284e7b77e51 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Thu, 2 May 2013 22:37:22 -0700 Subject: [PATCH 284/410] libstd: Remove mutable fields from fileinput and net_tcp --- src/libstd/fileinput.rs | 4 ++-- src/libstd/net_tcp.rs | 40 +++++++++++++++++++++------------------- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/src/libstd/fileinput.rs b/src/libstd/fileinput.rs index a24b11d71c68d..90774d19595ab 100644 --- a/src/libstd/fileinput.rs +++ b/src/libstd/fileinput.rs @@ -145,7 +145,7 @@ struct FileInput_ { // "self.fi." -> "self." and renaming FileInput_. Documentation above // will likely have to be updated to use `let mut in = ...`. pub struct FileInput { - priv mut fi: FileInput_ + priv fi: @mut FileInput_ } impl FileInput { @@ -170,7 +170,7 @@ impl FileInput { pub fn from_vec_raw(files: ~[Option]) -> FileInput { FileInput{ - fi: FileInput_ { + fi: @mut FileInput_ { files: files, current_reader: None, state: FileInputState { diff --git a/src/libstd/net_tcp.rs b/src/libstd/net_tcp.rs index 53eb6c5561b68..e8c38be74c7d2 100644 --- a/src/libstd/net_tcp.rs +++ b/src/libstd/net_tcp.rs @@ -71,14 +71,14 @@ pub fn TcpSocket(socket_data: @TcpSocketData) -> TcpSocket { * satisfy both the `io::Reader` and `io::Writer` traits. */ pub struct TcpSocketBuf { - data: @TcpBufferedSocketData, - mut end_of_stream: bool + data: @mut TcpBufferedSocketData, + end_of_stream: @mut bool } -pub fn TcpSocketBuf(data: @TcpBufferedSocketData) -> TcpSocketBuf { +pub fn TcpSocketBuf(data: @mut TcpBufferedSocketData) -> TcpSocketBuf { TcpSocketBuf { data: data, - end_of_stream: false + end_of_stream: @mut false } } @@ -670,7 +670,7 @@ fn listen_common(host_ip: ip::IpAddr, &ip::Ipv4(_) => { false } &ip::Ipv6(_) => { true } }, - mut active: true + active: @mut true }; let server_data_ptr: *TcpListenFcData = &server_data; @@ -751,7 +751,7 @@ fn listen_common(host_ip: ip::IpAddr, debug!( "tcp::listen post-kill recv hl interact %?", loop_ptr); - (*server_data_ptr).active = false; + *(*server_data_ptr).active = false; uv::ll::close(server_stream_ptr, tcp_lfc_close_cb); } }; @@ -782,7 +782,7 @@ fn listen_common(host_ip: ip::IpAddr, debug!( "tcp::listen post-kill recv hl interact %?", loop_ptr); - (*server_data_ptr).active = false; + *(*server_data_ptr).active = false; uv::ll::close(server_stream_ptr, tcp_lfc_close_cb); } }; @@ -816,8 +816,8 @@ fn listen_common(host_ip: ip::IpAddr, * A buffered wrapper that you can cast as an `io::Reader` or `io::Writer` */ pub fn socket_buf(sock: TcpSocket) -> TcpSocketBuf { - TcpSocketBuf(@TcpBufferedSocketData { - sock: sock, mut buf: ~[], buf_off: 0 + TcpSocketBuf(@mut TcpBufferedSocketData { + sock: sock, buf: ~[], buf_off: 0 }) } @@ -902,12 +902,13 @@ impl io::Reader for TcpSocketBuf { // need to read in data from the socket. Note that the internal // buffer is of no use anymore as we read all bytes from it, // so we can throw it away. - let read_result = read(&self.data.sock, 0u); + let data = &*self.data; + let read_result = read(&data.sock, 0u); if read_result.is_err() { let err_data = read_result.get_err(); if err_data.err_name == ~"EOF" { - self.end_of_stream = true; + *self.end_of_stream = true; break; } else { debug!("ERROR sock_buf as io::reader.read err %? %?", @@ -934,12 +935,13 @@ impl io::Reader for TcpSocketBuf { return c as int } - let read_result = read(&self.data.sock, 0u); + let data = &*self.data; + let read_result = read(&data.sock, 0u); if read_result.is_err() { let err_data = read_result.get_err(); if err_data.err_name == ~"EOF" { - self.end_of_stream = true; + *self.end_of_stream = true; return -1 } else { debug!("ERROR sock_buf as io::reader.read err %? %?", @@ -954,7 +956,7 @@ impl io::Reader for TcpSocketBuf { } } fn eof(&self) -> bool { - self.end_of_stream + *self.end_of_stream } fn seek(&self, dist: int, seek: io::SeekStyle) { debug!("tcp_socket_buf seek stub %? %?", dist, seek); @@ -1204,7 +1206,7 @@ struct TcpListenFcData { on_connect_cb: ~fn(*uv::ll::uv_tcp_t), iotask: IoTask, ipv6: bool, - mut active: bool, + active: @mut bool, } extern fn tcp_lfc_close_cb(handle: *uv::ll::uv_tcp_t) { @@ -1222,7 +1224,7 @@ extern fn tcp_lfc_on_connection_cb(handle: *uv::ll::uv_tcp_t, let server_data_ptr = uv::ll::get_data_for_uv_handle(handle) as *TcpListenFcData; let kill_ch = (*server_data_ptr).kill_ch.clone(); - if (*server_data_ptr).active { + if *(*server_data_ptr).active { match status { 0i32 => ((*server_data_ptr).on_connect_cb)(handle), _ => { @@ -1230,7 +1232,7 @@ extern fn tcp_lfc_on_connection_cb(handle: *uv::ll::uv_tcp_t, kill_ch.send( Some(uv::ll::get_last_err_data(loop_ptr) .to_tcp_err())); - (*server_data_ptr).active = false; + *(*server_data_ptr).active = false; } } } @@ -1430,8 +1432,8 @@ struct TcpSocketData { struct TcpBufferedSocketData { sock: TcpSocket, - mut buf: ~[u8], - mut buf_off: uint + buf: ~[u8], + buf_off: uint } #[cfg(test)] From 92d2ec4d32c7f7722569b1463cba31c6402f7513 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Thu, 2 May 2013 22:44:03 -0700 Subject: [PATCH 285/410] libstd: Remove mutable fields from flatpipes and io_util --- src/libstd/flatpipes.rs | 20 +++++++++++--------- src/libstd/io_util.rs | 8 ++++---- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/libstd/flatpipes.rs b/src/libstd/flatpipes.rs index 88de53f360519..b091a951af178 100644 --- a/src/libstd/flatpipes.rs +++ b/src/libstd/flatpipes.rs @@ -558,9 +558,11 @@ pub mod bytepipes { } } + // XXX: Remove `@mut` when this module is ported to the new I/O traits, + // which use `&mut self` properly. pub struct PipeBytePort { port: comm::Port<~[u8]>, - mut buf: ~[u8] + buf: @mut ~[u8] } pub struct PipeByteChan { @@ -569,13 +571,13 @@ pub mod bytepipes { impl BytePort for PipeBytePort { fn try_recv(&self, count: uint) -> Option<~[u8]> { - if vec::uniq_len(&const self.buf) >= count { - let mut bytes = ::core::util::replace(&mut self.buf, ~[]); - self.buf = bytes.slice(count, bytes.len()).to_owned(); + if vec::uniq_len(&const *self.buf) >= count { + let mut bytes = ::core::util::replace(&mut *self.buf, ~[]); + *self.buf = bytes.slice(count, bytes.len()).to_owned(); bytes.truncate(count); return Some(bytes); - } else if vec::uniq_len(&const self.buf) > 0 { - let mut bytes = ::core::util::replace(&mut self.buf, ~[]); + } else if vec::uniq_len(&const *self.buf) > 0 { + let mut bytes = ::core::util::replace(&mut *self.buf, ~[]); assert!(count > bytes.len()); match self.try_recv(count - bytes.len()) { Some(rest) => { @@ -584,11 +586,11 @@ pub mod bytepipes { } None => return None } - } else if vec::uniq_len(&const self.buf) == 0 { + } else if vec::uniq_len(&const *self.buf) == 0 { match self.port.try_recv() { Some(buf) => { assert!(!buf.is_empty()); - self.buf = buf; + *self.buf = buf; return self.try_recv(count); } None => return None @@ -609,7 +611,7 @@ pub mod bytepipes { fn new(p: Port<~[u8]>) -> PipeBytePort { PipeBytePort { port: p, - buf: ~[] + buf: @mut ~[] } } } diff --git a/src/libstd/io_util.rs b/src/libstd/io_util.rs index 50d2eb6a78521..6ed626202b7e2 100644 --- a/src/libstd/io_util.rs +++ b/src/libstd/io_util.rs @@ -13,14 +13,14 @@ use core::io; pub struct BufReader { buf: ~[u8], - mut pos: uint + pos: @mut uint } pub impl BufReader { pub fn new(v: ~[u8]) -> BufReader { BufReader { buf: v, - pos: 0 + pos: @mut 0 } } @@ -29,13 +29,13 @@ pub impl BufReader { // I can't get the borrowing to work correctly let bytes_reader = BytesReader { bytes: ::core::util::id::<&[u8]>(self.buf), - pos: self.pos + pos: *self.pos }; let res = f(&bytes_reader); // FIXME #4429: This isn't correct if f fails - self.pos = bytes_reader.pos; + *self.pos = bytes_reader.pos; return res; } From bba0680cb0801bc52d2abfc87bbf0885dc0355f8 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Thu, 2 May 2013 22:51:12 -0700 Subject: [PATCH 286/410] libstd: Remove mutable fields from future and par --- src/libstd/future.rs | 77 ++++++++++++++++++++++++++++++++------------ src/libstd/par.rs | 4 +-- 2 files changed, 58 insertions(+), 23 deletions(-) diff --git a/src/libstd/future.rs b/src/libstd/future.rs index 5e3e64b2f1cfa..209859e30961e 100644 --- a/src/libstd/future.rs +++ b/src/libstd/future.rs @@ -29,7 +29,7 @@ use core::task; #[doc = "The future type"] pub struct Future { - priv mut state: FutureState, + priv state: FutureState, } // FIXME(#2829) -- futures should not be copyable, because they close @@ -47,13 +47,14 @@ priv enum FutureState { /// Methods on the `future` type pub impl Future { - fn get(&self) -> A { + fn get(&mut self) -> A { //! Get the value of the future *(self.get_ref()) } } pub impl Future { + #[cfg(stage0)] fn get_ref<'a>(&'a self) -> &'a A { /*! * Executes the future's closure and then returns a borrowed @@ -61,19 +62,53 @@ pub impl Future { * the future. */ unsafe { - match self.state { - Forced(ref mut v) => { return cast::transmute(v); } - Evaluating => fail!(~"Recursive forcing of future!"), - Pending(_) => {} + { + match self.state { + Forced(ref mut v) => { return cast::transmute(v); } + Evaluating => fail!(~"Recursive forcing of future!"), + Pending(_) => {} + } + } + { + let mut state = Evaluating; + self.state <-> state; + match state { + Forced(_) | Evaluating => fail!(~"Logic error."), + Pending(f) => { + self.state = Forced(f()); + cast::transmute(self.get_ref()) + } + } } + } + } - let mut state = Evaluating; - self.state <-> state; - match state { - Forced(_) | Evaluating => fail!(~"Logic error."), - Pending(f) => { - self.state = Forced(f()); - self.get_ref() + #[cfg(stage1)] + #[cfg(stage2)] + #[cfg(stage3)] + fn get_ref<'a>(&'a mut self) -> &'a A { + /*! + * Executes the future's closure and then returns a borrowed + * pointer to the result. The borrowed pointer lasts as long as + * the future. + */ + unsafe { + { + match self.state { + Forced(ref mut v) => { return cast::transmute(v); } + Evaluating => fail!(~"Recursive forcing of future!"), + Pending(_) => {} + } + } + { + let mut state = Evaluating; + self.state <-> state; + match state { + Forced(_) | Evaluating => fail!(~"Logic error."), + Pending(f) => { + self.state = Forced(f()); + cast::transmute(self.get_ref()) + } } } } @@ -150,7 +185,7 @@ mod test { #[test] fn test_from_value() { - let f = from_value(~"snail"); + let mut f = from_value(~"snail"); assert!(f.get() == ~"snail"); } @@ -158,31 +193,31 @@ mod test { fn test_from_port() { let (po, ch) = oneshot(); send_one(ch, ~"whale"); - let f = from_port(po); + let mut f = from_port(po); assert!(f.get() == ~"whale"); } #[test] fn test_from_fn() { - let f = from_fn(|| ~"brail"); + let mut f = from_fn(|| ~"brail"); assert!(f.get() == ~"brail"); } #[test] fn test_interface_get() { - let f = from_value(~"fail"); + let mut f = from_value(~"fail"); assert!(f.get() == ~"fail"); } #[test] fn test_get_ref_method() { - let f = from_value(22); + let mut f = from_value(22); assert!(*f.get_ref() == 22); } #[test] fn test_spawn() { - let f = spawn(|| ~"bale"); + let mut f = spawn(|| ~"bale"); assert!(f.get() == ~"bale"); } @@ -190,14 +225,14 @@ mod test { #[should_fail] #[ignore(cfg(target_os = "win32"))] fn test_futurefail() { - let f = spawn(|| fail!()); + let mut f = spawn(|| fail!()); let _x: ~str = f.get(); } #[test] fn test_sendable_future() { let expected = ~"schlorf"; - let f = do spawn { copy expected }; + let mut f = do spawn { copy expected }; do task::spawn || { let actual = f.get(); assert!(actual == expected); diff --git a/src/libstd/par.rs b/src/libstd/par.rs index cfedbb66caac5..cf0eba9d30cea 100644 --- a/src/libstd/par.rs +++ b/src/libstd/par.rs @@ -73,10 +73,10 @@ fn map_slices( info!("num_tasks: %?", (num_tasks, futures.len())); assert!((num_tasks == futures.len())); - let r = do futures.map() |ys| { + let r = do vec::map_consume(futures) |ys| { + let mut ys = ys; ys.get() }; - assert!((r.len() == futures.len())); r } } From ee78d811e488e2f279cfda454f8f909477dc3d6b Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Thu, 2 May 2013 22:52:19 -0700 Subject: [PATCH 287/410] libstd: Start warning about mutable fields, now that they only exist in stage0 --- src/libstd/std.rc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/libstd/std.rc b/src/libstd/std.rc index 51e11669f449d..931974d245485 100644 --- a/src/libstd/std.rc +++ b/src/libstd/std.rc @@ -28,7 +28,9 @@ not required in or otherwise suitable for the core library. #[allow(vecs_implicitly_copyable)]; #[deny(non_camel_case_types)]; -#[allow(deprecated_mutable_fields)]; + +// Allow mutable fields only in stage0. +#[warn(deprecated_mutable_fields)]; pub mod uv_ll; From b2d1ac100fb7c7ea8716b17b8df64e43aef41f9e Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Thu, 2 May 2013 23:09:50 -0700 Subject: [PATCH 288/410] libcore: Remove mutable fields from rand. --- src/libcore/hashmap.rs | 2 +- src/libcore/rand.rs | 176 ++++++++++++++++-------------- src/libcore/rand/distributions.rs | 12 +- src/libcore/unstable/at_exit.rs | 3 +- src/libstd/tempfile.rs | 2 +- src/libstd/test.rs | 2 +- 6 files changed, 107 insertions(+), 90 deletions(-) diff --git a/src/libcore/hashmap.rs b/src/libcore/hashmap.rs index b764fccf64cff..8e0a185248e61 100644 --- a/src/libcore/hashmap.rs +++ b/src/libcore/hashmap.rs @@ -56,7 +56,7 @@ fn resize_at(capacity: uint) -> uint { pub fn linear_map_with_capacity( initial_capacity: uint) -> HashMap { - let r = rand::task_rng(); + let mut r = rand::task_rng(); linear_map_with_capacity_and_keys(r.gen(), r.gen(), initial_capacity) } diff --git a/src/libcore/rand.rs b/src/libcore/rand.rs index 80f69f067eb54..cb212efa363e2 100644 --- a/src/libcore/rand.rs +++ b/src/libcore/rand.rs @@ -55,12 +55,12 @@ pub mod distributions; /// A type that can be randomly generated using an Rng pub trait Rand { - fn rand(rng: &R) -> Self; + fn rand(rng: &mut R) -> Self; } impl Rand for int { #[inline] - fn rand(rng: &R) -> int { + fn rand(rng: &mut R) -> int { if int::bits == 32 { rng.next() as int } else { @@ -71,35 +71,35 @@ impl Rand for int { impl Rand for i8 { #[inline] - fn rand(rng: &R) -> i8 { + fn rand(rng: &mut R) -> i8 { rng.next() as i8 } } impl Rand for i16 { #[inline] - fn rand(rng: &R) -> i16 { + fn rand(rng: &mut R) -> i16 { rng.next() as i16 } } impl Rand for i32 { #[inline] - fn rand(rng: &R) -> i32 { + fn rand(rng: &mut R) -> i32 { rng.next() as i32 } } impl Rand for i64 { #[inline] - fn rand(rng: &R) -> i64 { + fn rand(rng: &mut R) -> i64 { (rng.next() as i64 << 32) | rng.next() as i64 } } impl Rand for uint { #[inline] - fn rand(rng: &R) -> uint { + fn rand(rng: &mut R) -> uint { if uint::bits == 32 { rng.next() as uint } else { @@ -110,42 +110,42 @@ impl Rand for uint { impl Rand for u8 { #[inline] - fn rand(rng: &R) -> u8 { + fn rand(rng: &mut R) -> u8 { rng.next() as u8 } } impl Rand for u16 { #[inline] - fn rand(rng: &R) -> u16 { + fn rand(rng: &mut R) -> u16 { rng.next() as u16 } } impl Rand for u32 { #[inline] - fn rand(rng: &R) -> u32 { + fn rand(rng: &mut R) -> u32 { rng.next() } } impl Rand for u64 { #[inline] - fn rand(rng: &R) -> u64 { + fn rand(rng: &mut R) -> u64 { (rng.next() as u64 << 32) | rng.next() as u64 } } impl Rand for float { #[inline] - fn rand(rng: &R) -> float { + fn rand(rng: &mut R) -> float { rng.gen::() as float } } impl Rand for f32 { #[inline] - fn rand(rng: &R) -> f32 { + fn rand(rng: &mut R) -> f32 { rng.gen::() as f32 } } @@ -153,7 +153,7 @@ impl Rand for f32 { static scale : f64 = (u32::max_value as f64) + 1.0f64; impl Rand for f64 { #[inline] - fn rand(rng: &R) -> f64 { + fn rand(rng: &mut R) -> f64 { let u1 = rng.next() as f64; let u2 = rng.next() as f64; let u3 = rng.next() as f64; @@ -164,14 +164,14 @@ impl Rand for f64 { impl Rand for char { #[inline] - fn rand(rng: &R) -> char { + fn rand(rng: &mut R) -> char { rng.next() as char } } impl Rand for bool { #[inline] - fn rand(rng: &R) -> bool { + fn rand(rng: &mut R) -> bool { rng.next() & 1u32 == 1u32 } } @@ -185,7 +185,7 @@ macro_rules! tuple_impl { > Rand for ( $( $tyvar ),* , ) { #[inline] - fn rand(_rng: &R) -> ( $( $tyvar ),* , ) { + fn rand(_rng: &mut R) -> ( $( $tyvar ),* , ) { ( // use the $tyvar's to get the appropriate number of // repeats (they're not actually needed) @@ -201,7 +201,7 @@ macro_rules! tuple_impl { impl Rand for () { #[inline] - fn rand(_: &R) -> () { () } + fn rand(_: &mut R) -> () { () } } tuple_impl!{A} tuple_impl!{A, B} @@ -216,7 +216,7 @@ tuple_impl!{A, B, C, D, E, F, G, H, I, J} impl Rand for Option { #[inline] - fn rand(rng: &R) -> Option { + fn rand(rng: &mut R) -> Option { if rng.gen() { Some(rng.gen()) } else { @@ -227,12 +227,12 @@ impl Rand for Option { impl Rand for ~T { #[inline] - fn rand(rng: &R) -> ~T { ~rng.gen() } + fn rand(rng: &mut R) -> ~T { ~rng.gen() } } impl Rand for @T { #[inline] - fn rand(rng: &R) -> @T { @rng.gen() } + fn rand(rng: &mut R) -> @T { @rng.gen() } } #[abi = "cdecl"] @@ -248,7 +248,7 @@ pub mod rustrt { /// A random number generator pub trait Rng { /// Return the next random integer - pub fn next(&self) -> u32; + pub fn next(&mut self) -> u32; } /// A value with a particular weight compared to other values @@ -259,21 +259,21 @@ pub struct Weighted { pub trait RngUtil { /// Return a random value of a Rand type - fn gen(&self) -> T; + fn gen(&mut self) -> T; /** * Return a int randomly chosen from the range [start, end), * failing if start >= end */ - fn gen_int_range(&self, start: int, end: int) -> int; + fn gen_int_range(&mut self, start: int, end: int) -> int; /** * Return a uint randomly chosen from the range [start, end), * failing if start >= end */ - fn gen_uint_range(&self, start: uint, end: uint) -> uint; + fn gen_uint_range(&mut self, start: uint, end: uint) -> uint; /** * Return a char randomly chosen from chars, failing if chars is empty */ - fn gen_char_from(&self, chars: &str) -> char; + fn gen_char_from(&mut self, chars: &str) -> char; /** * Return a bool with a 1 in n chance of true * @@ -289,7 +289,7 @@ pub trait RngUtil { * } * ~~~ */ - fn gen_weighted_bool(&self, n: uint) -> bool; + fn gen_weighted_bool(&mut self, n: uint) -> bool; /** * Return a random string of the specified length composed of A-Z,a-z,0-9 * @@ -305,7 +305,7 @@ pub trait RngUtil { * } * ~~~ */ - fn gen_str(&self, len: uint) -> ~str; + fn gen_str(&mut self, len: uint) -> ~str; /** * Return a random byte string of the specified length * @@ -321,7 +321,7 @@ pub trait RngUtil { * } * ~~~ */ - fn gen_bytes(&self, len: uint) -> ~[u8]; + fn gen_bytes(&mut self, len: uint) -> ~[u8]; /** * Choose an item randomly, failing if values is empty * @@ -337,9 +337,9 @@ pub trait RngUtil { * } * ~~~ */ - fn choose(&self, values: &[T]) -> T; + fn choose(&mut self, values: &[T]) -> T; /// Choose Some(item) randomly, returning None if values is empty - fn choose_option(&self, values: &[T]) -> Option; + fn choose_option(&mut self, values: &[T]) -> Option; /** * Choose an item respecting the relative weights, failing if the sum of * the weights is 0 @@ -359,7 +359,7 @@ pub trait RngUtil { * } * ~~~ */ - fn choose_weighted(&self, v : &[Weighted]) -> T; + fn choose_weighted(&mut self, v : &[Weighted]) -> T; /** * Choose Some(item) respecting the relative weights, returning none if * the sum of the weights is 0 @@ -379,7 +379,8 @@ pub trait RngUtil { * } * ~~~ */ - fn choose_weighted_option(&self, v: &[Weighted]) -> Option; + fn choose_weighted_option(&mut self, v: &[Weighted]) + -> Option; /** * Return a vec containing copies of the items, in order, where * the weight of the item determines how many copies there are @@ -399,7 +400,7 @@ pub trait RngUtil { * } * ~~~ */ - fn weighted_vec(&self, v: &[Weighted]) -> ~[T]; + fn weighted_vec(&mut self, v: &[Weighted]) -> ~[T]; /** * Shuffle a vec * @@ -415,7 +416,7 @@ pub trait RngUtil { * } * ~~~ */ - fn shuffle(&self, values: &[T]) -> ~[T]; + fn shuffle(&mut self, values: &[T]) -> ~[T]; /** * Shuffle a mutable vec in place * @@ -435,14 +436,14 @@ pub trait RngUtil { * } * ~~~ */ - fn shuffle_mut(&self, values: &mut [T]); + fn shuffle_mut(&mut self, values: &mut [T]); } /// Extension methods for random number generators impl RngUtil for R { /// Return a random value for a Rand type #[inline(always)] - fn gen(&self) -> T { + fn gen(&mut self) -> T { Rand::rand(self) } @@ -450,7 +451,7 @@ impl RngUtil for R { * Return an int randomly chosen from the range [start, end), * failing if start >= end */ - fn gen_int_range(&self, start: int, end: int) -> int { + fn gen_int_range(&mut self, start: int, end: int) -> int { assert!(start < end); start + int::abs(self.gen::() % (end - start)) } @@ -459,7 +460,7 @@ impl RngUtil for R { * Return a uint randomly chosen from the range [start, end), * failing if start >= end */ - fn gen_uint_range(&self, start: uint, end: uint) -> uint { + fn gen_uint_range(&mut self, start: uint, end: uint) -> uint { assert!(start < end); start + (self.gen::() % (end - start)) } @@ -467,7 +468,7 @@ impl RngUtil for R { /** * Return a char randomly chosen from chars, failing if chars is empty */ - fn gen_char_from(&self, chars: &str) -> char { + fn gen_char_from(&mut self, chars: &str) -> char { assert!(!chars.is_empty()); let mut cs = ~[]; for str::each_char(chars) |c| { cs.push(c) } @@ -475,7 +476,7 @@ impl RngUtil for R { } /// Return a bool with a 1-in-n chance of true - fn gen_weighted_bool(&self, n: uint) -> bool { + fn gen_weighted_bool(&mut self, n: uint) -> bool { if n == 0u { true } else { @@ -486,7 +487,7 @@ impl RngUtil for R { /** * Return a random string of the specified length composed of A-Z,a-z,0-9 */ - fn gen_str(&self, len: uint) -> ~str { + fn gen_str(&mut self, len: uint) -> ~str { let charset = ~"ABCDEFGHIJKLMNOPQRSTUVWXYZ\ abcdefghijklmnopqrstuvwxyz\ 0123456789"; @@ -500,19 +501,19 @@ impl RngUtil for R { } /// Return a random byte string of the specified length - fn gen_bytes(&self, len: uint) -> ~[u8] { + fn gen_bytes(&mut self, len: uint) -> ~[u8] { do vec::from_fn(len) |_i| { self.gen() } } /// Choose an item randomly, failing if values is empty - fn choose(&self, values: &[T]) -> T { + fn choose(&mut self, values: &[T]) -> T { self.choose_option(values).get() } /// Choose Some(item) randomly, returning None if values is empty - fn choose_option(&self, values: &[T]) -> Option { + fn choose_option(&mut self, values: &[T]) -> Option { if values.is_empty() { None } else { @@ -523,7 +524,7 @@ impl RngUtil for R { * Choose an item respecting the relative weights, failing if the sum of * the weights is 0 */ - fn choose_weighted(&self, v : &[Weighted]) -> T { + fn choose_weighted(&mut self, v: &[Weighted]) -> T { self.choose_weighted_option(v).get() } @@ -531,7 +532,8 @@ impl RngUtil for R { * Choose Some(item) respecting the relative weights, returning none if * the sum of the weights is 0 */ - fn choose_weighted_option(&self, v: &[Weighted]) -> Option { + fn choose_weighted_option(&mut self, v: &[Weighted]) + -> Option { let mut total = 0u; for v.each |item| { total += item.weight; @@ -554,7 +556,7 @@ impl RngUtil for R { * Return a vec containing copies of the items, in order, where * the weight of the item determines how many copies there are */ - fn weighted_vec(&self, v: &[Weighted]) -> ~[T] { + fn weighted_vec(&mut self, v: &[Weighted]) -> ~[T] { let mut r = ~[]; for v.each |item| { for uint::range(0u, item.weight) |_i| { @@ -565,14 +567,14 @@ impl RngUtil for R { } /// Shuffle a vec - fn shuffle(&self, values: &[T]) -> ~[T] { + fn shuffle(&mut self, values: &[T]) -> ~[T] { let mut m = vec::from_slice(values); self.shuffle_mut(m); m } /// Shuffle a mutable vec in place - fn shuffle_mut(&self, values: &mut [T]) { + fn shuffle_mut(&mut self, values: &mut [T]) { let mut i = values.len(); while i >= 2u { // invariant: elements with index >= i have been locked in place. @@ -594,12 +596,12 @@ static RAND_SIZE: u32 = 1 << RAND_SIZE_LEN; /// A random number generator that uses the [ISAAC /// algorithm](http://en.wikipedia.org/wiki/ISAAC_%28cipher%29). pub struct IsaacRng { - priv mut cnt: u32, - priv mut rsl: [u32, .. RAND_SIZE], - priv mut mem: [u32, .. RAND_SIZE], - priv mut a: u32, - priv mut b: u32, - priv mut c: u32 + priv cnt: u32, + priv rsl: [u32, .. RAND_SIZE], + priv mem: [u32, .. RAND_SIZE], + priv a: u32, + priv b: u32, + priv c: u32 } pub impl IsaacRng { @@ -647,7 +649,7 @@ pub impl IsaacRng { /// Initialises `self`. If `use_rsl` is true, then use the current value /// of `rsl` as a seed, otherwise construct one algorithmically (not /// randomly). - priv fn init(&self, use_rsl: bool) { + priv fn init(&mut self, use_rsl: bool) { macro_rules! init_mut_many ( ($( $var:ident ),* = $val:expr ) => { let mut $( $var = $val ),*; @@ -705,16 +707,16 @@ pub impl IsaacRng { /// Refills the output buffer (`self.rsl`) #[inline] - priv fn isaac(&self) { + priv fn isaac(&mut self) { self.c += 1; // abbreviations let mut a = self.a, b = self.b + self.c; - let mem = &mut self.mem; - let rsl = &mut self.rsl; static midpoint: uint = RAND_SIZE as uint / 2; - macro_rules! ind (($x:expr) => { mem[($x >> 2) & (RAND_SIZE - 1)] }); + macro_rules! ind (($x:expr) => { + self.mem[($x >> 2) & (RAND_SIZE - 1)] + }); macro_rules! rngstep( ($j:expr, $shift:expr) => {{ let base = base + $j; @@ -724,13 +726,13 @@ pub impl IsaacRng { a << $shift as uint }; - let x = mem[base + mr_offset]; - a = (a ^ mix) + mem[base + m2_offset]; + let x = self.mem[base + mr_offset]; + a = (a ^ mix) + self.mem[base + m2_offset]; let y = ind!(x) + a + b; - mem[base + mr_offset] = y; + self.mem[base + mr_offset] = y; b = ind!(y >> RAND_SIZE_LEN) + x; - rsl[base + mr_offset] = b; + self.rsl[base + mr_offset] = b; }} ); @@ -751,7 +753,7 @@ pub impl IsaacRng { impl Rng for IsaacRng { #[inline(always)] - fn next(&self) -> u32 { + fn next(&mut self) -> u32 { if self.cnt == 0 { // make some more numbers self.isaac(); @@ -765,15 +767,15 @@ impl Rng for IsaacRng { /// generator](http://en.wikipedia.org/wiki/Xorshift). Not suitable for /// cryptographic purposes. pub struct XorShiftRng { - priv mut x: u32, - priv mut y: u32, - priv mut z: u32, - priv mut w: u32, + priv x: u32, + priv y: u32, + priv z: u32, + priv w: u32, } impl Rng for XorShiftRng { #[inline] - pub fn next(&self) -> u32 { + pub fn next(&mut self) -> u32 { let x = self.x; let t = x ^ (x << 11); self.x = self.y; @@ -789,7 +791,10 @@ pub impl XorShiftRng { /// Create an xor shift random number generator with a default seed. fn new() -> XorShiftRng { // constants taken from http://en.wikipedia.org/wiki/Xorshift - XorShiftRng::new_seeded(123456789u32, 362436069u32, 521288629u32, 88675123u32) + XorShiftRng::new_seeded(123456789u32, + 362436069u32, + 521288629u32, + 88675123u32) } /** @@ -798,7 +803,12 @@ pub impl XorShiftRng { * all other generators constructed with the same seed. */ fn new_seeded(x: u32, y: u32, z: u32, w: u32) -> XorShiftRng { - XorShiftRng { x: x, y: y, z: z, w: w } + XorShiftRng { + x: x, + y: y, + z: z, + w: w, + } } } @@ -815,7 +825,7 @@ pub fn seed() -> ~[u8] { } // used to make space in TLS for a random number generator -fn tls_rng_state(_v: @IsaacRng) {} +fn tls_rng_state(_v: @@mut IsaacRng) {} /** * Gives back a lazily initialized task-local random number generator, @@ -823,15 +833,15 @@ fn tls_rng_state(_v: @IsaacRng) {} * `task_rng().gen::()`. */ #[inline] -pub fn task_rng() -> @IsaacRng { - let r : Option<@IsaacRng>; +pub fn task_rng() -> @@mut IsaacRng { + let r : Option<@@mut IsaacRng>; unsafe { r = task::local_data::local_data_get(tls_rng_state); } match r { None => { unsafe { - let rng = @IsaacRng::new_seeded(seed()); + let rng = @@mut IsaacRng::new_seeded(seed()); task::local_data::local_data_set(tls_rng_state, rng); rng } @@ -841,9 +851,13 @@ pub fn task_rng() -> @IsaacRng { } // Allow direct chaining with `task_rng` -impl Rng for @R { +impl Rng for @@mut R { #[inline(always)] - fn next(&self) -> u32 { (**self).next() } + fn next(&mut self) -> u32 { + match *self { + @@ref mut r => r.next() + } + } } /** @@ -852,7 +866,9 @@ impl Rng for @R { */ #[inline] pub fn random() -> T { - (*task_rng()).gen() + match *task_rng() { + @ref mut r => r.gen() + } } #[cfg(test)] diff --git a/src/libcore/rand/distributions.rs b/src/libcore/rand/distributions.rs index a644f60db69fb..72cff5111e762 100644 --- a/src/libcore/rand/distributions.rs +++ b/src/libcore/rand/distributions.rs @@ -27,13 +27,13 @@ mod ziggurat_tables; // inlining should mean there is no performance penalty for this #[inline(always)] -fn ziggurat(rng: &R, +fn ziggurat(rng: &mut R, center_u: bool, X: ziggurat_tables::ZigTable, F: ziggurat_tables::ZigTable, F_DIFF: ziggurat_tables::ZigTable, pdf: &'static fn(f64) -> f64, // probability density function - zero_case: &'static fn(&R, f64) -> f64) -> f64 { + zero_case: &'static fn(&mut R, f64) -> f64) -> f64 { loop { let u = if center_u {2.0 * rng.gen() - 1.0} else {rng.gen()}; let i: uint = rng.gen::() & 0xff; @@ -76,13 +76,13 @@ fn ziggurat(rng: &R, pub struct StandardNormal(f64); impl Rand for StandardNormal { - fn rand(rng: &R) -> StandardNormal { + fn rand(rng: &mut R) -> StandardNormal { #[inline(always)] fn pdf(x: f64) -> f64 { f64::exp((-x*x/2.0) as f64) as f64 } #[inline(always)] - fn zero_case(rng: &R, u: f64) -> f64 { + fn zero_case(rng: &mut R, u: f64) -> f64 { // compute a random number in the tail by hand // strange initial conditions, because the loop is not @@ -130,13 +130,13 @@ pub struct Exp1(f64); // This could be done via `-f64::ln(rng.gen::())` but that is slower. impl Rand for Exp1 { #[inline] - fn rand(rng: &R) -> Exp1 { + fn rand(rng: &mut R) -> Exp1 { #[inline(always)] fn pdf(x: f64) -> f64 { f64::exp(-x) } #[inline(always)] - fn zero_case(rng: &R, _u: f64) -> f64 { + fn zero_case(rng: &mut R, _u: f64) -> f64 { ziggurat_tables::ZIG_EXP_R - f64::ln(rng.gen()) } diff --git a/src/libcore/unstable/at_exit.rs b/src/libcore/unstable/at_exit.rs index bc4ec620aa86a..c9cd2f61e5c8a 100644 --- a/src/libcore/unstable/at_exit.rs +++ b/src/libcore/unstable/at_exit.rs @@ -62,7 +62,8 @@ fn exit_runner(exit_fns: *ExitFunctions) { // give us ownership of the array of functions let mut exit_fns_vec = unsafe { vec::from_buf(start, count as uint) }; // Let's not make any promises about execution order - rand::rng().shuffle_mut(exit_fns_vec); + let mut rng = rand::rng(); + rng.shuffle_mut(exit_fns_vec); debug!("running %u exit functions", exit_fns_vec.len()); diff --git a/src/libstd/tempfile.rs b/src/libstd/tempfile.rs index 10645e947e2d9..e02a7a337334e 100644 --- a/src/libstd/tempfile.rs +++ b/src/libstd/tempfile.rs @@ -13,7 +13,7 @@ use core::rand::RngUtil; pub fn mkdtemp(tmpdir: &Path, suffix: &str) -> Option { - let r = rand::rng(); + let mut r = rand::rng(); for 1000.times { let p = tmpdir.push(r.gen_str(16) + suffix); if os::make_dir(&p, 0x1c0) { // 700 diff --git a/src/libstd/test.rs b/src/libstd/test.rs index 65fb0c7426a4e..7c0673a280bd8 100644 --- a/src/libstd/test.rs +++ b/src/libstd/test.rs @@ -688,7 +688,7 @@ pub mod bench { // not met, it may run as long as the Go algorithm. pub fn auto_bench(&mut self, f: &fn(&mut BenchHarness)) -> ~[f64] { - let rng = rand::rng(); + let mut rng = rand::rng(); let mut magnitude = 10; let mut prev_madp = 0.0; From 2961997f169a526ccf5a3bafd95db3e12f7e0283 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Thu, 2 May 2013 23:12:43 -0700 Subject: [PATCH 289/410] libcore: Remove mutable fields from os and ptr --- src/libcore/os.rs | 5 ++++- src/libcore/ptr.rs | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/libcore/os.rs b/src/libcore/os.rs index 42c77a687e5fd..5a7f01706b4f4 100644 --- a/src/libcore/os.rs +++ b/src/libcore/os.rs @@ -352,7 +352,10 @@ pub fn fsync_fd(fd: c_int, _l: io::fsync::Level) -> c_int { } } -pub struct Pipe { in: c_int, out: c_int } +pub struct Pipe { + in: c_int, + out: c_int +} #[cfg(unix)] pub fn pipe() -> Pipe { diff --git a/src/libcore/ptr.rs b/src/libcore/ptr.rs index 85e46a0feff6b..1a5ff39b30565 100644 --- a/src/libcore/ptr.rs +++ b/src/libcore/ptr.rs @@ -336,7 +336,10 @@ pub mod ptr_tests { #[test] fn test() { unsafe { - struct Pair {mut fst: int, mut snd: int}; + struct Pair { + fst: int, + snd: int + }; let mut p = Pair {fst: 10, snd: 20}; let pptr: *mut Pair = &mut p; let iptr: *mut int = cast::transmute(pptr); From 4dc1c2976d03b6e0fc114019341be51593ef49b2 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Fri, 3 May 2013 11:30:30 -0700 Subject: [PATCH 290/410] libcore: Remove mutable fields from hash --- src/libcore/hash.rs | 208 ++++++++++++++++------------ src/librustc/back/link.rs | 48 ++++--- src/librustc/middle/trans/base.rs | 5 +- src/librustc/middle/trans/common.rs | 2 +- src/librustdoc/markdown_writer.rs | 1 + src/librustpkg/util.rs | 7 +- 6 files changed, 160 insertions(+), 111 deletions(-) diff --git a/src/libcore/hash.rs b/src/libcore/hash.rs index ba1f8cebdb01c..486f0e096e8ac 100644 --- a/src/libcore/hash.rs +++ b/src/libcore/hash.rs @@ -19,12 +19,16 @@ * CPRNG like rand::rng. */ -use io; -use io::Writer; +#[cfg(stage0)] +use cast; +use rt::io::Writer; use to_bytes::IterBytes; use uint; use vec; +// Alias `SipState` to `State`. +pub use State = hash::SipState; + /** * Types that can meaningfully be hashed should implement this. * @@ -65,20 +69,32 @@ impl HashUtil for A { /// Streaming hash-functions should implement this. pub trait Streaming { - fn input(&self, (&const [u8])); + fn input(&mut self, &[u8]); // These can be refactored some when we have default methods. - fn result_bytes(&self) -> ~[u8]; - fn result_str(&self) -> ~str; - fn result_u64(&self) -> u64; - fn reset(&self); + fn result_bytes(&mut self) -> ~[u8]; + fn result_str(&mut self) -> ~str; + fn result_u64(&mut self) -> u64; + fn reset(&mut self); +} + +// XXX: Ugly workaround for bootstrapping. +#[cfg(stage0)] +fn transmute_for_stage0<'a>(bytes: &'a [const u8]) -> &'a [u8] { + unsafe { + cast::transmute(bytes) + } +} +#[cfg(not(stage0))] +fn transmute_for_stage0<'a>(bytes: &'a [u8]) -> &'a [u8] { + bytes } impl Hash for A { #[inline(always)] fn hash_keyed(&self, k0: u64, k1: u64) -> u64 { - let s = &State(k0, k1); + let mut s = State::new(k0, k1); for self.iter_bytes(true) |bytes| { - s.input(bytes); + s.input(transmute_for_stage0(bytes)); } s.result_u64() } @@ -86,32 +102,56 @@ impl Hash for A { fn hash_keyed_2(a: &A, b: &B, k0: u64, k1: u64) -> u64 { - let s = &State(k0, k1); - for a.iter_bytes(true) |bytes| { s.input(bytes); } - for b.iter_bytes(true) |bytes| { s.input(bytes); } + let mut s = State::new(k0, k1); + for a.iter_bytes(true) |bytes| { + s.input(transmute_for_stage0(bytes)); + } + for b.iter_bytes(true) |bytes| { + s.input(transmute_for_stage0(bytes)); + } s.result_u64() } fn hash_keyed_3(a: &A, b: &B, c: &C, k0: u64, k1: u64) -> u64 { - let s = &State(k0, k1); - for a.iter_bytes(true) |bytes| { s.input(bytes); } - for b.iter_bytes(true) |bytes| { s.input(bytes); } - for c.iter_bytes(true) |bytes| { s.input(bytes); } + let mut s = State::new(k0, k1); + for a.iter_bytes(true) |bytes| { + s.input(transmute_for_stage0(bytes)); + } + for b.iter_bytes(true) |bytes| { + s.input(transmute_for_stage0(bytes)); + } + for c.iter_bytes(true) |bytes| { + s.input(transmute_for_stage0(bytes)); + } s.result_u64() } fn hash_keyed_4(a: &A, b: &B, c: &C, d: &D, k0: u64, k1: u64) - -> u64 { - let s = &State(k0, k1); - for a.iter_bytes(true) |bytes| { s.input(bytes); } - for b.iter_bytes(true) |bytes| { s.input(bytes); } - for c.iter_bytes(true) |bytes| { s.input(bytes); } - for d.iter_bytes(true) |bytes| { s.input(bytes); } + D: IterBytes>( + a: &A, + b: &B, + c: &C, + d: &D, + k0: u64, + k1: u64) + -> u64 { + let mut s = State::new(k0, k1); + for a.iter_bytes(true) |bytes| { + s.input(transmute_for_stage0(bytes)); + } + for b.iter_bytes(true) |bytes| { + s.input(transmute_for_stage0(bytes)); + } + for c.iter_bytes(true) |bytes| { + s.input(transmute_for_stage0(bytes)); + } + for d.iter_bytes(true) |bytes| { + s.input(transmute_for_stage0(bytes)); + } s.result_u64() } @@ -119,58 +159,68 @@ fn hash_keyed_5(a: &A, b: &B, c: &C, d: &D, e: &E, - k0: u64, k1: u64) -> u64 { - let s = &State(k0, k1); - for a.iter_bytes(true) |bytes| { s.input(bytes); } - for b.iter_bytes(true) |bytes| { s.input(bytes); } - for c.iter_bytes(true) |bytes| { s.input(bytes); } - for d.iter_bytes(true) |bytes| { s.input(bytes); } - for e.iter_bytes(true) |bytes| { s.input(bytes); } + E: IterBytes>( + a: &A, + b: &B, + c: &C, + d: &D, + e: &E, + k0: u64, + k1: u64) + -> u64 { + let mut s = State::new(k0, k1); + for a.iter_bytes(true) |bytes| { + s.input(transmute_for_stage0(bytes)); + } + for b.iter_bytes(true) |bytes| { + s.input(transmute_for_stage0(bytes)); + } + for c.iter_bytes(true) |bytes| { + s.input(transmute_for_stage0(bytes)); + } + for d.iter_bytes(true) |bytes| { + s.input(transmute_for_stage0(bytes)); + } + for e.iter_bytes(true) |bytes| { + s.input(transmute_for_stage0(bytes)); + } s.result_u64() } -// Implement State as SipState - -pub type State = SipState; - -#[inline(always)] -pub fn State(k0: u64, k1: u64) -> State { - SipState(k0, k1) -} - #[inline(always)] pub fn default_state() -> State { - State(0,0) + State::new(0, 0) } struct SipState { k0: u64, k1: u64, - mut length: uint, // how many bytes we've processed - mut v0: u64, // hash state - mut v1: u64, - mut v2: u64, - mut v3: u64, - mut tail: [u8, ..8], // unprocessed bytes - mut ntail: uint, // how many bytes in tail are valid + length: uint, // how many bytes we've processed + v0: u64, // hash state + v1: u64, + v2: u64, + v3: u64, + tail: [u8, ..8], // unprocessed bytes + ntail: uint, // how many bytes in tail are valid } -#[inline(always)] -fn SipState(key0: u64, key1: u64) -> SipState { - let state = SipState { - k0 : key0, - k1 : key1, - mut length : 0u, - mut v0 : 0u64, - mut v1 : 0u64, - mut v2 : 0u64, - mut v3 : 0u64, - mut tail : [0u8,0,0,0,0,0,0,0], - mut ntail : 0u, - }; - (&state).reset(); - state +impl SipState { + #[inline(always)] + fn new(key0: u64, key1: u64) -> SipState { + let mut state = SipState { + k0: key0, + k1: key1, + length: 0, + v0: 0, + v1: 0, + v2: 0, + v3: 0, + tail: [ 0, 0, 0, 0, 0, 0, 0, 0 ], + ntail: 0, + }; + state.reset(); + state + } } // sadly, these macro definitions can't appear later, @@ -207,12 +257,10 @@ macro_rules! compress ( ) -impl io::Writer for SipState { - +impl Writer for SipState { // Methods for io::writer #[inline(always)] - fn write(&self, msg: &const [u8]) { - + fn write(&mut self, msg: &[u8]) { let length = msg.len(); self.length += length; @@ -272,29 +320,19 @@ impl io::Writer for SipState { self.ntail = left; } - fn seek(&self, _x: int, _s: io::SeekStyle) { - fail!(); - } - fn tell(&self) -> uint { - self.length - } - fn flush(&self) -> int { - 0 - } - fn get_type(&self) -> io::WriterType { - io::File + fn flush(&mut self) { + // No-op } } impl Streaming for SipState { - #[inline(always)] - fn input(&self, buf: &const [u8]) { + fn input(&mut self, buf: &[u8]) { self.write(buf); } #[inline(always)] - fn result_u64(&self) -> u64 { + fn result_u64(&mut self) -> u64 { let mut v0 = self.v0; let mut v1 = self.v1; let mut v2 = self.v2; @@ -324,7 +362,7 @@ impl Streaming for SipState { return (v0 ^ v1 ^ v2 ^ v3); } - fn result_bytes(&self) -> ~[u8] { + fn result_bytes(&mut self) -> ~[u8] { let h = self.result_u64(); ~[(h >> 0) as u8, (h >> 8) as u8, @@ -337,7 +375,7 @@ impl Streaming for SipState { ] } - fn result_str(&self) -> ~str { + fn result_str(&mut self) -> ~str { let r = self.result_bytes(); let mut s = ~""; for vec::each(r) |b| { @@ -347,7 +385,7 @@ impl Streaming for SipState { } #[inline(always)] - fn reset(&self) { + fn reset(&mut self) { self.length = 0; self.v0 = self.k0 ^ 0x736f6d6570736575; self.v1 = self.k1 ^ 0x646f72616e646f6d; @@ -529,4 +567,4 @@ mod tests { val & !(0xff << (byte * 8)) } } -} \ No newline at end of file +} diff --git a/src/librustc/back/link.rs b/src/librustc/back/link.rs index c34c7fe303ee2..3b5c90ec1f964 100644 --- a/src/librustc/back/link.rs +++ b/src/librustc/back/link.rs @@ -22,9 +22,9 @@ use util::ppaux; use core::hash::Streaming; use core::hash; -use core::io::WriterUtil; use core::libc::{c_int, c_uint}; use core::os::consts::{macos, freebsd, linux, android, win32}; +use core::rt::io::Writer; use core::run; use syntax::ast; use syntax::ast_map::{path, path_mod, path_name}; @@ -41,6 +41,11 @@ pub enum output_type { output_type_exe, } +fn write_string(writer: &mut W, string: &str) { + let buffer = str::as_bytes_slice(string); + writer.write(buffer); +} + pub fn llvm_err(sess: Session, msg: ~str) -> ! { unsafe { let cstr = llvm::LLVMRustGetLastError(); @@ -458,9 +463,11 @@ pub mod write { * */ -pub fn build_link_meta(sess: Session, c: &ast::crate, output: &Path, - symbol_hasher: &hash::State) -> LinkMeta { - +pub fn build_link_meta(sess: Session, + c: &ast::crate, + output: &Path, + symbol_hasher: &mut hash::State) + -> LinkMeta { struct ProvidedMetas { name: Option<@str>, vers: Option<@str>, @@ -498,7 +505,7 @@ pub fn build_link_meta(sess: Session, c: &ast::crate, output: &Path, } // This calculates CMH as defined above - fn crate_meta_extras_hash(symbol_hasher: &hash::State, + fn crate_meta_extras_hash(symbol_hasher: &mut hash::State, cmh_items: ~[@ast::meta_item], dep_hashes: ~[~str]) -> @str { fn len_and_str(s: &str) -> ~str { @@ -511,17 +518,17 @@ pub fn build_link_meta(sess: Session, c: &ast::crate, output: &Path, let cmh_items = attr::sort_meta_items(cmh_items); - fn hash(symbol_hasher: &hash::State, m: &@ast::meta_item) { + fn hash(symbol_hasher: &mut hash::State, m: &@ast::meta_item) { match m.node { ast::meta_name_value(key, value) => { - symbol_hasher.write_str(len_and_str(*key)); - symbol_hasher.write_str(len_and_str_lit(value)); + write_string(symbol_hasher, len_and_str(*key)); + write_string(symbol_hasher, len_and_str_lit(value)); } ast::meta_word(name) => { - symbol_hasher.write_str(len_and_str(*name)); + write_string(symbol_hasher, len_and_str(*name)); } ast::meta_list(name, ref mis) => { - symbol_hasher.write_str(len_and_str(*name)); + write_string(symbol_hasher, len_and_str(*name)); for mis.each |m_| { hash(symbol_hasher, m_); } @@ -535,7 +542,7 @@ pub fn build_link_meta(sess: Session, c: &ast::crate, output: &Path, } for dep_hashes.each |dh| { - symbol_hasher.write_str(len_and_str(*dh)); + write_string(symbol_hasher, len_and_str(*dh)); } // tjc: allocation is unfortunate; need to change core::hash @@ -596,23 +603,26 @@ pub fn build_link_meta(sess: Session, c: &ast::crate, output: &Path, } } -pub fn truncated_hash_result(symbol_hasher: &hash::State) -> ~str { +pub fn truncated_hash_result(symbol_hasher: &mut hash::State) -> ~str { symbol_hasher.result_str() } // This calculates STH for a symbol, as defined above -pub fn symbol_hash(tcx: ty::ctxt, symbol_hasher: &hash::State, t: ty::t, - link_meta: LinkMeta) -> @str { +pub fn symbol_hash(tcx: ty::ctxt, + symbol_hasher: &mut hash::State, + t: ty::t, + link_meta: LinkMeta) + -> @str { // NB: do *not* use abbrevs here as we want the symbol names // to be independent of one another in the crate. symbol_hasher.reset(); - symbol_hasher.write_str(link_meta.name); - symbol_hasher.write_str(~"-"); - symbol_hasher.write_str(link_meta.extras_hash); - symbol_hasher.write_str(~"-"); - symbol_hasher.write_str(encoder::encoded_ty(tcx, t)); + write_string(symbol_hasher, link_meta.name); + write_string(symbol_hasher, ~"-"); + write_string(symbol_hasher, link_meta.extras_hash); + write_string(symbol_hasher, ~"-"); + write_string(symbol_hasher, encoder::encoded_ty(tcx, t)); let mut hash = truncated_hash_result(symbol_hasher); // Prefix with _ so that it never blends into adjacent digits str::unshift_char(&mut hash, '_'); diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs index 34f798ec7a631..76ad7d7405365 100644 --- a/src/librustc/middle/trans/base.rs +++ b/src/librustc/middle/trans/base.rs @@ -2987,9 +2987,8 @@ pub fn trans_crate(sess: session::Session, emap2: resolve::ExportMap2, maps: astencode::Maps) -> (ModuleRef, LinkMeta) { - let symbol_hasher = @hash::default_state(); - let link_meta = - link::build_link_meta(sess, crate, output, symbol_hasher); + let symbol_hasher = @mut hash::default_state(); + let link_meta = link::build_link_meta(sess, crate, output, symbol_hasher); let reachable = reachable::find_reachable( &crate.node.module, emap2, diff --git a/src/librustc/middle/trans/common.rs b/src/librustc/middle/trans/common.rs index b004ba9d41f34..c1309b422880a 100644 --- a/src/librustc/middle/trans/common.rs +++ b/src/librustc/middle/trans/common.rs @@ -207,7 +207,7 @@ pub struct CrateContext { adt_reprs: @mut HashMap, names: namegen, next_addrspace: addrspace_gen, - symbol_hasher: @hash::State, + symbol_hasher: @mut hash::State, type_hashcodes: @mut HashMap, type_short_names: @mut HashMap, all_llvm_symbols: @mut HashSet<@~str>, diff --git a/src/librustdoc/markdown_writer.rs b/src/librustdoc/markdown_writer.rs index b9a2ee7ccb7c9..fc5a9a60df290 100644 --- a/src/librustdoc/markdown_writer.rs +++ b/src/librustdoc/markdown_writer.rs @@ -230,6 +230,7 @@ pub fn future_writer_factory( let markdown_ch = markdown_ch.clone(); do task::spawn || { let (writer, future) = future_writer(); + let mut future = future; writer_ch.send(writer); let s = future.get(); markdown_ch.send((copy page, s)); diff --git a/src/librustpkg/util.rs b/src/librustpkg/util.rs index 0762fa4ad7fd3..5e43cb4396075 100644 --- a/src/librustpkg/util.rs +++ b/src/librustpkg/util.rs @@ -11,6 +11,7 @@ use core::*; use core::cmp::Ord; use core::hash::Streaming; +use core::rt::io::Writer; use rustc::driver::{driver, session}; use rustc::driver::session::{lib_crate, unknown_crate}; use rustc::metadata::filesearch; @@ -367,9 +368,9 @@ pub fn error(msg: ~str) { } pub fn hash(data: ~str) -> ~str { - let hasher = &hash::default_state(); - - hasher.write_str(data); + let mut hasher = hash::default_state(); + let buffer = str::as_bytes_slice(data); + hasher.write(buffer); hasher.result_str() } From 226ee7d86f2d8eab17537b5ba3a393dfae1cf14e Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Fri, 3 May 2013 12:46:35 -0700 Subject: [PATCH 291/410] libcore: Remove mutable fields from task::spawn --- src/libcore/task/spawn.rs | 110 +++++++++++++++++++++++--------------- src/libcore/unstable.rs | 21 ++++++-- 2 files changed, 85 insertions(+), 46 deletions(-) diff --git a/src/libcore/task/spawn.rs b/src/libcore/task/spawn.rs index 267250b3642a0..63959edb42761 100644 --- a/src/libcore/task/spawn.rs +++ b/src/libcore/task/spawn.rs @@ -72,6 +72,7 @@ #[doc(hidden)]; // FIXME #3538 +use cast::transmute; use cast; use cell::Cell; use container::Map; @@ -117,10 +118,10 @@ pub fn taskset_each(tasks: &TaskSet, blk: &fn(v: *rust_task) -> bool) { struct TaskGroupData { // All tasks which might kill this group. When this is empty, the group // can be "GC"ed (i.e., its link in the ancestor list can be removed). - mut members: TaskSet, + members: TaskSet, // All tasks unidirectionally supervised by (directly or transitively) // tasks in this group. - mut descendants: TaskSet, + descendants: TaskSet, } type TaskGroupArc = unstable::Exclusive>; @@ -145,11 +146,11 @@ struct AncestorNode { // Hence we assert that this counter monotonically decreases as we // approach the tail of the list. // FIXME(#3068): Make the generation counter togglable with #[cfg(debug)]. - generation: uint, - // Should really be an immutable non-option. This way appeases borrowck. - mut parent_group: Option, + generation: uint, + // Should really be a non-option. This way appeases borrowck. + parent_group: Option, // Recursive rest of the list. - mut ancestors: AncestorList, + ancestors: AncestorList, } struct AncestorList(Option>); @@ -301,22 +302,26 @@ fn each_ancestor(list: &mut AncestorList, // One of these per task. struct TCB { - me: *rust_task, + me: *rust_task, // List of tasks with whose fates this one's is intertwined. - tasks: TaskGroupArc, // 'none' means the group has failed. + tasks: TaskGroupArc, // 'none' means the group has failed. // Lists of tasks who will kill us if they fail, but whom we won't kill. - mut ancestors: AncestorList, - is_main: bool, - notifier: Option, + ancestors: AncestorList, + is_main: bool, + notifier: Option, } impl Drop for TCB { // Runs on task exit. fn finalize(&self) { unsafe { + let this: &mut TCB = transmute(self); + // If we are failing, the whole taskgroup needs to die. if rt::rust_task_is_unwinding(self.me) { - for self.notifier.each |x| { x.failed = true; } + for this.notifier.each_mut |x| { + x.failed = true; + } // Take everybody down with us. do access_group(&self.tasks) |tg| { kill_taskgroup(tg, self.me, self.is_main); @@ -331,16 +336,21 @@ impl Drop for TCB { // with our own taskgroup, so long as both happen before we die. // We remove ourself from every ancestor we can, so no cleanup; no // break. - for each_ancestor(&mut self.ancestors, None) |ancestor_group| { + for each_ancestor(&mut this.ancestors, None) |ancestor_group| { leave_taskgroup(ancestor_group, self.me, false); }; } } } -fn TCB(me: *rust_task, tasks: TaskGroupArc, ancestors: AncestorList, - is_main: bool, notifier: Option) -> TCB { - for notifier.each |x| { x.failed = false; } +fn TCB(me: *rust_task, + tasks: TaskGroupArc, + ancestors: AncestorList, + is_main: bool, + mut notifier: Option) -> TCB { + for notifier.each_mut |x| { + x.failed = false; + } TCB { me: me, @@ -353,7 +363,7 @@ fn TCB(me: *rust_task, tasks: TaskGroupArc, ancestors: AncestorList, struct AutoNotify { notify_chan: Chan, - mut failed: bool, + failed: bool, } impl Drop for AutoNotify { @@ -375,9 +385,12 @@ fn enlist_in_taskgroup(state: TaskGroupInner, me: *rust_task, let newstate = util::replace(&mut *state, None); // If 'None', the group was failing. Can't enlist. if newstate.is_some() { - let group = newstate.unwrap(); - taskset_insert(if is_member { &mut group.members } - else { &mut group.descendants }, me); + let mut group = newstate.unwrap(); + taskset_insert(if is_member { + &mut group.members + } else { + &mut group.descendants + }, me); *state = Some(group); true } else { @@ -391,9 +404,12 @@ fn leave_taskgroup(state: TaskGroupInner, me: *rust_task, let newstate = util::replace(&mut *state, None); // If 'None', already failing and we've already gotten a kill signal. if newstate.is_some() { - let group = newstate.unwrap(); - taskset_remove(if is_member { &mut group.members } - else { &mut group.descendants }, me); + let mut group = newstate.unwrap(); + taskset_remove(if is_member { + &mut group.members + } else { + &mut group.descendants + }, me); *state = Some(group); } } @@ -451,23 +467,30 @@ fn gen_child_taskgroup(linked: bool, supervised: bool) /*##################################################################* * Step 1. Get spawner's taskgroup info. *##################################################################*/ - let spawner_group = match local_get(OldHandle(spawner), taskgroup_key!()) { - None => { - // Main task, doing first spawn ever. Lazily initialise here. - let mut members = new_taskset(); - taskset_insert(&mut members, spawner); - let tasks = unstable::exclusive(Some(TaskGroupData { - members: members, - descendants: new_taskset(), - })); - // Main task/group has no ancestors, no notifier, etc. - let group = - @TCB(spawner, tasks, AncestorList(None), true, None); - local_set(OldHandle(spawner), taskgroup_key!(), group); - group - } - Some(group) => group - }; + let mut spawner_group: @@mut TCB = + match local_get(OldHandle(spawner), taskgroup_key!()) { + None => { + // Main task, doing first spawn ever. Lazily initialise + // here. + let mut members = new_taskset(); + taskset_insert(&mut members, spawner); + let tasks = unstable::exclusive(Some(TaskGroupData { + members: members, + descendants: new_taskset(), + })); + // Main task/group has no ancestors, no notifier, etc. + let group = @@mut TCB(spawner, + tasks, + AncestorList(None), + true, + None); + local_set(OldHandle(spawner), taskgroup_key!(), group); + group + } + Some(group) => group + }; + let spawner_group: &mut TCB = *spawner_group; + /*##################################################################* * Step 2. Process spawn options for child. *##################################################################*/ @@ -624,8 +647,11 @@ fn spawn_raw_oldsched(opts: TaskOpts, f: ~fn()) { }; if enlist_many(child, &child_arc, &mut ancestors) { - let group = @TCB(child, child_arc, ancestors, - is_main, notifier); + let group = @@mut TCB(child, + child_arc, + ancestors, + is_main, + notifier); unsafe { local_set(OldHandle(child), taskgroup_key!(), group); } diff --git a/src/libcore/unstable.rs b/src/libcore/unstable.rs index 0b96e649178a1..7f42507bfd5f4 100644 --- a/src/libcore/unstable.rs +++ b/src/libcore/unstable.rs @@ -235,17 +235,30 @@ pub impl LittleLock { } } -struct ExData { lock: LittleLock, failed: bool, data: T, } +struct ExData { + lock: LittleLock, + failed: bool, + data: T, +} + /** * An arc over mutable data that is protected by a lock. For library use only. */ -pub struct Exclusive { x: SharedMutableState> } +pub struct Exclusive { + x: SharedMutableState> +} pub fn exclusive(user_data: T) -> Exclusive { let data = ExData { - lock: LittleLock(), failed: false, data: user_data + lock: LittleLock(), + failed: false, + data: user_data }; - Exclusive { x: unsafe { shared_mutable_state(data) } } + Exclusive { + x: unsafe { + shared_mutable_state(data) + } + } } impl Clone for Exclusive { From 803a4f45fa5b581155e638143afb97195cfa9f2e Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Fri, 3 May 2013 13:21:33 -0700 Subject: [PATCH 292/410] libcore: Remove mutable fields from the task builder API --- src/libcore/task/mod.rs | 178 ++++++++++-------------------- src/libcore/task/spawn.rs | 2 +- src/libcore/unstable/at_exit.rs | 4 +- src/libcore/unstable/weak_task.rs | 4 +- src/libstd/task_pool.rs | 4 +- src/libstd/test.rs | 9 +- src/libstd/uv_global_loop.rs | 11 +- src/libstd/uv_iotask.rs | 6 +- 8 files changed, 87 insertions(+), 131 deletions(-) diff --git a/src/libcore/task/mod.rs b/src/libcore/task/mod.rs index fd695c16ea7cb..248898001750f 100644 --- a/src/libcore/task/mod.rs +++ b/src/libcore/task/mod.rs @@ -156,7 +156,7 @@ pub struct SchedOpts { pub struct TaskOpts { linked: bool, supervised: bool, - mut notify_chan: Option>, + notify_chan: Option>, sched: SchedOpts } @@ -176,9 +176,9 @@ pub struct TaskOpts { // FIXME (#3724): Replace the 'consumed' bit with move mode on self pub struct TaskBuilder { opts: TaskOpts, - mut gen_body: Option<~fn(v: ~fn()) -> ~fn()>, + gen_body: Option<~fn(v: ~fn()) -> ~fn()>, can_not_copy: Option, - mut consumed: bool, + consumed: bool, } /** @@ -191,13 +191,13 @@ pub fn task() -> TaskBuilder { opts: default_task_opts(), gen_body: None, can_not_copy: None, - mut consumed: false, + consumed: false, } } #[doc(hidden)] // FIXME #3538 priv impl TaskBuilder { - fn consume(&self) -> TaskBuilder { + fn consume(&mut self) -> TaskBuilder { if self.consumed { fail!(~"Cannot copy a task_builder"); // Fake move mode on self } @@ -219,57 +219,23 @@ priv impl TaskBuilder { } pub impl TaskBuilder { - /** - * Decouple the child task's failure from the parent's. If either fails, - * the other will not be killed. - */ - fn unlinked(&self) -> TaskBuilder { - let notify_chan = replace(&mut self.opts.notify_chan, None); - TaskBuilder { - opts: TaskOpts { - linked: false, - supervised: self.opts.supervised, - notify_chan: notify_chan, - sched: self.opts.sched - }, - can_not_copy: None, - .. self.consume() - } + /// Decouple the child task's failure from the parent's. If either fails, + /// the other will not be killed. + fn unlinked(&mut self) { + self.opts.linked = false; } - /** - * Unidirectionally link the child task's failure with the parent's. The - * child's failure will not kill the parent, but the parent's will kill - * the child. - */ - fn supervised(&self) -> TaskBuilder { - let notify_chan = replace(&mut self.opts.notify_chan, None); - TaskBuilder { - opts: TaskOpts { - linked: false, - supervised: true, - notify_chan: notify_chan, - sched: self.opts.sched - }, - can_not_copy: None, - .. self.consume() - } + + /// Unidirectionally link the child task's failure with the parent's. The + /// child's failure will not kill the parent, but the parent's will kill + /// the child. + fn supervised(&mut self) { + self.opts.supervised = true; } - /** - * Link the child task's and parent task's failures. If either fails, the - * other will be killed. - */ - fn linked(&self) -> TaskBuilder { - let notify_chan = replace(&mut self.opts.notify_chan, None); - TaskBuilder { - opts: TaskOpts { - linked: true, - supervised: false, - notify_chan: notify_chan, - sched: self.opts.sched - }, - can_not_copy: None, - .. self.consume() - } + + /// Link the child task's and parent task's failures. If either fails, the + /// other will be killed. + fn linked(&mut self) { + self.opts.linked = true; } /** @@ -289,7 +255,7 @@ pub impl TaskBuilder { * # Failure * Fails if a future_result was already set for this task. */ - fn future_result(&self, blk: &fn(v: Port)) -> TaskBuilder { + fn future_result(&mut self, blk: &fn(v: Port)) { // FIXME (#3725): Once linked failure and notification are // handled in the library, I can imagine implementing this by just // registering an arbitrary number of task::on_exit handlers and @@ -305,30 +271,12 @@ pub impl TaskBuilder { blk(notify_pipe_po); // Reconfigure self to use a notify channel. - TaskBuilder { - opts: TaskOpts { - linked: self.opts.linked, - supervised: self.opts.supervised, - notify_chan: Some(notify_pipe_ch), - sched: self.opts.sched - }, - can_not_copy: None, - .. self.consume() - } + self.opts.notify_chan = Some(notify_pipe_ch); } + /// Configure a custom scheduler mode for the task. - fn sched_mode(&self, mode: SchedMode) -> TaskBuilder { - let notify_chan = replace(&mut self.opts.notify_chan, None); - TaskBuilder { - opts: TaskOpts { - linked: self.opts.linked, - supervised: self.opts.supervised, - notify_chan: notify_chan, - sched: SchedOpts { mode: mode, foreign_stack_size: None} - }, - can_not_copy: None, - .. self.consume() - } + fn sched_mode(&mut self, mode: SchedMode) { + self.opts.sched.mode = mode; } /** @@ -343,7 +291,7 @@ pub impl TaskBuilder { * generator by applying the task body which results from the * existing body generator to the new body generator. */ - fn add_wrapper(&self, wrapper: ~fn(v: ~fn()) -> ~fn()) -> TaskBuilder { + fn add_wrapper(&mut self, wrapper: ~fn(v: ~fn()) -> ~fn()) { let prev_gen_body = replace(&mut self.gen_body, None); let prev_gen_body = match prev_gen_body { Some(gen) => gen, @@ -360,18 +308,7 @@ pub impl TaskBuilder { }; f }; - let notify_chan = replace(&mut self.opts.notify_chan, None); - TaskBuilder { - opts: TaskOpts { - linked: self.opts.linked, - supervised: self.opts.supervised, - notify_chan: notify_chan, - sched: self.opts.sched - }, - gen_body: Some(next_gen_body), - can_not_copy: None, - .. self.consume() - } + self.gen_body = Some(next_gen_body); } /** @@ -386,7 +323,7 @@ pub impl TaskBuilder { * When spawning into a new scheduler, the number of threads requested * must be greater than zero. */ - fn spawn(&self, f: ~fn()) { + fn spawn(&mut self, f: ~fn()) { let gen_body = replace(&mut self.gen_body, None); let notify_chan = replace(&mut self.opts.notify_chan, None); let x = self.consume(); @@ -406,8 +343,9 @@ pub impl TaskBuilder { }; spawn::spawn_raw(opts, f); } + /// Runs a task, while transfering ownership of one argument to the child. - fn spawn_with(&self, arg: A, f: ~fn(v: A)) { + fn spawn_with(&mut self, arg: A, f: ~fn(v: A)) { let arg = Cell(arg); do self.spawn { f(arg.take()); @@ -427,16 +365,16 @@ pub impl TaskBuilder { * # Failure * Fails if a future_result was already set for this task. */ - fn try(&self, f: ~fn() -> T) -> Result { + fn try(&mut self, f: ~fn() -> T) -> Result { let (po, ch) = stream::(); let mut result = None; - let fr_task_builder = self.future_result(|+r| { - result = Some(r); - }); - do fr_task_builder.spawn || { + self.future_result(|+r| { result = Some(r); }); + + do self.spawn { ch.send(f()); } + match result.unwrap().recv() { Success => result::Ok(po.recv()), Failure => result::Err(()) @@ -468,26 +406,23 @@ pub fn default_task_opts() -> TaskOpts { /* Spawn convenience functions */ +/// Creates and executes a new child task +/// +/// Sets up a new task with its own call stack and schedules it to run +/// the provided unique closure. +/// +/// This function is equivalent to `task().spawn(f)`. pub fn spawn(f: ~fn()) { - /*! - * Creates and executes a new child task - * - * Sets up a new task with its own call stack and schedules it to run - * the provided unique closure. - * - * This function is equivalent to `task().spawn(f)`. - */ - - task().spawn(f) + let mut task = task(); + task.spawn(f) } +/// Creates a child task unlinked from the current one. If either this +/// task or the child task fails, the other will not be killed. pub fn spawn_unlinked(f: ~fn()) { - /*! - * Creates a child task unlinked from the current one. If either this - * task or the child task fails, the other will not be killed. - */ - - task().unlinked().spawn(f) + let mut task = task(); + task.unlinked(); + task.spawn(f) } pub fn spawn_supervised(f: ~fn()) { @@ -497,7 +432,9 @@ pub fn spawn_supervised(f: ~fn()) { * the child will be killed. */ - task().supervised().spawn(f) + let mut task = task(); + task.supervised(); + task.spawn(f) } pub fn spawn_with(arg: A, f: ~fn(v: A)) { @@ -511,7 +448,8 @@ pub fn spawn_with(arg: A, f: ~fn(v: A)) { * This function is equivalent to `task().spawn_with(arg, f)`. */ - task().spawn_with(arg, f) + let mut task = task(); + task.spawn_with(arg, f) } pub fn spawn_sched(mode: SchedMode, f: ~fn()) { @@ -527,7 +465,9 @@ pub fn spawn_sched(mode: SchedMode, f: ~fn()) { * greater than zero. */ - task().sched_mode(mode).spawn(f) + let mut task = task(); + task.sched_mode(mode); + task.spawn(f) } pub fn try(f: ~fn() -> T) -> Result { @@ -538,7 +478,9 @@ pub fn try(f: ~fn() -> T) -> Result { * This is equivalent to task().supervised().try. */ - task().supervised().try(f) + let mut task = task(); + task.supervised(); + task.try(f) } @@ -822,7 +764,7 @@ fn test_run_basic() { #[cfg(test)] struct Wrapper { - mut f: Option> + f: Option> } #[test] diff --git a/src/libcore/task/spawn.rs b/src/libcore/task/spawn.rs index 63959edb42761..19c417dfdfc95 100644 --- a/src/libcore/task/spawn.rs +++ b/src/libcore/task/spawn.rs @@ -580,7 +580,7 @@ fn spawn_raw_newsched(_opts: TaskOpts, f: ~fn()) { sched.schedule_new_task(task); } -fn spawn_raw_oldsched(opts: TaskOpts, f: ~fn()) { +fn spawn_raw_oldsched(mut opts: TaskOpts, f: ~fn()) { let (child_tg, ancestors, is_main) = gen_child_taskgroup(opts.linked, opts.supervised); diff --git a/src/libcore/unstable/at_exit.rs b/src/libcore/unstable/at_exit.rs index c9cd2f61e5c8a..39c930d415f1c 100644 --- a/src/libcore/unstable/at_exit.rs +++ b/src/libcore/unstable/at_exit.rs @@ -70,7 +70,9 @@ fn exit_runner(exit_fns: *ExitFunctions) { while !exit_fns_vec.is_empty() { match exit_fns_vec.pop() { ~f => { - task::task().supervised().spawn(f); + let mut task = task::task(); + task.supervised(); + task.spawn(f); } } } diff --git a/src/libcore/unstable/weak_task.rs b/src/libcore/unstable/weak_task.rs index 6edbdcb51b0cb..381083e6031b4 100644 --- a/src/libcore/unstable/weak_task.rs +++ b/src/libcore/unstable/weak_task.rs @@ -72,7 +72,9 @@ fn create_global_service() -> ~WeakTaskService { let chan = SharedChan::new(chan); let chan_clone = chan.clone(); - do task().unlinked().spawn { + let mut task = task(); + task.unlinked(); + do task.spawn { debug!("running global weak task service"); let port = Cell(port.take()); do (|| { diff --git a/src/libstd/task_pool.rs b/src/libstd/task_pool.rs index 661247df1c144..0c52e1ff80e21 100644 --- a/src/libstd/task_pool.rs +++ b/src/libstd/task_pool.rs @@ -70,7 +70,9 @@ pub impl TaskPool { task::spawn(task_body); } Some(sched_mode) => { - task::task().sched_mode(sched_mode).spawn(task_body); + let mut task = task::task(); + task.sched_mode(sched_mode); + task.spawn(task_body); } } diff --git a/src/libstd/test.rs b/src/libstd/test.rs index 7c0673a280bd8..b3523b8ad8019 100644 --- a/src/libstd/test.rs +++ b/src/libstd/test.rs @@ -556,9 +556,12 @@ pub fn run_test(force_ignore: bool, let testfn_cell = ::core::cell::Cell(testfn); do task::spawn { let mut result_future = None; // task::future_result(builder); - task::task().unlinked().future_result(|+r| { - result_future = Some(r); - }).spawn(testfn_cell.take()); + + let mut task = task::task(); + task.unlinked(); + task.future_result(|+r| { result_future = Some(r) }); + task.spawn(testfn_cell.take()); + let task_result = result_future.unwrap().recv(); let test_result = calc_result(&desc, task_result == task::Success); diff --git a/src/libstd/uv_global_loop.rs b/src/libstd/uv_global_loop.rs index e49cee434f81f..e1b7eb6150525 100644 --- a/src/libstd/uv_global_loop.rs +++ b/src/libstd/uv_global_loop.rs @@ -62,7 +62,9 @@ fn get_monitor_task_gl() -> IoTask { } }; if installed { - do task().unlinked().spawn() { + let mut task = task(); + task.unlinked(); + do task.spawn { unsafe { debug!("global monitor task starting"); // As a weak task the runtime will notify us @@ -88,7 +90,9 @@ fn get_monitor_task_gl() -> IoTask { } fn spawn_loop() -> IoTask { - let builder = do task().add_wrapper |task_body| { + let mut builder = task(); + + do builder.add_wrapper |task_body| { let result: ~fn() = || { // The I/O loop task also needs to be weak so it doesn't keep // the runtime alive @@ -107,7 +111,8 @@ fn spawn_loop() -> IoTask { }; result }; - let builder = builder.unlinked(); + + builder.unlinked(); spawn_iotask(builder) } diff --git a/src/libstd/uv_iotask.rs b/src/libstd/uv_iotask.rs index e19010e8552a2..83e95a6e1993a 100644 --- a/src/libstd/uv_iotask.rs +++ b/src/libstd/uv_iotask.rs @@ -36,11 +36,11 @@ impl Clone for IoTask { } } -pub fn spawn_iotask(task: task::TaskBuilder) -> IoTask { - +pub fn spawn_iotask(mut task: task::TaskBuilder) -> IoTask { let (iotask_port, iotask_chan) = stream(); - do task.sched_mode(task::SingleThreaded).spawn { + task.sched_mode(task::SingleThreaded); + do task.spawn { debug!("entering libuv task"); run_loop(&iotask_chan); debug!("libuv task exiting"); From 6a44482b175a5486039fd5f2fd32f1051ce80e50 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Fri, 3 May 2013 14:20:34 -0700 Subject: [PATCH 293/410] libcore: Remove mutable fields from pipes --- src/libcore/comm.rs | 94 +++++++------ src/libcore/pipes.rs | 317 +++++++++++++++++++++++-------------------- src/libstd/comm.rs | 2 +- src/libstd/timer.rs | 35 +++-- 4 files changed, 246 insertions(+), 202 deletions(-) diff --git a/src/libcore/comm.rs b/src/libcore/comm.rs index d075ff08bb7eb..56c301cd1c75a 100644 --- a/src/libcore/comm.rs +++ b/src/libcore/comm.rs @@ -12,6 +12,7 @@ Message passing */ +use cast::transmute; use cast; use either::{Either, Left, Right}; use kinds::Owned; @@ -192,9 +193,9 @@ impl Peekable for Port { fn peek(&self) -> bool { let mut endp = None; endp <-> self.endp; - let peek = match &endp { - &Some(ref endp) => peek(endp), - &None => fail!(~"peeking empty stream") + let peek = match endp { + Some(ref mut endp) => peek(endp), + None => fail!(~"peeking empty stream") }; self.endp <-> endp; peek @@ -202,10 +203,10 @@ impl Peekable for Port { } impl Selectable for Port { - fn header(&self) -> *PacketHeader { + fn header(&mut self) -> *mut PacketHeader { unsafe { match self.endp { - Some(ref endp) => endp.header(), + Some(ref mut endp) => endp.header(), None => fail!(~"peeking empty stream") } } @@ -327,23 +328,20 @@ impl ::clone::Clone for SharedChan { #[allow(non_camel_case_types)] pub mod oneshot { priv use core::kinds::Owned; - use ptr::to_unsafe_ptr; + use ptr::to_mut_unsafe_ptr; pub fn init() -> (client::Oneshot, server::Oneshot) { pub use core::pipes::HasBuffer; - let buffer = - ~::core::pipes::Buffer{ + let mut buffer = ~::core::pipes::Buffer { header: ::core::pipes::BufferHeader(), - data: __Buffer{ + data: __Buffer { Oneshot: ::core::pipes::mk_packet::>() }, }; do ::core::pipes::entangle_buffer(buffer) |buffer, data| { - { - data.Oneshot.set_buffer(buffer); - to_unsafe_ptr(&data.Oneshot) - } + data.Oneshot.set_buffer(buffer); + to_mut_unsafe_ptr(&mut data.Oneshot) } } #[allow(non_camel_case_types)] @@ -497,48 +495,66 @@ pub fn try_send_one(chan: ChanOne, data: T) -> bool { /// Returns the index of an endpoint that is ready to receive. -pub fn selecti(endpoints: &[T]) -> uint { +pub fn selecti(endpoints: &mut [T]) -> uint { wait_many(endpoints) } /// Returns 0 or 1 depending on which endpoint is ready to receive -pub fn select2i(a: &A, b: &B) -> - Either<(), ()> { - match wait_many([a.header(), b.header()]) { - 0 => Left(()), - 1 => Right(()), - _ => fail!(~"wait returned unexpected index") +pub fn select2i(a: &mut A, b: &mut B) + -> Either<(), ()> { + let mut endpoints = [ a.header(), b.header() ]; + match wait_many(endpoints) { + 0 => Left(()), + 1 => Right(()), + _ => fail!(~"wait returned unexpected index"), } } /// Receive a message from one of two endpoints. pub trait Select2 { /// Receive a message or return `None` if a connection closes. - fn try_select(&self) -> Either, Option>; + fn try_select(&mut self) -> Either, Option>; /// Receive a message or fail if a connection closes. - fn select(&self) -> Either; + fn select(&mut self) -> Either; } -impl, - Right: Selectable + GenericPort> - Select2 for (Left, Right) { - - fn select(&self) -> Either { - match *self { - (ref lp, ref rp) => match select2i(lp, rp) { - Left(()) => Left (lp.recv()), - Right(()) => Right(rp.recv()) - } +impl, + Right:Selectable + GenericPort> + Select2 + for (Left, Right) { + fn select(&mut self) -> Either { + // XXX: Bad borrow check workaround. + unsafe { + let this: &(Left, Right) = transmute(self); + match *this { + (ref lp, ref rp) => { + let lp: &mut Left = transmute(lp); + let rp: &mut Right = transmute(rp); + match select2i(lp, rp) { + Left(()) => Left(lp.recv()), + Right(()) => Right(rp.recv()), + } + } + } } } - fn try_select(&self) -> Either, Option> { - match *self { - (ref lp, ref rp) => match select2i(lp, rp) { - Left(()) => Left (lp.try_recv()), - Right(()) => Right(rp.try_recv()) - } + fn try_select(&mut self) -> Either, Option> { + // XXX: Bad borrow check workaround. + unsafe { + let this: &(Left, Right) = transmute(self); + match *this { + (ref lp, ref rp) => { + let lp: &mut Left = transmute(lp); + let rp: &mut Right = transmute(rp); + match select2i(lp, rp) { + Left(()) => Left (lp.try_recv()), + Right(()) => Right(rp.try_recv()), + } + } + } } } } diff --git a/src/libcore/pipes.rs b/src/libcore/pipes.rs index 19674900f908e..1fda5a97a375a 100644 --- a/src/libcore/pipes.rs +++ b/src/libcore/pipes.rs @@ -111,7 +111,7 @@ enum State { pub struct BufferHeader { // Tracks whether this buffer needs to be freed. We can probably // get away with restricting it to 0 or 1, if we're careful. - mut ref_count: int, + ref_count: int, // We may want a drop, and to be careful about stringing this // thing along. @@ -130,12 +130,12 @@ pub struct Buffer { } pub struct PacketHeader { - mut state: State, - mut blocked_task: *rust_task, + state: State, + blocked_task: *rust_task, // This is a transmute_copy of a ~buffer, that can also be cast // to a buffer_header if need be. - mut buffer: *libc::c_void, + buffer: *libc::c_void, } pub fn PacketHeader() -> PacketHeader { @@ -148,14 +148,14 @@ pub fn PacketHeader() -> PacketHeader { pub impl PacketHeader { // Returns the old state. - unsafe fn mark_blocked(&self, this: *rust_task) -> State { + unsafe fn mark_blocked(&mut self, this: *rust_task) -> State { rustrt::rust_task_ref(this); let old_task = swap_task(&mut self.blocked_task, this); assert!(old_task.is_null()); swap_state_acq(&mut self.state, Blocked) } - unsafe fn unblock(&self) { + unsafe fn unblock(&mut self) { let old_task = swap_task(&mut self.blocked_task, ptr::null()); if !old_task.is_null() { rustrt::rust_task_deref(old_task) @@ -169,13 +169,13 @@ pub impl PacketHeader { // unsafe because this can do weird things to the space/time // continuum. It ends making multiple unique pointers to the same - // thing. You'll proobably want to forget them when you're done. - unsafe fn buf_header(&self) -> ~BufferHeader { + // thing. You'll probably want to forget them when you're done. + unsafe fn buf_header(&mut self) -> ~BufferHeader { assert!(self.buffer.is_not_null()); transmute_copy(&self.buffer) } - fn set_buffer(&self, b: ~Buffer) { + fn set_buffer(&mut self, b: ~Buffer) { unsafe { self.buffer = transmute_copy(&b); } @@ -184,15 +184,15 @@ pub impl PacketHeader { pub struct Packet { header: PacketHeader, - mut payload: Option, + payload: Option, } pub trait HasBuffer { - fn set_buffer(&self, b: *libc::c_void); + fn set_buffer(&mut self, b: *libc::c_void); } impl HasBuffer for Packet { - fn set_buffer(&self, b: *libc::c_void) { + fn set_buffer(&mut self, b: *libc::c_void) { self.header.buffer = b; } } @@ -204,7 +204,7 @@ pub fn mk_packet() -> Packet { } } fn unibuffer() -> ~Buffer> { - let b = ~Buffer { + let mut b = ~Buffer { header: BufferHeader(), data: Packet { header: PacketHeader(), @@ -218,22 +218,25 @@ fn unibuffer() -> ~Buffer> { b } -pub fn packet() -> *Packet { - let b = unibuffer(); - let p = ptr::to_unsafe_ptr(&(b.data)); +pub fn packet() -> *mut Packet { + let mut b = unibuffer(); + let p = ptr::to_mut_unsafe_ptr(&mut b.data); // We'll take over memory management from here. - unsafe { forget(b) } + unsafe { + forget(b); + } p } pub fn entangle_buffer( - buffer: ~Buffer, - init: &fn(*libc::c_void, x: &T) -> *Packet) - -> (SendPacketBuffered, RecvPacketBuffered) -{ - let p = init(unsafe { transmute_copy(&buffer) }, &buffer.data); - unsafe { forget(buffer) } - (SendPacketBuffered(p), RecvPacketBuffered(p)) + mut buffer: ~Buffer, + init: &fn(*libc::c_void, x: &mut T) -> *mut Packet) + -> (SendPacketBuffered, RecvPacketBuffered) { + unsafe { + let p = init(transmute_copy(&buffer), &mut buffer.data); + forget(buffer); + (SendPacketBuffered(p), RecvPacketBuffered(p)) + } } pub fn swap_task(dst: &mut *rust_task, src: *rust_task) -> *rust_task { @@ -292,7 +295,7 @@ fn swap_state_rel(dst: &mut State, src: State) -> State { } } -pub unsafe fn get_buffer(p: *PacketHeader) -> ~Buffer { +pub unsafe fn get_buffer(p: *mut PacketHeader) -> ~Buffer { transmute((*p).buf_header()) } @@ -306,10 +309,14 @@ struct BufferResource { impl Drop for BufferResource { fn finalize(&self) { unsafe { - let b = move_it!(self.buffer); + let this: &mut BufferResource = transmute(self); + + let mut b = move_it!(this.buffer); //let p = ptr::to_unsafe_ptr(*b); //error!("drop %?", p); - let old_count = intrinsics::atomic_xsub_rel(&mut b.header.ref_count, 1); + let old_count = intrinsics::atomic_xsub_rel( + &mut b.header.ref_count, + 1); //let old_count = atomic_xchng_rel(b.header.ref_count, 0); if old_count == 1 { // The new count is 0. @@ -323,10 +330,12 @@ impl Drop for BufferResource { } } -fn BufferResource(b: ~Buffer) -> BufferResource { +fn BufferResource(mut b: ~Buffer) -> BufferResource { //let p = ptr::to_unsafe_ptr(*b); //error!("take %?", p); - unsafe { intrinsics::atomic_xadd_acq(&mut b.header.ref_count, 1) }; + unsafe { + intrinsics::atomic_xadd_acq(&mut b.header.ref_count, 1); + } BufferResource { // tjc: ???? @@ -334,10 +343,12 @@ fn BufferResource(b: ~Buffer) -> BufferResource { } } -pub fn send(p: SendPacketBuffered, payload: T) -> bool { +pub fn send(mut p: SendPacketBuffered, + payload: T) + -> bool { let header = p.header(); - let p_ = p.unwrap(); - let p = unsafe { &*p_ }; + let mut p_ = p.unwrap(); + let p = unsafe { &mut *p_ }; assert!(ptr::to_unsafe_ptr(&(p.header)) == header); assert!(p.payload.is_none()); p.payload = Some(payload); @@ -391,11 +402,12 @@ Returns `None` if the sender has closed the connection without sending a message, or `Some(T)` if a message was received. */ -pub fn try_recv(p: RecvPacketBuffered) - -> Option -{ - let p_ = p.unwrap(); - let p = unsafe { &*p_ }; +pub fn try_recv(mut p: RecvPacketBuffered) + -> Option { + let mut p_ = p.unwrap(); + let mut p = unsafe { + &mut *p_ + }; do (|| { try_recv_(p) @@ -412,7 +424,7 @@ pub fn try_recv(p: RecvPacketBuffered) } } -fn try_recv_(p: &Packet) -> Option { +fn try_recv_(p: &mut Packet) -> Option { // optimistic path match p.header.state { Full => { @@ -498,16 +510,20 @@ fn try_recv_(p: &Packet) -> Option { } /// Returns true if messages are available. -pub fn peek(p: &RecvPacketBuffered) -> bool { - match unsafe {(*p.header()).state} { - Empty | Terminated => false, - Blocked => fail!(~"peeking on blocked packet"), - Full => true +pub fn peek(p: &mut RecvPacketBuffered) -> bool { + unsafe { + match (*p.header()).state { + Empty | Terminated => false, + Blocked => fail!(~"peeking on blocked packet"), + Full => true + } } } -fn sender_terminate(p: *Packet) { - let p = unsafe { &*p }; +fn sender_terminate(p: *mut Packet) { + let p = unsafe { + &mut *p + }; match swap_state_rel(&mut p.header.state, Terminated) { Empty => { // The receiver will eventually clean up. @@ -536,8 +552,10 @@ fn sender_terminate(p: *Packet) { } } -fn receiver_terminate(p: *Packet) { - let p = unsafe { &*p }; +fn receiver_terminate(p: *mut Packet) { + let p = unsafe { + &mut *p + }; match swap_state_rel(&mut p.header.state, Terminated) { Empty => { assert!(p.header.blocked_task.is_null()); @@ -569,8 +587,10 @@ that vector. The index points to an endpoint that has either been closed by the sender or has a message waiting to be received. */ -pub fn wait_many(pkts: &[T]) -> uint { - let this = unsafe { rustrt::rust_get_task() }; +pub fn wait_many(pkts: &mut [T]) -> uint { + let this = unsafe { + rustrt::rust_get_task() + }; unsafe { rustrt::task_clear_event_reject(this); @@ -578,19 +598,19 @@ pub fn wait_many(pkts: &[T]) -> uint { let mut data_avail = false; let mut ready_packet = pkts.len(); - for pkts.eachi |i, p| { + for vec::eachi_mut(pkts) |i, p| { unsafe { - let p = &*p.header(); + let p = &mut *p.header(); let old = p.mark_blocked(this); match old { - Full | Terminated => { - data_avail = true; - ready_packet = i; - (*p).state = old; - break; - } - Blocked => fail!(~"blocking on blocked packet"), - Empty => () + Full | Terminated => { + data_avail = true; + ready_packet = i; + (*p).state = old; + break; + } + Blocked => fail!(~"blocking on blocked packet"), + Empty => () } } } @@ -598,7 +618,14 @@ pub fn wait_many(pkts: &[T]) -> uint { while !data_avail { debug!("sleeping on %? packets", pkts.len()); let event = wait_event(this) as *PacketHeader; - let pos = vec::position(pkts, |p| p.header() == event); + + let mut pos = None; + for vec::eachi_mut(pkts) |i, p| { + if p.header() == event { + pos = Some(i); + break; + } + }; match pos { Some(i) => { @@ -609,11 +636,15 @@ pub fn wait_many(pkts: &[T]) -> uint { } } - debug!("%?", pkts[ready_packet]); + debug!("%?", &mut pkts[ready_packet]); - for pkts.each |p| { unsafe{ (*p.header()).unblock()} } + for vec::each_mut(pkts) |p| { + unsafe { + (*p.header()).unblock() + } + } - debug!("%?, %?", ready_packet, pkts[ready_packet]); + debug!("%?, %?", ready_packet, &mut pkts[ready_packet]); unsafe { assert!((*pkts[ready_packet].header()).state == Full @@ -629,65 +660,58 @@ message. */ pub type SendPacket = SendPacketBuffered>; -pub fn SendPacket(p: *Packet) -> SendPacket { +pub fn SendPacket(p: *mut Packet) -> SendPacket { SendPacketBuffered(p) } pub struct SendPacketBuffered { - mut p: Option<*Packet>, - mut buffer: Option>, + p: Option<*mut Packet>, + buffer: Option>, } #[unsafe_destructor] impl Drop for SendPacketBuffered { fn finalize(&self) { - //if self.p != none { - // debug!("drop send %?", option::get(self.p)); - //} - if self.p != None { - let mut p = None; - p <-> self.p; - sender_terminate(p.unwrap()) + unsafe { + let this: &mut SendPacketBuffered = transmute(self); + if this.p != None { + let mut p = None; + p <-> this.p; + sender_terminate(p.unwrap()) + } } - //unsafe { error!("send_drop: %?", - // if self.buffer == none { - // "none" - // } else { "some" }); } } } -pub fn SendPacketBuffered(p: *Packet) - -> SendPacketBuffered { - //debug!("take send %?", p); +pub fn SendPacketBuffered(p: *mut Packet) + -> SendPacketBuffered { SendPacketBuffered { p: Some(p), buffer: unsafe { - Some(BufferResource( - get_buffer(ptr::to_unsafe_ptr(&((*p).header))))) + Some(BufferResource(get_buffer(&mut (*p).header))) } } } pub impl SendPacketBuffered { - fn unwrap(&self) -> *Packet { + fn unwrap(&mut self) -> *mut Packet { let mut p = None; p <-> self.p; p.unwrap() } - fn header(&self) -> *PacketHeader { + fn header(&mut self) -> *mut PacketHeader { match self.p { - Some(packet) => unsafe { - let packet = &*packet; - let header = ptr::to_unsafe_ptr(&(packet.header)); - //forget(packet); - header - }, - None => fail!(~"packet already consumed") + Some(packet) => unsafe { + let packet = &mut *packet; + let header = ptr::to_mut_unsafe_ptr(&mut packet.header); + header + }, + None => fail!(~"packet already consumed") } } - fn reuse_buffer(&self) -> BufferResource { + fn reuse_buffer(&mut self) -> BufferResource { //error!("send reuse_buffer"); let mut tmp = None; tmp <-> self.buffer; @@ -699,41 +723,37 @@ pub impl SendPacketBuffered { /// message. pub type RecvPacket = RecvPacketBuffered>; -pub fn RecvPacket(p: *Packet) -> RecvPacket { +pub fn RecvPacket(p: *mut Packet) -> RecvPacket { RecvPacketBuffered(p) } + pub struct RecvPacketBuffered { - mut p: Option<*Packet>, - mut buffer: Option>, + p: Option<*mut Packet>, + buffer: Option>, } #[unsafe_destructor] impl Drop for RecvPacketBuffered { fn finalize(&self) { - //if self.p != none { - // debug!("drop recv %?", option::get(self.p)); - //} - if self.p != None { - let mut p = None; - p <-> self.p; - receiver_terminate(p.unwrap()) + unsafe { + let this: &mut RecvPacketBuffered = transmute(self); + if this.p != None { + let mut p = None; + p <-> this.p; + receiver_terminate(p.unwrap()) + } } - //unsafe { error!("recv_drop: %?", - // if self.buffer == none { - // "none" - // } else { "some" }); } } } pub impl RecvPacketBuffered { - fn unwrap(&self) -> *Packet { + fn unwrap(&mut self) -> *mut Packet { let mut p = None; p <-> self.p; p.unwrap() } - fn reuse_buffer(&self) -> BufferResource { - //error!("recv reuse_buffer"); + fn reuse_buffer(&mut self) -> BufferResource { let mut tmp = None; tmp <-> self.buffer; tmp.unwrap() @@ -741,27 +761,24 @@ pub impl RecvPacketBuffered { } impl Selectable for RecvPacketBuffered { - fn header(&self) -> *PacketHeader { + fn header(&mut self) -> *mut PacketHeader { match self.p { - Some(packet) => unsafe { - let packet = &*packet; - let header = ptr::to_unsafe_ptr(&(packet.header)); - //forget(packet); - header - }, - None => fail!(~"packet already consumed") + Some(packet) => unsafe { + let packet = &mut *packet; + let header = ptr::to_mut_unsafe_ptr(&mut packet.header); + header + }, + None => fail!(~"packet already consumed") } } } -pub fn RecvPacketBuffered(p: *Packet) - -> RecvPacketBuffered { - //debug!("take recv %?", p); +pub fn RecvPacketBuffered(p: *mut Packet) + -> RecvPacketBuffered { RecvPacketBuffered { p: Some(p), buffer: unsafe { - Some(BufferResource( - get_buffer(ptr::to_unsafe_ptr(&((*p).header))))) + Some(BufferResource(get_buffer(&mut (*p).header))) } } } @@ -800,51 +817,55 @@ this case, `select2` may return either `left` or `right`. */ pub fn select2( - a: RecvPacketBuffered, - b: RecvPacketBuffered) + mut a: RecvPacketBuffered, + mut b: RecvPacketBuffered) -> Either<(Option, RecvPacketBuffered), - (RecvPacketBuffered, Option)> -{ - let i = wait_many([a.header(), b.header()]); - + (RecvPacketBuffered, Option)> { + let mut endpoints = [ a.header(), b.header() ]; + let i = wait_many(endpoints); match i { - 0 => Left((try_recv(a), b)), - 1 => Right((a, try_recv(b))), - _ => fail!(~"select2 return an invalid packet") + 0 => Left((try_recv(a), b)), + 1 => Right((a, try_recv(b))), + _ => fail!(~"select2 return an invalid packet") } } pub trait Selectable { - fn header(&self) -> *PacketHeader; + fn header(&mut self) -> *mut PacketHeader; } -impl Selectable for *PacketHeader { - fn header(&self) -> *PacketHeader { *self } +impl Selectable for *mut PacketHeader { + fn header(&mut self) -> *mut PacketHeader { *self } } /// Returns the index of an endpoint that is ready to receive. -pub fn selecti(endpoints: &[T]) -> uint { +pub fn selecti(endpoints: &mut [T]) -> uint { wait_many(endpoints) } /// Returns 0 or 1 depending on which endpoint is ready to receive -pub fn select2i(a: &A, b: &B) -> - Either<(), ()> { - match wait_many([a.header(), b.header()]) { - 0 => Left(()), - 1 => Right(()), - _ => fail!(~"wait returned unexpected index") +pub fn select2i(a: &mut A, b: &mut B) + -> Either<(), ()> { + let mut endpoints = [ a.header(), b.header() ]; + match wait_many(endpoints) { + 0 => Left(()), + 1 => Right(()), + _ => fail!(~"wait returned unexpected index") } } -/** Waits on a set of endpoints. Returns a message, its index, and a - list of the remaining endpoints. +/// Waits on a set of endpoints. Returns a message, its index, and a +/// list of the remaining endpoints. +pub fn select(mut endpoints: ~[RecvPacketBuffered]) + -> (uint, + Option, + ~[RecvPacketBuffered]) { + let mut endpoint_headers = ~[]; + for vec::each_mut(endpoints) |endpoint| { + endpoint_headers.push(endpoint.header()); + } -*/ -pub fn select(endpoints: ~[RecvPacketBuffered]) - -> (uint, Option, ~[RecvPacketBuffered]) -{ - let ready = wait_many(endpoints.map(|p| p.header())); + let ready = wait_many(endpoint_headers); let mut remaining = endpoints; let port = remaining.swap_remove(ready); let result = try_recv(port); diff --git a/src/libstd/comm.rs b/src/libstd/comm.rs index d866ee6cedbdd..20ab2d61ecc07 100644 --- a/src/libstd/comm.rs +++ b/src/libstd/comm.rs @@ -72,7 +72,7 @@ impl Peekable for DuplexStream { } impl Selectable for DuplexStream { - fn header(&self) -> *pipes::PacketHeader { + fn header(&mut self) -> *mut pipes::PacketHeader { self.port.header() } } diff --git a/src/libstd/timer.rs b/src/libstd/timer.rs index b19b2f2889e71..76aa4d615e1dc 100644 --- a/src/libstd/timer.rs +++ b/src/libstd/timer.rs @@ -14,10 +14,11 @@ use uv; use uv::iotask; use uv::iotask::IoTask; -use core::libc; -use core::libc::c_void; use core::cast::transmute; +use core::cast; use core::comm::{stream, Chan, SharedChan, Port, select2i}; +use core::libc::c_void; +use core::libc; /** * Wait for timeout period then send provided value over a channel @@ -120,22 +121,28 @@ pub fn sleep(iotask: &IoTask, msecs: uint) { pub fn recv_timeout(iotask: &IoTask, msecs: uint, wait_po: &Port) - -> Option { - let (timeout_po, timeout_ch) = stream::<()>(); + -> Option { + let mut (timeout_po, timeout_ch) = stream::<()>(); delayed_send(iotask, msecs, &timeout_ch, ()); - // FIXME: This could be written clearer (#2618) - either::either( - |_| { - None - }, |_| { - Some(wait_po.recv()) - }, &select2i(&timeout_po, wait_po) - ) + + // XXX: Workaround due to ports and channels not being &mut. They should + // be. + unsafe { + let wait_po = cast::transmute_mut(wait_po); + + // FIXME: This could be written clearer (#2618) + either::either( + |_| { + None + }, |_| { + Some(wait_po.recv()) + }, &select2i(&mut timeout_po, wait_po) + ) + } } // INTERNAL API -extern fn delayed_send_cb(handle: *uv::ll::uv_timer_t, - status: libc::c_int) { +extern fn delayed_send_cb(handle: *uv::ll::uv_timer_t, status: libc::c_int) { unsafe { debug!( "delayed_send_cb handle %? status %?", handle, status); From 56507798d9eb7bcf95bfca15b3c6f18997adae63 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Fri, 3 May 2013 15:45:55 -0700 Subject: [PATCH 294/410] libcore: Remove mutable fields from repr --- src/libcore/repr.rs | 71 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 58 insertions(+), 13 deletions(-) diff --git a/src/libcore/repr.rs b/src/libcore/repr.rs index 3d52599325928..b75ac60ff28e2 100644 --- a/src/libcore/repr.rs +++ b/src/libcore/repr.rs @@ -144,28 +144,30 @@ enum VariantState { } pub struct ReprVisitor { - mut ptr: *c_void, - mut ptr_stk: ~[*c_void], - mut var_stk: ~[VariantState], + ptr: @mut *c_void, + ptr_stk: @mut ~[*c_void], + var_stk: @mut ~[VariantState], writer: @Writer } pub fn ReprVisitor(ptr: *c_void, writer: @Writer) -> ReprVisitor { - ReprVisitor { ptr: ptr, - ptr_stk: ~[], - var_stk: ~[], - writer: writer } + ReprVisitor { + ptr: @mut ptr, + ptr_stk: @mut ~[], + var_stk: @mut ~[], + writer: writer, + } } impl MovePtr for ReprVisitor { #[inline(always)] fn move_ptr(&self, adjustment: &fn(*c_void) -> *c_void) { - self.ptr = adjustment(self.ptr); + *self.ptr = adjustment(*self.ptr); } fn push_ptr(&self) { - self.ptr_stk.push(self.ptr); + self.ptr_stk.push(*self.ptr); } fn pop_ptr(&self) { - self.ptr = self.ptr_stk.pop(); + *self.ptr = self.ptr_stk.pop(); } } @@ -176,14 +178,14 @@ pub impl ReprVisitor { #[inline(always)] fn get(&self, f: &fn(&T)) -> bool { unsafe { - f(transmute::<*c_void,&T>(copy self.ptr)); + f(transmute::<*c_void,&T>(*self.ptr)); } true } #[inline(always)] fn visit_inner(&self, inner: *TyDesc) -> bool { - self.visit_ptr_inner(self.ptr, inner) + self.visit_ptr_inner(*self.ptr, inner) } #[inline(always)] @@ -482,8 +484,31 @@ impl TyVisitor for ReprVisitor { true } +<<<<<<< HEAD fn visit_enum_variant_field(&self, i: uint, _offset: uint, inner: *TyDesc) -> bool { match self.var_stk[vec::uniq_len(&const self.var_stk) - 1] { +======= + #[cfg(stage0)] + fn visit_enum_variant_field(&self, i: uint, inner: *TyDesc) -> bool { + match self.var_stk[vec::uniq_len(&const *self.var_stk) - 1] { + Degenerate | TagMatch => { + if i != 0 { + self.writer.write_str(", "); + } + if ! self.visit_inner(inner) { + return false; + } + } + TagMismatch => () + } + true + } + + #[cfg(not(stage0))] + fn visit_enum_variant_field(&self, i: uint, _: uint, inner: *TyDesc) + -> bool { + match self.var_stk[vec::uniq_len(&const *self.var_stk) - 1] { +>>>>>>> libcore: Remove mutable fields from repr Matched => { if i != 0 { self.writer.write_str(", "); @@ -497,11 +522,31 @@ impl TyVisitor for ReprVisitor { true } +<<<<<<< HEAD +======= + #[cfg(stage0)] fn visit_leave_enum_variant(&self, _variant: uint, _disr_val: int, n_fields: uint, _name: &str) -> bool { - match self.var_stk[vec::uniq_len(&const self.var_stk) - 1] { + match self.var_stk[vec::uniq_len(&const *self.var_stk) - 1] { + Degenerate | TagMatch => { + if n_fields > 0 { + self.writer.write_char(')'); + } + } + TagMismatch => () + } + true + } + + #[cfg(not(stage0))] +>>>>>>> libcore: Remove mutable fields from repr + fn visit_leave_enum_variant(&self, _variant: uint, + _disr_val: int, + n_fields: uint, + _name: &str) -> bool { + match self.var_stk[vec::uniq_len(&const *self.var_stk) - 1] { Matched => { if n_fields > 0 { self.writer.write_char(')'); From 8919f32f8320847501182e517b26b9755fc97041 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Fri, 3 May 2013 16:05:18 -0700 Subject: [PATCH 295/410] Remove mutable fields from comm by using casts. Also mark the cast in cell. --- src/libcore/comm.rs | 91 +++++++++++++++++++++++++++------------------ 1 file changed, 55 insertions(+), 36 deletions(-) diff --git a/src/libcore/comm.rs b/src/libcore/comm.rs index 56c301cd1c75a..072562233de97 100644 --- a/src/libcore/comm.rs +++ b/src/libcore/comm.rs @@ -12,7 +12,7 @@ Message passing */ -use cast::transmute; +use cast::{transmute, transmute_mut}; use cast; use either::{Either, Left, Right}; use kinds::Owned; @@ -119,13 +119,15 @@ pub mod streamp { } /// An endpoint that can send many messages. +#[unsafe_mut_field(endp)] pub struct Chan { - mut endp: Option> + endp: Option> } /// An endpoint that can receive many messages. +#[unsafe_mut_field(endp)] pub struct Port { - mut endp: Option>, + endp: Option>, } /** Creates a `(Port, Chan)` pair. @@ -136,30 +138,39 @@ These allow sending or receiving an unlimited number of messages. pub fn stream() -> (Port, Chan) { let (c, s) = streamp::init(); - (Port { endp: Some(s) }, Chan { endp: Some(c) }) + (Port { + endp: Some(s) + }, Chan { + endp: Some(c) + }) } impl GenericChan for Chan { #[inline(always)] fn send(&self, x: T) { - let mut endp = None; - endp <-> self.endp; - self.endp = Some( - streamp::client::data(endp.unwrap(), x)) + unsafe { + let mut endp = None; + let mut self_endp = transmute_mut(&self.endp); + endp <-> *self_endp; + *self_endp = Some(streamp::client::data(endp.unwrap(), x)) + } } } impl GenericSmartChan for Chan { #[inline(always)] fn try_send(&self, x: T) -> bool { - let mut endp = None; - endp <-> self.endp; - match streamp::client::try_data(endp.unwrap(), x) { - Some(next) => { - self.endp = Some(next); - true + unsafe { + let mut endp = None; + let mut self_endp = transmute_mut(&self.endp); + endp <-> *self_endp; + match streamp::client::try_data(endp.unwrap(), x) { + Some(next) => { + *self_endp = Some(next); + true + } + None => false } - None => false } } } @@ -167,23 +178,29 @@ impl GenericSmartChan for Chan { impl GenericPort for Port { #[inline(always)] fn recv(&self) -> T { - let mut endp = None; - endp <-> self.endp; - let streamp::data(x, endp) = recv(endp.unwrap()); - self.endp = Some(endp); - x + unsafe { + let mut endp = None; + let mut self_endp = transmute_mut(&self.endp); + endp <-> *self_endp; + let streamp::data(x, endp) = recv(endp.unwrap()); + *self_endp = Some(endp); + x + } } #[inline(always)] fn try_recv(&self) -> Option { - let mut endp = None; - endp <-> self.endp; - match try_recv(endp.unwrap()) { - Some(streamp::data(x, endp)) => { - self.endp = Some(endp); - Some(x) + unsafe { + let mut endp = None; + let mut self_endp = transmute_mut(&self.endp); + endp <-> *self_endp; + match try_recv(endp.unwrap()) { + Some(streamp::data(x, endp)) => { + *self_endp = Some(endp); + Some(x) + } + None => None } - None => None } } } @@ -191,14 +208,17 @@ impl GenericPort for Port { impl Peekable for Port { #[inline(always)] fn peek(&self) -> bool { - let mut endp = None; - endp <-> self.endp; - let peek = match endp { - Some(ref mut endp) => peek(endp), - None => fail!(~"peeking empty stream") - }; - self.endp <-> endp; - peek + unsafe { + let mut endp = None; + let mut self_endp = transmute_mut(&self.endp); + endp <-> *self_endp; + let peek = match endp { + Some(ref mut endp) => peek(endp), + None => fail!(~"peeking empty stream") + }; + *self_endp <-> endp; + peek + } } } @@ -219,7 +239,6 @@ pub struct PortSet { } pub impl PortSet { - fn new() -> PortSet { PortSet { ports: ~[] From d12d25534b01632f7b19fae85854032ebb1b319c Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Fri, 3 May 2013 17:37:08 -0700 Subject: [PATCH 296/410] libcore: Remove more mutable fields from comm --- src/libcore/comm.rs | 50 ++++++++------- src/libcore/io.rs | 102 ++++++++++++++++++++----------- src/librustc/metadata/encoder.rs | 31 +++++----- src/libstd/io_util.rs | 4 +- 4 files changed, 114 insertions(+), 73 deletions(-) diff --git a/src/libcore/comm.rs b/src/libcore/comm.rs index 072562233de97..5b2bb3a132f72 100644 --- a/src/libcore/comm.rs +++ b/src/libcore/comm.rs @@ -234,8 +234,9 @@ impl Selectable for Port { } /// Treat many ports as one. +#[unsafe_mut_field(ports)] pub struct PortSet { - mut ports: ~[Port], + ports: ~[Port], } pub impl PortSet { @@ -246,7 +247,10 @@ pub impl PortSet { } fn add(&self, port: Port) { - self.ports.push(port) + unsafe { + let self_ports = transmute_mut(&self.ports); + self_ports.push(port) + } } fn chan(&self) -> Chan { @@ -258,25 +262,28 @@ pub impl PortSet { impl GenericPort for PortSet { fn try_recv(&self) -> Option { - let mut result = None; - // we have to swap the ports array so we aren't borrowing - // aliasable mutable memory. - let mut ports = ~[]; - ports <-> self.ports; - while result.is_none() && ports.len() > 0 { - let i = wait_many(ports); - match ports[i].try_recv() { - Some(m) => { - result = Some(m); - } - None => { - // Remove this port. - let _ = ports.swap_remove(i); + unsafe { + let mut self_ports = transmute_mut(&self.ports); + let mut result = None; + // we have to swap the ports array so we aren't borrowing + // aliasable mutable memory. + let mut ports = ~[]; + ports <-> *self_ports; + while result.is_none() && ports.len() > 0 { + let i = wait_many(ports); + match ports[i].try_recv() { + Some(m) => { + result = Some(m); + } + None => { + // Remove this port. + let _ = ports.swap_remove(i); + } } } + ports <-> *self_ports; + result } - ports <-> self.ports; - result } fn recv(&self) -> T { self.try_recv().expect("port_set: endpoints closed") @@ -288,10 +295,9 @@ impl Peekable for PortSet { // It'd be nice to use self.port.each, but that version isn't // pure. for uint::range(0, vec::uniq_len(&const self.ports)) |i| { - // XXX: Botch pending demuting. - unsafe { - let port: &Port = cast::transmute(&mut self.ports[i]); - if port.peek() { return true } + let port: &Port = &self.ports[i]; + if port.peek() { + return true; } } false diff --git a/src/libcore/io.rs b/src/libcore/io.rs index 64b69a7928b5f..63335f7e952cd 100644 --- a/src/libcore/io.rs +++ b/src/libcore/io.rs @@ -983,36 +983,50 @@ pub fn file_reader(path: &Path) -> Result<@Reader, ~str> { // Byte readers pub struct BytesReader<'self> { bytes: &'self [u8], - mut pos: uint + pos: @mut uint } impl<'self> Reader for BytesReader<'self> { fn read(&self, bytes: &mut [u8], len: uint) -> uint { - let count = uint::min(len, self.bytes.len() - self.pos); + let count = uint::min(len, self.bytes.len() - *self.pos); - let view = vec::slice(self.bytes, self.pos, self.bytes.len()); + let view = vec::slice(self.bytes, *self.pos, self.bytes.len()); vec::bytes::copy_memory(bytes, view, count); - self.pos += count; + *self.pos += count; count } + fn read_byte(&self) -> int { - if self.pos == self.bytes.len() { return -1; } - let b = self.bytes[self.pos]; - self.pos += 1u; - return b as int; + if *self.pos == self.bytes.len() { + return -1; + } + + let b = self.bytes[*self.pos]; + *self.pos += 1u; + b as int } - fn eof(&self) -> bool { self.pos == self.bytes.len() } + + fn eof(&self) -> bool { + *self.pos == self.bytes.len() + } + fn seek(&self, offset: int, whence: SeekStyle) { - let pos = self.pos; - self.pos = seek_in_buf(offset, pos, self.bytes.len(), whence); + let pos = *self.pos; + *self.pos = seek_in_buf(offset, pos, self.bytes.len(), whence); + } + + fn tell(&self) -> uint { + *self.pos } - fn tell(&self) -> uint { self.pos } } -pub fn with_bytes_reader(bytes: &[u8], f: &fn(@Reader) -> t) -> t { - f(@BytesReader { bytes: bytes, pos: 0u } as @Reader) +pub fn with_bytes_reader(bytes: &[u8], f: &fn(@Reader) -> T) -> T { + f(@BytesReader { + bytes: bytes, + pos: @mut 0 + } as @Reader) } pub fn with_str_reader(s: &str, f: &fn(@Reader) -> T) -> T { @@ -1498,49 +1512,67 @@ pub fn buffered_file_writer(path: &Path) -> Result<@Writer, ~str> { pub fn stdout() -> @Writer { fd_writer(libc::STDOUT_FILENO as c_int, false) } pub fn stderr() -> @Writer { fd_writer(libc::STDERR_FILENO as c_int, false) } -pub fn print(s: &str) { stdout().write_str(s); } -pub fn println(s: &str) { stdout().write_line(s); } +pub fn print(s: &str) { + stdout().write_str(s); +} + +pub fn println(s: &str) { + stdout().write_line(s); +} pub struct BytesWriter { - mut bytes: ~[u8], - mut pos: uint, + bytes: @mut ~[u8], + pos: @mut uint, } impl Writer for BytesWriter { fn write(&self, v: &[u8]) { let v_len = v.len(); - let bytes_len = vec::uniq_len(&const self.bytes); + let bytes_len = vec::uniq_len(&const *self.bytes); - let count = uint::max(bytes_len, self.pos + v_len); - vec::reserve(&mut self.bytes, count); + let count = uint::max(bytes_len, *self.pos + v_len); + vec::reserve(&mut *self.bytes, count); unsafe { - vec::raw::set_len(&mut self.bytes, count); - let view = vec::mut_slice(self.bytes, self.pos, count); + vec::raw::set_len(&mut *self.bytes, count); + let view = vec::mut_slice(*self.bytes, *self.pos, count); vec::bytes::copy_memory(view, v, v_len); } - self.pos += v_len; + *self.pos += v_len; } + fn seek(&self, offset: int, whence: SeekStyle) { - let pos = self.pos; - let len = vec::uniq_len(&const self.bytes); - self.pos = seek_in_buf(offset, pos, len, whence); + let pos = *self.pos; + let len = vec::uniq_len(&const *self.bytes); + *self.pos = seek_in_buf(offset, pos, len, whence); + } + + fn tell(&self) -> uint { + *self.pos + } + + fn flush(&self) -> int { + 0 + } + + fn get_type(&self) -> WriterType { + File } - fn tell(&self) -> uint { self.pos } - fn flush(&self) -> int { 0 } - fn get_type(&self) -> WriterType { File } } pub fn BytesWriter() -> BytesWriter { - BytesWriter { bytes: ~[], mut pos: 0u } + BytesWriter { + bytes: @mut ~[], + pos: @mut 0 + } } pub fn with_bytes_writer(f: &fn(@Writer)) -> ~[u8] { let wr = @BytesWriter(); f(wr as @Writer); - let @BytesWriter{bytes, _} = wr; - return bytes; + let @BytesWriter { bytes, _ } = wr; + copy *bytes } pub fn with_str_writer(f: &fn(@Writer)) -> ~str { @@ -1550,7 +1582,9 @@ pub fn with_str_writer(f: &fn(@Writer)) -> ~str { v.push(0); assert!(str::is_utf8(v)); - unsafe { ::cast::transmute(v) } + unsafe { + ::cast::transmute(v) + } } // Utility functions diff --git a/src/librustc/metadata/encoder.rs b/src/librustc/metadata/encoder.rs index ccf3ffcdfffcd..c84bebdfd39df 100644 --- a/src/librustc/metadata/encoder.rs +++ b/src/librustc/metadata/encoder.rs @@ -1372,41 +1372,40 @@ pub fn encode_metadata(parms: EncodeParams, crate: &crate) -> ~[u8] { encode_hash(&mut ebml_w, ecx.link_meta.extras_hash); - let mut i = wr.pos; + let mut i = *wr.pos; let crate_attrs = synthesize_crate_attrs(ecx, crate); encode_attributes(&mut ebml_w, crate_attrs); - ecx.stats.attr_bytes = wr.pos - i; + ecx.stats.attr_bytes = *wr.pos - i; - i = wr.pos; + i = *wr.pos; encode_crate_deps(ecx, &mut ebml_w, ecx.cstore); - ecx.stats.dep_bytes = wr.pos - i; + ecx.stats.dep_bytes = *wr.pos - i; // Encode the language items. - i = wr.pos; + i = *wr.pos; encode_lang_items(ecx, &mut ebml_w); - ecx.stats.lang_item_bytes = wr.pos - i; + ecx.stats.lang_item_bytes = *wr.pos - i; // Encode the link args. - i = wr.pos; + i = *wr.pos; encode_link_args(ecx, &mut ebml_w); - ecx.stats.link_args_bytes = wr.pos - i; + ecx.stats.link_args_bytes = *wr.pos - i; // Encode and index the items. ebml_w.start_tag(tag_items); - i = wr.pos; + i = *wr.pos; let items_index = encode_info_for_items(ecx, &mut ebml_w, crate); - ecx.stats.item_bytes = wr.pos - i; + ecx.stats.item_bytes = *wr.pos - i; - i = wr.pos; + i = *wr.pos; let items_buckets = create_index(items_index); encode_index(&mut ebml_w, items_buckets, write_int); - ecx.stats.index_bytes = wr.pos - i; + ecx.stats.index_bytes = *wr.pos - i; ebml_w.end_tag(); - ecx.stats.total_bytes = wr.pos; + ecx.stats.total_bytes = *wr.pos; if (tcx.sess.meta_stats()) { - do wr.bytes.each |e| { if *e == 0 { ecx.stats.zero_bytes += 1; @@ -1438,9 +1437,11 @@ pub fn encode_metadata(parms: EncodeParams, crate: &crate) -> ~[u8] { // // vec::from_slice(metadata_encoding_version) + + let writer_bytes: &mut ~[u8] = wr.bytes; + (do str::as_bytes(&~"rust\x00\x00\x00\x01") |bytes| { vec::slice(*bytes, 0, 8).to_vec() - }) + flate::deflate_bytes(wr.bytes) + }) + flate::deflate_bytes(*writer_bytes) } // Get the encoded string for a type diff --git a/src/libstd/io_util.rs b/src/libstd/io_util.rs index 6ed626202b7e2..7d43663cc808b 100644 --- a/src/libstd/io_util.rs +++ b/src/libstd/io_util.rs @@ -29,13 +29,13 @@ pub impl BufReader { // I can't get the borrowing to work correctly let bytes_reader = BytesReader { bytes: ::core::util::id::<&[u8]>(self.buf), - pos: *self.pos + pos: @mut *self.pos }; let res = f(&bytes_reader); // FIXME #4429: This isn't correct if f fails - *self.pos = bytes_reader.pos; + *self.pos = *bytes_reader.pos; return res; } From c7522417d48c03a110fa8839428424d6dbae1223 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Fri, 3 May 2013 17:55:53 -0700 Subject: [PATCH 297/410] libstd: Remove some residual mutable fields --- src/libstd/ebml.rs | 22 +++++++++++++++++++++- src/libstd/json.rs | 13 +++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/libstd/ebml.rs b/src/libstd/ebml.rs index af433c6dd9dc8..5e4f708f52fd4 100644 --- a/src/libstd/ebml.rs +++ b/src/libstd/ebml.rs @@ -600,11 +600,18 @@ pub mod writer { use core::vec; // ebml writing + #[cfg(stage0)] pub struct Encoder { writer: @io::Writer, priv mut size_positions: ~[uint], } + #[cfg(not(stage0))] + pub struct Encoder { + writer: @io::Writer, + priv size_positions: ~[uint], + } + fn write_sized_vuint(w: @io::Writer, n: uint, size: uint) { match size { 1u => w.write(&[0x80u8 | (n as u8)]), @@ -625,9 +632,22 @@ pub mod writer { fail!(fmt!("vint to write too big: %?", n)); } + #[cfg(stage0)] + pub fn Encoder(w: @io::Writer) -> Encoder { + let size_positions: ~[uint] = ~[]; + Encoder { + writer: w, + mut size_positions: size_positions + } + } + + #[cfg(not(stage0))] pub fn Encoder(w: @io::Writer) -> Encoder { let size_positions: ~[uint] = ~[]; - Encoder { writer: w, mut size_positions: size_positions } + Encoder { + writer: w, + size_positions: size_positions + } } // FIXME (#2741): Provide a function to write the standard ebml header. diff --git a/src/libstd/json.rs b/src/libstd/json.rs index 3960a07dfce7b..c815c9dd48062 100644 --- a/src/libstd/json.rs +++ b/src/libstd/json.rs @@ -220,11 +220,18 @@ impl serialize::Encoder for Encoder { } } +#[cfg(stage0)] pub struct PrettyEncoder { priv wr: @io::Writer, priv mut indent: uint, } +#[cfg(not(stage0))] +pub struct PrettyEncoder { + priv wr: @io::Writer, + priv indent: uint, +} + pub fn PrettyEncoder(wr: @io::Writer) -> PrettyEncoder { PrettyEncoder { wr: wr, @@ -838,10 +845,16 @@ pub fn from_str(s: &str) -> Result { } } +#[cfg(stage0)] pub struct Decoder { priv mut stack: ~[Json], } +#[cfg(not(stage0))] +pub struct Decoder { + priv stack: ~[Json], +} + pub fn Decoder(json: Json) -> Decoder { Decoder { stack: ~[json] From db4573a7760bd2014b2eca2537b6af15a9803e3d Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Fri, 3 May 2013 18:51:58 -0700 Subject: [PATCH 298/410] librustc: Remove mutable fields from the language. They're still parsed though, to get through bootstrapping. --- src/librustc/metadata/decoder.rs | 15 ------- src/librustc/metadata/encoder.rs | 23 ++-------- src/librustc/middle/lint.rs | 23 ---------- src/librustc/middle/mem_categorization.rs | 24 ++--------- src/librustc/middle/region.rs | 12 +----- src/librustc/middle/resolve.rs | 2 +- src/librustc/middle/trans/expr.rs | 14 ++++--- src/librustc/middle/trans/glue.rs | 4 +- src/librustc/middle/ty.rs | 51 +++++------------------ src/librustdoc/extract.rs | 2 +- src/libsyntax/ast.rs | 37 ++++++++++------ src/libsyntax/ast_util.rs | 2 +- src/libsyntax/ext/auto_encode.rs | 12 ++---- src/libsyntax/ext/deriving/decodable.rs | 2 +- src/libsyntax/ext/deriving/encodable.rs | 2 +- src/libsyntax/ext/deriving/iter_bytes.rs | 2 +- src/libsyntax/ext/pipes/pipec.rs | 6 +-- src/libsyntax/parse/parser.rs | 8 ++-- src/libsyntax/print/pprust.rs | 5 +-- 19 files changed, 69 insertions(+), 177 deletions(-) diff --git a/src/librustc/metadata/decoder.rs b/src/librustc/metadata/decoder.rs index 1e6bb39706844..fd35a4425d870 100644 --- a/src/librustc/metadata/decoder.rs +++ b/src/librustc/metadata/decoder.rs @@ -204,18 +204,6 @@ fn each_reexport(d: ebml::Doc, f: &fn(ebml::Doc) -> bool) { } } -fn field_mutability(d: ebml::Doc) -> ast::struct_mutability { - // Use maybe_get_doc in case it's a method - reader::maybe_get_doc(d, tag_struct_mut).map_default( - ast::struct_immutable, - |d| { - match reader::doc_as_u8(*d) as char { - 'm' => ast::struct_mutable, - _ => ast::struct_immutable - } - }) -} - fn variant_disr_val(d: ebml::Doc) -> Option { do reader::maybe_get_doc(d, tag_disr_val).chain |val_doc| { int::parse_bytes(reader::doc_data(val_doc), 10u) @@ -923,12 +911,10 @@ pub fn get_struct_fields(intr: @ident_interner, cdata: cmd, id: ast::node_id) if f == PublicField || f == PrivateField || f == InheritedField { let name = item_name(intr, an_item); let did = item_def_id(an_item, cdata); - let mt = field_mutability(an_item); result.push(ty::field_ty { ident: name, id: did, vis: struct_field_family_to_visibility(f), - mutability: mt, }); } } @@ -938,7 +924,6 @@ pub fn get_struct_fields(intr: @ident_interner, cdata: cmd, id: ast::node_id) ident: special_idents::unnamed_field, id: did, vis: ast::inherited, - mutability: ast::struct_immutable, }); } result diff --git a/src/librustc/metadata/encoder.rs b/src/librustc/metadata/encoder.rs index c84bebdfd39df..87ccd1e45b6f9 100644 --- a/src/librustc/metadata/encoder.rs +++ b/src/librustc/metadata/encoder.rs @@ -119,16 +119,6 @@ fn encode_region_param(ecx: @EncodeContext, } } -fn encode_mutability(ebml_w: &mut writer::Encoder, mt: struct_mutability) { - ebml_w.start_tag(tag_struct_mut); - let val = match mt { - struct_immutable => 'a', - struct_mutable => 'm' - }; - ebml_w.writer.write(&[val as u8]); - ebml_w.end_tag(); -} - struct entry { val: T, pos: uint @@ -518,13 +508,9 @@ fn encode_info_for_struct(ecx: @EncodeContext, /* We encode both private and public fields -- need to include private fields to get the offsets right */ for fields.each |field| { - let (nm, mt, vis) = match field.node.kind { - named_field(nm, mt, vis) => (nm, mt, vis), - unnamed_field => ( - special_idents::unnamed_field, - struct_immutable, - inherited - ) + let (nm, vis) = match field.node.kind { + named_field(nm, vis) => (nm, vis), + unnamed_field => (special_idents::unnamed_field, inherited) }; let id = field.node.id; @@ -537,7 +523,6 @@ fn encode_info_for_struct(ecx: @EncodeContext, encode_name(ecx, ebml_w, nm); encode_path(ecx, ebml_w, path, ast_map::path_name(nm)); encode_type(ecx, ebml_w, node_id_to_type(tcx, id)); - encode_mutability(ebml_w, mt); encode_def_id(ebml_w, local_def(id)); ebml_w.end_tag(); } @@ -828,7 +813,7 @@ fn encode_info_for_item(ecx: @EncodeContext, needs to know*/ for struct_def.fields.each |f| { match f.node.kind { - named_field(ident, _, vis) => { + named_field(ident, vis) => { ebml_w.start_tag(tag_item_field); encode_struct_field_family(ebml_w, vis); encode_name(ecx, ebml_w, ident); diff --git a/src/librustc/middle/lint.rs b/src/librustc/middle/lint.rs index 9ca1cc9b92430..ceb473da52fc0 100644 --- a/src/librustc/middle/lint.rs +++ b/src/librustc/middle/lint.rs @@ -56,7 +56,6 @@ pub enum lint { non_camel_case_types, type_limits, default_methods, - deprecated_mutable_fields, unused_unsafe, managed_heap_memory, @@ -455,7 +454,6 @@ fn check_item(i: @ast::item, cx: ty::ctxt) { check_item_heap(cx, i); check_item_type_limits(cx, i); check_item_default_methods(cx, i); - check_item_deprecated_mutable_fields(cx, i); check_item_unused_unsafe(cx, i); check_item_unused_mut(cx, i); } @@ -640,28 +638,7 @@ fn check_item_default_methods(cx: ty::ctxt, item: @ast::item) { } } -fn check_item_deprecated_mutable_fields(cx: ty::ctxt, item: @ast::item) { - match item.node { - ast::item_struct(struct_def, _) => { - for struct_def.fields.each |field| { - match field.node.kind { - ast::named_field(_, ast::struct_mutable, _) => { - cx.sess.span_lint(deprecated_mutable_fields, - item.id, - item.id, - field.span, - "mutable fields are deprecated"); - } - ast::named_field(*) | ast::unnamed_field => {} - } - } - } - _ => {} - } -} - fn check_item_ctypes(cx: ty::ctxt, it: @ast::item) { - fn check_foreign_fn(cx: ty::ctxt, fn_id: ast::node_id, decl: &ast::fn_decl) { let tys = vec::map(decl.inputs, |a| a.ty ); diff --git a/src/librustc/middle/mem_categorization.rs b/src/librustc/middle/mem_categorization.rs index dde4c04479288..26992388b29d3 100644 --- a/src/librustc/middle/mem_categorization.rs +++ b/src/librustc/middle/mem_categorization.rs @@ -581,17 +581,7 @@ pub impl mem_categorization_ctxt { f_name: ast::ident, f_ty: ty::t, field_id: ast::node_id) -> cmt { - let f_mutbl = match field_mutbl(self.tcx, base_cmt.ty, - f_name, field_id) { - Some(f_mutbl) => f_mutbl, - None => { - self.tcx.sess.span_bug( - node.span(), - fmt!("Cannot find field `%s` in type `%s`", - *self.tcx.sess.str_of(f_name), - ty_to_str(self.tcx, base_cmt.ty))); - } - }; + let f_mutbl = m_imm; let m = self.inherited_mutability(base_cmt.mutbl, f_mutbl); let f_interior = interior_field(f_name, f_mutbl); @cmt_ { @@ -968,11 +958,7 @@ pub fn field_mutbl(tcx: ty::ctxt, ty::ty_struct(did, _) => { for ty::lookup_struct_fields(tcx, did).each |fld| { if fld.ident == f_name { - let m = match fld.mutability { - ast::struct_mutable => ast::m_mutbl, - ast::struct_immutable => ast::m_imm - }; - return Some(m); + return Some(ast::m_imm); } } } @@ -981,11 +967,7 @@ pub fn field_mutbl(tcx: ty::ctxt, ast::def_variant(_, variant_id) => { for ty::lookup_struct_fields(tcx, variant_id).each |fld| { if fld.ident == f_name { - let m = match fld.mutability { - ast::struct_mutable => ast::m_mutbl, - ast::struct_immutable => ast::m_imm - }; - return Some(m); + return Some(ast::m_imm); } } } diff --git a/src/librustc/middle/region.rs b/src/librustc/middle/region.rs index cdc3aa9fedb7e..76d35527104d5 100644 --- a/src/librustc/middle/region.rs +++ b/src/librustc/middle/region.rs @@ -894,17 +894,7 @@ pub fn determine_rp_in_struct_field( cm: @ast::struct_field, cx: @mut DetermineRpCtxt, visitor: visit::vt<@mut DetermineRpCtxt>) { - match cm.node.kind { - ast::named_field(_, ast::struct_mutable, _) => { - do cx.with_ambient_variance(rv_invariant) { - visit::visit_struct_field(cm, cx, visitor); - } - } - ast::named_field(_, ast::struct_immutable, _) | - ast::unnamed_field => { - visit::visit_struct_field(cm, cx, visitor); - } - } + visit::visit_struct_field(cm, cx, visitor); } pub fn determine_rp_in_crate(sess: Session, diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs index cabe0353b8a48..ff002afd028f5 100644 --- a/src/librustc/middle/resolve.rs +++ b/src/librustc/middle/resolve.rs @@ -4667,7 +4667,7 @@ pub impl Resolver { for vec::each(class_def.fields) |field| { match field.node.kind { unnamed_field => {}, - named_field(ident, _, _) => { + named_field(ident, _) => { if str::eq_slice(*this.session.str_of(ident), name) { return true diff --git a/src/librustc/middle/trans/expr.rs b/src/librustc/middle/trans/expr.rs index 2c59d5c6bd635..5f9dc277c51a3 100644 --- a/src/librustc/middle/trans/expr.rs +++ b/src/librustc/middle/trans/expr.rs @@ -120,14 +120,14 @@ lvalues are *never* stored by value. */ use back::abi; -use lib; use lib::llvm::{ValueRef, TypeRef, llvm}; +use lib; use metadata::csearch; use middle::trans::_match; use middle::trans::adt; use middle::trans::asm; -use middle::trans::base; use middle::trans::base::*; +use middle::trans::base; use middle::trans::build::*; use middle::trans::callee::DoAutorefArg; use middle::trans::callee; @@ -142,8 +142,10 @@ use middle::trans::machine; use middle::trans::meth; use middle::trans::tvec; use middle::trans::type_of; +use middle::ty::struct_fields; +use middle::ty::{AutoDerefRef, AutoAddEnv}; +use middle::ty::{AutoPtr, AutoBorrowVec, AutoBorrowVecRef, AutoBorrowFn}; use middle::ty; -use middle::ty::struct_mutable_fields; use middle::ty::{AutoPtr, AutoBorrowVec, AutoBorrowVecRef, AutoBorrowFn, AutoDerefRef, AutoAddEnv, AutoUnsafe}; use util::common::indenter; @@ -1107,7 +1109,7 @@ pub fn with_field_tys(tcx: ty::ctxt, op: &fn(int, (&[ty::field])) -> R) -> R { match ty::get(ty).sty { ty::ty_struct(did, ref substs) => { - op(0, struct_mutable_fields(tcx, did, substs)) + op(0, struct_fields(tcx, did, substs)) } ty::ty_enum(_, ref substs) => { @@ -1124,8 +1126,8 @@ pub fn with_field_tys(tcx: ty::ctxt, ast::def_variant(enum_id, variant_id) => { let variant_info = ty::enum_variant_with_id( tcx, enum_id, variant_id); - op(variant_info.disr_val, struct_mutable_fields( - tcx, variant_id, substs)) + op(variant_info.disr_val, + struct_fields(tcx, variant_id, substs)) } _ => { tcx.sess.bug(~"resolve didn't map this expr to a \ diff --git a/src/librustc/middle/trans/glue.rs b/src/librustc/middle/trans/glue.rs index a35c40b852005..3b06f903641d4 100644 --- a/src/librustc/middle/trans/glue.rs +++ b/src/librustc/middle/trans/glue.rs @@ -496,9 +496,7 @@ pub fn trans_struct_drop(bcx: block, Call(bcx, dtor_addr, args); // Drop the fields - let field_tys = - ty::struct_mutable_fields(bcx.tcx(), class_did, - substs); + let field_tys = ty::struct_fields(bcx.tcx(), class_did, substs); for vec::eachi(field_tys) |i, fld| { let llfld_a = adt::trans_field_ptr(bcx, repr, v0, 0, i); bcx = drop_ty(bcx, llfld_a, fld.mt.ty); diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index a49768075dcc9..b2938476d3507 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -106,10 +106,9 @@ pub enum SelfMode { } pub struct field_ty { - ident: ident, - id: def_id, - vis: ast::visibility, - mutability: ast::struct_mutability, + ident: ident, + id: def_id, + vis: ast::visibility, } // Contains information needed to resolve types and (in the future) look up @@ -4027,12 +4026,11 @@ pub fn lookup_struct_field(cx: ctxt, fn struct_field_tys(fields: &[@struct_field]) -> ~[field_ty] { do fields.map |field| { match field.node.kind { - named_field(ident, mutability, visibility) => { + named_field(ident, visibility) => { field_ty { ident: ident, id: ast_util::local_def(field.node.id), vis: visibility, - mutability: mutability, } } unnamed_field => { @@ -4041,51 +4039,22 @@ fn struct_field_tys(fields: &[@struct_field]) -> ~[field_ty] { syntax::parse::token::special_idents::unnamed_field, id: ast_util::local_def(field.node.id), vis: ast::public, - mutability: ast::struct_immutable, } } } } } -// Return a list of fields corresponding to the struct's items -// (as if the struct was a record). trans uses this -// Takes a list of substs with which to instantiate field types -// Keep in mind that this function reports that all fields are -// mutable, regardless of how they were declared. It's meant to -// be used in trans. -pub fn struct_mutable_fields(cx: ctxt, - did: ast::def_id, - substs: &substs) - -> ~[field] { - struct_item_fields(cx, did, substs, |_mt| m_mutbl) -} - -// Same as struct_mutable_fields, but doesn't change -// mutability. -pub fn struct_fields(cx: ctxt, - did: ast::def_id, - substs: &substs) - -> ~[field] { - struct_item_fields(cx, did, substs, |mt| match mt { - struct_mutable => m_mutbl, - struct_immutable => m_imm }) -} - - -fn struct_item_fields(cx:ctxt, - did: ast::def_id, - substs: &substs, - frob_mutability: &fn(struct_mutability) -> mutability) - -> ~[field] { +// Returns a list of fields corresponding to the struct's items. trans uses +// this. Takes a list of substs with which to instantiate field types. +pub fn struct_fields(cx: ctxt, did: ast::def_id, substs: &substs) + -> ~[field] { do lookup_struct_fields(cx, did).map |f| { - // consider all instance vars mut, because the - // constructor may mutate all vars field { - ident: f.ident, + ident: f.ident, mt: mt { ty: lookup_field_type(cx, did, f.id, substs), - mutbl: frob_mutability(f.mutability) + mutbl: m_imm } } } diff --git a/src/librustdoc/extract.rs b/src/librustdoc/extract.rs index ce120f477a523..f04ca4b7a0436 100644 --- a/src/librustdoc/extract.rs +++ b/src/librustdoc/extract.rs @@ -274,7 +274,7 @@ fn structdoc_from_struct( item: itemdoc, fields: do struct_def.fields.map |field| { match field.node.kind { - ast::named_field(ident, _, _) => to_str(ident), + ast::named_field(ident, _) => to_str(ident), ast::unnamed_field => ~"(unnamed)", } }, diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index 2216226ecb3ab..c8fc04eaea1a3 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -1168,7 +1168,7 @@ pub type struct_field = spanned; #[auto_decode] #[deriving(Eq)] pub enum struct_field_kind { - named_field(ident, struct_mutability, visibility), + named_field(ident, visibility), unnamed_field // element of a tuple-like struct } @@ -1218,17 +1218,6 @@ pub enum item_ { item_mac(mac), } -#[auto_encode] -#[auto_decode] -#[deriving(Eq)] -pub enum struct_mutability { struct_mutable, struct_immutable } - -impl to_bytes::IterBytes for struct_mutability { - fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { - (*self as u8).iter_bytes(lsb0, f) - } -} - #[auto_encode] #[auto_decode] #[deriving(Eq)] @@ -1289,6 +1278,21 @@ mod test { assert_eq! (s,~[14]); } + #[test] fn test_marksof () { + let stopname = uints_to_name(&~[12,14,78]); + assert_eq!(s,~[]); + xorPush(&mut s,14); + assert_eq!(s,~[14]); + xorPush(&mut s,15); + assert_eq!(s,~[14,15]); + xorPush (&mut s,16); + assert_eq! (s,~[14,15,16]); + xorPush (&mut s,16); + assert_eq! (s,~[14,15]); + xorPush (&mut s,15); + assert_eq! (s,~[14]); + } + #[test] fn test_marksof () { let stopname = uints_to_name(&~[12,14,78]); let name1 = uints_to_name(&~[4,9,7]); @@ -1347,3 +1351,12 @@ mod test { } */ +// +// Local Variables: +// mode: rust +// fill-column: 78; +// indent-tabs-mode: nil +// c-basic-offset: 4 +// buffer-file-coding-system: utf-8-unix +// End: +// diff --git a/src/libsyntax/ast_util.rs b/src/libsyntax/ast_util.rs index a6094903d7b79..7b20d71fdc409 100644 --- a/src/libsyntax/ast_util.rs +++ b/src/libsyntax/ast_util.rs @@ -285,7 +285,7 @@ pub fn split_trait_methods(trait_methods: &[trait_method]) pub fn struct_field_visibility(field: ast::struct_field) -> visibility { match field.node.kind { - ast::named_field(_, _, visibility) => visibility, + ast::named_field(_, visibility) => visibility, ast::unnamed_field => ast::public } } diff --git a/src/libsyntax/ext/auto_encode.rs b/src/libsyntax/ext/auto_encode.rs index bdf0a2a1dd07c..5bd4f89a3b38b 100644 --- a/src/libsyntax/ext/auto_encode.rs +++ b/src/libsyntax/ext/auto_encode.rs @@ -914,19 +914,15 @@ struct field { fn mk_struct_fields(fields: &[@ast::struct_field]) -> ~[field] { do fields.map |field| { - let (ident, mutbl) = match field.node.kind { - ast::named_field(ident, mutbl, _) => (ident, mutbl), - _ => fail!(~"[auto_encode] does not support \ - unnamed fields") + let ident = match field.node.kind { + ast::named_field(ident, _) => ident, + _ => fail!(~"[auto_encode] does not support unnamed fields") }; field { span: field.span, ident: ident, - mutbl: match mutbl { - ast::struct_mutable => ast::m_mutbl, - ast::struct_immutable => ast::m_imm, - }, + mutbl: ast::m_imm, } } } diff --git a/src/libsyntax/ext/deriving/decodable.rs b/src/libsyntax/ext/deriving/decodable.rs index 79cc4a3bda84f..2bdfe51c50eab 100644 --- a/src/libsyntax/ext/deriving/decodable.rs +++ b/src/libsyntax/ext/deriving/decodable.rs @@ -280,7 +280,7 @@ fn expand_deriving_decodable_struct_method( let mut fields = ~[]; for struct_def.fields.each |struct_field| { match struct_field.node.kind { - named_field(ident, _, _) => { + named_field(ident, _) => { fields.push(create_read_struct_field(cx, span, i, ident)); } unnamed_field => { diff --git a/src/libsyntax/ext/deriving/encodable.rs b/src/libsyntax/ext/deriving/encodable.rs index 8b86173dc24e7..54e5687f415ab 100644 --- a/src/libsyntax/ext/deriving/encodable.rs +++ b/src/libsyntax/ext/deriving/encodable.rs @@ -211,7 +211,7 @@ fn expand_deriving_encodable_struct_method( let mut statements = ~[]; for struct_def.fields.each |struct_field| { match struct_field.node.kind { - named_field(ident, _, _) => { + named_field(ident, _) => { // Create the accessor for this field. let self_field = build::mk_access( cx, diff --git a/src/libsyntax/ext/deriving/iter_bytes.rs b/src/libsyntax/ext/deriving/iter_bytes.rs index c1c34c9a53a60..3d66506d6ca8f 100644 --- a/src/libsyntax/ext/deriving/iter_bytes.rs +++ b/src/libsyntax/ext/deriving/iter_bytes.rs @@ -90,4 +90,4 @@ fn iter_bytes_substructure(cx: @ext_ctxt, span: span, substr: &Substructure) -> } build::mk_block(cx, span, ~[], stmts, None) -} \ No newline at end of file +} diff --git a/src/libsyntax/ext/pipes/pipec.rs b/src/libsyntax/ext/pipes/pipec.rs index e876972fe6878..00a91bdc46e8a 100644 --- a/src/libsyntax/ext/pipes/pipec.rs +++ b/src/libsyntax/ext/pipes/pipec.rs @@ -410,10 +410,8 @@ impl gen_init for protocol { @spanned { node: ast::struct_field_ { - kind: ast::named_field( - cx.ident_of(s.name), - ast::struct_immutable, - ast::inherited), + kind: ast::named_field(cx.ident_of(s.name), + ast::inherited), id: cx.next_id(), ty: fty, attrs: ~[], diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 810efd3917765..9eb74f9e52961 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -45,7 +45,7 @@ use ast::{pat_tup, pat_uniq, pat_wild, private}; use ast::{rem, required}; use ast::{ret_style, return_val, self_ty, shl, shr, stmt, stmt_decl}; use ast::{stmt_expr, stmt_semi, stmt_mac, struct_def, struct_field}; -use ast::{struct_immutable, struct_mutable, struct_variant_kind, subtract}; +use ast::{struct_variant_kind, subtract}; use ast::{sty_box, sty_region, sty_static, sty_uniq, sty_value}; use ast::{token_tree, trait_method, trait_ref, tt_delim, tt_seq, tt_tok}; use ast::{tt_nonterminal, tuple_variant_kind, Ty, ty_, ty_bot, ty_box}; @@ -2528,10 +2528,10 @@ pub impl Parser { fn parse_name_and_ty(&self, pr: visibility, attrs: ~[attribute]) -> @struct_field { - let mut is_mutbl = struct_immutable; let lo = self.span.lo; if self.eat_keyword(&~"mut") { - is_mutbl = struct_mutable; + // Do nothing, for backwards compatibility. + // XXX: Remove after snapshot. } if !is_plain_ident(&*self.token) { self.fatal(~"expected ident"); @@ -2540,7 +2540,7 @@ pub impl Parser { self.expect(&token::COLON); let ty = self.parse_ty(false); @spanned(lo, self.last_span.hi, ast::struct_field_ { - kind: named_field(name, is_mutbl, pr), + kind: named_field(name, pr), id: self.get_id(), ty: ty, attrs: attrs, diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index 6f3d6604d5b98..f12fb21992e85 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -703,14 +703,11 @@ pub fn print_struct(s: @ps, for struct_def.fields.each |field| { match field.node.kind { ast::unnamed_field => fail!(~"unexpected unnamed field"), - ast::named_field(ident, mutability, visibility) => { + ast::named_field(ident, visibility) => { hardbreak_if_not_bol(s); maybe_print_comment(s, field.span.lo); print_outer_attributes(s, field.node.attrs); print_visibility(s, visibility); - if mutability == ast::struct_mutable { - word_nbsp(s, ~"mut"); - } print_ident(s, ident); word_nbsp(s, ~":"); print_type(s, field.node.ty); From 278b487cabcbe52b301a8023cd1362045b1a7132 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Mon, 6 May 2013 19:29:04 -0700 Subject: [PATCH 299/410] test: Fix tests and the pipe compiler --- src/libcore/repr.rs | 68 ++++++------------- src/libcore/task/mod.rs | 2 + src/libsyntax/ext/pipes/pipec.rs | 9 +-- src/test/bench/core-map.rs | 2 +- src/test/bench/core-set.rs | 33 +++++---- src/test/bench/core-std.rs | 15 ++-- src/test/bench/graph500-bfs.rs | 17 ++--- src/test/bench/msgsend-pipes-shared.rs | 8 +-- src/test/bench/msgsend-pipes.rs | 6 +- src/test/bench/msgsend-ring-mutex-arcs.rs | 4 +- src/test/bench/msgsend-ring-pipes.rs | 4 +- src/test/bench/msgsend-ring-rw-arcs.rs | 4 +- src/test/bench/noise.rs | 18 +++-- src/test/bench/shootout-fasta.rs | 5 +- src/test/bench/shootout-pfib.rs | 11 +-- src/test/bench/task-perf-linked-failure.rs | 5 +- src/test/run-pass/issue-3176.rs | 3 +- src/test/run-pass/morestack6.rs | 2 +- src/test/run-pass/pipe-peek.rs | 6 +- src/test/run-pass/pipe-pingpong-bounded.rs | 18 ++--- .../run-pass/pipe-presentation-examples.rs | 4 ++ src/test/run-pass/platform_thread.rs | 10 ++- src/test/run-pass/task-comm-12.rs | 4 +- src/test/run-pass/task-comm-3.rs | 6 +- src/test/run-pass/task-comm-9.rs | 5 +- src/test/run-pass/yield.rs | 4 +- src/test/run-pass/yield1.rs | 4 +- 27 files changed, 151 insertions(+), 126 deletions(-) diff --git a/src/libcore/repr.rs b/src/libcore/repr.rs index b75ac60ff28e2..c7e20d2b21f7e 100644 --- a/src/libcore/repr.rs +++ b/src/libcore/repr.rs @@ -448,10 +448,15 @@ impl TyVisitor for ReprVisitor { true } - fn visit_enter_enum(&self, _n_variants: uint, + fn visit_enter_enum(&self, + _n_variants: uint, get_disr: extern unsafe fn(ptr: *Opaque) -> int, - _sz: uint, _align: uint) -> bool { - let disr = unsafe { get_disr(transmute(self.ptr)) }; + _sz: uint, + _align: uint) -> bool { + let var_stk: &mut ~[VariantState] = self.var_stk; + let disr = unsafe { + get_disr(transmute(*self.ptr)) + }; self.var_stk.push(SearchingFor(disr)); true } @@ -484,31 +489,12 @@ impl TyVisitor for ReprVisitor { true } -<<<<<<< HEAD - fn visit_enum_variant_field(&self, i: uint, _offset: uint, inner: *TyDesc) -> bool { - match self.var_stk[vec::uniq_len(&const self.var_stk) - 1] { -======= - #[cfg(stage0)] - fn visit_enum_variant_field(&self, i: uint, inner: *TyDesc) -> bool { - match self.var_stk[vec::uniq_len(&const *self.var_stk) - 1] { - Degenerate | TagMatch => { - if i != 0 { - self.writer.write_str(", "); - } - if ! self.visit_inner(inner) { - return false; - } - } - TagMismatch => () - } - true - } - - #[cfg(not(stage0))] - fn visit_enum_variant_field(&self, i: uint, _: uint, inner: *TyDesc) + fn visit_enum_variant_field(&self, + i: uint, + _offset: uint, + inner: *TyDesc) -> bool { - match self.var_stk[vec::uniq_len(&const *self.var_stk) - 1] { ->>>>>>> libcore: Remove mutable fields from repr + match self.var_stk[vec::uniq_len(&const self.var_stk) - 1] { Matched => { if i != 0 { self.writer.write_str(", "); @@ -522,26 +508,6 @@ impl TyVisitor for ReprVisitor { true } -<<<<<<< HEAD -======= - #[cfg(stage0)] - fn visit_leave_enum_variant(&self, _variant: uint, - _disr_val: int, - n_fields: uint, - _name: &str) -> bool { - match self.var_stk[vec::uniq_len(&const *self.var_stk) - 1] { - Degenerate | TagMatch => { - if n_fields > 0 { - self.writer.write_char(')'); - } - } - TagMismatch => () - } - true - } - - #[cfg(not(stage0))] ->>>>>>> libcore: Remove mutable fields from repr fn visit_leave_enum_variant(&self, _variant: uint, _disr_val: int, n_fields: uint, @@ -557,9 +523,13 @@ impl TyVisitor for ReprVisitor { true } - fn visit_leave_enum(&self, _n_variants: uint, + fn visit_leave_enum(&self, + _n_variants: uint, _get_disr: extern unsafe fn(ptr: *Opaque) -> int, - _sz: uint, _align: uint) -> bool { + _sz: uint, + _align: uint) + -> bool { + let var_stk: &mut ~[VariantState] = self.var_stk; match self.var_stk.pop() { SearchingFor(*) => fail!(~"enum value matched no variant"), _ => true diff --git a/src/libcore/task/mod.rs b/src/libcore/task/mod.rs index 248898001750f..ce1969a14a183 100644 --- a/src/libcore/task/mod.rs +++ b/src/libcore/task/mod.rs @@ -230,12 +230,14 @@ pub impl TaskBuilder { /// the child. fn supervised(&mut self) { self.opts.supervised = true; + self.opts.linked = false; } /// Link the child task's and parent task's failures. If either fails, the /// other will be killed. fn linked(&mut self) { self.opts.linked = true; + self.opts.supervised = false; } /** diff --git a/src/libsyntax/ext/pipes/pipec.rs b/src/libsyntax/ext/pipes/pipec.rs index 00a91bdc46e8a..7ac3ea4789d63 100644 --- a/src/libsyntax/ext/pipes/pipec.rs +++ b/src/libsyntax/ext/pipes/pipec.rs @@ -64,6 +64,7 @@ impl gen_send for message { let mut body = ~"{\n"; body += fmt!("use super::%s;\n", name); + body += ~"let mut pipe = pipe;\n"; if this.proto.is_bounded() { let (sp, rp) = match (this.dir, next.dir) { @@ -73,12 +74,12 @@ impl gen_send for message { (recv, recv) => (~"c", ~"s") }; - body += ~"let b = pipe.reuse_buffer();\n"; + body += ~"let mut b = pipe.reuse_buffer();\n"; body += fmt!("let %s = ::core::pipes::SendPacketBuffered(\ - &(b.buffer.data.%s));\n", + &mut (b.buffer.data.%s));\n", sp, next.name); body += fmt!("let %s = ::core::pipes::RecvPacketBuffered(\ - &(b.buffer.data.%s));\n", + &mut (b.buffer.data.%s));\n", rp, next.name); } else { @@ -366,7 +367,7 @@ impl gen_init for protocol { fmt!("data.%s.set_buffer(buffer)", s.name))), ext_cx.parse_expr(fmt!( - "::core::ptr::to_unsafe_ptr(&(data.%s))", + "::core::ptr::to_mut_unsafe_ptr(&mut (data.%s))", self.states[0].name)))); quote_expr!({ diff --git a/src/test/bench/core-map.rs b/src/test/bench/core-map.rs index e216215ace7f9..cb494ec9d206a 100644 --- a/src/test/bench/core-map.rs +++ b/src/test/bench/core-map.rs @@ -103,7 +103,7 @@ fn main() { let mut rand = vec::with_capacity(n_keys); { - let rng = core::rand::IsaacRng::new_seeded([1, 1, 1, 1, 1, 1, 1]); + let mut rng = core::rand::IsaacRng::new_seeded([1, 1, 1, 1, 1, 1, 1]); let mut set = HashSet::new(); while set.len() != n_keys { let next = rng.next() as uint; diff --git a/src/test/bench/core-set.rs b/src/test/bench/core-set.rs index b3e3d295c0fad..bae21c6d4a325 100644 --- a/src/test/bench/core-set.rs +++ b/src/test/bench/core-set.rs @@ -31,8 +31,13 @@ fn timed(result: &mut float, op: &fn()) { } pub impl Results { - fn bench_int, R: rand::Rng>(&mut self, rng: &R, num_keys: uint, - rand_cap: uint, f: &fn() -> T) { + fn bench_int, + R: rand::Rng>( + &mut self, + rng: &mut R, + num_keys: uint, + rand_cap: uint, + f: &fn() -> T) { { let mut set = f(); do timed(&mut self.sequential_ints) { @@ -69,8 +74,12 @@ pub impl Results { } } - fn bench_str, R: rand::Rng>(&mut self, rng: &R, num_keys: uint, - f: &fn() -> T) { + fn bench_str, + R:rand::Rng>( + &mut self, + rng: &mut R, + num_keys: uint, + f: &fn() -> T) { { let mut set = f(); do timed(&mut self.sequential_strings) { @@ -155,25 +164,25 @@ fn main() { let max = 200000; { - let rng = rand::IsaacRng::new_seeded(seed); + let mut rng = rand::IsaacRng::new_seeded(seed); let mut results = empty_results(); - results.bench_int(&rng, num_keys, max, || HashSet::new::()); - results.bench_str(&rng, num_keys, || HashSet::new::<~str>()); + results.bench_int(&mut rng, num_keys, max, || HashSet::new::()); + results.bench_str(&mut rng, num_keys, || HashSet::new::<~str>()); write_results("core::hashmap::HashSet", &results); } { - let rng = rand::IsaacRng::new_seeded(seed); + let mut rng = rand::IsaacRng::new_seeded(seed); let mut results = empty_results(); - results.bench_int(&rng, num_keys, max, || TreeSet::new::()); - results.bench_str(&rng, num_keys, || TreeSet::new::<~str>()); + results.bench_int(&mut rng, num_keys, max, || TreeSet::new::()); + results.bench_str(&mut rng, num_keys, || TreeSet::new::<~str>()); write_results("std::treemap::TreeSet", &results); } { - let rng = rand::IsaacRng::new_seeded(seed); + let mut rng = rand::IsaacRng::new_seeded(seed); let mut results = empty_results(); - results.bench_int(&rng, num_keys, max, || BitvSet::new()); + results.bench_int(&mut rng, num_keys, max, || BitvSet::new()); write_results("std::bitv::BitvSet", &results); } } diff --git a/src/test/bench/core-std.rs b/src/test/bench/core-std.rs index 1af3538a0219d..95a83af93d541 100644 --- a/src/test/bench/core-std.rs +++ b/src/test/bench/core-std.rs @@ -33,12 +33,15 @@ fn main() { fn maybe_run_test(argv: &[~str], name: ~str, test: &fn()) { let mut run_test = false; - if os::getenv(~"RUST_BENCH").is_some() { run_test = true } - else if argv.len() > 0 { + if os::getenv(~"RUST_BENCH").is_some() { + run_test = true + } else if argv.len() > 0 { run_test = argv.contains(&~"all") || argv.contains(&name) } - if !run_test { return } + if !run_test { + return + } let start = precise_time_s(); test(); @@ -69,7 +72,7 @@ fn read_line() { } fn vec_plus() { - let r = rand::rng(); + let mut r = rand::rng(); let mut v = ~[]; let mut i = 0; @@ -86,7 +89,7 @@ fn vec_plus() { } fn vec_append() { - let r = rand::rng(); + let mut r = rand::rng(); let mut v = ~[]; let mut i = 0; @@ -103,7 +106,7 @@ fn vec_append() { } fn vec_push_all() { - let r = rand::rng(); + let mut r = rand::rng(); let mut v = ~[]; for uint::range(0, 1500) |i| { diff --git a/src/test/bench/graph500-bfs.rs b/src/test/bench/graph500-bfs.rs index c8555ab1286b1..83855b142feb7 100644 --- a/src/test/bench/graph500-bfs.rs +++ b/src/test/bench/graph500-bfs.rs @@ -32,19 +32,20 @@ type graph = ~[~[node_id]]; type bfs_result = ~[node_id]; fn make_edges(scale: uint, edgefactor: uint) -> ~[(node_id, node_id)] { - let r = rand::XorShiftRng::new(); - - fn choose_edge(i: node_id, j: node_id, scale: uint, r: &R) - -> (node_id, node_id) { + let mut r = rand::XorShiftRng::new(); + fn choose_edge(i: node_id, + j: node_id, + scale: uint, + r: &mut R) + -> (node_id, node_id) { let A = 0.57; let B = 0.19; let C = 0.19; if scale == 0u { (i, j) - } - else { + } else { let i = i * 2i64; let j = j * 2i64; let scale = scale - 1u; @@ -73,7 +74,7 @@ fn make_edges(scale: uint, edgefactor: uint) -> ~[(node_id, node_id)] { } do vec::from_fn((1u << scale) * edgefactor) |_i| { - choose_edge(0i64, 0i64, scale, &r) + choose_edge(0i64, 0i64, scale, &mut r) } } @@ -103,7 +104,7 @@ fn make_graph(N: uint, edges: ~[(node_id, node_id)]) -> graph { fn gen_search_keys(graph: &[~[node_id]], n: uint) -> ~[node_id] { let mut keys = HashSet::new(); - let r = rand::rng(); + let mut r = rand::rng(); while keys.len() < n { let k = r.gen_uint_range(0u, graph.len()); diff --git a/src/test/bench/msgsend-pipes-shared.rs b/src/test/bench/msgsend-pipes-shared.rs index 6cda0a1945a0d..95758b3fe6406 100644 --- a/src/test/bench/msgsend-pipes-shared.rs +++ b/src/test/bench/msgsend-pipes-shared.rs @@ -65,15 +65,15 @@ fn run(args: &[~str]) { let mut worker_results = ~[]; for uint::range(0, workers) |_i| { let to_child = to_child.clone(); - do task::task().future_result(|+r| { - worker_results.push(r); - }).spawn || { + let mut builder = task::task(); + builder.future_result(|r| worker_results.push(r)); + do builder.spawn { for uint::range(0, size / workers) |_i| { //error!("worker %?: sending %? bytes", i, num_bytes); to_child.send(bytes(num_bytes)); } //error!("worker %? exiting", i); - }; + } } do task::spawn || { server(&from_parent, &to_parent); diff --git a/src/test/bench/msgsend-pipes.rs b/src/test/bench/msgsend-pipes.rs index a8fb29a47e2fb..e213a44b49ae7 100644 --- a/src/test/bench/msgsend-pipes.rs +++ b/src/test/bench/msgsend-pipes.rs @@ -62,9 +62,9 @@ fn run(args: &[~str]) { for uint::range(0, workers) |_i| { let (from_parent_, to_child) = stream(); from_parent.add(from_parent_); - do task::task().future_result(|+r| { - worker_results.push(r); - }).spawn || { + let mut builder = task::task(); + builder.future_result(|r| worker_results.push(r)); + do builder.spawn { for uint::range(0, size / workers) |_i| { //error!("worker %?: sending %? bytes", i, num_bytes); to_child.send(bytes(num_bytes)); diff --git a/src/test/bench/msgsend-ring-mutex-arcs.rs b/src/test/bench/msgsend-ring-mutex-arcs.rs index 853b057277d8e..ed08297ab3fe3 100644 --- a/src/test/bench/msgsend-ring-mutex-arcs.rs +++ b/src/test/bench/msgsend-ring-mutex-arcs.rs @@ -103,7 +103,9 @@ fn main() { thread_ring(0, msg_per_task, num_chan.take(), num_port); // synchronize - for futures.each |f| { f.get() }; + for futures.each_mut |f| { + f.get() + } let stop = time::precise_time_s(); diff --git a/src/test/bench/msgsend-ring-pipes.rs b/src/test/bench/msgsend-ring-pipes.rs index 1288ac290787a..22d58730f58f3 100644 --- a/src/test/bench/msgsend-ring-pipes.rs +++ b/src/test/bench/msgsend-ring-pipes.rs @@ -96,7 +96,9 @@ fn main() { thread_ring(0, msg_per_task, num_chan.take(), num_port); // synchronize - for futures.each |f| { f.get() }; + for futures.each_mut |f| { + let _ = f.get(); + } let stop = time::precise_time_s(); diff --git a/src/test/bench/msgsend-ring-rw-arcs.rs b/src/test/bench/msgsend-ring-rw-arcs.rs index 2cf0fbfc397f3..221177b9dd9a8 100644 --- a/src/test/bench/msgsend-ring-rw-arcs.rs +++ b/src/test/bench/msgsend-ring-rw-arcs.rs @@ -104,7 +104,9 @@ fn main() { thread_ring(0, msg_per_task, num_chan.take(), num_port); // synchronize - for futures.each |f| { f.get() }; + for futures.each_mut |f| { + let _ = f.get(); + } let stop = time::precise_time_s(); diff --git a/src/test/bench/noise.rs b/src/test/bench/noise.rs index 0da3a2e5d68d0..992ce73a4bff7 100644 --- a/src/test/bench/noise.rs +++ b/src/test/bench/noise.rs @@ -13,7 +13,7 @@ fn lerp(a: f32, b: f32, v: f32) -> f32 { a * (1.0 - v) + b * v } #[inline(always)] fn smooth(v: f32) -> f32 { v * v * (3.0 - 2.0 * v) } -fn random_gradient(r: &R) -> Vec2 { +fn random_gradient(r: &mut R) -> Vec2 { let v = 2.0 * float::consts::pi * r.gen(); Vec2 { x: float::cos(v) as f32, @@ -33,11 +33,15 @@ struct Noise2DContext { pub impl Noise2DContext { fn new() -> Noise2DContext { - let r = rand::rng(); + let mut r = rand::rng(); let mut rgradients = [ Vec2 { x: 0.0, y: 0.0 }, ..256 ]; - for int::range(0, 256) |i| { rgradients[i] = random_gradient(&r); } + for int::range(0, 256) |i| { + rgradients[i] = random_gradient(&mut r); + } let mut permutations = [ 0, ..256 ]; - for int::range(0, 256) |i| { permutations[i] = i; } + for int::range(0, 256) |i| { + permutations[i] = i; + } r.shuffle_mut(permutations); Noise2DContext { @@ -53,7 +57,11 @@ pub impl Noise2DContext { } #[inline] - fn get_gradients(&self, gradients: &mut [Vec2, ..4], origins: &mut [Vec2, ..4], x: f32, y: f32) { + fn get_gradients(&self, + gradients: &mut [Vec2, ..4], + origins: &mut [Vec2, ..4], + x: f32, + y: f32) { let x0f = f32::floor(x); let y0f = f32::floor(y); let x0 = x0f as int; diff --git a/src/test/bench/shootout-fasta.rs b/src/test/bench/shootout-fasta.rs index 0fcf8341ac852..7316b68f8bd42 100644 --- a/src/test/bench/shootout-fasta.rs +++ b/src/test/bench/shootout-fasta.rs @@ -63,7 +63,10 @@ fn make_random_fasta(wr: @io::Writer, genelist: ~[AminoAcids], n: int) { wr.write_line(~">" + id + ~" " + desc); - let rng = @mut MyRandom {last: rand::rng().next()}; + let mut rng = rand::rng(); + let rng = @mut MyRandom { + last: rng.next() + }; let mut op: ~str = ~""; for uint::range(0u, n as uint) |_i| { str::push_char(&mut op, select_random(myrandom_next(rng, 100u32), diff --git a/src/test/bench/shootout-pfib.rs b/src/test/bench/shootout-pfib.rs index acb8a6bcbeed6..27a59feedd0a3 100644 --- a/src/test/bench/shootout-pfib.rs +++ b/src/test/bench/shootout-pfib.rs @@ -26,7 +26,6 @@ use core::int::range; use core::comm::*; use core::io::WriterUtil; -use core::result; use core::result::{Ok, Err}; fn fib(n: int) -> int { @@ -80,13 +79,15 @@ fn stress_task(&&id: int) { fn stress(num_tasks: int) { let mut results = ~[]; for range(0, num_tasks) |i| { - do task::task().future_result(|+r| { - results.push(r); - }).spawn { + let mut builder = task::task(); + builder.future_result(|r| results.push(r)); + do builder.spawn { stress_task(i); } } - for results.each |r| { r.recv(); } + for results.each |r| { + r.recv(); + } } fn main() { diff --git a/src/test/bench/task-perf-linked-failure.rs b/src/test/bench/task-perf-linked-failure.rs index 90c9d6b33e4ad..99e7de307279f 100644 --- a/src/test/bench/task-perf-linked-failure.rs +++ b/src/test/bench/task-perf-linked-failure.rs @@ -48,7 +48,10 @@ fn grandchild_group(num_tasks: uint) { fn spawn_supervised_blocking(myname: &str, +f: ~fn()) { let mut res = None; - task::task().future_result(|+r| res = Some(r)).supervised().spawn(f); + let mut builder = task::task(); + builder.future_result(|r| res = Some(r)); + builder.supervised(); + builder.spawn(f); error!("%s group waiting", myname); let x = res.unwrap().recv(); assert!(x == task::Success); diff --git a/src/test/run-pass/issue-3176.rs b/src/test/run-pass/issue-3176.rs index 55d62a5bf8ee3..d22c7e82ad5de 100644 --- a/src/test/run-pass/issue-3176.rs +++ b/src/test/run-pass/issue-3176.rs @@ -26,7 +26,8 @@ pub fn main() { c2.send(()); error!("child blocks"); let (p, c) = comm::stream(); - (p, p3).select(); + let mut tuple = (p, p3); + tuple.select(); c.send(()); }; error!("parent tries"); diff --git a/src/test/run-pass/morestack6.rs b/src/test/run-pass/morestack6.rs index 1f908936aef47..dafdd0fba48c3 100644 --- a/src/test/run-pass/morestack6.rs +++ b/src/test/run-pass/morestack6.rs @@ -62,7 +62,7 @@ pub fn main() { calllink09, calllink10 ]; - let rng = rand::rng(); + let mut rng = rand::rng(); for fns.each |f| { let f = *f; let sz = rng.next() % 256u32 + 256u32; diff --git a/src/test/run-pass/pipe-peek.rs b/src/test/run-pass/pipe-peek.rs index 46fbb88aef2e1..985eaecdc781b 100644 --- a/src/test/run-pass/pipe-peek.rs +++ b/src/test/run-pass/pipe-peek.rs @@ -22,11 +22,11 @@ proto! oneshot ( ) pub fn main() { - let (c, p) = oneshot::init(); + let mut (c, p) = oneshot::init(); - assert!(!pipes::peek(&p)); + assert!(!pipes::peek(&mut p)); oneshot::client::signal(c); - assert!(pipes::peek(&p)); + assert!(pipes::peek(&mut p)); } diff --git a/src/test/run-pass/pipe-pingpong-bounded.rs b/src/test/run-pass/pipe-pingpong-bounded.rs index 69d87804b42dd..d11d5eb47bbb9 100644 --- a/src/test/run-pass/pipe-pingpong-bounded.rs +++ b/src/test/run-pass/pipe-pingpong-bounded.rs @@ -40,7 +40,7 @@ mod pingpong { do pipes::entangle_buffer(buffer) |buffer, data| { data.ping.set_buffer(buffer); data.pong.set_buffer(buffer); - ptr::to_unsafe_ptr(&(data.ping)) + ptr::to_mut_unsafe_ptr(&mut (data.ping)) } } pub struct ping(server::pong); @@ -50,11 +50,11 @@ mod pingpong { use core::pipes::*; use core::ptr; - pub fn ping(+pipe: ping) -> pong { + pub fn ping(mut pipe: ping) -> pong { { - let b = pipe.reuse_buffer(); - let s = SendPacketBuffered(&b.buffer.data.pong); - let c = RecvPacketBuffered(&b.buffer.data.pong); + let mut b = pipe.reuse_buffer(); + let s = SendPacketBuffered(&mut b.buffer.data.pong); + let c = RecvPacketBuffered(&mut b.buffer.data.pong); let message = ::pingpong::ping(s); send(pipe, message); c @@ -72,11 +72,11 @@ mod pingpong { pub type ping = pipes::RecvPacketBuffered<::pingpong::ping, ::pingpong::Packets>; - pub fn pong(+pipe: pong) -> ping { + pub fn pong(mut pipe: pong) -> ping { { - let b = pipe.reuse_buffer(); - let s = SendPacketBuffered(&b.buffer.data.ping); - let c = RecvPacketBuffered(&b.buffer.data.ping); + let mut b = pipe.reuse_buffer(); + let s = SendPacketBuffered(&mut b.buffer.data.ping); + let c = RecvPacketBuffered(&mut b.buffer.data.ping); let message = ::pingpong::pong(s); send(pipe, message); c diff --git a/src/test/run-pass/pipe-presentation-examples.rs b/src/test/run-pass/pipe-presentation-examples.rs index 01f68929b90a7..fcfd77dab0aa3 100644 --- a/src/test/run-pass/pipe-presentation-examples.rs +++ b/src/test/run-pass/pipe-presentation-examples.rs @@ -1,4 +1,8 @@ // xfail-fast +// xfail-test + +// XFAIL'd because this is going to be revamped, and it's not compatible as +// written with the new mutability rules. // Copyright 2012 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at diff --git a/src/test/run-pass/platform_thread.rs b/src/test/run-pass/platform_thread.rs index 5e4830b0bbdc3..774f2470b3cd3 100644 --- a/src/test/run-pass/platform_thread.rs +++ b/src/test/run-pass/platform_thread.rs @@ -24,9 +24,15 @@ fn run(i: int) { return; } - do task::task().sched_mode(task::PlatformThread).unlinked().spawn { + let mut builder = task::task(); + builder.sched_mode(task::PlatformThread); + builder.unlinked(); + do builder.spawn { task::yield(); - do task::task().sched_mode(task::SingleThreaded).unlinked().spawn { + let mut builder = task::task(); + builder.sched_mode(task::SingleThreaded); + builder.unlinked(); + do builder.spawn { task::yield(); run(i - 1); task::yield(); diff --git a/src/test/run-pass/task-comm-12.rs b/src/test/run-pass/task-comm-12.rs index b426212d872f2..e61a855b42941 100644 --- a/src/test/run-pass/task-comm-12.rs +++ b/src/test/run-pass/task-comm-12.rs @@ -17,7 +17,9 @@ fn start(&&task_number: int) { debug!("Started / Finished task."); } fn test00() { let i: int = 0; let mut result = None; - do task::task().future_result(|+r| { result = Some(r); }).spawn { + let mut builder = task::task(); + builder.future_result(|r| result = Some(r)); + do builder.spawn { start(i) } diff --git a/src/test/run-pass/task-comm-3.rs b/src/test/run-pass/task-comm-3.rs index cf06deb1923a6..fd700475988cf 100644 --- a/src/test/run-pass/task-comm-3.rs +++ b/src/test/run-pass/task-comm-3.rs @@ -40,9 +40,9 @@ fn test00() { let mut results = ~[]; while i < number_of_tasks { let ch = po.chan(); - task::task().future_result(|+r| { - results.push(r); - }).spawn({ + let mut builder = task::task(); + builder.future_result(|r| results.push(r)); + builder.spawn({ let i = i; || test00_start(&ch, i, number_of_messages) }); diff --git a/src/test/run-pass/task-comm-9.rs b/src/test/run-pass/task-comm-9.rs index a3c8dc554a663..798e9d37b5534 100644 --- a/src/test/run-pass/task-comm-9.rs +++ b/src/test/run-pass/task-comm-9.rs @@ -27,8 +27,9 @@ fn test00() { let ch = p.chan(); let mut result = None; - do task::task().future_result(|+r| { result = Some(r); }).spawn - || { + let mut builder = task::task(); + builder.future_result(|r| result = Some(r)); + do builder.spawn { test00_start(&ch, number_of_messages); } diff --git a/src/test/run-pass/yield.rs b/src/test/run-pass/yield.rs index 75d9979807b47..8ed269099520a 100644 --- a/src/test/run-pass/yield.rs +++ b/src/test/run-pass/yield.rs @@ -11,7 +11,9 @@ pub fn main() { let mut result = None; - task::task().future_result(|+r| { result = Some(r); }).spawn(child); + let mut builder = task::task(); + builder.future_result(|+r| { result = Some(r); }); + builder.spawn(child); error!("1"); task::yield(); error!("2"); diff --git a/src/test/run-pass/yield1.rs b/src/test/run-pass/yield1.rs index 51483121f50fc..278ce1c37666f 100644 --- a/src/test/run-pass/yield1.rs +++ b/src/test/run-pass/yield1.rs @@ -11,7 +11,9 @@ pub fn main() { let mut result = None; - task::task().future_result(|+r| { result = Some(r); }).spawn(child); + let mut builder = task::task(); + builder.future_result(|+r| { result = Some(r); }); + builder.spawn(child); error!("1"); task::yield(); result.unwrap().recv(); From 99daec602fc8fa4612320c7c1babe6ae8717759c Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Tue, 7 May 2013 11:38:08 -0700 Subject: [PATCH 300/410] librustc: Fix merge fallout. --- src/libcore/io.rs | 13 ++++++++----- src/libcore/repr.rs | 6 +++--- src/librustc/middle/resolve_stage0.rs | 2 +- src/libstd/future.rs | 7 +++++++ src/libstd/net_tcp.rs | 18 ++++++++++-------- 5 files changed, 29 insertions(+), 17 deletions(-) diff --git a/src/libcore/io.rs b/src/libcore/io.rs index 63335f7e952cd..a00de5ff31177 100644 --- a/src/libcore/io.rs +++ b/src/libcore/io.rs @@ -1528,14 +1528,17 @@ pub struct BytesWriter { impl Writer for BytesWriter { fn write(&self, v: &[u8]) { let v_len = v.len(); - let bytes_len = vec::uniq_len(&const *self.bytes); - let count = uint::max(bytes_len, *self.pos + v_len); - vec::reserve(&mut *self.bytes, count); + let bytes = &mut *self.bytes; + let count = uint::max(bytes.len(), *self.pos + v_len); + vec::reserve(bytes, count); unsafe { - vec::raw::set_len(&mut *self.bytes, count); - let view = vec::mut_slice(*self.bytes, *self.pos, count); + // Silly stage0 borrow check workaround... + let casted: &mut ~[u8] = cast::transmute_copy(&bytes); + vec::raw::set_len(casted, count); + + let view = vec::mut_slice(*bytes, *self.pos, count); vec::bytes::copy_memory(view, v, v_len); } diff --git a/src/libcore/repr.rs b/src/libcore/repr.rs index c7e20d2b21f7e..a645a7e868076 100644 --- a/src/libcore/repr.rs +++ b/src/libcore/repr.rs @@ -457,7 +457,7 @@ impl TyVisitor for ReprVisitor { let disr = unsafe { get_disr(transmute(*self.ptr)) }; - self.var_stk.push(SearchingFor(disr)); + var_stk.push(SearchingFor(disr)); true } @@ -494,7 +494,7 @@ impl TyVisitor for ReprVisitor { _offset: uint, inner: *TyDesc) -> bool { - match self.var_stk[vec::uniq_len(&const self.var_stk) - 1] { + match self.var_stk[vec::uniq_len(&const *self.var_stk) - 1] { Matched => { if i != 0 { self.writer.write_str(", "); @@ -530,7 +530,7 @@ impl TyVisitor for ReprVisitor { _align: uint) -> bool { let var_stk: &mut ~[VariantState] = self.var_stk; - match self.var_stk.pop() { + match var_stk.pop() { SearchingFor(*) => fail!(~"enum value matched no variant"), _ => true } diff --git a/src/librustc/middle/resolve_stage0.rs b/src/librustc/middle/resolve_stage0.rs index 2773710ca98fc..484f66ae9921b 100644 --- a/src/librustc/middle/resolve_stage0.rs +++ b/src/librustc/middle/resolve_stage0.rs @@ -4718,7 +4718,7 @@ pub impl Resolver { for vec::each(class_def.fields) |field| { match field.node.kind { unnamed_field => {}, - named_field(ident, _, _) => { + named_field(ident, _) => { if str::eq_slice(*this.session.str_of(ident), name) { return true diff --git a/src/libstd/future.rs b/src/libstd/future.rs index 209859e30961e..eea9d56c97517 100644 --- a/src/libstd/future.rs +++ b/src/libstd/future.rs @@ -28,6 +28,13 @@ use core::pipes::recv; use core::task; #[doc = "The future type"] +#[cfg(stage0)] +pub struct Future { + priv mut state: FutureState, +} + +#[doc = "The future type"] +#[cfg(not(stage0))] pub struct Future { priv state: FutureState, } diff --git a/src/libstd/net_tcp.rs b/src/libstd/net_tcp.rs index e8c38be74c7d2..560e91f13a721 100644 --- a/src/libstd/net_tcp.rs +++ b/src/libstd/net_tcp.rs @@ -902,8 +902,10 @@ impl io::Reader for TcpSocketBuf { // need to read in data from the socket. Note that the internal // buffer is of no use anymore as we read all bytes from it, // so we can throw it away. - let data = &*self.data; - let read_result = read(&data.sock, 0u); + let read_result = { + let data = &*self.data; + read(&data.sock, 0) + }; if read_result.is_err() { let err_data = read_result.get_err(); @@ -918,8 +920,7 @@ impl io::Reader for TcpSocketBuf { // should show up in a later call to read(). break; } - } - else { + } else { self.data.buf = result::unwrap(read_result); self.data.buf_off = 0; } @@ -935,8 +936,10 @@ impl io::Reader for TcpSocketBuf { return c as int } - let data = &*self.data; - let read_result = read(&data.sock, 0u); + let read_result = { + let data = &*self.data; + read(&data.sock, 0) + }; if read_result.is_err() { let err_data = read_result.get_err(); @@ -948,8 +951,7 @@ impl io::Reader for TcpSocketBuf { err_data.err_name, err_data.err_msg); fail!() } - } - else { + } else { self.data.buf = result::unwrap(read_result); self.data.buf_off = 0; } From 49a66a5c5a0361291db22e08bfa6e8c17209d01c Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Tue, 7 May 2013 14:20:56 -0700 Subject: [PATCH 301/410] librustc: Stop parsing modes and remove them entirely from the language --- src/libcore/at_vec.rs | 8 ++++---- src/libcore/cast.rs | 2 +- src/libcore/rt/uvll.rs | 26 ++++++++++++++------------ src/libcore/stackwalk.rs | 2 +- src/libcore/task/mod.rs | 6 +++--- src/libcore/unstable/intrinsics.rs | 4 ++-- src/libcore/vec.rs | 12 ++++++------ src/libfuzzer/fuzzer.rc | 2 +- src/librustc/back/upcall.rs | 4 ++-- src/librustc/front/intrinsic.rs | 2 +- src/librustc/lib/llvm.rs | 18 ++++++++++++------ src/librustdoc/extract.rs | 2 +- src/librustdoc/markdown_writer.rs | 4 ++-- src/librustdoc/pass.rs | 2 +- src/libstd/arc.rs | 3 +-- src/libstd/arena.rs | 2 +- src/libstd/flatpipes.rs | 2 +- src/libstd/priority_queue.rs | 2 +- src/libstd/test.rs | 2 +- src/libstd/uv_ll.rs | 29 +++++++++++++++-------------- src/libsyntax/parse/parser.rs | 15 ++++++--------- src/libsyntax/util/interner.rs | 2 +- 22 files changed, 78 insertions(+), 73 deletions(-) diff --git a/src/libcore/at_vec.rs b/src/libcore/at_vec.rs index 9f59f1d8fe48d..75dfe1e780646 100644 --- a/src/libcore/at_vec.rs +++ b/src/libcore/at_vec.rs @@ -29,9 +29,9 @@ pub mod rustrt { #[abi = "cdecl"] #[link_name = "rustrt"] pub extern { - pub unsafe fn vec_reserve_shared_actual(++t: *sys::TypeDesc, - ++v: **vec::raw::VecRepr, - ++n: libc::size_t); + pub unsafe fn vec_reserve_shared_actual(t: *sys::TypeDesc, + v: **vec::raw::VecRepr, + n: libc::size_t); } } @@ -60,7 +60,7 @@ pub fn capacity(v: @[T]) -> uint { pub fn build_sized(size: uint, builder: &fn(push: &fn(v: A))) -> @[A] { let mut vec: @[A] = @[]; unsafe { raw::reserve(&mut vec, size); } - builder(|+x| unsafe { raw::push(&mut vec, x) }); + builder(|x| unsafe { raw::push(&mut vec, x) }); return unsafe { transmute(vec) }; } diff --git a/src/libcore/cast.rs b/src/libcore/cast.rs index 96e1c3bd1249b..9b93cf68622f6 100644 --- a/src/libcore/cast.rs +++ b/src/libcore/cast.rs @@ -17,7 +17,7 @@ pub mod rusti { #[abi = "rust-intrinsic"] #[link_name = "rusti"] pub extern "rust-intrinsic" { - fn forget(+x: T); + fn forget(x: T); fn transmute(e: T) -> U; } diff --git a/src/libcore/rt/uvll.rs b/src/libcore/rt/uvll.rs index 3eb7f8006b9ea..4bff3bff7d3ae 100644 --- a/src/libcore/rt/uvll.rs +++ b/src/libcore/rt/uvll.rs @@ -393,24 +393,26 @@ extern { // FIXME ref #2064 fn rust_uv_tcp_connect(connect_ptr: *uv_connect_t, tcp_handle_ptr: *uv_tcp_t, - ++after_cb: *u8, - ++addr: *sockaddr_in) -> c_int; + after_cb: *u8, + addr: *sockaddr_in) -> c_int; // FIXME ref #2064 - fn rust_uv_tcp_bind(tcp_server: *uv_tcp_t, ++addr: *sockaddr_in) -> c_int; + fn rust_uv_tcp_bind(tcp_server: *uv_tcp_t, addr: *sockaddr_in) -> c_int; // FIXME ref #2064 fn rust_uv_tcp_connect6(connect_ptr: *uv_connect_t, tcp_handle_ptr: *uv_tcp_t, - ++after_cb: *u8, - ++addr: *sockaddr_in6) -> c_int; + after_cb: *u8, + addr: *sockaddr_in6) -> c_int; // FIXME ref #2064 - fn rust_uv_tcp_bind6(tcp_server: *uv_tcp_t, ++addr: *sockaddr_in6) -> c_int; - fn rust_uv_tcp_getpeername(tcp_handle_ptr: *uv_tcp_t, ++name: *sockaddr_in) -> c_int; - fn rust_uv_tcp_getpeername6(tcp_handle_ptr: *uv_tcp_t, ++name: *sockaddr_in6) ->c_int; + fn rust_uv_tcp_bind6(tcp_server: *uv_tcp_t, addr: *sockaddr_in6) -> c_int; + fn rust_uv_tcp_getpeername(tcp_handle_ptr: *uv_tcp_t, + name: *sockaddr_in) -> c_int; + fn rust_uv_tcp_getpeername6(tcp_handle_ptr: *uv_tcp_t, + name: *sockaddr_in6) ->c_int; fn rust_uv_listen(stream: *c_void, backlog: c_int, cb: *u8) -> c_int; fn rust_uv_accept(server: *c_void, client: *c_void) -> c_int; fn rust_uv_write(req: *c_void, stream: *c_void, - ++buf_in: *uv_buf_t, + buf_in: *uv_buf_t, buf_cnt: c_int, cb: *u8) -> c_int; fn rust_uv_read_start(stream: *c_void, @@ -426,7 +428,7 @@ extern { fn rust_uv_timer_stop(handle: *uv_timer_t) -> c_int; fn rust_uv_malloc_buf_base_of(sug_size: size_t) -> *u8; - fn rust_uv_free_base_of_buf(++buf: uv_buf_t); + fn rust_uv_free_base_of_buf(buf: uv_buf_t); fn rust_uv_get_stream_handle_from_connect_req(connect_req: *uv_connect_t) -> *uv_stream_t; fn rust_uv_get_stream_handle_from_write_req(write_req: *uv_write_t) -> *uv_stream_t; fn rust_uv_get_loop_for_uv_handle(handle: *c_void) -> *c_void; @@ -436,6 +438,6 @@ extern { fn rust_uv_set_data_for_uv_handle(handle: *c_void, data: *c_void); fn rust_uv_get_data_for_req(req: *c_void) -> *c_void; fn rust_uv_set_data_for_req(req: *c_void, data: *c_void); - fn rust_uv_get_base_from_buf(++buf: uv_buf_t) -> *u8; - fn rust_uv_get_len_from_buf(++buf: uv_buf_t) -> size_t; + fn rust_uv_get_base_from_buf(buf: uv_buf_t) -> *u8; + fn rust_uv_get_len_from_buf(buf: uv_buf_t) -> size_t; } diff --git a/src/libcore/stackwalk.rs b/src/libcore/stackwalk.rs index 24237694502a8..1958b5b9d80da 100644 --- a/src/libcore/stackwalk.rs +++ b/src/libcore/stackwalk.rs @@ -81,6 +81,6 @@ fn frame_address(f: &fn(x: *u8)) { pub mod rusti { #[abi = "rust-intrinsic"] pub extern "rust-intrinsic" { - pub fn frame_address(+f: &once fn(x: *u8)); + pub fn frame_address(f: &once fn(x: *u8)); } } diff --git a/src/libcore/task/mod.rs b/src/libcore/task/mod.rs index ce1969a14a183..aeb669efa58fc 100644 --- a/src/libcore/task/mod.rs +++ b/src/libcore/task/mod.rs @@ -371,7 +371,7 @@ pub impl TaskBuilder { let (po, ch) = stream::(); let mut result = None; - self.future_result(|+r| { result = Some(r); }); + self.future_result(|r| { result = Some(r); }); do self.spawn { ch.send(f()); @@ -791,11 +791,11 @@ fn test_add_wrapper() { #[ignore(cfg(windows))] fn test_future_result() { let mut result = None; - do task().future_result(|+r| { result = Some(r); }).spawn { } + do task().future_result(|r| { result = Some(r); }).spawn { } assert!(result.unwrap().recv() == Success); result = None; - do task().future_result(|+r| + do task().future_result(|r| { result = Some(r); }).unlinked().spawn { fail!(); } diff --git a/src/libcore/unstable/intrinsics.rs b/src/libcore/unstable/intrinsics.rs index 65cfc6ec1fe05..363dbb84c1c3e 100644 --- a/src/libcore/unstable/intrinsics.rs +++ b/src/libcore/unstable/intrinsics.rs @@ -34,8 +34,8 @@ pub extern "rust-intrinsic" { pub fn size_of() -> uint; - pub fn move_val(dst: &mut T, +src: T); - pub fn move_val_init(dst: &mut T, +src: T); + pub fn move_val(dst: &mut T, src: T); + pub fn move_val_init(dst: &mut T, src: T); pub fn min_align_of() -> uint; pub fn pref_align_of() -> uint; diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs index 947146dee0e74..36acbdf4b5619 100644 --- a/src/libcore/vec.rs +++ b/src/libcore/vec.rs @@ -42,13 +42,13 @@ pub mod rustrt { // These names are terrible. reserve_shared applies // to ~[] and reserve_shared_actual applies to @[]. #[fast_ffi] - unsafe fn vec_reserve_shared(++t: *sys::TypeDesc, - ++v: **raw::VecRepr, - ++n: libc::size_t); + unsafe fn vec_reserve_shared(t: *sys::TypeDesc, + v: **raw::VecRepr, + n: libc::size_t); #[fast_ffi] - unsafe fn vec_reserve_shared_actual(++t: *sys::TypeDesc, - ++v: **raw::VecRepr, - ++n: libc::size_t); + unsafe fn vec_reserve_shared_actual(t: *sys::TypeDesc, + v: **raw::VecRepr, + n: libc::size_t); } } diff --git a/src/libfuzzer/fuzzer.rc b/src/libfuzzer/fuzzer.rc index 7c93d867f5040..33e970c305adc 100644 --- a/src/libfuzzer/fuzzer.rc +++ b/src/libfuzzer/fuzzer.rc @@ -263,7 +263,7 @@ pub fn under(n: uint, it: &fn(uint)) { while i < n { it(i); i += 1u; } } -pub fn as_str(f: @fn(+x: @io::Writer)) -> ~str { +pub fn as_str(f: @fn(x: @io::Writer)) -> ~str { io::with_str_writer(f) } diff --git a/src/librustc/back/upcall.rs b/src/librustc/back/upcall.rs index 8fcc5234e8b51..4d2ea4eb4a642 100644 --- a/src/librustc/back/upcall.rs +++ b/src/librustc/back/upcall.rs @@ -34,9 +34,9 @@ pub fn declare_upcalls(targ_cfg: @session::config, fn nothrow(f: ValueRef) -> ValueRef { base::set_no_unwind(f); f } - let d: &fn(+a: ~str, +b: ~[TypeRef], +c: TypeRef) -> ValueRef = + let d: &fn(a: ~str, b: ~[TypeRef], c: TypeRef) -> ValueRef = |a,b,c| decl(llmod, ~"upcall_", a, b, c); - let dv: &fn(+a: ~str, +b: ~[TypeRef]) -> ValueRef = + let dv: &fn(a: ~str, b: ~[TypeRef]) -> ValueRef = |a,b| decl(llmod, ~"upcall_", a, b, T_void()); let int_t = T_int(targ_cfg); diff --git a/src/librustc/front/intrinsic.rs b/src/librustc/front/intrinsic.rs index 452623c2742b9..ece53451ccf80 100644 --- a/src/librustc/front/intrinsic.rs +++ b/src/librustc/front/intrinsic.rs @@ -132,7 +132,7 @@ pub mod intrinsic { #[abi = "rust-intrinsic"] pub extern "rust-intrinsic" { pub fn get_tydesc() -> *(); - pub fn visit_tydesc(++td: *TyDesc, ++tv: @TyVisitor); + pub fn visit_tydesc(td: *TyDesc, tv: @TyVisitor); } } } diff --git a/src/librustc/lib/llvm.rs b/src/librustc/lib/llvm.rs index fbb3380554d9e..36d5a8e3cfe9e 100644 --- a/src/librustc/lib/llvm.rs +++ b/src/librustc/lib/llvm.rs @@ -1561,12 +1561,18 @@ pub mod llvm { Name: *c_char) -> ValueRef; /* Atomic Operations */ - pub unsafe fn LLVMBuildAtomicCmpXchg(B: BuilderRef, LHS: ValueRef, - CMP: ValueRef, RHS: ValueRef, - ++Order: AtomicOrdering) -> ValueRef; - pub unsafe fn LLVMBuildAtomicRMW(B: BuilderRef, ++Op: AtomicBinOp, - LHS: ValueRef, RHS: ValueRef, - ++Order: AtomicOrdering) -> ValueRef; + pub unsafe fn LLVMBuildAtomicCmpXchg(B: BuilderRef, + LHS: ValueRef, + CMP: ValueRef, + RHS: ValueRef, + Order: AtomicOrdering) + -> ValueRef; + pub unsafe fn LLVMBuildAtomicRMW(B: BuilderRef, + Op: AtomicBinOp, + LHS: ValueRef, + RHS: ValueRef, + Order: AtomicOrdering) + -> ValueRef; /* Selected entries from the downcasts. */ #[fast_ffi] diff --git a/src/librustdoc/extract.rs b/src/librustdoc/extract.rs index f04ca4b7a0436..34faf6cefa32b 100644 --- a/src/librustdoc/extract.rs +++ b/src/librustdoc/extract.rs @@ -22,7 +22,7 @@ use syntax; * there. */ macro_rules! interner_key ( () => (cast::transmute::<(uint, uint), - &fn(+v: @@syntax::parse::token::ident_interner)>((-3 as uint, 0u))) + &fn(v: @@syntax::parse::token::ident_interner)>((-3 as uint, 0u))) ) // Hack; rather than thread an interner through everywhere, rely on diff --git a/src/librustdoc/markdown_writer.rs b/src/librustdoc/markdown_writer.rs index fc5a9a60df290..e56b0fb60cd12 100644 --- a/src/librustdoc/markdown_writer.rs +++ b/src/librustdoc/markdown_writer.rs @@ -26,8 +26,8 @@ pub type Writer = ~fn(v: WriteInstr); pub type WriterFactory = ~fn(page: doc::Page) -> Writer; pub trait WriterUtils { - fn put_str(&self, +str: ~str); - fn put_line(&self, +str: ~str); + fn put_str(&self, str: ~str); + fn put_line(&self, str: ~str); fn put_done(&self); } diff --git a/src/librustdoc/pass.rs b/src/librustdoc/pass.rs index 94db038bdec4b..b80f43a7bbd06 100644 --- a/src/librustdoc/pass.rs +++ b/src/librustdoc/pass.rs @@ -17,7 +17,7 @@ use time; /// A single operation on the document model pub struct Pass { name: ~str, - f: @fn(srv: astsrv::Srv, +doc: doc::Doc) -> doc::Doc + f: @fn(srv: astsrv::Srv, doc: doc::Doc) -> doc::Doc } pub fn run_passes( diff --git a/src/libstd/arc.rs b/src/libstd/arc.rs index 6c39fa1f9dcbb..35cfd6c90bc76 100644 --- a/src/libstd/arc.rs +++ b/src/libstd/arc.rs @@ -673,8 +673,7 @@ mod tests { let mut children = ~[]; for 5.times { let arc3 = (*arc).clone(); - do task::task().future_result(|+r| children.push(r)).spawn - || { + do task::task().future_result(|r| children.push(r)).spawn { do arc3.read |num| { assert!(*num >= 0); } diff --git a/src/libstd/arena.rs b/src/libstd/arena.rs index da882d53fcffa..d6380551da91b 100644 --- a/src/libstd/arena.rs +++ b/src/libstd/arena.rs @@ -47,7 +47,7 @@ use core::vec; pub mod rusti { #[abi = "rust-intrinsic"] pub extern "rust-intrinsic" { - fn move_val_init(dst: &mut T, +src: T); + fn move_val_init(dst: &mut T, src: T); fn needs_drop() -> bool; } } diff --git a/src/libstd/flatpipes.rs b/src/libstd/flatpipes.rs index b091a951af178..012f5c47830a9 100644 --- a/src/libstd/flatpipes.rs +++ b/src/libstd/flatpipes.rs @@ -928,7 +928,7 @@ mod test { test_try_recv_none3(pipe_port_loader); } - fn test_try_recv_none4(+loader: PortLoader

) { + fn test_try_recv_none4(loader: PortLoader

) { assert!(do task::try || { static CONTINUE: [u8, ..4] = [0xAA, 0xBB, 0xCC, 0xDD]; // The control word is followed by a valid length, diff --git a/src/libstd/priority_queue.rs b/src/libstd/priority_queue.rs index 33fe1cfff8e59..9bf7db07ac9dd 100644 --- a/src/libstd/priority_queue.rs +++ b/src/libstd/priority_queue.rs @@ -14,7 +14,7 @@ use core::old_iter::BaseIter; #[abi = "rust-intrinsic"] extern "rust-intrinsic" mod rusti { - fn move_val_init(dst: &mut T, +src: T); + fn move_val_init(dst: &mut T, src: T); fn init() -> T; } diff --git a/src/libstd/test.rs b/src/libstd/test.rs index b3523b8ad8019..7d24262aea600 100644 --- a/src/libstd/test.rs +++ b/src/libstd/test.rs @@ -559,7 +559,7 @@ pub fn run_test(force_ignore: bool, let mut task = task::task(); task.unlinked(); - task.future_result(|+r| { result_future = Some(r) }); + task.future_result(|r| { result_future = Some(r) }); task.spawn(testfn_cell.take()); let task_result = result_future.unwrap().recv(); diff --git a/src/libstd/uv_ll.rs b/src/libstd/uv_ll.rs index 8d7a97e2e483c..ad3cfeb4a990d 100644 --- a/src/libstd/uv_ll.rs +++ b/src/libstd/uv_ll.rs @@ -780,23 +780,24 @@ extern mod rustrt { // FIXME ref #2064 unsafe fn rust_uv_tcp_connect(connect_ptr: *uv_connect_t, tcp_handle_ptr: *uv_tcp_t, - ++after_cb: *u8, - ++addr: *sockaddr_in) -> libc::c_int; + after_cb: *u8, + addr: *sockaddr_in) + -> libc::c_int; // FIXME ref #2064 unsafe fn rust_uv_tcp_bind(tcp_server: *uv_tcp_t, - ++addr: *sockaddr_in) -> libc::c_int; + addr: *sockaddr_in) -> libc::c_int; // FIXME ref #2064 unsafe fn rust_uv_tcp_connect6(connect_ptr: *uv_connect_t, tcp_handle_ptr: *uv_tcp_t, - ++after_cb: *u8, - ++addr: *sockaddr_in6) -> libc::c_int; + after_cb: *u8, + addr: *sockaddr_in6) -> libc::c_int; // FIXME ref #2064 unsafe fn rust_uv_tcp_bind6(tcp_server: *uv_tcp_t, - ++addr: *sockaddr_in6) -> libc::c_int; + addr: *sockaddr_in6) -> libc::c_int; unsafe fn rust_uv_tcp_getpeername(tcp_handle_ptr: *uv_tcp_t, - ++name: *sockaddr_in) -> libc::c_int; + name: *sockaddr_in) -> libc::c_int; unsafe fn rust_uv_tcp_getpeername6(tcp_handle_ptr: *uv_tcp_t, - ++name: *sockaddr_in6) ->libc::c_int; + name: *sockaddr_in6) ->libc::c_int; unsafe fn rust_uv_listen(stream: *libc::c_void, backlog: libc::c_int, cb: *u8) -> libc::c_int; @@ -804,7 +805,7 @@ extern mod rustrt { -> libc::c_int; unsafe fn rust_uv_write(req: *libc::c_void, stream: *libc::c_void, - ++buf_in: *uv_buf_t, + buf_in: *uv_buf_t, buf_cnt: libc::c_int, cb: *u8) -> libc::c_int; @@ -843,7 +844,7 @@ extern mod rustrt { unsafe fn rust_uv_addrinfo_as_sockaddr_in6(input: *addrinfo) -> *sockaddr_in6; unsafe fn rust_uv_malloc_buf_base_of(sug_size: libc::size_t) -> *u8; - unsafe fn rust_uv_free_base_of_buf(++buf: uv_buf_t); + unsafe fn rust_uv_free_base_of_buf(buf: uv_buf_t); unsafe fn rust_uv_get_stream_handle_from_connect_req( connect_req: *uv_connect_t) -> *uv_stream_t; @@ -864,8 +865,8 @@ extern mod rustrt { -> *libc::c_void; unsafe fn rust_uv_set_data_for_req(req: *libc::c_void, data: *libc::c_void); - unsafe fn rust_uv_get_base_from_buf(++buf: uv_buf_t) -> *u8; - unsafe fn rust_uv_get_len_from_buf(++buf: uv_buf_t) -> libc::size_t; + unsafe fn rust_uv_get_base_from_buf(buf: uv_buf_t) -> *u8; + unsafe fn rust_uv_get_len_from_buf(buf: uv_buf_t) -> libc::size_t; // sizeof testing helpers unsafe fn rust_uv_helper_uv_tcp_t_size() -> libc::c_uint; @@ -1258,7 +1259,7 @@ mod test { extern fn on_read_cb(stream: *uv_stream_t, nread: libc::ssize_t, - ++buf: uv_buf_t) { + buf: uv_buf_t) { unsafe { let nread = nread as int; debug!("CLIENT entering on_read_cb nred: %d", @@ -1444,7 +1445,7 @@ mod test { extern fn on_server_read_cb(client_stream_ptr: *uv_stream_t, nread: libc::ssize_t, - ++buf: uv_buf_t) { + buf: uv_buf_t) { unsafe { let nread = nread as int; if (nread > 0) { diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 9eb74f9e52961..0543295eb4e6d 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -390,8 +390,8 @@ pub impl Parser { // parse a ty_closure type fn parse_ty_closure(&self, sigil: ast::Sigil, - region: Option<@ast::Lifetime>) -> ty_ - { + region: Option<@ast::Lifetime>) + -> ty_ { /* (&|~|@) ['r] [pure|unsafe] [once] fn <'lt> (S) -> T @@ -773,20 +773,17 @@ pub impl Parser { return ty_rptr(opt_lifetime, mt); } - // parse an optional mode. - // XXX: Remove after snapshot. + // parse an optional, obsolete argument mode. fn parse_arg_mode(&self) { if self.eat(&token::BINOP(token::MINUS)) { self.obsolete(*self.span, ObsoleteMode); } else if self.eat(&token::ANDAND) { - // Ignore. + self.obsolete(*self.span, ObsoleteMode); } else if self.eat(&token::BINOP(token::PLUS)) { if self.eat(&token::BINOP(token::PLUS)) { - // ++ mode is obsolete, but we need a snapshot - // to stop parsing it. - // Ignore. + self.obsolete(*self.span, ObsoleteMode); } else { - // Ignore. + self.obsolete(*self.span, ObsoleteMode); } } else { // Ignore. diff --git a/src/libsyntax/util/interner.rs b/src/libsyntax/util/interner.rs index e3a8727762218..23084c34209e9 100644 --- a/src/libsyntax/util/interner.rs +++ b/src/libsyntax/util/interner.rs @@ -84,7 +84,7 @@ pub impl Interner { * for another case of this. */ macro_rules! interner_key ( () => (cast::transmute::<(uint, uint), - &fn(+v: @@::parse::token::ident_interner)>( + &fn(v: @@::parse::token::ident_interner)>( (-3 as uint, 0u))) ) From 16a0125e4169628ea74a486f53571b358c505fc6 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Tue, 7 May 2013 17:57:58 -0700 Subject: [PATCH 302/410] libcore: Fix tests. --- src/libcore/comm.rs | 7 ++- src/libcore/flate.rs | 5 +- src/libcore/hash.rs | 6 +- src/libcore/io.rs | 6 +- src/libcore/os.rs | 2 +- src/libcore/pipes.rs | 7 ++- src/libcore/rand.rs | 44 +++++++------- src/libcore/task/mod.rs | 99 ++++++++++++++++--------------- src/libcore/unstable/weak_task.rs | 8 ++- src/librustc/middle/astencode.rs | 2 +- src/libstd/arc.rs | 12 +++- src/libstd/bitv.rs | 16 ++--- src/libstd/flatpipes.rs | 4 +- src/libstd/future.rs | 7 ++- src/libstd/net_tcp.rs | 2 +- src/libstd/sort.rs | 14 +++-- src/libstd/timer.rs | 5 +- src/libstd/treemap.rs | 2 +- 18 files changed, 135 insertions(+), 113 deletions(-) diff --git a/src/libcore/comm.rs b/src/libcore/comm.rs index 5b2bb3a132f72..7eaa853549336 100644 --- a/src/libcore/comm.rs +++ b/src/libcore/comm.rs @@ -596,9 +596,10 @@ mod test { c1.send(~"abc"); - match (p1, p2).select() { - Right(_) => fail!(), - _ => () + let mut tuple = (p1, p2); + match tuple.select() { + Right(_) => fail!(), + _ => (), } c2.send(123); diff --git a/src/libcore/flate.rs b/src/libcore/flate.rs index ba10f97e626c4..29d0eb422d50a 100644 --- a/src/libcore/flate.rs +++ b/src/libcore/flate.rs @@ -84,10 +84,11 @@ pub fn inflate_bytes(bytes: &const [u8]) -> ~[u8] { #[test] #[allow(non_implicitly_copyable_typarams)] fn test_flate_round_trip() { - let r = rand::rng(); + let mut r = rand::rng(); let mut words = ~[]; for 20.times { - words.push(r.gen_bytes(r.gen_uint_range(1, 10))); + let range = r.gen_uint_range(1, 10); + words.push(r.gen_bytes(range)); } for 20.times { let mut in = ~[]; diff --git a/src/libcore/hash.rs b/src/libcore/hash.rs index 486f0e096e8ac..d535abf8ead7c 100644 --- a/src/libcore/hash.rs +++ b/src/libcore/hash.rs @@ -473,10 +473,10 @@ mod tests { let k1 = 0x_0f_0e_0d_0c_0b_0a_09_08_u64; let mut buf : ~[u8] = ~[]; let mut t = 0; - let stream_inc = &State(k0,k1); - let stream_full = &State(k0,k1); + let mut stream_inc = SipState::new(k0, k1); + let mut stream_full = SipState::new(k0, k1); - fn to_hex_str(r: &[u8, ..8]) -> ~str { + fn to_hex_str(r: &[u8, ..8]) -> ~str { let mut s = ~""; for vec::each(*r) |b| { s += uint::to_str_radix(*b as uint, 16u); diff --git a/src/libcore/io.rs b/src/libcore/io.rs index a00de5ff31177..1bb754fc2be42 100644 --- a/src/libcore/io.rs +++ b/src/libcore/io.rs @@ -1886,15 +1886,15 @@ mod tests { fn bytes_buffer_overwrite() { let wr = BytesWriter(); wr.write(~[0u8, 1u8, 2u8, 3u8]); - assert!(wr.bytes == ~[0u8, 1u8, 2u8, 3u8]); + assert!(*wr.bytes == ~[0u8, 1u8, 2u8, 3u8]); wr.seek(-2, SeekCur); wr.write(~[4u8, 5u8, 6u8, 7u8]); - assert!(wr.bytes == ~[0u8, 1u8, 4u8, 5u8, 6u8, 7u8]); + assert!(*wr.bytes == ~[0u8, 1u8, 4u8, 5u8, 6u8, 7u8]); wr.seek(-2, SeekEnd); wr.write(~[8u8]); wr.seek(1, SeekSet); wr.write(~[9u8]); - assert!(wr.bytes == ~[0u8, 9u8, 4u8, 5u8, 8u8, 7u8]); + assert!(*wr.bytes == ~[0u8, 9u8, 4u8, 5u8, 8u8, 7u8]); } #[test] diff --git a/src/libcore/os.rs b/src/libcore/os.rs index 5a7f01706b4f4..afb9641485859 100644 --- a/src/libcore/os.rs +++ b/src/libcore/os.rs @@ -1435,7 +1435,7 @@ mod tests { } fn make_rand_name() -> ~str { - let rng = rand::rng(); + let mut rng = rand::rng(); let n = ~"TEST" + rng.gen_str(10u); assert!(getenv(n).is_none()); n diff --git a/src/libcore/pipes.rs b/src/libcore/pipes.rs index 1fda5a97a375a..8301254fbdd18 100644 --- a/src/libcore/pipes.rs +++ b/src/libcore/pipes.rs @@ -894,9 +894,10 @@ mod test { c1.send(~"abc"); - match (p1, p2).select() { - Right(_) => fail!(), - _ => () + let mut tuple = (p1, p2); + match tuple.select() { + Right(_) => fail!(), + _ => (), } c2.send(123); diff --git a/src/libcore/rand.rs b/src/libcore/rand.rs index cb212efa363e2..f11840c95d5ac 100644 --- a/src/libcore/rand.rs +++ b/src/libcore/rand.rs @@ -879,8 +879,8 @@ mod tests { #[test] fn test_rng_seeded() { let seed = seed(); - let ra = IsaacRng::new_seeded(seed); - let rb = IsaacRng::new_seeded(seed); + let mut ra = IsaacRng::new_seeded(seed); + let mut rb = IsaacRng::new_seeded(seed); assert!(ra.gen_str(100u) == rb.gen_str(100u)); } @@ -888,15 +888,15 @@ mod tests { fn test_rng_seeded_custom_seed() { // much shorter than generated seeds which are 1024 bytes let seed = [2u8, 32u8, 4u8, 32u8, 51u8]; - let ra = IsaacRng::new_seeded(seed); - let rb = IsaacRng::new_seeded(seed); + let mut ra = IsaacRng::new_seeded(seed); + let mut rb = IsaacRng::new_seeded(seed); assert!(ra.gen_str(100u) == rb.gen_str(100u)); } #[test] fn test_rng_seeded_custom_seed2() { let seed = [2u8, 32u8, 4u8, 32u8, 51u8]; - let ra = IsaacRng::new_seeded(seed); + let mut ra = IsaacRng::new_seeded(seed); // Regression test that isaac is actually using the above vector let r = ra.next(); error!("%?", r); @@ -906,7 +906,7 @@ mod tests { #[test] fn test_gen_int_range() { - let r = rng(); + let mut r = rng(); let a = r.gen_int_range(-3, 42); assert!(a >= -3 && a < 42); assert!(r.gen_int_range(0, 1) == 0); @@ -917,12 +917,13 @@ mod tests { #[should_fail] #[ignore(cfg(windows))] fn test_gen_int_from_fail() { - rng().gen_int_range(5, -2); + let mut r = rng(); + r.gen_int_range(5, -2); } #[test] fn test_gen_uint_range() { - let r = rng(); + let mut r = rng(); let a = r.gen_uint_range(3u, 42u); assert!(a >= 3u && a < 42u); assert!(r.gen_uint_range(0u, 1u) == 0u); @@ -933,12 +934,13 @@ mod tests { #[should_fail] #[ignore(cfg(windows))] fn test_gen_uint_range_fail() { - rng().gen_uint_range(5u, 2u); + let mut r = rng(); + r.gen_uint_range(5u, 2u); } #[test] fn test_gen_float() { - let r = rng(); + let mut r = rng(); let a = r.gen::(); let b = r.gen::(); debug!((a, b)); @@ -946,14 +948,14 @@ mod tests { #[test] fn test_gen_weighted_bool() { - let r = rng(); + let mut r = rng(); assert!(r.gen_weighted_bool(0u) == true); assert!(r.gen_weighted_bool(1u) == true); } #[test] fn test_gen_str() { - let r = rng(); + let mut r = rng(); debug!(r.gen_str(10u)); debug!(r.gen_str(10u)); debug!(r.gen_str(10u)); @@ -964,7 +966,7 @@ mod tests { #[test] fn test_gen_bytes() { - let r = rng(); + let mut r = rng(); assert!(r.gen_bytes(0u).len() == 0u); assert!(r.gen_bytes(10u).len() == 10u); assert!(r.gen_bytes(16u).len() == 16u); @@ -972,13 +974,13 @@ mod tests { #[test] fn test_choose() { - let r = rng(); + let mut r = rng(); assert!(r.choose([1, 1, 1]) == 1); } #[test] fn test_choose_option() { - let r = rng(); + let mut r = rng(); let x: Option = r.choose_option([]); assert!(x.is_none()); assert!(r.choose_option([1, 1, 1]) == Some(1)); @@ -986,7 +988,7 @@ mod tests { #[test] fn test_choose_weighted() { - let r = rng(); + let mut r = rng(); assert!(r.choose_weighted(~[ Weighted { weight: 1u, item: 42 }, ]) == 42); @@ -998,7 +1000,7 @@ mod tests { #[test] fn test_choose_weighted_option() { - let r = rng(); + let mut r = rng(); assert!(r.choose_weighted_option(~[ Weighted { weight: 1u, item: 42 }, ]) == Some(42)); @@ -1012,7 +1014,7 @@ mod tests { #[test] fn test_weighted_vec() { - let r = rng(); + let mut r = rng(); let empty: ~[int] = ~[]; assert!(r.weighted_vec(~[]) == empty); assert!(r.weighted_vec(~[ @@ -1024,7 +1026,7 @@ mod tests { #[test] fn test_shuffle() { - let r = rng(); + let mut r = rng(); let empty: ~[int] = ~[]; assert!(r.shuffle(~[]) == empty); assert!(r.shuffle(~[1, 1, 1]) == ~[1, 1, 1]); @@ -1032,7 +1034,7 @@ mod tests { #[test] fn test_task_rng() { - let r = task_rng(); + let mut r = task_rng(); r.gen::(); assert!(r.shuffle(~[1, 1, 1]) == ~[1, 1, 1]); assert!(r.gen_uint_range(0u, 1u) == 0u); @@ -1079,7 +1081,7 @@ mod tests { let rt_rng = do vec::as_imm_buf(seed) |p, sz| { rustrt::rand_new_seeded(p, sz as size_t) }; - let rng = IsaacRng::new_seeded(seed); + let mut rng = IsaacRng::new_seeded(seed); for 10000.times { assert_eq!(rng.next(), rustrt::rand_next(rt_rng)); diff --git a/src/libcore/task/mod.rs b/src/libcore/task/mod.rs index aeb669efa58fc..e58aa14572b7e 100644 --- a/src/libcore/task/mod.rs +++ b/src/libcore/task/mod.rs @@ -597,12 +597,13 @@ pub unsafe fn atomically(f: &fn() -> U) -> U { #[test] #[should_fail] #[ignore(cfg(windows))] fn test_cant_dup_task_builder() { - let b = task().unlinked(); - do b.spawn { } + let mut builder = task(); + builder.unlinked(); + do builder.spawn {} // FIXME(#3724): For now, this is a -runtime- failure, because we haven't // got move mode on self. When 3724 is fixed, this test should fail to // compile instead, and should go in tests/compile-fail. - do b.spawn { } // b should have been consumed by the previous call + do builder.spawn {} // b should have been consumed by the previous call } // The following 8 tests test the following 2^3 combinations: @@ -645,43 +646,31 @@ fn test_spawn_unlinked_sup_fail_down() { #[test] #[should_fail] #[ignore(cfg(windows))] fn test_spawn_linked_sup_fail_up() { // child fails; parent fails let (po, _ch) = stream::<()>(); + // Unidirectional "parenting" shouldn't override bidirectional linked. // We have to cheat with opts - the interface doesn't support them because // they don't make sense (redundant with task().supervised()). - let opts = { - let mut opts = default_task_opts(); - opts.linked = true; - opts.supervised = true; - opts - }; + let mut b0 = task(); + b0.opts.linked = true; + b0.opts.supervised = true; - let b0 = task(); - let b1 = TaskBuilder { - opts: opts, - can_not_copy: None, - .. b0 - }; - do b1.spawn { fail!(); } + do b0.spawn { + fail!(); + } po.recv(); // We should get punted awake } #[test] #[should_fail] #[ignore(cfg(windows))] fn test_spawn_linked_sup_fail_down() { // parent fails; child fails // We have to cheat with opts - the interface doesn't support them because // they don't make sense (redundant with task().supervised()). - let opts = { - let mut opts = default_task_opts(); - opts.linked = true; - opts.supervised = true; - opts - }; - - let b0 = task(); - let b1 = TaskBuilder { - opts: opts, - can_not_copy: None, - .. b0 - }; - do b1.spawn { loop { task::yield(); } } + let mut b0 = task(); + b0.opts.linked = true; + b0.opts.supervised = true; + do b0.spawn { + loop { + task::yield(); + } + } fail!(); // *both* mechanisms would be wrong if this didn't kill the child } #[test] #[should_fail] #[ignore(cfg(windows))] @@ -700,7 +689,13 @@ fn test_spawn_linked_unsup_fail_down() { // parent fails; child fails #[test] #[should_fail] #[ignore(cfg(windows))] fn test_spawn_linked_unsup_default_opts() { // parent fails; child fails // Make sure the above test is the same as this one. - do task().linked().spawn { loop { task::yield(); } } + let mut builder = task(); + builder.linked(); + do builder.spawn { + loop { + task::yield(); + } + } fail!(); } @@ -758,7 +753,8 @@ fn test_spawn_linked_sup_propagate_sibling() { #[test] fn test_run_basic() { let (po, ch) = stream::<()>(); - do task().spawn { + let mut builder = task(); + do builder.spawn { ch.send(()); } po.recv(); @@ -772,18 +768,18 @@ struct Wrapper { #[test] fn test_add_wrapper() { let (po, ch) = stream::<()>(); - let b0 = task(); - let ch = Wrapper { f: Some(ch) }; - let b1 = do b0.add_wrapper |body| { - let ch = Wrapper { f: Some(ch.f.swap_unwrap()) }; + let mut b0 = task(); + let ch = Cell(ch); + do b0.add_wrapper |body| { + let ch = Cell(ch.take()); let result: ~fn() = || { - let ch = ch.f.swap_unwrap(); + let mut ch = ch.take(); body(); ch.send(()); }; result }; - do b1.spawn { } + do b0.spawn { } po.recv(); } @@ -791,12 +787,16 @@ fn test_add_wrapper() { #[ignore(cfg(windows))] fn test_future_result() { let mut result = None; - do task().future_result(|r| { result = Some(r); }).spawn { } + let mut builder = task(); + builder.future_result(|r| result = Some(r)); + do builder.spawn {} assert!(result.unwrap().recv() == Success); result = None; - do task().future_result(|r| - { result = Some(r); }).unlinked().spawn { + let mut builder = task(); + builder.future_result(|r| result = Some(r)); + builder.unlinked(); + do builder.spawn { fail!(); } assert!(result.unwrap().recv() == Failure); @@ -804,7 +804,9 @@ fn test_future_result() { #[test] #[should_fail] #[ignore(cfg(windows))] fn test_back_to_the_future_result() { - let _ = task().future_result(util::ignore).future_result(util::ignore); + let mut builder = task(); + builder.future_result(util::ignore); + builder.future_result(util::ignore); } #[test] @@ -866,12 +868,12 @@ fn test_spawn_sched_childs_on_default_sched() { // Assuming tests run on the default scheduler let default_id = unsafe { rt::rust_get_sched_id() }; - let ch = Wrapper { f: Some(ch) }; + let ch = Cell(ch); do spawn_sched(SingleThreaded) { let parent_sched_id = unsafe { rt::rust_get_sched_id() }; - let ch = Wrapper { f: Some(ch.f.swap_unwrap()) }; + let ch = Cell(ch.take()); do spawn { - let ch = ch.f.swap_unwrap(); + let ch = ch.take(); let child_sched_id = unsafe { rt::rust_get_sched_id() }; assert!(parent_sched_id != child_sched_id); assert!(child_sched_id == default_id); @@ -979,7 +981,8 @@ fn test_avoid_copying_the_body_spawn() { #[test] fn test_avoid_copying_the_body_task_spawn() { do avoid_copying_the_body |f| { - do task().spawn || { + let mut builder = task(); + do builder.spawn || { f(); } } @@ -1006,7 +1009,9 @@ fn test_avoid_copying_the_body_unlinked() { #[test] fn test_platform_thread() { let (po, ch) = stream(); - do task().sched_mode(PlatformThread).spawn { + let mut builder = task(); + builder.sched_mode(PlatformThread); + do builder.spawn { ch.send(()); } po.recv(); diff --git a/src/libcore/unstable/weak_task.rs b/src/libcore/unstable/weak_task.rs index 381083e6031b4..8670bcfcd9a05 100644 --- a/src/libcore/unstable/weak_task.rs +++ b/src/libcore/unstable/weak_task.rs @@ -191,12 +191,14 @@ fn test_select_stream_and_oneshot() { use comm::select2i; use either::{Left, Right}; - let (port, chan) = stream(); + let mut (port, chan) = stream(); + let port = Cell(port); let (waitport, waitchan) = stream(); do spawn { unsafe { - do weaken_task |signal| { - match select2i(&port, &signal) { + do weaken_task |mut signal| { + let mut port = port.take(); + match select2i(&mut port, &mut signal) { Left(*) => (), Right(*) => fail!() } diff --git a/src/librustc/middle/astencode.rs b/src/librustc/middle/astencode.rs index f3eac7995e8a1..c223ff821c268 100644 --- a/src/librustc/middle/astencode.rs +++ b/src/librustc/middle/astencode.rs @@ -1237,7 +1237,7 @@ fn test_simplification() { let ext_cx = mk_ctxt(); let item_in = ast::ii_item(quote_item!( fn new_int_alist() -> alist { - fn eq_int(&&a: int, &&b: int) -> bool { a == b } + fn eq_int(a: int, b: int) -> bool { a == b } return alist {eq_fn: eq_int, data: ~[]}; } ).get()); diff --git a/src/libstd/arc.rs b/src/libstd/arc.rs index 35cfd6c90bc76..d69839faa64bc 100644 --- a/src/libstd/arc.rs +++ b/src/libstd/arc.rs @@ -673,7 +673,9 @@ mod tests { let mut children = ~[]; for 5.times { let arc3 = (*arc).clone(); - do task::task().future_result(|r| children.push(r)).spawn { + let mut builder = task::task(); + builder.future_result(|r| children.push(r)); + do builder.spawn { do arc3.read |num| { assert!(*num >= 0); } @@ -681,11 +683,15 @@ mod tests { } // Wait for children to pass their asserts - for vec::each(children) |r| { r.recv(); } + for vec::each(children) |r| { + r.recv(); + } // Wait for writer to finish p.recv(); - do arc.read |num| { assert!(*num == 10); } + do arc.read |num| { + assert!(*num == 10); + } } #[test] fn test_rw_downgrade() { diff --git a/src/libstd/bitv.rs b/src/libstd/bitv.rs index ceb67fcabfa5b..461fb61ed5665 100644 --- a/src/libstd/bitv.rs +++ b/src/libstd/bitv.rs @@ -1426,7 +1426,7 @@ mod tests { #[bench] fn bench_uint_small(b: &mut BenchHarness) { - let r = rng(); + let mut r = rng(); let mut bitv = 0 as uint; do b.iter { bitv |= (1 << ((r.next() as uint) % uint::bits)); @@ -1435,7 +1435,7 @@ mod tests { #[bench] fn bench_small_bitv_small(b: &mut BenchHarness) { - let r = rng(); + let mut r = rng(); let mut bitv = SmallBitv::new(uint::bits); do b.iter { bitv.set((r.next() as uint) % uint::bits, true); @@ -1444,7 +1444,7 @@ mod tests { #[bench] fn bench_big_bitv_small(b: &mut BenchHarness) { - let r = rng(); + let mut r = rng(); let mut bitv = BigBitv::new(~[0]); do b.iter { bitv.set((r.next() as uint) % uint::bits, true); @@ -1453,7 +1453,7 @@ mod tests { #[bench] fn bench_big_bitv_big(b: &mut BenchHarness) { - let r = rng(); + let mut r = rng(); let mut storage = ~[]; storage.grow(bench_bits / uint::bits, &0); let mut bitv = BigBitv::new(storage); @@ -1464,7 +1464,7 @@ mod tests { #[bench] fn bench_bitv_big(b: &mut BenchHarness) { - let r = rng(); + let mut r = rng(); let mut bitv = Bitv::new(bench_bits, false); do b.iter { bitv.set((r.next() as uint) % bench_bits, true); @@ -1473,7 +1473,7 @@ mod tests { #[bench] fn bench_bitv_small(b: &mut BenchHarness) { - let r = rng(); + let mut r = rng(); let mut bitv = Bitv::new(uint::bits, false); do b.iter { bitv.set((r.next() as uint) % uint::bits, true); @@ -1482,7 +1482,7 @@ mod tests { #[bench] fn bench_bitv_set_small(b: &mut BenchHarness) { - let r = rng(); + let mut r = rng(); let mut bitv = BitvSet::new(); do b.iter { bitv.insert((r.next() as uint) % uint::bits); @@ -1491,7 +1491,7 @@ mod tests { #[bench] fn bench_bitv_set_big(b: &mut BenchHarness) { - let r = rng(); + let mut r = rng(); let mut bitv = BitvSet::new(); do b.iter { bitv.insert((r.next() as uint) % bench_bits); diff --git a/src/libstd/flatpipes.rs b/src/libstd/flatpipes.rs index 012f5c47830a9..0d4ef69a2753b 100644 --- a/src/libstd/flatpipes.rs +++ b/src/libstd/flatpipes.rs @@ -645,7 +645,7 @@ mod test { chan.send(10); - let bytes = copy chan.byte_chan.writer.bytes; + let bytes = copy *chan.byte_chan.writer.bytes; let reader = BufReader::new(bytes); let port = serial::reader_port(reader); @@ -692,7 +692,7 @@ mod test { chan.send(10); - let bytes = copy chan.byte_chan.writer.bytes; + let bytes = copy *chan.byte_chan.writer.bytes; let reader = BufReader::new(bytes); let port = pod::reader_port(reader); diff --git a/src/libstd/future.rs b/src/libstd/future.rs index eea9d56c97517..37eb1e02a8014 100644 --- a/src/libstd/future.rs +++ b/src/libstd/future.rs @@ -184,9 +184,9 @@ pub fn spawn(blk: ~fn() -> A) -> Future { #[allow(non_implicitly_copyable_typarams)] #[cfg(test)] mod test { - use future::*; + use core::cell::Cell; use core::comm::{oneshot, send_one}; use core::task; @@ -239,8 +239,9 @@ mod test { #[test] fn test_sendable_future() { let expected = ~"schlorf"; - let mut f = do spawn { copy expected }; - do task::spawn || { + let f = Cell(do spawn { copy expected }); + do task::spawn { + let mut f = f.take(); let actual = f.get(); assert!(actual == expected); } diff --git a/src/libstd/net_tcp.rs b/src/libstd/net_tcp.rs index 560e91f13a721..bc4168ba7f875 100644 --- a/src/libstd/net_tcp.rs +++ b/src/libstd/net_tcp.rs @@ -1963,7 +1963,7 @@ mod test { } fn tcp_write_single(sock: &TcpSocket, val: ~[u8]) { - let write_result_future = sock.write_future(val); + let mut write_result_future = sock.write_future(val); let write_result = write_result_future.get(); if result::is_err(&write_result) { debug!("tcp_write_single: write failed!"); diff --git a/src/libstd/sort.rs b/src/libstd/sort.rs index a18e2f47a7721..6994ca4aedb6d 100644 --- a/src/libstd/sort.rs +++ b/src/libstd/sort.rs @@ -946,8 +946,10 @@ mod test_tim_sort { impl Ord for CVal { fn lt(&self, other: &CVal) -> bool { - let rng = rand::rng(); - if rng.gen::() > 0.995 { fail!(~"It's happening!!!"); } + let mut rng = rand::rng(); + if rng.gen::() > 0.995 { + fail!(~"It's happening!!!"); + } (*self).val < other.val } fn le(&self, other: &CVal) -> bool { (*self).val <= other.val } @@ -995,7 +997,7 @@ mod test_tim_sort { #[should_fail] #[cfg(unix)] fn crash_test() { - let rng = rand::rng(); + let mut rng = rand::rng(); let mut arr = do vec::from_fn(1000) |_i| { CVal { val: rng.gen() } }; @@ -1015,7 +1017,7 @@ mod test_tim_sort { #[test] fn test_bad_Ord_impl() { - let rng = rand::rng(); + let mut rng = rand::rng(); let mut arr = do vec::from_fn(500) |_i| { DVal { val: rng.gen() } }; @@ -1067,7 +1069,7 @@ mod big_tests { } } - let rng = rand::rng(); + let mut rng = rand::rng(); for uint::range(lo, hi) |i| { let n = 1 << i; @@ -1138,7 +1140,7 @@ mod big_tests { } } - let rng = rand::rng(); + let mut rng = rand::rng(); for uint::range(lo, hi) |i| { let n = 1 << i; diff --git a/src/libstd/timer.rs b/src/libstd/timer.rs index 76aa4d615e1dc..0d15bbb54d321 100644 --- a/src/libstd/timer.rs +++ b/src/libstd/timer.rs @@ -219,7 +219,7 @@ mod test { let hl_loop_clone = hl_loop.clone(); do task::spawn { use core::rand::*; - let rng = rng(); + let mut rng = rng(); for old_iter::repeat(times) { sleep(&hl_loop_clone, rng.next() as uint % maxms); } @@ -276,7 +276,8 @@ mod test { let hl_loop = uv::global_loop::get(); for old_iter::repeat(times as uint) { - let expected = rand::rng().gen_str(16u); + let mut rng = rand::rng(); + let expected = rng.gen_str(16u); let (test_po, test_ch) = stream::<~str>(); let hl_loop_clone = hl_loop.clone(); do task::spawn() { diff --git a/src/libstd/treemap.rs b/src/libstd/treemap.rs index c8ab48e65c065..06ac1a71bacd0 100644 --- a/src/libstd/treemap.rs +++ b/src/libstd/treemap.rs @@ -848,7 +848,7 @@ mod test_treemap { check_equal(ctrl, &map); assert!(map.find(&5).is_none()); - let rng = rand::IsaacRng::new_seeded(&[42]); + let mut rng = rand::IsaacRng::new_seeded(&[42]); for 3.times { for 90.times { From 9d011ebf67272879b9883013f7796b7639ecfda3 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Tue, 7 May 2013 21:33:31 -0700 Subject: [PATCH 303/410] test: Fix tests. --- src/llvm | 2 +- src/test/auxiliary/cci_class_6.rs | 2 +- src/test/compile-fail/block-coerce-no.rs | 6 ++--- src/test/compile-fail/borrowck-pat-enum.rs | 4 ++-- src/test/compile-fail/borrowck-unary-move.rs | 4 ++-- ...lowed-deconstructing-destructing-struct.rs | 2 +- src/test/compile-fail/issue-2766-a.rs | 4 ++-- src/test/compile-fail/issue-3296.rs | 2 +- .../compile-fail/liveness-use-after-send.rs | 2 +- .../compile-fail/mutable-huh-ptr-assign.rs | 2 +- src/test/compile-fail/unique-vec-res.rs | 2 +- src/test/run-fail/morestack3.rs | 2 +- src/test/run-fail/morestack4.rs | 2 +- src/test/run-fail/unwind-move.rs | 2 +- src/test/run-pass/argument-passing.rs | 6 +++-- src/test/run-pass/auto-ref-sliceable.rs | 4 ++-- src/test/run-pass/bind-by-move.rs | 2 +- src/test/run-pass/borrowck-lend-args.rs | 4 ++-- .../run-pass/borrowck-mut-vec-as-imm-slice.rs | 2 +- .../run-pass/borrowck-newtype-issue-2573.rs | 2 +- src/test/run-pass/capture_nil.rs | 2 +- src/test/run-pass/child-outlives-parent.rs | 6 +++-- src/test/run-pass/class-poly-methods.rs | 2 +- src/test/run-pass/cleanup-copy-mode.rs | 2 +- src/test/run-pass/extern-pass-TwoU64s-ref.rs | 2 +- src/test/run-pass/extern-pub.rs | 6 ++--- src/test/run-pass/fn-bare-spawn.rs | 2 +- src/test/run-pass/foreign-struct.rs | 2 +- src/test/run-pass/intrinsic-move-val.rs | 4 ++-- src/test/run-pass/issue-2633-2.rs | 2 +- src/test/run-pass/issue-2718.rs | 24 +++++++++---------- src/test/run-pass/issue-2904.rs | 2 +- src/test/run-pass/issue-3656.rs | 2 +- src/test/run-pass/iter-min-max.rs | 2 +- src/test/run-pass/liveness-move-in-loop.rs | 2 +- src/test/run-pass/morestack5.rs | 2 +- src/test/run-pass/move-arg-2-unique.rs | 2 +- src/test/run-pass/move-arg-2.rs | 2 +- src/test/run-pass/move-arg.rs | 2 +- src/test/run-pass/move-nullary-fn.rs | 4 ++-- src/test/run-pass/operator-overloading.rs | 2 +- src/test/run-pass/option-unwrap.rs | 2 +- src/test/run-pass/pass-by-copy.rs | 4 ++-- src/test/run-pass/pipe-bank-proto.rs | 10 ++++---- src/test/run-pass/pipe-pingpong-bounded.rs | 4 ++-- src/test/run-pass/pipe-pingpong-proto.rs | 4 ++-- src/test/run-pass/reflect-visit-data.rs | 2 +- src/test/run-pass/regions-copy-closure.rs | 2 +- src/test/run-pass/regions-static-closure.rs | 2 +- src/test/run-pass/sendfn-spawn-with-fn-arg.rs | 2 +- src/test/run-pass/spawn.rs | 2 +- src/test/run-pass/spawn2.rs | 2 +- src/test/run-pass/static-method-test.rs | 14 +++++------ src/test/run-pass/struct-return.rs | 4 ++-- src/test/run-pass/task-comm-12.rs | 2 +- src/test/run-pass/task-life-0.rs | 2 +- src/test/run-pass/threads.rs | 2 +- src/test/run-pass/unique-fn-arg-move.rs | 2 +- src/test/run-pass/yield.rs | 2 +- src/test/run-pass/yield1.rs | 2 +- 60 files changed, 102 insertions(+), 98 deletions(-) diff --git a/src/llvm b/src/llvm index 2e9f0d21fe321..56dd407f4f97a 160000 --- a/src/llvm +++ b/src/llvm @@ -1 +1 @@ -Subproject commit 2e9f0d21fe321849a4759a01fc28eae82ef196d6 +Subproject commit 56dd407f4f97a01b8df6554c569170d2fc276fcb diff --git a/src/test/auxiliary/cci_class_6.rs b/src/test/auxiliary/cci_class_6.rs index b09606ea1e21d..7ad617cebdbb3 100644 --- a/src/test/auxiliary/cci_class_6.rs +++ b/src/test/auxiliary/cci_class_6.rs @@ -23,7 +23,7 @@ pub mod kitties { fn meow_count(&mut self) -> uint { self.meows } } - pub fn cat(in_x : uint, in_y : int, +in_info: ~[U]) -> cat { + pub fn cat(in_x : uint, in_y : int, in_info: ~[U]) -> cat { cat { meows: in_x, how_hungry: in_y, diff --git a/src/test/compile-fail/block-coerce-no.rs b/src/test/compile-fail/block-coerce-no.rs index bdde5144b04d1..f3ec875340550 100644 --- a/src/test/compile-fail/block-coerce-no.rs +++ b/src/test/compile-fail/block-coerce-no.rs @@ -12,9 +12,9 @@ // other tycons. fn coerce(b: &fn()) -> extern fn() { - fn lol(+f: extern fn(+v: &fn()) -> extern fn(), - +g: &fn()) -> extern fn() { return f(g); } - fn fn_id(+f: extern fn()) -> extern fn() { return f } + fn lol(f: extern fn(+v: &fn()) -> extern fn(), + g: &fn()) -> extern fn() { return f(g); } + fn fn_id(f: extern fn()) -> extern fn() { return f } return lol(fn_id, b); //~^ ERROR mismatched types } diff --git a/src/test/compile-fail/borrowck-pat-enum.rs b/src/test/compile-fail/borrowck-pat-enum.rs index c50357e8b9c62..f1cca89b227d6 100644 --- a/src/test/compile-fail/borrowck-pat-enum.rs +++ b/src/test/compile-fail/borrowck-pat-enum.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -fn match_ref(&&v: Option) -> int { +fn match_ref(v: Option) -> int { match v { Some(ref i) => { *i @@ -17,7 +17,7 @@ fn match_ref(&&v: Option) -> int { } } -fn match_ref_unused(&&v: Option) { +fn match_ref_unused(v: Option) { match v { Some(_) => {} None => {} diff --git a/src/test/compile-fail/borrowck-unary-move.rs b/src/test/compile-fail/borrowck-unary-move.rs index 107e478004abb..cf7529865118a 100644 --- a/src/test/compile-fail/borrowck-unary-move.rs +++ b/src/test/compile-fail/borrowck-unary-move.rs @@ -8,13 +8,13 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -fn foo(+x: ~int) -> int { +fn foo(x: ~int) -> int { let y = &*x; free(x); //~ ERROR cannot move out of `*x` because it is borrowed *y } -fn free(+_x: ~int) { +fn free(_x: ~int) { } fn main() { diff --git a/src/test/compile-fail/disallowed-deconstructing-destructing-struct.rs b/src/test/compile-fail/disallowed-deconstructing-destructing-struct.rs index 9019d338d0903..fa34c056794fc 100644 --- a/src/test/compile-fail/disallowed-deconstructing-destructing-struct.rs +++ b/src/test/compile-fail/disallowed-deconstructing-destructing-struct.rs @@ -18,7 +18,7 @@ impl Drop for X { } } -fn unwrap(+x: X) -> ~str { +fn unwrap(x: X) -> ~str { let X { x: y } = x; //~ ERROR deconstructing struct not allowed in pattern y } diff --git a/src/test/compile-fail/issue-2766-a.rs b/src/test/compile-fail/issue-2766-a.rs index 5e3eb9ef09bc6..5b55cc772fde8 100644 --- a/src/test/compile-fail/issue-2766-a.rs +++ b/src/test/compile-fail/issue-2766-a.rs @@ -15,10 +15,10 @@ pub mod stream { use core::pipes; pub impl Stream { - pub fn recv() -> extern fn(+v: Stream) -> ::stream::Stream { + pub fn recv() -> extern fn(v: Stream) -> ::stream::Stream { // resolve really should report just one error here. // Change the test case when it changes. - pub fn recv(+pipe: Stream) -> ::stream::Stream { //~ ERROR attempt to use a type argument out of scope + pub fn recv(pipe: Stream) -> ::stream::Stream { //~ ERROR attempt to use a type argument out of scope //~^ ERROR use of undeclared type name //~^^ ERROR attempt to use a type argument out of scope //~^^^ ERROR use of undeclared type name diff --git a/src/test/compile-fail/issue-3296.rs b/src/test/compile-fail/issue-3296.rs index 00425825e3ff2..062ee8fd01e46 100644 --- a/src/test/compile-fail/issue-3296.rs +++ b/src/test/compile-fail/issue-3296.rs @@ -18,7 +18,7 @@ struct Foo { a: () } -fn deserialize_foo<__D: std::serialization::deserializer>(&&__d: __D) { +fn deserialize_foo<__D: std::serialization::deserializer>(__d: __D) { } fn main() { let des = Deserializer(); let foo = deserialize_foo(des); } diff --git a/src/test/compile-fail/liveness-use-after-send.rs b/src/test/compile-fail/liveness-use-after-send.rs index fdc0392a74c7c..23d3fff01cf3c 100644 --- a/src/test/compile-fail/liveness-use-after-send.rs +++ b/src/test/compile-fail/liveness-use-after-send.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -fn send(ch: _chan, +data: T) { +fn send(ch: _chan, data: T) { debug!(ch); debug!(data); fail!(); diff --git a/src/test/compile-fail/mutable-huh-ptr-assign.rs b/src/test/compile-fail/mutable-huh-ptr-assign.rs index 6b3fd4f715384..c907eb4be49f8 100644 --- a/src/test/compile-fail/mutable-huh-ptr-assign.rs +++ b/src/test/compile-fail/mutable-huh-ptr-assign.rs @@ -11,7 +11,7 @@ extern mod std; fn main() { - unsafe fn f(&&v: *const int) { + unsafe fn f(v: *const int) { *v = 1 //~ ERROR cannot assign } diff --git a/src/test/compile-fail/unique-vec-res.rs b/src/test/compile-fail/unique-vec-res.rs index a3c51e2b7b1fc..003e8ccf30956 100644 --- a/src/test/compile-fail/unique-vec-res.rs +++ b/src/test/compile-fail/unique-vec-res.rs @@ -21,7 +21,7 @@ impl Drop for r { } } -fn f(+_i: ~[T], +_j: ~[T]) { +fn f(_i: ~[T], _j: ~[T]) { } fn main() { diff --git a/src/test/run-fail/morestack3.rs b/src/test/run-fail/morestack3.rs index 14fc40a43cc9a..012e9d19b1218 100644 --- a/src/test/run-fail/morestack3.rs +++ b/src/test/run-fail/morestack3.rs @@ -14,7 +14,7 @@ extern mod std; -fn getbig_and_fail(&&i: int) { +fn getbig_and_fail(i: int) { let _r = and_then_get_big_again(5); if i != 0 { getbig_and_fail(i - 1); diff --git a/src/test/run-fail/morestack4.rs b/src/test/run-fail/morestack4.rs index e45853937037e..6fc187491cf8c 100644 --- a/src/test/run-fail/morestack4.rs +++ b/src/test/run-fail/morestack4.rs @@ -14,7 +14,7 @@ extern mod std; -fn getbig_and_fail(&&i: int) { +fn getbig_and_fail(i: int) { let r = and_then_get_big_again(5); if i != 0 { getbig_and_fail(i - 1); diff --git a/src/test/run-fail/unwind-move.rs b/src/test/run-fail/unwind-move.rs index 51e2eaa44fa37..8f1b34d17cd99 100644 --- a/src/test/run-fail/unwind-move.rs +++ b/src/test/run-fail/unwind-move.rs @@ -9,7 +9,7 @@ // except according to those terms. // error-pattern:fail -fn f(+_a: @int) { +fn f(_a: @int) { fail!(); } diff --git a/src/test/run-pass/argument-passing.rs b/src/test/run-pass/argument-passing.rs index d61c1214633fc..8c84187ff6f06 100644 --- a/src/test/run-pass/argument-passing.rs +++ b/src/test/run-pass/argument-passing.rs @@ -10,9 +10,11 @@ // xfail-fast -struct X { x: int } +struct X { + x: int +} -fn f1(a: &mut X, b: &mut int, +c: int) -> int { +fn f1(a: &mut X, b: &mut int, c: int) -> int { let r = a.x + *b + c; a.x = 0; *b = 10; diff --git a/src/test/run-pass/auto-ref-sliceable.rs b/src/test/run-pass/auto-ref-sliceable.rs index 03e847e237d3a..f74d78f99d0b2 100644 --- a/src/test/run-pass/auto-ref-sliceable.rs +++ b/src/test/run-pass/auto-ref-sliceable.rs @@ -9,11 +9,11 @@ // except according to those terms. trait Pushable { - fn push_val(&mut self, +t: T); + fn push_val(&mut self, t: T); } impl Pushable for ~[T] { - fn push_val(&mut self, +t: T) { + fn push_val(&mut self, t: T) { self.push(t); } } diff --git a/src/test/run-pass/bind-by-move.rs b/src/test/run-pass/bind-by-move.rs index d3d0e48f5b0f7..8752102c3a513 100644 --- a/src/test/run-pass/bind-by-move.rs +++ b/src/test/run-pass/bind-by-move.rs @@ -11,7 +11,7 @@ // xfail-fast extern mod std; use std::arc; -fn dispose(+_x: arc::ARC) { unsafe { } } +fn dispose(_x: arc::ARC) { unsafe { } } pub fn main() { let p = arc::ARC(true); diff --git a/src/test/run-pass/borrowck-lend-args.rs b/src/test/run-pass/borrowck-lend-args.rs index 0d51993e226ef..a912e1ef65c42 100644 --- a/src/test/run-pass/borrowck-lend-args.rs +++ b/src/test/run-pass/borrowck-lend-args.rs @@ -10,7 +10,7 @@ fn borrow(_v: &int) {} -fn borrow_from_arg_imm_ref(&&v: ~int) { +fn borrow_from_arg_imm_ref(v: ~int) { borrow(v); } @@ -18,7 +18,7 @@ fn borrow_from_arg_mut_ref(v: &mut ~int) { borrow(*v); } -fn borrow_from_arg_copy(+v: ~int) { +fn borrow_from_arg_copy(v: ~int) { borrow(v); } diff --git a/src/test/run-pass/borrowck-mut-vec-as-imm-slice.rs b/src/test/run-pass/borrowck-mut-vec-as-imm-slice.rs index 6929a98d9e1a9..8f66faab01451 100644 --- a/src/test/run-pass/borrowck-mut-vec-as-imm-slice.rs +++ b/src/test/run-pass/borrowck-mut-vec-as-imm-slice.rs @@ -14,7 +14,7 @@ fn want_slice(v: &[int]) -> int { return sum; } -fn has_mut_vec(+v: ~[int]) -> int { +fn has_mut_vec(v: ~[int]) -> int { want_slice(v) } diff --git a/src/test/run-pass/borrowck-newtype-issue-2573.rs b/src/test/run-pass/borrowck-newtype-issue-2573.rs index 7724836b5db9e..5f0c7cad6191c 100644 --- a/src/test/run-pass/borrowck-newtype-issue-2573.rs +++ b/src/test/run-pass/borrowck-newtype-issue-2573.rs @@ -25,7 +25,7 @@ impl frob for foo { } // Override default mode so that we are passing by value -fn really_impure(++bar: baz) { +fn really_impure(bar: baz) { bar.baz = 3; } diff --git a/src/test/run-pass/capture_nil.rs b/src/test/run-pass/capture_nil.rs index 99d8fab4bba50..817891c114640 100644 --- a/src/test/run-pass/capture_nil.rs +++ b/src/test/run-pass/capture_nil.rs @@ -26,7 +26,7 @@ use core::comm::*; -fn foo(&&x: ()) -> Port<()> { +fn foo(x: ()) -> Port<()> { let (p, c) = stream::<()>(); do task::spawn() { c.send(x); diff --git a/src/test/run-pass/child-outlives-parent.rs b/src/test/run-pass/child-outlives-parent.rs index 50c6b82114326..4eb3cea3a2586 100644 --- a/src/test/run-pass/child-outlives-parent.rs +++ b/src/test/run-pass/child-outlives-parent.rs @@ -12,6 +12,8 @@ extern mod std; -fn child2(&&s: ~str) { } +fn child2(s: ~str) { } -pub fn main() { let x = task::spawn(|| child2(~"hi") ); } +pub fn main() { + let x = task::spawn(|| child2(~"hi")); +} diff --git a/src/test/run-pass/class-poly-methods.rs b/src/test/run-pass/class-poly-methods.rs index adcab8b40aa47..9774d8d14882e 100644 --- a/src/test/run-pass/class-poly-methods.rs +++ b/src/test/run-pass/class-poly-methods.rs @@ -22,7 +22,7 @@ pub impl cat { fn meow_count(&mut self) -> uint { self.meows } } -fn cat(in_x : uint, in_y : int, +in_info: ~[U]) -> cat { +fn cat(in_x : uint, in_y : int, in_info: ~[U]) -> cat { cat { meows: in_x, how_hungry: in_y, diff --git a/src/test/run-pass/cleanup-copy-mode.rs b/src/test/run-pass/cleanup-copy-mode.rs index b334f32f344b5..cb378da13ea60 100644 --- a/src/test/run-pass/cleanup-copy-mode.rs +++ b/src/test/run-pass/cleanup-copy-mode.rs @@ -9,7 +9,7 @@ // except according to those terms. // xfail-win32 -fn adder(+x: @int, +y: @int) -> int { return *x + *y; } +fn adder(x: @int, y: @int) -> int { return *x + *y; } fn failer() -> @int { fail!(); } pub fn main() { assert!(result::is_err(&task::try(|| { diff --git a/src/test/run-pass/extern-pass-TwoU64s-ref.rs b/src/test/run-pass/extern-pass-TwoU64s-ref.rs index 2b18dba90f7fe..19b99eaccc956 100644 --- a/src/test/run-pass/extern-pass-TwoU64s-ref.rs +++ b/src/test/run-pass/extern-pass-TwoU64s-ref.rs @@ -16,7 +16,7 @@ struct TwoU64s { } pub extern { - pub fn rust_dbg_extern_identity_TwoU64s(&&u: TwoU64s) -> TwoU64s; + pub fn rust_dbg_extern_identity_TwoU64s(u: TwoU64s) -> TwoU64s; } pub fn main() { diff --git a/src/test/run-pass/extern-pub.rs b/src/test/run-pass/extern-pub.rs index f9b0ccbb5480e..1cd709ee91b9d 100644 --- a/src/test/run-pass/extern-pub.rs +++ b/src/test/run-pass/extern-pub.rs @@ -1,7 +1,7 @@ extern { - pub unsafe fn vec_reserve_shared_actual(++t: *sys::TypeDesc, - ++v: **vec::raw::VecRepr, - ++n: libc::size_t); + pub unsafe fn vec_reserve_shared_actual(t: *sys::TypeDesc, + v: **vec::raw::VecRepr, + n: libc::size_t); } pub fn main() { diff --git a/src/test/run-pass/fn-bare-spawn.rs b/src/test/run-pass/fn-bare-spawn.rs index 857a8cdb3d02f..b78bd488bc6ea 100644 --- a/src/test/run-pass/fn-bare-spawn.rs +++ b/src/test/run-pass/fn-bare-spawn.rs @@ -14,7 +14,7 @@ fn spawn(val: T, f: extern fn(T)) { f(val); } -fn f(+i: int) { +fn f(i: int) { assert!(i == 100); } diff --git a/src/test/run-pass/foreign-struct.rs b/src/test/run-pass/foreign-struct.rs index 9ac17c27ed4ad..2dbc60e9a14ac 100644 --- a/src/test/run-pass/foreign-struct.rs +++ b/src/test/run-pass/foreign-struct.rs @@ -18,7 +18,7 @@ mod bindgen { #[nolink] pub extern { - pub fn printf(++v: void); + pub fn printf(v: void); } } diff --git a/src/test/run-pass/intrinsic-move-val.rs b/src/test/run-pass/intrinsic-move-val.rs index 966061a80856d..9f683d2089877 100644 --- a/src/test/run-pass/intrinsic-move-val.rs +++ b/src/test/run-pass/intrinsic-move-val.rs @@ -11,8 +11,8 @@ mod rusti { #[abi = "rust-intrinsic"] pub extern "rust-intrinsic" { - pub fn move_val_init(dst: &mut T, +src: T); - pub fn move_val(dst: &mut T, +src: T); + pub fn move_val_init(dst: &mut T, src: T); + pub fn move_val(dst: &mut T, src: T); } } diff --git a/src/test/run-pass/issue-2633-2.rs b/src/test/run-pass/issue-2633-2.rs index 2c3b4b71bb8e3..71a491b8a3955 100644 --- a/src/test/run-pass/issue-2633-2.rs +++ b/src/test/run-pass/issue-2633-2.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -fn a_val(&&x: ~int, +y: ~int) -> int { +fn a_val(x: ~int, y: ~int) -> int { *x + *y } diff --git a/src/test/run-pass/issue-2718.rs b/src/test/run-pass/issue-2718.rs index f54d3d39831f4..acd26a88a7361 100644 --- a/src/test/run-pass/issue-2718.rs +++ b/src/test/run-pass/issue-2718.rs @@ -53,23 +53,23 @@ pub mod pipes { // We should consider moving this to ::core::unsafe, although I // suspect graydon would want us to use void pointers instead. - pub unsafe fn uniquify(+x: *T) -> ~T { + pub unsafe fn uniquify(x: *T) -> ~T { unsafe { cast::transmute(x) } } - pub fn swap_state_acq(+dst: &mut state, src: state) -> state { + pub fn swap_state_acq(dst: &mut state, src: state) -> state { unsafe { transmute(rusti::atomic_xchg_acq(transmute(dst), src as int)) } } - pub fn swap_state_rel(+dst: &mut state, src: state) -> state { + pub fn swap_state_rel(dst: &mut state, src: state) -> state { unsafe { transmute(rusti::atomic_xchg_rel(transmute(dst), src as int)) } } - pub fn send(mut p: send_packet, +payload: T) { + pub fn send(mut p: send_packet, payload: T) { let mut p = p.unwrap(); let mut p = unsafe { uniquify(p) }; assert!((*p).payload.is_none()); @@ -229,7 +229,7 @@ pub mod pingpong { pub struct ping(::pipes::send_packet); pub struct pong(::pipes::send_packet); - pub fn liberate_ping(+p: ping) -> ::pipes::send_packet { + pub fn liberate_ping(p: ping) -> ::pipes::send_packet { unsafe { let addr : *::pipes::send_packet = match &p { &ping(ref x) => { cast::transmute(x) } @@ -240,7 +240,7 @@ pub mod pingpong { } } - pub fn liberate_pong(+p: pong) -> ::pipes::send_packet { + pub fn liberate_pong(p: pong) -> ::pipes::send_packet { unsafe { let addr : *::pipes::send_packet = match &p { &pong(ref x) => { cast::transmute(x) } @@ -262,14 +262,14 @@ pub mod pingpong { pub type ping = ::pipes::send_packet; pub type pong = ::pipes::recv_packet; - pub fn do_ping(+c: ping) -> pong { + pub fn do_ping(c: ping) -> pong { let (sp, rp) = ::pipes::entangle(); ::pipes::send(c, pingpong::ping(sp)); rp } - pub fn do_pong(+c: pong) -> (ping, ()) { + pub fn do_pong(c: pong) -> (ping, ()) { let packet = ::pipes::recv(c); if packet.is_none() { fail!(~"sender closed the connection") @@ -284,7 +284,7 @@ pub mod pingpong { pub type ping = ::pipes::recv_packet; pub type pong = ::pipes::send_packet; - pub fn do_ping(+c: ping) -> (pong, ()) { + pub fn do_ping(c: ping) -> (pong, ()) { let packet = ::pipes::recv(c); if packet.is_none() { fail!(~"sender closed the connection") @@ -292,7 +292,7 @@ pub mod pingpong { (pingpong::liberate_ping(packet.unwrap()), ()) } - pub fn do_pong(+c: pong) -> ping { + pub fn do_pong(c: pong) -> ping { let (sp, rp) = ::pipes::entangle(); ::pipes::send(c, pingpong::pong(sp)); rp @@ -300,14 +300,14 @@ pub mod pingpong { } } -fn client(+chan: pingpong::client::ping) { +fn client(chan: pingpong::client::ping) { let chan = pingpong::client::do_ping(chan); error!(~"Sent ping"); let (_chan, _data) = pingpong::client::do_pong(chan); error!(~"Received pong"); } -fn server(+chan: pingpong::server::ping) { +fn server(chan: pingpong::server::ping) { let (chan, _data) = pingpong::server::do_ping(chan); error!(~"Received ping"); let _chan = pingpong::server::do_pong(chan); diff --git a/src/test/run-pass/issue-2904.rs b/src/test/run-pass/issue-2904.rs index 77cc6b3e1b5b5..112aab597f029 100644 --- a/src/test/run-pass/issue-2904.rs +++ b/src/test/run-pass/issue-2904.rs @@ -59,7 +59,7 @@ fn square_from_char(c: char) -> square { } } -fn read_board_grid(+in: rdr) -> ~[~[square]] { +fn read_board_grid(in: rdr) -> ~[~[square]] { let in = @in as @io::Reader; let mut grid = ~[]; for in.each_line |line| { diff --git a/src/test/run-pass/issue-3656.rs b/src/test/run-pass/issue-3656.rs index b59810fc18875..895e90beef4aa 100644 --- a/src/test/run-pass/issue-3656.rs +++ b/src/test/run-pass/issue-3656.rs @@ -24,7 +24,7 @@ struct KEYGEN { extern { // Bogus signature, just need to test if it compiles. - pub fn malloc(++data: KEYGEN); + pub fn malloc(data: KEYGEN); } pub fn main() { diff --git a/src/test/run-pass/iter-min-max.rs b/src/test/run-pass/iter-min-max.rs index a8831a9c5ad59..5f427861e7917 100644 --- a/src/test/run-pass/iter-min-max.rs +++ b/src/test/run-pass/iter-min-max.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -fn is_even(&&x: uint) -> bool { (x % 2u) == 0u } +fn is_even(x: uint) -> bool { (x % 2u) == 0u } pub fn main() { assert!([1u, 3u].min() == 1u); diff --git a/src/test/run-pass/liveness-move-in-loop.rs b/src/test/run-pass/liveness-move-in-loop.rs index 658885124c2ef..acdf388a8ff03 100644 --- a/src/test/run-pass/liveness-move-in-loop.rs +++ b/src/test/run-pass/liveness-move-in-loop.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -fn take(+x: int) -> int {x} +fn take(x: int) -> int {x} fn the_loop() { let mut list = ~[]; diff --git a/src/test/run-pass/morestack5.rs b/src/test/run-pass/morestack5.rs index 1d232cc5cbd8d..e1561db8b9162 100644 --- a/src/test/run-pass/morestack5.rs +++ b/src/test/run-pass/morestack5.rs @@ -12,7 +12,7 @@ extern mod std; -fn getbig(&&i: int) { +fn getbig(i: int) { if i != 0 { getbig(i - 1); } diff --git a/src/test/run-pass/move-arg-2-unique.rs b/src/test/run-pass/move-arg-2-unique.rs index dbc73c20e6b21..ed3cdc81c3179 100644 --- a/src/test/run-pass/move-arg-2-unique.rs +++ b/src/test/run-pass/move-arg-2-unique.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -fn test(+foo: ~~[int]) { assert!((foo[0] == 10)); } +fn test(foo: ~~[int]) { assert!((foo[0] == 10)); } pub fn main() { let x = ~~[10]; diff --git a/src/test/run-pass/move-arg-2.rs b/src/test/run-pass/move-arg-2.rs index 5cc309d1a3ea4..fc909da8b0323 100644 --- a/src/test/run-pass/move-arg-2.rs +++ b/src/test/run-pass/move-arg-2.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -fn test(+foo: @~[int]) { assert!((foo[0] == 10)); } +fn test(foo: @~[int]) { assert!((foo[0] == 10)); } pub fn main() { let x = @~[10]; diff --git a/src/test/run-pass/move-arg.rs b/src/test/run-pass/move-arg.rs index ca3a5509c5cfd..87db5cbe2f13e 100644 --- a/src/test/run-pass/move-arg.rs +++ b/src/test/run-pass/move-arg.rs @@ -8,6 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -fn test(+foo: int) { assert!((foo == 10)); } +fn test(foo: int) { assert!((foo == 10)); } pub fn main() { let x = 10; test(x); } diff --git a/src/test/run-pass/move-nullary-fn.rs b/src/test/run-pass/move-nullary-fn.rs index eb4c5f871af48..ab66bb936354f 100644 --- a/src/test/run-pass/move-nullary-fn.rs +++ b/src/test/run-pass/move-nullary-fn.rs @@ -9,9 +9,9 @@ // except according to those terms. // Issue #922 -fn f2(+thing: @fn()) { } +fn f2(thing: @fn()) { } -fn f(+thing: @fn()) { +fn f(thing: @fn()) { f2(thing); } diff --git a/src/test/run-pass/operator-overloading.rs b/src/test/run-pass/operator-overloading.rs index ffd6903d7f7a4..8c26dfa1fac56 100644 --- a/src/test/run-pass/operator-overloading.rs +++ b/src/test/run-pass/operator-overloading.rs @@ -40,7 +40,7 @@ impl ops::Not for Point { } impl ops::Index for Point { - fn index(&self, +x: &bool) -> int { + fn index(&self, x: &bool) -> int { if *x { self.x } else { self.y } } } diff --git a/src/test/run-pass/option-unwrap.rs b/src/test/run-pass/option-unwrap.rs index 0efed2708f485..8698d1f39a88f 100644 --- a/src/test/run-pass/option-unwrap.rs +++ b/src/test/run-pass/option-unwrap.rs @@ -23,7 +23,7 @@ impl Drop for dtor { } } -fn unwrap(+o: Option) -> T { +fn unwrap(o: Option) -> T { match o { Some(v) => v, None => fail!() diff --git a/src/test/run-pass/pass-by-copy.rs b/src/test/run-pass/pass-by-copy.rs index c3ab589b66cf7..c4f328940c49f 100644 --- a/src/test/run-pass/pass-by-copy.rs +++ b/src/test/run-pass/pass-by-copy.rs @@ -8,8 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -fn magic(+x: A) { debug!(x); } -fn magic2(+x: @int) { debug!(x); } +fn magic(x: A) { debug!(x); } +fn magic2(x: @int) { debug!(x); } struct A { a: @int } diff --git a/src/test/run-pass/pipe-bank-proto.rs b/src/test/run-pass/pipe-bank-proto.rs index c4ce1434165e3..5e2be7e6d081a 100644 --- a/src/test/run-pass/pipe-bank-proto.rs +++ b/src/test/run-pass/pipe-bank-proto.rs @@ -48,12 +48,12 @@ macro_rules! move_it ( { $x:expr } => { unsafe { let y = *ptr::to_unsafe_ptr(&($x)); y } } ) -fn switch(+endp: pipes::RecvPacket, - f: &fn(+v: Option) -> U) -> U { +fn switch(endp: pipes::RecvPacket, + f: &fn(v: Option) -> U) -> U { f(pipes::try_recv(endp)) } -fn move_it(+x: T) -> T { x } +fn move_it(x: T) -> T { x } macro_rules! follow ( { @@ -68,7 +68,7 @@ macro_rules! follow ( ); ) -fn client_follow(+bank: bank::client::login) { +fn client_follow(bank: bank::client::login) { use bank::*; let bank = client::login(bank, ~"theincredibleholk", ~"1234"); @@ -89,7 +89,7 @@ fn client_follow(+bank: bank::client::login) { )); } -fn bank_client(+bank: bank::client::login) { +fn bank_client(bank: bank::client::login) { use bank::*; let bank = client::login(bank, ~"theincredibleholk", ~"1234"); diff --git a/src/test/run-pass/pipe-pingpong-bounded.rs b/src/test/run-pass/pipe-pingpong-bounded.rs index d11d5eb47bbb9..3c37371a5371c 100644 --- a/src/test/run-pass/pipe-pingpong-bounded.rs +++ b/src/test/run-pass/pipe-pingpong-bounded.rs @@ -91,7 +91,7 @@ mod test { use core::pipes::recv; use pingpong::{ping, pong}; - pub fn client(+chan: ::pingpong::client::ping) { + pub fn client(chan: ::pingpong::client::ping) { use pingpong::client; let chan = client::ping(chan); return; @@ -100,7 +100,7 @@ mod test { error!("Received pong"); } - pub fn server(+chan: ::pingpong::server::ping) { + pub fn server(chan: ::pingpong::server::ping) { use pingpong::server; let ping(chan) = recv(chan); return; diff --git a/src/test/run-pass/pipe-pingpong-proto.rs b/src/test/run-pass/pipe-pingpong-proto.rs index d1198f3611d15..5978438ef7635 100644 --- a/src/test/run-pass/pipe-pingpong-proto.rs +++ b/src/test/run-pass/pipe-pingpong-proto.rs @@ -29,7 +29,7 @@ mod test { use core::pipes::recv; use pingpong::{ping, pong}; - pub fn client(+chan: ::pingpong::client::ping) { + pub fn client(chan: ::pingpong::client::ping) { use pingpong::client; let chan = client::ping(chan); @@ -38,7 +38,7 @@ mod test { error!(~"Received pong"); } - pub fn server(+chan: ::pingpong::server::ping) { + pub fn server(chan: ::pingpong::server::ping) { use pingpong::server; let ping(chan) = recv(chan); diff --git a/src/test/run-pass/reflect-visit-data.rs b/src/test/run-pass/reflect-visit-data.rs index 5b01d24aa8be1..5255c13bead62 100644 --- a/src/test/run-pass/reflect-visit-data.rs +++ b/src/test/run-pass/reflect-visit-data.rs @@ -633,7 +633,7 @@ impl TyVisitor for my_visitor { fn visit_closure_ptr(&self, _ck: uint) -> bool { true } } -fn get_tydesc_for(&&_t: T) -> *TyDesc { +fn get_tydesc_for(_t: T) -> *TyDesc { get_tydesc::() } diff --git a/src/test/run-pass/regions-copy-closure.rs b/src/test/run-pass/regions-copy-closure.rs index 308528ef57200..2e9ff88f96e90 100644 --- a/src/test/run-pass/regions-copy-closure.rs +++ b/src/test/run-pass/regions-copy-closure.rs @@ -12,7 +12,7 @@ struct closure_box<'self> { cl: &'self fn(), } -fn box_it<'r>(+x: &'r fn()) -> closure_box<'r> { +fn box_it<'r>(x: &'r fn()) -> closure_box<'r> { closure_box {cl: x} } diff --git a/src/test/run-pass/regions-static-closure.rs b/src/test/run-pass/regions-static-closure.rs index 5221bc28fb838..eab057548ef5e 100644 --- a/src/test/run-pass/regions-static-closure.rs +++ b/src/test/run-pass/regions-static-closure.rs @@ -12,7 +12,7 @@ struct closure_box<'self> { cl: &'self fn(), } -fn box_it<'r>(+x: &'r fn()) -> closure_box<'r> { +fn box_it<'r>(x: &'r fn()) -> closure_box<'r> { closure_box {cl: x} } diff --git a/src/test/run-pass/sendfn-spawn-with-fn-arg.rs b/src/test/run-pass/sendfn-spawn-with-fn-arg.rs index afed0bd9ac3f8..2a69b2ca01779 100644 --- a/src/test/run-pass/sendfn-spawn-with-fn-arg.rs +++ b/src/test/run-pass/sendfn-spawn-with-fn-arg.rs @@ -12,7 +12,7 @@ use core::cell::Cell; pub fn main() { test05(); } -fn test05_start(&&f: ~fn(int)) { +fn test05_start(f: ~fn(int)) { f(22); } diff --git a/src/test/run-pass/spawn.rs b/src/test/run-pass/spawn.rs index 63c2b7da38f2f..9a5131ef23000 100644 --- a/src/test/run-pass/spawn.rs +++ b/src/test/run-pass/spawn.rs @@ -17,4 +17,4 @@ pub fn main() { task::spawn(|| child(10) ); } -fn child(&&i: int) { error!(i); assert!((i == 10)); } +fn child(i: int) { error!(i); assert!((i == 10)); } diff --git a/src/test/run-pass/spawn2.rs b/src/test/run-pass/spawn2.rs index e748a1636ea80..642babb5a1e5c 100644 --- a/src/test/run-pass/spawn2.rs +++ b/src/test/run-pass/spawn2.rs @@ -11,7 +11,7 @@ pub fn main() { task::spawn(|| child((10, 20, 30, 40, 50, 60, 70, 80, 90)) ); } -fn child(&&args: (int, int, int, int, int, int, int, int, int)) { +fn child(args: (int, int, int, int, int, int, int, int, int)) { let (i1, i2, i3, i4, i5, i6, i7, i8, i9) = args; error!(i1); error!(i2); diff --git a/src/test/run-pass/static-method-test.rs b/src/test/run-pass/static-method-test.rs index 973897cd14521..e06d09c564c00 100644 --- a/src/test/run-pass/static-method-test.rs +++ b/src/test/run-pass/static-method-test.rs @@ -13,7 +13,7 @@ // A trait for objects that can be used to do an if-then-else // (No actual need for this to be static, but it is a simple test.) trait bool_like { - fn select(b: Self, +x1: A, +x2: A) -> A; + fn select(b: Self, x1: A, x2: A) -> A; } fn andand(x1: T, x2: T) -> T { @@ -21,38 +21,38 @@ fn andand(x1: T, x2: T) -> T { } impl bool_like for bool { - fn select(&&b: bool, +x1: A, +x2: A) -> A { + fn select(b: bool, x1: A, x2: A) -> A { if b { x1 } else { x2 } } } impl bool_like for int { - fn select(&&b: int, +x1: A, +x2: A) -> A { + fn select(b: int, x1: A, x2: A) -> A { if b != 0 { x1 } else { x2 } } } // A trait for sequences that can be constructed imperatively. trait buildable { - fn build_sized(size: uint, builder: &fn(push: &fn(+v: A))) -> Self; + fn build_sized(size: uint, builder: &fn(push: &fn(v: A))) -> Self; } impl buildable for @[A] { #[inline(always)] - fn build_sized(size: uint, builder: &fn(push: &fn(+v: A))) -> @[A] { + fn build_sized(size: uint, builder: &fn(push: &fn(v: A))) -> @[A] { at_vec::build_sized(size, builder) } } impl buildable for ~[A] { #[inline(always)] - fn build_sized(size: uint, builder: &fn(push: &fn(+v: A))) -> ~[A] { + fn build_sized(size: uint, builder: &fn(push: &fn(v: A))) -> ~[A] { vec::build_sized(size, builder) } } #[inline(always)] -fn build>(builder: &fn(push: &fn(+v: A))) -> B { +fn build>(builder: &fn(push: &fn(v: A))) -> B { buildable::build_sized(4, builder) } diff --git a/src/test/run-pass/struct-return.rs b/src/test/run-pass/struct-return.rs index 5427ee38b430c..7ac74fd52175f 100644 --- a/src/test/run-pass/struct-return.rs +++ b/src/test/run-pass/struct-return.rs @@ -16,8 +16,8 @@ mod rustrt { #[nolink] pub extern { - pub fn debug_abi_1(++q: Quad) -> Quad; - pub fn debug_abi_2(++f: Floats) -> Floats; + pub fn debug_abi_1(q: Quad) -> Quad; + pub fn debug_abi_2(f: Floats) -> Floats; } } diff --git a/src/test/run-pass/task-comm-12.rs b/src/test/run-pass/task-comm-12.rs index e61a855b42941..0f0b82d7c21df 100644 --- a/src/test/run-pass/task-comm-12.rs +++ b/src/test/run-pass/task-comm-12.rs @@ -12,7 +12,7 @@ extern mod std; pub fn main() { test00(); } -fn start(&&task_number: int) { debug!("Started / Finished task."); } +fn start(task_number: int) { debug!("Started / Finished task."); } fn test00() { let i: int = 0; diff --git a/src/test/run-pass/task-life-0.rs b/src/test/run-pass/task-life-0.rs index 3e27ffb415239..9885c5d6f3fc0 100644 --- a/src/test/run-pass/task-life-0.rs +++ b/src/test/run-pass/task-life-0.rs @@ -13,6 +13,6 @@ pub fn main() { task::spawn(|| child(~"Hello") ); } -fn child(&&s: ~str) { +fn child(s: ~str) { } diff --git a/src/test/run-pass/threads.rs b/src/test/run-pass/threads.rs index 288a23b855b60..a72d3dd40f4ca 100644 --- a/src/test/run-pass/threads.rs +++ b/src/test/run-pass/threads.rs @@ -18,4 +18,4 @@ pub fn main() { debug!("main thread exiting"); } -fn child(&&x: int) { debug!(x); } +fn child(x: int) { debug!(x); } diff --git a/src/test/run-pass/unique-fn-arg-move.rs b/src/test/run-pass/unique-fn-arg-move.rs index bbb33560e32dd..4a6386244f177 100644 --- a/src/test/run-pass/unique-fn-arg-move.rs +++ b/src/test/run-pass/unique-fn-arg-move.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -fn f(+i: ~int) { +fn f(i: ~int) { assert!(*i == 100); } diff --git a/src/test/run-pass/yield.rs b/src/test/run-pass/yield.rs index 8ed269099520a..2d916abf0da69 100644 --- a/src/test/run-pass/yield.rs +++ b/src/test/run-pass/yield.rs @@ -12,7 +12,7 @@ pub fn main() { let mut result = None; let mut builder = task::task(); - builder.future_result(|+r| { result = Some(r); }); + builder.future_result(|r| { result = Some(r); }); builder.spawn(child); error!("1"); task::yield(); diff --git a/src/test/run-pass/yield1.rs b/src/test/run-pass/yield1.rs index 278ce1c37666f..f3ca5b1211899 100644 --- a/src/test/run-pass/yield1.rs +++ b/src/test/run-pass/yield1.rs @@ -12,7 +12,7 @@ pub fn main() { let mut result = None; let mut builder = task::task(); - builder.future_result(|+r| { result = Some(r); }); + builder.future_result(|r| { result = Some(r); }); builder.spawn(child); error!("1"); task::yield(); From 3affc6ed4071a183da81bcc2048fff82d3e35e81 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Wed, 8 May 2013 09:03:31 -0700 Subject: [PATCH 304/410] librustc: Fix merge fallout. --- src/librustc/middle/lint.rs | 7 ------- src/libsyntax/ext/deriving/generic.rs | 8 ++------ src/libsyntax/ext/deriving/mod.rs | 4 ++-- 3 files changed, 4 insertions(+), 15 deletions(-) diff --git a/src/librustc/middle/lint.rs b/src/librustc/middle/lint.rs index ceb473da52fc0..b3bd60d8ac7be 100644 --- a/src/librustc/middle/lint.rs +++ b/src/librustc/middle/lint.rs @@ -196,13 +196,6 @@ static lint_table: &'static [(&'static str, LintSpec)] = &[ default: deny }), - ("deprecated_mutable_fields", - LintSpec { - lint: deprecated_mutable_fields, - desc: "deprecated mutable fields in structures", - default: deny - }), - ("unused_unsafe", LintSpec { lint: unused_unsafe, diff --git a/src/libsyntax/ext/deriving/generic.rs b/src/libsyntax/ext/deriving/generic.rs index 565d6dd59baac..d785f3816de30 100644 --- a/src/libsyntax/ext/deriving/generic.rs +++ b/src/libsyntax/ext/deriving/generic.rs @@ -818,12 +818,8 @@ fn summarise_struct(cx: @ext_ctxt, span: span, let mut unnamed_count = 0; for struct_def.fields.each |field| { match field.node.kind { - ast::named_field(ident, _, _) => { - named_idents.push(ident) - } - ast::unnamed_field => { - unnamed_count += 1; - } + ast::named_field(ident, _) => named_idents.push(ident), + ast::unnamed_field => unnamed_count += 1, } } diff --git a/src/libsyntax/ext/deriving/mod.rs b/src/libsyntax/ext/deriving/mod.rs index d48ff98be06ee..2bd45e1466ce7 100644 --- a/src/libsyntax/ext/deriving/mod.rs +++ b/src/libsyntax/ext/deriving/mod.rs @@ -281,8 +281,8 @@ pub fn create_struct_pattern(cx: @ext_ctxt, for struct_def.fields.eachi |i, struct_field| { let opt_id = match struct_field.node.kind { - ast::named_field(ident, _, _) if (struct_type == Unknown || - struct_type == Record) => { + ast::named_field(ident, _) if (struct_type == Unknown || + struct_type == Record) => { struct_type = Record; Some(ident) } From 72868450df54ff1ec80e92e3f2fc827cfb1e9f02 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Wed, 8 May 2013 12:26:34 -0700 Subject: [PATCH 305/410] libcore: Fix more merge fallout. --- src/libcore/rt/local_services.rs | 4 ++-- src/libsyntax/ext/build.rs | 18 ++++++++++++++++++ src/libsyntax/ext/deriving/rand.rs | 15 ++++++++++----- src/libsyntax/fold.rs | 1 + 4 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/libcore/rt/local_services.rs b/src/libcore/rt/local_services.rs index b83e1d2464890..5ca7a72e84e86 100644 --- a/src/libcore/rt/local_services.rs +++ b/src/libcore/rt/local_services.rs @@ -225,8 +225,8 @@ mod test { fn rng() { do run_in_newsched_task() { use rand::{rng, Rng}; - let r = rng(); + let mut r = rng(); let _ = r.next(); } } -} \ No newline at end of file +} diff --git a/src/libsyntax/ext/build.rs b/src/libsyntax/ext/build.rs index c1163fda844f6..3097cb799a204 100644 --- a/src/libsyntax/ext/build.rs +++ b/src/libsyntax/ext/build.rs @@ -11,6 +11,7 @@ use ast; use codemap; use codemap::span; +use fold; use ext::base::ext_ctxt; use ext::build; @@ -516,3 +517,20 @@ pub fn mk_unreachable(cx: @ext_ctxt, span: span) -> @ast::expr { pub fn mk_unreachable_arm(cx: @ext_ctxt, span: span) -> ast::arm { mk_arm(cx, span, ~[mk_pat_wild(cx, span)], mk_unreachable(cx, span)) } + +// +// Duplication functions +// +// These functions just duplicate AST nodes. +// + +pub fn duplicate_expr(cx: @ext_ctxt, expr: @ast::expr) -> @ast::expr { + let folder = fold::default_ast_fold(); + let folder = @fold::AstFoldFns { + new_id: |_| cx.next_id(), + ..*folder + }; + let folder = fold::make_fold(folder); + folder.fold_expr(expr) +} + diff --git a/src/libsyntax/ext/deriving/rand.rs b/src/libsyntax/ext/deriving/rand.rs index 03202801d206d..604686f442fd7 100644 --- a/src/libsyntax/ext/deriving/rand.rs +++ b/src/libsyntax/ext/deriving/rand.rs @@ -35,7 +35,7 @@ pub fn expand_deriving_rand(cx: @ext_ctxt, self_ty: None, args: ~[ Ptr(~Literal(Path::new_local(~"R")), - Borrowed(None, ast::m_imm)) + Borrowed(None, ast::m_mutbl)) ], ret_ty: Self, const_nonmatching: false, @@ -59,8 +59,10 @@ fn rand_substructure(cx: @ext_ctxt, span: span, substr: &Substructure) -> @expr cx.ident_of(~"rand") ]; let rand_call = || { - build::mk_call_global(cx, span, - copy rand_ident, copy rng) + build::mk_call_global(cx, + span, + copy rand_ident, + ~[ build::duplicate_expr(cx, rng[0]) ]) }; return match *substr.fields { @@ -80,7 +82,10 @@ fn rand_substructure(cx: @ext_ctxt, span: span, substr: &Substructure) -> @expr let rand_name = build::mk_raw_path_(span, copy rand_ident, None, ~[ u32_ty, r_ty ]); let rand_name = build::mk_path_raw(cx, span, rand_name); - let rv_call = build::mk_call_(cx, span, rand_name, copy rng); + let rv_call = build::mk_call_(cx, + span, + rand_name, + ~[ build::duplicate_expr(cx, rng[0]) ]); // rand() % variants.len() let rand_variant = build::mk_binary(cx, span, ast::rem, @@ -133,4 +138,4 @@ fn rand_substructure(cx: @ext_ctxt, span: span, substr: &Substructure) -> @expr } } } -} \ No newline at end of file +} diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs index 229a8664d0c35..d181dd87e38d1 100644 --- a/src/libsyntax/fold.rs +++ b/src/libsyntax/fold.rs @@ -859,3 +859,4 @@ impl AstFoldExtensions for @ast_fold { pub fn make_fold(afp: ast_fold_fns) -> @ast_fold { afp as @ast_fold } + From 36fbf71686c54c608b7570d55d22f6145bc38610 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Wed, 8 May 2013 12:28:22 -0700 Subject: [PATCH 306/410] llvm: Unrevert change --- src/llvm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/llvm b/src/llvm index 56dd407f4f97a..2e9f0d21fe321 160000 --- a/src/llvm +++ b/src/llvm @@ -1 +1 @@ -Subproject commit 56dd407f4f97a01b8df6554c569170d2fc276fcb +Subproject commit 2e9f0d21fe321849a4759a01fc28eae82ef196d6 From 85d9409b206284847bec802866ad85234f7d8e25 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Wed, 8 May 2013 14:16:43 -0700 Subject: [PATCH 307/410] test: Fix broken test --- src/test/compile-fail/block-coerce-no.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/compile-fail/block-coerce-no.rs b/src/test/compile-fail/block-coerce-no.rs index f3ec875340550..df9eb9fdda69b 100644 --- a/src/test/compile-fail/block-coerce-no.rs +++ b/src/test/compile-fail/block-coerce-no.rs @@ -12,7 +12,7 @@ // other tycons. fn coerce(b: &fn()) -> extern fn() { - fn lol(f: extern fn(+v: &fn()) -> extern fn(), + fn lol(f: extern fn(v: &fn()) -> extern fn(), g: &fn()) -> extern fn() { return f(g); } fn fn_id(f: extern fn()) -> extern fn() { return f } return lol(fn_id, b); From d20e63ab65f7ba28db36ae43379706ca9dba1ca5 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Wed, 8 May 2013 17:03:17 -0700 Subject: [PATCH 308/410] test: Fix modes in the benchmarks. --- src/test/bench/graph500-bfs.rs | 4 ++-- src/test/bench/msgsend-ring-mutex-arcs.rs | 5 +---- src/test/bench/msgsend-ring-pipes.rs | 4 ++-- src/test/bench/msgsend-ring-rw-arcs.rs | 5 +---- src/test/bench/pingpong.rs | 5 +++-- src/test/bench/shootout-pfib.rs | 2 +- src/test/bench/task-perf-linked-failure.rs | 2 +- src/test/bench/task-perf-spawnalot.rs | 2 +- 8 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/test/bench/graph500-bfs.rs b/src/test/bench/graph500-bfs.rs index 83855b142feb7..1842a8ff42e52 100644 --- a/src/test/bench/graph500-bfs.rs +++ b/src/test/bench/graph500-bfs.rs @@ -273,7 +273,7 @@ fn pbfs(graph: &arc::ARC, key: node_id) -> bfs_result { colors = do par::mapi(*color_vec) { let colors = arc::clone(&color); let graph = arc::clone(graph); - let result: ~fn(+x: uint, +y: &color) -> color = |i, c| { + let result: ~fn(x: uint, y: &color) -> color = |i, c| { let colors = arc::get(&colors); let graph = arc::get(&graph); match *c { @@ -395,7 +395,7 @@ fn validate(edges: ~[(node_id, node_id)], let status = do par::alli(tree) { let edges = copy edges; - let result: ~fn(+x: uint, v: &i64) -> bool = |u, v| { + let result: ~fn(x: uint, v: &i64) -> bool = |u, v| { let u = u as node_id; if *v == -1i64 || u == root { true diff --git a/src/test/bench/msgsend-ring-mutex-arcs.rs b/src/test/bench/msgsend-ring-mutex-arcs.rs index ed08297ab3fe3..2d234634cc8ba 100644 --- a/src/test/bench/msgsend-ring-mutex-arcs.rs +++ b/src/test/bench/msgsend-ring-mutex-arcs.rs @@ -45,10 +45,7 @@ fn init() -> (pipe,pipe) { } -fn thread_ring(i: uint, - count: uint, - +num_chan: pipe, - +num_port: pipe) { +fn thread_ring(i: uint, count: uint, num_chan: pipe, num_port: pipe) { let mut num_chan = Some(num_chan); let mut num_port = Some(num_port); // Send/Receive lots of messages. diff --git a/src/test/bench/msgsend-ring-pipes.rs b/src/test/bench/msgsend-ring-pipes.rs index 22d58730f58f3..aef5c18499ac3 100644 --- a/src/test/bench/msgsend-ring-pipes.rs +++ b/src/test/bench/msgsend-ring-pipes.rs @@ -35,8 +35,8 @@ macro_rules! move_out ( fn thread_ring(i: uint, count: uint, - +num_chan: ring::client::num, - +num_port: ring::server::num) { + num_chan: ring::client::num, + num_port: ring::server::num) { let mut num_chan = Some(num_chan); let mut num_port = Some(num_port); // Send/Receive lots of messages. diff --git a/src/test/bench/msgsend-ring-rw-arcs.rs b/src/test/bench/msgsend-ring-rw-arcs.rs index 221177b9dd9a8..02415c4bcfce7 100644 --- a/src/test/bench/msgsend-ring-rw-arcs.rs +++ b/src/test/bench/msgsend-ring-rw-arcs.rs @@ -46,10 +46,7 @@ fn init() -> (pipe,pipe) { } -fn thread_ring(i: uint, - count: uint, - +num_chan: pipe, - +num_port: pipe) { +fn thread_ring(i: uint, count: uint, num_chan: pipe, num_port: pipe) { let mut num_chan = Some(num_chan); let mut num_port = Some(num_port); // Send/Receive lots of messages. diff --git a/src/test/bench/pingpong.rs b/src/test/bench/pingpong.rs index 09e663325ed49..cfad253cfed5b 100644 --- a/src/test/bench/pingpong.rs +++ b/src/test/bench/pingpong.rs @@ -117,8 +117,9 @@ pub fn spawn_service_recv( client } -fn switch(+endp: core::pipes::RecvPacketBuffered, - f: &fn(+v: Option) -> U) -> U { +fn switch(endp: core::pipes::RecvPacketBuffered, + f: &fn(v: Option) -> U) + -> U { f(core::pipes::try_recv(endp)) } diff --git a/src/test/bench/shootout-pfib.rs b/src/test/bench/shootout-pfib.rs index 27a59feedd0a3..b7ae331c8f376 100644 --- a/src/test/bench/shootout-pfib.rs +++ b/src/test/bench/shootout-pfib.rs @@ -66,7 +66,7 @@ fn parse_opts(argv: ~[~str]) -> Config { } } -fn stress_task(&&id: int) { +fn stress_task(id: int) { let mut i = 0; loop { let n = 15; diff --git a/src/test/bench/task-perf-linked-failure.rs b/src/test/bench/task-perf-linked-failure.rs index 99e7de307279f..6015f21be727f 100644 --- a/src/test/bench/task-perf-linked-failure.rs +++ b/src/test/bench/task-perf-linked-failure.rs @@ -46,7 +46,7 @@ fn grandchild_group(num_tasks: uint) { // Master grandchild task exits early. } -fn spawn_supervised_blocking(myname: &str, +f: ~fn()) { +fn spawn_supervised_blocking(myname: &str, f: ~fn()) { let mut res = None; let mut builder = task::task(); builder.future_result(|r| res = Some(r)); diff --git a/src/test/bench/task-perf-spawnalot.rs b/src/test/bench/task-perf-spawnalot.rs index 8c5bbe257bdd2..e6da898a03493 100644 --- a/src/test/bench/task-perf-spawnalot.rs +++ b/src/test/bench/task-perf-spawnalot.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -fn f(&&n: uint) { +fn f(n: uint) { let mut i = 0u; while i < n { task::try(|| g() ); From 1b4e375046be94629dd537993dbb28896aa2ff66 Mon Sep 17 00:00:00 2001 From: Sangeun Kim Date: Thu, 9 May 2013 10:44:27 +0900 Subject: [PATCH 309/410] Add space --- src/librustc/driver/session.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/librustc/driver/session.rs b/src/librustc/driver/session.rs index 3fdf4126c15b4..ba58b78a79273 100644 --- a/src/librustc/driver/session.rs +++ b/src/librustc/driver/session.rs @@ -234,7 +234,7 @@ pub impl Session_ { msg: &str) { let level = lint::get_lint_settings_level( self.lint_settings, lint_mode, expr_id, item_id); - let msg = fmt!("%s [-W%s]", msg, lint::get_lint_name(lint_mode)); + let msg = fmt!("%s [-W %s]", msg, lint::get_lint_name(lint_mode)); self.span_lint_level(level, span, msg); } fn next_node_id(@self) -> ast::node_id { From ea5c413427553507698a3358488199fcb00ca1ce Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Thu, 9 May 2013 15:15:54 +1000 Subject: [PATCH 310/410] Perform expansion before stripping/building a test harness. This allows macros to create tests and benchmarks. --- src/librustc/driver/driver.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/librustc/driver/driver.rs b/src/librustc/driver/driver.rs index 5bda6daa69b9f..01a68255c3ea0 100644 --- a/src/librustc/driver/driver.rs +++ b/src/librustc/driver/driver.rs @@ -183,16 +183,16 @@ pub fn compile_rest(sess: Session, *sess.building_library = session::building_library( sess.opts.crate_type, crate, sess.opts.test); + crate = time(time_passes, ~"expansion", || + syntax::ext::expand::expand_crate(sess.parse_sess, copy cfg, + crate)); + crate = time(time_passes, ~"configuration", || front::config::strip_unconfigured_items(crate)); crate = time(time_passes, ~"maybe building test harness", || front::test::modify_for_testing(sess, crate)); - crate = time(time_passes, ~"expansion", || - syntax::ext::expand::expand_crate(sess.parse_sess, copy cfg, - crate)); - if upto == cu_expand { return (crate, None); } crate = time(time_passes, ~"intrinsic injection", || From 9a292b3da5585f0230ed5d0e198531b87633b832 Mon Sep 17 00:00:00 2001 From: Youngmin Yoo Date: Wed, 8 May 2013 16:23:14 +0900 Subject: [PATCH 311/410] libcore: rename vec::each(variable) to variable.each --- src/libcore/at_vec.rs | 4 ++-- src/libcore/either.rs | 4 ++-- src/libcore/hash.rs | 4 ++-- src/libcore/io.rs | 2 +- src/libcore/os.rs | 4 ++-- src/libcore/result.rs | 2 +- src/libcore/run.rs | 6 +++--- src/libcore/str.rs | 8 ++++---- 8 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/libcore/at_vec.rs b/src/libcore/at_vec.rs index aa20c1556ed42..a6306c33eb9cd 100644 --- a/src/libcore/at_vec.rs +++ b/src/libcore/at_vec.rs @@ -102,7 +102,7 @@ pub fn build_sized_opt(size: Option, #[inline(always)] pub fn append(lhs: @[T], rhs: &const [T]) -> @[T] { do build_sized(lhs.len() + rhs.len()) |push| { - for vec::each(lhs) |x| { push(*x); } + for lhs.each |x| { push(*x); } for uint::range(0, rhs.len()) |i| { push(rhs[i]); } } } @@ -111,7 +111,7 @@ pub fn append(lhs: @[T], rhs: &const [T]) -> @[T] { /// Apply a function to each element of a vector and return the results pub fn map(v: &[T], f: &fn(x: &T) -> U) -> @[U] { do build_sized(v.len()) |push| { - for vec::each(v) |elem| { + for v.each |elem| { push(f(elem)); } } diff --git a/src/libcore/either.rs b/src/libcore/either.rs index 33b7e81ee85fb..957e848b5e7d0 100644 --- a/src/libcore/either.rs +++ b/src/libcore/either.rs @@ -44,7 +44,7 @@ pub fn lefts(eithers: &[Either]) -> ~[T] { //! Extracts from a vector of either all the left values do vec::build_sized(eithers.len()) |push| { - for vec::each(eithers) |elt| { + for eithers.each |elt| { match *elt { Left(ref l) => { push(*l); } _ => { /* fallthrough */ } @@ -57,7 +57,7 @@ pub fn rights(eithers: &[Either]) -> ~[U] { //! Extracts from a vector of either all the right values do vec::build_sized(eithers.len()) |push| { - for vec::each(eithers) |elt| { + for eithers.each |elt| { match *elt { Right(ref r) => { push(*r); } _ => { /* fallthrough */ } diff --git a/src/libcore/hash.rs b/src/libcore/hash.rs index d535abf8ead7c..e00fb33fad94e 100644 --- a/src/libcore/hash.rs +++ b/src/libcore/hash.rs @@ -378,7 +378,7 @@ impl Streaming for SipState { fn result_str(&mut self) -> ~str { let r = self.result_bytes(); let mut s = ~""; - for vec::each(r) |b| { + for r.each |b| { s += uint::to_str_radix(*b as uint, 16u); } s @@ -478,7 +478,7 @@ mod tests { fn to_hex_str(r: &[u8, ..8]) -> ~str { let mut s = ~""; - for vec::each(*r) |b| { + for (*r).each |b| { s += uint::to_str_radix(*b as uint, 16u); } s diff --git a/src/libcore/io.rs b/src/libcore/io.rs index 1bb754fc2be42..7fc2c2559c245 100644 --- a/src/libcore/io.rs +++ b/src/libcore/io.rs @@ -1200,7 +1200,7 @@ pub fn mk_file_writer(path: &Path, flags: &[FileFlag]) fn wb() -> c_int { O_WRONLY as c_int } let mut fflags: c_int = wb(); - for vec::each(flags) |f| { + for flags.each |f| { match *f { Append => fflags |= O_APPEND as c_int, Create => fflags |= O_CREAT as c_int, diff --git a/src/libcore/os.rs b/src/libcore/os.rs index afb9641485859..574618026d983 100644 --- a/src/libcore/os.rs +++ b/src/libcore/os.rs @@ -1491,7 +1491,7 @@ mod tests { fn test_env_getenv() { let e = env(); assert!(vec::len(e) > 0u); - for vec::each(e) |p| { + for e.each |p| { let (n, v) = copy *p; debug!(copy n); let v2 = getenv(n); @@ -1583,7 +1583,7 @@ mod tests { // Just assuming that we've got some contents in the current directory assert!((vec::len(dirs) > 0u)); - for vec::each(dirs) |dir| { + for dirs.each |dir| { debug!(copy *dir); } } diff --git a/src/libcore/result.rs b/src/libcore/result.rs index 17cc07c660d1a..1d67e754a4f24 100644 --- a/src/libcore/result.rs +++ b/src/libcore/result.rs @@ -300,7 +300,7 @@ pub fn map_vec( ts: &[T], op: &fn(&T) -> Result) -> Result<~[V],U> { let mut vs: ~[V] = vec::with_capacity(vec::len(ts)); - for vec::each(ts) |t| { + for ts.each |t| { match op(t) { Ok(copy v) => vs.push(v), Err(copy u) => return Err(u) diff --git a/src/libcore/run.rs b/src/libcore/run.rs index 55b6c5100dd4f..fd168dc02f606 100644 --- a/src/libcore/run.rs +++ b/src/libcore/run.rs @@ -426,7 +426,7 @@ fn with_argv(prog: &str, args: &[~str], cb: &fn(**libc::c_char) -> T) -> T { let mut argptrs = str::as_c_str(prog, |b| ~[b]); let mut tmps = ~[]; - for vec::each(args) |arg| { + for args.each |arg| { let t = @copy *arg; tmps.push(t); argptrs.push_all(str::as_c_str(*t, |b| ~[b])); @@ -445,7 +445,7 @@ fn with_envp(env: &Option<~[(~str,~str)]>, let mut tmps = ~[]; let mut ptrs = ~[]; - for vec::each(*es) |e| { + for (*es).each |e| { let (k,v) = copy *e; let t = @(fmt!("%s=%s", k, v)); tmps.push(t); @@ -470,7 +470,7 @@ fn with_envp(env: &Option<~[(~str,~str)]>, match *env { Some(ref es) if !vec::is_empty(*es) => { let mut blk : ~[u8] = ~[]; - for vec::each(*es) |e| { + for (*es).each |e| { let (k,v) = copy *e; let t = fmt!("%s=%s", k, v); let mut v : ~[u8] = ::cast::transmute(t); diff --git a/src/libcore/str.rs b/src/libcore/str.rs index 44c07e86814f2..5ec6471ac4a29 100644 --- a/src/libcore/str.rs +++ b/src/libcore/str.rs @@ -189,7 +189,7 @@ pub fn from_char(ch: char) -> ~str { pub fn from_chars(chs: &[char]) -> ~str { let mut buf = ~""; reserve(&mut buf, chs.len()); - for vec::each(chs) |ch| { + for chs.each |ch| { push_char(&mut buf, *ch); } buf @@ -326,7 +326,7 @@ pub fn connect_slices(v: &[&str], sep: &str) -> ~str { do as_buf(sep) |sepbuf, seplen| { let seplen = seplen - 1; let mut buf = ::cast::transmute_mut_unsafe(buf); - for vec::each(v) |ss| { + for v.each |ss| { do as_buf(*ss) |ssbuf, sslen| { let sslen = sslen - 1; if first { @@ -2407,7 +2407,7 @@ pub mod raw { unsafe fn push_bytes(s: &mut ~str, bytes: &[u8]) { let new_len = s.len() + bytes.len(); reserve_at_least(&mut *s, new_len); - for vec::each(bytes) |byte| { push_byte(&mut *s, *byte); } + for bytes.each |byte| { push_byte(&mut *s, *byte); } } /// Removes the last byte from a string and returns it. (Not UTF-8 safe). @@ -3782,7 +3782,7 @@ mod tests { 0xd801_u16, 0xdc95_u16, 0xd801_u16, 0xdc86_u16, 0x000a_u16 ]) ]; - for vec::each(pairs) |p| { + for pairs.each |p| { let (s, u) = copy *p; assert!(to_utf16(s) == u); assert!(from_utf16(u) == s); From 472d9f33df5971d0b39c1c7dcb54f60ee8a4e383 Mon Sep 17 00:00:00 2001 From: Youngmin Yoo Date: Wed, 8 May 2013 17:17:21 +0900 Subject: [PATCH 312/410] librustdoc: rename vec::each(var) to var.each --- src/librustdoc/markdown_pass.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/librustdoc/markdown_pass.rs b/src/librustdoc/markdown_pass.rs index 16b84190ee391..e376e4afa5c2d 100644 --- a/src/librustdoc/markdown_pass.rs +++ b/src/librustdoc/markdown_pass.rs @@ -276,7 +276,7 @@ fn write_desc( } fn write_sections(ctxt: &Ctxt, sections: &[doc::Section]) { - for vec::each(sections) |section| { + for sections.each |section| { write_section(ctxt, copy *section); } } @@ -439,7 +439,7 @@ fn write_variants( write_header_(ctxt, H4, ~"Variants"); - for vec::each(docs) |variant| { + for docs.each |variant| { write_variant(ctxt, copy *variant); } @@ -465,7 +465,7 @@ fn write_trait(ctxt: &Ctxt, doc: doc::TraitDoc) { } fn write_methods(ctxt: &Ctxt, docs: &[doc::MethodDoc]) { - for vec::each(docs) |doc| { + for docs.each |doc| { write_method(ctxt, copy *doc); } } From d4fa0f148518aa30aa84b4194b9da7ab595dad56 Mon Sep 17 00:00:00 2001 From: Youngmin Yoo Date: Wed, 8 May 2013 17:49:00 +0900 Subject: [PATCH 313/410] libstd: rename vec::each(var) to var.each --- src/libcore/hash.rs | 1 - src/libstd/arc.rs | 7 +++---- src/libstd/getopts.rs | 4 ++-- src/libstd/net_ip.rs | 2 +- src/libstd/sha1.rs | 6 +++--- src/libstd/sort.rs | 2 +- src/libstd/sort_stage0.rs | 2 +- src/libstd/sync.rs | 2 +- src/libstd/term.rs | 3 +-- src/libstd/test.rs | 6 +++--- src/libstd/time.rs | 17 ++++++++--------- 11 files changed, 24 insertions(+), 28 deletions(-) diff --git a/src/libcore/hash.rs b/src/libcore/hash.rs index e00fb33fad94e..75b3b6bb566ee 100644 --- a/src/libcore/hash.rs +++ b/src/libcore/hash.rs @@ -24,7 +24,6 @@ use cast; use rt::io::Writer; use to_bytes::IterBytes; use uint; -use vec; // Alias `SipState` to `State`. pub use State = hash::SipState; diff --git a/src/libstd/arc.rs b/src/libstd/arc.rs index d69839faa64bc..08507fbf34eea 100644 --- a/src/libstd/arc.rs +++ b/src/libstd/arc.rs @@ -484,7 +484,6 @@ mod tests { use core::cell::Cell; use core::task; - use core::vec; #[test] fn manually_share_arc() { @@ -683,7 +682,7 @@ mod tests { } // Wait for children to pass their asserts - for vec::each(children) |r| { + for children.each |r| { r.recv(); } @@ -748,7 +747,7 @@ mod tests { assert!(*state == 42); *state = 31337; // send to other readers - for vec::each(reader_convos) |x| { + for reader_convos.each |x| { match *x { (ref rc, _) => rc.send(()), } @@ -757,7 +756,7 @@ mod tests { let read_mode = arc.downgrade(write_mode); do (&read_mode).read |state| { // complete handshake with other readers - for vec::each(reader_convos) |x| { + for reader_convos.each |x| { match *x { (_, ref rp) => rp.recv(), } diff --git a/src/libstd/getopts.rs b/src/libstd/getopts.rs index c03042fe9c2bf..ea2a631ae9958 100644 --- a/src/libstd/getopts.rs +++ b/src/libstd/getopts.rs @@ -368,7 +368,7 @@ pub fn opt_count(mm: &Matches, nm: &str) -> uint { /// Returns true if any of several options were matched pub fn opts_present(mm: &Matches, names: &[~str]) -> bool { - for vec::each(names) |nm| { + for names.each |nm| { match find_opt(mm.opts, mkname(*nm)) { Some(id) if !mm.vals[id].is_empty() => return true, _ => (), @@ -395,7 +395,7 @@ pub fn opt_str(mm: &Matches, nm: &str) -> ~str { * option took an argument */ pub fn opts_str(mm: &Matches, names: &[~str]) -> ~str { - for vec::each(names) |nm| { + for names.each |nm| { match opt_val(mm, *nm) { Val(copy s) => return s, _ => () diff --git a/src/libstd/net_ip.rs b/src/libstd/net_ip.rs index 800144c0ca7be..52803207da8d1 100644 --- a/src/libstd/net_ip.rs +++ b/src/libstd/net_ip.rs @@ -425,7 +425,7 @@ mod test { let results = result::unwrap(ga_result); debug!("test_get_addr: Number of results for %s: %?", localhost_name, vec::len(results)); - for vec::each(results) |r| { + for results.each |r| { let ipv_prefix = match *r { Ipv4(_) => ~"IPv4", Ipv6(_) => ~"IPv6" diff --git a/src/libstd/sha1.rs b/src/libstd/sha1.rs index a8e0f7d062a58..cd5845ac5443e 100644 --- a/src/libstd/sha1.rs +++ b/src/libstd/sha1.rs @@ -250,7 +250,7 @@ pub fn sha1() -> @Sha1 { fn result_str(&mut self) -> ~str { let rr = mk_result(self); let mut s = ~""; - for vec::each(rr) |b| { + for rr.each |b| { let hex = uint::to_str_radix(*b as uint, 16u); if hex.len() == 1 { s += "0"; @@ -378,7 +378,7 @@ mod tests { // Test that it works when accepting the message all at once let mut sh = sha1::sha1(); - for vec::each(tests) |t| { + for tests.each |t| { sh.input_str(t.input); let out = sh.result(); check_vec_eq(t.output, out); @@ -392,7 +392,7 @@ mod tests { // Test that it works when accepting the message in pieces - for vec::each(tests) |t| { + for tests.each |t| { let len = str::len(t.input); let mut left = len; while left > 0u { diff --git a/src/libstd/sort.rs b/src/libstd/sort.rs index 6994ca4aedb6d..ae474e0c39463 100644 --- a/src/libstd/sort.rs +++ b/src/libstd/sort.rs @@ -859,7 +859,7 @@ mod test_qsort { let immut_names = names; let pairs = vec::zip_slice(expected, immut_names); - for vec::each(pairs) |p| { + for pairs.each |p| { let (a, b) = *p; debug!("%d %d", a, b); assert!((a == b)); diff --git a/src/libstd/sort_stage0.rs b/src/libstd/sort_stage0.rs index f3d30ecd5cdf1..044c616dcd32c 100644 --- a/src/libstd/sort_stage0.rs +++ b/src/libstd/sort_stage0.rs @@ -852,7 +852,7 @@ mod test_qsort { let immut_names = names; let pairs = vec::zip_slice(expected, immut_names); - for vec::each(pairs) |p| { + for pairs.each |p| { let (a, b) = *p; debug!("%d %d", a, b); assert!((a == b)); diff --git a/src/libstd/sync.rs b/src/libstd/sync.rs index e86ec79318880..17d051518a9ec 100644 --- a/src/libstd/sync.rs +++ b/src/libstd/sync.rs @@ -997,7 +997,7 @@ mod tests { } } } - for vec::each(sibling_convos) |p| { + for sibling_convos.each |p| { let _ = p.recv(); // wait for sibling to get in the mutex } do m2.lock { } diff --git a/src/libstd/term.rs b/src/libstd/term.rs index a79b9f4c84980..236c7f668c2e0 100644 --- a/src/libstd/term.rs +++ b/src/libstd/term.rs @@ -13,7 +13,6 @@ use core::io; use core::option; use core::os; -use core::vec; // FIXME (#2807): Windows support. @@ -50,7 +49,7 @@ pub fn color_supported() -> bool { ~"screen-bce", ~"xterm-256color"]; return match os::getenv(~"TERM") { option::Some(ref env) => { - for vec::each(supported_terms) |term| { + for supported_terms.each |term| { if *term == *env { return true; } } false diff --git a/src/libstd/test.rs b/src/libstd/test.rs index 7d24262aea600..1a864b09a35a4 100644 --- a/src/libstd/test.rs +++ b/src/libstd/test.rs @@ -355,7 +355,7 @@ fn print_failures(st: &ConsoleTestState) { failures.push(name.to_str()); } sort::tim_sort(failures); - for vec::each(failures) |name| { + for failures.each |name| { st.out.write_line(fmt!(" %s", name.to_str())); } } @@ -928,7 +928,7 @@ mod tests { { fn testfn() { } let mut tests = ~[]; - for vec::each(names) |name| { + for names.each |name| { let test = TestDescAndFn { desc: TestDesc { name: DynTestName(*name), @@ -954,7 +954,7 @@ mod tests { let pairs = vec::zip(expected, filtered); - for vec::each(pairs) |p| { + for pairs.each |p| { match *p { (ref a, ref b) => { assert!((*a == b.desc.name.to_str())); diff --git a/src/libstd/time.rs b/src/libstd/time.rs index 8889abe6472b4..31d8eb20a6753 100644 --- a/src/libstd/time.rs +++ b/src/libstd/time.rs @@ -861,7 +861,6 @@ mod tests { use core::result; use core::result::{Err, Ok}; use core::str; - use core::vec; fn test_get_time() { static some_recent_date: i64 = 1325376000i64; // 2012-01-01T00:00:00Z @@ -1028,7 +1027,7 @@ mod tests { } } - for vec::each([ + for [ ~"Sunday", ~"Monday", ~"Tuesday", @@ -1036,11 +1035,11 @@ mod tests { ~"Thursday", ~"Friday", ~"Saturday" - ]) |day| { + ].each |day| { assert!(test(*day, ~"%A")); } - for vec::each([ + for [ ~"Sun", ~"Mon", ~"Tue", @@ -1048,11 +1047,11 @@ mod tests { ~"Thu", ~"Fri", ~"Sat" - ]) |day| { + ].each |day| { assert!(test(*day, ~"%a")); } - for vec::each([ + for [ ~"January", ~"February", ~"March", @@ -1065,11 +1064,11 @@ mod tests { ~"October", ~"November", ~"December" - ]) |day| { + ].each |day| { assert!(test(*day, ~"%B")); } - for vec::each([ + for [ ~"Jan", ~"Feb", ~"Mar", @@ -1082,7 +1081,7 @@ mod tests { ~"Oct", ~"Nov", ~"Dec" - ]) |day| { + ].each |day| { assert!(test(*day, ~"%b")); } From 841f4ceaf41687f1e59b1e56a7737bc478a88e06 Mon Sep 17 00:00:00 2001 From: Youngmin Yoo Date: Wed, 8 May 2013 17:49:43 +0900 Subject: [PATCH 314/410] libsyntax: rename vec::each(var) to var.each --- src/libsyntax/ast_util.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libsyntax/ast_util.rs b/src/libsyntax/ast_util.rs index 7b20d71fdc409..77277dea81453 100644 --- a/src/libsyntax/ast_util.rs +++ b/src/libsyntax/ast_util.rs @@ -461,7 +461,7 @@ pub fn id_visitor(vfn: @fn(node_id)) -> visit::vt<()> { } } - for vec::each(d.inputs) |arg| { + for d.inputs.each |arg| { vfn(arg.id) } }, From c02064d153dccb2d66c5158e0c7eeb6a8bbca0f5 Mon Sep 17 00:00:00 2001 From: Youngmin Yoo Date: Wed, 8 May 2013 19:48:26 +0900 Subject: [PATCH 315/410] librustc: rename vec::each(var) to var.each --- src/librustc/metadata/encoder.rs | 2 +- src/librustc/metadata/tyencode.rs | 3 +- src/librustc/middle/check_match.rs | 2 +- src/librustc/middle/kind.rs | 2 +- src/librustc/middle/resolve.rs | 4 +-- src/librustc/middle/resolve_stage0.rs | 4 +-- src/librustc/middle/trans/_match.rs | 28 +++++++++---------- src/librustc/middle/trans/base.rs | 14 +++++----- src/librustc/middle/trans/cabi_x86_64.rs | 6 ++-- src/librustc/middle/trans/callee.rs | 2 +- src/librustc/middle/trans/controlflow.rs | 4 +-- src/librustc/middle/trans/expr.rs | 2 +- src/librustc/middle/trans/foreign.rs | 2 +- src/librustc/middle/trans/meth.rs | 2 +- src/librustc/middle/trans/tvec.rs | 3 +- src/librustc/middle/trans/type_use.rs | 4 +-- src/librustc/middle/ty.rs | 6 ++-- src/librustc/middle/typeck/check/writeback.rs | 2 +- .../middle/typeck/infer/region_inference.rs | 8 +++--- 19 files changed, 49 insertions(+), 51 deletions(-) diff --git a/src/librustc/metadata/encoder.rs b/src/librustc/metadata/encoder.rs index 87ccd1e45b6f9..6c02ece9289ae 100644 --- a/src/librustc/metadata/encoder.rs +++ b/src/librustc/metadata/encoder.rs @@ -1084,7 +1084,7 @@ fn encode_index(ebml_w: &mut writer::Encoder, for buckets.each |bucket| { bucket_locs.push(ebml_w.writer.tell()); ebml_w.start_tag(tag_index_buckets_bucket); - for vec::each(**bucket) |elt| { + for (**bucket).each |elt| { ebml_w.start_tag(tag_index_buckets_bucket_elt); assert!(elt.pos < 0xffff_ffff); writer.write_be_u32(elt.pos as u32); diff --git a/src/librustc/metadata/tyencode.rs b/src/librustc/metadata/tyencode.rs index c44a8e74130fd..3abe5b22e1a1c 100644 --- a/src/librustc/metadata/tyencode.rs +++ b/src/librustc/metadata/tyencode.rs @@ -17,7 +17,6 @@ use core::hashmap::HashMap; use core::io::WriterUtil; use core::io; use core::uint; -use core::vec; use syntax::abi::AbiSet; use syntax::ast; use syntax::ast::*; @@ -398,7 +397,7 @@ fn enc_fn_sig(w: @io::Writer, cx: @ctxt, fsig: &ty::FnSig) { } fn enc_bounds(w: @io::Writer, cx: @ctxt, bs: @~[ty::param_bound]) { - for vec::each(*bs) |bound| { + for (*bs).each |bound| { match *bound { ty::bound_owned => w.write_char('S'), ty::bound_copy => w.write_char('C'), diff --git a/src/librustc/middle/check_match.rs b/src/librustc/middle/check_match.rs index a50895aa013b5..09232b5bba823 100644 --- a/src/librustc/middle/check_match.rs +++ b/src/librustc/middle/check_match.rs @@ -366,7 +366,7 @@ pub fn missing_ctor(cx: @MatchCheckCtxt, } let variants = ty::enum_variants(cx.tcx, eid); if found.len() != (*variants).len() { - for vec::each(*variants) |v| { + for (*variants).each |v| { if !found.contains(&(variant(v.id))) { return Some(variant(v.id)); } diff --git a/src/librustc/middle/kind.rs b/src/librustc/middle/kind.rs index 57c3e7c3b9a05..0050e0f81c756 100644 --- a/src/librustc/middle/kind.rs +++ b/src/librustc/middle/kind.rs @@ -235,7 +235,7 @@ fn check_fn( } fn check_arm(a: &arm, cx: Context, v: visit::vt) { - for vec::each(a.pats) |p| { + for a.pats.each |p| { do pat_util::pat_bindings(cx.tcx.def_map, *p) |mode, id, span, _pth| { if mode == bind_by_copy { let t = ty::node_id_to_type(cx.tcx, id); diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs index ff002afd028f5..5c3bb6ca401a6 100644 --- a/src/librustc/middle/resolve.rs +++ b/src/librustc/middle/resolve.rs @@ -4630,7 +4630,7 @@ pub impl Resolver { } let mut smallest = 0; - for vec::eachi(maybes) |i, &other| { + for maybes.eachi |i, &other| { values[i] = str::levdistance(name, other); @@ -4664,7 +4664,7 @@ pub impl Resolver { if item.id == node_id { match item.node { item_struct(class_def, _) => { - for vec::each(class_def.fields) |field| { + for class_def.fields.each |field| { match field.node.kind { unnamed_field => {}, named_field(ident, _) => { diff --git a/src/librustc/middle/resolve_stage0.rs b/src/librustc/middle/resolve_stage0.rs index 484f66ae9921b..3a6424efe1d22 100644 --- a/src/librustc/middle/resolve_stage0.rs +++ b/src/librustc/middle/resolve_stage0.rs @@ -4681,7 +4681,7 @@ pub impl Resolver { } let mut smallest = 0; - for vec::eachi(maybes) |i, &other| { + for maybes.eachi |i, &other| { values[i] = str::levdistance(name, other); @@ -4715,7 +4715,7 @@ pub impl Resolver { if item.id == node_id { match item.node { item_struct(class_def, _) => { - for vec::each(class_def.fields) |field| { + for class_def.fields.each |field| { match field.node.kind { unnamed_field => {}, named_field(ident, _) => { diff --git a/src/librustc/middle/trans/_match.rs b/src/librustc/middle/trans/_match.rs index d074a2f796f46..1443a7ef30407 100644 --- a/src/librustc/middle/trans/_match.rs +++ b/src/librustc/middle/trans/_match.rs @@ -283,7 +283,7 @@ pub fn variant_opt(bcx: block, pat_id: ast::node_id) match ccx.tcx.def_map.get_copy(&pat_id) { ast::def_variant(enum_id, var_id) => { let variants = ty::enum_variants(ccx.tcx, enum_id); - for vec::each(*variants) |v| { + for (*variants).each |v| { if var_id == v.id { return var(v.disr_val, adt::represent_node(bcx, pat_id)) @@ -349,7 +349,7 @@ pub fn matches_to_str(bcx: block, m: &[@Match]) -> ~str { } pub fn has_nested_bindings(m: &[@Match], col: uint) -> bool { - for vec::each(m) |br| { + for m.each |br| { match br.pats[col].node { ast::pat_ident(_, _, Some(_)) => return true, _ => () @@ -418,7 +418,7 @@ pub fn enter_match<'r>(bcx: block, let _indenter = indenter(); let mut result = ~[]; - for vec::each(m) |br| { + for m.each |br| { match e(br.pats[col]) { Some(sub) => { let pats = @@ -934,7 +934,7 @@ pub fn collect_record_or_struct_fields(bcx: block, col: uint) -> ~[ast::ident] { let mut fields: ~[ast::ident] = ~[]; - for vec::each(m) |br| { + for m.each |br| { match br.pats[col].node { ast::pat_struct(_, ref fs, _) => { match ty::get(node_id_type(bcx, br.pats[col].id)).sty { @@ -973,7 +973,7 @@ pub fn root_pats_as_necessary(mut bcx: block, col: uint, val: ValueRef) -> block { - for vec::each(m) |br| { + for m.each |br| { let pat_id = br.pats[col].id; if pat_id != 0 { let datum = Datum {val: val, ty: node_id_type(bcx, pat_id), @@ -1042,14 +1042,14 @@ pub fn pick_col(m: &[@Match]) -> uint { } } let mut scores = vec::from_elem(m[0].pats.len(), 0u); - for vec::each(m) |br| { + for m.each |br| { let mut i = 0u; - for vec::each(br.pats) |p| { scores[i] += score(*p); i += 1u; } + for br.pats.each |p| { scores[i] += score(*p); i += 1u; } } let mut max_score = 0u; let mut best_col = 0u; let mut i = 0u; - for vec::each(scores) |score| { + for scores.each |score| { let score = *score; // Irrefutable columns always go first, they'd only be duplicated in @@ -1306,7 +1306,7 @@ pub fn compile_submatch(bcx: block, let ccx = *bcx.fcx.ccx; let mut pat_id = 0; let mut pat_span = dummy_sp(); - for vec::each(m) |br| { + for m.each |br| { // Find a real id (we're adding placeholder wildcard patterns, but // each column is guaranteed to have at least one real pattern) if pat_id == 0 { @@ -1438,7 +1438,7 @@ pub fn compile_submatch(bcx: block, } } } - for vec::each(opts) |o| { + for opts.each |o| { match *o { range(_, _) => { kind = compare; break } _ => () @@ -1460,7 +1460,7 @@ pub fn compile_submatch(bcx: block, let mut i = 0u; // Compile subtrees for each option - for vec::each(opts) |opt| { + for opts.each |opt| { i += 1u; let mut opt_cx = else_cx; if !exhaustive || i < len { @@ -1631,7 +1631,7 @@ pub fn trans_match_inner(scope_cx: block, } let mut arm_datas = ~[], matches = ~[]; - for vec::each(arms) |arm| { + for arms.each |arm| { let body = scope_block(bcx, arm.body.info(), ~"case_body"); // Create the bindings map, which is a mapping from each binding name @@ -1670,7 +1670,7 @@ pub fn trans_match_inner(scope_cx: block, arm: arm, bindings_map: bindings_map}; arm_datas.push(arm_data); - for vec::each(arm.pats) |p| { + for arm.pats.each |p| { matches.push(@Match {pats: ~[*p], data: arm_data}); } } @@ -1793,7 +1793,7 @@ pub fn bind_irrefutable_pat(bcx: block, vinfo.disr_val, val); for sub_pats.each |sub_pat| { - for vec::eachi(args.vals) |i, argval| { + for args.vals.eachi |i, argval| { bcx = bind_irrefutable_pat(bcx, sub_pat[i], *argval, diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs index 76ad7d7405365..77a90e2215087 100644 --- a/src/librustc/middle/trans/base.rs +++ b/src/librustc/middle/trans/base.rs @@ -668,7 +668,7 @@ pub fn iter_structural_ty(cx: block, av: ValueRef, t: ty::t, ty::ty_struct(*) => { let repr = adt::represent_type(cx.ccx(), t); do expr::with_field_tys(cx.tcx(), t, None) |discr, field_tys| { - for vec::eachi(field_tys) |i, field_ty| { + for field_tys.eachi |i, field_ty| { let llfld_a = adt::trans_field_ptr(cx, repr, av, discr, i); cx = f(cx, llfld_a, field_ty.mt.ty); } @@ -709,7 +709,7 @@ pub fn iter_structural_ty(cx: block, av: ValueRef, t: ty::t, n_variants); let next_cx = sub_block(cx, ~"enum-iter-next"); - for vec::each(*variants) |variant| { + for (*variants).each |variant| { let variant_cx = sub_block(cx, ~"enum-iter-variant-" + int::to_str(variant.disr_val)); @@ -888,7 +888,7 @@ pub fn need_invoke(bcx: block) -> bool { match cur.kind { block_scope(inf) => { let inf = &mut *inf; // FIXME(#5074) workaround old borrowck - for vec::each(inf.cleanups) |cleanup| { + for inf.cleanups.each |cleanup| { match *cleanup { clean(_, cleanup_type) | clean_temp(_, _, cleanup_type) => { if cleanup_type == normal_exit_and_unwind { @@ -1391,7 +1391,7 @@ pub fn with_scope_datumblock(bcx: block, opt_node_info: Option, } pub fn block_locals(b: &ast::blk, it: &fn(@ast::local)) { - for vec::each(b.node.stmts) |s| { + for b.node.stmts.each |s| { match s.node { ast::stmt_decl(d, _) => { match d.node { @@ -1973,7 +1973,7 @@ pub fn trans_enum_variant(ccx: @CrateContext, repr, ty_to_str(ccx.tcx, enum_ty)); adt::trans_start_init(bcx, repr, fcx.llretptr.get(), disr); - for vec::eachi(args) |i, va| { + for args.eachi |i, va| { let lldestptr = adt::trans_field_ptr(bcx, repr, fcx.llretptr.get(), @@ -2072,7 +2072,7 @@ pub fn trans_tuple_struct(ccx: @CrateContext, pub fn trans_enum_def(ccx: @CrateContext, enum_definition: &ast::enum_def, id: ast::node_id, vi: @~[ty::VariantInfo], i: &mut uint) { - for vec::each(enum_definition.variants) |variant| { + for enum_definition.variants.each |variant| { let disr_val = vi[*i].disr_val; *i += 1; @@ -2559,7 +2559,7 @@ pub fn trans_constant(ccx: @CrateContext, it: @ast::item) { node: it.id }); let mut i = 0; let path = item_path(ccx, it); - for vec::each((*enum_definition).variants) |variant| { + for (*enum_definition).variants.each |variant| { let p = vec::append(/*bad*/copy path, ~[ path_name(variant.node.name), path_name(special_idents::descrim) diff --git a/src/librustc/middle/trans/cabi_x86_64.rs b/src/librustc/middle/trans/cabi_x86_64.rs index ecde50f347072..4da2199501f52 100644 --- a/src/librustc/middle/trans/cabi_x86_64.rs +++ b/src/librustc/middle/trans/cabi_x86_64.rs @@ -161,7 +161,7 @@ fn classify_ty(ty: TypeRef) -> ~[x86_64_reg_class] { cls: &mut [x86_64_reg_class], i: uint, off: uint) { let mut field_off = off; - for vec::each(tys) |ty| { + for tys.each |ty| { field_off = align(field_off, *ty); classify(*ty, cls, i, field_off); field_off += ty_size(*ty); @@ -283,7 +283,7 @@ fn classify_ty(ty: TypeRef) -> ~[x86_64_reg_class] { fn llreg_ty(cls: &[x86_64_reg_class]) -> TypeRef { fn llvec_len(cls: &[x86_64_reg_class]) -> uint { let mut len = 1u; - for vec::each(cls) |c| { + for cls.each |c| { if *c != sseup_class { break; } @@ -370,7 +370,7 @@ fn x86_64_tys(atys: &[TypeRef], let mut arg_tys = ~[]; let mut attrs = ~[]; - for vec::each(atys) |t| { + for atys.each |t| { let (ty, attr) = x86_64_ty(*t, is_pass_byval, ByValAttribute); arg_tys.push(ty); attrs.push(attr); diff --git a/src/librustc/middle/trans/callee.rs b/src/librustc/middle/trans/callee.rs index 87322393ab983..e5e60b2d4ac33 100644 --- a/src/librustc/middle/trans/callee.rs +++ b/src/librustc/middle/trans/callee.rs @@ -631,7 +631,7 @@ pub fn trans_args(cx: block, match args { ArgExprs(arg_exprs) => { let last = arg_exprs.len() - 1u; - for vec::eachi(arg_exprs) |i, arg_expr| { + for arg_exprs.eachi |i, arg_expr| { let arg_val = unpack_result!(bcx, { trans_arg_expr(bcx, arg_tys[i], diff --git a/src/librustc/middle/trans/controlflow.rs b/src/librustc/middle/trans/controlflow.rs index f1192488bddb0..8b72ddda044c7 100644 --- a/src/librustc/middle/trans/controlflow.rs +++ b/src/librustc/middle/trans/controlflow.rs @@ -34,7 +34,7 @@ pub fn trans_block(bcx: block, b: &ast::blk, dest: expr::Dest) -> block { do block_locals(b) |local| { bcx = alloc_local(bcx, local); }; - for vec::each(b.node.stmts) |s| { + for b.node.stmts.each |s| { debuginfo::update_source_pos(bcx, b.span); bcx = trans_stmt(bcx, *s); } @@ -107,7 +107,7 @@ pub fn trans_if(bcx: block, pub fn join_blocks(parent_bcx: block, in_cxs: &[block]) -> block { let out = sub_block(parent_bcx, ~"join"); let mut reachable = false; - for vec::each(in_cxs) |bcx| { + for in_cxs.each |bcx| { if !bcx.unreachable { Br(*bcx, out.llbb); reachable = true; diff --git a/src/librustc/middle/trans/expr.rs b/src/librustc/middle/trans/expr.rs index 5f9dc277c51a3..29227b7c95a32 100644 --- a/src/librustc/middle/trans/expr.rs +++ b/src/librustc/middle/trans/expr.rs @@ -1264,7 +1264,7 @@ fn trans_adt(bcx: block, repr: &adt::Repr, discr: int, } } - for vec::each(temp_cleanups) |cleanup| { + for temp_cleanups.each |cleanup| { revoke_clean(bcx, *cleanup); } return bcx; diff --git a/src/librustc/middle/trans/foreign.rs b/src/librustc/middle/trans/foreign.rs index 21e29b9ad8259..7eea65e458f1e 100644 --- a/src/librustc/middle/trans/foreign.rs +++ b/src/librustc/middle/trans/foreign.rs @@ -294,7 +294,7 @@ pub fn trans_foreign_mod(ccx: @CrateContext, Some(abi) => abi, }; - for vec::each(foreign_mod.items) |&foreign_item| { + for foreign_mod.items.each |&foreign_item| { match foreign_item.node { ast::foreign_item_fn(*) => { let id = foreign_item.id; diff --git a/src/librustc/middle/trans/meth.rs b/src/librustc/middle/trans/meth.rs index 934a995b58841..f20af0409c53c 100644 --- a/src/librustc/middle/trans/meth.rs +++ b/src/librustc/middle/trans/meth.rs @@ -51,7 +51,7 @@ pub fn trans_impl(ccx: @CrateContext, path: path, name: ast::ident, if !generics.ty_params.is_empty() { return; } let sub_path = vec::append_one(path, path_name(name)); - for vec::each(methods) |method| { + for methods.each |method| { if method.generics.ty_params.len() == 0u { let llfn = get_item_val(ccx, method.id); let path = vec::append_one(/*bad*/copy sub_path, diff --git a/src/librustc/middle/trans/tvec.rs b/src/librustc/middle/trans/tvec.rs index e8075c1f2ad1d..d9bf25bf37786 100644 --- a/src/librustc/middle/trans/tvec.rs +++ b/src/librustc/middle/trans/tvec.rs @@ -28,7 +28,6 @@ use util::common::indenter; use util::ppaux::ty_to_str; use core::option::None; -use core::vec; use syntax::ast; use syntax::codemap; @@ -395,7 +394,7 @@ pub fn write_content(bcx: block, add_clean_temp_mem(bcx, lleltptr, vt.unit_ty); temp_cleanups.push(lleltptr); } - for vec::each(temp_cleanups) |cleanup| { + for temp_cleanups.each |cleanup| { revoke_clean(bcx, *cleanup); } } diff --git a/src/librustc/middle/trans/type_use.rs b/src/librustc/middle/trans/type_use.rs index 94ef33e45bbe9..f1c3a42d1583e 100644 --- a/src/librustc/middle/trans/type_use.rs +++ b/src/librustc/middle/trans/type_use.rs @@ -77,7 +77,7 @@ pub fn type_uses_for(ccx: @CrateContext, fn_id: def_id, n_tps: uint) match ty::get(ty::lookup_item_type(cx.ccx.tcx, fn_id).ty).sty { ty::ty_bare_fn(ty::BareFnTy {sig: ref sig, _}) | ty::ty_closure(ty::ClosureTy {sig: ref sig, _}) => { - for vec::each(sig.inputs) |arg| { + for sig.inputs.each |arg| { type_needs(cx, use_repr, arg.ty); } } @@ -213,7 +213,7 @@ pub fn type_needs_inner(cx: Context, if list::find(enums_seen, |id| *id == did).is_none() { let seen = @Cons(did, enums_seen); for vec::each(*ty::enum_variants(cx.ccx.tcx, did)) |v| { - for vec::each(v.args) |aty| { + for v.args.each |aty| { let t = ty::subst(cx.ccx.tcx, &(*substs), *aty); type_needs_inner(cx, use_, t, seen); } diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index b2938476d3507..2daba3212e1c3 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -1740,7 +1740,7 @@ fn type_needs_unwind_cleanup_(cx: ctxt, ty: t, true } ty_enum(did, ref substs) => { - for vec::each(*enum_variants(cx, did)) |v| { + for (*enum_variants(cx, did)).each |v| { for v.args.each |aty| { let t = subst(cx, substs, *aty); needs_unwind_cleanup |= @@ -2335,7 +2335,7 @@ pub fn type_structurally_contains(cx: ctxt, if test(sty) { return true; } match *sty { ty_enum(did, ref substs) => { - for vec::each(*enum_variants(cx, did)) |variant| { + for (*enum_variants(cx, did)).each |variant| { for variant.args.each |aty| { let sty = subst(cx, substs, *aty); if type_structurally_contains(cx, sty, test) { return true; } @@ -2431,7 +2431,7 @@ pub fn type_is_pod(cx: ctxt, ty: t) -> bool { // Structural types ty_enum(did, ref substs) => { let variants = enum_variants(cx, did); - for vec::each(*variants) |variant| { + for (*variants).each |variant| { let tup_ty = mk_tup(cx, /*bad*/copy variant.args); // Perform any type parameter substitutions. diff --git a/src/librustc/middle/typeck/check/writeback.rs b/src/librustc/middle/typeck/check/writeback.rs index b7713eaa2fd6e..2869c3737c937 100644 --- a/src/librustc/middle/typeck/check/writeback.rs +++ b/src/librustc/middle/typeck/check/writeback.rs @@ -228,7 +228,7 @@ fn visit_expr(e: @ast::expr, wbcx: @mut WbCtxt, v: wb_vt) { match e.node { ast::expr_fn_block(ref decl, _) => { - for vec::each(decl.inputs) |input| { + for decl.inputs.each |input| { let _ = resolve_type_vars_for_node(wbcx, e.span, input.id); } } diff --git a/src/librustc/middle/typeck/infer/region_inference.rs b/src/librustc/middle/typeck/infer/region_inference.rs index a3b5369d22a34..8349e16d2c440 100644 --- a/src/librustc/middle/typeck/infer/region_inference.rs +++ b/src/librustc/middle/typeck/infer/region_inference.rs @@ -1572,8 +1572,8 @@ pub impl RegionVarBindings { return; } - for vec::each(lower_bounds) |lower_bound| { - for vec::each(upper_bounds) |upper_bound| { + for lower_bounds.each |lower_bound| { + for upper_bounds.each |upper_bound| { if !self.is_subregion_of(lower_bound.region, upper_bound.region) { @@ -1629,8 +1629,8 @@ pub impl RegionVarBindings { return; } - for vec::each(upper_bounds) |upper_bound_1| { - for vec::each(upper_bounds) |upper_bound_2| { + for upper_bounds.each |upper_bound_1| { + for upper_bounds.each |upper_bound_2| { match self.glb_concrete_regions(upper_bound_1.region, upper_bound_2.region) { Ok(_) => {} From 72c9aab0d2802785b8a84ea9f88906b19bc7ed29 Mon Sep 17 00:00:00 2001 From: Steven Stewart-Gallus Date: Wed, 8 May 2013 17:32:50 -0700 Subject: [PATCH 316/410] Created utility uninhabited type In this commit I added a useful utility type, named Void, that encapsulates the doable but annoying job of creating an uninhabited type. As well, a function on that type, named absurd, was created which is useful for ignoring the result of matching on that type. No unit tests were created because it is not possible to create an instance of this type to test the usage of. This type is useful because it is like NonCopyable in that it can be used to create a type with special characteristics without special bloat. For instance, instead of typing pub struct PhantomType { priv contents : () } for each void type one may want to use one can simply type pub struct PhantomType (Void);. This type make such special cases much easier to write. --- src/libcore/util.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/libcore/util.rs b/src/libcore/util.rs index 43616ebfd3032..5704eb94ddba3 100644 --- a/src/libcore/util.rs +++ b/src/libcore/util.rs @@ -1,4 +1,4 @@ -// Copyright 2012 The Rust Project Developers. See the COPYRIGHT +// Copyright 2012-2013 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // @@ -74,6 +74,20 @@ impl Drop for NonCopyable { pub fn NonCopyable() -> NonCopyable { NonCopyable { i: () } } + +/// A type with no inhabitants +pub enum Void { } + +pub impl Void { + /// A utility function for ignoring this uninhabited type + fn uninhabited(&self) -> ! { + match *self { + // Nothing to match on + } + } +} + + /** A utility function for indicating unreachable code. It will fail if executed. This is occasionally useful to put after loops that never From c2bf9bf9fed8de0c399125feba8252ad263a71fc Mon Sep 17 00:00:00 2001 From: Jyun-Yan You Date: Tue, 7 May 2013 18:03:32 +0800 Subject: [PATCH 317/410] improve MIPS backend and implement segmented stacks --- mk/platform.mk | 4 +- src/libcore/libc.rs | 86 +++++++++++++++++++++++++++++++- src/libcore/path.rs | 31 +++++++++++- src/libstd/ebml.rs | 1 + src/rt/arch/mips/ccall.S | 1 - src/rt/arch/mips/morestack.S | 97 ++++++++++++++++++++++++++++++++++++ src/rt/arch/mips/record_sp.S | 8 +-- src/rt/rust_task.h | 2 +- 8 files changed, 220 insertions(+), 10 deletions(-) create mode 100644 src/rt/arch/mips/morestack.S diff --git a/mk/platform.mk b/mk/platform.mk index e03b7c152478f..efba83e6ad4c7 100644 --- a/mk/platform.mk +++ b/mk/platform.mk @@ -247,12 +247,12 @@ AR_mips-unknown-linux-gnu=mips-linux-gnu-ar CFG_LIB_NAME_mips-unknown-linux-gnu=lib$(1).so CFG_LIB_GLOB_mips-unknown-linux-gnu=lib$(1)-*.so CFG_LIB_DSYM_GLOB_mips-unknown-linux-gnu=lib$(1)-*.dylib.dSYM -CFG_GCCISH_CFLAGS_mips-unknown-linux-gnu := -Wall -g -fPIC -mips32r2 -msoft-float -mabi=32 +CFG_GCCISH_CFLAGS_mips-unknown-linux-gnu := -Wall -g -fPIC -mips32r2 -msoft-float -mabi=32 -mno-compact-eh CFG_GCCISH_CXXFLAGS_mips-unknown-linux-gnu := -fno-rtti CFG_GCCISH_LINK_FLAGS_mips-unknown-linux-gnu := -shared -fPIC -g -mips32r2 -msoft-float -mabi=32 CFG_GCCISH_DEF_FLAG_mips-unknown-linux-gnu := -Wl,--export-dynamic,--dynamic-list= CFG_GCCISH_PRE_LIB_FLAGS_mips-unknown-linux-gnu := -Wl,-whole-archive -CFG_GCCISH_POST_LIB_FLAGS_mips-unknown-linux-gnu := -Wl,-no-whole-archive -Wl,-znoexecstack +CFG_GCCISH_POST_LIB_FLAGS_mips-unknown-linux-gnu := -Wl,-no-whole-archive CFG_DEF_SUFFIX_mips-unknown-linux-gnu := .linux.def CFG_INSTALL_NAME_mips-unknown-linux-gnu = CFG_LIBUV_LINK_FLAGS_mips-unknown-linux-gnu = diff --git a/src/libcore/libc.rs b/src/libcore/libc.rs index 6fb4572913d2e..7ae3f0fd2d462 100644 --- a/src/libcore/libc.rs +++ b/src/libcore/libc.rs @@ -268,7 +268,7 @@ pub mod types { pub type ssize_t = i32; } pub mod posix01 { - use libc::types::os::arch::c95::{c_short, c_long, time_t}; + use libc::types::os::arch::c95::{c_short, c_long, c_ulong, time_t}; use libc::types::os::arch::posix88::{dev_t, gid_t, ino_t}; use libc::types::os::arch::posix88::{mode_t, off_t}; use libc::types::os::arch::posix88::{uid_t}; @@ -276,6 +276,9 @@ pub mod types { pub type nlink_t = u32; pub type blksize_t = i32; pub type blkcnt_t = i32; + + #[cfg(target_arch = "x86")] + #[cfg(target_arch = "arm")] pub struct stat { st_dev: dev_t, __pad1: c_short, @@ -298,6 +301,30 @@ pub mod types { __unused4: c_long, __unused5: c_long, } + + #[cfg(target_arch = "mips")] + pub struct stat { + st_dev: c_ulong, + st_pad1: [c_long, ..3], + st_ino: ino_t, + st_mode: mode_t, + st_nlink: nlink_t, + st_uid: uid_t, + st_gid: gid_t, + st_rdev: c_ulong, + st_pad2: [c_long, ..2], + st_size: off_t, + st_pad3: c_long, + st_atime: time_t, + st_atime_nsec: c_long, + st_mtime: time_t, + st_mtime_nsec: c_long, + st_ctime: time_t, + st_ctime_nsec: c_long, + st_blksize: blksize_t, + st_blocks: blkcnt_t, + st_pad5: [c_long, ..14], + } } pub mod posix08 {} pub mod bsd44 {} @@ -963,6 +990,9 @@ pub mod consts { } pub mod c99 { } + #[cfg(target_arch = "x86")] + #[cfg(target_arch = "x86_64")] + #[cfg(target_arch = "arm")] pub mod posix88 { pub static O_RDONLY : int = 0; pub static O_WRONLY : int = 1; @@ -1007,6 +1037,51 @@ pub mod consts { pub static SIGALRM : int = 14; pub static SIGTERM : int = 15; } + #[cfg(target_arch = "mips")] + pub mod posix88 { + pub static O_RDONLY : int = 0; + pub static O_WRONLY : int = 1; + pub static O_RDWR : int = 2; + pub static O_APPEND : int = 8; + pub static O_CREAT : int = 256; + pub static O_EXCL : int = 1024; + pub static O_TRUNC : int = 512; + pub static S_IFIFO : int = 4096; + pub static S_IFCHR : int = 8192; + pub static S_IFBLK : int = 24576; + pub static S_IFDIR : int = 16384; + pub static S_IFREG : int = 32768; + pub static S_IFMT : int = 61440; + pub static S_IEXEC : int = 64; + pub static S_IWRITE : int = 128; + pub static S_IREAD : int = 256; + pub static S_IRWXU : int = 448; + pub static S_IXUSR : int = 64; + pub static S_IWUSR : int = 128; + pub static S_IRUSR : int = 256; + pub static F_OK : int = 0; + pub static R_OK : int = 4; + pub static W_OK : int = 2; + pub static X_OK : int = 1; + pub static STDIN_FILENO : int = 0; + pub static STDOUT_FILENO : int = 1; + pub static STDERR_FILENO : int = 2; + pub static F_LOCK : int = 1; + pub static F_TEST : int = 3; + pub static F_TLOCK : int = 2; + pub static F_ULOCK : int = 0; + pub static SIGHUP : int = 1; + pub static SIGINT : int = 2; + pub static SIGQUIT : int = 3; + pub static SIGILL : int = 4; + pub static SIGABRT : int = 6; + pub static SIGFPE : int = 8; + pub static SIGKILL : int = 9; + pub static SIGSEGV : int = 11; + pub static SIGPIPE : int = 13; + pub static SIGALRM : int = 14; + pub static SIGTERM : int = 15; + } pub mod posix01 { pub static SIGTRAP : int = 5; @@ -1026,11 +1101,20 @@ pub mod consts { } pub mod bsd44 { } + #[cfg(target_arch = "x86")] + #[cfg(target_arch = "x86_64")] + #[cfg(target_arch = "arm")] pub mod extra { pub static O_RSYNC : int = 1052672; pub static O_DSYNC : int = 4096; pub static O_SYNC : int = 1052672; } + #[cfg(target_arch = "mips")] + pub mod extra { + pub static O_RSYNC : int = 16400; + pub static O_DSYNC : int = 16; + pub static O_SYNC : int = 16400; + } } #[cfg(target_os = "freebsd")] diff --git a/src/libcore/path.rs b/src/libcore/path.rs index a87fd90f4e27a..d3010aff3e8cd 100644 --- a/src/libcore/path.rs +++ b/src/libcore/path.rs @@ -122,7 +122,6 @@ pub trait GenericPath { mod stat { #[cfg(target_arch = "x86")] #[cfg(target_arch = "arm")] - #[cfg(target_arch = "mips")] pub mod arch { use libc; @@ -152,6 +151,36 @@ mod stat { } } + #[cfg(target_arch = "mips")] + pub mod arch { + use libc; + + pub fn default_stat() -> libc::stat { + libc::stat { + st_dev: 0, + st_pad1: [0, ..3], + st_ino: 0, + st_mode: 0, + st_nlink: 0, + st_uid: 0, + st_gid: 0, + st_rdev: 0, + st_pad2: [0, ..2], + st_size: 0, + st_pad3: 0, + st_atime: 0, + st_atime_nsec: 0, + st_mtime: 0, + st_mtime_nsec: 0, + st_ctime: 0, + st_ctime_nsec: 0, + st_blksize: 0, + st_blocks: 0, + st_pad5: [0, ..14], + } + } + } + #[cfg(target_arch = "x86_64")] pub mod arch { use libc; diff --git a/src/libstd/ebml.rs b/src/libstd/ebml.rs index 5e4f708f52fd4..55f48fb86716c 100644 --- a/src/libstd/ebml.rs +++ b/src/libstd/ebml.rs @@ -157,6 +157,7 @@ pub mod reader { } #[cfg(target_arch = "arm")] + #[cfg(target_arch = "mips")] pub fn vuint_at(data: &[u8], start: uint) -> Res { vuint_at_slow(data, start) } diff --git a/src/rt/arch/mips/ccall.S b/src/rt/arch/mips/ccall.S index abbbad164fd37..cdcdc07db555d 100644 --- a/src/rt/arch/mips/ccall.S +++ b/src/rt/arch/mips/ccall.S @@ -8,7 +8,6 @@ .align 2 .globl __morestack .hidden __morestack -.cfi_sections .eh_frame_entry .cfi_startproc .set nomips16 .ent __morestack diff --git a/src/rt/arch/mips/morestack.S b/src/rt/arch/mips/morestack.S new file mode 100644 index 0000000000000..e534ac059133d --- /dev/null +++ b/src/rt/arch/mips/morestack.S @@ -0,0 +1,97 @@ +// Mark stack as non-executable +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", @progbits +#endif + +.text + +.globl upcall_new_stack +.globl upcall_del_stack +.globl __morestack + +.hidden __morestack + +.cfi_startproc +.set nomips16 +.ent __morestack +__morestack: + .set noreorder + .set nomacro + + addiu $29, $29, -12 + sw $31, 8($29) + sw $30, 4($29) + sw $23, 0($29) + + // 24 = 12 (current) + 12 (previous) + .cfi_def_cfa_offset 24 + .cfi_offset 31, -4 + .cfi_offset 30, -20 + .cfi_offset 23, -24 + + move $23, $28 + move $30, $29 + .cfi_def_cfa_register 30 + + // Save argument registers of the original function + addiu $29, $29, -32 + sw $4, 16($29) + sw $5, 20($29) + sw $6, 24($29) + sw $7, 28($29) + + move $4, $14 // Size of stack arguments + addu $5, $30, 24 // Address of stack arguments + move $6, $15 // The amount of stack needed + + move $28, $23 + lw $25, %call16(upcall_new_stack)($23) + jalr $25 + nop + + // Pop the saved arguments + lw $4, 16($29) + lw $5, 20($29) + lw $6, 24($29) + lw $7, 28($29) + addiu $29, $29, 32 + + lw $24, 8($30) // Grab the return pointer. + addiu $24, $24, 12 // Skip past the `lw`, `jr`, `addiu` in our parent frame + move $29, $2 // Switch to the new stack. + + // for PIC + lw $2, 12($30) + lw $25, 16($30) + + move $28, $23 + jalr $24 // Reenter the caller function + nop + + // Switch back to the rust stack + move $29, $30 + + // Save the return value + addiu $29, $29, -24 + sw $2, 16($29) + sw $3, 20($29) + + move $28, $23 + lw $25, %call16(upcall_del_stack)($23) + jalr $25 + nop + + // Restore the return value + lw $2, 16($29) + lw $3, 20($29) + addiu $29, $29, 24 + + lw $31, 8($29) + lw $30, 4($29) + lw $23, 0($29) + addiu $29, $29, 12 + + jr $31 + nop +.end __morestack +.cfi_endproc diff --git a/src/rt/arch/mips/record_sp.S b/src/rt/arch/mips/record_sp.S index dd4d2f393754d..a88fefead049f 100644 --- a/src/rt/arch/mips/record_sp.S +++ b/src/rt/arch/mips/record_sp.S @@ -16,8 +16,8 @@ record_sp_limit: .set mips32r2 rdhwr $3, $29 .set pop - addiu $3, $3, -0x7008 - sw $4, 4($3) + addiu $3, $3, -0x7004 + sw $4, 0($3) jr $31 nop .end record_sp_limit @@ -33,8 +33,8 @@ get_sp_limit: .set mips32r2 rdhwr $3, $29 .set pop - addiu $3, $3, -0x7008 - lw $2, 4($3) + addiu $3, $3, -0x7004 + lw $2, 0($3) jr $31 nop .end get_sp_limit diff --git a/src/rt/rust_task.h b/src/rt/rust_task.h index b76a177e1c87a..672af608db863 100644 --- a/src/rt/rust_task.h +++ b/src/rt/rust_task.h @@ -144,7 +144,7 @@ #define RED_ZONE_SIZE RZ_LINUX_64 #endif #ifdef __mips__ -#define RED_ZONE_SIZE RZ_LINUX_32 +#define RED_ZONE_SIZE RZ_MAC_32 #endif #endif #ifdef __APPLE__ From 050c744c23a8e01407452bc64ca63f92554afee2 Mon Sep 17 00:00:00 2001 From: James Miller Date: Thu, 9 May 2013 22:23:38 +1200 Subject: [PATCH 318/410] Add uninit intrinsic --- src/libcore/unstable/intrinsics.rs | 3 +++ src/librustc/middle/trans/foreign.rs | 3 +++ src/librustc/middle/trans/type_use.rs | 2 +- src/librustc/middle/typeck/check/mod.rs | 1 + src/test/run-pass/intrinsic-uninit.rs | 19 +++++++++++++++++++ 5 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 src/test/run-pass/intrinsic-uninit.rs diff --git a/src/libcore/unstable/intrinsics.rs b/src/libcore/unstable/intrinsics.rs index 363dbb84c1c3e..cfd305f4b70c1 100644 --- a/src/libcore/unstable/intrinsics.rs +++ b/src/libcore/unstable/intrinsics.rs @@ -44,6 +44,9 @@ pub extern "rust-intrinsic" { pub fn init() -> T; + #[cfg(not(stage0))] + pub unsafe fn uninit() -> T; + pub fn forget(_: T) -> (); pub fn needs_drop() -> bool; diff --git a/src/librustc/middle/trans/foreign.rs b/src/librustc/middle/trans/foreign.rs index 7eea65e458f1e..26654cf31f861 100644 --- a/src/librustc/middle/trans/foreign.rs +++ b/src/librustc/middle/trans/foreign.rs @@ -715,6 +715,9 @@ pub fn trans_intrinsic(ccx: @CrateContext, Store(bcx, C_null(lltp_ty), fcx.llretptr.get()); } } + ~"uninit" => { + // Do nothing, this is effectively a no-op + } ~"forget" => {} ~"transmute" => { let (in_type, out_type) = (substs.tys[0], substs.tys[1]); diff --git a/src/librustc/middle/trans/type_use.rs b/src/librustc/middle/trans/type_use.rs index f1c3a42d1583e..cbad7bcb3a6be 100644 --- a/src/librustc/middle/trans/type_use.rs +++ b/src/librustc/middle/trans/type_use.rs @@ -118,7 +118,7 @@ pub fn type_uses_for(ccx: @CrateContext, fn_id: def_id, n_tps: uint) if abi.is_intrinsic() { let flags = match *cx.ccx.sess.str_of(i.ident) { ~"size_of" | ~"pref_align_of" | ~"min_align_of" | - ~"init" | ~"transmute" | ~"move_val" | + ~"uninit" | ~"init" | ~"transmute" | ~"move_val" | ~"move_val_init" => use_repr, ~"get_tydesc" | ~"needs_drop" => use_tydesc, diff --git a/src/librustc/middle/typeck/check/mod.rs b/src/librustc/middle/typeck/check/mod.rs index 6cd10b5bd6f1b..a6f2f0da234d4 100644 --- a/src/librustc/middle/typeck/check/mod.rs +++ b/src/librustc/middle/typeck/check/mod.rs @@ -3447,6 +3447,7 @@ pub fn check_intrinsic_type(ccx: @mut CrateCtxt, it: @ast::foreign_item) { ~"size_of" | ~"pref_align_of" | ~"min_align_of" => (1u, ~[], ty::mk_uint()), ~"init" => (1u, ~[], param(ccx, 0u)), + ~"uninit" => (1u, ~[], param(ccx, 0u)), ~"forget" => (1u, ~[arg(param(ccx, 0u))], ty::mk_nil()), ~"transmute" => (2, ~[ arg(param(ccx, 0)) ], param(ccx, 1)), ~"move_val" | ~"move_val_init" => { diff --git a/src/test/run-pass/intrinsic-uninit.rs b/src/test/run-pass/intrinsic-uninit.rs new file mode 100644 index 0000000000000..a835c9531bf78 --- /dev/null +++ b/src/test/run-pass/intrinsic-uninit.rs @@ -0,0 +1,19 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +mod rusti { + #[abi = "rust-intrinsic"] + pub extern "rust-intrinsic" { + fn uninit() -> T; + } +} +pub fn main() { + let _a : int = unsafe {rusti::uninit()}; +} From f5ab112e6b083ab20fdcf9e2fff7dde4a85940b0 Mon Sep 17 00:00:00 2001 From: James Miller Date: Thu, 9 May 2013 22:41:26 +1200 Subject: [PATCH 319/410] Replace init() with uninit() where appropriate --- src/libcore/cast.rs | 2 +- src/libcore/vec.rs | 13 ++++--------- src/libstd/priority_queue.rs | 4 ++-- src/libstd/rc.rs | 4 ++-- 4 files changed, 9 insertions(+), 14 deletions(-) diff --git a/src/libcore/cast.rs b/src/libcore/cast.rs index 5e6d2f8b910c6..fe5da8bae693f 100644 --- a/src/libcore/cast.rs +++ b/src/libcore/cast.rs @@ -25,7 +25,7 @@ pub mod rusti { /// Casts the value at `src` to U. The two types must have the same length. pub unsafe fn transmute_copy(src: &T) -> U { - let mut dest: U = unstable::intrinsics::init(); + let mut dest: U = unstable::intrinsics::uninit(); { let dest_ptr: *mut u8 = rusti::transmute(&mut dest); let src_ptr: *u8 = rusti::transmute(src); diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs index 404e32b2e2ec7..ea780ff9bdd95 100644 --- a/src/libcore/vec.rs +++ b/src/libcore/vec.rs @@ -591,8 +591,7 @@ pub fn pop(v: &mut ~[T]) -> T { } let valptr = ptr::to_mut_unsafe_ptr(&mut v[ln - 1u]); unsafe { - // FIXME #4204: Should be uninit() - we don't need this zeroed - let mut val = intrinsics::init(); + let mut val = intrinsics::uninit(); val <-> *valptr; raw::set_len(v, ln - 1u); val @@ -666,8 +665,7 @@ pub fn push_all_move(v: &mut ~[T], mut rhs: ~[T]) { unsafe { do as_mut_buf(rhs) |p, len| { for uint::range(0, len) |i| { - // FIXME #4204 Should be uninit() - don't need to zero - let mut x = intrinsics::init(); + let mut x = intrinsics::uninit(); x <-> *ptr::mut_offset(p, i); push(&mut *v, x); } @@ -683,8 +681,7 @@ pub fn truncate(v: &mut ~[T], newlen: uint) { unsafe { // This loop is optimized out for non-drop types. for uint::range(newlen, oldlen) |i| { - // FIXME #4204 Should be uninit() - don't need to zero - let mut dropped = intrinsics::init(); + let mut dropped = intrinsics::uninit(); dropped <-> *ptr::mut_offset(p, i); } } @@ -709,9 +706,7 @@ pub fn dedup(v: &mut ~[T]) { // last_written < next_to_read < ln if *ptr::mut_offset(p, next_to_read) == *ptr::mut_offset(p, last_written) { - // FIXME #4204 Should be uninit() - don't need to - // zero - let mut dropped = intrinsics::init(); + let mut dropped = intrinsics::uninit(); dropped <-> *ptr::mut_offset(p, next_to_read); } else { last_written += 1; diff --git a/src/libstd/priority_queue.rs b/src/libstd/priority_queue.rs index 9bf7db07ac9dd..2ca13c43d342e 100644 --- a/src/libstd/priority_queue.rs +++ b/src/libstd/priority_queue.rs @@ -139,7 +139,7 @@ pub impl PriorityQueue { while pos > start { let parent = (pos - 1) >> 1; if new > self.data[parent] { - let mut x = rusti::init(); + let mut x = rusti::uninit(); x <-> self.data[parent]; rusti::move_val_init(&mut self.data[pos], x); pos = parent; @@ -162,7 +162,7 @@ pub impl PriorityQueue { if right < end && !(self.data[child] > self.data[right]) { child = right; } - let mut x = rusti::init(); + let mut x = rusti::uninit(); x <-> self.data[child]; rusti::move_val_init(&mut self.data[pos], x); pos = child; diff --git a/src/libstd/rc.rs b/src/libstd/rc.rs index 815f03f426913..3095bdd16d0bf 100644 --- a/src/libstd/rc.rs +++ b/src/libstd/rc.rs @@ -51,7 +51,7 @@ impl Drop for Rc { unsafe { (*self.ptr).count -= 1; if (*self.ptr).count == 0 { - let mut x = intrinsics::init(); + let mut x = intrinsics::uninit(); x <-> *self.ptr; free(self.ptr as *c_void) } @@ -159,7 +159,7 @@ impl Drop for RcMut { unsafe { (*self.ptr).count -= 1; if (*self.ptr).count == 0 { - let mut x = rusti::init(); + let mut x = rusti::uninit(); x <-> *self.ptr; free(self.ptr as *c_void) } From 57509709b4ecc31b04b765bd07cd5fe672667e43 Mon Sep 17 00:00:00 2001 From: James Miller Date: Thu, 9 May 2013 23:05:17 +1200 Subject: [PATCH 320/410] Make staged versions of the functions that use uninit --- src/libcore/cast.rs | 14 ++++++ src/libcore/vec.rs | 90 ++++++++++++++++++++++++++++++++++++ src/libstd/priority_queue.rs | 47 +++++++++++++++++++ src/libstd/rc.rs | 33 +++++++++++++ 4 files changed, 184 insertions(+) diff --git a/src/libcore/cast.rs b/src/libcore/cast.rs index fe5da8bae693f..7451353458e28 100644 --- a/src/libcore/cast.rs +++ b/src/libcore/cast.rs @@ -24,6 +24,7 @@ pub mod rusti { } /// Casts the value at `src` to U. The two types must have the same length. +#[cfg(not(stage0))] pub unsafe fn transmute_copy(src: &T) -> U { let mut dest: U = unstable::intrinsics::uninit(); { @@ -36,6 +37,19 @@ pub unsafe fn transmute_copy(src: &T) -> U { dest } +#[cfg(stage0)] +pub unsafe fn transmute_copy(src: &T) -> U { + let mut dest: U = unstable::intrinsics::init(); + { + let dest_ptr: *mut u8 = rusti::transmute(&mut dest); + let src_ptr: *u8 = rusti::transmute(src); + unstable::intrinsics::memmove64(dest_ptr, + src_ptr, + sys::size_of::() as u64); + } + dest +} + /** * Move a thing into the void * diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs index ea780ff9bdd95..137a573fb790d 100644 --- a/src/libcore/vec.rs +++ b/src/libcore/vec.rs @@ -584,6 +584,7 @@ pub fn consume_reverse(mut v: ~[T], f: &fn(uint, v: T)) { } /// Remove the last element from a vector and return it +#[cfg(not(stage0))] pub fn pop(v: &mut ~[T]) -> T { let ln = v.len(); if ln == 0 { @@ -598,6 +599,21 @@ pub fn pop(v: &mut ~[T]) -> T { } } +#[cfg(stage0)] +pub fn pop(v: &mut ~[T]) -> T { + let ln = v.len(); + if ln == 0 { + fail!(~"sorry, cannot vec::pop an empty vector") + } + let valptr = ptr::to_mut_unsafe_ptr(&mut v[ln - 1u]); + unsafe { + let mut val = intrinsics::init(); + val <-> *valptr; + raw::set_len(v, ln - 1u); + val + } +} + /** * Remove an element from anywhere in the vector and return it, replacing it * with the last element. This does not preserve ordering, but is O(1). @@ -659,6 +675,7 @@ pub fn push_all(v: &mut ~[T], rhs: &const [T]) { } #[inline(always)] +#[cfg(not(stage0))] pub fn push_all_move(v: &mut ~[T], mut rhs: ~[T]) { let new_len = v.len() + rhs.len(); reserve(&mut *v, new_len); @@ -674,7 +691,25 @@ pub fn push_all_move(v: &mut ~[T], mut rhs: ~[T]) { } } +#[inline(always)] +#[cfg(stage0)] +pub fn push_all_move(v: &mut ~[T], mut rhs: ~[T]) { + let new_len = v.len() + rhs.len(); + reserve(&mut *v, new_len); + unsafe { + do as_mut_buf(rhs) |p, len| { + for uint::range(0, len) |i| { + let mut x = intrinsics::init(); + x <-> *ptr::mut_offset(p, i); + push(&mut *v, x); + } + } + raw::set_len(&mut rhs, 0); + } +} + /// Shorten a vector, dropping excess elements. +#[cfg(not(stage0))] pub fn truncate(v: &mut ~[T], newlen: uint) { do as_mut_buf(*v) |p, oldlen| { assert!(newlen <= oldlen); @@ -689,10 +724,27 @@ pub fn truncate(v: &mut ~[T], newlen: uint) { unsafe { raw::set_len(&mut *v, newlen); } } +/// Shorten a vector, dropping excess elements. +#[cfg(stage0)] +pub fn truncate(v: &mut ~[T], newlen: uint) { + do as_mut_buf(*v) |p, oldlen| { + assert!(newlen <= oldlen); + unsafe { + // This loop is optimized out for non-drop types. + for uint::range(newlen, oldlen) |i| { + let mut dropped = intrinsics::init(); + dropped <-> *ptr::mut_offset(p, i); + } + } + } + unsafe { raw::set_len(&mut *v, newlen); } +} + /** * Remove consecutive repeated elements from a vector; if the vector is * sorted, this removes all duplicates. */ +#[cfg(not(stage0))] pub fn dedup(v: &mut ~[T]) { unsafe { if v.len() < 1 { return; } @@ -726,6 +778,44 @@ pub fn dedup(v: &mut ~[T]) { } } +/** + * Remove consecutive repeated elements from a vector; if the vector is + * sorted, this removes all duplicates. + */ +#[cfg(stage0)] +pub fn dedup(v: &mut ~[T]) { + unsafe { + if v.len() < 1 { return; } + let mut last_written = 0, next_to_read = 1; + do as_const_buf(*v) |p, ln| { + // We have a mutable reference to v, so we can make arbitrary + // changes. (cf. push and pop) + let p = p as *mut T; + // last_written < next_to_read <= ln + while next_to_read < ln { + // last_written < next_to_read < ln + if *ptr::mut_offset(p, next_to_read) == + *ptr::mut_offset(p, last_written) { + let mut dropped = intrinsics::init(); + dropped <-> *ptr::mut_offset(p, next_to_read); + } else { + last_written += 1; + // last_written <= next_to_read < ln + if next_to_read != last_written { + *ptr::mut_offset(p, last_written) <-> + *ptr::mut_offset(p, next_to_read); + } + } + // last_written <= next_to_read < ln + next_to_read += 1; + // last_written < next_to_read <= ln + } + } + // last_written < next_to_read == ln + raw::set_len(v, last_written + 1); + } +} + // Appending #[inline(always)] diff --git a/src/libstd/priority_queue.rs b/src/libstd/priority_queue.rs index 2ca13c43d342e..b5dd9e456a107 100644 --- a/src/libstd/priority_queue.rs +++ b/src/libstd/priority_queue.rs @@ -132,6 +132,7 @@ pub impl PriorityQueue { // vector over the junk element. This reduces the constant factor // compared to using swaps, which involves twice as many moves. + #[cfg(not(stage0))] priv fn siftup(&mut self, start: uint, mut pos: uint) { unsafe { let new = *ptr::to_unsafe_ptr(&self.data[pos]); @@ -151,6 +152,28 @@ pub impl PriorityQueue { } } + #[cfg(stage0)] + priv fn siftup(&mut self, start: uint, mut pos: uint) { + unsafe { + let new = *ptr::to_unsafe_ptr(&self.data[pos]); + + while pos > start { + let parent = (pos - 1) >> 1; + if new > self.data[parent] { + let mut x = rusti::init(); + x <-> self.data[parent]; + rusti::move_val_init(&mut self.data[pos], x); + pos = parent; + loop + } + break + } + rusti::move_val_init(&mut self.data[pos], new); + } + } + + + #[cfg(not(stage0))] priv fn siftdown_range(&mut self, mut pos: uint, end: uint) { unsafe { let start = pos; @@ -174,6 +197,30 @@ pub impl PriorityQueue { } } + #[cfg(stage0)] + priv fn siftdown_range(&mut self, mut pos: uint, end: uint) { + unsafe { + let start = pos; + let new = *ptr::to_unsafe_ptr(&self.data[pos]); + + let mut child = 2 * pos + 1; + while child < end { + let right = child + 1; + if right < end && !(self.data[child] > self.data[right]) { + child = right; + } + let mut x = rusti::init(); + x <-> self.data[child]; + rusti::move_val_init(&mut self.data[pos], x); + pos = child; + child = 2 * pos + 1; + } + + rusti::move_val_init(&mut self.data[pos], new); + self.siftup(start, pos); + } + } + priv fn siftdown(&mut self, pos: uint) { let len = self.len(); self.siftdown_range(pos, len); diff --git a/src/libstd/rc.rs b/src/libstd/rc.rs index 3095bdd16d0bf..da90716316b2e 100644 --- a/src/libstd/rc.rs +++ b/src/libstd/rc.rs @@ -46,6 +46,7 @@ pub impl Rc { } #[unsafe_destructor] +#[cfg(not(stage0))] impl Drop for Rc { fn finalize(&self) { unsafe { @@ -59,6 +60,22 @@ impl Drop for Rc { } } +#[unsafe_destructor] +#[cfg(stage0)] +impl Drop for Rc { + fn finalize(&self) { + unsafe { + (*self.ptr).count -= 1; + if (*self.ptr).count == 0 { + let mut x = intrinsics::init(); + x <-> *self.ptr; + free(self.ptr as *c_void) + } + } + } +} + + impl Clone for Rc { #[inline] fn clone(&self) -> Rc { @@ -154,6 +171,7 @@ pub impl RcMut { } #[unsafe_destructor] +#[cfg(not(stage0))] impl Drop for RcMut { fn finalize(&self) { unsafe { @@ -167,6 +185,21 @@ impl Drop for RcMut { } } +#[unsafe_destructor] +#[cfg(stage0)] +impl Drop for RcMut { + fn finalize(&self) { + unsafe { + (*self.ptr).count -= 1; + if (*self.ptr).count == 0 { + let mut x = rusti::init(); + x <-> *self.ptr; + free(self.ptr as *c_void) + } + } + } +} + impl Clone for RcMut { #[inline] fn clone(&self) -> RcMut { From 414970c46f75c730d7fed029deb48b0d1c454391 Mon Sep 17 00:00:00 2001 From: James Miller Date: Thu, 9 May 2013 23:16:07 +1200 Subject: [PATCH 321/410] Add intrinsic declaration where I missed them --- src/libstd/priority_queue.rs | 2 ++ src/libstd/rc.rs | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/libstd/priority_queue.rs b/src/libstd/priority_queue.rs index b5dd9e456a107..e386b6fbd8231 100644 --- a/src/libstd/priority_queue.rs +++ b/src/libstd/priority_queue.rs @@ -16,6 +16,8 @@ use core::old_iter::BaseIter; extern "rust-intrinsic" mod rusti { fn move_val_init(dst: &mut T, src: T); fn init() -> T; + #[cfg(not(stage0))] + fn uninit() -> T; } pub struct PriorityQueue { diff --git a/src/libstd/rc.rs b/src/libstd/rc.rs index da90716316b2e..9eab1adde4759 100644 --- a/src/libstd/rc.rs +++ b/src/libstd/rc.rs @@ -114,6 +114,8 @@ mod test_rc { #[abi = "rust-intrinsic"] extern "rust-intrinsic" mod rusti { fn init() -> T; + #[cfg(not(stage0))] + fn uninit() -> T; } #[deriving(Eq)] From d6efbad33fc4e75df77c4f90ef83e3a0da0e0bb5 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Wed, 8 May 2013 15:50:27 -0400 Subject: [PATCH 322/410] Mark c_vec functions as unsafe again --- src/libstd/c_vec.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libstd/c_vec.rs b/src/libstd/c_vec.rs index b4b4e2bf1a2cb..17b7bae6de5df 100644 --- a/src/libstd/c_vec.rs +++ b/src/libstd/c_vec.rs @@ -78,7 +78,7 @@ fn DtorRes(dtor: Option<@fn()>) -> DtorRes { * * base - A foreign pointer to a buffer * * len - The number of elements in the buffer */ -pub fn CVec(base: *mut T, len: uint) -> CVec { +pub unsafe fn CVec(base: *mut T, len: uint) -> CVec { return CVec{ base: base, len: len, @@ -97,7 +97,7 @@ pub fn CVec(base: *mut T, len: uint) -> CVec { * * dtor - A function to run when the value is destructed, useful * for freeing the buffer, etc. */ -pub fn c_vec_with_dtor(base: *mut T, len: uint, dtor: @fn()) +pub unsafe fn c_vec_with_dtor(base: *mut T, len: uint, dtor: @fn()) -> CVec { return CVec{ base: base, @@ -138,7 +138,7 @@ pub fn set(t: CVec, ofs: uint, v: T) { pub fn len(t: CVec) -> uint { t.len } /// Returns a pointer to the first element of the vector -pub fn ptr(t: CVec) -> *mut T { t.base } +pub unsafe fn ptr(t: CVec) -> *mut T { t.base } #[cfg(test)] mod tests { @@ -191,7 +191,7 @@ mod tests { #[test] fn test_and_I_mean_it() { let cv = malloc(16u as size_t); - let p = ptr(cv); + let p = unsafe { ptr(cv) }; set(cv, 0u, 32u8); set(cv, 1u, 33u8); From 1393c3a3f438c896083405dca501c8cf05767c65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Steinbrink?= Date: Thu, 2 May 2013 10:16:07 +0200 Subject: [PATCH 323/410] Use a specialized string interner to reduce the need for owned strings &str can be turned into @~str on demand, using to_owned(), so for strings, we can create a specialized interner that accepts &str for intern() and find() but stores and returns @~str. --- src/librustc/back/link.rs | 12 +- src/librustc/driver/session.rs | 4 +- src/librustc/front/core_inject.rs | 6 +- src/librustc/front/test.rs | 4 +- src/librustc/metadata/csearch.rs | 2 +- src/librustc/metadata/decoder.rs | 10 +- src/librustc/middle/astencode.rs | 6 +- src/librustc/middle/resolve.rs | 36 +++--- src/librustc/middle/resolve_stage0.rs | 34 ++--- src/librustc/middle/trans/_match.rs | 20 +-- src/librustc/middle/trans/base.rs | 36 +++--- src/librustc/middle/trans/callee.rs | 2 +- src/librustc/middle/trans/closure.rs | 2 +- src/librustc/middle/trans/common.rs | 12 +- src/librustc/middle/trans/controlflow.rs | 26 ++-- src/librustc/middle/trans/debuginfo.rs | 4 +- src/librustc/middle/trans/expr.rs | 14 +- src/librustc/middle/trans/glue.rs | 4 +- src/librustc/middle/trans/meth.rs | 2 +- src/librustc/middle/trans/monomorphize.rs | 2 +- src/librustc/middle/trans/reflect.rs | 8 +- src/librustc/middle/trans/tvec.rs | 16 +-- src/librustc/middle/typeck/check/mod.rs | 12 +- src/librusti/rusti.rc | 2 +- src/libsyntax/ast.rs | 2 +- src/libsyntax/ext/auto_encode.rs | 144 ++++++++++----------- src/libsyntax/ext/base.rs | 6 +- src/libsyntax/ext/build.rs | 8 +- src/libsyntax/ext/concat_idents.rs | 2 +- src/libsyntax/ext/deriving/cmp/ord.rs | 6 +- src/libsyntax/ext/deriving/cmp/totalord.rs | 16 +-- src/libsyntax/ext/deriving/decodable.rs | 70 +++++----- src/libsyntax/ext/deriving/encodable.rs | 60 ++++----- src/libsyntax/ext/deriving/mod.rs | 6 +- src/libsyntax/ext/deriving/rand.rs | 12 +- src/libsyntax/ext/deriving/to_str.rs | 8 +- src/libsyntax/ext/deriving/ty.rs | 2 +- src/libsyntax/ext/fmt.rs | 61 +++++---- src/libsyntax/ext/pipes/ast_builder.rs | 14 +- src/libsyntax/ext/pipes/pipec.rs | 38 +++--- src/libsyntax/ext/quote.rs | 36 +++--- src/libsyntax/ext/tt/macro_rules.rs | 4 +- src/libsyntax/parse/lexer.rs | 44 +++---- src/libsyntax/parse/mod.rs | 12 +- src/libsyntax/parse/token.rs | 82 ++++++------ src/libsyntax/print/pprust.rs | 4 +- src/libsyntax/util/interner.rs | 56 ++++++++ src/test/compile-fail/qquote-1.rs | 6 +- src/test/compile-fail/qquote-2.rs | 6 +- src/test/run-pass-fulldeps/qquote.rs | 6 +- 50 files changed, 521 insertions(+), 466 deletions(-) diff --git a/src/librustc/back/link.rs b/src/librustc/back/link.rs index 3b5c90ec1f964..7342ebec8a0f2 100644 --- a/src/librustc/back/link.rs +++ b/src/librustc/back/link.rs @@ -698,8 +698,8 @@ pub fn exported_name(sess: Session, vers: &str) -> ~str { return mangle(sess, vec::append_one( - vec::append_one(path, path_name(sess.ident_of(hash.to_owned()))), - path_name(sess.ident_of(vers.to_owned())))); + vec::append_one(path, path_name(sess.ident_of(hash))), + path_name(sess.ident_of(vers)))); } pub fn mangle_exported_name(ccx: @CrateContext, @@ -717,14 +717,14 @@ pub fn mangle_internal_name_by_type_only(ccx: @CrateContext, let s = ppaux::ty_to_short_str(ccx.tcx, t); let hash = get_symbol_hash(ccx, t); return mangle(ccx.sess, - ~[path_name(ccx.sess.ident_of(name.to_owned())), + ~[path_name(ccx.sess.ident_of(name)), path_name(ccx.sess.ident_of(s)), - path_name(ccx.sess.ident_of(hash.to_owned()))]); + path_name(ccx.sess.ident_of(hash))]); } pub fn mangle_internal_name_by_path_and_seq(ccx: @CrateContext, path: path, - flav: ~str) -> ~str { + flav: &str) -> ~str { return mangle(ccx.sess, vec::append_one(path, path_name((ccx.names)(flav)))); } @@ -733,7 +733,7 @@ pub fn mangle_internal_name_by_path(ccx: @CrateContext, path: path) -> ~str { return mangle(ccx.sess, path); } -pub fn mangle_internal_name_by_seq(ccx: @CrateContext, flav: ~str) -> ~str { +pub fn mangle_internal_name_by_seq(ccx: @CrateContext, flav: &str) -> ~str { return fmt!("%s_%u", flav, (ccx.names)(flav).repr); } diff --git a/src/librustc/driver/session.rs b/src/librustc/driver/session.rs index 582e1d606bca6..e317269828b39 100644 --- a/src/librustc/driver/session.rs +++ b/src/librustc/driver/session.rs @@ -284,8 +284,8 @@ pub impl Session_ { fn str_of(@self, id: ast::ident) -> @~str { self.parse_sess.interner.get(id) } - fn ident_of(@self, st: ~str) -> ast::ident { - self.parse_sess.interner.intern(@st) + fn ident_of(@self, st: &str) -> ast::ident { + self.parse_sess.interner.intern(st) } fn intr(@self) -> @syntax::parse::token::ident_interner { self.parse_sess.interner diff --git a/src/librustc/front/core_inject.rs b/src/librustc/front/core_inject.rs index ec5ba74b7cc80..5862dd00b3ce5 100644 --- a/src/librustc/front/core_inject.rs +++ b/src/librustc/front/core_inject.rs @@ -42,7 +42,7 @@ fn inject_libcore_ref(sess: Session, let n1 = sess.next_node_id(); let vi1 = @ast::view_item { node: ast::view_item_extern_mod( - sess.ident_of(~"core"), ~[], n1), + sess.ident_of("core"), ~[], n1), attrs: ~[ spanned(ast::attribute_ { style: ast::attr_inner, @@ -78,8 +78,8 @@ fn inject_libcore_ref(sess: Session, span: dummy_sp(), global: false, idents: ~[ - sess.ident_of(~"core"), - sess.ident_of(~"prelude") + sess.ident_of("core"), + sess.ident_of("prelude") ], rp: None, types: ~[] diff --git a/src/librustc/front/test.rs b/src/librustc/front/test.rs index 0646afa126283..f556baee918f2 100644 --- a/src/librustc/front/test.rs +++ b/src/librustc/front/test.rs @@ -274,7 +274,7 @@ fn mk_std(cx: &TestCtxt) -> @ast::view_item { let vers = nospan(vers); let mi = ast::meta_name_value(@~"vers", vers); let mi = nospan(mi); - let id_std = cx.sess.ident_of(~"std"); + let id_std = cx.sess.ident_of("std"); let vi = if is_std(cx) { ast::view_item_use( ~[@nospan(ast::view_path_simple(id_std, @@ -322,7 +322,7 @@ fn mk_test_module(cx: &TestCtxt) -> @ast::item { attr::mk_attr(attr::mk_word_item(@~"!resolve_unexported")); let item = ast::item { - ident: cx.sess.ident_of(~"__test"), + ident: cx.sess.ident_of("__test"), attrs: ~[resolve_unexported_attr], id: cx.sess.next_node_id(), node: item_, diff --git a/src/librustc/metadata/csearch.rs b/src/librustc/metadata/csearch.rs index 375989b0ebe61..d9feb2f44dd2e 100644 --- a/src/librustc/metadata/csearch.rs +++ b/src/librustc/metadata/csearch.rs @@ -70,7 +70,7 @@ pub fn get_item_path(tcx: ty::ctxt, def: ast::def_id) -> ast_map::path { // FIXME #1920: This path is not always correct if the crate is not linked // into the root namespace. vec::append(~[ast_map::path_mod(tcx.sess.ident_of( - /*bad*/copy *cdata.name))], path) + *cdata.name))], path) } pub enum found_ast { diff --git a/src/librustc/metadata/decoder.rs b/src/librustc/metadata/decoder.rs index fd35a4425d870..3d37b93801a78 100644 --- a/src/librustc/metadata/decoder.rs +++ b/src/librustc/metadata/decoder.rs @@ -294,10 +294,10 @@ fn item_path(intr: @ident_interner, item_doc: ebml::Doc) -> ast_map::path { for reader::docs(path_doc) |tag, elt_doc| { if tag == tag_path_elt_mod { let str = reader::doc_as_str(elt_doc); - result.push(ast_map::path_mod(intr.intern(@str))); + result.push(ast_map::path_mod(intr.intern(str))); } else if tag == tag_path_elt_name { let str = reader::doc_as_str(elt_doc); - result.push(ast_map::path_name(intr.intern(@str))); + result.push(ast_map::path_name(intr.intern(str))); } else { // ignore tag_path_len element } @@ -311,7 +311,7 @@ fn item_name(intr: @ident_interner, item: ebml::Doc) -> ast::ident { do reader::with_doc_data(name) |data| { let string = str::from_bytes_slice(data); match intr.find_equiv(&StringRef(string)) { - None => intr.intern(@(string.to_owned())), + None => intr.intern(string), Some(val) => val, } } @@ -828,7 +828,7 @@ pub fn get_type_name_if_impl(intr: @ident_interner, } for reader::tagged_docs(item, tag_item_impl_type_basename) |doc| { - return Some(intr.intern(@str::from_bytes(reader::doc_data(doc)))); + return Some(intr.intern(str::from_bytes(reader::doc_data(doc)))); } return None; @@ -1080,7 +1080,7 @@ pub fn get_crate_deps(intr: @ident_interner, data: @~[u8]) -> ~[crate_dep] { } for reader::tagged_docs(depsdoc, tag_crate_dep) |depdoc| { deps.push(crate_dep {cnum: crate_num, - name: intr.intern(@docstr(depdoc, tag_crate_dep_name)), + name: intr.intern(docstr(depdoc, tag_crate_dep_name)), vers: @docstr(depdoc, tag_crate_dep_vers), hash: @docstr(depdoc, tag_crate_dep_hash)}); crate_num += 1; diff --git a/src/librustc/middle/astencode.rs b/src/librustc/middle/astencode.rs index c223ff821c268..0afabd53ba95a 100644 --- a/src/librustc/middle/astencode.rs +++ b/src/librustc/middle/astencode.rs @@ -1163,7 +1163,7 @@ trait fake_ext_ctxt { fn cfg(&self) -> ast::crate_cfg; fn parse_sess(&self) -> @mut parse::ParseSess; fn call_site(&self) -> span; - fn ident_of(&self, st: ~str) -> ast::ident; + fn ident_of(&self, st: &str) -> ast::ident; } #[cfg(test)] @@ -1180,8 +1180,8 @@ impl fake_ext_ctxt for fake_session { expn_info: None } } - fn ident_of(&self, st: ~str) -> ast::ident { - self.interner.intern(@st) + fn ident_of(&self, st: &str) -> ast::ident { + self.interner.intern(st) } } diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs index 5c3bb6ca401a6..18fc1e688e5ed 100644 --- a/src/librustc/middle/resolve.rs +++ b/src/librustc/middle/resolve.rs @@ -708,7 +708,7 @@ pub struct PrimitiveTypeTable { } pub impl PrimitiveTypeTable { - fn intern(&mut self, intr: @ident_interner, string: @~str, + fn intern(&mut self, intr: @ident_interner, string: &str, primitive_type: prim_ty) { let ident = intr.intern(string); self.primitive_types.insert(ident, primitive_type); @@ -720,22 +720,22 @@ pub fn PrimitiveTypeTable(intr: @ident_interner) -> PrimitiveTypeTable { primitive_types: HashMap::new() }; - table.intern(intr, @~"bool", ty_bool); - table.intern(intr, @~"char", ty_int(ty_char)); - table.intern(intr, @~"float", ty_float(ty_f)); - table.intern(intr, @~"f32", ty_float(ty_f32)); - table.intern(intr, @~"f64", ty_float(ty_f64)); - table.intern(intr, @~"int", ty_int(ty_i)); - table.intern(intr, @~"i8", ty_int(ty_i8)); - table.intern(intr, @~"i16", ty_int(ty_i16)); - table.intern(intr, @~"i32", ty_int(ty_i32)); - table.intern(intr, @~"i64", ty_int(ty_i64)); - table.intern(intr, @~"str", ty_str); - table.intern(intr, @~"uint", ty_uint(ty_u)); - table.intern(intr, @~"u8", ty_uint(ty_u8)); - table.intern(intr, @~"u16", ty_uint(ty_u16)); - table.intern(intr, @~"u32", ty_uint(ty_u32)); - table.intern(intr, @~"u64", ty_uint(ty_u64)); + table.intern(intr, "bool", ty_bool); + table.intern(intr, "char", ty_int(ty_char)); + table.intern(intr, "float", ty_float(ty_f)); + table.intern(intr, "f32", ty_float(ty_f32)); + table.intern(intr, "f64", ty_float(ty_f64)); + table.intern(intr, "int", ty_int(ty_i)); + table.intern(intr, "i8", ty_int(ty_i8)); + table.intern(intr, "i16", ty_int(ty_i16)); + table.intern(intr, "i32", ty_int(ty_i32)); + table.intern(intr, "i64", ty_int(ty_i64)); + table.intern(intr, "str", ty_str); + table.intern(intr, "uint", ty_uint(ty_u)); + table.intern(intr, "u8", ty_uint(ty_u8)); + table.intern(intr, "u16", ty_uint(ty_u16)); + table.intern(intr, "u32", ty_uint(ty_u32)); + table.intern(intr, "u64", ty_uint(ty_u64)); return table; } @@ -1675,7 +1675,7 @@ pub impl Resolver { let mut current_module = root; for pieces.each |ident_str| { - let ident = self.session.ident_of(/*bad*/copy *ident_str); + let ident = self.session.ident_of(*ident_str); // Create or reuse a graph node for the child. let (child_name_bindings, new_parent) = self.add_child(ident, diff --git a/src/librustc/middle/resolve_stage0.rs b/src/librustc/middle/resolve_stage0.rs index 3a6424efe1d22..0f78f7bb90dd3 100644 --- a/src/librustc/middle/resolve_stage0.rs +++ b/src/librustc/middle/resolve_stage0.rs @@ -709,7 +709,7 @@ pub struct PrimitiveTypeTable { } pub impl PrimitiveTypeTable { - fn intern(&mut self, intr: @ident_interner, string: @~str, + fn intern(&mut self, intr: @ident_interner, string: &str, primitive_type: prim_ty) { let ident = intr.intern(string); self.primitive_types.insert(ident, primitive_type); @@ -721,22 +721,22 @@ pub fn PrimitiveTypeTable(intr: @ident_interner) -> PrimitiveTypeTable { primitive_types: HashMap::new() }; - table.intern(intr, @~"bool", ty_bool); - table.intern(intr, @~"char", ty_int(ty_char)); - table.intern(intr, @~"float", ty_float(ty_f)); - table.intern(intr, @~"f32", ty_float(ty_f32)); - table.intern(intr, @~"f64", ty_float(ty_f64)); - table.intern(intr, @~"int", ty_int(ty_i)); - table.intern(intr, @~"i8", ty_int(ty_i8)); - table.intern(intr, @~"i16", ty_int(ty_i16)); - table.intern(intr, @~"i32", ty_int(ty_i32)); - table.intern(intr, @~"i64", ty_int(ty_i64)); - table.intern(intr, @~"str", ty_str); - table.intern(intr, @~"uint", ty_uint(ty_u)); - table.intern(intr, @~"u8", ty_uint(ty_u8)); - table.intern(intr, @~"u16", ty_uint(ty_u16)); - table.intern(intr, @~"u32", ty_uint(ty_u32)); - table.intern(intr, @~"u64", ty_uint(ty_u64)); + table.intern(intr, "bool", ty_bool); + table.intern(intr, "char", ty_int(ty_char)); + table.intern(intr, "float", ty_float(ty_f)); + table.intern(intr, "f32", ty_float(ty_f32)); + table.intern(intr, "f64", ty_float(ty_f64)); + table.intern(intr, "int", ty_int(ty_i)); + table.intern(intr, "i8", ty_int(ty_i8)); + table.intern(intr, "i16", ty_int(ty_i16)); + table.intern(intr, "i32", ty_int(ty_i32)); + table.intern(intr, "i64", ty_int(ty_i64)); + table.intern(intr, "str", ty_str); + table.intern(intr, "uint", ty_uint(ty_u)); + table.intern(intr, "u8", ty_uint(ty_u8)); + table.intern(intr, "u16", ty_uint(ty_u16)); + table.intern(intr, "u32", ty_uint(ty_u32)); + table.intern(intr, "u64", ty_uint(ty_u64)); return table; } diff --git a/src/librustc/middle/trans/_match.rs b/src/librustc/middle/trans/_match.rs index 1443a7ef30407..90167b50c9d3c 100644 --- a/src/librustc/middle/trans/_match.rs +++ b/src/librustc/middle/trans/_match.rs @@ -1222,7 +1222,7 @@ pub fn compile_guard(bcx: block, let val = unpack_result!(bcx, { do with_scope_result(bcx, guard_expr.info(), - ~"guard") |bcx| { + "guard") |bcx| { expr::trans_to_datum(bcx, guard_expr).to_result() } }); @@ -1446,7 +1446,7 @@ pub fn compile_submatch(bcx: block, } let else_cx = match kind { no_branch | single => bcx, - _ => sub_block(bcx, ~"match_else") + _ => sub_block(bcx, "match_else") }; let sw = if kind == switch { Switch(bcx, test_val, else_cx.llbb, opts.len()) @@ -1464,7 +1464,7 @@ pub fn compile_submatch(bcx: block, i += 1u; let mut opt_cx = else_cx; if !exhaustive || i < len { - opt_cx = sub_block(bcx, ~"match_case"); + opt_cx = sub_block(bcx, "match_case"); match kind { single => Br(bcx, opt_cx.llbb), switch => { @@ -1486,7 +1486,7 @@ pub fn compile_submatch(bcx: block, let t = node_id_type(bcx, pat_id); let Result {bcx: after_cx, val: matches} = { do with_scope_result(bcx, None, - ~"compare_scope") |bcx| { + "compare_scope") |bcx| { match trans_opt(bcx, opt) { single_result( Result {bcx, val}) => { @@ -1514,13 +1514,13 @@ pub fn compile_submatch(bcx: block, } } }; - bcx = sub_block(after_cx, ~"compare_next"); + bcx = sub_block(after_cx, "compare_next"); CondBr(after_cx, matches, opt_cx.llbb, bcx.llbb); } compare_vec_len => { let Result {bcx: after_cx, val: matches} = { do with_scope_result(bcx, None, - ~"compare_vec_len_scope") |bcx| { + "compare_vec_len_scope") |bcx| { match trans_opt(bcx, opt) { single_result( Result {bcx, val}) => { @@ -1552,7 +1552,7 @@ pub fn compile_submatch(bcx: block, } } }; - bcx = sub_block(after_cx, ~"compare_vec_len_next"); + bcx = sub_block(after_cx, "compare_vec_len_next"); CondBr(after_cx, matches, opt_cx.llbb, bcx.llbb); } _ => () @@ -1610,7 +1610,7 @@ pub fn trans_match(bcx: block, arms: ~[ast::arm], dest: Dest) -> block { let _icx = bcx.insn_ctxt("match::trans_match"); - do with_scope(bcx, match_expr.info(), ~"match") |bcx| { + do with_scope(bcx, match_expr.info(), "match") |bcx| { trans_match_inner(bcx, discr_expr, arms, dest) } } @@ -1632,7 +1632,7 @@ pub fn trans_match_inner(scope_cx: block, let mut arm_datas = ~[], matches = ~[]; for arms.each |arm| { - let body = scope_block(bcx, arm.body.info(), ~"case_body"); + let body = scope_block(bcx, arm.body.info(), "case_body"); // Create the bindings map, which is a mapping from each binding name // to an alloca() that will be the value for that local variable. @@ -1716,7 +1716,7 @@ pub fn trans_match_inner(scope_cx: block, fn mk_fail(bcx: block, sp: span, msg: @~str, finished: @mut Option) -> BasicBlockRef { match *finished { Some(bb) => return bb, _ => () } - let fail_cx = sub_block(bcx, ~"case_fallthrough"); + let fail_cx = sub_block(bcx, "case_fallthrough"); controlflow::trans_fail(fail_cx, Some(sp), msg); *finished = Some(fail_cx.llbb); return fail_cx.llbb; diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs index 77a90e2215087..c2f1f52ddce36 100644 --- a/src/librustc/middle/trans/base.rs +++ b/src/librustc/middle/trans/base.rs @@ -703,11 +703,11 @@ pub fn iter_structural_ty(cx: block, av: ValueRef, t: ty::t, } (_match::switch, Some(lldiscrim_a)) => { cx = f(cx, lldiscrim_a, ty::mk_int()); - let unr_cx = sub_block(cx, ~"enum-iter-unr"); + let unr_cx = sub_block(cx, "enum-iter-unr"); Unreachable(unr_cx); let llswitch = Switch(cx, lldiscrim_a, unr_cx.llbb, n_variants); - let next_cx = sub_block(cx, ~"enum-iter-next"); + let next_cx = sub_block(cx, "enum-iter-next"); for (*variants).each |variant| { let variant_cx = @@ -847,7 +847,7 @@ pub fn invoke(bcx: block, llfn: ValueRef, llargs: ~[ValueRef]) debug!("arg: %x", ::core::cast::transmute(llarg)); } } - let normal_bcx = sub_block(bcx, ~"normal return"); + let normal_bcx = sub_block(bcx, "normal return"); let llresult = Invoke(bcx, llfn, llargs, @@ -949,7 +949,7 @@ pub fn get_landing_pad(bcx: block) -> BasicBlockRef { match inf.landing_pad { Some(target) => cached = Some(target), None => { - pad_bcx = lpad_block(bcx, ~"unwind"); + pad_bcx = lpad_block(bcx, "unwind"); inf.landing_pad = Some(pad_bcx.llbb); } } @@ -1168,7 +1168,7 @@ pub fn trans_stmt(cx: block, s: &ast::stmt) -> block { // You probably don't want to use this one. See the // next three functions instead. pub fn new_block(cx: fn_ctxt, parent: Option, kind: block_kind, - is_lpad: bool, name: ~str, opt_node_info: Option) + is_lpad: bool, name: &str, opt_node_info: Option) -> block { let s = if cx.ccx.sess.opts.save_temps || cx.ccx.sess.opts.debuginfo { @@ -1207,12 +1207,12 @@ pub fn simple_block_scope() -> block_kind { pub fn top_scope_block(fcx: fn_ctxt, opt_node_info: Option) -> block { return new_block(fcx, None, simple_block_scope(), false, - ~"function top level", opt_node_info); + "function top level", opt_node_info); } pub fn scope_block(bcx: block, opt_node_info: Option, - n: ~str) -> block { + n: &str) -> block { return new_block(bcx.fcx, Some(bcx), simple_block_scope(), bcx.is_lpad, n, opt_node_info); } @@ -1220,7 +1220,7 @@ pub fn scope_block(bcx: block, pub fn loop_scope_block(bcx: block, loop_break: block, loop_label: Option, - n: ~str, + n: &str, opt_node_info: Option) -> block { return new_block(bcx.fcx, Some(bcx), block_scope(@mut scope_info { loop_break: Some(loop_break), @@ -1232,12 +1232,12 @@ pub fn loop_scope_block(bcx: block, } // Use this when creating a block for the inside of a landing pad. -pub fn lpad_block(bcx: block, n: ~str) -> block { +pub fn lpad_block(bcx: block, n: &str) -> block { new_block(bcx.fcx, Some(bcx), block_non_scope, true, n, None) } // Use this when you're making a general CFG BB within a scope. -pub fn sub_block(bcx: block, n: ~str) -> block { +pub fn sub_block(bcx: block, n: &str) -> block { new_block(bcx.fcx, Some(bcx), block_non_scope, bcx.is_lpad, n, None) } @@ -1309,7 +1309,7 @@ pub fn cleanup_and_leave(bcx: block, Br(bcx, cp.dest); return; } - let sub_cx = sub_block(bcx, ~"cleanup"); + let sub_cx = sub_block(bcx, "cleanup"); Br(bcx, sub_cx.llbb); inf.cleanup_paths.push(cleanup_path { target: leave, @@ -1346,7 +1346,7 @@ pub fn cleanup_and_Br(bcx: block, upto: block, target: BasicBlockRef) { pub fn leave_block(bcx: block, out_of: block) -> block { let _icx = bcx.insn_ctxt("leave_block"); - let next_cx = sub_block(block_parent(out_of), ~"next"); + let next_cx = sub_block(block_parent(out_of), "next"); if bcx.unreachable { Unreachable(next_cx); } cleanup_and_Br(bcx, out_of, next_cx.llbb); next_cx @@ -1354,7 +1354,7 @@ pub fn leave_block(bcx: block, out_of: block) -> block { pub fn with_scope(bcx: block, opt_node_info: Option, - name: ~str, + name: &str, f: &fn(block) -> block) -> block { let _icx = bcx.insn_ctxt("with_scope"); @@ -1369,7 +1369,7 @@ pub fn with_scope(bcx: block, pub fn with_scope_result(bcx: block, opt_node_info: Option, - name: ~str, + name: &str, f: &fn(block) -> Result) -> Result { let _icx = bcx.insn_ctxt("with_scope_result"); let scope_cx = scope_block(bcx, opt_node_info, name); @@ -1379,7 +1379,7 @@ pub fn with_scope_result(bcx: block, } pub fn with_scope_datumblock(bcx: block, opt_node_info: Option, - name: ~str, f: &fn(block) -> datum::DatumBlock) + name: &str, f: &fn(block) -> datum::DatumBlock) -> datum::DatumBlock { use middle::trans::datum::DatumBlock; @@ -1432,8 +1432,8 @@ pub fn alloc_local(cx: block, local: @ast::local) -> block { pub fn with_cond(bcx: block, val: ValueRef, f: &fn(block) -> block) -> block { let _icx = bcx.insn_ctxt("with_cond"); - let next_cx = base::sub_block(bcx, ~"next"); - let cond_cx = base::sub_block(bcx, ~"cond"); + let next_cx = base::sub_block(bcx, "next"); + let cond_cx = base::sub_block(bcx, "cond"); CondBr(bcx, val, cond_cx.llbb, next_cx.llbb); let after_cx = f(cond_cx); if !after_cx.terminated { Br(after_cx, next_cx.llbb); } @@ -2542,7 +2542,7 @@ pub fn register_method(ccx: @CrateContext, pth: @ast_map::path, m: @ast::method) -> ValueRef { let mty = ty::node_id_to_type(ccx.tcx, id); - let pth = vec::append(/*bad*/copy *pth, ~[path_name((ccx.names)(~"meth")), + let pth = vec::append(/*bad*/copy *pth, ~[path_name((ccx.names)("meth")), path_name(m.ident)]); let llfn = register_fn_full(ccx, m.span, pth, id, m.attrs, mty); set_inline_hint_if_appr(m.attrs, llfn); diff --git a/src/librustc/middle/trans/callee.rs b/src/librustc/middle/trans/callee.rs index e5e60b2d4ac33..aab35ce59b998 100644 --- a/src/librustc/middle/trans/callee.rs +++ b/src/librustc/middle/trans/callee.rs @@ -454,7 +454,7 @@ pub fn trans_call_inner(in_cx: block, dest: expr::Dest, autoref_arg: AutorefArg) -> block { - do base::with_scope(in_cx, call_info, ~"call") |cx| { + do base::with_scope(in_cx, call_info, "call") |cx| { let ret_in_loop = match args { ArgExprs(args) => { args.len() > 0u && match vec::last(args).node { diff --git a/src/librustc/middle/trans/closure.rs b/src/librustc/middle/trans/closure.rs index e0a20f6490715..0651d3443b56a 100644 --- a/src/librustc/middle/trans/closure.rs +++ b/src/librustc/middle/trans/closure.rs @@ -400,7 +400,7 @@ pub fn trans_expr_fn(bcx: block, // XXX: Bad copy. let s = mangle_internal_name_by_path_and_seq(ccx, copy sub_path, - ~"expr_fn"); + "expr_fn"); let llfn = decl_internal_cdecl_fn(ccx.llmod, s, llfnty); // Always mark inline if this is a loop body. This is important for diff --git a/src/librustc/middle/trans/common.rs b/src/librustc/middle/trans/common.rs index c1309b422880a..14a8bfe161f34 100644 --- a/src/librustc/middle/trans/common.rs +++ b/src/librustc/middle/trans/common.rs @@ -54,12 +54,12 @@ use syntax::parse::token::ident_interner; use syntax::{ast, ast_map}; use syntax::abi::{X86, X86_64, Arm, Mips}; -pub type namegen = @fn(s: ~str) -> ident; +pub type namegen = @fn(s: &str) -> ident; pub fn new_namegen(intr: @ident_interner) -> namegen { - let f: @fn(s: ~str) -> ident = |prefix| { - intr.gensym(@fmt!("%s_%u", + let f: @fn(s: &str) -> ident = |prefix| { + intr.gensym(fmt!("%s_%u", prefix, - intr.gensym(@prefix).repr)) + intr.gensym(prefix).repr)) }; f } @@ -1177,7 +1177,7 @@ pub fn C_cstr(cx: @CrateContext, s: @~str) -> ValueRef { llvm::LLVMConstString(buf, s.len() as c_uint, False) }; let g = - str::as_c_str(fmt!("str%u", (cx.names)(~"str").repr), + str::as_c_str(fmt!("str%u", (cx.names)("str").repr), |buf| llvm::LLVMAddGlobal(cx.llmod, val_ty(sc), buf)); llvm::LLVMSetInitializer(g, sc); llvm::LLVMSetGlobalConstant(g, True); @@ -1269,7 +1269,7 @@ pub fn C_bytes_plus_null(bytes: &[u8]) -> ValueRef { pub fn C_shape(ccx: @CrateContext, bytes: ~[u8]) -> ValueRef { unsafe { let llshape = C_bytes_plus_null(bytes); - let name = fmt!("shape%u", (ccx.names)(~"shape").repr); + let name = fmt!("shape%u", (ccx.names)("shape").repr); let llglobal = str::as_c_str(name, |buf| { llvm::LLVMAddGlobal(ccx.llmod, val_ty(llshape), buf) }); diff --git a/src/librustc/middle/trans/controlflow.rs b/src/librustc/middle/trans/controlflow.rs index 8b72ddda044c7..ac512bc4bf95d 100644 --- a/src/librustc/middle/trans/controlflow.rs +++ b/src/librustc/middle/trans/controlflow.rs @@ -65,8 +65,8 @@ pub fn trans_if(bcx: block, let Result {bcx, val: cond_val} = expr::trans_to_datum(bcx, cond).to_result(); - let then_bcx_in = scope_block(bcx, thn.info(), ~"then"); - let else_bcx_in = scope_block(bcx, els.info(), ~"else"); + let then_bcx_in = scope_block(bcx, thn.info(), "then"); + let else_bcx_in = scope_block(bcx, els.info(), "else"); let cond_val = bool_to_i1(bcx, cond_val); CondBr(bcx, cond_val, then_bcx_in.llbb, else_bcx_in.llbb); @@ -105,7 +105,7 @@ pub fn trans_if(bcx: block, } pub fn join_blocks(parent_bcx: block, in_cxs: &[block]) -> block { - let out = sub_block(parent_bcx, ~"join"); + let out = sub_block(parent_bcx, "join"); let mut reachable = false; for in_cxs.each |bcx| { if !bcx.unreachable { @@ -121,7 +121,7 @@ pub fn join_blocks(parent_bcx: block, in_cxs: &[block]) -> block { pub fn trans_while(bcx: block, cond: @ast::expr, body: &ast::blk) -> block { let _icx = bcx.insn_ctxt("trans_while"); - let next_bcx = sub_block(bcx, ~"while next"); + let next_bcx = sub_block(bcx, "while next"); // bcx // | @@ -136,10 +136,10 @@ pub fn trans_while(bcx: block, cond: @ast::expr, body: &ast::blk) -> block { // | body_bcx_out --+ // next_bcx - let loop_bcx = loop_scope_block(bcx, next_bcx, None, ~"`while`", + let loop_bcx = loop_scope_block(bcx, next_bcx, None, "`while`", body.info()); - let cond_bcx_in = scope_block(loop_bcx, cond.info(), ~"while loop cond"); - let body_bcx_in = scope_block(loop_bcx, body.info(), ~"while loop body"); + let cond_bcx_in = scope_block(loop_bcx, cond.info(), "while loop cond"); + let body_bcx_in = scope_block(loop_bcx, body.info(), "while loop body"); Br(bcx, loop_bcx.llbb); Br(loop_bcx, cond_bcx_in.llbb); @@ -163,8 +163,8 @@ pub fn trans_loop(bcx:block, opt_label: Option) -> block { let _icx = bcx.insn_ctxt("trans_loop"); - let next_bcx = sub_block(bcx, ~"next"); - let body_bcx_in = loop_scope_block(bcx, next_bcx, opt_label, ~"`loop`", + let next_bcx = sub_block(bcx, "next"); + let body_bcx_in = loop_scope_block(bcx, next_bcx, opt_label, "`loop`", body.info()); Br(bcx, body_bcx_in.llbb); let body_bcx_out = trans_block(body_bcx_in, body, expr::Ignore); @@ -186,7 +186,7 @@ pub fn trans_log(log_ex: @ast::expr, let (modpath, modname) = { let path = &mut bcx.fcx.path; let modpath = vec::append( - ~[path_mod(ccx.sess.ident_of(ccx.link_meta.name.to_owned()))], + ~[path_mod(ccx.sess.ident_of(ccx.link_meta.name))], path.filtered(|e| match *e { path_mod(_) => true, _ => false })); let modname = path_str(ccx.sess, modpath); (modpath, modname) @@ -196,7 +196,7 @@ pub fn trans_log(log_ex: @ast::expr, ccx.module_data.get_copy(&modname) } else { let s = link::mangle_internal_name_by_path_and_seq( - ccx, modpath, ~"loglevel"); + ccx, modpath, "loglevel"); let global; unsafe { global = str::as_c_str(s, |buf| { @@ -211,14 +211,14 @@ pub fn trans_log(log_ex: @ast::expr, }; let current_level = Load(bcx, global); let level = unpack_result!(bcx, { - do with_scope_result(bcx, lvl.info(), ~"level") |bcx| { + do with_scope_result(bcx, lvl.info(), "level") |bcx| { expr::trans_to_datum(bcx, lvl).to_result() } }); let llenabled = ICmp(bcx, lib::llvm::IntUGE, current_level, level); do with_cond(bcx, llenabled) |bcx| { - do with_scope(bcx, log_ex.info(), ~"log") |bcx| { + do with_scope(bcx, log_ex.info(), "log") |bcx| { let mut bcx = bcx; // Translate the value to be logged diff --git a/src/librustc/middle/trans/debuginfo.rs b/src/librustc/middle/trans/debuginfo.rs index 1e5680aff3817..f0fb33136ffbf 100644 --- a/src/librustc/middle/trans/debuginfo.rs +++ b/src/librustc/middle/trans/debuginfo.rs @@ -517,7 +517,7 @@ fn create_tuple(cx: @CrateContext, t: ty::t, elements: &[ty::t], span: span) let scx = create_structure(file_node, cx.sess.str_of( ((/*bad*/copy cx.dbg_cx).get().names) - (~"tuple")), + ("tuple")), line_from_span(cx.sess.codemap, span) as int); for elements.each |element| { let ty_md = create_ty(cx, *element, span); @@ -973,7 +973,7 @@ pub fn create_function(fcx: fn_ctxt) -> @Metadata { ast_map::node_expr(expr) => { match expr.node { ast::expr_fn_block(ref decl, _) => { - ((dbg_cx.names)(~"fn"), decl.output, expr.id) + ((dbg_cx.names)("fn"), decl.output, expr.id) } _ => fcx.ccx.sess.span_bug(expr.span, "create_function: expected an expr_fn_block here") diff --git a/src/librustc/middle/trans/expr.rs b/src/librustc/middle/trans/expr.rs index 29227b7c95a32..c794d04b0cd3c 100644 --- a/src/librustc/middle/trans/expr.rs +++ b/src/librustc/middle/trans/expr.rs @@ -536,8 +536,8 @@ fn trans_rvalue_stmt_unadjusted(bcx: block, expr: @ast::expr) -> block { src_datum_ref, dst_datum_ref); - let swap_cx = base::sub_block(bcx, ~"swap"); - let next_cx = base::sub_block(bcx, ~"next"); + let swap_cx = base::sub_block(bcx, "swap"); + let next_cx = base::sub_block(bcx, "next"); CondBr(bcx, cmp, next_cx.llbb, swap_cx.llbb); @@ -594,7 +594,7 @@ fn trans_rvalue_dps_unadjusted(bcx: block, expr: @ast::expr, } ast::expr_block(ref blk) => { return do base::with_scope(bcx, blk.info(), - ~"block-expr body") |bcx| { + "block-expr body") |bcx| { controlflow::trans_block(bcx, blk, dest) }; } @@ -1473,7 +1473,7 @@ fn trans_lazy_binop(bcx: block, let bcx = bcx; let Result {bcx: past_lhs, val: lhs} = { - do base::with_scope_result(bcx, a.info(), ~"lhs") |bcx| { + do base::with_scope_result(bcx, a.info(), "lhs") |bcx| { trans_to_datum(bcx, a).to_result() } }; @@ -1482,8 +1482,8 @@ fn trans_lazy_binop(bcx: block, return immediate_rvalue_bcx(past_lhs, lhs, binop_ty); } - let join = base::sub_block(bcx, ~"join"); - let before_rhs = base::sub_block(bcx, ~"rhs"); + let join = base::sub_block(bcx, "join"); + let before_rhs = base::sub_block(bcx, "rhs"); let lhs_i1 = bool_to_i1(past_lhs, lhs); match op { @@ -1492,7 +1492,7 @@ fn trans_lazy_binop(bcx: block, } let Result {bcx: past_rhs, val: rhs} = { - do base::with_scope_result(before_rhs, b.info(), ~"rhs") |bcx| { + do base::with_scope_result(before_rhs, b.info(), "rhs") |bcx| { trans_to_datum(bcx, b).to_result() } }; diff --git a/src/librustc/middle/trans/glue.rs b/src/librustc/middle/trans/glue.rs index 3b06f903641d4..585d9d8420cd7 100644 --- a/src/librustc/middle/trans/glue.rs +++ b/src/librustc/middle/trans/glue.rs @@ -671,9 +671,9 @@ pub fn declare_tydesc(ccx: @CrateContext, t: ty::t) -> @mut tydesc_info { let addrspace = declare_tydesc_addrspace(ccx, t); //XXX this triggers duplicate LLVM symbols let name = @(if false /*ccx.sess.opts.debuginfo*/ { - mangle_internal_name_by_type_only(ccx, t, ~"tydesc") + mangle_internal_name_by_type_only(ccx, t, "tydesc") } else { - mangle_internal_name_by_seq(ccx, ~"tydesc") + mangle_internal_name_by_seq(ccx, "tydesc") }); note_unique_llvm_symbol(ccx, name); debug!("+++ declare_tydesc %s %s", ppaux::ty_to_str(ccx.tcx, t), *name); diff --git a/src/librustc/middle/trans/meth.rs b/src/librustc/middle/trans/meth.rs index f20af0409c53c..ffe414ab5b5d2 100644 --- a/src/librustc/middle/trans/meth.rs +++ b/src/librustc/middle/trans/meth.rs @@ -775,7 +775,7 @@ pub fn make_vtable(ccx: @CrateContext, ptrs: ~[ValueRef]) -> ValueRef { unsafe { let _icx = ccx.insn_ctxt("impl::make_vtable"); let tbl = C_struct(ptrs); - let vtable = ccx.sess.str_of((ccx.names)(~"vtable")); + let vtable = ccx.sess.str_of((ccx.names)("vtable")); let vt_gvar = do str::as_c_str(*vtable) |buf| { llvm::LLVMAddGlobal(ccx.llmod, val_ty(tbl), buf) }; diff --git a/src/librustc/middle/trans/monomorphize.rs b/src/librustc/middle/trans/monomorphize.rs index 6e25064186941..0116fa9bb55b1 100644 --- a/src/librustc/middle/trans/monomorphize.rs +++ b/src/librustc/middle/trans/monomorphize.rs @@ -171,7 +171,7 @@ pub fn monomorphic_fn(ccx: @CrateContext, let pt = vec::append(/*bad*/copy *pt, ~[path_name((ccx.names)( - copy *ccx.sess.str_of(name)))]); + *ccx.sess.str_of(name)))]); let s = mangle_exported_name(ccx, /*bad*/copy pt, mono_ty); let mk_lldecl = || { diff --git a/src/librustc/middle/trans/reflect.rs b/src/librustc/middle/trans/reflect.rs index 9e1f10467e346..2183472d59154 100644 --- a/src/librustc/middle/trans/reflect.rs +++ b/src/librustc/middle/trans/reflect.rs @@ -114,7 +114,7 @@ pub impl Reflector { ArgVals(args), SaveIn(scratch.val), DontAutorefArg); let result = scratch.to_value_llval(bcx); let result = bool_to_i1(bcx, result); - let next_bcx = sub_block(bcx, ~"next"); + let next_bcx = sub_block(bcx, "next"); CondBr(bcx, result, next_bcx.llbb, self.final_bcx.llbb); self.bcx = next_bcx } @@ -275,7 +275,7 @@ pub impl Reflector { let variants = ty::substd_enum_variants(ccx.tcx, did, substs); let llptrty = T_ptr(type_of(ccx, t)); let (_, opaquety) = - ccx.tcx.intrinsic_defs.find_copy(&ccx.sess.ident_of(~"Opaque")) + ccx.tcx.intrinsic_defs.find_copy(&ccx.sess.ident_of("Opaque")) .expect("Failed to resolve intrinsic::Opaque"); let opaqueptrty = ty::mk_ptr(ccx.tcx, ty::mt { ty: opaquety, mutbl: ast::m_imm }); @@ -283,7 +283,7 @@ pub impl Reflector { let sub_path = bcx.fcx.path + ~[path_name(special_idents::anon)]; let sym = mangle_internal_name_by_path_and_seq(ccx, sub_path, - ~"get_disr"); + "get_disr"); let args = [ ty::arg { ty: opaqueptrty @@ -373,7 +373,7 @@ pub fn emit_calls_to_trait_visit_ty(bcx: block, visitor_trait_id: def_id) -> block { use syntax::parse::token::special_idents::tydesc; - let final = sub_block(bcx, ~"final"); + let final = sub_block(bcx, "final"); assert!(bcx.ccx().tcx.intrinsic_defs.contains_key(&tydesc)); let (_, tydesc_ty) = bcx.ccx().tcx.intrinsic_defs.get_copy(&tydesc); let tydesc_ty = type_of(bcx.ccx(), tydesc_ty); diff --git a/src/librustc/middle/trans/tvec.rs b/src/librustc/middle/trans/tvec.rs index d9bf25bf37786..7a85e93584e25 100644 --- a/src/librustc/middle/trans/tvec.rs +++ b/src/librustc/middle/trans/tvec.rs @@ -421,11 +421,11 @@ pub fn write_content(bcx: block, expr::trans_to_datum(bcx, element) }); - let next_bcx = sub_block(bcx, ~"expr_repeat: while next"); - let loop_bcx = loop_scope_block(bcx, next_bcx, None, ~"expr_repeat", None); - let cond_bcx = scope_block(loop_bcx, None, ~"expr_repeat: loop cond"); - let set_bcx = scope_block(loop_bcx, None, ~"expr_repeat: body: set"); - let inc_bcx = scope_block(loop_bcx, None, ~"expr_repeat: body: inc"); + let next_bcx = sub_block(bcx, "expr_repeat: while next"); + let loop_bcx = loop_scope_block(bcx, next_bcx, None, "expr_repeat", None); + let cond_bcx = scope_block(loop_bcx, None, "expr_repeat: loop cond"); + let set_bcx = scope_block(loop_bcx, None, "expr_repeat: body: set"); + let inc_bcx = scope_block(loop_bcx, None, "expr_repeat: body: inc"); Br(bcx, loop_bcx.llbb); let loop_counter = { @@ -561,14 +561,14 @@ pub fn iter_vec_raw(bcx: block, data_ptr: ValueRef, vec_ty: ty::t, let data_end_ptr = pointer_add(bcx, data_ptr, fill); // Now perform the iteration. - let header_bcx = base::sub_block(bcx, ~"iter_vec_loop_header"); + let header_bcx = base::sub_block(bcx, "iter_vec_loop_header"); Br(bcx, header_bcx.llbb); let data_ptr = Phi(header_bcx, val_ty(data_ptr), ~[data_ptr], ~[bcx.llbb]); let not_yet_at_end = ICmp(header_bcx, lib::llvm::IntULT, data_ptr, data_end_ptr); - let body_bcx = base::sub_block(header_bcx, ~"iter_vec_loop_body"); - let next_bcx = base::sub_block(header_bcx, ~"iter_vec_next"); + let body_bcx = base::sub_block(header_bcx, "iter_vec_loop_body"); + let next_bcx = base::sub_block(header_bcx, "iter_vec_next"); CondBr(header_bcx, not_yet_at_end, body_bcx.llbb, next_bcx.llbb); let body_bcx = f(body_bcx, data_ptr, unit_ty); AddIncomingToPhi(data_ptr, InBoundsGEP(body_bcx, data_ptr, diff --git a/src/librustc/middle/typeck/check/mod.rs b/src/librustc/middle/typeck/check/mod.rs index 6cd10b5bd6f1b..97f3d0da246ff 100644 --- a/src/librustc/middle/typeck/check/mod.rs +++ b/src/librustc/middle/typeck/check/mod.rs @@ -1550,7 +1550,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt, lhs_resolved_t, None) }; return lookup_op_method(fcx, ex, lhs_expr, lhs_resolved_t, - fcx.tcx().sess.ident_of(copy *name), + fcx.tcx().sess.ident_of(*name), ~[rhs], DoDerefArgs, DontAutoderefReceiver, if_op_unbound, expected_result); } @@ -1574,8 +1574,8 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt, } fn check_user_unop(fcx: @mut FnCtxt, - op_str: ~str, - mname: ~str, + op_str: &str, + mname: &str, ex: @ast::expr, rhs_expr: @ast::expr, rhs_t: ty::t, @@ -2308,7 +2308,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt, if !(ty::type_is_integral(oprnd_t) || ty::get(oprnd_t).sty == ty::ty_bool) { oprnd_t = check_user_unop(fcx, - ~"!", ~"not", expr, oprnd, oprnd_t, + "!", "not", expr, oprnd, oprnd_t, expected); } } @@ -2318,7 +2318,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt, if !(ty::type_is_integral(oprnd_t) || ty::type_is_fp(oprnd_t)) { oprnd_t = check_user_unop(fcx, - ~"-", ~"neg", expr, oprnd, oprnd_t, expected); + "-", "neg", expr, oprnd, oprnd_t, expected); } } } @@ -2783,7 +2783,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt, let resolved = structurally_resolved_type(fcx, expr.span, raw_base_t); - let index_ident = tcx.sess.ident_of(~"index"); + let index_ident = tcx.sess.ident_of("index"); let error_message = || { fcx.type_error_message(expr.span, |actual| { diff --git a/src/librusti/rusti.rc b/src/librusti/rusti.rc index 0749f20156f1c..a8cd7f5f41c66 100644 --- a/src/librusti/rusti.rc +++ b/src/librusti/rusti.rc @@ -156,7 +156,7 @@ fn run(repl: Repl, input: ~str) -> Repl { for crate.node.module.items.each |item| { match item.node { ast::item_fn(_, _, _, _, blk) => { - if item.ident == sess.ident_of(~"main") { + if item.ident == sess.ident_of("main") { opt = blk.node.expr; } } diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index c8fc04eaea1a3..5908d0c56f418 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -93,7 +93,7 @@ impl Decodable for ident { Some(intr) => intr }; - (*intr).intern(@d.read_str()) + (*intr).intern(d.read_str()) } } diff --git a/src/libsyntax/ext/auto_encode.rs b/src/libsyntax/ext/auto_encode.rs index 5bd4f89a3b38b..1d3af61be7036 100644 --- a/src/libsyntax/ext/auto_encode.rs +++ b/src/libsyntax/ext/auto_encode.rs @@ -244,7 +244,7 @@ trait ExtCtxtMethods { fn expr_blk(&self, expr: @ast::expr) -> ast::blk; fn expr_path(&self, span: span, strs: ~[ast::ident]) -> @ast::expr; fn expr_path_global(&self, span: span, strs: ~[ast::ident]) -> @ast::expr; - fn expr_var(&self, span: span, var: ~str) -> @ast::expr; + fn expr_var(&self, span: span, var: &str) -> @ast::expr; fn expr_field(&self, span: span, expr: @ast::expr, ident: ast::ident) -> @ast::expr; fn expr_call(&self, span: span, expr: @ast::expr, args: ~[@ast::expr]) @@ -446,7 +446,7 @@ impl ExtCtxtMethods for @ext_ctxt { self.expr(span, ast::expr_path(self.path_global(span, strs))) } - fn expr_var(&self, span: span, var: ~str) -> @ast::expr { + fn expr_var(&self, span: span, var: &str) -> @ast::expr { self.expr_path(span, ~[self.ident_of(var)]) } @@ -583,13 +583,13 @@ fn mk_ser_impl( // Make a path to the std::serialize::Encodable typaram. let ty_param = cx.bind_path( span, - cx.ident_of(~"__S"), + cx.ident_of("__S"), cx.path_global( span, ~[ - cx.ident_of(~"std"), - cx.ident_of(~"serialize"), - cx.ident_of(~"Encoder"), + cx.ident_of("std"), + cx.ident_of("serialize"), + cx.ident_of("Encoder"), ] ), @opt_vec::Empty @@ -599,11 +599,11 @@ fn mk_ser_impl( let path = cx.path_tps_global( span, ~[ - cx.ident_of(~"std"), - cx.ident_of(~"serialize"), - cx.ident_of(~"Encodable"), + cx.ident_of("std"), + cx.ident_of("serialize"), + cx.ident_of("Encodable"), ], - ~[cx.ty_path(span, ~[cx.ident_of(~"__S")], ~[])] + ~[cx.ty_path(span, ~[cx.ident_of("__S")], ~[])] ); mk_impl( @@ -627,13 +627,13 @@ fn mk_deser_impl( // Make a path to the std::serialize::Decodable typaram. let ty_param = cx.bind_path( span, - cx.ident_of(~"__D"), + cx.ident_of("__D"), cx.path_global( span, ~[ - cx.ident_of(~"std"), - cx.ident_of(~"serialize"), - cx.ident_of(~"Decoder"), + cx.ident_of("std"), + cx.ident_of("serialize"), + cx.ident_of("Decoder"), ] ), @opt_vec::Empty @@ -643,11 +643,11 @@ fn mk_deser_impl( let path = cx.path_tps_global( span, ~[ - cx.ident_of(~"std"), - cx.ident_of(~"serialize"), - cx.ident_of(~"Decodable"), + cx.ident_of("std"), + cx.ident_of("serialize"), + cx.ident_of("Decodable"), ], - ~[cx.ty_path(span, ~[cx.ident_of(~"__D")], ~[])] + ~[cx.ty_path(span, ~[cx.ident_of("__D")], ~[])] ); mk_impl( @@ -671,7 +671,7 @@ fn mk_ser_method( node: ast::ty_rptr( None, ast::mt { - ty: cx.ty_path(span, ~[cx.ident_of(~"__S")], ~[]), + ty: cx.ty_path(span, ~[cx.ident_of("__S")], ~[]), mutbl: ast::m_mutbl } ), @@ -685,7 +685,7 @@ fn mk_ser_method( id: cx.next_id(), node: ast::pat_ident( ast::bind_by_copy, - ast_util::ident_to_path(span, cx.ident_of(~"__s")), + ast_util::ident_to_path(span, cx.ident_of("__s")), None), span: span, }, @@ -705,7 +705,7 @@ fn mk_ser_method( }; @ast::method { - ident: cx.ident_of(~"encode"), + ident: cx.ident_of("encode"), attrs: ~[], generics: ast_util::empty_generics(), self_ty: codemap::spanned { @@ -733,7 +733,7 @@ fn mk_deser_method( node: ast::ty_rptr( None, ast::mt { - ty: cx.ty_path(span, ~[cx.ident_of(~"__D")], ~[]), + ty: cx.ty_path(span, ~[cx.ident_of("__D")], ~[]), mutbl: ast::m_mutbl } ), @@ -749,7 +749,7 @@ fn mk_deser_method( node: ast::pat_ident(ast::bind_by_copy, ast_util::ident_to_path(span, cx.ident_of( - ~"__d")), + "__d")), None), span: span, }, @@ -764,7 +764,7 @@ fn mk_deser_method( }; @ast::method { - ident: cx.ident_of(~"decode"), + ident: cx.ident_of("decode"), attrs: ~[], generics: ast_util::empty_generics(), self_ty: codemap::spanned { node: ast::sty_static, span: span }, @@ -792,21 +792,21 @@ fn mk_struct_ser_impl( span, cx.expr_field( span, - cx.expr_var(span, ~"self"), + cx.expr_var(span, "self"), field.ident ), - cx.ident_of(~"encode"), - ~[cx.expr_var(span, ~"__s")] + cx.ident_of("encode"), + ~[cx.expr_var(span, "__s")] ), - cx.ident_of(~"__s") + cx.ident_of("__s") ); // ast for `__s.emit_struct_field($(name), $(idx), $(expr_lambda))` cx.stmt( cx.expr_method_call( span, - cx.expr_var(span, ~"__s"), - cx.ident_of(~"emit_struct_field"), + cx.expr_var(span, "__s"), + cx.ident_of("emit_struct_field"), ~[ cx.lit_str(span, @cx.str_of(field.ident)), cx.lit_uint(span, idx), @@ -819,12 +819,12 @@ fn mk_struct_ser_impl( // ast for `__s.emit_struct($(name), |__s| $(fields))` let ser_body = cx.expr_method_call( span, - cx.expr_var(span, ~"__s"), - cx.ident_of(~"emit_struct"), + cx.expr_var(span, "__s"), + cx.ident_of("emit_struct"), ~[ cx.lit_str(span, @cx.str_of(ident)), cx.lit_uint(span, vec::len(fields)), - cx.lambda_stmts_1(span, fields, cx.ident_of(~"__s")), + cx.lambda_stmts_1(span, fields, cx.ident_of("__s")), ] ); @@ -845,22 +845,22 @@ fn mk_struct_deser_impl( cx.expr_call( span, cx.expr_path_global(span, ~[ - cx.ident_of(~"std"), - cx.ident_of(~"serialize"), - cx.ident_of(~"Decodable"), - cx.ident_of(~"decode"), + cx.ident_of("std"), + cx.ident_of("serialize"), + cx.ident_of("Decodable"), + cx.ident_of("decode"), ]), - ~[cx.expr_var(span, ~"__d")] + ~[cx.expr_var(span, "__d")] ) ), - cx.ident_of(~"__d") + cx.ident_of("__d") ); // ast for `__d.read_struct_field($(name), $(idx), $(expr_lambda))` let expr: @ast::expr = cx.expr_method_call( span, - cx.expr_var(span, ~"__d"), - cx.ident_of(~"read_struct_field"), + cx.expr_var(span, "__d"), + cx.ident_of("read_struct_field"), ~[ cx.lit_str(span, @cx.str_of(field.ident)), cx.lit_uint(span, idx), @@ -881,8 +881,8 @@ fn mk_struct_deser_impl( // ast for `read_struct($(name), |__d| $(fields))` let body = cx.expr_method_call( span, - cx.expr_var(span, ~"__d"), - cx.ident_of(~"read_struct"), + cx.expr_var(span, "__d"), + cx.ident_of("read_struct"), ~[ cx.lit_str(span, @cx.str_of(ident)), cx.lit_uint(span, vec::len(fields)), @@ -895,7 +895,7 @@ fn mk_struct_deser_impl( None ) ), - cx.ident_of(~"__d") + cx.ident_of("__d") ), ] ); @@ -997,8 +997,8 @@ fn ser_variant( // ast for `__s.emit_enum_variant_arg` let expr_emit = cx.expr_field( span, - cx.expr_var(span, ~"__s"), - cx.ident_of(~"emit_enum_variant_arg") + cx.expr_var(span, "__s"), + cx.ident_of("emit_enum_variant_arg") ); // ast for `|__s| $(v).encode(__s)` @@ -1006,10 +1006,10 @@ fn ser_variant( cx.expr_method_call( span, cx.expr_path(span, ~[names[a_idx]]), - cx.ident_of(~"encode"), - ~[cx.expr_var(span, ~"__s")] + cx.ident_of("encode"), + ~[cx.expr_var(span, "__s")] ), - cx.ident_of(~"__s") + cx.ident_of("__s") ); // ast for `$(expr_emit)($(a_idx), $(expr_encode))` @@ -1025,13 +1025,13 @@ fn ser_variant( // ast for `__s.emit_enum_variant($(name), $(idx), $(sz), $(lambda))` let body = cx.expr_method_call( span, - cx.expr_var(span, ~"__s"), - cx.ident_of(~"emit_enum_variant"), + cx.expr_var(span, "__s"), + cx.ident_of("emit_enum_variant"), ~[ cx.lit_str(span, @cx.str_of(v_name)), cx.lit_uint(span, v_idx), cx.lit_uint(span, stmts.len()), - cx.lambda_stmts_1(span, stmts, cx.ident_of(~"__s")), + cx.lambda_stmts_1(span, stmts, cx.ident_of("__s")), ] ); @@ -1065,7 +1065,7 @@ fn mk_enum_ser_body( ast::expr_match( cx.expr( span, - ast::expr_unary(ast::deref, cx.expr_var(span, ~"self")) + ast::expr_unary(ast::deref, cx.expr_var(span, "self")) ), arms ) @@ -1074,11 +1074,11 @@ fn mk_enum_ser_body( // ast for `__s.emit_enum($(name), || $(match_expr))` cx.expr_method_call( span, - cx.expr_var(span, ~"__s"), - cx.ident_of(~"emit_enum"), + cx.expr_var(span, "__s"), + cx.ident_of("emit_enum"), ~[ cx.lit_str(span, @cx.str_of(name)), - cx.lambda_expr_1(match_expr, cx.ident_of(~"__s")), + cx.lambda_expr_1(match_expr, cx.ident_of("__s")), ] ) } @@ -1095,21 +1095,21 @@ fn mk_enum_deser_variant_nary( cx.expr_call( span, cx.expr_path_global(span, ~[ - cx.ident_of(~"std"), - cx.ident_of(~"serialize"), - cx.ident_of(~"Decodable"), - cx.ident_of(~"decode"), + cx.ident_of("std"), + cx.ident_of("serialize"), + cx.ident_of("Decodable"), + cx.ident_of("decode"), ]), - ~[cx.expr_var(span, ~"__d")] + ~[cx.expr_var(span, "__d")] ), - cx.ident_of(~"__d") + cx.ident_of("__d") ); // ast for `__d.read_enum_variant_arg($(a_idx), $(expr_lambda))` cx.expr_method_call( span, - cx.expr_var(span, ~"__d"), - cx.ident_of(~"read_enum_variant_arg"), + cx.expr_var(span, "__d"), + cx.ident_of("read_enum_variant_arg"), ~[cx.lit_uint(span, idx), expr_lambda] ) }; @@ -1205,7 +1205,7 @@ fn mk_enum_deser_body( node: ast::pat_ident( ast::bind_by_copy, ast_util::ident_to_path(span, - ext_cx.ident_of(~"__d")), + ext_cx.ident_of("__d")), None), span: span, }, @@ -1223,7 +1223,7 @@ fn mk_enum_deser_body( node: ast::pat_ident( ast::bind_by_copy, ast_util::ident_to_path(span, - ext_cx.ident_of(~"i")), + ext_cx.ident_of("i")), None), span: span, }, @@ -1240,7 +1240,7 @@ fn mk_enum_deser_body( ext_cx.expr_blk( ext_cx.expr( span, - ast::expr_match(ext_cx.expr_var(span, ~"i"), arms) + ast::expr_match(ext_cx.expr_var(span, "i"), arms) ) ) ) @@ -1250,18 +1250,18 @@ fn mk_enum_deser_body( let expr_lambda = ext_cx.lambda_expr_1( ext_cx.expr_method_call( span, - ext_cx.expr_var(span, ~"__d"), - ext_cx.ident_of(~"read_enum_variant"), + ext_cx.expr_var(span, "__d"), + ext_cx.ident_of("read_enum_variant"), ~[expr_arm_names, expr_lambda] ), - ext_cx.ident_of(~"__d") + ext_cx.ident_of("__d") ); // ast for `__d.read_enum($(e_name), $(expr_lambda))` ext_cx.expr_method_call( span, - ext_cx.expr_var(span, ~"__d"), - ext_cx.ident_of(~"read_enum"), + ext_cx.expr_var(span, "__d"), + ext_cx.ident_of("read_enum"), ~[ ext_cx.lit_str(span, @ext_cx.str_of(name)), expr_lambda diff --git a/src/libsyntax/ext/base.rs b/src/libsyntax/ext/base.rs index da8f87d389194..ac825e9436a98 100644 --- a/src/libsyntax/ext/base.rs +++ b/src/libsyntax/ext/base.rs @@ -232,7 +232,7 @@ pub trait ext_ctxt { fn set_trace_macros(&self, x: bool); /* for unhygienic identifier transformation */ fn str_of(&self, id: ast::ident) -> ~str; - fn ident_of(&self, st: ~str) -> ast::ident; + fn ident_of(&self, st: &str) -> ast::ident; } pub fn mk_ctxt(parse_sess: @mut parse::ParseSess, cfg: ast::crate_cfg) @@ -322,8 +322,8 @@ pub fn mk_ctxt(parse_sess: @mut parse::ParseSess, cfg: ast::crate_cfg) fn str_of(&self, id: ast::ident) -> ~str { copy *self.parse_sess.interner.get(id) } - fn ident_of(&self, st: ~str) -> ast::ident { - self.parse_sess.interner.intern(@/*bad*/ copy st) + fn ident_of(&self, st: &str) -> ast::ident { + self.parse_sess.interner.intern(st) } } let imp: @CtxtRepr = @CtxtRepr { diff --git a/src/libsyntax/ext/build.rs b/src/libsyntax/ext/build.rs index 3097cb799a204..3bfb93b34b3a5 100644 --- a/src/libsyntax/ext/build.rs +++ b/src/libsyntax/ext/build.rs @@ -502,10 +502,10 @@ pub fn mk_unreachable(cx: @ext_ctxt, span: span) -> @ast::expr { cx, span, ~[ - cx.ident_of(~"core"), - cx.ident_of(~"sys"), - cx.ident_of(~"FailWithCause"), - cx.ident_of(~"fail_with"), + cx.ident_of("core"), + cx.ident_of("sys"), + cx.ident_of("FailWithCause"), + cx.ident_of("fail_with"), ], ~[ mk_base_str(cx, span, ~"internal error: entered unreachable code"), diff --git a/src/libsyntax/ext/concat_idents.rs b/src/libsyntax/ext/concat_idents.rs index 55e25e6993695..96e5e4143226c 100644 --- a/src/libsyntax/ext/concat_idents.rs +++ b/src/libsyntax/ext/concat_idents.rs @@ -33,7 +33,7 @@ pub fn expand_syntax_ext(cx: @ext_ctxt, sp: span, tts: &[ast::token_tree]) } } } - let res = cx.parse_sess().interner.intern(@res_str); + let res = cx.parse_sess().interner.intern(res_str); let e = @ast::expr { id: cx.next_id(), diff --git a/src/libsyntax/ext/deriving/cmp/ord.rs b/src/libsyntax/ext/deriving/cmp/ord.rs index 5998fc7145df3..a9234c858f418 100644 --- a/src/libsyntax/ext/deriving/cmp/ord.rs +++ b/src/libsyntax/ext/deriving/cmp/ord.rs @@ -58,9 +58,9 @@ fn cs_ord(less: bool, equal: bool, cx: @ext_ctxt, span: span, substr: &Substructure) -> @expr { let binop = if less { - cx.ident_of(~"lt") + cx.ident_of("lt") } else { - cx.ident_of(~"gt") + cx.ident_of("gt") }; let false_blk_expr = build::mk_block(cx, span, ~[], ~[], @@ -101,7 +101,7 @@ fn cs_ord(less: bool, equal: bool, } let cmp = build::mk_method_call(cx, span, - self_f, cx.ident_of(~"eq"), other_fs.to_owned()); + self_f, cx.ident_of("eq"), other_fs.to_owned()); let subexpr = build::mk_simple_block(cx, span, subexpr); let elseif = expr_if(cmp, subexpr, Some(false_blk_expr)); let elseif = build::mk_expr(cx, span, elseif); diff --git a/src/libsyntax/ext/deriving/cmp/totalord.rs b/src/libsyntax/ext/deriving/cmp/totalord.rs index ac873c5bd123c..7d560a197d08b 100644 --- a/src/libsyntax/ext/deriving/cmp/totalord.rs +++ b/src/libsyntax/ext/deriving/cmp/totalord.rs @@ -43,21 +43,21 @@ pub fn expand_deriving_totalord(cx: @ext_ctxt, pub fn ordering_const(cx: @ext_ctxt, span: span, cnst: Ordering) -> @expr { let cnst = match cnst { - Less => ~"Less", - Equal => ~"Equal", - Greater => ~"Greater" + Less => "Less", + Equal => "Equal", + Greater => "Greater" }; build::mk_path_global(cx, span, - ~[cx.ident_of(~"core"), - cx.ident_of(~"cmp"), + ~[cx.ident_of("core"), + cx.ident_of("cmp"), cx.ident_of(cnst)]) } pub fn cs_cmp(cx: @ext_ctxt, span: span, substr: &Substructure) -> @expr { - let lexical_ord = ~[cx.ident_of(~"core"), - cx.ident_of(~"cmp"), - cx.ident_of(~"lexical_ordering")]; + let lexical_ord = ~[cx.ident_of("core"), + cx.ident_of("cmp"), + cx.ident_of("lexical_ordering")]; cs_same_method_fold( // foldr (possibly) nests the matches in lexical_ordering better diff --git a/src/libsyntax/ext/deriving/decodable.rs b/src/libsyntax/ext/deriving/decodable.rs index 2bdfe51c50eab..fd5d26a178707 100644 --- a/src/libsyntax/ext/deriving/decodable.rs +++ b/src/libsyntax/ext/deriving/decodable.rs @@ -41,15 +41,15 @@ fn create_derived_decodable_impl( ) -> @item { let decoder_ty_param = build::mk_ty_param( cx, - cx.ident_of(~"__D"), + cx.ident_of("__D"), @opt_vec::with( build::mk_trait_ty_param_bound_global( cx, span, ~[ - cx.ident_of(~"std"), - cx.ident_of(~"serialize"), - cx.ident_of(~"Decoder"), + cx.ident_of("std"), + cx.ident_of("serialize"), + cx.ident_of("Decoder"), ] ) ) @@ -62,13 +62,13 @@ fn create_derived_decodable_impl( let trait_path = build::mk_raw_path_global_( span, ~[ - cx.ident_of(~"std"), - cx.ident_of(~"serialize"), - cx.ident_of(~"Decodable") + cx.ident_of("std"), + cx.ident_of("serialize"), + cx.ident_of("Decodable") ], None, ~[ - build::mk_simple_ty_path(cx, span, cx.ident_of(~"__D")) + build::mk_simple_ty_path(cx, span, cx.ident_of("__D")) ] ); create_derived_impl( @@ -96,11 +96,11 @@ fn create_decode_method( let d_arg_type = build::mk_ty_rptr( cx, span, - build::mk_simple_ty_path(cx, span, cx.ident_of(~"__D")), + build::mk_simple_ty_path(cx, span, cx.ident_of("__D")), None, ast::m_mutbl ); - let d_ident = cx.ident_of(~"__d"); + let d_ident = cx.ident_of("__d"); let d_arg = build::mk_arg(cx, span, d_ident, d_arg_type); // Create the type of the return value. @@ -120,7 +120,7 @@ fn create_decode_method( // Create the method. let self_ty = spanned { node: sty_static, span: span }; - let method_ident = cx.ident_of(~"decode"); + let method_ident = cx.ident_of("decode"); @ast::method { ident: method_ident, attrs: ~[], @@ -148,14 +148,14 @@ fn call_substructure_decode_method( cx, span, ~[ - cx.ident_of(~"std"), - cx.ident_of(~"serialize"), - cx.ident_of(~"Decodable"), - cx.ident_of(~"decode"), + cx.ident_of("std"), + cx.ident_of("serialize"), + cx.ident_of("Decodable"), + cx.ident_of("decode"), ] ), ~[ - build::mk_path(cx, span, ~[cx.ident_of(~"__d")]) + build::mk_path(cx, span, ~[cx.ident_of("__d")]) ] ) } @@ -223,14 +223,14 @@ fn create_read_struct_field( let d_arg = build::mk_arg(cx, span, - cx.ident_of(~"__d"), + cx.ident_of("__d"), build::mk_ty_infer(cx, span)); let call_expr = build::mk_method_call( cx, span, - build::mk_path(cx, span, ~[cx.ident_of(~"__d")]), - cx.ident_of(~"read_struct_field"), + build::mk_path(cx, span, ~[cx.ident_of("__d")]), + cx.ident_of("read_struct_field"), ~[ build::mk_base_str(cx, span, cx.str_of(ident)), build::mk_uint(cx, span, idx), @@ -257,8 +257,8 @@ fn create_read_struct_arg( let call_expr = build::mk_method_call( cx, span, - build::mk_path(cx, span, ~[cx.ident_of(~"__d")]), - cx.ident_of(~"read_struct_arg"), + build::mk_path(cx, span, ~[cx.ident_of("__d")]), + cx.ident_of("read_struct_arg"), ~[ build::mk_uint(cx, span, idx), build::mk_lambda_no_args(cx, span, decode_expr), @@ -295,7 +295,7 @@ fn expand_deriving_decodable_struct_method( let d_arg = build::mk_arg(cx, span, - cx.ident_of(~"__d"), + cx.ident_of("__d"), build::mk_ty_infer(cx, span)); let read_struct_expr = build::mk_method_call( @@ -304,9 +304,9 @@ fn expand_deriving_decodable_struct_method( build::mk_path( cx, span, - ~[cx.ident_of(~"__d")] + ~[cx.ident_of("__d")] ), - cx.ident_of(~"read_struct"), + cx.ident_of("read_struct"), ~[ build::mk_base_str(cx, span, cx.str_of(type_ident)), build::mk_uint(cx, span, fields.len()), @@ -353,15 +353,15 @@ fn create_read_variant_arg( let d_arg = build::mk_arg(cx, span, - cx.ident_of(~"__d"), + cx.ident_of("__d"), build::mk_ty_infer(cx, span)); let t_infer = build::mk_ty_infer(cx, span); let call_expr = build::mk_method_call( cx, span, - build::mk_path(cx, span, ~[cx.ident_of(~"__d")]), - cx.ident_of(~"read_enum_variant_arg"), + build::mk_path(cx, span, ~[cx.ident_of("__d")]), + cx.ident_of("read_enum_variant_arg"), ~[ build::mk_uint(cx, span, j), build::mk_lambda(cx, @@ -416,8 +416,8 @@ fn create_read_enum_variant( build::mk_method_call( cx, span, - build::mk_path(cx, span, ~[cx.ident_of(~"__d")]), - cx.ident_of(~"read_enum_variant"), + build::mk_path(cx, span, ~[cx.ident_of("__d")]), + cx.ident_of("read_enum_variant"), ~[ expr_arm_names, build::mk_lambda( @@ -428,13 +428,13 @@ fn create_read_enum_variant( build::mk_arg( cx, span, - cx.ident_of(~"__d"), + cx.ident_of("__d"), build::mk_ty_infer(cx, span) ), build::mk_arg( cx, span, - cx.ident_of(~"__i"), + cx.ident_of("__i"), build::mk_ty_infer(cx, span) ) ], @@ -444,7 +444,7 @@ fn create_read_enum_variant( cx, span, ast::expr_match( - build::mk_path(cx, span, ~[cx.ident_of(~"__i")]), + build::mk_path(cx, span, ~[cx.ident_of("__i")]), arms ) ) @@ -468,15 +468,15 @@ fn expand_deriving_decodable_enum_method( let d_arg = build::mk_arg(cx, span, - cx.ident_of(~"__d"), + cx.ident_of("__d"), build::mk_ty_infer(cx, span)); // Create the read_enum expression let read_enum_expr = build::mk_method_call( cx, span, - build::mk_path(cx, span, ~[cx.ident_of(~"__d")]), - cx.ident_of(~"read_enum"), + build::mk_path(cx, span, ~[cx.ident_of("__d")]), + cx.ident_of("read_enum"), ~[ build::mk_base_str(cx, span, cx.str_of(type_ident)), build::mk_lambda(cx, diff --git a/src/libsyntax/ext/deriving/encodable.rs b/src/libsyntax/ext/deriving/encodable.rs index 54e5687f415ab..2786c9c6eb5fc 100644 --- a/src/libsyntax/ext/deriving/encodable.rs +++ b/src/libsyntax/ext/deriving/encodable.rs @@ -41,15 +41,15 @@ fn create_derived_encodable_impl( ) -> @item { let encoder_ty_param = build::mk_ty_param( cx, - cx.ident_of(~"__E"), + cx.ident_of("__E"), @opt_vec::with( build::mk_trait_ty_param_bound_global( cx, span, ~[ - cx.ident_of(~"std"), - cx.ident_of(~"serialize"), - cx.ident_of(~"Encoder"), + cx.ident_of("std"), + cx.ident_of("serialize"), + cx.ident_of("Encoder"), ] ) ) @@ -62,13 +62,13 @@ fn create_derived_encodable_impl( let trait_path = build::mk_raw_path_global_( span, ~[ - cx.ident_of(~"std"), - cx.ident_of(~"serialize"), - cx.ident_of(~"Encodable") + cx.ident_of("std"), + cx.ident_of("serialize"), + cx.ident_of("Encodable") ], None, ~[ - build::mk_simple_ty_path(cx, span, cx.ident_of(~"__E")) + build::mk_simple_ty_path(cx, span, cx.ident_of("__E")) ] ); create_derived_impl( @@ -94,11 +94,11 @@ fn create_encode_method( let e_arg_type = build::mk_ty_rptr( cx, span, - build::mk_simple_ty_path(cx, span, cx.ident_of(~"__E")), + build::mk_simple_ty_path(cx, span, cx.ident_of("__E")), None, ast::m_mutbl ); - let e_arg = build::mk_arg(cx, span, cx.ident_of(~"__e"), e_arg_type); + let e_arg = build::mk_arg(cx, span, cx.ident_of("__e"), e_arg_type); // Create the type of the return value. let output_type = @ast::Ty { id: cx.next_id(), node: ty_nil, span: span }; @@ -112,7 +112,7 @@ fn create_encode_method( // Create the method. let self_ty = spanned { node: sty_region(None, m_imm), span: span }; - let method_ident = cx.ident_of(~"encode"); + let method_ident = cx.ident_of("encode"); @ast::method { ident: method_ident, attrs: ~[], @@ -134,11 +134,11 @@ fn call_substructure_encode_method( self_field: @expr ) -> @ast::expr { // Gather up the parameters we want to chain along. - let e_ident = cx.ident_of(~"__e"); + let e_ident = cx.ident_of("__e"); let e_expr = build::mk_path(cx, span, ~[e_ident]); // Call the substructure method. - let encode_ident = cx.ident_of(~"encode"); + let encode_ident = cx.ident_of("encode"); build::mk_method_call( cx, span, @@ -204,7 +204,7 @@ fn expand_deriving_encodable_struct_method( type_ident: ident, struct_def: &struct_def ) -> @method { - let self_ident = cx.ident_of(~"self"); + let self_ident = cx.ident_of("self"); // Create the body of the method. let mut idx = 0; @@ -227,7 +227,7 @@ fn expand_deriving_encodable_struct_method( self_field ); - let e_ident = cx.ident_of(~"__e"); + let e_ident = cx.ident_of("__e"); let e_arg = build::mk_arg(cx, span, e_ident, @@ -243,8 +243,8 @@ fn expand_deriving_encodable_struct_method( let call_expr = build::mk_method_call( cx, span, - build::mk_path(cx, span, ~[cx.ident_of(~"__e")]), - cx.ident_of(~"emit_struct_field"), + build::mk_path(cx, span, ~[cx.ident_of("__e")]), + cx.ident_of("emit_struct_field"), ~[ build::mk_base_str(cx, span, cx.str_of(ident)), build::mk_uint(cx, span, idx), @@ -266,7 +266,7 @@ fn expand_deriving_encodable_struct_method( let e_arg = build::mk_arg(cx, span, - cx.ident_of(~"__e"), + cx.ident_of("__e"), build::mk_ty_infer(cx, span)); let emit_struct_stmt = build::mk_method_call( @@ -275,9 +275,9 @@ fn expand_deriving_encodable_struct_method( build::mk_path( cx, span, - ~[cx.ident_of(~"__e")] + ~[cx.ident_of("__e")] ), - cx.ident_of(~"emit_struct"), + cx.ident_of("emit_struct"), ~[ build::mk_base_str(cx, span, cx.str_of(type_ident)), build::mk_uint(cx, span, statements.len()), @@ -305,7 +305,7 @@ fn expand_deriving_encodable_enum_method( // Create the arms of the match in the method body. let arms = do enum_definition.variants.mapi |i, variant| { // Create the matching pattern. - let (pat, fields) = create_enum_variant_pattern(cx, span, variant, ~"__self", ast::m_imm); + let (pat, fields) = create_enum_variant_pattern(cx, span, variant, "__self", ast::m_imm); // Feed the discriminant to the encode function. let mut stmts = ~[]; @@ -317,7 +317,7 @@ fn expand_deriving_encodable_enum_method( // Call the substructure method. let expr = call_substructure_encode_method(cx, span, field); - let e_ident = cx.ident_of(~"__e"); + let e_ident = cx.ident_of("__e"); let e_arg = build::mk_arg(cx, span, e_ident, @@ -333,8 +333,8 @@ fn expand_deriving_encodable_enum_method( let call_expr = build::mk_method_call( cx, span, - build::mk_path(cx, span, ~[cx.ident_of(~"__e")]), - cx.ident_of(~"emit_enum_variant_arg"), + build::mk_path(cx, span, ~[cx.ident_of("__e")]), + cx.ident_of("emit_enum_variant_arg"), ~[ build::mk_uint(cx, span, j), blk_expr, @@ -347,13 +347,13 @@ fn expand_deriving_encodable_enum_method( // Create the pattern body. let e_arg = build::mk_arg(cx, span, - cx.ident_of(~"__e"), + cx.ident_of("__e"), build::mk_ty_infer(cx, span)); let call_expr = build::mk_method_call( cx, span, - build::mk_path(cx, span, ~[cx.ident_of(~"__e")]), - cx.ident_of(~"emit_enum_variant"), + build::mk_path(cx, span, ~[cx.ident_of("__e")]), + cx.ident_of("emit_enum_variant"), ~[ build::mk_base_str(cx, span, cx.str_of(variant.node.name)), build::mk_uint(cx, span, i), @@ -377,7 +377,7 @@ fn expand_deriving_encodable_enum_method( } }; - let e_ident = cx.ident_of(~"__e"); + let e_ident = cx.ident_of("__e"); let e_arg = build::mk_arg(cx, span, e_ident, @@ -394,8 +394,8 @@ fn expand_deriving_encodable_enum_method( let call_expr = build::mk_method_call( cx, span, - build::mk_path(cx, span, ~[cx.ident_of(~"__e")]), - cx.ident_of(~"emit_enum"), + build::mk_path(cx, span, ~[cx.ident_of("__e")]), + cx.ident_of("emit_enum"), ~[ build::mk_base_str(cx, span, cx.str_of(type_ident)), lambda_expr, diff --git a/src/libsyntax/ext/deriving/mod.rs b/src/libsyntax/ext/deriving/mod.rs index 2bd45e1466ce7..78eacafe3d75c 100644 --- a/src/libsyntax/ext/deriving/mod.rs +++ b/src/libsyntax/ext/deriving/mod.rs @@ -263,7 +263,7 @@ pub fn create_struct_pattern(cx: @ext_ctxt, span: span, struct_ident: ident, struct_def: &struct_def, - prefix: ~str, + prefix: &str, mutbl: ast::mutability) -> (@ast::pat, ~[(Option, @expr)]) { if struct_def.fields.is_empty() { @@ -323,7 +323,7 @@ pub fn create_struct_pattern(cx: @ext_ctxt, pub fn create_enum_variant_pattern(cx: @ext_ctxt, span: span, variant: &ast::variant, - prefix: ~str, + prefix: &str, mutbl: ast::mutability) -> (@ast::pat, ~[(Option, @expr)]) { @@ -371,7 +371,7 @@ pub fn expand_enum_or_struct_match(cx: @ext_ctxt, span: span, arms: ~[ ast::arm ]) -> @expr { - let self_ident = cx.ident_of(~"self"); + let self_ident = cx.ident_of("self"); let self_expr = build::mk_path(cx, span, ~[ self_ident ]); let self_expr = build::mk_unary(cx, span, ast::deref, self_expr); let self_match_expr = ast::expr_match(self_expr, arms); diff --git a/src/libsyntax/ext/deriving/rand.rs b/src/libsyntax/ext/deriving/rand.rs index 604686f442fd7..9030be86f39d0 100644 --- a/src/libsyntax/ext/deriving/rand.rs +++ b/src/libsyntax/ext/deriving/rand.rs @@ -53,10 +53,10 @@ fn rand_substructure(cx: @ext_ctxt, span: span, substr: &Substructure) -> @expr _ => cx.bug("Incorrect number of arguments to `rand` in `deriving(Rand)`") }; let rand_ident = ~[ - cx.ident_of(~"core"), - cx.ident_of(~"rand"), - cx.ident_of(~"Rand"), - cx.ident_of(~"rand") + cx.ident_of("core"), + cx.ident_of("rand"), + cx.ident_of("Rand"), + cx.ident_of("rand") ]; let rand_call = || { build::mk_call_global(cx, @@ -77,8 +77,8 @@ fn rand_substructure(cx: @ext_ctxt, span: span, substr: &Substructure) -> @expr let variant_count = build::mk_uint(cx, span, variants.len()); // need to specify the uint-ness of the random number - let u32_ty = build::mk_ty_path(cx, span, ~[cx.ident_of(~"uint")]); - let r_ty = build::mk_ty_path(cx, span, ~[cx.ident_of(~"R")]); + let u32_ty = build::mk_ty_path(cx, span, ~[cx.ident_of("uint")]); + let r_ty = build::mk_ty_path(cx, span, ~[cx.ident_of("R")]); let rand_name = build::mk_raw_path_(span, copy rand_ident, None, ~[ u32_ty, r_ty ]); let rand_name = build::mk_path_raw(cx, span, rand_name); diff --git a/src/libsyntax/ext/deriving/to_str.rs b/src/libsyntax/ext/deriving/to_str.rs index 2c7d449585f1e..6010354349e64 100644 --- a/src/libsyntax/ext/deriving/to_str.rs +++ b/src/libsyntax/ext/deriving/to_str.rs @@ -44,11 +44,11 @@ fn to_str_substructure(cx: @ext_ctxt, span: span, substr: &Substructure) -> @exp [self_obj] => { let self_addr = build::mk_addr_of(cx, span, self_obj); build::mk_call_global(cx, span, - ~[cx.ident_of(~"core"), - cx.ident_of(~"sys"), - cx.ident_of(~"log_str")], + ~[cx.ident_of("core"), + cx.ident_of("sys"), + cx.ident_of("log_str")], ~[self_addr]) } _ => cx.span_bug(span, ~"Invalid number of arguments in `deriving(ToStr)`") } -} \ No newline at end of file +} diff --git a/src/libsyntax/ext/deriving/ty.rs b/src/libsyntax/ext/deriving/ty.rs index 6195a3a64249e..08947efa7b78b 100644 --- a/src/libsyntax/ext/deriving/ty.rs +++ b/src/libsyntax/ext/deriving/ty.rs @@ -218,7 +218,7 @@ pub impl LifetimeBounds { pub fn get_explicit_self(cx: @ext_ctxt, span: span, self_ptr: Option) -> (@expr, ast::self_ty) { - let self_path = build::mk_path(cx, span, ~[cx.ident_of(~"self")]); + let self_path = build::mk_path(cx, span, ~[cx.ident_of("self")]); match self_ptr { None => { (self_path, respan(span, ast::sty_value)) diff --git a/src/libsyntax/ext/fmt.rs b/src/libsyntax/ext/fmt.rs index e9eebe5b2acc6..1a8edec37145c 100644 --- a/src/libsyntax/ext/fmt.rs +++ b/src/libsyntax/ext/fmt.rs @@ -49,12 +49,12 @@ pub fn expand_syntax_ext(cx: @ext_ctxt, sp: span, tts: &[ast::token_tree]) fn pieces_to_expr(cx: @ext_ctxt, sp: span, pieces: ~[Piece], args: ~[@ast::expr]) -> @ast::expr { - fn make_path_vec(cx: @ext_ctxt, ident: @~str) -> ~[ast::ident] { + fn make_path_vec(cx: @ext_ctxt, ident: &str) -> ~[ast::ident] { let intr = cx.parse_sess().interner; - return ~[intr.intern(@~"unstable"), intr.intern(@~"extfmt"), - intr.intern(@~"rt"), intr.intern(ident)]; + return ~[intr.intern("unstable"), intr.intern("extfmt"), + intr.intern("rt"), intr.intern(ident)]; } - fn make_rt_path_expr(cx: @ext_ctxt, sp: span, nm: @~str) -> @ast::expr { + fn make_rt_path_expr(cx: @ext_ctxt, sp: span, nm: &str) -> @ast::expr { let path = make_path_vec(cx, nm); return mk_path_global(cx, sp, path); } @@ -63,28 +63,28 @@ fn pieces_to_expr(cx: @ext_ctxt, sp: span, fn make_rt_conv_expr(cx: @ext_ctxt, sp: span, cnv: &Conv) -> @ast::expr { fn make_flags(cx: @ext_ctxt, sp: span, flags: ~[Flag]) -> @ast::expr { - let mut tmp_expr = make_rt_path_expr(cx, sp, @~"flag_none"); + let mut tmp_expr = make_rt_path_expr(cx, sp, "flag_none"); for flags.each |f| { let fstr = match *f { - FlagLeftJustify => ~"flag_left_justify", - FlagLeftZeroPad => ~"flag_left_zero_pad", - FlagSpaceForSign => ~"flag_space_for_sign", - FlagSignAlways => ~"flag_sign_always", - FlagAlternate => ~"flag_alternate" + FlagLeftJustify => "flag_left_justify", + FlagLeftZeroPad => "flag_left_zero_pad", + FlagSpaceForSign => "flag_space_for_sign", + FlagSignAlways => "flag_sign_always", + FlagAlternate => "flag_alternate" }; tmp_expr = mk_binary(cx, sp, ast::bitor, tmp_expr, - make_rt_path_expr(cx, sp, @fstr)); + make_rt_path_expr(cx, sp, fstr)); } return tmp_expr; } fn make_count(cx: @ext_ctxt, sp: span, cnt: Count) -> @ast::expr { match cnt { CountImplied => { - return make_rt_path_expr(cx, sp, @~"CountImplied"); + return make_rt_path_expr(cx, sp, "CountImplied"); } CountIs(c) => { let count_lit = mk_uint(cx, sp, c as uint); - let count_is_path = make_path_vec(cx, @~"CountIs"); + let count_is_path = make_path_vec(cx, "CountIs"); let count_is_args = ~[count_lit]; return mk_call_global(cx, sp, count_is_path, count_is_args); } @@ -92,17 +92,16 @@ fn pieces_to_expr(cx: @ext_ctxt, sp: span, } } fn make_ty(cx: @ext_ctxt, sp: span, t: Ty) -> @ast::expr { - let rt_type; - match t { + let rt_type = match t { TyHex(c) => match c { - CaseUpper => rt_type = ~"TyHexUpper", - CaseLower => rt_type = ~"TyHexLower" + CaseUpper => "TyHexUpper", + CaseLower => "TyHexLower" }, - TyBits => rt_type = ~"TyBits", - TyOctal => rt_type = ~"TyOctal", - _ => rt_type = ~"TyDefault" - } - return make_rt_path_expr(cx, sp, @rt_type); + TyBits => "TyBits", + TyOctal => "TyOctal", + _ => "TyDefault" + }; + return make_rt_path_expr(cx, sp, rt_type); } fn make_conv_struct(cx: @ext_ctxt, sp: span, flags_expr: @ast::expr, width_expr: @ast::expr, precision_expr: @ast::expr, @@ -111,19 +110,19 @@ fn pieces_to_expr(cx: @ext_ctxt, sp: span, mk_global_struct_e( cx, sp, - make_path_vec(cx, @~"Conv"), + make_path_vec(cx, "Conv"), ~[ build::Field { - ident: intr.intern(@~"flags"), ex: flags_expr + ident: intr.intern("flags"), ex: flags_expr }, build::Field { - ident: intr.intern(@~"width"), ex: width_expr + ident: intr.intern("width"), ex: width_expr }, build::Field { - ident: intr.intern(@~"precision"), ex: precision_expr + ident: intr.intern("precision"), ex: precision_expr }, build::Field { - ident: intr.intern(@~"ty"), ex: ty_expr + ident: intr.intern("ty"), ex: ty_expr }, ] ) @@ -138,7 +137,7 @@ fn pieces_to_expr(cx: @ext_ctxt, sp: span, fn make_conv_call(cx: @ext_ctxt, sp: span, conv_type: &str, cnv: &Conv, arg: @ast::expr, buf: @ast::expr) -> @ast::expr { let fname = ~"conv_" + conv_type; - let path = make_path_vec(cx, @fname); + let path = make_path_vec(cx, fname); let cnv_expr = make_rt_conv_expr(cx, sp, cnv); let args = ~[cnv_expr, arg, buf]; return mk_call_global(cx, arg.span, path, args); @@ -259,10 +258,10 @@ fn pieces_to_expr(cx: @ext_ctxt, sp: span, let nargs = args.len(); /* 'ident' is the local buffer building up the result of fmt! */ - let ident = cx.parse_sess().interner.intern(@~"__fmtbuf"); + let ident = cx.parse_sess().interner.intern("__fmtbuf"); let buf = || mk_path(cx, fmt_sp, ~[ident]); - let str_ident = cx.parse_sess().interner.intern(@~"str"); - let push_ident = cx.parse_sess().interner.intern(@~"push_str"); + let str_ident = cx.parse_sess().interner.intern("str"); + let push_ident = cx.parse_sess().interner.intern("push_str"); let mut stms = ~[]; /* Translate each piece (portion of the fmt expression) by invoking the diff --git a/src/libsyntax/ext/pipes/ast_builder.rs b/src/libsyntax/ext/pipes/ast_builder.rs index deaf1b1c754a0..a514828725866 100644 --- a/src/libsyntax/ext/pipes/ast_builder.rs +++ b/src/libsyntax/ext/pipes/ast_builder.rs @@ -138,9 +138,9 @@ pub trait ext_ctxt_ast_builder { impl ext_ctxt_ast_builder for @ext_ctxt { fn ty_option(&self, ty: @ast::Ty) -> @ast::Ty { self.ty_path_ast_builder(path_global(~[ - self.ident_of(~"core"), - self.ident_of(~"option"), - self.ident_of(~"Option") + self.ident_of("core"), + self.ident_of("option"), + self.ident_of("Option") ], dummy_sp()).add_ty(ty)) } @@ -360,12 +360,12 @@ impl ext_ctxt_ast_builder for @ext_ctxt { let vi = ast::view_item_use(~[ @codemap::spanned { node: ast::view_path_simple( - self.ident_of(~"Owned"), + self.ident_of("Owned"), path( ~[ - self.ident_of(~"core"), - self.ident_of(~"kinds"), - self.ident_of(~"Owned") + self.ident_of("core"), + self.ident_of("kinds"), + self.ident_of("Owned") ], codemap::dummy_sp() ), diff --git a/src/libsyntax/ext/pipes/pipec.rs b/src/libsyntax/ext/pipes/pipec.rs index 7ac3ea4789d63..b537ef87d543f 100644 --- a/src/libsyntax/ext/pipes/pipec.rs +++ b/src/libsyntax/ext/pipes/pipec.rs @@ -58,7 +58,7 @@ impl gen_send for message { path(~[this.data_name()], span) .add_tys(cx.ty_vars_global(&this.generics.ty_params))); let args_ast = vec::append( - ~[cx.arg(cx.ident_of(~"pipe"), + ~[cx.arg(cx.ident_of("pipe"), pipe_ty)], args_ast); @@ -136,7 +136,7 @@ impl gen_send for message { }; let args_ast = vec::append( - ~[cx.arg(cx.ident_of(~"pipe"), + ~[cx.arg(cx.ident_of("pipe"), cx.ty_path_ast_builder( path(~[this.data_name()], span) .add_tys(cx.ty_vars_global( @@ -212,8 +212,8 @@ impl to_type_decls for state { let next_name = cx.str_of(next.data_name()); let dir = match this.dir { - send => ~"server", - recv => ~"client" + send => "server", + recv => "client" }; vec::append_one(tys, @@ -265,12 +265,12 @@ impl to_type_decls for state { self.data_name(), self.span, cx.ty_path_ast_builder( - path_global(~[cx.ident_of(~"core"), - cx.ident_of(~"pipes"), - cx.ident_of(dir.to_str() + ~"Packet")], + path_global(~[cx.ident_of("core"), + cx.ident_of("pipes"), + cx.ident_of(dir.to_str() + "Packet")], dummy_sp()) .add_ty(cx.ty_path_ast_builder( - path(~[cx.ident_of(~"super"), + path(~[cx.ident_of("super"), self.data_name()], dummy_sp()) .add_tys(cx.ty_vars_global( @@ -283,13 +283,13 @@ impl to_type_decls for state { self.data_name(), self.span, cx.ty_path_ast_builder( - path_global(~[cx.ident_of(~"core"), - cx.ident_of(~"pipes"), + path_global(~[cx.ident_of("core"), + cx.ident_of("pipes"), cx.ident_of(dir.to_str() - + ~"PacketBuffered")], + + "PacketBuffered")], dummy_sp()) .add_tys(~[cx.ty_path_ast_builder( - path(~[cx.ident_of(~"super"), + path(~[cx.ident_of("super"), self.data_name()], dummy_sp()) .add_tys(cx.ty_vars_global( @@ -341,7 +341,7 @@ impl gen_init for protocol { } fn gen_buffer_init(&self, ext_cx: @ext_ctxt) -> @ast::expr { - ext_cx.struct_expr(path(~[ext_cx.ident_of(~"__Buffer")], + ext_cx.struct_expr(path(~[ext_cx.ident_of("__Buffer")], dummy_sp()), self.states.map_to_vec(|s| { let fty = s.to_ty(ext_cx); @@ -389,8 +389,8 @@ impl gen_init for protocol { } } - cx.ty_path_ast_builder(path(~[cx.ident_of(~"super"), - cx.ident_of(~"__Buffer")], + cx.ty_path_ast_builder(path(~[cx.ident_of("super"), + cx.ident_of("__Buffer")], copy self.span) .add_tys(cx.ty_vars_global(¶ms))) } @@ -427,7 +427,7 @@ impl gen_init for protocol { }; cx.item_struct_poly( - cx.ident_of(~"__Buffer"), + cx.ident_of("__Buffer"), dummy_sp(), ast::struct_def { fields: fields, @@ -452,13 +452,13 @@ impl gen_init for protocol { items.push(self.gen_buffer_type(cx)) } - items.push(cx.item_mod(cx.ident_of(~"client"), + items.push(cx.item_mod(cx.ident_of("client"), copy self.span, client_states)); - items.push(cx.item_mod(cx.ident_of(~"server"), + items.push(cx.item_mod(cx.ident_of("server"), copy self.span, server_states)); - cx.item_mod(cx.ident_of(self.name), copy self.span, items) + cx.item_mod(cx.ident_of(copy self.name), copy self.span, items) } } diff --git a/src/libsyntax/ext/quote.rs b/src/libsyntax/ext/quote.rs index 2bf4b05aa6b02..cf983e0dea10d 100644 --- a/src/libsyntax/ext/quote.rs +++ b/src/libsyntax/ext/quote.rs @@ -377,14 +377,14 @@ pub fn expand_quote_tokens(cx: @ext_ctxt, pub fn expand_quote_expr(cx: @ext_ctxt, sp: span, tts: &[ast::token_tree]) -> base::MacResult { - base::MRExpr(expand_parse_call(cx, sp, ~"parse_expr", ~[], tts)) + base::MRExpr(expand_parse_call(cx, sp, "parse_expr", ~[], tts)) } pub fn expand_quote_item(cx: @ext_ctxt, sp: span, tts: &[ast::token_tree]) -> base::MacResult { let e_attrs = build::mk_uniq_vec_e(cx, sp, ~[]); - base::MRExpr(expand_parse_call(cx, sp, ~"parse_item", + base::MRExpr(expand_parse_call(cx, sp, "parse_item", ~[e_attrs], tts)) } @@ -392,7 +392,7 @@ pub fn expand_quote_pat(cx: @ext_ctxt, sp: span, tts: &[ast::token_tree]) -> base::MacResult { let e_refutable = build::mk_lit(cx, sp, ast::lit_bool(true)); - base::MRExpr(expand_parse_call(cx, sp, ~"parse_pat", + base::MRExpr(expand_parse_call(cx, sp, "parse_pat", ~[e_refutable], tts)) } @@ -400,7 +400,7 @@ pub fn expand_quote_ty(cx: @ext_ctxt, sp: span, tts: &[ast::token_tree]) -> base::MacResult { let e_param_colons = build::mk_lit(cx, sp, ast::lit_bool(false)); - base::MRExpr(expand_parse_call(cx, sp, ~"parse_ty", + base::MRExpr(expand_parse_call(cx, sp, "parse_ty", ~[e_param_colons], tts)) } @@ -408,16 +408,16 @@ pub fn expand_quote_stmt(cx: @ext_ctxt, sp: span, tts: &[ast::token_tree]) -> base::MacResult { let e_attrs = build::mk_uniq_vec_e(cx, sp, ~[]); - base::MRExpr(expand_parse_call(cx, sp, ~"parse_stmt", + base::MRExpr(expand_parse_call(cx, sp, "parse_stmt", ~[e_attrs], tts)) } fn ids_ext(cx: @ext_ctxt, strs: ~[~str]) -> ~[ast::ident] { - strs.map(|str| cx.parse_sess().interner.intern(@copy *str)) + strs.map(|str| cx.parse_sess().interner.intern(*str)) } -fn id_ext(cx: @ext_ctxt, str: ~str) -> ast::ident { - cx.parse_sess().interner.intern(@str) +fn id_ext(cx: @ext_ctxt, str: &str) -> ast::ident { + cx.parse_sess().interner.intern(str) } // Lift an ident to the expr that evaluates to that ident. @@ -425,7 +425,7 @@ fn mk_ident(cx: @ext_ctxt, sp: span, ident: ast::ident) -> @ast::expr { let e_str = build::mk_uniq_str(cx, sp, cx.str_of(ident)); build::mk_method_call(cx, sp, build::mk_path(cx, sp, ids_ext(cx, ~[~"ext_cx"])), - id_ext(cx, ~"ident_of"), + id_ext(cx, "ident_of"), ~[e_str]) } @@ -616,7 +616,7 @@ fn mk_tt(cx: @ext_ctxt, sp: span, tt: &ast::token_tree) let e_push = build::mk_method_call(cx, sp, build::mk_path(cx, sp, ids_ext(cx, ~[~"tt"])), - id_ext(cx, ~"push"), + id_ext(cx, "push"), ~[e_tok]); ~[build::mk_stmt(cx, sp, e_push)] @@ -632,14 +632,14 @@ fn mk_tt(cx: @ext_ctxt, sp: span, tt: &ast::token_tree) let e_to_toks = build::mk_method_call(cx, sp, build::mk_path(cx, sp, ~[ident]), - id_ext(cx, ~"to_tokens"), + id_ext(cx, "to_tokens"), ~[build::mk_path(cx, sp, ids_ext(cx, ~[~"ext_cx"]))]); let e_push = build::mk_method_call(cx, sp, build::mk_path(cx, sp, ids_ext(cx, ~[~"tt"])), - id_ext(cx, ~"push_all_move"), + id_ext(cx, "push_all_move"), ~[e_to_toks]); ~[build::mk_stmt(cx, sp, e_push)] @@ -711,15 +711,15 @@ fn expand_tts(cx: @ext_ctxt, let e_sp = build::mk_method_call(cx, sp, build::mk_path(cx, sp, ids_ext(cx, ~[~"ext_cx"])), - id_ext(cx, ~"call_site"), + id_ext(cx, "call_site"), ~[]); let stmt_let_sp = build::mk_local(cx, sp, false, - id_ext(cx, ~"sp"), + id_ext(cx, "sp"), e_sp); let stmt_let_tt = build::mk_local(cx, sp, true, - id_ext(cx, ~"tt"), + id_ext(cx, "tt"), build::mk_uniq_vec_e(cx, sp, ~[])); build::mk_block(cx, sp, uses, @@ -731,18 +731,18 @@ fn expand_tts(cx: @ext_ctxt, fn expand_parse_call(cx: @ext_ctxt, sp: span, - parse_method: ~str, + parse_method: &str, arg_exprs: ~[@ast::expr], tts: &[ast::token_tree]) -> @ast::expr { let tts_expr = expand_tts(cx, sp, tts); let cfg_call = || build::mk_method_call( cx, sp, build::mk_path(cx, sp, ids_ext(cx, ~[~"ext_cx"])), - id_ext(cx, ~"cfg"), ~[]); + id_ext(cx, "cfg"), ~[]); let parse_sess_call = || build::mk_method_call( cx, sp, build::mk_path(cx, sp, ids_ext(cx, ~[~"ext_cx"])), - id_ext(cx, ~"parse_sess"), ~[]); + id_ext(cx, "parse_sess"), ~[]); let new_parser_call = build::mk_call_global(cx, sp, diff --git a/src/libsyntax/ext/tt/macro_rules.rs b/src/libsyntax/ext/tt/macro_rules.rs index 39c3c63a9b7fc..fc00fd1284818 100644 --- a/src/libsyntax/ext/tt/macro_rules.rs +++ b/src/libsyntax/ext/tt/macro_rules.rs @@ -36,8 +36,8 @@ pub fn add_new_extension(cx: @ext_ctxt, spanned { node: copy m, span: dummy_sp() } } - let lhs_nm = cx.parse_sess().interner.gensym(@~"lhs"); - let rhs_nm = cx.parse_sess().interner.gensym(@~"rhs"); + let lhs_nm = cx.parse_sess().interner.gensym("lhs"); + let rhs_nm = cx.parse_sess().interner.gensym("rhs"); // The grammar for macro_rules! is: // $( $lhs:mtcs => $rhs:tt );+ diff --git a/src/libsyntax/parse/lexer.rs b/src/libsyntax/parse/lexer.rs index 8956622a06b58..764dec0eeb391 100644 --- a/src/libsyntax/parse/lexer.rs +++ b/src/libsyntax/parse/lexer.rs @@ -271,7 +271,7 @@ fn consume_any_line_comment(rdr: @mut StringReader) // but comments with only "/"s are not if !is_line_non_doc_comment(acc) { return Some(TokenAndSpan{ - tok: token::DOC_COMMENT(rdr.interner.intern(@acc)), + tok: token::DOC_COMMENT(rdr.interner.intern(acc)), sp: codemap::mk_sp(start_bpos, rdr.pos) }); } @@ -325,7 +325,7 @@ fn consume_block_comment(rdr: @mut StringReader) // but comments with only "*"s between two "/"s are not if !is_block_non_doc_comment(acc) { return Some(TokenAndSpan{ - tok: token::DOC_COMMENT(rdr.interner.intern(@acc)), + tok: token::DOC_COMMENT(rdr.interner.intern(acc)), sp: codemap::mk_sp(start_bpos, rdr.pos) }); } @@ -467,12 +467,12 @@ fn scan_number(c: char, rdr: @mut StringReader) -> token::Token { if c == '3' && n == '2' { bump(rdr); bump(rdr); - return token::LIT_FLOAT(rdr.interner.intern(@num_str), + return token::LIT_FLOAT(rdr.interner.intern(num_str), ast::ty_f32); } else if c == '6' && n == '4' { bump(rdr); bump(rdr); - return token::LIT_FLOAT(rdr.interner.intern(@num_str), + return token::LIT_FLOAT(rdr.interner.intern(num_str), ast::ty_f64); /* FIXME (#2252): if this is out of range for either a 32-bit or 64-bit float, it won't be noticed till the @@ -484,9 +484,9 @@ fn scan_number(c: char, rdr: @mut StringReader) -> token::Token { } if is_float { if is_machine_float { - return token::LIT_FLOAT(rdr.interner.intern(@num_str), ast::ty_f); + return token::LIT_FLOAT(rdr.interner.intern(num_str), ast::ty_f); } - return token::LIT_FLOAT_UNSUFFIXED(rdr.interner.intern(@num_str)); + return token::LIT_FLOAT_UNSUFFIXED(rdr.interner.intern(num_str)); } else { if str::len(num_str) == 0u { rdr.fatal(~"no valid digits found for number"); @@ -548,7 +548,7 @@ fn next_token_inner(rdr: @mut StringReader) -> token::Token { let is_mod_name = c == ':' && nextch(rdr) == ':'; // FIXME: perform NFKC normalization here. (Issue #2253) - return token::IDENT(rdr.interner.intern(@accum_str), is_mod_name); + return token::IDENT(rdr.interner.intern(accum_str), is_mod_name); } if is_dec_digit(c) { return scan_number(c, rdr); @@ -658,7 +658,7 @@ fn next_token_inner(rdr: @mut StringReader) -> token::Token { lifetime_name.push_char(rdr.curr); bump(rdr); } - return token::LIFETIME(rdr.interner.intern(@lifetime_name)); + return token::LIFETIME(rdr.interner.intern(lifetime_name)); } // Otherwise it is a character constant: @@ -731,7 +731,7 @@ fn next_token_inner(rdr: @mut StringReader) -> token::Token { } } bump(rdr); - return token::LIT_STR(rdr.interner.intern(@accum_str)); + return token::LIT_STR(rdr.interner.intern(accum_str)); } '-' => { if nextch(rdr) == '>' { @@ -799,7 +799,7 @@ mod test { let Env {interner: ident_interner, string_reader} = setup(~"/* my source file */ \ fn main() { io::println(~\"zebra\"); }\n"); - let id = ident_interner.intern(@~"fn"); + let id = ident_interner.intern("fn"); let tok1 = string_reader.next_token(); let tok2 = TokenAndSpan{ tok:token::IDENT(id, false), @@ -810,7 +810,7 @@ mod test { // read another token: let tok3 = string_reader.next_token(); let tok4 = TokenAndSpan{ - tok:token::IDENT(ident_interner.intern (@~"main"), false), + tok:token::IDENT(ident_interner.intern("main"), false), sp:span {lo:BytePos(24),hi:BytePos(28),expn_info: None}}; assert_eq!(tok3,tok4); // the lparen is already read: @@ -828,39 +828,39 @@ mod test { } // make the identifier by looking up the string in the interner - fn mk_ident (env: Env, id: ~str, is_mod_name: bool) -> token::Token { - token::IDENT (env.interner.intern(@id),is_mod_name) + fn mk_ident (env: Env, id: &str, is_mod_name: bool) -> token::Token { + token::IDENT (env.interner.intern(id),is_mod_name) } #[test] fn doublecolonparsing () { let env = setup (~"a b"); check_tokenization (env, - ~[mk_ident (env,~"a",false), - mk_ident (env,~"b",false)]); + ~[mk_ident (env,"a",false), + mk_ident (env,"b",false)]); } #[test] fn dcparsing_2 () { let env = setup (~"a::b"); check_tokenization (env, - ~[mk_ident (env,~"a",true), + ~[mk_ident (env,"a",true), token::MOD_SEP, - mk_ident (env,~"b",false)]); + mk_ident (env,"b",false)]); } #[test] fn dcparsing_3 () { let env = setup (~"a ::b"); check_tokenization (env, - ~[mk_ident (env,~"a",false), + ~[mk_ident (env,"a",false), token::MOD_SEP, - mk_ident (env,~"b",false)]); + mk_ident (env,"b",false)]); } #[test] fn dcparsing_4 () { let env = setup (~"a:: b"); check_tokenization (env, - ~[mk_ident (env,~"a",true), + ~[mk_ident (env,"a",true), token::MOD_SEP, - mk_ident (env,~"b",false)]); + mk_ident (env,"b",false)]); } #[test] fn character_a() { @@ -888,7 +888,7 @@ mod test { let env = setup(~"'abc"); let TokenAndSpan {tok, sp: _} = env.string_reader.next_token(); - let id = env.interner.intern(@~"abc"); + let id = env.interner.intern("abc"); assert_eq!(tok, token::LIFETIME(id)); } } diff --git a/src/libsyntax/parse/mod.rs b/src/libsyntax/parse/mod.rs index 0708b65864ee2..ce41d377346cc 100644 --- a/src/libsyntax/parse/mod.rs +++ b/src/libsyntax/parse/mod.rs @@ -375,13 +375,13 @@ mod test { assert!(i.len() < 100); for int::range(0,100-((i.len()).to_int())) |_dc| { - i.gensym(@~"dontcare"); + i.gensym("dontcare"); } - i.intern(@~"a"); - i.intern(@~"b"); - i.intern(@~"c"); - i.intern(@~"d"); - i.intern(@~"return"); + i.intern("a"); + i.intern("b"); + i.intern("c"); + i.intern("d"); + i.intern("return"); assert!(i.get(ast::ident{repr:101,ctxt:0}) == @~"b"); i } diff --git a/src/libsyntax/parse/token.rs b/src/libsyntax/parse/token.rs index fe7bd5b3bc17d..4483cc42361cc 100644 --- a/src/libsyntax/parse/token.rs +++ b/src/libsyntax/parse/token.rs @@ -11,7 +11,7 @@ use ast; use ast_util; use parse::token; -use util::interner::Interner; +use util::interner::StrInterner; use util::interner; use core::cmp::Equiv; @@ -390,14 +390,14 @@ pub fn token_to_binop(tok: Token) -> Option { } pub struct ident_interner { - priv interner: Interner<@~str>, + priv interner: StrInterner, } pub impl ident_interner { - fn intern(&self, val: @~str) -> ast::ident { + fn intern(&self, val: &str) -> ast::ident { ast::ident { repr: self.interner.intern(val), ctxt: 0 } } - fn gensym(&self, val: @~str) -> ast::ident { + fn gensym(&self, val: &str) -> ast::ident { ast::ident { repr: self.interner.gensym(val), ctxt: 0 } } fn get(&self, idx: ast::ident) -> @~str { @@ -421,45 +421,45 @@ pub fn mk_fresh_ident_interner() -> @ident_interner { // the indices here must correspond to the numbers in // special_idents. let init_vec = ~[ - @~"_", // 0 - @~"anon", // 1 - @~"", // 2 - @~"unary", // 3 - @~"!", // 4 - @~"[]", // 5 - @~"unary-", // 6 - @~"__extensions__", // 7 - @~"self", // 8 - @~"item", // 9 - @~"block", // 10 - @~"stmt", // 11 - @~"pat", // 12 - @~"expr", // 13 - @~"ty", // 14 - @~"ident", // 15 - @~"path", // 16 - @~"tt", // 17 - @~"matchers", // 18 - @~"str", // 19 - @~"TyVisitor", // 20 - @~"arg", // 21 - @~"descrim", // 22 - @~"__rust_abi", // 23 - @~"__rust_stack_shim", // 24 - @~"TyDesc", // 25 - @~"main", // 26 - @~"", // 27 - @~"blk", // 28 - @~"static", // 29 - @~"intrinsic", // 30 - @~"__foreign_mod__", // 31 - @~"__field__", // 32 - @~"C", // 33 - @~"Self", // 34 + "_", // 0 + "anon", // 1 + "", // 2 + "unary", // 3 + "!", // 4 + "[]", // 5 + "unary-", // 6 + "__extensions__", // 7 + "self", // 8 + "item", // 9 + "block", // 10 + "stmt", // 11 + "pat", // 12 + "expr", // 13 + "ty", // 14 + "ident", // 15 + "path", // 16 + "tt", // 17 + "matchers", // 18 + "str", // 19 + "TyVisitor", // 20 + "arg", // 21 + "descrim", // 22 + "__rust_abi", // 23 + "__rust_stack_shim", // 24 + "TyDesc", // 25 + "main", // 26 + "", // 27 + "blk", // 28 + "static", // 29 + "intrinsic", // 30 + "__foreign_mod__", // 31 + "__field__", // 32 + "C", // 33 + "Self", // 34 ]; let rv = @ident_interner { - interner: interner::Interner::prefill(init_vec) + interner: interner::StrInterner::prefill(init_vec) }; unsafe { task::local_data::local_data_set(interner_key!(), @rv); @@ -483,7 +483,7 @@ pub fn mk_ident_interner() -> @ident_interner { /* for when we don't care about the contents; doesn't interact with TLD or serialization */ pub fn mk_fake_ident_interner() -> @ident_interner { - @ident_interner { interner: interner::Interner::new() } + @ident_interner { interner: interner::StrInterner::new() } } /** diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index f12fb21992e85..81652f9c1a100 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -2249,7 +2249,7 @@ mod test { #[test] fn test_fun_to_str() { let mock_interner = parse::token::mk_fake_ident_interner(); - let abba_ident = mock_interner.intern(@~"abba"); + let abba_ident = mock_interner.intern("abba"); let decl = ast::fn_decl { inputs: ~[], @@ -2267,7 +2267,7 @@ mod test { #[test] fn test_variant_to_str() { let mock_interner = parse::token::mk_fake_ident_interner(); - let ident = mock_interner.intern(@~"principal_skinner"); + let ident = mock_interner.intern("principal_skinner"); let var = codemap::respan(codemap::dummy_sp(), ast::variant_ { name: ident, diff --git a/src/libsyntax/util/interner.rs b/src/libsyntax/util/interner.rs index 23084c34209e9..cca2ec89fd421 100644 --- a/src/libsyntax/util/interner.rs +++ b/src/libsyntax/util/interner.rs @@ -17,6 +17,7 @@ use core::cmp::Equiv; use core::hashmap::HashMap; +use syntax::parse::token::StringRef; pub struct Interner { priv map: @mut HashMap, @@ -77,6 +78,61 @@ pub impl Interner { } } +pub struct StrInterner { + priv map: @mut HashMap<@~str, uint>, + priv vect: @mut ~[@~str], +} + +// when traits can extend traits, we should extend index to get [] +pub impl StrInterner { + fn new() -> StrInterner { + StrInterner { + map: @mut HashMap::new(), + vect: @mut ~[], + } + } + + fn prefill(init: &[&str]) -> StrInterner { + let rv = StrInterner::new(); + for init.each() |v| { rv.intern(*v); } + rv + } + + fn intern(&self, val: &str) -> uint { + match self.map.find_equiv(&StringRef(val)) { + Some(&idx) => return idx, + None => (), + } + + let new_idx = self.len(); + self.map.insert(@val.to_owned(), new_idx); + self.vect.push(@val.to_owned()); + new_idx + } + + fn gensym(&self, val: &str) -> uint { + let new_idx = self.len(); + // leave out of .map to avoid colliding + self.vect.push(@val.to_owned()); + new_idx + } + + // this isn't "pure" in the traditional sense, because it can go from + // failing to returning a value as items are interned. But for typestate, + // where we first check a pred and then rely on it, ceasing to fail is ok. + fn get(&self, idx: uint) -> @~str { self.vect[idx] } + + fn len(&self) -> uint { let vect = &*self.vect; vect.len() } + + fn find_equiv>(&self, val: &Q) + -> Option { + match self.map.find_equiv(val) { + Some(v) => Some(*v), + None => None, + } + } +} + /* Key for thread-local data for sneaking interner information to the * encoder/decoder. It sounds like a hack because it is one. * Bonus ultra-hack: functions as keys don't work across crates, diff --git a/src/test/compile-fail/qquote-1.rs b/src/test/compile-fail/qquote-1.rs index 4710d9dee4521..1241190b5371f 100644 --- a/src/test/compile-fail/qquote-1.rs +++ b/src/test/compile-fail/qquote-1.rs @@ -26,7 +26,7 @@ trait fake_ext_ctxt { fn cfg() -> ast::crate_cfg; fn parse_sess() -> parse::parse_sess; fn call_site() -> span; - fn ident_of(st: ~str) -> ast::ident; + fn ident_of(st: &str) -> ast::ident; } type fake_session = parse::parse_sess; @@ -41,8 +41,8 @@ impl fake_ext_ctxt for fake_session { expn_info: None } } - fn ident_of(st: ~str) -> ast::ident { - self.interner.intern(@st) + fn ident_of(st: &str) -> ast::ident { + self.interner.intern(st) } } diff --git a/src/test/compile-fail/qquote-2.rs b/src/test/compile-fail/qquote-2.rs index d377325610598..07500825a952b 100644 --- a/src/test/compile-fail/qquote-2.rs +++ b/src/test/compile-fail/qquote-2.rs @@ -25,7 +25,7 @@ trait fake_ext_ctxt { fn cfg() -> ast::crate_cfg; fn parse_sess() -> parse::parse_sess; fn call_site() -> span; - fn ident_of(st: ~str) -> ast::ident; + fn ident_of(st: &str) -> ast::ident; } type fake_session = parse::parse_sess; @@ -40,8 +40,8 @@ impl fake_ext_ctxt for fake_session { expn_info: None } } - fn ident_of(st: ~str) -> ast::ident { - self.interner.intern(@st) + fn ident_of(st: &str) -> ast::ident { + self.interner.intern(st) } } diff --git a/src/test/run-pass-fulldeps/qquote.rs b/src/test/run-pass-fulldeps/qquote.rs index 284195f3f04ec..84edb990a7598 100644 --- a/src/test/run-pass-fulldeps/qquote.rs +++ b/src/test/run-pass-fulldeps/qquote.rs @@ -27,7 +27,7 @@ trait fake_ext_ctxt { fn cfg() -> ast::crate_cfg; fn parse_sess() -> parse::parse_sess; fn call_site() -> span; - fn ident_of(st: ~str) -> ast::ident; + fn ident_of(st: &str) -> ast::ident; } type fake_session = parse::parse_sess; @@ -42,8 +42,8 @@ impl fake_ext_ctxt for fake_session { expn_info: None } } - fn ident_of(st: ~str) -> ast::ident { - self.interner.intern(@copy st) + fn ident_of(st: &str) -> ast::ident { + self.interner.intern(st) } } From e3230330b7a30bc83a15cfdfc23df5ef17a070c1 Mon Sep 17 00:00:00 2001 From: Lenny222 Date: Thu, 9 May 2013 15:46:32 +0200 Subject: [PATCH 324/410] back-ticks --- src/libsyntax/parse/parser.rs | 2 +- src/test/compile-fail/struct-no-fields.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 0543295eb4e6d..3ddc7a8792494 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -3310,7 +3310,7 @@ pub impl Parser { } } if fields.len() == 0 { - self.fatal(fmt!("Unit-like struct should be written as: struct %s;", + self.fatal(fmt!("Unit-like struct should be written as `struct %s;`", *self.interner.get(class_name))); } self.bump(); diff --git a/src/test/compile-fail/struct-no-fields.rs b/src/test/compile-fail/struct-no-fields.rs index 08a590f73965a..546931d20dc74 100644 --- a/src/test/compile-fail/struct-no-fields.rs +++ b/src/test/compile-fail/struct-no-fields.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// error-pattern: Unit-like struct should be written as: struct Foo; +// error-pattern: Unit-like struct should be written as `struct Foo;` struct Foo {} fn main() {} From dc2ca9d8830a7a34242aa7722f545bc242813af3 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Tue, 7 May 2013 17:30:21 -0400 Subject: [PATCH 325/410] Refactor representation of bounds to separate out BuiltinBounds into its own type. Use a bitset to represent built-in bounds. There are several places in the language where only builtin bounds (aka kinds) will be accepted, e.g. on closures, destructor type parameters perhaps, and on trait types. --- src/librustc/metadata/tydecode.rs | 40 +++++-- src/librustc/metadata/tyencode.rs | 24 ++-- src/librustc/middle/kind.rs | 40 ++----- src/librustc/middle/subst.rs | 26 ++--- src/librustc/middle/trans/monomorphize.rs | 11 +- src/librustc/middle/ty.rs | 107 ++++++++++-------- src/librustc/middle/typeck/check/vtable.rs | 10 +- src/librustc/middle/typeck/coherence.rs | 48 ++++---- src/librustc/middle/typeck/collect.rs | 87 +++++++++----- src/librustc/rustc.rc | 1 + src/librustc/util/enum_set.rs | 88 ++++++++++++++ src/librustc/util/ppaux.rs | 92 +++++++++++---- src/test/compile-fail/issue-2611-4.rs | 2 +- .../issue-2611-3.rs | 7 +- 14 files changed, 370 insertions(+), 213 deletions(-) create mode 100644 src/librustc/util/enum_set.rs rename src/test/{compile-fail => run-pass}/issue-2611-3.rs (68%) diff --git a/src/librustc/metadata/tydecode.rs b/src/librustc/metadata/tydecode.rs index 02acafbd98099..c220ae45b1a3f 100644 --- a/src/librustc/metadata/tydecode.rs +++ b/src/librustc/metadata/tydecode.rs @@ -555,18 +555,34 @@ fn parse_type_param_def(st: @mut PState, conv: conv_did) -> ty::TypeParameterDef bounds: parse_bounds(st, conv)} } -fn parse_bounds(st: @mut PState, conv: conv_did) -> @~[ty::param_bound] { - let mut bounds = ~[]; +fn parse_bounds(st: @mut PState, conv: conv_did) -> @ty::ParamBounds { + let mut param_bounds = ty::ParamBounds { + builtin_bounds: ty::EmptyBuiltinBounds(), + trait_bounds: ~[] + }; loop { - bounds.push(match next(st) { - 'S' => ty::bound_owned, - 'C' => ty::bound_copy, - 'K' => ty::bound_const, - 'O' => ty::bound_durable, - 'I' => ty::bound_trait(@parse_trait_ref(st, conv)), - '.' => break, - _ => fail!(~"parse_bounds: bad bounds") - }); + match next(st) { + 'S' => { + param_bounds.builtin_bounds.add(ty::BoundOwned); + } + 'C' => { + param_bounds.builtin_bounds.add(ty::BoundCopy); + } + 'K' => { + param_bounds.builtin_bounds.add(ty::BoundConst); + } + 'O' => { + param_bounds.builtin_bounds.add(ty::BoundStatic); + } + 'I' => { + param_bounds.trait_bounds.push(@parse_trait_ref(st, conv)); + } + '.' => { + return @param_bounds; + } + _ => { + fail!(~"parse_bounds: bad bounds") + } + } } - @bounds } diff --git a/src/librustc/metadata/tyencode.rs b/src/librustc/metadata/tyencode.rs index 3abe5b22e1a1c..86088646bcae3 100644 --- a/src/librustc/metadata/tyencode.rs +++ b/src/librustc/metadata/tyencode.rs @@ -396,19 +396,21 @@ fn enc_fn_sig(w: @io::Writer, cx: @ctxt, fsig: &ty::FnSig) { enc_ty(w, cx, fsig.output); } -fn enc_bounds(w: @io::Writer, cx: @ctxt, bs: @~[ty::param_bound]) { - for (*bs).each |bound| { - match *bound { - ty::bound_owned => w.write_char('S'), - ty::bound_copy => w.write_char('C'), - ty::bound_const => w.write_char('K'), - ty::bound_durable => w.write_char('O'), - ty::bound_trait(tp) => { - w.write_char('I'); - enc_trait_ref(w, cx, tp); - } +fn enc_bounds(w: @io::Writer, cx: @ctxt, bs: @ty::ParamBounds) { + for bs.builtin_bounds.each |bound| { + match bound { + ty::BoundOwned => w.write_char('S'), + ty::BoundCopy => w.write_char('C'), + ty::BoundConst => w.write_char('K'), + ty::BoundStatic => w.write_char('O'), } } + + for bs.trait_bounds.each |&tp| { + w.write_char('I'); + enc_trait_ref(w, cx, tp); + } + w.write_char('.'); } diff --git a/src/librustc/middle/kind.rs b/src/librustc/middle/kind.rs index 0050e0f81c756..f8f6dbd82595e 100644 --- a/src/librustc/middle/kind.rs +++ b/src/librustc/middle/kind.rs @@ -14,6 +14,7 @@ use middle::pat_util; use middle::ty; use middle::typeck; use util::ppaux::{Repr, ty_to_str}; +use util::ppaux::UserString; use syntax::ast::*; use syntax::attr::attrs_contains_name; @@ -338,46 +339,19 @@ pub fn check_bounds(cx: Context, type_param_def: &ty::TypeParameterDef) { let kind = ty::type_contents(cx.tcx, ty); - let mut missing = ~[]; - for type_param_def.bounds.each |bound| { - match *bound { - ty::bound_trait(_) => { - /* Not our job, checking in typeck */ - } - - ty::bound_copy => { - if !kind.is_copy(cx.tcx) { - missing.push("Copy"); - } - } - - ty::bound_durable => { - if !kind.is_durable(cx.tcx) { - missing.push("'static"); - } - } - - ty::bound_owned => { - if !kind.is_owned(cx.tcx) { - missing.push("Owned"); - } - } - - ty::bound_const => { - if !kind.is_const(cx.tcx) { - missing.push("Const"); - } - } + let mut missing = ty::EmptyBuiltinBounds(); + for type_param_def.bounds.builtin_bounds.each |bound| { + if !kind.meets_bound(cx.tcx, bound) { + missing.add(bound); } } - if !missing.is_empty() { cx.tcx.sess.span_err( sp, fmt!("instantiating a type parameter with an incompatible type \ `%s`, which does not fulfill `%s`", ty_to_str(cx.tcx, ty), - str::connect_slices(missing, " "))); + missing.user_string(cx.tcx))); } } @@ -440,7 +414,7 @@ pub fn check_owned(cx: Context, ty: ty::t, sp: span) -> bool { // note: also used from middle::typeck::regionck! pub fn check_durable(tcx: ty::ctxt, ty: ty::t, sp: span) -> bool { - if !ty::type_is_durable(tcx, ty) { + if !ty::type_is_static(tcx, ty) { match ty::get(ty).sty { ty::ty_param(*) => { tcx.sess.span_err(sp, "value may contain borrowed \ diff --git a/src/librustc/middle/subst.rs b/src/librustc/middle/subst.rs index bf64134704a4c..5c7c33d35b238 100644 --- a/src/librustc/middle/subst.rs +++ b/src/librustc/middle/subst.rs @@ -78,9 +78,11 @@ impl Subst for ~[T] { } } -impl Subst for @~[T] { - fn subst(&self, tcx: ty::ctxt, substs: &ty::substs) -> @~[T] { - @(**self).subst(tcx, substs) +impl Subst for @T { + fn subst(&self, tcx: ty::ctxt, substs: &ty::substs) -> @T { + match self { + &@ref t => @t.subst(tcx, substs) + } } } @@ -115,19 +117,11 @@ impl Subst for ty::BareFnTy { } } -impl Subst for ty::param_bound { - fn subst(&self, tcx: ty::ctxt, substs: &ty::substs) -> ty::param_bound { - match self { - &ty::bound_copy | - &ty::bound_durable | - &ty::bound_owned | - &ty::bound_const => { - *self - } - - &ty::bound_trait(tref) => { - ty::bound_trait(@tref.subst(tcx, substs)) - } +impl Subst for ty::ParamBounds { + fn subst(&self, tcx: ty::ctxt, substs: &ty::substs) -> ty::ParamBounds { + ty::ParamBounds { + builtin_bounds: self.builtin_bounds, + trait_bounds: self.trait_bounds.subst(tcx, substs) } } } diff --git a/src/librustc/middle/trans/monomorphize.rs b/src/librustc/middle/trans/monomorphize.rs index 6e25064186941..905e5ed912c52 100644 --- a/src/librustc/middle/trans/monomorphize.rs +++ b/src/librustc/middle/trans/monomorphize.rs @@ -348,14 +348,9 @@ pub fn make_mono_id(ccx: @CrateContext, let mut i = 0; vec::map_zip(*item_ty.generics.type_param_defs, substs, |type_param_def, subst| { let mut v = ~[]; - for type_param_def.bounds.each |bound| { - match *bound { - ty::bound_trait(_) => { - v.push(meth::vtable_id(ccx, /*bad*/copy vts[i])); - i += 1; - } - _ => () - } + for type_param_def.bounds.trait_bounds.each |_bound| { + v.push(meth::vtable_id(ccx, /*bad*/copy vts[i])); + i += 1; } (*subst, if !v.is_empty() { Some(v) } else { None }) }) diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index 2daba3212e1c3..c31843870e88c 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -26,6 +26,7 @@ use util::ppaux::{note_and_explain_region, bound_region_to_str}; use util::ppaux::{trait_store_to_str, ty_to_str, vstore_to_str}; use util::ppaux::Repr; use util::common::{indenter}; +use util::enum_set::{EnumSet, CLike}; use core; use core::ptr::to_unsafe_ptr; @@ -58,8 +59,6 @@ pub struct field { mt: mt } -pub type param_bounds = @~[param_bound]; - pub struct method { ident: ast::ident, generics: ty::Generics, @@ -655,12 +654,32 @@ pub enum type_err { } #[deriving(Eq, IterBytes)] -pub enum param_bound { - bound_copy, - bound_durable, - bound_owned, - bound_const, - bound_trait(@TraitRef), +pub struct ParamBounds { + builtin_bounds: BuiltinBounds, + trait_bounds: ~[@TraitRef] +} + +pub type BuiltinBounds = EnumSet; + +#[deriving(Eq, IterBytes)] +pub enum BuiltinBound { + BoundCopy, + BoundStatic, + BoundOwned, + BoundConst, +} + +pub fn EmptyBuiltinBounds() -> BuiltinBounds { + EnumSet::empty() +} + +impl CLike for BuiltinBound { + pub fn to_uint(&self) -> uint { + *self as uint + } + pub fn from_uint(v: uint) -> BuiltinBound { + unsafe { cast::transmute(v) } + } } #[deriving(Eq)] @@ -817,7 +836,7 @@ impl to_bytes::IterBytes for RegionVid { pub struct TypeParameterDef { def_id: ast::def_id, - bounds: param_bounds + bounds: @ParamBounds } /// Information about the type/lifetime parametesr associated with an item. @@ -1497,14 +1516,6 @@ pub fn substs_to_str(cx: ctxt, substs: &substs) -> ~str { substs.repr(cx) } -pub fn param_bound_to_str(cx: ctxt, pb: ¶m_bound) -> ~str { - pb.repr(cx) -} - -pub fn param_bounds_to_str(cx: ctxt, pbs: param_bounds) -> ~str { - pbs.repr(cx) -} - pub fn subst(cx: ctxt, substs: &substs, typ: t) @@ -1795,6 +1806,19 @@ pub struct TypeContents { } pub impl TypeContents { + fn meets_bounds(&self, cx: ctxt, bbs: BuiltinBounds) -> bool { + iter::all(|bb| self.meets_bound(cx, bb), |f| bbs.each(f)) + } + + fn meets_bound(&self, cx: ctxt, bb: BuiltinBound) -> bool { + match bb { + BoundCopy => self.is_copy(cx), + BoundStatic => self.is_static(cx), + BoundConst => self.is_const(cx), + BoundOwned => self.is_owned(cx) + } + } + fn intersects(&self, tc: TypeContents) -> bool { (self.bits & tc.bits) != 0 } @@ -1808,11 +1832,11 @@ pub impl TypeContents { TC_EMPTY_ENUM } - fn is_durable(&self, cx: ctxt) -> bool { - !self.intersects(TypeContents::nondurable(cx)) + fn is_static(&self, cx: ctxt) -> bool { + !self.intersects(TypeContents::nonstatic(cx)) } - fn nondurable(_cx: ctxt) -> TypeContents { + fn nonstatic(_cx: ctxt) -> TypeContents { TC_BORROWED_POINTER } @@ -1917,8 +1941,8 @@ pub fn type_is_copyable(cx: ctxt, t: ty::t) -> bool { type_contents(cx, t).is_copy(cx) } -pub fn type_is_durable(cx: ctxt, t: ty::t) -> bool { - type_contents(cx, t).is_durable(cx) +pub fn type_is_static(cx: ctxt, t: ty::t) -> bool { + type_contents(cx, t).is_static(cx) } pub fn type_is_owned(cx: ctxt, t: ty::t) -> bool { @@ -2198,19 +2222,19 @@ pub fn type_contents(cx: ctxt, ty: t) -> TypeContents { debug!("type_param_def_to_contents(%s)", type_param_def.repr(cx)); let _i = indenter(); - let r = type_param_def.bounds.foldl(TC_ALL, |tc, bound| { + let mut tc = TC_ALL; + for type_param_def.bounds.builtin_bounds.each |bound| { debug!("tc = %s, bound = %?", tc.to_str(), bound); - match *bound { - bound_copy => tc - TypeContents::nonimplicitly_copyable(cx), - bound_durable => tc - TypeContents::nondurable(cx), - bound_owned => tc - TypeContents::nonowned(cx), - bound_const => tc - TypeContents::nonconst(cx), - bound_trait(_) => *tc - } - }); + tc = tc - match bound { + BoundCopy => TypeContents::nonimplicitly_copyable(cx), + BoundStatic => TypeContents::nonstatic(cx), + BoundOwned => TypeContents::nonowned(cx), + BoundConst => TypeContents::nonconst(cx), + }; + } - debug!("result = %s", r.to_str()); - return r; + debug!("result = %s", tc.to_str()); + return tc; } } @@ -3577,7 +3601,7 @@ pub fn trait_supertraits(cx: ctxt, pub fn trait_ref_supertraits(cx: ctxt, trait_ref: &ty::TraitRef) -> ~[@TraitRef] { let supertrait_refs = trait_supertraits(cx, trait_ref.def_id); supertrait_refs.map( - |supertrait_ref| @supertrait_ref.subst(cx, &trait_ref.substs)) + |supertrait_ref| supertrait_ref.subst(cx, &trait_ref.substs)) } fn lookup_locally_or_in_crate_store( @@ -4261,18 +4285,9 @@ pub fn determine_inherited_purity(parent: (ast::purity, ast::node_id), // relation on the supertraits from each bounded trait's constraint // list. pub fn each_bound_trait_and_supertraits(tcx: ctxt, - bounds: param_bounds, - f: &fn(&TraitRef) -> bool) { - for bounds.each |bound| { - let bound_trait_ref = match *bound { - ty::bound_trait(bound_t) => bound_t, - - ty::bound_copy | ty::bound_owned | - ty::bound_const | ty::bound_durable => { - loop; // skip non-trait bounds - } - }; - + bounds: &ParamBounds, + f: &fn(@TraitRef) -> bool) { + for bounds.trait_bounds.each |&bound_trait_ref| { let mut supertrait_set = HashMap::new(); let mut trait_refs = ~[]; let mut i = 0; diff --git a/src/librustc/middle/typeck/check/vtable.rs b/src/librustc/middle/typeck/check/vtable.rs index a744751ea917c..1277715982158 100644 --- a/src/librustc/middle/typeck/check/vtable.rs +++ b/src/librustc/middle/typeck/check/vtable.rs @@ -67,8 +67,7 @@ pub impl VtableContext { fn has_trait_bounds(type_param_defs: &[ty::TypeParameterDef]) -> bool { type_param_defs.any( - |type_param_def| type_param_def.bounds.any( - |bound| match bound { &ty::bound_trait(*) => true, _ => false })) + |type_param_def| !type_param_def.bounds.trait_bounds.is_empty()) } fn lookup_vtables(vcx: &VtableContext, @@ -99,7 +98,7 @@ fn lookup_vtables(vcx: &VtableContext, // Substitute the values of the type parameters that may // appear in the bound. - let trait_ref = trait_ref.subst(tcx, substs); + let trait_ref = (*trait_ref).subst(tcx, substs); debug!("after subst: %s", trait_ref.repr(tcx)); @@ -339,7 +338,8 @@ fn lookup_vtable(vcx: &VtableContext, vcx.infcx.trait_ref_to_str(trait_ref), vcx.infcx.trait_ref_to_str(of_trait_ref)); - let of_trait_ref = of_trait_ref.subst(tcx, &substs); + let of_trait_ref = + (*of_trait_ref).subst(tcx, &substs); relate_trait_refs( vcx, location_info, &of_trait_ref, trait_ref); @@ -458,7 +458,7 @@ fn connect_trait_tps(vcx: &VtableContext, // XXX: This should work for multiple traits. let impl_trait_ref = ty::impl_trait_refs(tcx, impl_did)[0]; - let impl_trait_ref = impl_trait_ref.subst(tcx, impl_substs); + let impl_trait_ref = (*impl_trait_ref).subst(tcx, impl_substs); relate_trait_refs(vcx, location_info, &impl_trait_ref, trait_ref); } diff --git a/src/librustc/middle/typeck/coherence.rs b/src/librustc/middle/typeck/coherence.rs index 82ef09a83bee9..6a83db6baee3c 100644 --- a/src/librustc/middle/typeck/coherence.rs +++ b/src/librustc/middle/typeck/coherence.rs @@ -22,7 +22,7 @@ use metadata::csearch; use metadata::cstore::{CStore, iter_crate_data}; use metadata::decoder::{dl_def, dl_field, dl_impl}; use middle::resolve::{Impl, MethodInfo}; -use middle::ty::{ProvidedMethodSource, ProvidedMethodInfo, bound_copy, get}; +use middle::ty::{ProvidedMethodSource, ProvidedMethodInfo, get}; use middle::ty::{lookup_item_type, subst}; use middle::ty::{substs, t, ty_bool, ty_bot, ty_box, ty_enum, ty_err}; use middle::ty::{ty_estr, ty_evec, ty_float, ty_infer, ty_int, ty_nil}; @@ -603,34 +603,28 @@ pub impl CoherenceChecker { // Check to ensure that each parameter binding respected its // kind bounds. for [ a, b ].each |result| { - for vec::each2(result.type_variables, *result.type_param_defs) - |ty_var, type_param_def| { - match resolve_type(self.inference_context, - *ty_var, - resolve_nested_tvar) { - Ok(resolved_ty) => { - for type_param_def.bounds.each |bound| { - match *bound { - bound_copy => { - if !ty::type_is_copyable( - self.inference_context.tcx, - resolved_ty) - { - might_unify = false; - break; - } - } - - // XXX: We could be smarter here. - // Check to see whether owned, send, - // const, trait param bounds could - // possibly unify. - _ => {} + for vec::each2(result.type_variables, + *result.type_param_defs) + |ty_var, type_param_def| + { + if type_param_def.bounds.builtin_bounds.contains_elem( + ty::BoundCopy) + { + match resolve_type(self.inference_context, + *ty_var, + resolve_nested_tvar) { + Ok(resolved_ty) => { + if !ty::type_is_copyable( + self.inference_context.tcx, + resolved_ty) + { + might_unify = false; + break; } } - } - Err(*) => { - // Conservatively assume it might unify. + Err(*) => { + // Conservatively assume it might unify. + } } } } diff --git a/src/librustc/middle/typeck/collect.rs b/src/librustc/middle/typeck/collect.rs index 33153bde5ac68..6de877620315b 100644 --- a/src/librustc/middle/typeck/collect.rs +++ b/src/librustc/middle/typeck/collect.rs @@ -41,8 +41,9 @@ use middle::typeck::infer; use middle::typeck::rscope::*; use middle::typeck::rscope; use middle::typeck::{CrateCtxt, lookup_def_tcx, no_params, write_ty_to_tcx}; -use util::common::{indenter, pluralize}; +use util::common::pluralize; use util::ppaux; +use util::ppaux::UserString; use syntax::abi::AbiSet; use syntax::ast::{RegionTyParamBound, TraitTyParamBound}; @@ -341,10 +342,13 @@ pub fn ensure_trait_methods(ccx: &CrateCtxt, // add in the "self" type parameter let self_trait_def = get_trait_def(ccx, local_def(trait_id)); - let self_trait_ref = @self_trait_def.trait_ref.subst(tcx, &substs); + let self_trait_ref = self_trait_def.trait_ref.subst(tcx, &substs); new_type_param_defs.push(ty::TypeParameterDef { def_id: dummy_defid, - bounds: @~[ty::bound_trait(self_trait_ref)] + bounds: @ty::ParamBounds { + builtin_bounds: ty::EmptyBuiltinBounds(), + trait_bounds: ~[self_trait_ref] + } }); // add in the type parameters from the method @@ -444,7 +448,7 @@ pub fn compare_impl_method(tcx: ty::ctxt, trait_substs: &ty::substs, self_ty: ty::t) { debug!("compare_impl_method()"); - let _indenter = indenter(); + let infcx = infer::new_infer_ctxt(tcx); let impl_m = &cm.mty; @@ -507,28 +511,50 @@ pub fn compare_impl_method(tcx: ty::ctxt, return; } - // FIXME(#2687)---we should be checking that the bounds of the - // trait imply the bounds of the subtype, but it appears - // we are...not checking this. for trait_m.generics.type_param_defs.eachi |i, trait_param_def| { // For each of the corresponding impl ty param's bounds... let impl_param_def = &impl_m.generics.type_param_defs[i]; - // Make sure the bounds lists have the same length - // Would be nice to use the ty param names in the error message, - // but we don't have easy access to them here - if impl_param_def.bounds.len() != trait_param_def.bounds.len() { + + // Check that the impl does not require any builtin-bounds + // that the trait does not guarantee: + let extra_bounds = + impl_param_def.bounds.builtin_bounds - + trait_param_def.bounds.builtin_bounds; + if !extra_bounds.is_empty() { tcx.sess.span_err( cm.span, fmt!("in method `%s`, \ - type parameter %u has %u %s, but the same type \ - parameter in its trait declaration has %u %s", + type parameter %u requires `%s`, \ + which is not required by \ + the corresponding type parameter \ + in the trait declaration", *tcx.sess.str_of(trait_m.ident), - i, impl_param_def.bounds.len(), - pluralize(impl_param_def.bounds.len(), ~"bound"), - trait_param_def.bounds.len(), - pluralize(trait_param_def.bounds.len(), ~"bound"))); + i, + extra_bounds.user_string(tcx))); return; } + + // FIXME(#2687)---we should be checking that the bounds of the + // trait imply the bounds of the subtype, but it appears we + // are...not checking this. + if impl_param_def.bounds.trait_bounds.len() != + trait_param_def.bounds.trait_bounds.len() + { + tcx.sess.span_err( + cm.span, + fmt!("in method `%s`, \ + type parameter %u has %u trait %s, but the \ + corresponding type parameter in \ + the trait declaration has %u trait %s", + *tcx.sess.str_of(trait_m.ident), + i, impl_param_def.bounds.trait_bounds.len(), + pluralize(impl_param_def.bounds.trait_bounds.len(), + ~"bound"), + trait_param_def.bounds.trait_bounds.len(), + pluralize(trait_param_def.bounds.trait_bounds.len(), + ~"bound"))); + return; + } } // Replace any references to the self region in the self type with @@ -619,7 +645,6 @@ pub fn compare_impl_method(tcx: ty::ctxt, }; debug!("trait_fty (post-subst): %s", trait_fty.repr(tcx)); - let infcx = infer::new_infer_ctxt(tcx); match infer::mk_subty(infcx, false, cm.span, impl_fty, trait_fty) { result::Ok(()) => {} result::Err(ref terr) => { @@ -1152,8 +1177,8 @@ pub fn ty_generics(ccx: &CrateCtxt, None => { let param_ty = ty::param_ty {idx: base_index + offset, def_id: local_def(param.id)}; - let bounds = compute_bounds(ccx, rp, generics, - param_ty, param.bounds); + let bounds = @compute_bounds(ccx, rp, generics, + param_ty, param.bounds); let def = ty::TypeParameterDef { def_id: local_def(param.id), bounds: bounds @@ -1171,7 +1196,7 @@ pub fn ty_generics(ccx: &CrateCtxt, rp: Option, generics: &ast::Generics, param_ty: ty::param_ty, - ast_bounds: @OptVec) -> ty::param_bounds + ast_bounds: @OptVec) -> ty::ParamBounds { /*! * @@ -1182,29 +1207,35 @@ pub fn ty_generics(ccx: &CrateCtxt, * as kinds): Const, Copy, and Send. */ - @ast_bounds.flat_map_to_vec(|b| { + let mut param_bounds = ty::ParamBounds { + builtin_bounds: ty::EmptyBuiltinBounds(), + trait_bounds: ~[] + }; + for ast_bounds.each |b| { match b { &TraitTyParamBound(b) => { let li = &ccx.tcx.lang_items; let ty = ty::mk_param(ccx.tcx, param_ty.idx, param_ty.def_id); let trait_ref = instantiate_trait_ref(ccx, b, rp, generics, ty); if trait_ref.def_id == li.owned_trait() { - ~[ty::bound_owned] + param_bounds.builtin_bounds.add(ty::BoundOwned); } else if trait_ref.def_id == li.copy_trait() { - ~[ty::bound_copy] + param_bounds.builtin_bounds.add(ty::BoundCopy); } else if trait_ref.def_id == li.const_trait() { - ~[ty::bound_const] + param_bounds.builtin_bounds.add(ty::BoundConst); } else { // Must be a user-defined trait - ~[ty::bound_trait(trait_ref)] + param_bounds.trait_bounds.push(trait_ref); } } &RegionTyParamBound => { - ~[ty::bound_durable] + param_bounds.builtin_bounds.add(ty::BoundStatic); } } - }) + } + + param_bounds } } diff --git a/src/librustc/rustc.rc b/src/librustc/rustc.rc index f69a38c96dce4..6027a04454180 100644 --- a/src/librustc/rustc.rc +++ b/src/librustc/rustc.rc @@ -131,6 +131,7 @@ pub mod driver; pub mod util { pub mod common; pub mod ppaux; + pub mod enum_set; } pub mod lib { diff --git a/src/librustc/util/enum_set.rs b/src/librustc/util/enum_set.rs new file mode 100644 index 0000000000000..5d4259741903c --- /dev/null +++ b/src/librustc/util/enum_set.rs @@ -0,0 +1,88 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +use core; + +#[deriving(Eq, IterBytes)] +pub struct EnumSet { + bits: uint +} + +pub trait CLike { + pub fn to_uint(&self) -> uint; + pub fn from_uint(uint) -> Self; +} + +fn bit(e: E) -> uint { + 1 << e.to_uint() +} + +pub impl EnumSet { + fn empty() -> EnumSet { + EnumSet {bits: 0} + } + + fn is_empty(&self) -> bool { + self.bits == 0 + } + + fn intersects(&self, e: EnumSet) -> bool { + (self.bits & e.bits) != 0 + } + + fn contains(&self, e: EnumSet) -> bool { + (self.bits & e.bits) == e.bits + } + + fn add(&mut self, e: E) { + self.bits |= bit(e); + } + + fn plus(&self, e: E) -> EnumSet { + EnumSet {bits: self.bits | bit(e)} + } + + fn contains_elem(&self, e: E) -> bool { + (self.bits & bit(e)) != 0 + } + + fn each(&self, f: &fn(E) -> bool) { + let mut bits = self.bits; + let mut index = 0; + while bits != 0 { + if (bits & 1) != 0 { + let e = CLike::from_uint(index); + if !f(e) { + return; + } + } + index += 1; + bits >>= 1; + } + } +} + +impl core::Sub, EnumSet> for EnumSet { + fn sub(&self, e: &EnumSet) -> EnumSet { + EnumSet {bits: self.bits & !e.bits} + } +} + +impl core::BitOr, EnumSet> for EnumSet { + fn bitor(&self, e: &EnumSet) -> EnumSet { + EnumSet {bits: self.bits | e.bits} + } +} + +impl core::BitAnd, EnumSet> for EnumSet { + fn bitand(&self, e: &EnumSet) -> EnumSet { + EnumSet {bits: self.bits & e.bits} + } +} diff --git a/src/librustc/util/ppaux.rs b/src/librustc/util/ppaux.rs index 59a0a1ba3d611..804b23025f09e 100644 --- a/src/librustc/util/ppaux.rs +++ b/src/librustc/util/ppaux.rs @@ -12,7 +12,7 @@ use metadata::encoder; use middle::ty::{ReSkolemized, ReVar}; use middle::ty::{bound_region, br_anon, br_named, br_self, br_cap_avoid}; use middle::ty::{br_fresh, ctxt, field, method}; -use middle::ty::{mt, t, param_bound, param_ty}; +use middle::ty::{mt, t, param_ty}; use middle::ty::{re_bound, re_free, re_scope, re_infer, re_static, Region, re_empty}; use middle::ty::{ty_bool, ty_bot, ty_box, ty_struct, ty_enum}; @@ -29,10 +29,16 @@ use syntax::codemap::span; use syntax::print::pprust; use syntax::{ast, ast_util}; +/// Produces a string suitable for debugging output. pub trait Repr { fn repr(&self, tcx: ctxt) -> ~str; } +/// Produces a string suitable for showing to the user. +pub trait UserString { + fn user_string(&self, tcx: ctxt) -> ~str; +} + pub fn note_and_explain_region(cx: ctxt, prefix: &str, region: ty::Region, @@ -273,10 +279,6 @@ pub fn tys_to_str(cx: ctxt, ts: &[t]) -> ~str { fmt!("(%s)", str::connect(tstrs, ", ")) } -pub fn bound_to_str(cx: ctxt, b: param_bound) -> ~str { - ty::param_bound_to_str(cx, &b) -} - pub fn fn_sig_to_str(cx: ctxt, typ: &ty::FnSig) -> ~str { fmt!("fn%s -> %s", tys_to_str(cx, typ.inputs.map(|a| a.ty)), @@ -284,15 +286,7 @@ pub fn fn_sig_to_str(cx: ctxt, typ: &ty::FnSig) -> ~str { } pub fn trait_ref_to_str(cx: ctxt, trait_ref: &ty::TraitRef) -> ~str { - let path = ty::item_path(cx, trait_ref.def_id); - let base = ast_map::path_to_str(path, cx.sess.intr()); - if cx.sess.verbose() && trait_ref.substs.self_ty.is_some() { - let mut all_tps = copy trait_ref.substs.tps; - for trait_ref.substs.self_ty.each |&t| { all_tps.push(t); } - parameterized(cx, base, trait_ref.substs.self_r, all_tps) - } else { - parameterized(cx, base, trait_ref.substs.self_r, trait_ref.substs.tps) - } + trait_ref.user_string(cx) } pub fn ty_to_str(cx: ctxt, typ: t) -> ~str { @@ -555,15 +549,21 @@ impl Repr for ty::substs { } } -impl Repr for ty::param_bound { +impl Repr for ty::ParamBounds { fn repr(&self, tcx: ctxt) -> ~str { - match *self { - ty::bound_copy => ~"copy", - ty::bound_durable => ~"'static", - ty::bound_owned => ~"owned", - ty::bound_const => ~"const", - ty::bound_trait(ref t) => t.repr(tcx) + let mut res = ~[]; + for self.builtin_bounds.each |b| { + res.push(match b { + ty::BoundCopy => ~"Copy", + ty::BoundStatic => ~"'static", + ty::BoundOwned => ~"Owned", + ty::BoundConst => ~"Const", + }); + } + for self.trait_bounds.each |t| { + res.push(t.repr(tcx)); } + str::connect(res, "+") } } @@ -755,3 +755,53 @@ impl Repr for ast_map::path_elt { } } } + +impl Repr for ty::BuiltinBound { + fn repr(&self, _tcx: ctxt) -> ~str { + fmt!("%?", *self) + } +} + +impl UserString for ty::BuiltinBound { + fn user_string(&self, _tcx: ctxt) -> ~str { + match *self { + ty::BoundCopy => ~"Copy", + ty::BoundStatic => ~"'static", + ty::BoundOwned => ~"Owned", + ty::BoundConst => ~"Const" + } + } +} + +impl Repr for ty::BuiltinBounds { + fn repr(&self, tcx: ctxt) -> ~str { + self.user_string(tcx) + } +} + +impl UserString for ty::BuiltinBounds { + fn user_string(&self, tcx: ctxt) -> ~str { + if self.is_empty() { ~"" } else { + let mut result = ~[]; + for self.each |bb| { + result.push(bb.user_string(tcx)); + } + str::connect(result, "+") + } + } +} + +impl UserString for ty::TraitRef { + fn user_string(&self, tcx: ctxt) -> ~str { + let path = ty::item_path(tcx, self.def_id); + let base = ast_map::path_to_str(path, tcx.sess.intr()); + if tcx.sess.verbose() && self.substs.self_ty.is_some() { + let mut all_tps = copy self.substs.tps; + for self.substs.self_ty.each |&t| { all_tps.push(t); } + parameterized(tcx, base, self.substs.self_r, all_tps) + } else { + parameterized(tcx, base, self.substs.self_r, + self.substs.tps) + } + } +} diff --git a/src/test/compile-fail/issue-2611-4.rs b/src/test/compile-fail/issue-2611-4.rs index cf644fc198caf..2385be5723e2a 100644 --- a/src/test/compile-fail/issue-2611-4.rs +++ b/src/test/compile-fail/issue-2611-4.rs @@ -20,7 +20,7 @@ struct E { } impl A for E { - fn b(_x: F) -> F { fail!() } //~ ERROR in method `b`, type parameter 0 has 2 bounds, but + fn b(_x: F) -> F { fail!() } //~ ERROR type parameter 0 requires `Const` } fn main() {} diff --git a/src/test/compile-fail/issue-2611-3.rs b/src/test/run-pass/issue-2611-3.rs similarity index 68% rename from src/test/compile-fail/issue-2611-3.rs rename to src/test/run-pass/issue-2611-3.rs index 248bea2d9b55c..acc6ffd0dd1b3 100644 --- a/src/test/compile-fail/issue-2611-3.rs +++ b/src/test/run-pass/issue-2611-3.rs @@ -8,11 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// Tests that impl methods are matched to traits exactly: -// we might be tempted to think matching is contravariant, but if -// we let an impl method can have more permissive bounds than the trait -// method it's implementing, the return type might be less specific than -// needed. Just punt and make it invariant. +// Tests that impls are allowed to have looser, more permissive bounds +// than the traits require. trait A { fn b(x: C) -> C; From 2bc12635a24abf710304c06a91dbf3709cba8fd4 Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Wed, 8 May 2013 22:44:43 -0400 Subject: [PATCH 326/410] remove vecs_implicitly_copyable from libstd/libcore --- src/libcore/core.rc | 1 - src/libstd/arc.rs | 2 +- src/libstd/future.rs | 4 +- src/libstd/getopts.rs | 71 +++++++++++++++++++----------------- src/libstd/net_ip.rs | 4 +- src/libstd/net_tcp.rs | 61 +++++++++++++++---------------- src/libstd/num/bigint.rs | 1 - src/libstd/priority_queue.rs | 4 +- src/libstd/rope.rs | 22 +++++------ src/libstd/sha1.rs | 6 +-- src/libstd/std.rc | 1 - src/libstd/test.rs | 24 ++++++------ src/libstd/timer.rs | 6 +-- src/libstd/workcache.rs | 4 +- 14 files changed, 105 insertions(+), 106 deletions(-) diff --git a/src/libcore/core.rc b/src/libcore/core.rc index 15b0be7b4bce5..6748a4e8846ef 100644 --- a/src/libcore/core.rc +++ b/src/libcore/core.rc @@ -60,7 +60,6 @@ they contained the following prologue: // Don't link to core. We are core. #[no_core]; -#[warn(vecs_implicitly_copyable)]; #[deny(non_camel_case_types)]; #[allow(deprecated_mutable_fields)]; diff --git a/src/libstd/arc.rs b/src/libstd/arc.rs index d69839faa64bc..09cab5e06b9d6 100644 --- a/src/libstd/arc.rs +++ b/src/libstd/arc.rs @@ -499,7 +499,7 @@ mod tests { let arc_v = p.recv(); - let v = *arc::get::<~[int]>(&arc_v); + let v = copy *arc::get::<~[int]>(&arc_v); assert!(v[3] == 4); }; diff --git a/src/libstd/future.rs b/src/libstd/future.rs index 37eb1e02a8014..b1b2fa2cd28e1 100644 --- a/src/libstd/future.rs +++ b/src/libstd/future.rs @@ -238,8 +238,8 @@ mod test { #[test] fn test_sendable_future() { - let expected = ~"schlorf"; - let f = Cell(do spawn { copy expected }); + let expected = "schlorf"; + let f = Cell(do spawn { expected }); do task::spawn { let mut f = f.take(); let actual = f.get(); diff --git a/src/libstd/getopts.rs b/src/libstd/getopts.rs index c03042fe9c2bf..3ddc80dfb9221 100644 --- a/src/libstd/getopts.rs +++ b/src/libstd/getopts.rs @@ -229,13 +229,13 @@ pub fn getopts(args: &[~str], opts: &[Opt]) -> Result { let l = args.len(); let mut i = 0; while i < l { - let cur = args[i]; + let cur = copy args[i]; let curlen = cur.len(); if !is_arg(cur) { free.push(cur); } else if cur == ~"--" { let mut j = i + 1; - while j < l { free.push(args[j]); j += 1; } + while j < l { free.push(copy args[j]); j += 1; } break; } else { let mut names; @@ -248,8 +248,8 @@ pub fn getopts(args: &[~str], opts: &[Opt]) -> Result { names = ~[Long(tail)]; } else { names = - ~[Long(tail_eq[0])]; - i_arg = Some(tail_eq[1]); + ~[Long(copy tail_eq[0])]; + i_arg = Some(copy tail_eq[1]); } } else { let mut j = 1; @@ -266,7 +266,7 @@ pub fn getopts(args: &[~str], opts: &[Opt]) -> Result { interpreted correctly */ - match find_opt(opts, opt) { + match find_opt(opts, copy opt) { Some(id) => last_valid_opt_id = Some(id), None => { let arg_follows = @@ -292,7 +292,7 @@ pub fn getopts(args: &[~str], opts: &[Opt]) -> Result { let mut name_pos = 0; for names.each() |nm| { name_pos += 1; - let optid = match find_opt(opts, *nm) { + let optid = match find_opt(opts, copy *nm) { Some(id) => id, None => return Err(UnrecognizedOption(name_str(nm))) }; @@ -305,18 +305,18 @@ pub fn getopts(args: &[~str], opts: &[Opt]) -> Result { } Maybe => { if !i_arg.is_none() { - vals[optid].push(Val(i_arg.get())); + vals[optid].push(Val((copy i_arg).get())); } else if name_pos < names.len() || i + 1 == l || is_arg(args[i + 1]) { vals[optid].push(Given); - } else { i += 1; vals[optid].push(Val(args[i])); } + } else { i += 1; vals[optid].push(Val(copy args[i])); } } Yes => { if !i_arg.is_none() { - vals[optid].push(Val(i_arg.get())); + vals[optid].push(Val((copy i_arg).get())); } else if i + 1 == l { return Err(ArgumentMissing(name_str(nm))); - } else { i += 1; vals[optid].push(Val(args[i])); } + } else { i += 1; vals[optid].push(Val(copy args[i])); } } } } @@ -346,7 +346,7 @@ pub fn getopts(args: &[~str], opts: &[Opt]) -> Result { fn opt_vals(mm: &Matches, nm: &str) -> ~[Optval] { return match find_opt(mm.opts, mkname(nm)) { - Some(id) => mm.vals[id], + Some(id) => copy mm.vals[id], None => { error!("No option '%s' defined", nm); fail!() @@ -354,7 +354,7 @@ fn opt_vals(mm: &Matches, nm: &str) -> ~[Optval] { }; } -fn opt_val(mm: &Matches, nm: &str) -> Optval { return opt_vals(mm, nm)[0]; } +fn opt_val(mm: &Matches, nm: &str) -> Optval { copy opt_vals(mm, nm)[0] } /// Returns true if an option was matched pub fn opt_present(mm: &Matches, nm: &str) -> bool { @@ -547,25 +547,29 @@ pub mod groups { // translate OptGroup into Opt // (both short and long names correspond to different Opts) pub fn long_to_short(lopt: &OptGroup) -> ~[Opt] { - match ((*lopt).short_name.len(), - (*lopt).long_name.len()) { + let OptGroup{short_name: short_name, + long_name: long_name, + hasarg: hasarg, + occur: occur, + _} = copy *lopt; + match (short_name.len(), long_name.len()) { (0,0) => fail!(~"this long-format option was given no name"), - (0,_) => ~[Opt {name: Long(((*lopt).long_name)), - hasarg: (*lopt).hasarg, - occur: (*lopt).occur}], + (0,_) => ~[Opt {name: Long((long_name)), + hasarg: hasarg, + occur: occur}], - (1,0) => ~[Opt {name: Short(str::char_at((*lopt).short_name, 0)), - hasarg: (*lopt).hasarg, - occur: (*lopt).occur}], + (1,0) => ~[Opt {name: Short(str::char_at(short_name, 0)), + hasarg: hasarg, + occur: occur}], - (1,_) => ~[Opt {name: Short(str::char_at((*lopt).short_name, 0)), - hasarg: (*lopt).hasarg, - occur: (*lopt).occur}, - Opt {name: Long(((*lopt).long_name)), - hasarg: (*lopt).hasarg, - occur: (*lopt).occur}], + (1,_) => ~[Opt {name: Short(str::char_at(short_name, 0)), + hasarg: hasarg, + occur: occur}, + Opt {name: Long((long_name)), + hasarg: hasarg, + occur: occur}], (_,_) => fail!(~"something is wrong with the long-form opt") } @@ -586,11 +590,12 @@ pub mod groups { let desc_sep = ~"\n" + str::repeat(~" ", 24); let rows = vec::map(opts, |optref| { - let short_name = (*optref).short_name; - let long_name = (*optref).long_name; - let hint = (*optref).hint; - let desc = (*optref).desc; - let hasarg = (*optref).hasarg; + let OptGroup{short_name: short_name, + long_name: long_name, + hint: hint, + desc: desc, + hasarg: hasarg, + _} = copy *optref; let mut row = str::repeat(~" ", 4); @@ -620,7 +625,7 @@ pub mod groups { row += if rowlen < 24 { str::repeat(~" ", 24 - rowlen) } else { - desc_sep + copy desc_sep }; // Normalize desc to contain words seperated by one space character @@ -892,7 +897,7 @@ mod tests { let rs = getopts(args, opts); match rs { Err(copy f) => { - error!(fail_str(f)); + error!(fail_str(copy f)); check_fail_type(f, UnexpectedArgument_); } _ => fail!() diff --git a/src/libstd/net_ip.rs b/src/libstd/net_ip.rs index 800144c0ca7be..0386896829205 100644 --- a/src/libstd/net_ip.rs +++ b/src/libstd/net_ip.rs @@ -175,7 +175,7 @@ pub mod v4 { pub fn parse_addr(ip: &str) -> IpAddr { match try_parse_addr(ip) { result::Ok(addr) => addr, - result::Err(ref err_data) => fail!(err_data.err_msg) + result::Err(ref err_data) => fail!(copy err_data.err_msg) } } // the simple, old style numberic representation of @@ -272,7 +272,7 @@ pub mod v6 { pub fn parse_addr(ip: &str) -> IpAddr { match try_parse_addr(ip) { result::Ok(addr) => addr, - result::Err(copy err_data) => fail!(err_data.err_msg) + result::Err(copy err_data) => fail!(copy err_data.err_msg) } } pub fn try_parse_addr(ip: &str) -> result::Result { diff --git a/src/libstd/net_tcp.rs b/src/libstd/net_tcp.rs index bc4168ba7f875..7e47106977fe3 100644 --- a/src/libstd/net_tcp.rs +++ b/src/libstd/net_tcp.rs @@ -277,8 +277,8 @@ pub fn connect(input_ip: ip::IpAddr, port: uint, as *libc::c_void); let tcp_conn_err = match err_data.err_name { ~"ECONNREFUSED" => ConnectionRefused, - _ => GenericConnectErr(err_data.err_name, - err_data.err_msg) + _ => GenericConnectErr(copy err_data.err_name, + copy err_data.err_msg) }; result::Err(tcp_conn_err) } @@ -769,8 +769,8 @@ fn listen_common(host_ip: ip::IpAddr, debug!("Got '%s' '%s' libuv error", err_data.err_name, err_data.err_msg); result::Err( - GenericListenErr(err_data.err_name, - err_data.err_msg)) + GenericListenErr(copy err_data.err_name, + copy err_data.err_msg)) } } } @@ -790,8 +790,8 @@ fn listen_common(host_ip: ip::IpAddr, match kill_result { // some failure post bind/listen Some(ref err_data) => result::Err(GenericListenErr( - err_data.err_name, - err_data.err_msg)), + copy err_data.err_name, + copy err_data.err_msg)), // clean exit None => result::Ok(()) } @@ -1275,7 +1275,7 @@ trait ToTcpErr { impl ToTcpErr for uv::ll::uv_err_data { fn to_tcp_err(&self) -> TcpErrData { - TcpErrData { err_name: self.err_name, err_msg: self.err_msg } + TcpErrData { err_name: copy self.err_name, err_msg: copy self.err_msg } } } @@ -1447,12 +1447,8 @@ mod test { use uv::iotask::IoTask; use uv; - use core::io; + use core::cell::Cell; use core::comm::{stream, SharedChan}; - use core::result; - use core::str; - use core::task; - use core::vec; // FIXME don't run on fbsd or linux 32 bit (#2064) #[cfg(target_os="win32")] @@ -1467,7 +1463,6 @@ mod test { #[test] fn test_gl_tcp_server_and_client_ipv4() { unsafe { - use net::tcp::test::tcp_ipv4_server_and_client_test::*; impl_gl_tcp_ipv4_server_and_client(); } } @@ -1558,10 +1553,10 @@ mod test { } pub fn impl_gl_tcp_ipv4_server_and_client() { let hl_loop = &uv::global_loop::get(); - let server_ip = ~"127.0.0.1"; + let server_ip = "127.0.0.1"; let server_port = 8888u; let expected_req = ~"ping"; - let expected_resp = ~"pong"; + let expected_resp = "pong"; let (server_result_po, server_result_ch) = stream::<~str>(); @@ -1574,7 +1569,7 @@ mod test { let actual_req = run_tcp_test_server( server_ip, server_port, - expected_resp, + expected_resp.to_str(), cont_ch.clone(), &hl_loop_clone); server_result_ch.send(actual_req); @@ -1599,9 +1594,9 @@ mod test { } pub fn impl_gl_tcp_ipv4_get_peer_addr() { let hl_loop = &uv::global_loop::get(); - let server_ip = ~"127.0.0.1"; + let server_ip = "127.0.0.1"; let server_port = 8887u; - let expected_resp = ~"pong"; + let expected_resp = "pong"; let (cont_po, cont_ch) = stream::<()>(); let cont_ch = SharedChan::new(cont_ch); @@ -1612,7 +1607,7 @@ mod test { run_tcp_test_server( server_ip, server_port, - expected_resp, + expected_resp.to_str(), cont_ch.clone(), &hl_loop_clone); }; @@ -1641,7 +1636,7 @@ mod test { } pub fn impl_gl_tcp_ipv4_client_error_connection_refused() { let hl_loop = &uv::global_loop::get(); - let server_ip = ~"127.0.0.1"; + let server_ip = "127.0.0.1"; let server_port = 8889u; let expected_req = ~"ping"; // client @@ -1658,10 +1653,10 @@ mod test { } pub fn impl_gl_tcp_ipv4_server_address_in_use() { let hl_loop = &uv::global_loop::get(); - let server_ip = ~"127.0.0.1"; + let server_ip = "127.0.0.1"; let server_port = 8890u; let expected_req = ~"ping"; - let expected_resp = ~"pong"; + let expected_resp = "pong"; let (cont_po, cont_ch) = stream::<()>(); let cont_ch = SharedChan::new(cont_ch); @@ -1672,7 +1667,7 @@ mod test { run_tcp_test_server( server_ip, server_port, - expected_resp, + expected_resp.to_str(), cont_ch.clone(), &hl_loop_clone); } @@ -1701,7 +1696,7 @@ mod test { } pub fn impl_gl_tcp_ipv4_server_access_denied() { let hl_loop = &uv::global_loop::get(); - let server_ip = ~"127.0.0.1"; + let server_ip = "127.0.0.1"; let server_port = 80u; // this one should fail.. let listen_err = run_tcp_test_server_fail( @@ -1721,10 +1716,10 @@ mod test { pub fn impl_gl_tcp_ipv4_server_client_reader_writer() { let iotask = &uv::global_loop::get(); - let server_ip = ~"127.0.0.1"; + let server_ip = "127.0.0.1"; let server_port = 8891u; let expected_req = ~"ping"; - let expected_resp = ~"pong"; + let expected_resp = "pong"; let (server_result_po, server_result_ch) = stream::<~str>(); @@ -1737,7 +1732,7 @@ mod test { let actual_req = run_tcp_test_server( server_ip, server_port, - expected_resp, + expected_resp.to_str(), cont_ch.clone(), &iotask_clone); server_result_ch.send(actual_req); @@ -1753,7 +1748,7 @@ mod test { buf_write(sock_buf, expected_req); // so contrived! - let actual_resp = do str::as_bytes(&expected_resp) |resp_buf| { + let actual_resp = do str::as_bytes(&expected_resp.to_str()) |resp_buf| { buf_read(sock_buf, resp_buf.len()) }; @@ -1770,10 +1765,10 @@ mod test { use core::io::{Reader,ReaderUtil}; let hl_loop = &uv::global_loop::get(); - let server_ip = ~"127.0.0.1"; + let server_ip = "127.0.0.1"; let server_port = 10041u; let expected_req = ~"GET /"; - let expected_resp = ~"A string\nwith multiple lines\n"; + let expected_resp = "A string\nwith multiple lines\n"; let (cont_po, cont_ch) = stream::<()>(); let cont_ch = SharedChan::new(cont_ch); @@ -1784,7 +1779,7 @@ mod test { run_tcp_test_server( server_ip, server_port, - expected_resp, + expected_resp.to_str(), cont_ch.clone(), &hl_loop_clone); }; @@ -1827,6 +1822,7 @@ mod test { let (server_po, server_ch) = stream::<~str>(); let server_ch = SharedChan::new(server_ch); let server_ip_addr = ip::v4::parse_addr(server_ip); + let resp_cell = Cell(resp); let listen_result = listen(server_ip_addr, server_port, 128, iotask, // on_establish_cb -- called when listener is set up @@ -1838,6 +1834,7 @@ mod test { // risky to run this on the loop, but some users // will want the POWER |new_conn, kill_ch| { + let resp_cell2 = Cell(resp_cell.take()); debug!("SERVER: new connection!"); let (cont_po, cont_ch) = stream(); let server_ch = server_ch.clone(); @@ -1872,7 +1869,7 @@ mod test { server_ch.send( str::from_bytes(data)); debug!("SERVER: before write"); - tcp_write_single(&sock, str::to_bytes(resp)); + tcp_write_single(&sock, str::to_bytes(resp_cell2.take())); debug!("SERVER: after write.. die"); kill_ch.send(None); } diff --git a/src/libstd/num/bigint.rs b/src/libstd/num/bigint.rs index a5cf929ed93a2..5762d8639353f 100644 --- a/src/libstd/num/bigint.rs +++ b/src/libstd/num/bigint.rs @@ -16,7 +16,6 @@ A BigUint is represented as an array of BigDigits. A BigInt is a combination of BigUint and Sign. */ -#[deny(vecs_implicitly_copyable)]; #[deny(deprecated_mutable_fields)]; use core::cmp::{Eq, Ord, TotalEq, TotalOrd, Ordering, Less, Equal, Greater}; diff --git a/src/libstd/priority_queue.rs b/src/libstd/priority_queue.rs index 9bf7db07ac9dd..248650452defa 100644 --- a/src/libstd/priority_queue.rs +++ b/src/libstd/priority_queue.rs @@ -270,8 +270,8 @@ mod tests { } fn check_to_vec(data: ~[int]) { - let heap = from_vec(data); - assert!(merge_sort(heap.to_vec(), le) == merge_sort(data, le)); + let heap = from_vec(copy data); + assert!(merge_sort((copy heap).to_vec(), le) == merge_sort(data, le)); assert!(heap.to_sorted_vec() == merge_sort(data, le)); } diff --git a/src/libstd/rope.rs b/src/libstd/rope.rs index 93364f8a319ee..506eaa92fe400 100644 --- a/src/libstd/rope.rs +++ b/src/libstd/rope.rs @@ -822,7 +822,7 @@ pub mod node { None => break, Some(x) => { //FIXME (#2744): Replace with memcpy or something similar - let local_buf: ~[u8] = cast::transmute(*x.content); + let local_buf: ~[u8] = cast::transmute(copy *x.content); let mut i = x.byte_offset; while i < x.byte_len { buf[offset] = local_buf[i]; @@ -1299,12 +1299,12 @@ mod tests { let buf = @ mut ~"1234567890"; let mut i = 0; while i < 10 { - let a = *buf; - let b = *buf; + let a = copy *buf; + let b = copy *buf; *buf = a + b; i+=1; } - let sample = @*buf; + let sample = @copy *buf; let r = of_str(sample); assert!(char_len(r) == str::char_len(*sample)); assert!(rope_to_string(r) == *sample); @@ -1335,12 +1335,12 @@ mod tests { let buf = @ mut ~"1234567890"; let mut i = 0; while i < 10 { - let a = *buf; - let b = *buf; + let a = copy *buf; + let b = copy *buf; *buf = a + b; i+=1; } - let sample = @*buf; + let sample = @copy *buf; let r = of_str(sample); let mut len = 0u; @@ -1358,15 +1358,15 @@ mod tests { #[test] fn bal1() { let init = @~"1234567890"; - let buf = @mut * init; + let buf = @mut copy *init; let mut i = 0; while i < 8 { - let a = *buf; - let b = *buf; + let a = copy *buf; + let b = copy *buf; *buf = a + b; i+=1; } - let sample = @*buf; + let sample = @copy *buf; let r1 = of_str(sample); let mut r2 = of_str(init); i = 0; diff --git a/src/libstd/sha1.rs b/src/libstd/sha1.rs index a8e0f7d062a58..024c34df7cfdd 100644 --- a/src/libstd/sha1.rs +++ b/src/libstd/sha1.rs @@ -177,7 +177,7 @@ pub fn sha1() -> @Sha1 { let b = (hpart >> 16u32 & 0xFFu32) as u8; let c = (hpart >> 8u32 & 0xFFu32) as u8; let d = (hpart & 0xFFu32) as u8; - rs = vec::append(rs, ~[a, b, c, d]); + rs = vec::append(copy rs, ~[a, b, c, d]); } return rs; } @@ -381,7 +381,7 @@ mod tests { for vec::each(tests) |t| { sh.input_str(t.input); let out = sh.result(); - check_vec_eq(t.output, out); + check_vec_eq(copy t.output, out); let out_str = sh.result_str(); assert!((out_str.len() == 40)); @@ -402,7 +402,7 @@ mod tests { left = left - take; } let out = sh.result(); - check_vec_eq(t.output, out); + check_vec_eq(copy t.output, out); let out_str = sh.result_str(); assert!((out_str.len() == 40)); diff --git a/src/libstd/std.rc b/src/libstd/std.rc index 931974d245485..7d013a20c67d7 100644 --- a/src/libstd/std.rc +++ b/src/libstd/std.rc @@ -26,7 +26,6 @@ not required in or otherwise suitable for the core library. #[license = "MIT/ASL2"]; #[crate_type = "lib"]; -#[allow(vecs_implicitly_copyable)]; #[deny(non_camel_case_types)]; // Allow mutable fields only in stage0. diff --git a/src/libstd/test.rs b/src/libstd/test.rs index 7d24262aea600..2c06fe08697c7 100644 --- a/src/libstd/test.rs +++ b/src/libstd/test.rs @@ -42,9 +42,9 @@ pub enum TestName { } impl ToStr for TestName { fn to_str(&self) -> ~str { - match self { - &StaticTestName(s) => s.to_str(), - &DynTestName(s) => s.to_str() + match copy *self { + StaticTestName(s) => s.to_str(), + DynTestName(s) => s.to_str() } } } @@ -145,7 +145,7 @@ pub fn parse_opts(args: &[~str]) -> OptRes { let filter = if vec::len(matches.free) > 0 { - option::Some(matches.free[0]) + option::Some(copy (matches).free[0]) } else { option::None }; let run_ignored = getopts::opt_present(&matches, ~"ignored"); @@ -203,7 +203,7 @@ pub fn run_tests_console(opts: &TestOpts, fn callback(event: &TestEvent, st: &mut ConsoleTestState) { debug!("callback(event=%?)", event); - match *event { + match copy *event { TeFiltered(ref filtered_tests) => { st.total = filtered_tests.len(); let noun = if st.total != 1 { ~"tests" } else { ~"test" }; @@ -213,7 +213,7 @@ pub fn run_tests_console(opts: &TestOpts, fmt!("test %s ... ", test.name.to_str())), TeResult(copy test, result) => { match st.log_out { - Some(f) => write_log(f, result, &test), + Some(f) => write_log(f, copy result, &test), None => () } match result { @@ -412,7 +412,7 @@ fn run_tests(opts: &TestOpts, callback: @fn(e: TestEvent)) { let mut filtered_tests = filter_tests(opts, tests); - let filtered_descs = filtered_tests.map(|t| t.desc); + let filtered_descs = filtered_tests.map(|t| copy t.desc); callback(TeFiltered(filtered_descs)); let (filtered_tests, filtered_benchs) = @@ -442,7 +442,7 @@ fn run_tests(opts: &TestOpts, // We are doing one test at a time so we can print the name // of the test before we run it. Useful for debugging tests // that hang forever. - callback(TeWait(test.desc)); + callback(TeWait(copy test.desc)); } run_test(!opts.run_tests, test, ch.clone()); pending += 1; @@ -450,7 +450,7 @@ fn run_tests(opts: &TestOpts, let (desc, result) = p.recv(); if concurrency != 1 { - callback(TeWait(desc)); + callback(TeWait(copy desc)); } callback(TeResult(desc, result)); pending -= 1; @@ -565,7 +565,7 @@ pub fn run_test(force_ignore: bool, let task_result = result_future.unwrap().recv(); let test_result = calc_result(&desc, task_result == task::Success); - monitor_ch.send((desc, test_result)); + monitor_ch.send((copy desc, test_result)); } } @@ -850,7 +850,7 @@ mod tests { either::Left(copy o) => o, _ => fail!(~"Malformed arg in first_free_arg_should_be_a_filter") }; - assert!(~"filter" == opts.filter.get()); + assert!("filter" == (copy opts.filter).get()); } #[test] @@ -931,7 +931,7 @@ mod tests { for vec::each(names) |name| { let test = TestDescAndFn { desc: TestDesc { - name: DynTestName(*name), + name: DynTestName(copy *name), ignore: false, should_fail: false }, diff --git a/src/libstd/timer.rs b/src/libstd/timer.rs index 0d15bbb54d321..234982a12bca1 100644 --- a/src/libstd/timer.rs +++ b/src/libstd/timer.rs @@ -175,9 +175,9 @@ extern fn delayed_send_close_cb(handle: *uv::ll::uv_timer_t) { #[cfg(test)] mod test { - use timer::*; use uv; + use core::cell::Cell; use core::rand::RngUtil; use core::pipes::{stream, SharedChan}; @@ -277,11 +277,11 @@ mod test { for old_iter::repeat(times as uint) { let mut rng = rand::rng(); - let expected = rng.gen_str(16u); + let expected = Cell(rng.gen_str(16u)); let (test_po, test_ch) = stream::<~str>(); let hl_loop_clone = hl_loop.clone(); do task::spawn() { - delayed_send(&hl_loop_clone, 50u, &test_ch, expected); + delayed_send(&hl_loop_clone, 50u, &test_ch, expected.take()); }; match recv_timeout(&hl_loop, 1u, &test_po) { diff --git a/src/libstd/workcache.rs b/src/libstd/workcache.rs index e681382ffc828..dc9204f62f4fb 100644 --- a/src/libstd/workcache.rs +++ b/src/libstd/workcache.rs @@ -339,7 +339,7 @@ impl TPrep for Prep { &self.declared_inputs) && self.all_fresh("discovered input", disc_in) && self.all_fresh("discovered output", disc_out) => { - Work::new(@mut *self, Left(json_decode(*res))) + Work::new(@mut copy *self, Left(json_decode(*res))) } _ => { @@ -358,7 +358,7 @@ impl TPrep for Prep { let v = blk(&exe); send_one(chan, (exe, v)); } - Work::new(@mut *self, Right(port)) + Work::new(@mut copy *self, Right(port)) } } } From 07cd5a850c0a7990ae78f160e27dc5561580e18f Mon Sep 17 00:00:00 2001 From: Tim Chevalier Date: Thu, 9 May 2013 12:04:22 -0700 Subject: [PATCH 327/410] testsuite: Add two test cases (one xfailed) --- src/test/run-pass/issue-5315.rs | 17 +++++++++++++++++ src/test/run-pass/issue-5353.rs | 26 ++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 src/test/run-pass/issue-5315.rs create mode 100644 src/test/run-pass/issue-5353.rs diff --git a/src/test/run-pass/issue-5315.rs b/src/test/run-pass/issue-5315.rs new file mode 100644 index 0000000000000..326b3fb12460c --- /dev/null +++ b/src/test/run-pass/issue-5315.rs @@ -0,0 +1,17 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// xfail-test +struct A(bool); + +fn main() { + let f = A; + f(true); +} diff --git a/src/test/run-pass/issue-5353.rs b/src/test/run-pass/issue-5353.rs new file mode 100644 index 0000000000000..f933b616119fa --- /dev/null +++ b/src/test/run-pass/issue-5353.rs @@ -0,0 +1,26 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +static INVALID_ENUM : u32 = 0; +static INVALID_VALUE : u32 = 1; + +fn gl_err_str(err: u32) -> ~str +{ + match err + { + INVALID_ENUM => { ~"Invalid enum" }, + INVALID_VALUE => { ~"Invalid value" }, + _ => { ~"Unknown error" } + } +} + +fn main() {} + + From 15164cc6a6b6a382b5cbe527e435dfa9eb162fd4 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Thu, 9 May 2013 15:58:02 -0400 Subject: [PATCH 328/410] Issue the correct deref count for the implicit deref that occurs as part of an autoslice operation (#6272). Fixes #6272. --- .../middle/borrowck/gather_loans/mod.rs | 4 +- src/librustc/middle/borrowck/mod.rs | 10 +++++ src/librustc/middle/mem_categorization.rs | 41 ++++++++++++++++--- src/librustc/middle/trans/_match.rs | 3 +- src/librustc/middle/trans/datum.rs | 5 ++- src/librustc/middle/trans/expr.rs | 23 +++++++---- 6 files changed, 67 insertions(+), 19 deletions(-) diff --git a/src/librustc/middle/borrowck/gather_loans/mod.rs b/src/librustc/middle/borrowck/gather_loans/mod.rs index 5f3c5d977fef5..94a029911a87a 100644 --- a/src/librustc/middle/borrowck/gather_loans/mod.rs +++ b/src/librustc/middle/borrowck/gather_loans/mod.rs @@ -260,7 +260,7 @@ pub impl GatherLoanCtxt { r) } ty::AutoBorrowVec(r, m) | ty::AutoBorrowVecRef(r, m) => { - let cmt_index = mcx.cat_index(expr, cmt); + let cmt_index = mcx.cat_index(expr, cmt, autoderefs+1); self.guarantee_valid(expr.id, expr.span, cmt_index, @@ -574,7 +574,7 @@ pub impl GatherLoanCtxt { let (slice_mutbl, slice_r) = self.vec_slice_info(slice_pat, slice_ty); let mcx = self.bccx.mc_ctxt(); - let cmt_index = mcx.cat_index(slice_pat, cmt); + let cmt_index = mcx.cat_index(slice_pat, cmt, 0); self.guarantee_valid(pat.id, pat.span, cmt_index, slice_mutbl, slice_r); } diff --git a/src/librustc/middle/borrowck/mod.rs b/src/librustc/middle/borrowck/mod.rs index 68e70d245f779..76b5a28d1b9e1 100644 --- a/src/librustc/middle/borrowck/mod.rs +++ b/src/librustc/middle/borrowck/mod.rs @@ -184,6 +184,16 @@ pub type LoanMap = @mut HashMap; // // Note that there is no entry with derefs:3---the type of that expression // is T, which is not a box. +// +// Note that implicit dereferences also occur with indexing of `@[]`, +// `@str`, etc. The same rules apply. So, for example, given a +// variable `x` of type `@[@[...]]`, if I have an instance of the +// expression `x[0]` which is then auto-slice'd, there would be two +// potential entries in the root map, both with the id of the `x[0]` +// expression. The entry with `derefs==0` refers to the deref of `x` +// used as part of evaluating `x[0]`. The entry with `derefs==1` +// refers to the deref of the `x[0]` that occurs as part of the +// auto-slice. #[deriving(Eq, IterBytes)] pub struct root_map_key { id: ast::node_id, diff --git a/src/librustc/middle/mem_categorization.rs b/src/librustc/middle/mem_categorization.rs index 26992388b29d3..2ed3e1c1b6e9c 100644 --- a/src/librustc/middle/mem_categorization.rs +++ b/src/librustc/middle/mem_categorization.rs @@ -405,7 +405,7 @@ pub impl mem_categorization_ctxt { } let base_cmt = self.cat_expr(base); - self.cat_index(expr, base_cmt) + self.cat_index(expr, base_cmt, 0) } ast::expr_path(_) => { @@ -670,7 +670,39 @@ pub impl mem_categorization_ctxt { fn cat_index(&self, elt: N, - base_cmt: cmt) -> cmt { + base_cmt: cmt, + derefs: uint) -> cmt { + //! Creates a cmt for an indexing operation (`[]`); this + //! indexing operation may occurs as part of an + //! AutoBorrowVec, which when converting a `~[]` to an `&[]` + //! effectively takes the address of the 0th element. + //! + //! One subtle aspect of indexing that may not be + //! immediately obvious: for anything other than a fixed-length + //! vector, an operation like `x[y]` actually consists of two + //! disjoint (from the point of view of borrowck) operations. + //! The first is a deref of `x` to create a pointer `p` that points + //! at the first element in the array. The second operation is + //! an index which adds `y*sizeof(T)` to `p` to obtain the + //! pointer to `x[y]`. `cat_index` will produce a resulting + //! cmt containing both this deref and the indexing, + //! presuming that `base_cmt` is not of fixed-length type. + //! + //! In the event that a deref is needed, the "deref count" + //! is taken from the parameter `derefs`. See the comment + //! on the def'n of `root_map_key` in borrowck/mod.rs + //! for more details about deref counts; the summary is + //! that `derefs` should be 0 for an explicit indexing + //! operation and N+1 for an indexing that is part of + //! an auto-adjustment, where N is the number of autoderefs + //! in that adjustment. + //! + //! # Parameters + //! - `elt`: the AST node being indexed + //! - `base_cmt`: the cmt of `elt` + //! - `derefs`: the deref number to be used for + //! the implicit index deref, if any (see above) + let mt = match ty::index(base_cmt.ty) { Some(mt) => mt, None => { @@ -698,7 +730,7 @@ pub impl mem_categorization_ctxt { let deref_cmt = @cmt_ { id:elt.id(), span:elt.span(), - cat:cat_deref(base_cmt, 0u, ptr), + cat:cat_deref(base_cmt, derefs, ptr), mutbl:m, ty:mt.ty }; @@ -878,8 +910,8 @@ pub impl mem_categorization_ctxt { } ast::pat_vec(ref before, slice, ref after) => { + let elt_cmt = self.cat_index(pat, cmt, 0); for before.each |&before_pat| { - let elt_cmt = self.cat_index(pat, cmt); self.cat_pattern(elt_cmt, before_pat, op); } for slice.each |&slice_pat| { @@ -888,7 +920,6 @@ pub impl mem_categorization_ctxt { self.cat_pattern(slice_cmt, slice_pat, op); } for after.each |&after_pat| { - let elt_cmt = self.cat_index(pat, cmt); self.cat_pattern(elt_cmt, after_pat, op); } } diff --git a/src/librustc/middle/trans/_match.rs b/src/librustc/middle/trans/_match.rs index 1443a7ef30407..f94e646d3e25c 100644 --- a/src/librustc/middle/trans/_match.rs +++ b/src/librustc/middle/trans/_match.rs @@ -885,7 +885,8 @@ pub fn extract_vec_elems(bcx: block, -> ExtractedBlock { let _icx = bcx.insn_ctxt("match::extract_vec_elems"); let vec_datum = match_datum(bcx, val, pat_id); - let (bcx, base, len) = vec_datum.get_vec_base_and_len(bcx, pat_span, pat_id); + let (bcx, base, len) = vec_datum.get_vec_base_and_len(bcx, pat_span, + pat_id, 0); let vt = tvec::vec_types(bcx, node_id_type(bcx, pat_id)); let mut elems = do vec::from_fn(elem_count) |i| { diff --git a/src/librustc/middle/trans/datum.rs b/src/librustc/middle/trans/datum.rs index 3b885ae9b94ab..64b29fd8573d2 100644 --- a/src/librustc/middle/trans/datum.rs +++ b/src/librustc/middle/trans/datum.rs @@ -735,13 +735,14 @@ pub impl Datum { fn get_vec_base_and_len(&self, mut bcx: block, span: span, - expr_id: ast::node_id) + expr_id: ast::node_id, + derefs: uint) -> (block, ValueRef, ValueRef) { //! Converts a vector into the slice pair. Performs rooting //! and write guards checks. // only imp't for @[] and @str, but harmless - bcx = write_guard::root_and_write_guard(self, bcx, span, expr_id, 0); + bcx = write_guard::root_and_write_guard(self, bcx, span, expr_id, derefs); let (base, len) = self.get_vec_base_and_len_no_root(bcx); (bcx, base, len) } diff --git a/src/librustc/middle/trans/expr.rs b/src/librustc/middle/trans/expr.rs index 29227b7c95a32..698c30a6a42ff 100644 --- a/src/librustc/middle/trans/expr.rs +++ b/src/librustc/middle/trans/expr.rs @@ -144,10 +144,9 @@ use middle::trans::tvec; use middle::trans::type_of; use middle::ty::struct_fields; use middle::ty::{AutoDerefRef, AutoAddEnv}; -use middle::ty::{AutoPtr, AutoBorrowVec, AutoBorrowVecRef, AutoBorrowFn}; -use middle::ty; use middle::ty::{AutoPtr, AutoBorrowVec, AutoBorrowVecRef, AutoBorrowFn, AutoDerefRef, AutoAddEnv, AutoUnsafe}; +use middle::ty; use util::common::indenter; use util::ppaux::Repr; @@ -215,10 +214,12 @@ pub fn trans_to_datum(bcx: block, expr: @ast::expr) -> DatumBlock { unpack_datum!(bcx, auto_ref(bcx, datum)) } Some(AutoBorrowVec(*)) => { - unpack_datum!(bcx, auto_slice(bcx, expr, datum)) + unpack_datum!(bcx, auto_slice(bcx, adj.autoderefs, + expr, datum)) } Some(AutoBorrowVecRef(*)) => { - unpack_datum!(bcx, auto_slice_and_ref(bcx, expr, datum)) + unpack_datum!(bcx, auto_slice_and_ref(bcx, adj.autoderefs, + expr, datum)) } Some(AutoBorrowFn(*)) => { let adjusted_ty = ty::adjust_ty(bcx.tcx(), expr.span, @@ -246,7 +247,10 @@ pub fn trans_to_datum(bcx: block, expr: @ast::expr) -> DatumBlock { mode: datum.mode, source: datum.source}} } - fn auto_slice(bcx: block, expr: @ast::expr, datum: Datum) -> DatumBlock { + fn auto_slice(bcx: block, + autoderefs: uint, + expr: @ast::expr, + datum: Datum) -> DatumBlock { // This is not the most efficient thing possible; since slices // are two words it'd be better if this were compiled in // 'dest' mode, but I can't find a nice way to structure the @@ -256,9 +260,8 @@ pub fn trans_to_datum(bcx: block, expr: @ast::expr) -> DatumBlock { let tcx = bcx.tcx(); let unit_ty = ty::sequence_element_type(tcx, datum.ty); - // FIXME(#6272) need to distinguish "auto-slice" from explicit index? let (bcx, base, len) = - datum.get_vec_base_and_len(bcx, expr.span, expr.id); + datum.get_vec_base_and_len(bcx, expr.span, expr.id, autoderefs+1); // this type may have a different region/mutability than the // real one, but it will have the same runtime representation @@ -292,9 +295,10 @@ pub fn trans_to_datum(bcx: block, expr: @ast::expr) -> DatumBlock { } fn auto_slice_and_ref(bcx: block, + autoderefs: uint, expr: @ast::expr, datum: Datum) -> DatumBlock { - let DatumBlock { bcx, datum } = auto_slice(bcx, expr, datum); + let DatumBlock { bcx, datum } = auto_slice(bcx, autoderefs, expr, datum); auto_ref(bcx, datum) } } @@ -913,7 +917,8 @@ fn trans_lvalue_unadjusted(bcx: block, expr: @ast::expr) -> DatumBlock { base::maybe_name_value(bcx.ccx(), scaled_ix, ~"scaled_ix"); let mut (bcx, base, len) = - base_datum.get_vec_base_and_len(bcx, index_expr.span, index_expr.id); + base_datum.get_vec_base_and_len(bcx, index_expr.span, + index_expr.id, 0); if ty::type_is_str(base_ty) { // acccount for null terminator in the case of string From e18ed77b720b46cc8ae0e6754698c47f51bed9a0 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Thu, 9 May 2013 15:58:41 -0400 Subject: [PATCH 329/410] Remove remnants of mutable fields from mem_categorization, borrowck. --- src/librustc/middle/borrowck/mod.rs | 2 +- src/librustc/middle/mem_categorization.rs | 23 ++++++++--------------- 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/src/librustc/middle/borrowck/mod.rs b/src/librustc/middle/borrowck/mod.rs index 76b5a28d1b9e1..75acc2d951138 100644 --- a/src/librustc/middle/borrowck/mod.rs +++ b/src/librustc/middle/borrowck/mod.rs @@ -615,7 +615,7 @@ pub impl BorrowckCtxt { } } - LpExtend(lp_base, _, LpInterior(mc::interior_field(fld, _))) => { + LpExtend(lp_base, _, LpInterior(mc::interior_field(fld))) => { self.append_loan_path_to_str_from_interior(lp_base, out); str::push_char(out, '.'); str::push_str(out, *self.tcx.sess.intr().get(fld)); diff --git a/src/librustc/middle/mem_categorization.rs b/src/librustc/middle/mem_categorization.rs index 2ed3e1c1b6e9c..0e819c66f094d 100644 --- a/src/librustc/middle/mem_categorization.rs +++ b/src/librustc/middle/mem_categorization.rs @@ -66,7 +66,7 @@ pub enum categorization { cat_local(ast::node_id), // local variable cat_arg(ast::node_id), // formal argument cat_deref(cmt, uint, ptr_kind), // deref of a ptr - cat_interior(cmt, interior_kind), // something interior + cat_interior(cmt, interior_kind), // something interior cat_discr(cmt, ast::node_id), // match discriminant (see preserve()) cat_self(ast::node_id), // explicit `self` } @@ -94,8 +94,7 @@ pub enum interior_kind { interior_anon_field, // anonymous field (in e.g. // struct Foo(int, int); interior_variant(ast::def_id), // internals to a variant of given enum - interior_field(ast::ident, // name of field - ast::mutability), // declared mutability of field + interior_field(ast::ident), // name of field interior_index(ty::t, // type of vec/str/etc being deref'd ast::mutability) // mutability of vec content } @@ -395,8 +394,7 @@ pub impl mem_categorization_ctxt { assert!(!self.method_map.contains_key(&expr.id)); let base_cmt = self.cat_expr(base); - self.cat_field(expr, base_cmt, f_name, - self.expr_ty(expr), expr.id) + self.cat_field(expr, base_cmt, f_name, self.expr_ty(expr)) } ast::expr_index(base, _) => { @@ -579,16 +577,12 @@ pub impl mem_categorization_ctxt { node: N, base_cmt: cmt, f_name: ast::ident, - f_ty: ty::t, - field_id: ast::node_id) -> cmt { - let f_mutbl = m_imm; - let m = self.inherited_mutability(base_cmt.mutbl, f_mutbl); - let f_interior = interior_field(f_name, f_mutbl); + f_ty: ty::t) -> cmt { @cmt_ { id: node.id(), span: node.span(), - cat: cat_interior(base_cmt, f_interior), - mutbl: m, + cat: cat_interior(base_cmt, interior_field(f_name)), + mutbl: base_cmt.mutbl.inherit(), ty: f_ty } } @@ -886,8 +880,7 @@ pub impl mem_categorization_ctxt { // {f1: p1, ..., fN: pN} for field_pats.each |fp| { let field_ty = self.pat_ty(fp.pat); // see (*) - let cmt_field = self.cat_field(pat, cmt, fp.ident, - field_ty, pat.id); + let cmt_field = self.cat_field(pat, cmt, fp.ident, field_ty); self.cat_pattern(cmt_field, fp.pat, op); } } @@ -1141,7 +1134,7 @@ pub fn ptr_sigil(ptr: ptr_kind) -> ~str { impl Repr for interior_kind { fn repr(&self, tcx: ty::ctxt) -> ~str { match *self { - interior_field(fld, _) => copy *tcx.sess.str_of(fld), + interior_field(fld) => copy *tcx.sess.str_of(fld), interior_index(*) => ~"[]", interior_tuple => ~"()", interior_anon_field => ~"", From d3ca9c61a0685c5add1ce2115402dfc3e2f48912 Mon Sep 17 00:00:00 2001 From: Corey Richardson Date: Wed, 8 May 2013 21:47:34 -0400 Subject: [PATCH 330/410] Better error message for certain classes of unresolved imports --- src/librustc/middle/resolve.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs index ff002afd028f5..26dad202ab32c 100644 --- a/src/librustc/middle/resolve.rs +++ b/src/librustc/middle/resolve.rs @@ -64,7 +64,7 @@ use syntax::attr::{attr_metas, contains_name, attrs_contains_name}; use syntax::parse::token::ident_interner; use syntax::parse::token::special_idents; use syntax::print::pprust::path_to_str; -use syntax::codemap::{span, dummy_sp}; +use syntax::codemap::{span, dummy_sp, BytePos}; use syntax::visit::{default_visitor, mk_vt, Visitor, visit_block}; use syntax::visit::{visit_crate, visit_expr, visit_expr_opt}; use syntax::visit::{visit_foreign_item, visit_item}; @@ -2482,6 +2482,16 @@ pub impl Resolver { TypeNS, name_search_type) { Failed => { + let segment_name = self.session.str_of(name); + let module_name = self.module_to_str(search_module); + if module_name == ~"???" { + self.session.span_err(span {lo: span.lo, hi: span.lo + + BytePos(str::len(*segment_name)), expn_info: + span.expn_info}, fmt!("unresolved import. perhaps \ + you forgot an 'extern mod %s'?", + *segment_name)); + return Failed; + } self.session.span_err(span, ~"unresolved name"); return Failed; } From fa5baf399d1962fae5b02d9d4b11702eae2d8d70 Mon Sep 17 00:00:00 2001 From: Corey Richardson Date: Thu, 9 May 2013 13:42:26 -0300 Subject: [PATCH 331/410] Tweak error message Recommendation of @kud1ing --- src/librustc/middle/resolve.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs index 26dad202ab32c..e5eb926c02be1 100644 --- a/src/librustc/middle/resolve.rs +++ b/src/librustc/middle/resolve.rs @@ -2487,8 +2487,8 @@ pub impl Resolver { if module_name == ~"???" { self.session.span_err(span {lo: span.lo, hi: span.lo + BytePos(str::len(*segment_name)), expn_info: - span.expn_info}, fmt!("unresolved import. perhaps \ - you forgot an 'extern mod %s'?", + span.expn_info}, fmt!("unresolved import. maybe \ + a missing 'extern mod %s'?", *segment_name)); return Failed; } From 78520867b928ba33c557617895dd197c11361cbd Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Wed, 8 May 2013 15:10:26 -0400 Subject: [PATCH 332/410] rustc: Add EnumSet tests --- src/librustc/util/enum_set.rs | 153 +++++++++++++++++++++++++++++++++- 1 file changed, 149 insertions(+), 4 deletions(-) diff --git a/src/librustc/util/enum_set.rs b/src/librustc/util/enum_set.rs index 5d4259741903c..859e743b43bfa 100644 --- a/src/librustc/util/enum_set.rs +++ b/src/librustc/util/enum_set.rs @@ -45,10 +45,6 @@ pub impl EnumSet { self.bits |= bit(e); } - fn plus(&self, e: E) -> EnumSet { - EnumSet {bits: self.bits | bit(e)} - } - fn contains_elem(&self, e: E) -> bool { (self.bits & bit(e)) != 0 } @@ -86,3 +82,152 @@ impl core::BitAnd, EnumSet> for EnumSet { EnumSet {bits: self.bits & e.bits} } } + +#[cfg(test)] +mod test { + use core; + use core::iter; + use util::enum_set::*; + + #[deriving(Eq)] + enum Foo { + A, B, C + } + + impl CLike for Foo { + pub fn to_uint(&self) -> uint { + *self as uint + } + + pub fn from_uint(v: uint) -> Foo { + unsafe { cast::transmute(v) } + } + } + + #[test] + fn test_empty() { + let e: EnumSet = EnumSet::empty(); + assert!(e.is_empty()); + } + + /////////////////////////////////////////////////////////////////////////// + // intersect + + #[test] + fn test_two_empties_do_not_intersect() { + let e1: EnumSet = EnumSet::empty(); + let e2: EnumSet = EnumSet::empty(); + assert!(!e1.intersects(e2)); + } + + #[test] + fn test_empty_does_not_intersect_with_full() { + let e1: EnumSet = EnumSet::empty(); + + let mut e2: EnumSet = EnumSet::empty(); + e2.add(A); + e2.add(B); + e2.add(C); + + assert!(!e1.intersects(e2)); + } + + #[test] + fn test_disjoint_intersects() { + let mut e1: EnumSet = EnumSet::empty(); + e1.add(A); + + let mut e2: EnumSet = EnumSet::empty(); + e2.add(B); + + assert!(!e1.intersects(e2)); + } + + #[test] + fn test_overlapping_intersects() { + let mut e1: EnumSet = EnumSet::empty(); + e1.add(A); + + let mut e2: EnumSet = EnumSet::empty(); + e2.add(A); + e2.add(B); + + assert!(e1.intersects(e2)); + } + + /////////////////////////////////////////////////////////////////////////// + // contains and contains_elem + + #[test] + fn test_contains() { + let mut e1: EnumSet = EnumSet::empty(); + e1.add(A); + + let mut e2: EnumSet = EnumSet::empty(); + e2.add(A); + e2.add(B); + + assert!(!e1.contains(e2)); + assert!(e2.contains(e1)); + } + + #[test] + fn test_contains_elem() { + let mut e1: EnumSet = EnumSet::empty(); + e1.add(A); + assert!(e1.contains_elem(A)); + assert!(!e1.contains_elem(B)); + assert!(!e1.contains_elem(C)); + + e1.add(A); + e1.add(B); + assert!(e1.contains_elem(A)); + assert!(e1.contains_elem(B)); + assert!(!e1.contains_elem(C)); + } + + /////////////////////////////////////////////////////////////////////////// + // each + + #[test] + fn test_each() { + let mut e1: EnumSet = EnumSet::empty(); + + assert_eq!(~[], iter::to_vec(|f| e1.each(f))) + + e1.add(A); + assert_eq!(~[A], iter::to_vec(|f| e1.each(f))) + + e1.add(C); + assert_eq!(~[A,C], iter::to_vec(|f| e1.each(f))) + + e1.add(C); + assert_eq!(~[A,C], iter::to_vec(|f| e1.each(f))) + + e1.add(B); + assert_eq!(~[A,B,C], iter::to_vec(|f| e1.each(f))) + } + + /////////////////////////////////////////////////////////////////////////// + // operators + + #[test] + fn test_operators() { + let mut e1: EnumSet = EnumSet::empty(); + e1.add(A); + e1.add(C); + + let mut e2: EnumSet = EnumSet::empty(); + e2.add(B); + e2.add(C); + + let e_union = e1 | e2; + assert_eq!(~[A,B,C], iter::to_vec(|f| e_union.each(f))) + + let e_intersection = e1 & e2; + assert_eq!(~[C], iter::to_vec(|f| e_intersection.each(f))) + + let e_subtract = e1 - e2; + assert_eq!(~[A], iter::to_vec(|f| e_subtract.each(f))) + } +} From 9482ed729eaf9ade87a3aec057a56c4a48f49653 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Thu, 9 May 2013 17:20:31 -0400 Subject: [PATCH 333/410] test: Add two tests for issue #6272. --- ...-autoborrowvec-combined-fail-issue-6272.rs | 21 ++++++++++ ...f-and-autoborrowvec-combined-issue-6272.rs | 41 +++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 src/test/run-fail/borrowck-wg-autoderef-and-autoborrowvec-combined-fail-issue-6272.rs create mode 100644 src/test/run-pass/borrowck-wg-autoderef-and-autoborrowvec-combined-issue-6272.rs diff --git a/src/test/run-fail/borrowck-wg-autoderef-and-autoborrowvec-combined-fail-issue-6272.rs b/src/test/run-fail/borrowck-wg-autoderef-and-autoborrowvec-combined-fail-issue-6272.rs new file mode 100644 index 0000000000000..2d3e7dd616d33 --- /dev/null +++ b/src/test/run-fail/borrowck-wg-autoderef-and-autoborrowvec-combined-fail-issue-6272.rs @@ -0,0 +1,21 @@ +// error-pattern:borrowed + +// Issue #6272. Tests that freezing correctly accounts for all the +// implicit derefs that can occur and freezes the innermost box. See +// the companion test +// +// run-pass/borrowck-wg-autoderef-and-autoborrowvec-combined-issue-6272.rs +// +// for a detailed explanation of what is going on here. + +fn main() { + let a = @mut [3i]; + let b = @mut [a]; + let c = @mut b; + + // this should freeze `a` only + let x: &mut [int] = c[0]; + + // hence this should fail + a[0] = a[0]; +} diff --git a/src/test/run-pass/borrowck-wg-autoderef-and-autoborrowvec-combined-issue-6272.rs b/src/test/run-pass/borrowck-wg-autoderef-and-autoborrowvec-combined-issue-6272.rs new file mode 100644 index 0000000000000..056397f55ff26 --- /dev/null +++ b/src/test/run-pass/borrowck-wg-autoderef-and-autoborrowvec-combined-issue-6272.rs @@ -0,0 +1,41 @@ +// Issue #6272. Tests that freezing correctly accounts for all the +// implicit derefs that can occur. +// +// In this particular case, the expression: +// +// let x: &mut [int] = c[0]; +// +// is seen by borrowck as this sequence of derefs +// and pointer offsets: +// +// &*((**c)[0]) +// +// or, written using `x.*` for `*x` (so that everything +// is a postfix operation): +// +// &c.*.*.[0].* +// ^ ^ +// | | +// b a +// +// Here I also indicated where the evaluation yields the boxes `a` and +// `b`. It is important then that we only freeze the innermost box +// (`a`), and not the other ones (`b`, `c`). +// +// Also see the companion test: +// +// run-fail/borrowck-wg-autoderef-and-autoborrowvec-combined-fail-issue-6272.rs + + +fn main() { + let a = @mut [3i]; + let b = @mut [a]; + let c = @mut b; + + // this should freeze `a` only + let _x: &mut [int] = c[0]; + + // hence these writes should not fail: + b[0] = b[0]; + c[0] = c[0]; +} From 646f16d7e4f451b0a6ee95fd61c1ae12a567bbe0 Mon Sep 17 00:00:00 2001 From: Tim Chevalier Date: Thu, 9 May 2013 11:44:52 -0700 Subject: [PATCH 334/410] core: Make intrinsics::init unsafe as per #3920 --- src/libcore/unstable/intrinsics.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/libcore/unstable/intrinsics.rs b/src/libcore/unstable/intrinsics.rs index cfd305f4b70c1..3ab7c3368d888 100644 --- a/src/libcore/unstable/intrinsics.rs +++ b/src/libcore/unstable/intrinsics.rs @@ -42,7 +42,10 @@ pub extern "rust-intrinsic" { pub fn get_tydesc() -> *(); - pub fn init() -> T; + /// init is unsafe because it returns a zeroed-out datum, + /// which is unsafe unless T is POD. We don't have a POD + /// kind yet. (See #4074) + pub unsafe fn init() -> T; #[cfg(not(stage0))] pub unsafe fn uninit() -> T; From cd235d423008ce9a35d0d5f3a7e35a91b8c3033b Mon Sep 17 00:00:00 2001 From: Tim Chevalier Date: Thu, 9 May 2013 12:15:37 -0700 Subject: [PATCH 335/410] core: Make intrinsics::forget unsafe, too --- src/libcore/unstable/intrinsics.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/libcore/unstable/intrinsics.rs b/src/libcore/unstable/intrinsics.rs index 3ab7c3368d888..a820c5d15a8db 100644 --- a/src/libcore/unstable/intrinsics.rs +++ b/src/libcore/unstable/intrinsics.rs @@ -50,7 +50,9 @@ pub extern "rust-intrinsic" { #[cfg(not(stage0))] pub unsafe fn uninit() -> T; - pub fn forget(_: T) -> (); + /// forget is unsafe because the caller is responsible for + /// ensuring the argument is deallocated already + pub unsafe fn forget(_: T) -> (); pub fn needs_drop() -> bool; From ca18ed8f64daa12138352541f7d8ccfc593b2970 Mon Sep 17 00:00:00 2001 From: Tim Chevalier Date: Thu, 9 May 2013 12:15:44 -0700 Subject: [PATCH 336/410] testsuite: Test that init and forget are both unsafe --- src/test/compile-fail/forget-init-unsafe.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/test/compile-fail/forget-init-unsafe.rs diff --git a/src/test/compile-fail/forget-init-unsafe.rs b/src/test/compile-fail/forget-init-unsafe.rs new file mode 100644 index 0000000000000..2361b5ad6a9cf --- /dev/null +++ b/src/test/compile-fail/forget-init-unsafe.rs @@ -0,0 +1,17 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +use core::unstable::intrinsics::{init, forget}; + +// Test that the `forget` and `init` intrinsics are really unsafe +pub fn main() { + let stuff = init::(); //~ ERROR access to unsafe function requires unsafe + forget(stuff); //~ ERROR access to unsafe function requires unsafe +} \ No newline at end of file From 0afcd3421577283be7150aca5fdf13b8f8d60b0f Mon Sep 17 00:00:00 2001 From: Corey Richardson Date: Thu, 9 May 2013 16:16:22 -0400 Subject: [PATCH 337/410] compile-fail test for new unresolved import error --- src/test/compile-fail/unresolved-import.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/test/compile-fail/unresolved-import.rs diff --git a/src/test/compile-fail/unresolved-import.rs b/src/test/compile-fail/unresolved-import.rs new file mode 100644 index 0000000000000..1bd3efeadcbba --- /dev/null +++ b/src/test/compile-fail/unresolved-import.rs @@ -0,0 +1,12 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +use foo::bar; //~ ERROR unresolved import. maybe a missing + //~^ ERROR failed to resolve import From 9cbab89076c48bffd966303a1cf2856df2b00dcc Mon Sep 17 00:00:00 2001 From: Corey Richardson Date: Thu, 9 May 2013 19:09:43 -0400 Subject: [PATCH 338/410] fix formating and tests --- src/librustc/middle/resolve.rs | 2 +- src/test/compile-fail/issue-1697.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs index e5eb926c02be1..b6106f9a5c072 100644 --- a/src/librustc/middle/resolve.rs +++ b/src/librustc/middle/resolve.rs @@ -2487,7 +2487,7 @@ pub impl Resolver { if module_name == ~"???" { self.session.span_err(span {lo: span.lo, hi: span.lo + BytePos(str::len(*segment_name)), expn_info: - span.expn_info}, fmt!("unresolved import. maybe \ + span.expn_info}, fmt!("unresolved import. maybe \ a missing 'extern mod %s'?", *segment_name)); return Failed; diff --git a/src/test/compile-fail/issue-1697.rs b/src/test/compile-fail/issue-1697.rs index a0d2536d85f0e..71b319a27d073 100644 --- a/src/test/compile-fail/issue-1697.rs +++ b/src/test/compile-fail/issue-1697.rs @@ -10,7 +10,7 @@ // Testing that we don't fail abnormally after hitting the errors -use unresolved::*; //~ ERROR unresolved name +use unresolved::*; //~ ERROR unresolved import. maybe a missing //~^ ERROR failed to resolve import fn main() { From 923450d00c142f4f9baed042eedbe88e7004b661 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Thu, 9 May 2013 19:39:07 -0700 Subject: [PATCH 339/410] librustc: Fix ICE in core-text resulting from dynamic borrowing. rs=blocking-servo --- src/librustc/middle/trans/expr.rs | 40 ++++++++++++++++--------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/src/librustc/middle/trans/expr.rs b/src/librustc/middle/trans/expr.rs index 698c30a6a42ff..7e5d255eae9a8 100644 --- a/src/librustc/middle/trans/expr.rs +++ b/src/librustc/middle/trans/expr.rs @@ -968,7 +968,10 @@ fn trans_lvalue_unadjusted(bcx: block, expr: @ast::expr) -> DatumBlock { } fn get_val(bcx: block, did: ast::def_id, const_ty: ty::t) - -> ValueRef { + -> ValueRef { + // For external constants, we don't inline. + let extern_const_values = + &mut *bcx.ccx().extern_const_values; if did.crate == ast::local_crate { // The LLVM global has the type of its initializer, // which may not be equal to the enum's type for @@ -977,25 +980,24 @@ fn trans_lvalue_unadjusted(bcx: block, expr: @ast::expr) -> DatumBlock { base::get_item_val(bcx.ccx(), did.node), T_ptr(type_of(bcx.ccx(), const_ty))) } else { - // For external constants, we don't inline. - match bcx.ccx().extern_const_values.find(&did) { - None => { - unsafe { - let llty = type_of(bcx.ccx(), const_ty); - let symbol = csearch::get_symbol( - bcx.ccx().sess.cstore, - did); - let llval = llvm::LLVMAddGlobal( - bcx.ccx().llmod, - llty, - transmute::<&u8,*i8>(&symbol[0])); - bcx.ccx().extern_const_values.insert( - did, - llval); - llval - } + match extern_const_values.find(&did) { + None => {} // Continue. + Some(llval) => { + return *llval; } - Some(llval) => *llval + } + + unsafe { + let llty = type_of(bcx.ccx(), const_ty); + let symbol = csearch::get_symbol( + bcx.ccx().sess.cstore, + did); + let llval = llvm::LLVMAddGlobal( + bcx.ccx().llmod, + llty, + transmute::<&u8,*i8>(&symbol[0])); + extern_const_values.insert(did, llval); + llval } } } From c8e93edf55d3913212922864034fae8443f92f2a Mon Sep 17 00:00:00 2001 From: Youngsoo Son Date: Wed, 8 May 2013 22:02:21 +0900 Subject: [PATCH 340/410] Move core::task::local_data to core::local_data --- src/libcore/condition.rs | 6 +++--- src/libcore/core.rc | 1 + src/libcore/{task => }/local_data.rs | 0 src/libcore/os.rs | 4 ++-- src/libcore/prelude.rs | 1 + src/libcore/rand.rs | 4 ++-- src/libcore/rt/local_services.rs | 2 +- src/libcore/task/local_data_priv.rs | 2 +- src/libcore/task/mod.rs | 1 - src/librustdoc/extract.rs | 2 +- src/libstd/rl.rs | 4 ++-- src/libstd/sort.rs | 4 ++-- src/libstd/sort_stage0.rs | 4 ++-- src/libsyntax/ast.rs | 4 ++-- src/libsyntax/parse/token.rs | 4 ++-- 15 files changed, 22 insertions(+), 21 deletions(-) rename src/libcore/{task => }/local_data.rs (100%) diff --git a/src/libcore/condition.rs b/src/libcore/condition.rs index 1240fe03dd54d..75c6cf0e969a3 100644 --- a/src/libcore/condition.rs +++ b/src/libcore/condition.rs @@ -12,7 +12,7 @@ use prelude::*; use task; -use task::local_data::{local_data_pop, local_data_set}; +use local_data::{local_data_pop, local_data_set}; // helper for transmutation, shown below. type RustClosure = (int, int); @@ -24,14 +24,14 @@ pub struct Handler { pub struct Condition<'self, T, U> { name: &'static str, - key: task::local_data::LocalDataKey<'self, Handler> + key: local_data::LocalDataKey<'self, Handler> } pub impl<'self, T, U> Condition<'self, T, U> { fn trap(&'self self, h: &'self fn(T) -> U) -> Trap<'self, T, U> { unsafe { let p : *RustClosure = ::cast::transmute(&h); - let prev = task::local_data::local_data_get(self.key); + let prev = local_data::local_data_get(self.key); let h = @Handler { handle: *p, prev: prev }; Trap { cond: self, handler: h } } diff --git a/src/libcore/core.rc b/src/libcore/core.rc index 31229967e934e..3cc95e5a175ea 100644 --- a/src/libcore/core.rc +++ b/src/libcore/core.rc @@ -215,6 +215,7 @@ pub mod trie; pub mod task; pub mod comm; pub mod pipes; +pub mod local_data; /* Runtime and platform support */ diff --git a/src/libcore/task/local_data.rs b/src/libcore/local_data.rs similarity index 100% rename from src/libcore/task/local_data.rs rename to src/libcore/local_data.rs diff --git a/src/libcore/os.rs b/src/libcore/os.rs index 574618026d983..26d4790705ab9 100644 --- a/src/libcore/os.rs +++ b/src/libcore/os.rs @@ -1208,7 +1208,7 @@ fn overridden_arg_key(_v: @OverriddenArgs) {} pub fn args() -> ~[~str] { unsafe { - match task::local_data::local_data_get(overridden_arg_key) { + match local_data::local_data_get(overridden_arg_key) { None => real_args(), Some(args) => copy args.val } @@ -1218,7 +1218,7 @@ pub fn args() -> ~[~str] { pub fn set_args(new_args: ~[~str]) { unsafe { let overridden_args = @OverriddenArgs { val: copy new_args }; - task::local_data::local_data_set(overridden_arg_key, overridden_args); + local_data::local_data_set(overridden_arg_key, overridden_args); } } diff --git a/src/libcore/prelude.rs b/src/libcore/prelude.rs index d263d2cdbee9e..22172db930223 100644 --- a/src/libcore/prelude.rs +++ b/src/libcore/prelude.rs @@ -81,6 +81,7 @@ pub use io; pub use iter; pub use old_iter; pub use libc; +pub use local_data; pub use num; pub use ops; pub use option; diff --git a/src/libcore/rand.rs b/src/libcore/rand.rs index f11840c95d5ac..2eb429a5e9cb0 100644 --- a/src/libcore/rand.rs +++ b/src/libcore/rand.rs @@ -836,13 +836,13 @@ fn tls_rng_state(_v: @@mut IsaacRng) {} pub fn task_rng() -> @@mut IsaacRng { let r : Option<@@mut IsaacRng>; unsafe { - r = task::local_data::local_data_get(tls_rng_state); + r = local_data::local_data_get(tls_rng_state); } match r { None => { unsafe { let rng = @@mut IsaacRng::new_seeded(seed()); - task::local_data::local_data_set(tls_rng_state, rng); + local_data::local_data_set(tls_rng_state, rng); rng } } diff --git a/src/libcore/rt/local_services.rs b/src/libcore/rt/local_services.rs index 5ca7a72e84e86..01bef5e245888 100644 --- a/src/libcore/rt/local_services.rs +++ b/src/libcore/rt/local_services.rs @@ -198,7 +198,7 @@ mod test { #[test] fn tls() { - use task::local_data::*; + use local_data::*; do run_in_newsched_task() { unsafe { fn key(_x: @~str) { } diff --git a/src/libcore/task/local_data_priv.rs b/src/libcore/task/local_data_priv.rs index 97628f38a7b81..a30db039f30d7 100644 --- a/src/libcore/task/local_data_priv.rs +++ b/src/libcore/task/local_data_priv.rs @@ -15,7 +15,7 @@ use cmp::Eq; use libc; use prelude::*; use task::rt; -use task::local_data::LocalDataKey; +use local_data::LocalDataKey; use super::rt::rust_task; use rt::local_services::LocalStorage; diff --git a/src/libcore/task/mod.rs b/src/libcore/task/mod.rs index e58aa14572b7e..2484d8c5feda4 100644 --- a/src/libcore/task/mod.rs +++ b/src/libcore/task/mod.rs @@ -47,7 +47,6 @@ use unstable::finally::Finally; #[cfg(test)] use comm::SharedChan; mod local_data_priv; -pub mod local_data; pub mod rt; pub mod spawn; diff --git a/src/librustdoc/extract.rs b/src/librustdoc/extract.rs index 34faf6cefa32b..0c49d457ad809 100644 --- a/src/librustdoc/extract.rs +++ b/src/librustdoc/extract.rs @@ -14,7 +14,7 @@ use astsrv; use doc::ItemUtils; use doc; -use core::task::local_data::local_data_get; +use core::local_data::local_data_get; use syntax::ast; use syntax; diff --git a/src/libstd/rl.rs b/src/libstd/rl.rs index b2407be0b991e..81152430e784b 100644 --- a/src/libstd/rl.rs +++ b/src/libstd/rl.rs @@ -69,11 +69,11 @@ fn complete_key(_v: @CompletionCb) {} /// Bind to the main completion callback pub unsafe fn complete(cb: CompletionCb) { - task::local_data::local_data_set(complete_key, @(cb)); + local_data::local_data_set(complete_key, @(cb)); extern fn callback(line: *c_char, completions: *()) { unsafe { - let cb = *task::local_data::local_data_get(complete_key) + let cb = *local_data::local_data_get(complete_key) .get(); do cb(str::raw::from_c_str(line)) |suggestion| { diff --git a/src/libstd/sort.rs b/src/libstd/sort.rs index ae474e0c39463..fdc74be133544 100644 --- a/src/libstd/sort.rs +++ b/src/libstd/sort.rs @@ -1211,11 +1211,11 @@ mod big_tests { #[unsafe_destructor] impl<'self> Drop for LVal<'self> { fn finalize(&self) { - let x = unsafe { task::local_data::local_data_get(self.key) }; + let x = unsafe { local_data::local_data_get(self.key) }; match x { Some(@y) => { unsafe { - task::local_data::local_data_set(self.key, @(y+1)); + local_data::local_data_set(self.key, @(y+1)); } } _ => fail!(~"Expected key to work"), diff --git a/src/libstd/sort_stage0.rs b/src/libstd/sort_stage0.rs index 044c616dcd32c..2379e4617aae8 100644 --- a/src/libstd/sort_stage0.rs +++ b/src/libstd/sort_stage0.rs @@ -1202,11 +1202,11 @@ mod big_tests { #[unsafe_destructor] impl<'self> Drop for LVal<'self> { fn finalize(&self) { - let x = unsafe { task::local_data::local_data_get(self.key) }; + let x = unsafe { local_data::local_data_get(self.key) }; match x { Some(@y) => { unsafe { - task::local_data::local_data_set(self.key, @(y+1)); + local_data::local_data_set(self.key, @(y+1)); } } _ => fail!(~"Expected key to work"), diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index c8fc04eaea1a3..6a576df3507c5 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -74,7 +74,7 @@ impl Encodable for ident { fn encode(&self, s: &mut S) { unsafe { let intr = - match task::local_data::local_data_get(interner_key!()) { + match local_data::local_data_get(interner_key!()) { None => fail!(~"encode: TLS interner not set up"), Some(intr) => intr }; @@ -87,7 +87,7 @@ impl Encodable for ident { impl Decodable for ident { fn decode(d: &mut D) -> ident { let intr = match unsafe { - task::local_data::local_data_get(interner_key!()) + local_data::local_data_get(interner_key!()) } { None => fail!(~"decode: TLS interner not set up"), Some(intr) => intr diff --git a/src/libsyntax/parse/token.rs b/src/libsyntax/parse/token.rs index fe7bd5b3bc17d..0fcfae294d47d 100644 --- a/src/libsyntax/parse/token.rs +++ b/src/libsyntax/parse/token.rs @@ -462,7 +462,7 @@ pub fn mk_fresh_ident_interner() -> @ident_interner { interner: interner::Interner::prefill(init_vec) }; unsafe { - task::local_data::local_data_set(interner_key!(), @rv); + local_data::local_data_set(interner_key!(), @rv); } rv } @@ -471,7 +471,7 @@ pub fn mk_fresh_ident_interner() -> @ident_interner { // fresh one. pub fn mk_ident_interner() -> @ident_interner { unsafe { - match task::local_data::local_data_get(interner_key!()) { + match local_data::local_data_get(interner_key!()) { Some(interner) => *interner, None => { mk_fresh_ident_interner() From 9042e1e8de522ffa48ce6a543130bc72ea04d517 Mon Sep 17 00:00:00 2001 From: Tom Lee Date: Wed, 8 May 2013 23:13:53 -0700 Subject: [PATCH 341/410] Include static methods on traits in reexports. --- src/librustc/metadata/encoder.rs | 42 ++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/librustc/metadata/encoder.rs b/src/librustc/metadata/encoder.rs index 6c02ece9289ae..d2b56863d1a15 100644 --- a/src/librustc/metadata/encoder.rs +++ b/src/librustc/metadata/encoder.rs @@ -363,6 +363,47 @@ fn encode_path(ecx: @EncodeContext, ebml_w.end_tag(); } +fn encode_reexported_static_method(ecx: @EncodeContext, + ebml_w: &mut writer::Encoder, + exp: &middle::resolve::Export2, + m: @ty::method) { + debug!("(encode static trait method) reexport '%s::%s'", + *exp.name, *ecx.tcx.sess.str_of(m.ident)); + ebml_w.start_tag(tag_items_data_item_reexport); + ebml_w.start_tag(tag_items_data_item_reexport_def_id); + ebml_w.wr_str(def_to_str(m.def_id)); + ebml_w.end_tag(); + ebml_w.start_tag(tag_items_data_item_reexport_name); + ebml_w.wr_str(*exp.name + "::" + *ecx.tcx.sess.str_of(m.ident)); + ebml_w.end_tag(); + ebml_w.end_tag(); +} + +fn encode_reexported_static_methods(ecx: @EncodeContext, + ebml_w: &mut writer::Encoder, + mod_path: &[ast_map::path_elt], + exp: &middle::resolve::Export2) { + match ecx.tcx.trait_methods_cache.find(&exp.def_id) { + Some(methods) => { + match ecx.tcx.items.find(&exp.def_id.node) { + Some(&ast_map::node_item(_, path)) => { + if mod_path != *path { + for methods.each |&m| { + if m.self_ty == ast::sty_static { + encode_reexported_static_method(ecx, + ebml_w, + exp, m); + } + } + } + } + _ => {} + } + } + _ => {} + } +} + fn encode_info_for_mod(ecx: @EncodeContext, ebml_w: &mut writer::Encoder, md: &_mod, @@ -413,6 +454,7 @@ fn encode_info_for_mod(ecx: @EncodeContext, ebml_w.wr_str(*exp.name); ebml_w.end_tag(); ebml_w.end_tag(); + encode_reexported_static_methods(ecx, ebml_w, path, exp); } } None => { From 0cde8ba684e738fa71ce62d691ba2886776e49f9 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Thu, 2 May 2013 18:33:08 -0400 Subject: [PATCH 342/410] Implement a new protocol for `for` loops that's much more easily composable --- src/librustc/middle/trans/callee.rs | 9 ++++++++- src/librustc/middle/typeck/check/mod.rs | 26 +++++++++++++++++++++---- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/librustc/middle/trans/callee.rs b/src/librustc/middle/trans/callee.rs index e5e60b2d4ac33..c530cd973978b 100644 --- a/src/librustc/middle/trans/callee.rs +++ b/src/librustc/middle/trans/callee.rs @@ -550,7 +550,14 @@ pub fn trans_call_inner(in_cx: block, // drop the value if it is not being saved. unsafe { if llvm::LLVMIsUndef(llretslot) != lib::llvm::True { - if ty::type_is_immediate(ret_ty) { + if ty::type_is_nil(ret_ty) { + // When implementing the for-loop sugar syntax, the + // type of the for-loop is nil, but the function + // it's invoking returns a bool. This is a special + // case to ignore instead of invoking the Store + // below into a scratch pointer of a mismatched + // type. + } else if ty::type_is_immediate(ret_ty) { let llscratchptr = alloc_ty(bcx, ret_ty); Store(bcx, llresult, llscratchptr); bcx = glue::drop_ty(bcx, llscratchptr, ret_ty); diff --git a/src/librustc/middle/typeck/check/mod.rs b/src/librustc/middle/typeck/check/mod.rs index a6f2f0da234d4..89eef1c7cb7f1 100644 --- a/src/librustc/middle/typeck/check/mod.rs +++ b/src/librustc/middle/typeck/check/mod.rs @@ -1294,6 +1294,26 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt, // The callee checks for bot / err, we don't need to } + fn write_call(fcx: @mut FnCtxt, + call_expr: @ast::expr, + output: ty::t, + sugar: ast::CallSugar) { + let ret_ty = match sugar { + ast::ForSugar => { + match ty::get(output).sty { + ty::ty_bool => {} + _ => fcx.type_error_message(call_expr.span, |actual| { + fmt!("expected `for` closure to return `bool`, \ + but found `%s`", actual) }, + output, None) + } + ty::mk_nil() + } + _ => output + }; + fcx.write_ty(call_expr.id, ret_ty); + } + // A generic function for doing all of the checking for call expressions fn check_call(fcx: @mut FnCtxt, call_expr: @ast::expr, @@ -1344,8 +1364,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt, check_argument_types(fcx, call_expr.span, fn_sig.inputs, f, args, sugar, DontDerefArgs); - // Pull the return type out of the type of the function. - fcx.write_ty(call_expr.id, fn_sig.output); + write_call(fcx, call_expr, fn_sig.output, sugar); } // Checks a method call. @@ -1401,8 +1420,7 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt, fn_ty, expr, args, sugar, DontDerefArgs); - // Pull the return type out of the type of the function. - fcx.write_ty(expr.id, ret_ty); + write_call(fcx, expr, ret_ty, sugar); } // A generic function for checking the then and else in an if From 28256052a4b141350dc0fe4e2e5357137bb49706 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Thu, 2 May 2013 18:33:18 -0400 Subject: [PATCH 343/410] core: Use the new `for` protocol --- src/libcore/cleanup.rs | 32 +- src/libcore/container.rs | 53 ++++ src/libcore/gc.rs | 31 +- src/libcore/hashmap.rs | 108 ++++++- src/libcore/io.rs | 47 +++ src/libcore/iter.rs | 48 +-- src/libcore/iterator.rs | 22 +- src/libcore/num/int-template.rs | 35 ++- src/libcore/num/uint-template.rs | 42 ++- src/libcore/num/uint-template/uint.rs | 24 ++ src/libcore/old_iter.rs | 49 ++- src/libcore/option.rs | 18 ++ src/libcore/os.rs | 9 + src/libcore/stackwalk.rs | 30 ++ src/libcore/str.rs | 433 ++++++++++++++++++++++++-- src/libcore/task/spawn.rs | 13 +- src/libcore/to_bytes.rs | 394 +++++++++++++++++++---- src/libcore/trie.rs | 62 ++++ src/libcore/vec.rs | 213 +++++++++++-- 19 files changed, 1492 insertions(+), 171 deletions(-) diff --git a/src/libcore/cleanup.rs b/src/libcore/cleanup.rs index 912f965db7c9a..a5df97e3d574f 100644 --- a/src/libcore/cleanup.rs +++ b/src/libcore/cleanup.rs @@ -127,6 +127,7 @@ struct AnnihilateStats { n_bytes_freed: uint } +#[cfg(stage0)] unsafe fn each_live_alloc(read_next_before: bool, f: &fn(box: *mut BoxRepr, uniq: bool) -> bool) { //! Walks the internal list of allocations @@ -141,8 +142,8 @@ unsafe fn each_live_alloc(read_next_before: bool, let uniq = (*box).header.ref_count == managed::raw::RC_MANAGED_UNIQUE; - if ! f(box, uniq) { - break + if !f(box, uniq) { + return; } if read_next_before { @@ -152,6 +153,33 @@ unsafe fn each_live_alloc(read_next_before: bool, } } } +#[cfg(not(stage0))] +unsafe fn each_live_alloc(read_next_before: bool, + f: &fn(box: *mut BoxRepr, uniq: bool) -> bool) -> bool { + //! Walks the internal list of allocations + + use managed; + + let task: *Task = transmute(rustrt::rust_get_task()); + let box = (*task).boxed_region.live_allocs; + let mut box: *mut BoxRepr = transmute(copy box); + while box != mut_null() { + let next_before = transmute(copy (*box).header.next); + let uniq = + (*box).header.ref_count == managed::raw::RC_MANAGED_UNIQUE; + + if !f(box, uniq) { + return false; + } + + if read_next_before { + box = next_before; + } else { + box = transmute(copy (*box).header.next); + } + } + return true; +} #[cfg(unix)] fn debug_mem() -> bool { diff --git a/src/libcore/container.rs b/src/libcore/container.rs index 37b904bbe6327..1d5d77649549e 100644 --- a/src/libcore/container.rs +++ b/src/libcore/container.rs @@ -30,16 +30,32 @@ pub trait Map: Mutable { fn contains_key(&self, key: &K) -> bool; // Visits all keys and values + #[cfg(stage0)] fn each<'a>(&'a self, f: &fn(&K, &'a V) -> bool); + // Visits all keys and values + #[cfg(not(stage0))] + fn each<'a>(&'a self, f: &fn(&K, &'a V) -> bool) -> bool; /// Visit all keys + #[cfg(stage0)] fn each_key(&self, f: &fn(&K) -> bool); + /// Visit all keys + #[cfg(not(stage0))] + fn each_key(&self, f: &fn(&K) -> bool) -> bool; /// Visit all values + #[cfg(stage0)] fn each_value<'a>(&'a self, f: &fn(&'a V) -> bool); + /// Visit all values + #[cfg(not(stage0))] + fn each_value<'a>(&'a self, f: &fn(&'a V) -> bool) -> bool; /// Iterate over the map and mutate the contained values + #[cfg(stage0)] fn mutate_values(&mut self, f: &fn(&K, &mut V) -> bool); + /// Iterate over the map and mutate the contained values + #[cfg(not(stage0))] + fn mutate_values(&mut self, f: &fn(&K, &mut V) -> bool) -> bool; /// Return a reference to the value corresponding to the key fn find<'a>(&'a self, key: &K) -> Option<&'a V>; @@ -65,6 +81,7 @@ pub trait Map: Mutable { fn pop(&mut self, k: &K) -> Option; } +#[cfg(stage0)] pub trait Set: Mutable { /// Return true if the set contains a value fn contains(&self, value: &T) -> bool; @@ -99,3 +116,39 @@ pub trait Set: Mutable { /// Visit the values representing the union fn union(&self, other: &Self, f: &fn(&T) -> bool); } + +#[cfg(not(stage0))] +pub trait Set: Mutable { + /// Return true if the set contains a value + fn contains(&self, value: &T) -> bool; + + /// Add a value to the set. Return true if the value was not already + /// present in the set. + fn insert(&mut self, value: T) -> bool; + + /// Remove a value from the set. Return true if the value was + /// present in the set. + fn remove(&mut self, value: &T) -> bool; + + /// Return true if the set has no elements in common with `other`. + /// This is equivalent to checking for an empty intersection. + fn is_disjoint(&self, other: &Self) -> bool; + + /// Return true if the set is a subset of another + fn is_subset(&self, other: &Self) -> bool; + + /// Return true if the set is a superset of another + fn is_superset(&self, other: &Self) -> bool; + + /// Visit the values representing the difference + fn difference(&self, other: &Self, f: &fn(&T) -> bool) -> bool; + + /// Visit the values representing the symmetric difference + fn symmetric_difference(&self, other: &Self, f: &fn(&T) -> bool) -> bool; + + /// Visit the values representing the intersection + fn intersection(&self, other: &Self, f: &fn(&T) -> bool) -> bool; + + /// Visit the values representing the union + fn union(&self, other: &Self, f: &fn(&T) -> bool) -> bool; +} diff --git a/src/libcore/gc.rs b/src/libcore/gc.rs index 9a7d0056b8245..6a427297cc22d 100644 --- a/src/libcore/gc.rs +++ b/src/libcore/gc.rs @@ -129,7 +129,7 @@ type Visitor<'self> = &'self fn(root: **Word, tydesc: *Word) -> bool; // Walks the list of roots for the given safe point, and calls visitor // on each root. -unsafe fn walk_safe_point(fp: *Word, sp: SafePoint, visitor: Visitor) { +unsafe fn _walk_safe_point(fp: *Word, sp: SafePoint, visitor: Visitor) -> bool { let fp_bytes: *u8 = cast::transmute(fp); let sp_meta: *u32 = cast::transmute(sp.sp_meta); @@ -155,7 +155,7 @@ unsafe fn walk_safe_point(fp: *Word, sp: SafePoint, visitor: Visitor) { } else { ptr::null() }; - if !visitor(root, tydesc) { return; } + if !visitor(root, tydesc) { return false; } } sri += 1; } @@ -168,6 +168,16 @@ unsafe fn walk_safe_point(fp: *Word, sp: SafePoint, visitor: Visitor) { } rri += 1; } + return true; +} + +#[cfg(stage0)] +unsafe fn walk_safe_point(fp: *Word, sp: SafePoint, visitor: Visitor) { + _walk_safe_point(fp, sp, visitor); +} +#[cfg(not(stage0))] +unsafe fn walk_safe_point(fp: *Word, sp: SafePoint, visitor: Visitor) -> bool { + _walk_safe_point(fp, sp, visitor) } // Is fp contained in segment? @@ -222,7 +232,7 @@ static need_cleanup: Memory = exchange_heap | stack; // Walks stack, searching for roots of the requested type, and passes // each root to the visitor. -unsafe fn walk_gc_roots(mem: Memory, sentinel: **Word, visitor: Visitor) { +unsafe fn _walk_gc_roots(mem: Memory, sentinel: **Word, visitor: Visitor) -> bool { let mut segment = rustrt::rust_get_stack_segment(); let mut last_ret: *Word = ptr::null(); // To avoid collecting memory used by the GC itself, skip stack @@ -274,14 +284,14 @@ unsafe fn walk_gc_roots(mem: Memory, sentinel: **Word, visitor: Visitor) { // Root is a generic box. let refcount = **root; if mem | task_local_heap != 0 && refcount != -1 { - if !visitor(root, tydesc) { return; } + if !visitor(root, tydesc) { return false; } } else if mem | exchange_heap != 0 && refcount == -1 { - if !visitor(root, tydesc) { return; } + if !visitor(root, tydesc) { return false; } } } else { // Root is a non-immediate. if mem | stack != 0 { - if !visitor(root, tydesc) { return; } + if !visitor(root, tydesc) { return false; } } } } @@ -290,8 +300,17 @@ unsafe fn walk_gc_roots(mem: Memory, sentinel: **Word, visitor: Visitor) { } reached_sentinel = delay_reached_sentinel; } + return true; } +#[cfg(stage0)] +unsafe fn walk_gc_roots(mem: Memory, sentinel: **Word, visitor: Visitor) { + _walk_gc_roots(mem, sentinel, visitor); +} +#[cfg(not(stage0))] +unsafe fn walk_gc_roots(mem: Memory, sentinel: **Word, visitor: Visitor) -> bool { + _walk_gc_roots(mem, sentinel, visitor) +} pub fn gc() { unsafe { // Abort when GC is disabled. diff --git a/src/libcore/hashmap.rs b/src/libcore/hashmap.rs index 8e0a185248e61..b5ae07208fc66 100644 --- a/src/libcore/hashmap.rs +++ b/src/libcore/hashmap.rs @@ -88,18 +88,32 @@ priv impl HashMap { } #[inline(always)] + #[cfg(stage0)] fn bucket_sequence(&self, hash: uint, - op: &fn(uint) -> bool) -> uint { + op: &fn(uint) -> bool) { let start_idx = self.to_bucket(hash); let len_buckets = self.buckets.len(); let mut idx = start_idx; loop { - if !op(idx) { - return idx; + if !op(idx) { return; } + idx = self.next_bucket(idx, len_buckets); + if idx == start_idx { + return; } + } + } + #[inline(always)] + #[cfg(not(stage0))] + fn bucket_sequence(&self, hash: uint, + op: &fn(uint) -> bool) -> bool { + let start_idx = self.to_bucket(hash); + let len_buckets = self.buckets.len(); + let mut idx = start_idx; + loop { + if !op(idx) { return false; } idx = self.next_bucket(idx, len_buckets); if idx == start_idx { - return start_idx; + return true; } } } @@ -122,14 +136,14 @@ priv impl HashMap { hash: uint, k: &K) -> SearchResult { - let _ = for self.bucket_sequence(hash) |i| { + for self.bucket_sequence(hash) |i| { match self.buckets[i] { Some(ref bkt) => if bkt.hash == hash && *k == bkt.key { return FoundEntry(i); }, None => return FoundHole(i) } - }; + } TableFull } @@ -138,7 +152,7 @@ priv impl HashMap { hash: uint, k: &Q) -> SearchResult { - let _ = for self.bucket_sequence(hash) |i| { + for self.bucket_sequence(hash) |i| { match self.buckets[i] { Some(ref bkt) => { if bkt.hash == hash && k.equiv(&bkt.key) { @@ -147,7 +161,7 @@ priv impl HashMap { }, None => return FoundHole(i) } - }; + } TableFull } @@ -311,7 +325,8 @@ impl Map for HashMap { } /// Visit all key-value pairs - fn each<'a>(&'a self, blk: &fn(&'a K, &'a V) -> bool) { + #[cfg(stage0)] + fn each<'a>(&'a self, blk: &fn(&K, &'a V) -> bool) { for uint::range(0, self.buckets.len()) |i| { for self.buckets[i].each |bucket| { if !blk(&bucket.key, &bucket.value) { @@ -321,17 +336,45 @@ impl Map for HashMap { } } + /// Visit all key-value pairs + #[cfg(not(stage0))] + fn each<'a>(&'a self, blk: &fn(&K, &'a V) -> bool) -> bool { + for uint::range(0, self.buckets.len()) |i| { + for self.buckets[i].each |bucket| { + if !blk(&bucket.key, &bucket.value) { + return false; + } + } + } + return true; + } + /// Visit all keys + #[cfg(stage0)] fn each_key(&self, blk: &fn(k: &K) -> bool) { self.each(|k, _| blk(k)) } + /// Visit all keys + #[cfg(not(stage0))] + fn each_key(&self, blk: &fn(k: &K) -> bool) -> bool { + self.each(|k, _| blk(k)) + } + /// Visit all values + #[cfg(stage0)] fn each_value<'a>(&'a self, blk: &fn(v: &'a V) -> bool) { self.each(|_, v| blk(v)) } + /// Visit all values + #[cfg(not(stage0))] + fn each_value<'a>(&'a self, blk: &fn(v: &'a V) -> bool) -> bool { + self.each(|_, v| blk(v)) + } + /// Iterate over the map and mutate the contained values + #[cfg(stage0)] fn mutate_values(&mut self, blk: &fn(&K, &mut V) -> bool) { for uint::range(0, self.buckets.len()) |i| { match self.buckets[i] { @@ -343,6 +386,20 @@ impl Map for HashMap { } } + /// Iterate over the map and mutate the contained values + #[cfg(not(stage0))] + fn mutate_values(&mut self, blk: &fn(&K, &mut V) -> bool) -> bool { + for uint::range(0, self.buckets.len()) |i| { + match self.buckets[i] { + Some(Bucket{key: ref key, value: ref mut value, _}) => { + if !blk(key, value) { return false; } + } + None => () + } + } + return true; + } + /// Return a reference to the value corresponding to the key fn find<'a>(&'a self, k: &K) -> Option<&'a V> { match self.bucket_for_key(k) { @@ -632,7 +689,10 @@ pub struct HashSet { impl BaseIter for HashSet { /// Visit all values in order + #[cfg(stage0)] fn each(&self, f: &fn(&T) -> bool) { self.map.each_key(f) } + #[cfg(not(stage0))] + fn each(&self, f: &fn(&T) -> bool) -> bool { self.map.each_key(f) } fn size_hint(&self) -> Option { Some(self.len()) } } @@ -683,6 +743,7 @@ impl Set for HashSet { } /// Visit the values representing the difference + #[cfg(stage0)] fn difference(&self, other: &HashSet, f: &fn(&T) -> bool) { for self.each |v| { if !other.contains(v) { @@ -691,7 +752,14 @@ impl Set for HashSet { } } + /// Visit the values representing the difference + #[cfg(not(stage0))] + fn difference(&self, other: &HashSet, f: &fn(&T) -> bool) -> bool { + self.each(|v| other.contains(v) || f(v)) + } + /// Visit the values representing the symmetric difference + #[cfg(stage0)] fn symmetric_difference(&self, other: &HashSet, f: &fn(&T) -> bool) { @@ -699,7 +767,16 @@ impl Set for HashSet { other.difference(self, f); } + /// Visit the values representing the symmetric difference + #[cfg(not(stage0))] + fn symmetric_difference(&self, + other: &HashSet, + f: &fn(&T) -> bool) -> bool { + self.difference(other, f) && other.difference(self, f) + } + /// Visit the values representing the intersection + #[cfg(stage0)] fn intersection(&self, other: &HashSet, f: &fn(&T) -> bool) { for self.each |v| { if other.contains(v) { @@ -708,7 +785,14 @@ impl Set for HashSet { } } + /// Visit the values representing the intersection + #[cfg(not(stage0))] + fn intersection(&self, other: &HashSet, f: &fn(&T) -> bool) -> bool { + self.each(|v| !other.contains(v) || f(v)) + } + /// Visit the values representing the union + #[cfg(stage0)] fn union(&self, other: &HashSet, f: &fn(&T) -> bool) { for self.each |v| { if !f(v) { return } @@ -720,6 +804,12 @@ impl Set for HashSet { } } } + + /// Visit the values representing the union + #[cfg(not(stage0))] + fn union(&self, other: &HashSet, f: &fn(&T) -> bool) -> bool { + self.each(f) && other.each(|v| self.contains(v) || f(v)) + } } pub impl HashSet { diff --git a/src/libcore/io.rs b/src/libcore/io.rs index 7fc2c2559c245..67fc71a941e06 100644 --- a/src/libcore/io.rs +++ b/src/libcore/io.rs @@ -247,7 +247,10 @@ pub trait ReaderUtil { * * None right now. */ + #[cfg(stage0)] fn each_byte(&self, it: &fn(int) -> bool); + #[cfg(not(stage0))] + fn each_byte(&self, it: &fn(int) -> bool) -> bool; /** * Iterate over every char until EOF or the iterator breaks. @@ -256,7 +259,10 @@ pub trait ReaderUtil { * * None right now. */ + #[cfg(stage0)] fn each_char(&self, it: &fn(char) -> bool); + #[cfg(not(stage0))] + fn each_char(&self, it: &fn(char) -> bool) -> bool; /** * Iterate over every line until EOF or the iterator breaks. @@ -265,7 +271,10 @@ pub trait ReaderUtil { * * None right now. */ + #[cfg(stage0)] fn each_line(&self, it: &fn(&str) -> bool); + #[cfg(not(stage0))] + fn each_line(&self, it: &fn(&str) -> bool) -> bool; /** * Reads all of the lines in the stream. @@ -676,18 +685,35 @@ impl ReaderUtil for T { bytes } + #[cfg(stage0)] fn each_byte(&self, it: &fn(int) -> bool) { while !self.eof() { if !it(self.read_byte()) { break; } } } + #[cfg(not(stage0))] + fn each_byte(&self, it: &fn(int) -> bool) -> bool { + while !self.eof() { + if !it(self.read_byte()) { return false; } + } + return true; + } + #[cfg(stage0)] fn each_char(&self, it: &fn(char) -> bool) { while !self.eof() { if !it(self.read_char()) { break; } } } + #[cfg(not(stage0))] + fn each_char(&self, it: &fn(char) -> bool) -> bool { + while !self.eof() { + if !it(self.read_char()) { return false; } + } + return true; + } + #[cfg(stage0)] fn each_line(&self, it: &fn(s: &str) -> bool) { while !self.eof() { // include the \n, so that we can distinguish an entirely empty @@ -707,6 +733,27 @@ impl ReaderUtil for T { if !it(line) { break; } } } + #[cfg(not(stage0))] + fn each_line(&self, it: &fn(s: &str) -> bool) -> bool { + while !self.eof() { + // include the \n, so that we can distinguish an entirely empty + // line read after "...\n", and the trailing empty line in + // "...\n\n". + let mut line = self.read_until('\n' as u8, true); + + // blank line at the end of the reader is ignored + if self.eof() && line.is_empty() { break; } + + // trim the \n, so that each_line is consistent with read_line + let n = str::len(line); + if line[n-1] == '\n' as u8 { + unsafe { str::raw::set_len(&mut line, n-1); } + } + + if !it(line) { return false; } + } + return true; + } fn read_lines(&self) -> ~[~str] { do vec::build |push| { diff --git a/src/libcore/iter.rs b/src/libcore/iter.rs index b68d11583349a..0f064af657a28 100644 --- a/src/libcore/iter.rs +++ b/src/libcore/iter.rs @@ -40,12 +40,17 @@ much easier to implement. */ -use cmp::Ord; -use option::{Option, Some, None}; +#[cfg(not(stage0))] use cmp::Ord; +#[cfg(not(stage0))] use option::{Option, Some, None}; +#[cfg(stage0)] pub trait Times { fn times(&self, it: &fn() -> bool); } +#[cfg(not(stage0))] +pub trait Times { + fn times(&self, it: &fn() -> bool) -> bool; +} /** * Transform an internal iterator into an owned vector. @@ -59,7 +64,8 @@ pub trait Times { * ~~~ */ #[inline(always)] -pub fn to_vec(iter: &fn(f: &fn(T) -> bool)) -> ~[T] { +#[cfg(not(stage0))] +pub fn to_vec(iter: &fn(f: &fn(T) -> bool) -> bool) -> ~[T] { let mut v = ~[]; for iter |x| { v.push(x) } v @@ -77,13 +83,12 @@ pub fn to_vec(iter: &fn(f: &fn(T) -> bool)) -> ~[T] { * ~~~~ */ #[inline(always)] -pub fn any(predicate: &fn(T) -> bool, iter: &fn(f: &fn(T) -> bool)) -> bool { - for iter |x| { - if predicate(x) { - return true - } - } - false +#[cfg(not(stage0))] +pub fn any(predicate: &fn(T) -> bool, + iter: &fn(f: &fn(T) -> bool) -> bool) -> bool { + // If the predicate returns true, we break. If we ever broke, then we found + // something + !iter(|x| !predicate(x)) } /** @@ -97,13 +102,12 @@ pub fn any(predicate: &fn(T) -> bool, iter: &fn(f: &fn(T) -> bool)) -> bool { * ~~~~ */ #[inline(always)] -pub fn all(predicate: &fn(T) -> bool, iter: &fn(f: &fn(T) -> bool)) -> bool { - for iter |x| { - if !predicate(x) { - return false - } - } - true +#[cfg(not(stage0))] +pub fn all(predicate: &fn(T) -> bool, + iter: &fn(f: &fn(T) -> bool) -> bool) -> bool { + // If we ever break, iter will return false, so this will only return true + // if predicate returns true for everything. + iter(|x| predicate(x)) } /** @@ -117,7 +121,9 @@ pub fn all(predicate: &fn(T) -> bool, iter: &fn(f: &fn(T) -> bool)) -> bool { * ~~~~ */ #[inline(always)] -pub fn find(predicate: &fn(&T) -> bool, iter: &fn(f: &fn(T) -> bool)) -> Option { +#[cfg(not(stage0))] +pub fn find(predicate: &fn(&T) -> bool, + iter: &fn(f: &fn(T) -> bool) -> bool) -> Option { for iter |x| { if predicate(&x) { return Some(x); @@ -137,7 +143,8 @@ pub fn find(predicate: &fn(&T) -> bool, iter: &fn(f: &fn(T) -> bool)) -> Opti * ~~~~ */ #[inline] -pub fn max(iter: &fn(f: &fn(T) -> bool)) -> Option { +#[cfg(not(stage0))] +pub fn max(iter: &fn(f: &fn(T) -> bool) -> bool) -> Option { let mut result = None; for iter |x| { match result { @@ -163,7 +170,8 @@ pub fn max(iter: &fn(f: &fn(T) -> bool)) -> Option { * ~~~~ */ #[inline] -pub fn min(iter: &fn(f: &fn(T) -> bool)) -> Option { +#[cfg(not(stage0))] +pub fn min(iter: &fn(f: &fn(T) -> bool) -> bool) -> Option { let mut result = None; for iter |x| { match result { diff --git a/src/libcore/iterator.rs b/src/libcore/iterator.rs index 29dd4538aa251..40c9637f692bc 100644 --- a/src/libcore/iterator.rs +++ b/src/libcore/iterator.rs @@ -41,7 +41,10 @@ pub trait IteratorUtil { fn take(self, n: uint) -> TakeIterator; fn scan<'r, St, B>(self, initial_state: St, f: &'r fn(&mut St, A) -> Option) -> ScanIterator<'r, A, B, Self, St>; + #[cfg(stage0)] fn advance(&mut self, f: &fn(A) -> bool); + #[cfg(not(stage0))] + fn advance(&mut self, f: &fn(A) -> bool) -> bool; } /// Iterator adaptors provided for every `Iterator` implementation. The adaptor objects are also @@ -103,13 +106,28 @@ impl> IteratorUtil for T { /// A shim implementing the `for` loop iteration protocol for iterator objects #[inline] + #[cfg(stage0)] fn advance(&mut self, f: &fn(A) -> bool) { loop { match self.next() { Some(x) => { - if !f(x) { return } + if !f(x) { return; } } - None => return + None => { return; } + } + } + } + + /// A shim implementing the `for` loop iteration protocol for iterator objects + #[inline] + #[cfg(not(stage0))] + fn advance(&mut self, f: &fn(A) -> bool) -> bool { + loop { + match self.next() { + Some(x) => { + if !f(x) { return false; } + } + None => { return true; } } } } diff --git a/src/libcore/num/int-template.rs b/src/libcore/num/int-template.rs index 9ee5ba4753db0..f2bba6a463904 100644 --- a/src/libcore/num/int-template.rs +++ b/src/libcore/num/int-template.rs @@ -86,38 +86,63 @@ pub fn gt(x: T, y: T) -> bool { x > y } /// #[inline(always)] /// Iterate over the range [`start`,`start`+`step`..`stop`) -pub fn range_step(start: T, stop: T, step: T, it: &fn(T) -> bool) { +pub fn _range_step(start: T, stop: T, step: T, it: &fn(T) -> bool) -> bool { let mut i = start; if step == 0 { fail!(~"range_step called with step == 0"); } else if step > 0 { // ascending while i < stop { - if !it(i) { break } + if !it(i) { return false; } // avoiding overflow. break if i + step > max_value - if i > max_value - step { break; } + if i > max_value - step { return true; } i += step; } } else { // descending while i > stop { - if !it(i) { break } + if !it(i) { return false; } // avoiding underflow. break if i + step < min_value - if i < min_value - step { break; } + if i < min_value - step { return true; } i += step; } } + return true; +} + +#[cfg(stage0)] +pub fn range_step(start: T, stop: T, step: T, it: &fn(T) -> bool) { + _range_step(start, stop, step, it); +} +#[cfg(not(stage0))] +pub fn range_step(start: T, stop: T, step: T, it: &fn(T) -> bool) -> bool { + _range_step(start, stop, step, it) } #[inline(always)] +#[cfg(stage0)] /// Iterate over the range [`lo`..`hi`) pub fn range(lo: T, hi: T, it: &fn(T) -> bool) { range_step(lo, hi, 1 as T, it); } #[inline(always)] +#[cfg(not(stage0))] +/// Iterate over the range [`lo`..`hi`) +pub fn range(lo: T, hi: T, it: &fn(T) -> bool) -> bool { + range_step(lo, hi, 1 as T, it) +} + +#[inline(always)] +#[cfg(stage0)] /// Iterate over the range [`hi`..`lo`) pub fn range_rev(hi: T, lo: T, it: &fn(T) -> bool) { range_step(hi, lo, -1 as T, it); } +#[inline(always)] +#[cfg(not(stage0))] +/// Iterate over the range [`hi`..`lo`) +pub fn range_rev(hi: T, lo: T, it: &fn(T) -> bool) -> bool { + range_step(hi, lo, -1 as T, it) +} /// Computes the bitwise complement #[inline(always)] diff --git a/src/libcore/num/uint-template.rs b/src/libcore/num/uint-template.rs index dcb0865cb9b98..1c115ee507203 100644 --- a/src/libcore/num/uint-template.rs +++ b/src/libcore/num/uint-template.rs @@ -51,43 +51,69 @@ pub fn gt(x: T, y: T) -> bool { x > y } /// /// Iterate over the range [`start`,`start`+`step`..`stop`) /// -pub fn range_step(start: T, - stop: T, - step: T_SIGNED, - it: &fn(T) -> bool) { +pub fn _range_step(start: T, + stop: T, + step: T_SIGNED, + it: &fn(T) -> bool) -> bool { let mut i = start; if step == 0 { fail!(~"range_step called with step == 0"); } if step >= 0 { while i < stop { - if !it(i) { break } + if !it(i) { return false; } // avoiding overflow. break if i + step > max_value - if i > max_value - (step as T) { break; } + if i > max_value - (step as T) { return true; } i += step as T; } } else { while i > stop { - if !it(i) { break } + if !it(i) { return false; } // avoiding underflow. break if i + step < min_value - if i < min_value + ((-step) as T) { break; } + if i < min_value + ((-step) as T) { return true; } i -= -step as T; } } + return true; +} + +#[cfg(stage0)] +pub fn range_step(start: T, stop: T, step: T_SIGNED, it: &fn(T) -> bool) { + _range_step(start, stop, step, it); +} +#[cfg(not(stage0))] +pub fn range_step(start: T, stop: T, step: T_SIGNED, it: &fn(T) -> bool) -> bool { + _range_step(start, stop, step, it) } #[inline(always)] +#[cfg(stage0)] /// Iterate over the range [`lo`..`hi`) pub fn range(lo: T, hi: T, it: &fn(T) -> bool) { range_step(lo, hi, 1 as T_SIGNED, it); } #[inline(always)] +#[cfg(not(stage0))] +/// Iterate over the range [`lo`..`hi`) +pub fn range(lo: T, hi: T, it: &fn(T) -> bool) -> bool { + range_step(lo, hi, 1 as T_SIGNED, it) +} + +#[inline(always)] +#[cfg(stage0)] /// Iterate over the range [`hi`..`lo`) pub fn range_rev(hi: T, lo: T, it: &fn(T) -> bool) { range_step(hi, lo, -1 as T_SIGNED, it); } +#[inline(always)] +#[cfg(not(stage0))] +/// Iterate over the range [`hi`..`lo`) +pub fn range_rev(hi: T, lo: T, it: &fn(T) -> bool) -> bool { + range_step(hi, lo, -1 as T_SIGNED, it) +} + /// Computes the bitwise complement #[inline(always)] pub fn compl(i: T) -> T { diff --git a/src/libcore/num/uint-template/uint.rs b/src/libcore/num/uint-template/uint.rs index de882f1ee7a1f..d8a4ec19304f3 100644 --- a/src/libcore/num/uint-template/uint.rs +++ b/src/libcore/num/uint-template/uint.rs @@ -154,6 +154,7 @@ pub mod inst { return true; } + #[cfg(stage0)] impl iter::Times for uint { #[inline(always)] /// @@ -175,6 +176,29 @@ pub mod inst { } } + #[cfg(not(stage0))] + impl iter::Times for uint { + #[inline(always)] + /// + /// A convenience form for basic iteration. Given a uint `x`, + /// `for x.times { ... }` executes the given block x times. + /// + /// Equivalent to `for uint::range(0, x) |_| { ... }`. + /// + /// Not defined on all integer types to permit unambiguous + /// use with integer literals of inferred integer-type as + /// the self-value (eg. `for 100.times { ... }`). + /// + fn times(&self, it: &fn() -> bool) -> bool { + let mut i = *self; + while i > 0 { + if !it() { return false; } + i -= 1; + } + return true; + } + } + /// Returns the smallest power of 2 greater than or equal to `n` #[inline(always)] pub fn next_power_of_two(n: uint) -> uint { diff --git a/src/libcore/old_iter.rs b/src/libcore/old_iter.rs index 98b847c75b408..8e31bbfd8781b 100644 --- a/src/libcore/old_iter.rs +++ b/src/libcore/old_iter.rs @@ -22,21 +22,40 @@ use vec; /// A function used to initialize the elements of a sequence pub type InitOp<'self,T> = &'self fn(uint) -> T; +#[cfg(stage0)] pub trait BaseIter { fn each(&self, blk: &fn(v: &A) -> bool); fn size_hint(&self) -> Option; } +#[cfg(not(stage0))] +pub trait BaseIter { + fn each(&self, blk: &fn(v: &A) -> bool) -> bool; + fn size_hint(&self) -> Option; +} +#[cfg(stage0)] pub trait ReverseIter: BaseIter { fn each_reverse(&self, blk: &fn(&A) -> bool); } +#[cfg(not(stage0))] +pub trait ReverseIter: BaseIter { + fn each_reverse(&self, blk: &fn(&A) -> bool) -> bool; +} +#[cfg(stage0)] pub trait MutableIter: BaseIter { fn each_mut(&mut self, blk: &fn(&mut A) -> bool); } +#[cfg(not(stage0))] +pub trait MutableIter: BaseIter { + fn each_mut(&mut self, blk: &fn(&mut A) -> bool) -> bool; +} pub trait ExtendedIter { + #[cfg(stage0)] fn eachi(&self, blk: &fn(uint, v: &A) -> bool); + #[cfg(not(stage0))] + fn eachi(&self, blk: &fn(uint, v: &A) -> bool) -> bool; fn all(&self, blk: &fn(&A) -> bool) -> bool; fn any(&self, blk: &fn(&A) -> bool) -> bool; fn foldl(&self, b0: B, blk: &fn(&B, &A) -> B) -> B; @@ -45,9 +64,14 @@ pub trait ExtendedIter { fn flat_map_to_vec>(&self, op: &fn(&A) -> IB) -> ~[B]; } +#[cfg(stage0)] pub trait ExtendedMutableIter { fn eachi_mut(&mut self, blk: &fn(uint, &mut A) -> bool); } +#[cfg(not(stage0))] +pub trait ExtendedMutableIter { + fn eachi_mut(&mut self, blk: &fn(uint, &mut A) -> bool) -> bool; +} pub trait EqIter { fn contains(&self, x: &A) -> bool; @@ -92,12 +116,22 @@ pub trait Buildable { } #[inline(always)] -pub fn eachi>(self: &IA, blk: &fn(uint, &A) -> bool) { +pub fn _eachi>(self: &IA, blk: &fn(uint, &A) -> bool) -> bool { let mut i = 0; for self.each |a| { - if !blk(i, a) { break; } + if !blk(i, a) { return false; } i += 1; } + return true; +} + +#[cfg(stage0)] +pub fn eachi>(self: &IA, blk: &fn(uint, &A) -> bool) { + _eachi(self, blk); +} +#[cfg(not(stage0))] +pub fn eachi>(self: &IA, blk: &fn(uint, &A) -> bool) -> bool { + _eachi(self, blk) } #[inline(always)] @@ -199,6 +233,7 @@ pub fn position>(self: &IA, f: &fn(&A) -> bool) // it would have to be implemented with foldr, which is too inefficient. #[inline(always)] +#[cfg(stage0)] pub fn repeat(times: uint, blk: &fn() -> bool) { let mut i = 0; while i < times { @@ -206,6 +241,16 @@ pub fn repeat(times: uint, blk: &fn() -> bool) { i += 1; } } +#[inline(always)] +#[cfg(not(stage0))] +pub fn repeat(times: uint, blk: &fn() -> bool) -> bool { + let mut i = 0; + while i < times { + if !blk() { return false; } + i += 1; + } + return true; +} #[inline(always)] pub fn min>(self: &IA) -> A { diff --git a/src/libcore/option.rs b/src/libcore/option.rs index b7c51147fba78..7cb408767058c 100644 --- a/src/libcore/option.rs +++ b/src/libcore/option.rs @@ -101,9 +101,16 @@ impl> Add, Option> for Option { impl BaseIter for Option { /// Performs an operation on the contained value by reference #[inline(always)] + #[cfg(stage0)] fn each<'a>(&'a self, f: &fn(x: &'a T) -> bool) { match *self { None => (), Some(ref t) => { f(t); } } } + /// Performs an operation on the contained value by reference + #[inline(always)] + #[cfg(not(stage0))] + fn each<'a>(&'a self, f: &fn(x: &'a T) -> bool) -> bool { + match *self { None => true, Some(ref t) => { f(t) } } + } #[inline(always)] fn size_hint(&self) -> Option { @@ -112,16 +119,27 @@ impl BaseIter for Option { } impl MutableIter for Option { + #[cfg(stage0)] #[inline(always)] fn each_mut<'a>(&'a mut self, f: &fn(&'a mut T) -> bool) { match *self { None => (), Some(ref mut t) => { f(t); } } } + #[cfg(not(stage0))] + #[inline(always)] + fn each_mut<'a>(&'a mut self, f: &fn(&'a mut T) -> bool) -> bool { + match *self { None => true, Some(ref mut t) => { f(t) } } + } } impl ExtendedIter for Option { + #[cfg(stage0)] pub fn eachi(&self, blk: &fn(uint, v: &A) -> bool) { old_iter::eachi(self, blk) } + #[cfg(not(stage0))] + pub fn eachi(&self, blk: &fn(uint, v: &A) -> bool) -> bool { + old_iter::eachi(self, blk) + } pub fn all(&self, blk: &fn(&A) -> bool) -> bool { old_iter::all(self, blk) } diff --git a/src/libcore/os.rs b/src/libcore/os.rs index 574618026d983..4f9a49d581f67 100644 --- a/src/libcore/os.rs +++ b/src/libcore/os.rs @@ -550,6 +550,7 @@ pub fn tmpdir() -> Path { } } /// Recursively walk a directory structure +#[cfg(stage0)] pub fn walk_dir(p: &Path, f: &fn(&Path) -> bool) { walk_dir_(p, f); @@ -577,6 +578,14 @@ pub fn walk_dir(p: &Path, f: &fn(&Path) -> bool) { return keepgoing; } } +/// Recursively walk a directory structure +#[cfg(not(stage0))] +pub fn walk_dir(p: &Path, f: &fn(&Path) -> bool) -> bool { + list_dir(p).each(|q| { + let path = &p.push(*q); + f(path) && (!path_is_dir(path) || walk_dir(path, f)) + }) +} /// Indicates whether a path represents a directory pub fn path_is_dir(p: &Path) -> bool { diff --git a/src/libcore/stackwalk.rs b/src/libcore/stackwalk.rs index 1958b5b9d80da..e86416f249902 100644 --- a/src/libcore/stackwalk.rs +++ b/src/libcore/stackwalk.rs @@ -24,6 +24,7 @@ pub fn Frame(fp: *Word) -> Frame { } } +#[cfg(stage0)] pub fn walk_stack(visit: &fn(Frame) -> bool) { debug!("beginning stack walk"); @@ -51,6 +52,35 @@ pub fn walk_stack(visit: &fn(Frame) -> bool) { } } } +#[cfg(not(stage0))] +pub fn walk_stack(visit: &fn(Frame) -> bool) -> bool { + + debug!("beginning stack walk"); + + do frame_address |frame_pointer| { + let mut frame_address: *Word = unsafe { + transmute(frame_pointer) + }; + loop { + let fr = Frame(frame_address); + + debug!("frame: %x", unsafe { transmute(fr.fp) }); + visit(fr); + + unsafe { + let next_fp: **Word = transmute(frame_address); + frame_address = *next_fp; + if *frame_address == 0u { + debug!("encountered task_start_wrapper. ending walk"); + // This is the task_start_wrapper_frame. There is + // no stack beneath it and it is a foreign frame. + break; + } + } + } + } + return true; +} #[test] fn test_simple() { diff --git a/src/libcore/str.rs b/src/libcore/str.rs index 5ec6471ac4a29..4ab6f659e9c0f 100644 --- a/src/libcore/str.rs +++ b/src/libcore/str.rs @@ -566,14 +566,30 @@ pub fn slice<'a>(s: &'a str, begin: uint, end: uint) -> &'a str { } /// Splits a string into substrings at each occurrence of a given character +#[cfg(stage0)] pub fn each_split_char<'a>(s: &'a str, sep: char, it: &fn(&'a str) -> bool) { + each_split_char_inner(s, sep, len(s), true, true, it); +} + +/// Splits a string into substrings at each occurrence of a given character +#[cfg(not(stage0))] +pub fn each_split_char<'a>(s: &'a str, sep: char, + it: &fn(&'a str) -> bool) -> bool { each_split_char_inner(s, sep, len(s), true, true, it) } /// Like `each_split_char`, but a trailing empty string is omitted +#[cfg(stage0)] pub fn each_split_char_no_trailing<'a>(s: &'a str, sep: char, it: &fn(&'a str) -> bool) { + each_split_char_inner(s, sep, len(s), true, false, it); +} +/// Like `each_split_char`, but a trailing empty string is omitted +#[cfg(not(stage0))] +pub fn each_split_char_no_trailing<'a>(s: &'a str, + sep: char, + it: &fn(&'a str) -> bool) -> bool { each_split_char_inner(s, sep, len(s), true, false, it) } @@ -583,17 +599,39 @@ pub fn each_split_char_no_trailing<'a>(s: &'a str, * * The character must be a valid UTF-8/ASCII character */ +#[cfg(stage0)] pub fn each_splitn_char<'a>(s: &'a str, sep: char, count: uint, it: &fn(&'a str) -> bool) { + each_split_char_inner(s, sep, count, true, true, it); +} +/** + * Splits a string into substrings at each occurrence of a given + * character up to 'count' times. + * + * The character must be a valid UTF-8/ASCII character + */ +#[cfg(not(stage0))] +pub fn each_splitn_char<'a>(s: &'a str, + sep: char, + count: uint, + it: &fn(&'a str) -> bool) -> bool { each_split_char_inner(s, sep, count, true, true, it) } /// Like `each_split_char`, but omits empty strings +#[cfg(stage0)] pub fn each_split_char_nonempty<'a>(s: &'a str, sep: char, it: &fn(&'a str) -> bool) { + each_split_char_inner(s, sep, len(s), false, false, it); +} +/// Like `each_split_char`, but omits empty strings +#[cfg(not(stage0))] +pub fn each_split_char_nonempty<'a>(s: &'a str, + sep: char, + it: &fn(&'a str) -> bool) -> bool { each_split_char_inner(s, sep, len(s), false, false, it) } @@ -602,7 +640,7 @@ fn each_split_char_inner<'a>(s: &'a str, count: uint, allow_empty: bool, allow_trailing_empty: bool, - it: &fn(&'a str) -> bool) { + it: &fn(&'a str) -> bool) -> bool { if sep < 128u as char { let b = sep as u8, l = len(s); let mut done = 0u; @@ -610,7 +648,9 @@ fn each_split_char_inner<'a>(s: &'a str, while i < l && done < count { if s[i] == b { if allow_empty || start < i { - if !it( unsafe{ raw::slice_bytes(s, start, i) } ) { return; } + if !it( unsafe{ raw::slice_bytes(s, start, i) } ) { + return false; + } } start = i + 1u; done += 1u; @@ -619,24 +659,41 @@ fn each_split_char_inner<'a>(s: &'a str, } // only slice a non-empty trailing substring if allow_trailing_empty || start < l { - if !it( unsafe{ raw::slice_bytes(s, start, l) } ) { return; } + if !it( unsafe{ raw::slice_bytes(s, start, l) } ) { return false; } } - } else { - each_split_inner(s, |cur| cur == sep, count, allow_empty, allow_trailing_empty, it) + return true; } + return each_split_inner(s, |cur| cur == sep, count, + allow_empty, allow_trailing_empty, it) } /// Splits a string into substrings using a character function +#[cfg(stage0)] pub fn each_split<'a>(s: &'a str, sepfn: &fn(char) -> bool, it: &fn(&'a str) -> bool) { + each_split_inner(s, sepfn, len(s), true, true, it); +} +/// Splits a string into substrings using a character function +#[cfg(not(stage0))] +pub fn each_split<'a>(s: &'a str, + sepfn: &fn(char) -> bool, + it: &fn(&'a str) -> bool) -> bool { each_split_inner(s, sepfn, len(s), true, true, it) } /// Like `each_split`, but a trailing empty string is omitted +#[cfg(stage0)] pub fn each_split_no_trailing<'a>(s: &'a str, sepfn: &fn(char) -> bool, it: &fn(&'a str) -> bool) { + each_split_inner(s, sepfn, len(s), true, false, it); +} +/// Like `each_split`, but a trailing empty string is omitted +#[cfg(not(stage0))] +pub fn each_split_no_trailing<'a>(s: &'a str, + sepfn: &fn(char) -> bool, + it: &fn(&'a str) -> bool) -> bool { each_split_inner(s, sepfn, len(s), true, false, it) } @@ -644,17 +701,37 @@ pub fn each_split_no_trailing<'a>(s: &'a str, * Splits a string into substrings using a character function, cutting at * most `count` times. */ +#[cfg(stage0)] pub fn each_splitn<'a>(s: &'a str, sepfn: &fn(char) -> bool, count: uint, it: &fn(&'a str) -> bool) { + each_split_inner(s, sepfn, count, true, true, it); +} +/** + * Splits a string into substrings using a character function, cutting at + * most `count` times. + */ +#[cfg(not(stage0))] +pub fn each_splitn<'a>(s: &'a str, + sepfn: &fn(char) -> bool, + count: uint, + it: &fn(&'a str) -> bool) -> bool { each_split_inner(s, sepfn, count, true, true, it) } /// Like `each_split`, but omits empty strings +#[cfg(stage0)] pub fn each_split_nonempty<'a>(s: &'a str, sepfn: &fn(char) -> bool, it: &fn(&'a str) -> bool) { + each_split_inner(s, sepfn, len(s), false, false, it); +} +/// Like `each_split`, but omits empty strings +#[cfg(not(stage0))] +pub fn each_split_nonempty<'a>(s: &'a str, + sepfn: &fn(char) -> bool, + it: &fn(&'a str) -> bool) -> bool { each_split_inner(s, sepfn, len(s), false, false, it) } @@ -663,14 +740,16 @@ fn each_split_inner<'a>(s: &'a str, count: uint, allow_empty: bool, allow_trailing_empty: bool, - it: &fn(&'a str) -> bool) { + it: &fn(&'a str) -> bool) -> bool { let l = len(s); let mut i = 0u, start = 0u, done = 0u; while i < l && done < count { let CharRange {ch, next} = char_range_at(s, i); if sepfn(ch) { if allow_empty || start < i { - if !it( unsafe{ raw::slice_bytes(s, start, i) } ) { return; } + if !it( unsafe{ raw::slice_bytes(s, start, i) } ) { + return false; + } } start = next; done += 1u; @@ -678,12 +757,15 @@ fn each_split_inner<'a>(s: &'a str, i = next; } if allow_trailing_empty || start < l { - if !it( unsafe{ raw::slice_bytes(s, start, l) } ) { return; } + if !it( unsafe{ raw::slice_bytes(s, start, l) } ) { return false; } } + return true; } // See Issue #1932 for why this is a naive search -fn iter_matches<'a,'b>(s: &'a str, sep: &'b str, f: &fn(uint, uint) -> bool) { +#[cfg(stage0)] +fn iter_matches<'a,'b>(s: &'a str, sep: &'b str, + f: &fn(uint, uint) -> bool) { let sep_len = len(sep), l = len(s); assert!(sep_len > 0u); let mut i = 0u, match_start = 0u, match_i = 0u; @@ -709,7 +791,38 @@ fn iter_matches<'a,'b>(s: &'a str, sep: &'b str, f: &fn(uint, uint) -> bool) { } } } +// See Issue #1932 for why this is a naive search +#[cfg(not(stage0))] +fn iter_matches<'a,'b>(s: &'a str, sep: &'b str, + f: &fn(uint, uint) -> bool) -> bool { + let sep_len = len(sep), l = len(s); + assert!(sep_len > 0u); + let mut i = 0u, match_start = 0u, match_i = 0u; + + while i < l { + if s[i] == sep[match_i] { + if match_i == 0u { match_start = i; } + match_i += 1u; + // Found a match + if match_i == sep_len { + if !f(match_start, i + 1u) { return false; } + match_i = 0u; + } + i += 1u; + } else { + // Failed match, backtrack + if match_i > 0u { + match_i = 0u; + i = match_start + 1u; + } else { + i += 1u; + } + } + } + return true; +} +#[cfg(stage0)] fn iter_between_matches<'a,'b>(s: &'a str, sep: &'b str, f: &fn(uint, uint) -> bool) { @@ -720,6 +833,17 @@ fn iter_between_matches<'a,'b>(s: &'a str, } f(last_end, len(s)); } +#[cfg(not(stage0))] +fn iter_between_matches<'a,'b>(s: &'a str, + sep: &'b str, + f: &fn(uint, uint) -> bool) -> bool { + let mut last_end = 0u; + for iter_matches(s, sep) |from, to| { + if !f(last_end, from) { return false; } + last_end = to; + } + return f(last_end, len(s)); +} /** * Splits a string into a vector of the substrings separated by a given string @@ -732,6 +856,7 @@ fn iter_between_matches<'a,'b>(s: &'a str, * assert!(v == ["", "XXX", "YYY", ""]); * ~~~ */ +#[cfg(stage0)] pub fn each_split_str<'a,'b>(s: &'a str, sep: &'b str, it: &fn(&'a str) -> bool) { @@ -739,7 +864,28 @@ pub fn each_split_str<'a,'b>(s: &'a str, if !it( unsafe { raw::slice_bytes(s, from, to) } ) { return; } } } +/** + * Splits a string into a vector of the substrings separated by a given string + * + * # Example + * + * ~~~ + * let mut v = ~[]; + * for each_split_str(".XXX.YYY.", ".") |subs| { v.push(subs); } + * assert!(v == ["", "XXX", "YYY", ""]); + * ~~~ + */ +#[cfg(not(stage0))] +pub fn each_split_str<'a,'b>(s: &'a str, + sep: &'b str, + it: &fn(&'a str) -> bool) -> bool { + for iter_between_matches(s, sep) |from, to| { + if !it( unsafe { raw::slice_bytes(s, from, to) } ) { return false; } + } + return true; +} +#[cfg(stage0)] pub fn each_split_str_nonempty<'a,'b>(s: &'a str, sep: &'b str, it: &fn(&'a str) -> bool) { @@ -750,6 +896,18 @@ pub fn each_split_str_nonempty<'a,'b>(s: &'a str, } } +#[cfg(not(stage0))] +pub fn each_split_str_nonempty<'a,'b>(s: &'a str, + sep: &'b str, + it: &fn(&'a str) -> bool) -> bool { + for iter_between_matches(s, sep) |from, to| { + if to > from { + if !it( unsafe { raw::slice_bytes(s, from, to) } ) { return false; } + } + } + return true; +} + /// Levenshtein Distance between two strings pub fn levdistance(s: &str, t: &str) -> uint { @@ -787,7 +945,15 @@ pub fn levdistance(s: &str, t: &str) -> uint { /** * Splits a string into substrings separated by LF ('\n'). */ +#[cfg(stage0)] pub fn each_line<'a>(s: &'a str, it: &fn(&'a str) -> bool) { + each_split_char_no_trailing(s, '\n', it); +} +/** + * Splits a string into substrings separated by LF ('\n'). + */ +#[cfg(not(stage0))] +pub fn each_line<'a>(s: &'a str, it: &fn(&'a str) -> bool) -> bool { each_split_char_no_trailing(s, '\n', it) } @@ -795,6 +961,7 @@ pub fn each_line<'a>(s: &'a str, it: &fn(&'a str) -> bool) { * Splits a string into substrings separated by LF ('\n') * and/or CR LF ("\r\n") */ +#[cfg(stage0)] pub fn each_line_any<'a>(s: &'a str, it: &fn(&'a str) -> bool) { for each_line(s) |s| { let l = s.len(); @@ -805,9 +972,31 @@ pub fn each_line_any<'a>(s: &'a str, it: &fn(&'a str) -> bool) { } } } +/** + * Splits a string into substrings separated by LF ('\n') + * and/or CR LF ("\r\n") + */ +#[cfg(not(stage0))] +pub fn each_line_any<'a>(s: &'a str, it: &fn(&'a str) -> bool) -> bool { + for each_line(s) |s| { + let l = s.len(); + if l > 0u && s[l - 1u] == '\r' as u8 { + if !it( unsafe { raw::slice_bytes(s, 0, l - 1) } ) { return false; } + } else { + if !it( s ) { return false; } + } + } + return true; +} /// Splits a string into substrings separated by whitespace +#[cfg(stage0)] pub fn each_word<'a>(s: &'a str, it: &fn(&'a str) -> bool) { + each_split_nonempty(s, char::is_whitespace, it); +} +/// Splits a string into substrings separated by whitespace +#[cfg(not(stage0))] +pub fn each_word<'a>(s: &'a str, it: &fn(&'a str) -> bool) -> bool { each_split_nonempty(s, char::is_whitespace, it) } @@ -820,9 +1009,9 @@ pub fn each_word<'a>(s: &'a str, it: &fn(&'a str) -> bool) { * Fails during iteration if the string contains a non-whitespace * sequence longer than the limit. */ -pub fn each_split_within<'a>(ss: &'a str, - lim: uint, - it: &fn(&'a str) -> bool) { +pub fn _each_split_within<'a>(ss: &'a str, + lim: uint, + it: &fn(&'a str) -> bool) -> bool { // Just for fun, let's write this as an state machine: enum SplitWithinState { @@ -880,6 +1069,20 @@ pub fn each_split_within<'a>(ss: &'a str, machine(fake_i, ' '); fake_i += 1; } + return cont; +} + +#[cfg(stage0)] +pub fn each_split_within<'a>(ss: &'a str, + lim: uint, + it: &fn(&'a str) -> bool) { + _each_split_within(ss, lim, it); +} +#[cfg(not(stage0))] +pub fn each_split_within<'a>(ss: &'a str, + lim: uint, + it: &fn(&'a str) -> bool) -> bool { + _each_split_within(ss, lim, it) } /** @@ -1158,12 +1361,20 @@ pub fn map(ss: &str, ff: &fn(char) -> char) -> ~str { /// Iterate over the bytes in a string #[inline(always)] +#[cfg(stage0)] pub fn each(s: &str, it: &fn(u8) -> bool) { eachi(s, |_i, b| it(b)) } +/// Iterate over the bytes in a string +#[inline(always)] +#[cfg(not(stage0))] +pub fn each(s: &str, it: &fn(u8) -> bool) -> bool { + eachi(s, |_i, b| it(b)) +} /// Iterate over the bytes in a string, with indices #[inline(always)] +#[cfg(stage0)] pub fn eachi(s: &str, it: &fn(uint, u8) -> bool) { let mut pos = 0; let len = s.len(); @@ -1174,14 +1385,36 @@ pub fn eachi(s: &str, it: &fn(uint, u8) -> bool) { } } +/// Iterate over the bytes in a string, with indices +#[inline(always)] +#[cfg(not(stage0))] +pub fn eachi(s: &str, it: &fn(uint, u8) -> bool) -> bool { + let mut pos = 0; + let len = s.len(); + + while pos < len { + if !it(pos, s[pos]) { return false; } + pos += 1; + } + return true; +} + /// Iterate over the bytes in a string in reverse #[inline(always)] +#[cfg(stage0)] pub fn each_reverse(s: &str, it: &fn(u8) -> bool) { eachi_reverse(s, |_i, b| it(b) ) } +/// Iterate over the bytes in a string in reverse +#[inline(always)] +#[cfg(not(stage0))] +pub fn each_reverse(s: &str, it: &fn(u8) -> bool) -> bool { + eachi_reverse(s, |_i, b| it(b) ) +} /// Iterate over the bytes in a string in reverse, with indices #[inline(always)] +#[cfg(stage0)] pub fn eachi_reverse(s: &str, it: &fn(uint, u8) -> bool) { let mut pos = s.len(); while pos > 0 { @@ -1189,9 +1422,21 @@ pub fn eachi_reverse(s: &str, it: &fn(uint, u8) -> bool) { if !it(pos, s[pos]) { break; } } } +/// Iterate over the bytes in a string in reverse, with indices +#[inline(always)] +#[cfg(not(stage0))] +pub fn eachi_reverse(s: &str, it: &fn(uint, u8) -> bool) -> bool { + let mut pos = s.len(); + while pos > 0 { + pos -= 1; + if !it(pos, s[pos]) { return false; } + } + return true; +} /// Iterate over each char of a string, without allocating #[inline(always)] +#[cfg(stage0)] pub fn each_char(s: &str, it: &fn(char) -> bool) { let mut i = 0; let len = len(s); @@ -1201,9 +1446,23 @@ pub fn each_char(s: &str, it: &fn(char) -> bool) { i = next; } } +/// Iterate over each char of a string, without allocating +#[inline(always)] +#[cfg(not(stage0))] +pub fn each_char(s: &str, it: &fn(char) -> bool) -> bool { + let mut i = 0; + let len = len(s); + while i < len { + let CharRange {ch, next} = char_range_at(s, i); + if !it(ch) { return false; } + i = next; + } + return true; +} /// Iterates over the chars in a string, with indices #[inline(always)] +#[cfg(stage0)] pub fn each_chari(s: &str, it: &fn(uint, char) -> bool) { let mut pos = 0; let mut ch_pos = 0u; @@ -1215,15 +1474,38 @@ pub fn each_chari(s: &str, it: &fn(uint, char) -> bool) { ch_pos += 1u; } } +/// Iterates over the chars in a string, with indices +#[inline(always)] +#[cfg(not(stage0))] +pub fn each_chari(s: &str, it: &fn(uint, char) -> bool) -> bool { + let mut pos = 0; + let mut ch_pos = 0u; + let len = s.len(); + while pos < len { + let CharRange {ch, next} = char_range_at(s, pos); + pos = next; + if !it(ch_pos, ch) { return false; } + ch_pos += 1u; + } + return true; +} /// Iterates over the chars in a string in reverse #[inline(always)] +#[cfg(stage0)] pub fn each_char_reverse(s: &str, it: &fn(char) -> bool) { each_chari_reverse(s, |_, c| it(c)) } +/// Iterates over the chars in a string in reverse +#[inline(always)] +#[cfg(not(stage0))] +pub fn each_char_reverse(s: &str, it: &fn(char) -> bool) -> bool { + each_chari_reverse(s, |_, c| it(c)) +} // Iterates over the chars in a string in reverse, with indices #[inline(always)] +#[cfg(stage0)] pub fn each_chari_reverse(s: &str, it: &fn(uint, char) -> bool) { let mut pos = s.len(); let mut ch_pos = s.char_len(); @@ -1236,6 +1518,21 @@ pub fn each_chari_reverse(s: &str, it: &fn(uint, char) -> bool) { } } +// Iterates over the chars in a string in reverse, with indices +#[inline(always)] +#[cfg(not(stage0))] +pub fn each_chari_reverse(s: &str, it: &fn(uint, char) -> bool) -> bool { + let mut pos = s.len(); + let mut ch_pos = s.char_len(); + while pos > 0 { + let CharRange {ch, next} = char_range_at_reverse(s, pos); + pos = next; + ch_pos -= 1; + + if !it(ch_pos, ch) { return false; } + } + return true; +} /* Section: Searching @@ -2473,14 +2770,22 @@ pub trait StrSlice<'self> { fn contains<'a>(&self, needle: &'a str) -> bool; fn contains_char(&self, needle: char) -> bool; fn char_iter(&self) -> StrCharIterator<'self>; - fn each(&self, it: &fn(u8) -> bool); - fn eachi(&self, it: &fn(uint, u8) -> bool); - fn each_reverse(&self, it: &fn(u8) -> bool); - fn eachi_reverse(&self, it: &fn(uint, u8) -> bool); - fn each_char(&self, it: &fn(char) -> bool); - fn each_chari(&self, it: &fn(uint, char) -> bool); - fn each_char_reverse(&self, it: &fn(char) -> bool); - fn each_chari_reverse(&self, it: &fn(uint, char) -> bool); + #[cfg(stage0)] fn each(&self, it: &fn(u8) -> bool); + #[cfg(not(stage0))] fn each(&self, it: &fn(u8) -> bool) -> bool; + #[cfg(stage0)] fn eachi(&self, it: &fn(uint, u8) -> bool); + #[cfg(not(stage0))] fn eachi(&self, it: &fn(uint, u8) -> bool) -> bool; + #[cfg(stage0)] fn each_reverse(&self, it: &fn(u8) -> bool); + #[cfg(not(stage0))] fn each_reverse(&self, it: &fn(u8) -> bool) -> bool; + #[cfg(stage0)] fn eachi_reverse(&self, it: &fn(uint, u8) -> bool); + #[cfg(not(stage0))] fn eachi_reverse(&self, it: &fn(uint, u8) -> bool) -> bool; + #[cfg(stage0)] fn each_char(&self, it: &fn(char) -> bool); + #[cfg(not(stage0))] fn each_char(&self, it: &fn(char) -> bool) -> bool; + #[cfg(stage0)] fn each_chari(&self, it: &fn(uint, char) -> bool); + #[cfg(not(stage0))] fn each_chari(&self, it: &fn(uint, char) -> bool) -> bool; + #[cfg(stage0)] fn each_char_reverse(&self, it: &fn(char) -> bool); + #[cfg(not(stage0))] fn each_char_reverse(&self, it: &fn(char) -> bool) -> bool; + #[cfg(stage0)] fn each_chari_reverse(&self, it: &fn(uint, char) -> bool); + #[cfg(not(stage0))] fn each_chari_reverse(&self, it: &fn(uint, char) -> bool) -> bool; fn ends_with(&self, needle: &str) -> bool; fn is_empty(&self) -> bool; fn is_whitespace(&self) -> bool; @@ -2488,9 +2793,18 @@ pub trait StrSlice<'self> { fn len(&self) -> uint; fn char_len(&self) -> uint; fn slice(&self, begin: uint, end: uint) -> &'self str; + #[cfg(stage0)] fn each_split(&self, sepfn: &fn(char) -> bool, it: &fn(&'self str) -> bool); + #[cfg(not(stage0))] + fn each_split(&self, sepfn: &fn(char) -> bool, it: &fn(&'self str) -> bool) -> bool; + #[cfg(stage0)] fn each_split_char(&self, sep: char, it: &fn(&'self str) -> bool); + #[cfg(not(stage0))] + fn each_split_char(&self, sep: char, it: &fn(&'self str) -> bool) -> bool; + #[cfg(stage0)] fn each_split_str<'a>(&self, sep: &'a str, it: &fn(&'self str) -> bool); + #[cfg(not(stage0))] + fn each_split_str<'a>(&self, sep: &'a str, it: &fn(&'self str) -> bool) -> bool; fn starts_with<'a>(&self, needle: &'a str) -> bool; fn substr(&self, begin: uint, n: uint) -> &'self str; fn escape_default(&self) -> ~str; @@ -2543,39 +2857,86 @@ impl<'self> StrSlice<'self> for &'self str { /// Iterate over the bytes in a string #[inline] + #[cfg(stage0)] fn each(&self, it: &fn(u8) -> bool) { each(*self, it) } + /// Iterate over the bytes in a string + #[inline] + #[cfg(not(stage0))] + fn each(&self, it: &fn(u8) -> bool) -> bool { each(*self, it) } /// Iterate over the bytes in a string, with indices #[inline] + #[cfg(stage0)] fn eachi(&self, it: &fn(uint, u8) -> bool) { eachi(*self, it) } + /// Iterate over the bytes in a string, with indices + #[inline] + #[cfg(not(stage0))] + fn eachi(&self, it: &fn(uint, u8) -> bool) -> bool { eachi(*self, it) } /// Iterate over the bytes in a string #[inline] - fn each_reverse(&self, it: &fn(u8) -> bool) { - each_reverse(*self, it) - } + #[cfg(stage0)] + fn each_reverse(&self, it: &fn(u8) -> bool) { each_reverse(*self, it) } + /// Iterate over the bytes in a string + #[inline] + #[cfg(not(stage0))] + fn each_reverse(&self, it: &fn(u8) -> bool) -> bool { each_reverse(*self, it) } /// Iterate over the bytes in a string, with indices #[inline] + #[cfg(stage0)] fn eachi_reverse(&self, it: &fn(uint, u8) -> bool) { eachi_reverse(*self, it) } + /// Iterate over the bytes in a string, with indices + #[inline] + #[cfg(not(stage0))] + fn eachi_reverse(&self, it: &fn(uint, u8) -> bool) -> bool { + eachi_reverse(*self, it) + } /// Iterate over the chars in a string #[inline] + #[cfg(stage0)] fn each_char(&self, it: &fn(char) -> bool) { each_char(*self, it) } + /// Iterate over the chars in a string + #[inline] + #[cfg(not(stage0))] + fn each_char(&self, it: &fn(char) -> bool) -> bool { each_char(*self, it) } /// Iterate over the chars in a string, with indices #[inline] + #[cfg(stage0)] fn each_chari(&self, it: &fn(uint, char) -> bool) { each_chari(*self, it) } + /// Iterate over the chars in a string, with indices + #[inline] + #[cfg(not(stage0))] + fn each_chari(&self, it: &fn(uint, char) -> bool) -> bool { + each_chari(*self, it) + } /// Iterate over the chars in a string in reverse #[inline] + #[cfg(stage0)] fn each_char_reverse(&self, it: &fn(char) -> bool) { each_char_reverse(*self, it) } + /// Iterate over the chars in a string in reverse + #[inline] + #[cfg(not(stage0))] + fn each_char_reverse(&self, it: &fn(char) -> bool) -> bool { + each_char_reverse(*self, it) + } /// Iterate over the chars in a string in reverse, with indices from the /// end #[inline] + #[cfg(stage0)] fn each_chari_reverse(&self, it: &fn(uint, char) -> bool) { each_chari_reverse(*self, it) } + /// Iterate over the chars in a string in reverse, with indices from the + /// end + #[inline] + #[cfg(not(stage0))] + fn each_chari_reverse(&self, it: &fn(uint, char) -> bool) -> bool { + each_chari_reverse(*self, it) + } /// Returns true if one string ends with another #[inline] fn ends_with(&self, needle: &str) -> bool { @@ -2617,24 +2978,50 @@ impl<'self> StrSlice<'self> for &'self str { } /// Splits a string into substrings using a character function #[inline] + #[cfg(stage0)] fn each_split(&self, sepfn: &fn(char) -> bool, it: &fn(&'self str) -> bool) { each_split(*self, sepfn, it) } + /// Splits a string into substrings using a character function + #[inline] + #[cfg(not(stage0))] + fn each_split(&self, sepfn: &fn(char) -> bool, it: &fn(&'self str) -> bool) -> bool { + each_split(*self, sepfn, it) + } /** * Splits a string into substrings at each occurrence of a given character */ #[inline] + #[cfg(stage0)] fn each_split_char(&self, sep: char, it: &fn(&'self str) -> bool) { each_split_char(*self, sep, it) } + /** + * Splits a string into substrings at each occurrence of a given character + */ + #[inline] + #[cfg(not(stage0))] + fn each_split_char(&self, sep: char, it: &fn(&'self str) -> bool) -> bool { + each_split_char(*self, sep, it) + } /** * Splits a string into a vector of the substrings separated by a given * string */ #[inline] + #[cfg(stage0)] fn each_split_str<'a>(&self, sep: &'a str, it: &fn(&'self str) -> bool) { each_split_str(*self, sep, it) } + /** + * Splits a string into a vector of the substrings separated by a given + * string + */ + #[inline] + #[cfg(not(stage0))] + fn each_split_str<'a>(&self, sep: &'a str, it: &fn(&'self str) -> bool) -> bool { + each_split_str(*self, sep, it) + } /// Returns true if one string starts with another #[inline] fn starts_with<'a>(&self, needle: &'a str) -> bool { diff --git a/src/libcore/task/spawn.rs b/src/libcore/task/spawn.rs index 19c417dfdfc95..846d4a349508b 100644 --- a/src/libcore/task/spawn.rs +++ b/src/libcore/task/spawn.rs @@ -110,9 +110,14 @@ fn taskset_remove(tasks: &mut TaskSet, task: *rust_task) { let was_present = tasks.remove(&task); assert!(was_present); } +#[cfg(stage0)] pub fn taskset_each(tasks: &TaskSet, blk: &fn(v: *rust_task) -> bool) { tasks.each(|k| blk(*k)) } +#[cfg(not(stage0))] +pub fn taskset_each(tasks: &TaskSet, blk: &fn(v: *rust_task) -> bool) -> bool { + tasks.each(|k| blk(*k)) +} // One of these per group of linked-failure tasks. struct TaskGroupData { @@ -685,13 +690,11 @@ fn spawn_raw_oldsched(mut opts: TaskOpts, f: ~fn()) { }; // Attempt to join every ancestor group. result = - for each_ancestor(ancestors, Some(bail)) |ancestor_tg| { + each_ancestor(ancestors, Some(bail), |ancestor_tg| { // Enlist as a descendant, not as an actual member. // Descendants don't kill ancestor groups on failure. - if !enlist_in_taskgroup(ancestor_tg, child, false) { - break; - } - }; + enlist_in_taskgroup(ancestor_tg, child, false) + }); // If any ancestor group fails, need to exit this group too. if !result { do access_group(child_arc) |child_tg| { diff --git a/src/libcore/to_bytes.rs b/src/libcore/to_bytes.rs index 9e4da7ab48868..182a03da4b1c6 100644 --- a/src/libcore/to_bytes.rs +++ b/src/libcore/to_bytes.rs @@ -21,6 +21,11 @@ use str; pub type Cb<'self> = &'self fn(buf: &[u8]) -> bool; +#[cfg(stage0)] +pub trait IterBytes { + fn iter_bytes(&self, lsb0: bool, f: Cb); +} + /** * A trait to implement in order to make a type hashable; * This works in combination with the trait `Hash::Hash`, and @@ -28,6 +33,7 @@ pub type Cb<'self> = &'self fn(buf: &[u8]) -> bool; * modified when default methods and trait inheritence are * completed. */ +#[cfg(not(stage0))] pub trait IterBytes { /** * Call the provided callback `f` one or more times with @@ -43,9 +49,10 @@ pub trait IterBytes { * left-to-right in declaration order, regardless of * underlying memory endianness. */ - fn iter_bytes(&self, lsb0: bool, f: Cb); + fn iter_bytes(&self, lsb0: bool, f: Cb) -> bool; } +#[cfg(stage0)] impl IterBytes for bool { #[inline(always)] fn iter_bytes(&self, _lsb0: bool, f: Cb) { @@ -54,7 +61,17 @@ impl IterBytes for bool { ]); } } +#[cfg(not(stage0))] +impl IterBytes for bool { + #[inline(always)] + fn iter_bytes(&self, _lsb0: bool, f: Cb) -> bool { + f([ + *self as u8 + ]) + } +} +#[cfg(stage0)] impl IterBytes for u8 { #[inline(always)] fn iter_bytes(&self, _lsb0: bool, f: Cb) { @@ -63,7 +80,17 @@ impl IterBytes for u8 { ]); } } +#[cfg(not(stage0))] +impl IterBytes for u8 { + #[inline(always)] + fn iter_bytes(&self, _lsb0: bool, f: Cb) -> bool { + f([ + *self + ]) + } +} +#[cfg(stage0)] impl IterBytes for u16 { #[inline(always)] fn iter_bytes(&self, lsb0: bool, f: Cb) { @@ -80,7 +107,25 @@ impl IterBytes for u16 { } } } +#[cfg(not(stage0))] +impl IterBytes for u16 { + #[inline(always)] + fn iter_bytes(&self, lsb0: bool, f: Cb) -> bool { + if lsb0 { + f([ + *self as u8, + (*self >> 8) as u8 + ]) + } else { + f([ + (*self >> 8) as u8, + *self as u8 + ]) + } + } +} +#[cfg(stage0)] impl IterBytes for u32 { #[inline(always)] fn iter_bytes(&self, lsb0: bool, f: Cb) { @@ -101,7 +146,29 @@ impl IterBytes for u32 { } } } +#[cfg(not(stage0))] +impl IterBytes for u32 { + #[inline(always)] + fn iter_bytes(&self, lsb0: bool, f: Cb) -> bool { + if lsb0 { + f([ + *self as u8, + (*self >> 8) as u8, + (*self >> 16) as u8, + (*self >> 24) as u8, + ]) + } else { + f([ + (*self >> 24) as u8, + (*self >> 16) as u8, + (*self >> 8) as u8, + *self as u8 + ]) + } + } +} +#[cfg(stage0)] impl IterBytes for u64 { #[inline(always)] fn iter_bytes(&self, lsb0: bool, f: Cb) { @@ -130,73 +197,157 @@ impl IterBytes for u64 { } } } +#[cfg(not(stage0))] +impl IterBytes for u64 { + #[inline(always)] + fn iter_bytes(&self, lsb0: bool, f: Cb) -> bool { + if lsb0 { + f([ + *self as u8, + (*self >> 8) as u8, + (*self >> 16) as u8, + (*self >> 24) as u8, + (*self >> 32) as u8, + (*self >> 40) as u8, + (*self >> 48) as u8, + (*self >> 56) as u8 + ]) + } else { + f([ + (*self >> 56) as u8, + (*self >> 48) as u8, + (*self >> 40) as u8, + (*self >> 32) as u8, + (*self >> 24) as u8, + (*self >> 16) as u8, + (*self >> 8) as u8, + *self as u8 + ]) + } + } +} +#[cfg(stage0)] impl IterBytes for i8 { #[inline(always)] fn iter_bytes(&self, lsb0: bool, f: Cb) { (*self as u8).iter_bytes(lsb0, f) } } +#[cfg(not(stage0))] +impl IterBytes for i8 { + #[inline(always)] + fn iter_bytes(&self, lsb0: bool, f: Cb) -> bool { + (*self as u8).iter_bytes(lsb0, f) + } +} +#[cfg(stage0)] impl IterBytes for i16 { #[inline(always)] fn iter_bytes(&self, lsb0: bool, f: Cb) { (*self as u16).iter_bytes(lsb0, f) } } +#[cfg(not(stage0))] +impl IterBytes for i16 { + #[inline(always)] + fn iter_bytes(&self, lsb0: bool, f: Cb) -> bool { + (*self as u16).iter_bytes(lsb0, f) + } +} +#[cfg(stage0)] impl IterBytes for i32 { #[inline(always)] fn iter_bytes(&self, lsb0: bool, f: Cb) { (*self as u32).iter_bytes(lsb0, f) } } +#[cfg(not(stage0))] +impl IterBytes for i32 { + #[inline(always)] + fn iter_bytes(&self, lsb0: bool, f: Cb) -> bool { + (*self as u32).iter_bytes(lsb0, f) + } +} +#[cfg(stage0)] impl IterBytes for i64 { #[inline(always)] fn iter_bytes(&self, lsb0: bool, f: Cb) { (*self as u64).iter_bytes(lsb0, f) } } +#[cfg(not(stage0))] +impl IterBytes for i64 { + #[inline(always)] + fn iter_bytes(&self, lsb0: bool, f: Cb) -> bool { + (*self as u64).iter_bytes(lsb0, f) + } +} +#[cfg(stage0)] impl IterBytes for char { #[inline(always)] fn iter_bytes(&self, lsb0: bool, f: Cb) { (*self as u32).iter_bytes(lsb0, f) } } - -#[cfg(target_word_size = "32")] -pub mod x32 { - use to_bytes::{Cb, IterBytes}; - - impl IterBytes for uint { - #[inline(always)] - fn iter_bytes(&self, lsb0: bool, f: Cb) { - (*self as u32).iter_bytes(lsb0, f) - } +#[cfg(not(stage0))] +impl IterBytes for char { + #[inline(always)] + fn iter_bytes(&self, lsb0: bool, f: Cb) -> bool { + (*self as u32).iter_bytes(lsb0, f) } } -#[cfg(target_word_size = "64")] -pub mod x64 { - use to_bytes::{Cb, IterBytes}; +#[cfg(target_word_size = "32", stage0)] +impl IterBytes for uint { + #[inline(always)] + fn iter_bytes(&self, lsb0: bool, f: Cb) { + (*self as u32).iter_bytes(lsb0, f) + } +} +#[cfg(target_word_size = "32", not(stage0))] +impl IterBytes for uint { + #[inline(always)] + fn iter_bytes(&self, lsb0: bool, f: Cb) -> bool { + (*self as u32).iter_bytes(lsb0, f) + } +} - impl IterBytes for uint { - #[inline(always)] - fn iter_bytes(&self, lsb0: bool, f: Cb) { - (*self as u64).iter_bytes(lsb0, f) - } +#[cfg(target_word_size = "64", stage0)] +impl IterBytes for uint { + #[inline(always)] + fn iter_bytes(&self, lsb0: bool, f: Cb) { + (*self as u64).iter_bytes(lsb0, f) + } +} +#[cfg(target_word_size = "64", not(stage0))] +impl IterBytes for uint { + #[inline(always)] + fn iter_bytes(&self, lsb0: bool, f: Cb) -> bool { + (*self as u64).iter_bytes(lsb0, f) } } +#[cfg(stage0)] impl IterBytes for int { #[inline(always)] fn iter_bytes(&self, lsb0: bool, f: Cb) { (*self as uint).iter_bytes(lsb0, f) } } +#[cfg(not(stage0))] +impl IterBytes for int { + #[inline(always)] + fn iter_bytes(&self, lsb0: bool, f: Cb) -> bool { + (*self as uint).iter_bytes(lsb0, f) + } +} +#[cfg(stage0)] impl<'self,A:IterBytes> IterBytes for &'self [A] { #[inline(always)] fn iter_bytes(&self, lsb0: bool, f: Cb) { @@ -207,7 +358,15 @@ impl<'self,A:IterBytes> IterBytes for &'self [A] { } } } +#[cfg(not(stage0))] +impl<'self,A:IterBytes> IterBytes for &'self [A] { + #[inline(always)] + fn iter_bytes(&self, lsb0: bool, f: Cb) -> bool { + self.each(|elt| elt.iter_bytes(lsb0, |b| f(b))) + } +} +#[cfg(stage0)] impl IterBytes for (A,B) { #[inline(always)] fn iter_bytes(&self, lsb0: bool, f: Cb) { @@ -218,7 +377,17 @@ impl IterBytes for (A,B) { } } } +#[cfg(not(stage0))] +impl IterBytes for (A,B) { + #[inline(always)] + fn iter_bytes(&self, lsb0: bool, f: Cb) -> bool { + match *self { + (ref a, ref b) => { a.iter_bytes(lsb0, f) && b.iter_bytes(lsb0, f) } + } + } +} +#[cfg(stage0)] impl IterBytes for (A,B,C) { #[inline(always)] fn iter_bytes(&self, lsb0: bool, f: Cb) { @@ -229,26 +398,57 @@ impl IterBytes for (A,B,C) { } } } +#[cfg(not(stage0))] +impl IterBytes for (A,B,C) { + #[inline(always)] + fn iter_bytes(&self, lsb0: bool, f: Cb) -> bool { + match *self { + (ref a, ref b, ref c) => { + a.iter_bytes(lsb0, f) && b.iter_bytes(lsb0, f) && c.iter_bytes(lsb0, f) + } + } + } +} // Move this to vec, probably. fn borrow<'x,A>(a: &'x [A]) -> &'x [A] { a } +#[cfg(stage0)] impl IterBytes for ~[A] { #[inline(always)] fn iter_bytes(&self, lsb0: bool, f: Cb) { borrow(*self).iter_bytes(lsb0, f) } } +#[cfg(not(stage0))] +impl IterBytes for ~[A] { + #[inline(always)] + fn iter_bytes(&self, lsb0: bool, f: Cb) -> bool { + borrow(*self).iter_bytes(lsb0, f) + } +} +#[cfg(stage0)] impl IterBytes for @[A] { #[inline(always)] fn iter_bytes(&self, lsb0: bool, f: Cb) { borrow(*self).iter_bytes(lsb0, f) } } +#[cfg(not(stage0))] +impl IterBytes for @[A] { + #[inline(always)] + fn iter_bytes(&self, lsb0: bool, f: Cb) -> bool { + borrow(*self).iter_bytes(lsb0, f) + } +} + +// NOTE: remove all of these after a snapshot, the new for-loop iteration +// protocol makes these unnecessary. +#[cfg(stage0)] pub fn iter_bytes_2(a: &A, b: &B, lsb0: bool, z: Cb) { let mut flag = true; @@ -256,11 +456,17 @@ pub fn iter_bytes_2(a: &A, b: &B, if !flag { return; } b.iter_bytes(lsb0, |bytes| {flag = z(bytes); flag}); } +#[cfg(not(stage0))] +pub fn iter_bytes_2(a: &A, b: &B, + lsb0: bool, z: Cb) -> bool { + a.iter_bytes(lsb0, z) && b.iter_bytes(lsb0, z) +} +#[cfg(stage0)] pub fn iter_bytes_3(a: &A, b: &B, c: &C, - lsb0: bool, z: Cb) { + B: IterBytes, + C: IterBytes>(a: &A, b: &B, c: &C, + lsb0: bool, z: Cb) { let mut flag = true; a.iter_bytes(lsb0, |bytes| {flag = z(bytes); flag}); if !flag { return; } @@ -268,7 +474,14 @@ pub fn iter_bytes_3(a: &A, b: &B, c: &C, lsb0: bool, z: Cb) -> bool { + a.iter_bytes(lsb0, z) && b.iter_bytes(lsb0, z) && c.iter_bytes(lsb0, z) +} +#[cfg(stage0)] pub fn iter_bytes_4(a: &A, b: &B, c: &C, - d: &D, e: &E, - lsb0: bool, z: Cb) { - let mut flag = true; - a.iter_bytes(lsb0, |bytes| {flag = z(bytes); flag}); - if !flag { return; } - b.iter_bytes(lsb0, |bytes| {flag = z(bytes); flag}); - if !flag { return; } - c.iter_bytes(lsb0, |bytes| {flag = z(bytes); flag}); - if !flag { return; } - d.iter_bytes(lsb0, |bytes| {flag = z(bytes); flag}); - if !flag { return; } - e.iter_bytes(lsb0, |bytes| {flag = z(bytes); flag}); + D: IterBytes>(a: &A, b: &B, c: &C, + d: &D, + lsb0: bool, z: Cb) -> bool { + a.iter_bytes(lsb0, z) && b.iter_bytes(lsb0, z) && c.iter_bytes(lsb0, z) && + d.iter_bytes(lsb0, z) } -pub fn iter_bytes_6(a: &A, b: &B, c: &C, - d: &D, e: &E, f: &F, + E: IterBytes>(a: &A, b: &B, c: &C, + d: &D, e: &E, lsb0: bool, z: Cb) { let mut flag = true; a.iter_bytes(lsb0, |bytes| {flag = z(bytes); flag}); @@ -322,36 +526,20 @@ pub fn iter_bytes_6(a: &A, b: &B, c: &C, - d: &D, e: &E, f: &F, - g: &G, - lsb0: bool, z: Cb) { - let mut flag = true; - a.iter_bytes(lsb0, |bytes| {flag = z(bytes); flag}); - if !flag { return; } - b.iter_bytes(lsb0, |bytes| {flag = z(bytes); flag}); - if !flag { return; } - c.iter_bytes(lsb0, |bytes| {flag = z(bytes); flag}); - if !flag { return; } - d.iter_bytes(lsb0, |bytes| {flag = z(bytes); flag}); - if !flag { return; } - e.iter_bytes(lsb0, |bytes| {flag = z(bytes); flag}); - if !flag { return; } - f.iter_bytes(lsb0, |bytes| {flag = z(bytes); flag}); - if !flag { return; } - g.iter_bytes(lsb0, |bytes| {flag = z(bytes); flag}); + E: IterBytes>(a: &A, b: &B, c: &C, + d: &D, e: &E, + lsb0: bool, z: Cb) -> bool { + a.iter_bytes(lsb0, z) && b.iter_bytes(lsb0, z) && c.iter_bytes(lsb0, z) && + d.iter_bytes(lsb0, z) && e.iter_bytes(lsb0, z) } +#[cfg(stage0)] impl<'self> IterBytes for &'self str { #[inline(always)] fn iter_bytes(&self, _lsb0: bool, f: Cb) { @@ -360,7 +548,17 @@ impl<'self> IterBytes for &'self str { } } } +#[cfg(not(stage0))] +impl<'self> IterBytes for &'self str { + #[inline(always)] + fn iter_bytes(&self, _lsb0: bool, f: Cb) -> bool { + do str::byte_slice(*self) |bytes| { + f(bytes) + } + } +} +#[cfg(stage0)] impl IterBytes for ~str { #[inline(always)] fn iter_bytes(&self, _lsb0: bool, f: Cb) { @@ -369,7 +567,17 @@ impl IterBytes for ~str { } } } +#[cfg(not(stage0))] +impl IterBytes for ~str { + #[inline(always)] + fn iter_bytes(&self, _lsb0: bool, f: Cb) -> bool { + do str::byte_slice(*self) |bytes| { + f(bytes) + } + } +} +#[cfg(stage0)] impl IterBytes for @str { #[inline(always)] fn iter_bytes(&self, _lsb0: bool, f: Cb) { @@ -378,7 +586,17 @@ impl IterBytes for @str { } } } +#[cfg(not(stage0))] +impl IterBytes for @str { + #[inline(always)] + fn iter_bytes(&self, _lsb0: bool, f: Cb) -> bool { + do str::byte_slice(*self) |bytes| { + f(bytes) + } + } +} +#[cfg(stage0)] impl IterBytes for Option { #[inline(always)] fn iter_bytes(&self, lsb0: bool, f: Cb) { @@ -388,36 +606,80 @@ impl IterBytes for Option { } } } +#[cfg(not(stage0))] +impl IterBytes for Option { + #[inline(always)] + fn iter_bytes(&self, lsb0: bool, f: Cb) -> bool { + match *self { + Some(ref a) => 0u8.iter_bytes(lsb0, f) && a.iter_bytes(lsb0, f), + None => 1u8.iter_bytes(lsb0, f) + } + } +} +#[cfg(stage0)] impl<'self,A:IterBytes> IterBytes for &'self A { #[inline(always)] fn iter_bytes(&self, lsb0: bool, f: Cb) { (**self).iter_bytes(lsb0, f); } } +#[cfg(not(stage0))] +impl<'self,A:IterBytes> IterBytes for &'self A { + #[inline(always)] + fn iter_bytes(&self, lsb0: bool, f: Cb) -> bool { + (**self).iter_bytes(lsb0, f) + } +} +#[cfg(stage0)] impl IterBytes for @A { #[inline(always)] fn iter_bytes(&self, lsb0: bool, f: Cb) { (**self).iter_bytes(lsb0, f); } } +#[cfg(not(stage0))] +impl IterBytes for @A { + #[inline(always)] + fn iter_bytes(&self, lsb0: bool, f: Cb) -> bool { + (**self).iter_bytes(lsb0, f) + } +} +#[cfg(stage0)] impl IterBytes for ~A { #[inline(always)] fn iter_bytes(&self, lsb0: bool, f: Cb) { (**self).iter_bytes(lsb0, f); } } +#[cfg(not(stage0))] +impl IterBytes for ~A { + #[inline(always)] + fn iter_bytes(&self, lsb0: bool, f: Cb) -> bool { + (**self).iter_bytes(lsb0, f) + } +} // NB: raw-pointer IterBytes does _not_ dereference // to the target; it just gives you the pointer-bytes. +#[cfg(stage0)] impl IterBytes for *const A { #[inline(always)] fn iter_bytes(&self, lsb0: bool, f: Cb) { (*self as uint).iter_bytes(lsb0, f); } } +// NB: raw-pointer IterBytes does _not_ dereference +// to the target; it just gives you the pointer-bytes. +#[cfg(not(stage0))] +impl IterBytes for *const A { + #[inline(always)] + fn iter_bytes(&self, lsb0: bool, f: Cb) -> bool { + (*self as uint).iter_bytes(lsb0, f) + } +} pub trait ToBytes { fn to_bytes(&self, lsb0: bool) -> ~[u8]; diff --git a/src/libcore/trie.rs b/src/libcore/trie.rs index af1c1aa83c3d1..05ef1cf433faf 100644 --- a/src/libcore/trie.rs +++ b/src/libcore/trie.rs @@ -57,28 +57,60 @@ impl Map for TrieMap { /// Visit all key-value pairs in order #[inline(always)] + #[cfg(stage0)] fn each<'a>(&'a self, f: &fn(&uint, &'a T) -> bool) { self.root.each(f); } + /// Visit all key-value pairs in order + #[inline(always)] + #[cfg(not(stage0))] + fn each<'a>(&'a self, f: &fn(&uint, &'a T) -> bool) -> bool { + self.root.each(f) + } + /// Visit all keys in order #[inline(always)] + #[cfg(stage0)] fn each_key(&self, f: &fn(&uint) -> bool) { self.each(|k, _| f(k)) } + /// Visit all keys in order + #[inline(always)] + #[cfg(not(stage0))] + fn each_key(&self, f: &fn(&uint) -> bool) -> bool { + self.each(|k, _| f(k)) + } + /// Visit all values in order #[inline(always)] + #[cfg(stage0)] fn each_value<'a>(&'a self, f: &fn(&'a T) -> bool) { self.each(|_, v| f(v)) } + /// Visit all values in order + #[inline(always)] + #[cfg(not(stage0))] + fn each_value<'a>(&'a self, f: &fn(&'a T) -> bool) -> bool { + self.each(|_, v| f(v)) + } + /// Iterate over the map and mutate the contained values #[inline(always)] + #[cfg(stage0)] fn mutate_values(&mut self, f: &fn(&uint, &mut T) -> bool) { self.root.mutate_values(f); } + /// Iterate over the map and mutate the contained values + #[inline(always)] + #[cfg(not(stage0))] + fn mutate_values(&mut self, f: &fn(&uint, &mut T) -> bool) -> bool { + self.root.mutate_values(f) + } + /// Return a reference to the value corresponding to the key #[inline(hint)] fn find<'a>(&'a self, key: &uint) -> Option<&'a T> { @@ -151,21 +183,43 @@ pub impl TrieMap { /// Visit all key-value pairs in reverse order #[inline(always)] + #[cfg(stage0)] fn each_reverse<'a>(&'a self, f: &fn(&uint, &'a T) -> bool) { self.root.each_reverse(f); } + /// Visit all key-value pairs in reverse order + #[inline(always)] + #[cfg(not(stage0))] + fn each_reverse<'a>(&'a self, f: &fn(&uint, &'a T) -> bool) -> bool { + self.root.each_reverse(f) + } + /// Visit all keys in reverse order #[inline(always)] + #[cfg(stage0)] fn each_key_reverse(&self, f: &fn(&uint) -> bool) { self.each_reverse(|k, _| f(k)) } + /// Visit all keys in reverse order + #[inline(always)] + #[cfg(not(stage0))] + fn each_key_reverse(&self, f: &fn(&uint) -> bool) -> bool { + self.each_reverse(|k, _| f(k)) + } /// Visit all values in reverse order #[inline(always)] + #[cfg(stage0)] fn each_value_reverse(&self, f: &fn(&T) -> bool) { self.each_reverse(|_, v| f(v)) } + /// Visit all values in reverse order + #[inline(always)] + #[cfg(not(stage0))] + fn each_value_reverse(&self, f: &fn(&T) -> bool) -> bool { + self.each_reverse(|_, v| f(v)) + } } pub struct TrieSet { @@ -175,7 +229,10 @@ pub struct TrieSet { impl BaseIter for TrieSet { /// Visit all values in order #[inline(always)] + #[cfg(stage0)] fn each(&self, f: &fn(&uint) -> bool) { self.map.each_key(f) } + #[cfg(not(stage0))] + fn each(&self, f: &fn(&uint) -> bool) -> bool { self.map.each_key(f) } #[inline(always)] fn size_hint(&self) -> Option { Some(self.len()) } } @@ -183,9 +240,14 @@ impl BaseIter for TrieSet { impl ReverseIter for TrieSet { /// Visit all values in reverse order #[inline(always)] + #[cfg(stage0)] fn each_reverse(&self, f: &fn(&uint) -> bool) { self.map.each_key_reverse(f) } + #[cfg(not(stage0))] + fn each_reverse(&self, f: &fn(&uint) -> bool) -> bool { + self.map.each_key_reverse(f) + } } impl Container for TrieSet { diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs index 3f3691670effb..e1947b77473ec 100644 --- a/src/libcore/vec.rs +++ b/src/libcore/vec.rs @@ -1489,13 +1489,14 @@ pub fn reversed(v: &const [T]) -> ~[T] { * ~~~ */ #[inline(always)] -pub fn each<'r,T>(v: &'r [T], f: &fn(&'r T) -> bool) { +pub fn _each<'r,T>(v: &'r [T], f: &fn(&'r T) -> bool) -> bool { // ^^^^ // NB---this CANNOT be &const [T]! The reason // is that you are passing it to `f()` using // an immutable. - do vec::as_imm_buf(v) |p, n| { + let mut broke = false; + do as_imm_buf(v) |p, n| { let mut n = n; let mut p = p; while n > 0u { @@ -1506,42 +1507,69 @@ pub fn each<'r,T>(v: &'r [T], f: &fn(&'r T) -> bool) { } n -= 1u; } + broke = n > 0; } + return true; } +#[cfg(stage0)] +pub fn each<'r,T>(v: &'r [T], f: &fn(&'r T) -> bool) { _each(v, f); } +#[cfg(not(stage0))] +pub fn each<'r,T>(v: &'r [T], f: &fn(&'r T) -> bool) -> bool { _each(v, f) } + /// Like `each()`, but for the case where you have /// a vector with mutable contents and you would like /// to mutate the contents as you iterate. #[inline(always)] -pub fn each_mut<'r,T>(v: &'r mut [T], f: &fn(elem: &'r mut T) -> bool) { - do vec::as_mut_buf(v) |p, n| { +pub fn _each_mut<'r,T>(v: &'r mut [T], f: &fn(elem: &'r mut T) -> bool) -> bool { + let mut broke = false; + do as_mut_buf(v) |p, n| { let mut n = n; let mut p = p; while n > 0 { unsafe { let q: &'r mut T = cast::transmute_mut_region(&mut *p); - if !f(q) { - break; - } + if !f(q) { break; } p = p.offset(1); } n -= 1; } + broke = n > 0; } + return broke; +} + +#[cfg(stage0)] +pub fn each_mut<'r,T>(v: &'r mut [T], f: &fn(elem: &'r mut T) -> bool) { + _each_mut(v, f); +} +#[cfg(not(stage0))] +pub fn each_mut<'r,T>(v: &'r mut [T], f: &fn(elem: &'r mut T) -> bool) -> bool { + _each_mut(v, f) } /// Like `each()`, but for the case where you have a vector that *may or may /// not* have mutable contents. #[inline(always)] -pub fn each_const(v: &const [T], f: &fn(elem: &const T) -> bool) { +pub fn _each_const(v: &const [T], f: &fn(elem: &const T) -> bool) -> bool { let mut i = 0; let n = v.len(); while i < n { if !f(&const v[i]) { - return; + return false; } i += 1; } + return true; +} + +#[cfg(stage0)] +pub fn each_const(v: &const [t], f: &fn(elem: &const t) -> bool) { + _each_const(v, f); +} +#[cfg(not(stage0))] +pub fn each_const(v: &const [t], f: &fn(elem: &const t) -> bool) -> bool { + _each_const(v, f) } /** @@ -1550,12 +1578,20 @@ pub fn each_const(v: &const [T], f: &fn(elem: &const T) -> bool) { * Return true to continue, false to break. */ #[inline(always)] -pub fn eachi<'r,T>(v: &'r [T], f: &fn(uint, v: &'r T) -> bool) { +pub fn _eachi<'r,T>(v: &'r [T], f: &fn(uint, v: &'r T) -> bool) -> bool { let mut i = 0; for each(v) |p| { - if !f(i, p) { return; } + if !f(i, p) { return false; } i += 1; } + return true; +} + +#[cfg(stage0)] +pub fn eachi<'r,T>(v: &'r [T], f: &fn(uint, v: &'r T) -> bool) { _eachi(v, f); } +#[cfg(not(stage0))] +pub fn eachi<'r,T>(v: &'r [T], f: &fn(uint, v: &'r T) -> bool) -> bool { + _eachi(v, f) } /** @@ -1564,14 +1600,26 @@ pub fn eachi<'r,T>(v: &'r [T], f: &fn(uint, v: &'r T) -> bool) { * Return true to continue, false to break. */ #[inline(always)] -pub fn eachi_mut<'r,T>(v: &'r mut [T], f: &fn(uint, v: &'r mut T) -> bool) { +pub fn _eachi_mut<'r,T>(v: &'r mut [T], + f: &fn(uint, v: &'r mut T) -> bool) -> bool { let mut i = 0; for each_mut(v) |p| { if !f(i, p) { - return; + return false; } i += 1; } + return true; +} + +#[cfg(stage0)] +pub fn eachi_mut<'r,T>(v: &'r mut [T], f: &fn(uint, v: &'r mut T) -> bool) { + _eachi_mut(v, f); +} +#[cfg(not(stage0))] +pub fn eachi_mut<'r,T>(v: &'r mut [T], + f: &fn(uint, v: &'r mut T) -> bool) -> bool { + _eachi_mut(v, f) } /** @@ -1580,8 +1628,17 @@ pub fn eachi_mut<'r,T>(v: &'r mut [T], f: &fn(uint, v: &'r mut T) -> bool) { * Return true to continue, false to break. */ #[inline(always)] +pub fn _each_reverse<'r,T>(v: &'r [T], blk: &fn(v: &'r T) -> bool) -> bool { + _eachi_reverse(v, |_i, v| blk(v)) +} + +#[cfg(stage0)] pub fn each_reverse<'r,T>(v: &'r [T], blk: &fn(v: &'r T) -> bool) { - eachi_reverse(v, |_i, v| blk(v)) + _each_reverse(v, blk); +} +#[cfg(not(stage0))] +pub fn each_reverse<'r,T>(v: &'r [T], blk: &fn(v: &'r T) -> bool) -> bool { + _each_reverse(v, blk) } /** @@ -1590,14 +1647,26 @@ pub fn each_reverse<'r,T>(v: &'r [T], blk: &fn(v: &'r T) -> bool) { * Return true to continue, false to break. */ #[inline(always)] -pub fn eachi_reverse<'r,T>(v: &'r [T], blk: &fn(i: uint, v: &'r T) -> bool) { +pub fn _eachi_reverse<'r,T>(v: &'r [T], + blk: &fn(i: uint, v: &'r T) -> bool) -> bool { let mut i = v.len(); while i > 0 { i -= 1; if !blk(i, &v[i]) { - return; + return false; } } + return true; +} + +#[cfg(stage0)] +pub fn eachi_reverse<'r,T>(v: &'r [T], blk: &fn(i: uint, v: &'r T) -> bool) { + _eachi_reverse(v, blk); +} +#[cfg(not(stage0))] +pub fn eachi_reverse<'r,T>(v: &'r [T], + blk: &fn(i: uint, v: &'r T) -> bool) -> bool { + _eachi_reverse(v, blk) } /** @@ -1608,13 +1677,23 @@ pub fn eachi_reverse<'r,T>(v: &'r [T], blk: &fn(i: uint, v: &'r T) -> bool) { * Both vectors must have the same length */ #[inline] -pub fn each2(v1: &[U], v2: &[T], f: &fn(u: &U, t: &T) -> bool) { +pub fn _each2(v1: &[U], v2: &[T], f: &fn(u: &U, t: &T) -> bool) -> bool { assert!(len(v1) == len(v2)); for uint::range(0u, len(v1)) |i| { if !f(&v1[i], &v2[i]) { - return; + return false; } } + return true; +} + +#[cfg(stage0)] +pub fn each2(v1: &[U], v2: &[T], f: &fn(u: &U, t: &T) -> bool) { + _each2(v1, v2, f); +} +#[cfg(not(stage0))] +pub fn each2(v1: &[U], v2: &[T], f: &fn(u: &U, t: &T) -> bool) -> bool { + _each2(v1, v2, f) } /** @@ -1627,7 +1706,8 @@ pub fn each2(v1: &[U], v2: &[T], f: &fn(u: &U, t: &T) -> bool) { * The total number of permutations produced is `len(v)!`. If `v` contains * repeated elements, then some permutations are repeated. */ -pub fn each_permutation(v: &[T], put: &fn(ts: &[T]) -> bool) { +#[cfg(not(stage0))] +pub fn each_permutation(v: &[T], put: &fn(ts: &[T]) -> bool) -> bool { let ln = len(v); if ln <= 1 { put(v); @@ -1641,12 +1721,13 @@ pub fn each_permutation(v: &[T], put: &fn(ts: &[T]) -> bool) { rest.push_all(const_slice(v, i+1u, ln)); for each_permutation(rest) |permutation| { if !put(append(~[elt], permutation)) { - return; + return false; } } i += 1u; } } + return true; } /** @@ -1932,8 +2013,14 @@ pub trait ImmutableVector<'self, T> { fn initn(&self, n: uint) -> &'self [T]; fn last(&self) -> &'self T; fn last_opt(&self) -> Option<&'self T>; + #[cfg(stage0)] fn each_reverse(&self, blk: &fn(&T) -> bool); + #[cfg(not(stage0))] + fn each_reverse(&self, blk: &fn(&T) -> bool) -> bool; + #[cfg(stage0)] fn eachi_reverse(&self, blk: &fn(uint, &T) -> bool); + #[cfg(not(stage0))] + fn eachi_reverse(&self, blk: &fn(uint, &T) -> bool) -> bool; fn foldr<'a, U>(&'a self, z: U, p: &fn(t: &'a T, u: U) -> U) -> U; fn map(&self, f: &fn(t: &T) -> U) -> ~[U]; fn mapi(&self, f: &fn(uint, t: &T) -> U) -> ~[U]; @@ -1995,15 +2082,29 @@ impl<'self,T> ImmutableVector<'self, T> for &'self [T] { /// Iterates over a vector's elements in reverse. #[inline] + #[cfg(stage0)] fn each_reverse(&self, blk: &fn(&T) -> bool) { each_reverse(*self, blk) } + /// Iterates over a vector's elements in reverse. + #[inline] + #[cfg(not(stage0))] + fn each_reverse(&self, blk: &fn(&T) -> bool) -> bool { + each_reverse(*self, blk) + } /// Iterates over a vector's elements and indices in reverse. + #[cfg(stage0)] #[inline] fn eachi_reverse(&self, blk: &fn(uint, &T) -> bool) { eachi_reverse(*self, blk) } + /// Iterates over a vector's elements and indices in reverse. + #[cfg(not(stage0))] + #[inline] + fn eachi_reverse(&self, blk: &fn(uint, &T) -> bool) -> bool { + eachi_reverse(*self, blk) + } /// Reduce a vector from right to left #[inline] @@ -2555,44 +2656,81 @@ pub mod bytes { // ITERATION TRAIT METHODS impl<'self,A> old_iter::BaseIter for &'self [A] { + #[cfg(stage0)] + #[inline(always)] + fn each<'a>(&'a self, blk: &fn(v: &'a A) -> bool) { + each(*self, blk) + } + #[cfg(not(stage0))] #[inline(always)] - fn each<'a>(&'a self, blk: &fn(v: &'a A) -> bool) { each(*self, blk) } + fn each<'a>(&'a self, blk: &fn(v: &'a A) -> bool) -> bool { + each(*self, blk) + } #[inline(always)] fn size_hint(&self) -> Option { Some(self.len()) } } // FIXME(#4148): This should be redundant impl old_iter::BaseIter for ~[A] { + #[cfg(stage0)] #[inline(always)] - fn each<'a>(&'a self, blk: &fn(v: &'a A) -> bool) { each(*self, blk) } + fn each<'a>(&'a self, blk: &fn(v: &'a A) -> bool) { + each(*self, blk) + } + #[cfg(not(stage0))] + #[inline(always)] + fn each<'a>(&'a self, blk: &fn(v: &'a A) -> bool) -> bool { + each(*self, blk) + } #[inline(always)] fn size_hint(&self) -> Option { Some(self.len()) } } // FIXME(#4148): This should be redundant impl old_iter::BaseIter for @[A] { + #[cfg(stage0)] #[inline(always)] - fn each<'a>(&'a self, blk: &fn(v: &'a A) -> bool) { each(*self, blk) } + fn each<'a>(&'a self, blk: &fn(v: &'a A) -> bool) { + each(*self, blk) + } + #[cfg(not(stage0))] + #[inline(always)] + fn each<'a>(&'a self, blk: &fn(v: &'a A) -> bool) -> bool { + each(*self, blk) + } #[inline(always)] fn size_hint(&self) -> Option { Some(self.len()) } } impl<'self,A> old_iter::MutableIter for &'self mut [A] { + #[cfg(stage0)] #[inline(always)] fn each_mut<'a>(&'a mut self, blk: &fn(v: &'a mut A) -> bool) { each_mut(*self, blk) } + #[cfg(not(stage0))] + #[inline(always)] + fn each_mut<'a>(&'a mut self, blk: &fn(v: &'a mut A) -> bool) -> bool { + each_mut(*self, blk) + } } // FIXME(#4148): This should be redundant impl old_iter::MutableIter for ~[A] { + #[cfg(stage0)] #[inline(always)] fn each_mut<'a>(&'a mut self, blk: &fn(v: &'a mut A) -> bool) { each_mut(*self, blk) } + #[cfg(not(stage0))] + #[inline(always)] + fn each_mut<'a>(&'a mut self, blk: &fn(v: &'a mut A) -> bool) -> bool { + each_mut(*self, blk) + } } // FIXME(#4148): This should be redundant +#[cfg(stage0)] impl old_iter::MutableIter for @mut [A] { #[inline(always)] fn each_mut(&mut self, blk: &fn(v: &mut A) -> bool) { @@ -2600,10 +2738,23 @@ impl old_iter::MutableIter for @mut [A] { } } +#[cfg(not(stage0))] +impl old_iter::MutableIter for @mut [A] { + #[inline(always)] + fn each_mut(&mut self, blk: &fn(v: &mut A) -> bool) -> bool { + each_mut(*self, blk) + } +} + impl<'self,A> old_iter::ExtendedIter for &'self [A] { + #[cfg(stage0)] pub fn eachi(&self, blk: &fn(uint, v: &A) -> bool) { old_iter::eachi(self, blk) } + #[cfg(not(stage0))] + pub fn eachi(&self, blk: &fn(uint, v: &A) -> bool) -> bool { + old_iter::eachi(self, blk) + } pub fn all(&self, blk: &fn(&A) -> bool) -> bool { old_iter::all(self, blk) } @@ -2627,16 +2778,27 @@ impl<'self,A> old_iter::ExtendedIter for &'self [A] { impl<'self,A> old_iter::ExtendedMutableIter for &'self mut [A] { #[inline(always)] + #[cfg(stage0)] pub fn eachi_mut(&mut self, blk: &fn(uint, v: &mut A) -> bool) { eachi_mut(*self, blk) } + #[inline(always)] + #[cfg(not(stage0))] + pub fn eachi_mut(&mut self, blk: &fn(uint, v: &mut A) -> bool) -> bool { + eachi_mut(*self, blk) + } } // FIXME(#4148): This should be redundant impl old_iter::ExtendedIter for ~[A] { + #[cfg(stage0)] pub fn eachi(&self, blk: &fn(uint, v: &A) -> bool) { old_iter::eachi(self, blk) } + #[cfg(not(stage0))] + pub fn eachi(&self, blk: &fn(uint, v: &A) -> bool) -> bool { + old_iter::eachi(self, blk) + } pub fn all(&self, blk: &fn(&A) -> bool) -> bool { old_iter::all(self, blk) } @@ -2660,9 +2822,14 @@ impl old_iter::ExtendedIter for ~[A] { // FIXME(#4148): This should be redundant impl old_iter::ExtendedIter for @[A] { + #[cfg(stage0)] pub fn eachi(&self, blk: &fn(uint, v: &A) -> bool) { old_iter::eachi(self, blk) } + #[cfg(not(stage0))] + pub fn eachi(&self, blk: &fn(uint, v: &A) -> bool) -> bool { + old_iter::eachi(self, blk) + } pub fn all(&self, blk: &fn(&A) -> bool) -> bool { old_iter::all(self, blk) } From 3ce9dba6775c7e1dbfb510626c073a8f926b6880 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Thu, 2 May 2013 18:33:27 -0400 Subject: [PATCH 344/410] std: Use the new `for` protocol --- src/libstd/bitv.rs | 94 ++++++++++----- src/libstd/deque.rs | 16 ++- src/libstd/dlist.rs | 49 +++++++- src/libstd/list.rs | 34 ++++++ src/libstd/net_url.rs | 7 ++ src/libstd/priority_queue.rs | 7 ++ src/libstd/smallintmap.rs | 53 ++++++++- src/libstd/treemap.rs | 216 +++++++++++++++++++++++++++++++++-- src/libstd/workcache.rs | 8 ++ 9 files changed, 433 insertions(+), 51 deletions(-) diff --git a/src/libstd/bitv.rs b/src/libstd/bitv.rs index 461fb61ed5665..09f86f30d320f 100644 --- a/src/libstd/bitv.rs +++ b/src/libstd/bitv.rs @@ -143,6 +143,7 @@ pub impl BigBitv { } #[inline(always)] + #[cfg(stage0)] fn each_storage(&mut self, op: &fn(v: &mut uint) -> bool) { for uint::range(0, self.storage.len()) |i| { let mut w = self.storage[i]; @@ -150,7 +151,12 @@ pub impl BigBitv { self.storage[i] = w; if !b { break; } } - } + } + #[inline(always)] + #[cfg(not(stage0))] + fn each_storage(&mut self, op: &fn(v: &mut uint) -> bool) -> bool { + uint::range(0, self.storage.len(), |i| op(&mut self.storage[i])) + } #[inline(always)] fn invert(&mut self) { for self.each_storage |w| { *w = !*w } } @@ -193,6 +199,7 @@ pub impl BigBitv { } #[inline(always)] + #[cfg(stage0)] fn equals(&self, b: &BigBitv, nbits: uint) -> bool { let len = b.storage.len(); for uint::iterate(0, len) |i| { @@ -203,6 +210,19 @@ pub impl BigBitv { } } + #[inline(always)] + #[cfg(not(stage0))] + fn equals(&self, b: &BigBitv, nbits: uint) -> bool { + let len = b.storage.len(); + for uint::iterate(0, len) |i| { + let mask = big_mask(nbits, i); + if mask & self.storage[i] != mask & b.storage[i] { + return false; + } + } + return true; + } + } enum BitvVariant { Big(~BigBitv), Small(~SmallBitv) } @@ -387,6 +407,7 @@ pub impl Bitv { } #[inline(always)] + #[cfg(stage0)] fn each(&self, f: &fn(bool) -> bool) { let mut i = 0; while i < self.nbits { @@ -394,6 +415,16 @@ pub impl Bitv { i += 1; } } + #[inline(always)] + #[cfg(not(stage0))] + fn each(&self, f: &fn(bool) -> bool) -> bool { + let mut i = 0; + while i < self.nbits { + if !f(self.get(i)) { return false; } + i += 1; + } + return true; + } /// Returns true if all bits are 0 fn is_false(&self) -> bool { @@ -488,6 +519,7 @@ pub impl Bitv { true } + #[cfg(stage0)] fn ones(&self, f: &fn(uint) -> bool) { for uint::range(0, self.nbits) |i| { if self.get(i) { @@ -495,6 +527,10 @@ pub impl Bitv { } } } + #[cfg(not(stage0))] + fn ones(&self, f: &fn(uint) -> bool) -> bool { + uint::range(0, self.nbits, |i| !self.get(i) || f(i)) + } } @@ -661,18 +697,21 @@ pub impl BitvSet { } } +#[cfg(not(stage0))] impl BaseIter for BitvSet { fn size_hint(&self) -> Option { Some(self.len()) } - fn each(&self, blk: &fn(v: &uint) -> bool) { + fn each(&self, blk: &fn(v: &uint) -> bool) -> bool { for self.bitv.storage.eachi |i, &w| { if !iterate_bits(i * uint::bits, w, |b| blk(&b)) { - return; + return false; } } + return true; } } +#[cfg(not(stage0))] impl cmp::Eq for BitvSet { fn eq(&self, other: &BitvSet) -> bool { if self.size != other.size { @@ -706,6 +745,7 @@ impl Mutable for BitvSet { } } +#[cfg(not(stage0))] impl Set for BitvSet { fn contains(&self, value: &uint) -> bool { *value < self.bitv.storage.len() * uint::bits && self.bitv.get(*value) @@ -773,64 +813,55 @@ impl Set for BitvSet { other.is_subset(self) } - fn difference(&self, other: &BitvSet, f: &fn(&uint) -> bool) { + fn difference(&self, other: &BitvSet, f: &fn(&uint) -> bool) -> bool { for self.each_common(other) |i, w1, w2| { if !iterate_bits(i, w1 & !w2, |b| f(&b)) { - return; + return false; } } /* everything we have that they don't also shows up */ self.each_outlier(other, |mine, i, w| !mine || iterate_bits(i, w, |b| f(&b)) - ); + ) } fn symmetric_difference(&self, other: &BitvSet, - f: &fn(&uint) -> bool) { + f: &fn(&uint) -> bool) -> bool { for self.each_common(other) |i, w1, w2| { if !iterate_bits(i, w1 ^ w2, |b| f(&b)) { - return; + return false; } } - self.each_outlier(other, |_, i, w| - iterate_bits(i, w, |b| f(&b)) - ); + self.each_outlier(other, |_, i, w| iterate_bits(i, w, |b| f(&b))) } - fn intersection(&self, other: &BitvSet, f: &fn(&uint) -> bool) { - for self.each_common(other) |i, w1, w2| { - if !iterate_bits(i, w1 & w2, |b| f(&b)) { - return; - } - } + fn intersection(&self, other: &BitvSet, f: &fn(&uint) -> bool) -> bool { + self.each_common(other, |i, w1, w2| iterate_bits(i, w1 & w2, |b| f(&b))) } - fn union(&self, other: &BitvSet, f: &fn(&uint) -> bool) { + fn union(&self, other: &BitvSet, f: &fn(&uint) -> bool) -> bool { for self.each_common(other) |i, w1, w2| { if !iterate_bits(i, w1 | w2, |b| f(&b)) { - return; + return false; } } - self.each_outlier(other, |_, i, w| - iterate_bits(i, w, |b| f(&b)) - ); + self.each_outlier(other, |_, i, w| iterate_bits(i, w, |b| f(&b))) } } +#[cfg(not(stage0))] priv impl BitvSet { /// Visits each of the words that the two bit vectors (self and other) /// both have in common. The three yielded arguments are (bit location, /// w1, w2) where the bit location is the number of bits offset so far, /// and w1/w2 are the words coming from the two vectors self, other. fn each_common(&self, other: &BitvSet, - f: &fn(uint, uint, uint) -> bool) { + f: &fn(uint, uint, uint) -> bool) -> bool { let min = uint::min(self.bitv.storage.len(), other.bitv.storage.len()); - for self.bitv.storage.slice(0, min).eachi |i, &w| { - if !f(i * uint::bits, w, other.bitv.storage[i]) { - return; - } - } + self.bitv.storage.slice(0, min).eachi(|i, &w| { + f(i * uint::bits, w, other.bitv.storage[i]) + }) } /// Visits each word in self or other that extends beyond the other. This @@ -841,7 +872,7 @@ priv impl BitvSet { /// is true if the word comes from 'self', and false if it comes from /// 'other'. fn each_outlier(&self, other: &BitvSet, - f: &fn(bool, uint, uint) -> bool) { + f: &fn(bool, uint, uint) -> bool) -> bool { let len1 = self.bitv.storage.len(); let len2 = other.bitv.storage.len(); let min = uint::min(len1, len2); @@ -849,14 +880,15 @@ priv impl BitvSet { /* only one of these loops will execute and that's the point */ for self.bitv.storage.slice(min, len1).eachi |i, &w| { if !f(true, (i + min) * uint::bits, w) { - return; + return false; } } for other.bitv.storage.slice(min, len2).eachi |i, &w| { if !f(false, (i + min) * uint::bits, w) { - return; + return false; } } + return true; } } diff --git a/src/libstd/deque.rs b/src/libstd/deque.rs index 4c7f2edc6b048..4eb359e48a84d 100644 --- a/src/libstd/deque.rs +++ b/src/libstd/deque.rs @@ -63,15 +63,25 @@ pub impl Deque { } /// Iterate over the elements in the deque + #[cfg(stage0)] fn each(&self, f: &fn(&T) -> bool) { self.eachi(|_i, e| f(e)) } + /// Iterate over the elements in the deque + #[cfg(not(stage0))] + fn each(&self, f: &fn(&T) -> bool) -> bool { + self.eachi(|_i, e| f(e)) + } /// Iterate over the elements in the deque by index + #[cfg(stage0)] fn eachi(&self, f: &fn(uint, &T) -> bool) { - for uint::range(0, self.nelts) |i| { - if !f(i, self.get(i as int)) { return; } - } + uint::range(0, self.nelts, |i| f(i, self.get(i as int))) + } + /// Iterate over the elements in the deque by index + #[cfg(not(stage0))] + fn eachi(&self, f: &fn(uint, &T) -> bool) -> bool { + uint::range(0, self.nelts, |i| f(i, self.get(i as int))) } /// Remove and return the first element in the deque diff --git a/src/libstd/dlist.rs b/src/libstd/dlist.rs index 1257d55453205..93740f31b9b27 100644 --- a/src/libstd/dlist.rs +++ b/src/libstd/dlist.rs @@ -492,12 +492,13 @@ pub impl DList { impl BaseIter for @mut DList { /** - * Iterates through the current contents. - * - * Attempts to access this dlist during iteration are allowed (to - * allow for e.g. breadth-first search with in-place enqueues), but - * removing the current node is forbidden. - */ + * Iterates through the current contents. + * + * Attempts to access this dlist during iteration are allowed (to + * allow for e.g. breadth-first search with in-place enqueues), but + * removing the current node is forbidden. + */ + #[cfg(stage0)] fn each(&self, f: &fn(v: &T) -> bool) { let mut link = self.peek_n(); while link.is_some() { @@ -525,6 +526,42 @@ impl BaseIter for @mut DList { link = nobe.next_link(); } } + /** + * Iterates through the current contents. + * + * Attempts to access this dlist during iteration are allowed (to + * allow for e.g. breadth-first search with in-place enqueues), but + * removing the current node is forbidden. + */ + #[cfg(not(stage0))] + fn each(&self, f: &fn(v: &T) -> bool) -> bool { + let mut link = self.peek_n(); + while link.is_some() { + let nobe = link.get(); + assert!(nobe.linked); + + { + let frozen_nobe = &*nobe; + if !f(&frozen_nobe.data) { return false; } + } + + // Check (weakly) that the user didn't do a remove. + if self.size == 0 { + fail!("The dlist became empty during iteration??") + } + if !nobe.linked || + (!((nobe.prev.is_some() + || managed::mut_ptr_eq(self.hd.expect(~"headless dlist?"), + nobe)) + && (nobe.next.is_some() + || managed::mut_ptr_eq(self.tl.expect(~"tailless dlist?"), + nobe)))) { + fail!("Removing a dlist node during iteration is forbidden!") + } + link = nobe.next_link(); + } + return true; + } #[inline(always)] fn size_hint(&self) -> Option { Some(self.len()) } diff --git a/src/libstd/list.rs b/src/libstd/list.rs index 8d15508b26e05..13ef377fabeb2 100644 --- a/src/libstd/list.rs +++ b/src/libstd/list.rs @@ -140,6 +140,7 @@ pub fn iter(l: @List, f: &fn(&T)) { } /// Iterate over a list +#[cfg(stage0)] pub fn each(l: @List, f: &fn(&T) -> bool) { let mut cur = l; loop { @@ -152,9 +153,24 @@ pub fn each(l: @List, f: &fn(&T) -> bool) { } } } +/// Iterate over a list +#[cfg(not(stage0))] +pub fn each(l: @List, f: &fn(&T) -> bool) -> bool { + let mut cur = l; + loop { + cur = match *cur { + Cons(ref hd, tl) => { + if !f(hd) { return false; } + tl + } + Nil => { return true; } + } + } +} impl MutList { /// Iterate over a mutable list + #[cfg(stage0)] pub fn each(@mut self, f: &fn(&mut T) -> bool) { let mut cur = self; loop { @@ -170,6 +186,24 @@ impl MutList { } } } + /// Iterate over a mutable list + #[cfg(not(stage0))] + pub fn each(@mut self, f: &fn(&mut T) -> bool) -> bool { + let mut cur = self; + loop { + let borrowed = &mut *cur; + cur = match *borrowed { + MutCons(ref mut hd, tl) => { + if !f(hd) { + return false; + } + tl + } + MutNil => break + } + } + return true; + } } #[cfg(test)] diff --git a/src/libstd/net_url.rs b/src/libstd/net_url.rs index ba3fd69e344c2..e7cf710cf6797 100644 --- a/src/libstd/net_url.rs +++ b/src/libstd/net_url.rs @@ -703,11 +703,18 @@ impl ToStr for Url { } } +#[cfg(stage0)] impl IterBytes for Url { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { self.to_str().iter_bytes(lsb0, f) } } +#[cfg(not(stage0))] +impl IterBytes for Url { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + self.to_str().iter_bytes(lsb0, f) + } +} // Put a few tests outside of the 'test' module so they can test the internal // functions and those functions don't need 'pub' diff --git a/src/libstd/priority_queue.rs b/src/libstd/priority_queue.rs index b2f8c9c3c4e9a..bdb93142472fb 100644 --- a/src/libstd/priority_queue.rs +++ b/src/libstd/priority_queue.rs @@ -28,7 +28,14 @@ impl BaseIter for PriorityQueue { /// Visit all values in the underlying vector. /// /// The values are **not** visited in order. + #[cfg(stage0)] fn each(&self, f: &fn(&T) -> bool) { self.data.each(f) } + /// Visit all values in the underlying vector. + /// + /// The values are **not** visited in order. + #[cfg(not(stage0))] + fn each(&self, f: &fn(&T) -> bool) -> bool { self.data.each(f) } + fn size_hint(&self) -> Option { self.data.size_hint() } } diff --git a/src/libstd/smallintmap.rs b/src/libstd/smallintmap.rs index fc83a39cacf9a..afc1d0fe65fcb 100644 --- a/src/libstd/smallintmap.rs +++ b/src/libstd/smallintmap.rs @@ -51,6 +51,7 @@ impl Map for SmallIntMap { } /// Visit all key-value pairs in order + #[cfg(stage0)] fn each<'a>(&'a self, it: &fn(&uint, &'a V) -> bool) { for uint::range(0, self.v.len()) |i| { match self.v[i] { @@ -60,25 +61,62 @@ impl Map for SmallIntMap { } } + /// Visit all key-value pairs in order + #[cfg(not(stage0))] + fn each<'a>(&'a self, it: &fn(&uint, &'a V) -> bool) -> bool { + for uint::range(0, self.v.len()) |i| { + match self.v[i] { + Some(ref elt) => if !it(&i, elt) { return false; }, + None => () + } + } + return true; + } + /// Visit all keys in order + #[cfg(stage0)] fn each_key(&self, blk: &fn(key: &uint) -> bool) { self.each(|k, _| blk(k)) } + #[cfg(not(stage0))] + /// Visit all keys in order + fn each_key(&self, blk: &fn(key: &uint) -> bool) -> bool { + self.each(|k, _| blk(k)) + } /// Visit all values in order + #[cfg(stage0)] fn each_value<'a>(&'a self, blk: &fn(value: &'a V) -> bool) { self.each(|_, v| blk(v)) } + /// Visit all values in order + #[cfg(not(stage0))] + fn each_value<'a>(&'a self, blk: &fn(value: &'a V) -> bool) -> bool { + self.each(|_, v| blk(v)) + } + /// Iterate over the map and mutate the contained values + #[cfg(stage0)] fn mutate_values(&mut self, it: &fn(&uint, &mut V) -> bool) { for uint::range(0, self.v.len()) |i| { match self.v[i] { - Some(ref mut elt) => if !it(&i, elt) { break }, + Some(ref mut elt) => if !it(&i, elt) { return; }, None => () } } } + /// Iterate over the map and mutate the contained values + #[cfg(not(stage0))] + fn mutate_values(&mut self, it: &fn(&uint, &mut V) -> bool) -> bool { + for uint::range(0, self.v.len()) |i| { + match self.v[i] { + Some(ref mut elt) => if !it(&i, elt) { return false; }, + None => () + } + } + return true; + } /// Return a reference to the value corresponding to the key fn find<'a>(&'a self, key: &uint) -> Option<&'a V> { @@ -149,6 +187,7 @@ pub impl SmallIntMap { fn new() -> SmallIntMap { SmallIntMap{v: ~[]} } /// Visit all key-value pairs in reverse order + #[cfg(stage0)] fn each_reverse<'a>(&'a self, it: &fn(uint, &'a V) -> bool) { for uint::range_rev(self.v.len(), 0) |i| { match self.v[i - 1] { @@ -158,6 +197,18 @@ pub impl SmallIntMap { } } + /// Visit all key-value pairs in reverse order + #[cfg(not(stage0))] + fn each_reverse<'a>(&'a self, it: &fn(uint, &'a V) -> bool) -> bool { + for uint::range_rev(self.v.len(), 0) |i| { + match self.v[i - 1] { + Some(ref elt) => if !it(i - 1, elt) { return false; }, + None => () + } + } + return true; + } + fn get<'a>(&'a self, key: &uint) -> &'a V { self.find(key).expect("key not present") } diff --git a/src/libstd/treemap.rs b/src/libstd/treemap.rs index 06ac1a71bacd0..d68b08dc4750d 100644 --- a/src/libstd/treemap.rs +++ b/src/libstd/treemap.rs @@ -105,24 +105,48 @@ impl Map for TreeMap { } /// Visit all key-value pairs in order + #[cfg(stage0)] fn each<'a>(&'a self, f: &fn(&'a K, &'a V) -> bool) { + each(&self.root, f); + } + /// Visit all key-value pairs in order + #[cfg(not(stage0))] + fn each<'a>(&'a self, f: &fn(&'a K, &'a V) -> bool) -> bool { each(&self.root, f) } /// Visit all keys in order + #[cfg(stage0)] fn each_key(&self, f: &fn(&K) -> bool) { self.each(|k, _| f(k)) } + /// Visit all keys in order + #[cfg(not(stage0))] + fn each_key(&self, f: &fn(&K) -> bool) -> bool { + self.each(|k, _| f(k)) + } /// Visit all values in order + #[cfg(stage0)] fn each_value<'a>(&'a self, f: &fn(&'a V) -> bool) { self.each(|_, v| f(v)) } + /// Visit all values in order + #[cfg(not(stage0))] + fn each_value<'a>(&'a self, f: &fn(&'a V) -> bool) -> bool { + self.each(|_, v| f(v)) + } /// Iterate over the map and mutate the contained values + #[cfg(stage0)] fn mutate_values(&mut self, f: &fn(&K, &mut V) -> bool) { mutate_values(&mut self.root, f); } + /// Iterate over the map and mutate the contained values + #[cfg(not(stage0))] + fn mutate_values(&mut self, f: &fn(&K, &mut V) -> bool) -> bool { + mutate_values(&mut self.root, f) + } /// Return a reference to the value corresponding to the key fn find<'a>(&'a self, key: &K) -> Option<&'a V> { @@ -177,6 +201,7 @@ impl Map for TreeMap { } } +#[cfg(stage0)] pub impl TreeMap { /// Create an empty TreeMap fn new() -> TreeMap { TreeMap{root: None, length: 0} } @@ -202,6 +227,32 @@ pub impl TreeMap { TreeMapIterator{stack: ~[], node: &self.root} } } +#[cfg(not(stage0))] +pub impl TreeMap { + /// Create an empty TreeMap + fn new() -> TreeMap { TreeMap{root: None, length: 0} } + + /// Visit all key-value pairs in reverse order + fn each_reverse<'a>(&'a self, f: &fn(&'a K, &'a V) -> bool) -> bool { + each_reverse(&self.root, f) + } + + /// Visit all keys in reverse order + fn each_key_reverse(&self, f: &fn(&K) -> bool) -> bool { + self.each_reverse(|k, _| f(k)) + } + + /// Visit all values in reverse order + fn each_value_reverse(&self, f: &fn(&V) -> bool) -> bool { + self.each_reverse(|_, v| f(v)) + } + + /// Get a lazy iterator over the key-value pairs in the map. + /// Requires that it be frozen (immutable). + fn iter<'a>(&'a self) -> TreeMapIterator<'a, K, V> { + TreeMapIterator{stack: ~[], node: &self.root} + } +} /// Lazy forward iterator over a map pub struct TreeMapIterator<'self, K, V> { @@ -246,17 +297,29 @@ pub struct TreeSet { impl BaseIter for TreeSet { /// Visit all values in order #[inline(always)] + #[cfg(stage0)] fn each(&self, f: &fn(&T) -> bool) { self.map.each_key(f) } + /// Visit all values in order + #[inline(always)] + #[cfg(not(stage0))] + fn each(&self, f: &fn(&T) -> bool) -> bool { self.map.each_key(f) } #[inline(always)] fn size_hint(&self) -> Option { Some(self.len()) } } impl ReverseIter for TreeSet { /// Visit all values in reverse order + #[cfg(stage0)] #[inline(always)] fn each_reverse(&self, f: &fn(&T) -> bool) { self.map.each_key_reverse(f) } + /// Visit all values in reverse order + #[cfg(not(stage0))] + #[inline(always)] + fn each_reverse(&self, f: &fn(&T) -> bool) -> bool { + self.map.each_key_reverse(f) + } } impl Eq for TreeSet { @@ -361,6 +424,7 @@ impl Set for TreeSet { } /// Visit the values (in-order) representing the difference + #[cfg(stage0)] fn difference(&self, other: &TreeSet, f: &fn(&T) -> bool) { let mut x = self.iter(); let mut y = other.iter(); @@ -389,8 +453,38 @@ impl Set for TreeSet { } } } + /// Visit the values (in-order) representing the difference + #[cfg(not(stage0))] + fn difference(&self, other: &TreeSet, f: &fn(&T) -> bool) -> bool { + let mut x = self.iter(); + let mut y = other.iter(); + + let mut a = x.next(); + let mut b = y.next(); + + while a.is_some() { + if b.is_none() { + return f(a.unwrap()) && x.advance(f); + } + + let a1 = a.unwrap(); + let b1 = b.unwrap(); + + let cmp = a1.cmp(b1); + + if cmp == Less { + if !f(a1) { return false; } + a = x.next(); + } else { + if cmp == Equal { a = x.next() } + b = y.next(); + } + } + return true; + } /// Visit the values (in-order) representing the symmetric difference + #[cfg(stage0)] fn symmetric_difference(&self, other: &TreeSet, f: &fn(&T) -> bool) { let mut x = self.iter(); @@ -427,8 +521,43 @@ impl Set for TreeSet { if f(b1) { y.next() } else { None } } } + /// Visit the values (in-order) representing the symmetric difference + #[cfg(not(stage0))] + fn symmetric_difference(&self, other: &TreeSet, + f: &fn(&T) -> bool) -> bool { + let mut x = self.iter(); + let mut y = other.iter(); + + let mut a = x.next(); + let mut b = y.next(); + + while a.is_some() { + if b.is_none() { + return f(a.unwrap()) && x.advance(f); + } + + let a1 = a.unwrap(); + let b1 = b.unwrap(); + + let cmp = a1.cmp(b1); + + if cmp == Less { + if !f(a1) { return false; } + a = x.next(); + } else { + if cmp == Greater { + if !f(b1) { return false; } + } else { + a = x.next(); + } + b = y.next(); + } + } + return b.each(|&x| f(x)) && y.advance(f); + } /// Visit the values (in-order) representing the intersection + #[cfg(stage0)] fn intersection(&self, other: &TreeSet, f: &fn(&T) -> bool) { let mut x = self.iter(); let mut y = other.iter(); @@ -452,8 +581,35 @@ impl Set for TreeSet { } } } + /// Visit the values (in-order) representing the intersection + #[cfg(not(stage0))] + fn intersection(&self, other: &TreeSet, f: &fn(&T) -> bool) -> bool { + let mut x = self.iter(); + let mut y = other.iter(); + + let mut a = x.next(); + let mut b = y.next(); + + while a.is_some() && b.is_some() { + let a1 = a.unwrap(); + let b1 = b.unwrap(); + + let cmp = a1.cmp(b1); + + if cmp == Less { + a = x.next(); + } else { + if cmp == Equal { + if !f(a1) { return false } + } + b = y.next(); + } + } + return true; + } /// Visit the values (in-order) representing the union + #[cfg(stage0)] fn union(&self, other: &TreeSet, f: &fn(&T) -> bool) { let mut x = self.iter(); let mut y = other.iter(); @@ -488,6 +644,38 @@ impl Set for TreeSet { if f(b1) { y.next() } else { None } } } + /// Visit the values (in-order) representing the union + #[cfg(not(stage0))] + fn union(&self, other: &TreeSet, f: &fn(&T) -> bool) -> bool { + let mut x = self.iter(); + let mut y = other.iter(); + + let mut a = x.next(); + let mut b = y.next(); + + while a.is_some() { + if b.is_none() { + return f(a.unwrap()) && x.advance(f); + } + + let a1 = a.unwrap(); + let b1 = b.unwrap(); + + let cmp = a1.cmp(b1); + + if cmp == Greater { + if !f(b1) { return false; } + b = y.next(); + } else { + if !f(a1) { return false; } + if cmp == Equal { + b = y.next(); + } + a = x.next(); + } + } + return a.each(|&x| f(x)) && y.advance(f); + } } pub impl TreeSet { @@ -525,20 +713,28 @@ pub impl TreeNode { } } +#[cfg(stage0)] +fn each<'r, K: TotalOrd, V>(_: &'r Option<~TreeNode>, + _: &fn(&'r K, &'r V) -> bool) -> bool { + fail!(~"don't use me in stage0!") +} +#[cfg(not(stage0))] fn each<'r, K: TotalOrd, V>(node: &'r Option<~TreeNode>, - f: &fn(&'r K, &'r V) -> bool) { - for node.each |x| { - each(&x.left, f); - if f(&x.key, &x.value) { each(&x.right, f) } - } + f: &fn(&'r K, &'r V) -> bool) -> bool { + node.each(|x| each(&x.left, f) && f(&x.key, &x.value) && + each(&x.right, f)) } +#[cfg(stage0)] +fn each_reverse<'r, K: TotalOrd, V>(_: &'r Option<~TreeNode>, + _: &fn(&'r K, &'r V) -> bool) -> bool { + fail!(~"don't use me in stage0!") +} +#[cfg(not(stage0))] fn each_reverse<'r, K: TotalOrd, V>(node: &'r Option<~TreeNode>, - f: &fn(&'r K, &'r V) -> bool) { - for node.each |x| { - each_reverse(&x.right, f); - if f(&x.key, &x.value) { each_reverse(&x.left, f) } - } + f: &fn(&'r K, &'r V) -> bool) -> bool { + node.each(|x| each_reverse(&x.right, f) && f(&x.key, &x.value) && + each_reverse(&x.left, f)) } fn mutate_values<'r, K: TotalOrd, V>(node: &'r mut Option<~TreeNode>, diff --git a/src/libstd/workcache.rs b/src/libstd/workcache.rs index dc9204f62f4fb..9b0a6cb6226c1 100644 --- a/src/libstd/workcache.rs +++ b/src/libstd/workcache.rs @@ -99,6 +99,7 @@ struct WorkKey { name: ~str } +#[cfg(stage0)] impl to_bytes::IterBytes for WorkKey { #[inline(always)] fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { @@ -108,6 +109,13 @@ impl to_bytes::IterBytes for WorkKey { self.name.iter_bytes(lsb0, f); } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for WorkKey { + #[inline(always)] + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + self.kind.iter_bytes(lsb0, f) && self.name.iter_bytes(lsb0, f) + } +} impl cmp::Ord for WorkKey { fn lt(&self, other: &WorkKey) -> bool { From 5eb6d19803ebcb5279f8a42b584a4d81152fa82d Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Thu, 2 May 2013 18:33:33 -0400 Subject: [PATCH 345/410] syntax: Use the new `for` protocol --- src/libsyntax/abi.rs | 29 +++++++++++ src/libsyntax/ast.rs | 83 ++++++++++++++++++++++++++++++++ src/libsyntax/ast_util.rs | 9 ++++ src/libsyntax/codemap.rs | 14 ++++++ src/libsyntax/ext/expand.rs | 14 +----- src/libsyntax/ext/pipes/proto.rs | 16 ++++++ src/libsyntax/opt_vec.rs | 14 ++++++ src/libsyntax/parse/obsolete.rs | 8 +++ src/libsyntax/parse/token.rs | 7 +++ 9 files changed, 182 insertions(+), 12 deletions(-) diff --git a/src/libsyntax/abi.rs b/src/libsyntax/abi.rs index 75782e9ca673f..f266b8871a225 100644 --- a/src/libsyntax/abi.rs +++ b/src/libsyntax/abi.rs @@ -81,6 +81,7 @@ static AbiDatas: &'static [AbiData] = &[ AbiData {abi: RustIntrinsic, name: "rust-intrinsic", abi_arch: RustArch}, ]; +#[cfg(stage0)] fn each_abi(op: &fn(abi: Abi) -> bool) { /*! * @@ -93,6 +94,15 @@ fn each_abi(op: &fn(abi: Abi) -> bool) { } } } +#[cfg(not(stage0))] +fn each_abi(op: &fn(abi: Abi) -> bool) -> bool { + /*! + * + * Iterates through each of the defined ABIs. + */ + + AbiDatas.each(|abi_data| op(abi_data.abi)) +} pub fn lookup(name: &str) -> Option { /*! @@ -189,6 +199,7 @@ pub impl AbiSet { self.bits |= (1 << abi.index()); } + #[cfg(stage0)] fn each(&self, op: &fn(abi: Abi) -> bool) { for each_abi |abi| { if self.contains(abi) { @@ -198,6 +209,10 @@ pub impl AbiSet { } } } + #[cfg(not(stage0))] + fn each(&self, op: &fn(abi: Abi) -> bool) -> bool { + each_abi(|abi| !self.contains(abi) || op(abi)) + } fn is_empty(&self) -> bool { self.bits == 0 @@ -252,17 +267,31 @@ pub impl AbiSet { } } +#[cfg(stage0)] impl to_bytes::IterBytes for Abi { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { self.index().iter_bytes(lsb0, f) } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for Abi { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + self.index().iter_bytes(lsb0, f) + } +} +#[cfg(stage0)] impl to_bytes::IterBytes for AbiSet { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { self.bits.iter_bytes(lsb0, f) } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for AbiSet { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + self.bits.iter_bytes(lsb0, f) + } +} impl ToStr for Abi { fn to_str(&self) -> ~str { diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index c8fc04eaea1a3..c516ebc402f0c 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -97,11 +97,18 @@ impl Decodable for ident { } } +#[cfg(stage0)] impl to_bytes::IterBytes for ident { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { self.repr.iter_bytes(lsb0, f) } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for ident { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + self.repr.iter_bytes(lsb0, f) + } +} // Functions may or may not have names. pub type fn_ident = Option; @@ -284,6 +291,7 @@ pub enum binding_mode { bind_infer } +#[cfg(stage0)] impl to_bytes::IterBytes for binding_mode { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { match *self { @@ -297,6 +305,18 @@ impl to_bytes::IterBytes for binding_mode { } } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for binding_mode { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + match *self { + bind_by_copy => 0u8.iter_bytes(lsb0, f), + + bind_by_ref(ref m) => to_bytes::iter_bytes_2(&1u8, m, lsb0, f), + + bind_infer => 2u8.iter_bytes(lsb0, f), + } + } +} #[auto_encode] #[auto_decode] @@ -330,11 +350,18 @@ pub enum pat_ { #[deriving(Eq)] pub enum mutability { m_mutbl, m_imm, m_const, } +#[cfg(stage0)] impl to_bytes::IterBytes for mutability { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { (*self as u8).iter_bytes(lsb0, f) } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for mutability { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + (*self as u8).iter_bytes(lsb0, f) + } +} #[auto_encode] #[auto_decode] @@ -345,11 +372,18 @@ pub enum Sigil { ManagedSigil } +#[cfg(stage0)] impl to_bytes::IterBytes for Sigil { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { (*self as uint).iter_bytes(lsb0, f) } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for Sigil { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + (*self as uint).iter_bytes(lsb0, f) + } +} impl ToStr for Sigil { fn to_str(&self) -> ~str { @@ -744,11 +778,18 @@ impl ToStr for int_ty { } } +#[cfg(stage0)] impl to_bytes::IterBytes for int_ty { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { (*self as u8).iter_bytes(lsb0, f) } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for int_ty { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + (*self as u8).iter_bytes(lsb0, f) + } +} #[auto_encode] #[auto_decode] @@ -761,11 +802,18 @@ impl ToStr for uint_ty { } } +#[cfg(stage0)] impl to_bytes::IterBytes for uint_ty { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { (*self as u8).iter_bytes(lsb0, f) } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for uint_ty { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + (*self as u8).iter_bytes(lsb0, f) + } +} #[auto_encode] #[auto_decode] @@ -778,11 +826,18 @@ impl ToStr for float_ty { } } +#[cfg(stage0)] impl to_bytes::IterBytes for float_ty { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { (*self as u8).iter_bytes(lsb0, f) } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for float_ty { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + (*self as u8).iter_bytes(lsb0, f) + } +} // NB Eq method appears below. #[auto_encode] @@ -823,11 +878,18 @@ impl ToStr for Onceness { } } +#[cfg(stage0)] impl to_bytes::IterBytes for Onceness { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { (*self as uint).iter_bytes(lsb0, f); } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for Onceness { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + (*self as uint).iter_bytes(lsb0, f) + } +} #[auto_encode] #[auto_decode] @@ -874,11 +936,18 @@ pub enum ty_ { ty_infer, } +#[cfg(stage0)] impl to_bytes::IterBytes for Ty { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { to_bytes::iter_bytes_2(&self.span.lo, &self.span.hi, lsb0, f); } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for Ty { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + to_bytes::iter_bytes_2(&self.span.lo, &self.span.hi, lsb0, f) + } +} #[auto_encode] #[auto_decode] @@ -941,11 +1010,18 @@ impl ToStr for purity { } } +#[cfg(stage0)] impl to_bytes::IterBytes for purity { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { (*self as u8).iter_bytes(lsb0, f) } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for purity { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + (*self as u8).iter_bytes(lsb0, f) + } +} #[auto_encode] #[auto_decode] @@ -956,11 +1032,18 @@ pub enum ret_style { return_val, // everything else } +#[cfg(stage0)] impl to_bytes::IterBytes for ret_style { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { (*self as u8).iter_bytes(lsb0, f) } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for ret_style { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + (*self as u8).iter_bytes(lsb0, f) + } +} #[auto_encode] #[auto_decode] diff --git a/src/libsyntax/ast_util.rs b/src/libsyntax/ast_util.rs index 77277dea81453..ceff868d11f21 100644 --- a/src/libsyntax/ast_util.rs +++ b/src/libsyntax/ast_util.rs @@ -191,12 +191,21 @@ pub fn is_call_expr(e: @expr) -> bool { } // This makes def_id hashable +#[cfg(stage0)] impl to_bytes::IterBytes for def_id { #[inline(always)] fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { to_bytes::iter_bytes_2(&self.crate, &self.node, lsb0, f); } } +// This makes def_id hashable +#[cfg(not(stage0))] +impl to_bytes::IterBytes for def_id { + #[inline(always)] + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + to_bytes::iter_bytes_2(&self.crate, &self.node, lsb0, f) + } +} pub fn block_from_expr(e: @expr) -> blk { let blk_ = default_block(~[], option::Some::<@expr>(e), e.id); diff --git a/src/libsyntax/codemap.rs b/src/libsyntax/codemap.rs index 846097550d14f..053ed76d66b2a 100644 --- a/src/libsyntax/codemap.rs +++ b/src/libsyntax/codemap.rs @@ -65,11 +65,18 @@ impl Sub for BytePos { } } +#[cfg(stage0)] impl to_bytes::IterBytes for BytePos { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { (**self).iter_bytes(lsb0, f) } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for BytePos { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + (**self).iter_bytes(lsb0, f) + } +} impl Pos for CharPos { fn from_uint(n: uint) -> CharPos { CharPos(n) } @@ -83,11 +90,18 @@ impl cmp::Ord for CharPos { fn gt(&self, other: &CharPos) -> bool { **self > **other } } +#[cfg(stage0)] impl to_bytes::IterBytes for CharPos { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { (**self).iter_bytes(lsb0, f) } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for CharPos { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + (**self).iter_bytes(lsb0, f) + } +} impl Add for CharPos { fn add(&self, rhs: &CharPos) -> CharPos { diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs index 68c74c2d12b55..5129fa6ebd2aa 100644 --- a/src/libsyntax/ext/expand.rs +++ b/src/libsyntax/ext/expand.rs @@ -195,18 +195,8 @@ pub fn expand_item(extsbox: @mut SyntaxEnv, } // does this attribute list contain "macro_escape" ? -pub fn contains_macro_escape (attrs: &[ast::attribute]) -> bool{ - let mut accum = false; - do attrs.each |attr| { - let mname = attr::get_attr_name(attr); - if (mname == @~"macro_escape") { - accum = true; - false - } else { - true - } - } - accum +pub fn contains_macro_escape (attrs: &[ast::attribute]) -> bool { + attrs.any(|attr| "macro_escape" == *attr::get_attr_name(attr)) } // this macro disables (one layer of) macro diff --git a/src/libsyntax/ext/pipes/proto.rs b/src/libsyntax/ext/pipes/proto.rs index 647c7741bd897..7c78ec066d031 100644 --- a/src/libsyntax/ext/pipes/proto.rs +++ b/src/libsyntax/ext/pipes/proto.rs @@ -100,6 +100,7 @@ pub impl state_ { /// Iterate over the states that can be reached in one message /// from this state. + #[cfg(stage0)] fn reachable(&self, f: &fn(state) -> bool) { for self.messages.each |m| { match *m { @@ -111,6 +112,21 @@ pub impl state_ { } } } + /// Iterate over the states that can be reached in one message + /// from this state. + #[cfg(not(stage0))] + fn reachable(&self, f: &fn(state) -> bool) -> bool { + for self.messages.each |m| { + match *m { + message(_, _, _, _, Some(next_state { state: ref id, _ })) => { + let state = self.proto.get_state((*id)); + if !f(state) { return false; } + } + _ => () + } + } + return true; + } } pub type protocol = @mut protocol_; diff --git a/src/libsyntax/opt_vec.rs b/src/libsyntax/opt_vec.rs index 600ab964e5238..6110579863dbf 100644 --- a/src/libsyntax/opt_vec.rs +++ b/src/libsyntax/opt_vec.rs @@ -132,12 +132,20 @@ impl Eq for OptVec { } impl BaseIter for OptVec { + #[cfg(stage0)] fn each(&self, blk: &fn(v: &A) -> bool) { match *self { Empty => {} Vec(ref v) => v.each(blk) } } + #[cfg(not(stage0))] + fn each(&self, blk: &fn(v: &A) -> bool) -> bool { + match *self { + Empty => true, + Vec(ref v) => v.each(blk) + } + } fn size_hint(&self) -> Option { Some(self.len()) @@ -146,10 +154,16 @@ impl BaseIter for OptVec { impl old_iter::ExtendedIter for OptVec { #[inline(always)] + #[cfg(stage0)] fn eachi(&self, blk: &fn(v: uint, v: &A) -> bool) { old_iter::eachi(self, blk) } #[inline(always)] + #[cfg(not(stage0))] + fn eachi(&self, blk: &fn(v: uint, v: &A) -> bool) -> bool { + old_iter::eachi(self, blk) + } + #[inline(always)] fn all(&self, blk: &fn(&A) -> bool) -> bool { old_iter::all(self, blk) } diff --git a/src/libsyntax/parse/obsolete.rs b/src/libsyntax/parse/obsolete.rs index e486a6254e76a..a4ac038cf466f 100644 --- a/src/libsyntax/parse/obsolete.rs +++ b/src/libsyntax/parse/obsolete.rs @@ -62,12 +62,20 @@ pub enum ObsoleteSyntax { ObsoleteFixedLengthVectorType, } +#[cfg(stage0)] impl to_bytes::IterBytes for ObsoleteSyntax { #[inline(always)] fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { (*self as uint).iter_bytes(lsb0, f); } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for ObsoleteSyntax { + #[inline(always)] + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + (*self as uint).iter_bytes(lsb0, f) + } +} pub impl Parser { /// Reports an obsolete syntax non-fatal error. diff --git a/src/libsyntax/parse/token.rs b/src/libsyntax/parse/token.rs index fe7bd5b3bc17d..15441b6fcfc57 100644 --- a/src/libsyntax/parse/token.rs +++ b/src/libsyntax/parse/token.rs @@ -355,11 +355,18 @@ impl<'self> Equiv<@~str> for StringRef<'self> { fn equiv(&self, other: &@~str) -> bool { str::eq_slice(**self, **other) } } +#[cfg(stage0)] impl<'self> to_bytes::IterBytes for StringRef<'self> { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { (**self).iter_bytes(lsb0, f); } } +#[cfg(not(stage0))] +impl<'self> to_bytes::IterBytes for StringRef<'self> { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + (**self).iter_bytes(lsb0, f) + } +} /** * Maps a token to a record specifying the corresponding binary From a87db3e2cd0aaaa513b13391d3ad21861d16e480 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Fri, 3 May 2013 13:08:08 -0400 Subject: [PATCH 346/410] rustc: Use the new `for` protocol --- src/librustc/metadata/csearch.rs | 21 ++ src/librustc/metadata/decoder.rs | 53 +++- src/librustc/metadata/encoder.rs | 3 +- src/librustc/metadata/filesearch.rs | 28 ++ src/librustc/middle/borrowck/check_loans.rs | 60 ++++ src/librustc/middle/dataflow.rs | 61 ++++ src/librustc/middle/lang_items.rs | 5 + src/librustc/middle/resolve.rs | 10 +- src/librustc/middle/resolve_stage0.rs | 10 +- src/librustc/middle/trans/common.rs | 29 ++ src/librustc/middle/trans/datum.rs | 7 + src/librustc/middle/ty.rs | 262 ++++++++++++++++++ src/librustc/middle/typeck/check/mod.rs | 9 + src/librustc/middle/typeck/coherence.rs | 22 ++ .../middle/typeck/infer/region_inference.rs | 34 +++ src/libstd/ebml.rs | 33 +++ 16 files changed, 628 insertions(+), 19 deletions(-) diff --git a/src/librustc/metadata/csearch.rs b/src/librustc/metadata/csearch.rs index 375989b0ebe61..2f4a0d0b2a0e3 100644 --- a/src/librustc/metadata/csearch.rs +++ b/src/librustc/metadata/csearch.rs @@ -44,14 +44,24 @@ pub fn get_type_param_count(cstore: @mut cstore::CStore, def: ast::def_id) } /// Iterates over all the language items in the given crate. +#[cfg(stage0)] pub fn each_lang_item(cstore: @mut cstore::CStore, cnum: ast::crate_num, f: &fn(ast::node_id, uint) -> bool) { let crate_data = cstore::get_crate_data(cstore, cnum); decoder::each_lang_item(crate_data, f) } +/// Iterates over all the language items in the given crate. +#[cfg(not(stage0))] +pub fn each_lang_item(cstore: @mut cstore::CStore, + cnum: ast::crate_num, + f: &fn(ast::node_id, uint) -> bool) -> bool { + let crate_data = cstore::get_crate_data(cstore, cnum); + decoder::each_lang_item(crate_data, f) +} /// Iterates over all the paths in the given crate. +#[cfg(stage0)] pub fn each_path(cstore: @mut cstore::CStore, cnum: ast::crate_num, f: &fn(&str, decoder::def_like) -> bool) { @@ -61,6 +71,17 @@ pub fn each_path(cstore: @mut cstore::CStore, }; decoder::each_path(cstore.intr, crate_data, get_crate_data, f); } +/// Iterates over all the paths in the given crate. +#[cfg(not(stage0))] +pub fn each_path(cstore: @mut cstore::CStore, + cnum: ast::crate_num, + f: &fn(&str, decoder::def_like) -> bool) -> bool { + let crate_data = cstore::get_crate_data(cstore, cnum); + let get_crate_data: decoder::GetCrateDataCb = |cnum| { + cstore::get_crate_data(cstore, cnum) + }; + decoder::each_path(cstore.intr, crate_data, get_crate_data, f) +} pub fn get_item_path(tcx: ty::ctxt, def: ast::def_id) -> ast_map::path { let cstore = tcx.cstore; diff --git a/src/librustc/metadata/decoder.rs b/src/librustc/metadata/decoder.rs index fd35a4425d870..c121ddafc4daa 100644 --- a/src/librustc/metadata/decoder.rs +++ b/src/librustc/metadata/decoder.rs @@ -196,6 +196,7 @@ fn item_def_id(d: ebml::Doc, cdata: cmd) -> ast::def_id { |d| parse_def_id(d))); } +#[cfg(stage0)] fn each_reexport(d: ebml::Doc, f: &fn(ebml::Doc) -> bool) { for reader::tagged_docs(d, tag_items_data_item_reexport) |reexport_doc| { if !f(reexport_doc) { @@ -203,6 +204,15 @@ fn each_reexport(d: ebml::Doc, f: &fn(ebml::Doc) -> bool) { } } } +#[cfg(not(stage0))] +fn each_reexport(d: ebml::Doc, f: &fn(ebml::Doc) -> bool) -> bool { + for reader::tagged_docs(d, tag_items_data_item_reexport) |reexport_doc| { + if !f(reexport_doc) { + return false; + } + } + return true; +} fn variant_disr_val(d: ebml::Doc) -> Option { do reader::maybe_get_doc(d, tag_disr_val).chain |val_doc| { @@ -454,6 +464,7 @@ fn def_like_to_def(def_like: def_like) -> ast::def { } /// Iterates over the language items in the given crate. +#[cfg(stage0)] pub fn each_lang_item(cdata: cmd, f: &fn(ast::node_id, uint) -> bool) { let root = reader::Doc(cdata.data); let lang_items = reader::get_doc(root, tag_lang_items); @@ -469,11 +480,29 @@ pub fn each_lang_item(cdata: cmd, f: &fn(ast::node_id, uint) -> bool) { } } } +/// Iterates over the language items in the given crate. +#[cfg(not(stage0))] +pub fn each_lang_item(cdata: cmd, f: &fn(ast::node_id, uint) -> bool) -> bool { + let root = reader::Doc(cdata.data); + let lang_items = reader::get_doc(root, tag_lang_items); + for reader::tagged_docs(lang_items, tag_lang_items_item) |item_doc| { + let id_doc = reader::get_doc(item_doc, tag_lang_items_item_id); + let id = reader::doc_as_u32(id_doc) as uint; + let node_id_doc = reader::get_doc(item_doc, + tag_lang_items_item_node_id); + let node_id = reader::doc_as_u32(node_id_doc) as ast::node_id; + + if !f(node_id, id) { + return false; + } + } + return true; +} /// Iterates over all the paths in the given crate. -pub fn each_path(intr: @ident_interner, cdata: cmd, - get_crate_data: GetCrateDataCb, - f: &fn(&str, def_like) -> bool) { +pub fn _each_path(intr: @ident_interner, cdata: cmd, + get_crate_data: GetCrateDataCb, + f: &fn(&str, def_like) -> bool) -> bool { let root = reader::Doc(cdata.data); let items = reader::get_doc(root, tag_items); let items_data = reader::get_doc(items, tag_items_data); @@ -555,10 +584,20 @@ pub fn each_path(intr: @ident_interner, cdata: cmd, } } - // If broken, stop here. - if broken { - return; - } + return broken; +} + +#[cfg(stage0)] +pub fn each_path(intr: @ident_interner, cdata: cmd, + get_crate_data: GetCrateDataCb, + f: &fn(&str, def_like) -> bool) { + _each_path(intr, cdata, get_crate_data, f); +} +#[cfg(not(stage0))] +pub fn each_path(intr: @ident_interner, cdata: cmd, + get_crate_data: GetCrateDataCb, + f: &fn(&str, def_like) -> bool) -> bool { + _each_path(intr, cdata, get_crate_data, f) } pub fn get_item_path(intr: @ident_interner, cdata: cmd, id: ast::node_id) diff --git a/src/librustc/metadata/encoder.rs b/src/librustc/metadata/encoder.rs index 6c02ece9289ae..7d25d5f3ec92e 100644 --- a/src/librustc/metadata/encoder.rs +++ b/src/librustc/metadata/encoder.rs @@ -1391,11 +1391,10 @@ pub fn encode_metadata(parms: EncodeParams, crate: &crate) -> ~[u8] { ecx.stats.total_bytes = *wr.pos; if (tcx.sess.meta_stats()) { - do wr.bytes.each |e| { + for wr.bytes.each |e| { if *e == 0 { ecx.stats.zero_bytes += 1; } - true } io::println("metadata stats:"); diff --git a/src/librustc/metadata/filesearch.rs b/src/librustc/metadata/filesearch.rs index 7547f7f763af0..0708b7d38d321 100644 --- a/src/librustc/metadata/filesearch.rs +++ b/src/librustc/metadata/filesearch.rs @@ -21,7 +21,10 @@ pub fn pick_file(file: Path, path: &Path) -> Option { pub trait FileSearch { fn sysroot(&self) -> @Path; + #[cfg(stage0)] fn for_each_lib_search_path(&self, f: &fn(&Path) -> bool); + #[cfg(not(stage0))] + fn for_each_lib_search_path(&self, f: &fn(&Path) -> bool) -> bool; fn get_target_lib_path(&self) -> Path; fn get_target_lib_file_path(&self, file: &Path) -> Path; } @@ -37,6 +40,7 @@ pub fn mk_filesearch(maybe_sysroot: &Option<@Path>, } impl FileSearch for FileSearchImpl { fn sysroot(&self) -> @Path { self.sysroot } + #[cfg(stage0)] fn for_each_lib_search_path(&self, f: &fn(&Path) -> bool) { debug!("filesearch: searching additional lib search paths"); // a little weird @@ -60,6 +64,30 @@ pub fn mk_filesearch(maybe_sysroot: &Option<@Path>, result::Err(_) => true }; } + #[cfg(not(stage0))] + fn for_each_lib_search_path(&self, f: &fn(&Path) -> bool) -> bool { + debug!("filesearch: searching additional lib search paths"); + // a little weird + self.addl_lib_search_paths.each(f); + + debug!("filesearch: searching target lib path"); + if !f(&make_target_lib_path(self.sysroot, + self.target_triple)) { + return false; + } + debug!("filesearch: searching rustpkg lib path nearest"); + if match get_rustpkg_lib_path_nearest() { + result::Ok(ref p) => f(p), + result::Err(_) => true + } { + return true; + } + debug!("filesearch: searching rustpkg lib path"); + match get_rustpkg_lib_path() { + result::Ok(ref p) => f(p), + result::Err(_) => true + } + } fn get_target_lib_path(&self) -> Path { make_target_lib_path(self.sysroot, self.target_triple) } diff --git a/src/librustc/middle/borrowck/check_loans.rs b/src/librustc/middle/borrowck/check_loans.rs index ba719fe34d719..27f6ae33ba3d1 100644 --- a/src/librustc/middle/borrowck/check_loans.rs +++ b/src/librustc/middle/borrowck/check_loans.rs @@ -67,6 +67,7 @@ enum MoveError { pub impl<'self> CheckLoanCtxt<'self> { fn tcx(&self) -> ty::ctxt { self.bccx.tcx } + #[cfg(stage0)] fn each_issued_loan(&self, scope_id: ast::node_id, op: &fn(&Loan) -> bool) @@ -84,7 +85,27 @@ pub impl<'self> CheckLoanCtxt<'self> { } } } + #[cfg(not(stage0))] + fn each_issued_loan(&self, + scope_id: ast::node_id, + op: &fn(&Loan) -> bool) -> bool + { + //! Iterates over each loan that that has been issued + //! on entrance to `scope_id`, regardless of whether it is + //! actually *in scope* at that point. Sometimes loans + //! are issued for future scopes and thus they may have been + //! *issued* but not yet be in effect. + + for self.dfcx.each_bit_on_entry(scope_id) |loan_index| { + let loan = &self.all_loans[loan_index]; + if !op(loan) { + return false; + } + } + return true; + } + #[cfg(stage0)] fn each_in_scope_loan(&self, scope_id: ast::node_id, op: &fn(&Loan) -> bool) @@ -101,7 +122,26 @@ pub impl<'self> CheckLoanCtxt<'self> { } } } + #[cfg(not(stage0))] + fn each_in_scope_loan(&self, + scope_id: ast::node_id, + op: &fn(&Loan) -> bool) -> bool + { + //! Like `each_issued_loan()`, but only considers loans that are + //! currently in scope. + let region_maps = self.tcx().region_maps; + for self.each_issued_loan(scope_id) |loan| { + if region_maps.is_subscope_of(scope_id, loan.kill_scope) { + if !op(loan) { + return false; + } + } + } + return true; + } + + #[cfg(stage0)] fn each_in_scope_restriction(&self, scope_id: ast::node_id, loan_path: @LoanPath, @@ -120,6 +160,26 @@ pub impl<'self> CheckLoanCtxt<'self> { } } } + #[cfg(not(stage0))] + fn each_in_scope_restriction(&self, + scope_id: ast::node_id, + loan_path: @LoanPath, + op: &fn(&Loan, &Restriction) -> bool) -> bool + { + //! Iterates through all the in-scope restrictions for the + //! given `loan_path` + + for self.each_in_scope_loan(scope_id) |loan| { + for loan.restrictions.each |restr| { + if restr.loan_path == loan_path { + if !op(loan, restr) { + return false; + } + } + } + } + return true; + } fn loans_generated_by(&self, scope_id: ast::node_id) -> ~[uint] { //! Returns a vector of the loans that are generated as diff --git a/src/librustc/middle/dataflow.rs b/src/librustc/middle/dataflow.rs index ccb34851046bd..f1fa5144f4c75 100644 --- a/src/librustc/middle/dataflow.rs +++ b/src/librustc/middle/dataflow.rs @@ -182,6 +182,7 @@ impl DataFlowContext { } + #[cfg(stage0)] pub fn each_bit_on_entry(&self, id: ast::node_id, f: &fn(uint) -> bool) { @@ -194,7 +195,21 @@ impl DataFlowContext { id, bits_to_str(on_entry)); self.each_bit(on_entry, f); } + #[cfg(not(stage0))] + pub fn each_bit_on_entry(&self, + id: ast::node_id, + f: &fn(uint) -> bool) -> bool { + //! Iterates through each bit that is set on entry to `id`. + //! Only useful after `propagate()` has been called. + + let (start, end) = self.compute_id_range(id); + let on_entry = vec::slice(self.on_entry, start, end); + debug!("each_bit_on_entry(id=%?, on_entry=%s)", + id, bits_to_str(on_entry)); + self.each_bit(on_entry, f) + } + #[cfg(stage0)] pub fn each_gen_bit(&self, id: ast::node_id, f: &fn(uint) -> bool) { @@ -206,7 +221,20 @@ impl DataFlowContext { id, bits_to_str(gens)); self.each_bit(gens, f) } + #[cfg(not(stage0))] + pub fn each_gen_bit(&self, + id: ast::node_id, + f: &fn(uint) -> bool) -> bool { + //! Iterates through each bit in the gen set for `id`. + let (start, end) = self.compute_id_range(id); + let gens = vec::slice(self.gens, start, end); + debug!("each_gen_bit(id=%?, gens=%s)", + id, bits_to_str(gens)); + self.each_bit(gens, f) + } + + #[cfg(stage0)] fn each_bit(&self, words: &[uint], f: &fn(uint) -> bool) { @@ -236,6 +264,39 @@ impl DataFlowContext { } } } + #[cfg(not(stage0))] + fn each_bit(&self, + words: &[uint], + f: &fn(uint) -> bool) -> bool { + //! Helper for iterating over the bits in a bit set. + + for words.eachi |word_index, &word| { + if word != 0 { + let base_index = word_index * uint::bits; + for uint::range(0, uint::bits) |offset| { + let bit = 1 << offset; + if (word & bit) != 0 { + // NB: we round up the total number of bits + // that we store in any given bit set so that + // it is an even multiple of uint::bits. This + // means that there may be some stray bits at + // the end that do not correspond to any + // actual value. So before we callback, check + // whether the bit_index is greater than the + // actual value the user specified and stop + // iterating if so. + let bit_index = base_index + offset; + if bit_index >= self.bits_per_id { + return true; + } else if !f(bit_index) { + return false; + } + } + } + } + } + return true; + } } impl DataFlowContext { diff --git a/src/librustc/middle/lang_items.rs b/src/librustc/middle/lang_items.rs index c94dc3046dfd4..e2b4684696a90 100644 --- a/src/librustc/middle/lang_items.rs +++ b/src/librustc/middle/lang_items.rs @@ -86,6 +86,7 @@ pub impl LanguageItems { } } + #[cfg(stage0)] fn each_item(&self, f: &fn(def_id: def_id, i: uint) -> bool) { for self.items.eachi |i, &item| { if !f(item.get(), i) { @@ -93,6 +94,10 @@ pub impl LanguageItems { } } } + #[cfg(not(stage0))] + fn each_item(&self, f: &fn(def_id: def_id, i: uint) -> bool) -> bool { + self.items.eachi(|i, &item| f(item.get(), i)) + } pub fn item_name(index: uint) -> &'static str { match index { diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs index 5c3bb6ca401a6..e1e74f7a84766 100644 --- a/src/librustc/middle/resolve.rs +++ b/src/librustc/middle/resolve.rs @@ -2408,14 +2408,14 @@ pub impl Resolver { let merge_import_resolution = |ident, name_bindings: @mut NameBindings| { let dest_import_resolution; - match module_.import_resolutions.find(ident) { + match module_.import_resolutions.find(&ident) { None => { // Create a new import resolution from this child. dest_import_resolution = @mut ImportResolution(privacy, span, state); module_.import_resolutions.insert - (*ident, dest_import_resolution); + (ident, dest_import_resolution); } Some(&existing_import_resolution) => { dest_import_resolution = existing_import_resolution; @@ -2424,7 +2424,7 @@ pub impl Resolver { debug!("(resolving glob import) writing resolution `%s` in `%s` \ to `%s`, privacy=%?", - *self.session.str_of(*ident), + *self.session.str_of(ident), self.module_to_str(containing_module), self.module_to_str(module_), copy dest_import_resolution.privacy); @@ -2443,13 +2443,13 @@ pub impl Resolver { }; // Add all children from the containing module. - for containing_module.children.each |ident, name_bindings| { + for containing_module.children.each |&ident, name_bindings| { merge_import_resolution(ident, *name_bindings); } // Add external module children from the containing module. for containing_module.external_module_children.each - |ident, module| { + |&ident, module| { let name_bindings = @mut Resolver::create_name_bindings_from_module(*module); merge_import_resolution(ident, name_bindings); diff --git a/src/librustc/middle/resolve_stage0.rs b/src/librustc/middle/resolve_stage0.rs index 3a6424efe1d22..a0fe66ead0425 100644 --- a/src/librustc/middle/resolve_stage0.rs +++ b/src/librustc/middle/resolve_stage0.rs @@ -2424,14 +2424,14 @@ pub impl Resolver { let merge_import_resolution = |ident, name_bindings: @mut NameBindings| { let dest_import_resolution; - match module_.import_resolutions.find(ident) { + match module_.import_resolutions.find(&ident) { None => { // Create a new import resolution from this child. dest_import_resolution = @mut ImportResolution(privacy, span, state); module_.import_resolutions.insert - (*ident, dest_import_resolution); + (ident, dest_import_resolution); } Some(existing_import_resolution) => { dest_import_resolution = *existing_import_resolution; @@ -2440,7 +2440,7 @@ pub impl Resolver { debug!("(resolving glob import) writing resolution `%s` in `%s` \ to `%s`, privacy=%?", - *self.session.str_of(*ident), + *self.session.str_of(ident), self.module_to_str(containing_module), self.module_to_str(module_), copy dest_import_resolution.privacy); @@ -2459,13 +2459,13 @@ pub impl Resolver { }; // Add all children from the containing module. - for containing_module.children.each |ident, name_bindings| { + for containing_module.children.each |&ident, name_bindings| { merge_import_resolution(ident, *name_bindings); } // Add external module children from the containing module. for containing_module.external_module_children.each - |ident, module| { + |&ident, module| { let name_bindings = @mut Resolver::create_name_bindings_from_module(*module); merge_import_resolution(ident, name_bindings); diff --git a/src/librustc/middle/trans/common.rs b/src/librustc/middle/trans/common.rs index c1309b422880a..d8db5bac24dc5 100644 --- a/src/librustc/middle/trans/common.rs +++ b/src/librustc/middle/trans/common.rs @@ -1369,6 +1369,7 @@ pub struct mono_id_ { pub type mono_id = @mono_id_; +#[cfg(stage0)] impl to_bytes::IterBytes for mono_param_id { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { match *self { @@ -1382,18 +1383,46 @@ impl to_bytes::IterBytes for mono_param_id { } } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for mono_param_id { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + match *self { + mono_precise(t, ref mids) => + to_bytes::iter_bytes_3(&0u8, &ty::type_id(t), mids, lsb0, f), + + mono_any => 1u8.iter_bytes(lsb0, f), + mono_repr(ref a, ref b, ref c, ref d) => + to_bytes::iter_bytes_5(&2u8, a, b, c, d, lsb0, f) + } + } +} + +#[cfg(stage0)] impl to_bytes::IterBytes for MonoDataClass { fn iter_bytes(&self, lsb0: bool, f:to_bytes::Cb) { (*self as u8).iter_bytes(lsb0, f) } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for MonoDataClass { + fn iter_bytes(&self, lsb0: bool, f:to_bytes::Cb) -> bool { + (*self as u8).iter_bytes(lsb0, f) + } +} +#[cfg(stage0)] impl to_bytes::IterBytes for mono_id_ { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { to_bytes::iter_bytes_2(&self.def, &self.params, lsb0, f); } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for mono_id_ { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + to_bytes::iter_bytes_2(&self.def, &self.params, lsb0, f) + } +} pub fn umax(cx: block, a: ValueRef, b: ValueRef) -> ValueRef { let cond = build::ICmp(cx, lib::llvm::IntULT, a, b); diff --git a/src/librustc/middle/trans/datum.rs b/src/librustc/middle/trans/datum.rs index 64b29fd8573d2..374bb23f2cb57 100644 --- a/src/librustc/middle/trans/datum.rs +++ b/src/librustc/middle/trans/datum.rs @@ -155,11 +155,18 @@ pub impl DatumMode { } } +#[cfg(stage0)] impl to_bytes::IterBytes for DatumMode { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { (*self as uint).iter_bytes(lsb0, f) } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for DatumMode { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + (*self as uint).iter_bytes(lsb0, f) + } +} /// See `Datum cleanup styles` section at the head of this module. #[deriving(Eq)] diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index c31843870e88c..1c2c02b21e61f 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -121,11 +121,18 @@ pub struct creader_cache_key { type creader_cache = @mut HashMap; +#[cfg(stage0)] impl to_bytes::IterBytes for creader_cache_key { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { to_bytes::iter_bytes_3(&self.cnum, &self.pos, &self.len, lsb0, f); } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for creader_cache_key { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + to_bytes::iter_bytes_3(&self.cnum, &self.pos, &self.len, lsb0, f) + } +} struct intern_key { sty: *sty, @@ -145,6 +152,7 @@ impl cmp::Eq for intern_key { } } +#[cfg(stage0)] impl to_bytes::IterBytes for intern_key { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { unsafe { @@ -152,6 +160,14 @@ impl to_bytes::IterBytes for intern_key { } } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for intern_key { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + unsafe { + (*self.sty).iter_bytes(lsb0, f) + } + } +} pub enum ast_ty_to_ty_cache_entry { atttce_unresolved, /* not resolved yet */ @@ -382,18 +398,33 @@ pub struct FnSig { output: t } +#[cfg(stage0)] impl to_bytes::IterBytes for BareFnTy { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { to_bytes::iter_bytes_3(&self.purity, &self.abis, &self.sig, lsb0, f) } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for BareFnTy { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + to_bytes::iter_bytes_3(&self.purity, &self.abis, &self.sig, lsb0, f) + } +} +#[cfg(stage0)] impl to_bytes::IterBytes for ClosureTy { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { to_bytes::iter_bytes_5(&self.purity, &self.sigil, &self.onceness, &self.region, &self.sig, lsb0, f) } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for ClosureTy { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + to_bytes::iter_bytes_5(&self.purity, &self.sigil, &self.onceness, + &self.region, &self.sig, lsb0, f) + } +} #[deriving(Eq, IterBytes)] pub struct param_ty { @@ -705,6 +736,7 @@ pub enum InferTy { FloatVar(FloatVid) } +#[cfg(stage0)] impl to_bytes::IterBytes for InferTy { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { match *self { @@ -714,6 +746,16 @@ impl to_bytes::IterBytes for InferTy { } } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for InferTy { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + match *self { + TyVar(ref tv) => to_bytes::iter_bytes_2(&0u8, tv, lsb0, f), + IntVar(ref iv) => to_bytes::iter_bytes_2(&1u8, iv, lsb0, f), + FloatVar(ref fv) => to_bytes::iter_bytes_2(&2u8, fv, lsb0, f), + } + } +} #[auto_encode] #[auto_decode] @@ -722,6 +764,7 @@ pub enum InferRegion { ReSkolemized(uint, bound_region) } +#[cfg(stage0)] impl to_bytes::IterBytes for InferRegion { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { match *self { @@ -730,6 +773,15 @@ impl to_bytes::IterBytes for InferRegion { } } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for InferRegion { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + match *self { + ReVar(ref rv) => to_bytes::iter_bytes_2(&0u8, rv, lsb0, f), + ReSkolemized(ref v, _) => to_bytes::iter_bytes_2(&1u8, v, lsb0, f) + } + } +} impl cmp::Eq for InferRegion { fn eq(&self, other: &InferRegion) -> bool { @@ -810,29 +862,57 @@ impl ToStr for IntVarValue { } } +#[cfg(stage0)] impl to_bytes::IterBytes for TyVid { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { self.to_uint().iter_bytes(lsb0, f) } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for TyVid { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + self.to_uint().iter_bytes(lsb0, f) + } +} +#[cfg(stage0)] impl to_bytes::IterBytes for IntVid { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { self.to_uint().iter_bytes(lsb0, f) } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for IntVid { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + self.to_uint().iter_bytes(lsb0, f) + } +} +#[cfg(stage0)] impl to_bytes::IterBytes for FloatVid { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { self.to_uint().iter_bytes(lsb0, f) } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for FloatVid { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + self.to_uint().iter_bytes(lsb0, f) + } +} +#[cfg(stage0)] impl to_bytes::IterBytes for RegionVid { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { self.to_uint().iter_bytes(lsb0, f) } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for RegionVid { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + self.to_uint().iter_bytes(lsb0, f) + } +} pub struct TypeParameterDef { def_id: ast::def_id, @@ -2637,6 +2717,7 @@ impl cmp::TotalEq for bound_region { } } +#[cfg(stage0)] impl to_bytes::IterBytes for vstore { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { match *self { @@ -2651,7 +2732,23 @@ impl to_bytes::IterBytes for vstore { } } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for vstore { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + match *self { + vstore_fixed(ref u) => + to_bytes::iter_bytes_2(&0u8, u, lsb0, f), + vstore_uniq => 1u8.iter_bytes(lsb0, f), + vstore_box => 2u8.iter_bytes(lsb0, f), + + vstore_slice(ref r) => + to_bytes::iter_bytes_2(&3u8, r, lsb0, f), + } + } +} + +#[cfg(stage0)] impl to_bytes::IterBytes for substs { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { to_bytes::iter_bytes_3(&self.self_r, @@ -2659,21 +2756,46 @@ impl to_bytes::IterBytes for substs { &self.tps, lsb0, f) } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for substs { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + to_bytes::iter_bytes_3(&self.self_r, + &self.self_ty, + &self.tps, lsb0, f) + } +} +#[cfg(stage0)] impl to_bytes::IterBytes for mt { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { to_bytes::iter_bytes_2(&self.ty, &self.mutbl, lsb0, f) } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for mt { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + to_bytes::iter_bytes_2(&self.ty, + &self.mutbl, lsb0, f) + } +} +#[cfg(stage0)] impl to_bytes::IterBytes for field { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { to_bytes::iter_bytes_2(&self.ident, &self.mt, lsb0, f) } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for field { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + to_bytes::iter_bytes_2(&self.ident, + &self.mt, lsb0, f) + } +} +#[cfg(stage0)] impl to_bytes::IterBytes for FnSig { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { to_bytes::iter_bytes_2(&self.inputs, @@ -2681,7 +2803,16 @@ impl to_bytes::IterBytes for FnSig { lsb0, f); } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for FnSig { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + to_bytes::iter_bytes_2(&self.inputs, + &self.output, + lsb0, f) + } +} +#[cfg(stage0)] impl to_bytes::IterBytes for sty { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { match *self { @@ -2756,6 +2887,81 @@ impl to_bytes::IterBytes for sty { } } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for sty { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + match *self { + ty_nil => 0u8.iter_bytes(lsb0, f), + ty_bool => 1u8.iter_bytes(lsb0, f), + + ty_int(ref t) => + to_bytes::iter_bytes_2(&2u8, t, lsb0, f), + + ty_uint(ref t) => + to_bytes::iter_bytes_2(&3u8, t, lsb0, f), + + ty_float(ref t) => + to_bytes::iter_bytes_2(&4u8, t, lsb0, f), + + ty_estr(ref v) => + to_bytes::iter_bytes_2(&5u8, v, lsb0, f), + + ty_enum(ref did, ref substs) => + to_bytes::iter_bytes_3(&6u8, did, substs, lsb0, f), + + ty_box(ref mt) => + to_bytes::iter_bytes_2(&7u8, mt, lsb0, f), + + ty_evec(ref mt, ref v) => + to_bytes::iter_bytes_3(&8u8, mt, v, lsb0, f), + + ty_unboxed_vec(ref mt) => + to_bytes::iter_bytes_2(&9u8, mt, lsb0, f), + + ty_tup(ref ts) => + to_bytes::iter_bytes_2(&10u8, ts, lsb0, f), + + ty_bare_fn(ref ft) => + to_bytes::iter_bytes_2(&12u8, ft, lsb0, f), + + ty_self(ref did) => to_bytes::iter_bytes_2(&13u8, did, lsb0, f), + + ty_infer(ref v) => + to_bytes::iter_bytes_2(&14u8, v, lsb0, f), + + ty_param(ref p) => + to_bytes::iter_bytes_2(&15u8, p, lsb0, f), + + ty_type => 16u8.iter_bytes(lsb0, f), + ty_bot => 17u8.iter_bytes(lsb0, f), + + ty_ptr(ref mt) => + to_bytes::iter_bytes_2(&18u8, mt, lsb0, f), + + ty_uniq(ref mt) => + to_bytes::iter_bytes_2(&19u8, mt, lsb0, f), + + ty_trait(ref did, ref substs, ref v, ref mutbl) => + to_bytes::iter_bytes_5(&20u8, did, substs, v, mutbl, lsb0, f), + + ty_opaque_closure_ptr(ref ck) => + to_bytes::iter_bytes_2(&21u8, ck, lsb0, f), + + ty_opaque_box => 22u8.iter_bytes(lsb0, f), + + ty_struct(ref did, ref substs) => + to_bytes::iter_bytes_3(&23u8, did, substs, lsb0, f), + + ty_rptr(ref r, ref mt) => + to_bytes::iter_bytes_3(&24u8, r, mt, lsb0, f), + + ty_err => 25u8.iter_bytes(lsb0, f), + + ty_closure(ref ct) => + to_bytes::iter_bytes_2(&26u8, ct, lsb0, f), + } + } +} pub fn node_id_to_trait_ref(cx: ctxt, id: ast::node_id) -> @ty::TraitRef { match cx.trait_refs.find(&id) { @@ -4284,6 +4490,7 @@ pub fn determine_inherited_purity(parent: (ast::purity, ast::node_id), // Here, the supertraits are the transitive closure of the supertrait // relation on the supertraits from each bounded trait's constraint // list. +#[cfg(stage0)] pub fn each_bound_trait_and_supertraits(tcx: ctxt, bounds: &ParamBounds, f: &fn(@TraitRef) -> bool) { @@ -4323,6 +4530,61 @@ pub fn each_bound_trait_and_supertraits(tcx: ctxt, } } } +// Iterate over a type parameter's bounded traits and any supertraits +// of those traits, ignoring kinds. +// Here, the supertraits are the transitive closure of the supertrait +// relation on the supertraits from each bounded trait's constraint +// list. +#[cfg(not(stage0))] +pub fn each_bound_trait_and_supertraits(tcx: ctxt, + bounds: param_bounds, + f: &fn(&TraitRef) -> bool) -> bool { + for bounds.each |bound| { + let bound_trait_ref = match *bound { + ty::bound_trait(bound_t) => bound_t, + + ty::bound_copy | ty::bound_owned | + ty::bound_const | ty::bound_durable => { + loop; // skip non-trait bounds + } + }; + + let mut supertrait_set = HashMap::new(); + let mut trait_refs = ~[]; + let mut i = 0; + + // Seed the worklist with the trait from the bound + supertrait_set.insert(bound_trait_ref.def_id, ()); + trait_refs.push(bound_trait_ref); + + // Add the given trait ty to the hash map + while i < trait_refs.len() { + debug!("each_bound_trait_and_supertraits(i=%?, trait_ref=%s)", + i, trait_refs[i].repr(tcx)); + + if !f(trait_refs[i]) { + return false; + } + + // Add supertraits to supertrait_set + let supertrait_refs = trait_ref_supertraits(tcx, trait_refs[i]); + for supertrait_refs.each |&supertrait_ref| { + debug!("each_bound_trait_and_supertraits(supertrait_ref=%s)", + supertrait_ref.repr(tcx)); + + let d_id = supertrait_ref.def_id; + if !supertrait_set.contains_key(&d_id) { + // FIXME(#5527) Could have same trait multiple times + supertrait_set.insert(d_id, ()); + trait_refs.push(supertrait_ref); + } + } + + i += 1; + } + } + return true; +} pub fn count_traits_and_supertraits(tcx: ctxt, type_param_defs: &[TypeParameterDef]) -> uint { diff --git a/src/librustc/middle/typeck/check/mod.rs b/src/librustc/middle/typeck/check/mod.rs index 89eef1c7cb7f1..1c3890e2e179c 100644 --- a/src/librustc/middle/typeck/check/mod.rs +++ b/src/librustc/middle/typeck/check/mod.rs @@ -828,6 +828,7 @@ pub impl FnCtxt { } } + #[cfg(stage0)] fn opt_node_ty_substs(&self, id: ast::node_id, f: &fn(&ty::substs) -> bool) { match self.inh.node_type_substs.find(&id) { @@ -835,6 +836,14 @@ pub impl FnCtxt { None => () } } + #[cfg(not(stage0))] + fn opt_node_ty_substs(&self, id: ast::node_id, + f: &fn(&ty::substs) -> bool) -> bool { + match self.inh.node_type_substs.find(&id) { + Some(s) => f(s), + None => true + } + } fn mk_subty(&self, a_is_expected: bool, diff --git a/src/librustc/middle/typeck/coherence.rs b/src/librustc/middle/typeck/coherence.rs index 6a83db6baee3c..260d3f440f9cf 100644 --- a/src/librustc/middle/typeck/coherence.rs +++ b/src/librustc/middle/typeck/coherence.rs @@ -524,6 +524,7 @@ pub impl CoherenceChecker { } } + #[cfg(stage0)] fn each_provided_trait_method(&self, trait_did: ast::def_id, f: &fn(x: @ty::method) -> bool) { @@ -543,6 +544,27 @@ pub impl CoherenceChecker { } } } + #[cfg(not(stage0))] + fn each_provided_trait_method(&self, + trait_did: ast::def_id, + f: &fn(x: @ty::method) -> bool) -> bool { + // Make a list of all the names of the provided methods. + // XXX: This is horrible. + let mut provided_method_idents = HashSet::new(); + let tcx = self.crate_context.tcx; + for ty::provided_trait_methods(tcx, trait_did).each |ident| { + provided_method_idents.insert(*ident); + } + + for ty::trait_methods(tcx, trait_did).each |&method| { + if provided_method_idents.contains(&method.ident) { + if !f(method) { + return false; + } + } + } + return true; + } fn polytypes_unify(&self, polytype_a: ty_param_bounds_and_ty, polytype_b: ty_param_bounds_and_ty) diff --git a/src/librustc/middle/typeck/infer/region_inference.rs b/src/librustc/middle/typeck/infer/region_inference.rs index 8349e16d2c440..73c120ad35dd3 100644 --- a/src/librustc/middle/typeck/infer/region_inference.rs +++ b/src/librustc/middle/typeck/infer/region_inference.rs @@ -560,6 +560,7 @@ enum Constraint { ConstrainVarSubReg(RegionVid, Region) } +#[cfg(stage0)] impl to_bytes::IterBytes for Constraint { fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) { match *self { @@ -574,6 +575,21 @@ impl to_bytes::IterBytes for Constraint { } } } +#[cfg(not(stage0))] +impl to_bytes::IterBytes for Constraint { + fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool { + match *self { + ConstrainVarSubVar(ref v0, ref v1) => + to_bytes::iter_bytes_3(&0u8, v0, v1, lsb0, f), + + ConstrainRegSubVar(ref ra, ref va) => + to_bytes::iter_bytes_3(&1u8, ra, va, lsb0, f), + + ConstrainVarSubReg(ref va, ref ra) => + to_bytes::iter_bytes_3(&2u8, va, ra, lsb0, f) + } + } +} #[deriving(Eq, IterBytes)] struct TwoRegions { @@ -1756,6 +1772,7 @@ pub impl RegionVarBindings { } } + #[cfg(stage0)] fn each_edge(&mut self, graph: &Graph, node_idx: RegionVid, @@ -1771,6 +1788,23 @@ pub impl RegionVarBindings { edge_idx = edge_ptr.next_edge[dir as uint]; } } + #[cfg(not(stage0))] + fn each_edge(&mut self, + graph: &Graph, + node_idx: RegionVid, + dir: Direction, + op: &fn(edge: &GraphEdge) -> bool) -> bool { + let mut edge_idx = + graph.nodes[node_idx.to_uint()].head_edge[dir as uint]; + while edge_idx != uint::max_value { + let edge_ptr = &graph.edges[edge_idx]; + if !op(edge_ptr) { + return false; + } + edge_idx = edge_ptr.next_edge[dir as uint]; + } + return true; + } } fn iterate_until_fixed_point( diff --git a/src/libstd/ebml.rs b/src/libstd/ebml.rs index 5e4f708f52fd4..8bf81a090cf29 100644 --- a/src/libstd/ebml.rs +++ b/src/libstd/ebml.rs @@ -199,6 +199,7 @@ pub mod reader { } } + #[cfg(stage0)] pub fn docs(d: Doc, it: &fn(uint, Doc) -> bool) { let mut pos = d.start; while pos < d.end { @@ -211,7 +212,22 @@ pub mod reader { } } } + #[cfg(not(stage0))] + pub fn docs(d: Doc, it: &fn(uint, Doc) -> bool) -> bool { + let mut pos = d.start; + while pos < d.end { + let elt_tag = vuint_at(*d.data, pos); + let elt_size = vuint_at(*d.data, elt_tag.next); + pos = elt_size.next + elt_size.val; + let doc = Doc { data: d.data, start: elt_size.next, end: pos }; + if !it(elt_tag.val, doc) { + return false; + } + } + return true; + } + #[cfg(stage0)] pub fn tagged_docs(d: Doc, tg: uint, it: &fn(Doc) -> bool) { let mut pos = d.start; while pos < d.end { @@ -227,6 +243,23 @@ pub mod reader { } } } + #[cfg(not(stage0))] + pub fn tagged_docs(d: Doc, tg: uint, it: &fn(Doc) -> bool) -> bool { + let mut pos = d.start; + while pos < d.end { + let elt_tag = vuint_at(*d.data, pos); + let elt_size = vuint_at(*d.data, elt_tag.next); + pos = elt_size.next + elt_size.val; + if elt_tag.val == tg { + let doc = Doc { data: d.data, start: elt_size.next, + end: pos }; + if !it(doc) { + return false; + } + } + } + return true; + } pub fn doc_data(d: Doc) -> ~[u8] { vec::slice::(*d.data, d.start, d.end).to_vec() From b01a40d45930f97e83753150dc1b39b26b3b398f Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Fri, 3 May 2013 16:14:29 -0400 Subject: [PATCH 347/410] rustpkg: Use the new `for` protocol --- src/librustpkg/workspace.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/librustpkg/workspace.rs b/src/librustpkg/workspace.rs index 15e2166b24abe..94b94d373e6b6 100644 --- a/src/librustpkg/workspace.rs +++ b/src/librustpkg/workspace.rs @@ -14,7 +14,7 @@ use path_util::{rust_path, workspace_contains_package_id}; use util::PkgId; use core::path::Path; -pub fn pkg_parent_workspaces(pkgid: PkgId, action: &fn(&Path) -> bool) { +pub fn pkg_parent_workspaces(pkgid: PkgId, action: &fn(&Path) -> bool) -> bool { // Using the RUST_PATH, find workspaces that contain // this package ID let workspaces = rust_path().filtered(|ws| @@ -31,4 +31,5 @@ pub fn pkg_parent_workspaces(pkgid: PkgId, action: &fn(&Path) -> bool) { break; } } -} \ No newline at end of file + return true; +} From cdc266e47d8ee63a1eaf29c775f2cbc5f3a61bb4 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Fri, 3 May 2013 16:02:24 -0400 Subject: [PATCH 348/410] Fix deriving(IterBytes) to use the new for-loop protocol --- src/libsyntax/ext/deriving/iter_bytes.rs | 26 ++++++++++++++---------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/libsyntax/ext/deriving/iter_bytes.rs b/src/libsyntax/ext/deriving/iter_bytes.rs index 3d66506d6ca8f..9eb246ffe2228 100644 --- a/src/libsyntax/ext/deriving/iter_bytes.rs +++ b/src/libsyntax/ext/deriving/iter_bytes.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use ast::{meta_item, item, expr}; +use ast::{meta_item, item, expr, and}; use codemap::span; use ext::base::ext_ctxt; use ext::build; @@ -31,7 +31,7 @@ pub fn expand_deriving_iter_bytes(cx: @ext_ctxt, Literal(Path::new(~[~"bool"])), Literal(Path::new(~[~"core", ~"to_bytes", ~"Cb"])) ], - ret_ty: nil_ty(), + ret_ty: Literal(Path::new(~[~"bool"])), const_nonmatching: false, combine_substructure: iter_bytes_substructure } @@ -58,13 +58,11 @@ fn iter_bytes_substructure(cx: @ext_ctxt, span: span, substr: &Substructure) -> }; let iter_bytes_ident = substr.method_ident; let call_iterbytes = |thing_expr| { - build::mk_stmt( - cx, span, - build::mk_method_call(cx, span, - thing_expr, iter_bytes_ident, - copy lsb0_f)) + build::mk_method_call(cx, span, + thing_expr, iter_bytes_ident, + copy lsb0_f) }; - let mut stmts = ~[]; + let mut exprs = ~[]; let fields; match *substr.fields { Struct(ref fs) => { @@ -78,7 +76,7 @@ fn iter_bytes_substructure(cx: @ext_ctxt, span: span, substr: &Substructure) -> None => build::mk_uint(cx, span, index) }; - stmts.push(call_iterbytes(discriminant)); + exprs.push(call_iterbytes(discriminant)); fields = fs; } @@ -86,8 +84,14 @@ fn iter_bytes_substructure(cx: @ext_ctxt, span: span, substr: &Substructure) -> } for fields.each |&(_, field, _)| { - stmts.push(call_iterbytes(field)); + exprs.push(call_iterbytes(field)); } - build::mk_block(cx, span, ~[], stmts, None) + if exprs.len() == 0 { + cx.span_bug(span, "#[deriving(IterBytes)] needs at least one field"); + } + + do vec::foldl(exprs[0], exprs.slice(1, exprs.len())) |prev, me| { + build::mk_binary(cx, span, and, prev, *me) + } } From 4400bbd72a18b5f034a5c43c29af87e1e453c2cb Mon Sep 17 00:00:00 2001 From: Youngsoo Son Date: Fri, 10 May 2013 16:55:59 +0900 Subject: [PATCH 349/410] A test file is fixed --- src/test/compile-fail/core-tls-store-pointer.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/compile-fail/core-tls-store-pointer.rs b/src/test/compile-fail/core-tls-store-pointer.rs index 42cf9c793d118..fcb25069de6dd 100644 --- a/src/test/compile-fail/core-tls-store-pointer.rs +++ b/src/test/compile-fail/core-tls-store-pointer.rs @@ -10,7 +10,7 @@ // Testing that we can't store a borrowed pointer it task-local storage -use core::task::local_data::*; +use core::local_data::*; fn key(_x: @&int) { } @@ -18,4 +18,4 @@ fn main() { unsafe { local_data_set(key, @&0); //~ ERROR does not fulfill `'static` } -} \ No newline at end of file +} From f6743fea70e99efc33f6890770da8c0f91723311 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Fri, 10 May 2013 16:12:19 +1000 Subject: [PATCH 350/410] librustc: allow destructuring of structs with destructors if the pattern has no moves. This check only works for `match`s, the checks (incorrectly) do not run for patterns in `let`s. --- src/librustc/middle/check_match.rs | 54 +++++++++++++------ src/librustc/middle/typeck/check/_match.rs | 6 --- ...-deconstructing-destructing-struct-let.rs} | 3 +- ...deconstructing-destructing-struct-match.rs | 28 ++++++++++ src/test/run-pass/issue-6341.rs | 18 +++++++ 5 files changed, 86 insertions(+), 23 deletions(-) rename src/test/compile-fail/{disallowed-deconstructing-destructing-struct.rs => disallowed-deconstructing-destructing-struct-let.rs} (89%) create mode 100644 src/test/compile-fail/disallowed-deconstructing-destructing-struct-match.rs create mode 100644 src/test/run-pass/issue-6341.rs diff --git a/src/librustc/middle/check_match.rs b/src/librustc/middle/check_match.rs index 09232b5bba823..893940d8ac60d 100644 --- a/src/librustc/middle/check_match.rs +++ b/src/librustc/middle/check_match.rs @@ -822,43 +822,65 @@ pub fn check_legality_of_move_bindings(cx: @MatchCheckCtxt, } } - // Now check to ensure that any move binding is not behind an @ or &. - // This is always illegal. + // Now check to ensure that any move binding is not behind an + // @ or &, or within a struct with a destructor. This is + // always illegal. let vt = visit::mk_vt(@visit::Visitor { - visit_pat: |pat, behind_bad_pointer: bool, v| { + visit_pat: |pat, (behind_bad_pointer, behind_dtor_struct): (bool, bool), v| { match pat.node { pat_ident(_, _, sub) => { debug!("(check legality of move) checking pat \ - ident with behind_bad_pointer %?", - behind_bad_pointer); + ident with behind_bad_pointer %? and behind_dtor_struct %?", + behind_bad_pointer, behind_dtor_struct); - if behind_bad_pointer && + if behind_bad_pointer || behind_dtor_struct && cx.moves_map.contains(&pat.id) { - cx.tcx.sess.span_err( - pat.span, - "by-move pattern \ - bindings may not occur \ - behind @ or & bindings"); + let msg = if behind_bad_pointer { + "by-move pattern bindings may not occur behind @ or & bindings" + } else { + "cannot bind by-move within struct (it has a destructor)" + }; + cx.tcx.sess.span_err(pat.span, msg); } match sub { None => {} Some(subpat) => { - (v.visit_pat)(subpat, behind_bad_pointer, v); + (v.visit_pat)(subpat, + (behind_bad_pointer, behind_dtor_struct), + v); } } } pat_box(subpat) | pat_region(subpat) => { - (v.visit_pat)(subpat, true, v); + (v.visit_pat)(subpat, (true, behind_dtor_struct), v); } - _ => visit::visit_pat(pat, behind_bad_pointer, v) + pat_struct(_, ref fields, _) => { + let behind_dtor_struct = behind_dtor_struct || + (match cx.tcx.def_map.find(&pat.id) { + Some(&def_struct(id)) => { + ty::has_dtor(cx.tcx, id) + } + _ => false + }); + debug!("(check legality of move) checking pat \ + struct with behind_bad_pointer %? and behind_dtor_struct %?", + behind_bad_pointer, behind_dtor_struct); + + for fields.each |fld| { + (v.visit_pat)(fld.pat, (behind_bad_pointer, + behind_dtor_struct), v) + } + } + + _ => visit::visit_pat(pat, (behind_bad_pointer, behind_dtor_struct), v) } }, - .. *visit::default_visitor::() + .. *visit::default_visitor::<(bool, bool)>() }); - (vt.visit_pat)(*pat, false, vt); + (vt.visit_pat)(*pat, (false, false), vt); } } diff --git a/src/librustc/middle/typeck/check/_match.rs b/src/librustc/middle/typeck/check/_match.rs index 40c5df7b76832..a1a098bc5760e 100644 --- a/src/librustc/middle/typeck/check/_match.rs +++ b/src/librustc/middle/typeck/check/_match.rs @@ -340,12 +340,6 @@ pub fn check_struct_pat(pcx: &pat_ctxt, pat_id: ast::node_id, span: span, } } - // Forbid pattern-matching structs with destructors. - if ty::has_dtor(tcx, class_id) { - tcx.sess.span_err(span, "deconstructing struct not allowed in pattern \ - (it has a destructor)"); - } - check_struct_pat_fields(pcx, span, path, fields, class_fields, class_id, substitutions, etc); } diff --git a/src/test/compile-fail/disallowed-deconstructing-destructing-struct.rs b/src/test/compile-fail/disallowed-deconstructing-destructing-struct-let.rs similarity index 89% rename from src/test/compile-fail/disallowed-deconstructing-destructing-struct.rs rename to src/test/compile-fail/disallowed-deconstructing-destructing-struct-let.rs index fa34c056794fc..ed68defdc2626 100644 --- a/src/test/compile-fail/disallowed-deconstructing-destructing-struct.rs +++ b/src/test/compile-fail/disallowed-deconstructing-destructing-struct-let.rs @@ -1,3 +1,4 @@ +// xfail-test // Copyright 2012 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. @@ -19,7 +20,7 @@ impl Drop for X { } fn unwrap(x: X) -> ~str { - let X { x: y } = x; //~ ERROR deconstructing struct not allowed in pattern + let X { x: y } = x; //~ ERROR cannot bind by-move within struct y } diff --git a/src/test/compile-fail/disallowed-deconstructing-destructing-struct-match.rs b/src/test/compile-fail/disallowed-deconstructing-destructing-struct-match.rs new file mode 100644 index 0000000000000..40305ba8b95c9 --- /dev/null +++ b/src/test/compile-fail/disallowed-deconstructing-destructing-struct-match.rs @@ -0,0 +1,28 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +struct X { + x: ~str, +} + +impl Drop for X { + fn finalize(&self) { + error!("value: %s", self.x); + } +} + +fn main() { + let x = X { x: ~"hello" }; + + match x { + X { x: y } => error!("contents: %s", y) + //~^ ERROR cannot bind by-move within struct + } +} diff --git a/src/test/run-pass/issue-6341.rs b/src/test/run-pass/issue-6341.rs new file mode 100644 index 0000000000000..394345556fcf3 --- /dev/null +++ b/src/test/run-pass/issue-6341.rs @@ -0,0 +1,18 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[deriving(Eq)] +struct A { x: uint } + +impl Drop for A { + fn finalize(&self) {} +} + +fn main() {} \ No newline at end of file From 81e06a5259f5e477f552a35ac58c4b69f58b1451 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Fri, 10 May 2013 19:30:42 +1000 Subject: [PATCH 351/410] Issue number on xfailed test --- .../disallowed-deconstructing-destructing-struct-let.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/compile-fail/disallowed-deconstructing-destructing-struct-let.rs b/src/test/compile-fail/disallowed-deconstructing-destructing-struct-let.rs index ed68defdc2626..c363f172d2f46 100644 --- a/src/test/compile-fail/disallowed-deconstructing-destructing-struct-let.rs +++ b/src/test/compile-fail/disallowed-deconstructing-destructing-struct-let.rs @@ -1,4 +1,4 @@ -// xfail-test +// xfail-test #3024 // Copyright 2012 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. From b7da97504943c79185548881aab88d6a0e2118fd Mon Sep 17 00:00:00 2001 From: Youngsoo Son Date: Fri, 10 May 2013 18:38:54 +0900 Subject: [PATCH 352/410] renamed vec::from_slice to vec::to_owned --- src/libcore/rand.rs | 2 +- src/libcore/vec.rs | 10 +++++----- src/librust/rust.rc | 2 +- src/librustc/metadata/decoder.rs | 2 +- src/librustc/metadata/encoder.rs | 2 +- src/librustc/middle/check_match.rs | 22 +++++++++++----------- src/librustc/middle/trans/adt.rs | 2 +- src/librustc/middle/trans/cabi.rs | 8 ++++---- src/librustc/middle/ty.rs | 2 +- src/libstd/flatpipes.rs | 2 +- src/libstd/getopts.rs | 2 +- src/libstd/md4.rs | 2 +- src/libstd/num/bigint.rs | 2 +- src/libstd/stats.rs | 2 +- src/libsyntax/attr.rs | 2 +- src/libsyntax/ext/asm.rs | 2 +- src/libsyntax/ext/base.rs | 2 +- src/libsyntax/ext/log_syntax.rs | 2 +- src/libsyntax/ext/quote.rs | 2 +- src/libsyntax/ext/trace_macros.rs | 2 +- src/libsyntax/ext/tt/macro_rules.rs | 4 ++-- 21 files changed, 39 insertions(+), 39 deletions(-) diff --git a/src/libcore/rand.rs b/src/libcore/rand.rs index f11840c95d5ac..672b71a1e9e0b 100644 --- a/src/libcore/rand.rs +++ b/src/libcore/rand.rs @@ -568,7 +568,7 @@ impl RngUtil for R { /// Shuffle a vec fn shuffle(&mut self, values: &[T]) -> ~[T] { - let mut m = vec::from_slice(values); + let mut m = vec::to_owned(values); self.shuffle_mut(m); m } diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs index 3f3691670effb..eaf7723f006a9 100644 --- a/src/libcore/vec.rs +++ b/src/libcore/vec.rs @@ -166,7 +166,7 @@ pub fn from_elem(n_elts: uint, t: T) -> ~[T] { } /// Creates a new unique vector with the same contents as the slice -pub fn from_slice(t: &[T]) -> ~[T] { +pub fn to_owned(t: &[T]) -> ~[T] { from_fn(t.len(), |i| t[i]) } @@ -3451,19 +3451,19 @@ mod tests { let mut results: ~[~[int]]; results = ~[]; - for each_permutation(~[]) |v| { results.push(from_slice(v)); } + for each_permutation(~[]) |v| { results.push(to_owned(v)); } assert!(results == ~[~[]]); results = ~[]; - for each_permutation(~[7]) |v| { results.push(from_slice(v)); } + for each_permutation(~[7]) |v| { results.push(to_owned(v)); } assert!(results == ~[~[7]]); results = ~[]; - for each_permutation(~[1,1]) |v| { results.push(from_slice(v)); } + for each_permutation(~[1,1]) |v| { results.push(to_owned(v)); } assert!(results == ~[~[1,1],~[1,1]]); results = ~[]; - for each_permutation(~[5,2,0]) |v| { results.push(from_slice(v)); } + for each_permutation(~[5,2,0]) |v| { results.push(to_owned(v)); } assert!(results == ~[~[5,2,0],~[5,0,2],~[2,5,0],~[2,0,5],~[0,5,2],~[0,2,5]]); } diff --git a/src/librust/rust.rc b/src/librust/rust.rc index ff15fc12ff479..983ac1f1aaa65 100644 --- a/src/librust/rust.rc +++ b/src/librust/rust.rc @@ -192,7 +192,7 @@ fn do_command(command: &Command, args: &[~str]) -> ValidUsage { let (prog, prog_args) = (words.head(), words.tail()); let exitstatus = run::run_program( *prog, - vec::append(vec::from_slice(prog_args), args) + vec::append(vec::to_owned(prog_args), args) ); os::set_exit_status(exitstatus); Valid diff --git a/src/librustc/metadata/decoder.rs b/src/librustc/metadata/decoder.rs index fd35a4425d870..8ed2fe6378e08 100644 --- a/src/librustc/metadata/decoder.rs +++ b/src/librustc/metadata/decoder.rs @@ -580,7 +580,7 @@ pub fn maybe_get_item_ast(intr: @ident_interner, cdata: cmd, tcx: ty::ctxt, let item_doc = lookup_item(id, cdata.data); let path = { let item_path = item_path(intr, item_doc); - vec::from_slice(item_path.init()) + vec::to_owned(item_path.init()) }; match decode_inlined_item(cdata, tcx, copy path, item_doc) { Some(ref ii) => csearch::found((/*bad*/copy *ii)), diff --git a/src/librustc/metadata/encoder.rs b/src/librustc/metadata/encoder.rs index 6c02ece9289ae..9014dc16fdde6 100644 --- a/src/librustc/metadata/encoder.rs +++ b/src/librustc/metadata/encoder.rs @@ -1420,7 +1420,7 @@ pub fn encode_metadata(parms: EncodeParams, crate: &crate) -> ~[u8] { // // Should be: // - // vec::from_slice(metadata_encoding_version) + + // vec::to_owned(metadata_encoding_version) + let writer_bytes: &mut ~[u8] = wr.bytes; diff --git a/src/librustc/middle/check_match.rs b/src/librustc/middle/check_match.rs index 09232b5bba823..e9211cb0929d9 100644 --- a/src/librustc/middle/check_match.rs +++ b/src/librustc/middle/check_match.rs @@ -488,7 +488,7 @@ pub fn specialize(cx: @MatchCheckCtxt, match cx.tcx.def_map.find(&pat_id) { Some(&def_variant(_, id)) => { if variant(id) == *ctor_id { - Some(vec::from_slice(r.tail())) + Some(vec::to_owned(r.tail())) } else { None } @@ -507,7 +507,7 @@ pub fn specialize(cx: @MatchCheckCtxt, _ => fail!(~"type error") }; if match_ { - Some(vec::from_slice(r.tail())) + Some(vec::to_owned(r.tail())) } else { None } @@ -538,7 +538,7 @@ pub fn specialize(cx: @MatchCheckCtxt, _ => fail!(~"type error") }; if match_ { - Some(vec::from_slice(r.tail())) + Some(vec::to_owned(r.tail())) } else { None } @@ -548,7 +548,7 @@ pub fn specialize(cx: @MatchCheckCtxt, Some(args) => args, None => vec::from_elem(arity, wild()) }; - Some(vec::append(args, vec::from_slice(r.tail()))) + Some(vec::append(args, vec::to_owned(r.tail()))) } def_variant(_, _) => None, @@ -560,7 +560,7 @@ pub fn specialize(cx: @MatchCheckCtxt, Some(args) => new_args = args, None => new_args = vec::from_elem(arity, wild()) } - Some(vec::append(new_args, vec::from_slice(r.tail()))) + Some(vec::append(new_args, vec::to_owned(r.tail()))) } _ => None } @@ -578,7 +578,7 @@ pub fn specialize(cx: @MatchCheckCtxt, _ => wild() } }); - Some(vec::append(args, vec::from_slice(r.tail()))) + Some(vec::append(args, vec::to_owned(r.tail()))) } else { None } @@ -608,7 +608,7 @@ pub fn specialize(cx: @MatchCheckCtxt, _ => wild() } }); - Some(vec::append(args, vec::from_slice(r.tail()))) + Some(vec::append(args, vec::to_owned(r.tail()))) } } } @@ -627,21 +627,21 @@ pub fn specialize(cx: @MatchCheckCtxt, single => true, _ => fail!(~"type error") }; - if match_ { Some(vec::from_slice(r.tail())) } else { None } + if match_ { Some(vec::to_owned(r.tail())) } else { None } } pat_range(lo, hi) => { let (c_lo, c_hi) = match *ctor_id { val(ref v) => ((/*bad*/copy *v), (/*bad*/copy *v)), range(ref lo, ref hi) => ((/*bad*/copy *lo), (/*bad*/copy *hi)), - single => return Some(vec::from_slice(r.tail())), + single => return Some(vec::to_owned(r.tail())), _ => fail!(~"type error") }; let v_lo = eval_const_expr(cx.tcx, lo), v_hi = eval_const_expr(cx.tcx, hi); let match_ = compare_const_vals(&c_lo, &v_lo) >= 0 && compare_const_vals(&c_hi, &v_hi) <= 0; - if match_ { Some(vec::from_slice(r.tail())) } else { None } + if match_ { Some(vec::to_owned(r.tail())) } else { None } } pat_vec(before, slice, after) => { match *ctor_id { @@ -674,7 +674,7 @@ pub fn specialize(cx: @MatchCheckCtxt, } pub fn default(cx: @MatchCheckCtxt, r: &[@pat]) -> Option<~[@pat]> { - if is_wild(cx, r[0]) { Some(vec::from_slice(r.tail())) } + if is_wild(cx, r[0]) { Some(vec::to_owned(r.tail())) } else { None } } diff --git a/src/librustc/middle/trans/adt.rs b/src/librustc/middle/trans/adt.rs index 0ee2a2c4cb149..3274503e30380 100644 --- a/src/librustc/middle/trans/adt.rs +++ b/src/librustc/middle/trans/adt.rs @@ -217,7 +217,7 @@ fn mk_struct(cx: @CrateContext, tys: &[ty::t], packed: bool) -> Struct { size: machine::llsize_of_alloc(cx, llty_rec) /*bad*/as u64, align: machine::llalign_of_min(cx, llty_rec) /*bad*/as u64, packed: packed, - fields: vec::from_slice(tys) + fields: vec::to_owned(tys) } } diff --git a/src/librustc/middle/trans/cabi.rs b/src/librustc/middle/trans/cabi.rs index d49e8e0969a1f..702d62f136348 100644 --- a/src/librustc/middle/trans/cabi.rs +++ b/src/librustc/middle/trans/cabi.rs @@ -71,8 +71,8 @@ pub impl FnType { let llretptr = GEPi(bcx, llargbundle, [0u, n]); let llretloc = Load(bcx, llretptr); llargvals = ~[llretloc]; - atys = vec::from_slice(atys.tail()); - attrs = vec::from_slice(attrs.tail()); + atys = vec::to_owned(atys.tail()); + attrs = vec::to_owned(attrs.tail()); } while i < n { @@ -137,8 +137,8 @@ pub impl FnType { let mut attrs = /*bad*/copy self.attrs; let mut j = 0u; let llretptr = if self.sret { - atys = vec::from_slice(atys.tail()); - attrs = vec::from_slice(attrs.tail()); + atys = vec::to_owned(atys.tail()); + attrs = vec::to_owned(attrs.tail()); j = 1u; get_param(llwrapfn, 0u) } else if self.ret_ty.cast { diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index c31843870e88c..449ecfe5dbf68 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -3813,7 +3813,7 @@ pub fn item_path(cx: ctxt, id: ast::def_id) -> ast_map::path { } ast_map::node_variant(ref variant, _, path) => { - vec::append_one(vec::from_slice(vec::init(*path)), + vec::append_one(vec::to_owned(vec::init(*path)), ast_map::path_name((*variant).node.name)) } diff --git a/src/libstd/flatpipes.rs b/src/libstd/flatpipes.rs index b712d6840ea7e..6547ff8eefbb9 100644 --- a/src/libstd/flatpipes.rs +++ b/src/libstd/flatpipes.rs @@ -442,7 +442,7 @@ pub mod flatteners { T: Decodable>( buf: &[u8]) -> T { - let buf = vec::from_slice(buf); + let buf = vec::to_owned(buf); let buf_reader = @BufReader::new(buf); let reader = buf_reader as @Reader; let mut deser: D = FromReader::from_reader(reader); diff --git a/src/libstd/getopts.rs b/src/libstd/getopts.rs index bc61f156c62dd..9b754c4ec5d0c 100644 --- a/src/libstd/getopts.rs +++ b/src/libstd/getopts.rs @@ -339,7 +339,7 @@ pub fn getopts(args: &[~str], opts: &[Opt]) -> Result { } i += 1; } - return Ok(Matches {opts: vec::from_slice(opts), + return Ok(Matches {opts: vec::to_owned(opts), vals: vals, free: free}); } diff --git a/src/libstd/md4.rs b/src/libstd/md4.rs index 24dd08c362e99..71b62ca36a5ee 100644 --- a/src/libstd/md4.rs +++ b/src/libstd/md4.rs @@ -26,7 +26,7 @@ pub fn md4(msg: &[u8]) -> Quad { let orig_len: u64 = (vec::len(msg) * 8u) as u64; // pad message - let mut msg = vec::append(vec::from_slice(msg), ~[0x80u8]); + let mut msg = vec::append(vec::to_owned(msg), ~[0x80u8]); let mut bitlen = orig_len + 8u64; while (bitlen + 64u64) % 512u64 > 0u64 { msg.push(0u8); diff --git a/src/libstd/num/bigint.rs b/src/libstd/num/bigint.rs index 5762d8639353f..e64e97adfa308 100644 --- a/src/libstd/num/bigint.rs +++ b/src/libstd/num/bigint.rs @@ -541,7 +541,7 @@ impl BigUint { /// Creates and initializes an BigUint. #[inline(always)] pub fn from_slice(slice: &[BigDigit]) -> BigUint { - return BigUint::new(vec::from_slice(slice)); + return BigUint::new(vec::to_owned(slice)); } /// Creates and initializes an BigUint. diff --git a/src/libstd/stats.rs b/src/libstd/stats.rs index 6513a671ab343..25323b4e1db8e 100644 --- a/src/libstd/stats.rs +++ b/src/libstd/stats.rs @@ -52,7 +52,7 @@ impl<'self> Stats for &'self [f64] { fn median(self) -> f64 { assert!(self.len() != 0); - let mut tmp = vec::from_slice(self); + let mut tmp = vec::to_owned(self); sort::tim_sort(tmp); if tmp.len() & 1 == 0 { let m = tmp.len() / 2; diff --git a/src/libsyntax/attr.rs b/src/libsyntax/attr.rs index f4f0def284327..aebe5bbfc748a 100644 --- a/src/libsyntax/attr.rs +++ b/src/libsyntax/attr.rs @@ -255,7 +255,7 @@ pub fn last_meta_item_list_by_name(items: ~[@ast::meta_item], name: &str) pub fn sort_meta_items(items: &[@ast::meta_item]) -> ~[@ast::meta_item] { // This is sort of stupid here, converting to a vec of mutables and back - let mut v = vec::from_slice(items); + let mut v = vec::to_owned(items); do std::sort::quick_sort(v) |ma, mb| { get_meta_item_name(*ma) <= get_meta_item_name(*mb) } diff --git a/src/libsyntax/ext/asm.rs b/src/libsyntax/ext/asm.rs index 53f40113532b2..00c178b6d7c16 100644 --- a/src/libsyntax/ext/asm.rs +++ b/src/libsyntax/ext/asm.rs @@ -41,7 +41,7 @@ pub fn expand_asm(cx: @ext_ctxt, sp: span, tts: &[ast::token_tree]) -> base::MacResult { let p = parse::new_parser_from_tts(cx.parse_sess(), cx.cfg(), - vec::from_slice(tts)); + vec::to_owned(tts)); let mut asm = ~""; let mut outputs = ~[]; diff --git a/src/libsyntax/ext/base.rs b/src/libsyntax/ext/base.rs index da8f87d389194..da18072f0e8b2 100644 --- a/src/libsyntax/ext/base.rs +++ b/src/libsyntax/ext/base.rs @@ -386,7 +386,7 @@ pub fn get_exprs_from_tts(cx: @ext_ctxt, tts: &[ast::token_tree]) -> ~[@ast::expr] { let p = parse::new_parser_from_tts(cx.parse_sess(), cx.cfg(), - vec::from_slice(tts)); + vec::to_owned(tts)); let mut es = ~[]; while *p.token != token::EOF { if es.len() != 0 { diff --git a/src/libsyntax/ext/log_syntax.rs b/src/libsyntax/ext/log_syntax.rs index 34d6978abdddd..76d9a9420ce50 100644 --- a/src/libsyntax/ext/log_syntax.rs +++ b/src/libsyntax/ext/log_syntax.rs @@ -22,7 +22,7 @@ pub fn expand_syntax_ext(cx: @ext_ctxt, cx.print_backtrace(); io::stdout().write_line( print::pprust::tt_to_str( - ast::tt_delim(vec::from_slice(tt)), + ast::tt_delim(vec::to_owned(tt)), cx.parse_sess().interner)); //trivial expression diff --git a/src/libsyntax/ext/quote.rs b/src/libsyntax/ext/quote.rs index 917d11a0d23bf..34a37e4f6b484 100644 --- a/src/libsyntax/ext/quote.rs +++ b/src/libsyntax/ext/quote.rs @@ -669,7 +669,7 @@ fn expand_tts(cx: @ext_ctxt, let p = parse::new_parser_from_tts( cx.parse_sess(), cx.cfg(), - vec::from_slice(tts) + vec::to_owned(tts) ); *p.quote_depth += 1u; let tts = p.parse_all_token_trees(); diff --git a/src/libsyntax/ext/trace_macros.rs b/src/libsyntax/ext/trace_macros.rs index a29a0f33e0d0c..9660afb1bc08d 100644 --- a/src/libsyntax/ext/trace_macros.rs +++ b/src/libsyntax/ext/trace_macros.rs @@ -25,7 +25,7 @@ pub fn expand_trace_macros(cx: @ext_ctxt, copy cx.parse_sess().span_diagnostic, cx.parse_sess().interner, None, - vec::from_slice(tt) + vec::to_owned(tt) ); let rdr = tt_rdr as @reader; let rust_parser = Parser( diff --git a/src/libsyntax/ext/tt/macro_rules.rs b/src/libsyntax/ext/tt/macro_rules.rs index 39c3c63a9b7fc..e1de2f6381bf0 100644 --- a/src/libsyntax/ext/tt/macro_rules.rs +++ b/src/libsyntax/ext/tt/macro_rules.rs @@ -82,7 +82,7 @@ pub fn add_new_extension(cx: @ext_ctxt, io::println(fmt!("%s! { %s }", cx.str_of(name), print::pprust::tt_to_str( - ast::tt_delim(vec::from_slice(arg)), + ast::tt_delim(vec::to_owned(arg)), cx.parse_sess().interner))); } @@ -101,7 +101,7 @@ pub fn add_new_extension(cx: @ext_ctxt, s_d, itr, None, - vec::from_slice(arg) + vec::to_owned(arg) ) as @reader; match parse(cx.parse_sess(), cx.cfg(), arg_rdr, (*mtcs)) { success(named_matches) => { From 912a352712b1b97009a11e3c3f7c4ba7360d9eaf Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Fri, 10 May 2013 19:42:24 +1000 Subject: [PATCH 353/410] Add some positive tests for dtor struct destructuring --- src/test/run-pass/issue-6344-let.rs | 22 ++++++++++++++++++++++ src/test/run-pass/issue-6344-match.rs | 24 ++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 src/test/run-pass/issue-6344-let.rs create mode 100644 src/test/run-pass/issue-6344-match.rs diff --git a/src/test/run-pass/issue-6344-let.rs b/src/test/run-pass/issue-6344-let.rs new file mode 100644 index 0000000000000..916131b6b711c --- /dev/null +++ b/src/test/run-pass/issue-6344-let.rs @@ -0,0 +1,22 @@ +// xfail-test #3874 +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. +struct A { x: uint } + +impl Drop for A { + fn finalize(&self) {} +} + +fn main() { + let a = A { x: 0 }; + + let A { x: ref x } = a; + debug!("%?", x) +} diff --git a/src/test/run-pass/issue-6344-match.rs b/src/test/run-pass/issue-6344-match.rs new file mode 100644 index 0000000000000..5bf57aa711692 --- /dev/null +++ b/src/test/run-pass/issue-6344-match.rs @@ -0,0 +1,24 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. +struct A { x: uint } + +impl Drop for A { + fn finalize(&self) {} +} + +fn main() { + let a = A { x: 0 }; + + match a { + A { x : ref x } => { + debug!("%?", x) + } + } +} From 24ef88cee96de837370ec370ed4d1f3aa3530a20 Mon Sep 17 00:00:00 2001 From: Youngsoo Son Date: Fri, 10 May 2013 20:08:56 +0900 Subject: [PATCH 354/410] renamed str::from_slice to str::to_owned --- src/compiletest/header.rs | 2 +- src/compiletest/runtest.rs | 4 +- src/libcore/io.rs | 2 +- src/libcore/os.rs | 4 +- src/libcore/path.rs | 16 ++++---- src/libcore/str.rs | 16 ++++---- src/libfuzzer/fuzzer.rc | 2 +- src/librustc/back/link.rs | 4 +- src/librustc/driver/driver.rs | 6 +-- src/librustc/metadata/filesearch.rs | 4 +- src/librustc/metadata/loader.rs | 2 +- src/librustc/middle/trans/base.rs | 2 +- src/librustdoc/desc_to_brief_pass.rs | 6 +-- src/libstd/getopts.rs | 44 ++++++++++----------- src/libstd/net_ip.rs | 4 +- src/libstd/time.rs | 8 ++-- src/libsyntax/ext/quote.rs | 2 +- src/test/run-pass/struct-order-of-eval-1.rs | 2 +- src/test/run-pass/struct-order-of-eval-2.rs | 2 +- 19 files changed, 66 insertions(+), 66 deletions(-) diff --git a/src/compiletest/header.rs b/src/compiletest/header.rs index 28bbbda966340..7e617aa000648 100644 --- a/src/compiletest/header.rs +++ b/src/compiletest/header.rs @@ -91,7 +91,7 @@ pub fn is_test_ignored(config: config, testfile: &Path) -> bool { return false; fn xfail_target() -> ~str { - ~"xfail-" + str::from_slice(os::SYSNAME) + ~"xfail-" + str::to_owned(os::SYSNAME) } } diff --git a/src/compiletest/runtest.rs b/src/compiletest/runtest.rs index 33f6dd36161a1..62c2612f2dda9 100644 --- a/src/compiletest/runtest.rs +++ b/src/compiletest/runtest.rs @@ -371,7 +371,7 @@ fn check_expected_errors(expected_errors: ~[errors::ExpectedError], was_expected = true; } - if !was_expected && is_compiler_error_or_warning(str::from_slice(line)) { + if !was_expected && is_compiler_error_or_warning(str::to_owned(line)) { fatal_ProcRes(fmt!("unexpected compiler error or warning: '%s'", line), ProcRes); @@ -596,7 +596,7 @@ fn make_lib_name(config: config, auxfile: &Path, testfile: &Path) -> Path { fn make_exe_name(config: config, testfile: &Path) -> Path { Path(output_base_name(config, testfile).to_str() + - str::from_slice(os::EXE_SUFFIX)) + str::to_owned(os::EXE_SUFFIX)) } fn make_run_args(config: config, _props: TestProps, testfile: &Path) -> diff --git a/src/libcore/io.rs b/src/libcore/io.rs index 7fc2c2559c245..4ae7d1cdabd1b 100644 --- a/src/libcore/io.rs +++ b/src/libcore/io.rs @@ -711,7 +711,7 @@ impl ReaderUtil for T { fn read_lines(&self) -> ~[~str] { do vec::build |push| { for self.each_line |line| { - push(str::from_slice(line)); + push(str::to_owned(line)); } } } diff --git a/src/libcore/os.rs b/src/libcore/os.rs index 574618026d983..3a5b18e3b5753 100644 --- a/src/libcore/os.rs +++ b/src/libcore/os.rs @@ -396,8 +396,8 @@ fn dup2(src: c_int, dst: c_int) -> c_int { pub fn dll_filename(base: &str) -> ~str { - return str::from_slice(DLL_PREFIX) + str::from_slice(base) + - str::from_slice(DLL_SUFFIX) + return str::to_owned(DLL_PREFIX) + str::to_owned(base) + + str::to_owned(DLL_SUFFIX) } diff --git a/src/libcore/path.rs b/src/libcore/path.rs index a87fd90f4e27a..ba95d1f4b5e4a 100644 --- a/src/libcore/path.rs +++ b/src/libcore/path.rs @@ -477,7 +477,7 @@ impl GenericPath for PosixPath { fn with_filestem(&self, s: &str) -> PosixPath { match self.filetype() { None => self.with_filename(s), - Some(ref t) => self.with_filename(str::from_slice(s) + *t) + Some(ref t) => self.with_filename(str::to_owned(s) + *t) } } @@ -488,7 +488,7 @@ impl GenericPath for PosixPath { Some(ref s) => self.with_filename(*s) } } else { - let t = ~"." + str::from_slice(t); + let t = ~"." + str::to_owned(t); match self.filestem() { None => self.with_filename(t), Some(ref s) => self.with_filename(*s + t) @@ -621,7 +621,7 @@ impl GenericPath for WindowsPath { None => { host = None; device = None; - rest = str::from_slice(s); + rest = str::to_owned(s); } } } @@ -694,7 +694,7 @@ impl GenericPath for WindowsPath { fn with_filestem(&self, s: &str) -> WindowsPath { match self.filetype() { None => self.with_filename(s), - Some(ref t) => self.with_filename(str::from_slice(s) + *t) + Some(ref t) => self.with_filename(str::to_owned(s) + *t) } } @@ -705,7 +705,7 @@ impl GenericPath for WindowsPath { Some(ref s) => self.with_filename(*s) } } else { - let t = ~"." + str::from_slice(t); + let t = ~"." + str::to_owned(t); match self.filestem() { None => self.with_filename(t), Some(ref s) => @@ -956,7 +956,7 @@ mod tests { fn test_posix_paths() { fn t(wp: &PosixPath, s: &str) { let ss = wp.to_str(); - let sss = str::from_slice(s); + let sss = str::to_owned(s); if (ss != sss) { debug!("got %s", ss); debug!("expected %s", sss); @@ -1014,7 +1014,7 @@ mod tests { fn test_normalize() { fn t(wp: &PosixPath, s: &str) { let ss = wp.to_str(); - let sss = str::from_slice(s); + let sss = str::to_owned(s); if (ss != sss) { debug!("got %s", ss); debug!("expected %s", sss); @@ -1077,7 +1077,7 @@ mod tests { fn test_windows_paths() { fn t(wp: &WindowsPath, s: &str) { let ss = wp.to_str(); - let sss = str::from_slice(s); + let sss = str::to_owned(s); if (ss != sss) { debug!("got %s", ss); debug!("expected %s", sss); diff --git a/src/libcore/str.rs b/src/libcore/str.rs index 5ec6471ac4a29..fc0cc730dea45 100644 --- a/src/libcore/str.rs +++ b/src/libcore/str.rs @@ -78,21 +78,21 @@ pub fn from_bytes_slice<'a>(vector: &'a [u8]) -> &'a str { /// Copy a slice into a new unique str #[inline(always)] -pub fn from_slice(s: &str) -> ~str { +pub fn to_owned(s: &str) -> ~str { unsafe { raw::slice_bytes_owned(s, 0, len(s)) } } impl ToStr for ~str { #[inline(always)] - fn to_str(&self) -> ~str { from_slice(*self) } + fn to_str(&self) -> ~str { to_owned(*self) } } impl<'self> ToStr for &'self str { #[inline(always)] - fn to_str(&self) -> ~str { from_slice(*self) } + fn to_str(&self) -> ~str { to_owned(*self) } } impl ToStr for @str { #[inline(always)] - fn to_str(&self) -> ~str { from_slice(*self) } + fn to_str(&self) -> ~str { to_owned(*self) } } /** @@ -511,7 +511,7 @@ Section: Transforming strings */ pub fn to_bytes(s: &str) -> ~[u8] { unsafe { - let mut v: ~[u8] = ::cast::transmute(from_slice(s)); + let mut v: ~[u8] = ::cast::transmute(to_owned(s)); vec::raw::set_len(&mut v, len(s)); v } @@ -2141,7 +2141,7 @@ pub fn as_c_str(s: &str, f: &fn(*libc::c_char) -> T) -> T { // NB: len includes the trailing null. assert!(len > 0); if unsafe { *(ptr::offset(buf,len-1)) != 0 } { - as_c_str(from_slice(s), f) + as_c_str(to_owned(s), f) } else { f(buf as *libc::c_char) } @@ -2682,7 +2682,7 @@ impl<'self> StrSlice<'self> for &'self str { #[inline] - fn to_owned(&self) -> ~str { from_slice(*self) } + fn to_owned(&self) -> ~str { to_owned(*self) } #[inline] fn to_managed(&self) -> @str { @@ -2722,7 +2722,7 @@ impl OwnedStr for ~str { impl Clone for ~str { #[inline(always)] fn clone(&self) -> ~str { - from_slice(*self) + to_owned(*self) } } diff --git a/src/libfuzzer/fuzzer.rc b/src/libfuzzer/fuzzer.rc index 33e970c305adc..c75dc2979f1c0 100644 --- a/src/libfuzzer/fuzzer.rc +++ b/src/libfuzzer/fuzzer.rc @@ -316,7 +316,7 @@ pub fn check_variants_T(crate: @ast::crate, if L < 100 { do under(uint::min(L, 20)) |i| { error!("Replacing... #%?", uint::to_str(i)); - let fname = str::from_slice(filename.to_str()); + let fname = str::to_owned(filename.to_str()); do under(uint::min(L, 30)) |j| { let fname = fname.to_str(); error!("With... %?", stringifier(things[j], intr)); diff --git a/src/librustc/back/link.rs b/src/librustc/back/link.rs index 3b5c90ec1f964..146b688ddc52f 100644 --- a/src/librustc/back/link.rs +++ b/src/librustc/back/link.rs @@ -747,8 +747,8 @@ pub fn output_dll_filename(os: session::os, lm: LinkMeta) -> ~str { session::os_android => (android::DLL_PREFIX, android::DLL_SUFFIX), session::os_freebsd => (freebsd::DLL_PREFIX, freebsd::DLL_SUFFIX), }; - return str::from_slice(dll_prefix) + libname + - str::from_slice(dll_suffix); + return str::to_owned(dll_prefix) + libname + + str::to_owned(dll_suffix); } // If the user wants an exe generated we need to invoke diff --git a/src/librustc/driver/driver.rs b/src/librustc/driver/driver.rs index cf77f81a4920f..d93a2ff59c0ba 100644 --- a/src/librustc/driver/driver.rs +++ b/src/librustc/driver/driver.rs @@ -91,9 +91,9 @@ pub fn default_configuration(sess: Session, argv0: @~str, input: &input) -> }; return ~[ // Target bindings. - attr::mk_word_item(@str::from_slice(os::FAMILY)), + attr::mk_word_item(@str::to_owned(os::FAMILY)), mk(@~"target_os", @tos), - mk(@~"target_family", @str::from_slice(os::FAMILY)), + mk(@~"target_family", @str::to_owned(os::FAMILY)), mk(@~"target_arch", @arch), mk(@~"target_endian", @end), mk(@~"target_word_size", @wordsz), @@ -648,7 +648,7 @@ pub fn build_session_options(binary: @~str, let linker_args = getopts::opt_strs(matches, ~"link-args").flat_map( |a| { let mut args = ~[]; for str::each_split_char(*a, ' ') |arg| { - args.push(str::from_slice(arg)); + args.push(str::to_owned(arg)); } args }); diff --git a/src/librustc/metadata/filesearch.rs b/src/librustc/metadata/filesearch.rs index 7547f7f763af0..6d712881a5652 100644 --- a/src/librustc/metadata/filesearch.rs +++ b/src/librustc/metadata/filesearch.rs @@ -73,7 +73,7 @@ pub fn mk_filesearch(maybe_sysroot: &Option<@Path>, @FileSearchImpl { sysroot: sysroot, addl_lib_search_paths: addl_lib_search_paths, - target_triple: str::from_slice(target_triple) + target_triple: str::to_owned(target_triple) } as @FileSearch } @@ -99,7 +99,7 @@ pub fn search(filesearch: @FileSearch, pick: pick) -> Option { pub fn relative_target_lib_path(target_triple: &str) -> Path { Path(libdir()).push_many([~"rustc", - str::from_slice(target_triple), + str::to_owned(target_triple), libdir()]) } diff --git a/src/librustc/metadata/loader.rs b/src/librustc/metadata/loader.rs index 193f6fc8f0a3b..6605f17739c0c 100644 --- a/src/librustc/metadata/loader.rs +++ b/src/librustc/metadata/loader.rs @@ -71,7 +71,7 @@ fn libname(cx: &Context) -> (~str, ~str) { os_freebsd => (freebsd::DLL_PREFIX, freebsd::DLL_SUFFIX), }; - (str::from_slice(dll_prefix), str::from_slice(dll_suffix)) + (str::to_owned(dll_prefix), str::to_owned(dll_suffix)) } fn find_library_crate_aux( diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs index 77a90e2215087..391f68aeedcd2 100644 --- a/src/librustc/middle/trans/base.rs +++ b/src/librustc/middle/trans/base.rs @@ -104,7 +104,7 @@ impl get_insn_ctxt for @CrateContext { fn insn_ctxt(&self, s: &str) -> icx_popper { debug!("new insn_ctxt: %s", s); if self.sess.count_llvm_insns() { - self.stats.llvm_insn_ctxt.push(str::from_slice(s)); + self.stats.llvm_insn_ctxt.push(str::to_owned(s)); } icx_popper(*self) } diff --git a/src/librustdoc/desc_to_brief_pass.rs b/src/librustdoc/desc_to_brief_pass.rs index 40ff9b2182964..278f77135f9f5 100644 --- a/src/librustdoc/desc_to_brief_pass.rs +++ b/src/librustdoc/desc_to_brief_pass.rs @@ -129,13 +129,13 @@ fn first_sentence_(s: &str) -> ~str { }; match idx { Some(idx) if idx > 2u => { - str::from_slice(str::slice(s, 0, idx - 1)) + str::to_owned(str::slice(s, 0, idx - 1)) } _ => { if str::ends_with(s, ~".") { - str::from_slice(s) + str::to_owned(s) } else { - str::from_slice(s) + str::to_owned(s) } } } diff --git a/src/libstd/getopts.rs b/src/libstd/getopts.rs index 9b754c4ec5d0c..f66b56381f0f4 100644 --- a/src/libstd/getopts.rs +++ b/src/libstd/getopts.rs @@ -106,7 +106,7 @@ pub struct Opt { } fn mkname(nm: &str) -> Name { - let unm = str::from_slice(nm); + let unm = str::to_owned(nm); return if nm.len() == 1u { Short(str::char_at(unm, 0u)) } else { Long(unm) }; @@ -441,7 +441,7 @@ pub fn opt_default(mm: &Matches, nm: &str, def: &str) -> Option<~str> { let vals = opt_vals(mm, nm); if vec::len::(vals) == 0u { return None::<~str>; } return match vals[0] { Val(copy s) => Some::<~str>(s), - _ => Some::<~str>(str::from_slice(def)) } + _ => Some::<~str>(str::to_owned(def)) } } #[deriving(Eq)] @@ -481,10 +481,10 @@ pub mod groups { desc: &str, hint: &str) -> OptGroup { let len = short_name.len(); assert!(len == 1 || len == 0); - return OptGroup { short_name: str::from_slice(short_name), - long_name: str::from_slice(long_name), - hint: str::from_slice(hint), - desc: str::from_slice(desc), + return OptGroup { short_name: str::to_owned(short_name), + long_name: str::to_owned(long_name), + hint: str::to_owned(hint), + desc: str::to_owned(desc), hasarg: Yes, occur: Req}; } @@ -494,10 +494,10 @@ pub mod groups { desc: &str, hint: &str) -> OptGroup { let len = short_name.len(); assert!(len == 1 || len == 0); - return OptGroup {short_name: str::from_slice(short_name), - long_name: str::from_slice(long_name), - hint: str::from_slice(hint), - desc: str::from_slice(desc), + return OptGroup {short_name: str::to_owned(short_name), + long_name: str::to_owned(long_name), + hint: str::to_owned(hint), + desc: str::to_owned(desc), hasarg: Yes, occur: Optional}; } @@ -507,10 +507,10 @@ pub mod groups { desc: &str) -> OptGroup { let len = short_name.len(); assert!(len == 1 || len == 0); - return OptGroup {short_name: str::from_slice(short_name), - long_name: str::from_slice(long_name), + return OptGroup {short_name: str::to_owned(short_name), + long_name: str::to_owned(long_name), hint: ~"", - desc: str::from_slice(desc), + desc: str::to_owned(desc), hasarg: No, occur: Optional}; } @@ -520,10 +520,10 @@ pub mod groups { desc: &str, hint: &str) -> OptGroup { let len = short_name.len(); assert!(len == 1 || len == 0); - return OptGroup {short_name: str::from_slice(short_name), - long_name: str::from_slice(long_name), - hint: str::from_slice(hint), - desc: str::from_slice(desc), + return OptGroup {short_name: str::to_owned(short_name), + long_name: str::to_owned(long_name), + hint: str::to_owned(hint), + desc: str::to_owned(desc), hasarg: Maybe, occur: Optional}; } @@ -536,10 +536,10 @@ pub mod groups { desc: &str, hint: &str) -> OptGroup { let len = short_name.len(); assert!(len == 1 || len == 0); - return OptGroup {short_name: str::from_slice(short_name), - long_name: str::from_slice(long_name), - hint: str::from_slice(hint), - desc: str::from_slice(desc), + return OptGroup {short_name: str::to_owned(short_name), + long_name: str::to_owned(long_name), + hint: str::to_owned(hint), + desc: str::to_owned(desc), hasarg: Yes, occur: Multi}; } @@ -648,7 +648,7 @@ pub mod groups { row }); - return str::from_slice(brief) + + return str::to_owned(brief) + ~"\n\nOptions:\n" + str::connect(rows, ~"\n") + ~"\n\n"; diff --git a/src/libstd/net_ip.rs b/src/libstd/net_ip.rs index 758e7a5e6cada..58775c5f2e48f 100644 --- a/src/libstd/net_ip.rs +++ b/src/libstd/net_ip.rs @@ -225,7 +225,7 @@ pub mod v4 { let input_is_inaddr_none = result::get(&ip_rep_result).as_u32() == INADDR_NONE; - let new_addr = uv_ip4_addr(str::from_slice(ip), 22); + let new_addr = uv_ip4_addr(str::to_owned(ip), 22); let reformatted_name = uv_ip4_name(&new_addr); debug!("try_parse_addr: input ip: %s reparsed ip: %s", ip, reformatted_name); @@ -278,7 +278,7 @@ pub mod v6 { pub fn try_parse_addr(ip: &str) -> result::Result { unsafe { // need to figure out how to establish a parse failure.. - let new_addr = uv_ip6_addr(str::from_slice(ip), 22); + let new_addr = uv_ip6_addr(str::to_owned(ip), 22); let reparsed_name = uv_ip6_name(&new_addr); debug!("v6::try_parse_addr ip: '%s' reparsed '%s'", ip, reparsed_name); diff --git a/src/libstd/time.rs b/src/libstd/time.rs index 31d8eb20a6753..e731f679221fd 100644 --- a/src/libstd/time.rs +++ b/src/libstd/time.rs @@ -289,7 +289,7 @@ priv fn do_strptime(s: &str, format: &str) -> Result { let mut i = 0u; while i < digits { - let range = str::char_range_at(str::from_slice(ss), pos); + let range = str::char_range_at(str::to_owned(ss), pos); pos = range.next; match range.ch { @@ -628,7 +628,7 @@ priv fn do_strptime(s: &str, format: &str) -> Result { } } - do io::with_str_reader(str::from_slice(format)) |rdr| { + do io::with_str_reader(str::to_owned(format)) |rdr| { let mut tm = Tm { tm_sec: 0_i32, tm_min: 0_i32, @@ -840,7 +840,7 @@ priv fn do_strftime(format: &str, tm: &Tm) -> ~str { let mut buf = ~""; - do io::with_str_reader(str::from_slice(format)) |rdr| { + do io::with_str_reader(str::to_owned(format)) |rdr| { while !rdr.eof() { match rdr.read_char() { '%' => buf += parse_type(rdr.read_char(), tm), @@ -1022,7 +1022,7 @@ mod tests { fn test(s: &str, format: &str) -> bool { match strptime(s, format) { - Ok(ref tm) => tm.strftime(format) == str::from_slice(s), + Ok(ref tm) => tm.strftime(format) == str::to_owned(s), Err(copy e) => fail!(e) } } diff --git a/src/libsyntax/ext/quote.rs b/src/libsyntax/ext/quote.rs index 34a37e4f6b484..b1ec9643f4e06 100644 --- a/src/libsyntax/ext/quote.rs +++ b/src/libsyntax/ext/quote.rs @@ -123,7 +123,7 @@ pub mod rt { impl<'self> ToSource for &'self str { fn to_source(&self, _cx: @ext_ctxt) -> ~str { - let lit = dummy_spanned(ast::lit_str(@str::from_slice(*self))); + let lit = dummy_spanned(ast::lit_str(@str::to_owned(*self))); pprust::lit_to_str(@lit) } } diff --git a/src/test/run-pass/struct-order-of-eval-1.rs b/src/test/run-pass/struct-order-of-eval-1.rs index db7c73cbfc5ea..884459cf069f4 100644 --- a/src/test/run-pass/struct-order-of-eval-1.rs +++ b/src/test/run-pass/struct-order-of-eval-1.rs @@ -12,5 +12,5 @@ struct S { f0: ~str, f1: int } pub fn main() { let s = ~"Hello, world!"; - let _s = S { f0: str::from_slice(s), ..S { f0: s, f1: 23 } }; + let _s = S { f0: str::to_owned(s), ..S { f0: s, f1: 23 } }; } diff --git a/src/test/run-pass/struct-order-of-eval-2.rs b/src/test/run-pass/struct-order-of-eval-2.rs index 413f185659a6f..419c4ac3942f8 100644 --- a/src/test/run-pass/struct-order-of-eval-2.rs +++ b/src/test/run-pass/struct-order-of-eval-2.rs @@ -12,5 +12,5 @@ struct S { f0: ~str, f1: ~str } pub fn main() { let s = ~"Hello, world!"; - let _s = S { f1: str::from_slice(s), f0: s }; + let _s = S { f1: str::to_owned(s), f0: s }; } From 3db74ddd2e0ec7ea02ac1b82745439587f514cc4 Mon Sep 17 00:00:00 2001 From: James Tranovich Date: Fri, 10 May 2013 10:51:00 -0700 Subject: [PATCH 355/410] Fixes rusti crashes. Don't pass the binary name to the LLVMRustExecuteJIT closure; doesn't seem to be needed, anyhow. --- src/librustc/back/link.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/librustc/back/link.rs b/src/librustc/back/link.rs index 3b5c90ec1f964..07ab9a27f2457 100644 --- a/src/librustc/back/link.rs +++ b/src/librustc/back/link.rs @@ -157,9 +157,9 @@ pub mod jit { code: entry, env: ptr::null() }; - let func: &fn(argv: ~[@~str]) = cast::transmute(closure); + let func: &fn() = cast::transmute(closure); - func(~[sess.opts.binary]); + func(); } } } From 017e7e8be1906841451284de53c536e475046dc9 Mon Sep 17 00:00:00 2001 From: Olivier Saut Date: Fri, 10 May 2013 21:12:11 +0200 Subject: [PATCH 356/410] Replace io::println by println as it is now included in prelude.rs --- doc/tutorial.md | 58 +++++++++++++++++++++++-------------------------- 1 file changed, 27 insertions(+), 31 deletions(-) diff --git a/doc/tutorial.md b/doc/tutorial.md index 90ae41affc9b9..3582acbe0f6b8 100644 --- a/doc/tutorial.md +++ b/doc/tutorial.md @@ -129,7 +129,7 @@ we have a file `hello.rs` containing this program: ~~~~ fn main() { - io::println("hello?"); + println("hello?"); } ~~~~ @@ -139,12 +139,12 @@ Windows) which, upon running, will likely do exactly what you expect. The Rust compiler tries to provide useful information when it encounters an error. If you introduce an error into the program (for example, by changing -`io::println` to some nonexistent function), and then compile it, you'll see +`println` to some nonexistent function), and then compile it, you'll see an error message like this: ~~~~ {.notrust} -hello.rs:2:4: 2:16 error: unresolved name: io::print_with_unicorns -hello.rs:2 io::print_with_unicorns("hello?"); +hello.rs:2:4: 2:16 error: unresolved name: print_with_unicorns +hello.rs:2 print_with_unicorns("hello?"); ^~~~~~~~~~~~~~~~~~~~~~~ ~~~~ @@ -227,7 +227,7 @@ let hi = "hi"; let mut count = 0; while count < 10 { - io::println(fmt!("count: %?", count)); + println(fmt!("count: %?", count)); count += 1; } ~~~~ @@ -400,10 +400,10 @@ don't match the types of the arguments. ~~~~ # let mystery_object = (); -io::println(fmt!("%s is %d", "the answer", 43)); +println(fmt!("%s is %d", "the answer", 43)); // %? will conveniently print any type -io::println(fmt!("what is this thing: %?", mystery_object)); +println(fmt!("what is this thing: %?", mystery_object)); ~~~~ [pf]: http://en.cppreference.com/w/cpp/io/c/fprintf @@ -422,11 +422,11 @@ compulsory, an `if` can have an optional `else` clause, and multiple ~~~~ if false { - io::println("that's odd"); + println("that's odd"); } else if true { - io::println("right"); + println("right"); } else { - io::println("neither true nor false"); + println("neither true nor false"); } ~~~~ @@ -454,10 +454,10 @@ executes its corresponding arm. ~~~~ # let my_number = 1; match my_number { - 0 => io::println("zero"), - 1 | 2 => io::println("one or two"), - 3..10 => io::println("three to ten"), - _ => io::println("something else") + 0 => println("zero"), + 1 | 2 => println("one or two"), + 3..10 => println("three to ten"), + _ => println("something else") } ~~~~ @@ -483,8 +483,8 @@ commas are optional. ~~~ # let my_number = 1; match my_number { - 0 => { io::println("zero") } - _ => { io::println("something else") } + 0 => { println("zero") } + _ => { println("something else") } } ~~~ @@ -560,7 +560,7 @@ let mut x = 5; loop { x += x - 3; if x % 5 == 0 { break; } - io::println(int::to_str(x)); + println(int::to_str(x)); } ~~~~ @@ -614,8 +614,8 @@ origin.y += 1.0; // ERROR: assigning to immutable field # struct Point { x: float, y: float } # let mypoint = Point { x: 0.0, y: 0.0 }; match mypoint { - Point { x: 0.0, y: yy } => { io::println(yy.to_str()); } - Point { x: xx, y: yy } => { io::println(xx.to_str() + " " + yy.to_str()); } + Point { x: 0.0, y: yy } => { println(yy.to_str()); } + Point { x: xx, y: yy } => { println(xx.to_str() + " " + yy.to_str()); } } ~~~~ @@ -630,7 +630,7 @@ reuses the field name as the binding name. # struct Point { x: float, y: float } # let mypoint = Point { x: 0.0, y: 0.0 }; match mypoint { - Point { x, _ } => { io::println(x.to_str()) } + Point { x, _ } => { println(x.to_str()) } } ~~~ @@ -1231,7 +1231,7 @@ something silly like ~~~ # struct Point { x: float, y: float } let point = &@~Point { x: 10f, y: 20f }; -io::println(fmt!("%f", point.x)); +println(fmt!("%f", point.x)); ~~~ The indexing operator (`[]`) also auto-dereferences. @@ -1373,7 +1373,6 @@ and [`core::str`]. Here are some examples. [`core::str`]: core/str.html ~~~ -# use core::io::println; # enum Crayon { # Almond, AntiqueBrass, Apricot, # Aquamarine, Asparagus, AtomicTangerine, @@ -1428,7 +1427,6 @@ Rust also supports _closures_, functions that can access variables in the enclosing scope. ~~~~ -# use println = core::io::println; fn call_closure_with_ten(b: &fn(int)) { b(10); } let captured_var = 20; @@ -1490,7 +1488,7 @@ fn mk_appender(suffix: ~str) -> @fn(~str) -> ~str { fn main() { let shout = mk_appender(~"!"); - io::println(shout(~"hey ho, let's go")); + println(shout(~"hey ho, let's go")); } ~~~~ @@ -1632,7 +1630,6 @@ And using this function to iterate over a vector: ~~~~ # use each = core::vec::each; -# use println = core::io::println; each([2, 4, 8, 5, 16], |n| { if *n % 2 != 0 { println("found odd number!"); @@ -1649,7 +1646,6 @@ to the next iteration, write `loop`. ~~~~ # use each = core::vec::each; -# use println = core::io::println; for each([2, 4, 8, 5, 16]) |n| { if *n % 2 != 0 { println("found odd number!"); @@ -1982,7 +1978,7 @@ struct TimeBomb { impl Drop for TimeBomb { fn finalize(&self) { for old_iter::repeat(self.explosivity) { - io::println("blam!"); + println("blam!"); } } } @@ -2014,11 +2010,11 @@ and `~str`. ~~~~ # trait Printable { fn print(&self); } impl Printable for int { - fn print(&self) { io::println(fmt!("%d", *self)) } + fn print(&self) { println(fmt!("%d", *self)) } } impl Printable for ~str { - fn print(&self) { io::println(*self) } + fn print(&self) { println(*self) } } # 1.print(); @@ -2307,7 +2303,7 @@ mod farm { } fn main() { - io::println(farm::chicken()); + println(farm::chicken()); } ~~~~ @@ -2507,7 +2503,7 @@ pub fn explore() -> &str { "world" } ~~~~ {.xfail-test} // main.rs extern mod world; -fn main() { io::println(~"hello " + world::explore()); } +fn main() { println(~"hello " + world::explore()); } ~~~~ Now compile and run like this (adjust to your platform if necessary): From 7d4bb90e76207f3715126562fd50193fda97ff49 Mon Sep 17 00:00:00 2001 From: Corey Richardson Date: Fri, 10 May 2013 16:23:12 -0400 Subject: [PATCH 357/410] Remove redundant import error --- src/librustc/middle/resolve.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs index 9802e1172afbf..1118469dc541f 100644 --- a/src/librustc/middle/resolve.rs +++ b/src/librustc/middle/resolve.rs @@ -1909,7 +1909,6 @@ pub impl Resolver { } if self.unresolved_imports == prev_unresolved_imports { - self.session.err(~"failed to resolve imports"); self.report_unresolved_imports(module_root); break; } From d807f00bfded3804d5f3d01e522dfa086871f8ed Mon Sep 17 00:00:00 2001 From: Samuel Chase Date: Sat, 11 May 2013 02:14:36 +0530 Subject: [PATCH 358/410] Add to_str() for HashMaps, and some basic tests as well. --- src/libcore/to_str.rs | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/libcore/to_str.rs b/src/libcore/to_str.rs index 7f8e6915add16..a2c4ac991a49e 100644 --- a/src/libcore/to_str.rs +++ b/src/libcore/to_str.rs @@ -15,6 +15,10 @@ The `ToStr` trait for converting to strings */ use str; +use hashmap::HashMap; +use container::Map; +use hash::Hash; +use cmp::Eq; pub trait ToStr { fn to_str(&self) -> ~str; @@ -46,6 +50,26 @@ impl ToStr for (A,) { } } +impl ToStr for HashMap { + #[inline(always)] + fn to_str(&self) -> ~str { + let mut acc = ~"{", first = true; + for self.each |key, value| { + if first { + first = false; + } + else { + str::push_str(&mut acc, ~", "); + } + str::push_str(&mut acc, key.to_str()); + str::push_str(&mut acc, ~" : "); + str::push_str(&mut acc, value.to_str()); + } + str::push_char(&mut acc, '}'); + acc + } +} + impl ToStr for (A, B) { #[inline(always)] fn to_str(&self) -> ~str { @@ -149,4 +173,16 @@ mod tests { assert!((~[~[], ~[1], ~[1, 1]]).to_str() == ~"[[], [1], [1, 1]]"); } + + #[test] + fn test_hashmap() { + let mut table: HashMap = HashMap::new(); + let mut empty: HashMap = HashMap::new(); + + table.insert(3, 4); + table.insert(1, 2); + + assert!(table.to_str() == ~"{1 : 2, 3 : 4}"); + assert!(empty.to_str() == ~"{}"); + } } From 52610c398034705ab32bdda95d8e6e345f39fe38 Mon Sep 17 00:00:00 2001 From: Lenny222 Date: Fri, 10 May 2013 18:52:56 +0200 Subject: [PATCH 359/410] more back-ticks, less colons --- src/librustc/middle/resolve.rs | 28 +++++++++++------------ src/test/compile-fail/alt-join.rs | 2 +- src/test/compile-fail/bad-expr-path.rs | 2 +- src/test/compile-fail/bad-expr-path2.rs | 2 +- src/test/compile-fail/does-nothing.rs | 2 +- src/test/compile-fail/issue-1476.rs | 2 +- src/test/compile-fail/issue-2281-part1.rs | 2 +- src/test/compile-fail/issue-3021-b.rs | 2 +- src/test/compile-fail/issue-3021-d.rs | 4 ++-- src/test/compile-fail/issue-3021.rs | 2 +- src/test/compile-fail/issue-3038.rs | 6 ++--- src/test/compile-fail/issue-3099-a.rs | 2 +- src/test/compile-fail/issue-3099-b.rs | 2 +- src/test/compile-fail/issue-3099.rs | 2 +- src/test/compile-fail/issue-4265.rs | 2 +- src/test/compile-fail/issue-4366.rs | 4 ++-- src/test/compile-fail/test-cfg.rs | 2 +- 17 files changed, 34 insertions(+), 34 deletions(-) diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs index 9802e1172afbf..814d0d94d3a8a 100644 --- a/src/librustc/middle/resolve.rs +++ b/src/librustc/middle/resolve.rs @@ -1007,7 +1007,7 @@ pub impl Resolver { let ns = namespace_for_duplicate_checking_mode( duplicate_checking_mode); self.session.span_err(sp, - fmt!("duplicate definition of %s %s", + fmt!("duplicate definition of %s `%s`", namespace_to_str(ns), *self.session.str_of(name))); for child.span_for_namespace(ns).each |sp| { @@ -1959,7 +1959,7 @@ pub impl Resolver { match self.resolve_import_for_module(module, import_directive) { Failed => { // We presumably emitted an error. Continue. - let msg = fmt!("failed to resolve import: %s", + let msg = fmt!("failed to resolve import `%s`", *self.import_path_to_str( import_directive.module_path, *import_directive.subclass)); @@ -2488,7 +2488,7 @@ pub impl Resolver { self.session.span_err(span {lo: span.lo, hi: span.lo + BytePos(str::len(*segment_name)), expn_info: span.expn_info}, fmt!("unresolved import. maybe \ - a missing 'extern mod %s'?", + a missing `extern mod %s`?", *segment_name)); return Failed; } @@ -2511,7 +2511,7 @@ pub impl Resolver { // Not a module. self.session.span_err(span, fmt!("not a \ - module: %s", + module `%s`", *self.session. str_of( name))); @@ -2525,7 +2525,7 @@ pub impl Resolver { None => { // There are no type bindings at all. self.session.span_err(span, - fmt!("not a module: %s", + fmt!("not a module `%s`", *self.session.str_of( name))); return Failed; @@ -2976,7 +2976,7 @@ pub impl Resolver { } // We're out of luck. - debug!("(resolving name in module) failed to resolve %s", + debug!("(resolving name in module) failed to resolve `%s`", *self.session.str_of(name)); return Failed; } @@ -4158,7 +4158,7 @@ pub impl Resolver { // in the same disjunct, which is an // error self.session.span_err(pattern.span, - fmt!("Identifier %s is bound more \ + fmt!("Identifier `%s` is bound more \ than once in the same pattern", path_to_str(path, self.session .intr()))); @@ -4199,7 +4199,7 @@ pub impl Resolver { Some(_) => { self.session.span_err( path.span, - fmt!("not an enum variant or constant: %s", + fmt!("`%s` is not an enum variant or constant", *self.session.str_of( *path.idents.last()))); } @@ -4227,7 +4227,7 @@ pub impl Resolver { Some(_) => { self.session.span_err( path.span, - fmt!("not an enum variant, struct or const: %s", + fmt!("`%s` is not an enum variant, struct or const", *self.session.str_of( *path.idents.last()))); } @@ -4723,8 +4723,8 @@ pub impl Resolver { path.idents); if self.name_exists_in_scope_struct(wrong_name) { self.session.span_err(expr.span, - fmt!("unresolved name: `%s`. \ - Did you mean: `self.%s`?", + fmt!("unresolved name `%s`. \ + Did you mean `self.%s`?", wrong_name, wrong_name)); } @@ -4734,13 +4734,13 @@ pub impl Resolver { match self.find_best_match_for_name(wrong_name, 5) { Some(m) => { self.session.span_err(expr.span, - fmt!("unresolved name: `%s`. \ - Did you mean: `%s`?", + fmt!("unresolved name `%s`. \ + Did you mean `%s`?", wrong_name, m)); } None => { self.session.span_err(expr.span, - fmt!("unresolved name: `%s`.", + fmt!("unresolved name `%s`.", wrong_name)); } } diff --git a/src/test/compile-fail/alt-join.rs b/src/test/compile-fail/alt-join.rs index 73f2c81302c6f..3caac6dbcfee0 100644 --- a/src/test/compile-fail/alt-join.rs +++ b/src/test/compile-fail/alt-join.rs @@ -16,6 +16,6 @@ fn my_fail() -> ! { fail!(); } fn main() { match true { false => { my_fail(); } true => { } } - debug!(x); //~ ERROR unresolved name: `x`. + debug!(x); //~ ERROR unresolved name `x`. let x: int; } diff --git a/src/test/compile-fail/bad-expr-path.rs b/src/test/compile-fail/bad-expr-path.rs index 30014817308f4..c17baf40d6446 100644 --- a/src/test/compile-fail/bad-expr-path.rs +++ b/src/test/compile-fail/bad-expr-path.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// error-pattern: unresolved name: `m1::a`. Did you mean: `args`? +// error-pattern: unresolved name `m1::a`. Did you mean `args`? mod m1 {} diff --git a/src/test/compile-fail/bad-expr-path2.rs b/src/test/compile-fail/bad-expr-path2.rs index 88239a4cc3fee..936f893ae8e66 100644 --- a/src/test/compile-fail/bad-expr-path2.rs +++ b/src/test/compile-fail/bad-expr-path2.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// error-pattern: unresolved name: `m1::a`. Did you mean: `args`? +// error-pattern: unresolved name `m1::a`. Did you mean `args`? mod m1 { pub mod a {} diff --git a/src/test/compile-fail/does-nothing.rs b/src/test/compile-fail/does-nothing.rs index 699baad4d4308..1dacbe9a1994c 100644 --- a/src/test/compile-fail/does-nothing.rs +++ b/src/test/compile-fail/does-nothing.rs @@ -1,2 +1,2 @@ -// error-pattern: unresolved name: `this_does_nothing_what_the`. +// error-pattern: unresolved name `this_does_nothing_what_the`. fn main() { debug!("doing"); this_does_nothing_what_the; debug!("boing"); } diff --git a/src/test/compile-fail/issue-1476.rs b/src/test/compile-fail/issue-1476.rs index 1d58a4229d3eb..f223cd428ec13 100644 --- a/src/test/compile-fail/issue-1476.rs +++ b/src/test/compile-fail/issue-1476.rs @@ -9,5 +9,5 @@ // except according to those terms. fn main() { - error!(x); //~ ERROR unresolved name: `x`. + error!(x); //~ ERROR unresolved name `x`. } diff --git a/src/test/compile-fail/issue-2281-part1.rs b/src/test/compile-fail/issue-2281-part1.rs index 3951eaad6d197..60c80c1a3158b 100644 --- a/src/test/compile-fail/issue-2281-part1.rs +++ b/src/test/compile-fail/issue-2281-part1.rs @@ -8,6 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// error-pattern: unresolved name: `foobar`. +// error-pattern: unresolved name `foobar`. fn main(args: ~[str]) { debug!(foobar); } diff --git a/src/test/compile-fail/issue-3021-b.rs b/src/test/compile-fail/issue-3021-b.rs index e6d16042445e8..3769154c9d948 100644 --- a/src/test/compile-fail/issue-3021-b.rs +++ b/src/test/compile-fail/issue-3021-b.rs @@ -19,7 +19,7 @@ fn siphash(k0 : u64) { pub impl siphash { fn reset(&mut self) { self.v0 = k0 ^ 0x736f6d6570736575; //~ ERROR attempted dynamic environment-capture - //~^ ERROR unresolved name: `k0`. + //~^ ERROR unresolved name `k0`. } } } diff --git a/src/test/compile-fail/issue-3021-d.rs b/src/test/compile-fail/issue-3021-d.rs index 2daf3e7a210aa..55c8e8aa51dd8 100644 --- a/src/test/compile-fail/issue-3021-d.rs +++ b/src/test/compile-fail/issue-3021-d.rs @@ -31,9 +31,9 @@ fn siphash(k0 : u64, k1 : u64) -> siphash { impl siphash for SipState { fn reset(&self) { self.v0 = k0 ^ 0x736f6d6570736575; //~ ERROR attempted dynamic environment-capture - //~^ ERROR unresolved name: `k0`. + //~^ ERROR unresolved name `k0`. self.v1 = k1 ^ 0x646f72616e646f6d; //~ ERROR attempted dynamic environment-capture - //~^ ERROR unresolved name: `k1`. + //~^ ERROR unresolved name `k1`. } fn result(&self) -> u64 { return mk_result(self); } } diff --git a/src/test/compile-fail/issue-3021.rs b/src/test/compile-fail/issue-3021.rs index 343683d79c105..f2cf2d19a864e 100644 --- a/src/test/compile-fail/issue-3021.rs +++ b/src/test/compile-fail/issue-3021.rs @@ -22,7 +22,7 @@ fn siphash(k0 : u64) -> SipHash { impl SipHash for SipState { fn reset(&self) { self.v0 = k0 ^ 0x736f6d6570736575; //~ ERROR attempted dynamic environment-capture - //~^ ERROR unresolved name: `k0`. + //~^ ERROR unresolved name `k0`. } } fail!(); diff --git a/src/test/compile-fail/issue-3038.rs b/src/test/compile-fail/issue-3038.rs index 4ed21bc30e1ce..1cdb226e39e5d 100644 --- a/src/test/compile-fail/issue-3038.rs +++ b/src/test/compile-fail/issue-3038.rs @@ -20,16 +20,16 @@ fn main() let _z = match g(1, 2) { g(x, x) => { debug!(x + x); } - //~^ ERROR Identifier x is bound more than once in the same pattern + //~^ ERROR Identifier `x` is bound more than once in the same pattern }; let _z = match i(l(1, 2), m(3, 4)) { - i(l(x, _), m(_, x)) //~ ERROR Identifier x is bound more than once in the same pattern + i(l(x, _), m(_, x)) //~ ERROR Identifier `x` is bound more than once in the same pattern => { error!(x + x); } }; let _z = match (1, 2) { - (x, x) => { x } //~ ERROR Identifier x is bound more than once in the same pattern + (x, x) => { x } //~ ERROR Identifier `x` is bound more than once in the same pattern }; } diff --git a/src/test/compile-fail/issue-3099-a.rs b/src/test/compile-fail/issue-3099-a.rs index b663087aa8975..1b11fcac8a385 100644 --- a/src/test/compile-fail/issue-3099-a.rs +++ b/src/test/compile-fail/issue-3099-a.rs @@ -10,6 +10,6 @@ enum a { b, c } -enum a { d, e } //~ ERROR duplicate definition of type a +enum a { d, e } //~ ERROR duplicate definition of type `a` fn main() {} diff --git a/src/test/compile-fail/issue-3099-b.rs b/src/test/compile-fail/issue-3099-b.rs index 1acfb753a4f03..3d22a59d6bd40 100644 --- a/src/test/compile-fail/issue-3099-b.rs +++ b/src/test/compile-fail/issue-3099-b.rs @@ -10,6 +10,6 @@ pub mod a {} -pub mod a {} //~ ERROR duplicate definition of type a +pub mod a {} //~ ERROR duplicate definition of type `a` fn main() {} diff --git a/src/test/compile-fail/issue-3099.rs b/src/test/compile-fail/issue-3099.rs index 7cb8a0cfbadec..abc76b9da0fd7 100644 --- a/src/test/compile-fail/issue-3099.rs +++ b/src/test/compile-fail/issue-3099.rs @@ -12,7 +12,7 @@ fn a(x: ~str) -> ~str { fmt!("First function with %s", x) } -fn a(x: ~str, y: ~str) -> ~str { //~ ERROR duplicate definition of value a +fn a(x: ~str, y: ~str) -> ~str { //~ ERROR duplicate definition of value `a` fmt!("Second function with %s and %s", x, y) } diff --git a/src/test/compile-fail/issue-4265.rs b/src/test/compile-fail/issue-4265.rs index e76d211dedace..a1a77092b12a5 100644 --- a/src/test/compile-fail/issue-4265.rs +++ b/src/test/compile-fail/issue-4265.rs @@ -17,7 +17,7 @@ impl Foo { Foo { baz: 0 }.bar(); } - fn bar() { //~ ERROR duplicate definition of value bar + fn bar() { //~ ERROR duplicate definition of value `bar` } } diff --git a/src/test/compile-fail/issue-4366.rs b/src/test/compile-fail/issue-4366.rs index f4e571715997a..98599b5d08081 100644 --- a/src/test/compile-fail/issue-4366.rs +++ b/src/test/compile-fail/issue-4366.rs @@ -25,7 +25,7 @@ mod a { } pub mod sub { use a::b::*; - fn sub() -> bar { foo(); 1 } //~ ERROR: unresolved name: `foo` + fn sub() -> bar { foo(); 1 } //~ ERROR: unresolved name `foo` //~^ ERROR: use of undeclared type name `bar` } } @@ -35,5 +35,5 @@ mod m1 { } fn main() { - foo(); //~ ERROR: unresolved name: `foo` + foo(); //~ ERROR: unresolved name `foo` } diff --git a/src/test/compile-fail/test-cfg.rs b/src/test/compile-fail/test-cfg.rs index a090dd9de5d12..a8c528135135a 100644 --- a/src/test/compile-fail/test-cfg.rs +++ b/src/test/compile-fail/test-cfg.rs @@ -14,5 +14,5 @@ fn foo() {} fn main() { - foo(); //~ ERROR unresolved name: `foo`. + foo(); //~ ERROR unresolved name `foo`. } From fd5a3520d5fbb009b2a5de8cf5ed164f28418cb1 Mon Sep 17 00:00:00 2001 From: Samuel Chase Date: Sat, 11 May 2013 04:00:00 +0530 Subject: [PATCH 360/410] Removed test_hashmap() for the time, being. All tests pass with make check. --- src/libcore/to_str.rs | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/libcore/to_str.rs b/src/libcore/to_str.rs index a2c4ac991a49e..d3e3d8348b1da 100644 --- a/src/libcore/to_str.rs +++ b/src/libcore/to_str.rs @@ -144,6 +144,7 @@ impl ToStr for @[A] { #[cfg(test)] #[allow(non_implicitly_copyable_typarams)] mod tests { + use hashmap::HashMap; #[test] fn test_simple_types() { assert!(1i.to_str() == ~"1"); @@ -174,15 +175,15 @@ mod tests { ~"[[], [1], [1, 1]]"); } - #[test] - fn test_hashmap() { - let mut table: HashMap = HashMap::new(); - let mut empty: HashMap = HashMap::new(); + // #[test] + // fn test_hashmap() { + // let mut table: HashMap = HashMap::new(); + // let mut empty: HashMap = HashMap::new(); - table.insert(3, 4); - table.insert(1, 2); + // table.insert(3, 4); + // table.insert(1, 2); - assert!(table.to_str() == ~"{1 : 2, 3 : 4}"); - assert!(empty.to_str() == ~"{}"); - } -} + // assert!(table.to_str() == ~"{1 : 2, 3 : 4}"); + // assert!(empty.to_str() == ~"{}"); + //} +} \ No newline at end of file From 7652f3ddb8f3c4fd281e6ec0bd8fc0d9b8ed857b Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Thu, 2 May 2013 19:10:23 -0700 Subject: [PATCH 361/410] Move flate from core to std --- src/libcore/core.rc | 1 - src/librustc/metadata/encoder.rs | 2 +- src/librustc/metadata/loader.rs | 2 +- src/{libcore => libstd}/flate.rs | 8 ++++---- src/libstd/std.rc | 1 + 5 files changed, 7 insertions(+), 7 deletions(-) rename src/{libcore => libstd}/flate.rs (95%) diff --git a/src/libcore/core.rc b/src/libcore/core.rc index 3cc95e5a175ea..dcb61d4734169 100644 --- a/src/libcore/core.rc +++ b/src/libcore/core.rc @@ -228,7 +228,6 @@ pub mod rand; pub mod run; pub mod sys; pub mod cast; -pub mod flate; pub mod repr; pub mod cleanup; pub mod reflect; diff --git a/src/librustc/metadata/encoder.rs b/src/librustc/metadata/encoder.rs index 6c02ece9289ae..0c25111d1291c 100644 --- a/src/librustc/metadata/encoder.rs +++ b/src/librustc/metadata/encoder.rs @@ -20,7 +20,7 @@ use middle::ty; use middle; use util::ppaux::ty_to_str; -use core::flate; +use std::flate; use core::hash::HashUtil; use core::hashmap::HashMap; use std::serialize::Encodable; diff --git a/src/librustc/metadata/loader.rs b/src/librustc/metadata/loader.rs index 193f6fc8f0a3b..bad6e2a4ee5d7 100644 --- a/src/librustc/metadata/loader.rs +++ b/src/librustc/metadata/loader.rs @@ -22,7 +22,7 @@ use syntax::parse::token::ident_interner; use syntax::print::pprust; use syntax::{ast, attr}; -use core::flate; +use std::flate; use core::os::consts::{macos, freebsd, linux, android, win32}; pub enum os { diff --git a/src/libcore/flate.rs b/src/libstd/flate.rs similarity index 95% rename from src/libcore/flate.rs rename to src/libstd/flate.rs index 29d0eb422d50a..7485f2645bdf2 100644 --- a/src/libcore/flate.rs +++ b/src/libstd/flate.rs @@ -15,14 +15,14 @@ Simple compression */ use libc; -use libc::{c_void, size_t, c_int}; +use core::libc::{c_void, size_t, c_int}; use vec; -#[cfg(test)] use rand; -#[cfg(test)] use rand::RngUtil; +#[cfg(test)] use core::rand; +#[cfg(test)] use core::rand::RngUtil; pub mod rustrt { - use libc::{c_int, c_void, size_t}; + use core::libc::{c_int, c_void, size_t}; #[link_name = "rustrt"] pub extern { diff --git a/src/libstd/std.rc b/src/libstd/std.rc index 7d013a20c67d7..70bd5ceef9887 100644 --- a/src/libstd/std.rc +++ b/src/libstd/std.rc @@ -107,6 +107,7 @@ pub mod complex; pub mod stats; pub mod semver; pub mod fileinput; +pub mod flate; #[cfg(unicode)] mod unicode; From b05aae2d4151a5985d58758fcd46037fb39a5fb9 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Fri, 3 May 2013 16:33:33 -0400 Subject: [PATCH 362/410] test: Use the new `for` protocol --- src/libcore/core | Bin 0 -> 9455580 bytes src/libcore/iter.rs | 31 ++++++++- src/libcore/str.rs | 4 +- src/libcore/vec.rs | 28 +++++++- src/libstd/dlist.rs | 12 ++++ src/libstd/fileinput.rs | 60 ++++++++++++++++++ src/libstd/treemap.rs | 4 +- src/test/bench/graph500-bfs.rs | 7 +- src/test/compile-fail/bad-for-loop.rs | 1 + .../compile-fail/borrowck-lend-flow-loop.rs | 2 +- src/test/compile-fail/issue-2817-2.rs | 2 +- src/test/compile-fail/issue-2817.rs | 4 +- src/test/compile-fail/issue-3651-2.rs | 2 +- src/test/compile-fail/issue-3651.rs | 1 + src/test/compile-fail/private-method.rs | 2 +- src/test/run-pass/assignability-trait.rs | 14 ++-- src/test/run-pass/borrowck-mut-uniq.rs | 2 +- .../class-impl-very-parameterized-trait.rs | 15 +++-- src/test/run-pass/do-for-empty-args.rs | 11 ++-- src/test/run-pass/do-for-no-args.rs | 2 +- src/test/run-pass/ret-break-cont-in-block.rs | 5 +- 21 files changed, 164 insertions(+), 45 deletions(-) create mode 100755 src/libcore/core diff --git a/src/libcore/core b/src/libcore/core new file mode 100755 index 0000000000000000000000000000000000000000..790c07db685e3464ca485f2b30084f1c2d68ce15 GIT binary patch literal 9455580 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�PT&rQ0l%>!0T&ufr|KgW`B21d_mdza;c55x%VB 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

2wqaeW`3rm#8PC#izu28bd@H{UvT5{yg|Gt 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

XfpjRHJSz_MPJZnyxwq;?egYdcin@+@_UqyKz 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
    ??KS|lwRU{uNRtt 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
  1. Z0{qHEFBJ7Q6uTK*xflx7b{vU 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

    ?IpxEY%b2UZ#vVHtS^50BMaOR|Uh)-&o?->mT%= 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

    FbvIjm7@e-7dp2;xu0sa%(Y|1nLo8=k z{5(s6>@>a`I*L?IWW2LJzs$4Z>EZ9Rtj5ea2{+mz1iKn|G=+pIKekQ||akkTp z)c>nl>19vFx|?+7lVgv#?|pk%ZM99NE7aR&3#tB2C9QJ{nbNJ}8a{ESb?Yo5@ufxU9Vrzux>6~ zga>8Pu1zc$GU%%r1}C*-K$Yh)l0SbvCcsF6#103&C7q&{C}xq* z;N<0i$9o`FnU8*8JckVCqg`MyIH_yH`o{Us;&Ygoc&S_uZ4qXpHX>rMDW2lCRqwq7 z*NJxMy@BQ~2rDT5gry8A<&9grM)l!n41}q%;|=p4AOQJ-L@7#nfe=(Hh*U6}PB|v> zN-xoK8SQM9R>3;j6_o>_H4&51CA+b5&HRA(uIrMN|NMGu$a8u_t$BmolH0h&zj#OE zDilYE7$}VjFshemfkm|!{GRg0Bc41ASpPIrhQ(YEXi073_4WH#9#L6aIdA@R6u$Bo z`O#Zxh@l^{D=$K&&4c%>`19r!8+NMvq;hLQ@jj!_wVvYZm9NVp^=ZwI&Wg)3(oA#% z*Zr^p!SH+?S;52M-~Ji-6e*a1z}DzHT=#`sFg(0UZa3kRcv;US=if$Sy0H+C3$O;k zu~C6yk`^g4bn2YFdIofIMCaRET96$Mj6rEofE84_^LNem<~=}hO^FKdbzww^^=0~< zSRh=BXHqThH)`_&gcLJCvT%oTk5ZNVVz1xt0P`<1y_kb=jRQyF0>Pjm%#{;tiQ!0G zu4?Gs2wcDWkU_nSM)%W(wemlHRa7-7J`oUdy%eEW6oEa$^VCH~3uZe0&zELy@k2UuAm8?r_oP|I6Qx zaxCvjOsCuRA+R+%mg{q{1;OyQH~K@QJJJKLTxeuoLc>a7IoR1-8wT)|Wz&1FWv*>L zevRd?t0X@YD9Hu$(HUH+0osufe0&?co1nRs5z`NyHzAuFS+e*Qi7Ze~@i+4FWlWzn%%>ZS-&CKa=yKg8Gq=n?3 z!AV`Sj*HlcU8~rsoacILy~bLN%kM_z?v6MZxrM?FG? zq>o{!ggewDWtxM^p3KK5zs@BPm zXtHF!w9@X@)$gr*kB8W7(yn}oZKchkj@TD$#V>lVw9Ya<(tVJs)FaZu{aAOK5a!XY-Wd{CQ81iOzc6#(z$o^eE2yD+By#~iU6_9R&Wrf;su z9c(14E=pEFY}lu=k1TO=5&lO^Xo)rxZFbql>ukL8wCUp;Lfg-ema}S{e>&Sp(cF5= zAD3(?nK#_Nsw~!uGd}Ij2+-{Sg#8|24fkv+r2>*#B*-kVpM6E6Vu6s$cX+`y``tLH z7@l#%s!#GoI3L~0y+d}DIotv!7b%#Je!_MBi>X2AMs?dZ{|bQ_SJ>{lor9&mY3@U0 zt*PS)O#seqMKA^M@=6^%v}wOpiAh}rUO9+#qu(4Qq zc|W+7#pt~(1H^4Q+{<#tRx68cqby1ZEm>J~vkN}2*`z!+b@r)WQ_{S@C0UT=o{HJH z*&lK|A&k9Z?E%@TD@fc2Hj2>}e0|^7=9N^qNkx>DZsZ^Bt99Jguxi`F^ zatz5v?z-%RWK);x^6}p{UFt4$sg!X2tlI@QnNYR0VE*sCVp$!i_auojdAZp9YYhAR z>7xpZM{S&HMN0sCFDbseHFxk|G0P4z!J^v@#BBy9TLDaIZULOzLCy+L8l?_Bwkcow z0vg2C2%t#ai#3ZA%PryAOvp?|d~hZ*|0aT)j`Cu*f6t03b`(=7;lFRqimAJ~VcMAU z^~Fnkutn6b>bga?RBsQ|McwxxL!t4ALWS#O6Ay={Y(g*}eV&9NyHY5B)QPIJMDPCG z#%)p+z*Y5DRCO4o)-Z=L;6vvL>C|c@JNu(5qN9~pLF68H#8fMSg?)C!eT#Ze~cmZ=;tbodb0xBi^ z<0oFg`6H;kiRq520roclU+vjA{|q*BsA)oaRW@%zEXdq@#T0x83zqSNh2QUFO~^Re zSdUo&?5N-L;vlU&gC1vq@7rKnKxzTj4vu7v-m2(tlyv@Jii50=OG#2Tc4J6mb)zj= z&BtFOYYv~~D!=_z;D$$Y_^ja@HdQ`i^6Bn}*7%HaBZVC?P#y-D!&ZPNu2g(Xd+M++ z1h=PR^!`)^iQ9CVKb0$|?5XHBo{Cb!Yk%xdg>5`QUE=wpaoB0u9#R`Qz`cmsZ=l=< zICmdB{)x(#TB>Lo2*6U0cr?j&mkZkq$)>Yh*hUvtcOk4&!qqpsu&HcyPh+R5Y7eoE zZ0bG6G>=mhS?8o(55X@QF@<5A^_U)rMb*nLId!ZM7KDWT!x3b7*2@ z$80)|Jjypzh|A3ogh%>L>^+p>|Ksj&;3F%l{C_;71|u*gqYg#|35t^SF(_(w*IhH~ z#BCl%13EY=;-D*x>#8#gBUu&A2(8^|u4d4dh>HZ*)#!hfptJ^bAcK%ZRxzkR5C<~& zbYr7tP%*l${NA5)>UQ5wI?PPI2<|_xSNhbcs(Y&H)VZHqx9+JbtE2+R=+VWa60X0D zo{6|Im_+}^=4UA}Vt>mCd{^SxVb^s}^0d0vR9k7xoMx50F&1R&LB;SDO(ZIb#NW8j zK4E5(YA8T88dM@52t*Q%HhG+peX@WqlU3|AQtE)%!%zXbUa1Sa{za5&*}d!A$#Ugp z@A?C;Hapc-biGpIYi{zc$EvPJSv5U5R&Bfm*{{SKKkAJ)!iEuWQndA?x6Dr&<;}?Q z?~KsBJoS#X)x19eXJW5Kz}pJvalO1G9S9J)iPcie@a_W@=P^W-MIJz zIVK=8Fo%guzFAZJ_ws<`s?8L`_qnuJkBy>|&#~PIpS|b~={wt_DskzHxVvlp*YsS| zU&=pj&$okLM^E`6Uci_vJNG&k05`vSjMp+;v&vQ1EDP26XVsB+X?=Ma+ZaP--;-&6 zMv#3c5^Ln?Q?LF~^*b?{cki$M zb;{fQt;Em8$_xI2VLfBIO!*>d8PC=^)b_B`o1b$)S95V#1z`rMAnhI#H zgEj4JKS+AA>TtTeyL=m;@urBCX-Pp0bjIVegL3qA+g_`nn))&WV}Ggs*!ka8{j{)} zaL#-_ZT&gbXpBZqvZ~CxEfvn0i=Xi#?%3OtQflPa(f?^F`Skbx>HnkX{}W?t+V(^L zdv2(<=Rwo|@0j(Hbu2^wYf|;CqyN>HEzjZlMOvJA(Uo8a%@x|!>~xWD^i#Fjs|H+$YbSx=u8s9hRS?rA>t0Egi3 zCHIc#-pV_owmk5%ep&jwE!4yv_fetU^W~fOE`R4lO?#G-FGP0#*I24$^2}l3{_(gD z-kg{!uLV4qtF{Nw0sZFqs;Fnm3Rl)$X=N?cSLb5;+cREmPY3d+tMWVSF(`ng2#kA0 z^M%PWYwb*PL`cC>tn64O6USvhUR9Y}lwn30X5yd!W0HY4n;ihsF#IAn|!|f0zT0g0~rO11lPnjf^(!a9MzUn;BwqIA(-#+zMGNQPr`89jJ|2HkR=Oa?( zZOpL=)>motFara92en1h{oP+>Yb;xw46gB!RvS3|+|l%$>E^F=|1RJC{lfb1Ghi4x zp|ChJG6kCkpJTeePv@XT#}n>*Z5mU*zw6X@%Qvd}*+^AKQ2ubT zK4YWx&@d8xF*S=KtOr;#b>Dr9-yvo+x3FM6z~v08QZFer z>jD1dto>OJ5ERl7U%9iYhX%d4<%=Cm9H0*KL$9omP}=Li!F^-Vb~j~kZ_ylsoi*<8ZcO;kMn zkN6ISXoC(@NUrak8ER?X`R2U%ORic0uXjM@U7jvyc1!026+xNpno<3t-#&fxJ7o4QTC~tu_;#r44gco# z#+YX?R%0hQV!6L1VlCeSXOCjwTDi3?P=n`n?w9S?RPCgX8p#5NxW@;1cNnlm0g5#X z=^j$zJa;jP-E-K*B;7ZRT~IlDvtztsHUdbmn;GxEb46GGId@_QQy3X`z;-bLE9?YT zJa(epW-8ml3@|MH@Co^ewf*ZqjG3^f3Cn8!@GU+K$(?6$drS_Z((gZ4SKBi}5}lx) zlihEIR_tDBZug2#?A|+BcArA6iS9|Qx1ddC>s|d@E4Gdy){SEs*LRpcl8`TYM&fBnM^``TY$VhprYf4%MP``2GPzqarF zrMvQe`>S2Xz+cK9PD{yev+-Io{%f<78+^dV^Tfv7ntS0+Vs&W~VknF8x4z_Q2r{|& zey%e<+;dg6JsKZks#y)$k zwKeVCl9c~SCb%|n1B_CEk@6!Mt8HSXTp0+rS6q!~MlyxJCI=|^Z%uZquq{+T4nsqp zl6Q`G-@(&z-5ulIyP)fLCFscKK$>xm5T;>m|LZ5lyT{SjIitG$`Typc=CAx9f9R2! z{MsX%2;ZJR<;a%iue^R7+8X1u&@lVYfQ7FYi@CjP){C{Or};bfYi&kZef9AxgI?FX zdd=Q}FeB_))IHN5*@D7#clH-0I=B9gu6~o=mD{?jtAB@t z@kIC`Na*6bZ#R99AwxCtCnH=2bu$9)U}Y1gzz9YE8i`(;IrmzuhQWyD5u){i+hOY| z2G!6R_(1^uPD;EGddFJE*B8Qk3}zS1x{tvWLGm2T`XXx=)ihtbm?O^*N&X=8c9IF? zwtj%XIUmU6f3!CL?$)*WGtu6=o7UzZn<ZAxkAw; z+ICsh$HZ@+&pIT%6>9zAOslk776`bFjc?zimeVj5>(fk|-rwsU6mzz)tiPqa(* zTbuc)O6DV#S!+9U*(X?L{nlpIsT#BTsnqUisoJ&LRr;;H>MFY+wEXdwNxy3OAyBnk zG?!h?Z@Jp?ou8_<{Bb1pXZ7nBspZOEThe;3T5Zc8YnSS`HuJM9nNux)jAhnuZRSQY z&*~>MW0mF8ubR;URWn3!4&yh~j6YmjZH9c~+(XVUQZw9tuIfeJIQtMmDX zv(qb?Q_VQo%F%Ca=D#QNtbY9Uef8U^TjomES=e8E$u4{U+9(VP+v54#RH1R0oMC~s zzvS59f;Euj4Z#frB_|X4Mp3>SAa}mM<%D(Sz7{vxugTZovX_z-S?UzwzufJsez{YGE0Txm$BlMCi*hVdAvgM(Qo*T`$h%73gYakD+^hr z0=P49S{f8q8Yjc)x7}fw8}cd>Yj@}Tk{B}kWt2x>v8BD$$5!HIqLtYpdw-l%8En80 zd7f#;c30(@s6pWAi0Y;LH^lAA5 zjs5K|zJw;rEHlySgD$Btu@~QNCbr2-GQzVDuF%*`P8_3@!cuKWu&bVGa3jHBVol12 zrPre5-w$84NBz5MbA3V{ep?j(A{og3dKKS zwQ0q~ritM+RK*|m6`7cV6%$ix+QeLLVqypWu#SmM`6XszJ#>7N zjB3XUafm*k&>vHZ;mjhdcF{Oih$rco*d|J>Z(>$LWqEY3wSOYMhr7m4i!{AN!;%~| z?!MSe%yShdy;LLkKa2C@s)C7GOtP}p7xc1V+_Mcqu5lAnF#g%C3rwt5W79vVHL>A; zuQ9RPrp?6qB%8(JBEAT>(0CU)as5z~pIjA8Y!fjd*h?^&Sex>p4G|WLJEyF0oz87^ zuERMK%wlniEVX-@NdYL~QYO}_MBK7HYm1XfdfiP-p}22V%EZQq$wyyT{8e9;i78ky zF{P$W%;hE~_SxI&nAoUaVkY*B)?i|OoiB&QzgUU|adCGoRGsPVm@Fcb4!ehOD|7*}>mSuku! zFfoh4Sziepr6Gbpqh}k1$Zbc9#RQJhZ3XGkY{aoGD5Gri76Bx)|@i2VPe?CQ}M69TqdSq#l)1FHZhl*nAqA|>zLS( zUt%WK&o@XzF~81Fd}6;?DVD7`R6EXVfgD8>uz&`|6pEIRFB-=|H%U4s_9;rNZ(>#g z4tkQn3P2+h@w2W7CN`poD4Ld&Xw>+mkDG~kuHw9Tjym!6jWTQ^gNemTXKATr^OcZ{ z9mM$oP1n1LO%W3x@x28m<`qgb_Ly60P3*1KL&JP>5K7#!x{+2zN@iNq96SA3x*{94&ZcF!+rt7B= z3uBbo6XlEF%i6EmKXTlC-#NQ{e}{2et6CICREwzbQ_>~R2dh)b>tyS)Xo6+o#3j=F zM8F&4U-0DPfOldz;GJKV?qV=3-Q`zrZXbZ2g^#f4iyOASsr)8E3dIemfT;0>Ufhtl zLQ#22F}&&;&`8JHSJdWw*ri?a;4!EY-MG9F#ZvTndm%O|8|p z20nqvF66+sg}w3TK#yK@#9(4GYh;+ULw)hu6K3;hp>_gVF=udU3Kl0t#7)$!8y@a8bV*n*{cQ z-dOWOOnmH}?g*?@-}RskL1!IWZl&}FyGGqIj~90Nu-OZlL@WQE7ktT2TstjW86ZXZ zW2D9M*pBqIFR~z-epBe8Ig->NPWAECS1I*%`t7on%crZCThNyPkx_M^Dw85i8bIQA z-{xIErMRd#29bENLRInHyRA~q+)Df2YbVVq&y44x^UtKv5#{tcThP}JRSO+5Nkx(P zfZJU9uw7Fegh-%R6)K)WTU2N{6gnF6IHldDEL>r;Ipx;=r0iCwAjG7Z~Ex~R^Jkw?T3b`K*)#?sWkb7-;z27c;*^YcgiMOpc6!8t}1^UB*{`}^$ zD@~q$U0V4|6qW{pGdZW;gnExvR?8o37wT6PIS8tXh%TzgCYA0Lu^?^zyjA3EtB8Jc z*#k|UeqGw4iu^qGilFmw%g$;^SFrY-=gu-I^$0HKAY^{eKD11d_;cguTt_F|Aaoc_GRv|U*9<&Za9m@^*Y>U$+M`3MjFdJ& z&OCxuV}FArtj?^|>Du+?`y7J6#3bDLH=5Cyr<6Wt*-t zg@6zov#j>TE_EmL#cFca9pTMgsvw88g!-Nxdt6Paw8HJ|&4d?#6J0Cp@hL6k=X^&X(=f>E~k&1c* zchYG2W95(5T-L*<3%l%4<*~=O_;X|Isx`T6+w8yaQD^oHesnu(Shb@^ZH=-S(?Rm4 z?i?E?Z_~slU|#I9^gwiOQmNCgFv8tJ5C1o62y;YC;vC_|37QT0L~E7xuP{A!`CoDLYGH=b@DjWMP;@i+o5YzZTt5AVjs+2 z3C{&n66`N?7UaoCsfh1WJ(#>!dZB29X-}mwRJV&FiAD9s(OE}auNfHIvMu#J?wKCJ zmll)cJ0TTJQv3>B8T7Q7G_l>@-Bzu%u zkYfITo3SqMB}o@MU1j@jiQi-;`h3fi>4e#T=gmxAEWqRg>cB-T)2#f}_=~lXU4JS6 zxHTWG`m437j!a#gQ*oH2ys)4oBgfDQd0(qV>sXJsD$`WHt=1onuP*kNlE3>SRr&Z9 zEnMHXqj%Bzvf~5<`@FtyTS|T#{&q3mQ>ir>IQdcY8F#p=Sz&ok^M<{yhtRyL{!;B( zwfyoZJ&pY?Nf+IRHw%JcQAsj_Yi7Fc6{b;{ehy{3Ij z_MQ1R&s5tH~A0P`m#L()%IZT_1BmEy7|2;n%h?noPAQm>CJE4c{<^bTKE*g zndh>>`B-e0M;m38}T*v-Gj{ww8eyL*UaZnr)#yjM5vqXic_ z#zF~pZ(il>T~`^{Enlid$T8)@MvT7IgP$BfYG@4ws1 z`@(xw-p7*i?xuG#kye~)Q+yqMcca!?eD<4O)PRcOhc&6Qaz^4Ft+B6OuXeh>kN8lq z=Vkg6w;)n)>snp0ls~ZsqWBI^E!&^?t4y~Af8v_<M_|rzQ zu{{rUCY$@aN32bDpLg0!&|Hz{sZShV$~$!VmdeP%12yGk7MHgoRbCfmO;aWvxo$Fb z4jjz~7UXyCKJO$Gw34ZT)_~v$r+IB`ApTo?a?00LYEe`Erp4uND^%ONk@9&7;Be*2 z`qhmFLqrOOaCleA6*x&&-*VJy4FK`AZ&mq8+$)Wze<%!3%3mxuRQ9m=RDhhBWSBbl z5(=1ZZg0F}%SjD@`?@(`eG*u2+(pFcEbs)@cM8^R{pyrMkt5vfiS#bFHBO#tU2_c- z%?OIt4R1Y+5{ENOfY31p3ao8feIE}IKqyD8j~zWO0fk%XBHj3u_ZoXc=9tlkl^YCf zynrDA9Y*gk1GL&F&5(I&R{oP#2Dq~Nbza7iR>r!dj58@?v3+(f?ysBj)&A-b64fq{ z4)tUhst`Y%XrRzc{8(g(jm7e#hr{>+{Hk+5oR%uD&BRrWgFC`xE1Iufl@h&(c*S?T z#CgW+l?BH&_E@KVdvXtM`?jUZ+t2oGx%U9m=zg_tRjRxPqyH}bU{#;{*}k3g%V^)x zsq!9-_U-(@vfFp!ZW2py<7Vw$dSl#L2WmeVp2#)$SLb=W=iF-jcphs~j^$?yp2s|geHS9_mY|jY+9H8E zjmNuQsBM;hrNceCFYE8Vj4Al;FP_Eg?iZPSe`fiaK6RqyQnqlHYLCaCvuk{VmM`>o ze}OB?H}Zr#IDYOi34%YL=NsiT(Oz5VHz}~E!Rw@fN1=grV+7WX#sBrc6{DNgYOk91 z*6EKGsrLRQ_Qz@O|9|R_b!_&tzy0w9yQW@$T=KmA?vFqI;ePs~ck%tPWm~nqo3W~4 zY;cG%)L_*HH`_fzf{h6WZA|Ff_b`Ui=2ly$S>rvl4r}3lF>{$l3N~kZbJ;8o_sP03 z%!mK28ZKC*hM6N68s>eAmS?e*pO&K7s6+NPqtJYHZMbf!8vCj^+`FD0Tr}8T$D!)97Eu4O-Eu5~g zpZnFdl1^U{hX9O_pg07m6y@JBhuwP z2<^N4JUyWdr9Zwuuw*l(BXrgpkPvl@&+BijvzCuT(@F)BeV<1r_GnGW0r)PVW&)hQj+lwarm+TB}izwke< zHXS%N{Et&j_G01#%&}Z$rT11-u{Gt@(f5{Ad9wFEYkTXIzvt{~dsY5awY_w87{1eD z_Exm935p(%zna`=iGj)_)aUwgr+s3^|G%@UkA3g| z&&(z^e!u;n!8rAo!kaCr^8OO>;HIrreRMn^cyQG{iLUkq4^B*%|L49x>e$0gXI0z3 z@AmK&T=*S(?$;jb+>fWF%KNk9L7n#QK65$k{mio4yCqfLL($$n|GJ#^er(z8-Iglv zp=j@lRQdaE&o8_yxo7v+p0{tQ>i3~&@2XV!``+G@XO`REOE*8X?L8t@{=T>O>A1b` z176j6eqH{KYJ2|@pI@s|^?P8RUl&zuV_%+M+uvT*&qHGWsq**T9$t9!vhDwE4{dvo zNR_|u?LB1K?Y;b89@_REohpCd+q;kbTjze?`POQCAM*QsgAb?EGo@FXw}dSA3O>p{?fy1AU;e~Cyzg!M z=c@i53OrbmDu3VY5_J zd-)j;ZF`SSmA~)pedq1VZST(0AKLb=NtM6v?fq%x)BOF8-{t(LztsH1O>YkE?Ws-- zaXt_eK8-t%OPsBKTAkvlneVD2Z`;!H{%tw(j$T^c(aVvy`=6F<@9eS5Xz%u=xi zP=o*V+W&^2&xfl0sq**I{@?l-VR8HI`_`#AWS9>4-1M5AK6z5w`}d7)r`EI|mvnt| zk-s;eTPC{yC{6QK<&WWu3(r~e_wv^fTt@UQa3+2_xm4s_=1rCrDRSwsZ!l|`%9k(k zJg)OTx99cM`gF-(#on2!&w89yBv_qnz0Mnuj^RoQ3*NqFH@H+&x#{>(yOO~bYfNkG zq0W5smQ?xbk3YA+#fo%!YE*53YS)alHPuE}e!Tt1)pphQFRs(R?Wa`r`(U*1h;(`T z*S@2d)4t1J_u#f~O}f1OYu`;j+FSqCxj$}tZMA*eA9$7J*H6~m9@su}40dzO<#*=S z{kX9H$HYyYP-v+5Z`xGBbbNTYZQY<$`}s1Mk^ZZ>U+UCnO}ajkFqL2bt(y82y1$k0 z{*4UT?qzP)Lica--Kv%%DVvY_3Qfl^Noiz<*P^EUI`+KtHC25)81{T(y1f1C?>&`| z7E7%MsMEgP8y?*DZAq86f9>18*Y?%1pB1U{{u1nY%d4yU?)rbV=lgb7@9=%J=RGG^ z%a=Xxo4?1nuTI~azek<<$!)3fdMIxUJQ=Otzf4bp9ixUPe|~@PI^(n5>#O>(@u|iH z)%r0=5w-=q<9Xi%lBAq}7`Dt2V;!?%-8xeAD>!IwJrd0MJ`*=H@*n*Wcy zQ5bwxj_G>~sLF|UedqiRw^zz++_)imaahX*wJuv#^fTPH`de)Q%a(Oh@%aIwRe2u? z%+J0%<@Q=r|2p__>8q;xlRc%+D-N~SR5F9Ol=spc18#Gy`4GoE$i=lXyx6P0j!u=Q z`)A$#4&bbf%C&e1rzAZa%(HCWbo`Bpq}v+GU#>o(YTDn1vh1kJ(1T_5ytc>YmMi-=-l$%HTGFYesrIoxb?|9LN?u!~O6J-acYt$3 zc3WvWXG>XUwmzD>Zibbn4<}{5{2gH!iKku;M@Vv?tTEJsHvL4peTpaIezG$MW z>35Y=(x;ZbU+UbyYf|Oy|M-GqqxN%ranteD_Gvs;8P6~=1Qz&e7&-mMPvPVQjjsIR zLyBH9b#69mdUiH{;@Y+w`tDkhTYoECFK9i_En3fWiv~NFrR7Y<{Xq_c5#CmjGg(*8 z1V_RmrJOwIgBEM>w2uB(q}ua<>#uY1^LqPnRsGp`I$8hJQSq*3OoPv~jb|AMj>mZv zkn8?afA^nq-BoR^L|eYeGb;OfaLi^9nOr)fOP_;lLbCkt=Kk)RrJ#xZvaj98R_ps< z=x0l+Jn5%mUlskZbI0PNxr=DpZm)CWNAO^pKC7jC@ObxqE6NA*+rZ}U^V%1?d`0c} zuZ}(J$<(x0`)^Q()czX`IduSS?SOqAi>KR^dpv%W9^`fR;~89R58Eo`ZM%CwjmT>^ zldVH`6s{udw({d)2kpifO1)(HTS@%L_y8`{JS?h_`NWy0u6*t5cp!5OY$ktTvQ2dN zz#<8}9xyQ!U(ebx>CMtHzLiJn>LYlq;+WX{3KJV~(ke?RGuL=4=H8e2t3Po~jyJ+S z?U&AI;jA;tJ#@ox*lBF`4zyp0?Juj^*8?%0T$9LK zG@fJ??>>wtS0vXjXFOSFe0zC!Xy2mxH1AV=wj|g8nV$En68Vdt_aA@8GM@K4*FLcQ zxh0XeNPiFKn3%o49~_-r{{Z#p?w2mrpAFo>d#}%>$@LFVeNIf|Ez-}oxefPTpH<2A z4^Vw}{=-uGIflJ;7SyNCcwk#{J@wJ^?!jK)v?5i08|ClYeCHuoCX+$;>pxVdz1!DR z@0W+7y{l5??|Xa4ckWYrH|W8`UwZzltJ>Zk4Tr}xr^bZt){*LLO^<(6Rgw*t*WpFV zoE#51o=wbe`HZT6q=ED0lzMV&cCSS%{#UKnsCfNkWxb=13?y*AJXm=;EtsFEQ{O!= zsjcriRcgKJ)4jODBZ{6=J*-vKqs6kWpGkc!tyWw0v>JQ0sbZztzx{lo;D+)=sp{5_ z*D|i&w0_s5>f5F2OrhG^Nn&c{pS~CwX&BK&giTRX0h`ke3ROjUZ+RkxNRV2SteUNU zK(Bee*Qw9te_z#~>Z7LObX@K0nh)qIQ5p7O{`J?DTW;z3*E-|bBU1HgOO0bk!wil4 zaAZccBeMSP$uvJ>QZ=$}@lyA>=-WvdoRJ}D{V8-3z`%|3Xxn}&LH{iL?N+5S0y z;l%iuPaET0WX6u`$Ku=0@^}Wf62NvE5%-mrQM1*Y27J9+^p@lUz7J9t4&>lhyT^Y3 zx^)%DF+s!eGg~{$ok7qHf`$+@ji4b3daeo5zBe4SWPdqy2#4`7&}8H34G`_sMo>FThMZ;1otewtj8#uQ5v{}7y7A|K)T4br+(@csVqU&;{BtIcH+R7-r)Z*EDX_gS4)A6?2<}x`QZ2K8@o?6JL92_IE z$@6c7%pPaOpmZ+E&hxluzVW5cLXF|THcrMP()vA$rj=eO#v=KmaT9i`uBEf7<~Z6}NtqDf`XM}s1TNLk?qoEvp6=bQ;Hlq47( z_Ia8~naB>o1zlrD(PkyOt~Yu14K&?#tx)_re0@}Dy*f2yu4)qD&$LpII`zUf5#Pu- zr~DS?W(PA-)MY{&yRazk2-1ri6;p76k%_~|AdiOKyMv2uF1l5uP&C4={KC&TGIS8FyE)rJKusl& zf^j2vnxLcIGDvVy!Az8GFcRrX)M*@dX7O#h51WbP#2$Wg*;k{?e*4vpelnbHbkXES zKdyY76pd&T7KMXu{cPWSG{>}zZu-A5(f7giXZ4%Qt~b&8b;0G&a_c{p7g`s$I)}BT zZv88zzkGH|@;F7s#M=3|g~n^2F1s936z3yDf?bYQgOdc^0E(NH4@(rm5}i|4I6F?X z5REw3=V>OGLq;sJ)az*`g=6I4TyCPvO-heS)1G^ylMJnN>r^P-@lu#&N1MkqI8$MTzPl;lXiFlir(LNDCzBy{#JTAQ<#MtphwcbU@j|>9mDN zS>fh9t<|~MITOtJR2Es9Q6vW$iukFvLGNbK`DjWB6}?Yd?otP;aJ?%OcRytbRB-ha zf_9@BD{>;fjA4_V3>hmT^0P^!#wTNMD9Ljb$5a%1|67S!JEoM=4B-MuSPbTA*(`zn zw1Z1AA0mewBovH4eQGU8Ea>jyX{nPTD>%_7$&M2i&sJGvKg%i(# z6HbUO#t9P^WqVw-6%>xmMf77#^czgHeskGpn`r&I;DtD`5i3mL#CEBWBQ7MJ1M5UM zo*YtWyyz*i*9JxTp|rtXTZsw5c7nlPr|guLs7=|iQ0J5tE_SZPxf$n7aG}&>k)>%x zVwNHk*?CB?*8#uC4;wA1W<2ful+jWft#o@;C@vnJ!iiR5^3mfI|Bk;FPAFKx38kiS z!sRA7ampL&;6#gGVmPtdN}|L4Iys_JvuqQ8t6Q-U*L4jb(~Nze$Q(c;6!bAzwPz) zaAHPBAv#W2kOPqwQz#k%Cr)S3EEt$0+HhiufZk!qqhMSL8FY%RI+usOf|$*i5kERN z@8`U7Gk3pPH|=*wOU`k9BQ^{%08}_3x)>)^4MdN)Xe)?gRKy|r=WG|A%U)xm z^_$B!nrQvH;DtERsoto*O1woX49CG1{8ZSyoeEoM{MRSTUN@>FUL+vFUVE#-9Km3( z9m-dT`b4l$=adyL-zVvd-6bhqOF@dd&O1uHnA)HF`G+yp0%d0icxi2V}7iC^&EuYNa8A*a=9 zxAI4a8%{KdV;BkvI58g%h_h-JjpN~+q=OR|P-21;e>hZnpVTFs%MA&7pQ#4t2nM|m zDqkU-+!>8Jr>y9G#JOqbhMhCPg^~oL_aRR+DHC=8XV80Wb&Up;UeSBbFPcFWu6Kpv z-#%d}oG`T(BG+y-WFjZxH@qm|#IPd5nR`*=jfWXdc&=ifiYhqa@L+Kq9t;UMVKJDe zW%DyL0awqq0rDxw2?gUTLjVDfboaiCiaH4~N zX|GUJFpju61tb~EU^t;5X47UQ(v@_Raoo&@ou-@ixkNIC;Fm)rQ7?x`@++LU11g*l zU5pbZEXuaHXe+3Cj^VW%CGKz&t>0XBmx^0~zr}U^a@45S&OwmfWSB2tkOsIkrlf>ks>lA$LlG)}nO1SbxDbsd}- z^GggTu0JH;gkP8Kwc4%x+LH_?Hi?_CW4HoNY*0+0XbJhEaXh?GnGzG6_-?E8 z-tIy=AVJw()nE_7p!az@Nh-=HJF_$*oM7x+i*udMH92R33nd8#CmKA>q;SqWT+n+k zv^j~d=sgyfFO8xK*SkXTw^uKP6Z2lA5#GaP!c0rN==lLBn%t(xtc=FbJi&0na}{T- zT~2r}7B^vMa0Q&OnB-_OOQ1g|J=-YcKO83%jGuMV0-W#)CEb14`g%AqBw3CV7Uc1% zm_j&a?8f-%MTdbAq6GpRjS=~YVzw_tG@$I<{(t(Y=Nqs&tZ+6jE5EDw`5d9Go{XP?|-(0q2qV?;7 z7sADEj4=flkC7&sE0R1Wh)isD1EkRSq(fx3ZHk)6wnKv1c2su{UwEO%*`R=U|L6d%HA z6cxA_A|@aGyW;1bCAd(q0vAe6!-dOD>}S_Wb>L#qFEP0I7*pEncheMdrd6M4<@t{{ zxR~@tOhE!%j4FnswMFtp<9LQA=?p9W_LWt*_>ad)?>Xh2$PPe)-iNBe5rRSQ8A3+eHmQs#YO^vL&t7eCvC#@Hb}5pV5i8LTa-Ya{!UeeK@C3V- zDNEz+!82|6O1#nT@-M{Rq2Nw;J<#1s^KgpUZ&Fi>Ch81UQcNl0PV+Ahe z>?}pxhOlMJHy*zv$31<`2Hm^ABCX$kfey3`bnq*<_z+ZZ zA-WhYOc*CXx@aqixB5_(e=^Z`nrQvzvXP0_uM1uX7hl2{Q*iMkX)>Q3k-UNv&W405 zG~T^RX4|Kf2|MdHnC&1jAvjDhm~D^p6`~;#4AnVhh1=xZfO8w2Gr@&Y&LZv1S8|#Z zMw>(ivkkh;C|gug%`oyVCw;Wi%~qlKXZT50;G&n9d~}xLceV>I6s*97QqyqZauc}t z;>+v6#b&?6;NlD`i4OPcvYl4Dm9KxS!9}~ciEIZXz(uQK3U;h3aA6#e@+2L&IQSJ+ zxHzjtdXIHRCZ9?mLD>!D55X3KLGPo=SBRQa0<)9ODJ$HRb9UTjKALpS1Q$vYj3&p7 zL?(p~FK|Kc!O%vOUeWuoU$hBTxZV|t-@(!J=za0G4p)z#HBNQLtX328ZO;gBF{y|s z>a#K$GuRtS@?6CsMHZa!mMo6xN=SeUi@`iCnb$_cV9tdzy0R2XQ1VN`xRWA4kx$}T?`i{EXsDcXe)@1iB`gR`~nmG5)-Z8 zT=vZ-TE8xMAzYk`F{a?+3TcwbBgrc`;T;^V(70oz%y#D2q)cRENU+uUYOsln!E8sA zuMjmz5QgfUvcgR|H|N}#b0)Y@l3>hs)YD7~gHE_$wwqnxu+pQFYDVrMzi0!kbhA|` z*2nY;T=Wo=k4{kh1xE@l6s*97QqyqZaufS`-*I)|BIB1BTy$DVbhuxa9kkl5d``2$ zMNS+814w|2Ud0rOmXI$R$D=$+2QGF|qVBjdA3?egmfkZiqz4l8zOfqIOfcxZRr&bj zERv5pol{o04(B#F*Y2DNE|eq~O}2TON#VN;T+n+kv=*gT^xotbb)gE^yFzgnp0}#{ zqEDl)o33%*CB@d?-)O7dLA1{KA5#a3c=PFa}rh6K2< z7|c@%1xuhmW6w4X`K-f*g7GEY3*e%*y9YA$;9^X&94;)#Q&cg9q7mRC|4N68DWWTI zF=AI4Tv(9X|Fn>A(()NxD2Vk88Hpr--ZD=4dvxz!Mr6PJ=CUtA%l-B%xcGZG!G-8z zxG-V76uD?Ch;Ncs!gzduiN3@{>o=GEI}@#67rYQIUWGBH;36wcGKVC2I2D-KY%iqH z_@PJ1Y`YYNCj%sy?S^V_6Tx7%Ey`DjHi}@V&M7NgyK_CxwK->k3ndB0Y+F6eq%i1& z3uZgz2~8qVsn@ttgOd(g>1L}?oW}_Sv-LU7c4G3;k&1s)o8Ush3S1~P4Hqsqfs3A( z)q#sPzr^6;QC1Qi?$>4K_o#L&?>o@oA{NKM021J0S~2)gh~Puv=`%?>aPdV-)Ey_d zIHXB>ANEWmkf8UmYH*5R(0i});X@&U4~28e3OC@~sB<~zOfWta7Fp`^G?T*T8MvVL zN!R;krC0R6$uDX}6|Q%M;#GVAP}LX1g{g;AZ(UZOk%{=-PdVPGibwY+6E)PL07mGQS5LrRI7l}jkt;b8;eQ>x~@SDr7HqrWZ z!3*KyY3h{fROiXkBvVO}hl_=Y%}zrKjc;g_*$ycR7Yj%*+tF%pl3*~~&B}+1g$Rb~ zoU+2@oEvej&p8u}i-kp&dOgjgFzAE}W*c<5N$Gs*_uLzuG|@^oTZQ7+x(}JdMFTPU z=#Mzy#m5{fxKOYH7fMaTh09Ig;)s8!0~hmL&m{&IKR^}gcheM+8?1IKrw%Z<$cV$m z0utb&Q!%($h~Q%3>0L=WaPdA$OyJ^Y50~DXJW~rK=)J8P>>wEQKF!B3^xm%QxL7!+ ztZ;MAwK^9&XM%CDu*lMkB6*1s;VTW1LGQuPrj$_8`=sSA&7lg{yF&3@Tv8t{rd0?o z7G8lFBNOonPY!SqD*_h_E2Hsik1)9KT*Wa(@@irwW=BMr0*3^+uo%qKvRMNCFznd| zA)j-&P%vKecMIUcE0lEi^SUZo^t_EOr!@IJ*XVy!$e+^xiH}M2f9~BI@qitw ztl8dZ3rvU5BrDW7H_wj5Tlr!{oS;Qv6Wyb|Cm-{e6Qp%J8^_jCQVmvX`3dYJ@nvTV zCh-{muZjzHO?`5U>$7uJQlD*i_mPZ(N2%6GnM0YcQ-sxuKH|VgEgh%htV4&(?#)ZD z;e^WyuEG{|CLOeX=IHNc^0(RrDE>&EY8ATGG?u2Rv$fa96#w+=wZsg@TPcZ~ zbB%hidmz8={P<~)r|;ICZ>G~dKrE)SZjL_7CpW}Y-(B~uHIMLf#@6C;8y~_Y2uXL8 z9aEWHa0wU8K8+5oXvh7Zo9Me5|L1vO8GosM`*=%LPjhDQ#W619_8Enk_p_qyhVcX~ z{~`b|W4pJ|BIW-}ul&WW)+GduF!jj;?%K zHLg}EUqkL%M%0$HLpdQIE;- zrWT%;DZGnL-r*=`m8v5e zfAIdh?4g3eV`g^4Wq2X>wqYburw1nqc6bmYh}u1fB%L|#{?qR2eDpUn`R_1N@*^M- z*{gay;zL#sg^6m>)zLXQ>@Pl+8e%plx%V^act7ik|9G4fuV6*-oBe82d=(A&79w#K z!~7HiXWyi(k-0iISz+efj16=9Mh#Z^qLIcXEKT_9vNu4kY*$pY`jUHJ*ATxQ%cI6U z#9LP>03VCr;)q8O#N#*q74Qz?S%lkwd;JDuN!QtGRjKo^)RRuGZPIr>K$8aKYgn+7 z={TUe4doAK@;zP9A!sL*Te_zMD!Ash-P{h}Rz-wjCv~Ix9jfgQBkL12ndh&fGWn)V zRGd>NdO=s_6k1*~E?=Cn$l{b`_Q=AHdAnxEw2_jh?XV&WC6VCcjC$L}32n^(H-7XB zf26i3mfB2;B<|EZx7V#?6ZX0R&=um#+?SOZ|f)$HUDgqW+gw?j9-B)r~&c2td z<)_vtxi;6c$yMG}?yAXB+f6H^v8B7IJ&S~^(-|~_P{F@z=kypF^FKT@3%hcJ3NNvWl@Oj#4 zwX3P$ibS5Tzgst*?7eA7#=X`(Wwi!K7@>4!};cljSRFR5?>s<@?V;(KFOf>t}lLt*d!{EA)H~itm^jqA(^D$l@uYeleBZbCK{q96wBJ7zs(cPzZGR_$YbV#}Y4KfCn8WZ|Z z)t0nJ8$C8htUZr--M5&^_>cs<5^oL?T$atJ8L~whcb4qYk}plt0)JCbC>~`xkq3e= zhZ!R#AAMc%7d%?GzkIsRU$)zFYR zaA3zZYRDae^TY=I4hg~vk;AO7gTZ-Ckv_N~&2cIk@th8`B?(4{!=BTm;A{jJbRBd3 zpb}lz10g$2cU=z?icer(R+U~fiGx-&vec^rZ#dWR5VYkmW0@%0WI`K{I7n||_Vmvw zhIw%-!k+hNuMZA4IP!Q5C~es+0hMnShc6FgD>ovK3I*e6`uzxt08<{TgX;V7iBCLX?A-`ylR=Qm(6kjoC zo$RwTa*WSM=PUk0;CR7;6%25<`3eR^E;limcX!l*fgGaHl)*q{md3BMg*%yOVX8kZ>$D46AXH9RX)A} zi7@VVPFdkPoZH}ByK^R(Z$K7VYV$Oc;%jq)-g`{bQH#F}Un{E27Q!oz~@KL0t@S(+!#n>_WhFzoCmW@+|yyzo~K`?HT1 zE`4uhypV>dF%2vpn(@MOvDOrxY?P{N#tZ-YtG~qYLhf#}*+t`pHy*G*Wvp3v1hsCg)dWFf)Y>q<^P%S!lC6Q@S%3R@L}$?h2w=i4|~AI3-3;i7y6H? z1%&i?;l0mz(8dejdslkAu<(Zd%NQ@b0y|6H-+j_t{qaJ+{C{k`a9&)0yl^TwzF*^o zDAgN3w)4Vosf{ucrEEv4%?$4OgXIU zV_@84u|E3{rX0e~9jyFR8eXYJd?K3{PB@on(-9p?jQHG@54(7jVw&PZVuj+r`f+M_ zF+)r~`k~?<{-@)B76nYQbE*KIGc_@X!0KN>!%v7gpA6;bi}mhpMuN|ns0YT zTcRZM<17C&Hc)Ah^we}itRoua&E{u6U=HPi!2R#nn~ePEL_mFrXzAnbY1s(_DP!V zx>hLOan}-Xf>yN4pgvVHl<(lywBZH&(D++r)Odj=yKFwZ*elruCt=nB!y+=gZ)~!% zeOnH`)i}3Ngzxc?ZH^xb#?L&w7C%&pq)!ij%EIAAtAs4P&wa;>g|~Xx6~m^sm?Zul@yU+O?0cY3mEMw{fbIfBPJ#x8h*CqVGsGkrjk(Ium4=+PU7ZB3#H3?*yw zp$l3w`7l9$^k?-eP#A{_6hsqHs7zq!TFH>C8X4D{4E?%;xY*;DSFeI_zYA_}!6@nB4%7+b$u%gbnY3GKWn{sZ*xiKRp2?hrS zJ+2|8tyAU^Jqln zU(~o(Q)>XM6w!U;)l`FB%6-C+T3yb(AQ3*5{FD?ULRHlouyHNYMLmH8@Hz=zXK|vGbBh zKI(H$S>bw}8**;5b0)Y@l3-N0$mPVElnY7GO$kcc1-)g_zPHIZ@Oka#aNn#eV0{ z+x`UE8IeVpq>U-G;h-`JV8TWfwr>J%&>rj8CR>a|(~`tUU4425H?n9h|iP8_yS-> zIKeT{xRR5i?T8RHzIIMF@7r2TWVIE;bFrZKO>$sha7n$*EkptMQPO8`CWHAdY$P%t zouangyhrz_f|Ywzsa(>^AYN|^VF#1s9=-PQb?(s(eu>?qXYlV(4MZW(m}%*RyScoaZ*CVEmNFEwHf><*ST^A4_#- z-$qlyQ>#m<3%{uQwkJ`sM~PRb?an^TS#-XbAypl1BG_X>nb~7Pgx5XOKrsV}e|3>( z>`+paZHH(`D^}Nwr#)>VjG2v;?0RlHU4I$xoXWUCN$eA0Bx;4&r#+*qd?ypW2`d$Q zJFX~uI|GiDU;Hj%Z$G-N#@-$$?J=0OW&2LpI>NY;lj4kVjZf4h9Unu)@vRPG_V(-N zo4s{WZ?iWA$ksp&s`l1NWIj4ZZF}>tWN!*q>`kd$(wf+tRi@H`C#|kyZykP#+1u}U zrN`cyq=(42Rf!r8{e{_^s)4;ttI}*6BvP|qOR%>|PZ+gqwvh|j#>BC0BqZzhreOS~ zRSWE`wz~iExRkx&3iG2u@5@0+V-df|B7o{s?4m(a&MqkpK}k4XrG)*lwh;%*-x1jbqe9q?y-8k2dpar@zg-6d+rM z^s0Ha5s51nzwrUTka;OsF)yWZNo!(WUW)|Ie*Ks_=GE$#n0XBXnwVFQRns@Th#Ge= zABsV#8kkp`2(yI7`L-@NX}|^ZYVm{y%Vr7Gr%4=>BNX)kH!lU_S2iy&uiEOarMd=Z zv&ZmtiIJn~sHume?>;VlB9p!+j^f^4Ge4LKkC~MJ(QQAe&JT8JPlHF{->X1neh_CP z9E+~fSV(`GBhTlX>QVS(XM zQ&zY^=f<2HaLxo5N)jyG^fZ&g${@I)YfS|9D$#Yl*|WFPbl0^)@fA1vNMey60$MQ# zH2I@V#7A*A+C<*ZY#p)``qCu0LBJSunXP&2$lCJlA$=H z;DDiE{FH-g0mJqQ=Dw5*^C6E0Eo%Id+9ZULKZIvWV|L=i27$eJns2Gx(pSIHp8=hU zu1@+V@6#Pb%M#367ilfZ#yq$Qv5kCXW8w-$Bi!nRr*W%i4=0l0Fu%F%QRuVZe)ZD* zbU3|qizYAK8_FBPsLe!2J|z+M?adeGZCb|X<1jVjZj7H|1wGOV(r+&NG%HBIUQGGp zweCt&m|qGAR!E`Drbym`eR~i5jtq53DG%Yky{>0>$EoZeyV06oYNeHKt_sDC-!gM` zccm6$^3lPHzZ2LmSg-;ON>#T7Xjrh3>$eW7gAPr8iJ`;xr#d<;*td7B&-U5OoA28j z0K(?mc!FBB)BE-&0P&22s{nDqx21QRn`5&+E(rjkskji-R9ygwX}!qe&uyZkdFPZB z3!ih&rU2O$)j1Qq_kDY1_K29$MHRhIienlDRk+?2ilZBrfQcpc?fu=)!kc-lYF75` zJ(<~M?x7j0`_lXN2GsBwo2B>dJ>OAdkQ&E#A5e=L3%YyPqiRO6-0Hp7>ZlJQ;CR(H z95}=aH;s(P*;5@j2E;E0jvUbj9176PO-72A8&nkMlVCL3rwVS2PdY-taW-k3_rxy? zMp^#If>C}29DjleI7Al%hlysriWg+X=8MKLh*TsdC;~#wwyB`>M!x@R1?ks|SqK~# zVwNf3n3PT#!kSnozO8Se@unMO!1J0vV4Wfvg4MQEgKY$Z0Z%F)E^QLD#MZq{o;K|{ zO>iO1<&~xs$wY*gHV1LJ$;9fI5~5@RaMW^_=4hoGutM>-CQ`r=6O)gAtoYCD7H}w7 z0S=|6fuqB!mJBOC^2j>CG2@pQaBMg{0Eb_f9kJT2Jjkc?hQxujkN_M5ieaA@5oQuR zeK1Mqp|^(;_1Msq-fO-oy>IkPn;=2&z13ijV9U9R*GAR$qv0OZ~-`)Ji)HTLD#tk5w;CLVC2A|VEpBWEdY+% z?*4S+Lg1LP8rgiBfa9sxIB-lW8Zb379-r`92aZ_$V&Iq|+JHj=nmJ~~_wr?4SDepr z(acffZj7IBnC|EFUcR@YVOBNpE8w^VD&P=Z3>;RGC>r*Htk`_fI0gWU!~{b@BZsP> zufnmTAHTWm%~p_py_ki-aVln+0*(($r)*7RVx6!x5nQ2ha9jr5qZHq3HyH3HViH>> z7!0^g`3gSg#{NLgDJz=pbZ(<_9nP6xP7ATfQoE;_6!zGF3kDo}LaRtr${AN`aWY9O z-GCK}Kk|(faEuYdA_>L6ZI^&U!3uCFH4PjtHvx{A_@Xwzyf5Y`JeG`iv0!OTz`=*yss% zEepb(+aQAZKtANapSm1iC&?kyWhHEA#k)yP84-OnqO_-@f1X(mcUy| z>&cE8UDX_&1Pvz?;Nn&zMdjdOVH|D=;#f0dkvGPBSl-6l2pn%C{4&dhLYd{_S2*!S zsBl7bF;19hHc*!^UV%(z(Kw#>nww#}KoJHQIV-5y3es;b`vogVzh2BjoOmHtn8JxO zq{85x!{=NRYrZ{&#?9BtUWXNh1wn$nj#Y!2DRR{pdzFt}T10qhc1~I02AmspF6W#H zW|tO=EcJPsNtwtF!G$h$Jx80B9+hT1_a-Mpw9@TWq4=%Wq;O)8n0)k6#dqH(oKUcW z6G~0vgv(6~=Xv+p%I4a6ivhpHaN>8#&c1$~ZPJ^GR(@VHm0{iH-!Y8uo%qKvRMNCY5TfjK16=laYDiP zq(3ac39nGn-7o!L7ON)TbL>{{lT_dYq5;N%U-1Ekc$8(SfJOO42aCaw?MEfgHUMv8 z6hO>oBVkA2qH#>4E0Xyd5pLvbIEo~fP4Bt;K~&4}V*Cm*J^&SBh%QD9)qsLFctKVy z?k*-e?7~~@2?d>O1)TxMHywUCe#{EeuNSirF&?qA1~FbBW%3dtd7Ld`VzZr)LgU|G zEz50C6t)BjmfKnlwi67NJ9V!lL~Y8>TeNe^3Ku)q;@pgLCYZBDEV4AMNJe`i%o9R_ z6WWd{MTPgA;xB6SdXvx$KEW&P_Tj+N=+k%%S}wE;eYBN z#wNeS5aW7Hglm4wugi{F?N;_OA50^L#R0OAfEa^{;cO8R&KB|Xp(Gu|IF%9;#2Ej& z^uEb6ZH5HB_f>-f1cTl?m5+zF2p?mdQ&zYh=X#yXIA?ANl%rL?Qy$`tF zJCt70d%It>5mmU}6^eIWxfEiUdMbN7cbUkE_?fo`#Ki>iM2g_>4pKgLgSyVlpSwS3YG;4cD%V7>?0WLxLx`9 zKqA7+v~$V|*X7(M=Q^D;!F(XG$Wn)=nG~iG;es8{c|w~=R2nd@)as;%R=OQ46#xD! zDg4L~!`>K*|K61FL%|AuC^d~AE;qrCv3u*_N0(n>_>oO^`}OOxEmpggoy;E7+y-$# zE+pW`oc5{2sn4oiG!Bp?GI=w3^6#qn@qtn4eN30&$^;2|pRNXDfr&JI6hj7Fmq$vjq%HHYvb4vIF23RHxuL63)Hqd$Ig*%w$r`t@QK0!IO}OaaH&rBl2` zSjNx5!w5@f;R=n{GxB2erxZ*I5)62<8k{B=47gAE_}VAJ%d~UK3ODH7m~#WpnP9&5 zS!5~aX(okfM7UtUuIH#%=~1#v@MgcLomRR5D-@4?DFqyD#Ncb7_=~!>~;Gg8_JxMwP zkDpLtGVoY;h4kL)nc5&h?;X`(7r~(SSes$;Y*%(R9u(ol#kmIO+MS#CoF=#sHvBEk zDUzX~2%l`o8T9UE7xv^$^geC5OD(9v^{!ByxqK<$h`j!yzCgLyM7=UA55j-I! zHELX?$u_F9wc5q766{Kw7VnqUC1uXK}dB zi7<0x+>P-{)^X&rAB5vAg+m)T^K#}23yOrb29@B^sZ^S4h0LPGG3PnrE7mWiQlXQUNzbG*Qj>nBi z@0(pnFC^$aR}Bsl40`WUJ|5~K9Kh+Evchd}uFtt1=S*;+B*DyaWIWBJFxLnd^gif% z?^Jq4?;U=TPAYf3D-<_>VJYA+_23@wvNA>{;(xm#07s7^ctTnkjnmf|aCoj_yCOM~ z!AkVack!2p3&7Fp33hG466l;3MPfdXk2r8B7{7gX0dUlI_Z#kB2pqPpXcTG7Q31!j z|LMSCTaYp#M6_O29=XPWV_y7X;Fu%YfI|VAIc211x${NiaE??YQ#m3G1inwLIou46 z!_D~3Wq*c-`|Vf2@l!Yfhv;J9FwyvAN*LR>narYbAgnk{&?0Y)-)aR-z_GZC-(2=5 zR*-(Zn1#Uc1k5r89LGtgyquU=CwNE06&hdp1sU*0rC?H!V8FfAV2)rg;11>EE1(E3 z+0H2|T*kT0&UHCwg82$)k)=*gGbzj~!UY4K_k?y4j_EV5)aGQGR=NQz6ue7VlYq3W(oA?CeOA3@=*s4 z1>+a|WC3t^g_7=mdRzgH*<)@|vG#b7N7|}uYy3lN_T$?mP4SoV3*Gs(#4ptLqun}& zr{!q*QT^TbWzM~Bqiy~=ink<=n6`1=nD5=nZh7nH$TeoXlxRt7o>ne5Zu{z4zbS_iS zW?}43Oz|1*o+t0q!t+jGb3$r!z&&f4PYLzY#>C*LJde%ARh6YJw(U(5tG*_iFSPyf z*4Y*X81vTiN51)M_S~A2r{4bgBY%zJlIPY_8D23!aUmKT^H zQTvEW`y+o~H_xYcV!*CxzOXFtNB-?aKCo?96|4TpkA9I4Y&#V_n%w$!U?Oy$nFQUW*ARcz9^lom$|2O=R|M%i0 zU}6b>z9u#I4N!c8jQL+g+H;!mW2BW7|f_#+=u`v0i= z67X1x>iY-`1SGzoJP3;#_Mj|55hH650t50iicbO}2HAoLggvr`Wnd;lLqGf zh!Dk*0D@tA380UFEMX6_*pJ5&ktGVk|D1EHXSzEROhW#TU-EtFTeqtER`;!YPj^+_ zt|4$tAs%_@Crbdw2m}VN6-}Qn8IOFzjRKBtQ&|s)1CCB9=R@L=_eF~VaNK(-^{%jC z%tYW!r}wsEGL59uyCR7{-gxA@FP;cE6!$wW9(j|S9B|abeDJO@rs%?ihpAft#|*_I zUt+*93fcZTkH&x_8jrm4<8j~^(iIirk$-l+0mm@2i}A>pZeqaUGkZL6FfdcVp$N^% z#Up1hN3cZVk*n3vRN|2r!Yo6;@xdbkj&|OAHX4syju*696_331MIqqm7jP&Z`RQH) z#}wj`?|ZZaaP)7(Ued~-QwJPAa}XU$QZgR7=CLAhbaqkieI}$I z!~w@pF*$;y1CBK7eZ29=+1y0HQ92&^t=~J~h{hv-7gM)Tl0_|lCBR~0Y95@tq{9*CPEnhIqU=*y2SY}|RaDoZIVU@^-$0P5H54)F0Jn|U!%*8?= zE(r^PIR5W=TXUfd%oKhoLUVHQ$ge+7w_XDA$Y-jdsl+314(klz z#{pC=zK!I)XQT1Rhk3N)CYH>Oc;tgSLimvsekdM!hbxF5Q;0{dy{`m*)Q9k6f_UT} z%pLP4q6QG=_Bdzqm%VM-gxAHrYFLW((%aOzsli9 zG#>dDES~~oXDA-|mxdpTM{c|)h9A**yWP(1Pq z-2{#)#3R3RPYK|dL_G50m^}t?G%=!fYVpYP7ZicxwzH^rg$*N+4ze6@Fv!>?|8K=3 z_nk2jaFmWmUi)$f9MO2>Q#si-WAVt{1{^(zT=ZAHBL*DNc;xcCmLejl))Jyco8jpNR`$WJ| zIv#n^FC1`0a7@yNe2;7~mBGk=N!M>HP!fj`HAW5nVeeGmf2 zfj>3iAdmi4DS%^-xdt3#%pMOM49pa8C_-~`@yI(qM&MWi@yJg;%7&&AkDP&7hJfQ1 z>a=t`@?GsT;AU!NcEls!eo_cHLh;C57ZEt75RaU~52@g1=qoX71)4Hw8JkQ_A|Cm_ zm`;XaDeQP^@yO4k#bBuNjZ>(1g$>V+c;uZrZ9X z#y1vTG}s5@<3q3bi2+9}J~X$y0mlr+hhC1Yf0xL9wO><1Q;84#2h1`A997h5>G;sK zj-~<6qWI7?j|c%rC_eP<4g$v%;zOVBEdd;ph!6cfW|09L(})k<{&z*-xaLUeeHO)s zUUB$Dz)?Cr^i!S#j%a-7p`3J^vG~wy3^)`Yy7YB1;E2YDzIlBdIAZakN3|Gm#NtEu zP8e{^V0`Go*!p*g#D|utp{c}&UJtVj0mrky5pa}>5A_eH0XH&obaw1l`}|Krz!8cM zz3of_#}wj2uf47Wa7-dTbnTRYV+;X!P}x-CL(6|#1di6jsP{e-G8^JU55aG$@lieQ zhcs+EUxb*@hOix}$bkPy+5ty2K6GKJfD<3n$~HVz#BGd{HD z6NVWdF+OyA?DV@t;zNh;U_(=h4?PoB7{ZC0sKV0mq5X%@UT0B!=&dawoCw8-=1wC{ zOd&q>w4M?;F^Txl|6tM>{xFUB&=Is4j7*Y0rru{!eCQ4bO@tGr<3oRYhQoUvnW1vrTr#CjMDL;C$u}nh{lILal8;?hT=o7 zGsIAQXzMRyh!Kqs-S_f1VoWJM^v*E@jv0&(ec)!g^%95=Jx~ozB|dazSZ4@78mQXR z@uA<`k9ItZ;zM`A79Vgzn+pxahpuxx@nZ_{p_Sbw@M9A3p=rz>13#t_A9@&C4DjR8 zeW~|Z6d(HFJ`>?b>G;sCPIUMYjSu}fC);K$KJ>SSABqpHy(ESo(fH7{E{o$wEIzbn z4}0T?#fN6zG~k%Q_|OaU1db&TAG)y`no4}=lQ7E=aI8q3mW~gdi#M-X6(3r;cL+E_ z@u4ptL*SS~eCT7BlmL!N#D{(hv&R6AX~c(q<{Ne}H`z(qN?b>T1;3yp*x>TD3 zj%a-7zMO2EvG~yI4LEubH0Hl^VGKB;@uB|3ao|t{XmP*V<90XTh{cCCVmX~d6^jqW z7CrhatiDbsKJ*8_BXBH%_|P|d+0aztLobI}hJfR5)M@GcYM01UIvG~wcUoqgY_|S2{F`f9( zb$?5LUIOu)Dj%mb)-h~ze;P~Qv>U|c)hpzvfiGZVYd}!z44mhImp|2k-;OJ&R za^@rNSKDjAq4?0$IWgdf#)lqzUI94b@uB-3GOhT~Oje>BukeCV2I zMo}XcA6k(qylC(?#>a=A@pS`^SbXUG5d#j34;>d+KArtTPwOUdEP?$)S5re%i4Prs zS%%&q#!>=~8t&wnO^IM>7F;&*iCt;HvnW3Fy`4h95sD9ew3)y$h4|3B&MW~OlZX%9 z3bV*?kZHt+u60%sI5J7; zoCto3XO~L}91kF~Lr1L0V($n1f+&vsDV|3``BOZk<9~`rqOo0?HKb-UIdOOau!cm? z(8wihXe#lc=fEsO!0~75G-Dfw#`X^#Y@h+pqWI9ez8(UOP<-ew_9k#lAwIO@v=YEE ziTKc^zAxaIMtrD`7K0&4s# zbUaS5aR5@8NUn|~lM{#M{g?nr1US)m5gVFHeCUC&!VpeeL=~2f5AEKb_BxB=LoeAj zgcG6o&|{j26H|x}{n5!KaAFeip-*7a7%v#ph!5>Yivdp5)Kl-XC_Z$ZZ6?Br(($3* zUJfUs@u9DLS2*F*!tt}+@5sIsXS~tkeh7(Nsr~NdB z6Vdq4qfU(DL_6ga_Yd9jEB1nsW_EG^&|CjzV9|waZo%;xS8Y1+p|Agpj=TioL(f!0 zQ;84V9QGJOj0335(($2(Z9~f~qn2jJ{-FnN8A6OueCQ6}C1Ok=KD74u5{NO0_|P8A z2g9PK5g&RES_}~5?X9TySri}o&$@{aLvfh+&13VldXWMD``>ejkz@uQjc=1AZowok z-Yl%vN8Ug57DEihhc+G)Lkzp1;LT$Dwm4!;DL(YH2Mjo7Fh2B#bBP~IAU<>_H8hp@ z&^KY7A^cd6sx2KKy2;mQ$FnFtbi*w|_z{W^UAmF@F@^Zh(PK*B$0XuITQGYJ{Fp|3 z=r@lo;>RDqO1;mb_|V^NJ`sMDjt^bqI}Sgh@uA0avTerVLvJ`?D#L zOp4)i*~D9$(|~(fGLY&6aof=i7L&tBaz_&WS|ID;*8)i}9cUb@g6lG_-?&cWBsiO= zVEjCG+R7vaKlujELhp5~jzAF- z{CJUZWyaMQH)b^@IGd+n=zWx#8BbEM0U0u#-nCmU7Cu;B(EG4z=PL_(XUcD@od`J8 zUHIu^yMR%V0srsw9B_;=!}EI8Mq+zTw#`_4=${NYdLY|>>?bkcunP)aJO&Ss14mj{ zpjnrxB_|QMq(tyjUtl6=D=uI1kfFl$idfv_ijw!^4o_uHt;Fv^w=-Ze*hG9)3 zKJ+QH7>rnU+?0BsMe(8AZ8Q;Zl#UO*W)}w>jpm=_|0I4S$~pTsWAUN48E_~*^s<&1 za75!n&pjj#9I^P&_181th{cCKcBcV{#fOdqj_JgQE^|8lc?raaUUC{6no4}=E-=dw za2!vamW~fSeIpw1EQ$|3dBYHJgyKV+b|7#}AwIO>;1a+wiTKdlFrCcDJ|i5bwtwia z(P97`pZp^AK8xZ*m#vuyI7-Kdwl+B6h{lILu$_QohT=nSH{eiw=mGo3fFl|o`n`h+ zz!8rR-G2LN#fL81@*~HGuJvc3Qp4z+J^238;Bz5&;@^}%|6~BcOvZ$6FM*Sb34QAe z5lmU1>W;*O*45CYn}Dr+69;iG(XEAKL%Vx}hAr`(xs3!7P{y$yxO(GSjKc&QYf5T1 zPpNo=#>+2jO3Fa05uC}LH;UY97JA2YqF$9%Pa>?##w<+vTdyZe9v2h3%63GM$;N~( zdq4^J2*-q;yn+4rE21AUm#mAbI29AixWsA1gdT+E0_=ETeJXlZ#Dos5GXZKuV?uX; z2gYMUujF*w%*2G=WiX+b&~2NeFcFRk{nCEGh!2Yi{neWGauJIO-Ro9+xnN8v2QR;O z)oQ^jG=m9@x++C-3LVYl#Nnl#nc18ORzj~oo)7ya5DeO&hNcn>`Y+gB=&fR1YO-`N z=*H{PLT6DhXw6!(({Y=HF0~agfpMW3uaZ8D4adRYw#&h7){joLaK&I?`+9Q;SO^D$ z9<+}8O=vqW)xZ+4F%hIL!;N_pw`;)wA-!$0r6-oWA`hJUVo z7~OXXgn!xqe_~${e!Vpe$QH7<$KYz6kN=hQl!h=zZ@%6YOG+a7elaH1RWV*cshis6J^P=FIheBvhU{PQd|G?nnrufQHdh;bm5Svvgl@Xye4%c#8B z5&rpOOidKtEJER*JAQ$PF@^BY%^FJ}MhgZv)D-4D7G3jchZq(|nCg35h;a?3e&HF@ z2>(16Ee443&Pvq#EDHa8<5LqMhSW1I{B!S(9AZSnKX2u{+Kh#N4jN)8{PWx2h#^Ka z{PXMIj3dUB!aw)B%7BC6pTw6Zmo43B-MVQw>ce?(;pEWe7MnrcO)8 zeQq&_20V-6J~vx21RP0CVldd#|K$1vjw!@_j(wv9aD?MNTR-K1!vY9Xm9QBMNm?;c z4B(hX+~@apD+0&u71aAIiu=5Ig^7Se>dAVhC9jKG$_)7H)HvXX#(kc~>9rY)`@GkH zLvf!~JI8>-E+}}_Sbog}_bj2jf%w z5;2xQz~`E3Xet4p_rV@Ri1F@DLW~iH-o*kwm%+Q%tP1%2V7U-tgaSSvUyFz_g@Dfm zJC{I=aKPubD>%fk$iY;LA{Q&RtrlW5k(*k;=eo%vVw}A^^{%+g+3|z%XDvGsVn{vX z0zUt_jzf%Sz-J?;*Jdo>^FBii1$@5r^%!DA13n*Xh$BWU;Pb!_8q2uzXDs0JgI^e8 zFyNDjah$6*ok-8!e?Y`o0+F6C@6Cp$vJ+?*>@kEG_fnaqBRwC&OBR;+W>2K&UzZLc zMkvzr>dz7}rV#0Q!44%5BOK|u;<64gEMzd%uUN&36|owRcZ_L7dcJ`cgTcvO3F>_o zMS9L(Y9hoa9qIY!&pX73MtXjZ6KyjV>3P2)h9W)xux$)6qLH3gZXZXCSfuCH?;2vn zB0c|lu^|Q{J&73eT(#+hc&@c49eD|ac=k21p{ay;9te93A;v{iX6X>m?xkqCvna&# zk`LZ5PG^KdJdat8h%to_&mV190x>2L;`s!ojDZ-_2=VMkiveQPe1dwPMIoN+yf3|% z*qN(zh^M!PLyTyM=PPrC7&8>&`4>YBg?OH}WehQ*A)ZHVQ$UPGM?9*RZBANo0JYDm z#Sl;ZKKu(Gd~m>STdlcXEyN$U`YyL5v1G=-U2Zj6R^~6iQYgNYD{9LpPrbVyi67j> zF7|i)jew?M6lve)P#Z>)eM>n3ZqxET8%Cm$okK})KH?PT4og&A*MOmhpky~{Il}-whAuXAWfS|n-$(>u{L?^+ftfC{ zv#pS9Nb|1oO&BV%;qiDGhfFOGM+@>7azfyP=$3W*wZ_v3t^p# z@I-VcZpgwqneq>KSJrD`ot4PJetyi~ZZ1)S$&6Q}OG>d6U|9){AzbqyG#J@#x|JX! zsE8Un;%&?7mw_z$+t&7y(SVZ_1eWwFuEm5gE*!s>Lj^I`bA4&U^DVYd1(}?o#uCxGv))IGd+n z=&;kuBxOLcq)ykcB(I%?rt3DVKK4?eYo`2v|9b+YfL5|p=e%xu-A~|k3hV4aoLr-X zCKhrwEju6OxmM<6jljIf!Ms4+))>mc62Gdc04i^?YDtg>4H}sA585IM4dFih{?~vD zh+T4;_Mg1k-Vo|>B7Aov$JSDE+ELgJql1$M4&Jo5$$T><(Vkas4XN3Tixo|kSwkXd z=x8;xsv6=koq9_R@o3E~z8H?b4z%VRf9?M^h8=%*>JUF%!iYr7Q;^`pRFG_9@Bh#? zdzpm~Q$d_<4i=M)XEYniwX+^ROeKLe8po>Ox{T{LuG2UP#)qlO%%`nPQt)9aIFsv1 z8Tc@j<@i9-YPTBkahHY$O!<4f6MBajK~Bbdius!X)U!$!(14}5(EtrRlN$iS=e}A3 z5Qgm(0m7Yi1_;s=b=T@RD(FZ*A|oYNIJdyh$e*I>sTGHFC_Rd)wnX_YK$ARni7l;QMiPgPR^`k~LN^?*ENK*6NH?U$lJ5$opmR!$&oz$pr4KT_o2{lF5n7q}s@3b0Toz-|a?M zJr|iBIwD95O2r<1I1(!sf)Xo8$76*=dtQq*q-HZYaX?pVNCXWf)lhin(7&o79<7-; zR=f>M480_5Ks9Dk^%83&lS+ciCTicN%~rBxAXNq8Y__JDtV7alD>w2kHQ?2qm@HrgOT$=Uas#Y*<4Yy5qSsClR$REb!wNeuHK?nr_%UXI zaT9%Z6a63#D|(oNZ5v6j#iEt>2Iatt#xEDKqVG-Wz0E4MgE+l+7L(mbI=v@ZFY9%Y zWV{yRSQT8eacSe4jFaGOo`RvtMk|w)fmACvr*|_uub$-vz1P`EJy3<|ohkpue@=uI zQcu=1EqRUVyaE5Sa~xJQF$14dsEx#loIA_rtX8g;nOP&5R5iJQR1Jv33gy5&RZRux z&nl}{4)Qm{3MTzeZxX|bXm>BYSrjYQ={Bq=!@0nUhc7dhQK8AcWvCzg6|jQY0alC! zL7YtB&a|hdm!lx`yEp_lu`HVtfeWXSbk*09*`Z@Pbv2aQp(C;4DsaRK((za!(VjP` z_Ht?#dzFy`z*<8hXlP9}^q3mrF`c?n4e@Br#IfQ&SYik(-rZPO(JisILns2Wz-1H5 zyg{37WywIQ4aC_jBj8-J3rQ*tgNu6B!{QhTtkgJG1=nO;yK#-iNpLn#!LZq+l}QR- zG{Ko%&-CoovE0k|SnXOPUARlLS*H9CUJGGGCvr00+01{uoLIqR0V`M<#tM@gV8wz> zN?=9WP7zl8xYl8XotLW7)m3b}oUo#b9F{IX99EPw2d|wZcty1G%Ag!rvF@fttT=m= zdLQPNj033=5U1?XVzLaUI=%O>Ue;6KXvP~fj#Z)ee&c-O6c&n6i8AvP488YSnWPM) zhQK+!kLg;yZk8AH-eo7XLlvfXru?&Bod_$Wo~-Rgi&|AF3MT!RHjH6~t}7FC_hTDH zv0~>-4IG+rF0i8K=f*Ztc;B+r5B>^R!R!Dlnsf%nAWY!S>P2!Cgnk!?l>>4JZ&&6* zf6pE1s^0?Fp(8@Hpwtc>i4`Y1pdWy}1l^SQEdtRS$7Cz_o8YjWoJO#sM6)%dh3pu=Nf|y)S%D^y&1zw(4hT5HW zQY-G#Y?dkiZ!d?iq6Ik_Z-3_hb{S#?lLf3`X&5U^ZeTn=|3V3@Xtq;?729s)u)@wu zrFC@`pT_b!T(phcK&lVWgt}x>FE&MRYiLGNRX(aYqU zpbFDFQ~viCO@tLvPu4Rnd6nwC0so$59adB^!}Ep|HknwL(_-12)yj=B6C)C}m>MA& zNckWRE0hECR5cZ#KZmW_Ajl(z6-@fKtQW(IXm|gnCW;k@bQw7G<6L0Hi5D8%OW}Rx z)DQj&Si$T7EBbT>u!0HPS+_`zg3#~cGWuC~+*y}07y295(^YQ(*P&xNwFi{ip(C;4 zd*Fx_q~ozdqHV`fIH8)&ml52h*(_83)h~sxq8>RJZ)@hCT1Kp3 zvVavV4P%AL4Y1;{^-Ewyot+}A_;iiK3Og_5>*^|A!W=JdcbFVr2|yfH3^E6=og{cg zwDO^#99Z!ev>0H;=05e_WtF-?oZfqj$$liA-WBSZ_4-&Hdpwb3Jyr$RZd{LXZN^D( zHc!D&VXKu%%0Q|UoYQ-s>AjidUZD3TJE<0`FugP7Z~EdySRwUfJ=2ocDv<;J#Y;J? zXk&)w)vApI=Wd}StCeeHCPpM`F;!18kV=9$tWXZjQ`J;}{;acVH6V`~Rxs(GvsMf% zqTPMUx>2k+_W}clYMcwKXguH8N(%2|XYkKq#Xc!!Gw7m9wSf~%;I7IckcmlC9Mh?d)ew)?OdKb6g%yTy;smM?!y1V-f^|7?*~A$y(q0wZHjrYp zowL`TVzLiODh-#}j3h0T1Qu!>tAcAYuG_d)<0Lqnr(oD?iS~}IKgBACs-QB36mS(#7=9Mz==vbML6;D zIu0l7yi`(GS8+RLf^oZbid!_H0W^FQ;ZPX)e*JdTU4oIB~QZ+CvTTm`)|s5RcYO z94FR>6^3wPcd8IW8i_TMN!5VE`p0v$SM8=akYY%kv)6Kzx?~lS&R+W!>FHHc5G>R< zRs}a~T$yo0#z}BCuUNfIevp|Mvyk8&6U5nTyPed>0x!=igLU_+c7E)|z+Rd1_jo3R z6Qjt!vO{Ck_wqpd2`HB3cY^;)Q3a_a@f0U{9y)R^+&3JCaWCHLQnig-EcM zhHP8xwK3@4cKpT&>$@Z!h+ zx|!62scq}SS`n;&{Kw%$9Wy*{RNL$&dN_lISxnW+RkA6JMATxcj0AJtAPyM}p$ zSrwo^wf88@2bsf$6HNNst`@_IXm@YAW)vr$J==g`1n2U;{P#1KG04U+un_V3K@e<} zVlIJ#Je00dY}@&@W9_6NW{-y#X7j9JP%W7-0cG@vYoCITtt;~F-l}QSQ*x;O*k61w&iI;B`mmgygC7z+UOEYt({ISPF@G^*; zjCVKlANm*Jg~&8`o=GyKxen%~LQ`*k)ytf|pHjPVd8}_ZF5H^xkYI^+6S;cc%RI;fdfyYR!74 zU9U|d2mF`ca`4iwPW9^4Mq(FEx?%oDwQ^0&!~zfFXfH@3<))cMhsx0D~h?1S$rK;7H{7BPfxBbUboM zGzKsf=H=8Z1~3wxQlKhq&^7erCKUb-I1FHLOsDc{h(~KCjvN`-We7QLp;9q`p}edS z3}C=z6L$^Mf;(9Pn*wnb+*3^UA?Yl*ne{M$A;AE~I93JMW?Z*%t;R_(1~AIZw^*5^ zU;qQoS+MEZYhpQGq^)+NksjQoSuj)n?T>_zqZ>IH?^5P>y-ws{vVa^c4I_ui4Ui)> zw*+!@*(pMf4Oa~YFuIUbQdd{;UrZz8cI(IiY(atn40AAmA;AE~%4>siAjk7)F?ccg z#$(j`7{d!OfI%gv_sU|j8cC;j1%YA!gB&#N^Q^4Ls^CV9D>rV~I0?o8Mw$5`W?}$C zf&mPO)4Q3S*Uy52-uqNL-w9Qi-kI`udUzt_kXkW-u?rXy8Ss1m84O^Ufk&j;NX+3B z90o9|mFs0D1~6(d)lC8%1qlW)R-kjUDnNgBS+z9C6K(*5q<>{)3_0wAg6_WXGg0Jt z=?wGzcAP8EZ>Cs8Kah+^4rOD_kfnGb={eNSZY4i{UWC~i?|@2p8|xv4O~iiIK9duN zs0U^uLY@S$^6D4p)jtH+p(Elspnt@3;7C|G2b8cvIv!SdJ7}m*B&TLGIdS#{HX5pR z4V|Hec2+|?rc<68;?bIk!^)Rnv>{m8j~d5PIOP@gwW|V`P5k6xnzweL!qXL>ggWyc zD<;cP(V2HIa$(SA6oetLajZ(CHEz^6ZhM285}eIbFdmG3RwgNUR)cfqEoC6Mk>y^V zSBBc%c2Ya;(#)GF|DXp$u+oN{jCVBiw_i+HVX^=#EDgho$qnpmla)%qN~@hBSa~S; z1m4a|b?NFVuELBnZZ}O1;~5YKD{ail=2Vc$iNjhI=xr19;PTsfM~|CD!5wXnvAP4PJ**}3Wg@DtxQsYgy5Xs+pHriSzge4xt-Jk zRhZtH@?XbK0P*6-k9VXVV4lgU78&sOeAU594Konw@G427?;nB{tCcHbQ&}T;<6{+! zxJA-=AP0gYf{>0!5Q)YL425|)HH#G(iB7eXU$-xNPDJL$u^tmS6=2#94B(m~2AQS#lZc zVFiW+gBasj6wM@D=;7qK?a$F6&Mn%z*zZEP!0sywW5e1zh6kbcUh%w5U2OvVzM7er}q}t!ytwP z;AI@Ef@?Rf$GA4*Bp53&%FMS~nWO;pz&X7Sn%Z1NtiXUc1W^vmQ`J;}{;acV zH6TwJf-vc?SRO+VyP%-E|GPpILAE)`e7_p!3PH|3(K0G2-b5tsJcT(BFMJj zh#;in5k#V~v8^?vW-~c)Sl_mWM9@%~8v2JC;xV1tMh)?3&BPJpde~Aei~U9u8Mr}sYALr4W%0C*Y4s^Er<8zaG+pm7qM%~LS+-fv}+ z0?-5J^loP7^|HL6_Z~Z`3aT)@GvyzG9|bCnAW{$D%`T^3WWayq1&1Jm%s^ze+DL59 z>AGyrYUR3_iD^c)nCc|K02{<1h;m?_s-^<;XWFW@fjn&p!lZxS(lG?F3ktgX)@7pz z@{OOG@3-Pyy*o5fELK}c#t&_jjnzYz0y$1{Lz@;K%Ci*7L#SD z=q$L0^$^`i0xLC+Rl)Te=Ns2&oCIg{6buXQwK7RTbR#%t!BPf7$XM>>d1a{GWha&6 zF3p0O@~^o&gdAna$$0PK3q}9*XNVk37LbFbVdOBmfhn~vQvx~0a6V2Ea;&_pn-sD0 zQk}ZG3Lg{DxZQSg09z1;9Ied38zTw6*s}7rpd84t5G~UA7MEocTP&d7>#b4}#Ob}M zm~27P>AjNmvR*R@#w*6LD!3Zs8jY(qPJ**}3Wg@DtV~kyh6&E;-OSD_XL&*IWp>gi zRAG8&%HQm+iI79;!5ocx&8rd_@Glv0$WhGW7bgHs3YGEmmV~2z7?0%iC^O?l?-6A=Pg%yayJ0>}dT9moae`_^5?hW8D zYQYh)=}<9Z({Utnyar0-ARUh!5{*#{g?TwOi&2Y2r`kzigW?wYXRD!$z+u#aV>2}!CEms!So7`2dK z)M6Z~f~zvF-ndHRBp9O>W#-GROj0mv0cUc(K`R*JXQz03w%Vim2sJ-~yEF@C%0Ik6 zgdD@j$#@Slf0rkS984CFgQd9bN_+^ZA1*Mt0dj0nRsuPO>=Yr#6HtXcO>{jeUsqRg zJtm-WyTjxFwjjZ%g*h0tkYLneAkm@>_^h+y@mDg zSSP`##W+?4*KS;oac#y)Fh(uP%(q&Zq+rwn&gs41^xn+!g5I0#q(P{{^v;z3&g~N+ zht!Hui^*yg8SwXgDj2me1CL0xk?4O^$YHf|jm*TTMJ=Z4Nib>w2}UhepmVb-K!4U* zwHlCT-KYgg|9kJokR#gNJHP+j2a68XH?fP>yMxW@`M|Gszcjo{S!d{v-^=@0Y>s>{ zU$r827WrQO@dtM)yK8_)QHlK84#->|ok#e6i$K=AdvK6Gzl zmUj%c1;{t5Ql4>7W_nEdC;myM=RR~t4nA~e{`VfG%QG4Lq>}BjhbJ=R=tFl14g7tl z_n!M;M;H;C$f^cEbjQgsDaK7Ls&Wgj*rWhPri-c=>zA|Fki!52gk}J9u9BFX3NXO1 z^6H=*&VDtT3!Htc7RhI!D;JZ$4I z;GYhc(TDEC&;=$8AvEzKr^>S2<{{V39E>H@L<*5tyzwrOU@Tz;Ix(vPs61`e+CW}# zV+kbvli!K@H7_FQ({F->E#p@~8;av-^dy5(Qt`LAq@99Rl>T>3aS?jRpu z6j@0h;B&^J6~%Bc@ev<;2O7f)Cyw;cw?XNlq=AQidGVL!p*oi`C@Ui4Ey>`~BrLu? z`pNp?u$|DOyqns9dGd<0MquvXvWaVMrInSl1RpblIMb>wCTo$TLSSXX{L&cFIjoKk zPmN<$aQX@vGug)J17_GGxon<-;i)6~P}zPQ2J3;yG`Svc5F&v)1S_LsVgUd##-`1XY;cnesQf zX#yX&%@?x4wgX9t9PlrE*geV{nSs3-)JEbhPHbTrP_=S3%*1F{ErvhfcP?LL1v)pI zsy42Y1m*+sqPaYie)eBcmydP#iEkGkx0bMqo1>jOhTh7fTyo^lzIAC zvBoHp^loO+Gs#Ch^8x4zU!vnk?_LN>?BOOA?d8Fne`C&K!R69<5(43n{nO7wHhbE zhj62D15NwJu`0L`vvkD+nAmalmhE8$9w*t4iVGTO4jK-i~Ys0&R9iidl3|@(~xm8VbV)o^c16%|<{(#FS{2OU%RV=|| zHHb5{+G4UENoQ(4zw^c3C#;UWPe`zZ)OGtFKQ#PIcAOF)K)83$4sE2 zTC|Vvfr{Xqi`Q6z&dsU-{aMXSm=DN5%*C1X?^_&m@o0D7`dZw@N9{w@F_K&GKCi#R zYrC@XTFO#*`fi7qre{oIMVA+2Bp`Nj`Mn+OBs|E zk#Uk_@Msd^Uf&0s3VHn^Dg=v(yo0O}+l?Tbc;g0IUpGqtsUXh!`ijXxB%SrOvK~Tm zNf4529IJv$8`o=GyKxeXkX&Wv+pJ7d@EQTmS)X(X17^9GAGX@fMp|)~W_?WguU;4O z`WEEiD{tlxETGpjS@3$6hP~e821x&hS4wz&vz;QZKl78$>+L+Z0YJrmzmwM|d3A`} z1#wauMw06h4Ea(MlxUoCq5@z+!D<*W+>261|?E+%V{bb22iqiEX_0K+BY zSQUC7HLl7y-#7`za7mf@5oTgAPlDHof?SUVhJqm$6!bo*+W97^!t~CRe+;%?t`l_QZ1%>NdS}}&g+!}^Henz zpg()8S{I0KUa#cC|A={gw7c(lIqvoCl;c&rfVoiUKpfor(1XmqJ5kE#{cR}bD}CDd z6!YnmguX!$IP*z07eAMnp@n{m_emw%K3HkL(zWllwV&K;z zm{|vxO{{($?W>k0m{|vL_LVFqn~-$&RmOS%ZW7F_8^@~Ps*I~QuF^OO#>~1h^W|11 zDVSLY=lr_U3dZ#DZob88kCMX|*|Y;MXh-`?bjp z{Q4=sgkRU$De~*9cHdToL>(z2Q%xs?3_3(JO<_P>n#@* z{rd82srN3{9Y}S9IKB54ll)BG>0KWeV`iPzfuJN9HW}A$T#s>W#z`<{)|HuWwK7S; z%sM!y_q6G~ndO*SH@!F6NwrXg>76P67ub%mv|sBq%&eQNR*?aJxqF;nw=n}V>uMu$ zAm(eKB&(HcWF}_T)ncli1T*U(&aagN^Henzpg-%ZS`Ek|^J^yk_nwdWwOvrq-LJkB z_v>=X!O|T`d=hS-#9Nqkp+Bn_Z?3Ebw?B42bNg!W?)|+ANj}M$MQF3s|o^4GaCvmmxN|FS3d-T}$rptszxH97;IGd+nfaaK13_MA}Zhy#hdZ&Rw zpwIGx-bYkBUk+86-kI`$gH07nd;F+1DT3DwH96qVy~BBY8QZ|>w%SM>jR{{U$!g_> znF)|oi~8ChD&=?A&g1R#=#0kfQT)JDO+5iAo-wBRh&0OLDd7P9MS>WHk@B8q?8^B>%9Y^QMM=ynW z@mBOK6_@np?txBE-i*+6{rPELF=k;Y1fR}HR;opuZ9{;4oWvzQN3G!#TXOis76j8r zW&S}}oJDpS`Umo{IB3?}hVn&^phD(Bl#XFlFyp<6qyPA=^bsZtKEhH|Doj$_RRl^~ z@LUNW8MRZ&*h&{#!T0m+yfC1;NTQRISom;_92|iJs4h->5#Sb*-~v>)0-cM=1>@>S z@KOM>*r7U-{`$|v`nXlqgUekNm#g*CMH@WNMzu!9rJrSR{F*-$*Goqj63qR@nJBE64kd4<@A8j>zdMrNJS;HHA4%RG9uqEv)o?v^{xA{^ zSZ^wBEB>n=$l|aTs%hW}*H$mWhkyvCz>yD*3qkqdAPpWIAGWrd)7d=QxmsI&uDG^( z>lL(31Rm+nf8}Y~WlNs+s=D*fQQ)klcRh~`h>q>;UL5|j0Av7?YXP%LrbFCCs!x~s;wGS`#N$aBb z*0N^-_HGAivzk}Y`D;3*$5l|6Y88lk5R@?oUxJh1yGAQ756bZ%*zVclgW&3Js&$A9 z68NkJ#5AgvSCtVw*5(K^(=NpHWDVB{GhiNWy5{wPgl$r0bGD*SQ6F8@9 zAJV#5Xu9sS>Mc;8>6$6O2S4*u@)5ut?X{%dM`v3D&Zc$Nen3KtgeFenq*s=^-@850 zjX=pP$EP+R4iA)r0SODxX(Yf%tJVxMYIwk;zseI)Jm5tHeY(Qa0E1(pbzZWb<8>4g zcUD`cf#sr*$WDr@taq%=!8<2&@l}@!7y7U5X%C4e@b0~@Q72StF_-UbRyJx}zi|?bZ^xABwhZ?q1xAic zlj|0>y&hJ>H%tvRwSwNu?WB6>!1T_Pf8)gyIKA6KKUi_EmPqXXdy{+bt6>Jd9n%U;;zZ7W zW!>)kxiU6|Z^zW4RxzQ{G1PPzU`t1~M2c_6wCZEaqc9(E|1=C>(*N|MQ4EN6_tKBY z-}`!T7MvE>);4Q*;-7tBS|$uZ#Arkom@!pLTMbUf~z;K#ke}-Bp5rn zC^KJcWs-s^QE(>L8?u6G5-;B=F4#)E7I$gZ$&^3$q7W+7AO~M_F#q*lq5_izRA6Zs z6-;h`3Qs*+0u`$56rsX@V48Z0*m<^fI_7^a5h|4NB5iAPhYF)ywt$K2>T}{?;>c7v zP+`l*il}gT7xmuHQ}9>@ae5yvCVeEG-aAc#f+|e!O!>daO@sAD z137z!=w#K(wJ{Up2DO-KA+cS{9V#dX=BaAh&K&*OY}Fb;-Y`^P(tq#47%D`&`_+fz zs8B;WH{*3df9_4*)+W7N9Sg@JgtGDN1ltBeNCaLFSs74A0))8p+lCNH^6_nTR!Y_D z7?RFXyIBvft0Z_`HI7xm^%*x}T(5BwjMr6V zx=p@q+0vFuoux{bcw=QX>@&;j#Qwf^QaSF@ER`w$U)Wp`?|%nsEL?^he6@jbpa0kE zh!9K`5Q3#)gfO`QLfrCD34|EK`8Y)gF+A5Hgq@d4>*^{FzDNksMh-8!APyl~m;-Ys z!T!Eh-WrqxA*%jXM2PkasP{UnR1f0x-dIdFBkA;B&U)Bqh7{{vMs*Ot;S7n?8 zWAh751!5oIhd=zUCUH~CSh!t~CRf5LeaA%xU}*gTU}DKg-{c)df2 zDrR7RUo8M7cI0du#!{-48)YW;_f?D95*;e#QjtRlTObOSEVYJYOO~iMh-&{bgkaKt z;;%7;h<5k=Lve)Y!CCg+(2G>kn>%tfdp1Xo?$2`ALN^KGNX0Gm@0w@s-w)mm75b3m zO98X!uH+-``Z^SdZ!&PC%fALnmnR+P@;sL^BtAS;cvUiZGzoE+zaIt_a{2eD4FnWG z97kOwctrroCKBh<^ctCkAN&Gwrq@zTwjt?EubTC+#SsZ!1B_!;aCOEt8&_+b1ZVRU z3@5I!GD*QS5jbah{Z>##;^oug3M-YkOEbL@r2MjTLoPpz9DHuU{3m+o@=O+7o~5|a z!cf8F1};Cau!PGG*(q}Q7gusFZ|B*{tXFaD&*buBV-RjDr_SYl=3w@d1RD`q`6x*6 zQn20wMVI$FsrNps)DPnHK2%JOAnEj;W<5;Jli)SLI93JMZQP)7UB*c;rskFDHb?g) z1#_#&bb9YIy|=SkLGNvL(jZh}dS}W{dlR|5)RVQveis3NiGnw-buQnfPPK(ZFY)aw z5ocP`(oOG!17WL1FvY$6Bq0eRD0o=N{7_r_d4+TFu{iMxCa z<&2v#sAaA<_i@etdk;JK7RSrHlcNCuB4A&vn9u&@vYj8Q#!>_ZG6`y_bmgJct*I7g3t zPUYjV4-!1~i^(x0oh^2=9v=H7ccd@{Ei&c5*Ac>iUgTuF>zM!O6~q803mCvs+-Ly&-f3VESjO^#-famd z-wjom-kI{xz|NB;=Lls;xH!|US1FML{%cnSk9}s~vCrirFEJ03%}|on%GnB&5lmXK z3Lg6)!DF8}cq=6-tZxomwLy@#++!a}|M`1j7!d95hX-RAkoXVheXz|X#d*125ce2o z5yp~$^><1t5*7l>#QpvOSXIdH%NE$PA7c3IC&9BHB%4^iL(hI@;n@!oJo}5uHYA<> zRkI$R{Umty8`ol7opH^^)f(3*lBZxk`>jk;0N&u7{qG;%WD8O(pCn|{w^!S7ib_Ir~X`2GD0O89-dog%+qw0!XF*M+3Yb#)cTXXW=} zwt!WJ%;4G296bBAVr9FiBU~C>@a*4kpy>DKrSmkI#tjz9Z)M(e8fg?s0z4nH~I~4#nXob3vTnGYP*}0iO5d@Vr;%LjU3I-SfU!zYa;h z?$?9rQO~0AtNL+JU`L8ay8N-Aba~QoE>Br{)W>BUBN;rJgt*H;1%nE?e8rvisD~In z>PhgZ2gxQ@Ia7~%E+ykp4-!1;i^(x0o#}P69v<~1c+?x`8`o#th;hBf4TrO~;ZY9~JnET)M?DE1^;X^*l;csq#a%_0 zzw8V>>a9{eNbsmHCYzCTdM{@^JnBjCs5h?BxN75)##I?tCz7XNKI*MZQt+q;=k!hk zgTOMD7xZpH0{KR$!t~CRe=&Apo8VDTA$ZiAtV)pqf9YQak9ua{QO`I6FY%*`c5 zr{DsN@GZt*ganUzkl;~o1v(dxdgF$z+91d~?op4VKXzNp<)hubs6XcNwk!J0@j1X= zO84geUGq3OavJS37ms}sJod#c^dH&A+`o^!rybLAr(NKP0LtC``t>W@Va?RorWz;ZcO348~LGaaZnZF?x zy^) z4-h?))@6EiB8l%%&)7(UTqf5t%w=ef;*2JtV!vKQYyb&Z}f4{Q3z=WD0lzyHeSiVAuC@R?6l?F!ejIm03fz zMA&BU*!CD4t%11|K_1pHrrE~@{*f>t{7efn@iQ$rPGAk6JS}1kTmMPcFhU{tw$NrW zhsEWM(aoa9DdjYL=vfC~^aEnYei6;R%o-s(VZ5MVZvF*aCr$9@16!RoJQbF8XK$XON z$hHf$w-(<5x=!RT#OyiNKWN~;eB)IHfYRW z?vGKI4sW~gZXf*lSabz1Sqr(0t^vL?kZ4@Q_ev>c7q?wl^Q#8st*kwMoxcUy#B>(( z{hWN{9e+t|yD$dZ3Hj-U)JExT7rt~nt*o5)g71hx+`A@&I9#$8N%yWftZ0pob=!rF zvFio8%~tV7@N(+5U0Cis`t=mHU3l}4C0u)0Z^O2uN=xZ&7k+($yt|jGz#|95d3U#z z^C8HV~)mbTQe5q|-YCcJLbAN%ApmyO76TWhH%lf^8Q*|1gkY`bu>M}MEGZ5KW;muK{lzw+;+E+5-=A(0Qg)5+^cEC9g=apQR=p$dTQGd;rx8!zj!G!K1w-;!TAYF(X2%u`J7Cv~f~WV% z)3pV|XFYoQ6t-Yk;l>i4-W&4tlS^;GaPx8U^g4F`)V5$~L5p-2?y@*^H1$5lW$W3o z1;hRLnU>O?uCSnSTQGd(T<7V-R8(OLh6^(C^dV+qX`J`}5w>6`Tc)gRH^itxjQ@q} zW1eo|O2P1Ajo-yRy@ibzw_y1D!8QZm%IxA63_EOU?%vMqKD;03kMTeK9GtZwo9@nH zx;y!ZyDy3D7(RbY#N8XIiPGCK?0F>3P9YStV>^cLVh4hR`dztfL+cEqUEe7uXTr2h7ZbH%^?!n$wO!gq@ z9_)(5`FOWucnTX3mv;9?I>NZ^7f<^JBCk~yEFXA z-|E_!yX(3N!}E=P8+Z3n3nCaJxh3q!+C^2_#qAj8ebKyLAx`7Ho&iqudKS~`$w$0? zNo>ck;Smw9--`+lgoodM`I2l_0?|s+g=rG8jg2h5O^( zj^QP29$eb%hj|lNLL@0}$Iy6|^Ln58h3yz_I8|OhqRJn6JBFpq>${*Hzu~Hw*V_dJ z5BV*wiFk8t_*vgO81_^t_(X}UBbP!lI8Y4 zy`}W73~wDGa~Nj8%G7pcxB@K(?!6-37-!Y449gujk$bnutm3;e9C5mH?=}_}c4ZjC zbS^Nkm6`Z{mrDEyyD}_o?#*Z<|G>**?yc)8JkM8#mI2D^>6uiGm-me`RzJC(Ee+oM^B!6AP`)%dg=ISQcq2Zl_?c^FD9x z-L29|?$EF%rnV=sLqmRlx@BR9hL?E7liH!-DQYdUL&GYt4F4XiDI=TV6k1hf0(=`T zy|}76hE-m-L&H~(r;kiwhlX{#OZdpBR+P<0O776`8t1qWm_iMH^c@-!4&foqKjYF^ zAGfNFppTFFrR(EGZ~dJ%=|YbN{2%=^x9uKg04z71vigQLOzL znBe{lNw2}j%V90%K(PrpzHwjRuMFc!H@wr)@J@JLeQo$Q{XXf@fR>PPj>76u^^stw` zmspLrnVmn3O(wcQyCF?G;oI6c(wT;KNWtC=4Qad;wc)|Ig7qAe{(V1>_MA3Nhsu(f zJN?^#0bIO*`bjmTE?yN{NaFh>Vf%4ryA2YgI^S;Jh|XIt zk=JSY)w9j-ZHE#>Bylko(HPpP!Ao4Fp4DP2UyV_Q4>HR9Z(%_d9Z>}(sUw&G--z-> z_Xd4YiA-$DkE4IbvFr;btuI&<^o4CqQFul9!=;h#C|6DEjt=~E3!+(?bcMDRzLz)y z^T2$2VkTk+NwDFxIBgk$%dQ6J;uor{pj_2#p9%Xd5L7Ee<|nPcnDke_IND#a3;iT6 z)ctk@dQA(;_*puv%D7bzCec$WKu^8527BrQWa7u@aGap0azBjp)B;|E+r7fGO)RkY zGbLlgUlIFd057p7r!esv!%V!!fT*XgyxH&(YE(~^nLdY6UhJtc-~jLuM}O60gpbUS z*RZJ2Q$rM9=&2PhiS*Q{YFbZ?l&hykSRXUjB8ew3b&9@W)99&Q63kqSOLdcAY6Zmg zlyb1JqG~F@-E~>DG{}n9Q%w4;7sYyNi1i8=y6?}!J=MxG&uat0OKM`H-R%{ZJi1Gz z=&pIIv%3)MjPBxb>oP@)g?wu94x0UlXFXzK1Yc zRKa(RW&XQZ#>6f9P@{T^3GmG*FZR?3GO;p?qkkxX87s5QP*1U_&{MjMf&!W^j`Y;9 zYFbZif$<%Dszn!SU-o;6T272%qb+7)(vbv{j^a`^BnZC%aXqCR+xCJmYt^c)S|vz@ z^%Rr-f?TYpq8EBoSGcFfxGsxuE{YmI;izo9Y-#a!fq!WgJ8TZ>;&<$E9N%GE?j7l{ zLoQT@ji?dZr~{ueipv|x4T?*Af`$vXBZq)45OvtDSm{Rg5VWZdV}c!s@?wV#A~WON zjidjkBiLa~T8FWy&|$iaLWkXOQKZBARns~wg%DYE*r+be>lR6z!r3+iagjq17YQcT z#ie>lY(?F5m~t?kscKqk$7T0ewJwlPS%)#{&%GelVI!;;^3r zGS{Rl_5MLU(+9PwXP7{>Hk228rWcv`W(h}s?N;^-lh!jVD)fxCAG}}9y)e=|+;WO-+8&HPr@NgX8GxPR{^vucUsb|uX7Hmn zAleD<2Uz_@b{c9^&oBYL6XnI8X-6iu2gA{S;3w=ECaq^!ROlI9Mxkf!JU`MiZK`QK zP#k~B|L#c(DueG666+O+v+A0)LhdWSzGJ$hT52cnmgq``nhf-smk)EuPOzX*Y zqC=^Lyu+ytrB<51}CPh4DT6tyj9 z^k!@nwW@WMMo|xEqg@pnMcs2w80~z%>V4QK>Oj2Og-222JL$XMiF8uxY<1F*1b^rN zYO$OyJb+Rs?SGv*sVwLuCeTU45LoP_G2)yJpdLMloy4(}0UwJBz^BV70N=e{q?1NN z!1rdU0o28qFy%vt_wvyPP*v7RX-M-o?TB?!^g^p~p~bhnR_U@ZfLh#8asc(G3iecS z05!pQ_sYgdcRk7r0gS5&BNL3G_SPJ9coelVeJX#gy32>sJj|UjiO%OPu<0)(Oq>UA7K==nsrwt#Q5#$Sa(TZ1-m*T8}6<# zd##z=C~Dai*=xm7)C9fu`ZpuJR-I9=ji{v$9ZD^r2}g!f>a`Dg)N4aQuQ7pYJ_Htf zZBV_Yq0|xkv)3jyl-j=|(rf*pUOTtcP-=5dPtMp-YIW2F2AJTE-sT>tDW8ss@vICB{?Nl(YAWdhae?7b0Ex-1+c9)ipF-Y~R3|HmF*g zka#&3eUaTA^d1x7Cmd9*yf1riQiH1H&WiM2XQ=l|4yqp8N4+;ggQ_*H_j+-^{-LMG zdQbW)IM+UBhI_ADx~w>YGkC>8)e6h8dp>MXHMUEnXEr=TJ)=Q__o0I-&A*QyRFz+$ zo=FEi!vuPUBby@ZwIkCFs*e95duCFDszXzeo@op9OvypjHq^z84XQqCJyXw~`P-?n zo{0{s?moly%%V4=gR0-{6Irn0_=;yn)~nh85&R3SSMAwU9ACAfSnE|xxb>>xaoY{y zt3Yo)es38+x{Q^b5hk$2gViW~Kef7&xD~CJ*(WQ6)iLs%uyY2y80ef8alC}WuBn#C>FKoz49ciu-O8Wm)P<9?D+Zpxb-w> z8urH_7PlaGBWSS*m11rdD_pQ+RnSV++Sb#}$nh7Q67A`Ep=)~jG>pnpxJOT)`;F@a z8y0w4$HBCG#g$tNLOr*x!$B4iwVo|w*h+$zDRB$^_Mg*pe+aHa#|eP-Ydb~y>BsGI z-)ai+g0-M3ad{&-trK~PegQ>F96skl6@AgW3zmj)F+MuP-ZhZ`UxV_Z`x1@uu8E_6 z>-X7zOj`d5sIi8~{_}Jhg)Y4Q)JPW&o8(cDMOWfGQ9KrFb)mKyxtBP3PxfN)31k_| zFn2|Q-yz|fC$>ffaXqRWJSg-^ssi4IRT~Cb$2yfsf8~>-of^B)1TM7rSnRO|-&{JUi*u3Y=dvS0-(Uqma|4n^4Y8OI5%VB@bxtY9DBA6$iq>KU=&2QJZ9ru{ay zmso~t6>gyjk&h_bfL5>#R)dkf-IK@Q8YAnTbGFzJ^cAG3n!h5q}*uoZB0Kr4863t2&$BF9-lCv&}gm(`s+fV#8- z@~{Gy(h77gf{&S-6`>Wd0jRiDxo(*#z=BU<`{Z=$Y82s@TyY#fPqa~e!~lN4TXQ2H zEZ>^wMiTt&rbw<{B=Kdgc_3VZoGsqe&;Yi^A~UkP(K|8#CcrnNTG0Tykcp)W9R2I( z(*T$>17K0X0IdDMyMA>-!~i-~(+t49%eCmzYC84vc4Grlm2pTF$0KR=-BbWyPWoZ%IX?9LH^=*Bkywjr5L`? z(Uc?ab4}yl=Q7_czRxuV?{iGp@5A`}|M$Pt+vwslf3>C91q~y~EdK8pSsG~{>Cxm? z4gQ=9?r4AR6KQV_ZUYO%IC3kfPl0kPC{hO$$E?42eRd#D-3q@L<4&v4X*}9Vi|@w| z4?P0!b3skdY)fk@?BFnmdW!7euom8DKBgTU%5c@Ts}NK8eclmR=wjQ!VT|_Yy@{j$ z+1+W7OcsB;2n(94x+LR{WGUX|Y3v9UMljz7Mjf6_YE_qldi;-20kW@#k&m zI@8&~;V?88#Em|R7ly*?$|#`E#f|cH$0hlS2B$>x79NAGlJqX*4HGHxI~&Fg88=3P z-`OzE7s*qwdmTYpA34B1h{@&RjNVG{c8@!BKm3yCE1l_@DgU?|r0em&&KcdoVOL;5 zd})FE*=HJUnp@_QCm#bBk2sphf}~L>LkG{C&5o< z8>a^=z9=$o%xYGtN}htz@uSQ{m=}p{^CQSK_zm=KT z<_mlubgzmX-zvN++W07|-?zYx1}^ED+~7%Z+%YA*vL6C*ioEg(jau=FW9KQDCFxbH z&-ZogE@w9}2oijw$($gR#P(naZO)Ln(|-gl29CMSSE=`Q6OsmTdhaSGdysT`Z)81u zqe+6eE8|!dT#Ip?#x)x!!T8B+W#*f#Oj7VR4$kSl#X2j=@`B#$?IgaHnckW5hkrAH zdzyOiji$+J5*hF>|F#S0Zf1rHr|=S=*p055vsxeddAm{Qd3#Z7)LUcSoj$7Y!nNq7 zFYtG~t%$v;b zNqUKQxyHaBNE>MAT?g0bKY@i^*zp){LKwmXDhw{V9;KQq8AVRUdj&`TTf5P9n9R)U zhF(~N%3XSnp{c-Q8jjSv6{<9JVXnkiwbTg6qC;)T8j;CfE1wr$qH0%m^nBp`{7z5{ z_#J3S+nZEzY9x#J-(VU=^Cp{FpSD1Zf7fBrKAji3nwyS*H)ZKh{&jClLgZ4X-P z;t384S1#Xy$-`fg|BtpekFTVt`u~G^HJ~FwKq8992au>JK}Dk|Ml^cC8Hwmf@GBaX zC9VVoiOXmZ`{8D;t#P>;H;9Uw$LCRldLf`AVQ~^Sh=>q35*M(Bj2eAFf(!F|f6l4y zdpntV{`+NK)2Gg<)2FIWo%-DF>Z)oZ+rugU#Pi8naC``hMy8$0E4chaSVPyeJG^#S-n#LRVDN(wRYRv%Zp~j3pmUgMG5$B)Ec+F^9V=NA9D;> zoTzqD(%VH@S-YfGjl5~TI#g(yIn(r}xyj#Q3k7MN73+}HQXN&Znfk3hI`Lb3k~-*RcSPt@N|l$AG}m!I{izrMB5 za8st~4fhE4^kvv$#;WE&k!k4~jmuU2PHogjFS0=l|2*BSjmyM_8_~IO7^a#H*bGa^ zQY6SzV_zc~PI=RshAURIOhp?Fx6iq;$H^Ac;*A*MT91RZ9w#w9&dBy~J8(#kgQLfB zT;Fil9bIU+yHut4y*qlGnej=r^f+u60cgrDFNTjNsWe^ zKscIymSgAz(5sg8hErDFa9)1aaNTbyG~BpbUV`ix@HgB&R<(4+eq2kfy!uy2Vy_H{3p5g@!x!jo#yACiPjhan@{FpERKlTW~+1 z*F^L<31@AZtwH6%yop9UhC8j{lz^W`tFdYp01_itH`^Nb-=OZ@)JM_=f12#<+9 zj%2v~tThc+tmrLo%o`3T_Q@jOsuC#-4cU$oCLT>qi3WT3UDngkrKfS+!@%ClpIm6Q zWYAiz+e-4Ov~)h>>P~7M#+BZ#w>bI8M<+t|GieE@^WGQnFfO%LQvzN$l#Ny!LO7bf znPa%+`D!&Kz15VJx0+QWZ?zx1q0nlBrs=Jw@9%+=Wvg1Mr}T1K`qcBR)%;$z)~>v& z6ZS|D=L0se)l3rK{_t%|<@-xt)bybKbZ<2!!%=6hX|-ZSJE&-5kbl8yW7~Prze<9E zg*|jYaX!b^=l}4c7x4hTwB}L*eh#%pbM+$}O<&G29C5swOG$4oW#!G~Pfi&+9z0lR zu0GTB<~rWTVf8RaJdbz{?|iN`mx`v7O^8&T_$ywjJ&rIo*O;j#c5c-&sCGp{pN0Dj zZ?0h^VdV5R%~h=EIcGID*MMyBx(}k}de39Mxx@p9mP>OT@>ez2`3PA^#&JCy{__ci zmOAnbYpJr#@MCG#k{;vgPHJ7ol}^?R7do9d){sGL`NV^HLyfqM8?B|3fbS!}(NaAK z+1r3)*wUkxQqo&WS$Ru&`B_U1ompt9ZqxLZiUX$oR<*R%NU2Aocg%hi#~Lyb-lZ95 zYuu=I2V88acF(YLvpK;2wL;&BtlL|v1+{R?>(;bX*-p+XI(tTJsU7<2G><7uR@K?? z?dPs}eDm>AHuEh!zxA*Gp7yEFY&^g9W#7|Q!k^!`LH)uG`?=(KE#0!hgBK4toA_vU zTQ84t_Uc=+X}5=e{)N$>+1>yM+5pUEJ@N6Nrq4!invuriJ6c*Qy*F;{y^$%I)SrcI z95wWFA5=p>qS??-_j0$7Pqr&Go+)NS-z5Cpq0i* z>$#6t80I6bUy_40u*$n`MMJf8#p5&zG2qWBdg6+s5W{)0x1wtTO6+-~%GyqTWu(ui zHbt`WPk-#=I~$&7CaZOsWZXwjIB1#)zT5%lM(wNG{^)exIC>qfu1%MH7_GyqKBbhw87cKD@L>Msk~ls?$2aEJQ_U0`Yy|f_N3nN zw)mx8tx5G~oOHvpI@KN1Rlh%L;iNd$6C~lik=>ZpjPo6GEr0adu!G{Vv7VP6E-z2J z5#7#5FV8oUOC+PCE7D{08xg*r;ha?ACY+mdZrnLD%(t^lSReB|vjWz`MPCy^>4-8@ z^YyT+&vWTk^5H-oUukkFUZ86e;t#rNrQHVDh$gO9VMr6V*hW-ERDB`|w- zSP}lV)SovZDhzl=p9r7IaIRm(*Z4ihQK5_^%)GjY3aUibrr&-okkA-}Re!z1Z*RL~ zEZx>)#KtwLXeXTRa+Rsa6Y)5u!^rmV^quO&_HdvE0%-Zxrt(sMiJHdkJkz##!e$mw zRg%ZRZM9=1xe*_3wWE6W4RGq&qFK*Aars2=*>Q!V-}|T8kZMab{SW36HqR}sBtJ3J zI=bQIuM~%TD+F0nU%ygrBf#y(C!1y(;Hsr-|3l$8*;-2R`s+x4N$PepUk>Y}_}+N5K4g~aGhC$yrBdNE{EX9l z$X6Sz^O!C9CxLGsvrP~IK)Fo-;6u%MynNs_yTO3CO}k;hTbZk(cDH9N>jb~=6+wWU)s7hr+2?A6>c|g z>;??nJ=N%4f5HV7zHw|E@?BNMc*icQY3ZRF#^fs+R@>UV)z(S8dF35D!iWtsRu%ui zbv}eYEg|6pInJ>`$#Cf_i`cNHxofB8_jcX};ittblZdxzmH7Q3Y_3UnSuxL zxPHXQ_Ha-zco>Jx;Xw@1GGrvKI7^M=m-^`}9;zhoBX6r6dB=`ddB@IC@bG1*;6Zdf zJjA*UxM?e>aR>S^WDHZg2_rDgLfRt2J0Ry)b%Rz-JDgi_&J0(xFK7q5hx4yT z`xmQYm`?af3(8OHW#j7erd=QBDm_e<3diB+93IAyjHVxyeE1l_gOd6EfpWRf?Eb)4 z$>s2H#{b(5JXHJ?gNKvYM#bR4>ti3sE~gs~=rDMgR_)kM021M0QW6I1tlBl>_({(4 zxl6c?5;J&s;vw?;uypxu4T&;AHs^M3K!lH6IoI!;8Lrl4 zm^-aL&oe9jS?lQc7-&7p&;8!*Cyn3=_q$SIyLn@G@L=w#M(?J5)_AjF>=_Xr`Xyi= zEi0q+7mfMl4-{PzR_!a+G*pK;mh(a)JeY(QG_~v_*X^#>3VE)>gOVY6#Tt0n8%%cZxk0xeW^6)8917A7?@7??Mb znz_-`I8Hc-XYfk0NFJ|&IRX`U6{z4Scz7>V@F2P#9%9{Q+_V+MJ4tbv{w~W0-(;ob5a6Le&cse@)VnS@kJA2?WHIwTPf+mINhl}2)$WDL_D z=@FPBz?XAUh3j{2#JN7_%y6|X!-Q$s^UMl&kZ>_fqc6La&yb>PcR3m2Dm_e<3Xj3h zIXny^8BI@@{M4fb4@&0npxkD7aJyN&yzrFWz{7x_V(`$#A~=HwKQHOD+HJV|kp>U# z;&?cQM0jYGgi$Gx(VB7mRA>3X!=;p%!NWryA-~%Wl+3MQv&-mr?KB&cEu0$tKB?U> ztLdt3ikZ$iCsq7zA1~&|+qr4aGsD%o@1j|s@;tM`+HJV#_f@NFI-&gB@8hOj@5dGH zccsEt%p1Fd2Xjv~HNwOYGdUa1d1{1*X$g3bXl0bDJZndM};T3R# z2hsKL5bM_ArmY|zbfW3cndzg4X=fVClY*3@bD^mjsa5HV`{ybwVh|H zr86F`Fr8l|hY$8aVr+&+a+PEZ(+TOZ7n}%z>6}#Irkz`IZpt|`T&>G6@G$9lW`&zb zxEQ7bR;6@Y`FuFexcF7+dYP;AFjXqFv^Bv)4-$sZB!AYE1P@B)@SxmgcyPN}yd3ee z-M~Y)pJMQ^pGKJUaN+0KMz7^`!z~9HJPfO@{P05}JPb<0@+}c&D0}`;mJd86l$gQ8 zpAL}UyIrXV68+xSNDh#Ues7f?AM6uhj+t{(h3jyx>|DEZX1H3HVf^0ad1i(Ak#N!P zG0<9+pZk54EiE~z3s<<`l?oN}#_r(3+`}w1Z^Jetv*F~UB0RK9z$+_RO-q+)h>I6# zrd3;!kVg$GFrI9pwTG*8(Y2aT=DQ{jNa_cE*kP2dm>}ra9raY$45q1bIA2aOC4` zc$1H_aTF{(87f#1T@MSfiWN6)1+idK9H#%%On=f$>sU#iWTtg=!)syTfCCG#&?}Ge z&@6il>zLVO2vRM*@ zPo=^R+p0T`IkY1gO%IU#(8miFl+0m4xy`WPb~9LLJ83tt(B`KYEc_$;bg!S6*gllZ z|J>hTVM(wJyVWa@h0C3h!&+A}qu}8&rN;kA5HUlUi|w`(3GU z4zpEM`S01OSG9`pM}M%>_@1-1S~_fGHXQrJ2n!<;Fpg$rls>J|FtF3KYW)&2Ok*Y5 zx14clA6$fmvS--2Rm-3~dn5$iAjdl_C>gp=TmuVUp{%(dyJ;;fbjl7xh(^+O2)7BP zM?A=1Es4jwmP;S}=BW0DFsuW~;5>3h)amu&3rkijI^$r5yb;eR(XHqaj8`J1iEic{;9t1zd@Ziok8QeUDoqns`hHva^cu*Ec@IoRUbW6fV0z_EB;Q2jSK6vnI zO3d(J`$OdSR#$3+M89`5l3gUD-|bUm4ChFlw;nRa~%SGeDm3a{nu)$Z|NL51Ys8DFv@XTuYZh1yMU=Q|!K89H9L1`n)WqgiwB zcfwjc7?T~ok!vI!fd~)wyT9XsczkWS^uaIu%B;+8Tq=i0U`Q61jbs0KJ{0yIsl)+r&g7_3D9iZTN=a1jsMJ;Tmr7K3wbB7_g*1&#+whPLC^ z;6bsu_v+2@V8@3SRjj>z)=Sl$kIv>XoKZgZu*18Eu=5W-;i`T)iNB_K=bvxS<}F;f zv#&gQ9uAwRczf!t47^yRNK7U99thvZ$-IT-{sCelNU}RbHBPzIp!q!^&yt zZx}6C5xo9@N_nqqcl~a;efiksfgSHhzT;93%l9tt^nVz_SW7vXIk#>3A=`U*?X|oQ z$Cl*>EUzxJoNUKu&6X=&81|y@x!r3npO@LXFx(HdJs4bmNkdI*)28=e?TCij15lgV zgBo3R$8Ee?Wi8#4c!_@$|BvSXQ~9s;bp?OVaVh$1^7qjPW&XZk=L}hdyU%Q>X`aJI zexo5a`Cqy6f82Xo4oQ`X<9&G@+s5&dd?D;jN29_^LUg9^v!+;D)p94A^Ux0H9JC!e z18sv&TU!pb(&9`7*~D3F$51_|qkQ2tUGTgZKX0O(ZmK}X%2mDPKd%BMI?fy6=eW=6 zx}8thDHZN{uED^oY&Ad`$!Pil$)EQqA()c<3~{7x$_2rOAU3UHsqqT_=;IB(TydK; zm{!pP35Q^ZtDD9n_D9W{&b#+{^n)LHlN9|w81SWD??bz<66^yO z>=SsBi85LWp{*n~JR1`mQ$(}9)5EWL+QT-=>!T{(7CDOIJkmr=*!SJ~Rq9<`{vU;c z{T1TDCct2@sXmX*>vO@*5wdXbG}W3~-oJdo^%7XEXd{+dK9quJIBU?!<)HSab5=J^ zm8<*Fcxp`Qv3cp}o64iNmbEnd8qS*t|EtZ|s=c~2B1Vn9pL#C;Y1eC!jED0miQk~- zsRet-MmK#hBnQ)Wn?7ivV{?26olPsWS$;p##XcxvzQ%+)1aAipjsc(O4}9YSFP%&gTE#}-MfF*ZWruav4Hmt4SbEDbr^}Q!_3&s z2Xz>qDMM3HDQhI(WP@L>)8B755L2is&u8?rk^Hg;@g(xm^iq!DJ&#ZjE6H*xDvz>q z31aKGYn<{(u93MxuDDGa1o4FI^kaugjNss%+eAgr5_; zqUux1)pyaz+Z+X~6CVBd^5{Ku$T6Lt&E8KdX3Zw?hre%C<7X50t^1{0h?v@lDP0qu z^`E{PtE|~!-r>q=oZO@-X=%4zv{o$ow5#eSg1}dkTI})BfYDlql>9#B=pU3vZ!C}A z;QK>ha+s3B>DmglYH37mQct&3v?S9CWof4%7?z;EX zmT&`+N11)dt*MlN58}^p#3KpfaSSH`?;xHDVx7w{yQ{O+D(_6K#chSxUXpeS+%aZz zHGIbqy7q#@ zXlpsGttgcqGqdTHTzOoQTU#<=ZQhh!Slza2=WJUrQun-V-L4|SFNASS?-VDrvAI*> ztaW-=eqg zcrU8Uhc<(gZ{w0{rD!exX1S-JQf#KzQnNyKG4d+x5V-ukW`zR&vFFK-m+>aJ3I7Ve z56nKWzb4$b)<nubgg3wQOQqJyL(nFAPMG&e&9K-Bj&sJ>i0DJIL5Lx;bpBj+QCqgwdIezM$&_ z`UKN_P~J7q#!(|%?rAyq!(7>`?X3tueY3qwn!wsw21^lmB}OCJ;!H-BDGdYmcS3Wy+`MR~sz$jdH#v@s?4qWc%jJs1 ztI)5EZ21a>o&>8a+G81D%K>m71{ZJ6zO@{#aGr8DPBcB!-~|ABJZ;KFr`1*n~CPt zt-QgYCfpsZzxZ}lfyZu?b4pp1GF7vmRa$ zuZHCQXDR%aNwoTL+|3&x{bK5uSvP~T;rRVdXtAXY-15De_YPt9XnQ#5#yPZ8b_>%x zxBO*?l5*@!lNupQj31^Do#>&*T5*`S8H|e$P1R5oj*A@R0~;rT2>EGpu&)s!V!- ztX%UD)lNyTowBe~tlfO0Cf|4pH)VUM`NzoH@jRkyYws16gbyJw60D;}g4rwIMuJ7N zk>KYqKi{4Owa|qHBDPc@WwheO|5nx6^xdj1%J0qA-mg?_X8cw=y2a(MGcEm(YJ2`= z?X&amC$)qlx~zR#%?RzIME2{!BL+$MLprdi>|bZ*xkINFq%+SrL<)M&khI{RRx zQsD(Hf50KjCs-3|(lgrwaSZqEqb5|+o6zP%uWiDSMicJrqM3BFY*9l-(qct#xa#hc z_?_`Z`@Sn-9ON|!V4{Qh(C_kjNepNCqt}Kv9Nie?{psK2(JATjngbHuIM+xnkc=K3 zkscHNMfR}bWXAKxT+<9Q;opSyiszXXUhToTU3)4WR;GJ&$kmxt9X+a4_#1shk+W`i zS6_?Ugl9CmH5+>AY0Iytufh5Hk#xgXc%w>%`(?Lj@4nQRpXXbSls&%>Vxzmhf8U7! z(DSBs%u+#u8_`;Aimk9H=z~<(^l(mZ5D4VeCc!RtueKG2eQNV*UXf!#-et)smwctV)!{ zNfS0;*yNNJE)C#BrFR10Y%#TD_2>N1ZGR_KessYnO()Ji36CvNhlR#XPyS0Xu3wVz zaOhjCax@}e9@IF3FPtMvwukev&K>O5-cRyNOL1H6C?xzloZg9vW=MG4@^Oko423c; z>#RE(C^%4U51nT2qOH9bRg$~SoQ`g6`CEYCe%zV4i34~3RX)$x;T`fsL&AO;t=iZz zQ7p`=mLB&Pb=6MgF!cZuyQ+{WCi_UL=>We~#WM4(rJlWRio+_YffwsXJkRipr+9JI zx(ow;1~U2Twhn}D*Y@jLk?pjuYM~m$LAXT6Kc&LU)nF~lue4ZLLc->)lHXTSEGX%* zpsXwwA~90>Lgu{YqdN^EhzO3VYuY+&Fnr`^=iecisYQz*nNW?@#rFg@~hrK+1 zF3YD&Z$7etiQE1pM~}JEI3#*kfEAO|B%`ATq~|-U;%LJ*=C4Y~7`f+7I5*^+8Lrl4 z7`F|2o>}qzIijNh1P83#(S3f#Jbs988%c#_bH#38(S1|Re(?sawPwTNbjIbgnUgjo zfv!-YFf3jRn>{_iGe?R5I#cDmEA!3Xb)>dtYUtz#LF?blR!)Ec9jeV zA3;br-Gr=ZUV?wqx(}XxJ|X$dAz}Zj|$J>Kwi$ujc49pajB%orLyw4^dIRgE>C@YAueZ3 z)8q0njJp?q8RCcavU3mN+~wa;nHDOem;2BD{Yl!Y)3()sHyX|#%&@8^J>q=EE+H;2 z^bN+qt*g(~8~q!}V`U-7N^&)o*=k3j*Z1IrUZNR#HC7qQADEtU(^e2uuEk;cbTfUm znbxtAY%|k3x?y{xe^3L-{)2AQgk&#!oHbe;<22%Xc~ncUx>Fr&Kqc|67ZQ8ba3fhE zskR5nx};b2WrA@V3lu*}$w-W_+1m1hZ8QG*oMrFn)}pVMki_H) z$>?ia;=}xZsq-dAgl9_Urkq=FZqhk3T(yn(@LpV*WmZ`2gi7>v46ZSql>543mg?iU z!hNk&c;ws7*XwWdd?OgvHJM-IhIg}JGac9PY*O;ncVb9O-~Kn=W1k39u8ml2o$#_! zoNosa@ysNIq^a50+H~{iYW~?|cmDw|H=swiCMwgf7 zB)h$eA4BtXa%rtiI{bdSYKL*Y0FPZw;KHMhYr?ZJ9LNecx$zVCl?hEHJv5b-ho%*o z->{AzRtU|CX?kd$G_(%Sisx?PT*I?&DkD65^KFi2tf z19bj!w(#shs4z>BBOgAZGJH9fqwwrMp~5rK^>`+KU^=*ID~MID;xPSjGkp&nH+LK> zNn)mTbi-@$>|}aQ6P{i8SZlO7*<)1N%-TmwtECU#u0A#{(X4$RBzCMRBr!QdGWM}S z=`lx9ggJ`NNfmCyxk=}SoioGL`h*GVL!M_=W^EUw*vIVhnR=uAG+PhZ?OfVB%`nAH9p3? zM5*(v?3`5Lf^%)oEjed~t92O$&lV(%%kq5vUi5Vgt~urBzSct-Ck@~V_q9^t#paFO z-Jh9zc$)SKEEt&$2_4t)Y)OJN9k(({e^@mzB*@l1MvPM48Xm%zmu2k1P8;#jDKkcCt=Y0g2X-+8p&0Xv5!qikA+$ydssoZ-;}eo_xt>3vM8@JF1H<5@S7(e!DOf8-to zjglTT%F2VrEoNcEQqlnv*k3fJLW*|~P-%rJ|y zOjvL8JhQ?W0$lWU46YXC=e}NDmEC$Lu5e!~72a*$*d3mkdsv+1?bc>wHq`03hG*>( zusBOr)6xM9<>DmQs;x-Kn5C7NEQv5?35j@SlDKxTY8iU0bG13h$&P1AhOf4-!LwpR zf98?v@$9Ad7P`jxBdlvo$bL0(lH=K!q%67;Noym{Rb18cY@r^Hc+&{Od!E*WXB{|@ zsSk4F-|tdrD(RuAtUNTW$Q;jh99#&^cGL9G{KlE<@T_?5*ErYkY*ICxZn^4^n*`h0 z;8-$@SdX2eq2-l1teH9!$#oVVpb=qWqmk{QOsTwYg<~Q)N8Z3ur>%ArtUVk~uqL`5 z*31~+hLEu|wSpMwh^GH^hD@Jjrgf|&2byUe-SApi`)_VIn_%tN2U**7%O2wtW;W@8 zR7=QsZ$CZ4nxB!_3b=H`>wbej83*u+PeUTCO-RDzajR<0I0o^vd|++A zM>JsVoxhZ?hosAc79{$*(nyYzjK1!X9+SsKxK(gYs&M_zjX2lmoEc{FxC!fJ&oe6w zD8NNni^0{c{M^@Fe$ooAa9=AGE;VoL4%W;)%-{0HE*qH*x6ywM*7_viEw+_WdJcoM zILWnYof0y6+)7N^MHnB0L|8KkA!%xsLF2T!S_|Z54r@w=pY6W})`|^%{lnM8+6BVc z#@O;T2Uyow_`52VILTpcPEu}lMflo-b2F~$d5HEVtoup!P;$5!J6oLSTkd3GA3hbY6Zo0lH3SB z+)Q6$rgda}jG5Na4X=f@o4N07YP*tJpAIGK%tjSqb`7Ljdg!g{YCRJ1SOtk)t-p~R zBpJI}oAekI7U4$KIjO>RI@jl1hjV7QT9;vN2HHK(tniQq7rWYuXS9l>ak*!`#f0^F zuF|`jQsJ3u-3->|kT3)*`S1Uv*iq7BM_GC744bJ8)^6Fq5IZxb>9ONY0at zz8;odHJuaTj=?#p!i_mM?OeqQbRi?G(` z8Fnr&v79T55HgULJFF=g{`Jr`uvTp7Kkc_3)~*!BUfCvR@E7jf*SbcV?6Z5LksQ`q z#Ii@42=id?GHz9bXCBK-Oqg!#gbO!3p$XQea3G%bUmJ#u{4>x%S>BAOv@C9=@**mTjBUdAV)SC zyIE-+-SApGdjLJB3D1sEv&V&#RbM~JGz2WM{`V&Jv0>7L%LpX)v9U&Sf~4A>CM`>k zL1B@&)R7wr=LS5l;#|LTW|+;cOjz&pJhQ?>8l2nBeA%P?v_9q9-A=}D&ia^A;SD$= z$Fngc48cmi{|*I>k{&e5%7ex&W_b3%eG5TTF-;GeAHOo?0&0k>PnO&doSyhO2cM2G6EF&#W-602h57gKJXxxvwYuq>-C5Un>>5Jm$2%D&7#FIOa_T~W)ecu)GUM09dWfG z$Y#egCBu>Xtidy{P}b0gY*>$H{}8w~rd=HTVCx!XFU?7gXWf#HradBQT$Px1xvJ+S zotC$4021yyya~^Sao}irF2^u@heA_H4^3s|p=m|tc=o1;6hd>zG(9wr?q7#z#dDA1 zTzmTLqcZ!RGNTur9VB&YCK^8U;vCAP0+h8G@dc#peIO3Jx#bi=*<;|?PL(4Y98!<1 zb`+Go6;4nlx*p2p3QV^cNv$B3jEKYZyUp~zaO{%6v68&SOzY@|*FxDd=`>AH_Qt)f zy_VSefFBhjtR{i0mfrpob+0MqFuMv8yVqPJsdc=udyPns@n8||N}ZD`+_-Zy&W$-| zhM8Su!g|H?%nA=?aIt&Y!8D;i->p zg0dbQ$Yxw}t2{cnN+}=vXNA^=Q@o8ZyroZY}kg74cj;}k)C>NwWFZy>2QKF(e+Sf#?qwQ zOv~8 zE3A;i;}axyuNHD+vW=v7gW9z87z#EE>4I}o#S!z)t%`8p;G7w*)@7KUGUIt>g@-XX zx10HLO8IGBHA8#SPwM0GAUPmqsY_Gm;6b(T2l+XizpLj_qV15z0m+VLhkFXw5igdu91R+0B%dLD{os~Up4jybIhe<|XcSw)Tk3_gLa89al-Odd-*X5iUuGVE3?{#{fSz-JDF8VqKSG)3a zU$^;5ZMedHtyDP6ys%9ISBXjubg#fHA<{_COajlWgbz=r*W5A0=K zW7P!0@WC+WCS29?5)-D|<`IU$M>RoND-L9ytlap!Un?|~^w3mR9-3BU z4rM>TUm-MGOw&X2GcQ>OWyNzp#kmG$GgKx**%(PdnP^yjUJhka0m?>tupJUKyP_v&sW%Ot%U)K>m13u%wk zxgizdzQMUx=enG0an1}^>oQFDTGi?Nh>NgiHbS?X`7$UYt*d5eFPV0Ig{$=LrBrBD zi)I660SSYxl7I7;iWen4UX+!`i(AZ~>`N_$cv&({kC!)Xj8NuhBnwuf4X^yZLD`&F zd>#^^Y+90P%`!%7#xd6`%LmH#-m3v+=UgjaSKP=LB>H-yk(?qKecdlTX3vUnXW*Pv z;f9yHS8Ip# zJCrFIe)P}9;&j?#Lx1-^)+Dc)PJ5|v^~$&=t0i3dFD#5ED}Pd@BFUj_Nm3@qh@`c7 z=N4Sm^AZ!L+geqd&mGhRW%D?Y?^DW+2Q4TxmGsb5RvwyGat>wtP~)ZnvpLiB(40SE z9h4Q%z2V6aDzan_v0zO!JoY&`teJY6OzSM(-N@5ScN7P#y@66I$t>Jf zJCdeOq&W)KwnGJLqU&MJjIq_Ho3?`3(=(c8g*67QFw;6#lJA>o9o_I+So`rc1z7v{ zKNhKDQjxu?6Q-)eRZ9=NT3xMQIXp!{Vpkh#Bu7ZbuGT3%hJQu4Idx8|a6QfqI@j%- z8Lrl4n6B34d1i%YGPu~)qAxp?pVr4*yWPn&SLt0%slX=N4Op8(!eFc9zxugiM@f$z zW#zHs7Bg78;h%-rnKVt0osYjL!kV9vv{{WdTsUK})*_Ct3P2*Pt?Wd?77|v~nsH3| zLTLHG+Ee~Ttf|5+)zYW8$=5SFg~uyM^z}j`8AwK7k4cYtv?AOkI44!ON$2LBn{dty zSL-s2ug5*ltT2oK7k#~IbxkYE&wV}OCr#iA_q9^t`{s?^!J4^;Aycx;4Vu zgamwB(8?&inz31&GE&- zdw>?_6VdR}?i|mg$8FlmvPh~+;9`vf&pt(Q+?tWctrr%A>>HXuEQe?_=Mbxx{q!_G}OH{_fdW*LqN>w}(WR(LRji+wEm zvS0aWea^M}oQ!al-p7;*uT`^Vw`s#j7;KgN!9P{dDCt3?tUPGkVixB2{k;%0L#F9L zbN%rV&-{#}Y&F{Ot?w9~b&F#H86@IarzCt-R)pPJJijZ;2hU!2PXo_>I4xhV-f2c! zP>Q~8Ya}~JMqkfKk0CK6csDpFRk$VRTAf>P&J0)UG7O&0OURSI2xAG5=<668j#(L{4>3TClU%DdB_T6h zti)tOgn?8@#50o+lBQ-EgzmVjRUof?fUSB`G931|#Uh@0g|db|@b2|^c7MInX$+n{ z?0>NUUV3Rxay;vkl*ut7X|2b(va5PtV#0LWFv9Tn4NZ79fCER}8+*bmE1TS2U^uoAY1x0>lA z%(RYt{=iJ@=!Vzg*^%^|rV+H${<^3}Tirp8S*j+&Y;`PEOJ~;A$L1trB@QI^v86_G zg=Fkw|Gti&;4eZuq13QuQnv5!SxjwwH_t7i1bil0>G zD!q>>6+VJ9ay;un!icNn$NpGBqofCovhtvDi&>aI`EP}w={8Ldn!BD8@yyRiMyy5~ zet)^)*^oG9jzJ=x4M@U=14Y=}%ku}beDLg}l$G6|{o`Bmb(br3L!z(CjbuN`=<62g zRntBZ?h%}mDqOpBJW`n^gTvtaguA*f`nBkOqUhMXeuP)nMnvq zQ?m?$b>7uxApg(tOv&)_KP?vVtk}@KE9>#>8G5hNz_a83j0N!0OLLOrSw&K2#fYS} zVdq9%)$bxx{q!MQf) zmYg%gti&;4eL+Ir9f1+__WnNpVaWgG4+Vm!w*= zjM18LO!CU|!Lw^AE5oxVd_%q-bR$EM=Rk#&{S3)npR|vXV=|X2+d%c9-5<1Ux#PKb1&jt!?Oj|aGHf@ z_Lr{`m_)2$G|}+O$LFwS>U@qyXYm$CgsBQfwuk?qRHmH4G3AUSQ_-jsQ_(mI*6x4` z)_Q!3nvGjdp)N5T-S;w0Cq z^-IV!7b`I-i!h`LiLho8LekVMgJA7(wJykM4r@w=ul;_p2y4ZLzW9#yu(n7eG~K3s z<_}l^Hf6sWNe*kPe?ZFIDP^X$;M|G`4?D&sCQP?=s5bB0^)I!xZ?-Xw1Nl0$+<5QR z3QZ+FG?kTyrj?w-+Robxp*dxm9-7}gdL674&z<62gS9p)quaC_8GON_E@oIW|K)swe*)S ztB(yy#Pbv+_OVJMIZiV6u^#C$8Z5#cs&i6>>vwL%xjyI2Fe`CPSTB2?Sz#p(T$fRrl=PrcRvt8NF~hSfeqRWhG1K&* z*>Y6GGe0Bgv>I)A^Q7TfyEvwgK_Z^DO2UUYMfeb>=eK3~;MpVp(7>|`za(ET{N9W# zL87l$8p#$;jlQ0g9usIqxK(gYs&F&T1?Q%nGsAp{(}eXY&oe6wD8NNu$KaY!e(vjW zKdFK%+}BElubVe^hiB#>bP zBEpa=B;uJ#2uV}33_^F<)dnH2c05xu{N}dBBA$7LvWC9lx9jn29|FE<;>M2_u>f9r zX-;xH>yngdG9qcM!?{jZ^}NJ{>9&4^;T!*G!m|+^IGVmkZhZWA6q-tUXeuiYO)E0T zvqw?mrq=?)rs<*iyCc`(S@GPZrHE%`DkD7Gb%o0Y9!Sq zaIwbm*!g~nW9247R&H`+MJJVEMJGq$**l=ZGtu>UX2#gZ<98|{wSrhBDGt*|nCS8*`5$j91WmtbdeD6B2@%iyjAX!SwBfT~G(77Q z#~d=qL#R0|)guX?)D{`78ON-zEFV03@nQqdzBM6Vw@H@=ElBirXCv87GWvSyw=$h} zNu7HH5!TN-x9WKv&aF6ShWXyR3F|>ZZYf0=P(T=c9fNB@8M&|LO}pNQE8N#gh1<*< zyTh|36~a4MuRt&|8`|l(hG#1huo~IQD4owxElzT++MI+;c(D?bX%U80Ara3^LP(mL zWe~bkt~LRAjpLb;VZ$#Mi+JW0${PBR_jUfz+cQ@f#83*#!1G(|k%N3eRdT1&u4^1mF$Fq&pxCzgCOw&X2VSIIA z&1PuDbK5xA?$1W3jPUFk3_j`ptj~F);f;^X@l1N)S&xxam%zmu2k3nB2;tdD2-#qR zBO7l}88+VFC_Fn3Dm)Wik7s6#eLUQ>6~yvLD`9&$#Z2>29GNrI&oR?Fy5Y5Wb|5{c z>Hh46zgSeGwaFf9)XZ$s4yl$-`keY0$gZg3*(mE{yaLXWttiGmHYGhqgUv!Z@0?U| z#GG@C#EP47&J42z$AtB1&oe75!GVi?Y|IT#DnG5OW;|$4_(@${rS~zV!n<%rj%S@n z7<-lcux~49l=PrcRvt8NF$?p9epv{b4%76Y`OV=G&-{#J+-kJp#}^x(Rm8D22NLmY zSdwbZGDd60G4(6U2hZM3S^7EDw2j|?M!qh)kv>Sovw=o(h-CD2yY$#UScH27=cEeP zu zGT?ZoWO&Zc7mIjSZ0IL1tjDu6KdY{huMv3SEm&X%fb25^z(|f~Q(}4jC6d-AoSQVA z#PbpprrYKahJD$CpOzl7O-I{s;Ar{~xpDL|g{G1on##&U(~8XT>^-*@LbKI0Jv5I$ z)b_qqNoD(xS<*u8xzAlbwy?cr(cY2RTmAu8HqL2aoZ;IT>E%Oq=o8S(_X22UGJdzl z6qj#6I--JjRV~7l1|!?UKUvMr3=TMEaBz%JcJBSySN3!n8EP-Uvmr{UstOu>8-A;yw$D9+?o5|Txj(L)AUyV z#bd0asifG^=E*(x$mPyLM=RR9?q}*~%kS8+KO^+ktL*%&SB?3#h-AI6LfSSF9#&qO zipK}WaX;~eBh=9@LdXV$92uaY7HqW2@!2i=)~*@(>t27qX0P+^x4d$MlRT3ENC%@5Mrx7wD$1$AsKWaE7z2TIVH=I=?Z@5?9RA{&<)AWYxc(iqk0jpZt z<~4kR#upjh6vy^{B2_2McoxSyb4ZMLlW?bGYL-E@+g+^{GU)NHWSF^OvDjUU6}{}I zYr1QT%%ruY--x6$MoLvi(&(<2@`jCmxFR9HhLG4@B_Ts6(Os1R7a-JYUWEH7NUXj| z_%%}o53a5@=W5fCH+c1x44;n=E3vyCG_DZP9f|(J{x>eFhzXs`ke-peyN-$Fc~*o? zsGO^qPU3lq3Da$p2*W))n!4+x8acg`V>sulYIP;O)s>aEx)qtX`swq9R-Z6UZ}lfU z%DSscirsab+;!cxXzu{*6}zjQpLN$^zZQ|KyAF}I?mD16#-2nNqcpNT{O_UaXlKLm z7M&yShp5F?JMON#_UXLbig9$;&z&SIuQ4k+?xDLr{bPmhde%=C)mGhR(h0vY#?_tF zI*cp5*4~>W#u4`jt-HREcfA;>P-E+^O2GG!-{`I*2pMqV7^WxHa7uc^DJyR{t47{% z|9wND;f77q8}6Kgt-F@3YU%2)<&e_5HGIY^R|!XJ?IH|+8ke++@M8vv@oo}+%yce4 zX0F!aYAXoe?D4K-*zZS+#qL_H=>4dutz5`{U4vDqHfJQAG*bFCL#%YyyLn4TKU|QI zIW3UbT_qtyC(&J%0XGl9ozo&bxICcflxh!=xl6Ti3vHY@#u+-JLLDNY*FEL@dt%5L=@38LrKD(zHQX{8t z<`}O1vRYk9Z*^tmt!_o;tzQ3eq16XX(_8)B?P~R;-zt-;K&oaO@xP6WtR$BpT=V2! zH2(_BFJHCQ6!*|Y_8%*Bkr(`MQU2+%Qk~FYjH^4TbsAT?^HZG24VyULi9)DwOE{Ew z)QAVT66+#Lz?aEybdi39ELrCmYG0DGlyqk)D|ePvBX?HiM+Il~nWj7IB?nm->9eY( zEk;WH8eHR+QygE)6yf2@xTH;l!7@mUF_UnIXKI!~wOd_n^;f%g4S9?y8U8%GSnMJ_ z(#tEl_`|~ER5?BHg&&od^B;}d<~W~jfi0rYNgjoBlJY)Fge|_Dn{idoOH7zV)~c#?_tFMvN=nrSPRci{tGDM9mpK z_eYDuZmz_lPzlr~$Ztep7ec-##WC#rMLA1Jcb2kpXIV9JXWfshX>wMlX}YuK4zMVk zw5p~3MoKqnh>0D}#WC_B!YgItl0gyHVnAXPnuHrbQ?m@JJ>Y76kaIi=l?;R5Uo1x9 zxb*Uho;tTS3P1JXLKOCI=X`zubrzGxjO0<+VYbpv5#G2u*KRtA=Ordgw{;^7&;D&w z6n4mu>7zJ?%Rev2D(Q|@R_<6UGOzD{%@!QnZkq1cv-h_sY_-ayDv&5Njwrm0hff9+ z5w3~CqWKdsFD#Ve9-{C;)j||@%fH-f{!%V*!Y!q7btkn2<4Q02kVTDUj84c|O1iU@l{?F-kvr=>+Y8QWF->>Y@r)+$(A(n9 zn(`WM)WBS|rlN_$c@gH*8<)(8us#YBqtGM_j+>fgQ0-|~n}od0qfp84yK5JVQMe+# zyrMt*{@N%!(B2{C14}nu$NAh->8xrbc@z$tt#m{rtqnRi>TgyHhrnxb%Z zUXHzsW9Yg>j#bhftE}9yR&rk7L#c05_g*ngckB-C0SSZwt4yi_i9+Lu!YA@D%rq*5 zYof4d{`%`Z3Z=M*D7>Ijh{A8mzx;q&sZRKPHm>fZ)@592j#qAI8ppa-gpU*!e&lx+ zg@G%vC{zNqKJpt;xP*|w0gmDR7t2{ny0es(JIkt(JL~V)6`ZwTn(nOc?rTxlZ&gcM zy@uO$GsasjaV&NbVcSjPl6Dc^=|f@^nuOnAQ?m@J-R5d7khgmjDj8livsjG6vh?zb zZla=1%We5ZzT95daW`qi|j<8@7q0wHfE;OegWY#DvTeL>Rh$ z-4uoM@?-jAj^V4Hm1C83$0{p#tQDEp_jA`496M*4?%3Bq)S__ODwC=}s%9Kf_$8k4 zSVM+zO%xW*ABTBip%nKJh5t+nQFx^M%MYlP>V)5C@`Zi(VglW2Cf5T`qSlDKjNmU?GXdF@a7#>(z z?SpVl6c)`-U+qyS#XUsfc^4L<@XPWqKcEY8ffIh8jjKDUEg4t(7q9EkG>-Rm2rUYe z-&homb0rpqN}$$44H{86hLF7hIfi@2eKxM{q}FX*=@a_Bqd$vd)E7d}V8sOQIuQ?X zB^HHB!1t5ih{8dHqv`1!!#SUjvy^maDJyrDRU>!S>EA6lYrr(!Sx?|I$J`eVSk=-t zBc-Q(+@erL6NOzOjQSdvbcite1<_5`KeC%`&KVyQ{TA-r-TGWccCqVlfK)q?cFp zJKtFwg%{eZu>5N!S6#{Z+;88?S=C7LC|r<~Nhl&|ZO*xQSM|KaglvP2FkF0dQxx{g zkLk-fhW45qtE4+tS-E4aQIoAqqb&|MCNBr8?pF*|@rs+L&>rE+45ejv3Vm4^b4plb602 zD03wig-XCrk>7~I9)zqX&QezHEUQNDtlO?EIIG(<-C38?z(nD+RV^L# z8h-sF7KJLBD6EJuSHQSrScJI(kQjv~;WyaSEQ4wfx!M5ae2+pU!wW87EJop^^zw=x zLq&^N*kQx_c@#eF3eM+#TW9eFMI(6>cA2fTTZCze&UKnj;(3V)`34xm(0)@>6n4pv z>5&}6M?WgZD(Q|@R_<6UGOuqkU2trtX}V)y%vJNF*lv|cRUlDl98s9^OvrdS!ZlG? zH2*lv3k#*Vhba90y9-fxz~zhbPm79U>rN4VpKlRYcTx++m42z;JNmOYUY$ZL3jddv zwTL^o5{p75;9IfOh{AS+d|R7iIO8L7mXhu)W#!KD^0OD#{Z|y6)n=ORtVi?sNffqO zwbL1|VW);iSe0oPQCpIb6%ry0O^fgf2@<2wB>V=Onq{Ci=W5fCVUI#3!}q?mSd7AA zMZa>COEb z=>s^1hm6UwO1fi}l{?mo%%gBuz2Mju({#svpLSn5H{x92h1F2d!#pyOGit zK4?*>qQSy$5w?dgF6k6uupJVk&?Ni@o0?@%?G9IKgS^wDP|47J*%-f0}P0-Y&WTg%n`%E?W9nR@Enhc7>1`GDnTkTF$` zuN8a4@}HOQM1p!tIhi@PZTTVFdw1=%ybs3~^jDWxmRokbpVD2awS3`@y)ZwC#fftt zvfR4dZkn%IUPWOtx4X1_$8yWmUYBV?K&AJR^Y&S8+1h(arFYlzG5)$pU(nXKlljzn zb<+}bu3X(br@7K^`p&<0ReBe<_AXX>FW%aFF{dwIr<172!*^w$`Sy=}b1e94F1o47 zU!VWa%wHGmoY8e~--;Dld;r3`uzrYr{9C#5U*h@lNvcdL7wqasdl#tW0{gkiOz#pf znr`Of+=(pl1>R1-9Pq*}r`!&u4a#j$J`7G<47Ji?Q?Q)HRaej98{*e=!H*-KD5sk$ z(6Ms$JnMct0a*ZQ(Q!bG@1hLPH zFE!%u^Ovc^B(Atk8hm8D2NF{3aCOso#QvyR(|K>;yd6Kf&zqv)|G}u=R{1d{a9K!)iH#}FpY5F;FZys=c~2B1Vn9A8Pabr(Lf_ zG9J#OBwFx!dZpPrHoED9;qFn|Zqo-Xbb7~-5;~h!XtNwQCjNI(cgAz&>Xw-ojP_Q- z9h{XLRAPiumO@E4ZTzs4Va5B`#(Nj6 zo=fCdA5POgE6^{s`jm3@T{QAGM*-`ENB_M%dJi3POf_Onk5w$K7)eGT;mm(p+#Uata{ws!Y?ho+pE?l^>j;x_zRDqhE(8Wf1OS~uhVtL+xcnX zb-D?nS8hEXQ7WO$W}OERXi}KqsKxP`Y$q7qkLg(`|=3;X4|LQ0w;U zbg8!g<87i#=Ep^%@@Q+B@31J99@BUAsa$#8xY62@32XDF?854{RXbSCL>=q>ON`Mv;((zwEJc|W;n!BXGCVP*~ z?DgfwS^>?pbm%rUHYRoyOa!;kY~r>pS(Pr>xkNVosh^Hy7%X0OBTOZuW%`u0KfDs~ z1CSj*WX!RARW|TgPB+|6`h@AczE`$lM}PF-P-e%*?YgPbd(X(0ds@z|aV>8h;#OKecC)=pdX{Q5$i|fZpX%aEuHOz(HSm5qFwWq-djhu+}g752abT_QuAILjq?+|d*ftW zKH$b3unNW{lJVJ*EwdQ^p#nQCO`dI+GRdV(`K4gM{wR%`6mHe_P#PK8rF3K20J(7~ z5~;MWjBNP|rM*ghqv=wFFBe>+RsaU)E+;h7^D6OnZ&S5(Q?(DLUE4wa#?j4{P1VtU zyRKT7m2@qdN2P_z$=iN^x$ylp_m`c|GB-8*Y45z;3wCypZD^*1BQ24e z9(dXZ=!=aB`}=)yk(SnzqyBSOe&I|P{0uIh!;w=^dc1gUtkNwZ4BTlWFsJ&@+E46f zjbqpfCiAlqFXF^y z8g|P`QTc ziHD;W?L8E#MSG%g$mYD`mXGuM$<3jhdXx!u<0ByECe7SMTYE36Bpb|}j&5xETdb4W zkMRaKap0Q=<#Ptw?Js=p^YXd>w&XuC>T=c6m(S4RF+&MPN)QQY7&H;C#-t!$cDTh^ z6}(o{G7@UmE|T3wrftqSYNoBunc-?(hPfwdF_M}U<}SdwUHL5a+o!s!g=$bqoWUjf z$}y$F&G>*ze5J+0>W>u*cX15weUD;6Nsk3(WwEdZTh94HAskjr)5GD;56gjg-|LXr zeNMXJacAkrB(>W##x$u|T%|W--tc?7QGeQCUQm`ldTsbQWvNB9O7A(R%h6*xg|`Zj z=-tUia++jx^nmo(_*H~eQqD;gZrHgA=Z2g!!)*L&!up`+nHA>w!9_KK;4H=3kI>O)FO?3S-0uM7O?A zokF(*`U{ndvA`gveu@~qGm^nk62uadB57^Gxh2zyd5H-b6jyD&d%IzjZwa%61DPBo zH{Jn0GC4>B!zg9tacM>7X!DCp3URq$njV)Y^LxBz2)KCe=Q!7v9Jf#zfT?uzslMcR zo*Kg^qTwE&?xlV#J>q;u7nG*D1TNM%fabYuCd;xQ@>mwcv69?MW%wi_N1@j(P@$J- zhF&KwpQv!bv>8j2DK~8eF$Go}rvJdcj+NwUGp%DK`MH_a(G9O%a{PtY7m(~{pIyXI zGA4UfCyWQcRZG7fPzM`O4x6+0a`-Dc5ciI>)M7Gma0_ zWch$u>%|Q)8+wg=J*QKccL9mMUTP#)NJd|eOOIV&MHqQ6{s6*H;tP zCp^!ru+9N4`Z@;JnDTR9SNx2awy3+|Gv*G7-T*I?T2|yPs zqx7_M4bNPwHXg$3p_dTCB_JnN8@;U^LLsB`VE>UoI?dH0Gi>|AQXvq>DtsGi*T z@beU!N_uE2D-TU8GRL#Msd3W`fC{mG{zo^?|h;n_nrJD#;VpNNJd zerc6dZBV8F{Q#Ya7K=26(pnS2PFUP+Y~fPdeA5<4;r_ah560ng`gQRO%Iw) z{~7Vj&q(^LMjJ*?Gd$}N#~VsW#Ir6*Sn(yoR2|Rn&ho*t?oT!FY~q#jb&D&tLZYwR z8_7f9qZCsnxMT$^)C&Y59$eKlcyK|<~)MOc&xiN21(HK&Z+*E6PF zAI25#Yo)@E{;(%Jn^z%xZ__KVU}QFw=(vVwOA@5%xRp^lUE?Ioqcg4Aw1j*=)=Eq! zMc9l867kF=gruoi2BACQYGaTQ$1^3vKR&it#51o@*3iqJSdV8fct@dYgpXqZy!6tX z3JT&z{!jc-G^5A{tKld5&k&1JAmQq`Cwy);K`t zlHUqko{NxuTR2vdv#88gI||RvgcF{LuE#SomL?r;+6rP*Pb*=2c!8Nd%1rB6NzO3S zI=bPtcy>Q}PSca-Q`PMBB-!Khb!Ikcg;Yz=K1F?O{$6r;ih{&G78=P_lCh6XNUxf% zh;VD_oK)eaom+Bl$~iM!t;;ZYHtBh0g=aFj*vCe!O6j=r)4FPg_L!g4&sBOKQ!1Q= zGjcrZLo%9flzhLpDrl7Spix#HG;T2q^9Ovq5Hw}e^q|>tLBumZBdJ)8HeA_ncs4AK zXWk6iQ^YW*keQvV8Dtkg{|Su7}NeelM9wDP5khAko)-jpP8y=<8PL@tRzO zdj#jC3fJLW*|~P-%<%um*t>v7QdR5U5$$6TBSA!>phQFrA`mYJqIfhab7&MWia=D< zc;INz1I7yy5hWm{oiqhOZHyN%qCmh4QE3R5fiS`(fMP_&h(bqD*u#iKMG12Ie(zdU z)m`by|M@b{)Y|J(Yp+_h_S<#c#dNPGthT$(yl@QxF3ELLTrJXPxn5b3-)b+Z@La1E z9<8l~XOLV&mHN7;Y%1YC^%<$~kvvZ}{ zZI)h|cYm%4&+_Z;#kzLBIi(0^T5N~6WEaPxVZ=J^6b&N_8LXK(b4q9}p6nLkK@KAu z!~7qFF(<+?TOZ3(v=1?j*;25!H=JNiv>DdS8Snqf88e=l&)7H+^Eh+;A#<%|DcZ|i zYw3dcz?0 zT{7ng)j65MEj!oYTyV}Dm#cEjs9BPbS8GH#J42WZwHaS&L5jGl$grL_>uM)k=|fGe zFitWuSnEK-qk@vZ_E^=9nqE6nWwqlT(`w)AtX%E1o2A#zg(oMl=4(W=7E#;XhZ(F* zd*CyW1lA@cVUkUe(TZ_=ohH=-YiH9}3Tuz>v&mC1vgJezlH|HnZ%)uma@{LCW_=am zP{BEw!u2~h;#{9|=9pPuO;|0u&b)9z0WQgPQd~XKXSwe7m0C%K=UT0>+wa$cHA@fI zPJO=>jm(AjF@6o!`Xt~Re%41}Jr`+7l3P`}B;-Xf>oMvO;rbXPfi;s*l4fQKO1It3 zS|F!6tf?6e8>{7EEx)4=h?`;UlK;!W+8fJw05<=npc0b7+PtJ3>Wc7kwsW&?>bl5; zJa~>UoZyfAI;^#jz|r`zTabV2gDOomy)>oDO4EAIVC_q1DdSSsabKYwL(-SFMMQ;T&`QEpx49Df*|m*3uoXhP8JxfEr*e8m%ci zL-NPdH|91PhLj6u9-^VvD-owvkYuR!*PDYhlcClwJ1z=~aG>g(OyRnm>vOKtIdfdD z$}vFI;X3oetC(=fP+N9It4LfOHm=&@B(Rk})YJ-Bl8g-2mXL4>R`R2dQSGSdwIfwl zJMJ-swIjxIwX_Z3b&W98YOO5?EW5gt<0FcwNc$OQ{}M zyNbS2Sljhr<$B7ErXfkLXY0)cnn|vQWyj>NA{;R|CsVj_=VqKMIcJWU{MCfj5!aa) zt}DPLxnA;I4@sZpdeB!|AQhf#wZb8{uLWzC9zMY7zDA79g)cIG4c1B$FkP$lQMi{Y zwj{}|DgzSoG>i2Z^@(t06_UW3NhnD(GX>G{l#2q&YGo{=Bs%Man;>{{JN*GuEAP|LYuMu%|6e*gAoW^ zuqGOA+nB+cna9zhwu?JDwq3Dtz}oYFC5*Wb9pAoS$yI$~8ndNf?OHg&nrJhunKNbx zbl27qGkuD~^>w$&-EYmcmZfODxz^GhuZFeHzBRY+et3FK`)*49c z_DUaDr`@{8$uwK(Lrtx4H_6CgZ3+ojVkJN0{i+=`y>_I^YR5gMuy#t6tDQ-+^x9eZ zcmiv_M$~N)wY~Z+25X(-c%u!Hz*@T`%nBniS}~4UVNyM?b`O1}u=dsimFuN{n3DiW za=lV-wz6uH>uK3B2due{7o3wRxt@1!*|}Ng%rSGony@Co0AOIdL$ibl5;ycLNs%*{8z+Bga1EnubbZ%3&#)%4PoDl1Lv zGJ~~0ot7)jl399bzIUhz*7EC4v97^dAHi&UtD)@2|DA)fdrqloe=Yr;h?!_XgokJ$<-%Xytl>2+5#LXSB*SaI-dv=q z-L6Xtvg5L_2nVOm$rNtFxmoANoioSfsvHAlCD)l3&d=c7Z<@Emi}>met@Y^4t` zwZe|%IfJqxBwU1*{Q7sRUexq@kt(Yf_n21rWh1$I88l0;m%WZppv>2Z1}&ntW7ip! z^^4=PUyuaKijpvaqX_e@y1p;f17#hj)}d_VP0DqL8+AgGTzA)-y)=_thrh{n+#_?2 z5=3}T*tr(xx|~~aOLJVV$}zcKmXJFMB3x2HnB+Pst|ck5TrZk+b%0cOuGI?P;|yub zP!>D@BV2Q^F6Y9Z8M6juD-y)Ni#DA z#X93=Q;^7^OwDk|XKHyU^MKMFeaq*Xq3rc`>x_q->@Uopj0d37dvlUO*^s0>DkH+& zbj}UBsp}#W^4>kd@Yqiqpsb$+^2W2$xO=}!Q%x^Tsj||vE;A^59uYU(ALuhnFU>D~ zqzTIM>)!d<1jtCVC(Cx& z5XoQJ3Gd#)l?yL=gN9dFM#EVYBpF^UXp?3;O&@ZHr{LUgn#*bFn>VhX>Khjv-EHu)^~lEk-6}E#;ieEw*+wk%}EAjdhU~KPm3^#wR4kh>bl5;@%jaX;T6|4Kv^dVoS9~LqDA>%?`8l(wzHX6O`rGeKzabQQ0iPBv3X^Q&1)vJ~op< znM{DP5hJmpXFH7p%C5XYxN;UkW`t+SM}3HckNU6_lsy+JC=+dlGIPd@)$ZCl;ypC$ zVPkloxjw~QYgvkRFxOhTU2a`x}(ad*BO@1j=S4DOXG}S}~4CzEV9+DD>&y$64&ahp&w8%= zq|b6)^p%!Lh38tWu)|N+f-*}Fw_x4ZfRVZIHpZ+$*`Ne`yU+S4{E%z2B+0ERy%O@E zi}e_Fi*OAUl0cbBC`mIj1v{t9%{m}obSP6Z9Psg49?J4N`ae%-hO!^MQ$r(tDJi`2 z6L?^jsRtBPLNX{@l9VG`k+`zp+@hPhE;3=fzE#nD@TvwV3#!EUPfFwXp(;%^y)>oD zO4EAIpzQOX%$4SnS$b(c_JJlS%ddMN>l&1;D8dt6^;&1E>MkKJ~F0F-9f%D?8y)Tex!Jl>gLF>z9VJC`dBYhU(1` znm!~dU9#gUum}gI&dC(6*SSIGdYm)I<*FPr)Vf_~UifAxocm34*(rTo9e3*vCkt$) z4>h&IB_tz*wRt35bCvv^2dj3}^xBass~z{4!rFl!&(+SXS$gfvzCVFAUn6R_h}s_8 z*I=zh93T6FB(S#p7bLtnYoS(*xy;yGsnn|w5 zWydGLL^w)tPNr~E&Mi1M>6|$(SLK*oPq@y!a2WwE$@PlG8keNcay{ZJ&5#PuwOZlz z*RBO?mL6`wx~~Z%b77eAYp^ycK^*s6ABEp?ZI&dtRb^O0o_Dbxqd^g_p+XW^GYKVW zW~QKY2i&X=QgT>RGaPqZEe~rRP`abvH`EMkck0eg9oF7+JRX2e`7b9VgS8Gxc~nLu zuCzMW?xwDbOvqG&2*X*`23VUWfur&FmBuR%QfaE`r72Zbn$~j$Yv2E9t~962(o6Ft z?`?v${JKM|Yp~W$FyL3=iaq>cv=-+h(Qxw*GdzEIk zeoU53>Pj$t8=Ix@>_VvUOtcx#%vl^Qxohi)Y0AXm`iiUM?m=^{WhuJATx;o$SL4|U zugc-sh5uK>Q8X)m%!6-kqj^ZVaA~*3*tkTTNevvDL`Y?b`< z164F?deKOg6^(mL%lyRSaz#@zOD~$`cPDt}YeYqhsO{yiG(77O$8%(m1kbu8VV)fk zUQ%~`cd7@^eotR1p1pY=<$C3QbJBuQlI!+*vy*0$>v`Gn2{0sNH#jF#xFzRWom+Iy z9G9zd44y4W$eF(g*AgH}u9M=Ll_Jaaj9FJlZccNpRyh93weW0SopA5f16VLJ7p54v zhG&Zs@NFyWqww?t4A0!EGA$twx`^-;m3$OJXCll+KgxBjA=mb zR}Zmu#A}k`aD87@u3ri_X3J7^98Sh;>5f<9*#&#&@a*;v)o>K8Y{DOJtcmcbE&j@d z+MXI?^Ahnw4kQ_4OZDb5&18&C$c`6sL^w2cPNs0v&Mi7O<(xU@g&Y%BCtYV=I6H$& z##oZeap~i#B4b3Be5C=l)$vTN@C@>t;aNWtuDD8m*_%`}YI@N~l@*P9Ow0VD!CcYw znWYy^=Mf2>`5MuPMbviGUWR8w;&^}zlHl2ZBz$~LggK>LKbY#lvu%#8KTUiws=DvvvvMc;5Ob?8jAFlH^vEAR$k< zSdY=72v<`f37(mRk~A|@P^=4XHVYYZJX16L{ODR9&+AgA0@T?>$566fw<)3pSZtA+ogz@@mgyF&OHQ-q<31mi3mf?B5Dor)LG^NT))4I&? z?3qN|a5JFCEWI?N!H%B+&UNLNJUa*hVm58%yEYzEI(rXfvLfvpDK=*VYj)OIi;b!;a?q{pMQBQuLqZ zT1$7l8qa>ik!HjB=6`6nGm_+wsV~fJ)B`COwtcC_Sc^oQNI{Y@)=_VE(M-nJ!hP}( zcgmbYQ|Dv~7o2N%Zpk@w%nLattS(B(y#o2ha9DrjBRdd5Lm8C|l03AW5!A>dkSQNv?ZjSB^^} z93waxj4k&sxmVOS5`t6Q1SQ zZDCzIK3i0TGu)K1zw9#F6k=UQ6Agz=X0T@FaWtW|xQipgqY6eghHrdd7;_OErRn|z2^F>=32{A^tid!(jBjcwI?{>Y=E_W zwD%cMa?3oF<~U)&deP!Ajot8r6=P zUOQ4{wc{RBSZjHIu6CBp(rf3_2Pd%RYedV6A#SU_*kEl*953uZ5?EW1gh_@)_$-g> z7gIg3b_{)`r=36JXOj~xH=2SZxt^&v=V>On9+F)-o)zIx!8w`2m7JS)Zp1lrT&~J7 zX&ZK(dEtTrT$1ZW&-I}6S*{0srA1QVxmGJYe92m{X6fNBtos@^G8bOK_%&D?ksywH ztdGJtmug9pTUGic@e*)@4*AG>AgA0U~T131jn;eQpT0w+_DHKJH|yOjMsN6n&SBlu(m(~ z`EHET`0;&JnreD!N|lwSb(z81{~nbq&3Uu*(!A@SCRod_y9etUthE!24%3QUe9|*$ zON1&s6AhpLMuumy<1lSOTf(gzaU65lc5Mu|TqJO*!Eq~qCASC&hFb(Ig=ZU~!ZXok zJTqrZ=i#ocBi@-zTo0M+UzlqxOVN$yT1$7l8qfA-dgt7$r$UE9an=zI6`$!rf~hvjX2lmoH^!&91~WHt}`#ZkOP;D zu_Tv0(#O>)x9)Z_!&dqjQ!9L#WMp_Yjf88jlK><$CcR zbFu_Ua=lz{wynYil;}sDO6`YeP+^loKxf$ooak(nT;Muh6%nKJ3;F4S?#Wg8? zmg@;$X_8cUuGI=Jy>Kl&v-EH)*0wvIHZm7Jz`!*;n~{Kz*jgWjSuWL*B)6)JOUSb> z)?+jx!X;Hmf@db7B+bkelpX{za^DOFaQ z)@6ogl_PVdIc}C-n$KF-glGA6-^IFyXGMY$o(*&HNqE-bywUKJb22=W9eCDiB-SRd zvBq%__2~HmmmLxE#0E>A)qZQ+L>MPZQXE)GSif1q1QMqoHEhk!#B-dT_W)ICI*Gs&NPp-RV z&M|@ruhBZU;<`@fmYp-l<*FQmXF)=4Ac$~50b!Esq_`HP$a1}4*405$;ki~T9Qp0F z@N7w)a1Yi42u9|@*$iC6vtGlJcyKNL=Z6 zZoo}l7nzW+OCk(Y6AgGaKmteOqm;(mUarzq(@RsTtTe6549{+SN3Jyc&C*Nr^}S7a zmS1<2bq&u(2u64|o!sW^b3PIc_ne*Kne4!`UL&zKfsHi|(Ao1mfy>(v@-Qt+9?_8I2=9oF1 zO<3)8oq6F(0$h^oq`2Cp&vM=BD|M3!&$U|Ni{D%e&n!LMgZ2H^X=E;3&%iZ2>yjXj zmuez~PA=7wB)6)xs4Jdyu^yvknQ%!JlHi$1C`lWePrmGn0n;!wt%w;lNzZq`673qjN;#Rc? zk2DzB7(V$kKHCzV1;?Qp%LK|kxfRpP9wUeRE54Qs^hY%%`9FdFbf=^nmDIb*cEaj&ioJ)C&S$fJJeU09XT0bm%-fuNhc!#d#aVOB6REi=@ykK0^Bf@Bd zB-LyZ9t$!vQxJByn{`6Ibr}CGZ}*m6Khs-v6MQ)}7J1d_TlUHqfTTa%WkDC)k~vG@HnEkqP7V zvk1dS#~TLP%DndaLoCDBcGF&0)Azbm*M0p$0qrMW zzPT&6bMpRPhri7?ZT{4z?b%`*RknUQs>Xd=MAA`MqOGwK4NDit;>m$=98c_Yo(9?% z5%QiPOJ1cW3SOmV`MQ>EE7ymsq*a8(1de)RR>x`2=? zaxBBruG(>G`i_$-+i?~~w&Q-q&s@WehIzB}9e41)HY^4#w7A_!;XAri#pO+L%d{~ zcZ$TbMhZ_OJcjEFcDLcWEFr&!kYu<@!T{Au3|A@O0))60L^zIuB;lKcUo$Bc=&3D=YKmlT*sfK6423~{=ymBI42MvQZNqgyI<7s5aE;Q)#_)e%*FgIy9Cy)KGNB7mFrf>} zEe+Q`t(SQ*j^X-T=2qadlIBIrHHPb@Tjz%B(wl4AS3Ty^3BNJMRh?8ijVs(?_e~<> zsC$GqT(9H4vUWDH+Hh3^z88IcxK1GCf)mT|ie0qh)bt%ERkq_SjBLm4wl25h#?8`q z+_|r`;aarN;uR*HD#nF}boq>1t`d$`Iz+hqX|vPH(N&d z4X<}K!`K^Z`Qe%m^fL#n8m_?ts%X+NcGQ%S!r_F+a6O*8bd1AA33;Xkk_=Z#P-rEF zs}yhx5Yjm#!l^qX3Ew1~x=X>qr<+Z?*(Btf9=@94Bj@IZ>w!ejFkJ7{#&KG%b@}v! zk!-jQisiIigwt~82FxaMU1UN|%Mpg{Ms2wIWF#f+Eu5Xp3uos>V(W-= zFma68SDNcLz%kh-%Tn}NbFHO2UVV1H{2$tP*|f|r>aF1@YL`EX*xW`PkaFQ=PqVXg z<_M#30wg^Qm6c`_194`=6I2%Sde!iyQdes(SaXXkf_6i(9xKF-d~ zs?wsaI6Joo+u?ouA3= z!UkCTkN?60S2N|GZwVU7U~N(?uds;3m2u}L%qDVOWJ1o)5r)^E-T-TTB#_BkmBwQ_ zRGMmfX-buqrgfRY+L5o%m1fZ_y)+m0Y=X7?x;wG1!P<->Y=*TGV!@hdIR3L4teH6{ z30jK>Ek!s|EZqT`L=LVcJ$K|RVlf8b|nHO&N!zH;+imNDnmg`<$sgqQA zuGI?9F0BP?mL49I_WjmxWG)=c_%&D?kRXmbtdGL?be)g$KC`OyNXY9b)??Hq!UIo` z1lCMKNt&4{DArClYlnQxVNK2O#{Ft}Sj+F|SH89x)_%)f!-jXo_UXX`u(_z95|Y8% zqNLo25{WDG&Mmm9>mn1z>su7f(Wf-PS_cVavR0)r-d?4trkAEvS!r6&8LW-GCRdv6 zX6dE*$nH(BmS6V()-_mLR)jNu)c)o#J6fAXELal_Umeb1&CK}-jMn0LOSXhI4jt3QvE=Jm#KhOJSPIsj1r@A`Hp7}ZW3o+mZ5=V6kvLqRZmusi*IM$WEOV`; zJ6;WIZ(;y7z}hGFt>Gvdk-xGNUWkP&7f$}ShFYIAT)KoLLv66$9Hy!KuxC4E$0J)J z9H=@cQ@9@I2Au15&Kxswh6$@(t}`#(LWOg`X)ZgYkEMU+YR8Pq&y=Wk^D5hKSe>TI~i=HD`%jPfde-$2pP4CS~25aq-@rGGz%#gF8HU0T1g_#t{}-!o2)mdY5I_;^vjMXw?sHlbxx*mL(WY&H|U%> zW)ck(RtH>XUYJA!&i$sj?2|sO&boEc$vj)>Lrtx)Kr%8|n?=I)M#)clrfNq`uN|qf z+HsF*wIBD&T5e{~ zTj_R{-uHm6F6?mJwmDckb#FWXo8Fs~4AzR0@?MJwUzu{Q*G*j)nJ`{IgfLW3Xn?gT z63Aq&N@Hznm8P0rno?z@Xz>2925SQZ!(mzBflY_n zE#YqGBhj#Ye1>PT<9bV{kyx9+#u^9c^n6C(vJXPO!N8KwW)TdZ&0;A$I}a*66K%#b zbHvSz~NgB4*EkBm--)-V8L8F*Ytcp4<}Q2-P{6!c951;M}Bh=9t+tOjw<8oq6FT z4K5jDNiIv$$JG_L9&s|xR{9uIE3}a349`kPxF9R}B~Mq;sOd!`RaP|aF)j0R_sSK` zh*^5kJa?xA&wPz&*dl6s$KMUl2F3Bx7bL;6eo6RZr^slscR#y|{2olH97Y zWZUJ0+X3RZzzRw5%p{bgnVEuOop-Yt$oY@1Fzi&rWa z`U^kW0}s3j>%BS2@T?>$52uRoCaiNKZtA+ogz@@GgyGLa1{J5+BQHZFkQrN*#%&8K zO*OqVrOHavy3FuwDV-aBZPUYeibL)M_rkOdQ~LqanS^m#@kD7XUQs@n;9_uqLL z)p*sI873gK`eBuUzbZf3!zyPh!{EL3>V!jR;Vt{JR7B3uPAF6t6tR6>$EGznKh%*+&o-RWlSknegOsu}j*y_T=Te%WP# zzMMcCepmTb{W7rIaA|kXm$E(peH&{5&_=Qd5jNW8Ai8KV%7A-N|hzny3FD|xht30UbFPX{&NSb!g&iOR)>UU994MwX{y3) z+4facn0NmI+^Y&@xJDJ;u{l?T+w5Lbex|KgC)_DCuIi*RVO-(tr&|>o$6*pe4g*@k z{oHxQK@VGERj3C14ElN%b|d6kCd+WtQo%Lnb&(0<^?eA#?>^Fi zg`LV{yfe%2)D|UHO;4;;Sz@irEZ%>;B$wC@v-HG%bbG79P75Yhhg6|)RN)hL`u8D( ztEw>X{;RlG70PgpDtspggbi32DZe~MX1zM$X))ufPAbd4RC)?~+D*8~IPMrBv?@G? zJHa?;XG^RK)ew)1dKI=JDvZTtAWnpB=x@osuvRcg2ll3ORTo1@u zpz*v%__fEZ3e`1L7$oE&dlByBi*P3&l2oBd_!TxYQ((5>X0wnBy$aO~`@E=@uflww zodlZ4!vC>bCD}`lyX?yPJb&SRImxPUTv8sk5#cVkb0s%*U1UNYwm}#UJGP+;S2ilK z53vlNeO!rE(-SLImRRdDOYG2#bBSFxOHb@3o)_U4dDw!9)ghr7M->i#R#S;f2t!u%BDNIGANi ztP0f-kG@`oGYCiH%UFh+A5pT@^khkuCCkFdlC^%9T(YLk(v!7sn^obwg%%Hcgt4wx zaSKr#(|?FCucC2LNrWqXkfaJt!f&vdnS!uK+-wLk_P*Y$U6~Uh@?fMdC`gb3JAgxh^sxFH9l~2OiTB*8ROO}O^C2PMI{+O%*On$fqPkc*4ZP4v?e@O~P-mnMG1yw&-T_kc+(v)ePr8ua>XEe4uCUyt)b> z(ZNA|HqZF^tk3bbyz_x5BUu$rh~>tSNL(p7H*PkO>mm~}TNJ`@{RbMVa71~GPi7f5 z|5J%o(-SLImRRdDOYB`cOstWV&Pr<#a zP=;$%;p=L-Dm+g4NnJ$-og4DZ)+{SF<>OC!sT1#D_#-dsdDFn2&dD=MJ8mbY{jzw`x~mTUwMq*$uj)! zKa^NCJ+V?{iM1}Xc>AB1OKhK6dSZXc(~Mx@q6HJHLqao-DjfKPs&E&CtEw>X{t@0) zQx(c^jViqS54kG5@3}SQXV!Xk!tb+jRVS4x;|ho95*XuI9CvUbFH#k5+}EnG$d*_Y zs)5-&`g#@iBIG4QmZ9hGN|u_QEUB_&Sr}Qe_GD`sE^GCer6=pV+%e_2aKS>0M~oC6 z?2ONs+P>Zf%HT(ilimg(l%Q*vw2p*d;d`hJ4SfP|a}mb87i2%m;efj;pKi zjdp7=yRCcb4y@1dw)f>EtHPqB-2V{a{)cnDZtA+ognSVUVW=L}P=(#fWBhWKp|-5V zs_BW9Dod<&nI-nN=jIaIWtN`Ux3bk#VYdYnt3yIFjw-xkNL6?u!c|q6cmE08s|sbf zMiqA7k*mTFD8KxGTCYy{eKxM@q|#zs;o*N-6&lAo<_N6{d%4++gHE=@s!$E_=<8M3 zfsjXgScV@zsAQ?>$&xBdmW7ce>w+C}$!a%CPu2@L{iF)JEVOv>=lF;VC+PAB4}(fL zT3L~hCo)7hdlKP^3`kOiCgC^O%uIpVlAA3+zVB72X4vN0wR{!k1AXi{tE+Ic4i4&A z_^8(Bc-#AOl2zfPq}-1Y;ZacMCfw9@kqP-YI>NBeyBn&oRe6k`#xlI?uS%?%o>-}} z#9EhGVh<+XhT+{}mY&!fxyL~jmMoZ99TJ*xRN*_1R~7yO;i@XkyMJJNuR#ZHD!l3yR)s4!CRL~gX2a;~Rk)0B zH2w?A@bU+gEHyn@Qf0}qFtTLr!qzk-E10DxYXTUi3P&uoxZ5Lq@P4a8bxjrai7;n` zaZ#@b7uz986`F+KU^6oXVfVOM7vu+Cg=&Uq+giQ~hh&!p`l)9pRk-PhRR z?by1xQgk)KF&r})u59Si7Y|K%Y}E| zrkkSuPa&;vn*2Z|&2=NH3ZSe@MtmnjgzscHCp)-a=LVhYan8K*oeUFJyIp5q zxEu!OezpJOPATIP#<>aF;pS6>>i0s`3d48ZO&&HMWIJ>c$!Ppd$zQoim8GWdP^q*- z8(-=<1h?ru$A9EV=^`2 zI`hK)e7Gc|6jEH0(la{Z=HsL$xs$KV?S7|awE6q7WTmW>9Wo)b`7|SD^U)LxTr_M> z+kXFN%hjMbN(Ex@$G0&g;ew(F_v2kZkm}j%G=B^PzHvs&V*J_3;^>BO@-u3yet{bI z*zs-bv6I;!o44Bh+T3ofkJoSzMmgPbeV6ZrZu1SBdA6jzaO|8vW70z)dK6eRJoANu zx2Q;)@uOo+#?O&|Vf;LMo0>Ew@?}RuYQT5P^4(U7BS<)hRzfcVUO9)Bz(7tam7+i{ zmh*Z@Uw>u}IeZFQM~>ezl^-KjUC>jn#Z=@Aiq3b6@CiC26=}nvzZFiLNN2(cQJ#ZA zvFS86#9|y&NbxZ&!&5CrH9bbDvKZwqi;>RzwZ?^+2L_#S>SZRFr}6f!npQZ)YuS ztSBdQC^%EIUiy%XMOu0vo4*M(K8v43c}}76v0t!j_uIOr1Q*Q}30DJt`EhNa6Mov@ z%7yNq+n|<)hjbw6psqIq&2&)9jzKNLpmuK2xhdxsoSSrR)<{*3HK<)TF2bOOxZk9L z;*u0RIAUhi5huL_??YRy@Ydhi&_3Aqeh(5p_$YbdPpVKgeeX-P8Z2Y?oZ{v3){MTp z=*4!7>!M+cq3!Bh9R|b!1CaEw97%uy5n#ae1F4=7|KVrUA@jCd?6Dj->V_oQ?X5Ta zXeQZRc}%Y3qRe?LM})_6oNITk$GKMLx{OrinC!N=&b;tg4qTF5FS&SG?z8L$aeNn& zG73(X>VBDhe1wr>?%xylFqH;mBWPP-qvt-#@5XTcZ zkOV|$CE>%hBBK@KD7#coP0;*_fvA=ou(n!98^Ws#wI?_4)(C^EcIJy)*_m7b5tR1k z?0oano&M<4^JuyXz5alD^R*7Bof{lbCkaY`DjKftFhHHAT_1JNypK_LJs~p6I?1B} zsv7VUvUEW0K*G7D5`DxURjz7!xk{CRm7Hf_6%Hb#1`ujDO9!DZ9AJQ|F6e2>Vq#zU z`cX+@9+x*#kv2U3OJU5mxDdvOmZGnsr~_&XGCn+bFUCJ!QjBVPj8bJW%3T(tz(s4E z_a6qR)_-}uL;$LjiWz(sgNAMSi!3;m#qp-A-Yh^>Fr{cS@-bTqQ16Empo%sFss|Dc zE1tOOq@oByyKU?y*3!m`@(v#g-r=)eH2d;cq^0+kXMP~*kgqrUXxjK&y#79?t#7)2>*S`?#ve80$eCuig>74|%o1zkk&Ls0&Cqosj&pyR`S!^t~@t z6QH{1bZmX=X^nvDx@gH_X#4O@4hiCb1V{p?vyuP_B0z%c=Tkj^`n*CNP*2^c?2fz9 z1SHAsRJ}PvGs*6N?D$%g2p8*}lPTP=bCb>uIcJXfT9gT^gRV0#JUIiGWOvH5+b?~V z-9BGwmNa>G)e7IdZ7o2x^ps=IQaorb=fb^=IRjJ|L`CbPZQbuJdp+W~Ob$r^wM!Bn zH51|cPppqYdGnC+}JfsQI0F+g57 zfQpHwui@p6R$>#biiV@NH(c$Y4XzR^!R~O%Jq*5MTWV}uG($QKSJi-Tk)`A6G!mu{ zR=%J3y{cACuUe@x%#!mAv%=q=lEb1Yvve%l`wfPx>VlryEhcc)*N>L}jX174sYn|x z_?d83^WO_vKZ;Sq&5DVP&rVw{>$qn0#}_> z%-|*YZ8_aM`nLSf>xHXN5=<%jJn}JH3Rh2q6RwIjQ&$X6?ze`^D-4kF<+Me?J5rwUcm_r6q3xaywMF?8UQwT1&#*F{B(q3zi> zI5LO>86XL+c1Z#h*Zlv7XND_qbl!U3tWuv|yBEx4qu%q?u%QUUtlT zfQ0M@=VS`EVkwk+9|?yZb*_{FS&SDiY&V`W?k(kO`ct~!T~>D z3s>jW33CB^01HOu!kLUY!&MhV)7D4Z16)ZWlu2|r|bzBl|42ke4rRyhBJvBkI zYPhN;xVmT^Z3yLmH{q&>lJ3lt9%pB6@jx{<^us%_%i*fmUh3vms1sa$3P-*CrB^ni zAz~A*iiT~TWw<&*yM6)S<##dowtLhDUmxi-TvdbNHYiKS)glre@m0Pryj@kRrdO?0 z8D`0OhFRfjkJTEF@p{eDvFP^K7_O=d4SS0TT=n&%eu?>TvyqCl;gC5&%^Pqbs1Yqi zA3{;b)ox_m++rEFvKZC$7^TW$l)EfOI`7mPe|@wjT($no>m>qLom9-==NL2`ukLIf zeOsQvw(y82ZcEWl$j59cTzx*Aa8!kz9Sfr)*u|-^cl#9t>-$!iMwwo)ER1LPdOMUXuR1vQ9K+1)E*4xNmLBzu=h|-Z? zZ+6m5N51SB`A9VKoojb)$+=eN7M)u$Qk7#4Jr~3=@_ErWUtX>34!F@EB+2e@y;-7}WVc&(<#%V#>&y#}fWRf$^^%Lbq|dV3=_@UhFwd@9;V%q0h2DGtz|zBn zAik%1jLe078FPlKE{Hm;kG9H!Wv^8nlYu}ITwQq>37@XB&MU@IcB!74K!3U6s+Qnt zuXVH`yy~A#xSHRYyRNK-tG@Z^PXG7AwLGqR?WOA9qZY1id*rO<++QRfVX0`iuGO$K z&<0CwSH?SBN1=opiH;!^NTFe=8t@CUbSzy$!c(ux@w$S^x{dW=$KG0I&QBc0D^jr0FiqsQ3#FRzyfEOk;bgHthR*p|!8qi@T#uM(Cjm{Rl; zkYSfkx_-6D*3NHW@kE4oDDsv^U>)5#>k`)F4yJn_>8ES*5Y8H(gH zw`%XJ>3d(QCMA3mMLycJKx~RiqXgmH&M+0%70VKiFm46`t4J^2daiBq}2TNb@ z&l)?>u{63|*`3!ad0*o37XO1d*||NB~4 z>YJb1{Sdp{F{;;Isy+*~AEWYwzWrs#sJ+A{Tonx;daB`SAMHA>p28es&7*J22lp1PDwtCAR^(&06t2DnPPi)CjH@0<)S-Bo z9nVNb5rk{5*2W&hTH07qKBSC-4=J-O*>}yxZ0UV$5m%3_vTMKeSKGC{<_aWLgKb{< zr#8?D7kO}6E|h<4BVQUuJ|rFa_2x27AEA{A*)j4(82QdEIXCUxqH|Nu%^Ru8F-SS- zI`hKFhjYKa2Y6*ydcN~ZWLTGcr5=L!k*`*`@Y)7k?MA{GisS<~Y45A)dtWN;{oELG z&*>O?>w}HB>bhveVrYBrWsVHuKn6&Hs{@jN3?d+d>jzUkxOyXAQ(WEaN6K!u8}&ev z>=x_Iews;kTV%)NU?M!*;G9h1I-KiuuH89v%vY36SZ#Hkd0}Q;xFow?a`DPTc*?T7 zERG*9(&X7yD-_qSg{zhxX6Ceg6So?f3twW)8Lqk@3f4#4-?#!r(2L@DB@L3`>bxZ7 ziYZ1b#!+^uo|>RJW4Nj%xY}+VZ3t)G--N6Ao%y*3*1}ca{B)-ufnBa99DP#teyAN+ z|K_Lu^>hCzViT^4hHamCl=MY2w82##q9NEFCVs}?+hMZ}z7Eo9xT*%0ld^PNZAUU1 zKU4X>WTUE9O|M$1GR%_m470+yf63u$t64f0-LZ$^s=A=3X^RP5_4T81iQ}r1inQVF zR|smJjtfDJC=*|xsN?F&pA_RmEW>|TjB0v}Qe`p9T^1vq2d(k<%{6+At^e|RiNIAS z_Q}KWOAH#0SN~)leOsQzwv1UYrRW~yW408o-VG;Q6>Y{<4 zEp4nQUw=Ts*B@Ax>>Gw-w)8%>h^tRt%C3FwCfl`(<_aWLgKZvApJgXp|Lq_JpYZ-Hft1gK8tdF*@&06+)#qj_sB*E2gNq7lUgii#xz9-dF6Et<_ z=Z!O3f~&*U(T1?!pPO(szcY6aYvHPIe!A12xUZJSRj<8NT|+Hg1wadXp6@sR+X+g5 zDjKd`F+lC44WRPqjR5rx-0=-J5Tam>JQ|?-M-rn}SvsIjq2j$bCHh_0t6bIea+N9r zD>=`=DjZBm4IngWmJULryBVOW3wrLbm;h8?KU(=aVxIOeQjs>a{8$+CEnEm=M1fZn zbwC|Q#_MP-Lv>a$s_8LGmBlD`S&Vc(qBXvKZ%u$|{g>BE1fV*pn864J4cl_EdGu{r z|6&2Ef+g8B@ZsEZH|w z$870+Y!Og@cnQ09(>=Cphs+fass`IUuRi%skO)_LAmzf{7uk@PXfB$Bq(i>moTZr# zdD$`KMHuqVO*=Q@+>~>}&P^Dp%CUyL>jp&_@{nZ6dj-S;Qp8n7hIPM_L4x-ouU2^c zCk=o)fP~W&$*;IpdtXi8`%*Ols(Vfc&-s691XR~WeHKI8aThxzhyxNJ37~dM0wjn4 z39j!+^#JP5f3C3u9Z*ldP}yy9qgF_g-Hv**i)NDD1&)o#Zl}z7q1ri_!UgBrom+Cw z9G9zdOuiN+s9T~H_G*a(N9*5zE- z#F#TcbwQ+0v=`&HA{UVfWl9_`RY4L!osfk2+eCP~*!7dCo|>R}l>w@j0P2!;v?1JE zYXVdcCEc07xqB@@%?R`~u88vu3X9_{^y zScVT?slBhJ?|rG70M$LGgXitFMnH94G-ENe?fhMb1aUwDBmvY3Nq__qAi?#MsUASR z1+OWfzUte`?w}hDL6Yo_)SKfplkE1$j`?#%_)NHSGKK4NZrHh^bLO~Qm1FYN>pJto z>lkoJcD>}{Zt1h^cKJ#?rj%q?t#IfM)&f*Z50lsXp6WF+7bX~U2BZr)D}s~6;q5>jHB#QJvH&*lTTi4fT|^cTC|QfgvuRFfSTW#r{B32p!(*g zJN+o^a)9c!m#Y5@bqc5-;OdWk=ANJgs7uhW^Ir{6muc6JP>*6ihh2Yfqi%^j8lbAd zI9rsZ1L`7@(fHR&^c9z@T-Ee)l_~=(InTf)LCRqGs`k;Z!xOrF-n!iD0f+mbUv*$p8S1{ z9%Jjjyj~&z)k(z+?!utq2=)8s(YIwMwuQT9xGhEBLq29p0qP}i0#wmvK=nYP8O0M< zom3P-_}GQo*o#?98!O5b0w|atzpE=2{J@9w7YbVVW30H${o=~5B zl2U|gJCJgr_gowD67g6&Bpveg<~YrC$jgo)FT#*_Zp67h=Z2jtIyY#fD#se~uImwD z$U~ALzwC-`k+`bJuz!pteW?B!~bBu5V5C0P0D2O#$`pZz#J9e>EqIkR-dI-dv%X zWOq__<#<_yXCIuCDcp>6OU_L@XO7ENIVN9It}`z@L=Tr_H(0Fkg!EZ<$9<&{(&X7y zD?HAC+wu{rrH3z6xUVTAbKyY7oB^r}qLTH|cHy*TZ&)0&NkbAq9h9V8F~w-bILa>7 zQxi0=F+kN4K%KUZHiQFy(*&pae_mWfo4lbVw zP>Td5Kot$Q1OwE5+VvyUZ8??=za&J))i8N9Kve_2SC$T_Lr9pYQ;GiIk5sN|dbvuK zft8$RU=`j)NDUw~XqFB_=V;bHZk3pQ)MqgPsJ?#GEiun`7^z4b+RhiodBh!7^-^R*Y(Tj8bJW%3T&Cn_1KvKfJw0kFoV%UM~@V>ZD=@F$N9Wa)5dC zZMm6=_IRWVx25RK$j59cKz$RO09CXZP(6^SQ}OV&n30Mi2%X>7#=eoYw6UVRErx>E zv{;s+UL<3-^ggx-s8@fTUHh+J*{g$KWCL;e9oJk}0L zhkU)cLNgumvSY}LFyx&J&doTtr2G#CEGm@`0iL9{HdaogcsJ0|EQaZDKxNdR?0l5)iqqZQ*QyHrn2&|GhTswIHh zVI6G<|M*1{pyqex-M6g;sJ{8>PQMDf9H4sbrRr~>P671_F8c^jrwK}cDjH6@#{hMf zcKrzTN9^Y?vS6dGoje+#s=+v$lBEM`D-!0AP@;GEzRFciFITBDu#)o(tU@axHGoiy zSvm-<)6{`H(_{A0jKu_?`ufp?#609-q#|v&=9|KpC+}8>JXH_nv40eGKwU=0)Br5Q z$G)c+)$|yp%3_qeEJikSNo&0Kmo<8ft^e|Ri2zh56*G7p1`XT7%m6s?ZTU2__3`cj zZc7pG*8_E03Q+HW3Q$Fx0o4PEN{WZK#f(%GLHNZtw6VN!X&Wob+hQnqO^anIT0}Bt zOYdWgfcoJIyY_-xZPzZCD-x~-aSy7qvJvOKtxuSC&&h;3n%CUyL>smz^@{nZ6&$^;TB(5qltXDQ0nJ0K3@@j=E&uakG zStOjFNdAe7wfEKZy)RW0pt|RD@VxIAjezR9Xj#3+ZF_vhAwe9F07(FKK@uQA1W0iG zVyXvF7x9_`YVX;~?xY({L6Ypw)SL4(lk5)3j&Dnd@Z^JYGKDKSH|^YrbLO~Qm1FWX z>^k$pOB--WcD>}{LFu#X4){vbq{*|ZR(Q|3YXPdIhYvgXo*FhX7cOAT8KAl#>bE}H zp2oFff-Z{VU42Lbs6CP}519xvce}nf)l(BRuQfo`5D6!=DMWbo_Z_Yr|4?K~J3)6Ikl& zM=cWbV26>4v|;G0f)^GBFQUAfilUCCC1iYrfn|7!#i*voC{-4t++{J+`LNd5j!?l; z>%Y8SBCym+#SE5j$!*Ig&7*J2UTh2R$KtjWeFFKIErq2YhZB~HHe;y=5-s0PXS^Y1 zq@oDI=g-l`evGyB!y(Gg2zq`*SeBw8BxAPpKDLOZFC1srzUwC2wS(qL=t+ZZUQlNs zs|c5MAmze4VjJxe@eDg89qskzJk4~p%Z|}5!f1DH#<`Mn)6R`JH)*6Q#~SUf8xmo( zLz2<%6%Y?f5myx%)&mJ4cpvQpw8C*;YrxWeB%GQ^{?hNNLe=!WFI5wky61GeEWY!66G8f*(m@_POK{RW9w9RnMiBP6Jlo?2ZrIV7BE2dy>J=agA zdTN5^b%v!{f~CPa;`_iiHesoUlJ3lP^J`&gZs>;>V3)&Euf5dG6LajnhG6bn+sRYe9s%$s#} zg~`%<$g350{z?O&E+gU8MDp9u)81Fp_r6q3fa;#p!E^l$jezR9Xx3tAJ7d%#!9$&a zB!D_836LNHB)EPm)dQ&e-&kV@>R-9=oi8Z6LvAz-NwQn2Hz#N&+3l5GIUW}ojR%~Q zDO|sEBhK|XXO1}pFk!XmI`hKY8gNN=z2xE^>9g#1`$|is$+N3gxRwE@(3{_uvh*;O zgYT)Lk-5+cE*PM?AnLL{+CIc(V}kAw$1D4g1W;QgVd7?y(TZ`DU8<)hXwDj-Y6+nB zSw|Z}VYUfS^E>mQ4Jn`&Hr+Oj`x$M${utq&fpov$glSIg<(H~2LB08E28w3!05ih3 zzS%H`pXTqI=cV!7{CzzHtG|Z%`wlv%K7U^~YMZ}LjdcFL-F%hoi?_-AeZ{$Ti&7QK zhcAX*el7HFoXfA9x(r<;gAqLWn4p3{)xc~anaghimiJy*hS_guRH!+6$UK%(VL7{c zF2BpKH=x60-7ItYjhmUxx3cL1I|^pvywQfa{HBZX3H)a+zmv}pYH9uvp_a`k2LlS5h ztT%^gsz{j5uTyrM8j7qjf!~1Zy4}(oGxwJXt6i=$FFdXU=YDNEzYZzm6G}jCyPNkB zt%HJE;o>t56nr|rA`)Jqmi*|iskqeieJYjqY2(;B1h?tHdi!+@(QTfvqK!4Dq0QV^ zjN5iO-QZ#cm3|ipA_3bV3G>K`@Z}ZPFGEZZ*xq_w&G1TKyYH#W=!_f9LXwOw)SF8* zlZ=*R#{r_q8WZ@rI-}}&|)A?;U(T`8N2}H-I zqHIDJ#EwhL6*a@2zpx|LUfLY7YQnB!yu-V=n;BklwGFE7$E0CUsX<~oW$8z(T}Zh4 z&oXQTf4TZEfgzt%Do&f=PtNOgdF3@Z@ar^7hm+)pRb9|ikHy3htFOOm&O2$tabFa8 z?1Bryp(q@R`Vnh8GTuXA8FsZ8)$|yp%3_qeEJiwS(HhSpRDRE_|MGf?ip)Y`q+$jS zT%FsN$M~gU-4Yg?{D@V-l%hwGkJ(b__-{C&qiBkb^$Gqw5T6i@>m3R!_SpqFnDl&xHo-g@=o2Yw3M#@rZRNPFuneSK6*!HdpLgHHdrZac!Uzp0|K27vA<+ z4fAPfe9FCKn9n0gnu|1(VLl=|o=X&AS`6o83OC{0taIbenPcAbHDR^nI`hH>2RQfZ zdw@xoq>rn?t%sa&gEblKYK0GvHXN}oA>plQ$#?sTDpXD1`%@J#h zb%8WFl&Te;Sy}^1ty~BvcmT^r=E4z-IXhx?L9}3fv{ktfMJTf#$~+{2)oDri;El+r zO~aetHu&*N19H{RhVDlxl=p#2oS%@$Iyno^nn z>745P{;Qtj!>6G$I-ta6n#0p*bfcfjMsseC$+`&+S$oXPeiJtRj9-n-FKkR0bG&9N-h4UPS|WzU z;*6rvU-}yFx^aG)){TeV|7F1u>EVmTm}9p15PsMX8PO-xPudDRTX)vjy0f@6L9bkx zU@08k8!8+XO>y*q%?D^~;VAIKVFz&WAxw;&9LsGCd&*sO3Ux4M%TlzLIn~l#ZvFuk zvK`kO+|dr3PSS4R!x{D$o`0EPryue85v5NOT`s(MSfe>P?9)MDGManp&HBNhPnXOo z9!lb~V?iE3bgor|vF)4=(csK+IXSwluIQJ6OMfCfafFHD^UTFTQm%K{`qd>ft#-1B zK9to8ZzmIMqW_e4AYp1r$sava6``hAgj8uo#O^UIioaf#D+>QX^`f|fglRw6!8X4w zixyGacRpRVaJ|-JdT`eR zXF!@wl5Fd85z5WFL?{->Ex_l&Wo!O_)O`zlTt)T&28o78NvaegKh*RmLjDLC5G4v? z>aU9nHjs+Jsyu@7h{z+A2BJ{hSgyZ)a5V@E5k$h%h&)noONthfQj$;*QYa94H7LSe zw@M0C0`zD9-|snd_uk#Tc@^a6Z}Z7LbLMeo=FFKhbLXC!adz*4Nc+`cek+&V1x6>J*qjiY(@H z8M&RGc1NU@yVyC>KwXu7`%Il!_bF}>I;U)MHCReUBpjj&Z!}(+a9+&2CGa;G;3gqD7SG6B3`WF z>AqOg2QStlp(#hh#{k?H>sI8Yy(?Mz++y;&S0nWS7+w#1&QUlGuVoH`7i&hxi!}k} z-->l9Hl$dmVnP@%*5aA&&@iEb7i(aK*WO(A)dUWe6NFiB&jTIh)*2qZ^Y1OiK&ff@bQqydr^-!K(hL;#Ti zcv$rtoz5Y@F3@jUAa@k2zCEYkGUxq+*_wCVLFWUp+{{jI6`Ah*Ze{zV^E>L17qAQi z>n7hqB<|h=2e1%%#G2efB<3OL`E&jNp>VEcJ*Kq~dB}fL%r8gf^<_ueK42ko|Jy{y zgBBuxH~B*3Yv)gEA@cSgu^`i4h`i?34UmY579xLuP|QKy(w@TBHgDUzptNsuA#$$N zXqy)zSGS;r{^wWHLX<=3hoFVXt!IfQ<;ec;z7SdU{osYjr!QukPJbbC=oa*^poPdQ z&QX1-vl7gba{7`!lPyGsf9>hZ+b|ygA6bZeq-}z?=lq4px#+!x3z5sP+zJKXq`Ybd zn88BiIw-?=y?nY0k$c@d*+S%Qze0;$$Qj=x_lj)lMql;K8o9dds?;YC<}O6O@q?p7 zr$x#y>Wi%8*n(d)a^Mhr&hDdeXAP=Sus*4JP}e69z0bcsi5gHFK8hxHE=3j0fGmBj zM%4jlyv6I2d;gF!JFWG}52EZoEmP&wGBaME{5{NkroBG-LyQ?XCk6RUcYX5gU!n;n zTc4~)1Ycb^S#~w%JHI|T3ag~Iy*_!tchIyeZj`3wvZORE9VquG=L-evlXo<;_xCX5 z|Hk^{+9kp3lNbMhtv{pn$#ZT(H=SU8^0Q}%zK|*P%+@C}pz6*=7oJY;%7k051Tk~b z8t~gV>)>Rk#_Ng0u7WiTHpc(b`sA6gwqxOo-?bfGV@C(lPzzveZ|bGQ{ zcS#G(qaRS816}%&ccwm^|A#`O`Su8*P?glo$H$ee1$-PY;^Vk;&V^qz9DC8N)Kv93 zxsdMLY@g}YC$nT4^(mcseJ(Ae`!?${760ZI<`>j1hg^_rm#OHjJGX!@|KjqWT$o=_ z`Cs||w97xcklw$z{MUWAfL}r7-!y&xFD#_@FE0NJi>Fck_f5b2mlo3d7ngr-VSYjU zKWPH_sV&yu>sma1)KEc>;?ejlmHCLL@oIGB7@;?Yj0%ZW&v8SdHsbbFjv+FdY@~}1 zhR?2d=;EW1<4)s?biL@zK}krAW6f2r?j)S5zs~iQw}SMUXCre89_cXhFvrc#FEKD` zj!#dRUv)8mmY?JCr;7QZDzn2cdaS8Z)}UU7HH=Wd*~bvnTLxXj5Mj+m2fJT$9JtFX z(RB6s2Yuzr@gcm~E0-DU*+%u_PNvPR{RS^Dy7KrPRR6Pm^^Z4BTKibW)2aW%}{43&(B4GiwOfDUFK7*lwt*|Bgf>+0>=&w7= zs~`CoEJf3wFHN`ozE+rTP(OYqC$rO@Uz8NmeJAx%(ERUA!@maU0G|Bm{EsSO;ShVo zmh7L4X2?|AKB!z%c?Hnd*EF8%tqzkv4ue9yKUw@|XBr{n8( zBbG}ZRaN=uO?8QcbuxeH$dfXbA8*JJ$}C% z^_}g@FSx$nKV^#cy$dRHdi4z$A1^)Kt8W$c+@vEU2jjOlKbWe2m-xyiV8|rA@S=s`qbOy(8$H?=`llWUU>ra`Qp<&{=6IVP~yukSRVE*sCtn; zzX2+_xWYmDJU|}WPxb2i?;sDGPVve!i99^<&1uWS#n9lz?3u1Soa`&lyCDyozLj79 z;_-ctspR1@sMO*L2gyT_{QL5MH|ksB%P&~|69r9OEdNlc+g#uFZ+iTGH|jgvmtSyw z-#j^Aw2SI{7gXjp*Z0zs-`)Do_2m~_-=n5#-}|8=r&r$q{dQfGSKogJ{WjZI9`a*? z@vgC;lTR|<-3Sd{%$`8~7QmnOlm5NyJd^O}iGoSeB>cG;8hqRNbF!~I{|@rA z?u2RaXU_Eba|$%@w)1D6uRQ+_{8@hdwD>cF{xu&Odz$Od&zs)z zC4D`;$6@OZ8(;1RrJt-F>FOi`@b(@ag|XJC1Ir_X>sn-Q-h4JvydHSnH#~mS1>|2R zYX*Ba$(S?ht{F&ikXtK?)9PP4I0WjvkQqbSJI&-8Ag??D`ewGTJpT^z(*AXiKa=Pi zt6)$bWdj7if9whkU&x}7>~!_aV~$uU@%WyvBdP0ic4;Z zNx6}1eKFqZe-qmgV@ok7e&Y#Cp}Yi?=Y>TcKWYNx*R1sa%lgmBzWm>T{_{H2Wg$x@ z?mq$Z^L1bK_))>ec_-IP1NeWkFF*E=;`fm=3WT9(zWSbkI!}AO@rC2w-TE%}|CJu zidy$$Q0T1f{A9^|ckN&H_&woxw|fB#CK&Jbz*tet zh)Kq~0R6scp;w-FrTu;R1-Jj#3o2iv0X~W$qPW`ATyHAz<^OKf_tFNBzrpprWvcpq z5<|o`*LSur|97Ll*BvueefOBEzW)Ukz0LKV>&yS$sPFQlr>bvas`2|+3<=Y#@1Di) zTL=2`-xc#EerBB=-ssJscUAifyw@4~3r0}W6uj^)64Q{zEm?OE&l^7j^6Rhn>bnj3 z9Y53j7QVgwzBbeRURdz9>UZL#`2~zei+%aY`)OhO8T*-l_6v_YyFqmLQA!fw>pMQL zWe2>;5L{EW=cX?O*LR0Rcq>d|Czqaz6E>G0@O1f=eS4L}!dt~CcB=f^-+}xtn?ZiF zw>`h|0~$A%U*1=Kb$?ZV^o5dG{nqT-DfxNbQQOQ<$uHGcepP?j^z%FLZRY3la@zg> z$hTKNS5^Y^TU4yy7W(pQz~WFJ=Ip(mc5A?LQZn4Di&znxD^~S=k>qT|8l~-t4T`bw zD~a$cvGCoA@ZH#g9A2>m!oA|KQ0vFDAEzljlHt4w?(X5S4g=2DB+Z6Ictb3lPK47) zk$nUkg?4uCKnV5dmh2~yEAlBr=M$Tjhq-|Eu+ic>upRe_IeJRn`YWxzmhaT z?X?vlGiT?G>=zx%>!^e|(>V1ho!9lKMPea>Ypz^IFDNyne|I#p8QmaH0H_U z$v%3Oe)+HDL5HA;qOud9@H>D3<(IFnE5CZ6uIkCU=u7ATt?cUTmm7%qdo5DFui?dpJbFR>-$zgTe{RPJ zGype?xz!iFgDD&q?w$Ak-j&+N{LF?sFTYwXPhS83FR%PH;5W2pW4>WCa)f{~S8CUs zOu8Qm#I8>?9_6pzad?S>HauU+^70Rw|M>E+V*Xyg!OTaLGkXnkW=|PoPg(gUd&*nU zrEfv*k!R`U4ctRRwR{*76tmqes#|`4X%{@_mNu0AQDJ$jiuu+51&?3Tkw7 zYb+Ma2aAfDYuXc`+e`01=IBt7bh{Gz+gvN>@i(Bnv!_|!@&iiBCoJplrzq=xOs}jg zbY6Lb7_X0r_pJ+m`%}TklHEr2Q=*zxHj)@6#K%HNV;0l;3I7t6xBW zzV7oLKiQw1y#5RkcQ}KIqeI&=90JXCY@P7m3A&P~mFP;2iuW&M5SnSTAxdvaR!4`}aohk5m{dPmy(C>)Hf(l(v;Ug*nz z`t{vACsUKQcYuC+;ZU!>)6eg?2i!W%G{42$l;3W-x2l=uSF%m{eR|!t*6-5KZVNx3 zd~{p$o4ZZ<9WlN71@w>QpYiJV&h(F4a%GuL|2WW>|Mcbcy!*G6zx}mdeW#z_liQr% z!fnd$r8U#4U!-_``@$h!{pzTu)p$4zS24X;&zvc}#go#zdB*hSPD=0VGp4uhlatkVml@M*pOoI}@642c2Tn@w zycyGb;h@RtyYGzYT{U+eD>0LJ|y*Ix-)A}x)l-}(# zrdKj4y>HH#-twBs__y1P>76_&y|v9V<=^Z{>0LBAy@2^%|0lfq^8Mat4v6(S^Y)36 z-f_N(WjdWD^!~=oGt5HhiDG%ol)t=xpNIu^ zcgg%~{rWHh<~`WNf}gHE4m`z)T6-b<%VN-to)`COM?Lv}}0a2(%ovC|yK zrH^xQFuQRo{=TrkSHG$p30aDDqL{dGCAbHx4E1B(C484}-37UfM*5xiAY?rIC{`eF z8as}#`_mpcValF$*r7*S28KR zi)Ku3`FD$zLs#ZzBEWSFf&G zD+|y3EXMC4&+~i8^ZXvt<0muhJY>k|gdL4J%zjx&=Fvp>Q4q=gHcx&6){CzDxW|tg zSuZl*FJay}!D>+k9}HsQe{gr8z@pIkC45q?q*h-R68XOdzy&0T03<*UT) zD7^c*@QFnD2_(!8PAp#m<=wPzetAb-e&@=&bj-ZwAaky8$!pHXAk5&^SY(;AJp_Mb zNkw+&f$-Ln?2dSbvfF3Jv)EOU{Z0P+Oq+CqyzgC$efhUU;!E-Eu(dDyUUb_Q^Z5hs zP2pZ?vp(NiBEQ~+$D9-JjY-ZFK^e!B^_xFB>raQE-z6J+<2y!5aoZ8jADML35Wc=+c_PR%x;>O+yi z5I=Bb)+#HA^Ow2D!j`Hd~1-T(7R=Z0oTl z+k>B1X07(6&muvnJS9dTS0}<(9|oj9x~b$J{Uxp2WiK|OG7MT^7+Y+ZqO$By6qRQZ z;b&sus}kX>{HaPa-+*e%oQ4O!dqyEtIT^~6_kj1O<<*}2RB#l*2m1i~Y4TeZK((7W zrKkd}r`PAv-<37P&-ZbOfiAtG@+@O(=8ty)={M~?QGKGt z^$AG7e8Tk4Oe_Dz6Q{&Fd5WAM?rkwDbGX^wy(m zQDy%8^6$&9hN4b$V0=9){1U+qCYHh+4$bjfP$Bp#fjOqy=%~tMFngkWl#qv->`^7+ z{=toRxhoCViw?-^p8@mH<$HPjcxTo>-yCpDP_+ITQ}+1zb6_t2_Ki^llSP+gXQArj zk@hw8Q8jT112#jSk1nurjgB4e#F;&tWl0VPvSWTYtcMcU4-bSNEt!wu9)5jP@C%ZS zeG6c8#VdD!67L4y3D^VJ6)s=V7m07bm$MLoMaPmtr^ow|O$SvwAV#x6XD%jTzVkhk z2+f_W{Ol7rCiHXYJF0?tUeq`ga^C%zWh@tdNB*`<9U^dU0-6ruGqbL--Qi`s1svg^b@sr!NhL5`l!K@97<4Nx$`Owi zM#6O}1h`aFuzKDqk!!ezALmibdL-NL;jU5Q~nty1VMNahrp!s_RvwHwy)*XVZ z>H^5_faYgHX?;fK`wY0lm|*Q#BE{ISSXof;~? z7BdsfF08{5D|09wIwP60t^zZ&mH)wlh(%m+6$F?> zF~_OTZ8>K+#-tHDrEOmyg)}rE6y;M- zx1u@HDi`TaR9i3mq09NsGMw{^)7#~?nhyBH?Mvu?6BKn)oVci0iexbq!cqZDZrk#; zaq3GVEG8mjKv-fLKMIf;`Uv?Jp`Oa!>)8SRpomll;7SOI_7QIAZBRkS=}UNgwet^T z$5tp-Po3zj$O2b`K`+HIIl^Jd_R?;2qCRG0mtHVS=FM3}elHo%U&Ll1+z!xo6gt3ps2=X=`j#g@m$Lev z{CqbeXNY%_K5pVAz||Q5$ZN;j(+>_S;9i0S1~ z)zT(*h(5`b1jJK<4O(UJlyJz^FOXxPTxkxuTe!MO2m)4(*_zx8(?bv29^skYcIoar zQN~glOYc{LG&4+ZsYI#9fEh89gT8U$7{kq7ROaaTLAhrtjlx6Bh7s<3D4Z{51svNY z0!cfIl7`OVR2VA>2kz~k(pkuh^6of}g7is#DFWvR>*IPE)Sz4j#aA;Bh%y}4|LSQWXr|c4vl5>i{nJZbo zB3beov%W5*_*6pKyAwh}v(L7JInQpt2uj?2(dXT5x7;9ld_*W)0x;(rtgAvRV)U=8 zmR8}nbFMdG++jqddllJZQg3~QWrV9jT%6{wH=}a|A-G!`Pv?CfrY@y3r%M?Ma;`4r zw|Q5QzJA&BoXS-~F`%K$=v=4qqX3zGD|1tQmX5!O%vlGWFeYL~Qss65TW;cVmV8)C zdl-^yY3XA5A4YvxdWExb?R;tGBpLOTq+HsCF+^@Aup8Gqe=wwKbEN1Zso#MVg+v^v zTNhb{(MJGY?zZm1?sABvO9;dq5P{KEe6sVrpCus~lIsP`e%d3~2^{1IoHeEpHMv62 zl}jbE%1ON5p^6K}BrQt+5VSa>?UzeP7kzk}6|+|eMwt4yX|@E;{-)8ZbE)ZK>WfWk zg_7E8k(6v%Tb$_Al1_Nk%fPtYC5B4LJz~e8Qt+yjNN9OFfHyE^QbAlVP?fhHyH@D0 zS|pTKI}NyOOM7X$T9Zgf(r%Inc8vgwVa~z0>MCySDmf(u#;r3EkdSB0+6V6P6)6H- zNzGzA*YVm1qXvYvl?=4g3edb=yR&&eAT$#KW7gh?6J5n;Xh~`21}Gb-lc$-FYS z5UYeV=vgWgE?iB<=-DQChjMXwPos$|S2p_NmShh`Tq$CydHrL;?7f*b?Us2#%s;b4 z2J(o_{ZQUp}Gtis5 z?KCgM8L(c#bALzyp>zFpZu4h9k&7QWSV^7Y7z+8scuG4I^vAmJ(48VMF54vlwbbB26mo4 zR9Bct2j25^F@78&9U7Uy`IylPzmwRagy3So{yBn)E2Mffs@95XdIb>wxj2#|X8l$u zBm~B+pCC>`o-yklge2t2fo>(RB_Bu#_?=26emVc6Iy&~<`hmb?d$B`3t7fhT$Zk|S?w`6iG>!z(~rq;OeG%(|V? zaFsn_%sLx!67q~$x4|bNPbHnbDIr9e)vX9)%Mh|*1M@!$99Nlup>|YBNKAG+o zKo*fOX8j7!?Eb=B))_B&!sA0r%6}?bQc~TBkg)jFq}c}&l8B^!318kkO&GIo#xwH= zGL02ZT5e0<1pkD^C)3;rxCChkW7Z9LW-c#GV_17V0uvUWOn4n2%S{-wy70_nZG*B_ z0a*K4D6^P#Eu(?8gqZ6IYx#^>zkp9do=TdmB~dM*eCbI@@wA$m-N4y|)KOWV`Jud< zNwd~!-U={y{}Uq&J7uTj&TdH;edZ%3afROCU858ToEF^bz_^#^Qqx7B1qh}ri38$P zrKuF4&PTkTb-ql}B?RKGaKwqO;xjjKAsLd30LsLL9w1jqfPoUg*=aW|#3i{x(3MLi zB5hSj0+~376E8>-UCK!6AnNd~%uW+HyMZXY+9VPrgbv_ijDlBG0?eHSlU1e>I&rtX z1gv&;ziET^Pdhy%kt_*G+9Aox9+r3(!<@G;3y51wB&VdnxV1B)CFB{i1`!GUo&XaE z7TamQTFJBY(yYA~5)~b`z&bppFwy_1yPB)9s=SER< zzFY!pJMQ53V}&ZlfcUCz0qGusK}m1InfYveIS#xBvDcmL7|}xSln4e zpd)h)6WM73XSZK(KncH!K=whxnDu!CB;*O%gd2@OfJP7^m<1x*)^!ksh@?Z7bO7%_ zG|#5Qu7hvuM-WU0EK5ovpOGl#mvLZ-z7cBOJG(dAa#b}F&g-qk3@c*K`R;fxb4uPE}aDMjL4J=iyTS_{BS27Cb#02~6 zq|T}Wf?V#y3$EzK_Eq#j8;8n&&hOLKAxMii4Lm6hp9Z9gB#c>~!ZY(LS0I>>)3*K> zP+)EeelpTNP=!zcnZ6~zTow5Y*;kEpC~}p6bS1#KRV*0sq|MOiVP*Sc?;s68Qo94s zehT3dzu%ELD*RR+u57y+Y{P01lPyTvWdKgY&cZ#kEE8+7Ge?M;WSLo$_W^Q@BIFo# zI|`cl^~~!s{tv0kn1HkcAa$Vwbzvy#@^QB=F9VmlNPMl!2>e!lUhDGc>rxjcLtPl+ zT)dN87bez%XXbM-EzNMUkN!2rwG~^GojCDDgl*B@uZ?Uwvi6b^fC(_jfcrxPSaxO1 zWV(xB&>BHZCc1}@t;0}8h{Ya47_(kRa6+Cj>nXU)SJ(tdFGQ0<)JdRkQJ69}>08S5 z1*2Ds)*~R@4RG#9P)0hyOooD)2PiY6Z-!bA$sUbhiLSitLX?$Z<>j(}2rromykv+| zyQA`w!o&*udqHLkUrsoBbcDFBRQT1Yb~&D+X}SqoeuGNc1#Lh)~g zbLEj*&7c2Ws!4LFCPSQsJLIa#)JQNct%TJVt?_5Xqx`2v9r>3X{qg|$WxB2S{Amx- z6<fw)Yl{JgJczevg$mr>eZNanv~04Bp}@&U{wU* z+&#e}IzWw~i4>#8b}h?%RmUlbt8A!4$jUD%8&aEv4NL+yFvK~kEXM|at#An`ii|Ra z4t$K&`8?vXI)o5-sSckrsm|d@3ntYFNLLG3RRwVF0hBf3NeNA)7!}n)Qwy`&|Az9T zO$C#7meg9oO2l1xv{vvpuSo@&1uDo8=iBeo3TEa(n2qQ<&}WG&t}ZHL4t0CoDdxw|4<--8mr;C!nm%Uamcs zxlL>E2}w;-Vvs5?@dR+2RGCp%@?l3N_-F5G<** zuziTK@-!{%;!RRmrb1yE;_Ph->y|CAHMa9ud#J_s&DR)1Ximn+ttvFJ5md6o8Mm9I zSyGD#?6iPEs{t62qWihIZta6?MI_Ry7D>|YEcxOFm1)~jFRM$99;;Bjk zyo&%hpEz&>v+Z_^K?m>}MuB|;fy>ca^%F2H3Fs19sZIgu4geVp=|Iynw6N(9L7oy_ zn?8mpD_gYb&wE9ho~h9E3~@gG9+gu_)dPhsIVOvTvd$z~uv$1gXKUs04tnvo9R6-->%jN<7wW1B==?d)=) zG^3(y#(Pk*;*8zb>Q!@jKw<}Eq?Hy6v(VqbnukpCW6{+mSpdno_T`Ds~^!LgPh=Q}IZ4I>5ii^h!* zZt5rsH)hNO&Q*AA!a-WFzl(+MNQCdev?qLfD|SEJPL^LULQlmu6yc?XYPyHS1I~dc z9lH^~yJ1^$1$RPl`!dY$p;daFj5!|(FV1)^*e*MlnwNQ(f4$^Yw3G8HBnI}w-+yZ>(XpZkql_@>WWVP|2)$bV zb-iqUOE&2iJFmO}?K{s`Uax-!x3P>+5ajLfU*`M;BdH3Me@x8FFM$8+UibJjG5=v< zeOmcNtJ_}%gQKUFpS@Z$DwL-H`iqO`yW7?q^8BHI{IC0m$FFI%k2{0FPRJ?ydvme;9_Y)j zDK?B#E+NF-m|a!SE*&Xf5q>=$UZ2DyAz9zG zAX%~?E^~z;=lX*-V6IBtN4*N0aW&xXV}CyHGK7i#KtJccKUaM7+b5vB?SJ?9(}be- zK<9U7KcJ`0s?P5Q#W5*wPp-U1+b>0r6U~LScx>xQhP$*iIlCEhhA)}8#A}lHY!Kdv zjZU$Cp5*#tQ{p`Nj}`NG-DbDE?Hi*ArhIIheZ4N=ybb&MO~YHa7SGQ|`QBb&U(ZRJ z?*$;wzW&0SH_X7k-Y_KOJouW&2k!gA%S;Vk%E1ncM}FjX9576F9Edl$wK-x;)hRFb z(vbyfIp2Ztf%^|kOS(gG{m?*okoyk?VP+vm`C*?yFZLPq0PkXPfOi4!aQ7kPEa%tZ z&>RRXgp~}5MVF4Elw$2J>o|Wy+H7d$0)U7;XAPD&olks7Os^_g0lv}Dfh29jj~8=P z+CIhYo$++mK=UTW32PcgRLdyD7rW|YeavqSKL?+*imc(wNT&;Qkd~PsZ4-e#YfeZ^ zP#cJ;O*XzXqMUXeeRTf-ST5M06@jOO!)y=E`|>D^E^ho(1BR4#LBttRN>q zi9=4p-GJDy62?A@a0gDr{mFv(;QU16Par0%Wt++^I4e+0Ws2(~bU@1YzO!!3t4|Mt z&3R4`GC-&+;XE-@aYZ7=ffBhAlF^4 ze>g~;jA-wPf(D!_Cf~&zEKf`zWA01-{?|iH#yv5~laBy?w!iZ4%g@j!-wr>&{Lpmy z`JdDPE^jCYK7KyeH3>hfAvXN^haB9BUQ)<+Wd}!oL9c$>G+;|MdI`KDuer(`0;yHl&?5p0I<@*2lY_q40N`R4(?xaz~a39 zOO@1L_#OG%DuLJy^zDs?uk*e-?>KJ{+tB>j0E$(OB2-0^CsfW)a7$Zi5oqK4JD&4n z>Ei(K^@M{0GzIsl&5xz{xpsc+ny`dj!%+fu0W|=aSebop^G=+165C6L6ExXq!j=tg z^&1i?l8!Y#UzZT-I9K_(y2L6HgGPN8nncNmpAmldfd)&Yb1`5Mup9HSQ2hpq7PKD! zVL2CH9a*-zh7E>rY(i|Ly6T2d5bpvU1?+@E+<+Xf1bluz=BHNzxdO;@K26>{fS0sK-r+`%* z03uH${*9bGF{R3r*pE@3?uM7j6RD$JC{HA2ed|u{h z;-mJcZSXC>cu#bw?1wW?VhWVm4aOLmCFp{g$FQ=IseyrD=Eu9>v5ApF5XRBSp{370 zSs&7GYcczL&`4N(=G&#-!Iz{&__>&Mp2XmjAJJL?X|P5ZQ&XgUa)gsU!skjdJ~dJH zp@c;DXH%Lv1}%-`?Mp{deAjT~yONa8{K)&{BJah>+-n%K7E5G4^CR>8`wSns(*6Aj zuiCV8N{F>neyV#UfvI_bJrin9d#0F0JEg2w^GkiS&lK8x8bc=3oYC`hYSg0T*Zez@ zl+XOg`{yG2YJP@9<}*KXDI#b1FxB|B#N(3<*bK-9B*X`KJbl$zyWV5bX$VSKd}<;# zAfxAJ_G7FY6gA+fl9bQ<$fxBZ`>Jt@MCLO;^5KY_;X_~7=Nyi*MOI=Dfc%_uD&+k| zHH>+q2uHF157F>NkQxNv3jsLZz)78AoK#0760uWMNfFpS5X9|T#Z>*+HHt0LFi}lr zLv%7t!u;~CVL}DQX26s#mAPHPK)W@Hcx4)W5h|&h|LAh|JkqzFv;jVGdjb8A%Tn>u z8Mi}BiTwvaplUhUldr!sn7x5-TP7l7K-ESxejPyO7vLG1$POcsHHPqrJ?rGh z!AzLD6C1QRNFO8&v4`p7?(<9u2HPGt9IscuM0RYE!WS%(m)RWV;CQ|IEaqmiofPl7 zwruXROZQ`@x-EN1vk`!AvBU;t^QhV9CqDQ(D$#UTY21>HgM+fY@ONlR*t&Ef-1*cj zNP=%L@lPrLU&V&4x}8*5Fz1bRc|x@BE+Rxx%|-xrtpH1we)2KOQ3FHpQVL*%r`dD1 z!D-~Eit(`Zm;hUk6=PIjwTd+2@hIycPrmHnfsNfYBm`{!>83^MFjas3g7A>oy zM3=Mf2;V-^8u-NR{pi0_hN47gPLvqx6D70v)s?34T>_-3T9b%0HK2tkO~NM7DU;I8 zY9V9strz_j{0hO7pA^vc4t?AmohiX|N2i2CppGk_K%g{-+~(X4sraBXiryjnNINBG zyN?;zrH>9%xKbJ`HLAG^fZdvwY6QT@m-x8*I(0iK_C;v4UV!^lzUXwG*fC$e3OF_} z3nJ$3BaPT|u6Q(0#0GZ~5$hyv4DbZH1vFVYjF?zKp%=C)0~isDdd?0wjfmAU9=Jh( zt;&iqDzFB{+7yc@CWNt7Sv=Eq8YWbr4T1SYtcHQuyP;956;z?sRmA9W&YtfRu}b*h zqy+kRzeEwEGbdsU^^2I&bww<-bAX6dXc7^zzg8L%({#ES)1FmN#zL*Kbh@|F=&TTZ zuvJ-#tvfNXRT-FsL&RP~j)6MM?8UV;BfDED3_45EYjmqJJ+M_7_I(hsGanHV(^#o- zdP1-X;+8`I!3HoQCO+7zEYTzY(MC1eFaV84xK$ZW=euPEB9_mwZ|#&XVxRndo`{{Y zgNRs<<|F_*6rR$2=K|2PB*f`Q7iHKMNU*$xLX*#P`N;hj?G8X1K#0ISzfPGK}NI)fh@P0x7 zJ01F5F9mp|Q#3Topph{A^Pr#tF$IC{D63*6D{u#57i_f?*JBNuzt` zAlSf+h=nvj(k6Aw9p(t6gfSi90TnSio$~h) zqG3X1P5yqRk(1p20X2v$F6>$TMbbfWRc=$#=8ofh~cBDj_UXzm@%# zzWbzlNXstWOS9`EmUOcd43lGe!ax}Sd;282GbOu6;e)-Yc*d;fBs)Gev+QN~nh!%R zt?!nnw_F@ZGgRt z8sNUak*ek$dKP)#P7fSU!QAZ9!!_?Hv0UDQVFikw7-Ilj=3XRu{{%kKReY+cLauV< z*p-;6M+Ri6u+@8IFycg$w#8+U&x}EP41-7LhC=}7%4TG8t}M1T`j?N#Y}wL~8h}^% z#dm?(v;n8ze*4F)2LP9RKYJd8O=ze=WiNa&H{5ps>|B|lhQ#m4TnS)U$r#RKf57T^ zzLZ||SJpJ#!!+E1o&BN@E6IL_7>RK&b@t;tc@rzUdU&XHH)vwFDxUsV>+P~X&)$|@ zNjc`%7I(LFbSbuX@-6y^10HY(yLhB@_vNy+ORgx5}vq;amCX2uq@7*9I3-y9UD7hO%=K;cKNz zsD||_ge|iL4^b9fFck0ejEkRy{^(+zWGhihdSvpTNb>t=);CbQPO06h4gu*Hz`1)M zLpq>T7+St!*RptO0Sby;glGzeXd6c9wC9|*hHdzUX+yK&0u9JuXZ8qmE*QJ276g(O z$;7RL=}z$(k!4<+d$*7sfpf_FH^6N%zS(o%20}~r%vQp;N+PmZD&fk0D03y2$+B;N z!4luy9M5Q3*&N;YFv4VemtB7=IITOq2Ap}OiFQRyHi*L6;aibO7xIhNYIkWx@^OBf z(B$IOjUk8)wr85sH}o-ylGp~t6E%if91{KM6y8P#36GMEj;r$|CRS&(l5vLJ*- z1?gn&S`cxfAl*`sUrIsvj9K3ldVDIiqJor}f`I3y%VxNt$VhwtvJBRrjz@C5q~dx0 zo;YGx@MX>caqBDaD!=$~D6Gu&c(@_QV5xUtX+Jx0=-v!`dzE@1hG9k4u0jrt6> zGa@FoGvb-AOdrTTn7u#SpS>@;iZP$Zo0;kKl9 zH-Zc}%SW^r2TN#bF94Q?DDxr?6-G+V3Vg1n-+U8CAywE?WM9dcn!Pyj{)aDQm_(WE z%Ou>*UNH3fgG~0jN@!|(Lz*bFB981y$@!(pzRJW=s2Wtq4r;^K5jA1)NhS0TKq?`^ zA|)i-LA1oWGi1Q|)?-vQ??Da;dB&{23q3xST9Fc3_97Zvx{9=j*|!$6H%mf3S&-KN zSrEdag6M`68FIu4zMO%!j#;mdOJ(qkS+5E`K9yQgLEgmK+WzTF=FjL4M&_Xlq1ZMe zaol$BRP{!DnFICqA{^xx{{r!|=OrcDG6(8ylrcrUX-ufMXW_Nv!fb;Z3+iozUh}BS zG#1p`dU`c@UQlnt8f*9LyzGA!D7SemxU1YAMLfJD;F+(o2BF*@FzPLo-9c2BHIbe= z*VSoByPJIg=WWPFY?=*E_9AvS4#B5>TTj`05o~8yAaq|2UZb+R)Wj0Y^v>wgYeP%0 zwR_UpULWcMJ=ZHB-2-s$T!Dz>LS&6x>LZa4uB;% zQ3YiZAN{%;qwm?cZ5{8BNDRpgWqyW-!C90{oOu2;;S5}{n9ahIc_ho?YnS~c9Jen9 z5>G`*QifRK%N)qeh4kX_^1azBvX|#2YrtoJNw$P>WEdyD%z<3BxXIcxXW|Q0=5##F z*k!NkW?gOBBL)7NH}x)h!h8`YGI8o0iKjZn#{gb#pY9MJTL60Ft@tv4sq~PLOSK5F z8Z-{`z^Kzh3@b;(%pt0niL0k1z=FAAZ3H+l0)VVU!RQ>YPRA40FE-(TbsC4I$DlB8ngKr4t#lFay>x^iNzv02`HOU`B8>oUoMX$NyUVzcoL8n3~JLA_K^U zdsV=(im`}PI$yvi25J8xc$opPnJnHnyEodTj=o6_fVFUCKVHz}=i@aBO>XC(n8id{ z9DucoX;^GImH}%bJSlP|a3rWEVSSksCq`K03i2Ziz*`4FG9>_(Hw?q;g(R{`mTwpW z2AuM7Ss|<-ntQK}eB2TbJxB~Z4>33?l$^6*tRRCO{p{2h^c8mey@1l2I0hjW$oc8- z)$d@0WxwNNg^otw7Q{PeC~_d&vqe z49Z%daHk5mj5;=qI>B$rNk$NHBAbz6E$Mm$F|k6tlo*`QRckoI6IVt&M-M&k1K&+A z`u!2PO@ev$VE85?KfnFkpl6R(fim-yMsHIZa@T7YXk`lfFS)S-p7mQ0HBy%SL%zLR z0R43XKKg#rGTxQ`{h!B>Q(@3^_q!cMH8Ab{Zi{{Nt6&fBz&dK8Jv+Kt!R$DEt$fjx z`vthF%Ab#4CEK3g@!OK$r4M-g^Xg~rgn@}7+GP}rmM|AAsGZqQcG+b6$pY#(ciZxl z{hPkL9(7F;^W-lezvXN4>NjEA$*u)hBF=Qb)xzn~-?sf$RU#dE^6|p`UVSPdkG}gP zDsvlhB1vq=SsPjR7cA&Tmc3LG+2KiU!5V-}_R;Ymj#Nai;Oz?77}d5TJBPaI!c7a@ z*48a7o{GNf{78HH_96ziXJw)Xe9=}kOUKj@^JA+HrJ&L7xhk3Y5@v@jWs`ZC;8G^@(g5?&AE!hr^g<|Z@{k`0Z z#JgB^_sbCEXvo<#sJRSh%Nc_+$MBX+qs&4;c|<5*sowyem-CfIxV!m8u^&a zK|aSP4!ko*D}5~cF=T8n?c@9H9hmUhv)))Db*XQ)yF8ReJzboAQh9CjR z2YK;~bnX>+gj*cWHCbU3K}A@05)5bFi@LiV*T6jaYSSwC_2H&I)85-?Ph0_#e3$3$ zgo*5lIZb_A_QZETj_KtYQn|eP#ER=P*I%DDHMPZY_T2MD8|gN=-6Gs2qH8yfg0X!l zzOj@ZHI~xQQ?QnfbGKFf$Uyih*6gW)@RNY`PY#5i!0fQ`2`st~F@MAzLfpQA@O`wD zzHcCWFa6|33(Wf_vXs78ETx~rTW{tRU$f=aFF@bUyU*>PV($*)ZjP6{FH7y+c|aP6 z6dI7i)?7`I$59@~xegagXP=x*J|e~ZTz9XRUmfxqK~;xAdPwrD6GedPW72Uod#Xy4d_V34yn z;xieb8Qa7D9X~8GI}%&G6z6O+4qW+xRxjORxBIUVP~} zyb1Vk^Z3Utv!K{3Ttx|AS0$~by+N}ERSMb(wpbU7#EMlT9avDIiN zv;#Q9-CKjs_8ec`OGp}oXz6*7CG-V^r&{QfQ~>cJ2Jr%r4S`s_rH?V%#Qg$_Ez)Qa zfNQ}Oyu8!tZ2cpIwwHC_4?O{ea4i*H`!h~&IS)<6BD)<|?Kq|H>a`&_tcRqNDFNuj z7rv%CVLrUskF9Dr%19js7R>X|`!qtGL?Gc5oe?bK3b2_H>=X>0`=Q^m2XZ4~LZ0|y z1ZLuk5uWVgD*)NW3EeJ!RQ4z>b4rNebzMnIMtEJ990r^gA-%hh<}+rcg*2Z^IQvU< z`j6u4x{{l7FQm=a>0crL;+8`TIUI{i0PA9aWa;?LBA4`nTmraq={ZN?RKBNTj0d?S zfLtmzteBX=CG8=_IyJ0UK$?WPW~5<41#$^Y>AJj(G8~6$YwR`!-KeEXCtc3{AC+3_ zEi7H|iQ7M?|L>vrlj6*20*0cZt|qXRt}8hA{3$>gbZQb&2A`9h(BPU*uh_6>eY;!q zK@&>{i3TwGpn*QglmuXbL&F!j;m`+_FM9eQdK39xrID%u4Bu-#X9P~e_c0oe;k-LW zH&&HNn^A$45#ZQ4#X^b+;bfYG!S`{oJ<~fV)Ed+9-3Xe)@EqSqC3d<4tWdtw<$UQs zC(sJY9vl&?1sE4F==>QIAhBo)sZ5Irn_c=9$QziXu~H*aF9opaC5F3U0F06lAGME! z;4%R1DF$~CA7EXoBnG($;81%#qceB&}1fDqW98b8xUbyk3 zp7=2!^#ozDo)BUWM2Lg+4toNESjTlX~tR zg+;(%|9rj3D?^|w0bF_YoDn!(d6lmVb{(TbUI`$tij^r=qgY6>Dgk;O1LT#-asEF6 zDMAt8tAL&&43rOGQ^&eb3B>4`S@#O)>YziB1)1f4lO!BD@RP`a+3 z`00iKJ<*~`L{H3-oY3H!&Jt@qd)B-gMNbTAC1_q}^h7UxaEK~FT#xjJ>UG1RC&rMY zj%LZyMc0wL_W+2*#$wK)OmuzbvHr zgh7jt=2Hn5>WQ-WY3-Su!%B$z>fzy>&#)G^P zKwcH=QmjR>PQ{uPiwQ`RFuJ@Nwb_e^L0$ojyc%9MFaQ_(XzYlBMX069D_zdHFrGzc z)A>XLe6X>L{!7!;6LjYE1VjCLLg~7C;*4hk^h89Hh@SW>ZuMci3#UM*PD(fHgI%I0 zYKY;S3;?4is_26mD*=wt*6?aK9C~61Il6kH<{I*SjK%qXgfOfOh~b=40k%+q^*S)acOz)M4A1esM-$b770P$IoVPwW zk)G&d&iK}=1sD=A=%ns8dSaL!wjGl^O1Fo+fk_%G)lE-aP$xNBodkn&jIGfV;sbRm z(e!*<*v4wKD8TiqC+Kt%PZsD2Es)#X7yKbePqdJh>IreeG>$$v;DP{pV$E+@2&(vlJE-HAa@jNeXj#|UXYW7g+{G@nYiP){5IDfH=y^T|S}WzvIT zl8_Z6n`CM9Dv?)yPK3MyxblifuDrtO$}8hRUWI~uwg*1rX7?vdE(8q`wdl`iK?5TTr&sD@A6-i!W?%c&>m%;^b+`t^j; zbp_`OPX*|SDorAK;sJNRi>9->rF644T`hW|lNf{=!03q>eK2Ds!12x+-r~j+j^rp8XMv?J;Z{55NtoC+Kv(`B;IT$Zzgr zp9s)4hkmgef7pjZh*(l!HWQ3fAb|&?t0%&Jo$ah}bd&8zKQ*vGtr$ zI9;)2Jcum;#8$Bu#p)DmR;*UBMFP?!40TbXVbuf>TL2@rhL=?gu+uCVVpl3CLoHQo z>2mhOC099h5rPl4$6@)}+50xC3p#V^f}wtOp>$n!@qxz!)WtZ`BZ;VsE3os0?XCvM zSniP0&02k>sEZIW$Tomc7h_nyhM-A6JS7-3Fgzt3>S8f+bk)TlE+^mnm}Jlz0x*0Z z@th8vhVLDW2eT>y+%={cqXH8vGb~~%)}>)WIGHA4aI#awgbH@Y05g0a6&CAF3pu_= zHPIMYp?s&yxe-hI!RkWTnzWU>cBhaWbPm76sEaOo*m_lgU3yze)P=@MwK1!t0%Pos zO~CLp>Y`bSVl9$r5`e~OA_nmRxJlIooz5p8DNq;r&Ar#UAazkkTBT!iDO>fiU{i z#Rthr%z0@^gv*-<)S@<7`ky})v85Np7Qhu-&*{MFiY?>mvHlcW#YPAqwu%iaMms&k z>=Piz^;2v$tb+hz3t+_7@G`~#TP$=DJ1Vi$qo}2dEnUuEaqvq{U5vmdZm*~R>)lir zbmr6rLs8M(s^+*5bk)U+j|8ZTVND|H;&jOg4X){|HYwe#%Ptdj(M$}o4Pey8BKlzd zN?^>&pn=_RsEaQ=>ZyxcI>`5G#>JLg0K@k>&)EQ{;rsYzlC~p^j_MI$jZ?7-#cCBR zQ%nda(_tf!*?TSVVGK#!8J!y%b!zZdL*8x z3pyb^F#$FSpzQ=h{DJG)cdvwJLY|mufXkR^;7N5c07!K~SgbCDm~FKwX~_tS0+Pdk z^Bp1m-$I&C?A{a7d@A8Wb+Hn{=u;Pec~I2FBGQ9VsF1aq0FtGz*&?>|g4hDMV(U2@ z;B>_npN=TDj1I9SfY>Tlp;)bAWr|e`NRu$dR>Q_g1!4=#h^^t}7z1!cqsDfK#nZj0 zrHULb+@QK^E(tqeistY=E>Vlzub)j@!`AM%0P#4{rMASvCY|T6n8p&sQ-VPQyWvn5A9%=97Z+SYzIQM#_ND?DzIS`hUN{Zk zn;0)?_Yhz`T`@)l)}~mOVl9dZ;bfYG!NO(@6Dl}g0hr-?k2c66hUfU+pozM`3gtUp z&JjCIq%MR#IKWbAH4DJ`CpQ~)(LxW~u9iGXkAb{Vr%J3;gr3;IA~{;M1UR1vz^DuH zfmW4h5`gxs(P&iwzf^TWr}M-E1?nQdxd(=V)I|kpsk#s+K7G?CnGyhXao=^SF7||X zPF;i~m8c7GqWfQI;#EpKQ5SSVdd6NQut@-|B^cxXf_--@!f+Wnp13X(T*hUYcv4;b z0+8y0uvlFPG20qd(vlI@vWS87VM6*9A2iJo^N*amh`|S&4Cw!}E~*PUbLxVjes!UAU3KxJfdF+8 z)g+=Wc95LV;F`{gNa<#MDkyb6>e8NL{p% zmZ}SJVuuNRVCz8ubuoIas*8((=hQ{Bq!M)@PV~`U6E7<9L|xDc=~*PeCIPg8V2Iy* z75nb#@Wf{jJY&}R;4)4`#FOgcJV2@o!eVtH#B3{~q$MM)4M+|H&MYDQRUyqM&OsE? zd@A8Wb@2@dqfcF2LQX$-TRYc))$VD}L)!*?TS)eO(^y-E``fECJjx*P{dg4Knv6*eB) z@U;R4ogeOy>=Rhbqi#cQ;X zMjM0YuT)*o>72i+KwacFcXMA(U1Y9!Qs}XjX)Jc^Ro+$^u_?{7CmkZM@blSmmR#=H zarPkytw7sEv^p&nv7KuXfEaT!l;*8^yuFyZ+YE%A8Vy}xAFQUE&JL&vkWo=d-AEud zkI6_iVh+O&whC|vuoAEjumZ4`2D-_XGQ9yp&Hx_8!6Q|XW&Je>h8iN#D1yP@UKFbb2i3H%p@)>JhozD$InZ#@pxs%R zy_a_-*&+sCD|b!B7aXbld`_WI?y+ z-ia>KsRkVsA_`WHI;GtHi|GpjBzrm#fExf21;S&tBGbDkPnyFatthh{;Hhaz_oPhee)dvGOp2k95NAi6m?f=7V{ClAXO1uim5k+x zomzDcf!8(a?1QsfouJeRflXBr)#3BN2P5%EF<;^qC7l0&`#e~VgL%v;ww_3?vdV{D zC(tjeo$sN9D8QE~dsYj=+4XGxjy$E1sHH0r>&w2E`uZEmoK=MGO0shidbO3jVFP1V# z;DpA*)A@*$na*6985&gPvb-{nkUbMuX)8|7%XEkhq~uJ-F6*xX^SdMQhC0A5z*<0b z>4qA>7}PboZA&%qDo-Q$&4!(wwM|%MOc83Npk)y|HAa{Hso_Vyikhbdi>F4#Q;*|K zs%LW5xTIM%A|O3XkX%(OAWeV~LNL4o5u>)T>2eNVA>u$cm@`BGLjl41o!xPoE+pbB z!rdx(;xu?Xoqi~9oCYr*96=yY3=QJ0lr}d+EJLr%T!g6EkLEEsKh_C|m3=N-mlq|! znGVc9=eJPu7L}sl_xjWGz6Dn^&j z*yx5eZ?q6K9sW7+Y{;X>%~AaM^k}l0l2Mv@#@iut>G$*AxO6yvl#|H*bGDewLfOJr_((i-8Gr!cqG$E5OsUmJva&uBe0HI7GvNns39bVn&<<_ zY>?Fpv^Wy!{So%8GruQqW-{tw@fwNDo0)Wfyk@ZM@swbA&2Ympdi_UQhfgl#EIW^H zW}*ynyD-#^vQtJLdJ6HPjx5`Iu&2&qaQOj(=5@-u!CaV$;K?4n0+2nL(CyI&We<`bt!WQXN`9q~ z77~0a0i5cUw+Ut?q|CQM^B3|B#%NLvcRZ{HhVMV;QXXXk156<>doV&+hEU_Igp(Wu z*ZO37VONk4mJ$_XRA3{Dg%lfBObEkxk{G@~3ecm_VNC=~>Dt0c%+nbTqbMPf?$Jav zz*ecG%ei+Tp8=GLn!*uK}AgH#h0c2L;2~4^tKnZke5>W!V6&fv% z)h(r)bxNz~flgwBax%Bk12Ou*7)^?;`-NZ!3{1kI2R^Xe(*qZLmwaEOM4A8$vs*l8 z6i&nUYQ}?A4*}L>6k}9ib&54BR;!p0hB2CWrfW1zsK6`(nBjYqHdYnGb9}GVL>*v- z@|`Z{2rOr?V-;xw**<3GY$#5Rki_?&OUw#QEj?h2M$Y2=dw!X8_oC@p=!7gq8E z-;W_4Exti~+h212o>np48=5=b?jUJgfLTb`)S^4W4{wIUJDhEQIbm%OtB1pOeIV zYEoH+cp25w7qvM%LAHI`=P))*JlussV^tyCoh&{2bP9h9U$FBJ=g>)WxRWfy>xrxx z(jt=ueBq}xa^o|Z)i%%hcjGk}tl6^UB<+O1eZP4hj10QJy$FlLT&kG`RxAOqB4Kt7Rf0z5 zaxw0X*f@AzZ>Wsevz~4i%~Hlhz7+?24ds*@HcSkNrv$_2cVOr8aAR>w_-v#sq4P+beDz+6+H~Z@R}^Q=pBT|@$+nSo)I(XoQnP_GYov4v*i`XF8!)}8Ro5~ z`c=dIxS`hK%?=j1ZYXk}OR<~s7C%#1q9@YVN1i*-`<2lFSBmC8zYk?5k8-6#@pGJuftKl1h5m_Ap=h?9!d0;2u^jBvwinClusvPUDJ% zQ75DNo+xQ?0*zuL1P~tpOVtUT&g`r6)k#5fZ}*GboJ5CCi|bv*8b!{EDAFiBjBBTV z2XJIBGL>IWqtF}T%}CTJ=C}!2Les0(s1_tU7}zl`&U2O|u10CyS2fBS`g-)S>?#_C zi!IbB42DJ_nx|1-Mg!qH2cGhs15mzm02XN!Nqc}&@@teo3kg2)wFA#WjdBCz)u&O` zUnLr)h2>4^xguD329_*+?nFv<9Yb*W6@ZcKMV_-6PL)7&|Cu?~!LDJd+*uFRiZu{G z&J`2F$utRr<&_#%L4aNG07};uPU4gs2H0tq46#EBMo>SMY`UE8XM7rE7(VzeLjOBk zWt~Gj%;bWhevP7ZU5#?>)d3o1NRx<0*-7lcp;0uQ-s5J^I=V?Tii1y=sKgk6(I_MI z!8I%d@swcr@Zp9-qx=tYbmt2hkGo=Bqzd$44yw4wqA zowes1jS{1Wt@o?hr7JHGjiRwqO;TC~uqq&inFoN;DB=V0lxPxw_Kaw>T7Vy^MxoQW z?}`GAlHc4tKP%KIRitCv`w`re(-P>#t7S?-Z^*F#IZEF79L#kXw5KGrb|xsA<5a?z z=L|9u)eCXZsUUzRRbNf(o-bmDBrx4eK3DFonbgn^HuY~3*joUoQ|QYg5C>HWh0*LM z_o5~^1cA5^1y7?$D z@K}oK`>+fIA-*6W0a+pl1c65okgx|KILLbtkOx7wC|lSxB4ALKAT-QmYzV?gK*WeF z5mAFU5>^AkOGJzTS)y!FwthaAs0eX`|2gMY&-8R=_`SsZpC;dzzICgrZ}r^1b*8%N zbd8_bl&hy$F=QFA9AZ0|z*fl#+x*=dNBNQ`P(hT1K9qtz#LxEr)7eLv z%zx{%6ejZD`ns6>!1AA0mFT0rc8dDwiCDf&`u7I9Xun4yv54!J_{n5y*n5W}V*)*n z8hRXri!tSZeWYskt8HLhTeWV8ODx8i434-m7GuSiy8xG)-+l@=?+jXrFQnTJD1P=L z7Ty<)JFUwpJDu%7DQ~n)U{KD=c$tI(03Z)!yCH(UO|0T^Eb{ehUhKqFJ}wl!9>k)6VIE8duZ-hlE#ymcZo?VrQX zcHI{kZ%pRnjiopxA8&RQ;deqNTO!^%>=eb@+jy2oyfx}F{Rs?llYZhQu0eu}%gl7P zngTstnpZ)Al^zHeZ_07IxMb|7!LZUpOIYcFNLjow87#d#7H`Fu`^=S*cmo6GT6`?t zt!H#y-aQmk0O}FuP8l+d>Xh6V1nzs57GNn$9bX_Uh3e~EJW4PZZ^&A%wF4MXu8I5% z%zlUzUeY)VecO%2_ixpi)yiclb%a;1#Nyz%jTv6AK*Kl*$1>q{?_ovZ^*Wv9_I<&- zi?U@uVC3gIso{qVB@&NoVbha_2V!I@yncO~!mAzkTj9k740fZu5MFJ_O#8>-80>i( z!;8s$c(F7ZUUn5>cx`<}iSTN*Q)<`>r*{xuJ-SRkDUrDN422gjgHI|H;Z`&HwIsw% zD>7YpwWyl=!KCo#lbV@{cXA-o7G6vSU%xCCUd5Mt?l)X`E!iE5OTc$tBc~lsKGmiL zxqes)QhU*S;3Vd6_!r?>t#?9UK5zoX#!y8fKOZ=rH@@VFk-d4Ob?|O$a zM)N!Keu^G1+L`yrPjevH$_XscKp@;eup^&rO3@{VUQNptP4BT1VVMFyc5hmvX)=jd z7nGT6urisz5DS_a)zqKH%eGrA5Cj%;J@`O2_+u*AepG`$oBHcUPTK!E^LIa)J%Gvl z%OWgA52%J6P5t#0rir%cR`}Pj3A}{>fvLZg)$fE@^5ZQyRKdN(N#V}CeKz$s$wyF| z+QZJZs8fDtUX^3GeJPp?hud!*L@y7RkwFOO<aQmm*_oGpFupVIk?ll^S=pKQQiF*kJP{n9DTayY&b)_T3XCWsBh}M+ zz9#DMO_CVAMn6j8Y3?s1O)L&BK%f!%_hIeA41f3x-H2>Pf)SFiVW5oK4!Yo1Q^W9p z0(3NKBf+Jc@wdXZg@$b`aKxKq@F(6J!;!uHEJ*ft%CNV$EN!vgZWn^zWTr8<3os~d zGVP|~vK7+M|J6`*tKKu!5RcZ((yNPEN^2clgaZ4}p_oC@?2n1GNJ5#!!UGwo{Vc&Y z6A&&?hYQIuBwe6(vL5zZp}^OtX{-vZ$FxDyx=oW|{C2N0b15s66}*B4&FqF-^>(n_ z&jnVy-9#HcrG+a~LCqrySN9$na_}A*^EUzJ<2^EExE|jMB?1j@Dl+_XocHw-=+I)P z2pulp)X*W^+qg|vS9OWa@U>9GHz9-rh$M6H(?%5OtTdwpg#d9HS_}c=iG}ogjTxzh zaDJ~ZBpZ=*eh>Ie``(-L*3lGp6t|i(oXOEJ&~-x3$iA##IU{e^XV~MUaXm7Jejiiq zTr*r@erGD^eYgxvn0xXQy%TD3DA=XVJ&#W^!}t5uMqMzKCrEj?6a=IBX`) zS1ASp$qfuRZeZ=Hz|o6r0S6PX)+v!yZ7hgTv#Bq9Oq(DW2^M{rz!BZ8_ds~K%j1#2 zaR4NNgK{cx$h7abSwm_Tqcm%%l_K2WbR>ASmJNLwnLs5RQ{F-~#G^G62aew(EF;5* z)#+0=U5B5jvPO~+nZ(-rGk~j^WxMIR0IoxhOEw_s0(hLW3s^s4b<8MJ;9UgMCatX2 zvIOAsUase|DrxbX&K}`o7=4boGdq14^8&&OGBR-`CFjK+v_{A9XJ_C*hI=2S~hmTVdr_nyq^3--hh3GK?nyNeayj( z0Yy41&F1Jr;MgHm0FG<-qu)EsNGF7Ic6TA!i=^{=lJ)Sr))e55o5rfpT1`ut)?%6r zXWR^4uGz|D1snK4bAIo&o7Kqjyx$vCJ68u+nBSQSPF!3LIOHDed1AJj&B?(E$2s6= zVTNxrS$<*yE7fq4)ymehDUcV`qE}0S9i$-~a3}}iscN=qFVNPiRYG(da4;FX^|csq z6yNSwyf|=7@EJQlN0vDB8wMP)IkI{97UGCwWwtsMI4Y1W;9vsQ#$`0C+IZiGnwu)i zWXGh91RHF~{`>|sY?g&1ei{HC#!my_NZ{BUlE6VZ6*y$t_lIfBcY6%GJx*<=4X?Vn zhHl3%)1|zp)DVv;Z!mgQN@KM%KdyYZUGW=QBR5LTjRU18+>ws-L(6YuIp-)yj4=6H}3D(PnG# z(gZXI9GzC6b2H(jP6sm)J`k51a4;F%dtMAU?6!rs`$reVfuosreEk;lyu-A1cO-KP z`|duymSM(m$aXbakrYlafs-30vaEqG3u%~Tm!I3!e z4kU4caw<;9G`1D8hSV(HAe3ph>u$EzHIz|9J3+%b0FEi|-)e|QYbK5pXCn$DIB^SI zh;<3t1NT5?y-J8o;`UE4UPmWUVn2ZE;x#~yOHLx`;_wxu&1jtGIFET%MIB|l> zJWjAQiW6ox44gC1FM$)|c8YM~?Qk<+J5LkTNx$kf&QIcHe|{El4$%47xH18C0g7IyY?v3b8wYJbh#7+hg~XDV3bzH&Gr_vH6=yl+EW!uXzF|1QWRU$z3@3_j z_r>SNaiX8C`u;r-d@{K_Z37JIaH~r3Wb&hV1{M#xYA3sDgV2Q-Ou$U9M3&WX_oZR^ zi5gz1QRYbS0DgTW<^331myY=IhikiZBw{=Xjfg=x6)|KQyQk9_US*QathBV(Ne!GZ zWsU@gtD&o)VKYA*Q{EG5h(~KCju@XrJVp?sgU-YRrp%haauu{p;(|RGx%Di;YCnXF z++-oyf~1Sw3f9Z`%@l}L(^wT+jcJXhRhuTmnH&vcWKn5lvVx%}G#9z%XMgf7RP%Ff zR(pcll#L=6+#NxTL3kkT--Bat=prHplX=8oX%sQcZipCrf3*Z+4A?0`jEBPgeC<3h z(A8Dljmcnq+%an44nR1>7-kLzo)qbcp7Q3QCb)|@0!!d% zU3`0gf)TOk%HH7{}c#!3IzeE{^*O$pIu?9JjI_w&0^ciHI#-df3YhIcPdCja8wIn^tMs zm}xSME%=m~8)YV*XedCZf^dGfuydR5hJGJV?OY13FuyYuT$w9}AH!?}#3{RgQHh~o z{-+&&j4=aS@X@ND*pTBj%zmm?wx5}JPEm`tw=O0*p*j5MwE~@+Q338}4>J)y5LX(0 zFd1xmdJI48g2LOq_L*_~Xr~?DKL>&%j!Q1E5eIcROQjfb?6#@_$3@KM;#MAJ1RR~n z7H}{DYpoJl)y5WE)bL_11!l>mjRgCF%$D-L0If^Mly?a{+@&Ld<6>w84$7&(A=B6d zoW}gDn#Ih!OnZ$Kc(q&__77a04IKupOUIPwsUaS%nK*EaAS@%m@$MG|9JMm5Eq3u~ z>Y!y3l^TE?I-53*bT4!|#sJ5JJ{8R)scZT7_w&rpYi~^`?d~ zgoH0E7?MJB0c?Ku2Uw0*j%6a(Zzpx&Q(6Es75w%m5#VS?4tD)v{<8}R98BhcgQfVO z;rgm?cEd<|`1BIM(PpOzI2MFk{n~k6pRTUz6PP{5$L*npF$07Hjudk+E~UWlj#znj zSPtN*`%(cox_6-8TdYzmgmZR#A=!zf^LriZfj3BjHEh#Z6p*jU@3fm$%ksS6YwV;}xWfF-RB*&?<$y!(!IZe!s+SlF{&s)^js|AnRc~$K znRt=Qdzk%Ht!y=$0s%-ZdKDCyBZqLnp&W!K&&}8_yg*xO2p@>70SA-8pH7PbNAc}` zx;+jY+CS9ypTWrlj)TuN;Ghn-+U}x@gOye?;CPYQQ-Na~*#ZtG@G%D^vZ{^!o~dCm zodUDu(nf-6yt$F`egmybNBmq7JdB?!!jZsnG$et8aw>4hwD0%P7=GMDHnY+&X-N(H zK`L`3xEb$};TK4tVQUE-Q{GW(h(~KC4jfs8Wdt}D)2Db4l35d=AwbI{ezP3|xS1s& zNkF&&ZYv}^kaPiD%X*+)P#|PYV^wGkrnQ<@Z<-8eax@I!sIxLz!N?Sv3t;oJZEEZ1 zQdYa#L^D361u#>=H9v{~M-n;MdW-otBncc$=7EEyQQ$DUA#hy&`4Yg_3a zqS$#}C9lV?TJ4hpj!AA#iNOLg9dHE9!Eb<4VDM<=6A&r~aJ+#Q!x6_}_4NCIRT_kF zejhC)$B}e?Pq7~885H>O2Gdv-TCZutruCR6!4zv!?<_BeDe?Ou$;LL{_yy+n|PJ9}3KpOB)HE!c~K|0S&Yb9KmCT zhcSPNBZ1@NkOU6OslXxApl#3?XdAMbm4;bNYWNWxWsU@&S3~PU!!IG>nDTa1Lp)kD zao{)-VHp7qpFYJC&;-qzNP7XaOyZl{Fo6460@?{ww!`FLQ4&eA1S`2|>qpj)p8rH>1421K0eIeP1r1N{gwH?qlSRHShP+$$* zv=GIJBm#3K#`)^(8S{BB|AkFy}}_c7JZRl^nLccy|RedT~7unUj? zvtLaP1sCq?fMb#wplzs)#Oa?Ba9FMEC^PZkq89aoQMkTgXbw0Atw863wqe=;1;Pj7 zDgzECgO1~4z+o2@-tLpy^1!iVrzhF0$Gc2c=pmmddRZL%(G~5#*FtCEFTx95VYiSM zdf}_hc&8h5%|(MtSLJGD_B7@gd!6}#h!lQ|AKj$&{#7xf4I zxbq~4K7-0*K(MA~sEwfN2g zA;YM#@Lx-xD{7(W^YASy{zX2|A9gN$o|OyMS2pYCovyDaT=&b)>ay~Y(|NlWygEZZ z@^+Kvv>EV`xufB%@{zMLxNLmn^p-_mX?J~&UuoFVIHPTidoqbfHYcKrJp8}QNB-XT zgrZaU$Uoej-(JhgNB;J)CBC{+LNkF{Nj`GTZu;KB?I(IxV8$gJ@G=JjUJ49&t$YF^ z9Pqw_=ECo-6E@R;*D4J{gah6}avVwahoqlPvEF}+kGvCplZlr-bt{4*KJxGP#23{` z*v7aI-%`!IU_bH5-u#xD6+ZH{Zfpy~!4pRpe?>+4$iMt7zMsy*T`^CCyAk6f*MHs( zYy)8)cP&Z?p5@R2V>_(cY`Kcz!U z^O5h}L<3uLM&||}IrSag`zd_nZvgYB#YaB>m=fsF5&M7`}^>t-nq6{DT7L2WyegQ8#74wm=-jk3qTYThiyMZmfAcOCGrWiG1eB|z< z@&jAm0{}-i&H|Q^f6T$mKTk5?i1Cr@0P#c!<0DT24iYnEO$^Ot<0C(WdBo+yM?O*w zO^1*CDTHMNIKE1smgXa0v=IYXwBfnIM?Uad5#VS*KX-iO!*?WbOoNZS?-3<{qdo#0 zEgP5QBj2~ZfMbCCQ|uT7;YJpH%y}<9@(pM)1dcT}q~Apw2ImN8x{*b9A=!(h8(Ab} z`oGFYe(LISz)_ly{KcIda1`^ATXz+3%n~2@Is*>zkxw`@1{}qFXXKJun&XgYl4H4&B(;P?c6 zTAGi%|N0Ezc7EKs!AJh!RT1E*7I274bEM`Z*!%J7lBZ3P@N;3J=c z7DM3pZ4LcCMh+gRM-UD;CJM>_Ek5#f*>b>9nvdMDy#tP7KJpeEugw}C`8x(2ZE#w! z&A~C?DCQ$?v?vZ7|0f^$?pF*m{zE?Uad@43x$u$yiH&kGpATm&D<63YqA-FJ>(hm$ z`N*4oknuW-XCK7t7=(-0ppcwI(tXkOvfh7}kNo;KA~+FXGT8BvC$}a}OoNa7(!nKg zVmvbCUWSi+)K!Rc z!->*-JX!tkNoTTLX27B zBY)QrLww}l?iWLhVm|VN3*v||Ek5$1=M6Y!k&pbB7uclpZqh^N1|RvHt_Xhg2tUL}zW5`=k7@9czx1gR_|YA~k1~AZrIN2b z$d97M@X2K7HR$(Avg_ssA9>|;Is7QiN4{=zhabg!WdEbWk6Gd)UvK!4f*XS?nqv4- z%tyW`8OIMXjthL`w-2$QM2wHT!P5pD#zz(z83(@hphXlCGd1uKLvz{q$ag+Z;8+fP zY-~;u@{v1MV*pPW6Lb>7jgu=;$tC}{_{e)-9087Y z0f+d=3u_4+)8HfTvTq6CXo~6qc)wHl$j5KufTNg?dF|*g2+Ig?e4IWl%}3rd!2oWi59bCS`F&rD07p{5AwKfj8xT0A!AD-<6D5G7 zF#;TA_{e8t_87o134SLB3-Fu+j(|Du#Ya8{Er!4`v=aS3U`7TZ97>NClH*7^;7GCF zf0vK^jm~nwQJRmu^+pajiuuSN;&=_aF)-lL|1lr=1_O>H+!K6w_ZV;#^N~N$7zd6R zAK71Ez!Bpk-}0CNhw+i800)Vg0uC`WmyM77$)^Y$%Yl#l+>>l*I(+0u5S9_(`1fuC zj&U+WV|?UQR$u`4vt(}Yksm!b0vu!k>Go!ABn6y##P910T5&)5!pi7IRrE zgaeMG-1{DU`v z7Gym zQW^id`_)c-sSHe%;fHpu84fh~8T0$qp1qC@G?t;fH<{VHp9ABk0r8{Ltgx zWB|`0e(1Jei~vW3AG-7E1deI&LpR^91aK?^KlD1xA_F*Pzz@9$Er!7H>R;&hIm8dW z;|t}0qclJCpehF(#r)7lj>~3kzuH?3IK&U#ck38%6!SxO+BOaxF@ESxyBcuB_@R3~ zV8Ahp{LoXe_3v`whpwcCro#{YGr}?g9GlRmrTL*-O)!Ax5I^*-QzO6;;fGeNO5m6V zKlHV&O900*@I#NsEHZ#&2K>P7k=o|_p_nt@I!xzD2(95 zKeiA~l-jR$rB@lRbBG^0f}iTax3oQ(MEId&D-tKB!4G|?t^`gj13z?kOd10xX21{K zbjt!xWd20I&mn&3p(mEZiPHSgiIp8r6!Sx$=c*pIeFE7TPbL%MAI^Ng+8-HCh#&gW zrZJo-=7&DHc^oHV{Lnvq%mx@Se&};|8d!w<(7RlR@jp`WfTfgj7j5B(KpkAWXE;D_FZ7DN14?~nBR9O8$*cyu}ZD9sN& z?_W*!u6!{+^t1}$$1L$f`wc(D5B<`IV)#+a4?S+9IDW+Vp-+9(MjSDI=&83EaLgh< z^y(aeV>$3c>($V7_@NsiEF-{iAbnbzAKLOf19%ScLpMD#0vr*3=r(T=IHti5U4MfT zz_ASc&~IS&7{D42k{AG!n9@bRcJOZ?E= z3^>FO-DTYva1`@Hw^~0A95H_A^_v@T#Q34x|ImQL_@P)a)nA@iJ`;Xu>um&%<-iYp zyPpkBhadV9!ZHFJAEZx9^Fud&ngKkA_@RF~ECL)6e(0NjCU8uHANq%NO900*@Iw#B z>@k322K>-HYYM<|^Y7^QIm8b={m^p2QJNpR#+wc}ius}cGneaomz}COZg&%s~t!!vI{LotwmJ#51 z_5%WrQvA@DpJV{fA%5s>pN;@WgdckMYXpvI@I(97DghkJzz?m(bTWWr2K>-f)-C|Y z=bxb8=MX=1=Yz`uM`?cOZ{KjhQOpm0;I9IXS>lJ@Zonaa=rbxaK!nc zH!N+cDB6y+ds+FR`@Pgu@ry;t^h?PZ^FtrKLBKQmBp^Id2+4!ORA%G(g z^A&o(h#&g(#~9)N z;=TBx6YIHw27O=PhpzBlH_%}A?C?YHyFmjD82tat4_%~&ro#{28{rp0fivjP()`eK zM>NnNU2kseADY}hGSFz%ZeB;?7#s}DpB6uK&(%wy!!qzg@4zfF2O8$G>F`6pjTS?I zNc>s@4Kp$q_@Sfwm4S&e{LqtM2?rYdjCp?O;Y$e_v$cQdoo=8(e&{i)6r)CrAKJWH zexSj7FqI#A_c{g~F@EUqwFVr<4<(D2fBC76nd~3x^%6KP!$o)L2r366xJyU=qQ(Kx z_=_5pQ-4uI7vlSEI2~J0+YifUrQvIxnVGBve*A9(H8dT5==%_s5#ZRBJ}u1;-REHj z@EqcY&iiBpI3oPe_5MKMmqGaK!kb7q4l+5#xtm)?>h7 z{Lm@DF_Zm67hFr=cmrE+cIlY%wh(aeNZ{Dq0SDz&;LwHm{;+LSs%=a0Q?=BvTuPD2 zN&q-s_!b+Q4nOo!gk=OcR-{i$^Fvo(%mAK4{Lm*q5dn?}KXm*V0>?D?p}$_S1aK?^ zKeP$6$N-KR@I$v+sQ?^TJV?LKA%5u5dzAx@()`fL=Nxbp^Fv?ZGT*H6L+>`=5I^*_ ze?Nm~2^$dbcOd*?e&}-*ap3qr`JqQ#X_)aJ@#T(mQIua+| zfyMy_koMeHD#QhadWVL}3Iceoq&c-aqt(`x&ou zh#&f+Jt8;};fD^45htd>554i7XW!i?z;IoQOpnZe=o$CC4T6= zh8W_9Uh%gWVifa3FPe-a#lJ@XZRt0=%@c2!;fNq=ss`8@gv3$y`#cL z95H_AJ(n18%pyPZ>d(OfUa554e01CCkTKeX`@0>^UT zhdzb9cBjV=eF$M00gks`6>xO^MUV3mX^-@|Oyb>s2Jjr>hd#Vb1UMr6(8q@e9Mj;3 z-v3$&;8+HJ=+2lu25`)PAG-1D1>m^k$MpLg;)fo*bvfWD%@2L`mkv0J`Jqp9d2iPE zp@Rk-;)nhrhyh12KlHJsao~vYLl;gOaK!kbpE}=wV;1)hUG+lt=jE_}=ylj@cY6HL zuOloYz;Q2qikUxd+8EnEbn&eW;5oz(y?o0Ea76f_-}(iCV;cO>)RGdwu?+msiU$N7 zGvJ55j26R3l>>f2zt16l=z4YKfTJ`&^!A4wa1`@Hum7chW0v@#_Zx7CAKLd~3^2aY&D^rHJ`$`9T0?*Et{`r)q%n3~?4cNl*=p=pAYlBS8Izi>3^FM2bXUNj2c zW z0w?sSFT247viS?rkGg6z*(~(7uV_>OOaGtAph-0}9Wv<05qFX9exUzwiU=9B2>?GWGU&(tPy!aBWY7~gb-xL1 z*WZ)$RlrcVT3$^L}n0z-{43S~-dW|Z~NG-(w`evcO*tiTnlp%v2b#FMTklXxz zkrxvSu*8qYkqKu0=bMENxlsjd2M0e>3>Psn=-$ugM-{vWQ^}w|T55<9BZF@BB|{8y zFo_u7bJb?T0zDsywOm-BA5=rrVS%pvy&}ZekZRyy|@| z()7>2|I{HyG5s?b5MuPxm+5S`@fRiFb!tOi3SwQ3X)~6C@KiMw;O2B#wKj-f8e%XR zy#Cu5VieOqpMNrr7|pcf`$t09tbxZQz6?~5UK~7fvVp~aNdMgI^X$IMf&O_9SZmXx zf8K&9jNru6bYW@w=ZjY{Ugr?~^T%sPa3Vtgyz@uIiD}S3Z+g50PDJUSPk+$igz*Ty z)Fk7oYNHjI1!_NKJc84EMoM}@0?&@5z;@u<*Lnu{`uFF*pZh5 z{j*CAO^5#3fq0A{#`o#W()7=tT*1hlL-fycLG8|uEF$#JOKu@zOoRS;#%Kw|h|)j5 z{{e>>#v}BCw}cq4V%`^DKQo|zK86;?CXpSwO%0yv_)&-V8_;4lKAm*jo-t8T|cF@R$Ryw9uAVh9{7TuQ&s zA>QXB?<)r!rFowx^f}-t=6x>0;ywD%Eb%@cG2jsI^N67sa1`@C7d#vXju`Lr=T90G z#CV@O9Bqg}-X{^`r>@#eelR}uSt7=AAbf7DhNeUKtU^3S5MvKIvozuJlNmH!u0!^b+1?U9s08MlsX#&s@TrHKyl?A%>WqZ{HU~ z47;EZF@pQ!h!JCY9y?-)5o3CeE;7U*)02qN;;PML3($`o&W^ksD4ut>u%YQ}0s4K! zV+1jNPiK~d_!cM4;S2*q>YY9huoD4sX|yaZw_1I2U09wEjID4r_~ z77*i<3+VSbMDhIiJMw$Qed5pDRY`$AkQz!;JV(Ff5Tlsl`Sb4xF=mP4`5QxwKC*Nk zx+{hl#T3t<-J3^@C1*SdRKqfiR>g*b?_O0z@#OxWJukic?(qwD-C(nNwD9Hi_q(fY zefzxo-EFd>BG~Wp0>85r#Y?&ibFagj zUM*&Jjwg-TIS%&Z7&vZYoB^i<0Gw+!-#O*?R0dfU>(l2>q@W@Mcs5UUY1 z`8pk)Zt6{D@Skq#%OtKlkHOqd8sm`H0b$Idrj(OC{K(*PHL^x#VK=^TMFY(&Od$z$ zV{Rvs%}V;Rl*!Q&C|pSiUndWFZP3izLhxVx1{V5f_Mu+ARiD5oF!B~t!Fm5w+!~=X zKu+3!k@=}C@q)>;U&k{u9!vQs25q}RI1Wa`@0*Uh1s1L%YjCp+t3L*@ba3 z@j`L}N#|m02ZfK~2Nd9cn8vEm`b`@%t9~s8}0-moQ0cXo(^8b8GNhk5S)lEyQ5PV z&~m)jR{PBU>%60fafaWlGXRB5;4?K!WN8SWM;aEpsAaMe=zuRH)>Gd8$n4S)&mM4L zmyYb$Bhc8dDZ_r+h!^;v)V1TKW*nr!s2-oMmX4#EoBJY>tvyH{^{$xY#6p(IqF5bg|jXdKuq{ zc>bVi#&q-tOdF>_q?#tfnH&uxHv6nhR))M`XlBTAc$WySB;`R7d&tn!C zAFzYkkk<*}Frke(nXC%ZS!qLFdsq%kcnB?qn6S;+^m~IDX@qdjZZ0HSk#v5qWW9{h zNAdAYV^v&8t!YWqYD|;iOpb=($!aT;l_9Sln)ADbonOK7yx%8Dy2Q#ET8JG`PC9b!8fjOqlX%1`2HxZ`iTp$Tn{H%t?UFdLF`nE-Z;gO7eF|mP!7UV z)l`7{FlN<;A)YXxU^2MmC&fS!yWJhR{OE!AAgFZD5f9>AsH-6a2_5&)I5!#ApZkWd z_L&`G#h}grRxp82)-REzAz+2HwAV*1la)XhzH0%y>fOlf(lO=T45xPKNUXRC8nJ?M zDpts}@Ap_kYBrsfhUExrNCFKVq=s%*Lp-Lu8`Thx)=V5L_CzE`u%exA1Zc~w2{2or zWfEtf#h7hm$&i4 zE0dKWuNRv0`=DIxx3fI&_cnJDTw#9iL@IdX&*iW}?#Vds`kgX46r6CG!-^C$@a?NM z5{o$c!Z1R$vaQU-p0#SxYo-|TS|A)&CPWWwH|J z!j~r5RkuQBmyRj#d^ojBM`Fc!(1;b3Q?Wv(eZSHgQnTr-Gz~xKD;7gWwL@-M4*{n-~8-%upF<5s9LVw34BV6 z*>Vmh(I{3NHQmrRY5u{ZOCg5%YhZAp~Vm@o@l4vYs^S3g!6lSA=!we^Ls!R zQ^s##bv))!WPDbIR$*G5X_Hn{hBG-D23Aan1m(*L9*>ae{BB|AkFz}QcX3M7xfZy> z{LWO+`&v1y2HgtHRNz_+j3NNmYb8AcMSl^xa9n!s88+gI`576ZmA^5?LAoR!GAjlv*Y$fiC>Heb`mMh0HD;Q{G{4YL|}0ibJ6h zD=4R8g-rW?hc%>T(^+XDwKdzW)<=TB@6CoTQA0eYyhUn=M{6dI6|W!?BUn*GH)3Uj z_A(~0LI*9A`0(c$v$ZT4^6DU5%r+E~NhIkwV8z5FE%=SB?lx;g1e;b#fe1FO!ZaDq zYW7+_8&tAcb^ z8YTh4a$vY8oZoxpX}_7}dA}#^q7n zGw|)JHWL5t5>{BPY$G!>CO`|MhVdqZ!wTgfJXOsIuW7H&s?|V@8CEbEtaMWhD~fOT zn|;MtamIcI4r}9FV1@TdQ`eyJfpC5{j}^=gv7%aM04tclC##Ui(h#sh8W=PBZS<@J zu;SyGe@l6*qe_>KSowfc@fs?Q#ESWl#0tu(SRvECAJC?sRkP`=Gzpj`f z+sN$FG39NehIq7Q;#hGvA~Av$uihxEAVU>cA%XcbXqm*{PGZb0-8(^)kMQvT485G*)EC_%(+WW6Z#}ui8jFda3MPZ6z8k{|yP)uP58qIX6+KM`4j18EV8!8kn|cn7 z$A72jXph+(c66#XaDoYZs&9UT{@<`RpHPs9f=dG zKqF32PQ?kC_Wc%XNX@3R((vVP4N0J(8+TvQRYtFA)uxS`Cc~K= z4I^Gf+e`bhG9>D&i&yirFLs@ugu{s*=3pv|0@F@b z-W!$!CtgE~;q%9$C!T{woS>YF6Eclo8L@`cEPiD~?RkUNkOUe!R}DR-hImYQ z&#ECFt(iDZoPsEf;Ka3bAzm|;SreE~gNF5w&oW*`Z^aT7vRu5T3dtTMUA#6TiFoa% zzzV2otjg#$t<$t-(_|Rypvuf8txQ(14hqf1tNGb)V7Z^`v)c70M)4^vUYQEopNrtc zFmlrVgUtU*2XTVQJWjAQiW6ox#EBEHD}fV(c8YM~fsGwb*m+)^uCD5N%mU-%)=(Sr zY9Sm>R5AzCSQMCYvhwP%960e1S`2Ywn^yXLjHFLYd_p+ClPl|z6*$%TUF1-V5?CGM z0t&1`nKo!zVA_CbGMvfLFmR&Z%47vAu+W^}Cv>fTFU#|O@3E5x;0p6QQ^Djj<#0mo z!Gn?6>X*R!$5$Lq3@`)VylNwH0T$ZfB&(I}W+vEIYSHVYz&I1a;e>J!o~ot-+|LfH z)&}vk;RKVxC0ECA!Y(Mh-5u8!<3zB#0mE@Pmp3I?byv%1p?Tj+O8AFBfMz8wErEhM zZh=biChGOu*-1w-JHEtvw8w0o)e5OsMwoyz8YHr88=)c%U*pt3URCBuaLM-U-JgWk zr6U-ZxDQ=A5?+1=jqpM_6<%Z-Pkc1yXVom`TV>j-p+KNY8wobro(*ja4bMV2ro5aQ z;?bIk!^;{7-Uz(xPS0a-Or~AN1h5^JGKqbUVwexJ1c3+PVw?QdFyfJPVJ>POmi}2C zOaBxZpH-ptn>J=zpJ_6TrGI7SdaX=W@YD~@g}M3JsDOTsSB6fJvXlDoDJ{&I3fBC6 z1YUZPllHG={)f&WyfB%E7nVlh#q5UhR(VYccdkq9E7K;sQ~wL z)T#|aJY(>}WKfrl!HZo`c)Qo@DTbHd?QFns56)H3@1t4Y|0%^?Q3llm1PEoPeN_Ui z?7xkjO+GGfDey?tT&#i0OqOO51=8@mMGY{j%#mQ>w(Ph!L&E|qj@Ug1F2-*t;z;DU z6q3k6ITbl%+V?wY%+IP>Fj{2V>!83AzqFCy#rZN04aRXydA=Ir(VB@P$76`g2y(1M zr(zmZW=((=11*zS<8VfB9ZRre58)!Xv5;&=(nYW+dKo{->WEniOp%&aZCZnAm8QvX zCP%{v#tJKw6?~^da}jKQ_C@ydbFEg}XnDC#d`gR8rh=!Qh#*G?a?<`8%>Tm|h#XAj zk%OgCfA^LRPrkXx|=Z?@VbhJwF;(IH1W zGr&Mn8;O8Rdzb`Jt!$E+854Md#Z=@_HrB3K3glRGOFMgQ>Qm=Mm`%K?fs}D3V0@B9 zQa{T!5hBv?-WD^lrX-T-NbuH2*{fGY70iX;h^Y(sze`8L$_da2E0j}VMW*p!WeurW zJXp!JH)ah<;CaVaLvJ7xKi`OB$~#^S@o3G&Vdbj`+6b)NN{?efOJ+@A6%1M?kvoLp zonpz5*A3yqySI?+N799N3+rKMOM!qkja8wwo7Q7mn`ttPIe%s5TCGf0Fy{}=g}3?H zZ)Ull8?@R<6D|0Z7T!z+osULfr5QPCe*yEmP9dx?nTHjYMq$P5hOqMG%S*sY(oPYq zJQlwEZs&Q8y1J@2FyoAmTTcyR2?z%(wameIl>%c+E3XU70V_|S#c)8f`={ym3H~@6 zW{4o1-z!nyC2Np$e&gVF_PWz^8)d{BB|A z53oG%_kKI65w0-5GZj>hmV=c+whT&%UBIx!P;mWe4pv5);rl7Ik+}Sef)%Tk?PDgU zlGLKtLowv_LO57a4#HE_RDk>0ZPhvSxNdkqwr%a=A1?5~Cn zgoYn>#4+XVu7-HDX5t94GvYIXASctg;1S5I2`qs@%Ot+k%t#JiLxY%`hj8Irfl`;O zM$$#{0PBGqNJEHS(^wVSsA-cFc&ax|hBG-DMkEhfnXF*w3e82b`PuJhxu4^ep?060 zRF6+-k<3)E$FCy@Qiq(h{}JXVPb7jcnMV+oMiIp9h9R}1UjjjD?GzzMclZ{(o#*xH z>Z*Q-xoCXAZfY1)KsW^HWDdry6c}S#c`7Uif?R_$o!>z|({vRx4Y{rtpBH7QIPU!Fm)lhak#9 zc(Nd)0^H9Dt2Petydema!J}G6{bz8l5G3oKQXZ#y-y4?jM@a%&;kj--p^8rIABZ4`)I(^wT+y=g6`)tM&4 znH&uxl54F@RxpHx<|5hr>{qkg&vjbuN+<9sEs`sd3jQ@5L68dMr2T*4^`c;vV~HS4 z<`IOYQ3Nr&A%grhRRTdKaXwBFf*cUO6>sNx6}q~rQ!q=7k2|pxH8FgEa0oKa91Kw@ zFr2jVAS?%h9F#5~$eo{}-}|l70EF}Va3MK{r1N_x>w%L;0ZyK2tO~8iv_aFlO_O18 z@|2lNS(&V0jTD;m`GZkDkR1QJpo{Vo^@>4Q76l`?7Ly&H{ z%}=V0L={JH;7qAjwvCy1&{2zC3kBAWARK}y2jQt|D!|QYwrY(K5 z@OH0!Nil*P@=@#iyWw0tebmvc@9#h{_0dMzh%A<3?6LVKc6Ni#*7;20{2GZY%_0h< zVY6LoVA?BlBxu-(9d`?8T{>ceP`DTm7&sC+UWX)dP)o#q`w3KNw3?{TPbDdTuD;T9ha}jKQ_S;$R=f z>HI#vgr@y^RtJxi0vlMEHfd$GrcIb8!ez&mm$5@c}`>1N? zhT#hHJ5#}@eo+oN#@PsF)$IZTiJ{=dR)-uD%)l?StBu5OxsHelRMpB3GZW-Gwdf5{ zV45AmA%}7ho~ot-+|Pci)(i0mLk=c`-<=;r4!fZ6c0c^JV&ph^bL;!p;#~Fo6wUhn zl@xd3OGAI8ifKAk*=b*ufE=%GXlM86Y@N>}&hL=O(k!At8kU==VWwS~Bf&fCvEyC> ztxHFYKj31FKX4>+EQTaRN%Hw>loJ4+x(pPeG)_&r>qn6UG_L0w(d+bu$l ze)|vu5DqzdnS&uI1%{7S-WQewIi5v};ZsY~C+PQftJDGE{GKW#dysT~Z)82JuTx-s z-85E()?!+xY0aj|FxJjn)7>)-K++d=lx!9C-uS==69xo>YtZG4!H-j z>Sik`F%;Z#q(hEoX5hsOwUM}*ON5v}Rjq6tGczXeR80-j><|t)l!Ne8H5K4~R$H|S zh(8)~Fd2O3t1;v#zTMsD<&k5_{QKFgMwWbQ_p2@LEqT5lUx#JsqW9y+R;RNnDkAU4 zZ+URx{rFK7>-~5p?EUzp-xMVMs?Q(8Kv@`YjB1$Y8#nt*~IK$_n) zG4IO3dEdIf_WsU4tdR0g1m6YoAUG05PJkqeP=+Y7_0p}E!a_ApoDT!hlaJTQJld&C zAHo~3j}_i{KM8RcL56GSH2uyJerqY+G@41=x+ek?KT|W*)N3Kx)bHdVy#TCg<6GaE zg#-9(DM-B7j5pl%613l8MLo&PnZ4-2?Nl*IL^0IVZRhLd_Eu*3XO5y$iz?+va8_6(hIRu!%#4WZlagl$CH@Gl+nb) zN3uI}Cx>hwb1;XgCcGXBj1D1OUsew0FjY+jaCx^?>x6j4`ZANjZ@*mJmw6H4JstWA zI`Ua?hIyJ(lr-Y|XHeWl-|{d2ov&;JAxqH{gVpRi{~YS^g^)G%(miJ>SUhjO)S~{i z6CBp%@yO2kaY%Mf%CK{OZ0X0;Iqlr}W+~c5ca#Yp&A`&17r&&w7?Bg{qHog|h+1AR zVptzTuj6MD6}vIUYM2Gsgm8gXUr070Nq3;%27H?tyggRO!Vm=pqo!4uR%hCz)s$hp z)TGSZ1T#VVq`*)CnP%6QClRzP@N>;pdrY-+G+x^VR zWL1Edm92arEJxq2J-g7iQ@habomMFY;r!lHNcJJ={NBuZcqN1a%R{EIDzrA!x=m{} zO@=e>2cB{*RwgSTen4}6@35PdWO?52jjEj^k<$FmRPgCL%JgvC*8vm{v(+Lo6ufqb z`|@sO1|FofuZ=G0oXYKXu(ypn(X zQgMfm-R|F>mH+Z~bAyxiM(oP4<9-W(NqAHR=;sxySU+E*P@@t__HAX&_ox>2?Rjuj zm&YUf_WL2(w<)LeZJj&cEJgcvl}zwx2I77DPl%jI-~P}U>f2-dFc^>Mgq;F4R6qWW#-wghK0Q)wR`EP8N64C(T{Kodp zZV2!%pHZT38za&B_F-#3J3&k0=m{R#t1;glRI2M|x%E0%ig_ zDey>-Oy_sT7YfE$koWtjYUcuY&-~6*@a5af_3d#sf=7D0fIwm>So5Ipk)9cNq*oh> zibd+%Rx3NqOgz%7MQ?xtkMt0(Zz~7kscI^~{p`1Dy%0;RZ!;OJ(jM#Ec0u9oe*5%z z-%imEp5YhgGG2Y(ro z9h`DX2iLjt%~G_3za$epnt^x+Uu~zN4!#RNJ9z)Rbo}NX1)lmKGKsx+V4yWH3-j*~ zF3_3_$yOv?pjEOSUgV>|1FmVT3a!?(q-iy#$uM?0QD&~%%47u~4b24_T?G>r6n?H< zT5eKr3+Kl0DJ{^L3f_NPq=SzlC+$DN{F?pQ!I{i=aF#|pxY-Twc;bsCI{2`iqA%~W z=D7}T=XrX2*{}NPj_Tm!ygH0>AzTL^Wlkom0{jl1m5+tx=-|hq#c*K$tB=v|y;i9Y z!ufrmkQ_$R`MsU>u&7S~C^d~$p`}dgH?7k&8P4Qr7{J~+ZImpY3vV5eHt=YI|tc6mIq&))~hK2JHN&+FXzW+~d| z@0AH2%|N`*ud{topWm160PUIY)`Ip-0opUJE0Z{|p0PK~EYO}IT~CT%T`c4klwMFmY<-ZDBe3{1?z-*yo>`Pruh&r3MJ+_hcd2f~50%1?yo< zOaXK?ja8x5nAT`owP`X8+Oslql~yJz_TIkpJL3x`CMO~CexIP0&h@|*=69xo>wi$L z&&#ct4KQ1k5<|gm`?)?}%?!|<)kb2gh3fNGD;qEqv-WDyUYQ4X1e)vfV^*MZv2BTI zqZ9}qh^5x&nGCjTi}m^9+r7yt@jl;AJATzsSmTBdq@ivush$pHhV zd(20#rdrgiuY!}hJRaGrzX{1+O*y4k>)iQfDcY;EGQp!6i1+F}w=L?`?fk%)u)vj| zS4)5#01f*;ZO!OvWeH|iAzXBI6p|?*nozWPJ0I+dTsNKQ*~t-N!btSVXIS zV$pu;)xGAVPG({^D7EOdQvfI-T(4G6{uiHEfcx2I)mk84wO-9+aKv%3UTqf?-tGk_ z#(Q-m?fCuziulyq(TVn?^=1`=ZN*yX^vAzto&FH$ZsgvKB)`R#HQ%FJ)ZYugcftPt zc{r2(opMTl*SYh}QnbIHhRR(Yk7gj=-w#AIMIOyN=?ctO@R~Cw!0U#VNu=u-cN2Wi z6;rzqF77H(>XJ1`y0{x;z4w00zk-c`_h&U_7*o5{FtsaTul8fm3(dtHUBy6Vxu4^e zp?1HW)QV4OamQ3}$c>Ty-h!O8e+cuB-jn^E$$WojX|%ta-7o<5KfXkNZ?;p^-|s;% z>08{+vseB7s();${@%l@8`Ay&uD_?4lgX+eos|aqH8NF>{{DTm820xyx1ir!%t$MQ zb9Q?n*@>j{dmZaxOEn50t7)tXO|K(^J7rpfmC0}>N5k-By_LxdM#j*b-x*&pQOokY z-)rooBwS&BXDWE+d*%AO+=H0{vsEuK6r8n}>+cQB@a=_rKXH7M`n%Q2Rt1jC|_fr}=^p$_H z4n3|?Z&<>A9D;qCx%^J24#%k!Cmr+pztIz4K_(u_adaK|j1@5(-i|xVyPovd8Q7fN z5)^d(1xt9vm};Oc-vp*1q~%Q5oA`d>{9SpCUJuI?{ci=tTWjFQ_Ci8uSrKpsjzS6~{!#=Xb=SuXEdOJmZgnLFO{d)&> z(SEx`;sUJ0PS|*o3v9k>K(P zg&bBt4;y4*nYGkc@X{f|3rEfPKx)PZGW_0nkG0g7bTW^a>%mcLsZSTyQa9X;p$UGG z{(=MO=yX$mGK2qg(?BNCx(NWQsS|6T`TfETvYPsM3f5$7v11_?OWoGs3ww}kgATdMNDz6Q;VuF8V2~j$0)!X*jh$4u&6qWlTm*VV#(_twl9GuoaEK% zqN*l0WpDIrs9~)N!hHi&%1l-Tcst(8xegkB1Kf<}!f$|iALci}7}p>0(aW@`ioNXpb{S2ai6wZ%Im)x$%mEOn39pj^KmZW}ffeY) zjIFH#2&`Hg#9ti{AQ_zZnPMQ|3VwJ`Pd^GMa28x=o(8mPbMSa4wPhJUdn8Q*(kXG3 z%}&)hz*gpB&kq%1Ka5xH+u=CqZn)Q~6RJIB&DVzKMZ>+qZwRs5{tW(Px1|ibZGM%N zrtpL)OVQz84wbt+9?d{}xYvqMigez~=^PCAc+D8@Q6P39GKp(8(r}M6@)+(xxJau+ zsY})%>4I*M^)TF%1zQx&?*Tn#WffL7Y8rqHC*)`t9d}s5wh+hnH8iv9^8+I823U?^ zhqPS3oz#aaUP^zO?MAg*aSfF*-EWB22gp zF2?KRI1&>sg(N0WPQe77JKrotF~OG!9?d`;6BZ!iBA9S4-G!wBUT?;Pt;l8)7q8FQ zY-b6+h9O*RrV7a(BAbUT0hvVsXFWSU)H zp2Sx+t6`fKt6guR6Q9yzld0gKt0I`tfgHSr&io^`BPKAJ|LSLH6cfyD_)U>KtOO>s z+bP0?iS-;N*m+)^uCD6s4+#@$s9^vA5e@*DgIz}`FaWUf>aZM`a1&Y#G2#8|X#l{5 z4GaJvoZlx3$qJn6{NBfU7ywXU0AL!cLK`$KFm1rJF^L=v0~7kKOja-efad%@u50ys zS)TWMkDb&8SD4?K3VxR@hY50zTZqSms7ww8U)tVb!T>WcBv2cP&v981+)~xbb~6*B z0=4LMQead75snJ1K<8pqU|NS&YlHZk8xhD71iNkF?LK@_91|AM&Yc)4=+BMb z{buH3U_dbyAC!%80!oPwGJ$adD`T8Mfg$~UFS>C8_4uAS*egdTW6S^ve4tu{4=2Li zpiSaPd^iD;_&_-YA9OCp3~>|3%LI>RAdU}PBl;rva1>pKF$2tS%s_!L14Jfq!Ur{G z;AA|;3=l3(D^co_HAuQR9b`R>8Dzm9H;q*hr(>p7m^NzKghaSbJ4_7`O##q{aB<2H zh=KtY;JZs&u3xotE%=lcr%VOgT@k^DX5@fx$^2cnAwDpf#|M^1@xknd0aN$s68Mm` zQ-lwr>x5$lU5~aUPx@6)tt))!u@BJ;5sn#{gE50HJDald?ywyAa4}j8@!|EgHD<6% ztq{)H?S*6~lFsjStcNiJ1;z}fu`0Ai)7ngHFs(%*N5dR5SedNY;;HjH;|nHgS)TWM zjh)m8SD4?K3hunT96rdc7&DlydWoUn)7yq)24-N)z{Ms%@d++LV$7gg*=jb0F@svP z1vQKrpoL=wE6}+ZGnh6>O9&r`x7?Tk$sl<^3?GVb_s$2!@!@ftWn+dhTJ+aB84K<} zc53YWEJyeZQ-EP2Z6vsV+zk$(yN85vBsCyl76t?q(QorT;Xk}1jw3t#9+2$tlv6sq z&c%QrZen+t;L!}kJN&Ne6m|Gh=?e@2U z0x!vWnC_>*I8jT?#+fFD+b_tjDLc zz+)yU%DznTB3E!p9j%y)Q}MmxOO4Lkf!2bSpYwRVa+{PSzN4sYk#GOS=TfwY*4MCUqUYnmO1cQdggqW*d^L934K37Q+tz?`ryed{RaN2%mha2`l36RyAGeS0-c** zyzFEq!Uy7Q>+nnlhkYv6;q8LL+nrn(@9;;`&Xk#gR_6NaoP?Ekbbe~={HlxBMp+0( z9tFPnAAH6-|Ea1~o!9{X*H$=rd69ZZkh~ZXI*9H#+Zo}BMJ;KAY3HURSaepV24+$J*e8+kIf>n5}!BN zBNIV@3gqDJZA|V4$<2rWOy&`QrBMVhyJ1M|xPJ)*nAC&`hJA9CITDPF zS+9Q+I=<%?67WMi!;6%KijU#*g>yYgAlv8@W&Yf?TqP_k#nc&e3 z#C!eTRYkr23_1jBM7R?4dI`*KK+7b~eIKJQ#S&Y%bkWy~9GC1z(nVhj>*1M?0{cdp z#;VZTP3tkO%`_RtzER3_OOv*TI7S)BbkRpwF@Pzsf05Nrni$8YwCH0hNL~`@^<&7v zo7c=g_`~e=Oy+w%OQXHs?1sI5&rg=<^`mx*zV}~Q&GmXa&ui4xRlUBtdVM`Lyj}(2 zdVMW(FovbT>s3}>7nY;fe;X}^y*{xT{XSt!UXu{c*_Ej8k~K&=ziX`x4_LGbx;4+j zq^xOUrd60WYMKmVQkEJfWhH!B!3Y_e^ZSIIG{Ew_-)(&@Hw;&p-h*NkVZf; zHCw|HL&3?Lx?VrZ47_lqHWG(p4IECgTDJFixCME1snhlP9$mOC5Ml<)v~CK755(WC z*E1O$^NComw+jkycXLy`*I&w&S>NX(BYOQA5U$rVi94tQ5KpM#_sNtw5{x}=z5bj+ z{SG8K&{r1TxnfDQw+_L7c&!>ocKF4R?C_LRI=s%sJ6CZN56J|NW+2|-4@Njep6oBA zFYHYsbofSCgO-HIB)+~11FxD{wspCSwmRgvWCM~e@W#3Bi?^&;9V}}KJkpsqX=Syh zO_(Obct1dyqWUvnS%yIcGF{;D1EOGz1%8fKhA4_bMDSdI>VD_RUY{Mrfny~8SXLO5r47m~e5I=_>C0Z;c(-~r1tR)yATTFSH* z(_|PASjx;bTbZn2gbdC3o$&<|jV#amy}?fEg)7YOOa;$hP_DzvJ=m1gY&A;^1!r&U zI(!Q=u&<-qNVIX`6hmdz%GNUz7^xPu$vEPo4w~!mwN{{WGqy81-oRoe!Uy6X*5R29 zKEFq-!x!J~WA=)5c<)Vase5O9=5JCP?XGhU*1B;Qsqsr(b+O+R3qd)hz(D`$QS1B_ zydvMWIrse+bxyU%T%Jpv!7Z^k`1m6vimZx4>@SI<>-2G=$Ym?D3+IU zB&lq91JZIPvVGDLFYC%ZX&8ngb3@$i;5$c)DAI#_DWV7yFgT3z0#T$JnfUQc-tRTn zXMbWc-=A0-?N4?UVSjpO&l3G9Wv8e=-2|!uh$5r9Ouy5vwuS4K_yVAYT?QyJCO}T5 zhSv-rTs$ZTWNKAY0j?)y)jA;lY4N~haP)4mcqqQy197=aPQ%@2k4*ZB3>W#pNu)79 zdn!fI#P4F>N@e5mkENh)QQ)NmY4|;)5sQX)>Qi=BXD&^|c2=)@n9=ZM6n5!YCK@hS zu_zjT!q0~1Hfu=&Q?=4^CjK9F-vS?3Rjoe(2ErpG1*!pxr1FY@7!WZCYAPKZpuwO9 zdle*zLc}Yiw#BFv63f6mJQAcM0YL%?hO0;r2U4_>R!9N}1mzK+&{PrjFa-lv2oLT5 z`_|fL&N(xaCIm11@8p-W_H*sM*IIj>{ai=Qo;%?Q*}GI*=-8(~k~x%yOHLAL=m2{} z8t4GRdc=Fu(2hXttKez2tfn;3nU@B}vJN1j+m3`Ku04gvtGx3lEPeGXWml!iWT)l&)6Gpo>fj~&)C zQ}O0Lk0i+u9}shTdILlJcfhQ|*^nGx7wsV}N}E-<@pZ}=&-6f0c@)SFHF+Y#Ive1$ zLrt7&KreV#%_=PUwr_~f`GhsAaNaET>Nyf%JFCt%ytAu3y5$`M`^HC0bZniA=+)~l z<4wZ1zuFDJM-kX~r((A^rEd?=2NUuDwr}?daW-RC;U1Le_U(gTBi%a`NgTiuyW4a2 z!fEN=#B}ejS%o*3PSV3CF{|+7o$U}`4i)9iD#W<;`5!Z@u!VN`Dv-yd4heSn0<#L| ze#AGV6Shw1se`SM*-qx^gxZz}oZ7zpZtdqgFu1s%mm`?{oYCm#^alF*J78krB1n<1 zpZAjlSbJo{3QR1leueTT=Nz*NYZSom=T`}sx*u>G8|RBuq|B}^gLS8>M^lVNGe+cvSVrS|h4kjGqi zP(eS}6H4yfV#UFQ{XDLx2V4^iSAV>uiG^RT*3K?Q0{S6J^5c;op1BwM3heBRMrY>% zs6c0b2h1&80a5aG_WMYO(&iQ(ewjj7&vyUcFt>2^*}l#`B7IxTE!?;*JNsKOxA5Z+ zmFVolzRsQ~ZEhj5Q9An=kB8{7BKuMwVaVppEo?-IZf8H~CDOe|k@N!C&ff1ihvBrH zy^ZPKU2_Zjoi$l!Z=>)OnOj)Bz3uEBjLw@|=;P)lK8eIYeD^@wr2tx)zPDs+|W-<`zyEmp}Lp#!}>-}(aSUZ+Uv0c@Y=fhFr)2&e7yavJB|HMj8LGbiiwA?dh< z<`(YX#`bwRVwX3!@H=j8;`Tc8;3M$du74Zm7Q))+2Y|+`*|(t2OTF@a{?-o^_W3>* z?o_;p?P-jf#D~%QlPk4zi>-j-7kWQ3v2!yTFLZhXFZ6f7>cTw`9be~uo$W4dbz#dK zg{%d2MCa!53oBXeo-+=o6*4)h^X^(*c;F0Q=kAcsEmjvs%h)q0&fl@+C`M@L2gEZxUE=Qx~}?%hoH?pj?q z@$|_$cQ+|fWOZSDOWV178J)Mfu#Vf9*lJ;5Ld`9_4XX=VYv*1F@|eH9zo2tVz4D#= z(R~U#cLRw!snvzou|v(_d4bi1bs6pZVmF|_=*8Xyob3DWq6LQgAz8k@|8J6|v;~H3 zo}&!P>5Kmx78w3?ny>FKl)g{13uf)V=A-Y^nZI4mSTs97bJs&;?&$8Gy-M``Ce0!< z_em@;v>WOBa=K{fEm>gLZ*Q;fU;H=HeIZYz;Pe}S?fY$>vja}s_iLH%-L=5*#ji}( z_l2xQ78o{enjgxYjZN2j?PBBHc6Y*m-BS8~9Rsn=CheNJ1%_?3?;GGY+4mLn{UE!a zm|NKQN2Nv;6|52V$mzq2eT!df=N^;TXX*~9z;GCt?%P;DV^8UpeOi)$Nh~m& zjCFKKayL^#<^bLU$uLJ_BN@RB5ZW9x>Xa53`d?=sc?%X8uCFQ4N9ufiq@)FgP29r! zk6BF!h-Me^Kklb;l_g+*p%o?Z=d-_% z_{aRvADW|yzePJYv>;mS)6+rw3sJRBKN6wB$^Xb~+zh~bk5v5N`>4Iq**f)4l>B0hVM%L}f% z!te>6X5OpP?HC}uV3f-XN6UBFap)cacIZ;AvLlIaut1%*NY&K7y%S!6&2V%z77cY; zM}RX;;uF&lsCF%U_S6E6MWCWpl1%MMV0Vr_9Bu&EQTauuxnkEKzX~dvnv++jAmRk~ zzHpuz8SQ2Vo#2#2fKw;kL{4pkK%6|na}rL?9t&{l=-q@##V4~sAS zN74Zc6!fWu3E|W}9}`Y-Ib1kJ2a*{i^Eg#Q#yE5EG?)F8oT5`X#i%@|q#F5-liWSP zscK27oEj?^PK`^|tbL2{^W50O9F~FjL^J^|bc-+6M=%uY2e6!y5G?jdGKoO7do@`% zK&5huPBZ@A0!{@hx_&o5r{cunI9&i3qlU-#)#YmX!7hmfyKedg*@cVFU>Bc9hUAQx zuTOpB=>Vs$tQJnS5secQfW>3+WfZ8bbKI}v<}o@8<1q385ass0df`+R$S9nm1IgME z?{TUefeB|TJk1MG%qejyrx=yzl$P)Isj*!HoC+!CC_wfwOz+UAI;5g%O~45^ydj)o z(cn}Q0Zt8yPYrUw@&!`{4+4BHPre0vSgVuszZHo&kPtAbk$%nwVUf<{bo zKnYH8N78=fzzN?%a-h#J5T9cO5Qg1*m@sStFHvC_9Y|IVOdi9=5twi`;AxJ0nGB;- z8OEqQ!?b*tVIQgvFw96w?OHJ$j0MB0q}poR!wFx^eM&4ANh8u@tSHvh3GB8yZkX9> z<4riC5d)G;B9LsDKJ-9m?4S;%?p96CXJ96*%It+Yy(P zXEA4Lo(yp2gxSKGF2NQPfP;qO(+?To%e>+XZ^PwV^bz`S3LQWW*wtY#8o}J{6VAxC z9|n(z_c$|3MmP`SX|5e7XXsSUFe=X(E#Ku#`aJ>8j7Uo53{9GXGd)r@r%6EgpRWpM zSTwp)8v#~6#TRQKzq@1DCys=XOXS$d!ubnr{_H(A5 zarmw=LE)g{%iNzU>m8fOdz(V)5U1~Tr`@FnG0%(yci4=}EKXJK586sDhNu-|NO zGSw28E*B6!PeepbjKF9o0{7tn@7vhfr7VJ~!Zw!Wlz+vKWD$eBIB(CDohb~olJvs9jd`Wp0 zbLRfX0-X6b%f$U+!KT2TR=yg<&-shnX{o-F+&IBuZ`A(KI+1Gf^6{i)6 z2Io{S+%P{h-TBnv&rUs`>i7qFp!2DRuLG-PK4qEgn@X8Skj|S*?OH`9mz+u+FUz$$ zm8xb>tEdxxwx9*VPdbpd^i=BmIWm*8DrM$EO7fDQ=fq_e0uvSb4%RLX{WNv|{7g2~B?l>tuFDQ3!R_VQA*sN?w} z{g2I}c2ic#Eb8++1X)#3(FiK)X}bv>)l5E%8tfsHyjfH+lOFz4fJtFW3KX*--s}YG z2#RE20wqj(278eRt_A6YNp!$(fY4KXH3+m5s1psDG_48LF*^pBRIQkWNgGQ|pl@YFy$=j^sC4< zZx%HP*Uo-0z_lLMXIfLK_fUibQz_xv`5zFjaR!wG&0=&QSvl(Lam_cCdg&Q*ZCX>Q zXSNG)&G<$a7nhn!&F7o)KQ@)xL%G(E;iEZrn*y$d$dY^~I|3E;G-0m{Mk~IHjcJVg z#D{U;&`-!7Zz?qjdq(a@E^k~=Rxa%65|o>rPYpf8;{5X|T)qgIF>DeenA4~n*+U2X z-9YHEhm$5dpZe@y$)0J=ry|=1*yEp1jhC8FUH?34n78`a#wNXu`PBQAJyD=BzX%tw zN9dJj&z0qV_Q(`z()rX~*nBK8pW5~ca?hJjO~SpM{utoiQCkc5WRl=)c2f1Y2#bGG zwKuu<{(XgeoJ$G!=m7U>1Ki`x$xfox}gwq-sy)-Y68Y zd11=}?gb}RPjBt#-Y`|SQ!!ijF~x_@btdF_^OLIfdjp)gaVz0WpJ3bUq)OJ`iziia zY=?pq)1FklzK)!k)}-o%aDX#YPO2KQ3l7fo%S-KTPpWE^Gp*#z=e8)|jL<9JujZqo zqV}>IgOjR*(b)WMmD&sM1-`(3)k3HU{(SpYkB@rut0qLteia>dzv`JH^Fo+sInA*7 z4a46s4{qpqhEpM(pFCi`a^=5E>}Va}?XH|U91x2ivB8PRK-9rMYV(e_ ziHr1N*QigXVHdt%B%ls`F-Ofx2l5POe}z`bjuyKq%xU3i-gt`ar!xU7-?);kiMwS- z3q`qWR4;8QyhoBqH+HnNC&;%mvtN;M|=S%`PkW^Adee;wK)y7$)(UbC-!+FDzfe*TQ^R+1(8^g zulReVj3*uXF>Yckb*bdlqYRMKs6;+s2Co2bVrReybB%aTqEhc1L?gWy;yA0Tw`Wl+ zyIE9Al(4WTKy8RS;YXiE#{3RZ4dP&>IAk8gt}ueDzyLHXB@X!O5%0Ya%gHEbD?H7- zwd5R~$~i`X&B8go#h7Q_p<4u)7m}39yz6l%6bpgT`$=5OVfW$>5~GB2r7TtESE+X) z2e(r`vg7eg`Y=%j78>u3I_Xh{;uDmbc6J5Qg0*R#Y{-5VyqXtlT}+J6kV@iNF&2Qj z_DiVU4|+73xHpGFXBBZ7)KyB0Pr+NJV7a-Q>B1Wc`4{&QF$pi zC=`$aBPmr1t_F)B1$|OAr$s>chuq+GKbW2FU?2{Z2}<3I!ge%#Rtj{wAX`rmUPhqW ztpvD;1F)Y;0i9;Wn*~x3tY~c0THmPkP~@N#RPG>BFrO%kq#(*r{m3xV&fXqrDFsao zPGlHMDUiHai)N_ah(u_N1)#3A5~?8KO2HQ~*^I}&fT*NACy|0%*94^C8MY5ynHU`f zI`Kdi%Ox;9!9M7OcVkZjyXnJ+q!4!irQi?P2S)H1SR_(F2mIBD_oRSh6bz2>G#|kW z3WH+?h!$s5UJ9fdc`2y<_gWrJ=z;R3A|H{IDg~G8nstrT&>7Jh#@C4yuxRLlaR#Oo zpnh6y17M{V2PNd*BL|G&S z{S1YjBTYLyjI@*j`e}DYf@e9B*Uo=n>qq03Af07l8fV3*LcIzwP?qX2x&1koir|zeufdI9JAGpf!f>F&14twk3iM+~d(BBBpZ1 z>W=kgai9YmK|eDGSxWlqgB z@D+uNo_Ly@{!B5X6XuGgGP5?XP-`lBkD-aLf)Vppf(hCi`63HY}!q zjt)+6=|CvzRD9<5pb|bKNbLAhFn~QIUd<590|^p3*23+0H$Jh({2Rr&x4usQEf0zs zDmCoB11KS7bYq=W$f`6+_cI*~vI%NuRDB`!ji_&eAV0tm#HkDsgU|ySCs_2eFqYN^ zIrJb2%3Oz`Qo(L+|?1_hpdWDn6)L21k#OVS?LB)}hVG7@zE1PXn@Z5xSjAzKDd( z#DdJk;bwkHGV`ff<%>vramJ?S1h+>I@^!Hz|0!xZN<@%D0&J86q{5Mv6p(5Ly^A&$ zgg&sZhCXLUHxQFi`e02BtyD3g%Zz3D;PG{laPDIGZX@iHbmqIHeVMpjvf$GF zHm{WEmHIx>Uikz%2zzCLjfLCpkd8UP+PyU!3tvNtZpXa;cGA5=k?@^kdtYINM`nXDcD;J*j>FbKg`NL zJHcZ0i~-)WTRsq2EwSHM!=heby`&pu@#kAFxpByQ-*zEd)=TKn@2i<5=gVnuyj2~% zWu3+i7}?P*(yRzRriKr#Vd3nAE3t6q-=eM+siWM@jzC6yGw*ZQKsn{h_XJ*+&Qkn0 z_eGuX?xU1RoWmW8^v^{d&6%@gTvZRw0aYqS2NH~Ae}P!(I&}z1I0uro>;A~DLuUf7 zQqWlw_Y}Uz9(h?tR7eu(!5gerlF27TvS;cRHFdJQh@EgfH+)4WH+KWtgT0Y1<*c_L zlCo!iF(`yKJyaP=r#bQOL5BL(@3E*#?uYD5=4NymPH$TIo^oUd7`6B+e4w_3GM0Y4 zh2)J7vOgiq$!8-l8RN5fq&u7m5dSq+2B&t3#!=wDsx$QxsBdH^d?zIw)M22$xc4PT zMzL9o;A#*}I6?>fQ6%$5x>X2FI6L5Jj=hgep;MW{C~#1i;z%{}@1l>t6yQs_q*T8A zNjI#Uq=s_BHtK}0;x@0l4wSB894rii-NG*%+3b*$T)_QarA?6V*&=v+{?Mp{3?7&c@{IS z@;3p-HM}T{8)kk-kNCnGq4;#b;-ve;7e0(9La?GtpB|@`m5M#F(~RH{s49%31O5>t z^BBiXH;fJOG?&~XV?zc=Z_@oZ%Q&e zh%k;tW9ZjQ;I3QfP-aM$Vl3mjC7FJV4n}9y*F}KiegKClh8F%8Z1B|<9gD|d13lV_sB0gE@ zz%-yKKQE_5@%zfu8oYjFS+%tb&zl zO;)YR$^kyAjHA;W{Col9f)#x~Drz@I(c|`Bp^OU=mm{Zfp(@|R+mnoAC>cjTdfd2x zL34AOjN1m0IDC(1G2^c43oz~hR>`i0z_zHMu?DI#BlJ1CQsIR6rXoUbWS|bEL{;8| z-CP8ZxQwF%{xKx;7{{GB4E^vldk&IubSmR?lg=_u%Xb;K(}n=!xN`^0(&K)vJK9ES z=-{P-iiW?%-C*}PaJrv?*ytg^S|tGt76DksNl1Qeg%L>Bqsh7e>XmVHns!sbxL`%U zp35^1oa!JB*q$Z`tOm(xZV65}k_bKR-NB>yT~;< zm1~U3zu=@Ac|Cd3^8v2)N=oJ0OPKUvMYmll>eLDd|L#8F8jFUWj1u5=Cq7x60oNMf zvs|m!2+51-x%%n|Fe3suT)9T4S@UcG*IFgHD_*x|{amYJoQ{0azrv@#(kMII)sn@L zSg`9eKO(#KL|{^$ld!A)rU1LX{+zIDf-fW7pwV~IxcD*((qrNaS5o)r8Y>!P5Qq;y zg-jIN&j{w`rm%|+_(Q0N$F6P!CY%*`nmg8zU34nD7?o$2mhV#GCKF&+m!wp7eM*;J z%at2P07cWY=#uD!b^1I+R$jtEY?Xx*35$9XfSvC^Z@2=Tpt~UiQd3`t+x1k z*srbh=4&;GmiZbTI$y&Za?K)nLt+!#S;ko#CNzy>kcP-Jcr#)SmuMX2U}ksdRm`;v zI+83AG-Df_*DtxM$Z5);xd;6z9(gPoc??IwVD1+eYw+Y!&%S_M>LGNOdg^oax^mOZ zLb2=3^UM4$@Sy1sL_^8QP&~GeAmUTeY6to;&!=}){`+8V)!S1Pl=`zA9EuT>>9%Z zY2rLZrl~;c_UeP4p-}4u#+0PMWR=#Jk)D>9v){5`%Z(tDPI#P(v0nB)ogwM2uU&2( z=U55KiN#`Hh(6q20Fd~^8gns{mcXq^V3mdagB2cvZac7Zgd ztFG9!(YO(f>rtN|PGyJ~H0;(m!J_jOOKZrEoiPZlJ2W}%ODnDEGTm1TtwY7jtv%5c zKZMRzb?iZ)f5~zymKhulouf|pWbOs0a3~|82Q=Mtn(j7e8* zgxM{C22}xcn$y<>RRAmD^7M;;LI3xbThUYd<2sf-lE|D@Q30_!0kZSSAuS_0q^)N# zY#s~1ebN-Wugnz4l^jLBL2~M7+;IdQgw1An<4W}A*oWXt$`dnC&=50FJlUsT0c4*h zbo=zNxns3Yr)}M;qy$F_O4tum<9#Bi_Y~B8#$*2!)O;%9+|SX=eT%yX-4N*Ir;u#e zPv9#xr9d}YQ{mR@L>w8T!)sR@5#ov?oUS+u23>@OII2%arFw`mrF*4#7i!#q0Q;%z zOgDWA2d_t#)(@a~U0Q-)V3hlP?G8zup^0-9N-=i6NT!h zeS$b;Kb0+8R>&t{I#9z^O8Bg97|{sHo3{u%%s_|_z&zCrbedzI z4C;mgb|3L{ejukjFxd-KJ^YOLaN+HnE)E5VNV@Qz-K!7$G2BMujy@r=hF1XYvrqCP9@Q5J=1xs>QP2y4|t zy++hZGW|w1jvdkm@d5ahss}pF0gn}^hakJ>JW;3~c57AjumkZqtEvUWLIRv}0ICN@ zQa#WQVoNN# za07f)4}`_)!PZU8zv62|iduX?{S`s|cR|f(Ja)aH=2HW3=vaIHLisK zVhUiz)Y5VxBb*FthSW_8y3tA%Q@YIEAVyw2bRh&^1Y-E6Tc{rB%&P~+`qhKtb=AX$ z$4aP&xMmUcP>0VOiF(j{YDm_p_{o)`9_m>;3@-t!dZ=Xx_Bo~6Y4Jhhy75pC$BugH z;n$aw?h|UYGlWEz?p2<%22M+Nv8tMKsu2RZ8|K0X_S7ez!^L?H^^IzrAWmh77?d1g zAkK4WY2yHv?pDzBYqu`l`z3Xz1Ef&8(`6bjolHFld2kL@D=;Ep$h`MARy~X|0Jq_Y z)d_FiFX};4rTZ9|Qh;SD`iA6F&sIH12(+jqbH4%It;ym5N2z+C)9mo)0`;I3a@qZ_ zM+()$8+M0d3GuVc6|5A=hC5{oXm={!*n?Fh}Q2YR3$77B0#9rhw6 z-=O(v7uCZV@ZlUbp4cS;Rk2HgC)LAwfK(5J#p=PZ1hp7X&q*@z^p! z&8H$RR1Xh9_nT1grF6JvZ?U)mx-88AOCW~1Z0SqVoD#xlmG{r0IZlw^ApYhBb-c~rtX*2nKrai#gr~{1Bj7V z53LAEIA3M>*iBRqbmr9qWBuwu@w)PI|DQ{!hZfBu>R}ewmNMUB$WGq8@ta zgDeAB_0YwTyh%&(LF2mdP!9(@?5T%K)1-TgB54J%bZ_^ZaX2mA>zFR(bP!+#M}15R zUsQc<>T6J+AWmh77<8}KIKhIoe)ufit)SI1K2P@=&9o4tP`cA)4!U?U^&sTICk2%8 z^#X>>#LZScG%&z%#44&2e(qLL51J}n&7x8Yu)0GZj)VYM^&lb8qO=r<)gq~w`%!3` zMV+tefll+n0|n|K$nK{f3aAI@14FD%Y(#*wmY{f7MuP39p`jMccSSAGIxC9SQ3E}| zGoW|`D@2(-WVq-DR0|KnhlvE9IGzn^;&?WmR0}5pQY{b`s|8!dK1D4BVNP#RA1J8r z6x4jiW6gq^Peoj)7Vd!1`P4#=6oc|5K77Yq(8js}QsIq167ggZ?z#ZD;^{f#aJu5j zbP!Jhh^PA6)fZJ?oBA5m*CHT8#1v1Bt0RDT0$A}h8c|Dt8wuje)F_Cel`5WenTtV; zyjo~LNWwXi;rHA~wLoWHEil%v78I|m7H)g6gj%TAETR@($DY2Z1cr^~!I zHJMrv^1vLh;_4AFWY+(}s)b$#z#OoY5gxf&)Pkl;cQ6pQH>AW^8v%Aw0IXV&5NJNg)g3=_gN$dXKS9lBJoZ6B&8H$R)Cd0qY4hoWCrK)3TUr>!4RivmwF6Ts{LBwUE*S*5 z1aRfjbB@F5$|ci5E(su)>JwwC&|c~r)wo{u4GYK+G38R@x(Ohc09G!g`B`lF{0{@Wql>oie4fTerX zb1sC_(mljDVf=BbZK;j30(gZiq}Cx}xSA_gVPHBPYLC<}a+?pDy`D@b{|>j#c9 ze|nR51EI4ZuLPGxe43VwlB zReeA|s4KB}-4B0D^g$m&ail@V2lN0zmjFl5L53yYpgH3L>VvD{OUe^xbU;R&(ZQ4Y zU~53?1Hxi`VC&YQsHGsx+AZoG1og#&n$LJFEU5WZ#D)6c3P_tzAKXV$LCq3hN&(a? ze5vrmNs&v&;HC_KE0>;gA)KyUG9BcS0CK6msQRka*Py;C_0=9-ru#>EENtZbr#K`M|afIMTBExUIhWdccygpzonq6%-CG~sP z30EKdc&LOvFq%d5LH@wG)<-|u>{LX4Ao^gGwS({iSbZ?e5S)~dYU`JXp<>;5=!1ia^Xm5}(+5JHl%=lICd?Z$tFN>Apq&A@aVuqn z`>^Frr75Y>O$>xRPAM_gKmdE309GGJ2-Kz|lL+v$UX#@Vd|LGZo#wVR1^PhQ=Cb?e zcjxs%HocC;>X(4Aee$ELg9pyP7CmC`ed^HdzrEWrcT|&9`1#J6&%4|`x3GLe)yuqW zpWFUr97>poF2AelR&5Z1NHCp;jLlbF|YnLQvb-9Hj8bDjMHuCGKNRXw6sv} zk8XL>ZO^v8a!b<`;``1d z_)75i8XvxQf*uF^%A2(Q$9a4W(4$2C*QY&tyc6|b1A`p@;@dnf9D%LI_*nnOaXgx#0VdHDP;<}@&Bm<%iCe}Ku5KU<@H<+pk6yaetA7K_ z8(~qyo>FR1r9?$aZB!)*8ci;gS5ISf@zKa?HjdIYYH040c_#4Az16GHboJGL`RY|e zw4_7Cc=fW%lDe^R-0YR7@H(%oqW0I9X#bDA_SYqvQTbVs5wDawZM_g>JQW#DL^c$) zJQdlHh^$RDuQm8+VZP0)v>pNam*DpzU->nO=8coIGPP`@Sqv4<=!x8VuZ`2C=eE9b zs)(iNy$SsvyV5P8^!u!YKECA=kA9QkeYx@kiVxnye+$ZE34WaF!&k?8`reOVM$`%4 zan2{Po-EdOCamN^Fkp8E2M!%XzxoGPu1Qt7f;dNOQCXS+}=gL^52Q}mifvn z&EF@!HAQ=`gNmMBdrQ!}^M_N>`;Mu~-)q|Cm(cfRzVaK`DMu(||9kpAAb%z5v&ix2 zA@wQLzGpncs`g$76*}Ygb|yS}zZ319T&9W<+l8^HhFCHKQLpZgSYH&0l zM5V!%gZ{vHtweu1xS;&f;(J5M;Y&2N6j#`m`Uj6gP@l!b__a6Ro~l0AeBVb84ox>p z5Ds9OVCL&7Q`KiyVSP#y=x_QGoKFA#88m7!iAs*IOU-{eJ^K8wueX$tmoi`Z4TdpVI8vx@3h)$nQ2Kt2CMX z))udatv}zZ&pRTm=@!8IJWfZbu+T-t+&UbbIeOdy4Vs zUU&t}xV>e*@-2V2O-0_s?%5QpOI*)QMBao>9`Or!K)y@#_e+*}^tJ7^<>_kP29LXM zmR!yI2oyY9J3m!6ALYwh-tWB{1j;Yb-)H&CXaAzMopib5f8qUf$+=$pC-2`!Pq%;X z2X$V^`{CSV{ksG|%6#=HEq~ihH9xoxDzvZ;rTbfn@;krh(c@jw|Gx4k)&FOdWJj_7 zhwd&U#Bgpi`oDy}UG!a#9`A&{E%TLEn*aaf^~i~mJ@PuJ?80VGpa0+S+FQE(Dc8I9 zns)gm=w0S3|DB-sCGAtS_lc?K{b8u=8Pj{#l;z(sRr$9N9zxz4A_atL0s?_-(cCzuszjbKhQhU*2qaCFJ>*Z+Y#bJQwlLo**c}KWw-+ zL4sVKM)0=9azSp;8{EP*6+aL5mG76IZIh8r7}RfGda6z~r&k{IMCD}zdzZx{n{xL} zUEbUx_sK@ zEqc42RX~e5+;}uqj$XAb7&2VBVogKkPX-%m9&PA&wyYt(^zX^Y z-*F~9^5T;6WaLFk{he~6C;a^9csh3TnO{goUO?8|-T7Jv=v}J)XO(P!w4Y~=`Fj~3 zqPMi*(WL;s664o-EW!vQjxd@JLq2%#`}jO>d4{o_=1z3IGZ)Rhtu zkcSfTxB44ieWx#fuWXo>{FNy0gc+50`U^8HZ~d7wY2TwWE^pC{$~*eSX|=CJe=hTt z$NpTf+{#a&q{_v%pLT3`^BtQ;>)01nsh~Hok3!X)G|Ub=k-M!>eyWT6XXn>F`c{el z_8;FbP!7Hhr#j%_pnR6lw{uoy>n-R zZ_(uV9zSLV^qV_5zDuUWSK@u~&}p{47;oZzv5Xt$Be|_HwZ!mmDDoyXJjQ@;+A$#X z>=x9q1`gTM$NQss%$yU}QQUa+G)W397@q3&rg`PLTU>2C_4s3+uRhZse>`i;pU7=? z{99uD@z7Vi_D{dO6SsCpt#7rwQ)g7(;PlEX!QYoo_1eer065be9OKKl9A8S~%Q&$* z(YPViyn*lj1*y=>^D3+4m8v6n^T}=8X5Z;@H1K{cLElBb@~2PV!F)k)mA+*&D(^5D z;QUyW(gcb2dG8a81pw;j00>ym*DU$-~9mkoDezfNGRRM6l6 zKWo_g@$=o!yyg_Iz15-#^5tQME?R-1B29w-FRrAN7>_Mf^nU#FeE6G)NyeT7klcQ6 zCfrnbXK4T_aY#G`d(z(AScMi15qJNoH2sd$+{}de1%xQ#xe8VJ>44o7BvWzA1|iQ+2vwt>3F2ij3fMIU#EG!N`MU^OKPWVdQ&&ixvw~ z%>xS(&HeEA!b^WI{M~?kfIX4Q+rW;k_BJOVve=~Z7{0WN`9&8{!`V1N8>+J~sPlay zIEC2!Rq;RKV?o)EW9Fgq!TU}$IUTTXUTzmtj`?jlYlNTK^<>M3&qX^oOdw=_d;sTV zFy+Y56gP}UECg6!EqSX6?|AIf61A!x0AkyD7c+hd7Z6}ARAMN%`jx{(qe-TjJl^~q zs5k;D!Ynk*Xyd2?nl+5q9{$C4Im&Gu00p0$ACKG#c;^D#x<<~%)NTtBC-*H#UBwz5 zliEF+IJxJT)R!>*I=MGb#qH5HARbY&brW>1W;1acTdauN4bY%qRUs; zp%!r{^RB4<4ppML1C>Hhx}6CV_nIpGDh$ntWBmYM#u5Z-RyI8>e-7Os9s`o!l!&1 zg=(J~)?x(M&x^xs3IfSrG^3yK`cZHA7y(}&0ZdQ;{2Iv?=%=YnYiH1!0xRJX=cEf@ zO5q%k28Pg2^JHl$oA1feiQgAl>LC7N(rtRJNyU zm@ehC5hT=JJA_Mp^%~crzB=^@;#7u+AttpNCs<%y0zSnn;#AE@CllACRSKeDuu2qN z=3jS+M5&qM286&O8N)vc^$v?<5?}>|v1sK4@KB=E?0=qadoM2`RP~xgglh2~)*_kK zCsr=Ct5^VXq2*%qTff#_ONKg*5d-ArgGFw5XOBz08 zcECt2cQ#DwbxX;Pn3Q+IZ_KBRr8QN0OiLADzqt)*MxYh55ysokNWqY}`i2SA4t++& ztREq!?EIjZ6;SNu&b-kMd}CmjXLapw4DRyh)IFL*&7c(R_n+|nHKP64oDfXz+zw~Q zDn6+Ux5#}7x+xA{)CvDBLXztDwjuloge4L7k#5H87q8)C1bkfp=C<4L5m{I+5q@of zNV*0a%FD7R(r&6&qMaG=0S0DBOC?~u9F^dcl?Z1a)pFuQgBRuU>=s~c9ehj5b6e%M z&YhHdGdF>XE+i%=+@KY0rB5y3!%7t^Dk0EGj6huoVBrVAR7_UU+=;+j&y-I11+o+> zoj#~^080P~fsqwPr1VSM_|77HCX<YqB&d~~X#%qo1R6%t;Otn%r;^}- zAPHjk6g0h@7@Y92TE%MmhUC*vwu%x0E0c^!>GwzRR)^2*G-(ytbR*`k!>=4AO`o6- z-3j?DNhJhdsAB}I!w|iG7~0(No5`Ebw*vbZ|DsOwSQH;w6AT3GTniIOLt5PjK>auFL#8Lti&Id zlG6lcwiNl86v<~iw!fg_QxWBEPYMbcl_R1~5Pjei%~0Z;dGQy84*B6zqQ?gWb4&on ze?tv5l3=KzR=6U=O$<%(-eE%II|s#MfFG+NYPhPz#UcNIeLGhp2E#f$P3{Xatdjt% zOBoAvt}exJHm^vZy#GlK>w<6RDox)6klnw!)Udyw@6ZomQ08h3*3`-L0+1ENG*YrAuxPDBGHH>LKme2{yHXczmqH9GQgmTgT-peyQ-c5 z5_u>-ucf^-Q?6MgCivL|=oQ47>Sxz(O2qysC8Y!=Vha$FlqZb4!CiSDISdUg|a_DFp`h6Dk&1rz=c$0 z2&6L_ma$hN(#zzz76gyw(~f#+=?tVT%N>feQpK>H3NmBv_t|zGGzX$ses&3mj1d1w zkADWaCfd1%n_j3}9~*^_EeS~X5Ts)6n=)~4boujWuQf!P?n3mEy@VKI33R!^n=}?@ z=!bIK<{ER~&Hjuud5wA$pZ&TBF-du1B9va;@lx3nv5kOD$;;gc@=b05klA3zL}6AZ@g#Pa|oCp2I1l7pjc2EJI9 zielP4fN68AmlN;A9BQVdvtV zhA-`)xy&pM%rCnI69-gnnwY>G1I;8lKvIhqfQupRh^Aj5)gw7fz1X7p6+rxF?TM^34gs=gRXKsJVEF#${Yi*U6$-ye; zbi^iOd}_YjFzm&Pk5$ipO6NyW7zYGBC^}6_4}!tiXYf1-vOs8#d)z7}7)^#BjSS%> zb2MJ8XlyuJsc)NkDZE;q&yXM?)s!4Wl=4NBWDQ7nUm1c?D5jKRgm+XIYqGW z$$Vc1WEBbHv6J!4eNc$YHe-S(G(MuN@<(zSCVdhTBx8JP*4*7m$wX9NLMV-C62@a+ z#54Q26%9zT%jy3@crwN(^DG2hf;@yU-i>E=MPVLG+7l58OWt@gV>2M@O&E`T9?t-2 z>y)$#K-z<#%;K@nF&Rip7>|8YNXutD_F04^<*BGiS|ZgNX1@eN!m79guzA_{NC4ZY zq|bg|=4R5xs_c(T7^h^so{ zP9-uYV|-GycLZEonG|?rXz3x@i={`nh`c_zLi=QecqFzIchf!ky^Ey5PiH`yzl6{ac9;-wIT8<}%*qE+@2?RhXNMO(yC^tO> zu`rSkMbZI(3-a`#3XS8v9Dj@`0a#V`!%4njZ!=fa!Er2`%m_v^i>VdP&tkupQ zEozc=W=nn!$afSW-%-CpMYF$n>uu>qezc`aKqd|#ZJ`5gVJzBmfZLXf;Fq>YdTmQP z!d8A#+j8r{(iUbzTNqMQYyoqgr3%mB+MjV$JjK25e`zZhY(`D4AGz|o~Q?&mA5$r=pk)_ zO^}+i{-)Y0d%ez5rY{%^i6xP45|D`kEZ!4!qyxlcEQooK60_s=(9)0Qjz_d4S6Vh8 z$;yb*@{Bs6C3At6j4^ZOD=m>pD&_A5**7u85)~WNB$k+%T&(^J1bf-=F^P#|ItOY% zB>)xd^C8%;LoDl22y{-J0Q(_;RW+;tj7$S8u1Cpqpf$As$z96h=^KQQ0zgRSg)|e> zyiFs(Sp}Df4DmpjQ2fi`TzQN(v*Sb3Ork?G8DlrD4p^<7^hMMkJQbhtS#oOw`;m6#@!G)d4@v`x1Px@2X`H7G%+5pawW8a@ z7jU@@Q}Ln^&h7_8)xK9q3)`lz5OKO+!b&e>gp(mKA3IB4A$=$YZv~7F;D8*p30)Mp zou@;?1YouZUv5w2pd)%jq&xr8tBk#YmSzt}b5Pg!xJg_zlF_)K%xI@kH=}5Lx*bpI z?Oy>d-61Iu1Co`w6;eMbZCWp%9%)IsTR^4@Kom9|;1Oe?W9nRmeKGvP6-lpL=|I@Z zQV0Qk7R3qwEgAP<9#1gUmOyE+qT*CxRO9C1MSGrz6rVc<} zhID}Sj4fpSM^UCESJu}e$;vim{TDwVtY4dmG? zo+iCzPoG&YLWc>SZ{k)ef4=i&^A2~oO4YMG*lY~`hoWDuY zF7TkibO@KeHWeOco3gxz>I3D8v8a+|@~jW8N~D(ZcElFAuCsMRWqN2{FslM_WaC~RLZC``554{=AP|G~ccmY{!l_agdVam`zy|3e?~ z=z56cmkl*^Jco;y%Qofi1=9oa)Ltx4r~1lk1Fw5r`EL{X@1gvgi|&?H z7?^_(nePp%drU@Y4z3{bu$&6_2!;C!OqJr1b;-!Oc;xD2|YDMwYtQdEWAXaJFYl-~jR`cQ*jBGH{HB`EY<%% z?6s!~{d3%F50n735l&2&^Ny>UV$T&E_YKNJeX%^8;KN_X^XVRb9HrI!zN09@yB~?! zE5_zqhv-W?$Sf!jjY^D{L8d?o0;{$Q{Eq_T20;zhQ(nQMsN4sj>wLdDjh_KYbGe zB6jl>DxbiaXFY&CK>5Gn0S=bfApG;xyZd?y(yK&$Z>jU>)q<+_L1*>mc2?^PsIAnJ z?`+n$FJE71E_sVXK&7WcW8t-&iu6EWQMqAMZrFr|C$I6wK`eDgHsIS6@zrq{HuzyF z`HUCSw=7@Z&J7)iCckEOK3o?a-p2WGtPyM~9#f8Sp|jw8_)8cR`39|l^Wne5ICuKz z!!1EV=Cy-dzIAR0aUh>a*I^%*l{E2zS$%%Oh7U_=Kqt=ucXW8fiJ^77ep)#Pd zoJ8NYY#fXX@%;P{jt0opcbt>&$2s{v_g<`O1H;dCHNJN06A74($KwL5n8NM8jcA1qN&4?0$Sud<(z7x-D9@ri8jGo zX5C=qX}oP3pB{`n1=#$Qt6eblMl+VNhlb`SPaYbK41!+E`q_Q(f6u(i+nz|w**lt; zzjry@PbN;*h5I7ft=lpo)L;z?Cz7(J-c*kmfJk2e}`SGhF z5_c8f64=YG1Hiz_-qV`*<$0%Yz@>L(5|Oc_BNwz9*Co?L9dCZRAt~5l2I#4VM3wTQk5@JU3& z5np;C9Lp|@CjL4<@xAK#iN&Da_sZudc8;cm8h8WO0)e?6e83R%Y`Mb4w`9VZ!|+W9 z@TE^@!fD47EoCgSQO(20-0+E>b>tcmRv;6PVawUfyH-yAYPMBOk9#@Q0Oo#R%`Rof z^RxiIN-h}FiZLy|yqf*zHF%-(BbL0+HN3Gvp6a((G4jdNG5ZwAQ#I1ek53{`E!e7w z$9VV&^29Sw9E$)zo<1Xi>Ei`l)hKaSH3(Q$4n z4iIF2gf5sJ$4WrZ**lkwq5AG& zhutJApTWfYnwE5 z0c6Vw^qRplM|$E&GqD+Z9?3hE8_xa^3tL4D^o}0| zYj%1*v9B3BNI8546Mq7UvwZ0EclKGRTXZE(mdnpveVoi+RB`B3LRC>J+>4aZ?|tAWmh77y?tJae`$iRtKL?#6pa8GHsf40{sO!#=vg-O>nr(Upsvw zHj0ph^Dx8r*qb6oXI{h@>lZP_>x$TR$CePW5zQhZ)&wSrh-p5#$evX z(^TnUEmZ){lhTI^xBynfB*eX`C=nn@pC;=8xKl-pPV-!(K*WL+8;u42V{f};vVEJ(4XM+ZeLQXUYobLNYPb!$lipjP2ah0jMy zyfhhuJF5Uz#5z1@7o1ka>X{DIAV@e1)yJgpHL0&%eNpuZVjN18z)XY22^Lr+fX^pl zb&PZ}J({#uK_9rTB1V_lW0_CHdJ&Rve#Y=G>`4)$GcRI{^^2I|bwzA`q=bm|XciH% zB=)#+d{JsXy{hI^97)2$v;k{36src<4^4msgcy=aOGF|qz9G4uCh-ulYf)lp5t9;d z;7MBS^a>a<2fp8mSRVr%XOxHTobc}3h=^&b^n{$mQ=s?7P^)nSS`jmh$6H>K>CG~X z9q7Yb9^h^jF*?oMc?BY-6>=%I)BK=_{Usa_v7J99BG#uR34mIKFBP7%HASq0F?c-# zSP|>?oV{>b5o=;PP=f#~&FW)P_*&K1rM?#R3F1_Si1FH6sBwa2NNzg$L@dfkC&OwX zX@i1pa9u@=E_26seInL{kc9IChHsoh5u-CNVvO~RnBsK_w*FHkL@cgZM8x*PArlcX z%@?be+Er`|a-prY^x;(xz;!Q3Ks7^BX^BXr#fKwYZahTnlSfS^Vp0OmDiTA&84!T= zZ}b|`V#5q@oN*pKcEbHziHK>cbQR+u*pep}B7k56SP_#DdoLs<5g^Hg9%42C!zyBQ zn%{q-K*Y2{F2!!1=MypW(Dk~IJc3>OyKhkUFz6+xc4A{J0iy<@y?sn$2ZWlV663UB zV2!ql4_kKsfcRok-j8{v3UM(bNc8IWhRt;|2Xkh zMMk*XJp#1w*y|)R_c!NtOl-=&`FEWETK1Hl@Ek;IS&MWZYvF{iB`xuOkUC|wP8soG zG{HdFSpdMfQ1JW#^8(&{@z{e1Ny-yfAt5lh3W+CYZWjVB!I?`!oVh$LcN$d+it8dS zCw!O|*F#^*ElzwGEi-T^)(wE$YEs;JQryi5!Ld#}IpN_grGXvvossCj@Xy+(Amb7$LYQji)eRoibqGA_iRZBC%@O z?|%wqcQL?8HxaQDZql+_=*yQaJ`9=|h(Qy8OWZEJByo)qAswsu)P4Va<8HwYW%ffT zfFu>Ndb0*>Ay6)OU~5r%^zdxzaWJg=UNC?TfF&>B#J&ig{)zV%xhr!w#YDwc5u5#q$l@f6~$NsDKDq@9C4!awd`c?x=9odl*Q`A z>C^+TS49QRk_$*cF0shCyJiG-Ib0z-X4w4EI&hJ!v1>4LaVR%C8M#=Rgl5EEhOlMd z!~+e$CK!%B_j|`>AC(}qNiN5vm92+FQ{M$!UqkB}q;;$61;`zM#k--vI{NkQLgj6{ zlqb>$qQbZrr}qQwWq?{Ha%Q)0Iu<;9&GHZ)Ks+2|Jh$2H2a`RGeeRR}ocUg+;qh5A#>Xiy4WF1hI zVFD}~0GQpMBtEE5$&(%c5G^WjmR^`iWvWS<_uDFr*)$4Kh1_Bk+9wF4&f?Vj7+#@0 zj8CNr%neUyp}mqP-3`D(>1AE$hr+00p|@6QyZdb#g)EfBqNK)|+G*?tvBU{tz48e4 zBd;cOtm0F3e+4*hsm067l|YZ>GCZldcLd~Vc|vIJ`MGB8F4!4%^n||hqn)Lph~-$f zh4zOJ+8@t&tU~bdsn~MAMqz$MusEx_D_;kDMRo_t$R{hZJs>MWSX7Z#maY{MCn|EL zROH)I5kBLw?F1j6imj+3&l{}>Xdclno8=W5EA6Y7XR#=?6|%#+7oOjqlS35!%gsTF z*qb;{TzSEtp|G;o;^D@81`>{#Z|~|QjwE6mC2XUkXMK7-emFeBN zdvbrst;UBVRx#z%@fdHOB;^@Qd3Ek;NW~new6g5}9BEN~xmF*#vhPI@rN-(tFJd+# zNbF%scMF)5+b+9;TJYjYwBWOXd2%f{f(l~8Y*;{M06?@L9ngY|RV{cD%c2&Pl=>#? zXCi0zw_c|f+?Q+m_(2OY7qlRw%^o{iEf@uYRE%g6vH5hT`LtTFUYv4u!5oDdIt80S zss;Oi$ZEklNk}bN3m3HDRjwA4^sW|UGM^T#VlM1E5nxIuV9@+(dsPV4@Kb3hRI;K1 zECA({6Qt4vrXTw(Bz%p8$sIXYTb_^3EteIvPwBmdSg%khEd@gvPe?T+H}o-m=yr2$ zHO3`2%_H}$4ZSRjeyA{FGS6?PH4dSCrcp>0whYCO2m;ZY;>5&1Q2cF32dNA(nMF3~sKiyp6siW*cL%lM)kvC*@ku50Q$Q*q!XhQqD`iTJ z#fj>~{!C?aJ0fuD5zlz+D#6F6Vk=TYUwa13maZZku{W{e&XtmpPgdk7fUF2%QAN7F ziii^x*#W%9jZ3KrpYhlgf{#zdR#cI-e`Q5LJy#e04gJB&Jai!x+X`fc-48rfz0tqi zK)w9{j>-#uiuAd2Qj%=BfqIKGrKmSe3H5dXf|i_{YjRUTy>&2X9(9?ff_gibK}}u| z)LXlzdT(xC?x+IgwihezDz|SVT{6aJP-P84x!rBmTPU}!sIJ&#dTOz&)3Db9eIJDd z3AtL#Gq{_Zh+X~{k!+oab%E@ZMM8IS@Xv2yBDUD3q85yFbS%3#v;>!xp+P6tbFF9( z^jwR8%tC<0b8!pjV^EtQ2K`WXOr+}W2Pjh1on%mT*Th85?B)NYx;xQRcgzKK$7plV zwivZLV#E?l2ta~^O;Y=GgG?(9!F-~X0l1~P{O`E99*YtymM8?Qss~uoNVOl65Z(K& zW9V7A4`Z6sfy_MGk-Z!b>t|K63HpP>gazx#Rs^z)RC(gw<1G%bpvvp?w8@nsnGwc=%hgGYZ*j6VN z6&koRb@jmjZ6_B#q0G|_5^up$oOH?5YYqYEjlajv0MNAwx^%UG*o2VOVHtSqEMy>7 zQ|QBnAbl8#YoKIEiA6sosbL^Y902Gk8HdinSS6k~8{-fT#&*OLCt}isgRu(rT}6nz zA$svcxpbmHR%S5vDxRU_RRlP}@+1x!yaFfA(X7V*z4(7)e&R?yOoQ_p@SMAM6&$OW zik@ood2BHV|JzuSz5uI8;{9{`f+q$Eqba@s$Kc8xP{8v4S|==bw0*b|e!e}3SSNGh#G4PL0(}STfyHYnI4uCno{Ym#T{1aD3%ZIA%$oaQ zuE2;1EZ=_I0UCgv7Qv*JWm1C4RH7U5Z8I$R#K@Gqgy3axkL1X(LS|x1eFu&rEcXqs ze%+ELEg+Gez{wHRFU~;6t)KW%zs^IXeqE9yCICuQe2xOiZ@z=|1QstvQLl?jbdCz>$>=@DCDka+W7M#e-UWtVdvX}}J8>n67xb~L+ z1`&o+t394OmTlp;1l{{q|ASMN)4y-EzRbg4gY$3(r<Pr^Eeuai0Wt+wk$HS1#l`78gYRFctk)Z#pXUhvsPF zZ#b^_7UVtQeK@NPpO_z*i(F?aG`Dv(MLMg*=cTx11MmyBma%356 z$o3PxIGQP^q5Gpa*>B#sM@t#V@!NMYgNsaLKPzubU>*_7{D>m-^3!73W<)I8@TA1j z8t4T%GO>@mF+a{H431gTHv8oELGjMAJ`7Lp%3*loRGj?cu~<~RlT1yR{QD?T4ZW-u9{6;EuXrA!Sc=t9Jx4;rItkn#-Al^DipK0+w7eHy zV0k}w%R3O|p&XP&BiRxBKfts0AF)Msu_!!nhc3&*H0YxN`D)i{`}uw9zpQ-C@H{Nm ze8C|-T|e1*SPrCc_H|^&=V4!c7y}?Z4;yGtytqA=yyJpY$EGCw+0^7pHys@g1CEAB;T4`y`JIMjqu!-$w@{k6`@L{0NqXhgm+- z4kPWrVB}7o^u2R1@_UBK7X>gfne3$R@8zWL9&FiHl~tlq1MRCVZr?3$1oQz8C-Z&5 z?*rA?)63|Oa%LNChEtBxPM|)VBjyO4DaqZHuSKBz67606y05*ycJ|wef_~34 z+RqUuf4urAx^*0VK|VBMzp%nyF;-c-n!#fRXFNl>U!xX04{NXi5IkSKli>3Alf(1% z=-g0+XrObtu#p28iv!Bl6h`PJ4hFGA*1}EKh)ZbbytvGP&v(*z7*4)}a!_Y9G4+5s z4Mj*TkqqDdz_KCasCmHbYH#1d{5KJR1-KszBx9g+A2m(w8qA#|cj8MISnx!_Sn$M? zv-1l9X*-b6F7Gd`&(&K*V?fjcMBu5ataYo2=;mbPW^7~$B0m2gbzcG>OHp;7PaFtK zAnZ}#BZ5HiLkWryK`<;22jodazz7OKK!S<{6^Mu!mVueHEkPX(n}pS%EI}9uPl2$# z1dvDA!yfj2Jdl6_L6rAD=iKU$daS8^6r{8m9EpU$D={e0_}-0z9q~FfZ*TzKJ^?UUne1@nGKyA&4Co;JGC4D%>4! zr0Q7@+#3pTZ%i|$S?N_3WEk8V?T~A*{ba>Rie{HiG6tf5Od9>4TC3iPpJlJCnF@x% zF~HBVbrd>~lkva9{GEWSo{|~AT8ETkDIUU!uA~nVhQqh7TYXgTt6fFbz%XsQ)o+7X zyoZ{B)3KB0dd3aqxd3i-FT}w-z{R2S4!Q!lS6()t$YiAri?yh7fd0?X9M1(tBNBgq zfxhl%T})*G;T$|vNRA@ud@Tl-XJkc8hs3=+pH*=nJ*EwsmNrd>y&Mh0hhl}{k$~E; z$c4_=h$CCMzDM>H z8}(yxD$Ub4ces3wZ>THS7HmLoou<941TN*@yroN7JVRd1salj*Gtxl>V4L%Br4c$B zpwKj~049@us!GCdq`>&T#KK_SO}q|QgN8RE*y7_2I1_VcV#^DCKS*Bal;MTG$C5pq zX&Lh!kz3`YP z=1ss1-?(3X;-+Vb5Fr(INJpEM09%9_*dh=PB$Q)3K7a%Za6Uy0L-;`JGmv01*cI<# zBcm?BXFC$yfAs_oW=Ea{&C6Lh(M6Mn6G~#Vm^oN8g912l!W)JYJ{9Y}EM9MoYl z*x*L@h@lF?i8PW3n>Gobd&2qB@F=js0$#L7ArpKFY_aqL+>50buq94>0+KjEITa^l z%y(1Oha|-owXiU_^#+13Q0VlSi3*$4`H^GvZ*zRe@YZY5E z(w~dhI^?)y1ClOYM>PuW*Rwhz)HGIw7MNCR+PG;l?Ab*4ncNsN5tbCgsYwVIug;f7 z=F0KNaJMrSSFRqv(&Ck=AiH4%C+d)cwH=th8h{^5b}7T*1WThhVRl2D_{VxBaH7_B z5l*bFmTI?Oh*^=Wd-C_WIDeqqQO~V zHB6{$es8dys^JRrJ5#|1|62|xw43MK-hQ);3)aNrcUigi#a0T%-n^cr(X~_FiZq zPi_Uc7ZYJ(OPp99k~l#*6(@KYFg;+V)ewfMo$0e>`evEtHl0eyG`D6rjuT^u!U#^R zNEbS~ooB2&e4GMHUSf^M8Lw?@2^|Rt7q6X#WEx2quZ^sSsSGI)p{B7aw4`YrrZt-; z!(NVt`L4vuWW|VZE?y_Bpn<~A@yJlS-ozyMZx*ji1xJG9iSuF46BEeE_^&YkrPqlQ zOy+wQEREuX*$o5d!F5aEL}0rJCtk&>1-w7VQ?OH~qpLaP3E@OFHJg6g;l!j~wr5p< zfqiPYd81nRJn_l80#2O$DE&TSl|~_)-^UBd2_&80ds)wO%qTZyubbT2AF#493QQ($ znhblI@fn`%vocx1CneCF-vhbW?_qh~?`hS}jl&h@ccy|jKU5AU|I5EYF6EcQL)6KLRD)2sA;37^_eEaUT#F0xn3)i6+B-;bMfkYnP$14o3z?pCPwiqEnb-l z<{^agI5C2pjDI`xZ+?|H!DJpMSQ^C%vm4^XeSKI955!F zXs3op0SJc^t<1qhAQYH5z{=agay(D0v{nHpzV{IQ-e8p)A)K?D3&|EFo!=+z-C&Z{ zF-k)LhNx+^rZt&XZJG>YVrgaOs;o>_z~hJJ{O$s6LhlYkzX#MZxk0$X{LWNx4<_>G z{c_4^gt3k=akDj2#Sq5J!$)3oI8kjeJ)|}gyCL4-B&(Gj*Y7f6D>%WWW5{$kF{(px zuYOg4^Etvygb&0;h7(K%e_l0)6Lvu1>ArFGQaI5^TZR)#;`YfL&%MT76imKg&l3a4 zCJ1mAKYL@VNtOH_R>$Q(>gx5Yp5TH>RPK^+@22hbF6#g03SPTspbS$6V++a=ybQ__ zwuFo8APEXbh0l*6T-Y`hl1U_8*iP_8G6I#=0cR9=?li61v_{jaOp{?- z{{j&>srS&ntl%*dRb1E(*iL#+jk&9(=_^$1)Q?|jVarso&YBUp=tEA%KbQGEiwPG@ z=HY^+QMfR>Vf_4fwGwdAYr6<8euW`zo_Bc)cE))0e$5sS3NA*d;Y%n82N#3P0d<)I z-#c6RP*@JQcpNSAisP{5F89&zX{*!&;r!lLNDd(B{NBoXwk!ht-f0@ELhCTC*R*!i zWZ28mFkIMXWwHXo4>ad@7icXk&-*=TJN3X7=69xo-(V@B(r_WS;`3xXhiwwWLH`m5 z7wyczz@gemtc!SqldM*@nVFsmbdRawlY0mU7s^3+s+yaaKh>L4yLxL`6kZ>1Pq z6rb*&)s%vZD%vu*P|}#fIHXC^QSexC?=uD$wWyefiwPDQTquca^tY~Fwdx5jm_+o9 ztFli6I9t+C|ESA&?Y@SxZfyY_@G_tSTf)W9APE_^gtZ42vp znvR`;Y8tCTYd5XOv^LXZ7~kV5Q=B@~lodQ}BGZMf^JS9N@JXK4ZZ^?{Uuj{>RPYj} zFG1K^FQgMW8UF{&KN#@tDVc{0mPX;i?1pgh#g$9IMThMoxHw!b;e^|MHix%g^Ur$) z7Y#f*e3A#@;G&K>_#{tAQR-arvL<>b0w$;DSj+PqTzi1E?-1LGP||KnlA7%R&>FZaPdt@ z!Ug42xR5b?H)W>P5XPL;!ouK%i)s3EGR7UX37J(>SWz`Lhp9xhlK zg$uJA!o`Lwlz@w*?IO5nQcF1DwqL4OM_04xZox&G+Hk4|!ofu+bG)nyFp;8_cZKDE ziyx!K5H4OAq2H5MsRhFMy{(Y!K+^fWj`hG*roeO$rm-rtM$=kNYcNfQy&Mh0ll4|6 zD|jyh&H3F0S}n`-ey_Hjn&ArbJ5xb3xbZyrshttI$Melge!WiKaInX74lWv);rrun zP$X`+Q*dFmvQ=yfT@$sKnqUoYxj~ZNzLeIm+fc6qxD2dB|UsrEL^#m78B6|8Hd>X*n zl7{-LU%+ekDrDm0Tx@ZD!^>E*4_m^;j*x^4%BgT6W9Sr_X*Gm*l4@aLa9tnGoiEee zrc*n}G`D6r4i|qzFh<~F6M7P3NVEqEn#`s;A-u#V7BXy`nFS^TgbUl&Lb4r67q+#m zhi_Xc5U8fHDzpaET1=}qO@_T34I^yptV~w$&ww2O-q|5!{AUTGuLHhvVzw$(45~#%C->HeSpDFqkxv}JIiBu28C18xNc;NoRm)}&4}LeIlRt@aXJ zD2dDeR#&e<^#m78B6_MMd>X*nl7{-vp37@@HDrQffo(dqF1*~WE#YDvXoL&Osc<1< zpjb?>1z!!})g(2TK3%4lLIcGDTTFc?)7+ZjI9%L;V2r@UTmOV7F_c7mpjgOkY7D|l zEWL$c+s74?U_DSQC=jTou`0B*X#=KpnI^-aSST~sX=Sp4hfZiN zY@ILLS&mozR=dqaHGZXqEmOh%#v!xLNELE2{y#v#3mzOJTrio33zkOV!t91{am#y} zAG4TmHHrPPi{RohxPs?hoB=U9F_wvHe9Ny zO<>eZoIXUqS6ii82F}hjWZJz z3ktlYL8kM&3$#%dAwFT zSi$4x2dNZ4mh2 zsFf{no^h6HdRr?O&z*(FZWRL^{NR1Zf)()_KzSS&81?h8Sj$T`pynuKJtRn;$vVg( z$XZBn*Q=9WN42eBpgC;EF*OEOM8BmG#l6VyOZsG@9n+Kaj-d{E9KQ}ZrVF?279HzC z04-C&w(lq|ZOZv1axy-b)eKI0h?f+T`PpY#ic`=5A^zfcfxme4yCvqEZKj>C!w!C3 zeliUlS!BP@V86w8gOo;6Z;}7o;X?jJ{Qvr*(Eq2r(gp@>Uw-cAHgSpj;7KyG`;%Nc z0`o;-_dPlLIc90+!n&B59W+BW4~C6qvf-)}NMqLXV6UzDRK>3fO7n};I+~*6IXHhj zwmt(KJcz>@z*H(H-QI=zI;sI4m6nviiPH(~Ut(-toHfo9ZS$IB?DL&)2478uKCdtM z6epbP2^Z&1oIiM8PiFp4gF7C;xtsq}g$_T#6i*S5R()>#z&2@W_eMeA(d@^f~OXcoUq^ymyTMT#a*A#DAV7mf4hB}L>F2C z|C=AE+LV`Sz85u60E#uLAh_JR3O+9{;v0)So8=^PqoIHhj|kC3uajO1A{Zf6i_yNwT`}WW^TIAy&h{5A;PXIf7)PC5Mn~ zup}()i-0x$v{9Y6x-*%%7f(u@0U2NJf^^2?xOfj82h+%^<=&VDo7}aLgZvo~W; zQ*(m-%sqCwkB(975{Yxb!MRz>9Dz*>;6Q^f@Ifcnuo<|L9pJZytA0PjFNWmpWP zSc>{nj#)>Q36D9+sc_5xq@&=Y#XY3_d1{%CJ>`~qIKMxcX=#S+gKUDtCEd~pnFd_r zvh8SqUSB|jY?B>MBaik3J16|fxc@RMnW;|t*$JlnPq)?Vi(l@hyv>d)Gdrrvmg(I% zseNu7lgL@wjcUTnQ80;GW&(MJ5=;L0}?4$OsfMkw&qFYT7#^xYK^`^dZX$i!^s z*alnOOYbt7j|i5Q@~)0H@7=%RYF~UJsxH~M$jQaE?m?|3PcCULs#1KKF2Io$73*@z zw==R6EZh{Wz%D^}jz8Cgqxdp-TM_&#x?j}^^@?zBr;!l%PI;v^f3Lz?PXyWkqun?| zL^}NQ#`AQMJ$@X;zX*=LKJ4tZ<4E=W3^+4I_m4VK)9@Gh-R~?6{fO^p*m30}78B-49M@>_ z2J{T{$B%e!!9xbVblG=2d6T;v>D!(~==$;QzpuU@{!uhw! z+O(bmQ^6pH6A|9-a~R~{hQRz!-mM#gGVD$y&L}Sb2DG5ZNf-^UwvArbo!C`m4So)T zol(CHV)3qS@K?9Jdj3ei=D{31hL`Hp@Nyi&_04pvz{e9Tz<2UiULBTaZVgUBbG#ab1F>t_+c~r>ll9R}F{_P`#dA>jw?_x{~DD2?|WrkD!fR!1{=4co`?6;b- z0?<4GnuR4d6@Lh`;Wb6qcMCm-XDj^>6ZU10m-y-cBT`>4;2jX2Bf>B&B&)F-eTXZ5 zKo1)3;~#(2v`GrQ12S#Gv?0@E81I0TnH#h+S+SYG&2Bh(dOyqYE<&Ep_1R8I{7Q>U zrh;oHbdueNFv!7&FwFl1?l<@lMj7tXZiW)U0N?C}A+z4AC19Y*b`cEh5Dx0ve)@1H z>DSzKwU8jqqr*EOi0~Z{a}et~>};o%cZKCZf*+#A5DA{Sl73HGr4|V1_qIZ^14-xi zI@ZHGAc`_mez#g#gVmH_yaQ5ZuHMRI#lFpPes7Vd{aTji{a$T5HNq9khfMK^g-6%~1+rT>@@!S)a7{jDq4QH#^6dt$LVrqg_@D2zfdcqafEqzbtB>TLU4cPa)0V*QKcB0^^Tsz z)%^%EyR~)bpgCMRaJcp>*4`R{l)S-x7hDw_MlZO}dGI@Z%pej?Yjv-apWkD7JXA@g6&Cx_xjRONeT>@Lb$k5 z4oJwVW}gkA18db9Auh4FVKP|m#aP@FAMW3RqPPiuiCI*5w(4jNL-rI?ZZp*?)STh` z&YE?xk4-L~$+DCtv@bYK{O#a0$pwpoFN0dj(t6oQ1hWmID!* zphKe&bZBhL1j`DS7X?cbe>$E=)PxCixuoSxWCx`sz9^oIed9Bn8bYRmW!>c!EY;8z zEKI=Q7(^jhs-R&g9na!H<`xDEllfp_DR#*Riw-7#UqAMx62US_D!hAE>qST+SjK4u zYmP`Hn!$sDM|l_smH`US1V((R;e`Z*3l`Yp6+JH{#Q zzxoS$==Gxh$%ViDZ|tAc1-eI0>7V@krb_xJCqG{z=Gz&M|Du1g^=0tbjQS_fp}Fv> z8Dej-#j0-Q`KluoFPw1PY|6(1J_t8K3eWZV~;OSy)i1tsee0G`j zPcHhD-9OlAn0i6~cl1wwf;fv@-vjhq>Hf(L7tOK$$y(1VE~oTQeg+(`sDJXK@e(l5 z6oG*<{gaPfA|y!jnYyz6$)jj7M1q|zoMZiyb1_FK4}QvcMVbD|rGF~fKS_Y(golM$ z>YrR5>7ShQcriT0`X@hqs^~d$CjFClzF}AXfIT_(>rrt!{gaL@ZO0MYu}9+H^-q=@ zI<5Z6FE8Mwp6{RBK`%_Jf3h;^KU4cB7vrTavg>gnOsjvg&h-`cPnLVK#C2C2x$a8# zPwpXiW7hg7S48?JhddgKo8tb-K2H?IP4KriJD308`X{@5+#0B;e{vH-a~l1V!_O}Y zmR|n!Y4uN56?JAx|KzxL6fD(YurL9G>==~npDez%!v4v_kCh0Pf7?IlGpY&?V;1@+ zS4R3L+dL8rmg4@&W;k38g2ekLYvG3%z24FL6Mo%T^!{XW1$!coyg#|&ibDTn0>$>m z9f|z=lcD4dc&V+w@cqeXazS+P^{%8Q4?AXj_riGU?yG%l6de$}X2DwANbrp_*(&on zi5fTuT=7SX%0FzclY?(>p}4H57xOlLV0VgJj>WzO$+1|MhI5 zg|{qcoyTa-_hRmPn9g0bzrHg%>V#8b)lISVMDAxmPOl zyYQ^vqFgt{rM*&di*jOS3zlJ)X$gB#j{$XPW>K$OG)n4&&XaMol;r~a6dUqmD%kyT z-BPVPGme~${{-`IyP8)CllUH62Vt|;V@w&EUbnz#INo#3Bf3OfMb^OUmND$iD;r{Q zufAQwi#F`!-v8Geb}qp`TzIt_JGnvD2|m?g#E{Kq?0qyw43VjF46?2@R(Oax;Vk-h zh`ZPe5I4v=h8&j+kaS+|VZHb(6;{Q8^jq1eX?>>2Fut}{X0F%DWCc_+XwKJs-I8XZ z`MS%hkKm`9ubB#-e6-Bt3%ufS5`eOYSd*5*|c&PM>}#-kqtVk@$6PGkV1@ zb$gS7`BbpW?t|6z68_$B7rf&k_v6!I@H9N0027Q+rubC!N@uu6>(&hO2IWDAnc?~{CF_WUHPgX}~B@{wt^ zrZt&XZJG>Y#sFpJs;o>_@R=br=XVAe3{L2YJoI}&4c|z?73O!Qf^!}!gCOP}%ot#e zRLSIUaLHA!160k7{7R=Eyn$$vwOZv@I(2|DszWKi(&@DZD1)dLoV}qIrU<&u84K`I|<2>2m)-1#^ z0?tk@`tiM{H9dwoR)w zt;w`%(;6glG>kB>{?InO%Rt3MN?K=i01xpl9M-4}PV^HdDdP_eU@#jhu{s zD)T>c88L;)Jf^TTiYaC{#FS0%ErBUrwu>-jWqs;~;IsW~Nmak*p5 zp>>+pXIh78GVJAO7=CZJGFh?JS)Jb*U@+0j^1R<$Y^P4R!u-xu@cH}7VT#;?&%4Z4 zyTowtrQbVD>0kyvH&Gjj0kDY(ysDK=G811js6|^F6)&ZsIZSD?0_}@sQA}&3K=?r9 z3{#j4cDpNvDaEII+k4`eQbjwyUrn(fj}y3#_0m__cIrQyQ|HJCGz?Uj~znIsaM z;0&JUR8w5HJ=pkV^{Lz891XxQfog*&FZ8L~keTtnMh9ju;Wf%+{u*T|cBu>R`vYt+ z|8RNo-6gKkR@+6_=;2`J;ho=*4%6?DNbCt}6{3oVftz~|g=YdUuc_f0fN(LU9GqcQ zQvr^r)2g*YTxT)HWbo{8EXIlt_kp`2F$Umhrjzm#bjXM#KTDVUpn}pzr zmI=JRW-jK?QlXZ;VI4RkSZyzhmqr%(sRr#=tED%&KXv?`dI~%xYIy2_Pca4{qX-{4 zu314n#~oPG?ST)|+!4X`W< zHjzPF(qPJT_*qs~@edv>IXAYjY z)r5`r8KK$%MynNQM|>A*S_=gp#UXAqz+f_X_NHRM&^idXF8PVp!?yq}ig?%cG=e98 z2!MTJ-jB2nnbs4)&sQlf>ECQ__kbqWo^n-(%M)Ny9J5v{;f4maPyu6%nOLcn0++hC z2^a9(5E>qbu}!BogFm~qWv6>nXzX-ThMn%#C9QVB8`s;nAqn4cy|XrA;)dn26B<8R z6l|o1R!~FSrc;}!A#SaiC1(}Wv3n4H5g@pQ4#nU%?Zwt5xa(vFY9CAfgXTbIBAgvQ%StxFIB#LH+g?3wR<68)~RIZQ^3U+MsY zLvb$2p*jZ;W9-P{do_8)pEQkC5#bZ2)tMHUCd2=JT>?dWnRN-O;0p6QQ^6Hjr=uiH zlv$VH`g2^*Jm7)l*CkkoWRY20mw+7`JZALbM+cWLC`OIg=|1nqqNi9qyLHl4m|6^i zz_HeG1{~Chn-U9y!|<6fA0B(CPX&%NvUv+hF#&5Da=@^-_I3jhHnf9}3YEDi*!v>{ zj^m(V8C-0!<_M;Dz=Rms5;)$2Bydnp1rC|^{T3SYvuZYzm4=5%W+DVBfKZF;*-&($ zf`6(ZZmpR(aC`+}83B$oeTqj|nKfa{7I=v>Ph~sGOa-sp6akI^ zIT`qoxa}g~Xx-2OhwYad(9zZ0Z9{r})Qk`8 zfTM>wAn@z3v(jv|E(DIN(P9W3ANn!<-eyMHA)Mbk3&}K+&hL$^hl$@Q@B-H~R)v-{ zt;4it(_|PEzbiA>WM#5~$#0-Jzo+eFHLyJI_j=oD46ZQ0GZp;c#&W{F1CC~9;0~!?aN@~60f*Jf*0CwfgrgS26$omfxyOxaE6~2U5tvp*foYLo@MZ%J zCWG%^7Xyys(|za-ao`x$5otV)!13Jo3^>M^4KS5h7;Nzo1CD_DRNxp#wt#~P{LCQ< z4c(#tCC$dT@G}QlhU@u58}NFLu2t{|JdCe3uqALj3`yXioC+K|5Z~{&hSY2(D-90- z%tQ#fh6dJWL)SyYjK$cdQxB;jZmpR(aQrXAG6EcX(Wh=444>J_tVX@OMCsb#S4+?y+X&S3SYcj3Pv_{ip7^|TvGuL2cvVu9ppt%4Jte}p< z&!wg1YE6vbS6Tow6RTGa4?w%4wgoN!|aB@@!{)B0LP&1BH-9i zYb5Yyq60})Q}{JMKLftSTshXgu0o~*j(|D%kVF0HtTco-v=BHt(P9W3zCOOPu}mH zw$lJyVSZ;S*#3rcz#;c|zIn;-k;&m;-Y*<*^vZ2Efxn-)m>s%sWH#Hurm&=tTC@=% ze2WCl0Y{q^w5XaJWwP-kgby-@3^Kto9Xg1DJ$I zRe)Z~5+BLJ}t^r{aW6V}TeN0~JU%-GuILF8D0RbqGjlHME)<;x?VSLJe_i&BSryEkt1i zCpM!C9XrPhNjl@O?j;(JWxV#YB}5Q}i`St-lA~EJUOQP2v(QnX(`*{6LhCVY(6qE^ zGK^X1l$qt#-SKKKx3HSEd5*x(H76A}8bjlKBarIKgBd zCs-QA39}mp&KrLyffGHpi*VxYaODEqFV&`_tN9j3Dsh*m255zFIMK`;FRKE4ZEWSq zupGVWmTL+)G57=ez1Aw#K{&rR6p~FyI=_!|I`90#_f^~r{S*oSmX+0;Hes3!dpQ~g zP6W)%*!t;M?+TgD?-q9c7|Zj1A64yK8m=(EGZn0vD~A)~Yy{*KJAgo9IN0C}hZ7Ub zzztDtBu-$z4)4xXD?7qW&je7D8a_jVa5$kHgr}<60tOiGv1)w~w-`<^8LV+-3@7Y> z!qdIn)p4BYq8;B)L+}CPt|ROLgF2k0Qh>$Xbp{r_uG&SeS`Ty~1`{yTArUTIFAc-! z%*1#N1uo>9vD8{xs|kc_3Y-qtVm=6Li5RCr5-}*JA_k8D4YgWBY8G@CnRcrTWLsQA z`>CPBq2ZklwpdGH(MWqBG(Sb|uBaFJVA zNH!qpB6svHTJY;x9ldDNSQT1eTCHj0rpYkYPE%%XjG1`aqrf;Jgp1r>+i8RacqL%9 zhg3V)iC<}v%T(~yKSU6t138#pg82`mi5N`g5rd^s#4x*I2n}6X0x{Zc7a_(S90+GO z)%Hsb>gZ~kP8VYIQv=9CIK=2>4%SYiz}jh6-WQewG5+_e0%DxjLBF?Kr49(^_pU;+ z2TAAmCf38vn*yW&(^wT+i)o#vB~6oIFie%1Yqm03!3ZNX=l34-dn3#9es8dy+TaTF zJ5#|k1LY7y?#ZuV(JYh0!IEx=7)fT})~GfTd;C&}VYRaL%)~1bwV0}xejqmb-E(#3HD>){0n1v=BFu`0A?)7njI zGEIi@f<&3QMk|vQ3?o8waXeuK^%Q=tM_R7VL<@eU#W7RChpvp^M-n-h`-}O%IF@`w({ll?lT6eXNiSkaT|UVLjZ`DZn^2ja8xbn>K1%pJ_4- z*0eHny;deGV4Om8eh+l4ewyWZzjxVAO>l+zovGl0%gf=1+~fJ?CBIiDhlAgr=J2DB z8MslZjl@bM%3vuXb5bWWL8VrUsdfsGNg*75CUq0nw#)!_y7H~AP9BaHt zWK|oll&RsRH3dd)q%8_|1Fa3;=|ICg0@$Wg+rq=$+7dXnfkxnQ*oCY!L&@y@#*v zy+jI6UU>TB7x)M%2p7O3h2$8LE`YmO4{!S@(3v)kRiX8oHe_0lX)=treag(GtxQ%h zj0nvIu=&~VWVs)%g3w_*HQ-lT05gUAO9VLTkpr#)^Y`x}a4?w%4wgoNBap!`l0JWF z3E-%+T?8C^hU*&GeyMgHUCqrHJ;u*%r3S2paKMpd4kp^50QbnsTf%ZYcwB-OL*S@s zr{C+WQayz8dt)KljHL5>z{$RGZ)bH(tW1H9i)mG+HJCPOHD%ay3mW7mn2AS23cRvG zP3LzDJAa%7dB2aTcCHq#FuyYuwD*?-j=&B;0#Bnlj^W^YCp+MnWCre#Y9nzUJ9>B( zty)=4P!C3^T1*X507fAka3}}i$pTLWIG=-7tsmlc0}dvG!!L*dhaFIOx?3-f14o*6 zFb@Uc-W4AaxfW>y*ymKs7(nTvvNtD#|N__zz( zbm|2)#H}?G2aZP(mJ#4si9SW=L}pEZ9SzM(ta&g4xQ!(UDF_$9orPo?Nf*G4tcSON z6zF7|#;VYgrgfOsY?=(?Eub=UO;#o=7*~Ym0(jC28Yr*~v9w&hi81_23t*;#?_v## zJaCL6C*%K_`N44n4kq)!!BYI}JaCxZ5I7z>uLN+6*e(K&{8|ULU#d<=S2G{O$@sa| z)PS`R4mc)B`2ed&hn3Ox zW_B};RiO=-HfCDCX)=uEpOu;Gvocx1;3G8W_X!=V-^22}-_y3!5L{t?XDWE>{Bpn{ z_h9*Fv(+at98?|efTN!oxI?Oq#6hPBIILE-i!@wMvcijMD@?-q`)1+9Qq%43|L zKgJdvBeHRf9w$SckF{zsSuke@Ci~R;x7mfn?9TTWH&^VR67xmha-{Q5OQ9i57!9+DlfJB*2aLX0Fgjhn@DZWi zy5c>YwjvsH=(DQ)Vfg5nuQKy&zu(eBn3n3NxLmgfHBN@QVP!nRIArzVO-mF;M3a zU-->m>D*7@3m*m8uZS=FwO^D#hw2DAl;I0M_-z41k~G-L_`(a&Vh9i$?MuIl);l-& z!avTIfr&DF;nVSWw&W;$Wm(J@evy2US>p@;*-)bw_sHOcpB1A=Wqc>pSi3b!aZ5^$T|OlFMJYO41r^D3;ixyFGdQm zr}KMfA(=+f`Mpu5|D$~2UC%5B9OC6p;R}E9+YUII5kBa#PKy1PxPr71e9O#C@Z|Kn zX3iJB$ADu3wu4=|W57|&7v9>B1IMWG5yv119M|k-z(F0rp;7?HciuGM2$($;I7pln zaEL)UJ-+Z_^x>BYU${#RRl*nk3&Ju292?T7rTM}QUt|Ec&?|F;FMP_+BET^u;1FN< zpNA4SD&Pyh++6}V1|z^xhA;dL4kONpFP!uWz%j5V{XU3?R``7g!U4x)mu5 zIQ}hPxaoDn46;-mqnN}=;e;5J)8h-@f)B5k317HX4OPMyUWh1+;KbW0;lvnvI2Z|( zz$uCwhew;tN02Mx3aCFMR81C2*oAf)i!r7csu@qIrzmDwfO*zVPO!MG&Jyh#|i4MPDOgRKOSR zIk^O4v_}x53}3kV03k-du~r8lT$iMmIsb|;{1>zsc1iZzm3|kk7YsM->7FdQ3dtTM z-IIlwzW-Ui@YSc5LyXdV;XfYe5Tlqc{9*D!ylgWA4tzLs*^K$ZqlOrh7#s)&ejG!L zV!rSNU2()1!(QksjZ-WTiw~P}eBt{81C9yS9*ou=!mFGViIc()F({|U7v2kt7AzCK z@Qcr}p-T9|`ye_a_>rP(OY?<)wiDyHm0p<}eBs3>Merjj{19LGkXGVH1$^O_6HDMn za|A!i@P$V(dW<{L4EVxVqQwwD)@i2She+(48+_rTyUO85X}<7}_ILPE%ol!){kmD> z3*Tq>A--_O4`cXI%ojfRggAc0_`<=b?TI7C7e4EG0}e4$rve9wlL8JgD5u94UT2)w z^D^KIU-2{>s)R4R9>OvL9DCBIrTN19;>l}H@r4I|9087c0f+d)AKQn(Q2}3g-Q!CD z$29oDXJGUgz|l&^Yh`@lW6)v<98Ydfzl+ujq8n_v2M>~fUGl$+FWhuOIp8SG7v6b4 z2OPzG;S1Q&n>D`h{RSNUAQ1-J9uotOV!m)gXB;@v#z*XdU{~e(tqeG*ObOta248qTj2zx~X;ibow1CG*s;T89Gz){Q>ZfAdQ*7(8?7;uO${9Z>4IEwkguYErb9OK4E z3?K*`r+wUjgF4QyN&y_3Jz>Bx$?U1XLE@xHhN`l@P&6gCITE0zVP4|2pkpgg)cd}1aM4)FT4SUlMz^=1y{xw zUhaDZ;Q02Z=y%b2=LTPR;rGh{M`^zB=zIqp#eCr{zarr1)7AOD`NE{^W12Vdh41)I z3^h$jhBEKlFdV-4h3P>O4^M0^$)E$A0PgWH)^P z=rf!1$v$*H4Ni|Ax;vsbf-lF@^+o*9pEfeQTQMZWr*a7Q6y1?e&g*i+cnz%dpPEm0 z0tbXnz!ZMyw?0oanJzzc|07F4$-m==K7>JL;K&U4p?^ekVb5jbE$Qev!4Ez4s4@sr z%n$uFuEsb&^d0u{W``g8s6mGKp+9dghKwjb^t5jSFOEfQny07oL*M+UJ!r)Ep`Uor z9yE*}%CP5OI7{@5_@Ue1%Lk2Rzz@BD5gV$6AKHxYivYpVbZBXQ=ho0LW0gebibe+!;I4aFOeffYGa1`@HA3rb-9RHRdnjSXHc%S^x3vMM&EQ9%Eo77Mx{Lo7g zg%O;1gf1*SpX~UCjMx521^obo8><*9Bu9~CHx8dzcCy}oc0SqdF`$CGwDn9P{LtJs z#EA;{p%;Fw1WrtYANpau)dx(5(@j5&Sret}V?E{qDMq<2l3+z4I#({D|;FcliYIqXK?t z<31(uV;cO>evBRiKW4xW{TW&e@#C$v>GwIr5B<`9-J_z~lWj;w4?95H_A;spjAv&av9E63}38Sq1WHB<>d^j(By z1UR;!PfPPdKaD4^ImHj{`Emp}BK**mK1SfEfFJtyUL}BI8vM|sFnSE&m;pa@-I|Bf#<3Jp>$0WPy6c z^U3~WRR-`J;)i}^uLy8N_@Vc0Lg1)?A9~XlN&v?+_@Uci^ccV~1AgfGdlrD>)EfGI z4)H^uo?i|)O7lY(Z{~obm>-%1eH*}$WGH6d_k6O?7;uOm`qXYQ;3(#Y-n)AoIAZ+J zZ!TxR5#xs*_Xh(G#3ni_@NnuWdt}D(5I#Op|`EX0G>nq z(Et5H1UMr6(B6*_I4a-B~R;1tO5I^+N-OB+- zX@2Oy#tt}&`JtGnqehd936xtNhShKMhWgAG$fBH-azw)AdFC(C;kI@NUJ^*?%`bbaXdG^%Q>S z9vcu%rppiAZkG~J^6&VeISeubM`pkeJqOK&II>)Vj-C_z&_m~yL6Bm8=yA9jU-3g9`upyjSveKsho1O5d(fCge&~8wdtsUI zL;rxq1}fu+)+78PK=36xv@}0-{|_)w=MXGB8nwANu+A+=E6jKlD=e?`Dl38W?Jb zANtwticurR5B>NK`3DW2gQ@(`i{CQfi19<`U24E#{Lm@H@|nyZ`fMMs=VibT{h=DF zgdh46!ZHFJb@XXze&|Qu+Z_Qshxnl<>=*%#2tV|#wFn#)@I#;5t^{yQgCBYTMv(y= zGvJ5rw0!|MF8c@lK8N_BAKalFaFphUuDY%Rj$(f3k)Uq_IA&@7(8UHE;)gD`O$<1S z`JsPniUUWCANu__3^-!^&{Zxp;4psZ6yO*K%}+4I1jrym5?R&GWTk=4$4oCPfu(XT zJD0$*4EUkVYN!%^=#>b|2yi_8X#q!KiWB$-xwu=Bqgdcii zErFu~e(3MEDFGbQ;D>Isnt)>l{Lt!c3&7DaNx#n_e(2pz<$yyx%qjDSKD34dj$(f3 z)}U|W8k!}3=*tEi;)mX~RSY}@PAmg{Xq_6W zgdchuqA-FJ*VBci`JqE^GG6BpKXkoqA~+G@hh|qHPE^1TJ^7O*aAF$#(7$8Q7!MdT z;D?T*#jt0R{2To~hxnlvZCws0O7lanSk>V~F+X&bI^o1D@k5swPKY0R;m2b*QOpnh zMPnQ%V*Jqk7uy3yj34^@vkWXke(0xMwVCik_xdFfV;S&6U;G6ds)Qf958^R`7%4il zG(YrbuQPJz5I=PBRuROA@Iw!&CSp{;4{iBG3B;HNKXe4+!9a`|@I$Xeiy>mHGeN)4 zA%5u5jpY!dG(Yr5D>=j{=7&DU4&AKrLtin(5I?kI^B7_j^Ft5bB90gp@k76tHQ<;< ze&}jFysVc2KlIWw*ia?>(6tbq5&W1(*Oumoe(_bt@f_lZUiR?_enj}88-I}aQ2{@+ z_G2aRV;cO>G)9ksA2Z;Geito<`0?-(`h5=ZL$}(Z9DbDMhi<>T!;fNq=-KSo%^E-S zRl^VQLmM}V;YTq)^dk*%{D|>G`=7BVju=1mGiMrb%pyPZVUO4IGT?_EsfH@yhdz$5 zi~z?f^l52+=-PPlnp6DHj?E*$5#fivymV&(M+N-QM>Z(|9Mj;3?uF4~0LKjYp`YHg z037GNM8D4=e(2<8<$$9!KlB41aKKT_4?P(4Z2-r_UonP;Wwk{-Gyxc;hH01~-0Hu| zL3pZ~3J}JFR;?f6F9sY;25;BLfTNfn8f+W~jx_D~KKY=W2JpBi4LGRd{Hhew09N@1 z9DU3lbo5ZoZ>|~3XTlFX?{oskGT?`9t%fS$hhB)Vi~z?2^l9n&L!Wq_0bEV5%#Ha& zx7{QH91(u#)$bBGD&U9y<|8G5V;cO>b?|y0fi(ku=s(b6_{4GObM*Th;)mY6aXH`+ z57YA{@K##a-EeT{KXnq(D&*iz!BkxcD_yEsDK}O*ajtlV;cO>Co!B1;FtkF^ft5@0>}S7O~20} ze&}f%mIIE`{Lr3v9B>r#LtkS@Z`Sys69ydOho%IiY`AUy(e86S~b`i6GPEgl_tw67Uh_gr2yWE&dAjBgT^H6~E>J z3@igXX21zO9nFQ<@!Df_^qk;?wyakMHHtZ*hu{i~b3*T6&u(@&p>G;Yh!c9?TE#FC z<%I6NE->O>aYAnywTFusC-ku{d$=Gcl%1FRUA0E&qGm9Gho@SJtf-@ztTa5dGtIUPgBK!zERL61a>Au>GlF#SG<$e@kumcfTIWYFzi zcTW|?WYDwNnVU5-=vxLCB7<&OTMQR5GHCsp`KJn=gQ;ZDU;o(#3;=It$x)ZMllQY zaFDct7_-CzecKRY0$jx4pDV`@qnHKymsR74F-itwVV2M%M+`AyEYM>+4KV`LCSsiE zs*OXhl>Yg}()L4}F<=-_wIm8e)k4dG`u2#IVyA4tf4*r8r{zTl(kjKQOR( zpY+d@ze}802K3Jlsi8{fpQj@VBRDZg7nY`f-f}nNbq>)#*Iy-q6A}97ubw4NR6zec zrMd)8MCqT8uj6pSc!a68N%ckE#h5UjEM`FedNRJqkkT7vpreF=%4F% z7+8e#&#hgxnb1F5zD2}X2K3LDj$lKT&_DM@JVp@XG&-|1{qu}rM(!M-Ej9Xkat`o083?=|m^%7apLo-=vpyx5u z%Szxy$qNVbLS6=h&lA*8C4|qH5swkXSdY#uP5AsMp0(x_;qxa;-{VQQ7bOwG=Q|G( zF)AQ@zWDBAOLz5B7!%=Sht&|f;uJ>~N7`{EhZx2jOtq7w=+_*Gfnp%W3<#gQ{^PMc zVqAVB{XT~XpDVm4zgOL)8~K82-OzbUPn9Nou0G}vqnPm70X{aap;;n){=*QXAJnj5 z`L|<;QB3%J`<*yqq_Gz+^^ov++BJq4F~a9h4l%?a;gg8*YgcV1OwVh+PQ+LSOwT>k zP$f*yLBwMOF&4ii#3(fr=o@&*no~^A`R_&$Bf|6?zK@7e0n_u^w@V;KlQ~hu$fN7;?`PrsvZSIK(JsdhQ4!HV|W$ zn4bSM#1PZ-!8c-vQOxwbH6c)02pCq^mX)iswmR zC1NZCif5e~s)XWs8sag67}wL8r7506*D-SE5XE!7we@F~xHgFtC9beYz~)_Y(2% z8DfaydEsATh*3=O{Ke~e#8`av!+Nf4#Efq2K%IDZf#NBC=krUK9=7N9>u=Hs^T&O7 z_XSD3GUMOwe>7QD6>NS-gx|?GYAYsBy1f~RuiwT~9IW*<0nNM#qz4bM^muac1I~b( zwEU~{#<@a#VKw;Cq`&V(GPCa}*pnk5xQ!&ynW@_sKr`>@?s-q+ealNrmv(FW*{XDE zQ)tJm-Yt3R&}zRN`fSxP%}bhj1Xx~v0?W$}!e9V{gD^M%g99`;yblcych4J6r#6v6 zZq3}1tCu7ePvAJs$lBW@P$N+C9eO!Kf*z@h^Lo9+iGL7+@KJp@h1F5RmA*Rj$$4r1 z>ZG4-WF>EY7cQR`C4E+cmNc!yv}V)VByu#F%;cJ^OeXM37n&KJ4|n+uEcB1*MLjUU zS-lQFXwS^TJ-rlD!3%FFdX3guiyX}7$NYotBx*33@$0xJIvr2|mbK8f8iEI5H0;^# z^_n0ftcV)umQ-8)Du~4oeAXT^=3yswTatdwT^KONAx@IXhjkaRQ@HM;ar;z|$p%(F z0ip8Dt-%1A3-O}vYI=FlDh)xn_0&cS$#Eo|qtmSC`C}9qc{Pnyq4k+IVp^|hGVJAO z7|!dlGFcfGm(=+hk>q!=(0tu#)hAyJea%$x!`I6o1-#EQRU!I?dqu_LbCe|*K%Mp}+vzO_EH-&pOy5$xeNX%BR|n80tUm&no( zevdTtDyd#YKYr(>Pxgl{TDe3Cn>A z=c2_B6Fzta{a$BA>LHxp8w<&1B%R*_unFP!CRWGe3k6nOG_A_C2Gb_3rVM*I8iwB| zn3?fq1z!;&)A?P|jwfuE=lwpW+PP7vU^zEDTMY-$gU58_JFpS#u9`pgcoqE~wWE11A9>ypUQ5U@g8Ce=yJ z%Szx9UVT0<)iaRUtu07eaB8=<#EM1Gh!vDmu|lSOzug*Avze?kpsO_`frk3`WJA%J zL+?>T+*&hntXKz;7{Q9q(~X%_v&@>vq>|9QM9c3Ov$ZT4PSruUm~AK|n~=2F%8tKF z5BQC&ju!zGp3kb#Lvnq9xob{b=WpW~6C_NZ#- zhVUybW|<0p|8fK?29cBTuVwxww-76s%wq*h@w3Ax2jA?5Sh2=SC9q<^b`e(mYHNoT zwqI&QM_1F0QDFRtLHiLy5DqK)nS*H?DKc4UxLJqgz={sE7-Gd(KmFdxy2Gh12Tn;Pb9?yB#Z_&vc4tBWBVMQx5@HvIrNSq7qG@N9$vW?92Ok`5^)P_?H z5DqJpgEOdVD!}=yvuf243Bw8|gHJvi!;0e5z3~ghSn*dpsqnd?3i|>pF5b)32{Oh8 zVOD>6tYCJC6_ZHo{Rb2HWh8atc27e%@6teSVy2gsz$N?wo~YBQ*O1w*Z94T^IJH|_ zV#TGzkkbCYJlTeyiPRq8Go?VwS1kCoe{@q6aw{|EJ7<=TF26Ci7Uq z(kND#-4H8Ye6|Euq-_^r#kU$AR@i>21|40^fqxWM)KMEw)k8R}sAdixJ1H_*X}F1p z<-m$vpDSR+ie8B_ zb2JRU4_KM345vn+IloWpSp7bh=l$MmJ9WVo=69xo6<#QZ6>^W~OJI~&CWnL7Z+2KQ z$PC}_P#cL3u%_W8tCj6xCMcb1G1WyeoJvDDtWXZZQ`J;}^Vwpt8tM5R=x9QZ6)eyJVOdKn2LL^48;Hv)ohHrxNSi$TND+aX(u!0HvvOb9{4dJ{?%cOd#fkmRsMS+j8xpe9(Xx-YTQ(u8o zyR{`&><5ilK{*vGWZG7w$3>`SGugCEr@E{m31G!X)zGii5Vz^nzG{eDYbK5rKSv}+ zu;Mnl5nUUZHG%FoG%xYz^BA*@EE!HULAaPr7Lu(q`8wlZ14vnDhbvqM%eDUxKa-D*!z!@~%ErNt~$!DdfIu%a0`8UM4)zu;P8 z1(SKKU}+R9%x;JkKYOeMRy5fz!iqH-99GzVsX#|pvpim`Gxi%)Cb}GK2S&wA?f@ss;B1ebD^g#&SROd#ml#2v?ZjnF_9Yq8wJpJ)Un~@;hX5IJn_D zhZUX7@cl-$k*FIIR#>fU3p3FpQH!Z&is4ie!eNDS5T2^00-Vn#tJVNfZCJr%aOFcW ztSCO+=Z_U*#X<879O|(zu%dn!Q)_8_kSBwG4l52!F`GS>I@JbFFo9oHC6T2OoO5aT zIFn>FFDrq|_ps0MGF=T-y0yg^Cmf0~PHc%2pMWGzP)@}Onf85BMS&A)76as>yQRjh zAqh0}kL}se+sMSADYog<$JG$G)=V5HzJ(}^;KVs}A-Xj(YXa}(pm~Xl&tkla+%}vd z+s?&ne<3-DB%OxCY(tU}N`VM9ja8v_n$~AphiNkGibZ zb0b!}#Y8=RrNt{#!O}+~I8le3jK3E1e>gy#U^0&rEREuX*$r{xn-7=3iCWu5IPvnv z4kv8CR8mJ*^Atvc@pGG~4X2tR98NSa2alW-cs#W7#;_bXaXVTJabk;J`hAj&KD;nN zCFl3rLb4u7=l2mY|NJ`Spy|LgR)schTD56orpd6Eqha`cl$q$aPzBblm|9bhJU zBWf|#M}hHf2!|8OL3pZ~3UEGqty&slMZ*augVXMd;e;Jfc)E{!uox#!-^qZX3;O~m zCU-QogT~|UKn_eXn>f*_+Q11W@T=M+vNVEoE)8#Js9}IxnRx%v#LM(3Xx-Xk&IvfQ zTU+A9^3aGAlv8m+rhPw2V}4f6V$fWsQ_U3M%}c}kk8Rn|SD@ix1>1Bgp@z7%X5u)p zGomnp6W^x`F=iyQCh)O3G`#=FGG0ZS8%~i@=i;>*r7l^Aq>I-fQWZVFmWB|arm-rt zG1IC{8#PUay_~puncN67(PyE+GbV(K*Dl*>kOh8@M~3JgQ0?603t_x66+H4#1Sckt zlks0+{+BK%PB59r36@52!t92Dv*Z0Ga3Zi>gcG-J=y1aJOZDsMYOcd5Fn&ZYwc%7B zgu{t6bMUxHfk#6t?+MF+6X&AE5GOwPOZvUlDz!m4XLl5mT}V2=H?W@PcT(VuvuUgf zt=Y78)0#|^VJ}C+@MNQv$qHV{Ky!Y#u=DF#p7(p5?KBQo7)~%19Q0s0oRE7kv~B0G zQ3CHju5>uj#0=k`5GyhUCtu!epfr2`mu2M|f z`RK>q7JiH}dn&vzn|qBxY8aFWIHO-8%eE0J(lCrj4fGOaE()Id6tC{

    =Bux)#nu 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�iz6-c+e=W2UZ;P{$6?q)~2WAVrwm= z2F8I;*aj$eK2+N9P|$`09Z9{r22Qi{{~R&&tHr;;YI!?~8-A3e-=Xw>MEZ1==`@dZ zrTSMayqYKR#&sgh+^~Wm>j%)zX=s4XguUOvLYSLA_lm0g8@8iF<`h7xVwfY_Zwr#H8#zIxT|1auyU`_hl zRKNYUSpD`FS+#zz-{$&V`r-e#^;=t${x;R`ee+hovqV;_-^>+?--l;r(D!W5JEp*;7zt4Q##!uq|+hwrxMgV9|bC)!; z+0usDpc7dvv<-INU+A13>}06DasH+nz|7#)3V3;8zACS6($_AouU)sMugPu|+f2p$ zz5I9kNArLCudThjLu9q~a`d+6f8n|RVEz9xXZb%OvReL=$8UT6v-#hWv{xIiZb{o~ zwRQbv(H3E?b=@2{kek%1Xfii0ZB_5DX;t1jZc?kdQN_DKH{DR^{7KDC)}(%5H+hr# z@nGkViK?4^qMLrCruZW@#SOJhafX%Mu$whSw+wOpVCVJ3p1i?X7Q2wR+P5$SJ ztS0}XU%Sonzwm?qVE+4g{`+q&|H%#8od0hBX#QXNmDT@pkyY!zO8zV0<%Juo^HDQdhZZC;+5 z4tG9O?EF!Q>P&V{=&7F~PK1RIJ;2nyGi*HjA-xx~aSAIzyG?e^^eYa}!^(L6If_7x z+6Y<@RsMQ$L21<2f=wAyNG=Wzjd%ROy#$C`_Hr}H;TQ4U11Bjepb zl$x6vO=1D?{QtrX#Scd9CA0PiSy6qX(6*ezRouDoz1ThGuMcMnJ3RRq@olWE0Y`)2{)^SDUdvsK< z)KH9eC9wEIdw)*Uu_Qq;xV4Hgf0l`K6dxA#xrT26t1Rlv!$hheiPRbuImQcz+&`@7 zpC3hI+Us1}BsU8TPV8`2C=kkvkfh~()Y9^n_W?Q>MO7jE#Z7F7EHsU$=K>A zF9Iyg*LRbOhdoJn?za?Vi9NCzYg5TR=1T9G{Q`x#LE5YZfcPCuG@(2BuBumV%+jef zkP%Lyc_8p!ieoK83~pZ=cH*y6kb&b2ud(9Kk5_t>9(@dAhU=oU(c-27`9_C-OIj#y zD#+#UO4cPuU@P77bc0BGv1w7tJ(jf=tHp)A@0nviiZ2fd9^zJ+vs=|Fj*VZO#=A!2 z57gO8H$`l-c=5`+Erjc}$CD&25?i+KKyTIc;${6J?J!iB0M&Lcg(S<`Yd)V@jkeAB zN!af{hXQ}1jR5R4vg+{d!4GVGKR_@2Q@@&V=)(6@$IBkpcQWrwB?-)3*%D*t_`0b6 z+h5&<#gg?S>r1=&678{=i{wL`nU|+}XQ|PHk-%S|j)iZ2Wfv60!`J_0#_tu%vt4a@ ziW{y;mz#PtcwfU<2*CX6-K-y8>2(2b8~(>$%PQMha-qQXzILXx{-NUfTcnHs_~g#Q zeSiHqR$PC1xcL2ap!Jvg>(4RnnpisCT=dz@>(9~fVQyKjOj?JXkuYTjx@AV0HRIPy zNpDUDlrl4hj64c)m1^|!z?q4D()Y&;$O{F)au$qb|tvNWpGrp}79s z@UpWd&vR|(ff?5tGkKzqq`|)Qe@vb%kDoop>*Rs(0&baqVn$pw(f1(w{H(0q&Fx+z zw2Zt~Xg}AUk;v+A%Mrse_KJeN+284Um5KDN*Xk(Aht03U0)vT{Bjy} zk%CT0f-WEIygUx7pL-9LRp?Wb&@T;keu+>F_F;gfCk}m55_;KS=VfW=(Q#;tLO*%! z;d=aA^Qp}(Hx|}^aj^4?#JdaIFi$5I&ERyV|3z$woWfqs@?-kYI7{qaJOZjlDIQzS5%sh?)j~4}IkL!)%;GJPvJ; ztq6*sUYc7&`<$*tIZ_#9@?S7cMNdl3q533L7 zD~cAP2L2RBky_@yT#fSM%aQr8jBnn{bY)X*| z6GqQN-3U1IJTw}&x*D9@>C{B78@G%QY;PIG=q=-9=fa8PrNy-u|2la9jrXG3yncW6 zQ?KULZ_ZS63q_;6LNYZ(CY-19ZNrjf>_=)f+5hO1z$g}>+@Rqfh~Wl%!tVou%zpqZ z;1ir&YsLANsyN?qVn&>w{J6v!?_O~dALENE_81h|yDMsQs_i!Q{a}9XZZ9$qXI*VF z9;g1aN;dGokf2`ORS%GAYR~RiuHm=fIlE)!p-pZ6ZC>_bX>{>VX{VC@`6n`x9`%$> z(y!LjXk>fNxXqqHqWbOFL7Yo$Df)9!@_6J{ifSH@(%0JY^NXIFD0Zs|p8|zE&a`1{ zIQqY{3RzOnb_#070HhW@I^1Jw5f@IlUuxMKmUCQOS5eEYZ_21;N3{T+i8T?8oVdB; zT;w}BqIi2p{Ud|i7#k|~Q-h|K`>r&#j36^pix{HSQG%*khNXo_k3Zq~)1?-%t`-H+ zE?q5Fj8rWz|9D0%Ll!e{YPm+c0isO}LAx$D z#(d-(Ga5N<*fcVv957TO!p?Pb`7uchm6)r3Q1$gqR5T?$(de@b;nm}&5j_l=M#K

    qPYd4#HOKH5u$c_qH1!Dhz(D?c!@@`1zkfy(~i=?4PB-YapAf5 zN+UoN-7t}F$wIMn}# z2)TQuQGUO3BN&|dxqiN({G{85zM#g}d>?ll>;{81Th(@_880aHtpD(yqP zJqh0S6;sPL5B0gXNiEwn)E_pKQAtDU;lnnOPfmg&kyxl?n;LGOV3-Pmh4b} z(FMs+|K{va|AGIkS!K5Io;`=z=lgiyW6ksZ(@v@x?+Nzjdzkq7zC}7`yx;#W6mFYm zYE@k`=-+u43QEMhWI)}Hs`46+RRCK_nX#BI>9ZPalH6w#mgM>V!1qbs|EiI{ z#e0s8{BJF06|$tD-RIQ+nnr#t9b@N3lZF@HA+=OT{#DfS@T)Rvd5T)VHVywLsF7uc ze?0_*`pZl$)5y%!B8F($;eQHG?Co<6XPzvzh;_9nC{;^#RDD}1qm~Ja>1w&p7Pyu? z-w(dW)bcMH{ttAujA^i#{_qmDWD9!jV2xTd=xc4hWG^hk=Wdr;{_gPq##d(4azVk= zV#C?ihyVNDYijBDab^HwYWXj{cXsoQrj~IRp2pzn@INLkM3-|7v!E#RWO?{%n8lBm zU91@CsCsiTqn1&N>1uhU&yz<~7>=MBssH_%rWR%WFBtxxYsoHkf?mH;vq-SFXHTrA$>3dp_Bv;YMkXwJQqUbKXxc|KD_gc}SW+U~7pK2OW)@Y<%Br)%sZ38|eGBmRDA{fH8Jqa~yl;)VQumXNNVjM;?zgI?wNi@7J|)C!pq*e|?V z@?{$Uv$+9if$yJpnnf4Q;jrieK^rnF2wrJm>qFpGI&Y|g!?T8@Jq_MYsP>tP;#Su|4^n%diPeA5Ab%>;g(77po zxzqTIm#I(s<}s|aFgV0kTxK**q~9?z7t6azcyV*MknE%jnT7n*k&?A0LDYT>5({{u z%1*<^vhG*BQZyy9iXq5x4=Z>~OSn`~!U%7`!z`6aJ1if|n)j6PR~Agxy&ip>s>gP7 z;KCu#Fj=p#^@g{hyg1bcIQCJ!lYVDrA%~gMX!4MY>JNCA&_P>P{OECV0@+_q(8!1u zLqnJ4ZDt?Qg#r+HPK39Bkf%E|hz-4GXQ4rbNOXF_0JxAb3)#volleWlKAUQn%Hl}0 z0Yc}Xe3962GwTA<^`>SIuY;IUconAbUor%EPbyms&bte^qIeTpYPs?Hr_s0V+hvL6 z#&03T!Mv{O;opR+hl?gXylNCug=LtY^`tE$Y^cdaZ|}3De}@YLa$F1fiY2Y9C%n|0 z(=(6C^!YbQa9FHTdZlD8FommB-@8@~a!4UQh{g?a6rY$Khm9L#kK!#g{HUljsD2L{ zaaW(aEa7-pXR*@jVU`Nk^l*8)i7XB3qso*;^D(hl8KsuqEX9S7APn^3Mj=P=DMp`= z|KR|6$=DPE6iT%d2#7r0q{STa{uNMQ*l#fu7=DVQK(corr(#8ocf8bqpk1ySqmMKQ z`6Q!Y*<3yfCgz+9FgMGanVrZE>l0jb=_Ep}xHQMla2h5cGrfddy0DCGs1HZmDD zybfG=7yW8R9#LYJeuuXU8pk=uHY%}g>x>Na}u zWlt7Byb9N#T?_dOkn5mb1rX=s5)_ral>Jfd(IULMFyDZ^SMF}JK77w#jz%*R3+~bDUr0`Vk4SrKEqHwv33x7UnHGnYj zq;^7EOnH;xd9RHDqE#MIWTxf#KHq;BKzOWjow8yiwjBLaN7&@XKwLb1Sdgtanx{y~ z0&oSnXg-ib9U#Ppr=7k8AhPP-w|^->OmWv_{tB)yL>#5EIMN-3_)|b6HeAU1f&s+1 zhmSzC@<_SGhD&4E2Oum4D^`jaMM@w2xM{oVLh(QW#HaBbv@7;wkt_CNxe6fu11f+J zT@DbISmd@E+0)}m4;Z;FJkyfCz>?OrkU!ay*3}bU3J_apel<@GPmt_*)Kq#HLbGJ^ zy^vD>F2=BjKrY}`=m6px1jkz&;1E=9%F?5+-XHMz?Y#^{ZCRvJ9a zQsL+fuDGF2dBCDJ=JPo}kG&vQvC>T~y`hQ=$0CdrAiD4=M(gDNmsbfO#HIkD&{}}- zbQ6FGr>_7IIlsjK;Od4OcX8p416BhF6A$R+Y4sVI40{|G14O?(I7nrA)Nj^C zQ`TTCR=G=_d}YOQ%y)?JSP6*%!hC3+7R>_CXS+vhg*?*%LTqR_WeGrJ)%~YamjXmH zcTMJZ;CdqBD3!&L{os0;+3Ki z5uQ@rrKq@i-8JN{9(P&795gb|O1FnuDlGTmiW_Py%bdca%DBhwaMDICy`hQ=Z3rU; zh*o@x(ZTZn=_>>fVpD)nXe~f^x(Pr`p0WZ!wD>Is5YOjJ=V}=yDK$(hUE>-5W&qJD z7mpB-7$BPEQz~0Pv23o%d`l7zKs@=~Re*?|E4hb1S|SUOSnhSikJ%>JSnlJB$1|~V zz<#{D6cyLByB0;5$GOWAE>)B;05RcVmI|1LE0%lQ(8d&=%6-&tYDN?;cX45SztsT3 z#0q+OaVCsRh6mTj05K(xC>pRl>MzxfP;C2Itn!FF8Hp{&{E!F_x{w$k%!lS_(JTNx z6g*l#srK7DvKlg9K=r(M`FXPSiCTR z==SgqNDL5S!<%B*2Oum4&jE@UMM@uyn2TO~^gaTJm*5E~aOH(3a%Dp^R{_N1p#lie z>UM z21u#?-ZnMV=|7lkW*~9v3{`d!Hg2dRipOJw2u9-FrKq^Z-8Jj3F?U(QrHT@!p^kc( zrNY-(am5WamgTU*`9Q4|urlN~HBd`$sN%vJ@0VgRuxo5&0x{Jwm_O4qpIIR+5@ax!ljB5M(#}> zW~qQ_xMI1-4XsY$soWQ}xQ~fMMB#E57cSX*HGnYjfL^AxsL9A=xbc`6Ae!ZYRd=Nt z)emU@D*FN~R(ZkRBRJtnLM}GwLt=n1ADX8{vjCJcU#mjXnQ=2rs{S4no*166t@C%i1fRjU8)Gt^L96vCt*5;xTLDw~6i8|s1% znPGrU(XpH$Qi>E6SA)CS+*Ri;OSn`~!nCt5=dV=%ilUaxI=lrHA zMB#E57tYvYHGnYjfL@+fkCDkR))@mtuRJ)RWO>xTNxMyXX<@O-9rEOalI56h6X8J@ z5(9+!&^#@g1)$GXkJb!%wgZIN@VU1v0f?-+FMjJ%fN0>Z$^1jVfArCpB92m79N7m* z3=m>NBa0UX5Q`o@3yA?jYZwJj}b-+5M%hT(MbMhzC-{aHU$WU z)&hj5n*hXHPF?{ZM*S88h?_VhZ2;l-nG6@KjR9g@9$161 zJnE0oW>`L_Yq82h@?<2o9P^x5yxdLhqofDjwb?O6g4UZ6zX zr=PSGAiBA0GJh1;_acr`SsdB7Lk`A6LmzC|!s3MiM9#z8AO~4^S!{SDhJ66SV(=WG zh*6~U(T}<4#rN*2Ui>UP2kpv&C30oKlB)pXQ&0hf=yHIt#Q5f{Cv6!qLR${3e_GN9 zSkk%{@}IP%b@hao0>sfYzZ!t(m+aUB`~W3pV~7Z^*dV3)jR&itPRNT%KO}CbGgUUg zdV?wtDPAd>72$(D?ow1-qwbn^*ND3;;Zj8j(@=*!%u?YSXSh7wM3x1GN0mj7J>X=B zT6#kj7cNH_DL@qPDMshY|Fwq+AjGBsq0m}@@N|kN}Y#UDqtF}SnhE{TTt?;+=E_C=afeqhdkE-LTotcge3ss1xnQYnl~*4h*9pE%zu>Y>kvn&ERO68kQgAu zhU;0pFn}2L@Bv5+5MslfG3)~n7K7&iMdUd^gc+WZ>%w;%>^T4zhu*ldMGm>LMUJZg z;tZ$&LUcJmSYjM~Q({qM88Je~N%vaP@3N$IE#yzPq;>U#mjc97Xnr*SalB;5zB;AH zr$#N=d=65o?`cs(ZITz0en{LaeE8V5{Ga~<0fg8T zAQV~)5T0(*VxIJd6#$~!Z!v%vV%xF-gx{B+QhB1r8xJ&q823s{Kw^Lxl@A|?7Acm^ z#a^c*9Do=g#{?k46D9Y4#bweDiRC_2Wk+CRx#twG6b*~89PBPd#nt1kg1friWeJxm zN*K9!d6=aFrs0a^9yhcOg{N|Fk8eU0F840Du*YLp0|*lj=;b=>GBO#~zc2=fZh1se zljTwWi1vo^-oj#)+vHht!jpttJm^AVfG{7Lr$w^>^x5pu8X(VefDjvA+PwrIvg&^B z>z4w=0$18g=c#juO*@A|Ng{pzw!##X&Qbrm6*@<| z-(sEPRJMY!$z|G#84VbzKR{b9dB~QF{mLS&K$|N+B*F?0Bv!8ZumWw-EP(P9JX$~G z-(0z3!^y8*qTC6^ON;y3f3Hz4#p)q+GJgVBL4Bz#j?BAa54w`ra08P+RGU*M);&b{ zlBALA!bP8vYR|+4h;v;Avew#9ET)y5m2 zJFJ+|f);Y4`lGZBlucgpES8%@SV=TjzD@)@hs3HiA7-Sww`2j7XHhO5;UO<@)rt*+ zuUVqnY;oUre5~5J*WYZZsf^ly+52p5eAaou88%X6&I7h;9}~Zt{m%P5y}IAIg<#w7 zEG9k=Xj`FV@8^q*sarb_c>TT^eLteouY4ZxiRumUc|d(wB`lm~s_kQAn5k9_5o(M8 z^x_j+b2zz8dR_U5XYGN!*S}WkOi!uV9z)-3KlgGwrIyt_WNgicnn_w&GOGLr7Fn0B6FZq^T; z^;xl#^MJdt=b28Ttm!fxBL9TFpToV&G?Pp?{@AQSmYfI7QPA}CMiV!jWNHx?PWZgk zvNx>T`&oW^(Ts;Qrsv!9-rv%a4=K-Q?$|CyJ;cx&INwR+n?>gZHG zz0oEGM9<(F-f^fjBGxscpj0D^N<4-AH@!NekyeZ88i~)GHBeEYecZMg*MERbzvw`~ zh(>1Q$*vPi(hd9kL#BR?aE)lwdHDXTmS`kf&~F}BqmfZ=_)pV_xbVZzN+Z>yfXg+~ z{rHSVie09WA(eaUrvN9_0yCz5Oe4L0rV;J4HI0ZN+As-LHKIMY#b{5i;iq6{$ynEj zf>MoGF;b2E_}Gj_nmpxh$XtBpY{ZJ4oC5p}+kw%6vPL6)BL9S`pO?5sawHR;`^qI6 z$rkir3Yzwj4sP&OBypkrf25JEodUdW&x}U?sJyo66yQ;|i8|k;iux%))5vWsQ$QuMDY+%`Pn-JbaE;7TzHsTfB^t>V^rBbQXk>;PjGs9L)KLuzSIf^&bcrPF>(})<{Q$(w3BuD|#yNRb}PEG;-;Kim9WlbL$5&0)h0j_n8^pi|j^NJ-J$riMZ zf?6M$o7PKej;UA?Cc|%@nw~kc`4`5@vhy#t_vlwM|N8F(Yvx}B`}_;W&zntl-m7P> z(uRA(;AJK`jOClL&|I|FK?opxL}jIq&BqE6gMepZ1Me+3`Klk+@N`PYSN-H6+xmG0 z5p&9pLoHN$#)0ci4>ATi#X%@GdME>4P&_*Kr6aY1Y!)2-v#8w06f5Fesu(B^_wRid z&5q6Zj4Af zDO>2Ngfh=dO1nid;?n+=S7d{olZE^|o`ZJPiqo%gX~ju2S#dgY{z!i$HKVJe)QEqk zy?a@W=7^~pi55D)HQ4#BLO#F`+SOB>{|aVd@8;=G>Dci)H1y3TH1xnRrlDC&1i6c$ zy0Rh3fu+u&QvL56wdm2U;n&UA(-w8&PV**bI|uOL!Ln@UFR?E@%&6*v#e-31(~6!zSbcw?7i<@$YK5%dyJmOhvRngzwuxx zRIDphK~iYO7$(Ukk6Pb(IUVS6ASn7%!9xSh`ut`X?CwRRqyC`7!5v>@0`XDH@k zUnQOvUfdjB{EF%t(r0&-I45)qi~EpRoHJE6z{V0CQal#-MOfT-m!jetb=S1JM%-ly zv$$`bm0=IFR9M`{6-$(c>>r4YOrirGeFD+AM8$>gH=9IPI8-;3E9pR;J`p_`n(4ap zC(&SV*=JsJQR5G_;gUr!rAt$R*h407Xyn8E+A=Jg%MG?$I9ey*Wr$?$xUL*n9g%77 z{a%Lc*aKJ7SmQBh>@4(wspS`CB31iq2st|HxT>$8b=g$qKO$`Ydor~7VzTEQB+oDzd$dx`it#5h3Hq$%Yy+xZAjE{&m&_$ME4rsRa4TC#eaF^(LsG1XH3M zw^Uo-T8dJG7^4=`@$LE}C^t4nExsK>R15X zy)KU)4*FSP3i)&JAGE6g@PoJnfT9TiZkXTT0O&_A>5(c=RB=+41Ve*Wb|ZJGvZ96j z0R#-%wU8gcXV9*m$NVRN#K&n-p#~EFXBSj^_fe+WeoG30i=oa7HipM$^zF+crTW_& ztTQWw&J0O9bCnIS-r~wbibrP_p)BcR{KMBDbBac1cq>sXTmlhWu+|#=BI@5kHJ}g|w|MCN*eX*{61uX^1$Wu;m@{&$^ z-QDD3tfZE_`&4RRGgJM8j?ZFF>7lr*JoYj^oIwxlNl@GSK*j$!X0odG!W~!E-`B zoJSNXmd!=8OTuXrutyts>dKO8gJrZi+}W}011(;ZM43N45@nw15ZX}-lYUA%Mas_* zFB6DeU+7v46aBIn28t3bLV^$dM$t+#a{KLb)R#2i*k2htoq zd|6upu784>saS8O3Q9priKieH7GIhHpAL)Z;PXLFNFj7(K~AGqCVLPS?cQv`I-CYgtYBf?(!b}|NJZw>^(A9Cp zU46_078DRwR5D@*JI+^Wpzz++#f2}fsR7bDe0Y4A!~djxrG2rkeFZH8QcpSQd#~)M z1yT?5GpteLKJ^Bq(_YjWNDQPC@&O90aAk7=1xYwSIz_4)+O##Y?J<(>kmB+(2NFwn zw91ad#?tLkJkHIFup8H1ii)e>T_f)5bC)H|xq0)f^m>@3!kc?sv2?x3McoQdrQ78< zEg&$LuDI}u$E^mWCLX@XL*J7cj9G$)Z1PX{33!KNOz?u zPeOvFvbb>I$0-@lz3^2aonXsxc&;X_ zDM%^t6r{pe56=MUjKy^DdExU6NR(Z~NG<=;CV2s*PRbVHmsr-TnUP*$ zDSBPr`CI|13RB2`1OGw03P`_>OF$~R97w$&eyBI9%z9;2f^f!TRoSm`mntjD4tB!X z!EU*X;WL=m)$>>pNO#)~)vkMysdm(o0y@P|=Luzoi3|}|xge$b&c7Y4t}ZXSIwa}p zRaU1Uldi6KbafHBy1Pc*Wd|8K+vYAi!N@jLi&9a-Kx2FcvPUkuIwbDu-U6a-1z@Vd zV|O_jq43_-#f6@oYk+hZAD&0#zwcgZp<-S83R(uFo^sM@>JO_0QV+}LtPG9Qj~=ZD z(ssFk0!R#`t?~g1M2cl|0R>4oK>7hvO@Q?NMxoAQGsdUFJcBO!rT)N`IV|H2% zNT-wuhA_MU(?%x4I{KUese9zdERV*&XzwDAC311591;WRkbGF!6e*U?MYBu7X%n!= z7?A1;kj_{}o5L~xwhTzUD2X!LU$`2OX1ac8B3=eaz3nB*JkXv1>1h zMa~bv1Ei+MXs^BM=xujXG=(5P15z=#dll1xv>zV~HAujx?yhDk)|;t(U*iB^=>t$3>T1F+8mXXZ6bjQ^%Fd()3OPk~ckUA+_gpU!SrY`F&MX$@j)CD^L zBwNV80{=m~3P@j$OF$~R97w$&e(ITRO)6GYRtdtPk5Ofh;VxBHw2(iZfI+(!@;Q74 z?do}~2&7YgIl3-v|9n$zhb0AcilNS}%BbGT6_t$Gevq@$PT{?) ziwk?#*8pi7K0J@e|Hd`azF613f|dcPr<`<}Yo1>Vq#owSq@%_U|Ji_a#EUu#iGg%T zK0tv8P~hRiNjO0IZ~s;W(og+S((Um`y^vVC{Z+OA8%wuM@k-HvNHOYim!jgzxvS4z z9qzJ(OBE%IyxKj?Qo&>nu2{O>ODF}SC>D+bageE4>&1bj%NnyFZCrV2_yDsW2*QsD^{ zr3QQ&ET)6c7oKK7sw~K9RyiRoKUdC#N#2nk|K?*yxWbKpwY`8OA#8aplw&^xRDpCc zsEiMB4IkQ7WfbdWR8U$*C6|^_0?{4sevSdDmA|w}UI3|+vPC$S2sL%N*HZMl+}SE1 zRbdMGU*bP#R{`lSa0y67mjkI6BtNF|L=`7xl_1>vh${PY?owq%3;FL5Flg68eiolW zyLuig0_g|-0FYkwEK}`_B?WYfq0U3f6Qiagtl>aP_22ltb#-}h011+G^(tF{Rd)jL z+Z2zkE<#s#SHHV*?&@<_hr4==RFtr~x`$aRbah;wZWKJARV1pYWW;W9GEL#VtBVUi zdGt=?Gw*ApQ~2;aBLBk9(!N;NzJitksi&NDnp4|qfz-qD%~poSBOW#&ZIBBnfW$z$ zXzy*y7Emmk3n)m!0n*=)YBD3;@SvnSrCZns1Bsk zX$hAq_A0qp8SyYng@c&5V(HGR5-d$CJe6+2VpqlylS@}z==+;VcLg9d@vvXo(;6`{ z8Lpzw8IZb%ogdFdjsN)s1JXX_!6`aO45U5sVLOUtUN#raE(xbiz`g<@tsU1DARV=g zHivILeHoB?Q4(c-{+X)*saHRV_kQAKfHZhjI9I55S#KiPf%GVf@_r=9IViaBvXX?D z?}D!aX*fX7f6uVqHirBRNW~DdT`_$|I*JcpwU&T?{#Z3rvEED-l!BBJPeCf&a%cv8 zMl7a-&l}l;OHWo7+eiY^CIFG#*w<-wkqk+Mn?KnZJ#BDz{ODKMV;owMwlJy&DW81ss3%hwXQBNx;iB3>Q#0DHtFh$M^_i2 ztGjE~U1RQ=ahDxg=1I^zD@qt>9PzMW5xP1g?&{tGq9FxD6_t$G1&dwjrSRU>#fAKz zYk;%|AD&0#|B`yOP_eFk1uX+oPdVvRhdjL&NIfhz8_@Xh?+i%$yr}(<7)b3%G*DoL z^8?aAK@v_^{4A*^K)UO1B;7Voq#Y7VH&Ty?J6MM9hZPq zbUBcELCj17l^syAFfRxR$33XZ?#5lJtSA;g2*Bcp<>M19k=I2kY1yT<)0}Z*T@$z3Akj|(KKmjBM(kb}>1y;DSxfp?x zaDepnPpJawckh>UhZT3y3?IZI)%o+7oq&y{+pBmO%MxKrlDqtngxl0v`s!7A`mH-%|)|I!f6w*>ygabaa{q@e#;2^Xa_C>(yTJ~ zJa{!A_39@|-*V6rAoaGF1pk;|2hu$$$^l3a1LSbwiUAeb3@%iG^bLCfq*qZiLS~Vl z0jU_=4crw2=?p#?l97O4^;b1hvEED-l!8@CuNIp1`%rNa=E4Gb*ZB+tTvErA^#=(2kj~#y$qLtRCGCz zdO`BRE9<1J5`>+svR~vbRaUf+|0B@`?OMo>;xlMh&tpX({p_y*(t8dt)s9$FK&Ke$ zJf%EKPFTaiRjQx)rFC_M(A6PHSFf@Yut`@}Ji59FUEN({?iz5{sJr^zHEg7!gqdUZ zd04LqT^$m4b#FmYj{>5KN=EE%C&LupySljW``^_7=@33VkI4Vaf0p*ey7m>c3`jlY zq|*$y)B>r8<-4p5jVIk_K-wV}PymU6v`s!hfe29G;q6H{K)U;ZRUm!uFC^VMkJJE( zrQ2L(TVZ4APWy@f7DX>c3+_@>T)|yU?wWO%C0wc~VdOO?Y&fPUqh6FTNDQRI z^5I)tmU-D+G`l36HUaxe15#Z9(pk%BbGU22WkBjhNtAj06ITP$OxF+pL%ht4G>cy6 z66`>F7Df305-gR)g}1+tlCy0Rz6zxKX#e#o`&)18M}7vRVu;zNm_8%z!>1U%LjvA$ zQO#7WH&X?rAf?1pkP3f#LI!+#EvAFdIf#>5f-YR37au|I#LT0i;gK z7U9rrU5>I8y)NJ4<2StjBH2RzNc;!wDjW*V9>6GdncG*>M19E?^XNN0;z}P z$E^&F`_3AWj>^S3A4m+O!}0+NM2c?X11Lzs0n#6kYVv6R?4L=xy^70bR7fn{fhs!$ z8%wuc@k&ua1QT2CQdC@B?&^0}&Rv#psiK6DSBHmLD(q~>6-(EfoSWfDrQ7N^H6tdM zuDGynZZ#k^@n9v%HPvBcGF(ibGaz-3e2Y?z8avsYOre|Payub0kk-kEli-$l*<5bf z!@_A3m_~S&0jaJ4Y0fg*96s{+Wk8x$<_Gs#4M@HEiPB$3ybO?f+e?BEBiMoTUWy_K zmdfJ7lg^Nk^9%4*Aib5{#-Vj@>upWQ&wx}6F=rIhfwTdiVzh$G)Yj5TL~w9aBW_`HZiXY^!cK~BNS1d#guvE`ABY=$DB z3Zx786{9U&!#-9RDjg-FKv<+o!&{=BHX)orY?6`ie8uh z;vhCVvPia&zZ3sKy9!8uic3H$x*SNoAo+2X2aCx@$|^xP^B1b@9o!`#6~#Uu0odo` zTFB4fGiX=OV?`j{{VsrX{a&WpX-f)$i=ocL%8YHiBCO#+O7$=<1N9t5?|} z*rcl~9$j68uI{b@cXhd|-(5L(^%|)tVRdy6YZsxbL*lN!-~nwSQAH&qcB_*q3h!NA zTsZN*8X%p(hvyOb@3){9D%Q2Hpk+YnDJPv~$H&(KsfW3F7VO{r)PS@}WdI5wF_6~D z2Pm+@mCXedB;f$*0I4QG8g7?#r`>YI3?!CrsIrT&v2;fi58KBgY+-PhqT(8N*Q~q7 z++_)4``A1yqaJ3du(cIeEZtybjfNGTN_WU_8beGjU2$RidshQe6A!!FJgre9*uSCA z8IZb%8#aj=A7TG2h3;1#lVIhbsos9@s7eQe6SkG0SLkc=>M2 zfYghUDD#DTt_GxD{UqLQ#LEEbf>$Me+4SHZ36QR%DEm=}QdwNMqfdIscf$ju`rsaG zq!+T=INU?g2pL6w2BczecPOR<=?Ff2$Vvh}?Kf(sV!fFvCdtcMDrCAqioNDBJT1r~+vLKdjJk4bxjx zMzLN-1*K(Fa%maKykB=*v%3MQWW8K7on@W zONL_9)!jAgt}%B_8?i4Y0*#{{HX=e-hs0goTR=3d0L*P$0qt8~+|)ziy{n50&9gN? z+Kms-Bl5rL*V4XN*S><50jZ~)^r=lvwLt1&`GS?9v2d#aX}=eB01^XfuY7<45saC8 zcwZ6@kiKBIDv*BqCP}y5BXvMx>2_7w9@tpA4T^_3U=fbTx=T@UwYV$iu4Z>x!Wc6* z&q|YrSt@L8#T84}n_N_<@Km~sW>lz>LrgARap5XD+{$aDCLWBLn{J{eBa>kVaKV7o zJ@N}mHER6EUrlR?Yay| zv&vj}+-gAT)lZZ@MZ64^J&zTEbl^sS^y-~W zwRM)1pc95V_bM}BRfIJhNU8pcpIBFy7yHg3NmsA3J+MhvS3J792wmM>UG8deSI%9{ z?rJwuQNmzilZQ2k(A6PvSD)~JI+3WNk`a5+OdC`du>|2=U0k@~r!_#jfDg|j@-N;e z?TdBoD`**zddf+sIc=9(AoZ~Pf^v--Uo!1bAQw;oiGg%lK0tv8P~hP+NjO0ITT)GC zq_6$4q&wn~Mj^3u$E)lVY%JYA#VbVW)Wn0i1lLr*k;!m1ea?W?J@Va_N8{VrolK!~ za&c%L5(8e^{8@IF&?Dk1uQu`#j!R(Wqpqx5opCsN7a3TAc!|$myJyrV(45EF5L292w z+YvZ<$~BaJq1G?fTfgsASZ<$WV?zeeI=F!hw2f-+a^9ZjR<}=b^vyyi?NSmt*>0uO zK1r+cjSl7-9%BU&>jhCz0>b((bu45u)rO_;z+;8LW}n11F!8QmH()bep*Is+1HXG( zT3*_}Vc5{@lk9;fFZ#I(dv}KldqorMUClnp={KoHyAe}05>4!rXsZaX_2pwJt!SU* z@jpUC$JU#M8Y~f-j2Nn0W1r;JKM(|TvrI%!kR_2A0(iiQ+0Fr40d4(%**=Ljy?D>EY;9Ij#@(Gem5Os$siE~1?FztfG;+(0n0XCNCkmCKX*(V8z#w98)Jo%PYuoSB; zHTFsRe*uIpu}^Xco07rLUKO7wc1Vn$+hU*Octo;xT-U@t$@{hgJXf_(^3EO5*jeaf zYxYTUM5@J18NEpW^BIIy?UR_zrPw~n@svNcPZA^B&)8TT_IZr;n_1*!$R>uEZPYZL ze9qv*3wjCiD?d{c6zfe;K?$ZTu}^a8_8G*OwwR6>@e6uoK~6H8K+apUPqN`B!iO73 zLiixM)IP}sek_P_4Le&I#d;YPl$OzLG*qE)On3a@F*f-$3kAHOSA1U38!20aTZvGE zewSN{UKf8sFJmdZpvRvV^jrmimq7)9q6q+Qi+z&bAFHxoZ2C+Rlu)RoC+gJH$yaM&ZaKRSPKE&MG}<{^*HY?FPG#}F@* zjP?E$NPqb^a5}Y5(n7mW?2{a)_LSHsiGlRL7wB!%6pfI69v>+KJg2BWkF7|8(=`{_pfB1WY-@ETi!|%!WPk` z_DQ<&V?m5-xb}9HQLL9yL1`H?MheJ0r#rsZEKD&LcuiU5>I8y)OQO z-tChdi9avsxe7>M3KfuwE(cOC$V&D}4wzD9*K(ICE1I=W(t!^z=*?eguLz`9U5jcT z{Crkue zu}{+a2wgF@PcpPg(jD?dh9R+ZN2}~OY%JX##rt2jPtuH-T)N`Im*{XS1F4B;nSGLn z>2n68z1AcW`y`(YCcSo5h{YjDJPU2LDsJ6A$-f(r>I#tdS-P9UgMU~Cq*-PD{7?UO9v$ATEw(0`N4DAvoUptOt`BL!qWt2^GZXh3TD^MYRSc|mWa zY!QwmLQP%nvJ|~8{(|1^liZ0vFX*`nNPh|ykcut`QZL9#_DOErtjgZOU8<~T);`G$ zKD?kef2F-5ke+f4s=fSSQ|+`O2}s3I=Ls`0k+o0qxht)!E9C#EeUd2(?_FJ7nD~AT zkWS#k^N9T4J1y;tb?qx?8IWd8TAcicS|IhX#6C&e)eZ$Nm<~t`q^%~zt=K2Ihg1_F zJ$hWyUDVNVj*N0=45a^e?30WkCYP?b@aFHW2BapQW%fxfr_ULXX6=)_o{h+iv?E^e zQAiA=L-P4M_DNo6K&mT1n%F1#;seWoG^@EIK;pjQ^;)UTZMXz%y0WS``{-xju9LK4Cj(WUlD3i$DYo@;oPl~Jsh zQ9)@Lm01e*%3OEsM^TxPTK>GCSA1U38!20aKR=kM%W0OP*TrAZyM2;V@#h6SR{`m} zp#oCT!n>4n5V+FxZ0uKL*lve0V`G0S`{8nTqvhs-P64vM2n{{%r<)+AOAnPyB*jS&)TKutjvKeUcXZctOuK{AyBV6zgSFP+G=}kpePr(j7Pb#(>oF=LNmu z^Mc+;*&=+62sJa(T`fhgi@%_E`y{*I&kK640@9tK0#ecCKE@m1^U3i&^3pJb6&q2ATS zg=bz}1EdT1@H`^_@O^1ttZQFE%YZa%(&Fa%S|IhX#6HQV#vBSihXFg6;jh zm^XYk7wKab`GOXJqrF~uC(^o-4L|k^Cs0*d?yN;Bt)Hc}S;XSbxq4aN;>H1Pv>Ukl zQ8qV+R=dZ(KVUt+-s?!pR~n*D$eJ{Y0$y6TSV5Q8HOnU@%vP;Ts`?e!Uhm z-vgQZNWHW}B}#l*tyETda+Hrx#|hD^U+M_IQ$$u3iC_h@H;jC&EdB;c7yiX)9oO(w zE0|a>n1ZYWm)1}49h9VS;rFCigULCI=B4^8D=y?doQu|vWfJ{+$MUA(u$( z2W*oMf4I*uvYp$lU}DH_i2M1r1FzVl4ZLQrbl@GXB3(8oSX4GAKntDUiEGe`i`7L% zJNa6PR;<@RK~{sBrdazf`_=c;WS_vB(ZSB|Bm+gud`oT1t&M&#(dTc$Zogh1sFPl~ zyIMoE*ZgJF=P6#FX7aT9h(Yk$2f(w65uTFFRdG`8Hdpe#2^8>w-WuQzF z6ob2;o94bw1T&)FfG3MqT*F%@RC}>rdj&16edOgxdfIWnLIC?K9^V;IVc3jfWoqnp z0O^p6Go+Bctgca;e3Ea{mCeO*@+6$&?>vC`LI*8d3J6b>#&UQAO`K!!rSpLjHccZO|yjcgS)64W^J80(h^jn74gf z3K8oHQP47lSbk~Wy7pegP+~O|Q$D1bG|GeK52|gHQTC?uxM}_;v`fu>Yun|kN2%xe zh@N^)k-61V4DK1Prx7Nd=BhX;PnfIzG&XG$(_Fq8gKsa@g*WKMHr`2sVsOuL(_DoJ zCWdi5i_sNa!wtZ2$ygVIf|iNF%aOFptA2?X&eggpp9E52*iC9>YMk&5(4%s3Bo7j| z%VGI&Bu|7Rc^*EJgmXF<_OI41b!A`+7ISkrVs=^6%ogTQ73NfFxUNPCfMOLAXGwDI z)Bc#;W9d$YN3KZ*t&?+y9sJ}r8t|F>9&=SYQT3}Cr@r>hWSlx@OIxmZ`YfJ(5)mk*^=J_2-v5DeW(Kl)5 zj9Lrf)}Lo)0eIy$UhCs)(hj~(l=&+&Ij>NkQ)+VFN_~>VGu66{ZGW0iw9+Uu^NAU{ zxqdZz+9}Ovql3UvP9n%y)S>-(qIg|9zW zD27ZW*FzP&rhM(dpVZ5QE%piMr^lU`apfbQ)x1Q5jDF#JciX&Vf_6aLOTR6~*SPBE z*wK&ID7lWY&#x|w^M0391!~so#Smd??kj{^51qvabL?Ehp;xJgiY;o~&MSz>!}j$v zvP#r((5%fzh|)RC*Uuc!^3%kgyUxC5diFHSVg~F{{o_@n(uOJ8Df^-LFLn-4yn^-D z5_~*1+Lyk3^x*-BZnixFSjXZMY`F9;s$6Y9QEjIy-$Ual`FLR?ltf?mv7;q&bEmU4 zgS=?3t!U2}+!|5mPqt<=L=d}TxQ0J` zOZ5`#%|=0LHry8%K|?o%6?yhex#I1);%(uGyEBcbU^jUcH`?^k$8T)xD37sGJ(GVJ zR?p<3tmKm1+@*=2`|-mXwj!Tw1rqB8Qc%*4Bh?|TJ9X;S9moERZju(a!Ha98v`G<| zfI6`~IpKpuuThV_v`k9Y0lrUXX7d9nB!hO>d{=GL%@!csepd$lBLA=(1DK^5e{VMF zcsrBt{H2WWZ>fUA86z2R_`*+3b2h4Ban=SQA3OOhfLu}8NB8=laU?*cmM1UGAx{!w zeCW@H7~SM=sux4F1;VReuk6B;#|5ro5i~3r>%vx0Ds0a`DgOMO8L{O&WfR-^z$b(8 zqLt9UDHqk>$+mjNa%Ig}J|$9e63+uL|Awa{iO&q!sAAE4w!&5#xhC_P0PNs+A~qa5 zlf{!LThNzM(D)0l$ROHOP%2E`jYRzrjD2!F5rL8V04(K4nvq2T;oGd2`j_RRe6QbV z$)wvoyW_k3!*iAtH=arR!O|LGm^kAaw;~%7YP3G^sf^aYruz79N6Oiu?0_s0&iETC zw;HM6TQX%WUoQ5LK=zl`hxAUE1W<`-T@3CV;Z?1-una(JIkhHVWw63htdW%TOi9ZBU>}EV;tv6Y;yxm)}0E*op zPYei@lMX8wUyWc$_33m&+9;RW|H7K|H9wq5)7Rv%c68K)kmZ2q z@sCuv{6Z%s~oWO6AiufuL>E*rND z5R6ENHLIE5Ra5kh-;SM9%r!|8S z+AygrS*s9L$T&I~*R=637{o7h-Z0pCL!tA6!Oja<W8`A_=D%d92Xhx4W#W(-wr`wTquuk|uAG zpgOes(&-DO7aexQ+BF}YSUWJg-BBv^O*L8mz5FixVkSS@wfdNzE|ScW{)O2TR*TP{*|B($0PrG(adGo-ZiD#pW zjiO6e?Vf)L6W+cXZ2;9UVTp+$@jjagZgth}SGI|}cGYfgsrx0o#wCG;BtbE_`$@36 zY8UY2Bj8-a*8q1u0xl1Acza?qiPqryl2yA;+{Ab_Xo6g_YWEp7+*4(HmidQQ?RKTf zt{vAkS+zUphGk15CYZFb?XHq+W!3H`e^Q#Eb|zgh2*al0+p=m`)*O)=rbMg_*nE`9 z&4QZOsh<2qlDrsVFA^57yN}}&FGJ-(@njiFf>zKnK?iT1o^9D&X=U>_QrSIp7nZRV z&)2+ie9FP@ia(TU&pu)C<9crS0JzbHg+edypE&kB?1p4PORO`Ph^^tPLn= zSwpESWlcm3k{wlokrPhXnyccZJY=r=Jm(*XX)ZSN z;c3g}-_|>2-q0ioiorcbcy)QQAJ6!qu?>{x6H4+h;VWpF@U1v$jrO|%3GU>}lS-H5 z3s$Da1KHS32ke*2pAT%h8u?K#>@!$w|NgWe{IYO=6lk;#s4H{haf`V*eERxjeK1>? z^M68NR#=`Kt&Rz^O0tS40_3zV-y>}9U|+iIuskQj+Rcn7bNAe1ahV2P7vA7;M{~vP=6W^R$<$|sIqQKn^=YCm3+a4Y ztC^a^X}+-&MO&Qz6%xv%*Dm4ktC7!*BUSmdk=}Hg9`koqT61<4Td5vXoH}OXM2k|` zIMD=QO4G8gXlsaMY!gJHvxr$-KO46D&Q7#9ME8|UAy%l=x|%{zsTG%JSDJ`F>qoUy z<>l>Rh5G*d)7kp|6VEHplmL9HGK-AVToyAenTC@*+x(fg@;k-80pz{%ry| zK*t#f=UH9i2_rLee|{==N!Hf8si_{)yqwp1IXft4)T1czTU@NVyUXwMSG#@^JnYLu z0`Y9JgsD@Hm$UTCM%cI_tc}XHoU4XiS~b%)zg^F12sw87eaY%{D`DYtR;_p;+etjt z;>&P$GZ@2s8kXgC5gtWUjIaxL7V~Gx=Oib*DadU+dkRJIhGOF2?Ot4Wn%)sj8P>ea zBzsur%$kp0JMi=Ecz;3QWapw{&p$N{yeJb$;*ZWZC>ojBv*+CZ$KAVtM^;sNylEsF z&`3a9Bj^|qHHwcQC_zNiO0>{!32Hk*L8GX&53~_lTBV(|Z7`ucV^B)t0}Tio1vRMA zL;=&`(a~`v_`o=#1Vq^}tp;Q;3S-~jf31D0>Qq(wfqK9D-O87yCc`UTZX ze(hX1?b43AfzJCEZmW@gjrQZ>PnGi9M%tP7)5 zY>4(^&}8KG)_x7Df>DVRTDL^vYv<7FJky}L1~n|JY1CHJonfEBRAV!XIlLy{uqNL{ zlr@v9skf`Cpx8$-r!mJd7cobOIuaNwtJzJw|8K7B|4o%el(KgB(J9@p;DDQ1>s^vw zbz1{Aj#*6yhl_@I^K}Y+jR^trA}`+l=6xg-o8S*#?;X4K5Rzn{JiXsXT}xv#C6&|P z7xqb!R-FF6{(GiKo1|r@8Olt5e~R4*c-izfM{?JN3Fe0B>v}{VEu&e8P&WPDO%PiE zc!sCbp0fo&9ya~0AR<>ye;>9rGojIC(R`}pCUy8p`SkaPJ_t!QroTlV4CpP22ds2+ z^$-Kbb##)q>{FWlzT|4MJkA^TqhOHnRNVdeBmybZ-#JdIRL{)@03#?d7n0D*>zoG` z=)y_`(>30!oM3vK=q@q6>lz!LcPJ4im}JB`aVD6|(1H3=9ROV7Owd$bk#Lm%*bori?MaN~M(vCZo`$ z(WL&K4+xS}0CNe-1u&P2AiFt|O_4DHi4CGkf(a%WC>>=m!NfOyPh$DCy`(X?V`ky;LUGe1 zn*JBQp8}OMex~=ubtjB#1&n^-H6QCBck?PgHRL^$sfkv`uPX;5ztqmEw$s3>CD19O zW>}S8IFxo)q2A7V1WAFh!mpWIcpO=LlhY<}~tquaz+>=W31^;0^0wGzDPXk{QQ6Fwc1$ z9tzcPTj%gkFF$Rx`Q+?hQ+^(Fu9crtC`KoYUzL`hgQ-5t zm!Ea;QopkDbLM}h{Mxd;$K`h>lj#2!ni-7rn0zr!Ca6>tW<-gFM^cn0bH!4Eyuk>1 z!N<(V9t}jAqr~%XdZt-S$r~fc8^A3QWG0m-E~>z@27Nar8T$Ndh%m#cj?n6|(+4F8 z1~zfY80M0v8TYByrq!Fv?e{e@!hp_4AfUov#Yb>tXAS>0%t!F)91lz()h&Fsvb?n# z_cHuDqKv*4l3#=yL1I^Fjp5F2{W-@z9Uh9kA-vdH7KXq-&DO^n^zUDmzSAG) zdMnA_d<=_N>h`;Es`vI4{cCqD{GtYb+N=3$f=!;1CCXDt{Tl{OLU>O} z*2as$N0jwn2vOTQTAE1}v$e&|HmgJ1I@%e+$iG8%*eje`3?zvylhjJ}=4+50Ow&3F zLvb^z>|oNHZeEASP{vqB>nfKJ7cjKrWaSvoFio{%<(NE7uvZXC_$Z4eHyzhp^Pr4W z-)7PJbR^CE#3RWxUon-_AhJlmX!QlG2X%E{M<(3j>KAICD2OCvR5Im7l&4b4A6CxgxPTUJAGA zTtq()Rc;nUxKXgsYY8n|UV6W&i#+SsFi%LvdvjaDgGy`0iD2Wm%8ehdem66#g;5*2 z1tJ+cWPuKo2)Rnz+J9f=oQz43%O!<&GwR=e8I437=5a6(o)3r5;fVyT85Ej?OmXS_YSqkYmYAbN zjAmBL2)52hE4y0A07jDxX6SOqAebb6Mn_?iET1J|To#E_Tjp03*Q1Q%x8cZzBMG+X zTf>9M*F*o86wEoi18_pU{!cz?+_a!^wTxOI>U^q=s7Tg-?mT(@zljRFM!yjo6S-v0- z!&yP9*=1}?{1n(C&cFB?tey2SrqU&O8-gZ{C!S?ETN&_8M-k^yMa%o%q=ACDw%OX> zi1P^HV&JNAJ;Aw7$bs{zS5)C_yeSg1TEsZc4dh=x7dn>3x!-bF=*2jz1t4XieG$-m z6@lJ}=Z0r5JezQf??A7|cjCiFr!~CE%2VHESSuhrx^G#m&m&scN?zdAI^r7Evfv&R zZxT1swFqPV=IKiglKQEO4eO2a^py#Q^&r!`B+!#4C=2c(qLr}j#uHr`&#)JL5V|sX z7}g4^!rI6wviA>PfxX)mkNpJtyz33A)2E$jSob(h>o6kLUGm8nEMTBuu5Gr3HDaA3 z+94C_mOU|6@L3Cco(?YvaNx*5-b?3(SsiNyRbg%96tP}$1?;W! z)g(%nwInG;v$mwPts}>_6~*h) zh*M(&I%@t?$;nr*abT&^=i+f0+*0FTn>Lp%Mho{e>UBFf%jl|ex@L(o|0$BTWn)V) zm!rFRhIfBZ_{i$`C`kCI2hm8RBzpu!f0NFeWQSTVf3@7m9&QvY^u->E#8)fy$%K|k zCU@AETrxRKROjPnFbxtUo%M|>U)yXgoVYUKtl>T{&*Ll!SRQ48X6E2|aVE-WgL>Jd z&OWmaBtyogf-Mf?Rt;R?-lv<4Hj}0#3m+aPY+eF}acdgSf#f=#AxCw~o7K6cpdzlhIWxV{R(c!$DRSC~q9uV~E zi-O(=acT;BXTF_=;)*X=LorMw0H+Ng*GCl_nb zFig;U-woDK45bOmLbQ#9ml}#eJlP1wGyGw*SSzcuRzXz_h0~Er`Lkc7Zf;ghX6Ly+ zk6_ z=A|O0O3NqQ?3TGoHZF|DvWw7>>F6b#;l3z5M8sGdD!+B1wZG8bF z;yh!q3l_i)EFLadF?I;kSjE6q<9dQ~i={gi&c37y=PWU&iI^%uZ)Z4nSPl#A7}ojA zQYGlM;Tb!Bi|;_U;yY0=I-{U>_Bz8_0io@E%VK>I(ZVcwfmbcWHLPX9ZO5P{Zur^E z)M-09H7N{bVeePeX|cLm#2}a&O^xq8-LUSJYnvS*9kE_7AC51v*adU3!wy%(dL35h zp`KtpX)&il|8N!7Sz^xld=cw1L2qYR*I5n=OG^=JS*irRMLZ+c7T>WB_)dJ>u#SRW z|C}OYKpjuR z`nyaGlfZ16pe(q%2`^zigXcioORun`_LC!mPRKS6ygWn~T9Zo`&^}%q{cEP@14DxR(eo zVLgZ^eKpUp>b=%i%fkk63aY}|=}57D>M-p6nH?Nu>5}}6(bRa!X@>QrTnyGRBG#kw zVX!WP!McZ!r{TzjSe=J@f^}WQdh|0@SZ9g(+~E|DV6g7t-Dx-?99HL{ zo?ty}F{i?HpQ^$-OUySeiddui+JBzpCD+@}bg0SNxm>bgHm7wr16Oxg=E%obyV-7l zm^QObvE0=|lU6)dqXwsE#TH)v2M}U!nxe5c&5VK@iBbti>?DE`4^2CXppS(=ZU6a> z`R7R$#R;mG@onL@cV}jxGV=}XF^6S({|nZqdVf0~W~b{xdv8^lv!!I3Bh4e;Ye5Bb zsc-g>-B=HLNZI!~n0tb|yI61Q)3NrQoNMP9H?5fsTDt`Se6u*YQaS$>s`GpCJJb9! z&tWMPI!u>m$7K}PohwL_Z*f(Ua%&NwHjYB$+LGrYe~ArLLai>*UQ8{7B2!WsJ&zt6 zeBk>MOsHjT64vQ_WaS<3(` zU`eV5V7ZFzWm(IT_P%an;T(n#c@I&eTV5`t$+#_)43?^;_Q@=^xYpS zPm9n`S)2;5IrJ7<)P+@otaEf=%@yHoX93olD+H;pD$HJx!3#UIu>JAm%SbVh+{`oS=^ug>dgAA?^0a%XnoE8Z!6)~8-U!J%F5L>s=5modmY?W{X6rm8T$5Mea*`oB~TO#)t;@dx$G9?8m+I<{Phxj zU1t8ep?d!M`)^6<+`PRmoxhgFcfnD2lloB-Wnwp&Xl)z#sR|sWrBV#b&}!ORtT|B~ zjyw?0vd)gCHesou&sUGaT3R0FtCI~QVfrA`7D|+&8(_x9x?)bt{C8{jC26rAlxJw6 z_hCP%JWOa(5Fe?Ur+y^oJ(j8QOiE&AhS>9YBqNBO%uLowJ~AENi|CGMy^5zteuYvR z!berp`y@6QeX{UXntod-)YB0HT`CqDAcuF(xjCBv;c-yvkKK_=XJ>W8qh0KK6E^ zg~wiCP__`)_%934wus=wjdTnAShIQhQI$!3?|BBOW~>3U2?GMq4~!b1&1r(Nkf0=u zlGxvbXIzu;TH5zoYZA)XmH0$@u{S&6qpCuo<_4&B)IcfafT0?eGko&^ti0qsd zg7lCkbD_q=Ga@^SRSaA;t|wxDo25Gy{`)_x#D3#Vk(jG4h+=IA_j972P>O9mFtY`EB75TOgS7B|uDPleIks{V*YC3w!WwD;L92Ukg3~O1yTJy1G zsvA60)s4cV>IUn?=MC$qrn~LsuDT&0T=b@8vECQPgwDjU9wx3~EepKsQC5?o&P)hA|@6E%M11EFd1kg&Hpn_cOShhkAnb zdc6SF|9gHF)>&fiNFvs-&!>PjEBGCo8cgcH^;08nNsSP56eMaDKS_c&OBUcKS`xm9 zr^3TC9tIH{_W&;p6w z9b9~eV;IY1iyn*Svc)sR^f*ghK1J9~oSIXFFYBW04uB0*brH$9Bn$3Q%ZMAaMV>7; z3Pa|qZ)9@=G0nwv0-h#hbbr~(ZZ1tw7NU(4UMjmCcn&1bGATudjV;b^U}e$nc`o|N55 zi#ZjJ>8~ogSz=m6Ow|Z1R@tx2pAAh7dDO< zzD;R@vJkDC@DjcacyjnS&+z-xgs-fQuY#)Zbvn{Q{<8sCx|hDo6oL%aw#Y~tU%JNd zZIR38btAq_7Q0{pOd)u9Ge+!(8nB9itH$*N-yTJwZ94h9DtxoV)ZotWUGnLo zMGWhQWT}!l0-muSviJ`49KI7@GCHHoaq?=zS^;6@>z2j(14Ii~lNWe3OI*WR7Tk-{ zpeJt7Oqy%Vjl!(C>JQg`6W)}IDFh6|`omu^tY^{$Wg*%U;U%o6@r)}e{!U@6wUVN| zy-kdqVqKp95bS-V%N$CVrweIg&>0|1P>oi!O9mF ztm`7yXMC^<>nt&+h#1FuH)W1-<49o?!?2d6O6C~BGh%J=9qVCyC%$Z0N15Y{ml)Ox z2v0tBS*$-!v~Ux7fmcJsHLPX9Jt%H4g&>0|1apnKQP^m%`j@cjfiQD1g@C7FJd(U`c!npwR#?mGSSzRsYo{Z{djAi?-skCx8166D=aIZ*B#j?>v0+^&m(T4+tQV~n zC|JNi!CZ_h@r-SF!0J5I6RbNd-KkLMt-?A>%m=p=v2HP>cZqeo<*?9(VOYyz!rzwp zrXtp@ct)%(e(bFAow&lVj#Gn$7kPh8Ksf2-WwE}7XyLEqMTimC`)e$?XT+Pt4F-MY z8grvCZm#-|v$UU>=HeJ+JQ0BF!ZdTVVt$&SEVyS0FJaw)C;c_g@SIbuzm|uM8x>TA zwUJY7!=La0*!yzbZ_8>w5rh0_G&O#@)36?v%jb3@)`Rll(mRV?Fc;%WToLPjtjbz-8qiYUPFsD}wx zKmE?WzpJU0H>l&QpTDwlm{vB!GN#ife^ohOxUL$nGhdP7we$I>=`GXh4JaJ)A^@6e^fF5bPKQSV*cqkDru&4mvQG4q*rVHX{ee%C%ru7 zPjS9yn1VD!(HmSim|f+Au_SlmZ8K4W1oUiMO$EPZD90YG(Rv?Q%jlo41Yq zb9{4@(9s>5>l-INI(_Z@r%G^Cf=cAoD;R+*@p==cfph+?_|HF{hfSbl=1+3f{5j&J zls{Xxckn$X890?W-OuN9bod!(X2cojAzN#w!vXh{m7hETJ}EbyTQN=irG=~P`?l)kNtsWANT}c@EuP`vSE;p-)eprqd4svuN=3!~ zKeSRUTy)xSi*?l|h|FKMzX$~0ErC5T@s<+_2d1Ss8mv@8(krw^o=>m%oA+3+*gzzs zPZqMqggO5<@x6h`Zw_Ke>OXDU2`DLS0yKrhwoh6ISeL#l3-1h*JkEYtbQf;a*G_yB(p(eq-Q!HMk#9JMLMq^D%zoTKwD7o% zhT$}E4MSPrSi1;M(k{oQ0{k|WTs#9WslWLQlWc4*fKfj$m}K+EPZ+S1X@atlU3d-9AsRlWi%I&Ljo!ws&ozV_rQ#i9ewZIhOQJ=D7YP>wSB>k5WRp`8fPCYID#^xpQ!H!OY>bl4ZqI&9glwvKu11*tkV$A4_nur^ZHLMj7@-JH!>m{OvBj0UU_Y>E!mIY{L z#hb*9bYEY^)nfPBB7dJC@m+p~^i5-ef85zjbRd-h4f`fPa^)(Wb^ z+Q=!g_jTvM-e)NuN>mXVuM|ldfA$>1dPJT+BNMS6l25Ix#Uj>&ggX!Q1nXewPKDo` zRfTnym><78Vh#IzQ=WQ-@92ShBgrtsT{odecrzS=*maO@%$5arzrIy!5nR!2o-xaD zVcryRyLlzN_69)XoEUrE`ZW5oTC*+rF~!dv^CJz(Eq0Q_IO~bLZEkBy4lFh$9R%*z zmq6?M`N{yN2k9*@Xzf@hCSZ@ZC~rB&N|}7a6INR(^FF8z9~NNA{}U$)Tv;7l1qs~B zJ}9|9(+9O$H1C5B;e$0As$=IKV`vfQx-d)&grzB3w}0|Pv=4;fJ%k83C}o9`)z7hI!&uiNI_MF*T^Xr-b>D=yxcFuE2nds+pX}nDQu6Y zbA-#PaXl%#>y^a7RCwZ2>IuG>(>!yhHbKY5nb(WYXi!rI6w*6SavhrNfXb`ow9EJB~7}*UMElm6aqt^2z%g7Z*8u_&SW(DRpCY z9_k6!ql!Yke%TpSSZ9ejPQ>hy%Cy&VXfvuNfNYf8Ri-7Z*W($nw)l?qI(#RtGOVM@ z^kqjH)(QywzGzvj&mmg)I(Y$#9^x9-vf%DeRuebk)E1`|nrETajQY!L=Ys7Sgs*LQ z8rGYcq9%dvG(lN#=Lj!h-GwJB?0JSi=Y+Ma-bX2@3Tq>$i1n}E0eel6NCzom=!1-= z##cVmux^rzd3KCguj}NK_xY}Yg1Jzsrr~H$8S6L?^#toKy#Us4cv}_LSz=BSF^+W$ zeYSoKDwh!m?1+mF%VD7%!?2dcbzAc#tlRL6SX+F@x)tAvs}1X@GJV4lhP491za76U z)_J0Z8_0`zMO^Q%vEZK5I4^M{PHiP)v*uZtHlzM}+qqzKOYn6DPs6&vlr9N0rwPh} zI}l#Nx(QGEYo6gDG(7az@-SgjK~-2AIYq4Remm@4?dox*OY)OOQ{%ce!+KOM8fJ`$ z^{{;MKHoJ^FqhAD#d+KYb>~X zmDR+JIJK3GZ8XoqIy35j`#SN}=9b{=dOQv5FEPD~_iUP=EV%m#FJV1{C;c_gaB!#f z*YYr|6;y?_kyFI_!Eb}TJ+2;Cx+LFYG&P?4bi=w!E*3{(M65gH!{SI8EROW>TpErT zht+wgCs+?!%&Bnx=~Y-~iFwakBi67lJ2)uP`>OAtK>YL{M1jv7u`wV=9jsW--XDuf znVxFJ^GbTEUV_mt4Wei2FKWi+X)D|Dwh;!JL#^aTrIMh#OIE&w2&+*c#{-JzFz3+Z zjQG)#=m>4oiKz!?NMb1GYQo{w13w7Q3*r{awU3%|tx`YSM$-C~(R0>nhLdvV%vL7H;F4DEd&^vqIa{(CO#=zF;J$j6P2XxK@1k7tc+<%YDJp zcS)ZoOYyv}uOC;bk)GS8k{^#z;IJ+wS=*v!o(UgtP z9!_m39YB2Jn~Wjo{n+>tuK+_l-)Q=o`u$I_>Ta%WoxL2A#rg=QeBpye&(?Uz!ka_$ zlY|-vG{hN5-p(^TbCozCt8+j>;(!e@`Cv+E>*;nhSDJGT>i9-4#{5wTE~xN^bMY{% zq(1)?sLHd^hc!r|6EV%SKYlo?AM5Oef@8y z!k2F1s_#CwvSgjdFd33f*%aq~C|?cmq*%VTby)53QXk7%dbhBv>F)|HMwx6vAzorWG9~C+s_y4Wp&moC>FjRv-%Ot71syv z7|RsFoX0dEE~jdpZy$SZ-G(C;jwt6<(jdZ%M+%v%2=3*ixo|zjuB+vo9Rw`w|y@XLZ2fG~?^L0GKCuwAvuak#WO$DU| zv*IwV55F-}Hrp(wm(3x;8;`R7AHsP!&_aa6uTPEH~tR_1>MWwn*9E2@+WhAt&Vm*b#XP*DA+mG zb}dKbudV2PY)1@@sr5WFn8Sf>DqNzuW1&#dKZ?WpmC<+Gvs3zt^KGLv)+6bCp@T$^ zU4U;^o29Xs4cA|$B1V7dyY&|TSw~<$?RURay3;h;{4c-7>gl_E1h)9_cyZcJ!9MQs z6sM%|<4?$(V!XCpBHsMIpq-h2Yd3CX_;uy8QhxdV);aoU^=>l@Pt^shcI+v{<6Sld zw|P@gN~ObQf4cC?ScEj+rqNNRe_oO*fnOO;#}vQ2dHW*4)<4UF?2_13-jt({P@cX` zAsa_NnN$K`MgOP`V7gs(109=8Cgt+#*)%b@Mn_W)QSOL~-8zDJ$|Q4F@py6H_tk5i zIP$7mC!azRom36;$;X=?<7tgaw>4tXB{btkQuab^LupKVlJgj5^iBG_n@zZ_haQ`f zO;$eluuRi-#%rx<^9DX{bM;LitTR$_iMRSm{ZH8Pz&EV9XPpsYkA~Q=`u*0l^}=#% z+GHVGJK^&`BZ4*j8}W=c?p23}Fmn;0>r_W5;c;Nq1<775{F zy}z;!WBv-p7&LR56XNALwJIEhqH>uphzvSn&CTF4BevsZ+gbAIIf?de@qWjkl>CnL z|Mq5XR?XZ)PpN3;vgF?X+Stsgig=4@TT%T=MQ&!eT;#@?k$Cq0a##%>n!#$Tz8o9l z#M|V!hlFEbEZc=4&wYpO^Zs~-1E|KF z_h%kW#=>;1ZV@Z%8H!l#IJE{=u8*+g*YkAufb`$R; z%C?)N-G*Pw&f$tm!sR`%T8HaLj+Lz8b+4|#Dobt`J4Fsq`NpR z5bqJ$5;)B>PH0PmQ(3=mX~|&L_!`5kLkXgkvUF|31|54YL_bJKhH$Z=v;TUgJ4_Tq<%RFZ#v@ zO5Y?e7-sEEDdXLO+c1*__bf&Uvu0eJwa7Dk`6yu~>p+T`LV2Z#nGsX0XP(@OF}Q*oV6lZ#YA z>_<{qqO<$03j~?;B#i4GH>}QcUFiu3p*kZ`N7~z21BBYy26LtJGQL-mhAZUFjZS_!{b!bae?20|U@;rD z1meH{lLTU$q!yn)mf??zoqlEfz3K3jKNa$DdV}OL0`WIFALd^n5Pul*c1Iw7#%>G5 zR^Cby@!`$XvZV2Y2W2GU7gEfSh*h7<(XGI@MtQ&BDJlQ9Y_BNqVa7Cq$im0SswRI7t1!%Q(2oW3t3E;$4OL)TBG})uGZSMMhpgA5~;B? z;ciZBWFH?cr{y(?B!9wPgm5vib5DJc)9gs>bNaS)`O?(*L)e9uNy`dSugP}DfF08{}S7) zQLeF4%Ncr@2qp{a^esW}{X2W-zecDD`s%CM^v5&&j1teLKY5rI-MjIMrC1yFy<)dE z`3m}pG2VbTy?m(KsA)XrQR-#=*c+By;Ave{;tRQocY2wu&n~t!-0vZ~8Gf!B*OL)z zzvfC_(p9BD&ysPB$aoLQutKp-B`8_>;8u`Ic0*Be2AT z@;JOn#x%SM+gc|BLz_wt5(@O398D9a+5{# zqP$4SgJ7l4XO@}J<~GcFf84fKQ?Keeu{ij|5~-;Sppz)8g-{f7$x@w4FD7&xSerjpBVe-nB3Sqp{W| z1I-LECBs!Zu4AEQVZ9;T`PEtGG?+c8=s#=pXD3yB?_VmP^;4zwE9=*8IyBAi=Iy-% zk(1$yxiUEJnH{FDqAR;0JnE;WwX5pb_gdI%;f;#EvhYGmNNLFOh1Dwl%$X%z7^Evi zllli8Knz{dtLZem8ILn*wslUsc#mC$Q(8ey`7r(V2Z+-_MBynfC9P5s$ZIPK7@XOV zI|flgI|tSdo+asRkXM)Hk5J9$#!{dA-wDOEP{sC#BM-}zm`r)u z=x>zs?}9^8{-N(p?@Sd7>fd!}r9?1%g>j)=B2a?GDGrmmi*f*q)9r2>I7BfMmy!)L z;R>&}BYZ-a48o+i)nj;I&1XX0lc?ouK4V(>PT-1jMerr9)c13SB~9gI&Q65u913?m zQIcO7L)AePqyIP2=he=ol}P%_S>(E`yo4S?zp`@mo|cp^$V&vfyo4pnORqenk~<%` ze3#s@OjF60my;-9v!Qz*zE>B!lW}VUzo|Cx_9v(fl-1in1&M=|i#BIJo#{?SEt;>X znnBf0ZBP?{WQ2k>LBYDMb6B|#3heLuBGJ`H$mCM*3Q4GgenhIyR1#XfAHBnePEgkE z90O(14>Yj(M4e-VtdVTs-zVyl`nPnb_4ONqSatt90i`%`P(Rj*tFoHRb~;UdLVzh#>U;u(N> z-(3)QsFjIEE(QJ0Is!dGjcPj;PJA)FKz5Ts84asM!@1T4q;k*0ABWs?!k3JD8_9xk zPZmgQSH&;Z?I`z{=YYvQ4M0{U_b9_->n#D3cmDg6q>T*i>_Jd3FM@udk4ro*>crW` zcxKX=i9wtJ4kh7Q#-znUxsLQWc7tbFLkGaI8}cwD6eJ`n3*`%;q)f)?v1nc>kJZ?~ zMSR)H=6A6olDLrtZ=xa+7gZ|x8Ki|y$zN7j4`S#qIP_*`8 z6#Ky!8F0CjI$5C3I{uvtMdz`bgP3JPkuHV}uVbPa?~XJ7Ue5loh2PPB+s|$LT2}K>p??NbghKO;YD6J9qA54un z`U}R`Rp;!I-WW- zmQy%KU|@tVse4G9>t?YDLnC@HHMO`h2ijQK+}+DOJa^tGrU zr+Db2d;560fmp^OSzysRk7))?h+J$8lEKzAbB&qdrw#!Z$;Z)<-DN{7-9ofbV69bu z-$N|*^UdtaqK?SjCa4#09>M@HR@!6f(D}?U2$FK^tj=d(t@%`kF`UBo5FmuiO6 zCHWwxCXLMvRx@VhV$}gg94<`DCtt9D0YABjHIQkzYpj27HA7FzOS7fR`u|l`H6u&R zN)fa3;lkY?L$o>F*FTPk5EQ<5JT@czA@pSAzjffPUzwb9!J|?+$M*Ny)a!UU=ig(h zsBsvF&?1=&eb@fEz8@pejh@}Ku=m2l7oJYQC=tTKJqwD&e_gI`lF*0U(79v9!oED~ zh`F?&Dt3;?(BXi*GqT}f3k?egSd5bwmIxcccWz<(Lfz%F&J8$jp{KEO2U*L7!SgODIr_iof@}u3^ zQO=Lek1X+{ja#pgl+ZcH`#~woIv3mZ&AI$BeuMTVUw6(CEN(fNOBM70}IQa z&z!6N{))2ickq4k7w;$SaLH2~w)JRy^@gx!n~h|aP*E-^u~bE=@xxqho29>S26UI2 zO}$+{;F#eH(>g`T#wyUQ>2@w6eE}~ov{`0t*(vxZD;w*n3KREOx)no@$uLe?g45C< zrQ&wB{I#U-eK%U_!u~5u{B9<{xoCC`DVW}!8U%8C5~S%Jg{>7GWA)bKjwM&^}U?LYU8{~tBG37k!;|9(@a>TkD~6m zS}aG?$5|*m!$FT$<1DKV?PdXMQAKbm6|;(Mn^i{`Pp&wA6F>dxY`Bw8EK6#T_Ku$5r`iV8#}WW zg>yEcrQ=tA`c7dBXU_xyi`JRxNoTg+Vsif1bE-PCEHOC|lNIw;9)OtF#o!!1G^Bix z1-A`F%Ccq(U-R5uG0#K_SNQ&rLo(rk`&1}=gTCiNo>>Rtk~-6vB6iIwJh^%aBOF#P z!`9GTLi)yUWAMvVtg-Rb}~j=s?Iz%krW{^Rj#&wVr~c&yf3B`{UHJAf z28<*fE1)2kxKkJg|Q3_BbNAX zi(RmQfr7bE0;J)-`}A%r@p@7cM)U&X{L_!FD)CujUL|67F1{Vfsgd*Ahy}gvmhQIj z1hSoWY|+g0Z#Cq%n;O%0-sLwWC={Uaj(3;ehT$CgUMb+j%+8V3`MNdvhBf&PCd=2% zX~LXNN9GJBD>pk?x!Ji`iZY4UG+r`CF{d%d!zJJUB`xTVg$pwjXXtHLQ_QcdUpl0W z-nM_Wd{u*A7e6e+uT2QIYe!AqfLSW+s-g|Kd{+bA83Ko{fv*tkwsqQmgeZn-f^i!A zsCR!igzsE!A{pF{qT&FIGwGR+akNT6yH~gHpOI^}o)Y*o{rM8rSHCj8%|A5K{fgY? z?LjRD*H~DwDX2tqM~jN_YM%f_#@T$GBE3ceyw?Mh;S-f^mrjwUo_tfsejmM|qxbJh zOvT^kIuGSN7qnNt^FC@$Nee#wEHw*sx)Q;)=r!5EzdHQ-ZpCy>_hciKhYQzQjqf5= zYeHlp!tDHIgxXwY4xcCx?6dz)1Oh&l_G&wxt#vuYMzq7y^hWg0h&E9>-wQo&`Wy7P zz_7j})emIot8^ZxtshqePlr$_l!-gkM>ztpz!A%>m8zf~* z=WqFI29n03tfg+(+dDr2+gKRxQNzC&&r_HY%v|JP8HyIZbyu7vgY~BrDs0G=Q z0vtkHx&@*3Zd|?^&sAqDISHj&b zrYdF^R(V64uY3r{73%RC1znpG5^O7wkLwqJl^GH&ns zip{7x>G2R~{nto;N$i)vy+rQ#^A)3HV zYQ08mj4()iwS?9d62vf4HynM?jw4}#ich7{D($SM%6nhLOxf49u!>)J#6BGwsy>V_WV)~Hc(n%q zUjN`K{=qvYQU=(hM7FbMeh~!Av@bxbWFF}}VfM$*{DKQ>`xj=tv9%RHB7cc@X2}Zw zv{`Uar%Z8(UDyoaSbB2%zj@}cNLe+ zvtrJ^JB}In?j)=n4&x}>M3l`vX4#YFPtKT`DPODVQ~vDfd0&Te<+K+!6**eMn&*9G zMKXQGmJ0!V(`q@x*=(iApSv2>kNIII}0FlAV)X2f&WdD zp#dcv{PH8~Mh4bg8rt`zm0WYF=^m*DHKs$3;*d&L`flQIug>A{WL}}pm3KOerJk>z z==0B@v`StWLK@D<3+rl({~wg{Ve|H$bo?(%I{x3gk{eT89Z|uJW|cVZ=x%W{F0JYC zr8V0+I@Hr!$);Qu`BYmUu&r~H$aSpxlV;%E<(dI?IUJ3~Gt^NnIT}qKI)g4s}7F5n}O6jo+_SJjc`pNkhoqT9hi@)%grS| z{!Z$@sSOr>EF}Gg`uE2`dN^*ib=P%93Jj8kXkCPt22vV>#^LGLXztVDsTistI5S*c z&f-=0!6kTTvBWr#)*lT{u3&k9rrD>bZl1-&{d*VIR8AX|mfy?8cf>IHh4 zwPM>|5DT>CP<_a2GeraE@~wC)fV6*Qh23}dxeCGL2CgwML<-X~xW+&R69E{iquM@Oo2a=!i4ENE5=FRGrKtaN+vJ%|&zDyJs8Y~p;F8H0NxUP) z2glpY@S@*0;zW*OG#GuhNd%RG0;mIn7~!nDR0nQ^7S#cn{e6ES;Cy@TOr`MTKT#9j z_+$fY(%y%gvOwBKQlN&Kfh=sUF*gc5=BodJc6|7_22QTS^FY;vBTulJFrFqT3(i3ISH51G33qaTvbq2O>jEWnlShj3SU$yC|#28HkukA{70(^Ik{X<5Nkra zd{{DRu?yy6u>dX$XUQbiy{snaNlECpm{Z}vCsoyiEHMufF*{c&%)N(BVx_ATnl0UJ z;m7m?v;PVUCtY?hwKNcV~o1L`@{{*vOqM-Vo}(S`?Qge3A9eaYpV4M|=_?E}XbX>F+OR zXI37nLH`lu^rtk_ge3I`{9hM?>$aF>sg*iDq&o7C$s^l3$IBWTnEg-+LQy!eMOL3) zK~2yiEBIx+t5Q~eg2OU>oV^LfJBzG7%qtK*9*Ko~L7Uc-bwr;(lqMa{?C$);qwh;` ztvx?+&wZ8LIrO|L?pSM8DW6EvE^DGWp4H_xAYKEcW%CmqCl1)ICROtiyFWkiqj{RveGapxwbkCFX_Z9{rux{O&rfVQxaR!C>QvH(#=){&X2N>?dF2? zI!nlei>IE=H&QvSLbwQu=E8+pcQ!w9cDXRIWZj<4Pkfd3JQV+ZWHeQEv)~>QzmlEKPkcqYhg?da zboKLs%}@NU!%F;YnxHI18z#I|;w50k`H5~?^*x-Qc;TTXVM6JWymjzNR#IKX* z9?wr4U?pBpO8khWI~BJ5TUCiS-V{sxw+<1C}{hrDmvFSfl4gN8CLHdh!icL{O7?J*B<6kM?JJnyD z%}J0M{l!~&WqA>yljwV-zxeCjDQ>m(7eD=TB{%j$Cs4tSW&u$tA8h*<>MuH$)Gq8= zfAQ>h82A3)(qDZ0H)?M8On-6KZ8WrBJ=hxB1}h*mw6f4}*%*E2`inO{qNe_0)3JM| zzxdO=rS5At^%wv17}~a)`iri)e?WiHVhydHG_u|@kldKRiW(4RzS$}aXP5$oaFOGmNnvk>-sC$Ja%}_MI zoBE3=a#*+Lr;6K%AgQIl_{N;-zyr}=yye%_giD(Zum_;OcyCip{l!`Bd#1nm?VrU} zsWNt3e=+mulE~5PHMd(v()glZ{R8@oL#-z0Nloatbf>~AA6ZosHd;_RNPMA)*}49r z>`QGAc<7zFFG!& z&|e&GlSx?}M*dcsoDUXRn&Ib0rOvO6pJy(V_?g`w_VVqOJ#eqj5eC!>=wBY#e9CU< zFMhd5P1vda;^%Kp2QyKB@k3r&UN{*cdb$2W(tl=trN(~xlYgJ`rS^XMqZTT;^9C-b zsE|)~OMg-Ox|!oO&EZ1`>p;A+)!I*g#h=u0?0P@_B^(Cn65T(xpZ?X?tD)Vq{qzt1 z1x@U#M_3cvMYCa9l0{k6$Ql)~4X}MKr)odFZC!DVho1o1L@5qUM_Ln`OB0j@1ZwZ6 z@B5?Jv`72t*B?leR=uBo{^#Dfir}(MW4pJXzRem}J((!$m-^ywP1P-{@gi+m=N|zX z+5Pn23dk6Dz03G1m9z0v7Wmn!m&dK1^Ds@`1K&@7hK_DbRZbPMMT0)%vV~b|?x#N& zy#++Iq(sVsyP0>Z_tW1-W11?O(8{KYrmDSWKYv4}C^vbUJs9(Qwx1pt;83mo^k+}0 zls}OD^atHcSzimNWV0^Kwk)`(Wh8Dav!DJQwi%^->zI}G!`iH@OTA-Y%R+)P%JUex zuq9X0>csu@AE#a4!~OJ|_otlI+)w|PpIV6@67@c_6sJQ>I>_&QKm9YU#OsMTF>8F7 z3iS`KD)h#iqI%+yrRd+CbN~Sv)wP^pM{qWD7p>;oJUu)fm z_>eWmvRKLXT`Ik-OW{A=4?n>s6Pju(!)5#7U(SRt-h*i(vXDsa{qWl;-+Qtje(a$% zpVj-}pMIk?1&DDB z+x2_mldKAKqzTGGw5(9mj%VBtzm>*&5BI}g(Lf=TWJsw{x+Fg$BWXPJhgKIJm{9Wq zs|$LT2{mo?yAWy~Ct|YN!tJ+EBc61+F}5}3gDeobQG{032=m{@<-; zxQ`_H^2WK)rBAsmZ`KF0AO7)lA-l65{?SlURx_GBvm+Qg*$;mYqfS`TKrCx=Wx>5p zbQkY)Yd2)$cAFae;eiXh(h2kyi|za2`@W@`@j&*&AN~Vs#+&yx03X19_*?F`nz5+t zl|A?z`zsM`D)z(w^w$;QepcSEG5@xCHkEV!f3P3^ z#&1w+|FQk>Xa2mzk2WN8ra=F7`{8Tgao5eI@AvS16rXFS%jZQUKWbf%79`yej_bE! zM%8}!CIroyxF3H06I63+-?WO}U!Jq|U;eU7tQBLF>C6~q(r1!4jGlEU2~YX}h4oZ6 zI$`aYmd3HndB-HJ(Nl;q9#8LL@_6MBuBY})JiIhWVRsn2!rn*0W66E-V(mCe)q1LC zjy1^WBZC%h@+%vse*b4FpEhrwBiQzG$ifP_bi*1qTWf6??(iTt7ugf7hTcwuaupjZ zqFWT`JE7EsN~-V!Bcq6_)iWZWF_|x4UU7c+_7&fp=Yju*bCOpH#oQyVG!cV4Ufh>tq3#XaVq!k~Qr}GT2{~xuYvJS*MPx=%} z{5s;>`drFq+Gd@^L71GZ-=J@^!Usc3)jfVQ#{B<2$@r{qafbGTiszm;5or6qUJsX5 zP}9SeY$$L6aF<5VvRaM0u%)UxFss9RlV0hES96xy9R7dlVwZ5b- zO;8r1Et2584r(wiEZwV2-@`M!<`?3EtVJ#;G;*O_AW4jWn3;_EggH55sO{0fPsR!%B~M~UDImoQS_uoS<(v(J+8a&<{b-%?Szji@5pFaJLnZ0GKz zcVD?QmNZUJ8rt1XSr0};J0~AbU6VoE;o)6rxG$s@8&{3%3ED#zb1K~Y*DAEL#9V)W z5p7Mn=ts*>WnC8S5zAy@7~`xK3al(NEP|Vw8sQ$oGv3c<@g43#d?#LJbXqf+ti1Vq zhPVR4M}NF5;yZ{Ip7S?Dyq~y+xGZqHRavc&O~+cyv(RKl{XAPvh-og)YrxYG-{&Ah zyf;ly7NWHgUP62$o?IcqGrW(kgeyeMBO$`g5hu8x2NT^A{hxF5FUoYWJ<+b!LxaK~S&5YH0xlfM-aS1YIAE)ZX5 znJn~R7~-;kcoT^4T|~Sa&xp9icf`B!ojB1Dw;ncGdB@d;xB|lP%(93#!kCa-GQ@Ml zHN<6scP33U86Xxh86YDWbHlF{;1E*Vk<&Nod>zLy#2?jchN%Y`-1Y?*opA_Y&Zo)Dy&KE#_3X`+utt&k}RnQi^!uHy|(-$h%erSyzeGr60Qx z#{?j4c;v{|X3B;bZ@U2yCF9kxNteEy6xxk|q(esWT3Pe-%Wd_6iTIUPA}Q%r7V=32hvNpnEC@5>MiSFp+I?7P&mhifA-tE)H4Z#JQS6&+orO6?p>SL%<@D zj7PHIw(f=bIXm4gUROIdCs$Ii)BCxQ?GM%{nhT+aFcW(2VeVE5qzTHR4-j6eB6D~S zB)9MkZ>A3C&01uYLV2aCia0fC6?y5sl*%jBY9aJEozq5OQum+uB=ER%(43=?`} zsT6u9@ry!_MfWyw9N&qx5a>eBPsXi5lyCURe=XY}-cPh}^q&pwQQ{ifvcTznWixSu zHQeSJbEB}{T=fs%ZfKhep$AV0s0$Bfikt*S(gbC}JxF*7?O{9zlF#rA8-FCUWi6tu z&{}94QN=Fs)O%p?wW0-~M+W038A;<$zHMlC%Y|wkBch#?4?>R&gdPv?O2ZL)u!@bV z#`ToYV=+cP5b0PHL zX^0=lWVM)|CMXN;Ho{AY_ux5@oWe7l_d_8rYY}mU@=8_xc52f4{kFSd@=a0b5lJ+Y zMp@%+V}|&WuAXNPES?eZV3*MsEC8X$!xu4P7dVI2IjN_F9!qyB{OONXh-ZoU^<5Eh z#*FP0eAEq>-+%)7Z`+=)E~bkd8GB{HJ!^!x;p??p^%5(lquJ)&T1UJ0oE;t3t8MGZ zNpC>BE>cghEYZLqQfg`gHEsJNk`! z!Fg!bfuz?`Dy;XEWQ133@QyxBsl~tFPuTo*DVLh@q@(8 z4SMN<=NlhD^=i4*(VJ1Q&{uFoA!2}dSR-_;ziUE5^}9zCTE)Y?6%Szr?Zf;pIpBmA zRQbthMwZx!UsFi9{_8X%b$@Unfk?*RMJ%M)ZH#k+I$*9bHwqo*s{fO1!Ra#>cLU>T zLc)y?b0Hy3FnEGJgqIqTIXn>(c!pKeVzaEp!l=;5=8PO|L>0S@C;pLoyTOG7rOq4e zMp@%$uCzv^RW8I$jM#`Y%ZG(qG6o9fVo!b=&h~q(ud(J>Pa2VR7IP|m`S(?gNS2sS z{-M}yP?YS)$cgf?>{xlmGFh0$a3Mi%(~NMLUmPk=;+F~u3XVbo)`?Rf(1nDrj=GS5 zZ+Ppq%XS$*Ct5gQ!G#3k8rq{umDx`<#hj)m19{F|V{R1Y%vHbt9oA)-Yg=Ey69VeO zZTq^AkR~|d3D&{4657LfA|&t(ued>I%UVQRp|#LPklJ+Af`&@ptWnnZ z)vp=a({izg4kMyHE}wkC0tO1^LS#(CQHfy{8&{3%3EB-2?W;l++F4>QUnrtoCM4_( z?Lo_Ap&!GA1i4)^Qc{HV;+YBw3Xehp)`?S%&L|{Y^;H)V2nZXuE{phYi56PsT}U9V zA--M-v+Ym3VcVY!8eDUYxl!mfSN-9)8{+0-+aI2W_@9_><&|}5g0kQqCcK1r51t4K zJj3g+6XLQK5mzX$R0#=AO^W!7eh-riq6I~g3?^@7B#l>n#SmX77lTxch*9(-3bXt|2Z9ylYohIquAI+}CEV zF*gb==Bn?sy*_>B;CMXLDb`V}dyamsJGS6U1{$ z0>o$Us6sqT%(got;)sPEGF) z2xDJW7Upj!z$C;5Lu_xJ;fhH?C~FZyg+>TXLL4raeU|>rOND2fbTfi#f;WV}xb{d&QrOS29ngO*aE*He-amfmX88%^V2|7(Q)#W^hg*9e_> zW|99jLcicmCV%L^XU!1cWCr(Yt^zaedu{YoDvI>z5 zn^8}3oiV-73=V8C*O(iHE_2ln{L*?Zb8YME#?vIzXYJ*(N}Aw^C%B&QQad(`C$b99 z@WrbIk*vi^pwI|WMlyA3(st~_zoF?k#wAmw&Ko(StZ}a|T07P*7g`F8*p9WzhoyNk z1`6gva!tb#Qn8+9J%XOJV;e2zRA`#3YR9s~?6|$yb5YUlhh$3GT2?Y0v`iNIF-$U* zrBZ#>i(iyXEqWAH@SS)g1iEB;;1^s@!8go|FWYM!N3^h!e88vm#5J^K!QG&2CT>tQ z%r)jlVNpFrQhz!7V2EihR{P)y0d?WUbuOo*39j=5n@FOBb`PG&DLli(cZIgBMYI)4 z%2jfT5mg+AeD*dN{8E=pl{#+(qpb13%M9&VxtNy0h-gpChc!PkxC6t(XVP$lRIFm- zs&PF*yV=s63Wxr>3hgX0`-_;fYyzT8GTj;4U6#p04#VXXxhv=FI`B;86op4Q1?$9{ zjLs;T9(t+EDFlRHe`{I9UrMxa9(jRRZNxRiWx+inZX|BdSet9ijl!V0>aVxWLVe~! z{eh<;zLwc(5@<~mlm+)F;U&ad@I+4G8MaLbaaoIqE0kBN5I3TVh+lClOg>qHMBY;8 zjeeu7@zBp3;v41S=0l8#_&WLI3l=a?Fc*?*8jfxgt8-FM5FghI$SG~NR3V-v=5ZqC zEJM6ZGTj;CO_s?*1BM|kOO#AYb9QxjM#L??Bfi9{nu#|X;!!efyTlMzK-m7xWf4D_ zXyHQg0#f70XKLW;-@h~O#&fJP!`-> zgqIMX!xLQt&+xNv3vpSCh%1y=st|W-(iZ(YzkIvdY7IP}Bo~=SWOU$t%#u0DXJ;VnslZAc^LtGXUXSd8hxQKW!o)K}2 zA3Je;C)OF_rm;>|uKuj|;{=3;E0;xl1JS}Ld4X5!iR=A17To>HD$`Jwl@aOn@2=kp}bOsxKooN ze)BJ2@)nJ9n1&J&d{jo#xcVYPyjw1sYK(|@PCiUS$zU4F!@JUO1U#(HNj*V)$YM@~ zSKnNPc$SzGM2rxJiQ^G+5?}_|&W_(OnoBl~aJcp`hilW;U)^O{Br9V%v#~tA&|$VI zhK%jlRu6D}R9~Cf`dTrd--i`8VAx5>3s`m?%7xR;PSJVrGAuW?}R@p>$u;ZI`F(JhyCbVJ&W0*f*y$ zqqkhw67Mfy`D%kLhvmW~TPVsPaB1Ox;zu&+uk+-~)8AZ{eh+JHOZO%96wg{*1Uwys zG@eUVzMV5T*l4%Nl@Pi`BCwufTqm6K>MS3ggE*NCphbT0AT zgb6zYlllhQ20z$+Ew^B-<*JLd+=9UY&)Yit?X-5(aC{7}5iZOi3*_9+%9iP?W_?3s zZ;{{gZ{!8BJj3s9sMN0v&;5(}v-2uAolvuBDW;sa>FY*pp)zwVI&>YLo&>@izRtp4 zYu0R=<_)0*IR?T6&m??dK{RWgbu}?lbKLm>-7GcMr5~NsL1(BM28Hs{S3z$LJYN5$ zN<27oovSEnfuT$0wLIG>fohJCZ#-7b3%AA9ft6lTVbu}w$=VUJGh#(2*%Vk`4M@lR z$f&eM-?Ow5Ln@G#qk*;9;|YI1r`giVk77>+vja|-RDbWK56QG@Wl46C zg_;NXlP3KYhb2S)N%y(|TQp)jyUjvN`ABFqMMMY%6D4E`&(b zG%kqKJ!vW={8Qu)Ui-@(3zJ0(cJ=+uU##{0v^+Wus#4IQYNfN}^{-`-EAW~;`|%5p z!wWL%2!#r(_Dc(o!KV023kNLRWAFI!^(qTDg4<^!g&F$VtNC-=7fSTCQA)_;hFRMW zz~$z#u2AIsjys(J3kzDirO&b>V!=$b#VhVULeI2tU6D7kWWGOC{r%S$zn|{M=HPuD z#`*vtu7Sme5 zrhs1DYK;1=F&fbEbH-7bLy@z?;UGTB<(!mP6reJe&rgl^=Yq>h{Op34lVqlN|D!cO zP)yxhBcN$M%5Dw{G$asTx-kg%9PV+?$@CgV-sE7$+I!s;^yNza)}UuamL5)TWp8hK zpHVG(R@+xZgl^{8H8DCfO2mA{*_6S%MtgVWrIA0ncSq#`ENvS^+5w&4`4^B^2$${L z(0Q*AMzSgIUq;X<(7)WPi$lPtcyY+7bGd<2=`~NK*Ew|tlT4gCTkLhz-Q+Lwp6670 zoi*cX!NK03DD^y4`_A4VG46)WzpR*lTc!wP@+T_wE9-wQ_pa;>{S@K&3% zb~bE0Kw>P_+4s*--D0Z!8FKe8a{*18Mi zaBdNZJ$*bC;4gPU&p7Y!U*jH-Nd%QYe+0o7`S+uldq5saaiiL3D@cvo#f76Pj3Z2t`7nCX!e;XB}a@|7T6mrXUwp(pDnBzKxgF>yTo%8Dm`- z3)jF6SZWo2Q4r{ckxg@=Y`;%T9>xtGcDYdhiuq~0Xkf|%pIdkKkG)X@RW1-#y6Htl zYbGTKz%z=Jj)JC!+cx@m%4MECN&i8LeA2en^chh!^nRfW$kCAH*ADHtiCb2=pfx=K zzJC5xku6GG^y?>PSpR`_1Gui8(p$4cbO?`^x-NE>722FQt5mXqjgz~Ej4zpvhI4vO-`iYJqxk? zTjWu0w4riyo$iM+^tM&gyY+J=ezfu}^3VOTPvVOjBeWX9>ObHKeNBEJtFTd?S@^}m zZQ5@ZSUZr}Z`Ld+lV2I%PcD9E^Y$i!ZNHf;HVR4Vj~do_5bge6owR>%c#5?eQ6#X_ z!Gz}nSZ$_;M|jdLZI}%&p+%=L>|v3!m~9sEF^Ym(fIX1Bl4rPtwmffEyHY2v#qOLo zQIG^vQE=!W69qwY(=?)>mVt-!dDpOnX>{xf^~t8uSoEe^Lt70oBjM^3ZR#wS5+e)5 zOd8@_0y@d9y?+(C9R%2X(Q#A@)s}RR*L?|^hi6Zl=0S_hEl;wL%pe&b#O&u={F_jb zX7o=tIG_G1VZ*xJiM9H z&IMU?S0ib0{luA&=5s*}OxWBD`pYpZfg=a)qqaZPG z)wrH$k2;hDAV221D(#W+rbx^~MU3kU8`9Qf=Qz(=4sHGaSuJE?#&Tjiw@T}irtysW zLW}P}PvSfAE~C?Wt7PS4&Nr+T5N1EKEY_Vw3%%q8D8`9vSj&QYM!ZSV(3>e>AL5yu+{_O%s%b1ZR1vg!KrX1IeX4gBt(5S-l=Bs0wQ%r^wzb zu7|z%`TUR4CHYaKsqxSO!+Kb*ZFVR|#ClLZ`GN%u*ioy558)ZH?#Jpp)Dx`d^a5D7 zO;ur?CFXG=#<6bNJ*Y%#dqQ?!#bV+={Kwu5Vn76 zS*%YcTDXwBz^jeKHLPX9ykheS zjxi$EZSvtxMi~PIb1`R?hO@8=tMgD#u*n3Vy4!MC=)y3p zWdUo={FLVUa(G6pExu#jf$zlGhIO3zIsQDuS^=T%lgna#2GPO@c>#)c;(Bk41$UFO znz+I2zPZNSC@iUON$Ow7-X&t1i)k{V7}n>^dFPxa*yaf~6JEl)6;JwSo?-se)<4U` z`)7+^(S{p2#d`hIt+4m;QqiZ!B=#*DO^q+2eN7eCSz=x+Vhn4IWy+V$G?Nn(gDN}Edp-!`pYc6od=rt3@v^|q zQ4yNBk#0B~8!=DcSD4iQlx;-B9FixqRTvLZ=lSG6*Wo#k+>a0( z*3$~)&FYL-P*o)}a*B+9%_MpKvaNZybV+{DNNc=li!r{}Y3j#_j9)LGe8B?HE_nFH zG~9PFZm`0uCybv|6c~T&RaK1767!?)MaILvl9-gayyx=$h@!QdHO9X+##^udSZRFG z!uaAJntzy$6~Am;v7(s%=KqJfuYr%NsM=43U=U+dpc+Ia0%{PI@Szk@NP*y@jfO9Y z0uua;uZTff3`!*hs#%t+;bS2p`UXV_$P1|uOn^#Su!)KoaMpsHiCw$8ocFc}&g=E@F5s^(vUi8SWQFUr3t z|51=CTG&EfjlQ0l_;cR{q4BX1sHS8181(S!tHsW#`P=yXb$z-o z@bpG>Z)(pebCD>mN=`_6fK!jVeqYUXr}J+^IqBUd52-DpmItq3E!#N!;SY95f`Vqt zZ1*HM!HJ1WBM)Ei);r#4j~g%#fG0*Nj!X9daOL`$0K90hEatqnFaQ%p7ZcJozTQ}k zQ~~eu12VzS{=J1lb`UpjcLMQ{TV`{AN2^cH*MpJ}Yd>rHeEV!G7y@e0UdCHyS;hPY z&To66?j+{7-8{yGzZje|100zBx{$5;EhBz@d(4HU^V@TFrfiX&X4-qdej(0ZB`X1XY{e2g<)zB_<- zL;KWBchJvt(UfVvzzR&XY{1>yY%^WF!qO`_@B$f_I`BU+(?y0vd~?Z6cfr{Z@k>T4 zjjf#F(h(?DkP@yE_q&lIH0~-9n_l4`4R(Aaa~KsajNs*%tHjt~dc`Hh!IZRN77C9g z1SGy4w5IcKfq=Y&L!Hc3)^wxVt-eT9qINc9sBs9qG*@@TLb_UfR!=c6&{#-E##xf) z{Iyjr-2e9jNQLBNH-^JD#NjMLv;h>yYP=m`&H?ns<)H2#02PGcxGBOgg6Bp;!m&!B zXjg*cEV>fCbDZi2b?(USy27zaNQp0J;~1NEkp#Y(Ib|h#eUof!?ni zMO}~P2KySdHMH`x|42+nSp}0M18fo6jpyDQ!r;s}OMIdNa zhHrgA8Y)xWhrTkWhWb+!bKBf3K2M^o_{<3SJV8p}C?bP7+)4lS2KA^R78%zBR2u62 z_lwUH0U#p)F^OVDK93ds_pS@cXGTrnFsrmvMTSS<^FBWSX+OnsrJffDKQBJ_ z8%_fVJfC}+vI%$6B;eu^{({d_d;xsE`NlFnCz1Ki&7RL7pNxx%yGWse0T5>nxA4ck zYg<5v9tz||ZbtCjE%f}Wh@f4w(@Qy7$bOYA~4vU7(fo_Y1o2ny`HN7pc6^vTOD>MBud8Kaj#lLUjWDmKrBLj zu|@PEF&&+UU-#CpvPCdzErMBPEyC~!Euvux5J7rQK=~ReT!PRLi%B z8Oe#PGGKS&lX*$>J)hH?9<>PmqD3?d?pk-%s z7rrmTccGBl1|z7*BvFGAh(U1eGCZNgETBKO0S;&WpF$Or&-BfrS!1|(w3H-6oH8SoW1VnNKhPA@F=|VhRjE3}67V{6!%j1|UR9z{Ml{1)qCV za;-b``Z7Kzk=cjH7@s%Ouv@1ZW@`}00K^CcEcc!i4ZBrH^adc6H%8AwH=ELpsaY!2%hU$RTzL&W4WHiS*#i*W@o8sMb&S?=^vET z6I2%DiPvY`End3-kP#HCM}Cpl(@4Z-Z~Qu!Ca)PaUNftV*M>*n^}RQMyf3vapo9zX zGs3C%h||UEX+FUKguwH9k|{6%F@OQc@~1*R3_yq)4fzXRHwf-pcieSlyiOu>IFT`4 zhdJ9O)Tl|-PzRpH>j^%W8g|E!=y|R3#_JKJj-Dr8d&BN=pB1l};dWR#C$D=@%-xE* zfL22&Yhybid?qzub7BCSlb(hx$oA{0dI`?{AWu)QIU!NJKL0N9dN2TF1jR;>U*z=w z60yx2zwRGjCa)PaUNftV*M>*n^%MUC@-|?LDO4%K1^7PURD0rS;&l(7Ae0e!UUxAC zHYWzKIaz*p$cMs%sL_zW;PseFu63Wfwv5+FWIjk_$ZL>q4x7{d|9k+q|IX0nlvvMR zMEx3nv3dAYJwp*pG%iUnwrT+ZsQX%WG^soBO-C76>y%rghqJ97UPg z{DkhOoU)yB>CMl3*TL_p$W|hL`q3@h^Rpn%u&peIm$Ar@Tq{%cpjFi<$KFA z1+<|*9@sKH|Kc@0>*ry~SPI84@ip7dv2be~J4%i2L~7yBRf8+2;UL}{L^zbGe#NPW zS9zmN*n2VF(kJ0J-ZH?KpqHjN57G%b+nS;aJ8Tz9Mh;dri}jmqGPtxLtxYMI_v%d? z`vCyK(iQ@9?iwwFm0;MWSi{ugmZaCwlPhBGXV9NfgA=p@O@%8Ry@}~BMz72$>Ych` z?uT?VWX{KAwgAx3-v4&3PHA%1naZqY2^cS^#k${~$KDMU9;N-nw)W3BuLF$hSlXtt zXwfJWaR!M#pp3MwT|&7;qVh3qIO%)XA1I1vs>e?uJtv8j`A#)b%HgVy&LYzjc7WwF z(F_B4!LcW2Pb2m;ZBIk?B*2;BDJ2dMTArXl?&8T4c^c6AnQ27sv*Ha1jL3|+PTx$* zx30ocNfQn?ER4GYA!zcSG?Ql3DWKJF{xoPMt7f*BDH#j=+y=+MkSGaKSV7W@8D)Uv zU3|$_wLStY!1fNLxVL>5%`+|xV$6KwHINr)h!urxKnJwA`4@$je<&I?`V}{pZHAGw zo*01J3bY(^`lsPs_4VKpq@$9}R$9Xnu$2n72^$TDl5j# zl1xJ^P9sEB0`Bk9wpmAdwS!bS{ll`f3I`jEra44L3-A9FyX(h668?cKLsO(owK(z85KdZr~z*sksiZda1oRe z!j|CDcY`>ru}eWDKuRz_1s6sNG+}gg0|x+)mT8Uigaienk&W!!CqddsRJKXw=iZQt zs(*ytP57jeKeA(QYTnxC9?jS1Q~59Et_9Ay$MKVYCcnY{sacCF*2ys+h!>^k7)ep1ANbX~q<=k~mXfF0-{=DIKgUuisR$%jV zcR-Kejsb7MWdwYh%70k39Z}_Y3z1ulj^-~UGGF6R$5hyM@x%n6jSQLWgtBeJOksHI zej4i0G!V(}7Z;l5O}p@pBc_FS4#PY7pXa{KRu=zG7YS4-^}}ytK>MXNG+9N_@%bS? zq@gjPEk#pIu|_wED4GicciK0s(d8F=023;gRbabTIFSQ@u_AyG1HiyF1ppdSp?>tL zoNP?i^`arAz-E??1}$2T=zvA*5bamAM!Qhc!+m^8M+S#`{!fGdxi#Qw)U6!v65B>M zY|+)r!#=N*PuPcs0BB=}wl+RMMs(P_ZI++%`6$|qCdUeeAx~ZCqNk_s}h||FeqoAZ{VY|D;=)W)w@MCsNf7j8sc%p#fMmRol#J z2JSbnlKObOh}w^obaV;RCq7T2GHP=sX5m|7sJVyI%M@rcEZqxdleWctEWPqP6^*(P zp(in>g=~1}%EMUp~t8CQ>aw)@-XaF))evhSy=baa4R;LK#`khIy+{GZP5N$?c zI(i4QvS*THj2fcMDnk@=iGb)C{OTN)_@H4lC=l9nib^!`E3b}M;!Vo8N}LN(0nCXd zzS>_P0fs=^+>14KoUFmZIdI3~C)CtwH~-CI|8c5I173wGj9>Y2H|xTv)rDECOX+gw z*#}lt;f&V=njn`u>s8DwY=6ca5nrChYdsQgHdJ&{eA*bOXxa}~wwE;;?%=>PxDVbn zbC3pzIu93l`Ll#;4N;4>#;<#|aAnkRWtQlkY3%{Nf!=^Oi*D#>15Ri!L71>Oa*|9pjaF7i`I`xB&MUg@az6{ z23g6dk%w6#PqFFw3q}H^TC&=>n?&Z@Un_06&3rW)R$!YxgD75|LY7Xnn9_!ZO2QlkMl5VwR}dawLtE<-NA27v|8@3!H3mqZ$y6vcp{NnIcCzfVr$*` z1hm%ogBy4=1pul7BY2+WSODLp8WQ||&EXj(+P2K7dc04qb()E`dsD6Tby&X!faU;@ z5j@fW)>;jZz`%1ZLj(B{>xXR|3~WM%);jw^wblv4 zX%c~Nts_jygh`H`Y+=*4)*<9ysMg9~wALEIUF){Fq^z|jk@?G|#nxIJ88Czv22l4S zwAPryLZ%ja-WmI1zW$#0LfE()?4l=zP1&PQ{;#0->OSb!nQ->lWN%H-Ue~7P{RF0J zObXc6`5)E`UL({pb^4oPXa$szKjpS3%2bcN#tGBJ9r=L-O7-l6_=~CHcYm^o5~fHV zr8?M9ij;|cX2x-vm;Y4)Y@>iCzFjA%UobF-U)MB@8_UNPdH7QWB(zk{qrI!omROAssW zbrm!oH;tB#PtE4@fmaL@@G9_YaSR^$HHJ=cNs*6Xwpo92D0@vT!amD%lwszbe>OzGSn zt|Gr5ub`C#wxR{b=f_Y`s&XFzr4n^&L@NJcZQ#=%FVd)?yeD`&9eM)oM4RdfJbxbR z35jo4;LlSZD}K8U^fY+`{&3u2AB&Oe@lyUQQcV(dxiSW?3GiGV%jb7u9Zd&VolJk3 zwno%)8l0QT%Tou%R}GTzIrx;}qLaRksXV^kRU^k6qt;3`RiD?!zK{AGTc{71Hscx~ zbMk*QNEP5!;LSZBEz$?P@%4d}l8+3l59*Si5ypvnEKoi2lkv|b+jj+ioE-aJIsWg3 zv`FGl`}izIwS+w-+)y8DW7`(suGl~yt1u>UVj;H@d`5+K#K5b`2B)TWkz)QyR?8-2 zlnVtER-B6ont=?i0FhUvV4TAa(uTH@1nI%rJkF>D-JFf5ANl3R0`7G zKnOj(Z~*r2M?pb)Ya|7UQ#Rqn2wok41Q|dG7aGg(ALq)W>Z5da31;*0mcIF@o7)Ks z(2$Ls-05AL<+Tjvu0gJ*<8{bNM=!;%`wBRgQPir%ELJNfH0Y!@jGykTuR!srVIf;- z?SX`MI3xsybTJj$Is!JFROIdM-d}{73{0FW-;ThpK+(k`{Dp~Qh=#IlGf;kBGZzBS zMlj)?Q+{&c4Xi82H{0hw-ZBG_NYZHKS};74$oN;CyM}7n2($Sob+=HzSCJdPE_R7T zf3DE~jyyTh|Bl`C`FkydR6c*-AcPX~>Zy(*e3*idEuJ^2_nL?XcxoA~v-!u8{kHgg;gJ^4=nMuuG1E)3^0;dZENzkK$d{`WVUq_Ltv2P>F7{`PBuPVc@K=1V@ z73tAXfNxrvMuQd4kcg}mG_uEHY^DObVoifGgHA6!JcAx7Efr$p({#}}v8hU)5JO_F zN^<|jiZwNf&p|X)Of&4!bRh|Qf z2NO6{VB_awILuYU&}Z0GHdCkGEe4j{`?qvzj$i2VNu4@Tu?ob!^27vjFS$%a9Yywm%;SS>3ODOo{ zI0Ha{fN6UZ>DD{lUq4K3?@kS8(DX1Ql@2tY#gr8T%`^s@slza%cTeCI)L{<6b|{MH zPJ?U?HL);JA8K;^i`D0}6Fj}zR1usd%Fo6jB;H?SugBltJG`H=`C`mh6)1s)5O`PN zZYI)ZI-g3(E=VvK*(R^T8cKw2n^^|$K-(%o{AxYkV1B+GH7d(GnKCVN}{ z*0cO?RZG90AIe`5qXITS6^F0O??(TgP9R;O^`CWov5`FA)?Wea>*fNRpG{!YSx&|$ zKUl=5105$e4FvH9LA(L&$r?axD7QTZu^1&s3w#}^@t~nckgNksGA~<_c|XXywgEYq zbb+ktdcK}sx0tSNjHcfKH=b?fC=Zr}YqW3iu*jpSBS!F&{!sL|ZM#SQj;*@Db$NFM3-Z>{GzAWD@|K#L1Irfw z|HOfm(k`M^`WU%oL{H zq#xZm(RruskeomW8A?l)Ia`~5+}Qj*AXbBXmf>W1A2riQ@C}IRcWYAK1H(7ktXl$! z55qU2=$7b=J@~``fKJAz<`>LLSR;S=0A>Z$k=_1yQDY8ZL!*zkPDsPhI*-DexmTfl z1$kXT#;kdNpwGD*Ai9>%2K`H4nqAjiGtVvJzL(6h*;JY;Ls7Tm7ZUWJEvNs<1^6pA z%pe<|0Q&I%M;8gqszUn^3|Z|AtSO+y90_{CHL6)(g6SqTzPJwWz*MzZvNJU6v>#qmsHF4Y$>?y1qjIWD?80 zf&$OBG65!46J3$(oGE`pUgR)HM_OBKj}K#c(%kM=z4VLvlMvR@SY zL&9|Z1%9oV$L|*U%Iop1+)^3c&H9KPANN3RCmMByPIJN0iB3~-((?TE`M1QNH$V>A zln5#(8YF-!`Km}dQHz3=r!-cX(m9IUZX3O<{ni~I1C{7kI$(rR2ljc5-7$R$#^7k-ZeJH{xV&ru?3&h0TTCk(gnmO22AS2Z4z!k= zK21U{G0O|oDeqrXTGbDFmj3`6&>HAHAmyfLhW@v#oM!zcTGiD(%dZB^Pg9}lc$-CT7 zDDsOHjB0a8IAWv$Z}abnQORw@Qqp;~fqzNn?ST zNU?bs;{+BzT+D##ixERMrc`F1C7DA2bF6`xvd`b#CYUm1YN7%+7Hf=kDO8h_7O(!k zfwhhaJr8_jF5t+xxx;{S>?i@wBm(z(@K4Amw86!y3fG8+l5G%Q8$?ym3@TRz8KEkR z%D=`We$BU!6Y#ZoRX7%VOGvcvtbR4~UTmr)6U$n9FWOwY>SY^i(rZzYW0qzkm-Q^a z3@wnJF!%+O)1RSlE@vy(z;uZM$!tW!#IeW^Cb1G|LpVD`o17njXgbU#2FZX$tgC*a0BOaBA&>%HwG%Z^SLL(ss!W4sKn+V> zl@UC5A;@i~u8Q?Q{iQ|=_?F0TZ7bVM5q@SNoLG&I<@o&5%NO4i1ta---IprK0ph*KhK#;Rbm>_2?F37)cT{!z0)wCa7 zctBk^)<9eP6O-_ZvZ1F{t|@w2Vjk}M))Cfwb~(dpDHp+LsZGo;d|8vHuER= zGmf9Q8dtIn{!jGm^vgt(>{O#kj2`zLQEc2D|2I~V9dXPoXb)6OHZmt)zjtVQ|36qo zy6C3q*U9(ClRxCz8&y*+p= z-FlmQ9MU(_dYjpU$JpXZW@GNdk87ee?d`!M?m@hg7>5({sC`j9cQT|*7)dPL6g^Kq zJVDQYdp&AF65d?=X`NZOxCZ+sj>T+mL4JJ^=LEhL+UKg4BED#!%cju=&?>!M9_pgJj0ENa*<`RvtH4vEC=?Y>J0XeFftoYo{-B=-14BZMFU|xxF0Tlw)Xk-WCAYtMN z?S1$fEETlNtm%a4DjuO-d#WrnLwIip?~i1v@7o7QK4H(oCUkWToZ|A~AZwd~Ul+6= zP-q~m{?2ujwg>YIOy-7d%+oOESBeElmN+|78!a0_Ia6tMoW#y`axbOpo1og~56^O^ zA?y`Q{|SZx*ejGkT@T0MhWqNO6=yy9jo@Vk0({2s+@#WitUHlqxXyqjQb zJFh=H+ewU``7bog5!Qi!QnU)p{Qak~9l;--4PNvPXqibKo<-L|SAsck&7)gy+{0iU zF~EI-3Wlo?=?lGjWFhMj=b;aLEO?KpmT*1j?4;aS_rX}eqDCyRPeTHaw! z|F{mf3WqgrYY=3LnbE@jCU(@=;aMWGB%|}I?$ASZcvf%>H|>ojZnlwDehRrMb^duj z0sZt1?WwhIOxQQ}EByum;v39%j~sGvl^BpJEXrV}sETCvVYeo|GM|O;^k>H&#OcEH zPtq&zB=B@JLLhgccY$)mM5F&|Bg89gm^}_J|2#9S7jW+$U--JcV8G2EYZ{Z6s6*U& zH=HT5vxcL(v-nP%@bD6LotuWt&RvcJV8!7gsV`I*FIF6!950IFx9K#z3`Se*YL;X$ z9vy)jUbuaLg9Zi)*-P2h;B-NoSviW|9{YUq``v2MiE(3I?E761>wSg!T9|Vt6 z;>38`Uyk3&2L<{BvmIT3Vm&h4L>A0<;EfF=pcn2;IqZKlx^P6BR(GV11r24DSq>9lHGecKN}wS_)SS|{_nqi(#T!*nvF zqo#Jx7E~FC*z~cp`Cnm&Q}QqIy~gtItvaw+{|3|l<9j~vO+aT8oW)1*ADb|7n6E1T z8~+*ZUz~ziN$7iAYUW>zE=Lr;vtol;YQ2+1nX#nkFhrF9 z``l+ff>{?{rM3(y7kAyeiGj6IRklOnX{`^P-k8dmhY}mLq+!W*Z!d7_b$`Y^sX)YO zywdA7Ueys&wD7z=SWD{8{DY0K0qGd8nCa= z#q-a*7;r`iEH=pbD@HQI1jEry@5v8Lr&7W|x3!+6vbo=4w8St)sG3Qd$v$%=S{d&O z#3-lI7(mgk+_054$aWM@qnyF#C?|S{z3w3UbJ+f6Dm1iA?N_YIpQJUs830U28wmDh z$mxut-d9aHFy}YRiUjdR)l2W@^wDpyl~V(##g3r93Q*paN)QNvn87oSZ|n0xQ`GQ% zsOh--)nYKAI=2sl-}mP>bY@%Jru;#Z#L{+E zYMdXb%I69~A^|U@+(f^T15sBV-BrIp|HmF}`kFzzg@BB3lxZ5z~6AAA1{&XQNG? zf!vI-{Tk7qOu_ecpAvIH%2U6fw6Tj}`Zzo|GHNr59go$-+`h_n{%#P{6#H{>^ zq@V3ZJZxdZwt{QWiAS-3o*uQSR@oE+^Q6gVs0X;*vv5UHGtz=5O=f#fnuv~G4%Ez(=I?ej zPnt+|SH9IoBM8INTOM8pa=0T-6epWdR-9x6ypoo%@hg(nygvKH&UCZwLm+L%E0XfB6^Cigz+9e#pyx0L zC(Ig^G1nDIB;eu^{-&bB6-m#05KP`Z#>1!t8FwO(Nt`*CB_uL~h3b(cWmLPKBz?eXRv zv!q9xxv0>o&prW!e#$(m5H7&?2;bVj>>{pr8BW~@Jl8vzvWWxR-xSyR3$73G1$6DL zK2XMW(WZdRpN{ujkF|`A_wH#?Bs+yby_=EJ-aUyl-@8@ZdiMlUNB_isURX6=fThSM6{R2qpD2E_Z#n^89}iWUMli=2#M+FI{dop_9LGeH9j+|talq8K`FcJgCOm;=7^eb0lq;v z)z-d7e6HgYd{PMH#Y7)0}0Cy{v#k@1qeIA=(#TRnRNj-We%f-+K`%4wVx{bgoKW{Tf8l-5>UwD(lVH)lSBk_r5U?gUJ{F`?saJP;KSL!zp+1yV z%U}f04MaS$z;^jUVoA-6%tR4Yzk7)oO9cx$2cvAqExBLLWl{G!C_K_Yg~ z>f4O+g40pgDbMpGTDCX9qE}&H#%8J*F;CYO+i7bFyZav98 z5;T!PJyn1DJ>s>V#&tiYcs+y_P5?*+fQ;aI0xuPL-Hb%IT*I&1^-bh8qsD7ymGN5W z6v$h96v+E0(>Mti;0J_L?YRrZ>pnikuHTHJ9;Sq)$E==WOONJF$Y{u4@On~k*SZVe zTgK}oGCfCnUW0t}?}6F3a52A%ws1+yhW1VYsSf0FNC0&iMfr9GYuu&VnRq21XkMbZ zz%H4zIY_h0MJWZ@MGQLoxRR>H#+J)&w;gM(}KUo&|OZBw88u zJobDA)gL|FdOn}f^AV`$-+YSrJQV;k0)P|9FY=jJ62Pk+eqCcD`OK*CS+^CGjNp;b zDe!rR_ky&uIQ;@X6E46@?~H2G3#{iGPERvUiv9If=}dS_^!x**rdvi6Yq%1d{TMlu3DBvf!n>${VA3LBi;e@bpstvO4ja z8Sd!a=H&Glin(V|7t#u4#cM|J+`+0s4ynd=^LsShu0)x;Qc?AnTg2-W6LDi30`dAM z|0Q1c2Y`$KU?=j6yzWCHOsM#E?|40V&8YF3S!I3N@CYON8yd9X zBCnf}=y|R3#_L9;j(%Ufrj`KP!tE~=ubJV#u*;mhb|~g{dzX#XC@Wq!AOhA5kT$Rv zGVph=M8o|`%+h9&imLC>u@8B21YK$O5U>CAaT}`xzyU`C8o%zNyK1av zLMvxs%qrux;Su`v`%)n9eovuX#;%Mp+X(vgkG2!9WuJgbhHrXacMxaT3mK%ddV*pV z^5HTDQKKP$!RsNFT1uIa&mhtBTIKy< zjnvT_#cOz;A+PU!iH+CDa9@4(oV@-Ain;w;Y`jKU@p>8&aJQLNh0Rbk)^*&}3YC~` zR8YPCVD)P~!Dfg=@p_w&*?1iQP8q-y@{7ElL?Xs({JQQ2jn_;NubEZGYr`Y(`Xh&f zys1BuLjEq)l?}qF_MvUX>pDKcW{AM^x{4{V88U#)(DG|SK2$j9N=8Heg4b;-xz;^# zNExq_$UM;Ec@6Rv=idoC(v4Zzk!F7%>_}nBGO=FV?%PSsj&$-)!H#t9hBjL-rjNJQ z5v>`wX(<}!9<3R3vn0(&=q)vfPN%R!YT|`Edf^EVmL+V-f^UnKN!wq1TXKE4zx?~_ z>%;fM{;O7)IF9YX4HDg$1k0?|hu4G%>=8l)C5VV^MBuI~-VehAE86Hh=bh2OUq|AH zxUKlNKjy@Po2>AED=qn=5}XBbpVqPXuigFwsMvt}(p@O*FYblup_7v5#Lp@kao}_o}4|fmr#Gz$%5b|8aOq*#BlZmf|nQw`*Qe zq}vR#MJPss{qNv1``@?N3Af1pSDgGs)rX${FQb1%0GJ8@8No9fckcV3nKrsiA`zkrzwT!{OH?sI zq+*uZWUSwp94;DJ4C%0nbG+bVzz&o~wQs4GsA@KxQV6`Ll0C?d=|fcM$?Sq&1)&}4 z7KwZQ!bFI!x7HneP??+(VG7F7TZoCaFBh@hxRr2B)zb#q)3J5d?$>~LS@~mIp!V}d z6|)=upb2k8g(0&kQ)kYY>a~;Wpd;b`O%ZZ0; zl<4mdsos7+F?W_kHh1E%cvQJBV%Zq43H;|W*}|Dy$0+D%qnB9 z;St86hYtox@8dvW*QWsd46%UycPlY>+Hi6RJaZ?R;x7Why?>TJ74q%=DH3q;2!AmS znF$d0W4)t{ze!}?OJuglI@qfkYVs&?n3J5ZNk&f8&7(X zc+CvA^TIiK-HT%G4%7v->O@)bnh`t?ks6T&wwR2LJgCHMzk=$$aZCgy^)xQ?oOpc^ z7K@SG5dboR=MlVALZauj${VknkUF|ry!P|P)2qa5X1Kj}n3LC6pqP6Q zbpfp!QC7TW1kY`vodvd_3|^;{=xvbIZ9FDmw;qG8&Bzn4zl$|mBsTE1s$q&8m9u_6l(!?|4+7J>nXx1 z$7Y%Lerf|&34K?`x{~;u_OgHv_T?c9Iz$hM$>A6(XBPr#Qq0ocW@dns&^=fVS|?9a zMXf;dSftIVYL1yI&GSX;T=(r#HCeq$uWF)BQZ(%M&EPvy9|vK|HGAJ87VOCjrZb%gdbGW zsknn^>Z22wwZ7~%v(qN@(R#ov>~|b* zZj#s^Z`O65NN<*zp~5~$qH_y>sG}=nW1@2Jy^|~+(cyBeTHj_X6}C~50w^6F#vc6s z?b(AFvfaD%DVz^h!fTk>x|sP$}ZvL3o#PhpmJwA6TU}4HdNJSwe6Cci*_v zR!c*r0Ay)d|9~WC8iR>N4$3@fs7IA(s5d;@Qstg}YeiwFh8p&Sdwq47ttSL$=v{oNFR} z6G;kaT=X`eaVB9GCEUh!(;BsbY!w2nZ7@>0wlNFM%`X_!`k5B) zuVSkE$V=xO%O+9GZMUD;>rhs$gb{G3o`^>l1dVmLPKmY!F{4<8kTLOulQPg?@v(QYF92PnS((eCOkoFfW=Z`>O>PCJ? zwf{3KCQ~^DPBRERlc&@kvdT!?g*bMSRQYzylLTBm!e5MKjjR^B?S6hN z+wA>S6RM#MvC><{RFjf>$VZUq^%j-)lM$qjt`nYKN4@oL;`IycRkIUcYBwkoR%ZQ3)5|`-M~On!k$Iy?nBLoSxU+ObIv7 zX7v=ic^129kZ&~PFL*t{7r^VE?^VX@Br-qTr@-sY)KPm?L*0{Y^ASFqj=EJrN9{&p zn2#{u&qoj)9T%^?j{5Vzh}T`naG9Dpc|D6_Zr>*Hx)Wu^Yeqo3c2+eC8lbeYXxIW< zK#!{Lwq48gLpm7k;c~a#p{=2@fZLa z0zgLaTm{+{d0mf0%t!F+dbiam%>?ypW|i@JR>NDcGn~E`$on$eH%YhvKg9y@KlUf_ zdcts;MBsTn!j#O$uLCj~@)x|W@x1=qo@KmFBJ=oL3cPL*r#H##8r4unck#N4&(y}w z%~corH4X5d*DCJ^Yow0;SiCmfapB*dvhf-j?#8X>j15^NrU%%(HcU@%oKeJO+U20FV(p51?3)*HcKuc#U6o#fvpwGeNv& zRvE8_PN83a`OP5juC_i+xB%ZR3~T>6BVKnJPF)B*uiKfD$tnYmMlHW1_p(7OOblpEqeDvxNYkVa`CLjkmTLO6G;tUob?lu7<7LO6M94J_u5G{tH2-5h ziiISEV~+NM{9u@VCg;Ny=ATbJcTm+G$EMQ1!}UW0coi@?OMor=*j~WwNz6XwFcOmr zW(!LcC6+v}iBrbUV=DUlp~6(uVL~|>cc${9{98eQ8MPgomAcfPv84)3ROAqN8YKom zhXJ<>eD1K(i;~VfQf#$xj}+Zfp zmuO-8AJ9lgcc)+`1#Qj?{hHZst9iWktMJG9E1P0s{#wDm%?JKfyMGGgNcpr2^ftB(nc`~AM zIF@ObCm-p5=OH>j8_$~kW7BpEhgviJ}#-~rL<@urBz2uJ}*Ad^M$Y-b%ZDw-_*@g&B` z{a>dsvL=9G1Yji#Hg2-`y3S$Qj(0Oz)Pg*28?1)|Kve+92=I!TEN0Q?)6vuTbzeY_ z$|!35WS00D8*NHV79W2-#-#rtQ29SMf2~pNBRP$Z&(CBrDGh_a!DKPBYuV6f;xXuC zkGu|OY>~;rscza6dirkY#?ySph{hA4=jOI4XhKs+_ht*dV)B)`-RM2Q(99MyPHGTS z-F43%G}qGFPN0fAW;d~T0%g@w7-7qyNZh#DVox2xikmIO;@u7vi^l>$MgTBrwirPo zuCv9j%d#ITYFuVk8JC4lK@IBJ9poLCq8N?_%#!C(?O&e|qaB~N*la-pE*{}8)SzIt z*!s0)yiOwX=iN4`22Ddh%zcboS2DIP1g`{Z|9Mb+xJ&9Ei_lm27t@bU`&$_2{sZ@2 z&OZ%}K&E6HH85)7zRSW`%t*pMUje^+{+h&Z<94}q6kc0bJLJGT)3Bma`1KYiJh`4)smN`;MjvV-c3|I(AE5l)*v zJQ>K9UAidtp7sPFmTS`h+&@UEp)bvIF=0d;|{{JS+t-0q`Gn5EQm0XaRH- z)tcG9HGQwYrv(8OgVxMZ4Tak{;q(H_NYLhaGbh|IjkomKO{1+t(8@6};9``*9)uXj zTYB9)0fajYkN`#5Mlin*Not@O-pwh98_@WjI{-4UGCleMjeoKJdC#AV^yott$Ug)+ z4~h~@pgyYaBbi*lI@rjEDSLs?3+#)kN8k5br05E94qsGzZniI~m>;Trry*ja+6x|S zfgh@M)H?C!-h<``KU6eq8_5#=t=>w->2>9w0=>%pPYvAW>9Pg>r?lP$v7eYPETT?^ zzZjqPD13Lt2Ch?aL6&1(+BS})qbfY%I2{(jkgKIc%UAPdCVP+WfUMyIO%-YR+sWSt z@vd;GYiEE}OMpMU^_&mUKO6ttk9StJC(#@x(JatE za2ss|*GN(I^*A?$B>8*hbz^Qd7Jku=InZg?)`*98mHQ@gwe~ZOtaS7%{JMQGc4QQ_ zRc>Yhn(gAkr-Itj_-cBjx;+o>Suf)61d#0_kR%gk5v|Tjs0fYkp(}xb&FKa_a z9zWRWFyF--*zRDwmVMi%gYM>?P{k3}mVba5`}(!7f}hGuNSY;H@rdkLT~zy36^0Kv zb4IE4WQiNxG|&kyEXkaRN&YuDk6e;bfNygIx9fWSl9cyV19nNpTxu`qg zLeER68C{P$X3eN|h}XQjHLPt~cNmKql-Cj%US4CO*gEMRwo+gWr?S|vNEcGAgG-MQ zc~i051}Ny4VXBMPl=gn2TCPIbez#^8%$0F~PVi9V=b2?!fvx@SYRj3x!(b}?lKi&o zTArJiJBTel&OW>n8qZIGPyV3-g%bUrBAkD*et6{{JblXix3OS;L*o4u)9@F2|K#w# z_m_kg3EyqOr+l*rj5PLIHZl!(GpOW*J7h%NY#JQEe`J`Gq>0o#&<8H}Zc`l+-*2?f z$G^Y+_eK6T5WZ|w4f-zVU6U&KFXD~d$@?Gi*#!kpoeNS2OhPdHDnVCZ4SNx8A(J zQ_Ot}rZ?09gpS)=sb$3Nt<>`Zo+I}F&lek>rJ7o>x5m`83`BNN(=gu4KQ{;m$?NY( z^B$hGGuT~&22jBBE_~Iip}D_9-%=|!JiWb@coEM`B#aC8*0C7AHN^Kgzy)1LkS@A1 z0xZVL?br{a?apDx_H-TKyWWod3>r=WUvI~rMSkwxhVNL?-b%a-UxSsjx4JjuC8%X~ zbzdLK;?O64-MfSnqsD7yk%pz)!CGOBiJ4e?RZQA@jy7D@oT>wq`v^*|?Ft(}_ZoyK zh0ugAlV@qqDYv5!;l-iU$}#hvCyl?xCL z(ZPNbwG8s**V(Hk?08iAOlMiy7=fI(2} zc3c4S)(=@o*PsO-CeeM6X5Ra!-JkB)8=HyTCVZGYBtsj2F|+97V&gY!q1?>r!=$ec zIGhE*s9qe+nIf9YA-;2;ty_!%9J1$MT1u|Jm6FH~Es?^&7$1T&V^7yZ|F=gzY_C043k2t@A zUsp?cqNp_tW)*r4V21{=75qKMdd`H3*-oXe)JXD7SH_XUD*g*cw;V+|tx84J7rmsk zzGI(OeaBGWF%JvHi}ejVOto%~`Efc+ArI zluL?Qy_r?0H(-Z)Z}*`@y(QZG4y{XZdP?2icrypCgQ!3L3s<+?4qU1J+m_Y;6xDwK zFb917IfE+jJJcULY&k$fEWyMBv6R+Hh(L$81Fl;pP_jCU4t-X;K2L{U(cwJOq4o*V zfl;FavkG(o>_CUDFb|3GzemM9|6vUR&gjt^A?Kh&FX({(!qqLar83gt{F+iajC@LT z=mE?g53_y_I-(n&g)#C-a9l_e&J zl#=DAC*VslMw^ZpZ9c12P%|?cc{Z~ulJnT1D5YR$G*6fXy@{l3T!8n9Jau| z*Dwd^)P%4}+mkS*eN%S*A-L2|IM_H6BjNgOK*CqqXWEdihQ$az+eRsEBupX2ugtE3 zaK$EVCP)KgR%lzgXR+A4u7Z=z7zvvV>==UFURs#-b{n;@%_Lz;w6J?!P$R%{|I|9F znkDQB7N6(LSsWTz8hNMH>*LyhhXE!XPS^M5;DT) zA_*Ij;@6H(#keuo+Hs^06?*8&m?FhU*kE8q!VSQ%piXWH38gf8-O(?g(~GHZg+JfA zl!X8Mgz84^9N$y0c_dWp8*dJ+u--_hz_uj@5+09lx=Zadb%BJ8fP{5L64r=>TjSU5 z`6x-qsI@|76X2i-c8r&6Zh>go{`J-lct5IBikdk$r3AW*C-l_oVIc9ekFRGUxB;;Iq(O z0%@y&i#yOhKZA6&PDVi58NB5O4=zBbqsQ>;CZ|bSMvb&uoAzqAzdtCD_Kx=_NUMcz z8%Og;g06(WWps6_M`VHOfxS3baJ|ZW_ORVUytpHQVnG}1lRxk&WF_@Ak`R9}eeIct zV)`0cpSH`U%$vPwZ%97z4)2+sgC74Bgb7cdNoQS zjwPXJ*_8W^I#upsK+rfu83eCo_;sf|LK-t_J~f$z_sk_Yp+Ol%yYUjl9S{{WaU7Vy1nA)x6(oe(m&u5h0eoQq)zTyj zU+7Im)p!4slMOB?wDdu5s&cpQsu>UatlqWG+cKEDCeV%D6aGSo_0nCO`)22LY`cr{ZD#bSraSz_ zbZ3ZN`-Un^cV06W0#|N@g^+Vlu@Tfpf8Zk)2{GNE|9B!gT%}5Y-*(Vhx6@jhF6deU zN#SozIQnSNIkVcj$FT1uzRyquxP3NKfW6TzK!F_3NXEKPa(%eb;~DEWYaR&w#^zH6 z`#2d!V^9r^v`|}T92d0mkH&!`p0KY@mBT+dz&{!rGAED^Qm`e%%(>!DJ|C~OJ0^jL zSXM#1LW^x3)3j|f4*-7d%YN78ish3O4f8J=+kKuI_2mFK-ZG6ehH~f+2BFdV+vBvz zgoW+j;WaF5PcMPJm#b8*nVpxUA5N{fqk(UR#qHx8Qt1=1)Aht5lwsJ95R2I-4xqKQ zqYAdZ?N2+l_CS2}qE>yNBtm~z2K8Fx17(;vEDs#D7*X%Z@X2}S%MY`1?8_kw1K$o_rD)XGy zpP8#RZ27c7nC%YJ{roN|Zxp17D$~{oTZ{?NY(1dme+*KskX~l>Gh`Q}4yIh;)mQz75TB|3CJs(y73obin|(yx@O@NkG{S zYisYC2L(&|skgu~eU05zz^MpX?|tsV6OZk%W{bf^68LqC(K~UG1QS{(Lc`FuAQO9` z?P}|Xo7eilb0#^)(krPafSe?3?jY>L1=eWqnkuPr23ve_hcyS$fakhV;5pCml%`BP zO{Hxa$$wrd9i;@+X8gLZ-7mG73BpsuGVv^q{6Q^2v!sA<=e>u+d8h_8STLG_d;5}D zHSS}Eug2$KB}O&SW#iQ#+A#xrVL@O5>7hD*8$osU!HgVDpL(>&&Imf)Q0`l38LH6; zQm~s7ziu4E0(NsUK{a9)3eQm^!$HR&-S_A(GP8P+FJ#QKN5=gA`kJ4w0-@#uDrZ~d zn?aKT1O3v17`U7|7wz#@a|lB6gEdUlyq@W4?fwom|K|@-^F>-~)E0Wxyw@r-n7bp? z9NiQ(KMTL^XAtagAk75ToLO_%+;ETu%B`aJ#LVh0zK}5=zW$;L+wS7}Hc~*1;xj4` zNYg1mwk!X2AX@#SumPx_f@Xx-)8ZXBO*Ty6WDlk!?xy zg1OX-7h=oS84hsN;5lIbiD6*>Eli-%AFGfqvM>UidUMpeQ~}QA{T}-LRRM0Nw+b*z z6{sj-_-(f<9XuB5rpEM*k6dNOP7dKwP$ zS>^VHZ%*{S5x$TyufullD?0({vAqfeeh;af?woKF$SI}Ad9O&&<2vDC^!TGK6Z9nM z!Fng?;ib_4(gQs{b0g?+t=)Rik95(45zwcbq<$!nqz{Sy3bA+moFw6GVnz~X%}o+R zLzjTL2D*LBtnT3pnPCg;@FQ*$BuSowkIT6Vh-SZ0fk3lv0m?FPmjHGt&Dvg`pxII( zYBal5OA4l@Su^sIisUh}Sx1DSgB#(3$2WPjB3ImSO)-8R~;j`|%DCYLD4P2Pu>? zp=QN9!9{dB1)C+>?6pM*LL+(iDm0Rn2EHkPX9Ps)U?aISG?GRnLcrnIz2avQa7-`( zr}8G?6g5X75O6I0ASQ6-G^%6P1v?gK#AndRf~;~+MQ)5nFE!AT5)YYGpBVa%5d@(M z6$N1xoo6jRJv0o#vnE_?WlfVa?@kv~7G%T7N=j zvg%$&FjkP66L>k0S*k}v|2aLSSUbzuJp5}~f)*VX@&Bw^G@!mPPT zVra;NuKNf5Eka%63sBb-WG#@ZF!!(u1kw#y0S4~E#g$0c&#c3-8QPPM&wy-!?oe`# z$c>Ti5|;2|&BYj9KswE>5^{nhN|4Tr*IuLt($!rL(!J+>YE3;z7wH%QbXsk5{|cn* zMj}o};@AE9$0Qx2MmlEAO*%tE4usvBgGIVdz5riN3bGbNB(WRVNC7p=vsEC_w!Z-4&uZ6=x< zqc5BEmYqj?lHQx23vT}p@c)zc|G$Y&FaSMo`~NUB!2fmoe;rgR zj$zV=DTIS9kOs&~_Wy%5`JUVUU!i@jzpcpMrvHQe?I*{+-?i!e?NAT?clWoixi!$I zWPPL-e3_kljpV8~dV#``l;<AvGd6ntH|6>PI znYZIY@<~J|k=qB(^nyA)?gD#d0>$xv?lqFy!Vlw$Vli>+?P(Ab)!+*`F$G_}+ z6PcIaka)jB|5_2=$N47ouYY@gf8u-n<@hcre6OUvZe%@g_6`4;wmL0sQZ}WHw$|9PEGL_#mh7Kyq>1?AE<>3YeQ9S~! z=P_67d6uvBJZ7?6Ydudd6xZ|Wl&3=piS@iAq)(Bjxm=KHnt_H3g4YkHte`3$l&Af=oea=Fj`=Lk`lUA zCmo%|45tfEnlQnn9Mty)xOY6vJ1~M>9wlI`p5_-{3OJw|gl)_Q%2Y-Vwxeh z0%Vo}&cm_cPj{d7NF9E>ys}&?s}Gm;~lNf*(rsgnUeqo%oCO^QUeM{rubw z&6*Bu?s?O5bWnt&xkmKOId58FJUA`(eT)a(2XyRIep@?FY}1x0jfvqnF!ToOatTuy z>>cusuS3c@mpmztqSk^^SWpgt($iq^&)s+ zLCvNy43FC(J!m)FoAz&=M}2J!pE}_3LZ3%nv#Qu$8Vc|mG{1yW7ds!kIp}nMmWLEy76vC0Fw=1l+=kXM8n(y{&jodK(rbBxHp@Sy!|&&!Td{E;#!&;Q21Y zlVgkU^n=WZ-*pfhWPUna7-U+ZxA+l8wseoD$$DF^&w&vIJpH)9@icdU;W?7TlX#gO zQ_`(y0*>LEBEFXaF6cTI@MQ#a9rE~6DEhVforN#ur_q&JC^-hyJ-(E_m^(@c9}vg) zDiyVrx4?w1ZlitO+C}oQ9sfHef#@??-N79w-4!}FC)NW(Bs>S z$Fz>6xKG_g`ku!G(U)0Ce7l(fw=M`=8gL8rU84ibHM(j zOM(6M*NaGXNEeY90ZzSs6~6|LY3=rR`w083nV^QltR(icoN-_;Jgx6-fLn_FYm(S= zJw0H5zOCx^CYwL8wdSOH6uPU!o1qq8%c2(Ue^d)jc~lEO_v!Jqm_j=I#p2hU!VajY z)q+{cT1+qnsv}FE54feZX#Zh?2V6K0wYbxcZuKN7f?)UV>WeYPA?b zx@y4)KzE}n`HBo81t;$C>%PsNsi;+iS;>m@GX*EaSbEKMO@5@5ddpU&)PXF zemU8}iL=$kT5QDy;|J_yl`RNlDUp^Dkk;k|#RcOnlL#FKq#Z%v<8~M0 zV;{7SwS|u{f{%58n#JYg6cYXI8&l{j;r0!RKW2GW`cEuk3Qi0maDTnlvl4ntac!rG zS*veFF{2otK`{%m%KdNT#whkCmhi%3ySbK+S+}_SXuxx*>n<0euBQSUK&eN%2+Ihb z+Y@!ILn6)*;MZ+H8^<{UCa4WCD_Penret*QgnLQFy3YOsfbO{k#jLJ;MqMq)D)&a@ z#_IYsOZd9(g0TujCWgs=%DP$GR;`QD1}}#??|C8W{P}B4+92JejX`fq)OiYt{!WQm zbiQz>1o_LXWSu9N0-1xry&TXba}xX=W7e-nQOxShXVlpOUEbhsM{canx3Pq;^PZgJ zS6bM0DpZroM83{mHVq*?)Or6t)cH$;s`DVyRcA&3ofFk!n;t-7I=TYCZfn(0JT6yw1JM%8j6y)tS$zvjw^j*ZmZ^u{xi}628uJF1WI8#%JqY6&GB$ zrwJgo;M$Fs{F?P1=-!pqtW|;Oc&F^dORmu>;IQDzXH>ufEmpgi6suPucf$`7)%&P0 zmyp}og6qwAD`DR#wj_6XXA1+3$9Ac z*Iw}Ts#V|i@c)zRRi7Ys9}MoL717CidmI*Q@%Cy>b5T{jI>?&9`sYFZd7H zx33qQAW%2H7W2I9+ZTUD_U#RQ3H$c<(EQ5m+Y?Yy6ZV1%{t}-VDAJ85P3JzZ!rT|) zyvi>i@g=Am*pV}vVc!k~gME8!mG1^g`*xk+!GI!1*cH#Ke97J%f{g|L?YzoSz$aKVnqZaqa}xp7@F6kA{7kHrjc&^Y|QILgOal`Gn^}J{@IvE zZy+7LUE2pb^k`>e9H3P)G}~8bXl_nW>M?#jEi=4Zb+sr(5H!hWR_mp-8JbnlpS9?< zf`Ww2(E*=voZ+WIZktY9eI$o+u9>5@5I znuOgH+irCCH-#mhVV#PqC+F*2*APx#ju2faSp&!(LN*RewhS`OeI1*M(M%S>Cy=BG zBPihf>4hddrlU9E*X@9zA)~04(^oPJCHqRJ&)e4PR5YzHeOM4`RI!x}2y(B)$M_X) z9ZEH%BD>*SweWkFTYDfmyV&v~+nc;|t8Nvn$Lqq65q!1R?^dqEBPJgBb*Epci3bz7 zZoiUQ1^kK%617Jb|L`k7e^Wd83^8UwR=I~E7iwpy#6RTW(JFB)w>fjae*D($85GbV z?&GCa77uYhd_E3wzx+q{1C^D$`c{?D9k{-4;&Lo?G~1Mk%du2>TSSVg=Z#^Q@;)|j zITrG`#_oRi7#q*Z=>U)sJa-_!xTkjtiI||^*Byu92@@11h&Ie3ZQ@E~iHDIx)?uA& zOkLc&M=^6}R6CL;PIk!Bt}FDXyz7ZNj9U!gg@OSt$3oywdDkI2AE&GqkMI}X<0T7W zJ72f<{^#<$Zv>g)9|0M=te35pe_Gfm?mjEM9BV=~%#I<@<%W!Klsq?Ayq9?dY5tY~ z6}MXghLAd12L$bwfS>g0mH?)@FMXZr0sd9zO8NX}6mxI6Lwp`YS@D?>uw|B1j4TM( zTMtWSMso9%imKo6L-BcqcU@ z@Q(S$=q^M@7YI*uTHv|xH(wI3nc*(~+MK+8F$m)hStDL|qO5q$2w2lk+C<(?ZU@Dp z;XWnWE!I)>;kSv`JxsLAuEpyG>&5Gi0FV&?96+%muiKG`(`5K{=VHjgX)-3LPcy5G z*FvYj>r>Z)yc<|9W0&W^_9)b9A6qG2cN$Jz2t2RbnPPX>fY*8&*JXL0*KNo*8uAys z9^?z)^`CxN#_J?9>(>-`9TrkI!RwT2m~BQNUNZt-*MZmD7OwtSgv4;+9rKOXO^A+e zFJ5cqC0h8W^Tcarxa%*Qlh-?gFz)@gi`R`PD_%1K)+}OGBMZzy5k{>hCE6|4QT4}e z5w9DVXqR1!*ROj-ylw~p83Dj%6f5$&9*OYHiC=fw<>WP^#%pGk@mlBwdZAW3d#-q0V>s0z@VuTi!<;hA)eUg23i-Gw1o=io{({#jf&j0#SzX5KBr<=w z-SZj)Begj6wY9gx==9Imhz>QVjtI*L=-`NmbQX#L8>Mx&E|q>DHGW6~4HF0(eaI;l zpZ!J3huB5RWs}ZykQ%5F=0`y%5 zQFhFpCKzON)(%)IF{=LLHdM1#4l!?Bhvo1!ARP@@X=R`vTmB#d=DS@9uY*egdS>BlWq0PS?wd8W9!6iD9Os{k?!XDCZ74RBGJ> zURUiILGAmCwI4%DI=T(N?rZ3t8AYx3%&J`bAr|k2mrP%KKBM*)WR?40$c@$hI>EBq ze*t|Hbs`dp3#$iErlNB9uO0}818$XY=tm({g%MPxlTacHpqc4u*n(`Eo~n<&S;9e2 zaA1N&DR(sw1ON2Oz5tLBJa-|#C>(l`h*cN-y3b!q@-S-TVOE)N5IP0n@G)E+kz38) zi`(Uh3=F-(srKQsB^(y<3D;61@WP>yDYilZUg`&x{(MnN`MTp;O@V@>@XK`-uhSL*mCuC!A{kyj*;i z;)k25k?8q6q0%~p2R`cw%3sKbo`)z2xOjxW;B&p;u66T%P{!vZGBcwEK5wRSw@5Y2 zHX+b}&q$ea*N8+v;H$hbx&f)9I|)y(+|5IcaWe)p-0H8+$?G?wnEM#&0#?+cta!}` zo(D;r$bz)4p~ir(g^x(f9N_gQzb{_*vE=y5egxw6eh-S*bpaqF062vFBCl(Zh_!h9 zy6;{@UNdUEW>y)mg-(Ij7vjQ(T#lnzMsNYXSNPVx_$=|d+i>bZ;CbE26l?@xkhZgR zaF`tOq30oLG~_RMJ))90&of-c>m)K;6B(PZZKiTJ3o8qdm_Z<3Gg7A9IV5^stGw}g z8mXhN6tBH$V;ue+s>yk^vR&8#wB3!MV5zjHIl`%jj` znjevYokcj+?)-W2x}HxE$_PBKYnXxq$_&z3J&mud3;EFV5H%X|7rbs)$+d2e8_Rf| zM5dm|7_aM1d~ZsAkEn*(Aq3(zBj9yC6#2S>B0q>k&uf)8UJoF3bZ7BeTau!Mdz>j= zGsFEZGbgW)LNOPiE}&IE%Gy|s2%a4cK#>Jd!Spn2L3UD4)x+0|*LoUXIfX>1N>%QJ zdu^-^0Q(H!4DyS-?nNTTYW%vpzoN0437WJqtBlt|r@-scn?T+Le#_NX7 z<8`-cnC(I!UNd5Pc5bHvuRD?Gd9Ct(utw_WtHf(*^3lR~e$K{gWVmP2bMpG*DCVw2 zT|ldLl(q315j^*@s*wfoORuM43$k5$s=og^@mf!CV~9lYy6YYruLHm~1K5ZBBCk_O z#CVNg_vi&0ubCiTGpmf(LZ`s%pM4+XeVyH0O}N0fQ#jQgdWLx2&L;?F1fJI^rr>lk zgLGC;xUM?nLxn@sXvkmix?d&Nx+8BW<8>05W+FpggM9Hh0k-_nrMqoS$u3f@*5c|a zi$zUHFvp6Gh`GPd1JyFC8HXlrLDm8lbq}FH?rz6yso`9d{weygRsm>#pM{>9SbwYG zh>pLQ{r$|9Mf-advO$U_8J)~gTsTd}tl&XjKHO9&Q?n$~Tth3m9FAsSP1l|V9%#iC zQuX`GZ=TI@wDI%UF?agjGOo|4X?ZB{Fh?kZSUVcR1O#plhueh&&zoT(jY~>JM}=UT zx0H6XP_!Hi^~?Vsb>{;gS5@u%fJTE78<0X&gz!fR;-8=*!7G|7k*PKq^j330prB$^ z)F4!Q)m~FeG{bl_C?gR?qh7dCQGyyx)o5Cg21E^t5EL~afA%;Pf}#YU!u$T#I%j6i z%%m;q^SzgTI{VMsXYaMwT6^ua{|{uMV*^#gJH+;N7PsOHQGH%Gr(jPz9#a*Gs&m!HLh$1&Gsyce;=XGt&*9Nj29mI`9p=X;Azc%gSE!h6kk8PDdDTV zcdoa&R!=AIgRQY`;?uOLh2p*$TP0@vZrA+z!|26%*yB6>S@qDdKpg_q?R-t~K|nCp zQRLNg4_yy%9w0o|u6fP{=GKjc?U@3!)T>^_obZ)A&S3DSp}8>a@6=|Z6mZB9vi>CNee@ram{VKq~UAw#Ev$Scg6D^UGaR!5(`7yy5jkcu6Vwq zCnR$%ucnZ2f#qBC7T$Ec(lZZ7;)n1KACjQlq6p}iOI}zRubOQL2R`_74W&uaJ&th9 z@c{~J7N_u6+h52sRQ(Frgberc`vgr_JYmzNlS)k3boH9at^?)Cw1Tg6jauu9RuAKj z03*yAh8-Az@t$S?7`NfZHwwmA-1iXckFwiao_-Ob-#{zM^O9aKl1($x3JOUr->%$?N13h?Gvg`9yK*2I6rgzxl89Q+5n} zN?}b`n3Ff?w}DpB_;Sn3X*{AmecQTcg&`{vi`YY8#-0{YciE@>4pwQcS#e>@t&c#e zX#zK9HeTIE3LKf{8Qu)d9E0@7Gs5=Z07_<;|`GoBjg^2y25y3cN7Am?pm8zZWrgz^BD2wJ1v-Z=AZK1DyFewfqtVM-DSMUtjQ?e1 zN5rNShV1U-4SJkIpP(Tu=7em44O;N5t#Nt!(SjS+MwCwkge|uF6Io=H%OP&N;Jq6pS%)I@Q{UO{n&S zw;9z`poY6R;l~4RD)EuNhm*=QliO#8YIn(d_>J5jx~*&AA!K}_m6&x$7mp^nN{y$` zTks}jOuW^~Fw{7-2qe5YE~C!c*iEDkdyknp)ib)sp zxO?9kwq9CejyX|cxeZs2#pakbzxaNF?%Bd)G)}9u&$!}i^?ZhF(oNaW6%yYf9rzqx69JAE_CrDv}6CSSXC_{3?d-mEklC{GRP-A+#NExTf0K3ObY zZ>FRDsJ~tdBB}m*MBPie++#}RvhNKr%}-2&XkzH9_(K20j8qEW*ukcY(rdP{5jl$y zIR|>E$R40>OopF5-Hb@ti+1YOWCA-R{)pSGkwm?GV?A5XIPPfpw11=yb~1BJ_kv!_ zx^=gK2mHSH4^jopMr_1*$AouVQR9AZrgcV*qgvt8#q8UOC$8G+Gl?lPt9$ zGiXG8`uX-YxiZY+OTvrowT30EmF4D!<@0F71=(BDA=qmF22nnm5XByBj5UfriCeRu zFpJMUmn=V|=%&n;yHLWmFyE7F>cMAi&;CyPV;ZI8q1c9J6^wuKKH^^xtCG~DSg@8O#nDCW<^bn;w;;AD^w|5AkyUg zfS4=!5rCWZJVhp2{@k^ufYruO@`8lIyG_Zv**{E7{MOsa|0TWmA&Y2tP6&#sY$H@{ z)4lvYb!~oWaL$GpSaw6o|7h|7A)!bIGA<{g1BoAo=JqyXAm*e1EcPgbjgX7Xmou8K zkd^I^xv2xQN_*YT+82g|v#@KcFxhmuUaRzdlL%VaYfkni)2wI6W>Y{8Q&gr8S z;GXeCRE6mg-N_sDka{({!82XNDV%&5B#kxcrm(v|bV!La0BtexbUG0UY4Y61m9NK2 z+Wu*?lBP*yHIs*rOxmOP6s|YUXu=wEE$gR$8#sc?0;;AawB zsodPH7b)FVR=rmxM*+MLk5gBt^os7u1Vp6|wd*1Th8pbZJ;dUCCi!Lc~ zyGiPdKeri{zN zHjkZV9Pe_>GB`2EI~2qF3UZi_b$Dk2_w7(lN&Uj{0ZX|xd}E}B<7s3r{bbDX@_wRs z=&1IW|6=5Aqeezvc|f#H`Ia?-DRtkW^^fi+YPAAvKha)A%I38Ti%|z%*+~yJS=DT) zOe^-WXVjp`TnzI8Y1CNwt-5U=qWPXH6X?kIA|+$DL5;T%1dYoC54#@(3F*R?&T zl_JW0ViS>cj`mWeS(B>SWJ4M)>#*&l5YG5UfoNsJkN)FvFA7z#rSck%|^ z9cT?PuJTNc7|-YVHJESX>&mUQz*)oL{>9-2#;Fj-SKTykYdCl z^F!t|e&YgDAQsv-I83A&2p6+@O9o>}hVm#3ysSV*iR9cTzhTdJh*a{H>xtcbGzhwZ z@Si7HccIvD)LWPAE6wkf+8#=pr&U5G=j3yOY?>orY&@AbhaTI4(eV$y=7>_&CWzk-9*u z4$>OO1dVUu_&0Ae{K7B{}|Gl7$DT3$$7wt#Mo)!UL*mKMGvmhbkYp$i84i)G%<*|5S?=REJpU|lT;3AL1?7_( zjvG=Xjvx3@i2NIk=5xN)j3Kz;*_>Z(9Pf3^`fy^7cPWNfz2s!`7Gg#*f%_&Zr=))2 z_^_qi8b1Hw8jh!t`RD~P$1w>tv7CvPpLQlD;l&F^-dSp7S<`0PuYK1${! znSCLsaJ;F!t4o@LaE7&846UB|q?8BVKq=4lQf87;CXB*3mU$y+*H{FeEC=R98%_*zMp_uT&$m#ziBGWz07M@F+9Mlx|Jzu4NWnjc_KB zy>rii*jH>fV)uf95nCQ8*CJwT=Z`hQ43TWm;y0{#qlhhUiP(Zx5}Wz$GO;`L(bIlq z#GZvD3PWsn@&?`0p<+cH=-s#2w_-&d=&VD+YhW~NSq(ZY-b>kN%^Vv=ux+-bGG^~uPi+9K35WON7<>D90}S3QP_(gE9>Qb5 zi)(xepBSd_`3?EkiMR5WcpE%@jghj(N{wrlw@}iE!*w^a%<~5uXjnm%*Qex>Z=hs8 z!!w;znV)I>1>5Ov!mCHS*Wtr!$^p?@0AL`6pkFiG1TA`C-A5gGq`!gxd_!c+==$tA!@q$v0W3@wFRe zhz?qaeHuh|QQdIqrDh@zBpJ#>vUcEQ6L~$6+z7>Q*za^PSKbnH1?7_(=`*BC^7hvc zV3odKxL{hzL4C=In&0s%dQF+5w@S)1fQL<=oy*bfm+*p&9|Fy^d=e0L&p7l9IKHGF?9L-h7(Q`BjqhIQcxjQJ)g1Gaq(jF7AmoI@aIVE zmwca#3ZkEEGb$wgDI+08M|pF23C|1Z6b_kvq*ji`E43mQB}3}6T4^Vam*0m)Iu;=ZVb2yeGd_`+9iuyz|$+Vaay2||AESqeSNkGp4pfSx;fckIJ3 z|Ffml%5le|R^GSKBqxxAiKILbw%rhQ2PI>n33u`>7HaIa({qCs+BVoqp@fPv%$lF{ zQd297l1(2vXQ~E`Dy=P5+_kBhrJrLa)yS}OtdE% z%R_iQS;cB)j2P}}2 z8s*L59ab-7L^#~LOlsvKyizN2hX#K`>atoHB93!NO8inoSl$xCg4RR0&r4imcu%M( ztQ89-?RLGzNv*gq>LlonzS2a%>$?q}(h=&mF~c?fp`FRPVK zBDsc|-|(hBNu#_a<_gLuHPUEEmDI`!|3yo_f$dJTPUX%QErwb1RVz%bG$_QRJWi}u z7Hs-2Zva2N34D>rSgi!SFE_QKU(`yM<-0Zf^xZXTC5_CM4QaK)2(6@6W>ji6nw7(z z2oFumVaJ?>1}!pb{3J69RAWq$oPooM)yjycHh`Z91g=Abf`>zy?c=j{$Ywm0hwz+# zWDdGWArzDx_PSeW!W~`4HQ2^S;iNs)EDyAd&Np{x@Gg?Z7e2QD;Czl!e)ZL2o4h5q z2}(vaY#UHnxx5NsL}#HA6ARZNpUdu5^HDi*^I3Of@yL{wzdn_Pg-TgmMi#~CI@Wk| z7xJBfb0F0~;YJ&I2(M9wkvo3ujwQ%Gi_B-tX?)u|O};I}AvGdRzW2M>uN-McuQjqMn&mcD>uwyj7DKsfjuBX;=5G`8ZAz&EQ*Q33FbhE#3Vo!OW<}6XruTO@*ANeUJ8@vUIcWyp$UG>h*j7GQF zcvFI}9VqkCT$=6B9JFk;+t|(oGHI))F?*(A>;Qh0nO>elO|S)X{i~n5H!{|1h;UZW zj{=Ty6!7ieR^_9B=h0ZJ z-(b-N{V$>hR?j9Ut_6Iz(7_6;vx#7Eh|aHr1N0?`L0Du5TBI zLRkx0JzIQKX46$&r+k0BfpTXlcaie=zxUW~fM?b{1H5NAweuptGuoHF>DC7=>hPJ& zu_EZQ3%3s3w%fp88rD6f_!J`uN@w}>(dfXa`Q~GECGHE*X8H>wt608NyO`ri8~qhe zwsI+N50%$5z3wSMr{nUbRo?Xv5D$%4^MAu!xaqyT!gGj~gJN6W>gAkm7erSrL!VD_GEa@g9-wvQzA~Expl2p8>i1)3E#!y4@xMm zd!CWv$DJa@ixU(hgs+l$)%>fYZ*I*b_-)+2Yx?GkE35U*9OKyk=k?9cKDQ%%a}#P8 zixl2wqn+!UZCsiN4wA#HIDk+sOFg>6?R&Px$x$g}(XKA8+2VzS-6D z^oPGRsrSb1|LpVhGxy(IA%E zmhfl_bfQf-;n(Q+oe1@dPFPx~KS9R3e4hTq;}X99-#JhJf_o*P>GSj&TcytD&1oA8 ze--`yCti}^jUEMT=WFDNt+aFBQmr*V_hZwV*Z`$Bw_3@wWTmmgBU$mZO*`cc4fGUj z-PKhA+qxHo2Lg&Q*4Vb$M3g%mx<@TK;-I-bHB~-i6TZ|=`kEVNI7xGg8Ro-_Qh^`h zH+-M2fpb}k=o!GA6^Jj_BNEjH*f+i_+2JIgzqX0s40+-KoWkK0Nzaul-M}XcE#4w) z-dN|xrmkN~5w@Z#R2(_zWAhM}iCK6*)iZQ8m|S58D#-O)hWH+or1P^jgnx0H?6pPtTaaTX}k>7ocs9Jr(B3u1ZeNoO2{2)33Zm zJRj8f(&{7+VQX`2mlRo&6UP&s3PpYeN7VQj&YS^jSES!*Y@1^@!jMXqX-WhAjedAmUv71+epzn-5?OC>KPO;%hFD~tx zt7i2O$-?)k2Xty8t+84j!t9+Cx;m07LDb&iws8y?v$R?F+G7Krrg)0B(iv!n@ix4#+cUZ;h4Hu5`?(}rF1 z8P7CUk2_kEI5De76~iV;Ic$=2_*eq>BQ&Dnib?&#>IF-=HT1u+hSg4&1ew!>jI)~Q zE|<+6vpQHM^Yb{iNm3pLS?O~#b413QBrU!3dY0JDuQohQ??%h}pJD74AUwTmNp^pN zWZ?$tBBqhn*ews?0acZ0eygz`4UPPoi73C;V2v-d(`SCBhE0-08oNLLL1XuHlA%0g zI0U@R?nxqf1(M&eoDL{wUT3#J_1NvGBozMJS}6Q0Eu^qR(ve(aXf>bnbYpj~LTqHm ziP_zy7$yVcutU<}nFP+<6kaEzeqr~prQ8}ezM+QQX=M6^jM!a1G;^%B?5$@MPF2RJ zkk9){W8Ddh!xf^E5iF_Pp^hu zdn#r?U+kw!_(2ebnO<`zZ_o$6QQgtK*K-^|!xYYH1G`Ep2beG1lIfRxzop(9t|T97 z>A}>In4tYEek8`c>?*LG@qXb$G%-&o{IqEO{aSJ}F3STM7J-$?u!cx>{_`6SrA4yy zUlB$Ifk6ow4$dVucsl#{k^j0i!sBl`IL6k3L^@!8i5mQ zg(1cGQ;%o`3;7wIxW69&ezGZ7{h}4-^a0b*Z#lh2D>z*eWKI$?539d#wMyn&aIC+V zr@FsyA};RlExGpr4a9DKEeLvl|MtVI15j)@;`vK<03##|KcgPdX^{>1#u<4CuT?d7 ze9Q869GfC#uTuJvA?pA>x6xR=kYp$i$@)oFW_2Kv4QTv^eU25Y<#kpIMEaWk-Y_be zc7Hts>c;)OvgV77q1^nAry8p}9jz{$nAPoy*~vxAqTz~3{le1be?RaPW48d|1)WQ>`wJusw^J8r zHAz}yw>*TKRMj0{wtRveCL3Ikjpb*CjNM;*pRs#9$xt3LY$3xkyT^!RMW5gBlz$Vu z<#l!oMEV+b8%8B|H=hoLKAsm z#_Yb}lp1!Ykr`N1Vt0#rLjIT#W}LR)FrL4TOPt=BFc{MTYj^hCL0`9NTV7|kKtib6nm3F}>^|T$D17%KNvp41zVKjU z_j*Tb04HYmTE*<-%4H{`eqr~dKA?4f?&KPFr;)kf)R^7n12CsP2lMU|4790AA2l-C z%A>IItu#F5K+7WCyla!V@Ww*yb`Vs!^u~fl420w3Fze=-B$;OdzI<3C%>VV~(w3SV zo((3;9FyJz6M4X-7fcG80JGjTLnNE^_zj;uT1=7GnIcfk6tl$2Wf9w{FQP9~*GNkb zQwn2(xRW>N+Z~F9RS$ZiLz(@l2Yn9E^c2i<9UC)WF7v}Ps!4n*q}9k1-*8kh*Hm?Q zW;WS#^tB@)(B0oQR<)C}u}U7QmJxw&NeI+NWPDa{fMyk+)iWDSph^OVQn!zGY-;AO|CpJXEktWco`&rbV_8*77^<}f8r4=+k_pq5OqkXe(_b)B%|Hx=VS+n(gMQATVo@FFc@7ne>OjwQs9017nsKODR0sMr zhl)jYpnC#Mv*M^xrlglRgfl5pvkc7;S$V{_rlGhk7&ZP1 zwF9ulfOhVR{OLua2E`=Df9wPey=4=Tf`?Z>(LNgoRpX^RWYZ43@VtbVV?<&c@f(_+ zEndp&ycDRCm#lr48`OxtxbJ_Am(x&9VR-3I-k>)+RGh8@oph);T?cxxL&fPj(Dyo2 zoUQ{s)uG~a9cY(B#pycGgMp?weW6pqIGxAh!g5)#z5aegiebH&z>R{oUq3P!W4ZV% zqlzvL%p^|`&3U?c%OgMIp;wP9G$Z`HP%f@kepE#!!VpfljHRky z$bMz^(;$A5D9Vp0#Jq`Tx&|j4bjQu?U^xx1_Or@m)4U||T97yG(o0-6TBXGAe3r12 z*Rd0*9(F@2hsQd+IF-XD8Vkip=DRFTn_1l#brRvbMLY0?^Djk`na#6gegY~tB?#!d zlXu5H3@4Mka2IH^)1Tj+Y-U~W=nbUMvrvLwyOk^S+!wVG;pnyE3&sDgM9=ceO$h>e z?&RIE55spzo@{2Vo@Z}s#WFwnmE?y;AqSHYc?hpDMBPb_P)+nX_8D^;uROuV-4^m2 z>0c;a^R#!EW!{uzC=VH~<)gA?-auqF`YU^Y!>67h&dTeY6{sF(4Wp8zo%bq?;eH{) zJ_0$I2ZmPjU-mW2yh9;oQ*mO;yiGCe^pnGChQr$vIIAys-(~|G{bHG0_SvnWskg>5 zPa|{xD@&HS>2J(3KLr$D-b|?tDlTe#GPnR-(2TJk3W^)@yw4#UfK?8M2OMk2A6M63 zdy=lnG98>%YOW8mEc{?pHg6$z&?=JS0Fajq=5dlv{@}ytT%XE zDrt;YzJf;jLYvC;vunu_uI8D&O=I*rT75XN#^_QEOEq#>s&RNGfumgT_M67gFB)Um zQgT1(%WE`78krxQkk%NCQ2Zd$w(c3z2v~f|D{3qmX1 zA0g8iua|wo&>PYiljI@XuGE+k(e#EaX&H`*Kzs>T{wxxSU4Dsam1I6 z`<+R~@{n=h<5**K5W{73{D$en#3^~5Qv#8=Mq|u7B3`CFVp!G~f4KyC{D3+IYzn2T z)fjV%j`HSk-?uQY~SYz$~n))+0su|Hpl_cmX zQ6308YKXeS`kjR)-0?G9QR9@Ib{iZLjP(#4(->F3$u!1HlA%0gI0n3|F{X*+HWq$E z=Tjty@;YY)s>fNwsH8F4UQQ#`aSdpptodRN*_$ej4(QWUjX7Ez0wXu=(Bh#nl{ zqma2-jqZOeqw~!j8hi~&i*GZlegpuQ!zktGA>xa?&KH5mrA9wA84`Kr4p}W!;?gfZ zf%Khe$6-{+QpaH$QdwB2l*L74VaH*rrT4)-k=|oq4M+`9xDiGk!hs$fRca2Fm4znU z$(GMn)FU8#Ap&HmfkVN@T`~|o)vTWcmm&Mr>EXw(yL#j zchORA4R;<_BfV*4etvvOdMgK$OP_^V6`g`S`5{8_X=064TIXT<%%}4(z4%sTZ>DA$ z^VtbHp3>;FP`(2voP3dV*_0BXz1+#W6Ip`i?;wFP3QyQUf-WUk)Rm1(6tPwbZrVWt z)hm2s2MJW&kl#T9Q6Zd5g2FX7s*;16prHQ@XSThtA+^7LQ4O8HihY*{J+Zv+asd$Z z?bn)!Zz(LDmk~&ZFXC5sx)&0g;FcBG1p8^oj5%dnPe>#W`zz<;mxuZY@}@bz;fez# z%JOor6e$HFA!`9hNJS$0GE<~DndpfJFE718tcCz6@!vAvx$_w)9i73^^I!2b>Uvp0?=rYP3I|gz8xr4ZI!s&Yve64v zrCSbAmE`p*`EI+oO5|UjDCGU<*zXBNH;lu4(g-cMHwq#MVsHLcx6 zOnu9bCp>Ua%`W1~m)zPcH+B2&v&Rg)+iw9BI)oat`%1>TfjPbdF=t7`G7=Pi=hHjB zk8xYrjp|pNnMlc-nX+klyK=v>yiL2jtueGBiGuC=RkX>P132p=elts#Oq_}LR662- zRm4U3Ms|P74W^I8Om@lQd8_Csp#gKJVJ@Q3GlV-#jtUQjZ-4P`sP*EjeZmPGm~i4Z zG(K5umDiPSFTPk5s)cotD;<5NaB4lNkXI2W+_k^fL_v|g#@=qq4^ka@jh6hb_=1&f z`&_HkVj?!-lVo1Fll?+YZtl|wt9vz`gL{Kkkew{LpICZnFdk!yGqVu{Q?@z7b{1Wag@x#Un zy_Lt7U@KiVLXY#o>8}>X*hi0*T+7ME@Z@*jiRo|}i8(6t8k|&phg1-M74(nJD+0w^?Q?(|`a71yre*Qx-oeJbg1aGuJt?o%&kp&WL(X%Zp9-8$H z^o8f|O8xh#uD{+PTsKOFBgH4x5CELiV1hlTM=jy5ADj%`QtS}L;_BSA1cLt@pL^TQL5bPMY}qTpZ{zmA$G&*)-q;u4)Od84?2A{>z3hs8(H*7w*;u(-Kl^{gzUY?G zvSa&V>!Orit$p!cH2TA^FW&N@9oZK>K>vRG;uBB!hwO{l+)nI^D@agnUwoFvP$6?E zd8^YOoVctkZv!+Jn#BJ{`tZSTmyh?kKD6_EtShC?Pc=Ql6+uNm_#cle*Si6*SyJ-o z{FMG>qQ;Kry@IDmJ7Ogw1LRZ&zG&}xtRf7h#uvSx-i>WOE3!Vjlp8gvlr9c!&PaJO=$NtCgJMyP` z6D)gUxGZbUfTZ2Sm}?7`++JiT^s|A7=uu5GwpfL0_xPydWIurYGk~Qm#8FT44PH$+${p&yzaU%7aGoWC)fA=tZ!|ZnDT>frr~XcW&#*vLoIswJ3i7bV>=p${kPs4U*IBllt0=hs=Dd%_JzmqvdGv7FJL6=0< zj^BiZVnfyUUE7@ExM3fS;rQTU6km8w3S-MJHzf%9xs!LtJ`9f}dExaG$0a4N_mLMO zy!@^Iiw@I{ghA1U@adyWLZr7dky+i4t;<3a?)WRwQR5BIwyBs7!I-$mIYJq1SZz}= zBj8~oCJ$MtKPX(2Fm0Gf&JOS!?r9Oz_G zYBrkcGen~%a~fa#7pj(A65+?z*ij%D({6J7(I=a#;eIy<*tf}e&R=`xQZQieqR-a! zGv1JS4pf>H!Sq*y=rJH#cq<7@isI31=1ad>d=%qx@CcH0Zgn-MaeRZ+MP8Ay#%Ndm zXpGp6ce|AL6#8?(FV3J3l&)6|jK}fjm0vDz4x8~6V!8|muo}L_um)(!lIMtK2!&tK z6v1mj5UxWtC(_v}va`tK9X@~0j;nN>4eN0dUGoI(%=>qZeSLSh2|~Z88zZaY8?5QB zC5FwU{DuO`md&J!u%;_etZw4`M;#M6Nz)BS4yGF68vDov;(xKFmU^nRI?Ed)mYKiX z%aWac*M}3na-+1(Yw$|j$Q>Gdh}4CzK{&%YLmay;mH0V^wY-kCKrzq$rBEFLUY(nsYrHWn&Zj4NnRoR&-Kp&PGK2!J>Rh0iOyN?)gF+; z1&fx&goP5F({6E^&~RVWMuh8}R(#=mT$ou#+VW$sgg#=gggJS4?87ij@?;&OLgzg2 z=akNQ+L0zHYYaPkpBT#ZS!lwYe8xhJ!_PFGV<9$35UIX5>~W&$oE8u;QIm%()&ei< zoF*c9$cJBUz>~De>wFWaq;m|7lFoVCvr{^!!BV=2ji@QHr@>IOSA#QAu`Qa_@lkrfy92O>V*1OJ;H{9?{s8p$Q(un@x$XMqTR{M%< zFjTjNuRbB3YB~^sS%U`(*O|Y(=P}~N&gU=h z7%=&t!;<)y%wO)p_~MN1rr~SmFZZ`9?ehHPW2qUo)B+QQ)|sZ~FMrQnl7IjB;+W=t zXnfI6;X9nad<6-r#}_O1NC{kOe6b#Z(qDz0eedpxyxDyrn$FOyanE?Ml{5deDZCTetr#z9{4hy_OpPBhvgFhCdP1pQ8@G4K z-r9q?BYEQc7w$W}+9WubAv8D#5Cs!^P{Owk5~P<+@bC(if33I10jy8 zDcPGIr8>&%brc8;QZJn|;g<8~$(h(ItwMy$-%Ar%ApQB>S0qcNM--2!RMkBL9j%x_}Jk5wQN6tnRc_7kS(T3xDMk3d%(S)hj_$An=@nTN@ky0i% z{YW2c#IDNZm0NER}=SGIxrEEs}* zkLkPHzY^au6mOAV75Q3XENfBo_w`}4dY;P_wMH>XkO9$ZX4_9;*8P-m+;QYhOwcj~ z)g0ngS1}gvFh!w+)&7~W&};xEo~n`4ZTaGAk7qxb25t){opiRHHN#;tASisQ_AU)#!KbRQg)(YnKi5$1%3Sq2(9=c$x7oUtd=QAc_|UDC!e zvK$E^rTVvficiBk!tHX80KVgLnd9I_cpf5^5wv{xNFu?l24)PVcdEEJ+!@$MaQmLu(#(?Rs zLO&iF> zT-)W~0>WWaG0)7fc+u9T0z+?3i3`U7Ezv{vpnA=eJ=lpr>#u??dn_h=*tlKOIMAg< zrDS7!C2AmK>&Su{c^q!!5m4l@b>t=md>vUvPVolBQ66uQA#?b(UCTatb=SayDnzD< z-3Rd`vbCB<%h%r}q2y?l{e>?aWQOM~G?z3$|8@LFg++}Y-e0x^G~3oay%(v&B`eH| zkbz`oNo*<26~rkstL6dmP9DEuZ!`?=a(k_EabA@(srJ6_5;fpeIddqx zoscio$32mEQ%Q&C>Li|mOg8M;29mf3eDg`_0dJx_;bg4nGVwpZ{e0{}=Je0F3llNJbwE6{?%(Qw`sJhK~H%v zQ!AO)8#$;r;*$sYWY5g0d?xAA8)LwppS|nu?H6ONC;_f%IZL>uSWr(_*6+9PT z*%n!-VxfTs@C=$7Rc|4kkwPBAts>fMOcODh}yBHaB@{sSUXQs`1})%X$vGWOyvR7No5|n!)9&^O}OJ% z%SDYZ;n*K3M+M^{796`kBr99xC2TE_rZ@3-JO>e0PYYGC@GzCMa z)D(X5Bn0r+DwoG$!HuRkbcb-N6pN#oo9i9r?E!(zkxOW#gz;a7+Q^EC-mh0qp9bZ zIqMIy>xM}<#7J&nRrV68LaYdBl5?I(Ap<_1b0ud(I>w8dap9{RU)i)J)tD(h2de37 zAKJxJLCa76m5jMUX#~?ffVHxgWMPj54PR{Q046=PX+-WJSoeJ4K;TYv^~ZCtBGn(a zD(!uA{c#)Mo%YAu;`vO?V?Nw| z`I)9}cHS?4+}f6DWNYlMh3S`Traw>kgIc9ef5MP>ow!yf9k({oNgLEJOX-H^@hyZ` zhy3S~7LvNH+acffOSI6F_cbjf^=pW^9^RD>d4{8ewEsT7q{XknF)g(HDAPiVu-Gz` zhh&nYa)-P?Bu|C#8&17f^_ADPkU(&8sIud#>X29NN5j__iF}qidAB#8=Hf>9ap|CMswJ?2mO$YCM~WZ-v~S_`5{zH*IgH8PC(C zT~jQwKGAMkhB(tQYVNc&4WOB@IO5sN-z*k?UZLFZ?rM9xxsa5*aeKY?_VwRYx3}BQ z{m0u|+WJL1a;U%_Qo)Y*xq@lhq}ed+xQ-gVz1hXj6?U-Z^fYzfJxY6T2>n01@AW?1uJ8N&Z-kHe# zuD3UO_`Nen*!o>fdrOr!BzfeoqJ5uTDsSWV0YHfSG|hYxdt$s~PY7Tw9S|*D@0zHK z*6b_x!xt{{sdKX*P&L>O+Yt1P8v>t|rmuf%!ugE23s#3bp0Xrv()1>ivy-e9^za7G zD$QsnbHJ;a176J>aL>>=SOJ>doo6aEnFF3h=kOoQY{R_TYBC>8%$!XKGi_X&5N`ju zOom5k)sR2R9I*-EoA0s~gcj>wC>%>`71vVqoAECy>38HE3BNXOp9XApfjqJcpaM6A z-&w7xI{Qsii3S*DU2UW;n*}x_u{E=4YX@wQMx93kX-;YcKea?7X~`lvm=ZN#tFN_2 zr4uQ38by|q7LnIsb6HOq&U}&HB{L7_2pJ`8|#n#j%4mnFr&UFzsf- zw3`W2oBOkgzIaXz0@_-QWPV)A{4%ryX-7j?`=?TiR)3};Ps)DOT!a29@ZO_@_r~qL zfK5*1pGC#wn zH7zx^sQJBaL5?FmO!UMn7Q8^^uSc2r?c3wR-p5L&?xF6?(w$G?CRX!=Enq}($Df);VMXHO}=unM`N{`ck9d| zEbZR2P{|s)`xNAEk|mgavBcWz@{_KYb|}pb=N@aFWS3gOj-LcLc@OIp+m+H6admfJ zcr&ZQV6E{f94-x1)lv#SPslb2l#9dp4Y#0?xj5V+tkLnFG6Aw!D+71;n1Y+`Tf7Xkl5&o)noedvsUY@5)lSJ8r-G&sVqKm%aI4 z*?w&+u+0hVto^={mcGOG`>Naj{`Q+c>0i=*pGh&*?f2pzrP}WgAHA#X_mhov+wT_- zdwA`4e>DBWYQKBz@%Oaf*IoC|Y`@>GXuof2++q7YscDJ!d;D$H?Y9rbqrZxNaJO5^ z?YEbXL3pQQV>ys&%J-lE^i=AGTqsP^r5uI%8(N+>%dTkmr?mVu{ML;w0 z){@mcYj6|a6(X5)4#E@lR$o|*EM>MHJae)nC> z_6TzFic?pdW?i=Bg^@9iK9(&-=dcC`JL40iW6|~|p5Wv;&QtEXy89+H?Ip@_Rqi>f za_<4*b%kE|YGl}+Vi`VLV=%->TmgS$s#y977h3u1dn z)Uk#CI_klP1~%M8yM7VDb-UBEDTk}O@7k@PJtbB4?Als-oc@b4f7YO1XW`LIqF>k8 zAYjG}E$zj?97VtCz^8V8;PGn+g+@~WEcCyMzM2_ zFGu~r>L>?R*~U?^HDf=r7{9tE@)~uHO-X7K*4^pFY$#!NhhO=VdI3dX{*_U}sCz@lKKplR4G>sTzG#15;$Xl}7Cg zbcpL7U3_%m2w5eKh4`ib`tapbGb!bE_wLrW)LXi~LFY~5rRyg69ByNs7m*2MF2ecQ z3#ebX6lk^W_L^UpbpH;Qu6rJtEM0deOV^ZPR>!`wB+Dz?F`5x#;AEf+EmArP8{+9PxL%(DDe-mC;68HP6LSg{TN9YUyV=Y4)R z>nGHPGv1W>PK_$#?_Xsi*9lQ$R%cm#s6&HQ+vhgohVcG_>h=>d+REGTE9|`c(1dY6 zVI+1V&vysJ`$3Wl-nDy*%Hw7*Ih8f-gl*Svh(>MZG#-DoXdRESeAzEq{j+CSLA#Tb zv2E9(kK*OI(zCAZiu4zxCY=qf#Dt!QZb;j9Mz0blUI?OQ+qqcBt7#P$SK-@foA2=u zA#SO4^z|5((_cmZvE}FGb~*~k#!>Rb^YEX#vD*H+ma!!b0g>Rp?<*#GdBAP2eX0qg z%Fx)EP17ADmqMCHR%u%3KrL^VN8Ei{XtohIJ8B}6!GJmI%M zNCY_PBl^h}rf+<@-hr7l_OM_uw4L276C z-1@T=KL1+#V5pWpCzkL@=EubEo`K??mG?ow5Q$F2!e!JwiVbinnwv?bp?E2bE*xr| z0=4Wy3wk^@)o3!EX$9-;bM*EYLr_$`EB&gu!?@_V?vcZJaf>LRfoQpA3+gA1vR zokMhnYqm&(AFR#9{9#3misWH0L>h}N+1R;<%!a~)*6kGzqX{KV!`u`-GoDkWzB%#w zgr0Ukg!(VpL_IUbC%MhqWi}DfQXx)H8+(F33PqHkPm>CAYsc#9`G>Aoqu886C*3~Q z*W$Bfwv10dxQvk7PUpX-eg2EpD4AOb-QP9;wbl9o&3~=_JLbPic<*@pe9LUL{(cPa zSU_D-k@m9mafpBQ{MWO&D0YYA=f~4k{oV6lFaMW}pYMKI?fChm@22dc+#)@GatL~d zPhy^|bB(DdF@654wXR*1p(WOz|3c$Ftnu?T57ePmrHwQ~Gpe2cnlc+nXkhD`;q(v8 zfBmRp{CxPIt8An$DfR8+C?FBKddZA(q$~al5U`!cr zC5_KwQB*?WZ{BaF6G`kWmUtY#z_-3Gz_L-)c<8sqel2IKhf$a0E4K0EKWddVe|1d0 z(RSckSAGNG<@cqztM!rgKMrW^L zj!u}X7&ld{ACyJ>VXq&2rMp&tK5=uZF}(bbyQ)9WyjN|b@=0OSpHE|*ndn_!Kls#- zAEy4y-dBfKJJp}R{iYgFJWuuy>(99g{aIK@x3H?^j$iz73H`b4N7eeX&Uk0zwxk`| zc;}x#zBu_l9kMLVKkjP#E?k}9^?z&rY4?(*U!a{VG5>VzH&Vj=HnGYyyp2<4P!RlI zJ&A%Hup^Itbiy?K87(HqyEgxH(+^8+e~0r=Kf2d6{Wu!8dj9G0>G`MUOh{g3zwh$= z(+w_^>Ndl_-<=l9%K4`ZNazFwNHC_tVMKoTmSplNsyF%cr?02z_|$t$NvMm>?0E9& zNEWft24=SS`&QgqQ@dcLWL zj~>>1({5W6dj6lAZ(8JP?z;0$LtceS{+_)h!KXA|GK}pq1ic4}dm~ANY-B$`OkjJ- zc8FoK+A@bY&>J=0JZ{75Gk$2p>sd_Oxp;fYEW_<-t!~8gI@(4u8C#fGNZq64FRtnw z&B$-u!W;?NmzIauzF+dsRr^cY_wb5T$mtiR%k^jjY;r2kDc`TX-#Gy*R@YJM3N$$Iw~v#139fl5#5)AX3g%PhlQ-Ktlsl zm?Y_*WBEOD>9&bv+U6Q#;{t?UVVEQ&+-%B!fvtR?eGYJ=MtgJYDDNL|Zgk-8)NEr(I!jbZY@ zz)s8F9iOz95dopw+vH|vGL7bGRQJb1?TCLiT#@|+-$fp-%a}Y2CE3eE_FD5O9&f}N zASN5Vm)~$Y%06daCze1)tlVInf4^dQk3p#q5@mj@o%FncAarY_AQC#6>~188zi(H% zD87wtLc|Eyt`Ps;j#qbd$Q>Hg3TE*whTa+?I3uT&ThX1IkyC{6QlJ`M#xogSUVOYN z8K2(6vwemA!T5YDA-S*P$l{SH)~d6ml5rLmDzWx*vaqKOst*wzaydJSPrcLZm|hSw zX37J#8?4sxfh*f2L{reVAxI(7%0!Ll-fnh{g|^wwFzvt!&v=yCHJKzsdC0Jd49kaz zx`^cRbbiBUQ0H83st6;IKs6*XbV@Zk|1Q}0XtxZMFWGAo8_lrcOTwx0SeNPU_`bSa zepbo2KvB*%TVpgh&%+Z_K%K9c)Gt#{Etc=r@VMJ=c&K=2ir8sn{&pwG_#vXCmHh6} zw30@~vmn+%b&Rm`5H@41N{i;*Lc5Wpa%v&8nfOg!)p(-aJ~TzTu@xX!ojHjr6lveL zX*eHaXiEugNs00h9;IrrE^Q@-OLF)P?esouTvvpVT_BOYxB{Qh`cQtu6TT;M$m`?~s74Aq zEc1Mm(I9W3l1#pudngOvBSA5(blX$kSg7>P!F*#%w^fN;>6(`{f67n9>649!(>Gq? zy(IA_PVhTr*MQes)@N za9S`F8IBZL7;iA;JCtN74;kuUW?A_T5J~sRZ#ein;-tJzB7tg1WayNL(tI22yiw*O zn}bz6Cr;%=&6_SYl)>oMrPpF8s+=e-DxdDUDjIqsg4m=9uOT8BGt;*BA2pa*V>1sd>=_|sI$jZTCu;J zpaJdcC9X+Il!p@6Q(~-q`-tHU6n?{(z9q8D>tq*5WUp4f7to_tDBoU7=E`>wD++9s zzZ#U;REeooapM@{&?+UoR$rh!<#0CMoQXD%TqB2Ba1R-b3#|xMDB&&vqvp%H$e0U^ zEa^nAMMftqqAMjD$e^L)l& zc?*?f^ZI8Y4&RhANGsun)HfC?eRB!lm=a!)LE%c+yv*xTMxuoGZ9uG!Wb6!6+lV)@ zl810`Q^Xv%d{gYGQNpeMSxZIs7kv#G`suNjeN&RXJY+vl_OTLfAchg$BE)**q=+T2 z6H6c?7Ms2OJA3kpZS+cgm?(3Jk-_qdx7DQZtPz_*VVKD_C2u;|OIHa&?)WMgw>if1 z6yd!R9x$F0#%G!_JSPOB8-&BeH-)jhj`l0W5UT7j`V1&is?dx+V9=w?Ud`>I zh3lN~DsJbEAPQEVO#7HXv-&Q|o0FRmx5GV0NkF%eQoV~@uG3X*ymy%-f?*oJ;jV9} zHu8FH1gfe{6wMfdc`q+-p`?mopJntek0Ak9;qtpw?=qdr!a}7iuIFXQy1h$gl-_02 zFRXVN12JQcJTPZW8Ak449a?C@o&2zc8gJ&TAt^1iZE%Fh1J%2{@-HTzqe+JHkZc@y zxpx^MlDFOX4OdNwMDjX`1gasCp;M~S6~Bb7f0BWfvwX>Z$Z%?Y%4e*1S+5Z1|8e5p zWvybk0Z9&b-8j5IfwMms@4eQ$=$GDQ(o${>&zY;~UDC)LEM(HA{j$Fz^-p6MDa5Fb z5mp|;eag4Gcd^K&dY1wF(0Z54^!8rza93sTvf&C!oIJ)#T%VLE4<%+OG45UZiQyS< zenZdKMRs|e>;j4G)xFDeD6*n=S!>C>ce$9up%r<76NAGOffgOyoE0_Eix}UMH47Ml2>! z%sbd5CzqEKwzNZ;y!SH7FYaY_O?(E0X=QKIKsdqtU6+ITSD$BuS>(QGBaA#?J|@h) zw^<;DYXSHT$6qPT<#o&js$z4(9fVP3hi7v`CsH3*Y+fI5CA~5WKnmZH_;E%1&MO9A z#F%(teoz%r#k?4{zFW7OjpoQYso=-ILrrQj);Y6%irj9a?AoNx<}f^nDEu$QJq ztQ$IGUD0JUVSuQdDrsTDk&VWPPiS%e7oo)u7&fZz#2YQ-Av_{lT#?XXgh)CYe#2|7 z5G~|&S_rf>EgX%(A$|F8Pcd4^4=vouyAz3K;fXs)V1o0&p~@j4)_`S{mlLkw)50e2 z&xHCCEg~V75edODq9JO^sghW2BtRdoCq5z8DPMqCBYNL~6Tie8vE(53i9V9Sne#sIf z)an@S4>jG%yJIaPd}ap;=9I&K z?I3}X`;;9dFmk`Z5+vkqGgR_&!XJPXuC@rPd_7Yjp><*kxa39|ePz?=u{Ir$@H6Qr zhX=aVtTsJO-SmN^l&vjyXz(Y%V_Un02%hEUH@xRdBCxzpV1cR#%)w{NI`8G>EtDwu zFvcFI!e3dGJKsuJ%GT~rWnrOG7H=Sny0-Q$7h-Gg_YF)RqeP0xb)>%b!(OzGUAiCu-jOF|)PX72;epPHbzpDkhgVKsIk7CI}KZH@D&a zliAw(#nxV{53*asw(Dwa?KCpq_zB4D_%5zZOlB13ZW9J(rD{oZ@C#L^QL4@>bV@$? zt5|nE^7F~MtKBc#!v=Z|GIAGo#`XX*+V$>vYi74=*?PhXXS|a+$G-bxW<=C;o?c<+ zClbN};as@q05xb9>l$qymQRb{FOH@*jHmXm*TL_C&!zF3OYoB%`1VY@Jz-Xe6*HM{ zX^uyKnW%C2^XzSibeL-0?5f%FB^LMnf$X#G{>e|AOwZKeF%%KY2-fW80{I8J$cMX6$-Q=^1H@YO(_GZL3q&xgM~ znflI@u!-+K!lq5#7tt<#$6p0rH;*Ru=KdqVj2nFYA<{}ga+*Vs_{{7qa%?F$51Z?1 z0^xaf9l$%0U#BT_&I6fx&nx|)hmLoM*ULVhTrd6@?LrV5#p5$tt;PhQsQBn6H_0k@ zJN?7uEbKOogpTROjTx<#;P`O7|ny4ie2 z=~Rg2$enNkhd;q?u!`@|k8ks=BAo5pT@~MWlDuIX^=Sz&7hnD5JCA(-l_&;4E8uMP z;7p5c&VpVUV!~fP%GHs{LU??gM!Xh&b-3pbc9-msF!H5tyT8Tn!1nc$GFLfg3s>#o zWQ4(%c_Y8PGCr!B%eUGxW8PLVb6hz85RaPYZGq8l5RaE!r`j#qgw{b;WtlIC7b>o$ z7K?}`s0$Qsg@mOc?*afi2Y$o9{kL@v7O^0jqd*D3yFke11%}E^;)o~O?ov-Ur4;N0 z3Cd?b^5I*<#%}~Ci#cT&U$q(KXFN132W#I#{t|<~k{6Cegu#)2R}XFjEJDgf+=nu` z6WcPIwser)xP6(QloLgx=B&dz)$4#UIjk^w$l(6Kl20P69)?K$o~FaotT)GQjzmm{ z6p9*8)3i(c>{WJZ#3Bc~Eag;2PHtk@LK7ZIkFX{Dj!tc8@GdA)Y#5lbN}y>DK_aBx%EDjO6{>MHsu81aMwUwcMI}F%(Wae^zKZWE)KU7pK}NF7Uxgkz@l%N& zvhz=D@8p=8^&wrZc%)j`0h2>H>oRf2?>~H7cxZp@ zA~Z?q!=|_ss=(u#PbPS5+};2fhPW8pnOEEGq-ZsBb3(W9>K=EtZn&Qz#WGS{I_lZHQF;4?tF#b;Y{=^U^emi z`SM7|43fNQHdlv}JZ~uDyGjz}(Yz7PpqM#CsJj4q25<*3sJdv)CZ<_`6gxS^67Rr_ zHCBB1BR&w~ImahLlFc@T(5mb;Av|~o61j|g3zx#0N^wcc%aBP+N?s1SxXh;kA)H+| zhGdK;??))kI@eJMwP4RiLn2Pf`Lof`1;suOtt8vICiT0JD-dm3l1+Eol2_{Ew8L%= z63>zlkPc(?%;3TXHdxU+g(D0JY#U_>OT``Szgj&MdXE=ZtXZ5!Wv!kmd%=1`zORtO z6`zRfr@JCle;B!*k5MxHICk`Jfy*KUI@zRA(Iy;`uJM9pezpJWNWd)-v<>^dC-=ma zxs&KvPoWB@%yY9kn+8vr!KLM#qD_T6zs$eu<=(Xygiy@2RDJp=Q-2lpIeR4Gm+yz4 zfnn1kUQt&Q=#ED&<-kY0ZG)Ty7OE~!p9e0vhY>meDhi8nvk-bVutg3UB}T8ji^WUJ zB9+3gj{dp+qB4G6NP!qUYZj|;LkCeFafX|OK+*y(t7pPjZC*Vo7{IbCkPIrao9ePy z{Ei_Z{nJ#fe->-?&&mW3@jaLVio6f-jv+g>mR#uk*WiHP#;cUbCBV}O#YoT+mWN+o zeyAYo17cScRNVIPlMl$0DP2X?utmc{ou{hVZ9l1$@of)`l^Vi*^ETq^6*fqIeBE&6 zZ4c^@c*&99@FtXe&b&IggXKabxz#*WaN5??R&ejc%q}eaQ8sG%wuc`Kg3rU-ZQlXC zFg+x@;m+?;)5`7-)+XKGFScM(Yqx#;;uDA5gl?h|%rt`!Yt`(Mhc)7ta{NSA)@-@( z4q87N-kN7}dlpi{tq~uMZ;en_Uwv!D3skW(OWyiD8>x4yu-Jt2&4p}m>#)e!QfoX! zAI7&V_#+7{w{iaMH^!%SiZVXQLozA#^2Yr(BD2x{{D$wMUvuVlRtc1_Dz+OFLR~qX z;#RBY+=)}@mHEC>}d7d61!JsG2XR(|_#tu|%J3+&*lok<&8S4dW<W+7?c$SAy-q_=0R+iZEzKP0i6>}MGB%(BRs}C7O76@y5c-RJ<8*RMgHJ`7*>Ivw z71Mz;6RG4rDPsc-9$e(oO}zqDNwjcJmk}2-z~q>E%dU{M9FGLqK49enHEU6%91X4a zpy5QGBWuW$rcV%~_^as8KRaBe&paRoClzcgKF-ev3xbdx1yTl0Xi~byDb|#3QD!Il zOcJJgad@(?fzQ?`CKj*w<+1F9w3cYuxbFqkr(%xdF$oA8uz;wfD!Ww^z$UTrP9v1R zls03BRoP4jyqTBe$8=jI{caNvn0(x;1w*ibIb6|$ozycE_K`+2GeG?;EGB=yLlqgo z6pUyBG%*;d@Tg{utp@QU+cx@U_QGCX(**L-K!>^?j8_6RqR2*v@*9rLO99L4ujdLx z!NcI$>E0pgSbiE__eZiWJ_2X;G<=)#crtmM-~C`RaePGarK!$t0KMyZ(Vj~E-iyho zcn!sf8Kv8>tY_1OScjmVY#iME&~Al&33$6owWl%IuD=R-Is3z9c^L%+*=b8X)o%&Z zJ452{y+G{^3$#8sx-HCLC1s?cWbo5&-Noc&jk}Ys0(lHQZ0q zie&dlw&%id6KXQobDu+j-y#x%)1-9x zyZgLw1$out9}oqyLz9Aci}0?rHyAr=(BXx}2EN{fUT-WmQ{Uf(mc)kRg-32megw-M zAAb3SQFtl|3SSaaQv6seX7E?Rk6S;K@WbCPnuJE<#mD+xBWq~0dbfzWNy6zd*tHG4 zA%Jd5RyP2>HO_D&Je~-og}{#T;Aoztvte(|sjEenRF4K%>qY~IhEP6s4b0F^@jbE% z-x=}L<_AEQtl_WFlg?|RSV}YVe4YW#f~sy!+-{6x`ibG%Syp&)g^9v=w&(J29U4E^ zbGeS7yF#C>-g+|gXyZ8W4LpwAJr<_;1j3{lnn+Ig1j!30!>e8CZ%)i5{3!L;h-1%i zMPChCl29>WSXHEC9}gklTf-55F{53hSDq{)-F)$7R=ELo%}RK-qp{gFi`Ry(T=+z{ zS|#n_jz?J)q2h*Vw1~to+{B0EId4Z!yW03n6pDlG_I5|<#X`OJtBZCdAxMu&zD}cA z4?=icsIGC^HaSA% zvt@eE0*dVqhSzFVMs-D3j;tYk++9h$tcue@@=CwCL_L*=A75k*{r!;(sZn;&ijr^o zh*%)6DIC+V5UN_|gwq-;Rf}Ce5l-aWGTBpH@DoZt9~^#bl`+HKu(9sPZCCj5k4Z$qChTX*DXsq?{{U9Eg+()5mU9#CmU!yH0OAELg(r3`tn4tkn?dpg_! z*0C{b0_6Q3cjT4d@OQnHo+|(P z^UCG-BQL`xvFk6DA2Gg(y2n=WUZsY~bVED8c5cjv!KMagsR8Ua^)QP&YV-4k>&H^` z8L7qZ$P#{~{&Ae@j+Ney80H&cDlxM07!+AO7xuAhQE1E>Nr^;^JI&%>*~I5iaF@oj z|C_pZ0jRVp_y3u4cd$aS8l{VgT8U{%7YoxAOKNK~McEXUChE!PVq(tJ*lCK%cERjk zqmH}iDrFYkF{2o3ikV8#ZkU!-mS~!bm=d#+%JTR5KF@mh-tUG%?RYx>KRWwa_w~GM zeb=+@&w_J}B31Xgvdw(`iUfI3GiKX^j({VVZ>vVMx~l zSBgR_rB)mxZ2OLc(@|tq4mwOw{#no=g7VLT4ia=Q3@NDftaJO+0wz;l%hccYzO=mJ zdVN_Qc>Re{O$xl9oQ03sFk;$8U_eapk@4oVIxH1S$S+!(nZcibYbUDKfcR+UAL}1# zFN5l%$Md%Cvlv%+Sc_hL?wQsiesY#t#G6P|f8l)qZSK_C&&%So$-`F5+Z*0q`M#R* zL8ZT5h@ZDOe|@IBmg%qGm!_BPuan%ReJoLEBr%t1L7DV6F6HmoG(Gz7UdpCM9#itZ zKsRVeWjn9f>YFmmQ%y=!U`=#r0AWGXGN|T4E{=U;k1CW6J?NQ{!~bloNE;{!^H*ikwKMA_Y#0&F+RI+2cBKXy z@p43x->~&OjX7lWX#sruc-Y4HwR5M>{`DHYkKxnuZJG`+gVKmNlt?Gmn5&?J`31(q zop@?AaSC6phI%)v2R~s9hOoJWaqzCDLXU-q`Cn0Gnfe-9T3Ev)o!bya zJD6SD#Mxxxppa&3n*fD+@r_g@=DNOl)AgxLU{9Ixu{O0>+n+yjmG(JqT!n({^}mVT zGvDsQ-9kl~9{&1xt9us@QH(Mzvmv4BC$5i+%(LW)j9AApAgk9@xrr7he3vtOxz|$Ia|iNcfX2JBTFR+G2Y%YoF{7voAuKLgA(ILc$7hCR6}~6&;06LC1pX?<+oIf^%BMwh{h+EG8U+z>3jCP>S-9!4RMXqSgCsRy>TD=n#q@;S$0Y*c}* z)lMs5!2?n>9#DhpBiAlS$Cg2u8XsCO)x~x5?*`;(xD~7O(*3(??u~p;8TlMXt3v+u z(VgL@okvp#Upb7%q zAKRfg6Lo$l&O}+VdR+%O z{Wqp~_`jJied5iP{CfdoP5*53wW|3NyVn2S`O>N~fA?;_bljJ1|KvWOFTIBz@Xy_iF!-=5jalrB|G8qr+=nrO{yu?r;t;x%>H2(^7nG-%zRFn(^WP%KFg@cb#8l zJi18#c@Ni*R;B4>$D_-yA1%|qwy&>zf2;aFq!Xg_zL_uPmzMVntMY3nFQhT=!NmTm z-KLE6lXSN}k4I?7dAu$2)9tc8BKdvT&)H5ZKk6dwY<~VGBTts;FRwbM^1a>UPuKCk zv>$T6KiMpZv4Bn0knC|kR*?R%VBEKPURl7_$BbSD!AB;jPo1d*5oYRD_Fax!7ELxZ3? z<~Ora3h*}$kMtL=$EbZ~(f*D*=FilgP+=O|K=K0x`{|oB$C1&ttIbQJ9L51k2IC;P z43=L^Jn;9L<#Y@K-y!BVQx>K$0hyC(r7azIRJNNB$xKuF8Jv5PS~^Zo4_%G2P4@b8 zbEi@)Ha|#KAJeT7O8Gom?}u$qqSuBmapBj8If-wA#`E<_?j;{0Vw__68&@c;s|zo< z%(f}UVNwH*f(&sQICnV#tV~9697w*vZ;M)M#Fm@W;u!Ii ztvJp=iw=u-swz zt85jw;1Tv6qKMLAGr87qxd&X%srfReO9b&4Si|FQ6qXYmoZ`fk&Tm=jNn&TH(3@m&$Kr`9owhRn zfx@t==ur<7x-Y~ibc>=;NgsH&RpuZL1Ic?7@=r+0q8Yt1&%N0LhP&eD8sY^o%W?lHtuN&0+;Mbro1D`lfq{=zJjW`Y@>-h~o zLoOH1=%pjCGSrQYa!b8pCOp4jWJ#n{&ey7StXG04X0}Kr zvz0M)Gm0DSK5A7Hc;U-4P2e3DSQD_TK1un;k1qZsW4g~n!Oj@Tjo5`x*Elw5YP}vy z8HQ88YE2+d{?-I!;5&8YsL}-5aYUCRzv1e$R75g*6OdQA3HXhpv;|*Y$~1vC3+bKT zMik@F1nRsrN1emRz08_`vZe`4i=fWYY_(d@sGAA*u(%utb=$beWMKsI4{ri8hC|<9 z(*zbQc*^L$Fk0ONem_{-1RkmPCD2TuXs8Vpxd%-kLO*ZNrwQnsWoGD7>Nh@;L6M}i z(QSPq#U%QfW72T&b=CxW;Wmd@B&s6=&==CeF*aVakh0v)icwQ4yZURT5LbGa|)8rv1AaiK!Buizs zOb3uxTE&v5Tryi3{kQyPX$NrPOEc(y=liT$T8*QE5$-CQZOloj$!xh_3=)x>L$bNP zv&RYjr(a^|Z-h}pzYGLxBUlCf^*9bByYU--`g)a)j9xnODx=@?PeC>H{tWu-ETp6V zE$kP7{&r(6S&+_=B-ip1L%*^H{f#0;C!FAxZL&}gi5-BsptV_Xi{=5_i?U6cuCjkR z`U5WEiSMmJf0ohxV6+$}YHz{Q9b*fJpy*}j?(XNyz(?MmJBqC+Bue~9I_E`^UXulAxN?Rgd;TfpfBN1G^1Vs2{_VT2EvLfVX35WGf8pC01$j|M_+%3W{3s4g*A((0 zJ*rO`y*}j?A+MD9=xOD|2p>|0{L4|(StZ~{JfuPX3(W5s;gi`i0)9$q6-%CS$!uk` zKR~KKYex8Qd|?Ld7Zt4w&Ctw96RQ4%DE1)FP+N@@N>XM*AN9 zwZogE=B=2!6pc}@$TGv5TC_)dKGII3)hjclyz!BAiZH@=Te}EnE8S*}Ny7JDD;am!Y4))_#1Ix2B(k@dzI=}Mn}KA zBKnmQ&}dXnjPN04^q=(04ElRLq*e8o800a+C-klae!UVbmOS~A*~%EYKMB_g{Ii~) zX#&IjRyPY$FvSSp6jS><3ykp1u{2{OcSgT80ka_?aI_Kr+efSk^uV+=0U7wtMf@vG zpc_XN+VdN3J6%O2qZg69%1yxYPmy)gK&A#+;d^P0I)}%twI-mfHNqER zgm1ROga~?$A+ZUV3tHdax15{k#dt7*2RsO%qs9xNhREZtJsLlIUlSNyBreeS|MRM);7}1iCEr zSdR!JeE088{TYy}*5)X0o+!YmCLqcPpD?ilXvcvWoI>t(n(9|ZuU~n^CZLok<4$G4 z2p>{z0xv_8W>p8!<{_;Ke4ejogiq*YI)J>=qF1-@C9{=lB`58iH66g&&�ylLf1m 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

    $&#dPoSX$Z-8_s>@a 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þz`7A=`jYVc?aG0t=3$r^t9`U>Q=DPBtG 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 z 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 z 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⋙Uf9%czt=KMTW$gv6=gp7eIfrip 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

    83yF{&mWG#Ii14xtx0jP0$hKHxf^4~>y7#(M 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 z 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 z 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�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

    Z6YXhmSR%TAVs{&2Y1dSTo#&qey9Nr~r-k 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%0D+@mS^U(_btY3je_!aq6nW;LzrN+TqPww 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 z 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%0ATsZ%mZBZ!_FgZYW)G>%-h^q%$*ZDyN&%aVm~w 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

    A;sP&$(~VWH|wAQJS| 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

    GW;v6vL@P~w|+rd46T>^B1S4U6sP(blbsk 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%0Dn&F? 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ꪪ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

    kPVCjeN@37@d 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%0AJkrEfb%_;Je*jeIJfdLES4IdI%AX!?- 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%0Aww;ZPst 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 z z8m9bb9PX?9*3Z~qKe-hS*zW|BKdStHI6Of90Y|&Yp?zA<8zw)1{ciFoY)9qQIK=+H z!LgCb^X}JrvEK51*dD6$8G(bxl&`?4f$~>4G+54kK%DaiWJj07r)0n9bMW*dOZuj_s6O^APLd;n+E^{9PQnAYa8U zZt{it2|N>rE^7V@9L2>CYu@@(`NKGcH{i%6HT%7;d_0ceT{w2Tu7B=t*dK0%-73oG-~|2*+f|hpIHGoZjzK ztXJZM?BNy}XEw_Eqj5C-OVOGCyb^l_U#~l0WtQ*2j}%U#g=M_9jA#_1=HFz53G4u!P;B{*4H&riFt z7t!;@#f;PY{h9Ubi*kV5Wt?8$XT1qHR7?AL9VhRQzr)dya{fQnkG(42kK+@y9}g#L zEB^>b>d3h+sUP50I9gZvv)H*yK8QVB{4e^r2e#{Jehv2USsc1sd7aDZTlM9s*u{HI z-cWhyisnQ2$USiKUU?l38p*#I-!I>JmHjrBC*znSe}b(ha{j+HAH@&h1b!8V2W$QZ z9K#j<;rt#~{wQ|wTAaXVaCnI3Yy7LekB8yVP~~x)9424D&T#pzYwZ6Cc`^?00i0T- zJoF#OTPkm*-ho~2kDsw$UGw>JXuUA5gFX5^u*>~14JUa%Scg+pwcbG-!+#l9Q(pE4jz``s z{#iet8Afhx)BX7oPU50D)%Uk6ABe*@gtFKBEgZ%FW}IHX0qfs>qxu%-6Tu0d zPbT1G8Lht>$H&WGWSm~F73*Ec4!$Fo)_21?-<~*HOrLM^4E74i+f3d*M|S_e`hwFE}{8;IF46ir=;>TIEicJR^KnBd^8U5cI=c^ZspOuhuh%*FTl|Z|3~=$K}VB^bLsWWJ{&3_7b~WI1iRSf`RrXB=J_n|t(v!X z==r8z#_8h)9Ir3A%lXa0_N_Xfw@n_=_5L15dA#Q>uJux^S0A6o12Rs(-b%3E3*=S# zyq~Xe16;a<*0XUB9L5W=gO6sMUf(XI{n;hu;7)lUcG4%E9<%<3eLlbMJdQL`-k_BF zk;?jc!&IECF7L((em+v5wB{2n^!oH6Z1etQ2~P6<J_i6pUa&H{Wl~>^87WoWL>?n~v zez?5)_AYrWPW~Z(fK!)BW#@C*oZmlkTkKaYoy}jw&Tabn=yy0=S*}c?-_?}vFf*jy<)zZ<(-Ld$aQ|V{4TB zJ&xdtl{g+AjIGg{kK+iwf_>bmvid1J14qWFzYqI3bUX97D~>#=`B!lq|BORpl~=FA z`Qj*!<1N@4r}_VI1h=TFzK`eP6#fD``c)7uh_?Rs;h5JR6Y(z z@CVq(xoT)Wh1+6hlKL;<7(R*vY~P`Nc(UdPVh{fhC-DU{KSlEmYI45V!zsKQJ5x2E z|4!y{XB^BcrTM3E0)LLf)0G#kt$7dk z!~tH8!!tC0+RWo{9rlaIV0)(Kw_^|Itjj!Zh3%&`{~Y%4mpH&>?o!{GrTIs246nlh z{sV_+YyR$foG+e&lXw@l=V<=syEPxh9dQD`j6=_8{(CczE7s?H@#8o=SMzb~;lIp0 zZqz`1`&rG;z)`#(Cvc&Lnh(v>e0S{PWjKz1#@2J1uYQmE5gf%n-ilNBKkPiOezSYk zkKwsEz+d2SO!KAg)4YfK;v`;!?fIHNi=((sBlQz_9JXK3{0G>>H{GxK0Jp{A7d8I^ zj^U$b9@~x8cVE){AROQ~u(Lq@3#&=QxIoHeRImY|egP z)%+Oj;qBO3s{FdU+iV@&5G+c5$;d znh)`Qa0&KissAUA@p`*aTg?af864*Gx({R5(d+MO?KJQ6dVHEOug4GI6fWCd^A7*M zIv6Lr>h*d8hq}upJFx$jdc8gXyLc0h;~Ww8|D@)-V|$$Z7Ip^d_4+j&!|giK$BVGf z&;QQh6tDN2cVd4}>GgdKyZAVcbGu|YBizB>0sQi%TeLNbc@P{})OYa|U z?V|Yvuf@ApZ9-0sEQ`oOkI{W(mC{FSIq)t!GC(G&m#}pi~<5hZ9_5NiQcKQ9n zKe4k#`GXIuALsqf3LN403D04xt)9Oc_tm_MpTh}!9NXdnz#G0 zJ|2nVcqg_xXui-RnvdW|u#exyDV(!^dOrPpyYyQI!fp$FzGvk@>L)98&+fM?4(02W^&ISV zlDC`robru>)%R|c+h9AFya=aofSsF^-~PDzaXbv$xs|_#WB8iM^D1vYME%Ik@&X*k zKjCmM<+l#iyj@lvg1s{GZk)&?U%=55vOP@wpQ3AUdBze-m}<>Dc_F6 z6_uYg^Q)DYjk4Z5ayuL=qxs1=SzmtB_`K!=9Qsc#G*auOhRIE__n7=7wpf21_ID`% z7Dq40`JT{vb}1eIKI8K8FdWM#FT>#`auNp(^z|z`O6w(0=;yQDjLTKYe!UjsMC+qvAJ*|8&j^S^%4&#AAtP@$`|7}_x}N$x>@r%W~lErm+Kiv)gOfY+m$cH!K=!@!0}s^ z=bowc{F{_F!qJ!HC$LpmUWZddGc)^q-pTVd-Pc?wQmmN#Xbem#`n^~;U3 zi;mJnVE){{xc`m;b=ghh_VDtrvYpN8uE&KbGOdx9aaVc`?mj#qn}-r5Ck+qKe!RJFfauuwPu~ zw*lL2xmbO>m;5A7;7@R}xAHtoG#~FHx53`S@)8{GEB}OjT>Vw`L$2~s*u~qi z&(D9ZV{5kNA6Tk>6wky-ycdV(Xg=R-n)h*g9C}9ieC**barjx~#h1~?J#pfBId&DpNO4p@*W%+TRi)C$-i9laoh=q#wlNjqxd@<;BqU}kBrxRKO8)# zy{0C{Ax&TktI&y;hmX1_Rst(p4y-pc>a<;xkT*Kfe*pH*0+zRmsE2Kx_b ze`AcB>i%7ZotV5oU&p$`@kmdHH*jSHlIF5hDp@inEzNvl` zKaKujXY@4Jk~0p5&Ld(^*%-Mw<#IOogn$HZ`OLHXC%xhPkBi}T%B zGW&QKgk8K5C-7g`j%)s&x7GLX6dd4>aEQm_C6mwA@yooUzCTB9iY*?`k7JMd`Pjx= zu|xkj4!D1BdYAK?rS)rK|7rOl93!8I9r6_!XWqZ?e6o)``L52t;wJXLT^@=9yah+M zmC9b)OT14X_r`I&5+^>@{O@M|Gr8V2_3eG~bR6C<@5Z46a^CHl4{#40`&{{QY#o$O z<0!7PL;VDvgu|CLpTIGk^8?LWSCqHFE}nxEcs~wb)qKGZ)%S5H9Qs@N0-WUc;f`SE zU*)9}>PIboJ^SMTzk^f!d(~gquc7(-cC!CFhlEg!(n8M(+u>=*aI*00K6#Zi15 z2l%#K>c{@m{=4Dmhw>C0Nyw{l0`JEb^A~aK1I?HESnCJmO>lU-^1(Q=L!OUQ9qx?A>;qPbf#a^y1y8hpAeE#0{eK>NX@-f)X-#k0N5huuhH96~5 zKBD#FXPaf``{L9Ed9g8nzxzv^{8M@8sQUIfxh+od_pN7RuY&fo3y1S*zt?g6y3YTe zZ?#^`;(V}`M}7;3bIQMC_a?dOcbpIN1F-d<)?a~Rc{P6=hi{O}e6M~qhuj?p>~}u) z3Mk)?-CN|Fj&VJT$_@?}ktbq5zq}d8Zk5ktkNKKEXuU{r<%4jju)GS#i^(T&l)T(= z^__ysd*X0NeiC?H{#X>^6BA4%zZL9Iq(DC)E#^ms=U%E<$YuK$PH#@7oO+Eu#la0H`+iQT>o3PsA4Iza4u` zmH&-{=JfyM_^s&URBL%Vj<%8i#W5Z)_gzxo?xcJYPIQ)cVDBOMnsIlz(O>Gj&EzTA zW`7^zF#E}IS@ZD+HQy8m9DfG3x+>p|{cdvZE9!eK4u6tem z(|8;X@CSGuzJ?RHk(E#HfAJJt74I_nXzf2=4$UWUN1TWGc{qeW#U*gA8`QUP6CB1< zaRa;qujBgvgMHjEr`8+C{8${poA4lf5qHP6Z&d#X>y5w;`J1>EK8s_V{~fv1UxXz+q#jz9e zzc_q{j^8x>IYZfgUHNI8s3(7l!}rLAZ(+W<+#OpjfbH=j$sJs9NPs+!Q$H`UGpEH)34<^WCus>1$1jpvc z1=F89mOY=javy9xE3d-#Yx3{d_2s+MpG%hA-wJsO_EyTfvAssVCH=W&nR#!$+#AO? z$jfnZqnyH#cjU(D&pFHVlbhw|aPWbA7+X8#a_P@O%gl#&$pei)k>AG79{D3-tXZTt@3z zU-Zb{f1@)_=gwB;yKvRGTqOOuZkarcAHm)c<(qIMA?Hnh?ptO)nv}cZ?tA4`*v02F zPM@F4eyXQG7cOJ_mY&)DJ#0L=Ro1Jp^QHEG28X|r>!m*@F4K>GD^I}garsm1{4E!( zpm{65j@Jdp@nUQjQ2tBC>GNC2^{iA;{nQXWf3?G*BU*oK#_9Rl%r7T*u4=s-ZsYj> z$i1=sx4ap9hqYb`C%9fUDybjtr|Z)rKeqx3EEKaVJkK)i8xl#?yyX)mK z*xw-U!ND7HsXH_ui_1fC_#Jr*cDBej*3^9DeYpb;w#%>LR6;(5o!xSSJJnC^m7l@> zXYw&@9gu6)(!708_HgKsd?Zj#_H)av z>!}~)kr!htpL`l8^2>Ga*1T6ho{b~7$X^?$Z^HC#Xx&y{^P!L&#a1DC7mgH`3pdbw zyomf5b{gK5U2h|f<<{@F=WNJ+ZjmE6T2NkU@{s&1c8bdN?_qz%<>l_> zc*W%**eNY<#i25CuKP3};7&MRR{1jQm6LzRVOwt4h<*k6X&k#vK8%x<VMB8n2aa zY@$3;Ms9_@KJv5Jd6+(S`^rThP~Udt?l{1&;>aV)0~{M5S8A%hJ6IluBO~R_*vB_C z(|iiI#?BL(UugWKd=mS(PIL963zUyHUM9bZ{jb|(uh#_}`AlxvLVf3e{3>=2%I7mq ze?3B6f2XCK$9zA`IQ{kTm+N@DjhA)E9`72C{MPKg) zKOBcx{|y}fMf2ydeOlKy+*W<>g8T$dUX-`sXrTTL?KB_%QLdA5`s-u!^@x&NJf2_2 z$wB)1e2Lwf?XuUqKzpqhdQt9;6RYJ7IB25deU061?X&%xJE$N2S6}bDupjD_%|~Oa zu>7u>FDPHaaq{{Rtrsbzd^}Duza2YybUtUW%l%)xqpnAk>(K|hcqJZ$&)^6ScT&GQ z9*Z5EzzuNT&YEw9J7=7}A5#6aza=<^e__4^^LIX^d7I~_aoBq6!R+<>0Q>LDdAcya zO>T!h{3`Z$D*pvXKa%h0s=l>X9*N_48;B?&`Oq-#O#VH*$_Q8OPce%C7$=4!4y9?97!5_fX&4A~(Z9M4p4A9p%rl z)k!YaQ~f0Fg+rZ{ufkD$2FG!oUg{?v()?r`?IQ2Rc2~JXZ_S6h$$fCBySxGi_#%$= zP<~$@^{t-r3>?J=aRQfmnEC0N?~7f$3McUy9G;>1JNv31!%tvqrt-}=ivPv|ZtSY> z^LcmEacH*sd$9AY9O|d}ICgRBZRM+Qn9s*JgJWBjhaXWtg(qWcSmEsB>0|8T{QWhb zzz<=2xaJq(82$lUBb49vsQT_RI(|1CeNdi?BW>ihIDrphi}}kq)>`xB2Wb6(yd@5| zR6YVnTFI~A6#0k7D-8eNtE;LZ{ z;fZn|Z0*zUySdk2+w&NzMi1jm1hJn^~mcX2@f7i^Q49IW-M1DbD}aeBRR z{664Va*yYOEqo=kM_z!U_H!Z{7*&`%kOi1bh5F-tpM|UHf^<%=7nnf5VAq z)vr8}_5Rd+9~|QE*}h`DNb?7c|JHo&N$RIK-^Mt`-`|~py>ps>$IL&c_0HlDe{Z+y zWUXhQ(?BHr@ObqCeo0T!jP9dC`myWB!j?!ASfV% zlH;HP3%W3pGr#w__f|bsx1LbX)BE4g^>uJQ{nWX2>&A1=J@*`gPni6>KQ;K!Gxhtu z$LsQr{XoBO!{8$(|L&U&9+>>V|84M+$wzjZLz;h|$rrY6@L`ib?(Yp=+PbM4pWie1 zkij>3g63b^*1!Lm!N>+^hr51ZdVVep><^AD+#?O%WAYKc#Ndsu>heBYJ#XrJm1k)Fqo%#?ZSaQ42lrHi_nLff z|7h?bQ~%#pIMemH(=&B>gD>d!op10F(?9Pqc(2KC_jAFbPd)D}HJ<8~h-H&ouY~gYRYVR}4PG;2Zv>=Fbhz4Bl_>8w@^T@JWL&FgSj; z=0Dfqrx?6p@W%{3WbhT9qo04b!S^-zu))tY_~{0J&fud4U-z))e}loxf|17#eM;XC ze}TcrKdbRSSHFKkE{m_ z{2+r*8vIg&_di5G{|$rpJWS)8zF70`eWb?g1|K%~n88b>{{1o+=;sd~(D>d4?=|_* zpJ(vWqxA1zHTbB(r@h4Rn|zcj25%hH&mT2-pUEHjGlK`~`u97(RP!G-_$dbOG5Oa& zVer7@U%%?h%=el6>klz_VDhiOvijZRU;nnjXPEr!r@vhD4@~~`4TJZdqwDhygZG&H z>%TI1$>d+Z%PTbhNrRte@ClQT{nG|7Jw}&zjaQoI4StxxCrm!}R~mf$ar*iHGI-A+ zjc@fT&A(*wub*Y`NrT^I@QEkt=YM1H@h53~*CU$$*poGWn!$UXqVcB<-f!@AU#*`% zYH(rj(o^;GM-AR*@UIL$V(>lw%6zZE&o%grr)mDL8hqH`TmQ9w{)E9>1`nRDpZ~DI zhYY^VYxMKS4Zg3zd!M17f04l(27lGyV+No0TFt-5S$>TB}tKEmLmCco~h4L)r0>we4NBPPG@t=?ej z`vP6wmcfG;YWzNfPa1sbztPX1H2G8?VDOO_>*xQ<;C&Zpe38LRFVQ&uTg`ve;Kv($ z#!L0@A2WFG%QQaqjpq9d{!@bwy^7#@hxTHu(Jp?|rTQ{jzU1^)q;%!TVpQe}AdLCk?*P;6tz1zlU$p z{CnP@@#73$`WuZuYVb*euX0pBzweFu_eU6f{I)k#``_Ofym32?e_`<6fyQ@!tL8sx z@N*14;}N>Nj~Kjky2eX?&-3h`KR5RqZzY)h`ixxv{y>BGXBt1w;Jt;$Z!q}KP~(3$ z_(-bpZv|8Sz0CfcyiMcS;2nea8T=Z9_Za+HgU>YhvTxV?8wMu^pJDK-!4EO`h{5{} z{+z+LF!}P*r@u#k&k=Ke@F;^18~hrBpKkEi4ZgtO z>%LdN|Hub)c@Hvp!@Tdg2Jb(rfB$s#`-^q`PJN%|Klv8@`+W@FYxtjM@EPX!4;y^^ z!ZX!;xk&I8IgdW=F$!PzA9Q&~KQK^uD46m2adZCh3WJXu{3Y}J-gC5l@b>T5&%eR^ zzGLuFgO3{gZiByT@G*l=`+$D`-h19ny?@oVVCwfp!+*yQYW@=s z()P>0F!+o=)%eSTdH#fX{wBvXzR=)5H~8aE(Bttnf*FrT4FBg0K6(1GdjI7E}_p5$FKfm`U8sFdGrQd4& zT!T-BT0j3+gO8muROK&yQuA+IPGisDW0%nQfWb?b()gtYA2Rq~4c@z?f4{`1ba{s_ zqj6yH@ylwwV(>om{#O`$(vw;xGKSP)IcLpy#N#lzQ-g`*n z+k9F-f5Lp<;|)H1dHwrm3_jxu8lQGtKY!BT9fS9us(=3{gO6WD<7<6JKYzy6HC{3J z=ruHcpTQ@7PvcYnO+P=lj>eBL_|Ww<{yT%u_iYJ9(c*Zdo&Yy2vM_dZtR z|1^02(=@*MXZ7>@w>5s0!Gqgq{1$_k%=cYn@R2L(-*5dn`00iQLe z`JN-@_qSKSpQ792SLXK%%ZX4Ss>a7aDxR;1dSl=0ElG#|=JTFzs{l=31V4 zr@{NKaS7G_KQ#F0jdcBP_h0(?V|z7THF*EJUjN@9nEGGiOM1S2t9t$#`uUrDOY@(2 zyS^`Yw!uf=r}4WD-v1aQFML}+f9Qag_wHrz{y>-aY=ifC8h_s4V`u8;Z}c6_zsJ|V zuNZuW*-zeS@c#Sh_g(Qq{ruqW8sE*}BTv@f_Y%Q;-!U_Oe`xT>4ZiPp_3y_GeuZG# zci$=dReOHT;FIst_}1Ukzn?g!@uL+c87BY1w)7mqS75$=@H~b8#yo%WyIP)ohrwrj zPviFqrhX@HvZ5LzT$r?eyNK3Z=Z#qYT>t9_{SEG{-<5u z`4)b^g_kaBKYuq1pKIZFS@<^=zWw*xEqrwgU(dofvG6S{d|L~L7QUl}?`q*cvhY3&KiI;Lv~XeJ zRSTbO;X@XFmW2;n_(c|exrP7Q!hdVww^;Zc7JjdVk6HL*7XFllKWpKyTKK;#{5=c* zz`{SV@UJa=$;-CK)8#FERSRFs!Z)<=%`ALd3kMdygN6Ul!uPiDJ_|p@!uu_Jz``3A zKF7k3xA0Rf{A>$9-@-4k@T)BRIt#za!f&(idn|m+!XLBnr!4$M3xC7H-?s2Y7XFci ze{JDQozfmZSG4feEPOo+-_*jVTiCVm?KQqswV&P7`u+YEex!vDSa{vS=UVuXg`Z{N z7h3og7Ji+D-)!M`S@?q%{-}jNZQ;*b`0Ez_mW3~}@J}uLI}4w3xpx2VvG8>)d=m?w zZeicTce3z3EPQ_pKh(mHuyAVO!orWT@L3i<*TRP^{7ehK(84dX@DU5Y-okIO@H;L1 z0SkY`!k@74XDs|h3xD0h-?H%cE&Njp|JK5ny?lFoT-n0cvha;8d@~E**22Dp@1Su# z|L<=7zR$uBxA4%ys}|m}@S`pKBnv;o!iO#VLJPml!bdIq5et9G!r!#;cPxC7#&!Gr z+`^|^LG@St`?W26nuR@$Yk4!V@Ler@9}7Rw!VkA_ZsBzcpKamCTKFj%*WYu2g^ybJ zUo8Ah3;)u>d#>1SubW%=4i^4n3m>rXqb>X#3%}9AAGPoa3;)u>S2(p@-|JiWbPM0! z!uPT8iiMwK;TKr=^%nl1g}-3o3oZO}3t#?9?eDp^gzhU7^U8P;$Ygzb~7XAYZ zKh(nO7JjOQUu@yGSoq@>K4IY>Tlfll+V#J=g+mM9)53pj;oQQHweSlq{CW$&%fg?q z@HZ^{zZPD)YWsVxX5m{~_^uXyn1y#N{2U9v#loMm@OLbH%GKKS^DO)b3vXKZSr$HG z;kQ}%qZa;>h5yIGzq9aFuimcjX%-GGd@l<>%))CHew>A$Z{gQk_(K-{oP{s6@GmXA z=Nj$rxq*cv3qRPxI~IPLg-yf? z!jG`27XPQL-#>5RZ&>(33;)2vKeO=CwcG7^IScQx@O3q= z+b6Q{gDt#b;YVBeg%*CZg+FZJuW4M**Kb?+`xgF*g@0k;-&pt(*J-!MJMXi!^e*V# z(0icwLhpnA0eV050qBF!G3Z0khoOIjJ_3Cd`X}gP(8r;FhW-Wm1oTPhQ_#OcpN5V@ zpMm}j`giEF(C47fLtlWt2z?3qGV~Sbs}Lb{mI#xxL};9)6VNxI|A77z`Y-5P(6^!Q zKo>&ag}w*_ROm|3m7%LZOVB~+@1PGt$Dj{EABO%B`d8@F z&~fN9(7!?d4t*B-9Q1kU3(yy#FF{|1z5;y}`Wp0g=o`=p=$p`gK>rE-7xXRY+t7EQ z3!(2q--G@e`XA^b==;zQpp(%5LO+Cl1mS+Ygv<5PPobYdKZkw+;dZ_BE9lqIZ=l~o zzk`bT#Pe&^4fILca%H z3%WLR9q78y^`PrRH-K&k-3ZzX-59zFbQ*M1==Y(UK{tnP0o@Y16?8guYv?x6ZK2yi z1IU3~$b)<+fI=vOVkm)b58VN}BXlR|&d?t~XFzv>{t&t=bT{bk&^@4gLid9H2)Z}) z|DgLo_l52UrO>(1lb|O%`8Me7&^w?#^utx5 zt3lU5fLDz?F0NoI}5wsV&F?18?H0Y+#??X3(ZVuf7x+Qcg=yd4T z&~2dGLbrnkkOR4p2l-F{g-`^=Py*c^x&w4a=uXg`p+A7mfbIhQA#_*hZqVJKdqDSu z?gjl3bZ_YYLHB{~3*8U8KeP|}W9Uzy2S5*m9t8a<^kC>A&_khzL4O849C`%wNN5?_ z52er$%Ag!7pb|O&oe8Z#e-1qgT7}l2b!Y=R3)+OXplxUeIvY9%Iu|+*Iv;v8^cd)| z(Bq)TLx-RzKu?681U(sg3iMRyY0%T5XF$({o(25{^q0`Hq31w{q31%+gPsq)0D2+x zBIw1?1<*^NmqIUtUJktidL{HK=m_*`=&zu^hF$}`7J41@dgu+%-#~v0y%Bm7^k(QS z&{62E(BDIEgWe9k19~U)F6iCRd!YA1?}PpUdO!35=p)cap?`ut27Mg*XXsy`Pe7l9 zJ_X&MalQ}wW9Uzy2S5*m9t8a<^kC>A&_khzL4O849C`%wNN5?_4-KIV%Ao=(p##vF z&CiKvXF`7g{U!8l=sD0~=(*7Ipyxv`fL;N;5_%PM1bQ{}SI|qLzlQkljQ`ue|8M{P z0rTV}^uN##p&vm%hJFJ56#5zTbLbb)FQH#SzlMGT{TBKiw8VJ21awL0QqZNL%RrZf zPJu25T^_mubVcY?=t|I)p{qc9psPYxgRTx;1G*;kd(gF@YeUz8t_xicx;}IR=!VdZ zpuNzIp_@RbK{thdAG#TIbLbY(EumXMr$e`fZUfyGx*art9LR+{$cF+bgd!-066p5O z9iTfxcY^K={Q-0abQkCkp}RtNgYFL91G*=4FX)e;dqe*Zx({?;=zdTNoeMn)dNTAB z=xNZipcg_ff?f<=0KEiy8T4}K|Mu_y+rR&B|Nj5q{=Ii;dHG@Yi+9$xw$tHi;jgA^ z2OMW>do$nJSl(G%Im?NbgUpTNEDTFG&fGHc!{tG=v02<*v3hGe2P2-(*4NHZ#kt$%!EJYQ+Xq2|9hFfM=T`N*EPlGSzUFwvxf`3yrD_Ey(#_>>78{#Rc+Td^cCjq~ zmRh+EwaU`a%UmzZ-8_twv|X!>?M)}yUZ+R4(y~|vDn4I&$19>JD2Hwum&I`CwHW;@ z-J%V)H`BGPgFC!Z-WJIh4gIjpV>k7Ee;9}DFH&5==FZmkipA?m`?+3RdU-L(<2*}- zjhY@<-6@vy&Gij=jpr{dt3Q;Rg?g_Ss{xa&tZi?utZl7iPI#c$Ufw=0FSatpkx0d8 zgv9kzFV5pMW7stZ+lbfH&MLu|vE~F`5R^geMr9iNexn3co$d5dsye~I)UT>=;93<9 zsxLTuWouSYhg$wV?TGj zGAx~77&&g%X#Z9tMpgM$C8MeaRjWp{YKtYdKO?R_qbeh*3a!dWVCk*`4BzZbmV;th zo}=IM+@-qY(z+oG3eU?xbthzJXZw#s)sp}9#Ru2SK zm(-8Q%xM=B!X!gWEvBun4CBsMMpdWR1;%u8yTF)dD6pEGj=#LjMp3X9t*>n@vv6qM z;X0Gu8N@PA^DJ~jhI|%>dExl+=#!@v=1!c1kz1sppXcma{fcpP zF_e)w)WsWyPV8qv;0%i}4x{-CvG*kkHv3Z5CV_e-6=uqX!$FzF!(y0)?OjD}lJUWn zwPjtw^^)&ono-9fDcHLLKZw{N^0I8zQTVEv*5Q_YHcY%h?0R0o_{yWCy;@XN>~`C5 z=itWj20NXq#=^}#Q04F?%=<-KyHQ4`u^q=XGLw=RwpPwBmUYvqWu|Y_c}+$cqYJj0 z9_(u?tI}#tOhJnc_OO~Y>#8JI_Ta@zYEB!+mEB|7v>87NU1^cNP1za4t~A4f?b#ZI zp4+GP&93y6FxPYXv>10i29U^P40wx=fmYA?A|%e=b4qwyxaWLnzKf&h{8{UVRuLML zFqmiIYxZ0qQ)RI_`+Cx?#L{treEVWk&TM%r^q3TMF^zz5u@MkTdn`Nx!i#GJgmaI8 zXweZ6Ej|LOp7UJkxoGhr(3-nZxX|2=b71hQ9P%A|Jol0T>W*HhUoT_v+ER#bDwAtx*{<6I@M^&PmjoP+V~;+b)7KPjy- zaWDk%>b@0kG46WCm3lN`#9DZsG!#3xpN!XO`?&wsA+v1o~%#8ooeVzbw*C}QQ7f_Aa!HV0F%*fO9bw!X8eGnkOmE|!hg zMfU0;@;AqXvV!)lc#Co2WxyTi!Bj}s4cE_=?o*Q6V&kB-iX+JNXn;-!D6y??D|ERp zuC)LGtVivey%5hMs<#*yUJG2O(S33>CH=R!ku+ zdQ^#U3y+87Vj2$~ro0}tZ*;4tM7_QhZ!s=D9-19kuAE!sbfAZ*7%uy)N2$x{iWlU= z<_XX=qpexj^}^tZPDMG1mk-jsD8nobFay^H?`Z`!2ZD!~*rO@!f#4w(_Lq{n+zYRf zoJTc`shqO*seQ9Q5eWNNyv4Zq;H~r^y(W0dh<7n`ojUBC+m7WS7WQv}PS+{v@M6$~ zJ*;^>241rVkO=!%yv4X{D~3AIc06UoTde2I7}%^zk{PgANv-LNoY|5~`VD|X-PTOPr>puxP+)A9h zIA$+`VUOB3I{?dF|BAO57v3yfPm54HYiycqzorM3IqzcVL1fGxZP4ihjDYIF_`7fX4SwCiJr4430!=9M1)TuB+YMZ@1|ijZ1=?b>#+i6fdU zy?iUBEh0NtrAayEO0g=EIMyOcW8h}PIP(XY7Y(C^$4HO5trqFo;v}c)hS_kzx|v0) zP+yv@rdwN5J0;vL^sS~mT~htE$ZZRLttn4`?Wle-XBMhor6#NI-NucRucb3~SDKVl zf2%UXEjBAm<@Cpz$|)IZp--(eK=r8wo~ZJz$|4uV;&$V^MVa|o;U~Q`H?J}fjmkSa z-CRl4@wgv|dtzLOe~TX_!zd4nr0o|o$wOsSE;X!5tXoqFDk<)@F^)k+7{-I7;bJyr zo>ax^##EnQ6;3lm;!v|tb*rVTQLdCHE_n+zYrQe5W)*)}9H~UTcHIm&AJnxZ@Y4i@O9P^nZ?yQzDZzzLNH2zN@Hg!?gxTLftqwH=@*T_%86 z##0nTemwLU9^54G+H%{ZaS^KZfBLwvTzNya($8cuUeFEA6$yqhI91!05mI**S7h3E zjGWLN8294l%nt(wka%OdtWmy;3TCbCQ|CRN+%vdkDq5qK`(x%fjs1kCPs?oJ=R@S? z#ADlPPf6i#JRk6LQbfa~WVmxJiM_l1JZo^6Zfq25IZqBb0CeL)5eIph`@`xu>CAovH3}t*tL}6^GrEn+)l8AF z$(xe;B8t8?BM&+*tC3!ZLN7mL zXG={Zmid&^$q*?y^hYW_OTRoUZRnY&SuZeQ!oy`SmkN8nSCqpzvOMusw`J)@nyqYe zGY%fvgHpFF@;FP;nh-GTRab_3qOWYRN$Xo%Fp6G~lD`6Xs)TxBu3C zEhkix_Kf>lT8^TI$*5nN&8-eSfCnRPq@4?q$#sF-3 zkb?-vT`$WmZs*V+1KB|RLC#P^g>(WMoWtwp?xYqlHyqv7>O!xc43VeK8pffpA+;UxUKReNbHZ!1a#yf_F4!%%vr>J~jy8<%<2eN#HM zzJcpR$^sG$nB-;d6fX14zJV)mu5SYe+<%e++8249C{$Wi$-?Wp!-%zMIN*v=b1F28 zaom-y<@=@glffLyT9dh4fXV~zpruTr+*)fI6;PZjYa$#XM9#$-^3Jv502-I#Rwo+$ z-y0cjC1&z+wYE-YAGeJT)ZPWZS|$^@_Z$xqpS+|T;*rp5FyS9PFKbPZyRq*@Supfz z=EB-W<@rFBUuq2@VjX3x4%oEl5~obP)LNg$uM>$Z5*W2sX)9%=h!SNd2tAc z`RXpFCj$rbiLH$0!uEEwa^? zs5&vz6Nx1vY5;0T8Yd;KSc^=ZWyYPnN_5uX*fSDtk9zm;!e}fN^VP!a1miR|R$bL> z>UvX1MHq)07d1IYUM~T3d6NC@!;pHe+4Dt2Z@2 zDu_H1%C+foOxxRiZHYr4nusZ zQ<*&CR}a%_$v{Ss>jrLuEFH+v6Z?9r0qPk(A@GTlC;{FZVh=(P3KBQX?aS=42Q?y} zz#_Uhs%wPq>(F0C5;ek9$hUPlI!%>0Mxz}Q_(W7SwMsI0x$Q0T4c*mVyG9W|+R;Mb zm0_`qXd#p!8`adkb<}&NN7grUOb7(ZnbnC_x2MCc-W-mrIv5c$qMF%-Y=|Kk(ATY0#N!+AbF&+4EnLiz3%O$5R1a6S&so`;d-5LKS>0Y?Y@;spu4AGm z4)Xrm43^pB9-R~0bb^XVAS9<8u*bAUSZCNP-I7U`4F`b;yG~SC)~qos_P}=s0~3g2 z%%;STV)9P#rb4_6oji7!m`!P8(y)h9HtJmrdrFW=*KgRfcN&XVy~63yv!3@KZ;q!r zlhKo{@2qXl=+M!~HrwIG=E}i2Hx2#5D#+W67f#Ug)XK~4Vs&cg#|icd4*Og;&Mia3 ztPw~VvU+1L$MJ^nOu5H2wPY)6K)D!lrH_V5SUB!byo=&udJs8b>5jqLp4eS{VGu=U z=!Q`qmn`-1(B%}g=P1+`#l^#@xlDjLMxjKL5;KGyrHNw9_A>rVlmi1f9O7W!D+5nX zSWv^-Gi`eJb2fzfi1VY9=h(&2ev{GBjH=V@?pMd+Ddxn;Pm?4}IXbW+=ykeZduIDX zHx6*fL3xbv*=nv2V>r6KA5GqRk$l7)P`ZAR`%(pJY!X9uxgoE z+o@-9Vak?;N1biT{6L>~JdO>sp#;0CHBue4OpZfFr&KQIcd(?y0ORxrr$ml%g0$@o zD;#zCodH8=7A>oFAL~9F8Z+6<@$aZ9D8rwlp^&d|6K27*!Hgovhe%950-EJTFw6q4 zv_GV!NHWO@)Y(3(=5LeLLKM^iJMfTQnzbRs6yxx&W~C+$e@D5g>}L3*982F$4OJm!dr=_kYo z^ot@0G4nMWbi$O>`z*7OCW*Wt%Lkl+hhcy@xgPHQ7FwE$G6)u58NcN@lCtV^}&P&2_zrN{)+Bg=!7)MiEz;A+cQ}&cs^pm^juDH{jjP zSaVe%ik@T5_4MkgKd=!Ekq->*rIt&WeV1BS*^j6C>`fY0YE26~k3BfgqJXiHU={2? zu2k#-F)H~9#+WislgJ7#JaYk)zypNp%gX_=c{yCiaiO$5Oxl_-Vw4ybFu`IFOtKIY zp^HmZv(}wq6(Sv23mAa|rVJ}}+KAVE%FuF&vO6sNtZlKIJgn3Lw5wsIO|<=%F#KoK zNEtJ%VwpIt9h@-Gy@!=@cL&FX;uh`AO^N{TKyi={KdJhyT<7^5I~DvC}>q)g@w zPMxd{u_gRY9ATcTTtarCAb45@>NmphwVN=)JWqt+)(G=_<5N{{hsLZ)0P6$AR2yo$ zoXQDyd^z354l19Yv1dQ}AfAO*>~x`Uvm@_Li%UeS}X*GHuYR zaVsO>agh}fruo(qIjXll!G}k-(%Bzt8Bw)ABite%Os%^#ZT+-TkV4M>aAFyHLoWST z_EM>zS5j#7VUA04KM+C`zX-S+-x&9VW3kA(Q9EIV126`4GG;izGqR$BPN& z)N*c-x{aI>Tu-@o%x2+~t8zwwM?MALil7v|HFVRg#0#m_MY8YN?s_mvH!b9h0Iz)8 zWO=1^+|`=5-G;1v?0Qa6ViV~7b|h<0e}g|Ta$kRjs&9K&$>{L?-%u?wec#|zA1y=1 znmKxh!yAY`@i2jTK8`*E3|NFIX%7ULtB2({)FEF0D>$0fKulPjXYCi6Nr%@8Z|XZm z_3cl>rpz}**~nywO`W0>mOo#c17`)$#fPDayX@i)J@b=zTgO=&Mrn(l&e}ZPHUA-s z=Z7C;uqg9k5|`W<@VHOtJHGAd*JbHU zQr@HMIL=It+Ca4;(n#Pa97MTDfd5&K_i2wcZ7vbNe6f*CmG7j#njTx-Tr)VQ$*73K41Wc5m1OAV zIi5bvG1)3&Qmz>a(&sS97J~p2|8U@WLEA1M1y$Fp@N>k%x9p`(HYhw&BxFu$$!yB0 z!%8<`E?2=F^x!sExm=t#cp6U_95`49$fqO6Jx!;nsqbR{pUrLi4r8|=BGq!nC4Q_n zWs2t(M)S^FE6?AK>oD4i$SdTH;r7lD|28k>jN1~6nw>k|DUf26^fD~C&XN{XqQq;h z+tPJCYS&>n#VnBFGKPmdHwCy>R<JVVG63^?hsGZy0Xz!0B7( z2`-G%W}T@UdX=oxuhGX8U}PV6CElHT6BZm5>LxF+rK6$8QC1Y~p*3@h#D$NBLZ)Y% z3sVl0QNgWIVQqJz@?JzXCjmxQ1UU+Afkf1rMqQR}GXztNiy`(g%-BwxvktkWt@5mJ z0TcH}oUL}bKZYuf)8ze;#kB6ZIbEA-KE2w{_H3#d=5lNran0e^G-9fKlX|)}jp6L+ z)imPN4bpaM!mWp^8aO+$9|dv|pf$!uylvm4>D%=ru91(*Ca;)Yzr$k52rkX>y!EFDUn!%aN zy=KIw#p1r+H6y;coNGpG^B$m&IOjM&ubCD;BOR5n_z`JcM$3A{B$%ilwWem|=uBzj zi|MRLI0zWUaf|_{y03*1LRMVdM~f(p;~^fP>A35Om03BGOF7FNT&3>N&oL2~(IB#9 zX?dMCD;x7H7TrEfV{Mv|l48S5tTKTY;q^i++}6se%-#)?W`xv*g@Ii0D&vdoiS5Ath8-%k>c)#7fOcTrFDoqQ{;$L#8s{m;VXx^ zOOEPP2=1m{Yzg!vbCdy75)}dW0*?Q^KyDy3B?4Pck^GPLNiZ2ICtJxPC5LkWEV=Z! zSVa!qf)F0fcTAKz#N%OiQU~(X)G5)ll0{*azOwRei6r^x9HTTcYhB+_SKT)1{k*Mm zwwCa2zeL7*S(iV>xHWA9Xg0x=BDxibZ4+-E#PGx?>H=q}P zWq{L{%5t`90@1L(`PgaN28-#hL-Rn~n8n^P!NuzIE#TIBf$5L%F9R-qbl+Rsz9e0= zIG|OTxJhjw?L?S?C=bZ#NfZjSGV9p1hdC%w;dF4=Ez=0MTaH-?E7e-jn%z9Qz0Z+} z*Z@-}9lFDmt9(OG!mCc_RQK=URA#^4oNXfU8Xw@^>8*{Yj44@beo~_G#__RmEc__2UUcd@En|OJ#6|!+GxIG z;uf4JsbV(=Rf&p5I#nti_1&D7xDlgPOlOso7~>jT^IGG^vGz2_HCSt_ zN$Zkfk>ChRa${1=Cq-(X)710GG*I75hSl`5*hYqyO$OoAS5LFa$z?oja(Jf(S(c&p zaT~Y2a?YNe9Aq#Jh)9q+1bGUgjP=;sRqffSEPz3~a1 zEFa^vNv#6>iHVk#aT~l~cWdjGlPBk{oxQOH^7hG-v!(hcu@;BN4Y1y3xf#r(;Uc#T zrw*4)BKft$Lei>5;YrC^y(emBWD&6QfroIVYI0 zr74Umt}Tr4h`D0+*IH_r_AY~4K6`52N4}XnEh0T9w?qUh5{br+-Lx&!sh+SrK)nHN z#2CU=EXG$U-rO9#aomELyDfw_8E z`J+2I7b1w)#5qDvys7TkoG?QQ4!#Z|fC#f?Dlyd5?Et)FzvupOl0KBUi#yR~1;Kqq&#m zxJ02Pph}n&v1KY!O|iOuK-q{$n@Ch8%d*Yi%zz!ER`a9kU~E6cf+X%#THtlpUVLJ_`Dm-Q1=FNDhPotSI;*^$Z%V%h;37Z5>TcV(X?ESF>$kZN-ct6IwYJ9VcCYzUo;?{@eYrK&dc(x2iM?W%Qxo&T)T!ALjFIZi#i+Wg z>)|zrje9EdXtbyxcfH1`uEcETQ?DM`nxl`2yRNJr)cxE~M=x^bH*r^QoWsOjvFOj5 z?Sa~;-&`)J4Ze9z+*K8gO}&a;BP+sG)uZN{-^5+B>h-!`7^ixO?83xdy?7U~dKxX= zG?h(juJ%;*sz?b{Wm=~4&H}{+HlxFiF(%a}ZbC9p0~SDXBysT{s}g4D)>757aO1%t z6-F5!W=R~TgmJX5W69f^0S-J8(y$;Ago3O<*lkO$N0g4WL9s@UGjLNjtW!-q^%l|6 zMLPy=6dP7#av~910TCY+nsvXq)u_*GdeG8-az|n2w~jZS5h#3C%^T)zv<6;9EZl(f zEg_CJ5@)+xJ=?lX3=m#|orr_ll<0fdpKT|O_Di~hB&@8ablX_-wue(9D!o`4eU2sA zY6DAxRxQ^sZ+j}g=}eBMdE3MN6Z1YUBqa1nVqz8$AKFp`WgG99w;8=KE@s~Ll>M-; z4BMQu-Da#L^$C-F3`1=i?m3$)^I`8dRL+R~8ESiY&nnfiG3pg|#)?##7uATd=8d*k z6Vj2eAAjJNV)) zGC@`N+UXN?!qUe=J97b1lI_U4O$3ZSEM4oiKM-p|U+XqeK|15vug+8J<#>`hP2M9G zVn?Fwx&%}lka&icZ5Re^;agIkqiV{nG9T}qgtNbrpmZ}>x;1pnb~sL6$BN{5+}w=F z73E5drM4O}QCi1RMBR3yNMreuubUoO$=J0y#kB0&#Ivx)_o?d?Nzg01cE369S2rX2 zt|CYg^S+@rgjZFXVv}a5^b;k^b$GOdJ`<*gev!6SnUV=lpB=|;Z9GWAmK__RKwRm4Q2 zw&YR7Zb~%dfK+SbW8{3DTOX~diQTkv+(w|1!Oo=*5(jdp2*a8~X1VV3){0#@Zo@C@ z)NKCBtc@QA&r6E7fH?c4L?mCaXNi4MzlrZtR@T}49m95@q(4&WNiYd~S1>kk(WUdD zlMUMvUqZf=a8-FudOV5bX$SmoSfm;4<1(*ttwuFi>JTj};y|&Ck$GmAr&Z=Pb0KF) z)RyeP$VfR?^HKu;xIvz0?b{FaA~b0e4wN|KVxY!eNMsH!Zx9r-HE)${ zF*+`mRKWq6__$Ba`7irOXv<|?hE6LGR75x9xIGwmZ9a<|+BugZ@jy+Xb`HCV+i<8d zwe4mbCKf#NZSpp(?AcY%&27)F7_~8{kJom^F{eGdX46tYPkVOFHNQQ(%i7zXU9;*| zX-83Ddm`LEE((R`6F8eiusu3gYVNjWdX{)Ffo)`>++-L`ef2bpwnVGJYdgxyB4am9 zBZO7{&=78C&P)kggLq68Q0hrv%|x9sF;%!4LZP6_kR^kdT$~rT-f0WeY%SfHIVJWe zON?CZ&BBDzOKv{lLT_C^o;)*E+_YWI%sE1jVyiHjphx4Q9$j;ov+GeZj(Idz#ASQx zSn=v==z{v#v#WP&jz0G6io>iGeeKyb+x+(IiggZqcEzGUtB*aq;+WTEyXKqMo?SD} z>9Sq(&2P`HS@n9|)1F;%?ZTd27h#tC1!B*S26xNqBYXHH^MA{pP0S;syH=HHmD63K znx@LG$gU&yVtW(`5_c3b#3Y0xD8!w*y&Q^xy7Jf#m4g7mRPpL5OOl$WF85x#&$kT2 zq4Efr$u!oSDuHh}^dt@^8bLz-OcE>Dg0)nzVNWF(`AilOzBjWm8oKPJ3^9vgvc{F zS&*9Yj4fM8)_c^1gdD*5iE>dGBi}5B&P*rs{bV&EQnEe)-U;PKght{nmPCYZy8PFb)k>BPNE*mpETi_R+V~QbwayeE`RW!a zVEcSifIfDdSOb;JJ5Vbp1B%pw8uBylEVqVr%O*F*tf#Zi56iUh3t|eDk^@}y zk%s!wDq^BpFH(*HC3HIg{V+3&U2wA!i{ z;gHjVy)x>>>Z;PTB`$%Ewl~$BWr`09gKl1 z@9M5rigLzPq=3W{2~PME3z%e`!qHzEiyHx1%6TacQ-!6AHT$^XsjAb4dj(mTvGwNI z=Lq$0t<4SN)+itCf3V>EXvb7q?~8)3HH%zkEuwb=DCAX_=+0@!j(kP?@uK z>X^)0zmWkrMGlswPmNI(znOorR>kUKG`e}2aE+tLh{s68-`4ohYlSi%&S`>baQ4+i zJ1nzR(FV)hPErlt-dbgYr>|PsV3|u@Zt~6LU)5xsPa$n`&Y>PQ+2&GYr=%loW~h{ri9&Zp9j=?=_I3bLhu)y&I6ZoU&3}pDTdzZxfgk@EImmX5|5x9M5OKF zcxk$I3zp7IPpXS6 z)=2=z3w$HjV+lh<$}oZ-a=W7aT3d~f6A9blHmQQ#jqOBE`ZyB_*%T!!ft$HS-t!Ef zh__U4SDmOf$iAHzOzcDzTe{ujCaY0%QqOB;nm#1RSVX(|M8b0jLrDf3t^&g;burb7rBmMQ&w?z>P_bu+WQxAxF>Tw{=Jm*6iz9YYs(-n?cC!n_(X35-TxR| z)o3s(ckzh^ev7kd@T8e1vbE~&m{2awDl`k~bg)zT9*%P>tt|b%qkNUPYwE;)hPyQ( z?g>5H>T1PrP6kl3rHvxOb0)-0V0xoBwbf)xwx7+F?=f)tN-qCKg;rHh-t6TrURC!3w!C?&db8wjB zia9u{^NLA_1Ehr$`w|{O$k>F88@LJQ1lEoRv)+^$r;Huk<6J*1LQ>Xp-C#a#js#<( z%^@{%UnC$xQx+n5Tl2}aUq5H9e`RKsG^RSu z{!-b{T4>{7T1~l_9=y&^$MeS7o9wo!oSS`J>GLvB(JGhz>6FzU2a zbxt%TtF!^|EAwCZz0L&#+Oec@6B|5;; zZ3lOX=%6p+aJ7hon4Cb4#4KXywZ3ekDyTEj?nZXdiD@URf^39!=goQcQ}gvb`LP&g zpZnAdbD#RuoW0L{YL31qJ~hK!=RG5?xlVgVZ1bJ3ZOlaVRU?L+2QfY%5@^AWbY|~h-Gqle(HXQTFi!bJ0Ol1Oe8|Dvkc(pkbZDRD zOy0nDZObIQ0$cRt4NU2}M)~z)&M;caFWJx3$!6bPR_7wEJ+V18yR$4YN@?HnlR0Ni zV$YiCs%qc0V|poLKGU9zvy{}n6`57en5vk0-trAV#a(!)n^jrnh`Ga<dL7QW?J~-l- zTOk~=_SOhTEPYkN5yxCQVS{ZhrLe&_pH|ploI@>aaLuI`Hu&aM3`eYsYle+7cA*-M zN|{eLZ1Bye95xu6BIvZWv?cixmO)<$8BOSBIo)Nez8f`0!Kn|sL)^rP1sl9h=VVmw%B2JsDd~3U52Oj8diB@!tL43+@qS8!Kfe; z24rU-kwSXjH&h~h-*0f{{b;B9=rLnkA6!f3Y=$c0aLK8)Pv|cWvD;Q!8LHL8a!7=) zE6MW2b%Nu=Dyc4Ml>6LYF`($w@L@jGj+ zcab;WdKdZC;YZ(5SLdqk%~1JP^k%3IJ8OpNiaO(A+6nh)#!fG$J4h;5h*1f%6!qR! znN`r3%2XZIP~^sG{IQBs#|?mt0Drgw7c8?xQE1JOW)Ty0ezGPr5Xtr-&Yn&n(YOeU z-zlg*1df#l7&lYN=0FfR!dZkaseSDi+itA&Au!2Rc;9UPO6MnxCCwd+Wuc5yj$%0o zwN?Vrx+a}D6UDm^dq?A!tjuzD%=NzkH~F|nm;|*meoMLde!B z1x!*uxlchoN-qtPjC5kC`$dVTklozXNpeHyk6AZ~p3OxlN3|irs4SJRS^qlp6cz&U zFzw6N*7)W6RexSf;U`UJf95Ie)tOXrE$ubFc)kLvoAEnUbiIZ3eL{1p4h_YOgAW%e z$Z|20G`5|Y`)SM-_F$PK<2=m?p%=*^aH|A+JJm_B3rq}RJIV%eMk1N^OUJNu8ZsG7 zIr?P*k%>KUF`VP5LFzk+?$@f;#Qii;p)+^0pXxhKGsMiQ^XAs}E5`oXew(9@wqJ29 zpzT+zb7=b&OMh*@;+Rw0ui56*_G`X*wf&lLE^WW&np4}a`R3R5E7sj;`*j(+()O!T z=GFFVzInC%nz5cCu883=l=`BaB_78! z-S;*0ea=T_ag5dX6D9mCrtjLzpiH* zsm3Rt>vPqL56hilPPqS+LiMF-+If z84nY819f!MuNZsEQ<2I%RyXD>ExmVDW)(E1GS$x1)J(b_-vL)5Wl9l*4Q)Rm$QlR0 zU8TFy0wG3=gwkl=JTFmYayU_HJf#nM)Z>4H;sJd@%O}}F7uj#ir`e^zU#{!yu#X5(k zU$OMp^ec`zHT{}xPEEh&n^)7X8MPMC%iY`Csk!FV^lQHPHT{ZpH=2H3#;!E|s+4&( z{hDuHO}}PrYI@TIs-~uovEM|Z9`#zYobIw!xwIf)ft@T|{g+u8q<0D8=P7VA3GvD zBMIrV(pUO2RKiE^Z|DdcQ>`0B{HkmZlN5a(k#P{DM4KIY+~$nPDr>0;m8Q?LBA}!N z4)g^f_Qg}gaoWRrrhwwA3#4QW&xVBebcl|N7~CGImVAO2puCkxG8hLK=Wd*dK-iQW zZ23eS2d$_@0V&HTs`~sWS_iq%6Rx3g{Dm=3w3x;T%S7?S<+O2k;t7)R)M?Ss^aETL z+6VjmWxfT^t!}>bo(R>|m;Ma3zT9&n1eH!(PlR1+`qg`<7tuvpLBn2OQ&>|m)T7A z%8McJ*!b`&7?z$R_fv6%@*-;$qMs((H9R6J&StNa^(np787E#9gRt4k^A%7{zs5it z<3SR5YN?YDgv9ojNV-m*64Dl#4|gp#sLz4}`8Gsco|y6BR4G|Hk&p z`kFI%!1}>LBnKTckf?QBH_5Zi=axU0E1H~AgHfkpw32n5aLR2{GT4u+ABPs@N^jwq6LC{JDV?owS5bXtslIWg8~-T?`9)E%K##b)mG zk`V%(KS@bDEDo_=$vq>>I%jS5k`+R}E+Qf#M^$739@sf=yBwVffvs}#POtMo0{!R<9F6?8XwIGeb<4fLp2zM=;7ox!a=$S7rrF8N-vFOWRJ{tC~EH zjyjU9rUz#QiW$Sk=w9EP@wR&Ww1dc(%n61(b6s4BnS3SYC^s7r3LSG+dy#0qS(`Vq zVr6y4dz(z=D>v77*7Et;wl{ayviaG{%{1GdhfP}#Hj8wXdv|MF+go!mYZK1w%xA4u z(a~{WTHe|rpi}=rqZO)N+0R-p)L)21v9Z3jvb}P)V`Fpu z+~wk|dEPsp?P<(g`QEkl&4cM&BUYQBn3r2yE9H4J>RZpT38A4e_sSYgDi3BG@%gy) z=OV|o)_GgEin#4eH0cy?PNJm~$C7)2)&e?)rL#zL#cT2+O$=Gy;rT;^rZ^6KKPR4S zThN%eNb772yIG_OM9JHGF4A1!9v>T;BWzrI9viycMsx@)Ogg9>@8GEeDQ55G7%WS; z{X$;au<+B^j`V2l_ONsY66YP02NH2^Xc;Ht9s+VZk*|o7+*VB{jw8ueu{*sUXNdme z2swDdI3fXt{=f;H=y+-&Srhp8XavJt_IQanZ;Z( zf)X;T(8qJ~>NhtdoX!}+t$OR-zOJ_ptvbh^(W*I7tY*C1Bh$SlgmVInb&ZQHQG_9j zi!SY0UG>U4M!Jz~(j5&x2TRPLRp>`D55xb!xW(w z+68LiQG{ESq4tpZtKlm#u_{Cc?gABYNtIg_A@=hHits6d%LcklakgHl5RXEt2GRc7 z^EZfF9!yO&^Z^24-5GWg>WlfzY;Nkg6GjK&467pKB-k6IEUPG9k{1l4ZI2>6ida!) zkb79Ifj$Yw^I<^3fpW-wj~->XTTCixP>NWvW4*1jHn*!XX7;R~rCZxhuuXu;t%Ez; ztc7Tj@@5ref@JF(L$duG+BKj9ffI7w;)NKUrGXG9&WS62Ydu z@wMt--{pW&RPf%6Et4DrY$Z3Q}E+($};CvefwtZoW zMGk&hfoJm1Fv&?5*)mD!)|clRy)(fiH=%&)EU8&Q*UO6}5kdN z94?OW-w8dnoW!{Qkrh1WRy&ifea0|Jj)ql<2a9{cQiA%xz$1H25VMsrO8v&$n?^Hi zj<~{#Lyy&)vrT3lj+q9t5yu?nvJTU3jb&<^MSo%tOcj1cFYawC8?nq`DeExxv6FR} z`dG;tO!L~vMy!1;WFrpaV~G(gnP_ z;#A6Phz}DwRrE1agh;pOVgyp=+$kd$kCh;OdOzymba8q{LMERqal%sW^>72AZIW)5(on^4 zNraKR^#g|#x^hct5LzBj4H13h9zi@a8DhN|+o~9P!92{CDi)}8L$h98i}g5t@Umf+ zB`zWwv06w{*=^xTz7Z03tq1!oMT`#W2(^Jq?I+@3qlu^V@R$Pn`9_eZSvreER@hui z#s}9#WU@9Eh*lLQDq^fI%#@J$cW6hR=Mw3*v~JT$L8GQuc0}4cKnc!W;!covulwT3 zZLcEG&gSoERDrtT#-t>ou9uP7fdo%>@G4fmU20T;a`GWcAwC@VMsRFja@VKTuJxKX zNvFa=geK)XV~0ZkGAm$9E8A8qTR{qxKP|EDvAN*!lZWVZR-?9$CPFwmgNIdm;?V>i z7Sc^2x|EaoLzMT3fXJ;6o2XKSDm&{gj<|Tam^u3$ap9ApQy+4X7xOe(F%oG`~7jvG!MoDvmkTp_*+jb*Sc= zUmfbQ_Ev{#)_K(-i?P2tWHI(vhib;T)FFSkzP=iA3O8KYW;K!wp=rs11F@a38Mjs= z^{8IW9X&{dcey%)gL|6C#tiPx(isiRzB}R2Q{7SziKWMT@kHb@c#a{p%t^g7vDSL% zs9N{B_|vR&n^(71-|y}4cE8p&SDl-$)E%j+yS_QgJ*mmq=$-BL?R0fE_slJn#L?^* zWOT)ekNb)2_2qE7pGe3>LRbj;HHdMjM*=T!xtr?#CoJ8jsS**4GfPI=#V~V-qA|?a zqm!ge`Z@FAiKi@PyRb_}IOz4>MDes4f4(0QmOx7h(azdRwvL*@sr@ESQ28=mNgKuH z_Ib%e{^)MY57sJ2e$z?dM6mr+~we6L)onlrwes*TM$(h1d zmTnZwrefXBsqXaa$Mu;$Yu2jdRO3W$mLHeJwzI+4_GZ(=oVT5G<_giVH&TMH%vglf zN9lRR3XrcHP^;e5dE8*(RsC7CP+{7S%QflFs;scH-_>HQN5oXdV0&j{m4iMNBV7G^ zd9#@5)3C8k2e2*&8=;DH;RxBAV!kr zGC&jJ@;3)meC3pKKD$j^Q+FvtnspczL4dzgfm(+@x78jxQ3sFW4Ag2M zcUlAKZX?hLb;M_yNGLJ64oY6Y<)FI3N9|(ux--~1Cso}*a%|4>NEl9nFyuCL9Sag*9r@k+;IXCV3?S*A%y&tM~8d_(GJwSXT?8zQ5g!ijNOPpLAiX7;tu z)r49$x=y7xo!E6^U&sz_Bq&7kO)Bt)gOQG83mLKUIVo%Ovpmd=I&U*Q2g!MTnQ16Y zINXQJtY8?($Rxvs0oQ9wGBs0_t#6#Se6TpUzImSFl&u;64m5Fh5HZ^lQu(#IU09tk z-CD*oVtKeDvoj%bBEc$&w&4vq%#+;W2~HBt!7}BAosEFZaC#3@uZnq<@>H&0CN_oYa38GMt{9}?wW9uLwpji*D zpUv~qMqIOCe^2ruDRbi@pmX?lr;W5s9B!SplWxjvetXHMYDd9m<8AKyg!4y zqu^s!VaW%G)n3SzA?AG1=*yO!yYWg;?hSDFPVAOg*B%?GVyJOiJe`vZU+-OVP|a%4M%3(7L7b@JC+yO zvs8I@5pfDX6U@PBnR6o0ou-bjv?4Rp*iD0FOk+ODQwK5EQ0;4D)qCQai?u<>S7z2PbCL49)hoR%LQbs~EL)NIdXaC&Cuc{B z+Y_dCMsTOU+sg<{viP_G+hRmKVUPQ~1ikHWsb(DWdG@TPyy}K?cUBW9RyJW&y+O_y z0QYvH1XFA0WoBIIOAM+>%UQQ&q^ofYksL>*Y76q#2FrPgD@^1Q8;4k2mh+S_*ey@& zc-ecn??p3^|1}`J3N9s`3R-XKHiB1O{FFurWzk+QOX(?kN!=C3+DKG%?q`yfleMa? z@r)*jkqFgyaf57Tq8a(9pnh83rggX|pc#lf%jL(RH)b#EFm*qv(&8GG({i{hHU~Gh z&+9Q69lv^5s-_%zuu+gpikwby%%)<;x03I%_9FOXQ75Jyt8C^Fm?0&qP{WzTY|r+) zx?dDm@y~dR8FE_Dm+3@;=ktrrS^1>3)p={>{6g|i^G(Xw9bk+nt&bl>9(MwX+tpfg zF*_TFMX$*y(-3J&))%kvbJF?9iA+O0RYTko{1P+s)q*kowS1&`nn_5>*jxs9M}~y# zD@j${eU;trjylC7%NQ351N@V?@j0-?6u!-M*4Edg>6S-d=O}ac9QEsT7WS->c%nN? zt666j=`72Nk}s@=Qv$byJ*3qMxa38|{w@F<|8y5WTgh?;@>aT=qexn^7!slhft}5( zr0=>dIeJ{V`r%I+h75O?q2Y8NuXa_X3#u3OonD4hPfNwQzA;N>oo1bj9MlOiGH|QJ z;l3qGMNE8&?)O=3>-g2XrHNRGaih%&j@v^oLc%4XT2}A)p39T~d1k2_ndD;ZwclrKiIEF~QWqAEJD8^$=Rb(SVkPgV{d)EWa5 zNu6G&pl zIgO0%fkx{keAtt~k#~wH;&4Nc_Qrd^93X;cq+hdcFsY%@cwRg_2oO(PKOcu`pNlEo zNoPJ!Z&>PHgirVoQw6H z;*`%*F2=L_ZuGqL^;~_YS?Bvc-FMs|owd4;?>k{sA1CY1?A^;e&R)mk#53%_dnwNO zK8+w{1+`P0yWG88bwr-AKoo(){jMS_(qP=yV;MpH>gBW%iU8xg$M)6Yk^N)p_9gvd z2Dx5l)M6{m8z*7p5}6F81p`ZGRqKc%Vt}GBsj9l}ILwJDfq|2}E`%+%tbg(PYQBuA zoyD}lCNpvMTT9unxhR0mgVt^vp;aS0 z%T@Ujmv#2@ZSg?gdU1(vN(>tAHBl!kP-^ET-OsNgzbnT>ZV!o7b#V(CM$y~9db4|rK1|B9GtjS;obDf7=MUcCqWTcLDf0PsJ-nk_sf;FbXANBe73$G zHf3Azx6`dhIpNOQqgGZ|rK*Zc7IhY6%w7@ddP?NRc5BsdkJQUn&+Duop7}u)Cu)^k z9m;$U2R=+l9D`MipAk9anh*OAZwjZ~Nqtw1N07v{;gg z#SBrBnzWzr2c{3zom{tE-;~|ZAxyc159e2+c#%YMNSd_v8q#c;CYv&DMR@j*AC*`@ zm;suHIjVAJuMjv!y`!qXKI0>eVO6{O57h_NJTCQZm*Vn`t>zAjbFX9Ts6D4wu$4V$`EP9NjT>tKEFdM7*32D5}T?| zRb{VQ1gbyyRlbM%53C9;mUBDkFeJ$MZrC=P zf!s_%2 zD(~u%37E_8ylo~+*D@{vV|!S}>!#~CaYr0jk8H>GUSZ@T@o?cSKF5y;ILM-jTBPg_ ztDjbvaHQ4n;YOO~PHS7S9F5B6GG7T(obXH2rzNKZDZvRy?~&lRX}?V!x-|~?V2FJ zF4Crc#jI*8?Mj66FeQf*F)L$K%(nQUm%Jtqvjgic0tZ*salUn{2#5V;l(ag{>hfwxf z%biZ%sj4f2-mG27X*@4F1#=Y9op=(%GA&CkOSfjHOtDU%+-p zhp+jfZogID{*9$vyH4xR!RhxbJhZ2LPjiG5bi@+X38rWMVzdKdf_EMsoPtpji+SdgV;m0){8KuuV|8OS#MQxR?`emhC(COZb5VszY{*{Ry6nEH z(}A3pvcV?k0s-157e~mq(QjEsp@wyO{VcInZnpMd>58owwPBp;&{4NsC$m+AliFx; z=#FFMZW{V!njmH5QNfj6s}*EqjE1q_NvMEFRArd#F7;eZr*}{)N^-DsQGo`xF6IR5 z=d6*M${Gs#NE?GLh5|H_=>KEwO_n4_mUO*Wa?HSzi%SuTka8)P8}35j7^;FNGa@@8 z^3A0BpkG9@WxaneAx`o7B|Qbof=2khblB0QI)^SU)xp&s0#a^1kHBh%IGE zxWq&KSkRs6m8ujyB`%72K=t2x^^RP#965Wb)a`a#S@Gr`Xk!96I?&4{5iEzZ0X!rR z1j0hUZJ6HB4gQ8qfLejax^q!)(^&|j^PzV%77dL36;V}~B?xto>D-QD0k_oDX@2%^ z{U5vAtnN{;+QPE0iAo`}N9TQe>657%ovdrz+LykH-51R7x<_1D6~^?TjjS(BH*);*8##kT0=7L+@1_ww4C@D zH<4u5B{9zG&;AEC|B7ctM&K}3AL0ad!<%g`qSrs+K=O$fERP^q6O@g_mjJ=3C8QR7 zvo>Y>kEejofV;lWxF9OA#ej<@i{Tiabc<4i@!Sh1K;E((246l0tRjUK_&cap6;UqX z_qWFJM@y%?k6lpx<7HcpE4yBA&1LI&(~$~_VUzrY0{wJqgUYprGbO_Rw^U_-LR49K z=U_adpby#X!0JUa0e{yeiKnx80jG zi!qyG3&YL_p5ne>?3&jIG60zX#Hr4dP!*$h$QrzV)?+8zfSwmrJ>s|cjbIY54e1s3 z$Zaq5pkNav9$?)4Jmav#b3Mo7@+jglEzsYx&vp^bm_81@a)+Bx;lwH?o0ZC$z&V3dP%Ct_9M3J*LJZdHy`bdK-U1UdF_9pJ z5*~0%Xq_HMD6KrF&t4%3szRz4Ao>xopkd>^Ev8D;(Qs=msd+j}hgY7?F_Cu1U0GlU zBl$w?k`!c$dc&0}&^!!IC z;yEnP?2aUJ=8$L~X+XI#it1W@O#hxfKBor~B7&ED>wSiGDdZs~iu{P*sm+EwmB$iM zsoDB8gr_sixD1-!2=+M-<;ib$6I?>E#++|Ps>gVZOGn6=Q@Xpx3F7D^6Yj&O(weE_f-)RngqDP z^^`kvP~$?|f(JK)DS^NpaXqHRX1+U=cp^(E$#$4?qn7C215F@4d@VgJ0;(|t zcDJ?(f+wgpX`5J60_Ym6eL5$UlOQ~&XOVT9+e($!8`btmS!id1bmHkp%UEhD+x~|H z{Zmr~?jeFp>WqUH45%+J{%{2|pF{*E(7&XJwL=a8mm41m)uezXUS(HN5)({kfF`=`&#Myd^QeNo3RVmebtc{YLRSc4(LVNJ=#j<^ljJp_f3 z#Jg0c8SsTddgyrzOuSfHd6a1B;}!I1^8HI&1h~Z7pg@P7eN^2nk?7+LRkSG(}>*gIAhv zo-i{+`q{?Pvb(3jOr;&U~-hVxj0XQb3KC-QDHYBob=Op;F zmW*t9y+H$P(pVCOP|TFIih_xRtyC0#{SDyG2yl$-toje0Dz*)+%xxdyZ?OQ^n((^{ zI}`CNHjf$i*gOwly(boA%asOPk!=DffWuv(iAxlJY6(4xc(2xEEfF8lm=f(5L7xye z#*5J5MUY4HjSOG1*{cGZV*DJlZAs=tE|K6d-T~|bO;cbGA~~~j7{rNqA~l@DfDPq| z!@z6tdeb&y{bAS}ASgZ|>R_7<0bN@rs3qgDezu zqc^7j*6GzdF;sFjPO8Xx_v^^2Zi0rfW_RV7+3^;c{J-g=O>7+5k(padP7$~mc zdxnNXhEc)@5yD15DB5^OZQl`f2n;+*+Bm{TUlcabsU-$_eI7X162Geq8k-!111yAh zL|)2j?_5jJi0aaFqw#friDsNzyWBSSoai17 zrAKs4tK&<;742Mtp#w+(klKhn??ZC(J*5sBxg}0V94wGgp;|CMPxo}a#%L`Q1t^Rv zc;ti?;An8k#^VdLI_N~jMp-Qgdc8>`DrKSLx92)0CXclR)9rtLeJD5!UvQj0DYdT6 zG$aeql9R)LT4xMyMD=K;GvW~d-=gwSPh<#>j(9qm3I$F(Zz$$5Oq9sR$lQR~G!!Wz zwE4UsA&TN1hQ=(yoz zNZL3-VJ($uZndGvEm@+BZ{$FA1bz~qj{?or#9YqaGEU z76fPzLn#aj$~<7;QWX~KND>Uf-J^J7g+#45RvJDVhBjNDvMIRo{`PVeJBRpgDPL?U zgh@1c64Wrt_cbMqg_GBfcwBVwawQZRQEvu;Jh)f43KfS?rC3Vk`AT!2zW$m7!--dx zFePs#66*&ZGvqGg!i*L+OARz$smggi*~`%wtCyZR?q`}wny&gWeF~6S|F)u;0c?=n zDbHGx$k~=GSjY|OFJ%G=^!mr2Uo3zu+qJJ)qsB6i7rTNN=96A_z0?F(f|AI6kMO8Q zH$d3C!7)epMnSHYC0=j2>EK+^Z=O32(k&;`PbOI|~Ha z$!T`V%<{++;eS|WRxhWUbO&GNhzXuo1@0~ISa>B)K)XddoVD6~V`qv{)6KmZFjD|_ zg@+9MAfKIg25W*Q07JSVanXfliTlSsA^{i9{hdx!5)38UyZ6V*mhUWyK6EKbEWsT;xt#P zy*^tDT=uaX(CghA?R_KsMxSTvtUTaKZjv8hS9DAgYl?BeFF|aNqsUunZx6HyBwI)N zhzu$sDmh~sxwkKbuJ!)FdKpLO#|4R^E0t+W21@2Q`*|u1I@5lW2B=qO(m*>(5k}{- z$m7e+ozRo(aD`{=;WEB8Z<5#9JVpG#kj>$|f08ADf9a}v)4Bw*k^1I5*KUf1PDtbl z){g~9Dgc8HDDwp&$gyZ$NMvlLt9T1*>)zNCcw#M*;8l98cwAEsy#T{y#=0Nt-S$x4 zmKTB8UhLn`?n`Al=P5xLCp`iH*^OmE?ccfU@V&=#1khezA96vK8bOD;2CB)>;_<9e z7~^%ZtV1Z0rNkq7ooNhzfByP$3AD-fr}(aGVMVoRm*{$sF&4&K}zKvP=~9% zrO%9^PHC@1fZ5@BRM*Crn?7WKBw7*i4FniS`d~sdc>>_a>*(Xb)icAhR2PS5TFda% z(0RIkdGb0SyNbm>e+syat513qte$EbAPV2-HVbnjc$O_ps7Om@un%mQz4q)rUt5yG z_QIM-rtQ@&GrGVpswU{8?Bt-NLBNgHB++U-SVt^$VX+6YaDu6f5n!Ue*(KbE8dpMw5Z3$~ zVa|lv$H&CtOVM7Qk`lN9*5yRNIcVOAP}l`uiuUs6J8kdbOF<--U$CA=>hEE2E{B#I zInq+xPU4Mhmf~*$gObFTq6oQ|&+fQc8|?3(qY$ke2KI{iYz41`LY~AF{v1j9$Dd9P z?ky-I8ZU4>wiP^o+jt|G*_XFzxU`32bCkBSiN^2OlagC@g!cjzM)qI4U_MD=STScA zi_>4&5vVD1MHRCg8PLg$NNOjL9z=PZMg=C`Xg|xP8<`S*Z9sIuJ15PS)DOz-Byz~I zfFzm{d3M|TKMIRk@Jm}s2FBP=A}Tig2>@DB*W$ZkXKIN~tUKa zl?~)AsBPFg{FPDXFa>#Ez(!$VIIj$~n#2K1stC?5!j{h{;vp{KLTJIih`0Xh17JZk zZjAiWg{(cWIDDT3`kR2B`hin>r4b?3h@t1JI<*`_mSo?{qS!}h>Rms{SxJqJcP+0N``+f+apuUX}|OKfLGJW@U4&)4~q zcnr0Z!qN(VOETR{&Fyk4XOilA5OEUPq(`BCmXU`P-u{jN#=cLbJBOWiYtW|#jY-#X zv`z!?5_BRcsJ0*=-U3b540*sQ#`qF<7}azmipv#>slIee;(e)?jN|RvGMWcKXw*q# zW@pyPNCfAGRCYx*h5HRbh{3rpiI-2vVCpk#UqXNrTvO0FpOw^q1&-Z6JhCK~fAkL` z_GFwd@9%(!oQ~B}+Bf9WNQhVqmd%$CE$Q|U1kq`ae^4T*uHYYLW`ee_hbCyQ>Lp(8 z`ofqaX(HFI1d!PEw3caG>|+LJ`$Csa&5jl`1{6eHV(`uT8`mc83|}y_?@@V>mg**) zAp(ghOa!BVq6wQh4C6W_!6xv%l*F+GZX@ak*k26H1I~>A=0V&Ys~^dY77=7>i~~}G z7@R>sR137V*vAOo=NiOFHl3jN5wQ!9S_}R=;w!Li@5G8=RiU%fXtHdpXF*?bFP)M^ z0ca4a3I4DUhFqFaTna#O^!Qv{N~1*zPBaDstOe%RvacrIpC2~wvtL|C@WB`pfh1(% z&b)TW-x*W+J6quzVa-Tt0)c2WfK^HHAX>w4V#z~iqlsP;ux^5G@8BK!+#P%Lfy-m4 zWLWnEFO>s9qu>n$p+uaC(4%isja#ZiWJ7u&DCnz)-GWZz zFEn*esWZe=i`257oQss_(#MR3Om0gOqAR>>)JFj4Fodws+cGALr{vw0;r+gZDw#s4 zat~>Nb1GAb$J5_6kx5&7Q3EjZf#^HV#0ul)OlTlpXcK@6ObU&k;|wcuD*)x1kb8#c zlNzAhk&U8Yopuz=%SQhwI?st1U{-5uvAbgwn5r3@4+(&j<_b7h)*y^X!ZR#ufvdP6 zV2f7}8UL{?+&YQ3sCBaXk^xDi#xb;0d227IkYf`aMowj$=cHy;P;n^jK|=HkkY9&5 zLQDL~YO-(CYRub{dJ`p~Y((pWvAyw;cSUuJC|kl72+j3xBqBMb2zx2LgZVM1!~^zegd}Y(p0Y~!btT*XEus9n+ zIAwdMCXeV|)VYZ_F%%B1VstP!l2GyzTU&Kc@QM`<^bws^z?U}zP*ONxbzvTDGhrx4QTM`OD^um(oB(DC3w+kA{>i{qhG+Y49Z{Z6rsT$#Pf$%xis8!6Yebs0Y zK*0`g1tuiUk9`C36a}^9x*^CZD2$o_(uYb^bg|%r#Yf?S+nv}%Z?`upuPg;<7BbtJ zs;FSG;EbgLU>llU;HpGj3P|M`lIb_00140x_*yAUpK!8njR!s=H}exU9%SS(_qjQ( zu|(AL(hO)EdB_%7Pra%sy8#M2xZ!KdCM_m-6jPeF9pNo-Dpkn2HxqimY8@vW=1P0t z1W$nr7L!*}NmwzFkf16?>?%^%?IoW60%yrV*t5a6ij*bc@;Ue)6#-@wwcI>jDSR6| zE6scW7-@%UL_vhhsK)Nz2M5fhV@wRx`foPMwJL-#b4=i-(c*G9)wY02Qx>dOUTM8YRbNfYNb^= zDgsTPW#88>7g6U#MG#9333wu8Zvx?t{}CLqKt6=*m6~O|NU@LJ!bF7RPwiClBZ)yo zCRJ|`0lOjhPA#lXw1&y2zRKl>!_2sYeiP%4T!pzY5JdD3uHMmC62pjuUS>Xkb5zmM zu9_U23=YZXW}T`0N@NlbZ6cFGQ=8m;K1DpV!ijK9HBL~3ZbQ#dwB&r?-IW8;jAUSt z#xhdYp-A8wm}8$^aR+#03zYiRMGQ5o4OzYI0H+ZL#)w@%=SWjow8McO3S0-i z9TE{10JnoD1RCfx0?@nMRkN$B?4GTs-rOWCIcX=IYILF|yeUftX5rmbaCVm{!V zM;1_tqmO85B2c0^InCn{ErpIYJt7=Yf+o5R7JSVg{g>c~UY&_O#wJdAc8L?6MrxLo z8q%NS)?Pdr*#?%{b{Z!`iJq?Qo3SVC6u*0HkMN|8+g&`$IAq4cN^Ka7fUI5~Yls>O zHjSF4GQeO#z!7jb-aYY%BdAp&OpI36)KjM&Kz+;FM)btPkH5A&Hg@u5C_f_HdZ#Kq z4`&iVbAk8>xz(<+E_+sg5i2XO z>a&}Gb7JQ4?H!I32)jy*FOt{Ry=$NgukPA{bjagQY?{N4B3l74?(HR^Bz9n!Ry;PYZ4v)+)?9CDDZf)bWN<`=SV~I&(#otP11vt1k ze#5& z9RT}?c~w;Fnmd6Dm4qTGWtlQ`7|1zkFOHkG7F!?)ia81szU7ENvK3eo3VGN+ND;48 z;Y?eBEbQpxmI>uKSfB(=%o8h3ew8T}d<_gWVvPp76sb>SQQk|!vg0(ek7}P`1)3wh zLa|7!qpSt)dSZ)g*CdwjO4>lLMErCBq0t*VSzJ%w@4~9ESwVcqGWe~Z@A+o ztt!f%Wz=qnRyyu3nisiMuFF(Uh=+kH+?1elG4Oil#4B_`+e? zBN_91+)Wl4t8$Yg*?+#g{`~oJ|2N9EiGZYIv7vlD(sdXG116}A za=_#WTsnw|fEVpu;`vU;i9tt~`8HjWS05R2xLPiG+_8&z<56mz_n(Bse*Aqg4p*br z;9Kg$TROrgH5#%LK{f)Qz)F!Y5^~iJVPdd>bdf_D^rl1!%2=Z|n%vj>7YL#6A6HUl zLb2NoKLIpjjuIFJ6ibc%x$}_O*nAkj{e=h4LSx5!T=?j1Km(?0lA*1P)@^7+}@`DkljVhxQK>o zATo}!P!uA`iwJiqv38m|E0~}x5=pzjCxeAnPf}INTQx^t^!GdFb}iq6_#?QDIC@ZU zZE@{>`1%dEzYOFk^~1mT`Sqtdk87-!wAUk{|2g5IsD1Z2{nrco`G>^OVP2jvU`!ZS zxE}pm#8PHU=qN`=GL7|1>By+&)^fRJq40x1p%aclGa%H3Y!5K1`G)`Gw3I4d zwx}SOMXq3~s^d|n!p6M;Y%f^rrB5d?2r>;$oF$Hd`r0kw#^lFc9BRBrOK}%>kT#S~ zT&ZUxG?5y&?F^|Tgb6iFgFpIy1Yf$kqs|S!N!;zx4aS2=mh{TP=#siIYS4;4bd@$0 z;MMUIIr~IPa*&OWgXcyKb7TmiWd!GVo3bxARP!T`kDRVz7^y^pv`TW&b}lwPk9Tyz z+q3JtOB7M&F1%?dT8((f6?cy;Tk;R_vSl?v5J6D!8iBZz#3&f%tS=FW;wq7%zEmg+ zstpR@cUG)PjF5;@$eE-m_{LdAE|#~r34(Zfiz=8%tz+}#y6B{$DOC*bGXh++Pgel! zrPe_!{Q8a5I=&!WyB~L_o&g)SD|qRyuyj&g_$QGK+*la)=le`F6XrV?>cqN!u<*kKz*=prVO!j;s{z2|o}-&o8JSCbum_ysJxY#=Kww)xpVMubaQmt70?o+) zg95FblfzLsw8<+R*#2YAIFcb+uKf7SIY$Ry>Ju`A zEB`qef>b<{A>QC(=IN}oPUtYadeB*>s=bNaL9$I?;dq<2tHem21@|Y=k$9D>yuzak zB8x|BHx0X+f z8OU~8qtd>9eMT2eKjOq@({;M?9qPch1rEs}K#EcE|if4xhCa{Kr%@57dWR9sN%eVmr=SRk|I0wR!Vs= z>dZ(a#spTdN0t_mg+Y3ssZ=EJpXjmKJ&P4JdtKF1N$BfuQ#%8A6xo?)L?nw7v(N%s znY5%hzfdu&J&h&x52Ylub#C%Z<+HNd~4POc1z)b(^`LCzJM4zA!7Puj$`1e z855|@t`yKQEvXsONj&}9z6Z?FAea?{=a1KUlG@l}vk{@FFiaq^lc@zF7kTz1ZF&6| z;(R+-AJZR#zYVQcbh-BpZ^4rH5ZFJ#8#u)nm_o$j$)Q37z?qmr_`wlx`+Pyb8K3|N zWNM4CJ|z8yfdXP9+w6%2kR%T6g`HqYtspOL?viU$Q9A1g7!g>{@^i0wpS~oRpe>`rP}C zOh#sXsGR7&Y%%`CuZt3Or?T)ppNU!;$cRfsSvryaLJ}PfT=1K7HPtw#SR;%?fYsu5 zTPiAcqSG-CMa4v`t2-Wy!-bdJ0lJ_d@JaKZ8bxr3A#p!26>i!~8p)@FuR zU&Vsd%bWxX4ckyb%n@lZ9-C=bp=pie2FUKfTu|1JaOxT?R-b9)XeTN`c5vJ2@B-T! zWi+pl#J05(QFWrj%k0*LOPrk6H?G~AlUyaR&QLtWqp%G_?UHI&MgVhmCNg=YdOHvp6j8ZYi>Rm;`jN@Wf$t1^KX9E%>Qm~?A zFE;$x(C^-3bd(sC6NZv%98)Z?4e2NF^8CgKA}0$}N1j4>+Q`!hMPPhs0*oP?jScsH z=k)vjQV^wP%=-x(Ax!dPh6N}! zU+2oV_qIV5J{*NJ@#Mu_X{76+*h*a7xD(~$M*XhTAAnkj9S?sd$VVMf9v<-`V}0JB77v{Yvgiz;BOw4IcyKAY zNU9sy1b`2@T`^nsXxf0*xx-z0^rSkjc%tzLrU6!rC}PSZIBJc16IGJ1q(2yNAL?jt z&_UiA*4v~)9WQ&LGUguKtst_8)8u2TNl|X*4FoGDYD(APqgTzxIZL|Oj{eQv6`!KT z_Py6QqFC{O(}!S@D}o1%ATB0!mxf}VfR3R6d#kIU6uvf2mKHHQEE^S0{j>r$QFpzbuyC!bQ+$ zDFwW8l;d*5%SyFh@1XA!##5{OXScV(R4)xxhq|)L)Y3<=dWfosL<9G%UK857%?&2_ z>O`85WYfw^;WlT$i^tdB(pVx>b4~@xMx<{_Jt2R!Q&*+c!HI(uc}E$bzD5-zHDD5~ z1^4C>>b12L?aVXk`A{32AjrYL9<`(J-3f3MT{L_ggEay4B{wU`Azl|d4^LFC)6oSF z&sx3g#}k4iet1%7k-iR{NB&C08@rV2-r)tVW>H!3}4u*o;H@W`@e_(Vm^DK2~6KWUUJ_d%2zLUm6pgG}Sd7wA%s$EzYp(O;5BJ4v;weYE~ z17G~Y;=ZtoM_BvpZT03=)k?f1NND0c?n$H?iF9~n8f;y1nEPtTc_@$)m&mv>Hzv^#ufkA?-^?wjqg4lUvOtizTVlCl6R&-$h~@JHbg#!$`GLOj)^R=6Sh*c5bQ`1 zfmfo60@fn=PzVv2M4o0fywMD4n~AICHQbvlhSY=w4!5N^Y%bit-ki=&72LSM`9evx z6~Ljpfok`>wvaz7rOVJ%wh8V}TshG%=8f+NNC&r`)Iy0p95cTbSN+zf|g8}y#+}u-!i#09-lY7iP(pQL2PaK?V(Q|h< z2MgLmll3Cl;_Z#t7oBY1a!AIgY!I3YnL=p4H4os88#X?2ZcTf0w?sl6QeM2b!P}LE z%6lpu158H2bwbXP4_Rjn_U3N!W*&~gVaw#bEx5dg{CRL~8+_hlp4zT$X7!Aa#nZ&< zJSAiWTK-I8dgF^Zr?MG-iHlnRdl^^_j9G^a;^IJz_|kv(;!qq^9ln`9WxY}GX6tKC`|pG;m`gfnjFv` z=By{?0=@zqNC^}4UAb@oev%wH$AY>$71HL}>=Dc*DU=}Y3=CZUhNTY58We|#1$s)6 zU=HFz*^|8^E^D`MrC);LFgMeFnllnb@F7vSh1e8dCTROLU=3M&iNFtw!-&iRU^(c= z3P&m%6sCGcy~Hb?Tjf9(FIhE^7z=$JNYvsTSK5fa06vX3dq32SbOEL_Q-zq!d8~?{ z%3(Y5DTH-y8uulf@EH$mb?nhHH+TvB?d9$L<(*>0;Oo3o`;qE}Z|`pe9Q=nuZnJo; z&~>f0b555awx%hw8WKWnGi${~NI@-%KWZPsPq@)3%-T~tuK=s%?pv^h(Oa!e#b4rn z7H?nNEYbEreap(%&zI@vudlylSjNvsVMkENsXk3!3W-7fvLi7A8rdo!$7_P-$Qdp> z?DD~x6`IiEgcF{dr@kRJNtGCK!H_@gDW2PsqjP-xG^B-Tb;CrcI+zz3<&5Iq*5juc zIvFN$*sjJ$g*(#s;|1qJV^~ky2Zv7sSqrX@Vj}Yjm@ytX@tC$Fjx!?S)!JjXWK60- zW)w8gfe3xT=zGe8`uzll&jg}M$WjLEes#|YDfJ0p$r=O)&QCm~#yLLwjqJFEeceWh z&n=GdRLi*e3VJAW3Z5!XEURD_0;_cg3V{-!xm4T@LOx|=0{tNcLlfONquOuPEujVB zx8e`3Ppo9qM0;nIy#Z*`?LVGm>y}m5L;UhWw*2(=N%-;S3qUBYAkg;}a08bG0hzO! zIs;~94)Qdy58xAGkMM+iEC+;4jb{W)*AyiK4p5GP?;0>?dmWy36|9K-<^W4XJ8w?5 zw31f|42=NbX-3gxkV6s@Zf&onSNc0q?IVahM6wU~tm9ePQ%VOK9ePgS$^xO%>l+U! zo+->aB;Vs-IqoK2fdxTi_a>$z!g;W&;P0_J#_TRi-MaEGF%eC!m-P{@}8Xeu6^M)3ejXY}spv}L0CGTvhezz`Iq_(2Jv zHyU-v>UJcqsK6Yax@CP$K)MnW(10_)B5DR7$SoZ*wFxMp31b`NwYBgbzz%XFbDhx2rFv+t z6CTVn1x7Q~P~=QfT=s4Hko!nt(Au8IAyv%7vVL-yi3=M3d@+=U2!;`$G~k7_upjkE z{Egf1FJkM=yE$^jU;5d94S!CbOpBnBV(LkiZwSR^AaOSavFSd2{WTHx_-)F>_*}VG zI!nPM4)8bKJCAo}S63@uwG0 znaVgb_#dx$7=Q~-G_)~0wM|2%cXKD zzQRDOWy8gb+|5{{)?XP_qhi&ryOo1V&N|KR#?VbfH+4xF2;Bh&xi6qzOFPYQs;_f@~uCq zP!Nx3E!jj@Dv%OQoR4I=ilL7QyW3|hPz8JTq|I!Lj9%x5)~(-h^LfKr`jmRXrsMe+s1=fY<4?1%vr$`_w$`(V)P3Qoj+E; zS$pTnLAbfFB9+exq$TxAGFroOF~VVl=Eoy*#ja>ozrVQZ;%2M(Ouimes}fvvhL130 zsZf|E)Lv57DR~eGH~oZ1BI1G|2oPCk&>cq5(#mt1c#w-k6kSX_X6l(_NGc3RB9ti@ zce_^^D0NM+eKMx-b&_kEbjeAhvMdVfSft=s{f^>6d1fge_?Dq*I2<4`xFiVjD*+=H zzpsCLu-V4iy|Xu-Y|J><)Ztc*BpOVyf}9BlRiD4_CeFj;NG6)QcX+aSg2p}lr8s#0 z2DJpv5cm;r2?;Qy@HdtsY>Z*f0HearVv=3sFRzspWbozmNz3U)JnO%IgmyaV%@q_& z>)&s$!}}P^Az(DD91=zdDiQH9g%(5OmrMnW zyPO3tLjc)2vVXyvB&z|9I#iA9s@ZalJM*cQ-LZ>o+hyte|=+5e@c-k9Hw7LSzV}JD0m$~^ z=JmoJpffQ92-%U$Bb?FT+yw6^ClX)_P!URb1Ctjqlck2419yG^EV$ogwCrSj7`}Ep zTb|Egsj~9p?M_e&pohhT663~+ZccCIJMR@OSL=#pG z?9mX-JtHp2|ASjXFO?G6uo(vnm;N-V8NgkN3sJJZtmmfob<$;F{r!&@b#d{l)*HGs zZrs*C`?vlN{L#L5NQST%z99dmGpl>?fDrjsxRNMe1 zHd2Oa5RnZ)IcoCpS=b0N1F5^{>X+$EM?X%h$FCzZr5+H^m%G5?B}aVI9vX2ag^sBH%geY_vM@bf0(f7S#!hsz)Lie@4A`OkLZC@FB_>XHj&tb=>~KnNC`xRU>$W+LEPEZ*%E&^e!$y&KU+d3H6W26@+D$&X_419`e<#j zkSt>?Oh{!k?baB9Enpho)?8}<5;{tA054K^lyY#)>)ynRC0$|}N9m_a@VU}YmylnU zbcMzIT$ki4=y%s&s^~kFS!2VBrC_{aOVg#*#HE0I8P_uVI{IE6jiQc5A+guqe4FSq zP4t<@*wPaN)%S`&&^B6~*35I^CCp#GN4YXZnceu3__+?VD+8|y0(nlg;!;NSad$IPlKVRQoOrK!cO1Gj4 z9|ufAXAgNyErQ}O5_fmd)%`aG5`Gy?i0k{=6};(ph_%*i-{%(4`9`#U&COlEVu1mc z4j)-MkMJ9-X88B*RZJQfCZ6WsdN~O1=1Z!~e)}ZwR5;m3g@FqBh=u$H7dGna`6swg zv&Nn}$5yVqzKL9EG;jI)as|AGr&d!V6`wuR6u9_@&a_R2#s-e9m5T3U7_+r28%o2R zudOU5riW*R^s+0gqI^gZL%z@BJcy5_eVWHj{Ka9$?7pPMQuq(;isF@ii^q#xR`WbA zbANlCyR(tN$HTiby_)FX&)-`L2k?*FTbe`ut<|hajJ^?u@idcLN&ef)9?b!GQudf* z_gjyhCh|S^9eeD4n`3t#wX@48%ZCidDVEIlMr0Nn*Z#8-r7=r1|9Hoa!@gm%c=l7S z21(}EQ>Oq8;2Wnv(c}J!dsFiwzjF#^v%~7(eQt-n)fC`}CuGVsxVjx(*rZ!f)L5_9U1irSVeF?VOcg>MZ3%spI^)FIjPc%}9=>O%pnZ7v7aS z9y2Li?GbaQFDR1^`s8&_@D~UBA7Cc1$4;1OZxQmF*sn zC+r0d4_^s5xxXRpINblxk^-f1Jo?=w&7390jU=)#hUosm=_)1$^?zH`3JU6p|MUUAIaGZ=py?sRe*M$UIu^b zfFZfSc_-feG<2;~s->)uZ z#6jwgeeNjuJV5frgFIjYOfTwPF7r@a{hK^Mh>i$w1$y}hc1|H+9^bi#fXt$uJ4Z9y zy*2!u!?*I_&OL`F!-A{pQ`n5YKrB42dvxiIe!Wu+-p!hRSpFM>* zcy2Wom0y;@Xc3*{0saF^AutM0ECtvJbpPy92)e@4N7{8y3D&}e(L2(FM34st?hy*_ zJ-2pjLR774z6 z@8A8$Yp-re5P>+mk_m}7jvDq2*w!RnUt#F&yNq!8;<}m|uX#tnOVuHw+Cl2@gM-h8 zYZgIpFW_s(KwU)`V6 z4+)1N;PL4}*)Q36Q9*Nga(avOdjHk`*Y9aj#PwnJ+;Z6L2S=$l8E+XU$0ZC6v`GQ9l4~;0DnLJRB2^=oSqLwJN^A=< zP~u!M-1<8Ogxh>#LGQOzsW7J$gV4y#nrY_Bnu@DSY_l{CgofN!&_cmX!mQLR%`717GFBq@<23^|^zjATTrb^C9?05tTJX zcqs2nMnZ>3_8%?#M^Ei|-#U7VA$@Z6)|2Mo!0a+c%!x>_B|v-0P|8fEjKffm9G(>M z15A}9kM=BEl3q{Q3X=@tYq)_pbp!BWZlq#(2oK=P^h_gqkxVlh-Hoi)p&WuFosbhD ziO0C&fCAs}k=1{F0HlIB23SoDMVdNWQIaI5LJ;t-1gL_9;L5;V#>xy9D85x-M0+Yr zwLNgOJG7|;8G09$=^|rg#fC&-8SCOE6-!d@Ce35Yvv3AS;G~GZ#acy{I1uGkiIpjU z^BtV_k=jWj8mQ0dZ9~K+JloMP00fkhAOk?hAPApP#EexfS&S*h(ge){Oy76}>wf#i5sRaf+#95LD1bTk*o$JeT_MybWIA8_WW|df) z6=`CVLRxgqA|vtZWd_MY!Y@+1dWv{Z&$j_!B*Y@y?=dyb1)=RRsx?1o;bIW$Bq>*~ z@9Q&jiN3fTfMJ$`NBw;en`-z1-G=DVMLP&UV5D7~QN#+aLy_nq;(T`j673_NI&Qzb z%$$4Za6B${n&sJi+YkZUeq1i?ec*wO%6GpJFOiG%b25dPk16;PZuwr{iJqg)xlX%) z32hto0Byvk576#0tl+eLK6(NTk!Upqso_-x=FdP)&wa^an9-8OE4ma3-d4r3`#wc1 zhfE)Ty?=}k&&LowJReII&&P!{HN0u(vrEw|X17gfx!Qt3#=E{v30k=V2a1d}zGiuOZUD}F zeY%EeElz~SaD0ol?O%Sr{`dhpI~X=!5_dsLCjf6#Ma6Qgy>nD!*I|%&EP3%~kK5%t zAGH>+um0of^F;*7_4yf1a(WvdB{T>|Ald1d>tA&sWPW;u!)PfDO zPy%#y@fj9U;-Pqwa=cDyb-Ev~k1UQ$6m#eQOYaxC)A`UITR!kLtLn*I9(d?27&l5b z^K`zvc)1z=im0v6&FkXH-ZdM}_Jj0x;7TufT-STH@40p0muKvDsgUEBDUB$W9xszv zvj|82uRk#%e&X?Z_yB+Y`3mm4Ah%ubc7teoh|X%xR_q(tKl*)OSB%Vgg3>bLM)?@Z zQ(+EHG;$T~FK@qpoE?c%YqXTe#`6jqz;Gu7s++QY@-4Ta$q;;VC@7FcRgQrSRe&AK z5S`CAUqcb8lzn3v6kqYt~oy17@~tiR}$el2g__y zLWzI7=R*gsYe9`$9{_KEoi(ibJL}wNDD_3tET}VqX*LhfrR z)qPpNIl{#~=l+skhS z%)O|Xu-z-fZU)i-{ZTKX9sydVgnb6qZopyd6WutOR%+=lW}VnVW}mJ?_sHzb!^%)4 zx{1tTnR&+;f|t*qL{wZ~%9u9pvW!g#=2kRaivQ~3#(89kj^eo)7O`_HuJ`2A#a&gg zbLMp#(iAyZ1}7m7V3qfLl4k-jNE~uhRAe2JJJyn(k+GDr3Cqx$mu+JioNW6|MdBKG9g4srJ{-vzk z5sP`5TkZ=pKs)T6p%?k5^MfNlS=a?mJB$okt1 zr|ILa6Xs*1*{J#Wu}~oWQFe36<#Yb4CzXRu3eXVcrh(cX`m|8TFt3d-`~PS&=m%y#(}1FmzK9_P!Q` zg+lY1iERLZV;&mb&_p?e@tDhzwkIfAi9-rVGd_nuDO$%nUVku<$NUh!VF<*RCGkx8YJtwY})-GUw9{6id05^f@}Ia?hs*+`2V^NO`&e^@9ft z8vz+!{Nq&Rc@QJ0--+pj_s?skcY2j9Bi0Tj*XooozbWCXOUYodQk6MXOz!za(D^_z zj3>}!#;G3THO?akv{fvEHBL}QH>WYT%EF%Q$jSm6Nuq;j`>hh7Tc?HOF832r#@!Xs zO4x%Y-MwD#$*`yrB|3@je;ZM*?M*54>s=X_m_r(OSnfIGg=%4{>phxRtxKEeGMZy< z^lK$E)!r|j+?7vuzmVuYW*eiWn00!zXKNGjh~rM<$dBAQ9ff(8b$)Pv_dk&sK+L_{ z03LgoSVxWSmPmm_XVKAj&zI0Va9)g#zV`N-=q}n(`(9j$mIc1d$a^1%JFlYyFo|IEDDg+=Jt7cJW{#z=Yq7!7bB%e{I3M>GLuRsT>DPH1T?W;%(`j1zjwkG#82M*neqbzIY zwi)g?OxmuADvNn0eke2zbf_q0MZG^M6;+gemR#V%5t4X_2c9xkLf&{&L-7`hTMj)H zL43E;o=*TuQ9{4r6A;UnYy{6HQs%(ZBeuT`p!ur)b9j9XjfgFdWBrF{u4I`SZT4Zp zMMaA%M4_U}d#$U;mThtpQ#w)>XFsrLuaFY7vPz&@Q^T{XtFgTE72j@|>JgMZp3@B_ z9!K(f+L~fofbY00y5FOwB2rC@*lqj+P1BQJ>5(Q?^%8NT_2M`o@}@#-#y>;?2=yJw za2*I*Tf28H$21OJ+5BQH$D$x_22zfhn0y6-qoYFDL`LeJbfopG>my>zfQ3Ys@16}^ zaT{)PLv~S>NQg^3dh`5Rj=%Hhg+!M9aaaHdg+q=Xy(!x-gzA)|tW8t%fNfZzP6Cn~ zOdL7lsgx&Z1^bKD1O5%CjEtwZH1p+hU{O^J;rJCGadZP$|$yncc<=$eFRttDy^A@L@O6{4w;L znLT$fc*+f;EXs|9GfWY3;2Tyon z9;i$<5-dTDT90VGu(KN|8XvE3pRWVnnV;0k0+Htj&>DCQkl%a++=)Vfc>BH~k^bH^ z{uQabsSTx79(b)C9QCkjP>-NuleU!{y{p3czj=ez5n=I zPCdeq_$CTAl72oQ0?6tQ1h`IX1r>opHoD30=5|JZuE#Ps`Y}mjh?a8`L4T;##$r3p z({M*qq>6Xt3+mmsOrb>*zVntL)Qbu3D`TF@T;2c`LESxF=u$8CvZn%NL*59rX=^TO z@9GOyjrSqrX!Whp^ch%cB%1hH_~Dxol4zmJ#Ve3nXr!^Q8lWu&@I3TKEK+b~?5=dF z$T{CxX_SEnRywCd;-!_&_1uvyL!@LuvU$;Vt$%|?>!y$c)qQ9ys#8KjYFih)XTsgd z`xo9f9s;#g5>@T%GJ-@ZoT4L)eQg*Qlq8NF`? zt8YT-IOb}7kb+-CX3+pfL4gt&fR;qN1L{f;%$oBkwz_l-Gr&KJD#JUMitpqm=7_eN zuVd`5wBn?HYo!&a;Oa_CvCvCQ%>{{^rml4dOjXs5)tzVCq4-c=HsYCDxn$_$m2Qm_*Hx6P z=g!zluBuD!2iAZ`EL&3V6kDSxOgvck>iW6VHf-5+Y^Ws~>+|=|vpfjzD>kG=tZNF= zEkU6#6e_!t)8>81Si0AB&}du@5qtPct^)e>aE$fY3`akrhUhC}(I;{&PC z{X-O;N*=jUOFLOHEUPH>w>z>b%c&xcX)&}Zo_3Y!ZwVPb zrFErVRWB$mr(|)LD}351t>5M4ktVuaENjtr>${~L$p1zGt>%f?hd}F)a5kSsnlkQT zfl3Ru+eD-gRZiAxVz-;cisUavOci(7E`G#IqzQUa5IkMIYM0XG7M2X_wgmvBkL)Hn zRKke*f}k=`iEjrl4I$0Fn5|qx?)5Rn1M8N(l1>Y|bo5(m63l(T;Mt5AN@kQRar*`R zdWWVquL^XWZkn*)X`&VV5-%B*4`sT1+WSA{*(b%P-fV>FNBdA-`pGzVS=Mk$v z!GwKJ@b#n?iD*_qHS$J2K`HXJXK^r{_Z*UGuF8epMRG4)>0@BL&E(cJ$mJoEH+*6r zf)Tsxq|*F+w1Fiq3rA0M+m%U&pUKzzt2TJ)VCBgDRo4U7$kBOp==m^Vn0QWYm>YbV zSN+FF|F?<3()=7_d8rk^i?zAo-5X1?(27ubKc|JMI8jjD)=ig2KkE^V`1MlIpO0J?}?aW7^ZQ{=ss%4f=Zp!*-w^O`2=^nN34v_-iM;tX`MyPYGqi7>$>THwzdyRng+DoXF z^jg)s9z|(vi(wK+T$pqq^fzJf7jfWOZ+PI_5>G7n zFB#{h!<0S4`*S`#A~v*GK{0~ia06Vs<+cRm`hk;2sq6ZsDhUiBjRUJNnsbnpad>bP zQ5t-2P!alZxDO<35&&^sZfW-AH1mNwrjWX+Ieo!v=%{~653qbWZ{#lL5k_!8C53=4 z_YWF9)9=gq-i>u5U5CcdLz$mxB*)NCT{%@m*>rc5f=7B6sY_*Bf)WX}nk&GeLtFge z?6rmhuN}&!ob%?^UT*(W zUfi0?VLj))t-Tzzb6(rp%XH6qYi+Ng9H+drHJ90*^3K*=W_!*nTYE8sp7O@lTqb+Y z3s&+K`L`usrtjPy791P7Sj*y099hhLd-@iNf{eH!FtHk26qbxY#RpU#lr!kD+v47> zb0U=SI+l-!9#hbZsH7HT+XB6hy!gcF*&RQ!mi^}m(HAq=BUR5Z9+dROJkpnY;{mXHIM#hqeua>kcJXEt^Lb1PMYy`psmy zh7R9j`dYM@4ip0N*b0C+LUf&DY5|17K|f?OB^&3lEXstky`BvdgL2BLTYFWSPC0XH ze~lBj_HtHv8l7<7+FncVo^smOT$HAB&f40GGJMKOTXT(mJmZ|LxlHz)Q`Ytxi+aWx zTWb-*r<`D=UR{1)>Z!uS>x{INmOD3_z>ay~r6T#xY!0V~hb<}#5h-etaBZ_ktWU-% z6Na2OD(>iNoa^#|?sL_b8qzTddYnrQSbRX}bV z@Hw+=?S(ndnPY1&^F3z<6BzKDDD7_xzg$%&f}`7_CqT6zzlL0anE&=vCdrJcU)r(4 z_X%_WcD5>eh+LEoFtxEs6QnrKIPU8QG(KYapl`7OccA)-Yo@0L=p)0I=N_F_J)m?w z$G@mUw8lg6RSQSVcjAKbhR`&TK96XeQqYRWE;dn=rV0SavAI8BWWy^X-S(D-iX ziS1an%|tp`;P5*%5Sn}Ip@x;z0BvF8`t)#Go5qa)?NhDDYtFSRSutW z*VbO;@F_QK?Pa>>+_Sb<{pOTgw&uc|=iITim+78!gL&-=yv29D8-;32L_AJIHKLkg z=^=dlf#X++#>A^lOx)xuju|+a1{mxJL3WH$8!MFYKRt1yX9B>U%p%XK5Rx+yH1 zd896ztS6#D$_mY_r7lTdQ-L<>emx$ooYr$@UE8bHbk3Yx`)ka&wO8qM%6waUkxu8# zwzZe}o-^0dp1i3G%(S(Z*`71c)?Q|toifYTUX;XB=GdCcWY3ww%D#WVzk#M8JvIoQ z>Yf$(SO8J$#|j;)4kc)9q#~p3!1&D?4We+!y2o7mkl?2VF#Qu4eVY;aBb8xA_lag;XY@^ zt-Zbg&zNs(F0(ynwza+LS*OgkH5XBK&P-c-ne93AZ0%L8JY|-xy-fF7jsjX#(Q{rHG`ug4vw%2zE$O@Fpr3S1$W9IBAkXGaO`Fi zOA%=}%(Izqfr<4uWs#CHl6Y2 z)?B88m+gcXm-dxLG@bL_)?SXKN`t%4C5M>{6GnQDYhxP%*0W=5MP6{PAV}Y4J9}ry+hz{WN zpdW}PY;QHmMc_ptePZt46CET!LO+u#I8Xr*9|7lI^w6tswn`N*9Glqs1WOBZ=fFs= z(`#uJd>eRIP(ABv$RCkil^U?HG7<<)5O6^(Gx;NrbT3gc2)_Q7_YK}z7VnYKs~Ux4 z`Cby8(T^1W1jzh>?lqv)#pI=f%iiD zb8cPF6ERCyxN~bSSIIdyZtbse-_~9n>gU|HwUs^_@u~z>Q8tvTjbjI(CH*dK1w&)Uay-{zr2f zct<^OdQ@!!po~FqX$`G-X%mm0-R{-vR}Y{}7Sr7ICGM7#!DydexV_}DU)}IeV{NCj z-Xr5D7F@u`ZsK5;v~r?t9wP6^8fZwj!a;-7BLC!pwWHt;V+R5eKsXd;5WdQXwhmW3 zDkmU%%T#5@0p+*GVSLbypE$JR8eVD3g)LPg7N4Hr#LWtT^kwOW-WTr(1hH`jzeWG&?% zudlrZUQQ)yVoNFcoJ`da7V$_|t4%&=HxiQqyf5M3gr+>8sn?2_L=&rr;N9?mqT&NXj^mP%TvbMnyVIk%1CQ_ zH4mLL&emS!?|!7y>xfv^q8))2WDu9d z7Ww_??Oi_?Gf}ivOI*c6QWLWf2D%o=bVLRr5ttVr(e!{(X0$|ApyH5f2^joCS#Kc2 z(|yqllDW|VFigTN$*0$+kI4z&Rb61CA`HA5C?EQW;3EdSdLh{aVB?v}&$p_2z%yeC z_mpAai?d8%r=asF!O!k~N*7h3TbjS;(6s55Ezow`opkKgpu}DV<8%hSS zfwm>%8#HMs$Tk}4p7?t*wTLS4PJDtQ#FpSI7CB{aR0)a&dPv3`y*v#7J2oPd1`7}p zW*W*wWqFs1Hw&=S1j8!<)BTM)R_PeJg^1^trH`$ zcvQ{=){(@m7p$_2trtYf#4HovUVuTawcZ`~X^CaKCIW3m4301!J}9I#DqjagLtxJh zTF2vF;CkXU`4N?(roRQ`H=1Rt^#bB^?b|Cb<+X3ehsEF>&aZE0#dUN%*-cu?BC2Jl zk^D?zaGOa&-$96p&WB47uVWi?%Ql`w^QDU7Hrd1Gd))Q2|IZa+16|<*rt}Rujd4?QGFnoa3TfjKGXjA;78ic_BM%e(k zdFY7Z_eQnPUJ4%lE%wr~4_Dc%H0-sO0J9pG5qQJDqCf!jUTyw*>Iq9?n3_5Y%T z7;&AV?NGvmm^$2hpi)R)rME7-AL-tvzw{HLZF$(y@B^ngrUxDq>L4AFB2ASk#lG0=j&&pO{vyTz+&A^Ru#N_ zJQJ-ZkARMHad#aq>8Q|+Befwtw`&W~fZ-HhOW7aKvcZ`3IQ|Ve$^;*iDoiLJalq-Z zoUBbG0?2_em;O2o`vsG0y~nEbkcK1lJ41hc%R0Rcx)SO}n%9!kbXWb+PG!QR4kyap|X5<)w0GJezXGze3f5ZVDhXNo^I?4T#jc z_?>lGwUP_bE+9NtSR|>lrzs-1d_t|z6k&mQt8-OCqPlaXtWI>xoYnGwAN{CI$kwSFdE3HgKwFv72RpiyFZ zCJLt_5Q>7!JFlzgBks0n31*%Egf!*&>L|iQ9pH=GyK=aqcNK)9f%Qx@W-G8?{v&G# z%$l@QdDO^+G@yT!A`4QAAroBbARzx>RTlmrCN+HiqsAsRfz<9Mh<8MvK`;3IHoyNE zKdv4!d&WIl>dx_UXD?Bs$fE+K4%fm&nbT`~U?1C^dV8~GA`1#tj4WWV$*-O+mmSpW z`%UG)YehGFL}B(;B;JJ9Zh{n(0ZQF2qrsH_eEs?B$Mo{`_pft6b&uQ>()s%RAa!(@ z#DOLF?nE)G<&KmLDzesuc5CrR6m^o_93QEcTWY053l)^K@|1L?kGVVcF;GT{IcSNt3L@27PKpfgGvfc7=#b{$ z;;z@1+>_*s_P^GO-C)SvSIuDr=96LH}ct5&(L~a|49FsRf+j!-TRQ9(nR|Ey5A3pVq*@jv=Oux$nn(yxqyj$S~h|^sCRS{L#PtK`_&w)9^1XpmTr! z_@ExL_&8@?etFsTsQ6St30_{m-#)+k`;WLT1|$R{Xwz4R zUm(+N`vQ44&i}_zddF~%V@4vk4nLZ|zDH-M`s;&JWUnIdX8DGsqvHgV%8vxWM$WwW z`lsBQK?-l88>Cs?>yrKrX0qQsZmE)9Vu@R)89+ zJr#!ha+D?Exy)LX1M_SvVWaQ|YHGUb17IcL51swN76K~?ypDcZh}Jf>DL`w+mubR$d?5S3Ps&yX0j}LrYg#614cus_N>Cm=%1;?x@47->+L52Yhqc1o|;?& zNRzd)Al`-~zR^wZx-WYE4$D*}h_l=0H2q7)uSXAeC8c@bgsK|L5H&hU{xwN33gq&z zliFIqF_cuOA^?!kY42dXqflw_LaF^om3p8Ugy^t*VV)w28L74RybLj$F^j&)y2j<- zNp7`jN3v!7;m*2bY6>6y{_$1+Fa4wY9~>~okMD>V5Y87$D}b=ioThx|EDZ< zp|`?3mfN}@2F&%N`o(B>=eQw85yvK@0l15V~N*isG+P=(4U&f>+3IV66sHt?n z-zXpMt9dE%g?S8`($maSa3h{EPvYvx<{!U5MM*8xs_^K!$@J9A3rs&DQ6v+It;G9- zDAiN+z}b`Z;on>F#gC`u^IE9_yHz1A5tm$o^;k?KMhFrSNTKU7ard5wncaIU98vpy zW_c$n9*#W7;ay-ipWFE-5epZ%n#e9n$48qK}*ulu%Q+D|I zuNM_IdWt^szW~gCq2MIA7IhCS7MEn}D+h;fEwWZ{qc)h*%ltm#ft0Y5l{H{NrCwfU zAk)(uC8VV|O9KQKYFVnc%+&qk38!_(&k00EzyADbulv%}8i$O?_!&bDfEU;Ryb9Uue7lfXWINb*{C z>IUOtkqEeRnjBUzTAyGELUETj2c^7luGhHcPJ4+bvV@!_Cz5FHTlTRRZV|%s z$0WB6wV1*drgZ$Kl^Br{FUV4GmX`UAy_u(vX>_GfL;}MaOUp4yg3cP5ltBZv*L${A zJP96uwh0ghNA|&I8&vT~v!&i9M?7ifG5)V_J=>UMqT>VIsy4dSkJmTZa?&Ht)+l)P z7xukwUSAON&LXL*5PbfQ3K7oD;&NY=FWhIDt;$gfRfH#fu;q5n3%N|+CG_)8lVYU-M6qp{Ug@-R^I|uZ$P9wVk4gc}__W3$| z%HLlJO5+2PC^GR#=^lqqEtbBBJq8uq>R8#2C-j>hiau+ zpxlXBLj^N}HAe7_{h=m%ig&qO;<9|RO7Ss${r-59;6(;2yGslbkrU!b;wca~$5a^% z3_{sfW|&Y>ISz;KH~oZ5qJ@I+L2(BS^$pl?%pU$y%4KA0VPj5_FfAN+buHj`Qw@BK z-&$_S^7q^8e@Ovw*(|*$h`^XevPJ-`sW3+Q&jMY-fF@qS)m0g+;Kt%;9Oo=<6=5<( zeDTR!JJ528ij95=3Wk?jFx)#j-O|J!9nb^x=tQ?ctxq`cKeBx4i}6M%AeOXMDRMtb z;IR7*{{_kVGHVbRsVmBj%9HY51a(bC`gUq1`0LMi9=57*a-m0y46ucf^Qku{+R<4@ z@gz;c*o|5rpv{n>bK?MRljNxTJ=s?=6*lP#VA^@WIt0!lr#E3EGnS8SPVs#5#ee3# zz0Dh1(%X5jfgeT!9CgA*V0ru-JaKE~oLG!Crcah|>WN-Nvyt%<{#e}cN%QWhu_*iV zG)x{`f#olGefDbpKzcG9QmpQzs0qB2B!7BKWj^7N$ayErwFM1`+J*(#Kw+4;o=2Z1 zUZy1>OL~yYuM-O*)6z&1F$$rtU?`ub`>jZbzgA2#`b0IF9GCu3Og zH0miH)ePe1v5l727IwMNfaV*QBNjIdKWJn?2pm*Yr z-0~;xdXVJnuLmHoez(mn7zcT^!St!UzCZcqX3uRnOdOGL7ReCfAQdRc@@;slZKuQ= zX1+*tyE=qO1mn(w)oF@lW_G!nBK$_N8qW+nweR=;FTI0JA;Q$%4N8{>11Q50NveZK zQZ6LRh^lP^#UuBbnZ#2Q4S)pM4MOuiYi-x7qE!>`KmYv7KfXv?z`p-~o)YfUW= zaOzq0Gez_Wgu=WRmK5_dQ6LfZY^bJ=b1zXXAkBqkS7Vas0BpH}AJZ>9wMG?|zss<+ zE^%?gKzk!apNdliZEtMALEB4SfmE{*@busw>OmK1DX!?t>W$V~32KptUw@C&=b)X- z1g|Bp@Jw7-YT?32(P-otZ&#rezQ|j8!S&t%o<;G=`_%W*b8!(3?QMAtZoeQb_^4S| z*E`XwN89BFLTG%h!vL}z*XRXoB=2C|ZIVuP92>w9-uVX6Kd)l=$IHP?M8`ktK(O5xcIrRtz;Sv@>%%Io-)Lxl5^ShmF6G?6%oaICMuWli;-pc4Ujtl) zV*Mo)4e7;-hrWb@>~ED>YnDuFsRLMDAqi%Dom8z04o_Oqd9^zw%dXa@<5!AmEiR3s z3{y9qj8g#nsU}S4frTnT6Hiq=b7p5luFP{Y%lYFS%cVqX$Y9me&Yn@(qCrh8Z^%JU z&?M)(=JpF{5xah<8n#5zy+|C$1_=O}$QU$wfTs)C5>6qs+3R>CtAF;tZ2p@J*(COq zIjHEAGo&O&&Xda{l`-ep{r4*!ive_edH*E}A5Up|6)1RmCZ3KWTsH}%b)tTCx{XUJ zWNLD4<{k?#q8Wg_BDFg)S-e3@#!hlsE49}CDdpm%SFz3>2HUL*8?8{>akqr7pAaP| zmmu1e(%pWn6oJp0Vz#R_&BlzGR7TZl)!6gPf7fhMaF*$kxo% zX&KI=aIaMwXF39v#u&NZPU8^w2@~UW;wZuanaY+&riVocQRLLk6cy=P`E?&_k<>b<;B*!yg@i>ajrfd&D$b|_S8w&Rb0~XF3#Aw>v zDK$66U$10;K7L9a;=;sbnS=iZW3>~wPZaG1>bN0wFj7aNBftBxco9mQ4K9p^6<5M1 zIxU(>x@9L=%qU)58q_Wi*=uVZe{}&x*_JlBO#V#uGl_3STWeARWqo9#mlxY7OLVmD zZ75r;FqH0OfiPTg{0Io^Y6=DA70~mJvwcSnEAd6mG`XWjt&PWBhkTs7p(+~RH~r`J z^XuwDjj7d(Ify7qY@_-P4W4m+DD9)RjO@G zKPEAwNi4tk)cUz6q=5*3pp&!VpV$~;!*L4a0 z(Z=DJ;^v(Mow<9Tn~;2W9q+Gykiq)?`;R|Q7IHf{W;4t~_aW}d!J@&gYaD*y`HU}b z{m;vyiR_nz6Y%lReDqF?pbqHr^i7$=@PWzw&BFwwktY`0cbc={1{~#!LocTXdC1|2r>$#8+|?!YE%6-JFwI-7x$D z^ozL#*jHYO0-5h#D~YdU#uRdSIZV05<>BcDNS2E!siLF5a2i$Hk6)oVFgK+>-Q zg&n8Grm*jA+b_K?iUfDpy zG&%CI#9)E<>+GPfyd!l1q;p9y$}#8m*c-5kk-_J?nKYJw*QOwb;3y{=0wMwXF36xL z7%DL!q_%qv+Xl>D#mTkRntLS10}^q-J{032H1X0b@TfY-n?{5%CzEr-`x%S9)MC!_ z`{V~sX!}ar&jj?zLTKn~PYs-@A&7PE3l6Hc5UX3+i{I;h@+N%wcmD%jO#=Cd1d}Lz ziYJr&Qq}Ucp70m%OHS`5Nf07g5P9++4mr<}VABU30!ja4vLn}T&6)_;3PNT&QpCXz+Y2ZD+0g`g{8bO!65R<6R5{`1%S*L00FExl2z zmHy2p*uO}a%rCBQ_1m8E_@xhZnv^2XbXKP(NKh)qPheIdJbllPJGrC5oj#hbf5;ge zmlJ_+)Tb(1>a|df#gn894vkLv<@eiPA9w&Hw)a>RShD(m{`z`-f6H$F&pUZ6c?Du4 zi-D21l53zH0Ea4P-!Q&(7~H>EZu{mV8eY8*0pP@_NS#R&B!j0~2I5V_sEbFty$mKK zi%(o>pUry{*MR8`hdRgpMwklK82xwh($&Gd^_8~kVfCh6naKO)qvzwVtqx}?>>;yj z&Yk%F`-A7*rA^M zD*Hc+_g}(;z}3w_=iGR@7S+A?0|hKW{lCC0XXEIL~~dpxao|MXdRcZ&I98z$sP<$-qqv^+~GMXFe-Fd- z`FXYp|37VS)?_)(oN3NaI^4-iwOTeaW-_TwYMa|Iu9-0v84+JBwdmLPMnNvBe1uUUtNdsP;$4G0@4IDk6R6wB3jH(B(8C-)E zB>sLSzu=s?OaYD7ra-bz$_$p)&R`oKpFZF29so0-O16!#van?!3W3QOrrr5A;jOPm zJm)7XW|)7Wi_YC0+E=py9RQ;`8E_9<>CNbTy0zSjb>Mc zlTB8)wuEtKOO&><_Ho!st9o`}e_FxAU$ZB<=8KK}Mq$kabG} z4^&DsSvkIi78RUnG|$Fbuj90?Sh(mFO&h^X!<-#yl73K26jY}29of2eSi|+`pj6Yw~GJRva=@+AQ;B1vlyqcu!qzdR^`)+%9 zd;IqOL-rA_nE?>v0)sUhDL;VH%$89rv?JMd6i)4D_`Eg(h}l8wGin;@x81oS!*weD zLq;eIrAW`HP7O||89VGq>eNJMO*bvlcmCu`r5*h2Qt9j?*%qgYr&3K!S`PJ_Y?9yp zM7tsM`SEhI_^s7Q%$y7LE?Fl`YTJ@ zNw@)JN^8ra?dtqnI7;BeymJ(6<3x8=g~M2DMFBt#)l!Y5+L3Sz-MxQj9Cc8{c_Z{C zigYXN$0Xzm;gD1W%XU`XByj_{yXc5f{t3pfT%FhY84mjyiJ$|kkQ0fv%_@zsOie>S zOw^2r>oORZiuvw{ZAz!B`=7*JD$9_rTL>CAyvkIQbPbd_TIy~%94RDRj?3#Wmf;~T`6PhhwhL4xB@>c}7klorlYMc{xm!gsg5W4N$m6yjr} zw8ctcoT8~$%GIUYT|f%Z*U>}~?a-{j9gkT@o(k(*z?~B62Ud1eSC45r|IUWh!C@|m z5c?*CKT?BPKG11UJ=eUr$y3#VeBllME2=9{#FL88 za&#g}7-50pC7_FHk^)(`iu|64(MN{3za-gwZDCCQY>@U>ntqcBI{tL?4Jj?kCxj}R8ibIk!rMa;h0tx8L~L=p z%PqKZ6w3{wu%)ku&P=6U8MK|dxbz)KY z0-a;7BAZ7a!bF0YnaHCSRPT+tCS_j|zRus5$qir%zq9lzWZ%yfzOV&2YcZD*c=Biz z!n+xqBEdf@cquew1J?s( z)!9rFnI^&4w4w1xvCyF$_^)VB1}}7v9R6;Brk-Lz{{FeU1!2r$d0^pMN5M4rr1-{E zCXrhjeS{YCb}IoWS1ZOMmQ(Q3*!N9~bPL*C`Ro?NO-jHT;?jZs(c5sZhj;Pu7E}zK zzqAFFZFp?|gj=xD!cfo8w_ri-Sixz%l0*su$?5iM>3cXHuIBaH{dUj|BxBpt<9yep zmv*Clu(mys9)XpA^$>v)SEzK3P$$w3W?acxhn5p$cyyoIp~NR~czuCOfeyslTk+1e zm@Q%)a129{d(=bGOBbGk)+vxX<}sA)WE;%D<)}CuY~zEor}$t6S0f`*hR~OAMjl$J z<6^plRxjKdoNt{vJY!f$VUQ+ z#mU8Aq--*M$>5aXRzikLz!X5)L|a9TQBlObFZ| zYc^3T+kx93;a5pVZm;^Ih5}-`UxePaK6R!;jK=i0+t&6al}*kV^j;bA; zWs1SzM~6Le?ttJ&^fdYlI>r=20HVS|+gP*mTy+F^vs`V7Go7q#8kRFAeczJ82ICgR zruJ_aC?5PG@{hxVrxB-$T)|gGdXVWp77L8K5z6nd7wg;Xm4B4-<21#UP4e-|w%d0MOLy4E?%NyybbZl6k`zGg z5F8*|7gWu!IRxn?S=8ZX0>j5s@kfzqf5)MicL>4_&V)9s>excqGfFA*fO$IMLnx)<<)wae{y-QG{tka2X_HL$ z@9+m|a=yRaAIP$$`$Q$(D=BG07ZfTA?6u@H+td>BG~@)SvVvIB)Emcvap@!28omu( zq$5&6P!92tC9=O?>}A2f_2hYD#ShcPt(v?)Gl(ON&RqLP!Vp}DR&ngcc2aa#zh%`< zm`#r6?b%L)V!}VQz>@bHl+r)$yxq2oKYOoIOz_l+d?4VACj<$MSsRmZA9k?*1J!d- zf#ffBuzxibS;lS!gfLN=0CJc()_*hzzmN2zH_=Cr*C1(~cF{(kKkh>NuvmpmQ=|Xq z%CVT$R}|<({z1OuUq+--&>?h$+KIbuXK*AsruW5fKWH2YcQ+q@1p9~cjmicihyJ2C zPk|(e3r2HAXN{N8nB6E{jOLQr9rqA804UHPmkEiNEj7d;VSs!y^1FqLN^IQtA(qGY z|NrHF+PiHY55q32q9-f|2p~EbT!|T6HeM2KS`!!I;O_`>HC+uXfppSqLOIi!tPBx< zjAei>ge4}DGqatYnkVRMm;1S7pA6g^+_Z4dEP$vncW&g+1mlX$lR>fOKtBXlXMiS! z?4#J>D;96M1WMPOs65+N_+=^T!FlsyTfTWgNgi9j!}vaVq74px*gfk6Ye_KbVRPfy z*JF23AATy%YOHSZ8iC8H+DDBo=;3bm(uk7t&MC@g+K=@0R7j3_Q^r4j!SLBvbJqYy3GLMnXk=b&wjHj1V zcSg))!tceeL82UJCL|r?-GFn$jh+B~uo7j0RV{%>LS`-HHOdT@A_Dr*OyVk#D&nbb zDLEt?E<%S{L3R!5!zoP{K-IDI)XkQRfFRP!16^UlzAToSMThs+N?t;(RBB_~gzzh& z7%RI)uppr^;3(|}RTD{&DKr^{QXVsscoK=@5m@l>?MC~g4=GvJH#kU0lk17mLdJi^ zvMI=hAnjN%4h)_mKws-+ABRkzjHVd|;c}wZ7qG-oNNe#BQfuo=w52>EtxqpeY3+V3 zzM5?UJ4M*OoM9vEBJihrSA^2xEg~Q=CCQAen+d9N=+MJkDSS)1Z!CcQ!guM@*1gfn zj#O*6nAGkN`UwzI>?-PsqTfcD3YQ0v8O1%5KH3?X9*j|++0f~aEhPVN#OXoGbP~Bg zlhat^^8FZzCdh79sQ9nMx}dJN-I#-+F6^&#m0}X{4$g3B>?XUzdH#^Nax0MsDby~onQmO85heWLM)i9UsECw_ zA@^ve;3nbtQ0yKZ@!fhB$O=Qbr12*cGET_0P~dTHoR&Zm{yXYiFHWu z?3pv*xD)ICqZ7Hff6)mky`4#1M-*GtIFgO@#6Na}v0x#zX!=B`GDt;!=4pF?dVdfN`9{$}E^{-sQl^aZxqiCwRK zcsdJjc~s@Q?=u(K4iZ7x?p?@oE0&NiEqBsUIvblFYzK2Zn@rnC#JRSmUWxa=evt6} z_Bdm6{NkFFZLTv}9kAr>!Yd2AWYkUs1T>4NHH zRS0$gN}I^0S-_(qhT0_plI33wZ7ul+ZY(>(P*n3l}BXZNcmFo!Gqu^%ot0oi1RPfENMlc|;`m@}L-Li*eDN0! zig1U0u@}dK#!!@B<#0a!X(OLRgHV*DNtW5)@(M?_PN49~K&wkC%tnE0y-49kN@QEL zCyMH*E#7`pmsJfx>rLwO%6YxI7vquleh;!ql#)C48|*ib1(5D2W$iNGIDLOQh1!Z| zE>|Khp?fNDl2wYRV}P?~LSju@57l`@j#+0rv2GpV=OVdmLHma_r6A{oGZqf}PJ6kZ z&)RE6Eu4dKnh}O!H(qtIRgFUXZq&W#$jG8x5VeFunV5C4Nj1*ufyfbAa0B$>faCq6 zC;s=Gw;v+0yMt3mcm;TQfq#aSkNfkXNs`w~Lxm6pUqBt;Y9%1C0KN@}x%(Pfh;+|b zP2k?=PEA>CKCO`FoBEzNwp-@SMor8%ho#WEbl+C$Q@w+dhMGr~_6xhVSDpDC34;7= z_hkoFr2WWh|1JHb>tn%V*`XY*Po|r*uVfDtKBPMbDm#imCDVjpr#DT$lVXPT9rn4l zR^*>&zME_ZI_OJlH3{TVyAn}q>uDkBZa)nE^+KQ_43Th2#t$qm(p(4N`^_(O{xN`m zqY&lAmEu=HM`yRV&N3j` z;jWi1KOB=s*OFbxJ|UF9Rx>$_1!fjCl!9U8JJ{Wg`1NqflEJYx1$Eb?CP8%F<(9L! z=`3tUAbw})H=yXE&SMLuaRj5)1Mps`@HLnmFu3ngM#bg2bd1 zeWGlqNbQm_Hvjycs?6j%|7o*zTYQ%EOq7lUK5~`15f7KwQtd!vD3F5GtC~+{m4nq0G3a;!pJA_P=wVG z(c@&t?@qZGJKzw}PTO%7aus3|xfyt`RAvsV3@0t(77QfV$w)FO24yQqfF1A(yp-Ur zsM$PpbHH-vUly=Hhj#;pTzD0b@Dcwax;>C7+Me+bmM1yjXJ>a&h`A8O8p$DZcc07` z9L&nR%ZLSdYoZ4YaMPekL%v{e&LN*kp4e`!EFfN+&jTQmD?x~`Lz9xIzN?jtp5TBX zfGsg}lYl%ZB}Cx^Qs$x=nwu7=)xK7#8Dmcf3InOwtQwg|EeHz)?u0L5?^Ap&dZ+qL z2+ucgJyHYi)^4|fXczmy_gQ2&x4i)YfXSIIx*3BLKX5A`lIy9qExCuZmk7*C*#{|1 z!F}j`X~yjGat^Y+;S-Qs7}|M(2(yo&O7A12M3gy86Ip)Lq5+1<8*qcJrWQaj?@W_K znFN_&RQ{ATl6T0}3<9ZY2_xeA2jmd?|BsSwA;=R+`3uRm^dJ*FPW}it>u|WUhh%4i z;@Nkj7S$$W@MFD~F{n?2DoMV#Nmi9$`k5iM3pv89O!73<<6N#v9FX02mgk{6@ZTvn zB|Ha0(2Hb+QyMEM*g2v4M70h168P!}M^oyd?_09F_Xg@qn3GNr!^jc$z{)bCWaH6{ zeo@6uD%-@!Lkt1a#67U$&pohxxCgQDL(_>Q9M@{{#8C4mnib0w3rJ+uzKs&07GpK! zMBGu5)Q2hyU6x)#ao^q^KLh{;&`iDa4y$a1J$w{q=nGpZ|Mc>+Kg+ELXj6@yC4Ro1pDFoAY4;;Vxr zd8E$d6avQ1c2qjb!EJGScCA!ZD$ZS@rzEYtqGP$5yl!V2xzu}iJ991-j!U5JRE*%% z8p(=OV@I&{<*X3uF1Gr{eODGJBEjZ20@c|OsGPEsDT&w3FrF_IHrPBHQC1`>^&#Ft zn!qE4m$jydM2YJy{MhOx_ZP7=(6i*{ax~=?Cpk3PWpF~HQ&IG@%%ywnRqo(P=2K2) z8TVDE;3((kb$5eeuky`SyrIyfke~|n2%(|in`QmMok9*%t^^1pc*b$PiDw{|b8bjU zViT~wXWqxk;wEeW0I$TN!PjBn^+m-LFw^Y(JePQEI?RqO) zGtV2QNvaa>uW{I38ECSav8%QN^v?!A*BR7Bld_LW+zDfx>OsFstzS$M8U}x@~rxS99 z&b~8^27jL?#G8i3Roo{f$?h3@$Ecf|3IpIF8#uz?c*Ca@2p-+syVX=SkI=J&$r`Ao zRWAU>eNmO(F`$DnrO6-1Q-x=+S)(NK`eS_mt!SQJW{3%w@nd{=eS7@9{eJ-2J+0;+ z!@oZ*`hiH;g76dsz!(5<07RhnOTGQu`iJQayArfp-3l$Ru=0kJDc?RiL3FKuf^U0R zmVyKZYO+l=wVL`+$Kj_%t>+-TzmF6qD#hT2cKpGVJr4gW*E<0~z*aLf$RjxkQCgI! zSy8A}WhAzmzJ>8ZPXuctsrdk3LPuKj@%j3cL~2cQg+Z8AIs*hj4Hfw22>zH~#Ilrl z%Jb*zgM6_EJsqLHCO-qi1XUWxUf)3q9L_}JQkor?Qo?;9UMVQWp%f#evXP$}UX-eh z(SxIwVm9^_*SNeW>^08Sb5b&HW9|C!L|Ni*Hn%c&gry7g-(AJYly=L>o{lwb)?twM;?Sn41_WSP0+J`X3 z4#B-qxGe*p6N#wtlb%<|{+lUz&3y+`@;i=y33Lm43XYx?TU;0(VC3t_It{;=w91}5 zHhN77FG?R`W24?i)%CKk6SfAtgG6^QBq!>tM_cjmWeT)LycGZ+g-h0{AyyEXCepU7 zrq3U*NZ3CGIWxa}J`3bcs7pv#u4>S4Fk5Z#mWXZSJ7d+_l<;NB83GPTeh9Y|(y*Op zN|4keUfiUCSr)&U*yR{o6FU6dQPmi2hk;JPdRQI3P;oHC*ljkHc5~S=$8Iwc2faz$_FKHrD$2*xI}DdkRG*Ne zde0J+-`we={qdJ1x-A=(pOrp1y-kTo;=FhfJ`I&<7 zS;Y_~vW(9w^gSO)Q=`w=ZsgJefw?Rl!(}s5%`Mu^SwUHrl41puvHU|5bjqN_k5&+Q zhRz65&K9320fS_>QryBFedX(+sftKSX5^N~A`$!KZW}m2 z)~YbqW38&FUtiu;brjWy81eWVfe%lccpk?lV)S(xeNjVk2U6K~s_-TP?nLyEoald* zoTtG#ItDoZIUXG-GAcbygu*&96O!iEn5U2;uUq;O?T;#${Y+9s8^(Lo>zqf>a3|bt z5V}VP6%v8~wgmkMH$8k71c$<59pKdl<+D8ADBMswG_>Q@G$q2_CaHfEwUgEO3I8ao zkqS~v(4}s&ynj^lBaATYQdR|Wf{JySqxA^=qp0`{4dyE#nUtjkO*+hxf_%84(jgAc z{rFSIBGZuz4gFF_Lien7u>+WpCfnv`l0Ao+f{UFL?3v?1)mwjeUzDTqOz7FT2o46I z*ifa?5=_`IImn?o!z|~|=F=r^%4>9#Hz`J#hbg8)4-Vv*2+b41BS(zlAsf63D6GXhN#DZT%qqp zAz?LI{r2~#mp|m~3h!`#$dP5Ly_2*S>3M#Dox_x0>x+zK5tgC}@K+T%Ak+Y(9Ccjw zGOuAF$_^dC&=aWuv*m9lY37EMoOC)c{xJDnDI9T_?CZlQg;dN(z?X~WS}NLWTy+x) zZ}JAO$PZmARrgK#3C=%sMj2g6+4|E*P zc4n)m3*|Jq^cXhhav(T{0AKDLLoE%wK?KT~(%C!cDCmZmAdV%7f$Ejw4t{MXH<#GA zWSvd68-W*$Wk12x1TRC?3dX?SO?lB&mRbjqUcRqSWP{4_QFIm5dLpT`9*Y(DG(Lu) zw*xt)YthnyeB7QIoLuT$75M0&xXg7B<(AM=?!c)QI{ca(od%|KKR$lA97hvLzp?YD z9-3an$3#SeULlieKs#MV_(DCs#8b`rE!G9YI$9C)eH1twG|faVlB9M?(hOhBT5~~< zgZ0H|bDJm}?i)9AZ$EjP`YN4yvL|zWTrp3wPDuEVY)M|zdDBCj0qh% zP&QQ==oikI?dIAU^FNSssXr+D@r8WOzxd?mVZ?Y%;tsyNEWWYvLybjNM!6IQP`p#g z-HtARM|$6t?i(kN8S5}s`(^0&7u1xw@r?F z6yKe8=yV+n)}<&?BTP-4r>u-eDK-vI?a%@DU=dJPm!kvLWZsFx;Z{%~40j9)de&3! zZP>$Eq#vnqvB!8+UVqxnM41@nQ-St^fVFu?2Epi$_;OFk9rmPy|P}kXk>(`0P2ERCDo%wbi;1FFVfYe?lRNskK|mX zb42A_I%Pw9MZbJPFLe3kvwEfPE2q}2rT1O0^!?S-d7uVH53j|K`#eZ*7>d)qlDrW9fv7$gQ@HMcjs?W81Ry166F!A;;E80v*6 z7CqrJ#Ie116Nu6B7DW}i(xJ;`Ti<T%NI`SZuo-(|FN3p}KQm2s*+<%a40 z`1qWk4AXuyUFX{CcfLP-KL0_zoyX^I*{Qy~|A2t+d^uH5zdgc*@$&H;WS%W4Nn~5jJ#JP1wEaY1%5Wh7ME1?t;dtPvL~IAPvorc* zA}-=my4KGX`eQm&#@&X;qND^~yUl%&4#tWp7w29(gj`;+pX?=m<%%p zPSi?ZIU8&U9f_{tzy%PWI5dS*>8lP+5KOc^b!cW5I2Cs>pZq1>T=~3dSC&^^`HRdM zRR1n&tf}S2F|4sSVC$Z?2>}l&&!wI3@@H@qsQaPqNrfcTSdqI;B=F~ZkwmwXtZ92} zVu4^&D&f8m{Oeib^kEmS!V8_K;O7ZS{J0ZKu1F_hMg1bVqV$q}QkBqrCfy{4pz6#V zv^Uz!(JZp$icp9PD5a{qo~(G%XYt;Lj_Jeh(t^))CQf%i>02?C)MEg$we{iYJnHU@ zY?OXwAO2khUW7JX=KPBVpF5$;`Wmxp5f*%=C)t{RcYzmKwse~f)_{~^+R2G)Rf%ns zRKR{57^NScmQ?Pg1omGf%%ojOO%(k%)s+$g@GjI;RG0{B6YKZI(S;JvGM;2Y)y;Q; z#G+7VuCRH&C<<-n3&r5ASM7&RvC2NuPP-PBFDaL^44U%t>Y2vbD_?bCh zoizFO_5vhI*!Quz*aCCW_x)B=kV0*S&}(+MW**;LCyaGp-AZ9UqOg5wOPYv21+MAg z6lCD5UgbYQjr#ua^7gNfz+owfeuI^aR5z03$x{q9Ccho&Tciq&rm>8-Qw zXq;V~eZen9sFhR!rCJ05;uZWZ*qcDO`}7s$u&LO5OG$f5O9MzMlafxE)V0;D5#)czSD~Net019FtT6p5m`S|1TFSM*foCF7 zlB9!uVb4BF4PBOGD)1R^^-7(kZkYYb8~&2RRBu+tght4yjh0Ig#6gqVHnCsH9bx+* zKEg0MMSVElCfh_JGImmw$~91Rl3kRZLOnHL+<0MDborQ_#M_)+LzPc2b!W>O&MGdX zwhN()8p7|l5Q_>aNj^B_8&H*k;`gMM9bJrzCyp&bo1A`)i-8Ry?N56NwnA?a^Y$|iI=$oQJ$v*W zA}98@xaL}%IAm8;1Ve*0JL;n&3yYh68wvWN&y&Z-c)<=4(j0H)iV!QKa*M~;m0kVx zXzq#i?#q=WG)n9HySpYSEz$`+74iWfVGmUvmuy3(S}>1eIdfAqrqYM(ylz=%QoSai zmZV}wFeukabyFVd@8cVW5s5D2MA%#60|NQftWyI!aak5BYk@PQ6izUjqgAb>Te3=| z7p094HyBAt2H;WzKI}W=Pi3cs3*b-|z&3M|YBh7)Y@ia!(W*0tqG(5u43FU3pP=37 zhzHZG?(5q^4y6?R8kR`zxuxjT<@xkiqQ6$=52`=eW_7bt^k8nvf&9A&cBnQ-I*MdR zG*)fC-oPlyZotVvy~Rr3XEo&O%`<%%mHC(YFqhOxANxMe48g~5oQgozHtnFcs>@v& zTIvJ!%Gn^a^6^c+zk-j7c1QIsoXb$iEy90o6%_XJ(TV63St1dRH{^}{t)^ih9@=#HB z!#O_c%K1xjA=$6Z0^4?rg%yk>D_>Ls4B6XMx?G07#=kj4nJMnom&Br~E!vVXOM#dY z**ub>oCAhL(wS4Bf+iJ}g5DmsXE_(PhS|ZmGYt%vt{d^$Vr80}0x#E_XZkRiCBM{% zNh&$%!^%anVUlIriHV(pLDGV6gIfhJA;ur}q%{>y36sjHy7E*iC zt#?sIXWnn_yQ8CI-AYs+Wgsg33A2W3sn9S-DgA0MeRUvIr!;1jC!a1aEr>EkSCHO4 zwXg#cJb-yLb3)DNV!78U$7(rKG=hj1Mg*kdJ|z5Hc`_SDQ`8Z)Cd;iE=Nr&^U>d=v zI@xtb1LI^fk#!-nZ<}$gBJ}1s{aF?$(tXgTxgRB@+6gUVGoq4Zrk}P-Hbh$lX;+~r z;WcT4(xg>fnp~#&Wx>MQsOFhIE=!k_KJH7G{X=Jl;4jvllCOC>8=ih43wZEWUz?W0$3&lfNb4RYd8`Q+I=o%A>i556xrmLl8ak6%n1&X zV_6ls)q3kyOIKnq?yyVUpJ;71hcBLL1x%5Hq*Ncy&bol@#m*p4bA_@bIJQB{uq?yb zsEuUxTQ|V;NaOnNeQ|*6)myRp-~aqS_{8vRRQQUZfClA3k=dhJ%Fol!(8xmio&>Ng z(F4anVO$Ha^+mrBDv6*Ep^HGiHm{F@0*^jx;A^EeCLij|*Ltu^RlR!zqjJhu6zjlb z7k2Yu1%>15lZrSn8iHx8Jfs-rL@02e_SmN6w)<`M1j_P#eO`!M621I^n^;-+K&It( zf)E{4=Dc8Bb67mTNw6M5CFnmO2l46xN!sDb0)@TW*BBRKS6FC0sEKefT>H2L0?)?oIw|Wn^3EQqixDg_!JpG54sP%ph|D)&E{`*1OtdHC;ZG_Z z;!2^qQ`dnC0;Em==GL)S0DY086@2U13n~0~2+*ooDxB(29^sCg!>ix-#_#S+sBdTp zRqPFK4dzxkLx2%o-1EziAIZ76$u^U*syf>XwBIAz7#V2P0g4#U4}?A%60fGb%M5XT z(~ccDxu|S4h5vs15a{nZ{&;QYr$;RG0xCubuy`{>4fq1d{iXUUUNmYvM3$yK(zF_% zzv1zcMsgCUCf+R-O!QP9TKb3{%d{%VLj4Wzmb4L@wuZEt6H9ixAk`uQRMV!RcpRLm z8+(Ihin*Z!*b2^zLr3+4o1gxqPJ;mJyh>>k+7Zyz|89QVMU2KOND)G_0@ zU)WA9%B>S(95u52i5-c1G98#Z5?&b6FMuJ64LjAIrhc|5z!5 z!Fb@sI{I-bT1NEa!=6jgm%<-c@k}{*NAIfBSvYcdH!mSF&d;k(-yRdilWNPV(%fvW z_CGms|I2Plie|DYd-8B`DUkHpvzH^f0Nt*v_jdn7?M;P^p)%XO_6O${&5V}h;FcuK zPc1c32%Lucih1)*zwbZR_m|JNS&mP2EmJM=tI@Vj`Tm)`S<-3b8B-AOcP-^XqReYa}isu{la@Q{|n4Gz|<~eqt$%}vSQ^k9JLzO=O>UKAa6a(fGh9DxgG|IQjy3QRpw26#azD3 zb*!raC6yO0a2AGh4PC{93OM6lqKYL!*4wt0=sLj|j~2&+Zwc-57hU6?gB^;lulC}7 zC`E1zZxoCq9ZZ<*G~D2j^cVd=q*9@U*Gru{GFWc>e=2WBaZUdtN5*4fC_%}^-4^YP z`;9EDz}rsX(4jDtT1(!>pkn<74^>%DaFHO^LNi1S^e~%7L@~$$IJ+?h7noa6i3Dmy z@yO68p6@2h!$2JlSv>;$LajOBte;`R57zzXdP^5nS)Q_>ax-KJ^*VUG*#7faEn|Pf zkw;YDr>OJ=CL~-&^)M0?QdRT77(>DW7F{yf~*v|N=z<^F; z;;t9r$CXxj*+^Hiqe0R2>i~BfJl>E`ay&fDfa@yYBE2%sti*_9k)W@p!VE;xM6rPgg~DN@$t~T4Qn`s7u&&*adPNrsib*9!@M~yi>@DCP`^NIGhayt1Xlw<& zxpT-J4sVpgA*bCh?49ETx5HBJPv|y#H;_;ti*j;tBEelI$`{t`QHO;wTMm?zQqf6K zRui#0btO5Wa}IGH(0L0=9g#tirmdk~6K-Pu+gnnZnTG@pbd(ZQA;vqz1iT0z7hYqq zTmCV3pEOocN;Dx1oD$ZYxh8kJ2Bt{?T)%B>KjYUFF-wsH`2MSIrGgs?O_5mf^AKoY ztVS&RVJ;y}o^iehFS&0(!@l=77|`_c>jpHPsEdZ%1@^<9q+hV8QGv&O#p8>{-RZ)P z#C3J4mpgYlo)5V@7s|Na8mc8POXHIPsPm{zxW05n>+Azpv(7!x?p$>@SR9C=A9#2h z|9E(LS`^8H>{iOGgXN{tEzSh09R%BEzpRUXZw-IJmDZHtX!P$2L^RZ2>OUCKZ!2pC zl6YCD;)+Wa=)4b@_azUdKSQ|!JTiLVj8!9O2!=$zi1lHhY4I=YTeQL3gDf$>u%Zd} z#HfuEaPB8go|%zA91ymtoPct_hb+tQer!FnS&cAYb8SaTo%-EmUe%%u(*O8U^)IW=5{+?*HH@A~@Pn^SJ zf0De^?Gg7Iw@LOV?2`Pz6tR?AP`iG~eyQAkas7$sS~apyRPIpr4LC#Nsn@Ptf%yP? z8j%@9TzFiyJ#C>=7z^;t#!x{Yc7tY>y58@_{y~6&&m1wb@M(H>`Do428>L`H@ z*0uN-@>SIZx;{M>w}0mUW52-9h$xW@4}+r_#1A?|#SRbdcgcu>?F4liF6XJKXOL_> zum+TWS_mCSqZRX6#*!D0R=6hmVBK4g%q)|LFO{1S3bm>OMeqvX;YjufNXR%A1Ald< z123%;s#>Mqol$F_-PbzPhF-*)xe|;>X5(DdbRuf*@qGNXZfq#`d})Ogz;Fjy_8xf! zW@kTlE-1T&KsJc9Lj>;Jrl~keqpViqRvXJd8p=fkMc}kl*7ETe`8| zih7(#=_XSOEB@^L8pvYb+M$TYw8o6d4I4#mW2vHtAHfr3& z!WfM3SH}Flu z_dOEIQqP^hC;>`B)5T0MDnjzy7s2&<##!bF_CMm*LRk zZy*9i(5b0#iS2v$Yg-j;p^gau7@z;*P;ne)qVm)*2XqA|+TYrLdM*a>Ec^{4&-9!q zaTJkJ?>bsuN=yKqB)^|pHISx_^$5w(fA9Q(=KMF!KbPcCYL@8TmVAHwA(atNfSl@R z3M#PF*gVueoqRy*GjhA?>v?Vl;H}|0`Di|Ifj>$#M<*P>#s;5ci(7f5R7C_eut<>| z$0vkJe3mP%9FC7Raz9Xj?ACKXwF|n5FtNEChFO_6`8YlXC8wKo2C{_LmU1>YlKsS1 zC0UJhhS5J1#$1B&11m;t6Tz4TeK_)F_lvkw2NkowkOKFuWyt{>1uQ_9w=IO0HwL9<7?P{}@|Pq(JgxiVej-1{EH? zow62(&BY!I2H!b%i+wxS{!#NH8EWS&Zr9vUd6>f<;3}y!sqS)0nnC^vPOo1m2pF0z zb}!~|m9$sp*;)I8n+94ub}_*=OeJuBE0*&X)pIm&PH>f=69v>*FH$iF@^5fvE$+%- z8`;_VU`X02SYtWDwSiB4p{`@^R|%9)tTt@m7}r(YQMXp2X*HakD@g^%n>K1I)Z#rR z)Jl#UQ^wVs9p{c|`kB--gUY02092BdKbBdn{Lwzq$lnf?4CarStd5P+bNdHzeyHw-3O+w3bR3aA}iJ2%KSYAj}dvfqSX4tB|q30Pdv=@fe)ybLI%08E*h&>E((E7<-rq zNpO0~1q3T));jWE1|RXaAG_rByVZwthdu!Ib`x3sl7CY~Av^`rPI|b#ffPqD_R4c{ zUj`L>13B_oiDd)YmcR^5N8XV?8#MWxs{&wwmzRkPKMNHeHyk`nBm4P3-u@z|Nsm-z z8WAd?%5Fo>4?*%eiftWj8q229qwU=L;x0gV1<8T4nsF0KhR2}mdy=IQffpu{h$no6 z9Q^&HaOIha%QsTsx(-Uc7H&H*IQ6i>3*#S`qkZaa6os_|2oLI{A@71zDRRU7KHSV( zN{??pK8W>^O#AZuI~4$gC8wu+3$q3ONyL|2EfOHenF_kl#YUfAzQGMdu1-$|0qZ@r zqyUg-0)~Gof$QCClCDl?p~Y|OD-Oj!-k`5yUqA*S?~n}%w}@Op3lfl*czP^rI=F1P zq807s3RL=}oA=4sRXi9YJZAgw{ zvd{yyE*nlQj4UI`*^)36A`%YQc~ImAzp~EE>U5p=lT*8s!`6W6P8k?`Dmi&6claXq zBZG0z&Z15Q^(6pga7Wg0%FZ6rC|gK?DdHgI08~8w^ZES~_c!yP8kxF_~dM+a$yamZeom6%erI+WlfwWNgn8?IvWET z2!bxuP=I#_WUsf&e2sE&jt`@ak+u*jkb_^fN+Tx9^YuyBxHe$5^J`S65Nx-S5mSPk z%r=Tfhx(J%fy{NrCB}{(n+-=417BLIWJP?ZheF+5q)?^O2_zesCWRCzuP8q61s?Lp zg1jnPZG?mfkOEJm4oM%C(Y||=!m&Ufr-@Nc%w4%j2hEivF|wAc9rO)(Kp}3$XV zk|CBHa1}e)XC7RoNJ)mx&Z6QtP}ZrOalL!C56uo&-DweESm^{xt_7M|;<@c4s_ZWG z>BPpta?OOzma>rBCuy_&$xSoE@F8t2^gGSs@roJGzEG#P4BfxSEo1l#jJ!^ zB#c{)8b3ld1_|ic`*VNGnV_y;q5Gj8GnRxG0P;jGzYYDwT8KZ{;n9i04Ae*S@%KI# zN1$Dhnv1`PjU;wbZP1XS??KiI_twkX8^zwk$H?y%KuLxBW99narci#X9m!Sx_(W-| zWTzLUMH-2=XVlGkgmQ9$hF+eLqfVmbwMuPg?bBDQ92t9NezK`G-DHGS?`fx>M2Me% zgG@ka%G4xNh5sIw7wTzUQBxz=sxF^3=!_f^mL;G;-Fi|Z;X?|xsJoo8f%gnYT54-> zS~(0;-+>b+44H3v1i>F*_+s!B_<((lcqFDepya&|wV{k;C?aSEQp%o6_X~UMji?}V zB-(>fSPs966(&wDxVYT@#GLh1QnaG&szJIRi{F+{Zw^!B!(zq6|1=V5AOOo_r95CohF8Df~sWDR6Ft zd!W2Uo1%=Ekf^R>J2m@=Oo-4EkzBf7be86lrg>&J?n@dSN}v8p`bm}qA#OYlNtlS= ziR8ehLXdLQewI{#KI~n3k=XHatK51TJK614#m_LbBrizOF$Hhs6a7? z=F07?Xjl3TMehapF5Dbbwap8a**uFPI85Y9M8}J~hvbR=ZkKnVH=*>yv_}7NlexF9X&1Y(AT$ic$J_Y)4)x>uz_$%*RpLCQx;N&%5Vv!df;G6iFEXz+#@f;H?FuR83ZLLi)arfiI~x!5sL$8GucyqE zO#Y=FPMuThaDO_b?&4rB^pg%HV1ll`)`fM7C?!=_64#zwx41GJQOz&urx&})%*C4Z z(nH`~FuJlE#FXeU5AEP~Gb!9YnyC zZOWeOJrS5KU*8k?ZZZQ2Hm85`gC1;cl9$(y_n$ubhdpJ6<8RT*cc;rzP`CZz_3h<# z{3gty-w?2iqW`%xqN|-{1{G}EpXw*mS+Mv;I8fa zQ=KJ~s{)qtJD+bKlqTH`06_Q}6z+$!rk0HDx zKmn#Ms#tK~l_CF8Ou?zUQH+rCdcd>#sJ{8Z_|gd}>UG~EQAq|<@W2IPjT57a0@2n)}dV~(luhS9mtP` zQDIB5+Ar(Kt?Y+% zsrv3K2|(WZiVxlth%a0CTklBiA>KYeM3bQ6H|5sO&WzfJb}RxQb#KmeluocW#{SVc z0$eY31*mN{Y)~NK9D;8w+#hN|uf5Djv7_Cvn}K+4#B)Lt0_>>}Q9$(`8KKwT>Iz=} zL=*Y!b|I^qGVUgbgC8h%{qcQ$xcqgb4;5@IAHO}n@IgyJ8xsAYG82cbfC;w*{JlmV zV{ea2u>T@WSt^E4{4zuurAmJ~5U}I@U zt`Ieee&P59+%MuzUAa&Di>Tb^5EBjn2eNN55`)>B*SZH5^6ehzOcM(}35#b0?rkX= zdhWY9IQXhS1AK3CFut6`M0>eFh+cH7)QW4ne&RbvU&zkN5xKhuT)*t)E7K$fb281~ zboKVaHX#@)Eb8MHCNT}V`ezLVBw*qjpc+Zj;4Q&DjLR-g`lg|H-$y9SCn^V&@ZJ`#tjV^AI-6@v~Pvq2I_quyTn_NC3-b7%|%fS-{q=V z*r6gVj+(2WO4z)#`FpOp;lVebJjh~_^m*2Gq1YQt6*s9hGJ!+g*VS#6JUcw?6)66! z{lS&n0E#C!08}|uD5zvb@S)4XyvrnuX&@zrwxGv`5jvul+S+Tw_2PDe8@0v(TS|A@ zscZf=5-DD!ZZRoTu#fxgGEvM%RoMWzwlF?w@{zO}Q)C~-F&k)N1hWk1BN1w zo=60@>bcS~=&G{z$6|}tM>|DEdzzGYx zQn=pV?m<_v3JjWFpF^d#L;=uUhe(u9xC87Vw`=Y~*6u-c9W_Eq#5}aF{4?*8;E9@s zxh)&Vb>$w|cew}AC5=83_JQGJ9+>fx9v+D;c+boea|N`H^T-OKR&+2mH21_YX6;YR z8YiL>B!QjT{$sO9*?6f*LINcyhk-EhOd(3P;X)*?@$O4mWgp!fm5(8xU+!xlJOFtp zssy9;9H^Ob`ygeC)}l@g#efb*%y?_-74;+|0o-tvMCGi&L(}xl(u@P-$GH~KuGkAA z@KU+Df2AM->@^ZvJX0PIlpL=f0-dPa`d{X1{_oT zmFCG*De9+>>Yevy8akpLqs|~bLS-c(b{Mdr)iQ=3P>X-f>oCF)g{CkghQ_vzOSm~%rlMY+j-W|K5HWWSTm$h4#FO^+`3@R= z`X;dV-yUW*BN%{(nPgyb9>0Ho{1N|#MBI+UdHp!8j&qy^q~*}Tgf9a1k{m=pzTj8)4t$Fn&q_4< z{<61{%*Hzx;K7ZrowAIQVSe2y3rwB%P`*|x9tyI#H$0Y}IvGsUnb$^SDdvz}O^r2e zAEMpE+jDZy`>*Mpxos?R)T(fKDcul1uok)Q`-j-y33c~(u zJ}u>`#Kx!~#uo@}F+mpu(Zs$hy^rD97*zR`#mBTFK1dDOalNgfwr{o2D0;A)q z1fr~|r2qtwb&6a=ZRejSXE9tcmMF%{kO&%5K!ESt&kJ<$L3egY;XD#i1or;eRw7-L zx4`W{F*jJp7E16&?5^f;#b!K}NtrHjHH;K&n;Q)I)6X(m3{t@qdzuOxd~%8&z}R+# zoIWzLq=+f@4E|qy#iV&s@jcQ(Vw0)I0fHGLRqG%v8R2Z1;SUW~Hq#_sRwv<8q6LC} zqDM>D5M&W4g|&B!C~yzWEX}y_D`u9iRC>|OqBN-y6-HUAMtuD{Ss6mAeilev@ym5JzG2GF}a~sA_)k)We9YPyNB=SnQIE3y#eSVH_+t zP+iVr-%MQykvI?nx@KlEl3&6#v0!KdxDOo`2M#rpgE8nb=jBq~FvUoAhT7ai68M*1 zObx+1!v%>Xvwyb|Sw%>k**AJsv*8V0sq$C>;FBIL55iTfX(=}a6o9gIQKd?hA{{fz<|FgTv%V@@~IU;o5(l83vwfgtcU!e;Xnm1wBy{Pi+HxU zh-IUaFgFsE#J5bAA8u2Bpt{{bR1%KNd+mcjOc+Sv_LV``xDQ~fA16xf_?-2D5RfZj zSK(}Ag@xw*#W1rQtBFM*Uu_JR%*;F1z%3hH1!sg(B)-l@CtWC)`Xc>Ss23~Kr4!-vD{Fu}_+?fi>3$V4xrGAAlQfWBM}g`Q>jvf<2n4GrX)ySN2J=Ki zmBmj4W?KnVU?PYqn8O(qwG&g)N_O0pR#r|)8*r1n8b=Sd$Sou@ot9Q$dD&(40s%1{&6=rMVp7 zuNvvnUUn~{9Xg1b!pp>5lwo6oin|Qqw_%809$+kAoF*Z|lWB&pu@<*7(s_-rm8z5H z8`$z(#NSe39V135y}Mv52eQ`}_twCcc5;NuY3Vq%(6_dfC&S2aLR$?+E1&XXI~w~0 z(=E_=$#s#?zYH+aZ{;t}pSU+S?t;vZ9ZL@l;Nr33Gr-UUC;c&Kz(nBj1t%l{ffqbn2F9z;R+!gPzhOZIwpZ6u7Xc zkOTiMu9wgXvERkhdT6In|5e+M8wUs3F;7_-ZC2}%_OiO@_6O~KX#kA#s*EX6PETaa zzFSgGX&KYGAf)xtUO~e}ou?ExpvL-!=dz!@trASeIGT@oQngSZ=&stC8uJa%`<~C~ zzGcvrBU>`JQehm!v3>$xnc>kDJm+wGh)Rqi@A_2xBZXwMAQbOlT1WPfKbF08sTs>& zxzs%f0+1ED1#(ELf(kt@H5 zr4#6nNYvvVjh`F}Ko~DV-w3a8RR-LCVR*E2)D6j6!)ERFQ%j+GF%PVKenV zz5RG9JS7c8VBlb=YY2rAKrlgsm%`zw4f0C*5aChG{l=E#zbLC9*{a^9WL~-huV|zQ zDi^T(3+(*Oje_Ynzls^h#I}lDR^Dbnbd0Zamm)E}tR;!e?>1Fwg#!yzH0B{4~ClW&PeFgoyoHv*Y z&fHKCp2rXDHR*n#?{a$-qQmK1yOk(fU$=HERd4(2)^4R4|H)e5UShuv{PSoXTw<@C zrR4D*i=beZmt7s->)iIY?w8?*mWa-Y}Sv3yay&xJ)Sb;Ic|zDT#FE z9nqUE6MtaT8vk(gwPm(S`#d-@iIhUjS$)o^kdVNev*8|CUy*r0%4hfsN+HJ&?ALQm zqE4|Xq9%^y&Ngu*ckV&lsU%FP&*Xk#JGG`bxsm24`x86X{fRyVdTsWk^9m;2C=e)* z%r;Cs9XMC*O1hpSdN`U_dYfe4RYmD&{MdO9U5DnpW}4UOP@@!lI&=rq?AkiYz?Yxc zMRxCWXLWyaxCTwS1}0NSZA(MDlNaZjYyV8h*xhXi8xOjX{r~s(m7E-$3p%E%XQng8 z?+!_Ilj+NSe7lun_iHWgSGC#QXON^%wFE7$e_dMFd!3{M?|c-iVP!fV#KG*X z9;sK-aBO6+e7I#b-N>csTZF z-;ssJH-0|<_W1NPPWKCV${3SInV0xqJpcPlBV#G3FPv|*b4VbC07Z@$ z&A?!J^6luAs#&J3|GiJ!`k$RB&DB?i&Ft6Ls!x7#4n|sJ&dm7n^5bzHpPnvBO|w1s zM(J`mQe1V$j6`uSQ4t^TO&uv3q-u~M6m7D6tITUMtG*BG=Ql~xHhpD4k7Pb{zFDSi z@Y(bQs>tQwWL)1NLVsJghu86qNb#keecD5>dwzbQt92VV)g3M;pi1%KRD0-JSD7g} zf*pHHlf%B>(uQhXCwS=Wjt6QAVcEW2B0f87pAJU3YOR70B#4+-t5gUodS4S9eu_%m zLFVN?=gjHLRok?K+EDpuiKowuu0+j7{zEUJO7FO{H=y%Z#9-y^4Q8;%=e@N$Rv=wk zA`=uW?J8VDq~M1FUTueyw`T?(%=}){Onc)%QQmJg^g_$*_w|W-dv~Qp7N<{mNE#D> z)CsmD6`|pl$L-x<0!Q*j_h4T4sM?6T3TH3KRY<5QA~TYh6fRW$wcq(28(dziyr*A4 z)a+eobni(QI!+XOjd%Y$`QYr9uOv)+gSa@4MkT0ly8e>cE3_HBIpp5~N(WWbamNP> zSpANhlu$5o>OshhrI89L5+T9ij9UkIWD%k5RU-si&`MEt+-+4$Bljkml%RvC)YSBp z6a+Gr8J&8OZG(gN3vJTJA~F#L*dTGKFGf~zw%iEeVkUHz2Mz+C+@iqe2|Z(>thN9B)^4--cFl21boYI0+` zby}x_>IM`47p8nIm*t-LQb}Cb=hPnTAHQJ;%)e3W zwYqf*oGPWxA*>@54<3m$g<$%|fnGR_siB6Vv8oWY);I#Ft=*Bf2pBe$pBj*~L+c3p zv)sZ0DESB*kRtFaUZ6lNH&<5@VE}k74QHgm)>B}WVzT+z?*Y_{G&v&RLotEBfemdU zLI;rU}Xtq zixK06Xw4jR#98bDh2-=_bB$Gva|O)CRQ%}7+I&V8E285gP^F!y><$f zaU~L%1A8Gr@pExDBs&wGz8rii4_`oaaj>m3K6>+UPp60oJqZJziJs)D>r{2BQ-MD07Q%Y~d?`f&?@kCo%&PyYju@X@DbvkbfhHV!u4iJUzTy-tkb$&aSq~*r z&px@`h#*nc$KSDqKGwG%kI#}y&!{-r7eAT+mF@Dzz!*D61xOaovjQg)m=~ytJR>8R zqNLy*b>}cz@Mv*FPpjgXHCHKI+&3~O@-G^4U&$INrS=xNupu@_HL;hIgLSDMKo5XT z5QrY72&pmzr5-wRD7}K_-M^bV)WWp56dCeTQp=Fz1bky|Aa2cw1~CM!uI$i?> zq^qsl-~%1G4|A8j_ZIQmvw%0?O1ZKKhxO{!MOdt>Y@=;jg^MuMPVJWP z;4nI6odWNQ%?wxyPDXZLdMm}p*QHA57op`wB`vKrmZXOu$25632fFp7`SUflL zBdizrI);Hl!1YJDN1$yDYF^MsY=U7z(_{tdyj5FE8%W?{$4q2T(kRjcRvW46zCrCH8HFi2b|Zjf(VIdYT;pa{ z;g{ESgL20FN8J;C-jONIvA@oF~&vZHI_gB>MFrxi}x{UKb zct7>9&(`K>JA_@mtxu{ejYB+C9v={5F?2)e$+P53esAD#Br(D&$AbJ4DrF17Uc_pg!6u#pm5MlhXjh z%X~w*=kN)QYw*>j#clfh@hV?K=}B-?L$63(%StFqq6=Pr-ah;>J^?1$-=SU51(~B0 ziBJfplUIn;N2wf;C1jW5#HVm+{B!ChJV8?>l^E3ARjdS&K))p}?rNHDBRT}>OmWM7 zE@VQ;^&;TtfijIy&alanpX2BL*{KYV?+@GC_=9?i&kyhV6EiUQfT;aR0t9SPWHiKY zg8%99d9lBL0PCVVVURQIzJS?D8h~ss_eE>H;NRwlx0jcXcbY(SI#erORqo~y2z~Ij zLG3=7SaH+S6J|16!DvaIQCo^9ma;qPMu=XN+-xu==$lQpLGH(y7RKwZcBUH5)oIXz z|7ChKUNGsA($=pMz{5=Xczj-;nB=LN-+dq7zyBCtV_nmjikfQ!HrZ(-FHh=PL*^8$ z?NJBCpsJnDBM!O854kg`3rbVGs_4rGA2vFbfKT&updI>55KK{y~`vOS9`lnVpxwOB+vcLcb+23+`z7On11ov zU~XhbH1pFsK2z#Ti&%AzbVa_jU1N5u9YXxoQHWojKSs0_nTpbR2g=_R-7>61B-fR~ zD!!d^*iY~JVO>;T$`}2WzDk6#a_P#H|avR#tJ%GAas^+QfgzW;mN?1b&k;FYQVx-(1RFI;xS;VXgqP7_AGh~EkWexXS!gcIr2%xrE=A|?+;e9i zOgs}JjOYZ9;kjOSIF1rNTd_N&6EQlfiEu3*3j9qh4qVWeBtXzh`dxa-uRooNKZ;Cy zV@My(qO8n!r7o(s^Mownp{hGr&4oRV(9*SyR~Du_^v?B7=t5Z?l>mm;vEjiPTj;_; zy?A~c-xW5vvJ1u)2K&ta_3-#UK0SZ_h^--c{Q7-NAJ15l2~p|e`||iLP-kv@Y^wBuB`RV078T8xwGbs_c^TbiAFntc;vUww zH*VtSDc?QwbexhmfiX{>VNoZq;n`#S5=etTUXm%Pr^)oy)6eAbNUhyuKd*nL=LcuX z$C?~XR&Ra&Jsy{oJC2{dXCHpN&G?U^wPUEy`N#8^j8*+O`*_A=&GnppJinwnhOX!D z$(QBn!Q=PWeK{>-o=(Iet)Zc`5KJzycE`0*VpDiMrwEBuj&8xc(3 zNPdonD~~_3kMlqN_Qvg-tS!BO6U4cb_AcsG`tY!sspTnW+p zB-1N-mb)g8R`hlJO!b1-$JgZRz5U2+CvMKnTFQNzfBc><0zb~o7E!e(tH`yK+Y}$O zEN^DjS+ATXqx0k9Rg)C3_}NolV9C+XE&TTW*K?xYFu%;L`HA6`dyX=c`Str>KXUJr zm_lyips38@|D)1OJbS)KPzweU5GMklC#J-_d#AQ>9b=ozL>1R3iEG zpNTZUYSSR}?d|2q1Nj0!fcygtz}^HXN0BS35KEyPoDIIEsM=Jj%?47N7K*e3(+O9? z3|ILGkS%QyyAf$8c(8fHJv^7th0qGmM%plZRct{P1Z}hhnw?AL=f;ts;p5}Gg13u) z&rDQ}AByTqNNIsOX2P@#M^wJNOVL=4*Zh4%HqtQj3hUM5$CYvj$vKc>6Gic#G+USd zZ+!Zc44@9Lcu|kH8FUhJ4<;|K3R_oryjU_QQ>jBhg(%#(1QPR>Y5@w|;4ihM$^#wi z-J@ZsKlpQ2LYgl)3aJZ)BcJeuxD5EUIC;;&8<+b@76{~v4I{^)K>j2FdK?v?-Ep7v zFnw)97;`uZ1qz^sG2`uIBULzri=`&P!R=kojxS*UHLIgJD|iqumt_72O^2Wir^QYi71m)N~K*iljMY~N(%!O_%wnW8NDk?6C z2ia4vqa~|W@5~r>ebj_Up7s=L?`@fUn}gV1R(H2@g_C9FX0us%PLzh*-Bd?F4V` z_YxAvuZm-fZBY;ynF)#}zi-sABfx~^6}yGx|J(w2+>5?k;Nba?c*;r zbt+2DEHfXIh5$iGTA0arZy0h>CMv+fs;__`HL>}iK(<9CSv??+%y{_c03uuy_7QQDEHWTJLUBvfG2 zbR-gkVwqo*6z7&wfHTjnG;CJ?tZrXe&sdX$Bca zpbYl#Su#i5$bG$lj~J>Fgq%Xnp>)@t-F5Dga}Pp3GGfm5UbMe(6~EjA`wP2sdpi#M z3!%0SM%vpZ_7_n!1JsJ9@;pLsD#b%!VSE$VG9Z~J=m+?XXd>Bfp|YaC$gbT$n`ie7ry<5i*{vmme0C$IZ)=bda_Eb3 zgs5?%yep+%dEi0v)vMym8cE4Zs6q~FHaQr87^#O4#)_*0wM)qS?u}3GM^Eh{r~FEj zRPCx10q?2WCDSuX1#6M+_1b8&7lMHtMpc{V6i;>53+l7(MNHMxUXB(j8`Wl5>e3OoIMvC<6_Y9= zPe1H04Qtbz?B)ST)kMD-4^a1p5@(ltxB<2wA5do$jo5Tx6Q4l)kVYXp8`NZhBjC1> z8wle5tXi5hkuL_OnXG`ClIJVL^HJFwISgLHx->~QhRqeLQ-D1Uly9P(=H|AplIU=w z0)l@|kMQ-F=Ask)0=}LeWP*3JOJmGdl31qps5NG*jw^WIq{)6)Kn+1Y_5vaupkJ<| z{EhnagQCzC%km_ldsbYTZUgxS=%mmNuYh5r)OFqFrg14Wkd1+g2%$2Gkl2Y^RERyJ zOre3%hK)h)ju>R`rXeZC~> z3cKxU>=CR1sy;5ag|wKyCiN_|c8B6rITDKE*?6<9GLRQxJ(JpnWg{ zV9|jJeZ`sxgpO*GxVb4u!S<+nSf6_!fPzhg{@e+xKss>SnJsGs2zl%A1G}lMM5$}7 zvgVN7ygI7Z{cXJ-gkshZvOE;iM$Px*_LoVb74hz*KGS*VLgwfuN`O`IQGd3K^0|y@QPy(uJ9U#21Mp- zr)RD;@N9Q_gOs4eIaRAt9%#W_7~H_JsyH)(C4K#PD_WtwdD#TGgD|fZq>{9;8>xu6 z1IP)8D)`AztGDqFbV6Earxc{?BGGSijRYg_n1Wa0sPGim16waEk=vy>Ymdj?aBtF z4lcG@Wr1P7-AKT#D18Yeo4elsV#o6+v>S=dqSCdcECMvqR9cbn8980qUf|47&Zh$p zi*R3(>q6~MK$R0D8vq~=dMdhqdYk{J6n_5{f-x$_C?ydDFqE5+7^55zP1#4`Ux1Av zmp{64ToD9%6*K4B+>F^?NPO&pGo=P4GG;*6A!|n}AmKlcAfggq)6zQh@FgEp(^RTy z7_kh8S}2y$03u0C22cFNlz`noEIA%C07qB?WW@MN88N9xFlvk-yHzsVzKp)wP__r3 zk<=+V;gZ2E3Dy^FF!WFclW+kpJFBSR9a7c?$?RoADr`I}8w86Pfm;Nc~0l+ss0 zAIA%GGv0GyPc}+k0y;(aG@J_q59Msu+p;0z$MKvhNH>I{N zOe14>VIQ^2yy@;PsC`+25lk$wgJ+@X31T$Zz@ZR4`IP1}5P9S1!6r!`(1F32fP3$< zJThCdB|92tCA@`H39cGk*&QD@5CXZA1E;l&zb*-y6&v?39_Fx>8~>H#i%W`8w4jVy z;1LTYGl`#t-k*a}Bp(9kjkcn%H!$k38*#ev_r=P*FIF(`Hc$JomjCr3Wcn~(*ONZ> zjgx6^mhHHCw0|>Qn1#H2XdIOzEhOBF&X)FC8Lvq6o6HZ*0%Ttg-6B`r1ofzFHPYm^ zh?wN4Rpvc+Ke)eA0`x!yY!Nm${J*ld%P3>)c*(8SfSOAuTfGpmrJl2t9mRJZoYG63 zq?4)dZvJR8nJ&zFTwlS)`=lCXn)cf4UsE{5?AFNq&}>}UAMp<}zuxy~tHJu2-|V+a zEs%1SzK05@?5BooVKVt6?3zp*!~JOkc?bOg0MFs+Wt8msr;SYq$!!mpm*6g8{0u(Y zS<7@>mZ;@Gvl}Fb8lQn;S|PESNCVXl>T*W^4I@_viaFVXOcmz_#fN)nZpfmW+HjYp z1I`R{U%u`;u^EuA!~04IVj15A>PRNuu%L2MCalME9EOYKE0W1YoA&AD<+smQxn{`X zn?U%?B}GCh+UIMz`|pcJOOOYNt{sa1#RuCj=})Ox#Y9 zmEaPe35r45JHZ1OY9zTP$qPDLz)ika;X#hmUl#jWG{4l~+DFaX1q+_zB3uL*&F=c*hxgGfJ6ZmQw ze=h(P`48EbWm#_n5!Hcmv}iQ@92DTvHhB=NS_J!+Pl*dJx%mZEOiHR`w6io~piNb= zG!R=Y<0@6n_jkB1{3Z%JO7s~^u@W#f+wg9SbmDbp;+bC=1wJjA4hs^C%@gAzLG?|3f=k4H5yEmBXva5HRqcr*EvVYJ3Pb=BAym2b z@_8%B5VOd1Op{2bx%Uw_6SKpCNxdYkq!}(pu2|oOpyegLVlhj3FKXg=O2O( z2KhD5KV(;GZLnZA!j?d2uwcBk3BIf&Dz;x%irkrxv~Rg|V-LnM%Wdq!LUTK1km0w5 z29by+lw%W9ig&jAd9Q4*4k8hNAw64F>P|$0S_DFXv=KFAe%#q!0up{so-QA0F_I2;Iy1AxkRS9C_rrziD*Zk#)18ibaxuq=|w?#03lpZ4*;$$sRwpG zyrVcil(=#RAtoe00w@mdqX`a<>}kG(L8Pm6nXP4(@rJ`l$RyY(GnWur=~mB?JVVPi^a`W|NHC|nFqZ(NajhA^~ zLWV5965hGlDc>*wD;)0lw8nN`F-i6p@y(B?r=UP!o1ph6*KI4=d+=H12We_A#vAD5 zgR8HUekxl)G4AO+#>iI8bY;%((MLdt6N6~s=Yjv4q5<0g{9vD-e;yKT)WsNkzC8La zf#qd{Hyu-B#_N{v99;VVK zT~J%W+kKm4S$qcvAy*MMOR-e&>-0B5_mLbv?#DW7D6T{wEoY39?1V%n@Fm_B^gq#Q zhzAB67J(1bgD_q|m|!(W*7DIxdNH2iCf}Oa^j3|+Ry0mj=?<@!OH)c#mT#^v+T-TY z%4WLoZmSC)lU<=-$;TfQ*{d)s6y@?lq7Bp?>c47ohemMaB|L*5xAv{b!k@HD2WK70 z_Znqd8jsk~=W!g>fC0rg=xZWZ^8#r(97PM!Nq2mHcFg7O-a1+!HQaQ}o}2ZwCC1C2 zudqQ%-W05icfUvGO}oRcD2(DHU#``8@0^``dQhfS<~93LG?0@}G_Y3x5Itr5AUl?Y zCln2t7-Z=a*nMEK-oig*2~G6(KsS_pE0}uJk9vGJ>R%Z8)WJSaTvhTsQHHz@)$TiN zd9!^yyx}qgQc3xZ4$5*|ciwi`f0Xe+h(zp_<56X%3+)a6@;lR<$C20$xx#?o3Gk$& z$}~$CwB8loqKB60?d_3Vwr6>X(DpI;5%nF?zqJ{`ocLyxZ@NK9*NH#`#)il={obT`f3%>#5=zZd3#=>{+v z*BIpEz_S;;GaI!J!gb1bQ~n>;-fT&BBstUUM{;Zq;F7~`j&OvOE~zAka~A@@fjq&C z2oJ`ROF#X5s%8ej7A$dsMb@cIKTz8jHPv5#%}u#d%#ZO&7`A8>T(6YY5);GW1hx?J z;%YUGtfH@#7Egu?X;n=qFO(9uzyB%eHkEl-TA}&sKyAaF2O0@#bS2N5hsK)}(S`H} zYZKwlvOhRf2e+Eh*n}=RTg`+wD}rC6YE>{$vU_Z=VDpIeBH7s&X2lgF=+YbU)|duv zeN6&iN%-maU~XT#Zr|2)&jrUr+Ail(DHt&_x>*ab{M&<=2+2`HJnF3>#bkRU*k@^q zIT%zfQF7=pI^h$|FC@{x43_s;W^UxjDFCemS&rE8$r_QhCO>%uE3mLp)T;!d0yD(M ze^Em-?hMcp^$pM~Hcx+r?umw7q&V9}ebt8+1a(Ys(@BSF-bvRE%QldxisQ%|LXkG6 z9KM$4RU^JGND&BlC@>%H1>%%P$IRCiE!pQ6xDMP`mc`jG(Xp8D zbq^5tUVwuo+80>;kQ1xlm4KCj9AYgtK!7;$<}$WLsU@Ck=NpyL&l92X`9B2Rd1*o`FTP8lu0+jXl*Tm9-AG0kH8}B=Hkw^iuSp|~_Q82Juq6LCopKd~Hn*e*8rp+a4L&9SwtTqxZ*}^K+ z2adF4LE^}MdH59OScVHbFilbdfIV{OWJx-(A}u$??iG_1$8N2>#}ptpMn8=v%V3XP z1oPAJ%)0tD_8&j~h5zPP@*-6s==Gp}jXWi>OGREq0`0KRke&6-p9% zu^Trv@5(IGZE0{R2OD#v>SiR1385}}5Mxlsc0J%smc+Dv)8|U_b)^sTQv2iW@#82t z{VWdQ0_TvtuLMKiKmK~q?nSV%on0Ye4rDj_Y_fuATrV#=F<|Wu_g*P((iErsGo`rQ ztU)|`P?XsYwvpNjMOz=4`Hk0DkAG1Ro1%QIK-)nWE#Hehl01+lxrOkNmXNCXhiXD1 zKJ#j;ohJfsNwOydRV|!wEf{%XE8ukT+O!pSi=?c{Z^Ye7fwRs+3z(JV_@lV)ii zEUmQGXQ-vvL(+6`S#Y5cW6RU3#*pB3+o*l>_wuN~BU#}0AQa{X+tWJ35)IYwGm~AN z{c56I4+R9{BH;x}5tO6HG8aTCknN7ds3p@KJQz@KvUMfVT%*w1`%P1^7it)NdYs0O zN5bS0=P*HqlHTCK$#2}*B}u2q)#&$L!q{>b!iI#JSzxuR@LN~;cmu_?dQ|OBRNTgF zu^U>YXPMknXQi23Fl9C$h8TWiLU9rTVZa20OAgnb-z6ElRSpf2Ni@xxq^pn5S8U6H zT5JwuB&m%2x;fdH`4@O-UoTh4Z+E|1Ikh1&)94PSV`be0hG^Ka;7%B^&Vzd>K^l1TtL4OUm?W^+5rUhI z*d%T>L?CO=jMIlxf^nORmA4|%#=@K%2{~(#OHOYo6O@p#sD&@d*kzjaM>@Sm1$*1@vS-j<6_C|xPg)o71>vg-lTPXJPmResvWu@P zj%7s;7%*t#v>a-*F#=|3i?iIUHw<{pWkFk|Rv&?A>URFV(2G!Vza4HL*@@Ku5jyy{ z4ptA6g@Jq+r^i3Xqp{e~#@1F)?E4JK&luFqGxch`hr-Fwlcu{O!mb95GY@Id6|)pv zS8f0}h_pM`nf1h)r7gL)?ti?0d0C{S<=F*oKdLh^b7Uy5@bGPPqPXaiT-Od>1BK^t z5KI5=q^Jd*yeUK#3YUKnf24n_o*4Ne_)A7ojfAyh2A2RP5EX{>x*LHPz>NWyAYpmF zp}^P{otTJ-6=>H1AR@7k855(b3p;tvla~8ZIKiXSj_3z_luExt#cV^y#kqZ@9%rWd zl8n>dQf;e9l0!(Q(yA;tI&`qT4y}Y@Nf$Y;O)O=B#NW6#mcbltA$JrAC9y0lXnf)s z4D9^{wkn)&%Yt4XbogKVyB*Mvj~OCJ%2Ay;d<6t?;Ww4xiqam~^U@q#Z!fqL#3$RS|4o zxUTg4h0G=!ZaixVFT-;09X+WfXnkp%RfxkAiJ1@f7kuuea`L(xO^)A``0UGTG~+C5 zfQ0Pr1!|+bT?6g6jeek>sbkY5Vrvz!k z1!R}-7Bv;zW>Ckin}6tu6NtW0P(eaG4LH?EU*K<@(5q&!_+)-5#XUBGo2v+r_bN?@ zL`N}Te0Ot=uV}*RmqiBvP)!PGP2K=+D}d3mBBe8os{XKUdg5Aj&wR%d$AQmzuy1kO6vqg)Hq61Ks%p zd)a3FUmP1}B*XR#6T!=aic7n37osR%h}FSgDxlyTCP;7TB)3acO1zq!-6Sb*H#^=i znOI0Nu|iHYw?qSj*@@~MXrtAa4oL*cmfhY$kiyLs~&1j|p2-2%YDWKGKp z%-=8t=OF3_VXpRS-gu|bbx_C>jzj@JamPgn9F81HnlAkn4`MOFe^ur{oYsSovJGV= z^yKPKkk%ObIPP2c)~-Aj;68@2a$UxHAdTYSL4nSUr@isaOT$XLopeS%T+4YD6e2xQ zu>9>dUCJ>BtQq1Yh4u+~BCC>^V&;yEbNj?87tTr6tV@u| z)o0<*=luVbiN)8@2e|9xRHO=uC%_S(e65JEoC0XPyGIi*z_2NNE@vQJx)4E7bYv_d zt;2~0n<^;Lmc7T@W)X2Y`a)f=Cv5BiF*LteYwU9KX6B}Q|M59Z02Y2`4HQ=Rp(wz= zGgM6hNa==6zr|~ITSxhB>GfId$`I;fDMws(SjF)eLEdu%u9i)K!X!)fV)*L|!O9c& z)M1XO;K^#QfEVHu#V-9q^?8XydEkZiGhH^9BehB^f8vI)mm>wp6~jd(T%f`k1F=IG ztDHJ(T>T&#fBqSS;w+QJ=n~)sm`r$OsvuQbdZVo;T+xjG4HK@H?e2sp+Y+Nx3wA4W z`jaSCq!lT-m&`5M5cjgB068ttHt=jgP<0&#vJ?5BJ1xL2Mx*h_B;TJ;Eydh?E1N_~ z(|7G@rl~6t<$dMN1Ptpk@>VFwG8%7`@R)b&jhma7+gGKRp;4m)83&3Up8qSEzosi- zvPg%4L0rc}`UpgqSU6#5y|v(WM^Y)sDRuPPbS>5(wy%pXO;*q)aUFF<77aMxddvo? zCI?8bxqev;yJqf#)dXdb5Kh45(~gh^^HvS$yp!^-dMu|U+|MFZ6YkFjKOVZJ@0xk! z24tuyxY?m^s>rx^T)9)3PXpcq@o znU2L*_3KUElHCZCA~e!uuRikxu}d#g%$0`@+Orv(^GjJ-;{^`vB-&##Gbzqjos6Z&A$bzV%mETmQe7x69I&v(XZfhK;00! za`psV#$uB`Nhk)$mU}Y*zHW;@{!4&}fy=qDO`Gx950f4!4Btrj2U>^?0 z!pAc1*H3UU1&kGO(Cw|{V1qpW3s)#{s)&E%WFYF20=NkX`b5#MxzC6!KHYzk6)^l? z4+C>gj2vJV@@hJqNSQF)NQ`{Gc1{a<5)yb!SO;Oq@Bn;i@HPE9<|?xF6|l9+MgE1p zv-Zjdm=7fiJ8$#4@>zxsCZ01DA|2>xA(J2i28+a3>el$Z@60<-STMZ!7$k8@S$=8N z1LLIa7_l-^mZ8i*|2v)7vh!h)^D-^TtH9$K?=TzY%)8FsMLD#gsGMjn@G9bBArB3> z-oxW!soUh(6`wthyMO@cVBYmfN;1`JORV0N zyiRPl)n&M4gK*tfmQo(YIBEoqfrp2nrsL)>{U^p-lAJb>4onaz!{c&d_~zQB_uLLV z?%=9xu$GTuCca%Qki^2&KC#WP)04+r1G46^*IUb8g3!U*Yi#}@xD|7`Y>$RZJ;6Xh zLHLrs7B(EXN=`fymf=F-W~sBku|GihA*qkPa6sw%OyKPWPb8R9;6VyJYX_@EL*zJ| zNL;{dV`n1#_;|M6bk%aV(gA3H+q&)`i|$C7Hjnq#;4QsZMz&rO?2=3q&c(|xu1`5{ z!WyfR$O5pI`ewL4zjklqgF-`y1taR{c_gk$DT;Qic~Zv1%lLzIS zrWhxrBYmb}k@XVyoUzENAH<7lIxEh15l zwdEFXpD$UaqXdWMP3@{6)_B4bgb4#>AF}?+_vD;;lGt&bn9nEieKrzgM{14%+UG8y z0Ma^wmt_6h$fSXV;SBJg#LE6saBU!cb)IkUz-7Q7HE9GX~dZ*@SAZ(Mnc>kb)t8-jF) zg|8vM8!)(r47lqy5MkSy%fcav>%8t@-W_=gaXGTHi7^sOG=@@~+Zb))9$NMkzQ1y}WtXd< zM^<1 zCBJr%oy`y3LPB&OUi1841HJ;wTcGNuDv6uqkfzD=N!QO~TgqXBo@9V9or|%*Zcf>KWB(HwiG03w&uS%cO&VCTKC8=OId_{kZUI^UvU|w-g=ZBqm$oG=#(z{x#q-B;C8cwJ zqdY!mIS8k*gF2@ujYDwi;10kd3n=5pA?F8{x8{mHCeA78;km7<%z{Q3l)jG)v`O68nazX>P@899YVPH}M1;752U7vN#m=asFg z`h0mLKyngFMa1M;g{sec9R6u|_piKf7cm`iYyRYhw|C+EgR?o#KRCms`(d^x&ObP# zr2ApcaXbGI7TSb`w(dD*-)DqR`j<2`+~E(d3@gG2`(F^vAO2w8cy4|kB;aFwd6$TS z2hzh$k0^x_Gr+B<2*W)G#Ri~CBWV$rw-PDlfkCn7L4D$6O)Zifo{?cBMC0uNo%ERo zd}#HC01%P-+Of!BM#icY%%SV|oQ-w zu+g|Zm7LFhdm=py8^Dij4!vpxno6AnPT%Ir3UD{DZ5QMgpuC-7_q!u#QrZm zTqHRUpNfHNPkh5RPrSSwf#T=p;g2%FJrZP>wH04Xb$=h<@1Jjj?gv2dJl0?sCssf2 zJ6;*Lz`*JHDvNMF3xOX>ofzTEX&^@z&WkJ{($vKWkrU71cK|u2HaX(4vs^G}0_%eY z0wyhQh}KKkm&FZ@iDznYOx9fwnI1`lJyF-tzmLQ3%cQ8sgY*b!g1|>ha^IAxqdqSe zvGt@VPJL5cmy0_cEcvT#Mx=MH4?)s&@0`CNER@JVlc&#-J*5m=}TJYXo-dyX1*GS4X?8&2(4OgbGBfMj)lX-CW5kaCY zn~UDch)v=t(ILpgj4MP;yUkc%)?C{<0QQ>3uxC#e_rrY9%|AGP(fJ4Wbe?|*%c$H@ zZPy>lh^=M*!4*3H;0kre;Zp_y3kOz+@;ABmZQ)V}9=l#@yUpUQfvN@rL1rZ20ORqWt- ziMAj)qJa{w)D3T$H%_y%_xRPCTIafiX#v?A%leDdAgBXt6TGNucwbT_?r`SOZbD) zq34l}CV8z!YaYJc2*A_jn2ouFf&#o*nM$#jyxo6&<7s#Q{CNG0B4IJV3FnLU)gD!# zrotcGF*|?Zo*3?jIc(D&RdpD(SrD0ROLa#T*LnC$gcqr2yvQt7nIk^EkuGxKa{bg` z9BcfSH8utwhhSl{vG+|w8#iOES|BSSCl--~3+6CL2Cy?TYNrq`K52outjTqRrHSau z9(r`&skB{?%>zS5ZP^S3ki9O$Z(mpFO@R-1E@Uqe3VAJzhB3f zMcUYCNyLi_fcS$9Z7RSOTE%tls?jrfYmY-i%vOEl_T#);&DMshoBzPXq$ZQP)f198 zKYWeDg}p#R;8R6>zWnhfxrDL3%Z;{ctg$;WS~3Ox6T`h)nCSmq4DH5#Zoux~M8nzu z9r(bF1QnP6WZ9}dpZh=zC4IoajCYohmcHVh9pI176e4!s8#q{E-}(!4;#oe{w+-aw zsz#})@#p|2_L&1*uhfJ(j+2?^6!U<3vR6IwZvD&xa)8x6o)R4MV?oN|kSckz)8zLV zp$nl_Xf8n>fw}={Ktd&gyaGt2TZ134F}j*HfP_;9YSH4tV^Kir{^9MU0!!6u$~1Un zciGK{&52YRbVQah$&@jD0c;&4vlsuC+D(2>qT_}*2{T`|4`@HO=Q3Ux**RkI4Fk8D zK$_#fUFSmEIjC2CH^egIl#^lrWJLv6kH2f@u5a)RlU7b~#Bh=lP6w)^%|p+#IE0F) zJM;>|+>U^3GcZ>90BjfJHB;tqvmm%xB;v7|GZsofvme}yfS}-5h#Y=BSxakPivIbz z72GTyIEM8b!OfH)Zpv+Um2O|BqmX)2ccfdT^9;*|h-mldgtf(Q?x*D>LObCkg8iHn z*#JPHY=BqLTZVFIwBjUCBtbmHwPQ--yZVpr@k6iz7yAz+q@w&0T60{Rj4wIUp_-1$ zPsz3a@z4MCzy7~}{3I`%Dkf;>~?2(y3)u*xh?VXx8P1D{1+XUJ>=aSV$tpbZ1bv}Z+{X8p>mu@Dw`7pziSGU2W} ziW138ADIF^emb-Df$rp(slA{O=J0v?)RK@5v0 zpQvJ@<&Y-Mm2f$ZF)+Qv)%eSk=GtXbIP#;udw)C%u$8fO%gxCVFm1>4r zUW#+)K51Th4ttIFA3!~#{}J`Wi@XZ+%*%8{VsburAhQOv(>%xg5Fk!<<%Ck2#;1dH zySfQSC`q0n0g47Qs!ZLKz#&KrOGpr*5;x*5A~7?Taekz;Lu2JDHsk*p-|mJv%MR4p zGNPvIRnh>2&j?T@PN*jXYuw{JSt+xlNp!yri3MOfnZ`}IYZ z#_8U+!l{OX+RD*jeT(mgDC)8o$k-#?osqa$YENX9j|F9$exqI)sGq4<;ix}fuexRq z>$MY<%>#Yvm`Dt-npc0mwWz@-M#;9enOiFaa%Y!RUiee1ZXA`m|M7Cn zmZk=G388<_46oJVCKP6P&XYY|#n|gr+>-u8$tTa0kYD^-$w_|EmpYnp*#R-giIs&H z%)b^^m1l;jXD;PTrFL5Ne;#JZU4P&Q0H-JTPoG)FplnG!@bGab)hG6m05$vZ_`;U} zXij`9I-g+G0>mhk)AB?BfCjHh2Om2INW7=s%~(xOz$wU(M!N)8p*%z3!lEFjvr$bd z10D2j%|7G!#ULeii;p{TCTAdJi#7p56F3$)SyGRYfh_RW%TW_6M{J{GR)N`su#1=l4ypIUz)tMo zJtMn2%Ps+6UL$4^5@W()XTxWN<{LyM7|gP6$SX5#<}0t?c+ zOi2YWiFWXlTt|Spz!LoTgI`O$PUeR=tx3UuOCS=o4ZB+g@d>FIz+4bD;O%5>+XDYZ zM3k0e5e`8I|1B?y%((V&wPg4_FQ5&>Jg%bc6YcWxpe)R{@tqVv$jL$TQ|Mo0rE3|8 zBUWaEi==DHb%27mF&pRPHjY^Uv&P5$#eM0*OOD0jxoRC-w*-fT?^j?jHsc>nlPw3Y zMZ=o}tP6>e*6=irwhbGPj;>&V)#wU+Uyt1bi|rL^!qwru9v8y(jomldrjURPFsGOn z1>Q*_;2y&Om`RfMt}U3lnu1-mCLp5>g^lbHkeM=;$Oi$DQZHyKEJ|b~FNi6@gdW!$ z-eW|2A_v1g5YHQcbXeRV6^P|lp$}45G5e2}0*o}bjy4;;xgw`I>YcDb$E zr$cW1oKO-Nt5E((D)_+mY?&B`A075kjuJVqNhuBiBY1AfCbeGQEQC}Um0@!fo>z)c z4x1}s{IFYQM8tvpT(wK?e?EjBmS-t8SW6a&m~6{o(22QH2Zc61n609E;V zLsB?fS06XsX@-ZgvJQ5=cE=^ewa;YK>Ll16I0Nze^1!Y7PDpDsZH05U9n~(+({J@1 ztZ!Vq#daKx8~&Sb*3Nkt)m}O$`$6B;IQOl-b5F&!+XLvZ@84c^c;BMhT{60(+BG=g zTYaw*tFAh^>eM*+z1kD2t~$BuRN4Pl?SuhFBkwXy9gV!DGv8%L-9KufXozb+x$5-J z`(ED@t4U({1)q(Q;=4r#jHm?2Ts#6o>xBA{BR-Ma6m>&6y zF%pQj7dL#)HI_UkOCu^-JK(qeGaq>q@GihBKxK#UFBcE)! zGez!>S-R2f-cqx5zQ&2&AYR`cEjv$dDNz_kEpjH++{d}RTXmPyKqoF2bW3L1^ z(}*T#np`G(;%=rzJUM7EgzU+?nHKr}38z$fGGgB+Vg2of;i?!f0gs)2?-`9u%F08bq@@Ktj|$0f z30#_RT{>F8hw8mMw8E98g;X|&B1y9eTowraoY|yMBKU2yi5tj3CpJ0bfbq!7um@K( z=449(0h)J-==J$)0gO#Vo75RG$)M1A{l-I5%F28&rZ;?jd;!e$f_DTbFo?N;z|Jfa zUnJgD`)a0L*7w)$zdo^DCr(fTi&o3pI4E?BAGjstoAuY@pOW-SnSu#1Rrt|#C02&K z-K-df#$UsF>g~zLJ*`|6?taxuZGMCEpJeXW1}={E71!ZW90W*U*s^w zVxG%EmP4(BlH@IegSs&&Ms<6y@$C^ayr(VJLIS@^@|hD3@ujK>i}TZ!V%zkNOfP)~ ze<>?`5Pq_{t20R#a1vpLs2DWAfiR;4IZ(Fuw%Vc0mBeCfO`y%e*aP3CQNut~Aco;) z$Z2L`C|WWDBE*=yyjD>-X*mIyHK8 z!Lh`o0LZ*67;9Tr!L1DFA@&EH0^;#O#Crt8y4-XEeRJJVTlJq^@R;e%9m&aYnPriwcreI(Eu+DAsmfhbcpElYTO<{ zWh(mC2m-^~TXNogR0?s0TL|0dtA?bI^@?B&3{@?+L`>(scOMY|9uHx=H-s8}0(&OT zlY%fTs>YviZU~`wVgSA~gs|0~A41Y~ofyJOV;%9TgVY7MN>oKIn9@~H&;Bied^CdG zyW2N9bnmk2d9G>7BH~Ep`L?cba}7d-@!bK`ciHwXK3s7G>d;sMAT9t8pduw@QV=zD zFkCiq_=?)6td^WvVomf_NIcq9Na!tiR6w(Ya7=*%czd|G(7w6e)at)IT;7(gBt-Lg z0QKVON9YE+9`*)&61Rx@d2h=?Kp!tS@7WWMApT1h97%miD~ab4WjDwSwLOAr{r=XD zRp86n5e%8h36(mvhcVU)xh^DaHJ2kEz9|TAI#`qmQ*Bl6XnK`Cq=;GrGzpt;Ikt7< zdxW=#RE?|O8dAN94u;hF*NOP>LxM>cacV@lSO^Uwn_~&*8p?ZvO6wg`2P2xeSE{{x z1#*7&DkN_;9GT77@Wv{GZLv9|P;-29pW`H3v-HG4IdHfLY%n}*k z^ZLRFA|GvYjDFkq3fDhA?;2FdG)Q*748y{yTZL2MyTf;It9ZwxqZHX+K-dXr6s!#d zO_4MM)CK%$E8NcEIZFZY`0c$$;DMsXVIZ!TXgkm$1+T`lL-_6Y2$bk0>_;?+u+(!)WX^9Jq?vTFGQ;H2zU0+oi?R5C=YyL>Rn0QbUI z4Jg8$K~{!R(urJvXBPl5p(hV=`fMMa5HEdCMY`$}AO1S@-q?3n(u&I1+jDeA! zJ{&?~6>{H&r$wC`W|e~>A_+KH^ah+UFhIcXMCJvIn1=<#W2{u1?(hy2RYK#au`eNf zZ=vXiiwW~1qrQ5JZ7$@R0IY8gvfeo77V^Tz;udm9#)55w^Mj7o1A(+JpRf3Py5Yye z6AX+(HhKq+2U`}GTL(uyd2xt*^w*OUY{6=N{whHZBC!X)%HKW;7`269gi*seMJ9J( zsU;~|a$ogmhx^OzQP}J?V55HTZZAYq6u*ss$tXetU4XNM;%T^{FD^6S?OkCG)E_L0 z7{;?;cL)5}=s$=sCSmm-1Q+y%&wU4+xk$y>zPIiXlJ^24YT0W|LE~Fu|FeNeK=!(~ zgyz0S#k8gvj2hkNlORTGMSpjM6;_u?a>hUxL#Cf~aiyfZ%q~nQ0a(IJlCS>x;q?w> zM@cD6NQTo0b|{TfB!5bxlxisj3i-$1Gy8)p1t{tR4qPapa{4xrl=nm-d2UJ-wE2(m z=~Z}0XpvaIp2_H^0Vl|@P=n5S^UPMWXf|C?DG@106_MyU7kSJzrcwI5FblL(|w1L?v;U!@g zEX8!=Jif>z>e-K<=t@FHbV_ta ze8R!#+ryTujlnSzmbqrw#atpLtG)2K?Z&}{psYI-qKJzT${K+FUEcQS0seu#e-g;{ zqnku2edi>wrQmGXJqeZ$?ao;|>6KOHf4+d3!q82YP$I@>eqtHHr}l+qwAC>!CGObu z^lIKHKt1g1`>&}DCrL0=#l`NAx6#}tKf6z~gGZ&s9c}Ev@x^8(3W{d3P0r*_6Mtex zk4lT%*;+f@`3|RNm>^`1-1Q7YWRY6BHo3Re5>6j2I-kC5)S32@UZx4LSk{qq1Ot(f zT^rx=UWVPaw^CRR4D~0~#CW@B&)G|URp8I8e!V|PiltXHzr&d7s44rU#bcAF&$Xjw zB?^)W@)n6Ogllph;clXH?{|3ktT3%e1AM9>T%Xf@+AdYNIO$YTGa(_tgd^5E%T$Yn(@E5##*&jk$w>-F$m|;wx$c7 zjI~}Y!uDegyF!%`zP`SPkAz2i^lf;B+i=oW-R%2p3e+@zEfBkwj8^pp#;;2Y8%^A- zD8jo{&pN&a@}ymHHNk5)1lsUcU@s{g(Hg(dzIaJpE#kBK_$1F*I1WnlPo_xe7%#ad zgN&85ZjdbdPr40hGhLbuZckd5R`UqcC+QDFoxbIyS%IXsZLo)uZpWLi)j~9`>Gwan z-LUXr@#cCE;Glo%h9mNZjquJ)xD4O#&+_PNkMZhraCP00LF>=Qk1Ufv*|@5^@_Z<9 z#i8}{xPpdrP0pj6@@@PT;wYX@Dm8t+4DxtR>`}94rnmdEaKmfkWab0`i$`NB*#tK@ z6~dj8WCLh1>>Z0{t&*g!;*YWLB8S3D)DUJ&{IuQrS>>HxbFz#1d=MKQ^Q9eG;JMWW zCrkB!o2!E)9hVm=?&EG`t1xIJ1b;>b9=c3;Y%$g)>1h0}r^DqDRol~U$hlyFXDTT2 zU}z$X{f&r-Wk~h}Wd|S9!$jfQ)F=0G##%DX;O}j4*I!7w8LqcXvH_BWz${Xv#L3=|^$jA`sU$TlWrO z*n%j5tQG#(UabQn0 zXW0^Yj*MpCr5{8T-w31+^LeBP0k;#l_c9xBf{vh_uP|;ziz{ec1e1km!|HIRS-x6g zAohHto#L^MK?!7XJFp9Ud!0znUkhguPJAFGH?mlBz>(T^y;bIG!{g+z37TLzSHlyI ztyVI3kmA0$20rV#fcf4rcb~h3_U#e}((z((;bpO4tyiwC_TjmE`HQaa*+kA15jVia zc%7C`6d?;bc)N%fEJ{l_z!M!2p)P+?k!#ftC+HivqodJ+v+{__1C9+PpZ>kavGQBB~gU+w{11UWIj<~Er(snVMkh# zTVGTqxzN_zbgO_!H4?iS!#VuC($nxw4AO)8h-o1?-hqVl$a-;Q}fT^>GNGYTQu8T%lJ%i3?M@i zG4&+5_cAznohW_FJAh1Qd3U{*{FUB5b26|<^=eac7 zRF;oj4f8KyGA&l7YxwewsUpp^f`Dq+C6{pxlMAliCgb(8Ud~F+<|PwBN|c$~grBwQ zZy2P}=7ZotL+K_jpT|I!E04X%B#+HyYHH|+12(vMa)ab9v{V35_1HD&EF?F)!n?V; znsxN8#+x;6O0C9AhC$VMm%_P&;UXiW-tf+I{^S1qI6Mr04nKaCC8#_~)UDuP7XnuE;O zujiuNF?tnKzd2HscQE2Rq11Vm*>#;?+_=p@xD{nbmfaX!t~fNqUuIX9TZVZ?G5QW( zHA=HEpx-AR!BJ-lWBGf!zl;xWN0hw>($-0xVaTfc8x&|{F>2Q^ru9n7r*EFS$Y4#jvrf@Nz4DSIfAvH@YrLTZmB2CREw#-ZiSHCyFwrb_ z7^%s#QnrK7;%?4>IsYMP6JCCF>q+AkzO^o00ojA|MIf zodWo7R9?1Oo)#!tMTP~bZ6yZ@FNz=(C@e3p*5y6lZ;#Vo4^k4ZeQYLqO-2OCYjT@- zdHTlEFBBDzm-Fu>t_3nn$*RD$i5s5a7`D|Vpa0=|^#up% zET>w5h5;e!6zDZ`QK6avPK^bHSE7L5O>i>kMq9T7mMER9t;bmI(nJvTqBr=d&K(_K z(fkk+`ThI zX2Yc%IE~0J4Aq2x*l(T(g}!Gh`0o3jv`l-n!S>kXX1yejFu4n?%!2gv$rJLq7Zpcz<5Y{PJrQ@&phcj)~1`jOm!A>G_(6p z*-BEfhx$tDv?vqT17o4VSA9ba&v@wy;TtBbdH4EV_aa_+F7Rrej8q2_V%C1}RWbYC zpT*`pLB=Td{y7Yw5YG;FS~_m61N|RVn-H`H$4JmPy@cHRt8HB*aa%C?wzs&fN(kP7MRld`PX8C9My>zpDij{ zAy~}N4AT#qQf<&VX?7)950nrM;AgMqP4$fTuN)v);()c2#i}QrU|^5hcq+ijE|LQI z0RhmVo1yrx6sh%OlWNeeUHe=E{qC=BT%o}avn|&?=->$P*LL*&SS10*Gb``#Q<~aQ zIq_7uECh+SWr-2BdcZI~j<=lD%-He$<+ME$nuUOP7bV7_ln&)?nM7|m=kN+QoU;Mh z4c44}eEz{1o!t+TPTVWB4rd@dfp|XX47k*LzTed|pOu;pb#M4LRCUET;Ukv^2Vsdk zHJV}=JCJ3qKaQpmc`iwb0pkG3d47B`MjZ$|C;y$eYaW3XEBP9(BDR>0mW*z>TxND8$HM~9Ck zGW&8>lUn)4313oALJ;su7!!Q^{d!xj1;r2s^sOy$5rX*O@w;`#VKdu0pDU1y6>m=N zEP^sY7F>4v>6wG^ThoAP;JrKX&Lc|aTCB|<-Wt1_281`@mc7XlYDMQ;rNHqv7$2SVh zy@(F_r4*(3g%gwDIKTqXlikRP>9u1n<-lMCSp*Hjl6NNRB*IZO+u&Ol1 zOh9rqz*uf|Mg&rrc{se;wtldUb2M8FR+Y^qa%PCyKS=fYU;>TSb_Wv;h%HK3Kmh$r zS%c+&X&DnW_i8C4&#a-{7WF>9{SI9}|PWCjhZ+w9imY4Aa=b*3@%HwIf~kdNvPgw02iX+i8Mq0`A-k89-pn z05(AO#*+ov8P(a4&E#vN1B@x4bG}h(UAm7+bGi8;=$M^im;DFO)4MN z9;}XpxHX!c5LcJp?&9(i+h2#LM}h%JzQzJow=4@3b3ER53~FRl&GD@CfET^#aOwe) z-OI07ToFPYs2<2mOKdx|!aawXf2vxU94pOltObz}jT>It8z&xQYJEYNY^s_Hidq2C zlSH2)CDYsuIpjwf+&g6LEb`UT)lF(m;nxt&0b8ooh~_Vx4m^h(Q14jQ-2VR3XPt7!JyXIR|6SAB!rV z{&)#hn?H`s2;`615?8JXoq}0h$Wen|Hv6@p5*G1r=xTe=+Vyn(g;Vu!ZcRZ7!Rlyp za<<<{p@j-`ZGud~PAgsH{x4lyco2#Te%vGZjk8&3B|xg?71&m;DB zxKu`hwVG{xt@A#shR(ko*Q%|jT-JKTVl=pnMb1u~N|a4s`*IEa`#Ai*%nCLGVorxH z>jd8f=ie`HqFTKT_U$Cr!*K_8tAtrAfHQo>&kroEbK(zLJCkoA?0 zhOf)ocHv^LYr`x7sVQ(^Zn=TvihYnY&q{n00QgFJ!Vh*y%U-5IrQ4wnu zlw@tJJ5>7?g5>FXsmHzy=#jSza;k7mhz-Pus8C04PAAcTkcM;@4pe3}aQb=uk%$!n z97PT@|DIBBH&c+t5k!}+R=Z;l8Mbax{W(%CZa5iSApaX0U^n19mH=YO0Rk9Um1+#ca+lnnNszR`P$>&O= zc{BV1Yh%>hS`J(@fY4h^DOWCJ^cn1C%K%C(G5)Vn6CDe##SB$@4O5z+k2R+R?JW|_kt?|wL(wcuTFQs`&EvLnXr7Sw{0Aso#cT*?{d%a1X zUug3e!GjjVT__Ul+IB{dyNM;xH<)T{1JN&A4@pC2;Z1BCLCc9g*jN{BHlOk-y~F7( zJiC}1_AfwYK*>32+5<>(TJKrwEd;5^zW%1(La^4)ma^zAEf1yr?tF0}MXL$(USJAa zugEuWFS9uqYp1i_-f%Jx0ML3U8~|hbn&G#b8zT_RnDr z@GX=>VS*bB-e}Rhps#4*1{(@oha-yZ`s7xLkOu)djSv?Lvg8_R+I|AWx(Ke%ZJ0uW znHM0p_eDsh4L639am%L-?p|Do;X<%j8nZ3e2Eleg%gie)&BcJ5LQWc7ih0pqdnhaF z9!t>DG43)GB)xcPje#ht($b?)EDw`y}@+EJz53+O6=*d(N7~vAK9WW0WKu5 z(!=wbLagIpJ{-MZ^!E8q+$9*#2cz%vy=*YZ>26m%n)r>e*`O*=<@{ip~;fajPpuNYhGRRA#?V0hzFpUK~Twe zH_(LNi52AyB@1BFP(u%_f$lO($XdgqMLgp~J`*;^W$i0OV$;wt{`oqR%1){!;Pjy< zVh8q#?t*o3^-5amRNu^8uc(t*K}M=ehJzM6!R>37#4DSbBKG_)^JCQ?ggh z=72jRDij~`eu7gU_W&V)I2$nr`zv+s`*r;DV|xBjgC^8mzr)8WAXUnc!(zy3#I@)M zx@$XvS-pnHVVD)d=_O=bA|l%gY!QJ``Gq){NkT)9MB?%B^ACHuPB8Mwf*jzJAYTBW zUKm3O()H@tB0xq~&i8N7rBj0R@Zc1*SJM@cgPwY4mxVrI_BPZqzX}7JaK2<0z=hn| zgfymaZE=BXE8HOys#RG|i17HP`_wRO|^@Q7zoGL>ElWY0j)fZO%waI3iDV%s#`--K$y1Q7^}ij=F*RrtXw zC~YMva5ix0pKPWr_kAQ|?29-+DNa0mf>S)+Hq*n zVPh6$|5T%nIvcMJ$5M58T|k1t6cEq2NSc**eqfc2;bnhkNu z>JZ~3Oi08{oK>GVn;ouZIY)p|Nwyq#3vL%+GhU-MFAH>KI`o~(BGYUs+n2?1)CYED z?tXm$b`7y>!&MxyD4c=$PKYiu$mf(GP!^X7iynbYjkjWG32h8rm&!?)xs#fPNe2mv zCyUUfu(QgAQ+LJqyVpb&JaKO&b-Z$V+Fpl+A7xLT>sgjEfW_FT(7C>P(ItP?I=?g9r-q zv{{KLa|mdpydv$gaqFA1X}UJ|0u>+aGI@GX%a z*=ya&VTtQ^gv|3Pb7*c$lp&^2CE$2`892$`UdAVrO2Sa-2VAlG<&7luhhMUc6Ya9$ zfA5daLP)x=s~m|ZIupKUmjUrAR>_2T7<{-ASB_<4zZ4_pPc%I!AyIwk`P{C4qXW+I znHsrN^>G_oYZ*_JkekT4KRSGWa_hf8{)!s$^?^v2lW5BJWbPD^C}(?CbEQ0f2)gto z4!dQJb_z>0YJ0Aa%83fY#jtI5-|nH7v;48Lcwh6&_A)5UGI$@K#7bd($nyLEL-hXR z{_*t%aa3ZW!+}8_d$ezm=Lg>)&kxRUZY-+&;0*Hf56&QO?QwAS_$F4;*|}2PV-o!NxrT9Ja}DQxMerV` z6iBs%8`itFl8*3fMzulsA-46OLA5zx97RZ-dqvFWR8~S2_XD`G%Ymfa50Vu|-hxs} zN1(xlgze~sM7?-j*({~$o;c+mKJEtvsLl{r!IYx>TIj2~y#W9fu4Ig$fGYjBkO;ev zMYn{>3uG#>Nc|1Odyt1aRg-3T zI|E}89WoG&m{T=1;u=;6vRvW7dviOlEN3qi4uaS2jg(SY59RoLd;zuh`pLujooofN zQmcBx_QNB(;~<96e*H2?HO7iFzyz|fX|WbV?o>=5OnAcijyaV#)$u(X$rv6lH*(#9 zn1L*LxU3OnD<2i#2B#xTri*i;(hf|dW0H9`FC@UVV5?OIXGa4kHF!18fiklGTufT(Q?T|5yUGH=HsAaw{PkvtX* zH_l){;#WeT=>Y+oP}lpF$idSJe*WXH*AaB*`=DZCmHj!-ADOU`-8N(B=CZ0s5rA%B zCv}R({6(l|kRLiwCQ8B7$ZZ~}4$w4(ng>{rt&g)vO(`QSXNkafii<|vr)w|b0tLp9 z{x~8yg*%L%raz8?S4eidIS9=>2v)%Z|7?fQ{y+qFFs5id;U{j`t&_G2RZpOyfk?;{ zxw;Dioxy-Lu7vKhJfRTAKt2%iDH#)28*hCs!yl%DGapsQg)2v6SCQg$YO@ATJb0*m zi^Nw76LWq$bwgK^y9H8fcw+sX#nz9UC+-HS6!r)SH4#se90gcCtoyP2{JmNiu?wNM zv^T(W_;I$+T6-Ts-XI1TL3d!|gG8|m%tLc`_m6pk6WGxs1+?&JGCM>LaJfZim3Por zYF|8VakvmPmjKf*UY4^5y~KrcTzy%k!%<2%c2&CNHldQ}oF}Mu(Up?tyo9x4H6>_v z$R=!b@IazH#$&fS=ZPRXC9*!}$*+P;L*O?n5ua2w!R+FDG}JgAo%Ey-lA#+>RjyD7 zz<7+~HkjK*(NqTAkH73KL4+2v+b2Co*Sx}xcc&syJKSoJRgi#!{||y)6J-^*M~Q;Q zay>ygiq|@y09N}dS3)c^X|s$vs^&g=yhpNesth$WQ4oIStjD?637|Q6JEjT>c7S;i zq1@3iG#28mQDg906L9dgj!jS9ucw*cR`atS94(_no%oH`keaH1A)x07&B;OIdudZz z8#EO6r<-`(*aZ|oN@=(xOH$|(ecp_|1FzxJheyd*xRR26or8ZNayA160&zpg7oC)f zHY%sA*{G=rNOw3!8V>JMbWt>8j~Bkx9Fv`zdlogZ`KjU z7lx4R!=Uv_PUE_~-GU($VfV3|B6Z)?6S)D%^8n{qKnsrphIeSqvVKU}(@vSZhj;%_qmskkQx zPDV&-d`0Q7U0|cg$9I4EZvR|4u76)WsEtY443@l>zTO@j^PCC~OA)3itmjLg^ZtV$ zx+Ua~j6Q4SDltGCW35@rE~HYguU(J39Ew{SxpJ^3ipmY0_|m3_=g0SVvCe#bIYmW% zzWnwAU*p${%4|{N_}jzF=kq}U8_r&{0&8>90Q)9?(KKc`(2M|4nHZMz2%D(qu7|>F z0Ne;F1FhHxQ|Jj46k2(iJH3-j_oa+L<6G} zi){5)8;-%SH5vf6Xm|j+vFrz0nFTz%QbUM^tyLAy(Shol@Q{I;qJ440!r_jacC{|+ zjg^wwBtc+zWB{T4$8d)t4wECXX+DxPS}boL#Vc6d@Bjw}w4rls3T!DUn*v)J$(BIm zId>|I5y;9P9d@c$cT&o-y|feTF$56zSM+NiaC3SnV&?T3Mw%YGCWIK+hU$UYstMUz zjW_jnb=h0uq^HM^5BOM~?!#|kat-U*$0B|I3jo0WcUr*FN1rdJK6~r_fDe~Y)SEDK zgQ)Z%2a-Wno3{GwKkp=Vzj3ONbHV@ESe54K$QlVc;^SWO0h>zV^%+MTZ;8dSk;mO$ zBXPY4NB7+3%>ojYhYrEQu%^b9lU&p|$IiCmxTHjLW;35PTH;jlEnzU22KF@`=f3$W zyDDcg(+E0~ee#TB_P=9JCOu)9PGFTZR=+`^_KSD&_e{&7WfJh;3+YK5jHMbDATB9Z(V>gKHcPo@=nhw`Wc@{VU`#w3skb6cr43 z>(jwhI8$(5VO^k!Qz? z5s7`oyc?uzEdT-FH^5OL#ou~L?mG`!O*X<<_RO!KI|SUatRFVnYK*Ltn0V?_0~=UQ ztuX~B#bKux(+gc>KA`%l@GTcPF}>VIar;6aF*FzWR+vgw2*8#c{^R(4<{Ff+?z9eu zF1=5B4qC;c3%?AA7#1Wk;@8#2a|5?>9I(TsD@PKX46}c@1#^x_HiDplgb5;sd|X|_ zQi)i^BDVoi-Hh?ixeW*aNA{fCVEfdMw|F(PXjmOu5pNd zqF-FG?qVkZ+rJ7AnjN=Y2|LyoPJBjbO8Npnjo3|x0hYTSDkL!M#6vKL?#^BpvPUl} ze0mggEsO4UA(J*52WOZ+_gjzUgcPf>5#vrRvTTNAsq$h{_xg}TKQsGKPtuHgNhMyRj1*qo#D&GDjxffYY+N1|Q~{1c8clzm^xn3vK1OM{Z6Ia5!Lkzs&@ z7?PHNKRh+K#>w9U14ip7T_c=z5u*>dwB+CtWF&Fy1Fl1e!}FGhCUKMN`^MBbKQ(F` z5QvZyjj{}3Jk!g1nlSi*s$U&0fB z0A*i^iTZ6R5NpMy^Grfj<|5?6&jFUNXLni5JN)JpBbOrFzN|@}85z%@U|}8WA1qFJ z#KZ90kZY{R83Ssc2;pRF_Bs^J1k}8N^?r8}6Y`-ke^-8er_m)-bq&M!a3`z}+|A4Q zM(pxHW|m*?Z+{W9{61pk`|;9TcZ9#w?0@pZG0{YUji3lK3(j%*RxbWPy%m@s$vv zpfzvzPu!uwkMBeG)JLl)v2yt-T0QUo6))1n0_Uel^uvr|&>H+*FbD)c{%15Y{~0a3 z|BSluS0wdUB=uJ$CHpuUOWDZrkMt_}V;=n~dpZ7*%^d$|cXQ$|;%3Qyjy_~Vr+ypa zAOCz!{q~%tevSJiyE^((wsriY?Cbbf*@W@0&t2-bKNCMDrexmn(dW9mqhED<$G_^z zoRS+n{+Jz}`Z0_9#?Fn0Q8#{6fbR0>SJ~##kL>g4H{IybuV$ymKPLuK_Imswn?3q5 zwFzXq#~<2J4feKf_~>IEDlIsk;kQ4!r{Ai75=<`Y2qCRie-%3z*h39BSv{|o?_o<6 z0gPrhf(1o`f!a0B1~I$~=;qMAiKZnJue{5cc2)nnFr zGeQ0}lG89B8R&8HR_521I0RfUUiGjcR`0_PFa#OUFW%|;FU9L8SzjKyp1=u-;gGxs zzL7jFSARUc3%8im3Tl=A<^*uUiWiV0CMYUP)uaAPK8i z-UgV}R8Q5WiLaAH9_6K6yWR_xS#y51c(_ z^R#eQJa>Qf!13nUC2gA!Q^KQPlPxm{6;Bs(?eA}I_dnPUxD!CTz^Qc^vFrK}g0yT_ ze7?MQ)A(S^DDmJBj&tpY25{}lBf;2hlyLP*czC>v6TB)0urx&Hh+|_}F^XQ){D!hK zT(?6-X|t}P@Rynt^7({j{Qi6=kCF|q*|gxQ{nJ`ViSoDR&-n+3$D4m}=qBePVQ>SP zIaYc8BnVa}*gq_G4zyilT(RyK&a}Wbn_t{Fwsj%P3!!pBhk$v9h0HWBb44MoOC6E8 z)DbTWzeFV$2KZ&p)U~S!?(EQ2l-q3MiI2;f%w}$(a4pEj4FkDJVO>0mm)qDDwb@Z8m!{Xm%RfR1@bdZk|J-|0wa)+C{NES}G*5I+D)61F=ZYq@D7C;OAhHCE@G=om)!POQCBOb#hY8Mj-CZg(NfeuO&)7E+h1 z_Cu112O5+af$Z|f{q460_%1)k&^B)Z!l_hT(*=pnZg6{$_z7cpz>2p_N$A~IG_&5s zdT!jA-vce=OJ$i=x56tma2tP(auB1B$b4M9rWAfP=7yQ}j7N*YplE~h9% zm4q&=l5GIw5DjH_f=wB$iShYWm?4l6CmlNG*mM)|LZ~@}#l-anz$XEXAU6V9gsi70 zbiEskAid%SfDI*Bpey?Uf`0rRBGR)%5$j1@0{0M z!*#6DBP!V8SH9=1*~{L4JWe|M&pM&KMK%xXx0JRV4V+;ft)T}!7`54D>7f}dl_m0m_UnqQD)h-j)U8dY*>Qe9WU z^GhiINcv!Tsl?T-(WnT?asqHs^_Q`2%9ixd{&GqWOh^SpLF&3EDIR)Y4c$E|cC%6j z-9}h*L_ixP2f|^KQ}9S+1yTX-eIl%R;hE@SteQ#EzY?pw%dg>aISH@k-ls8MZf?kpW%jPsE%ob>a z#GFSf#e1OS3{;}^IN^p>kO10Ckfm78`iD|rt|(%`?%A~MVn(Gt z3?*F51RBB5M$Gz_wLUyN+Wzwq79wmx_=x{_>s~=T0a)`)&SRH^ps2ZZG`?6 zN(Ry6N8;vqJ`m2^+^T?KYx|7dY*5^)(nh$=g~^5Z4%Mns&Kr-!=hHE-$Dw>&b#zy3 zRjr~4`I(^5nerf33+$OhAi7)az_uckvOVrF8G865_V19nw^?IGYy4e-mU1bcHwGqT z<6gSMc(=-p5mLTKmfT6%xbj-Aa}N`Y&%q6-@m*O`AwAl)`w$0=N7OBIgVNH8hS;m+ zj9@J7qIphBCyH3Kk-dJa;PS^Bp9@cQpd0OUekmf+6l>;~dt({laacZdkX1-BK~>M* zjgeFoflY_UdUYI?6F0^2Ih=0F(l2jlTpoqf<*1QXmK&!wiEO|;mbekfEi+F3L*?rw zCVFWfSwC4;R3LdggOy+zo_b{f(QcibvPdvdnSE=|txwA&1Z|Ae8Nq~fIA}Z7s&rgL zwhUAG`TG-zh@MfF@52Mc^*8dN5MTm9b6=5(sH~t?LfcwvytLbhWg4|J3&HAKNjwg| zy5Wl1G%a+ob-j)Mg-%gG5#HrF>}mwEL{CetrqNpDa}qUu%A=GUAz{U65#YLr!Ydt|QPpNJ!+`g$-C5 zrfMKEk_c?VTn05qU$mrRORY^)%lpUuRVB!=M&8{U;iSW5YngovlGEx7&B{cA{7)}r zAd$X|JTyCr-h}CG3>jyi=rv$P~_x=~CR$ZQS zoktiHCEWx=Mituv&Cy~--bY@!K>JWS0rv3^#-zqvo5 zRD5+_7dxD3+#*6mDR9BBR%E0S6)j4FsR&5oI6ln%Ie7sHl2OHM>rRRliX)MA-91~a zKs@Bn?zrPE{a=h>d+8?3sbx2k%Yh^xsX;9?15To-Ki;4h{z5^yMlasFk52P`eg2M0 z&c;61iu@v3z$0Nn$>A=qxE1;vya6}~Q+>$PhR}DCE=5LxeZt`Yt`8d39^3yw##

    *9Ms*`SoY-@Y? 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 z%0A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: &fn(f: &fn(T) -> bool) -> bool) -> ~[T] { #[cfg(not(stage0))] pub fn any(predicate: &fn(T) -> bool, iter: &fn(f: &fn(T) -> bool) -> bool) -> bool { - // If the predicate returns true, we break. If we ever broke, then we found - // something - !iter(|x| !predicate(x)) + for iter |x| { + if predicate(x) { + return true; + } + } + return false; +} + +/** + * Return true if `predicate` is true for all values yielded by an internal iterator. + * + * # Example: + * + * ~~~~ + * assert!(all(|&x: &uint| x < 6, |f| uint::range(1, 6, f))); + * assert!(!all(|&x: &uint| x < 5, |f| uint::range(1, 6, f))); + * ~~~~ + */ +#[inline(always)] +#[cfg(stage0)] +pub fn all(predicate: &fn(T) -> bool, + iter: &fn(f: &fn(T) -> bool)) -> bool { + for iter |x| { + if !predicate(x) { + return false; + } + } + return true; } /** diff --git a/src/libcore/str.rs b/src/libcore/str.rs index 4ab6f659e9c0f..d7b27f53e7a78 100644 --- a/src/libcore/str.rs +++ b/src/libcore/str.rs @@ -3404,7 +3404,7 @@ mod tests { let lf = ~"\nMary had a little lamb\nLittle lamb\n"; let crlf = ~"\r\nMary had a little lamb\r\nLittle lamb\r\n"; - fn t(s: &str, f: &fn(&str, &fn(&str) -> bool), u: &[~str]) { + fn t(s: &str, f: &fn(&str, &fn(&str) -> bool) -> bool, u: &[~str]) { let mut v = ~[]; for f(s) |s| { v.push(s.to_owned()) } assert!(vec::all2(v, u, |a,b| a == b)); @@ -3424,7 +3424,7 @@ mod tests { #[test] fn test_words () { - fn t(s: &str, f: &fn(&str, &fn(&str) -> bool), u: &[~str]) { + fn t(s: &str, f: &fn(&str, &fn(&str) -> bool) -> bool, u: &[~str]) { let mut v = ~[]; for f(s) |s| { v.push(s.to_owned()) } assert!(vec::all2(v, u, |a,b| a == b)); diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs index e1947b77473ec..7eba2cbf0ccc4 100644 --- a/src/libcore/vec.rs +++ b/src/libcore/vec.rs @@ -1744,6 +1744,7 @@ pub fn each_permutation(v: &[T], put: &fn(ts: &[T]) -> bool) -> bool { * ~~~ * */ +#[cfg(stage0)] pub fn windowed<'r, T>(n: uint, v: &'r [T], it: &fn(&'r [T]) -> bool) { assert!(1u <= n); if n > v.len() { return; } @@ -1751,6 +1752,29 @@ pub fn windowed<'r, T>(n: uint, v: &'r [T], it: &fn(&'r [T]) -> bool) { if !it(v.slice(i, i + n)) { return } } } +/** + * Iterate over all contiguous windows of length `n` of the vector `v`. + * + * # Example + * + * Print the adjacent pairs of a vector (i.e. `[1,2]`, `[2,3]`, `[3,4]`) + * + * ~~~ + * for windowed(2, &[1,2,3,4]) |v| { + * io::println(fmt!("%?", v)); + * } + * ~~~ + * + */ +#[cfg(not(stage0))] +pub fn windowed<'r, T>(n: uint, v: &'r [T], it: &fn(&'r [T]) -> bool) -> bool { + assert!(1u <= n); + if n > v.len() { return true; } + for uint::range(0, v.len() - n + 1) |i| { + if !it(v.slice(i, i + n)) { return false; } + } + return true; +} /** * Work with the buffer of a vector. @@ -4566,7 +4590,7 @@ mod tests { } i += 0; false - } + }; } #[test] @@ -4581,7 +4605,7 @@ mod tests { } i += 0; false - } + }; } #[test] diff --git a/src/libstd/dlist.rs b/src/libstd/dlist.rs index 93740f31b9b27..741bd62968018 100644 --- a/src/libstd/dlist.rs +++ b/src/libstd/dlist.rs @@ -393,6 +393,7 @@ pub impl DList { } /// Iterate over nodes. + #[cfg(stage0)] fn each_node(@mut self, f: &fn(@mut DListNode) -> bool) { let mut link = self.peek_n(); while link.is_some() { @@ -401,6 +402,17 @@ pub impl DList { link = nobe.next_link(); } } + /// Iterate over nodes. + #[cfg(not(stage0))] + fn each_node(@mut self, f: &fn(@mut DListNode) -> bool) -> bool { + let mut link = self.peek_n(); + while link.is_some() { + let nobe = link.get(); + if !f(nobe) { return false; } + link = nobe.next_link(); + } + return true; + } /// Check data structure integrity. O(n). fn assert_consistent(@mut self) { diff --git a/src/libstd/fileinput.rs b/src/libstd/fileinput.rs index 90774d19595ab..2c5cbc1cbf927 100644 --- a/src/libstd/fileinput.rs +++ b/src/libstd/fileinput.rs @@ -256,10 +256,21 @@ impl FileInput { (line numbers and file names, see documentation for `FileInputState`). Otherwise identical to `lines_each`. */ + #[cfg(stage0)] pub fn each_line_state(&self, f: &fn(&str, FileInputState) -> bool) { self.each_line(|line| f(line, copy self.fi.state)); } + /** + Apply `f` to each line successively, along with some state + (line numbers and file names, see documentation for + `FileInputState`). Otherwise identical to `lines_each`. + */ + #[cfg(not(stage0))] + pub fn each_line_state(&self, + f: &fn(&str, FileInputState) -> bool) -> bool { + self.each_line(|line| f(line, copy self.fi.state)) + } /** @@ -367,10 +378,22 @@ reading from `stdin`). Fails when attempting to read from a file that can't be opened. */ +#[cfg(stage0)] pub fn input(f: &fn(&str) -> bool) { let mut i = FileInput::from_args(); i.each_line(f); } +/** +Iterate directly over the command line arguments (no arguments implies +reading from `stdin`). + +Fails when attempting to read from a file that can't be opened. +*/ +#[cfg(not(stage0))] +pub fn input(f: &fn(&str) -> bool) -> bool { + let mut i = FileInput::from_args(); + i.each_line(f) +} /** Iterate directly over the command line arguments (no arguments @@ -379,20 +402,44 @@ provided at each call. Fails when attempting to read from a file that can't be opened. */ +#[cfg(stage0)] pub fn input_state(f: &fn(&str, FileInputState) -> bool) { let mut i = FileInput::from_args(); i.each_line_state(f); } +/** +Iterate directly over the command line arguments (no arguments +implies reading from `stdin`) with the current state of the iteration +provided at each call. + +Fails when attempting to read from a file that can't be opened. +*/ +#[cfg(not(stage0))] +pub fn input_state(f: &fn(&str, FileInputState) -> bool) -> bool { + let mut i = FileInput::from_args(); + i.each_line_state(f) +} /** Iterate over a vector of files (an empty vector implies just `stdin`). Fails when attempting to read from a file that can't be opened. */ +#[cfg(stage0)] pub fn input_vec(files: ~[Option], f: &fn(&str) -> bool) { let mut i = FileInput::from_vec(files); i.each_line(f); } +/** +Iterate over a vector of files (an empty vector implies just `stdin`). + +Fails when attempting to read from a file that can't be opened. +*/ +#[cfg(not(stage0))] +pub fn input_vec(files: ~[Option], f: &fn(&str) -> bool) -> bool { + let mut i = FileInput::from_vec(files); + i.each_line(f) +} /** Iterate over a vector of files (an empty vector implies just `stdin`) @@ -400,11 +447,24 @@ with the current state of the iteration provided at each call. Fails when attempting to read from a file that can't be opened. */ +#[cfg(stage0)] pub fn input_vec_state(files: ~[Option], f: &fn(&str, FileInputState) -> bool) { let mut i = FileInput::from_vec(files); i.each_line_state(f); } +/** +Iterate over a vector of files (an empty vector implies just `stdin`) +with the current state of the iteration provided at each call. + +Fails when attempting to read from a file that can't be opened. +*/ +#[cfg(not(stage0))] +pub fn input_vec_state(files: ~[Option], + f: &fn(&str, FileInputState) -> bool) -> bool { + let mut i = FileInput::from_vec(files); + i.each_line_state(f) +} #[cfg(test)] mod test { diff --git a/src/libstd/treemap.rs b/src/libstd/treemap.rs index d68b08dc4750d..252bb1a6af8e9 100644 --- a/src/libstd/treemap.rs +++ b/src/libstd/treemap.rs @@ -674,7 +674,7 @@ impl Set for TreeSet { a = x.next(); } } - return a.each(|&x| f(x)) && y.advance(f); + return b.each(|&x| f(x)) && y.advance(f); } } @@ -1326,7 +1326,7 @@ mod test_set { } fn check(a: &[int], b: &[int], expected: &[int], - f: &fn(&TreeSet, &TreeSet, f: &fn(&int) -> bool)) { + f: &fn(&TreeSet, &TreeSet, f: &fn(&int) -> bool) -> bool) { let mut set_a = TreeSet::new(); let mut set_b = TreeSet::new(); diff --git a/src/test/bench/graph500-bfs.rs b/src/test/bench/graph500-bfs.rs index 1842a8ff42e52..fb27672354371 100644 --- a/src/test/bench/graph500-bfs.rs +++ b/src/test/bench/graph500-bfs.rs @@ -10,8 +10,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#[allow(deprecated_mode)]; - /*! An implementation of the Graph500 Breadth First Search problem in Rust. @@ -23,7 +21,7 @@ use std::arc; use std::time; use std::deque::Deque; use std::par; -use core::hashmap::{HashMap, HashSet}; +use core::hashmap::HashSet; use core::int::abs; use core::rand::RngUtil; @@ -83,14 +81,13 @@ fn make_graph(N: uint, edges: ~[(node_id, node_id)]) -> graph { HashSet::new() }; - do vec::each(edges) |e| { + for vec::each(edges) |e| { match *e { (i, j) => { graph[i].insert(j); graph[j].insert(i); } } - true } do vec::map_consume(graph) |mut v| { diff --git a/src/test/compile-fail/bad-for-loop.rs b/src/test/compile-fail/bad-for-loop.rs index 8835c577fa8fd..7ff51eff8eeb6 100644 --- a/src/test/compile-fail/bad-for-loop.rs +++ b/src/test/compile-fail/bad-for-loop.rs @@ -11,4 +11,5 @@ fn main() { fn baz(_x: &fn(y: int) -> int) {} for baz |_e| { } //~ ERROR A `for` loop iterator should expect a closure that returns `bool` + //~^ ERROR expected `for` closure to return `bool` } diff --git a/src/test/compile-fail/borrowck-lend-flow-loop.rs b/src/test/compile-fail/borrowck-lend-flow-loop.rs index b6384ad9590ab..f7a72d6e6108c 100644 --- a/src/test/compile-fail/borrowck-lend-flow-loop.rs +++ b/src/test/compile-fail/borrowck-lend-flow-loop.rs @@ -17,7 +17,7 @@ fn borrow(_v: &int) {} fn borrow_mut(_v: &mut int) {} fn cond() -> bool { fail!() } -fn for_func(_f: &fn() -> bool) { fail!() } +fn for_func(_f: &fn() -> bool) -> bool { fail!() } fn produce() -> T { fail!(); } fn inc(v: &mut ~int) { diff --git a/src/test/compile-fail/issue-2817-2.rs b/src/test/compile-fail/issue-2817-2.rs index 6084552f0ed6d..17b0d88a6a827 100644 --- a/src/test/compile-fail/issue-2817-2.rs +++ b/src/test/compile-fail/issue-2817-2.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -fn not_bool(f: &fn(int) -> ~str) {} +fn not_bool(f: &fn(int) -> ~str) -> bool {} fn main() { for uint::range(0, 100000) |_i| { //~ ERROR A for-loop body must return (), but diff --git a/src/test/compile-fail/issue-2817.rs b/src/test/compile-fail/issue-2817.rs index 8c28fcdc7fcd7..77585d15b6b3e 100644 --- a/src/test/compile-fail/issue-2817.rs +++ b/src/test/compile-fail/issue-2817.rs @@ -16,10 +16,10 @@ fn uuid_random() -> uint { fail!(); } fn main() { do uint::range(0, 100000) |_i| { //~ ERROR Do-block body must return bool, but - } + }; // should get a more general message if the callback // doesn't return nil do uint::range(0, 100000) |_i| { //~ ERROR mismatched types ~"str" - } + }; } diff --git a/src/test/compile-fail/issue-3651-2.rs b/src/test/compile-fail/issue-3651-2.rs index 2431313df631c..98a02b6b74691 100644 --- a/src/test/compile-fail/issue-3651-2.rs +++ b/src/test/compile-fail/issue-3651-2.rs @@ -9,5 +9,5 @@ // except according to those terms. fn main() { - do 5.times {} //~ ERROR Do-block body must return bool, but returns () here. Perhaps + do 5.times {}; //~ ERROR Do-block body must return bool, but returns () here. Perhaps } diff --git a/src/test/compile-fail/issue-3651.rs b/src/test/compile-fail/issue-3651.rs index 38e9348155ac3..8d704859fe574 100644 --- a/src/test/compile-fail/issue-3651.rs +++ b/src/test/compile-fail/issue-3651.rs @@ -10,4 +10,5 @@ fn main() { for task::spawn { return true; } //~ ERROR A `for` loop iterator should expect a closure that + //~^ ERROR expected `for` closure to return `bool` } diff --git a/src/test/compile-fail/private-method.rs b/src/test/compile-fail/private-method.rs index c918758ad7c68..0d84bc2fc605c 100644 --- a/src/test/compile-fail/private-method.rs +++ b/src/test/compile-fail/private-method.rs @@ -18,7 +18,7 @@ mod kitties { } pub impl cat { - priv fn nap(&self) { uint::range(1u, 10000u, |_i| false)} + priv fn nap(&self) { uint::range(1u, 10000u, |_i| false); } } pub fn cat(in_x : uint, in_y : int) -> cat { diff --git a/src/test/run-pass/assignability-trait.rs b/src/test/run-pass/assignability-trait.rs index c557aa7e22383..6946ed3fbcfc0 100644 --- a/src/test/run-pass/assignability-trait.rs +++ b/src/test/run-pass/assignability-trait.rs @@ -13,22 +13,18 @@ // it. trait iterable { - fn iterate(&self, blk: &fn(x: &A) -> bool); + fn iterate(&self, blk: &fn(x: &A) -> bool) -> bool; } impl<'self,A> iterable for &'self [A] { - fn iterate(&self, f: &fn(x: &A) -> bool) { - for vec::each(*self) |e| { - if !f(e) { break; } - } + fn iterate(&self, f: &fn(x: &A) -> bool) -> bool { + vec::each(*self, f) } } impl iterable for ~[A] { - fn iterate(&self, f: &fn(x: &A) -> bool) { - for vec::each(*self) |e| { - if !f(e) { break; } - } + fn iterate(&self, f: &fn(x: &A) -> bool) -> bool { + vec::each(*self, f) } } diff --git a/src/test/run-pass/borrowck-mut-uniq.rs b/src/test/run-pass/borrowck-mut-uniq.rs index 5f5b9c59d7680..778637701c5fd 100644 --- a/src/test/run-pass/borrowck-mut-uniq.rs +++ b/src/test/run-pass/borrowck-mut-uniq.rs @@ -18,7 +18,7 @@ fn add_int(x: &mut Ints, v: int) { x.values <-> values; } -fn iter_ints(x: &Ints, f: &fn(x: &int) -> bool) { +fn iter_ints(x: &Ints, f: &fn(x: &int) -> bool) -> bool { let l = x.values.len(); uint::range(0, l, |i| f(&x.values[i])) } diff --git a/src/test/run-pass/class-impl-very-parameterized-trait.rs b/src/test/run-pass/class-impl-very-parameterized-trait.rs index b89bf06409274..39d4b25f262be 100644 --- a/src/test/run-pass/class-impl-very-parameterized-trait.rs +++ b/src/test/run-pass/class-impl-very-parameterized-trait.rs @@ -59,25 +59,26 @@ impl Mutable for cat { } impl Map for cat { - fn each<'a>(&'a self, f: &fn(&int, &'a T) -> bool) { + fn each<'a>(&'a self, f: &fn(&int, &'a T) -> bool) -> bool { let mut n = int::abs(self.meows); while n > 0 { - if !f(&n, &self.name) { break; } + if !f(&n, &self.name) { return false; } n -= 1; } + return true; } fn contains_key(&self, k: &int) -> bool { *k <= self.meows } - fn each_key(&self, f: &fn(v: &int) -> bool) { - for self.each |k, _| { if !f(k) { break; } loop;}; + fn each_key(&self, f: &fn(v: &int) -> bool) -> bool { + self.each(|k, _| f(k)) } - fn each_value<'a>(&'a self, f: &fn(v: &'a T) -> bool) { - for self.each |_, v| { if !f(v) { break; } loop;}; + fn each_value<'a>(&'a self, f: &fn(v: &'a T) -> bool) -> bool { + self.each(|_, v| f(v)) } - fn mutate_values(&mut self, _f: &fn(&int, &mut T) -> bool) { + fn mutate_values(&mut self, _f: &fn(&int, &mut T) -> bool) -> bool { fail!(~"nope") } diff --git a/src/test/run-pass/do-for-empty-args.rs b/src/test/run-pass/do-for-empty-args.rs index c86c1768111f7..fb1bc37fd5efa 100644 --- a/src/test/run-pass/do-for-empty-args.rs +++ b/src/test/run-pass/do-for-empty-args.rs @@ -11,14 +11,15 @@ // no-reformat // Testing various forms of `do` and `for` with empty arg lists -fn f(f: &fn() -> bool) { +fn f(f: &fn() -> bool) -> bool { + true } pub fn main() { - do f() || { true } - do f() { true } - do f || { true } - do f { true } + do f() || { true }; + do f() { true }; + do f || { true }; + do f { true }; for f() || { } for f() { } for f || { } diff --git a/src/test/run-pass/do-for-no-args.rs b/src/test/run-pass/do-for-no-args.rs index c89d693c81635..e9d7c946a9a11 100644 --- a/src/test/run-pass/do-for-no-args.rs +++ b/src/test/run-pass/do-for-no-args.rs @@ -10,7 +10,7 @@ // Testing that we can drop the || in for/do exprs -fn f(f: @fn() -> bool) { } +fn f(f: @fn() -> bool) -> bool { true } fn d(f: @fn()) { } diff --git a/src/test/run-pass/ret-break-cont-in-block.rs b/src/test/run-pass/ret-break-cont-in-block.rs index ab61cee422300..1792a89d64f1e 100644 --- a/src/test/run-pass/ret-break-cont-in-block.rs +++ b/src/test/run-pass/ret-break-cont-in-block.rs @@ -12,12 +12,13 @@ use core::cmp::Eq; -fn iter(v: ~[T], it: &fn(&T) -> bool) { +fn iter(v: ~[T], it: &fn(&T) -> bool) -> bool { let mut i = 0u, l = v.len(); while i < l { - if !it(&v[i]) { break; } + if !it(&v[i]) { return false; } i += 1u; } + return true; } fn find_pos(n: T, h: ~[T]) -> Option { From 606bd75586419948f109de313ab37e31397ca7a3 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Fri, 10 May 2013 18:20:06 -0400 Subject: [PATCH 363/410] Fix merge "failures" --- src/librustc/middle/ty.rs | 15 +++------------ src/librustc/util/enum_set.rs | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index 1c2c02b21e61f..737548ee86869 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -4537,18 +4537,9 @@ pub fn each_bound_trait_and_supertraits(tcx: ctxt, // list. #[cfg(not(stage0))] pub fn each_bound_trait_and_supertraits(tcx: ctxt, - bounds: param_bounds, - f: &fn(&TraitRef) -> bool) -> bool { - for bounds.each |bound| { - let bound_trait_ref = match *bound { - ty::bound_trait(bound_t) => bound_t, - - ty::bound_copy | ty::bound_owned | - ty::bound_const | ty::bound_durable => { - loop; // skip non-trait bounds - } - }; - + bounds: &ParamBounds, + f: &fn(@TraitRef) -> bool) -> bool { + for bounds.trait_bounds.each |&bound_trait_ref| { let mut supertrait_set = HashMap::new(); let mut trait_refs = ~[]; let mut i = 0; diff --git a/src/librustc/util/enum_set.rs b/src/librustc/util/enum_set.rs index 859e743b43bfa..c589ab5287421 100644 --- a/src/librustc/util/enum_set.rs +++ b/src/librustc/util/enum_set.rs @@ -49,6 +49,7 @@ pub impl EnumSet { (self.bits & bit(e)) != 0 } + #[cfg(stage0)] fn each(&self, f: &fn(E) -> bool) { let mut bits = self.bits; let mut index = 0; @@ -63,6 +64,22 @@ pub impl EnumSet { bits >>= 1; } } + #[cfg(not(stage0))] + fn each(&self, f: &fn(E) -> bool) -> bool { + let mut bits = self.bits; + let mut index = 0; + while bits != 0 { + if (bits & 1) != 0 { + let e = CLike::from_uint(index); + if !f(e) { + return false; + } + } + index += 1; + bits >>= 1; + } + return true; + } } impl core::Sub, EnumSet> for EnumSet { From 7d22437ecdc5b52f8517ffde6207347739b26553 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Mon, 6 May 2013 00:43:06 -0400 Subject: [PATCH 364/410] Implement util::swap without the '<->' operator --- src/libcore/util.rs | 68 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 63 insertions(+), 5 deletions(-) diff --git a/src/libcore/util.rs b/src/libcore/util.rs index 43616ebfd3032..c6b82b9aeec61 100644 --- a/src/libcore/util.rs +++ b/src/libcore/util.rs @@ -15,6 +15,7 @@ Miscellaneous helpers for common patterns. */ use prelude::*; +use unstable::intrinsics; /// The identity function. #[inline(always)] @@ -49,7 +50,65 @@ pub fn with( */ #[inline(always)] pub fn swap(x: &mut T, y: &mut T) { - *x <-> *y; + unsafe { + swap_ptr(ptr::to_mut_unsafe_ptr(x), ptr::to_mut_unsafe_ptr(y)); + } +} + +/** + * Swap the values at two mutable locations of the same type, without + * deinitialising or copying either one. + */ +#[inline] +#[cfg(not(stage0))] +pub unsafe fn swap_ptr(x: *mut T, y: *mut T) { + if x == y { return } + + // Give ourselves some scratch space to work with + let mut tmp: T = intrinsics::uninit(); + let t = ptr::to_mut_unsafe_ptr(&mut tmp); + + // Perform the swap + ptr::copy_memory(t, x, 1); + ptr::copy_memory(x, y, 1); + ptr::copy_memory(y, t, 1); + + // y and t now point to the same thing, but we need to completely forget t + // because it's no longer relevant. + cast::forget(tmp); +} + +/** + * Swap the values at two mutable locations of the same type, without + * deinitialising or copying either one. + */ +#[inline] +#[cfg(stage0)] +pub unsafe fn swap_ptr(x: *mut T, y: *mut T) { + if x == y { return } + + // Give ourselves some scratch space to work with + let mut tmp: T = intrinsics::init(); + let t = ptr::to_mut_unsafe_ptr(&mut tmp); + + // Perform the swap + ptr::copy_memory(t, x, 1); + ptr::copy_memory(x, y, 1); + ptr::copy_memory(y, t, 1); + + // y and t now point to the same thing, but we need to completely forget t + // because it's no longer relevant. + cast::forget(tmp); +} + +/** + * Replace the value at a mutable location with a new one, returning the old + * value, without deinitialising or copying either one. + */ +#[inline(always)] +pub fn replace(dest: &mut T, mut src: T) -> T { + swap(dest, &mut src); + src } /** @@ -57,10 +116,9 @@ pub fn swap(x: &mut T, y: &mut T) { * value, without deinitialising or copying either one. */ #[inline(always)] -pub fn replace(dest: &mut T, src: T) -> T { - let mut tmp = src; - swap(dest, &mut tmp); - tmp +pub unsafe fn replace_ptr(dest: *mut T, mut src: T) -> T { + swap_ptr(dest, ptr::to_mut_unsafe_ptr(&mut src)); + src } /// A non-copyable dummy type. From 998fececd6516fa07d0cd0a0c4607ddef0bc40f0 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Mon, 6 May 2013 00:42:54 -0400 Subject: [PATCH 365/410] Stop using the '<->' operator --- src/libcore/cell.rs | 5 +- src/libcore/comm.rs | 29 +++---- src/libcore/hashmap.rs | 24 ++---- src/libcore/pipes.rs | 29 +++---- src/libcore/util.rs | 6 +- src/libcore/vec.rs | 81 ++++++++++--------- src/libstd/deque.rs | 6 +- src/libstd/future.rs | 7 +- src/libstd/priority_queue.rs | 24 +++--- src/libstd/rc.rs | 20 ++--- src/libstd/sort.rs | 59 +++++++------- src/libstd/sort_stage0.rs | 59 +++++++------- src/libstd/treemap.rs | 20 ++--- src/libstd/workcache.rs | 9 +-- src/test/bench/core-std.rs | 3 +- src/test/bench/msgsend-ring-pipes.rs | 7 +- src/test/bench/shootout-k-nucleotide-pipes.rs | 4 +- .../liveness-assign-imm-local-in-swap.rs | 28 ------- src/test/compile-fail/liveness-swap-uninit.rs | 16 ---- .../compile-fail/moves-based-on-type-exprs.rs | 2 +- src/test/compile-fail/swap-no-lval.rs | 15 ---- src/test/run-pass/borrowck-mut-uniq.rs | 6 +- src/test/run-pass/issue-2718.rs | 21 +++-- .../regions-infer-borrow-scope-addr-of.rs | 4 +- src/test/run-pass/swap-1.rs | 5 +- src/test/run-pass/swap-2.rs | 6 +- src/test/run-pass/swap-overlapping.rs | 7 +- src/test/run-pass/unique-swap.rs | 4 +- src/test/run-pass/weird-exprs.rs | 4 +- 29 files changed, 214 insertions(+), 296 deletions(-) delete mode 100644 src/test/compile-fail/liveness-assign-imm-local-in-swap.rs delete mode 100644 src/test/compile-fail/liveness-swap-uninit.rs delete mode 100644 src/test/compile-fail/swap-no-lval.rs diff --git a/src/libcore/cell.rs b/src/libcore/cell.rs index c7f9e37757139..18e75fb1aa98e 100644 --- a/src/libcore/cell.rs +++ b/src/libcore/cell.rs @@ -12,6 +12,7 @@ use cast::transmute_mut; use prelude::*; +use util::replace; /* A dynamic, mutable location. @@ -48,9 +49,7 @@ pub impl Cell { fail!(~"attempt to take an empty cell"); } - let mut value = None; - value <-> self.value; - value.unwrap() + replace(&mut self.value, None).unwrap() } /// Returns the value, failing if the cell is full. diff --git a/src/libcore/comm.rs b/src/libcore/comm.rs index 7eaa853549336..140eb41fdf3d6 100644 --- a/src/libcore/comm.rs +++ b/src/libcore/comm.rs @@ -21,6 +21,7 @@ use uint; use unstable; use vec; use unstable::Exclusive; +use util::replace; use pipes::{recv, try_recv, wait_many, peek, PacketHeader}; @@ -149,9 +150,8 @@ impl GenericChan for Chan { #[inline(always)] fn send(&self, x: T) { unsafe { - let mut endp = None; let mut self_endp = transmute_mut(&self.endp); - endp <-> *self_endp; + let endp = replace(self_endp, None); *self_endp = Some(streamp::client::data(endp.unwrap(), x)) } } @@ -161,9 +161,8 @@ impl GenericSmartChan for Chan { #[inline(always)] fn try_send(&self, x: T) -> bool { unsafe { - let mut endp = None; let mut self_endp = transmute_mut(&self.endp); - endp <-> *self_endp; + let endp = replace(self_endp, None); match streamp::client::try_data(endp.unwrap(), x) { Some(next) => { *self_endp = Some(next); @@ -179,9 +178,8 @@ impl GenericPort for Port { #[inline(always)] fn recv(&self) -> T { unsafe { - let mut endp = None; let mut self_endp = transmute_mut(&self.endp); - endp <-> *self_endp; + let endp = replace(self_endp, None); let streamp::data(x, endp) = recv(endp.unwrap()); *self_endp = Some(endp); x @@ -191,9 +189,8 @@ impl GenericPort for Port { #[inline(always)] fn try_recv(&self) -> Option { unsafe { - let mut endp = None; let mut self_endp = transmute_mut(&self.endp); - endp <-> *self_endp; + let endp = replace(self_endp, None); match try_recv(endp.unwrap()) { Some(streamp::data(x, endp)) => { *self_endp = Some(endp); @@ -209,14 +206,13 @@ impl Peekable for Port { #[inline(always)] fn peek(&self) -> bool { unsafe { - let mut endp = None; let mut self_endp = transmute_mut(&self.endp); - endp <-> *self_endp; + let mut endp = replace(self_endp, None); let peek = match endp { Some(ref mut endp) => peek(endp), None => fail!(~"peeking empty stream") }; - *self_endp <-> endp; + *self_endp = endp; peek } } @@ -267,8 +263,7 @@ impl GenericPort for PortSet { let mut result = None; // we have to swap the ports array so we aren't borrowing // aliasable mutable memory. - let mut ports = ~[]; - ports <-> *self_ports; + let mut ports = replace(self_ports, ~[]); while result.is_none() && ports.len() > 0 { let i = wait_many(ports); match ports[i].try_recv() { @@ -281,7 +276,7 @@ impl GenericPort for PortSet { } } } - ports <-> *self_ports; + *self_ports = ports; result } } @@ -320,8 +315,7 @@ impl GenericChan for SharedChan { fn send(&self, x: T) { let mut xx = Some(x); do self.ch.with_imm |chan| { - let mut x = None; - x <-> xx; + let x = replace(&mut xx, None); chan.send(x.unwrap()) } } @@ -331,8 +325,7 @@ impl GenericSmartChan for SharedChan { fn try_send(&self, x: T) -> bool { let mut xx = Some(x); do self.ch.with_imm |chan| { - let mut x = None; - x <-> xx; + let x = replace(&mut xx, None); chan.try_send(x.unwrap()) } } diff --git a/src/libcore/hashmap.rs b/src/libcore/hashmap.rs index b5ae07208fc66..590d4ab3bcb40 100644 --- a/src/libcore/hashmap.rs +++ b/src/libcore/hashmap.rs @@ -176,16 +176,13 @@ priv impl HashMap { /// Expands the capacity of the array and re-insert each of the /// existing buckets. fn resize(&mut self, new_capacity: uint) { - let old_capacity = self.buckets.len(); self.resize_at = resize_at(new_capacity); - let mut old_buckets = vec::from_fn(new_capacity, |_| None); - self.buckets <-> old_buckets; + let old_buckets = replace(&mut self.buckets, + vec::from_fn(new_capacity, |_| None)); self.size = 0; - for uint::range(0, old_capacity) |i| { - let mut bucket = None; - bucket <-> old_buckets[i]; + do vec::consume(old_buckets) |_, bucket| { self.insert_opt_bucket(bucket); } } @@ -265,13 +262,11 @@ priv impl HashMap { }; let len_buckets = self.buckets.len(); - let mut bucket = None; - self.buckets[idx] <-> bucket; + let bucket = replace(&mut self.buckets[idx], None); let value = match bucket { None => None, - Some(bucket) => { - let Bucket{value: value, _} = bucket; + Some(Bucket{value, _}) => { Some(value) }, }; @@ -281,8 +276,7 @@ priv impl HashMap { let size = self.size - 1; idx = self.next_bucket(idx, len_buckets); while self.buckets[idx].is_some() { - let mut bucket = None; - bucket <-> self.buckets[idx]; + let bucket = replace(&mut self.buckets[idx], None); self.insert_opt_bucket(bucket); idx = self.next_bucket(idx, len_buckets); } @@ -613,15 +607,13 @@ pub impl HashMap { } fn consume(&mut self, f: &fn(K, V)) { - let mut buckets = ~[]; - self.buckets <-> buckets; + let buckets = replace(&mut self.buckets, ~[]); self.size = 0; do vec::consume(buckets) |_, bucket| { match bucket { None => {}, - Some(bucket) => { - let Bucket{key: key, value: value, _} = bucket; + Some(Bucket{key, value, _}) => { f(key, value) } } diff --git a/src/libcore/pipes.rs b/src/libcore/pipes.rs index 8301254fbdd18..fe9c78198bb13 100644 --- a/src/libcore/pipes.rs +++ b/src/libcore/pipes.rs @@ -93,6 +93,7 @@ use unstable::intrinsics; use ptr; use task; use vec; +use util::replace; static SPIN_COUNT: uint = 0; @@ -428,8 +429,7 @@ fn try_recv_(p: &mut Packet) -> Option { // optimistic path match p.header.state { Full => { - let mut payload = None; - payload <-> p.payload; + let payload = replace(&mut p.payload, None); p.header.state = Empty; return Some(payload.unwrap()) }, @@ -480,8 +480,7 @@ fn try_recv_(p: &mut Packet) -> Option { fail!(~"blocking on already blocked packet") }, Full => { - let mut payload = None; - payload <-> p.payload; + let payload = replace(&mut p.payload, None); let old_task = swap_task(&mut p.header.blocked_task, ptr::null()); if !old_task.is_null() { unsafe { @@ -675,8 +674,7 @@ impl Drop for SendPacketBuffered { unsafe { let this: &mut SendPacketBuffered = transmute(self); if this.p != None { - let mut p = None; - p <-> this.p; + let p = replace(&mut this.p, None); sender_terminate(p.unwrap()) } } @@ -695,9 +693,7 @@ pub fn SendPacketBuffered(p: *mut Packet) pub impl SendPacketBuffered { fn unwrap(&mut self) -> *mut Packet { - let mut p = None; - p <-> self.p; - p.unwrap() + replace(&mut self.p, None).unwrap() } fn header(&mut self) -> *mut PacketHeader { @@ -713,9 +709,7 @@ pub impl SendPacketBuffered { fn reuse_buffer(&mut self) -> BufferResource { //error!("send reuse_buffer"); - let mut tmp = None; - tmp <-> self.buffer; - tmp.unwrap() + replace(&mut self.buffer, None).unwrap() } } @@ -738,8 +732,7 @@ impl Drop for RecvPacketBuffered { unsafe { let this: &mut RecvPacketBuffered = transmute(self); if this.p != None { - let mut p = None; - p <-> this.p; + let p = replace(&mut this.p, None); receiver_terminate(p.unwrap()) } } @@ -748,15 +741,11 @@ impl Drop for RecvPacketBuffered { pub impl RecvPacketBuffered { fn unwrap(&mut self) -> *mut Packet { - let mut p = None; - p <-> self.p; - p.unwrap() + replace(&mut self.p, None).unwrap() } fn reuse_buffer(&mut self) -> BufferResource { - let mut tmp = None; - tmp <-> self.buffer; - tmp.unwrap() + replace(&mut self.buffer, None).unwrap() } } diff --git a/src/libcore/util.rs b/src/libcore/util.rs index c6b82b9aeec61..db9a17cf97ffe 100644 --- a/src/libcore/util.rs +++ b/src/libcore/util.rs @@ -35,12 +35,12 @@ pub fn ignore(_x: T) { } #[inline(always)] pub fn with( ptr: @mut T, - mut value: T, + value: T, op: &fn() -> R) -> R { - value <-> *ptr; + let prev = replace(ptr, value); let result = op(); - *ptr = value; + *ptr = prev; return result; } diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs index 7eba2cbf0ccc4..77314b173d981 100644 --- a/src/libcore/vec.rs +++ b/src/libcore/vec.rs @@ -29,6 +29,7 @@ use sys; use uint; use unstable::intrinsics; use vec; +use util; #[cfg(not(test))] use cmp::Equiv; @@ -470,7 +471,7 @@ pub fn shift(v: &mut ~[T]) -> T { let next_ln = v.len() - 1; // Save the last element. We're going to overwrite its position - let mut work_elt = v.pop(); + let work_elt = v.pop(); // We still should have room to work where what last element was assert!(capacity(v) >= ln); // Pretend like we have the original length so we can use @@ -501,16 +502,14 @@ pub fn shift(v: &mut ~[T]) -> T { // Swap out the element we want from the end let vp = raw::to_mut_ptr(*v); let vp = ptr::mut_offset(vp, next_ln - 1); - *vp <-> work_elt; - work_elt + util::replace_ptr(vp, work_elt) } } /// Prepend an element to the vector pub fn unshift(v: &mut ~[T], x: T) { - let mut vv = ~[x]; - *v <-> vv; + let vv = util::replace(v, ~[x]); v.push_all_move(vv); } @@ -523,7 +522,7 @@ pub fn insert(v: &mut ~[T], i: uint, x: T) { v.push(x); let mut j = len; while j > i { - v[j] <-> v[j - 1]; + swap(*v, j, j - 1); j -= 1; } } @@ -536,7 +535,7 @@ pub fn remove(v: &mut ~[T], i: uint) -> T { let mut j = i; while j < len - 1 { - v[j] <-> v[j + 1]; + swap(*v, j, j + 1); j += 1; } v.pop() @@ -550,10 +549,9 @@ pub fn consume(mut v: ~[T], f: &fn(uint, v: T)) { // holes we create in the vector. That ensures that, if the // iterator fails then we won't try to clean up the consumed // elements during unwinding - let mut x = intrinsics::init(); + let x = intrinsics::init(); let p = ptr::mut_offset(p, i); - x <-> *p; - f(i, x); + f(i, util::replace_ptr(p, x)); } } @@ -572,10 +570,9 @@ pub fn consume_reverse(mut v: ~[T], f: &fn(uint, v: T)) { // holes we create in the vector. That ensures that, if the // iterator fails then we won't try to clean up the consumed // elements during unwinding - let mut x = intrinsics::init(); + let x = intrinsics::init(); let p = ptr::mut_offset(p, i); - x <-> *p; - f(i, x); + f(i, util::replace_ptr(p, x)); } } @@ -592,8 +589,7 @@ pub fn pop(v: &mut ~[T]) -> T { } let valptr = ptr::to_mut_unsafe_ptr(&mut v[ln - 1u]); unsafe { - let mut val = intrinsics::uninit(); - val <-> *valptr; + let val = util::replace_ptr(valptr, intrinsics::uninit()); raw::set_len(v, ln - 1u); val } @@ -607,8 +603,7 @@ pub fn pop(v: &mut ~[T]) -> T { } let valptr = ptr::to_mut_unsafe_ptr(&mut v[ln - 1u]); unsafe { - let mut val = intrinsics::init(); - val <-> *valptr; + let val = util::replace_ptr(valptr, intrinsics::init()); raw::set_len(v, ln - 1u); val } @@ -626,7 +621,7 @@ pub fn swap_remove(v: &mut ~[T], index: uint) -> T { fail!(fmt!("vec::swap_remove - index %u >= length %u", index, ln)); } if index < ln - 1 { - v[index] <-> v[ln - 1]; + swap(*v, index, ln - 1); } v.pop() } @@ -682,8 +677,8 @@ pub fn push_all_move(v: &mut ~[T], mut rhs: ~[T]) { unsafe { do as_mut_buf(rhs) |p, len| { for uint::range(0, len) |i| { - let mut x = intrinsics::uninit(); - x <-> *ptr::mut_offset(p, i); + let x = util::replace_ptr(ptr::mut_offset(p, i), + intrinsics::uninit()); push(&mut *v, x); } } @@ -699,8 +694,8 @@ pub fn push_all_move(v: &mut ~[T], mut rhs: ~[T]) { unsafe { do as_mut_buf(rhs) |p, len| { for uint::range(0, len) |i| { - let mut x = intrinsics::init(); - x <-> *ptr::mut_offset(p, i); + let x = util::replace_ptr(ptr::mut_offset(p, i), + intrinsics::init()); push(&mut *v, x); } } @@ -716,8 +711,7 @@ pub fn truncate(v: &mut ~[T], newlen: uint) { unsafe { // This loop is optimized out for non-drop types. for uint::range(newlen, oldlen) |i| { - let mut dropped = intrinsics::uninit(); - dropped <-> *ptr::mut_offset(p, i); + util::replace_ptr(ptr::mut_offset(p, i), intrinsics::uninit()); } } } @@ -732,8 +726,7 @@ pub fn truncate(v: &mut ~[T], newlen: uint) { unsafe { // This loop is optimized out for non-drop types. for uint::range(newlen, oldlen) |i| { - let mut dropped = intrinsics::init(); - dropped <-> *ptr::mut_offset(p, i); + util::replace_ptr(ptr::mut_offset(p, i), intrinsics::init()); } } } @@ -758,14 +751,14 @@ pub fn dedup(v: &mut ~[T]) { // last_written < next_to_read < ln if *ptr::mut_offset(p, next_to_read) == *ptr::mut_offset(p, last_written) { - let mut dropped = intrinsics::uninit(); - dropped <-> *ptr::mut_offset(p, next_to_read); + util::replace_ptr(ptr::mut_offset(p, next_to_read), + intrinsics::uninit()); } else { last_written += 1; // last_written <= next_to_read < ln if next_to_read != last_written { - *ptr::mut_offset(p, last_written) <-> - *ptr::mut_offset(p, next_to_read); + util::swap_ptr(ptr::mut_offset(p, last_written), + ptr::mut_offset(p, next_to_read)); } } // last_written <= next_to_read < ln @@ -796,14 +789,14 @@ pub fn dedup(v: &mut ~[T]) { // last_written < next_to_read < ln if *ptr::mut_offset(p, next_to_read) == *ptr::mut_offset(p, last_written) { - let mut dropped = intrinsics::init(); - dropped <-> *ptr::mut_offset(p, next_to_read); + util::replace_ptr(ptr::mut_offset(p, next_to_read), + intrinsics::init()); } else { last_written += 1; // last_written <= next_to_read < ln if next_to_read != last_written { - *ptr::mut_offset(p, last_written) <-> - *ptr::mut_offset(p, next_to_read); + util::swap_ptr(ptr::mut_offset(p, last_written), + ptr::mut_offset(p, next_to_read)); } } // last_written <= next_to_read < ln @@ -1028,7 +1021,7 @@ pub fn retain(v: &mut ~[T], f: &fn(t: &T) -> bool) { if !f(&v[i]) { deleted += 1; } else if deleted > 0 { - v[i - deleted] <-> v[i]; + swap(*v, i - deleted, i); } } @@ -1429,15 +1422,25 @@ pub fn zip(mut v: ~[T], mut u: ~[U]) -> ~[(T, U)] { * * a - The index of the first element * * b - The index of the second element */ +#[inline(always)] pub fn swap(v: &mut [T], a: uint, b: uint) { - v[a] <-> v[b]; + unsafe { + // Can't take two mutable loans from one vector, so instead just cast + // them to their raw pointers to do the swap + let pa: *mut T = ptr::to_mut_unsafe_ptr(&mut v[a]); + let pb: *mut T = ptr::to_mut_unsafe_ptr(&mut v[b]); + util::swap_ptr(pa, pb); + } } /// Reverse the order of elements in a vector, in place pub fn reverse(v: &mut [T]) { let mut i: uint = 0; let ln = len::(v); - while i < ln / 2 { v[i] <-> v[ln - i - 1]; i += 1; } + while i < ln / 2 { + swap(v, i, ln - i - 1); + i += 1; + } } /// Returns a vector with the order of elements reversed @@ -2476,6 +2479,7 @@ pub mod raw { use sys; use unstable::intrinsics; use vec::{UnboxedVecRepr, as_const_buf, as_mut_buf, len, with_capacity}; + use util; /// The internal representation of a (boxed) vector pub struct VecRepr { @@ -2573,8 +2577,7 @@ pub mod raw { pub unsafe fn init_elem(v: &mut [T], i: uint, val: T) { let mut box = Some(val); do as_mut_buf(v) |p, _len| { - let mut box2 = None; - box2 <-> box; + let box2 = util::replace(&mut box, None); intrinsics::move_val_init(&mut(*ptr::mut_offset(p, i)), box2.unwrap()); } diff --git a/src/libstd/deque.rs b/src/libstd/deque.rs index 4eb359e48a84d..c94acaa1f70db 100644 --- a/src/libstd/deque.rs +++ b/src/libstd/deque.rs @@ -10,6 +10,8 @@ //! A double-ended queue implemented as a circular buffer +use core::util::replace; + static initial_capacity: uint = 32u; // 2^5 pub struct Deque { @@ -142,9 +144,7 @@ fn grow(nelts: uint, lo: uint, elts: &mut [Option]) -> ~[Option] { let mut rv = ~[]; do rv.grow_fn(nelts + 1) |i| { - let mut element = None; - element <-> elts[(lo + i) % nelts]; - element + replace(&mut elts[(lo + i) % nelts], None) } rv diff --git a/src/libstd/future.rs b/src/libstd/future.rs index b1b2fa2cd28e1..ac23ea1a6e2c2 100644 --- a/src/libstd/future.rs +++ b/src/libstd/future.rs @@ -26,6 +26,7 @@ use core::cell::Cell; use core::comm::{PortOne, oneshot, send_one}; use core::pipes::recv; use core::task; +use core::util::replace; #[doc = "The future type"] #[cfg(stage0)] @@ -77,8 +78,7 @@ pub impl Future { } } { - let mut state = Evaluating; - self.state <-> state; + let state = replace(&mut self.state, Evaluating); match state { Forced(_) | Evaluating => fail!(~"Logic error."), Pending(f) => { @@ -108,8 +108,7 @@ pub impl Future { } } { - let mut state = Evaluating; - self.state <-> state; + let state = replace(&mut self.state, Evaluating); match state { Forced(_) | Evaluating => fail!(~"Logic error."), Pending(f) => { diff --git a/src/libstd/priority_queue.rs b/src/libstd/priority_queue.rs index bdb93142472fb..ded632b29d94e 100644 --- a/src/libstd/priority_queue.rs +++ b/src/libstd/priority_queue.rs @@ -11,6 +11,7 @@ //! A priority queue implemented with a binary heap use core::old_iter::BaseIter; +use core::util::{replace, swap}; #[abi = "rust-intrinsic"] extern "rust-intrinsic" mod rusti { @@ -73,7 +74,10 @@ pub impl PriorityQueue { /// Pop the greatest item from the queue - fails if empty fn pop(&mut self) -> T { let mut item = self.data.pop(); - if !self.is_empty() { item <-> self.data[0]; self.siftdown(0); } + if !self.is_empty() { + swap(&mut item, &mut self.data[0]); + self.siftdown(0); + } item } @@ -92,7 +96,7 @@ pub impl PriorityQueue { /// Optimized version of a push followed by a pop fn push_pop(&mut self, mut item: T) -> T { if !self.is_empty() && self.data[0] > item { - item <-> self.data[0]; + swap(&mut item, &mut self.data[0]); self.siftdown(0); } item @@ -100,7 +104,7 @@ pub impl PriorityQueue { /// Optimized version of a pop followed by a push - fails if empty fn replace(&mut self, mut item: T) -> T { - item <-> self.data[0]; + swap(&mut item, &mut self.data[0]); self.siftdown(0); item } @@ -115,7 +119,7 @@ pub impl PriorityQueue { let mut end = q.len(); while end > 1 { end -= 1; - q.data[end] <-> q.data[0]; + vec::swap(q.data, 0, end); q.siftdown_range(0, end) } q.to_vec() @@ -149,8 +153,7 @@ pub impl PriorityQueue { while pos > start { let parent = (pos - 1) >> 1; if new > self.data[parent] { - let mut x = rusti::uninit(); - x <-> self.data[parent]; + let x = replace(&mut self.data[parent], rusti::uninit()); rusti::move_val_init(&mut self.data[pos], x); pos = parent; loop @@ -169,8 +172,7 @@ pub impl PriorityQueue { while pos > start { let parent = (pos - 1) >> 1; if new > self.data[parent] { - let mut x = rusti::init(); - x <-> self.data[parent]; + let x = replace(&mut self.data[parent], rusti::init()); rusti::move_val_init(&mut self.data[pos], x); pos = parent; loop @@ -194,8 +196,7 @@ pub impl PriorityQueue { if right < end && !(self.data[child] > self.data[right]) { child = right; } - let mut x = rusti::uninit(); - x <-> self.data[child]; + let x = replace(&mut self.data[child], rusti::uninit()); rusti::move_val_init(&mut self.data[pos], x); pos = child; child = 2 * pos + 1; @@ -218,8 +219,7 @@ pub impl PriorityQueue { if right < end && !(self.data[child] > self.data[right]) { child = right; } - let mut x = rusti::init(); - x <-> self.data[child]; + let x = replace(&mut self.data[child], rusti::init()); rusti::move_val_init(&mut self.data[pos], x); pos = child; child = 2 * pos + 1; diff --git a/src/libstd/rc.rs b/src/libstd/rc.rs index 9eab1adde4759..0c0f11fc9f023 100644 --- a/src/libstd/rc.rs +++ b/src/libstd/rc.rs @@ -17,6 +17,7 @@ destruction. They are restricted to containing `Owned` types in order to prevent use core::libc::{c_void, size_t, malloc, free}; use core::unstable::intrinsics; +use core::util; struct RcBox { value: T, @@ -52,8 +53,7 @@ impl Drop for Rc { unsafe { (*self.ptr).count -= 1; if (*self.ptr).count == 0 { - let mut x = intrinsics::uninit(); - x <-> *self.ptr; + util::replace_ptr(self.ptr, intrinsics::uninit()); free(self.ptr as *c_void) } } @@ -67,8 +67,7 @@ impl Drop for Rc { unsafe { (*self.ptr).count -= 1; if (*self.ptr).count == 0 { - let mut x = intrinsics::init(); - x <-> *self.ptr; + util::replace_ptr(self.ptr, intrinsics::init()); free(self.ptr as *c_void) } } @@ -111,13 +110,6 @@ mod test_rc { } } -#[abi = "rust-intrinsic"] -extern "rust-intrinsic" mod rusti { - fn init() -> T; - #[cfg(not(stage0))] - fn uninit() -> T; -} - #[deriving(Eq)] enum Borrow { Mutable, @@ -179,8 +171,7 @@ impl Drop for RcMut { unsafe { (*self.ptr).count -= 1; if (*self.ptr).count == 0 { - let mut x = rusti::uninit(); - x <-> *self.ptr; + util::replace_ptr(self.ptr, intrinsics::uninit()); free(self.ptr as *c_void) } } @@ -194,8 +185,7 @@ impl Drop for RcMut { unsafe { (*self.ptr).count -= 1; if (*self.ptr).count == 0 { - let mut x = rusti::init(); - x <-> *self.ptr; + util::replace_ptr(self.ptr, intrinsics::init()); free(self.ptr as *c_void) } } diff --git a/src/libstd/sort.rs b/src/libstd/sort.rs index fdc74be133544..876eb716a3833 100644 --- a/src/libstd/sort.rs +++ b/src/libstd/sort.rs @@ -13,6 +13,7 @@ use core::cmp::{Eq, Ord}; use core::vec::len; use core::vec; +use core::util::swap; type Le<'self, T> = &'self fn(v1: &T, v2: &T) -> bool; @@ -63,36 +64,36 @@ pub fn merge_sort(v: &[T], le: Le) -> ~[T] { #[cfg(stage0)] fn part(arr: &mut [T], left: uint, right: uint, pivot: uint, compare_func: Le) -> uint { - arr[pivot] <-> arr[right]; + swap(&mut arr[pivot], &mut arr[right]); let mut storage_index: uint = left; let mut i: uint = left; while i < right { let a: &mut T = &mut arr[i]; let b: &mut T = &mut arr[right]; if compare_func(a, b) { - arr[i] <-> arr[storage_index]; + swap(&mut arr[i], &mut arr[storage_index]); storage_index += 1; } i += 1; } - arr[storage_index] <-> arr[right]; + swap(&mut arr[storage_index], &mut arr[right]); return storage_index; } #[cfg(not(stage0))] fn part(arr: &mut [T], left: uint, right: uint, pivot: uint, compare_func: Le) -> uint { - arr[pivot] <-> arr[right]; + vec::swap(arr, pivot, right); let mut storage_index: uint = left; let mut i: uint = left; while i < right { if compare_func(&arr[i], &arr[right]) { - arr[i] <-> arr[storage_index]; + vec::swap(arr, i, storage_index); storage_index += 1; } i += 1; } - arr[storage_index] <-> arr[right]; + vec::swap(arr, storage_index, right); return storage_index; } @@ -136,29 +137,29 @@ fn qsort3(arr: &mut [T], left: int, right: int) { j -= 1; } if i >= j { break; } - arr[i] <-> arr[j]; + vec::swap(arr, i as uint, j as uint); if arr[i] == v { p += 1; - arr[p] <-> arr[i]; + vec::swap(arr, p as uint, i as uint); } if v == arr[j] { q -= 1; - arr[j] <-> arr[q]; + vec::swap(arr, j as uint, q as uint); } } - arr[i] <-> arr[right]; + vec::swap(arr, i as uint, right as uint); j = i - 1; i += 1; let mut k: int = left; while k < p { - arr[k] <-> arr[j]; + vec::swap(arr, k as uint, j as uint); k += 1; j -= 1; if k == len::(arr) as int { break; } } k = right - 1; while k > q { - arr[i] <-> arr[k]; + vec::swap(arr, i as uint, k as uint); k -= 1; i += 1; if k == 0 { break; } @@ -273,7 +274,7 @@ fn binarysort(array: &mut [T], start: uint) { fn reverse_slice(v: &mut [T], start: uint, end:uint) { let mut i = start; while i < end / 2 { - v[i] <-> v[end - i - 1]; + vec::swap(v, i, end - i - 1); i += 1; } } @@ -493,7 +494,7 @@ impl MergeState { let mut len1 = len1; let mut len2 = len2; - array[dest] <-> array[c2]; + vec::swap(array, dest, c2); dest += 1; c2 += 1; len2 -= 1; if len2 == 0 { @@ -502,7 +503,7 @@ impl MergeState { } if len1 == 1 { shift_vec(array, dest, c2, len2); - array[dest+len2] <-> tmp[c1]; + swap(&mut tmp[c1], &mut array[dest+len2]); return; } @@ -515,14 +516,14 @@ impl MergeState { loop { assert!(len1 > 1 && len2 != 0); if array[c2] < tmp[c1] { - array[dest] <-> array[c2]; + vec::swap(array, dest, c2); dest += 1; c2 += 1; len2 -= 1; count2 += 1; count1 = 0; if len2 == 0 { break_outer = true; } } else { - array[dest] <-> tmp[c1]; + swap(&mut array[dest], &mut tmp[c1]); dest += 1; c1 += 1; len1 -= 1; count1 += 1; count2 = 0; if len1 == 1 { @@ -548,7 +549,7 @@ impl MergeState { dest += count1; c1 += count1; len1 -= count1; if len1 <= 1 { break_outer = true; break; } } - array[dest] <-> array[c2]; + vec::swap(array, dest, c2); dest += 1; c2 += 1; len2 -= 1; if len2 == 0 { break_outer = true; break; } @@ -561,7 +562,7 @@ impl MergeState { dest += count2; c2 += count2; len2 -= count2; if len2 == 0 { break_outer = true; break; } } - array[dest] <-> tmp[c1]; + swap(&mut array[dest], &mut tmp[c1]); dest += 1; c1 += 1; len1 -= 1; if len1 == 1 { break_outer = true; break; } min_gallop -= 1; @@ -578,7 +579,7 @@ impl MergeState { if len1 == 1 { assert!(len2 > 0); shift_vec(array, dest, c2, len2); - array[dest+len2] <-> tmp[c1]; + swap(&mut array[dest+len2], &mut tmp[c1]); } else if len1 == 0 { fail!(~"Comparison violates its contract!"); } else { @@ -603,7 +604,7 @@ impl MergeState { let mut len1 = len1; let mut len2 = len2; - array[dest] <-> array[c1]; + vec::swap(array, dest, c1); dest -= 1; c1 -= 1; len1 -= 1; if len1 == 0 { @@ -614,7 +615,7 @@ impl MergeState { dest -= len1; c1 -= len1; shift_vec(array, dest+1, c1+1, len1); - array[dest] <-> tmp[c2]; + swap(&mut array[dest], &mut tmp[c2]); return; } @@ -627,14 +628,14 @@ impl MergeState { loop { assert!(len1 != 0 && len2 > 1); if tmp[c2] < array[c1] { - array[dest] <-> array[c1]; + vec::swap(array, dest, c1); dest -= 1; c1 -= 1; len1 -= 1; count1 += 1; count2 = 0; if len1 == 0 { break_outer = true; } } else { - array[dest] <-> tmp[c2]; + swap(&mut array[dest], &mut tmp[c2]); dest -= 1; c2 -= 1; len2 -= 1; count2 += 1; count1 = 0; if len2 == 1 { @@ -663,7 +664,7 @@ impl MergeState { if len1 == 0 { break_outer = true; break; } } - array[dest] <-> tmp[c2]; + swap(&mut array[dest], &mut tmp[c2]); dest -= 1; c2 -= 1; len2 -= 1; if len2 == 1 { break_outer = true; break; } @@ -680,7 +681,7 @@ impl MergeState { copy_vec(array, dest+1, tmp.slice(c2+1, c2+1+count2)); if len2 <= 1 { break_outer = true; break; } } - array[dest] <-> array[c1]; + vec::swap(array, dest, c1); dest -= 1; c1 -= 1; len1 -= 1; if len1 == 0 { break_outer = true; break; } min_gallop -= 1; @@ -700,7 +701,7 @@ impl MergeState { dest -= len1; c1 -= len1; shift_vec(array, dest+1, c1+1, len1); - array[dest] <-> tmp[c2]; + swap(&mut array[dest], &mut tmp[c2]); } else if len2 == 0 { fail!(~"Comparison violates its contract!"); } else { @@ -1090,7 +1091,7 @@ mod big_tests { for 3.times { let i1 = rng.gen_uint_range(0, n); let i2 = rng.gen_uint_range(0, n); - arr[i1] <-> arr[i2]; + vec::swap(arr, i1, i2); } tim_sort(arr); // 3sort isSorted(arr); @@ -1162,7 +1163,7 @@ mod big_tests { for 3.times { let i1 = rng.gen_uint_range(0, n); let i2 = rng.gen_uint_range(0, n); - arr[i1] <-> arr[i2]; + vec::swap(arr, i1, i2); } tim_sort(arr); // 3sort isSorted(arr); diff --git a/src/libstd/sort_stage0.rs b/src/libstd/sort_stage0.rs index 2379e4617aae8..00bd325dd0c21 100644 --- a/src/libstd/sort_stage0.rs +++ b/src/libstd/sort_stage0.rs @@ -13,6 +13,7 @@ use core::cmp::{Eq, Ord}; use core::vec::len; use core::vec; +use core::util; type Le<'self, T> = &'self fn(v1: &T, v2: &T) -> bool; @@ -63,36 +64,36 @@ pub fn merge_sort(v: &const [T], le: Le) -> ~[T] { #[cfg(stage0)] fn part(arr: &mut [T], left: uint, right: uint, pivot: uint, compare_func: Le) -> uint { - arr[pivot] <-> arr[right]; + vec::swap(arr, pivot, right); let mut storage_index: uint = left; let mut i: uint = left; while i < right { let a: &mut T = &mut arr[i]; let b: &mut T = &mut arr[right]; if compare_func(a, b) { - arr[i] <-> arr[storage_index]; + vec::swap(arr, i, storage_index); storage_index += 1; } i += 1; } - arr[storage_index] <-> arr[right]; + vec::swap(arr, storage_index, right); return storage_index; } #[cfg(not(stage0))] fn part(arr: &mut [T], left: uint, right: uint, pivot: uint, compare_func: Le) -> uint { - arr[pivot] <-> arr[right]; + vec::swap(arr, pivot, right); let mut storage_index: uint = left; let mut i: uint = left; while i < right { if compare_func(&arr[i], &arr[right]) { - arr[i] <-> arr[storage_index]; + vec::swap(arr, i, storage_index); storage_index += 1; } i += 1; } - arr[storage_index] <-> arr[right]; + vec::swap(arr, storage_index, right); return storage_index; } @@ -136,29 +137,29 @@ fn qsort3(arr: &mut [T], left: int, right: int) { j -= 1; } if i >= j { break; } - arr[i] <-> arr[j]; + vec::swap(arr, i as uint, j as uint); if arr[i] == v { p += 1; - arr[p] <-> arr[i]; + vec::swap(arr, p as uint, i as uint); } if v == arr[j] { q -= 1; - arr[j] <-> arr[q]; + vec::swap(arr, j as uint, q as uint); } } - arr[i] <-> arr[right]; + vec::swap(arr, i as uint, right as uint); j = i - 1; i += 1; let mut k: int = left; while k < p { - arr[k] <-> arr[j]; + vec::swap(arr, k as uint, j as uint); k += 1; j -= 1; if k == len::(arr) as int { break; } } k = right - 1; while k > q { - arr[i] <-> arr[k]; + vec::swap(arr, i as uint, k as uint); k -= 1; i += 1; if k == 0 { break; } @@ -273,7 +274,7 @@ fn binarysort(array: &mut [T], start: uint) { fn reverse_slice(v: &mut [T], start: uint, end:uint) { let mut i = start; while i < end / 2 { - v[i] <-> v[end - i - 1]; + vec::swap(v, i, end - i - 1); i += 1; } } @@ -493,7 +494,7 @@ impl MergeState { let mut len1 = len1; let mut len2 = len2; - array[dest] <-> array[c2]; + vec::swap(array, dest, c2); dest += 1; c2 += 1; len2 -= 1; if len2 == 0 { @@ -502,7 +503,7 @@ impl MergeState { } if len1 == 1 { copy_vec(array, dest, array, c2, len2); - array[dest+len2] <-> tmp[c1]; + util::swap(&mut array[dest+len2], &mut tmp[c1]); return; } @@ -515,14 +516,14 @@ impl MergeState { loop { assert!(len1 > 1 && len2 != 0); if array[c2] < tmp[c1] { - array[dest] <-> array[c2]; + vec::swap(array, dest, c2); dest += 1; c2 += 1; len2 -= 1; count2 += 1; count1 = 0; if len2 == 0 { break_outer = true; } } else { - array[dest] <-> tmp[c1]; + util::swap(&mut array[dest], &mut tmp[c1]); dest += 1; c1 += 1; len1 -= 1; count1 += 1; count2 = 0; if len1 == 1 { @@ -546,7 +547,7 @@ impl MergeState { dest += count1; c1 += count1; len1 -= count1; if len1 <= 1 { break_outer = true; break; } } - array[dest] <-> array[c2]; + vec::swap(array, dest, c2); dest += 1; c2 += 1; len2 -= 1; if len2 == 0 { break_outer = true; break; } @@ -557,7 +558,7 @@ impl MergeState { dest += count2; c2 += count2; len2 -= count2; if len2 == 0 { break_outer = true; break; } } - array[dest] <-> tmp[c1]; + util::swap(&mut array[dest], &mut tmp[c1]); dest += 1; c1 += 1; len1 -= 1; if len1 == 1 { break_outer = true; break; } min_gallop -= 1; @@ -574,7 +575,7 @@ impl MergeState { if len1 == 1 { assert!(len2 > 0); copy_vec(array, dest, array, c2, len2); - array[dest+len2] <-> tmp[c1]; + util::swap(&mut array[dest+len2], &mut tmp[c1]); } else if len1 == 0 { fail!(~"Comparison violates its contract!"); } else { @@ -599,7 +600,7 @@ impl MergeState { let mut len1 = len1; let mut len2 = len2; - array[dest] <-> array[c1]; + vec::swap(array, dest, c1); dest -= 1; c1 -= 1; len1 -= 1; if len1 == 0 { @@ -610,7 +611,7 @@ impl MergeState { dest -= len1; c1 -= len1; copy_vec(array, dest+1, array, c1+1, len1); - array[dest] <-> tmp[c2]; + util::swap(&mut array[dest], &mut tmp[c2]); return; } @@ -623,14 +624,14 @@ impl MergeState { loop { assert!(len1 != 0 && len2 > 1); if tmp[c2] < array[c1] { - array[dest] <-> array[c1]; + vec::swap(array, dest, c1); dest -= 1; c1 -= 1; len1 -= 1; count1 += 1; count2 = 0; if len1 == 0 { break_outer = true; } } else { - array[dest] <-> tmp[c2]; + util::swap(&mut array[dest], &mut tmp[c2]); dest -= 1; c2 -= 1; len2 -= 1; count2 += 1; count1 = 0; if len2 == 1 { @@ -659,7 +660,7 @@ impl MergeState { if len1 == 0 { break_outer = true; break; } } - array[dest] <-> tmp[c2]; + util::swap(&mut array[dest], &mut tmp[c2]); dest -= 1; c2 -= 1; len2 -= 1; if len2 == 1 { break_outer = true; break; } @@ -676,7 +677,7 @@ impl MergeState { copy_vec(array, dest+1, tmp, c2+1, count2); if len2 <= 1 { break_outer = true; break; } } - array[dest] <-> array[c1]; + vec::swap(array, dest, c1); dest -= 1; c1 -= 1; len1 -= 1; if len1 == 0 { break_outer = true; break; } min_gallop -= 1; @@ -696,7 +697,7 @@ impl MergeState { dest -= len1; c1 -= len1; copy_vec(array, dest+1, array, c1+1, len1); - array[dest] <-> tmp[c2]; + util::swap(&mut array[dest], &mut tmp[c2]); } else if len2 == 0 { fail!(~"Comparison violates its contract!"); } else { @@ -1081,7 +1082,7 @@ mod big_tests { for 3.times { let i1 = rng.gen_uint_range(0, n); let i2 = rng.gen_uint_range(0, n); - arr[i1] <-> arr[i2]; + vec::swap(arr, i1, i2); } tim_sort(arr); // 3sort isSorted(arr); @@ -1153,7 +1154,7 @@ mod big_tests { for 3.times { let i1 = rng.gen_uint_range(0, n); let i2 = rng.gen_uint_range(0, n); - arr[i1] <-> arr[i2]; + vec::swap(arr, i1, i2); } tim_sort(arr); // 3sort isSorted(arr); diff --git a/src/libstd/treemap.rs b/src/libstd/treemap.rs index 252bb1a6af8e9..2b39458d32dcb 100644 --- a/src/libstd/treemap.rs +++ b/src/libstd/treemap.rs @@ -13,7 +13,7 @@ //! `TotalOrd`. use core::iterator::*; -use core::util::replace; +use core::util::{swap, replace}; // This is implemented as an AA tree, which is a simplified variation of // a red-black tree where where red (horizontal) nodes can only be added @@ -756,8 +756,8 @@ fn mutate_values<'r, K: TotalOrd, V>(node: &'r mut Option<~TreeNode>, fn skew(node: &mut ~TreeNode) { if node.left.map_default(false, |x| x.level == node.level) { let mut save = node.left.swap_unwrap(); - node.left <-> save.right; // save.right now None - *node <-> save; + swap(&mut node.left, &mut save.right); // save.right now None + swap(node, &mut save); node.right = Some(save); } } @@ -768,9 +768,9 @@ fn split(node: &mut ~TreeNode) { if node.right.map_default(false, |x| x.right.map_default(false, |y| y.level == node.level)) { let mut save = node.right.swap_unwrap(); - node.right <-> save.left; // save.left now None + swap(&mut node.right, &mut save.left); // save.left now None save.level += 1; - *node <-> save; + swap(node, &mut save); node.left = Some(save); } } @@ -823,14 +823,14 @@ fn insert(node: &mut Option<~TreeNode>, fn remove(node: &mut Option<~TreeNode>, key: &K) -> Option { fn heir_swap(node: &mut ~TreeNode, - child: &mut Option<~TreeNode>) { + child: &mut Option<~TreeNode>) { // *could* be done without recursion, but it won't borrow check for child.each_mut |x| { if x.right.is_some() { heir_swap(node, &mut x.right); } else { - node.key <-> x.key; - node.value <-> x.value; + swap(&mut node.key, &mut x.key); + swap(&mut node.value, &mut x.value); } } } @@ -850,8 +850,8 @@ fn remove(node: &mut Option<~TreeNode>, if left.right.is_some() { heir_swap(save, &mut left.right); } else { - save.key <-> left.key; - save.value <-> left.value; + swap(&mut save.key, &mut left.key); + swap(&mut save.value, &mut left.value); } save.left = Some(left); (remove(&mut save.left, key), true) diff --git a/src/libstd/workcache.rs b/src/libstd/workcache.rs index 9b0a6cb6226c1..a9e4ec50c7c09 100644 --- a/src/libstd/workcache.rs +++ b/src/libstd/workcache.rs @@ -22,6 +22,7 @@ use core::io; use core::pipes::recv; use core::run; use core::to_bytes; +use core::util::replace; /** * @@ -352,9 +353,7 @@ impl TPrep for Prep { _ => { let (port, chan) = oneshot(); - let mut blk = None; - blk <-> bo; - let blk = blk.unwrap(); + let blk = replace(&mut bo, None).unwrap(); let chan = Cell(chan); do task::spawn { @@ -386,9 +385,7 @@ fn unwrap>( // FIXME(#5121) w: Work) -> T { let mut ww = w; - let mut s = None; - - ww.res <-> s; + let s = replace(&mut ww.res, None); match s { None => fail!(), diff --git a/src/test/bench/core-std.rs b/src/test/bench/core-std.rs index 95a83af93d541..e6b3b3bbe20d3 100644 --- a/src/test/bench/core-std.rs +++ b/src/test/bench/core-std.rs @@ -14,6 +14,7 @@ extern mod std; use std::time::precise_time_s; use core::rand::RngUtil; +use core::util; macro_rules! bench ( ($id:ident) => (maybe_run_test(argv, stringify!($id).to_owned(), $id)) @@ -115,7 +116,7 @@ fn vec_push_all() { v.push_all(rv); } else { - v <-> rv; + util::swap(&mut v, &mut rv); v.push_all(rv); } } diff --git a/src/test/bench/msgsend-ring-pipes.rs b/src/test/bench/msgsend-ring-pipes.rs index aef5c18499ac3..f5191914679fe 100644 --- a/src/test/bench/msgsend-ring-pipes.rs +++ b/src/test/bench/msgsend-ring-pipes.rs @@ -20,6 +20,7 @@ extern mod std; use core::cell::Cell; use core::pipes::recv; +use core::util; use std::time; use std::future; @@ -42,10 +43,8 @@ fn thread_ring(i: uint, // Send/Receive lots of messages. for uint::range(0, count) |j| { //error!("task %?, iter %?", i, j); - let mut num_chan2 = None; - let mut num_port2 = None; - num_chan2 <-> num_chan; - num_port2 <-> num_port; + let num_chan2 = replace(&mut num_chan, None); + let num_port2 = replace(&mut num_port, None); num_chan = Some(ring::client::num(num_chan2.unwrap(), i * j)); let port = num_port2.unwrap(); match recv(port) { diff --git a/src/test/bench/shootout-k-nucleotide-pipes.rs b/src/test/bench/shootout-k-nucleotide-pipes.rs index d1f3dbf22ce83..210bf5cb6de41 100644 --- a/src/test/bench/shootout-k-nucleotide-pipes.rs +++ b/src/test/bench/shootout-k-nucleotide-pipes.rs @@ -17,6 +17,7 @@ use core::hashmap::HashMap; use core::io::ReaderUtil; use core::comm::{stream, Port, Chan}; use core::cmp::Ord; +use core::util; // given a map, print a sorted version of it fn sort_and_fmt(mm: &HashMap<~[u8], uint>, total: uint) -> ~str { @@ -159,8 +160,7 @@ fn main() { let mut from_child = ~[]; let to_child = vec::mapi(sizes, |ii, sz| { let sz = *sz; - let mut stream = None; - stream <-> streams[ii]; + let stream = util::replace(&mut streams[ii], None); let (from_child_, to_parent_) = stream.unwrap(); from_child.push(from_child_); diff --git a/src/test/compile-fail/liveness-assign-imm-local-in-swap.rs b/src/test/compile-fail/liveness-assign-imm-local-in-swap.rs deleted file mode 100644 index 40ccfca919b67..0000000000000 --- a/src/test/compile-fail/liveness-assign-imm-local-in-swap.rs +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2012 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 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -fn test1() { - let v: int; - let mut w: int; - v = 1; //~ NOTE prior assignment occurs here - w = 2; - v <-> w; //~ ERROR re-assignment of immutable variable -} - -fn test2() { - let v: int; - let mut w: int; - v = 1; //~ NOTE prior assignment occurs here - w = 2; - w <-> v; //~ ERROR re-assignment of immutable variable -} - -fn main() { -} diff --git a/src/test/compile-fail/liveness-swap-uninit.rs b/src/test/compile-fail/liveness-swap-uninit.rs deleted file mode 100644 index b2d475dd78926..0000000000000 --- a/src/test/compile-fail/liveness-swap-uninit.rs +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2012 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 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -fn main() { - let mut x = 3; - let y; - x <-> y; //~ ERROR use of possibly uninitialized variable: `y` - copy x; -} diff --git a/src/test/compile-fail/moves-based-on-type-exprs.rs b/src/test/compile-fail/moves-based-on-type-exprs.rs index 7356c227360c8..5b733129ee5dc 100644 --- a/src/test/compile-fail/moves-based-on-type-exprs.rs +++ b/src/test/compile-fail/moves-based-on-type-exprs.rs @@ -87,7 +87,7 @@ fn f110() { fn f120() { let x = ~[~"hi", ~"ho"]; - x[0] <-> x[1]; + vec::swap(x, 0, 1); touch(&x[0]); touch(&x[1]); } diff --git a/src/test/compile-fail/swap-no-lval.rs b/src/test/compile-fail/swap-no-lval.rs deleted file mode 100644 index eca5fb0d315d8..0000000000000 --- a/src/test/compile-fail/swap-no-lval.rs +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2012 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 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -fn main() { - 5 <-> 3; - //~^ ERROR cannot assign - //~^^ ERROR cannot assign -} diff --git a/src/test/run-pass/borrowck-mut-uniq.rs b/src/test/run-pass/borrowck-mut-uniq.rs index 778637701c5fd..023eaae0a7648 100644 --- a/src/test/run-pass/borrowck-mut-uniq.rs +++ b/src/test/run-pass/borrowck-mut-uniq.rs @@ -8,14 +8,16 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +use core::util; + struct Ints {sum: ~int, values: ~[int]} fn add_int(x: &mut Ints, v: int) { *x.sum += v; let mut values = ~[]; - x.values <-> values; + util::swap(&mut values, &mut x.values); values.push(v); - x.values <-> values; + util::swap(&mut values, &mut x.values); } fn iter_ints(x: &Ints, f: &fn(x: &int) -> bool) -> bool { diff --git a/src/test/run-pass/issue-2718.rs b/src/test/run-pass/issue-2718.rs index acd26a88a7361..60daaea57d758 100644 --- a/src/test/run-pass/issue-2718.rs +++ b/src/test/run-pass/issue-2718.rs @@ -10,8 +10,11 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +use core::util; + // tjc: I don't know why pub mod pipes { + use core::util; use core::cast::{forget, transmute}; pub struct Stuff { @@ -104,8 +107,7 @@ pub mod pipes { match old_state { empty | blocked => { task::yield(); } full => { - let mut payload = None; - payload <-> (*p).payload; + let payload = util::replace(&mut p.payload, None); return Some(payload.unwrap()) } terminated => { @@ -159,10 +161,9 @@ pub mod pipes { fn finalize(&self) { unsafe { if self.p != None { - let mut p = None; let self_p: &mut Option<*packet> = cast::transmute(&self.p); - p <-> *self_p; + let p = util::replace(self_p, None); sender_terminate(p.unwrap()) } } @@ -171,9 +172,7 @@ pub mod pipes { pub impl send_packet { fn unwrap(&mut self) -> *packet { - let mut p = None; - p <-> self.p; - p.unwrap() + util::replace(&mut self.p, None).unwrap() } } @@ -192,10 +191,9 @@ pub mod pipes { fn finalize(&self) { unsafe { if self.p != None { - let mut p = None; let self_p: &mut Option<*packet> = cast::transmute(&self.p); - p <-> *self_p; + let p = util::replace(self_p, None); receiver_terminate(p.unwrap()) } } @@ -204,9 +202,7 @@ pub mod pipes { pub impl recv_packet { fn unwrap(&mut self) -> *packet { - let mut p = None; - p <-> self.p; - p.unwrap() + util::replace(&mut self.p, None).unwrap() } } @@ -225,6 +221,7 @@ pub mod pipes { pub mod pingpong { use core::cast; use core::ptr; + use core::util; pub struct ping(::pipes::send_packet); pub struct pong(::pipes::send_packet); diff --git a/src/test/run-pass/regions-infer-borrow-scope-addr-of.rs b/src/test/run-pass/regions-infer-borrow-scope-addr-of.rs index 39da08de6df2c..a87a899cafeaf 100644 --- a/src/test/run-pass/regions-infer-borrow-scope-addr-of.rs +++ b/src/test/run-pass/regions-infer-borrow-scope-addr-of.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +use core::util; + pub fn main() { let mut x = 4; @@ -24,6 +26,6 @@ pub fn main() { } } let mut y = 4; - y <-> x; + util::swap(&mut y, &mut x); } } diff --git a/src/test/run-pass/swap-1.rs b/src/test/run-pass/swap-1.rs index feb7a88dc3480..ed69fa41d711f 100644 --- a/src/test/run-pass/swap-1.rs +++ b/src/test/run-pass/swap-1.rs @@ -8,7 +8,10 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +use core::util; + pub fn main() { let mut x = 3; let mut y = 7; - x <-> y; assert!((x == 7)); assert!((y == 3)); + util::swap(&mut x, &mut y); + assert!((x == 7)); assert!((y == 3)); } diff --git a/src/test/run-pass/swap-2.rs b/src/test/run-pass/swap-2.rs index 24794b0359168..63b377b26d83e 100644 --- a/src/test/run-pass/swap-2.rs +++ b/src/test/run-pass/swap-2.rs @@ -8,15 +8,15 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -fn swap(v: &mut [T], i: int, j: int) { v[i] <-> v[j]; } +use core::util; pub fn main() { let mut a: ~[int] = ~[0, 1, 2, 3, 4, 5, 6]; - swap(a, 2, 4); + vec::swap(a, 2, 4); assert!((a[2] == 4)); assert!((a[4] == 2)); let mut n = 42; - n <-> a[0]; + util::swap(&mut n, &mut a[0]); assert!((a[0] == 42)); assert!((n == 0)); } diff --git a/src/test/run-pass/swap-overlapping.rs b/src/test/run-pass/swap-overlapping.rs index 90b2ceef71a76..05f943bf928ca 100644 --- a/src/test/run-pass/swap-overlapping.rs +++ b/src/test/run-pass/swap-overlapping.rs @@ -10,6 +10,8 @@ // Issue #5041 - avoid overlapping memcpy when src and dest of a swap are the same +use core::util; + pub fn main() { let mut test = TestDescAndFn { desc: TestDesc { @@ -22,7 +24,10 @@ pub fn main() { } fn do_swap(test: &mut TestDescAndFn) { - *test <-> *test; + unsafe { + util::swap_ptr(ptr::to_mut_unsafe_ptr(test), + ptr::to_mut_unsafe_ptr(test)); + } } pub enum TestName { diff --git a/src/test/run-pass/unique-swap.rs b/src/test/run-pass/unique-swap.rs index 6cd7b358c55e7..bf58e2c7cb53b 100644 --- a/src/test/run-pass/unique-swap.rs +++ b/src/test/run-pass/unique-swap.rs @@ -8,10 +8,12 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +use core::util; + pub fn main() { let mut i = ~100; let mut j = ~200; - i <-> j; + util::swap(&mut i, &mut j); assert!(i == ~200); assert!(j == ~100); } diff --git a/src/test/run-pass/weird-exprs.rs b/src/test/run-pass/weird-exprs.rs index ed0032b93eafe..38aa56b65125b 100644 --- a/src/test/run-pass/weird-exprs.rs +++ b/src/test/run-pass/weird-exprs.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +use core::util; + // Just a grab bag of stuff that you wouldn't want to actually write. fn strange() -> bool { let _x: bool = return true; } @@ -52,7 +54,7 @@ fn notsure() { let mut _y = (_x = 0) == (_x = 0); let mut _z = (_x = 0) < (_x = 0); let _a = (_x += 0) == (_x = 0); - let _b = (_y <-> _z) == (_y <-> _z); + let _b = util::swap(&mut _y, &mut _z) == util::swap(&mut _y, &mut _z); } fn canttouchthis() -> uint { From 63c7e2f991eaf79ece0586b19f0461ec6f8933ee Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Mon, 6 May 2013 00:43:19 -0400 Subject: [PATCH 366/410] Remove the '<->' operator from the language --- doc/rust.md | 31 +------------------- src/librustc/middle/borrowck/check_loans.rs | 4 --- src/librustc/middle/dataflow.rs | 5 ---- src/librustc/middle/liveness.rs | 19 ++---------- src/librustc/middle/mem_categorization.rs | 2 +- src/librustc/middle/moves.rs | 5 ---- src/librustc/middle/trans/expr.rs | 27 ----------------- src/librustc/middle/trans/type_use.rs | 2 +- src/librustc/middle/ty.rs | 1 - src/librustc/middle/typeck/check/mod.rs | 14 --------- src/librustc/middle/typeck/check/regionck.rs | 1 - src/librusti/rusti.rc | 4 --- src/libsyntax/ast.rs | 1 - src/libsyntax/fold.rs | 3 -- src/libsyntax/parse/obsolete.rs | 5 ++++ src/libsyntax/parse/parser.rs | 10 ++++--- src/libsyntax/print/pprust.rs | 6 ---- src/libsyntax/visit.rs | 4 --- 18 files changed, 16 insertions(+), 128 deletions(-) diff --git a/doc/rust.md b/doc/rust.md index ac7125be424d4..60848441e4e77 100644 --- a/doc/rust.md +++ b/doc/rust.md @@ -1946,35 +1946,6 @@ fn avg(v: &[float]) -> float { } ~~~~ -#### Swap expressions - -A _swap expression_ consists of an [lvalue](#lvalues-rvalues-and-temporaries) followed by a bi-directional arrow (`<->`) and another [lvalue](#lvalues-rvalues-and-temporaries). - -Evaluating a swap expression causes, as a side effect, the values held in the left-hand-side and right-hand-side [lvalues](#lvalues-rvalues-and-temporaries) to be exchanged indivisibly. - -Evaluating a swap expression neither changes reference counts, -nor deeply copies any owned structure pointed to by the moved [rvalue](#lvalues-rvalues-and-temporaries). -Instead, the swap expression represents an indivisible *exchange of ownership*, -between the right-hand-side and the left-hand-side of the expression. -No allocation or destruction is entailed. - -An example of three different swap expressions: - -~~~~~~~~ -# let mut x = &mut [0]; -# let mut a = &mut [0]; -# let i = 0; -# struct S1 { z: int }; -# struct S2 { c: int }; -# let mut y = S1{z: 0}; -# let mut b = S2{c: 0}; - -x <-> a; -x[i] <-> a[i]; -y.z <-> b.c; -~~~~~~~~ - - #### Assignment expressions An _assignment expression_ consists of an [lvalue](#lvalues-rvalues-and-temporaries) expression followed by an @@ -2015,7 +1986,7 @@ as == != && || -= <-> += ~~~~ Operators at the same precedence level are evaluated left-to-right. diff --git a/src/librustc/middle/borrowck/check_loans.rs b/src/librustc/middle/borrowck/check_loans.rs index 27f6ae33ba3d1..2f116cb1b284b 100644 --- a/src/librustc/middle/borrowck/check_loans.rs +++ b/src/librustc/middle/borrowck/check_loans.rs @@ -758,10 +758,6 @@ fn check_loans_in_expr<'a>(expr: @ast::expr, } match expr.node { - ast::expr_swap(l, r) => { - self.check_assignment(l); - self.check_assignment(r); - } ast::expr_assign(dest, _) | ast::expr_assign_op(_, dest, _) => { self.check_assignment(dest); diff --git a/src/librustc/middle/dataflow.rs b/src/librustc/middle/dataflow.rs index f1fa5144f4c75..dc08fb39ad984 100644 --- a/src/librustc/middle/dataflow.rs +++ b/src/librustc/middle/dataflow.rs @@ -698,11 +698,6 @@ impl<'self, O:DataFlowOperator> PropagationContext<'self, O> { self.walk_expr(l, in_out, loop_scopes); } - ast::expr_swap(l, r) => { - self.walk_expr(l, in_out, loop_scopes); - self.walk_expr(r, in_out, loop_scopes); - } - ast::expr_vec(ref exprs, _) => { self.walk_exprs(*exprs, in_out, loop_scopes) } diff --git a/src/librustc/middle/liveness.rs b/src/librustc/middle/liveness.rs index 0bd73a15d507c..52274f3d30570 100644 --- a/src/librustc/middle/liveness.rs +++ b/src/librustc/middle/liveness.rs @@ -523,7 +523,7 @@ fn visit_expr(expr: @expr, self: @mut IrMaps, vt: vt<@mut IrMaps>) { expr_binary(*) | expr_addr_of(*) | expr_copy(*) | expr_loop_body(*) | expr_do_body(*) | expr_cast(*) | expr_unary(*) | expr_break(_) | expr_again(_) | expr_lit(_) | expr_ret(*) | expr_block(*) | - expr_assign(*) | expr_swap(*) | expr_assign_op(*) | expr_mac(*) | + expr_assign(*) | expr_assign_op(*) | expr_mac(*) | expr_struct(*) | expr_repeat(*) | expr_paren(*) | expr_inline_asm(*) => { visit::visit_expr(expr, self, vt); @@ -1141,21 +1141,6 @@ pub impl Liveness { self.propagate_through_expr(r, succ) } - expr_swap(l, r) => { - // see comment on lvalues in - // propagate_through_lvalue_components() - - // I count swaps as `used` cause it might be something like: - // foo.bar <-> x - // and I am too lazy to distinguish this case from - // y <-> x - // (where both x, y are unused) just for a warning. - let succ = self.write_lvalue(r, succ, ACC_WRITE|ACC_READ|ACC_USE); - let succ = self.write_lvalue(l, succ, ACC_WRITE|ACC_READ|ACC_USE); - let succ = self.propagate_through_lvalue_components(r, succ); - self.propagate_through_lvalue_components(l, succ) - } - expr_assign_op(_, l, r) => { // see comment on lvalues in // propagate_through_lvalue_components() @@ -1533,7 +1518,7 @@ fn check_expr(expr: @expr, self: @Liveness, vt: vt<@Liveness>) { expr_vstore(*) | expr_vec(*) | expr_tup(*) | expr_log(*) | expr_binary(*) | expr_copy(*) | expr_loop_body(*) | expr_do_body(*) | expr_cast(*) | expr_unary(*) | expr_ret(*) | expr_break(*) | - expr_again(*) | expr_lit(_) | expr_block(*) | expr_swap(*) | + expr_again(*) | expr_lit(_) | expr_block(*) | expr_mac(*) | expr_addr_of(*) | expr_struct(*) | expr_repeat(*) | expr_paren(*) => { visit::visit_expr(expr, self, vt); diff --git a/src/librustc/middle/mem_categorization.rs b/src/librustc/middle/mem_categorization.rs index 0e819c66f094d..7675efa76f4be 100644 --- a/src/librustc/middle/mem_categorization.rs +++ b/src/librustc/middle/mem_categorization.rs @@ -413,7 +413,7 @@ pub impl mem_categorization_ctxt { ast::expr_paren(e) => self.cat_expr_unadjusted(e), - ast::expr_addr_of(*) | ast::expr_call(*) | ast::expr_swap(*) | + ast::expr_addr_of(*) | ast::expr_call(*) | ast::expr_assign(*) | ast::expr_assign_op(*) | ast::expr_fn_block(*) | ast::expr_ret(*) | ast::expr_loop_body(*) | ast::expr_do_body(*) | ast::expr_unary(*) | diff --git a/src/librustc/middle/moves.rs b/src/librustc/middle/moves.rs index 040ff30f9e63f..2471e383bca9c 100644 --- a/src/librustc/middle/moves.rs +++ b/src/librustc/middle/moves.rs @@ -650,11 +650,6 @@ pub impl VisitContext { self.consume_expr(count, visitor); } - expr_swap(lhs, rhs) => { - self.use_expr(lhs, Read, visitor); - self.use_expr(rhs, Read, visitor); - } - expr_loop_body(base) | expr_do_body(base) => { self.use_expr(base, comp_mode, visitor); diff --git a/src/librustc/middle/trans/expr.rs b/src/librustc/middle/trans/expr.rs index 1b7cdf3ac8059..ed3dfdc07c373 100644 --- a/src/librustc/middle/trans/expr.rs +++ b/src/librustc/middle/trans/expr.rs @@ -528,33 +528,6 @@ fn trans_rvalue_stmt_unadjusted(bcx: block, expr: @ast::expr) -> block { return src_datum.store_to_datum( bcx, src.id, DROP_EXISTING, dst_datum); } - ast::expr_swap(dst, src) => { - let dst_datum = unpack_datum!(bcx, trans_lvalue(bcx, dst)); - let src_datum = unpack_datum!(bcx, trans_lvalue(bcx, src)); - - // If the source and destination are the same, then don't swap. - // Avoids performing an overlapping memcpy - let dst_datum_ref = dst_datum.to_ref_llval(bcx); - let src_datum_ref = src_datum.to_ref_llval(bcx); - let cmp = ICmp(bcx, lib::llvm::IntEQ, - src_datum_ref, - dst_datum_ref); - - let swap_cx = base::sub_block(bcx, "swap"); - let next_cx = base::sub_block(bcx, "next"); - - CondBr(bcx, cmp, next_cx.llbb, swap_cx.llbb); - - let scratch = scratch_datum(swap_cx, dst_datum.ty, false); - - let swap_cx = dst_datum.move_to_datum(swap_cx, INIT, scratch); - let swap_cx = src_datum.move_to_datum(swap_cx, INIT, dst_datum); - let swap_cx = scratch.move_to_datum(swap_cx, INIT, src_datum); - - Br(swap_cx, next_cx.llbb); - - return next_cx; - } ast::expr_assign_op(op, dst, src) => { return trans_assign_op(bcx, expr, op, dst, src); } diff --git a/src/librustc/middle/trans/type_use.rs b/src/librustc/middle/trans/type_use.rs index cbad7bcb3a6be..3c2738d3ae80e 100644 --- a/src/librustc/middle/trans/type_use.rs +++ b/src/librustc/middle/trans/type_use.rs @@ -314,7 +314,7 @@ pub fn mark_for_expr(cx: Context, e: @expr) { } } } - expr_assign(val, _) | expr_swap(val, _) | expr_assign_op(_, val, _) | + expr_assign(val, _) | expr_assign_op(_, val, _) | expr_ret(Some(val)) => { node_type_needs(cx, use_repr, val.id); } diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index 737548ee86869..829a1e399de0c 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -3465,7 +3465,6 @@ pub fn expr_kind(tcx: ctxt, ast::expr_while(*) | ast::expr_loop(*) | ast::expr_assign(*) | - ast::expr_swap(*) | ast::expr_inline_asm(*) | ast::expr_assign_op(*) => { RvalueStmtExpr diff --git a/src/librustc/middle/typeck/check/mod.rs b/src/librustc/middle/typeck/check/mod.rs index baa28b6498278..7c79693a8b2eb 100644 --- a/src/librustc/middle/typeck/check/mod.rs +++ b/src/librustc/middle/typeck/check/mod.rs @@ -2460,20 +2460,6 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt, fcx.write_nil(id); } } - ast::expr_swap(lhs, rhs) => { - check_assignment(fcx, lhs, rhs, id); - let lhs_ty = fcx.expr_ty(lhs); - let rhs_ty = fcx.expr_ty(rhs); - if ty::type_is_error(lhs_ty) || ty::type_is_error(rhs_ty) { - fcx.write_error(id); - } - else if ty::type_is_bot(lhs_ty) || ty::type_is_bot(rhs_ty) { - fcx.write_bot(id); - } - else { - fcx.write_nil(id); - } - } ast::expr_if(cond, ref thn, elsopt) => { check_expr_has_type(fcx, cond, ty::mk_bool()); check_then_else(fcx, thn, elsopt, id, expr.span); diff --git a/src/librustc/middle/typeck/check/regionck.rs b/src/librustc/middle/typeck/check/regionck.rs index 2274259f18c19..55c1f03b330e2 100644 --- a/src/librustc/middle/typeck/check/regionck.rs +++ b/src/librustc/middle/typeck/check/regionck.rs @@ -1016,7 +1016,6 @@ pub mod guarantor { ast::expr_while(*) | ast::expr_loop(*) | ast::expr_assign(*) | - ast::expr_swap(*) | ast::expr_assign_op(*) | ast::expr_cast(*) | ast::expr_call(*) | diff --git a/src/librusti/rusti.rc b/src/librusti/rusti.rc index a8cd7f5f41c66..836ca1cfa45b5 100644 --- a/src/librusti/rusti.rc +++ b/src/librusti/rusti.rc @@ -96,10 +96,6 @@ fn record(repl: Repl, blk: @ast::blk, intr: @token::ident_interner) -> Repl { match expr.node { ast::expr_assign(*) | ast::expr_assign_op(*) | - ast::expr_swap(*) => { - pprust::print_stmt(pp, *stmt); - writer.write_line(~""); - } _ => {} } } diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index f4e3e6832292a..8aa59fd177559 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -569,7 +569,6 @@ pub enum expr_ { expr_copy(@expr), expr_assign(@expr, @expr), - expr_swap(@expr, @expr), expr_assign_op(binop, @expr, @expr), expr_field(@expr, ident, ~[@Ty]), expr_index(@expr, @expr), diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs index d181dd87e38d1..338b9b29f004a 100644 --- a/src/libsyntax/fold.rs +++ b/src/libsyntax/fold.rs @@ -511,9 +511,6 @@ pub fn noop_fold_expr(e: &expr_, fld: @ast_fold) -> expr_ { expr_assign(el, er) => { expr_assign(fld.fold_expr(el), fld.fold_expr(er)) } - expr_swap(el, er) => { - expr_swap(fld.fold_expr(el), fld.fold_expr(er)) - } expr_assign_op(op, el, er) => { expr_assign_op(op, fld.fold_expr(el), fld.fold_expr(er)) } diff --git a/src/libsyntax/parse/obsolete.rs b/src/libsyntax/parse/obsolete.rs index a4ac038cf466f..e9e5bdfe13da5 100644 --- a/src/libsyntax/parse/obsolete.rs +++ b/src/libsyntax/parse/obsolete.rs @@ -40,6 +40,7 @@ pub enum ObsoleteSyntax { ObsoleteModeInFnType, ObsoleteMoveInit, ObsoleteBinaryMove, + ObsoleteSwap, ObsoleteUnsafeBlock, ObsoleteUnenforcedBound, ObsoleteImplSyntax, @@ -129,6 +130,10 @@ pub impl Parser { "binary move", "Write `foo = move bar` instead" ), + ObsoleteSwap => ( + "swap", + "Use core::util::{swap, replace} instead" + ), ObsoleteUnsafeBlock => ( "non-standalone unsafe block", "use an inner `unsafe { ... }` block instead" diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 3ddc7a8792494..5aa45ab3c9bec 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -26,7 +26,7 @@ use ast::{expr_break, expr_call, expr_cast, expr_copy, expr_do_body}; use ast::{expr_field, expr_fn_block, expr_if, expr_index}; use ast::{expr_lit, expr_log, expr_loop, expr_loop_body, expr_mac}; use ast::{expr_method_call, expr_paren, expr_path, expr_repeat}; -use ast::{expr_ret, expr_swap, expr_struct, expr_tup, expr_unary}; +use ast::{expr_ret, expr_struct, expr_tup, expr_unary}; use ast::{expr_vec, expr_vstore, expr_vstore_mut_box}; use ast::{expr_vstore_slice, expr_vstore_box}; use ast::{expr_vstore_mut_slice, expr_while, extern_fn, field, fn_decl}; @@ -70,7 +70,7 @@ use parse::lexer::reader; use parse::lexer::TokenAndSpan; use parse::obsolete::{ObsoleteClassTraits}; use parse::obsolete::{ObsoleteLet, ObsoleteFieldTerminator}; -use parse::obsolete::{ObsoleteMoveInit, ObsoleteBinaryMove}; +use parse::obsolete::{ObsoleteMoveInit, ObsoleteBinaryMove, ObsoleteSwap}; use parse::obsolete::{ObsoleteSyntax, ObsoleteLowerCaseKindBounds}; use parse::obsolete::{ObsoleteUnsafeBlock, ObsoleteImplSyntax}; use parse::obsolete::{ObsoleteTraitBoundSeparator, ObsoleteMutOwnedPointer}; @@ -1849,9 +1849,11 @@ pub impl Parser { expr_break(None)) } token::DARROW => { + self.obsolete(*self.span, ObsoleteSwap); self.bump(); - let rhs = self.parse_expr(); - self.mk_expr(lo, rhs.span.hi, expr_swap(lhs, rhs)) + // Ignore what we get, this is an error anyway + self.parse_expr(); + self.mk_expr(lo, self.span.hi, expr_break(None)) } _ => { lhs diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index 81652f9c1a100..9d2927eb74f48 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -1328,12 +1328,6 @@ pub fn print_expr(s: @ps, expr: @ast::expr) { word_space(s, ~"="); print_expr(s, rhs); } - ast::expr_swap(lhs, rhs) => { - print_expr(s, lhs); - space(s.s); - word_space(s, ~"<->"); - print_expr(s, rhs); - } ast::expr_assign_op(op, lhs, rhs) => { print_expr(s, lhs); space(s.s); diff --git a/src/libsyntax/visit.rs b/src/libsyntax/visit.rs index 90dd49d684843..dcc94c92a886d 100644 --- a/src/libsyntax/visit.rs +++ b/src/libsyntax/visit.rs @@ -516,10 +516,6 @@ pub fn visit_expr(ex: @expr, e: E, v: vt) { (v.visit_expr)(a, e, v); } expr_copy(a) => (v.visit_expr)(a, e, v), - expr_swap(a, b) => { - (v.visit_expr)(a, e, v); - (v.visit_expr)(b, e, v); - } expr_assign_op(_, a, b) => { (v.visit_expr)(b, e, v); (v.visit_expr)(a, e, v); From 60803e5fc81ed7065c91c0b1725dbbd4da0af3f7 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Fri, 10 May 2013 22:03:23 -0400 Subject: [PATCH 367/410] Fix tests with the swap operator --- doc/tutorial-ffi.md | 4 +++- src/test/bench/msgsend-ring-pipes.rs | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/doc/tutorial-ffi.md b/doc/tutorial-ffi.md index 2a3d8dc14817c..d8367fbdc2d79 100644 --- a/doc/tutorial-ffi.md +++ b/doc/tutorial-ffi.md @@ -151,6 +151,7 @@ wrapping `malloc` and `free`: ~~~~ use core::libc::{c_void, size_t, malloc, free}; use core::unstable::intrinsics; +use core::util; // a wrapper around the handle returned by the foreign code pub struct Unique { @@ -184,7 +185,8 @@ impl Drop for Unique { fn finalize(&self) { unsafe { let mut x = intrinsics::init(); // dummy value to swap in - x <-> *self.ptr; // moving the object out is needed to call the destructor + // moving the object out is needed to call the destructor + util::replace_ptr(self.ptr, x); free(self.ptr as *c_void) } } diff --git a/src/test/bench/msgsend-ring-pipes.rs b/src/test/bench/msgsend-ring-pipes.rs index f5191914679fe..f698b2c3c1137 100644 --- a/src/test/bench/msgsend-ring-pipes.rs +++ b/src/test/bench/msgsend-ring-pipes.rs @@ -43,8 +43,8 @@ fn thread_ring(i: uint, // Send/Receive lots of messages. for uint::range(0, count) |j| { //error!("task %?, iter %?", i, j); - let num_chan2 = replace(&mut num_chan, None); - let num_port2 = replace(&mut num_port, None); + let num_chan2 = util::replace(&mut num_chan, None); + let num_port2 = util::replace(&mut num_port, None); num_chan = Some(ring::client::num(num_chan2.unwrap(), i * j)); let port = num_port2.unwrap(); match recv(port) { From 4958e9b4b632b67050dc4de6df1f97329292dfbc Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Sat, 11 May 2013 13:42:51 +1000 Subject: [PATCH 368/410] Remove core executable --- src/libcore/core | Bin 9455580 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100755 src/libcore/core diff --git a/src/libcore/core b/src/libcore/core deleted file mode 100755 index 790c07db685e3464ca485f2b30084f1c2d68ce15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9455580 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�PT&rQ0l%>!0T&ufr|KgW`B21d_mdza;c55x%VB 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

    XfpjRHJSz_MPJZnyxwq;?egYdcin@+@_UqyKz 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
      ??KS|lwRU{uNRtt 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
    1. Z0{qHEFBJ7Q6uTK*xflx7b{vU zTtzv-`_@VeIb#JKy^VFzb^35_?ef`nYnx0Ic&Y@~tng1bBW!>VS8o1gkNkgFB`g&} zqW>3b$qACt|9eyqj~C&`o^z@SH{jf;bN$YlU`8yGNIs9@_{-ww1?knkcUqx%s)g`B%bkRBW=;~#KPPLk}p8jOR zhjwvHJ0THWTa;6-SV5^`923Q~oVn|M=ho2m4NsDG7Zt|lJKja@u8$eYgei8 zK^$&nb8q+ow0_thcL1RUA-&m&HTY@H$qpx{IuSush307JbH~&9Otgjp)ZE6 zN^lu{5H0v}i@@xs-deA)a+4BpSv!Q!?%Z}^}ik~ z+f~wSS4A0eNqB}_VdXVBM4Gpnjz}l%ZRn~dXlcOu1iJe9g)U_$RVNjdhKqUyICF>) z;D{CrPokiPt~2EE+6%{Uy!BB@@1u&cK1y8HM;f2f8NGCsTW;-_wGa>$9H7txe9dTRUN*z*8l-<|eh7ZBy6+S8jg8Ve33g6YtYptr;hfNk$QCXvO>}N(0aEg z7(R@MV`FznMAsqZlq*(Hsu;&aF)asOXOWuDT{{nzcDr3j4IBW^BnZDp^3(6^1te{je4zo+ku?dpD zLP=X@bOc@7ts(XYKVuEL=5OY!|8paB&AEPfCiQaYD&NbHAskF`MAt9Sm%nN5ssxuY z1&QdYq|o)w`|4c#yjpGU`U6dH_IQ=K;4n%xbX9_ylbjgQb%-2-xuo?E93$IR(rs5o z8FJ04^=vikt!L)Yb+`z~B~N{;~N1&9#f zh!zVUpjr)G`^hUM&)^vTa{v5(7fv7>g)74;w-|0G@P<2Xwf zD_SgENWqvLi-m4-#_Z^Atc$KUb#rSEdZpdkE)#{qmEf8O)fmC*B0N)rl$$#rBmeJG z7J+n-=>L7S21dqo^u@6vhqf2G3VPp(7P4s!VAqWr%;Lw8?Ezxyg$gRU+)Mc44kdUW-&La;ux ze(te`4~ycMc0wY$&MSwIbP+<*y?h}p2VGxuMh#srKSbJ{@Jf@AsNLyWa+YM&?vUyc zk}g6>x^t=uH|pG!b0f}~;Br-hQPi-PnG{0O;i7hDT)TrR&$K(>C$*s_*RE3GS2*1I zb5~OjA?Yq_*vMQs2wX69^^8Klwb6Psb9Or2BaTTQWHWsMUAvUStK%Z2igB1-T8>SS z{54A2GNU8tI${lN4-b3A8g$Ly%=`SuM(FC7pWgI84mY5y+g@7yJ&Gf`?n7S;U6tT6 zS|D*{KuMwNNA98PD0IMrt~>&v%bU*D1m_dJVv_bL7iztC=d0$u(5!pfhh$yXwbR8$(m zp#q$n5h1`4{HFOQ?Qu0fV;eAJ{k4kzURh0En;<7%{pGBQfI^EFK+AnWY7U=4v zViks{PXnme5j@^GRfQXIZqm77=S*<9D#7^wke8VhelWsC|91;W z22`F@=e>5nlUX|N{;yQ{)#K~Xb%q>%xhVewPu1O5((k^C)}X6PPCaSt<@M<5WraTL zL+jRq4IjG2%@uke5nVf#Lv)i!sbU-x#k3rBz4I$-=z7{g((bAr>=If)rKsJuTC#&= z)b70M@vMp*^ckE}Rk$VRTAW*S&IFgM5{z~il*x*M2!RTas9iU?WL5>4c4w@1bqY1P zc9jZmJZvL$omV4#M8Z3;U}P>_jn5gndPZT|+Gt&QoM~@T9FsoCX8HoUjw^>qP7ywA z=;ae>IW|G^dX%(fMn}+f(HhzwzCE-CUA-&m&D?fsimuH&@AG5C*TsP(Iqwf|rE0F& z%`cU72F1%?!cm5-mvdpLSD{ymw<@y4mW$UOkyY?l7e}`5lWOr+!xS%Tzbz#^-b(Yy zO%ITDS&V^B4x3Mrzba5(|NA=nE|~2y+m$INTc-)hn4xTzJmQ|t38Ckge*q+xkN2P$ zR76k=$MEhWf`2*qhN9$s9;hwg~{&aZjJ2-A`p&Xr9_|E<5P+VI>!WEIM#b%v9QSm>F8pXFXj3E z-Qx3o)ccl4NWIw?9k;*K;Lu`}m|QYuYCwXNo4@r?n_Mc(-_nQ55h=OrKzi zUgz4r(B-^yVlbK!FQZuxXg29?1iQc{!VolLILkk_j8E0gygtwj&z@xZ9fvM!#7 zdV!sr1$1{S6JvqgfXejVBgyd97h}@(2u!-XPfS04Rbzuk~u|_ zKSy8H#JATvyUDK+ldV>2>k7#yhx z3^O?LZ!l)R$!~v2&Ms}Zi+1^Yo^a=*#2U`s&biCiqWu;+L$H?uRdxlMDoTX6&!p&7 zQ91U#pz9%cSzIZG=+t)mNGz8D0%R}I0gdTc#dOX?@!4;fSRk#7?MxE<-&II#l$1sU8n{M3|O2r>bzX&IRXYoHN0M)mdhB+RID|xC$3_9gWML7iYSj z@RKyFb6qPH!gDslF;h?W&4X#X{JC%^9M*7bMj1TFkyO6_&W{9?z#E&E+|oz* z)eFoudL%!_lw>ogLYHz0QWi;k53N$t=~ca~&|zivd_U~`Q5}v=%Mz1MNR5XdCeu{X zO;bggX!VNL*nW^bgkwsCD?XRu zn99MiHY3S^2;aLkvLhV(Y=O=F;KuA&EL=<{*fNTvaO@*c;h5-J95Z1&tas7YPzY@&5^!Hqb!8y-_P6YJLPE)|v(NXhAE=C~9^sWDJo9u;RpBO_n{{s7ITK8HrDewN2PP(k-zQ|c+*Fq%szv~y z*B*AFpDFHJN`*I}=M2Zj$zek&r<3 zQ5dowwSMIQ!?6Kz1Y1HPj`b;rU`r8#Exo)yEoUL{vkT`LtjFg$gBZ8%V{w)_jDY!>EAhyDH#rWZUc^4zcN(lIB_kG9eki%gEe~l3->$0 zTw~N*bCS)+hLy__iwG~uIydB1z05z2m~5LMGiZ zX=jVqnCMy@lO7P=W>uO|*_KxDm&mgvZq3*zoaovpOV?D18%aF(u{ZSKm**wW0@Nys{68zSTmd zm~1EMK2VueJ;D=BLbBwXs&cm%oojM#!8sGmNAAV(k$WQ^Ho`MPIG3C1az^DzwbMkz z(2?pOSLwc`RCv7`i_gaf$cZma9es$5#b26|v8X6B7MGaf*p}z!jHTady0ILhH_r5< z($6SNS&v%(yr1FNgt$4|RxILJQ90#`6_hH*@e7X3bUyZB+DdV(^}f>efD6$x$f)4q zT5^UXOH6RpEM^8*;AOITKv2N-(?8&#@F;-H z&2*3(*JNGsPb!wJfFXEwm6JR~;YPH^d@PU?Ub?jb$Gk)7jUE_Si({|aU#`K+?)De9 zKF3^RR`OYEHj?4kwAdKtka#2nuRnQJFDp!nW8DuDj=#DN$9hm8+dfH+pL?WCQ%N6U zRg{^gHJRbqM~=&xX1CRJ(|p&SYj7-o?#npWaBQB=FdutApnRgn>yBR)}Z7y>=E{vcKKG9N>~|#MBnPGB?n0ArfX$P_5K(3 z2#dO0)iXBMY}5)f3VY&K?c^%mx0DLEp$vS>ajb(J9=j_44F}0slyqZJQD!VIF*Wa3 zZ_OD?yVZ1KIgNqZ7ssp*>Aql(xVPchqI$$nLP*51dF9;EzF^nVR*GZ2_mZwBT*xFO z>Uz4C)HA@S>-e109~%A>_XUf_HK=Z6x*iZmTnwskT`LvF`!>QcQ|Ov~!9Iq=`udo( zm+cGo&CP~m!=}>z=Y7Fe9LGB8ari)g1CHfy^!T&a;@GL`%%uim976I;bBz{VKd5OW z!?9I+nwT^xH>m{YRz%n{#JKpBep{P*^Oh@2UFS8vE4chHnWkPFbkl4xgNy59)?|ib zKYdotG@GoZo95Llbb~%iYM01%^@-<2){7nCBcInpMSYl~Vak>le;(qOzvy4^h#>T; zJFz5n5;~QYvZ(&}eWV|Lme^l-xirjEL~GRvlW60rPAb#JHQz&XC+5-O_-O}emx7<6 z$J`7=Y51}d@C%gh{3aC|Ut0XiL!~Uezv#+ZvHDS2){RVApLu3ZS-~aSyI-1bf}#ykf7bTs*_5Kam{~~`4a9Rj-R0rmX&!w zf@i?8I<5pO&t3rSq`YQ@^U_Un8OPB5U@1#USC)!0Wmz{eWj&Ousapz~wVJN1{aES6 z3cIXp$r4X;`jX}^F`LEi)HGJuBvN+5?+I1m_XH$bq2;iYq5?oigf~^a+9KqSZiPyQ zw>-VU3iBO3|L8_5+_@=dg|B;tX?aG{`J}dy%nGN(vK5dBugf_%X>|%-W^n~v?kt(1 zFjr@VGty)7d5+;{50YY)bj7MDQ>-)|o^N(lz6liM{*N zvceyb*6bN5Yt;!$^2Sx2R0fS}e&;>S3XNkmluWb2 z9zBsJpqeW&D^vo0l=7MtPLdg4gZ%6RrL6ZV!yc@tC{vboBU9FgpOI76giCIhp%e+tZ^J?!012joJ<6k#*Sl0NeRQ&)@rQYYl&9YyaBw_h~Iv z==r-6>GO9R%^qYpf*aaj_<;JB?p>IzAM>TD(owU0$<`_8bYEF~?^O6N-hJZkC>+i1 zmJ$>!?EDDAe2llqsXKEFyU}~bcx4KgL#VIZ#*Ou~oVX6>-TEBqbH$_5c##r`<<>r?2#b zzS8$Yi5($9!1S7yyrx~#yVyZz`Jmh*%t2iUt8-S%cZ18U_(@1wzRKec3eTtFYxO%! ziSYUNroY1!ec+p#SO7wNPQN2OnM*DfPNedf9eJ`x8$8+LXixT__GAy5{sKE<`3Rr) zC=$VTo9eS*gv1~4?+Cv=%+`=h=rJ65re{KREvlL^<+BqUux zQVt79A}kJ3VD@N#Vbc-j7WM#=xrQ3b@Yo)Cqbz$6 z$y`H)>E;@-tf0)$q}RXr$${1kp_PE2rEKSyXvg4fip)}Sku>`v#*DHh-BeYSnX2_6 zGu5rVIa8f<$!4nGI6yeUQyWny?_>h<0D4)3-_t6P{* zCtv#*ZhwAbhkVz*cm(==Ew?q|_c&+qP)g^%Za-b1l74|Iiuf(r!f&+%enT?+{^r|r z_+9jxcCA0W|62T(1U%1bRR*o+>8(ExNy6`K^JKG>_I$|h2H_;a@86L^ctzzxaU+Re zeqtOGxL2bAfSfXboMW-@Mj9Klqk#MkZ~}7C6v%5K8YT=ZchS}mek%^q`r=arT}J(M3RX=TsH0 z$GIWrx}6&^;@f3_=w4=0Kyv_LH9V*Xs-EOt3gQ&uFtyJiJ^oF1=A%MEe>M}AH zUVtY%s4D|dwdx7-QcMPce?e<{ zBtSA8`-DbN_nzQ2+QX~2XFX7#-%ZYuO|N^N=%B8?0_sL;KOn^d>LP%;bCXub9?b(z z$_x+XwJp*EXw5)f34uCgJFn%s4AlF{pia&gTcl5ZVX8E#j)<^4Z*`NRbCwCR!&z+>pRAzTW37CfTkNSyw`E*T zhNlW$WQ5mut%ZFPkhT!) zc&wYYcX-WJ$j+ZDMzmqtE(uI0tXBMzS=zNCk{tG_B-n>M+hCtWxOKb+`w{}|8}a>D zN{Mk`^Z951*ryEG=g7`xG{%-<90mLPK?VDw>%hK??s3ucA~?5^9pOPH`WU#ef{p~v zm}nhca3kzL`c666Klw0+eaQp%O{{G+Qf@x|Z^!9Lu%6rj`;Z7lEmVrhc9ISmm08sT z_Dw>vkoXbshIiqr*$V619{iHUo(xFJH@I{o7 z!F~%lY-y+bBleLMDd|?EqRf$8VtT_L`}mwAHCat}q>I^f3BTn@u=T-qrszvrZ)kGZ zSC4>wNDBMP0rst{9xA|-;Itg%c@J%+u)pi=()EDq5*7oA3LdT{M@dFq+e1xYU)6zq z5w^EY-s7VOUXSFJAY6{r577I-xz&>O%9Te<)ft?HNJGUxH zm<;4Lv?kam8BTm`BkX%mBJ3Z1=z6e!^)5NsKeF3lUo8OpMryDx7T6a7_MMxwIvyne z?8Aja^pX~Sgw_o9l@RPxw(|C=WSc7p>2b2=^@4 zP+menc_SX*0?La6<==}2KzTS&o@24_RT>+!qfq`Ua6);}bx_`9+RhtX=)B4Fs18JL zG114EXdR1%Z6;br7u<;Q$J};Y{aVfFqaEcX7L+&Xg-%Ghxpa%6ydGhK@{ou;EtJM& zJ4r`~iUk;e@+Ki!(plMl0QRh#@2Pv)f|sorsYbSqL(4dqQ@YKzZ&OwMm6t)~0U*Vz2YQQpod zOj(aw@A4P)88@c@<;hG@Uge;?b+u9y0p-(jP`*lADazk()ll9m4ML)Vhil1El2O;4 zst3x8fb!0%DqN3qL(X+OH(;bH!RWfn%S;L=4;OVEjjKcDnXcRYqzP2vx>hO-J$OTu zmwG^X(^Asq>J8`P$&T{M0OjogbMpr^=K$rcR;5i%f%4X3p-BXkhis;ULU}K+b3u9M zRwW6Of&3M%3FS$KvmV)q^4^n(@2!qKM~%8#QpLwO~H@>Hpze34AHDv@TVTV<_Ey0xk(vsUXvhVmbJRL)vQ zt)^S+J$Rf=N7TxCC~y6%jEjKs&W(zI^3GW%C=ZvSycJYOtQDcWrwYSlgqZ`^qP*2l zJ?rL!^C&;WS!{5jbH8#|U9pmW#VU#@FWEwQi2~&z8Oq<~f*i^ZdQC(5ee~t|hPk{X z@WPVSsto43_GLD6bd)DsC=by)<`pHvBMLQ?*J+@lsB>?d;txB@^GL$NA}L3 zF?P=2D3pIbR46aH4$4akOE^Z7c@ccs$c}J=i9QC7xjaXjG0{4@;6{``<L- z@{$M2n^@ZeqTKwUKN`yGnJg#|iOADJrI>6d8Ifn!p55j`F+h2fmn?c&lXDBstr)3F zuu$GeVp4EfxQIMamoq8{c}zrg+E41|Djj*03cr)3r6}J=PANG;`6GMCij;IKQc>nN zE-|&mQ@e70(_=N=Z+@Ibby^<^Q`V!_jz2ldiv#5$DatDclow$M$IHjla!~#%+DcLW zv41d>_ez71sNmsRa+GA$b*Jiq@*<$TbE+!KaBj%CZs!J!R3%s_?`0+hl!uGDp7$Hn zq4G@E?S4`>s&HK^70y3kLzI^gP~K&A8JP?3#giT7l>y4@IVjKnHRk~3tyZN?O@Z>( zqHmc1%EN7@gP3QN7udO=ymPDmXN`KZdS_!5i+e^&mNKv>QoY_Lk_S78WQ37^J<_jA%MD( z#4kTFj`{UTh4kf%-Qd?4T}rfVzpb_u|XV-~O$Exp*>l z9CpQ2{)g@?D^k*}NJW{OxWv>J-|>)~n*^)rZgQ72#MRHRZ5#S{|NBMjC-1i*s7nZ-?y|a!%!N5T*+E?y zfVu*0lIC9vMFDlIRcTXGfV#C0WVf7Q7Mcb?s-fD$R*$PnED(!eeH9X{Z*>YW=1Q62ZM@tB zP%WZ019c_f=P9d!`U08kgDK7aX%|_ml5VXk%B7r{B%4QAxi>6-8W^c+@kj#(2XPlHvOC>^WJtBs1+b4cAYxxYfd-pXEJGj01na zR#afy^^`S0|B$Nl^)eGwF)q{X4gU%Be`3r|i=f;X@_XcO1f^NX?`sY;Yw5E-6pZ-J z()d!3WmdY3H22&j%qSSg+XG}iROWU(52(qWqB~|OO2GG1UKi#@CSh(I!?*s{kEJN- zTAZ}{aVgK+PjT%l56D@{gw=FQc?7>y8L|hgYe|du@MtFVXhuylBkdF+^wPLOy9jTI zL!w_=4#A^V%?jvtn^$Xs?7}m9{8Gtq;Qbr?vQPCgwQr)Mbs@j#fzWDornWW1-48H5 zFDk68TyT<2wdR$}t_33OLFnA9SM{=jGQ(ew_aD?K!gM|E8d;*O=9NV<`9aMwyx?}} zT1nTniZZXXK4h2htOIkp9<`dT>+L9lKC2Z&k}L#bN;%9BMVKKvH)++9SZ0|l{*YN8 z0uiikVMLuA*|f$h^If~-fHht@tV>Ex)9J7MtFBQ=zeW{BuatQ1X;F7N7AKscxyZHQ#l=JFY3*ZGXF^0vNj^hBQQ{#!u`ChIlk5 zu=(h%x)(|+P_^s`RqCC2Oo2hAA@Ii~cm&8x(1vs9%a10&R5hcANDng=ngaEgwXc}Eq z^}Xqj^^k4%RFiG@j8v@j_xtC1`#qE8y}gdO(Xrl3*mI9e_T1yBUl`wk>KBG+`U|7> zi9OmUR5jtl!O7O8@V4LRims-n?Xw3h_Fg>Jdoergk!FWI<(MS<#NPE-k!G>!ccTvZ zC3oob``I0uHzDX<39fB~DH@y+KDbwIKJ_|Hd;64)$N2{&;q%atJ{ZK{);IZC}2uRcqkeZs3$ zc++o}QAqsI-V8Z$OYoPm;~hbuJ`Cuqh*fqhf2FKNBg zF9biyib4qay#F4I!l%0KB zPo?2SzZPIz$hiUx(Z+A3L?lNh8JrMNG)2VPxAnXu9`2icTTeX* zXZ}hTdkSaiVny@c)*B*c%q9ok#=5(Zw*8D-`}B6ZwSy)Kg)6}|FDZPi;oEvg{KTAE zB{(%Cb?RDD(VMALtKR>@xAp7};MWqLef@1%9A8_e^A46ug%<>KZU44jKRI!S?|uI$ z3-uko1(qsm1j~lcvE6xJyl;bV>s@uN!+`n#3_v1e_9^F%zO8pIQd7wM^^c@og_t5l zk*QI;3Mq`q9+FYJLD7K!3*XjrlUx7WdOewTl?uCDzX5P=@NK=P<8!tP>58tAxA}Al zN$bmgW!jq+_ji9=Z%+eJ9r^9JYI3)SzI%eB`4H@2MJen&_Fmk~GX$kAY>>(N&2s(= zdpQ6IyHmR!OB*okH~Vl8XZXTix%Z}%OZIU+9=GWmd*K6z8=y{-W@e(z7x)=@AlDnN zp^K=X8$BAJDgj?qO@BAOi=0yOFe&7Fl9jsK8ft7@3U=>cJGyDp|sBH$>X*C^$ zj@sV`{ixQ0#Kb)tioHUP^*2#YC@a`PX*Z!WJaTpp6Td@b2SGIe={cH#1> zUP@X-?)c++?N+5K!C>QxMTYqvOuSl4rpxsY8uBi>%J~w#*N)MzD|FrgRjIJoFX{j_ zkP}}#oByru{x6krlmJylYXH?Hr#|?(d(;D}mlYPQ53T1eIwXh#5+D&!rnMkQ( zoNq&B-}P%R15_OW)IpQGJ>0z4 z8bHn8%wOLv1=PI^2AlbcbE)^H23U1fqz3R=&dI^*q_vh7zm4MM&t|ZCJ7JK(sz~U2 zqQPnlJqK3pt|psCu$ge~-sXD?Xw!U83A}BEv(l|B$%${i-D6osdzmuKXy>i6{}}cS z)UsboccC+NP&Dge4T}EEtHD^jnxLg7>l3i5&cQD!JE=PHPs@Gr$3mK~B0@+b$_DaO ztHJ6tdF*M(F`WJz^-)Rhqlz+ERb%zAI;k^GXfs%~_RHIp1*|%$ScOBWPbOgYrRUJE1DU zXjhTFoM%$lxd$$4*G(?QC8ye*@{@*9lWSM0aQsg;f>l!w8(4eiW{u2+58-nLtDa%| zo}s<%%+Kk{xZ2<&43N$A1y~(b4m+({14<9wv8R1FPPZ z^k!ao*A!NFpX*&=zS=lZ%^^S-qgwJ^Qu9ONV(W!Dp$8gKz3{Hnh z1E>Bb`li=&wc(&W%;$#CqQR*W_}qYM`Yd&joKo^Usrj;B$yk+iV^vWGRT7>-Rk&o& z90UzmO^2Y1{j;QMf|iD?Pr#|4Z=d}GPWx1vR8$&H{k{<9I7A3xMByl?!D%0P#8q(& z9o9!By^ku&`Y3T(A8EW>XWW&pa*wV3@-}4wr%vomps>70?ph8piGD3Vw$GBPGsVKA z$RD$#;PhZP!Kvt4IQ5Pcy49bg>cqa!7|y*$7yC%g(#47v3s0rmm>rAuD$33g6Yv9x+r#{oVdp(?bS={`tb@56E1n=quB*N*aasUMDT*Wv5AuR_^--y%{ zPH((i+U-}}xxxS>s&uH993dIC+o5{A1tUU`g>$M3*X`V(b6w7v;Br-h(O0LJnG|-l zhl|>ElS|rFo@uwuPijF;u3e?V9zWO!PE9?0)7$P%44R$`$KrDar=6DXq0UL`8O+Y< z^r~Xq`05HxMK}%0DOaqZR51>-Bh$)#`?h-;oazXicA4Dm;hA?{1E=|$*|S>;r>$Th zb5tS%dRH1IsW}t~t(=mBR5!!aJbrfZ!OUX?f!+$KvV3l-(RZ#|49%h>M+E*nhrz9`nO2c z1T8ICpMX?9zc8)rr0T@JQyAK>7Rua+2%(H9^Hr+VAa#j6_NC$&uKbz$sHFE%MOh!! zSUsdJ=!{F74N|TB@-}4wsZQ+8l`uhtx@)<@B>J@!?OUYkOtJ7S^2h8bNWC0RkSe+s zQoSSo#lWOGY1dp)55hwibg|#$EM2T6L}kLsF-&B}Yi6POo}6y$DY4+>mqK&J8-(U&+AXRc-)|Nna>_YXg`0G4-nj|qOmNw^&*R&zUS?9}Z2P>Z-33#m ze{e6;?ugZ{PNF8)u2SI=9B%y|{-z$bpKw{@M&`mU;DSM_XB37dHEHc&W=^LE#j$M_ z#2_Iivk0M0SI=11zIlHNxZWqp*mtdCsg zkj^-{$spC*FK<&8km{sj6?&;q2dO8SM8B3t6Hvq6=omvL)9^;f&K111WE zE5S7f#ZY?GJlqOgx%uL+nbWIe&VtBOrza;Smq?~guX;GW2u|D>bSn|tviiKXg@pVUw1-RYGI+pnyH)IM_JyB}vS>hAlyA6iRQ z(HcnAHD^{3UV3||dpPA~ac8^MgTL;epc8yAy9lZM$^jHiQpGqx0WO8q>yVnxQjeUK zb~{{%VrrvGyKBill2N-W3W;UI1XU-dL45qo)TH%FX6IbOyf{AZ z0*R11qnvWZ3Q85@FuSxIn;>~_gH#=X)FwFybN`RuvIbJUD=7xP`!;T-J)CMY7_@mR z1`rx1syQGCCvjE|Sltp+p}iC@PiMe7;k_3j{@Z|cigazR`Vg!pblqy+*M&X}Se3xv z##PgSwUeCq6392Mk=go7ATnDOWuPVDHFKT$i-qb@%N|m7xL8|Fjo%(s6SOpGeF9kh z{KBZR`Pi`$`#fPdZHKUCe?$mtM2P{Qyaudos*I!5M-^p#RAX5mX}pQT z&`MYN`ETu)w@A$7ixp+NRtm=KSS+lPGiFC`V_jgq_gA^KTUYJYu9zq^p#<05 zuQqueF2Xtwq}+V;m(BH+#TU*Xsq5F0eI!%YSIio&uj;tI2(Is3i*sGhH96N|#I^}% z_PJ^yZyuJ9>r)n8U)PVopz@@uo>6M19#rDV`<(OlSy&l#|KMxn>rXnhrPbUNK7&STFbuy!bi zS23*digB17oRwn}B=2Xysw2QUWDRW(&$?+1u;y>(mYY*xZQi-}_i3g6%Y3eZ^uF&y z)m*WgUs`}-fXEwWRC{_5gS-*tH{{&Z9uIcWb=CDQm) z5I5QMY9>K-8#H}@OT=OYoc!-gzd$-ojM_|JvUL)wPg=qEPHGp<@Y6wiJ;uL4I(ma# z;cSkfo&NG*K^aGBcTg2^()c51`x20`lwRmwTqx5ok!Z6sKzNof!zAwptIP}ghs7pD)O86j;6j zDzFqy!LqjRr#2HE=4S`}CN?&)BvIW}E*xy60Bq#Qw_{AGjxMrs-_Kof#JYVy5BZ}3 zWIyK$5Jdn)NV)k5mlz-_3(JJ0fLKc^;!`)A8S#n*jKvK}J-!n_)X6-<7m42=<@;UE zS$rsSA*)hd)#+I{W;>ZK*S4b!D#TyC>XKEh4swa^uS$idqgcSk$Lj%dh!0o(rf4l105k0r0VyE|fRViNqGWjFjhJ*j z=H>75{r>oUIz*Q2%2tE9&V3|yX z)tkflQZP5#zqZhW0{Lo;)OgOfWS2_1U8*RvOKUPir{Uk{>=Ja*)f+l(ezcq~{f4L- zgP zPpFNnI;l(=*SwWU7=1O4kYzIW$K1kCdCp397gvH;aeMueW+|_|G9{D6i; zkYA`Jmq_ZKb1RFg$GVLO>o(4*DxAd+mHiX0yf@%wCYZ%qt5O~JnkI$c=x{DK)#a$l zSy}MfBTkyQO2>Jn!mVyB@nOxfjO8Yd;j$ev7A4(SR!L>X;u6yV^^zNM#^Y62!t2oMGxUjBP`n`Mrk`Ac%`E6}Lz2H+ebMZ=@kf`hK zTC$I1)b)zOi})$0>hZ&+cN~4#p_B zl?rbj*l0{O^^_CWQv7=FTnIRj=<%AcY#W6>LL@cu$ zOwy`(NFopDyxKJ6L5^ighHI~Hz%uVpdZWMno3&%=if(1?%edbP<{IPPnv)F2MwQE_ z)kTuZuyZ3`)yr(hQmxpN8E!nbZcHVh71Jd4g&n^ylW8jHrm3RLG_A=D$L>py>t_5s zNvEcp=9Le(F?Gl~1^+Yi&2`f17h^jCEOIo^az*do?MBIsY<{PP+l8TSu#LbmvIcY zZI`l?bY-b1Qt44>B^dXn2o7})-~TRG-*ChLs<6t*DjUuOIL&`oCv=s zAkhvjhZmTwTDl)+yH{(0bh;fX8Mgka!4C5seF`15xm^r*_Yw8oHlk+V1l;m#)AW*} zlX&yPNM?x(7PI7goU+S?a~8N2WB1lET0}su{RMlWioi>uF z^EjMwSoNoVcq>-Djm$ASV&QayN5dR7rhW>lF;#T!m}O%M1R^u z>sTy&(nRa%f*Z%w7k*rhk&UTu{iWTmQOV;Myot4F$8z&~riAnT%3?_$5^;X0mK-4& zalS+K?s#X_K~-V3#%r2jVoEGCezr6*DLhIfGmfct`OHsLjR&A!yUocYSLtJ_QsLJq zBm0p$K@P8yDS!B@G8ZM?TvU{qi%U$Q_Qk)-najAd!&e2x-BlVz*ZT{jyW+7463$^4D$*Ak1>M?&2 zVgBNrs=`e=H}Bkpb2CO_9AtIe%S;OM7r3bFU~2VH#7x&CR=Zk66|QTg!fO^y*X#UF zHTCeY*=3CznG0{nWo=BIPzDc^B{gaOoQ5%ioUE2br@;+di-kcErYVq!WtM|Us(_Em zd$j?t)(3g0W0{hnwA6rQ-l6nHzvdTf$J8Tix|t!_S=X6sbV@!?B8+56)-IM$d59#H z7U$ZmP8#=SnI2daUR(b=brc1%geEm!^JST)l5UzR%1qOm%#dvU=Q-0Hv6^n0ujacc zpih%^CT=hp_ZHm|#*fgLs`$PJu*-`-1@Zcws)`$osSo^!pd%YokCTRZjJhfnI4N1I z9e%oGnUw`2&3~Pij}(lXD=d7H}mtrYZryLV0aW9U_xm5jlpbFG*QS zy0TQ1Da*Q%DeFDg<&-sOHCVB(UFG>75 z_Ew!__BfDpt}}tfEZC)?}vQ zZhBrf$LqJ6uHv1%soG#{`EzgkSsYnM=}a71pF@(7RU}+-a5l242IkdgBz|buH+W@a zJ@z{qS+`O)W=B5sO*hy*jH5=@qoEpEMc0n3(gdQrU9>e6;~x=y%heM7R1>XZv2c`$ z*3ktwj;y;~q}!E^tlihz?P`~F*3LwjpFzsaTRteX4+@X*pu~vwO_auD8_9_FGpa`{ ztV!@aHrYAYIg5)ad;B90n7yV6E~lT)owX>O#H4uKV?=wq{B*n4s(Qu(=9Ja0_HdPs z_DY2}q33L5?Ix#`9HRVvW@Ii(y1A$*GZ&Yb0`BfV&6!J=)pT?DB5q|PtDh0$>sr6^ zUqX$ zq4Y*~{ABIO`s5GEHIQL{;eJ0d*O*l|h;THLA=$K8Ue*xdwMyrvtd4(ImIY5M+cpmg zo43~eTJ1oAdd~H>xsid2xiZau*CNm^^#gB8Q*={x6H22@%M%D>yFj0ea%{U<9 zF;CFQ`ZF>cz%DO-Z^Ub4RmBZP)+^pG{bVESUl&b3qt>c@XI8jxT-8Zs$hhY3epEhU zQF`2|VKV73@xiMWMB2uc*vP5`)ryqYM%ETG*;ks;T3ImLF%{OFCny=O%#vaPbEP3!?8bfGXu*xebi+0#=)jR}_KrQF`M0j8U z>2f<%GF<%q20P4mbmE864%3%jd{F(p4XS!SMStO~KQL9dsR=?kjAW+RB$fqC5uU+W zkdMduak}fAn)N`)UIBa@5*HA1h zQ#NKtBDm=T@!K3VqW%u55mj{Uh-$)kVB(^!As(2BL-b2c^v_JRj>W=nO|*_KxN$_S zzE^IMji|rA#_rX$6iMB3G|;blJk}Fo&g7h` z!VNh$?%berCYZN$Eweh{WhR9ev*28As>?o=^Rk}T?s2ljRXWNm#rJUPM$|=eO3C+> zf7!HbMM<|66=k;K5>ueP4t!FD5!!bWT<2$bxgL zA~8IUSNANlD!~knvtDLW7>eMcuA^~Ht31=S2Ut|+QHASTsqp3tHyTk*J-oW--I+DQ z`Y--!BkH^|cs0-3Xx>eO7|*h-mc@<1dBlfBv!RU%YDOd**GZV92;UKRt|)@ZKpy2t zrewJG>INk94y8Bx+uvI|qTXU7Y6fH9`i{BAfaHUlMlu-d6U*agk)+b?T#wZ$cv-0=9T)`N>b>u z&cyhh#5f@0*vDu@J&Upiq|1xn_FW%QRdIt6^)>GlbYvsy$E9IjOtV&~7un?;ch1SEEBC`v5=T(9bItasQQA6?o~Fbj(^+k zRiEVX2;9WlHm&96cfD0e->xi%14xATu3EB(WJLO)FgBj;sXCJ;5u%cuYjUpBISY6z zCnmUDm0*y5#iHO6lfo_%WJaW)^^=xV&fXVZd(moFN4ZKzdZofeZY%y&b%Y$=g;4%0 zJ}O&L(rraWnXS0Q6l`C3RnAt1t)|<`-FXw&ey92wws~M*(z?&v(Pt@{Rgc(b1QJKp zY2`3rSXV2?vCl|aUfLeML0jqX)Q7*tW-zMD3uJ|@pUN{`_xMResKRxvROn_wb^YI|rXKbgaajXK z=E7U?R~uCamBBtD)<*MZG$-L{mes0sE3@o`5F~L-R3H(}EC-XcYQ9Y2q@&+{X4y8AGbrF-Yrj*^{Fb@Kir%h_A3v`}DlOSNmq`#wDhtjndQ~qg zSSHW1$PDj#ech-!hyr=xU26R9M`W5xx@oE?GfitbgRvb~=n zG?#7WXB>@3rY!45 zrmS~;E2pd;tLe&mnqFmPbg_;m!$z7PtP!kSQPYg7<03qlFs?8vf>%PK9a;`c*H+C6 z==O+L8-jGZ9V!|AHrHT>)2f$sbmj7BhuN!dKBNxVkg8YI^cQx{o349wZn@wj8&bPW zqJK&>sdPBk=~ca~V43WUO=j43L|vp(x3rlY!ZAGcBB@tNSFegP^;(lzuMefybu+v! ztLf@pZe25^=Fh$Tn{i0(vmV+@dhM31h=i{!I4t5;R)c^dl_rTgk6jywUGLyBh`=M0 z@H&pg!a;On%#IpW9|5OPRdnsBYQmDj>WYcBhIou84$-HY=-o`Tj>W>mO|*_KxN%h7 z{mpWXY*al|H=Svht8+MrZ(eTK`!Dx#?h28)<#M+a|% zK@C&^ErPXPUqM<7N;MUacP7J;fDFW|NaUhK{~$peNR>ibpoxeQKy_4A)LXYJ?OYp=cb+WYLY_TH0#T>ZOp()5E0;_DkA*7PG4=QvKa zIvnU$I_!}ISbB1wlH%)g->~~K?lZ)>f)JzWdpypt(DCp&-h`K3isyTcr(WrxnOeH0 zmn-_4i;It{O@v_BrtqeVBrbBgxG1VDE{-u#wtI}#h)biTbaA;xx0pzIc@Eprmk#HS zoC!a9X%R&%5dq>+wM`+M=5D0s&Bq7hBtE+_`W$5?qv~B*@w!oIu^s}%yk1aow&IL= zZF@PGvnV;1)B@c7;6Ck&!Po3Q+v&muA(o^d#PC}CM#yJaxaxtxnAfpzO(?$1Ywd#| zQvW^*0S=MB)zQMXi zkMLu1V4$qYy5wczED+|GyKkkX2|UgYFGqc62#o&xj;ht)IvAJ@pJm@fwB|yIrkpOC ziYkky6Q~#$GcX_1Bmx&AanbMjluH$+sELiL za^O!BUl~;+@g{tTXVmdsF-uNomZHkc^751Beb)^&%$l^6&a5rF*{IrKq=j`(;cd)n zkvtX6sM;)$b3m_@k6sCg<kwYfzb(XuNqq? z#MAJ0o>A#LVzQjhWJQ&kY(SUwvGFu)kt6#XaF$OM<*>$PVlxCJtL?WwW#*Z4HH3T`{L8nQ6R zIBF{h`@4;~Jt(SdW%~c*-e}A1d*Gl2T48+g|U4UHu!)Hj} zw<-wZJwUAQJ1WlQIMwPjW`okPr9yyZQTHh+zGnBO-PhzkL!2uJF{-=K;|vSk51->r zcv+|Tu+ZhHr~lV7jZjP1_i{xSxw!b)I!p*AZVJEVza=hmy0|E+EG~{Q>64d_)QHQF zrF3yw&UGj@wt9|WN;HIXPYU2C1C@N7z7B}T)^Ua8@)nWJn-6=9B%ZPL#TzPP>zBSN zUJp2uK|svw;fiw%XUyv^rOSmQ0?b_8r=<8Y?i+GnkNXU9t{}wly4&Ln3+t@-VqQ;p zBdk<>nb*rb(;%#HUdt67a@h99R$~vJeH~Y~fzfD^E^A|Jj{-Qg+sdfls+kE_dRVIb zG6nMfY9$6~0Z#u1#5&DF5J^jB5$LowPu2o>hwC&sqdR^+L#Nd?^rmaK9a|$cW#x_a z`fIFfGwcI269u6*tk!> zL{m-|O+}SO(~2x>vb~|W>Mfz)Qo3l~h_o=aMk=1g04L3SjIE#EO=IgD37nzqYS9ZP+k6EF`C;?be<)NR3Czc2iNIGQanV=#m`iXU zHLVm?ft(OHpNJ85w0}J$y|KvwAG0Gb_G8Wzt9s`<%ir zXb|IOarrpLRv_nqUMU}2f&j4`S_p(&GK+xheovMGw7DG08MUvQA&0eu9uA?l4qW`k zjVjb=)CSfAsjS_f^6~Vd{q}F!xvuUDFFWFAt?H@#s`jnke^#<@^^DCerCrl!+|Y9T z_3)F!Urr)rI@cNDo-~D$YoClxKklim>2-!h(cD!65Ba+#o&9w>+c}=j-jvR@k4G2( z9D%r^ukX3aKjHb6kEIy2Q2w*WKELw!i_6#jF%gDzHTTCf#RFIsAAb9dgb!;sH)?3t z{#`kY8)5xVuRQ_jZHgZx>gHJfJ-K9^T@obWF-u{30duD1N8(5dil8$Y&o;-eaL{>b!JnUg(K;(9sJ4YwATwvs!6gY!{%Q; zdvXf`c{!7JH1)N)qVsFGzWM@b1MPT))UP7Ca#pA<`1Zzwccv#Z8g$w2N4tAvDF$5b zYZE{i-KW54KdS&ABl>pGw@4f*6rnl}>V6^Hlq9-iVGw)hRGnh~pFpeQz=P_+A>z7yLV$aYOvu z$>}3OOrN{*j}riW0?;=FQ0o?kafm(zK%cx-^i3!!| z#Q$RVTlxshF!Q}n4awU$FV)vs^`(|T;?Td}h z;oCqaNRdmm7i1nvJgdq)Gr{acb8g{HN*crU~Ap;!TSq%7xX809KRkn{?lh`wTI+ zu32DV(BlRK{H7Ggo9w9UR|H3~8G-R$*Fp=#`4>D!NlgGICy)l5t*^fxH7t z8Wl)TI*(!M28h>`H!lbNjpj$q_2FPNlOG<)=cCrak1(l*^Fxa8UAjypd)${1z`)Rb z3XERn$4P~58xRogf{x6!JGSfIHQ+~>nFD~-{UGk7EtW*Rm%m7VZ-Pb0- zVwU?97=6OZ{9ARI90<%U#+tn1pv*S`L_;VC{uaO-srNb@8m<)p5%R`F9OXnbD}os- zfH8W?S|XS>7W*br=CAmo_m@=hzg82mnQ*JP92EKpV2+581Ahc~0s#z$afk>7K!m(8 z5vMy56N7Pku=$8)bdoJRgENtfuZ1wok+^$P=M>ZU>c0)6f zOSA1!d#-0(>GWQ@Ve!^+?$_&C^JLwspKxy8cdF>-tuh%4H%2#cOi*dk-kkmMT=ajh zr;7d+*>SE(+01*~Wa-7dsjdDt&90iw1V3APA@!K_3wo(%BsFWZDr(8QVy^Sq71_>5 z`R2)s*rO2^F39($)Ydtr!Vb{0*S7RL1U+T8Ld-)D^8}j!gUX+@ccm9T+`{(pLRmXWPJC$A?V;BR& z7nv-qlsVi&a0GbOf0cZA_S7l+NCnUc0Foya1J-&b^-+^2%>(CG8{n#69+< z$LV}l>xuFQ60t;lvT7JVvK$1KYafc({c6>S6AV(+U|i21P|qJk!WaszmNoTT zMo#^z+VB1~mHKr+6a=*oTje^ea`;U~hh0*PBuML=BrW7<=_78+bGQJiTnnzvg;sH4 zDB{yyUFpZO@jGMG)X;NOnVz+qdx)l(3`O_&d1?e0RRkGTJyld8G+dm!=U0rE;@%{p z6U{rPB0BZO?|`5zfg@xXiJq~eOwclQQJP4!>uK9 z6x!d(GeVj%(g+R#$AH5&{%2BKi=V4fvNif}cw7Co;nbu)Yc~%OO?5OB4wd#)mDb*% zFzH7d2)Vmmqd13mGLhBD{%eeV@xz2UmZZMHP^1R%F~m^)Y&*lprs(^g5Y~9Y9MiHz z?Njse8+#s@)AKaNrutXyN^hA^?g!31FoVVbz zsRymX=ocz3x&@(0$KMM!Oj3{^syJr@FPmP-P0^Jv{u>91-cmY*gjST}?r_|HIH?x5 zeR}}CqN6U*_pG_4Zk5F_~Z0_;|&tiad-EMg6_v zcETfUP=#!=qF7B2D`HH`sjsLUgmxZS!{6Ay!a?>q(JJg(~R=KDva)$2Q!)OJ*r%lmihV{xT zc(XJao&>yX)BxZbzwJMzI%eJ2x)iW^U+Rrr6Q9rldJw=%JSgp7ddv1dQ=L zaD+F%O!Nf(MAOEqhO#C9WP$K2WGL=WgO<6|*Qf8R`h-*SeRVp1Nw4D5X(w0sG-U#x zA0ZpvXBc1|M#0u$JVG5NP$abLUD+Bb);SxahwigA-63TrE|7zSJ@KC3LA>n$;u$@Q z250}51xP4KtXPEDIxaP=X3DoYN(CYIgzJ?8As!H(3GhHf52Z{-^}DFg2K_`>@p2F` zVRTLsBQ==ja2+eqs~Rib?0Tt)xDzgXBAtB_cc1cOoAL$hu#+ z28qe{SfUNl&mLsSLai3+plIuGY0i|if;G7K;lz3wC4V7)- zFOtvsi~#x!&`n9vLwZxEcROi~${lL#*ciPQ3L)VA_C=zL_-y!TXVewa7J1DtMA-TMPcudVNcihVW>lV-*7;(OG z44Zocv;d-OyiHVP z1{VdTvkmF^jOy^(y%&nicxb+hT3LdxKir`j60$C9@UpBu$ zK53g!uISP8^i{}@CdO_@`8iBLAiE(N}=dM zYRlYxGrh9-Ws;WmtyWH9ZK}DXD&1SEzWbdO`Wn%?U#HA&U-B9_GOu)Pb%N?e&9B@8 z6(3-owo3oij1NtSoqkn%Z|$cOy?4guf5!Xy!UW&U_wx^Y=egg{(@tJBefNK=LSGvL zV`OVTZ8mB}Hpw`u*%z@iCHIk2Ha}RZg!LDGTV-kl8jo&!LJC<*n?KYBi!qX1{uU54 znXYeE{(8sq>luq;(t(>mJ{CPf2P8d3OJOzC%+eB+o^1`QSW=Q%w z>&Y!=Qk}oIo*Wqqc4R&IiyS?){q^K!+tPp3e^%O~!`Dl$h1)}=7qD`Btt}((RNCVD ze*VaE&3f6jVZW&3+_(wCHPh4sv!eQYPb7twBD2_WvCgY8N^cMQkOMZ0A7j=$TE!bp zjhtq-XQ`3s_H!QIc0N1{z2E!f4$#|JOYgupx1sl-9i;d4gx>w0C%uoY+yQ!*f3$|b zQg?yo-^DvZ@6bnT=xy7U-d~-tWAuJCq4$QqS?FCEOJ0?} zJNpwA{w_~G0+g77Gt0H5@wp!+6J};xc;-5{;ClQ8b^849IL;{omq=U@Mf*TiJ5y(} zVl(yOc~}2t@w}_YQuD6f7`<(rPg1GNOXr$auF(&(=;Oy$ROoB;{`EBdYbyC(!^$Zg z?deKKvlX-l%NoB1|7`WI!vB2h|HRh+r~2QrL-qgoKe7I^@b~O${Ki-*uD?~*q-jFN zh=vupz4+SoG@rVjjxt|;9LuNFvn1pbSn6-3UzOQitM6wiZ=Zjlyou*q9_RenuS&kJ zIH|(Fy|bND+4jw)-JzQb?tT3A)Qu(bT>Iv1`<7hi^v<1IvYpRvU;od7|EL|of8dVe zf9%8^pnu-wUci0ZX^#cl^5^U-{LR@;7!f7>X%>Gr8-F742S#;nS^KnbWK$3E-n(kv z!r$7awHVI-dIxGNoICIMW9p6=*4U+A^j+G%ra#U?&zyf2J+xzm zorna6x&S}f6-dehA#{6d% z{Cn*%{_}PS{}m_fDE;T|5dNcf7=M0;@ISVEN9q6O4>0hw-1kef*hNva0mY!ZLne zZ(`x*JFNF*JI`gQJd>R*Hov!BlZa-e;1@lUwMow;JuzZZ$(mYy=0i4#m}F8p;q!bZk)x^ccv8u{ zUCUhdv2%p*p~Jw#a_>;|mCVCi^pW&g4w>K|JZK-^;^@X2I zyxN&VpL7oL&b;+jM*QB?<;hkPU)a@hfZg4loBLblIj`MtX#3`Q=O;_yzE*yZULq-G z3MD;fgS7XVR(`qYvZ=u=MGx>5S4Cgao4Ta7=)lkpQ-`_(!9BN=^5IRd9 zF_VOwkpw1W<7i;4RbVOy-eyw~-yCfGdWgx`LrYl}YR|oFY4-T>_S}aXfD_Sj)-U*e zQW~tHv4+01lUGgO+T$zqwPo9HXWfz|*s+8*UNjLDqwRKRgQ^LmYKlpqQMH+NVlN6y zgLRO_cc9KOCu<@mYcl#RToYNBiLB?M=dt7dDfA#|T05PUo+GwPPqOj4s{Kx=qG!)+ z=ayu!+*6F9Ri<-u=kgZv=Jx4q`?IA7YwI`5c(+#-K3=|kK{-Ln2u#1E-)agb!ylHN zS5M{Mw&?K1^UfJr+%q|6anE$!Dy>r!*^t{yvzOiRP30O?{JI(Zou&MFi_2=7@zV9`VVJf$9(VG~YD;iYkVm|E|r*j6@m4Zr#sgY0F(CSwu4@Z5t!oOV- zns+(=`q9+0N?Cfeg34Sq_?nc2UlqPNRrnfhJ|2II0U+y|mvN+OKoG$|i|Mf=XS~+z7|7B z%_DElt{Gc(nC6i;vx4;GW5iEncV)SW1$$OJ)=VzV?Y1=6KD{_sw>Y<#&ps(;B%8X1 zFT1PWR@%2b>D=qxHtGED_iK{(JE7+ny%qrz`fK>iYv@O^FEN8M%f}Eo|KB{{$7=IE zMnlZhPqWDHQOhd)Z1MVcP9$>Rva3ZK_20>)|5jE1_UxK*pGM!#qMT2owVlrf@A>aY zS&hbyQjPBO3e`o&IAtzaHS#nIeODawFQo6nB}U%@qwm3lzN-<5veehmH;er2RYl+b zXZgAHT~?b9^R95jaFo=hNCW?U`T4Eq`}f*>SCDU}{LC`m?sasfecF&8?>q4uDx)oZ zUfoCXgC^T6_a^3prp|Cgr3O@;-n_7eTf1hnNS>GXdD1@33F?C=nQQBZK$E0!o9$uRdzE50uT>1D#57JE5rq9)$i#sdzQF}7E>>Nq@12Y@y zGZNQlEa?w#n|Jx)*)`X&-b5E+8Pq$5>WH5=tI7C9Mx*(GI7XAwOyOt%A9&M%woKtY7MOpxfeTU=cR{Ox_4*u)Rl?dEg#6gWA6fiS zb*R|JBQ@C@Ds!g&zTUi0XF7l1)@#^VjJUV0cfF9cW!BuYgw0(zmt<0RtI1?E=3O-wPq53bV9 z$fx8ZwSoIDB4&w-goDuB=6pWS*>_hy1q zErp)i;kX*O`h~p)Gr=l+rPq`Zf2s=cDV9x7&s6$luO+W8roQ+-8l3EF*Gx*W&if7n za3=V?W!1Ab@oUP7wf}YAg_ihaORQ&YVm1(OE$UIG?v6#3YIj*KJ!^CQ%re9^|C}Y# zQ#JoAP&F6iN^YK2H9xru_os>K4fOO(s=1QamelE_)zVv7sv(#OKEbo98b5klg+(if>J9YtOsa;G*B15-)=9Q$z>iy2 zJ!=!MC?~F}#z~e~&)UR?lenly`~mn?(3W1uWe@g?-gm0j>S7DL*id%?7c-lP{x^Zi*;Z^z4sOY;~m*P4RXRk`0$C{E(xhc;!qkRu2?QZKr9~ zg(J*LdMXw~2YkUy5$mibetrb?_w;RmViP>0iNX|_+^{H|yZBI;$yrR`gK$k^-ee33 z-7LlpXxOFc@e@fr7Eu31acYrmwuyp1C%W1*&=$Rnxgfhk!!>;j4TC}x*6*o8W$nXV zR|?6+cd5JO8^_%c_;Qhv*uuH-8fOD4HD?0~a5@0s8d?>59XX@zge$fx%ujl$2H4{+AA8&Zv3ywwH{)6|zuO(lE>AWLxX$HE&Zy8; zD_=7>_JdOpvCmXQ?9_v6MC_82O~m@WBm)>(;>*&VOhP)&LY%a%_t8XVI*MTU8lcWK$i1k;TgE(Um>rgtlA%GpL`;-*lO851- zZ@K#nF*np$U}2fZ85YiW$5$m{X+?74j3;e#&_JuZh{+X|E~yf+Izl*Cm5YL+{ogAQ zld~*himetg$D1(hMP0Lq*fjacVj{K+S6paJ^vm1ha~i_AFA!tn^B4Rah1XC8B%n$3 z@_u4u=gr661o$i-5$mGF*+tAK9e*+!M3uK4aL1UGeiHqcoTTvcWT+8cee><5o*EgnF8&zgJn#lF6{i5jZ> z{J4^Z^{0z}VW{IHcoA@F3g)9nD3FN;U}p-_0^ulQ4_BKJ!qsLx{pvoymrw6wzei+N z?b&Pau)5VJmQM7kYTizy2SpQ3%UmBPFEa&+Ye`cqg=DSo{SpPaNyGOoqZOzB3lL8r6010#d)5<=J zke>B=x@||fawQe;Aqo&njjff}gjkUDS@>jj2u`6f#;y0}#{j3i1(A`Xw;^*=&m#wB z!cjb#{3f3BzIG*TtAm;p_WFY|!HvLGUo4$U9>cLAqUnQSLet^=m%JW!t}99_@?)_& z{;^|EDWYrNAuI42`TT*-CB>LTc{Zhn>q_sb^35q7Dxa_rH>Y%9X-Y5p_xTcWa5Xr4 z?OFXgy%Q%!T~=BrIo8gZ4e7NT8bHvqW>}OCic;=I0<3CK$4FgTI@-lBST3$(Kta4Y zS(bhX!}e_OX^ZH*ok6t2oZ)eRTtVU4g4|@W7_!WvC4?1gluK^?1!8pQIypxA1g#ivX7^&FF+=-qTP#rehuNlAfz^aX&LBG|;FNEa0KYXXW z3>J_CX=xVlvYKA6UrB@bLvlLc( z3btDMc*~C^)3>U0*m*N?4aya^UkZ=S36C$}0H{Cb*u6p7naVHlItIQdx0@t{r|tFwj%Fcm;4Zx>yihyrk6Woq&x?oP_B`h~ws@ zh@V>#R}(>x0d`5heQG=U?T_iduiq9x7U!8Z8z?jZOuxxNe^;#Qw?37H8Bbs- zUB5LdQ8@pr`%Awapfz`X=r`p;zbQI8=+Icd^?(5B<(UmmmpiX#tlzrK845%nUjP76uoY)6w)$$e0AgL z45etHri8Qr7e4@^?^;@pa29Fm?>()q1y7+fw<_4xr#U$xkrd2VDX{l=6z5; zy4fN=^`Po4F25fjXP#^zH)={aqEju=5{uPSYU*T)Y*HF8(wt0m?V``5$Oel~iZmZZ zj`1A_rEYQgT>$8Ip4mWdiWH9ML@Tn{V)b;*m}rmS=Pv3QKnsbEyqaS6lL*5uvso!ZGh_ z-z9zN)SM+dBSLLWDy69{Pl?*PhoDubmpYPEsI3VFEtZb*RH&`n71U7)LT!zEs+X1) zm)?bdR*w;vJP7v^rF9GGxB!D^ttuKtY26sBEjt_omGr~y>7VlxU6u2B7sqCp2^^-n%1H#JL!3Ng%0amq3i3b+qUt2Q@{cP#YdcPwx zU9PV9EgrF7q!hFA*EZ(w?pI?Hs4_6Eyy=WbQk>F{htIk~X#=MGXGBQK=?dC~zB61p zuXJurwhqoDwQQ@D#s+2i&xnwwt|Z&q;-^`PE`B0jkG6U0pz0b11IB~o{n>q;1L?I| zh(tZ-`z<~Ot4H8RpXV?@|9h5|dZxW&hA!V_An5QkDuZ!kNIq6_d^>%#!S3`=zr>_G`dG0?+CDHR4#WRPr=M=dk2&?LS6P zJfy7@i(gkdfHrAUXih^~D=wXUR?~kUzR#LG3@mptz$sH{V|wj+SkQ5>%VmMIikxNJTe>!Tmhx=7Hd(DFNH`aln0 zxHC+l1H%*@&l@2_nPJO6OHav}CmYDkP$N>JK`aay0!d_Nzs7V;S&F=YtY35<29pZp z{t_YNQ=@#)HF~_!6z?!2Cf^7{O_D6h8PE5O!+wOsblo2zZdWEfRrUp0$8*VzYE?5mow z?3qk#^=fR-u|Lep#Jn?#w0l`*SHBhZ=f=PA`QX=SOm_7FmSfajZ}lqT&YAf6reeP; zd+A$WU!lJdd$g&9{))YHI=6fFCRxV+aV9?20A}J_o8arfka^mSn01~Wn;hbWx6=Qr z+T~vje`mqB@SlwD{sZIs{v-6w!oRZze*WS|=_q}4@t(S+p|crJNbSVbT5`cK!dx4x!Q|Lx-cf6%Wd zSK*(jACOh#v|;=Db(a3SPZd7sP4vTa%cJji+Hv_mpoTxszdYaH^!Ll_-&P(Mm&;qb zxsPa?yifK-r9HLjeC-Viv+;yb>*ZJywMS9@mzo?qcG|myOX;R>;M<)Wy`h_##lx)c+Y(onO^_V(osh zynKKGv76R|-Zd=Awhxqc*z0(oLpwr!@eXDe3YaHbTM6 zO{u$>{ip8Ql)4kxe&?pt9l*{z_y97d!bv+u+L2AE>j*#ox=pET6*kBme}unZES`7O z@3OD(sXp$zv&Ze%IPa?CuLU+m$KT3}(n(%5(@8b@Xi)h1Rn_l%`^NQiEA?1JVHrkl zCZ@5BVhwCHMLab*>l~w|gH)%Vnl8;PRxKyk7)p(`-HRHqRSP%{jDRB~jce3yHKNAX zZc43J4c8~1en@NF-IThduJ`y$Hl==`iuY0J|Ic-KL$f}fA=VgGUEK{1#Y(%*k#ysm= z0UR$K?>i99fl^y1$hkQwB=_cR`$6Z!sD<&Ret^sXbWf?eygTrx`F%U(wvW&w9!9xd z2fS`6cT$7S_X%_S>jk37_XG?akvo4acF7=XAeXXl$X}QTs<1#_H?i`<3;0elA6M~xZ0u{;*$!S@L@H^ zGkQO|9;-16=u#p+KncX#3Fs^fM=Cb1OMhd=7M?IUsjyLa-T)r*YU4mJdBpaTo@ckKBa^}Pu)`|@jtK|)R2#O6}NgL09 zuL(<>P$~GFmGSgFfZ~a-7T@RyP!b=wIJXi0K%&$ET&W{dZ21)_1Zxxl>{mU03XoWS zol0?Pg>4O@(f5))cK5Knu)BtI8ALM{ha*B0)<3fch2}bmcY|wg$FXAkwmjAu@x^vH z;~rrdSq^gFm;m-4fS9HPNjORyPjB)pS@K5iu^n-41VM% zovYtV8vx|$pLu~9tttqkRX{9AJr$=cbz@m-RXW!E1o)chJ|)H1;l6J7rQNsEKtYHR zlQxetEEuigs}iRcMTUg|PrATCHx29(C0F#VuT+_PbrHgOoeIAVmCkvc7SIGYsHI}7 zBr0^giBOHaXBMGa=~+yuUKm^1n@u`+nvJ@-5$vL_jq+i%3edoc2-GPA+dct|Rz1EU ziDwG-Dq3n*x$+YDvTs@4xE=u;q?5SOs=~u?!faRT&);1#mLIglZiby$V+WCvxHWbx zW){MFoFa05Eg+vgJlQy);9@3cbiuo7#cT%0zVYsAbFZoEG==7zk?6b;xtOk_oTg#a zh?SKWh<*nd-1&{OXT6^O!R}a;k{QH?^?|W7FuPp8uaIvCVDbPAO@ ziIFLnAF#ICiKKFEYHOHNTp^1GC!){t>_4F~S@a)yP5f$@wYJFvp# z_*OMwW43GQxYDyFCL;MRVG8Rf#da)j<-_t8z{05rwGbBU6_K+Dl6B*YF8ktk2rV5A z-VS95>qE!8Tt2@LF=l{;umbLQR|@c@6cBZ87jIqhMCSQ13)(DaULg9IvEY3;d)Dje zEckUT3xZ$FsCu(7g!PX!Sk+tP!-5eIlV~CI3`Hzm%mBb_M-j) zQNRw1Oz^3-5w5)ATVpEnm2VXLR-}q(S8@kI9M! zQF%#s~zn!8N3jIGBUF40s*~tl-O- z5JM8ngDDA+nI35{edMWb^1__ubp!lTO9fTGqY{WNG9I_YMGMC1O%_${_%cE_t;fbG zdLvh4XM@+rSp+eD09VeQR5z|=w-+N2y_^fr=wWdl!EEp~%cG~|vHJ^|Khaih@K67= z^u~o@A;YXfAS?((SA&zFCQC#&mIHr>lH?pv^~(g1u7*o}R0G`t&tfsm zBP~JLVjxglwE0I71n+GnVfFyT>W~OFSMtmRui-iGs=NT7r$l!2p^F^7s5dq?DKacL zpaC;aJw?tJ8_r&Xncx7@^sLvjZdHA86ve@fQa4JCSO63<<5n;?3u2_N6E_?;n2N-CZ)@QP8 z7=Ox(Khq5h4_qkkOZKmMd3~^3r6s1Ef9>-x<>Lx{V`=wNd+CeCi$Pm@N;>gDMs{K_ zX5d+C%y38Pt~kZ7Erp)7DXuJCX=Ed(@lBJ3DRCzF6VHQ?0>S9R14;9j-dIlV=I;f8 zO~HLU4xa`3)3WSFKQq0bWwL?L@t&`_2ZB?HU`-ytGr zPbs`a=zBbu1BCv6u&~brKewE{1~b7~r0KP1CiodKz4p{lwGQ8^7xx;}yXFurSiDTl z7&FOaMAnnTmQPRR(>`|%akk$*&|de_tF2ZNA|)>f26}qp(rvw#OqqX5s4@#?f-8BJ zUT2w25ZBt*3%?pK6aIwQ-at>!R~qZJ98P-iof7f-;{Mo_rb8N($(Hj&U{mlpo^L<` z1f$n}H&#cy3FD`db!6R_A&AP>7w6d<5)GqX(c2JPFnX~IfTCQG!GI@nFJW>8 zv>dcFw*%VZrR;mi1V2_XEXW1fB~BVPmh;R6ml4uyPe)z)ey<@_QI`^@mJw9T97j!y zM_P||@h!K^|1m6jD&LQQB2h3C{E%nqAY-oT%<#o(#_s_| zw_qk1;90}k4ri?cSbGiDN}1q7C4;qs%+`#xdS-&}64Gl=M=jP0sZ(fo2=*FzUd`f5 z;B2qe(OF;os=Zm+xYFunJ79Qj#uADbW-FUFW*{c5q{-Q{GCa3m+f%>ExTOme7v04OpY?+$nD(tQ%J(E$Z=h!;7$p(C zTYyP{$c~o$cQPu(eR5cl>_rs5w^}1~8RaYj7`_oAP{usfaJjHsWUSp_D;*eN;VWwV zprX^Hmuk}?5xs$)lH1P$SI_gKA~0-xQ}HYlcQMAYl{=iDLzma-5Pn8Pd}7262tb<= zIrn_AHe_WzEUdJUx8K1?t#?0ser|X^qloPKK?8*$0Zt>R#4opqu-`y106@3xjDZal zS*Dz4Vu27!Sa(?_;JUL#nYgPR5IyrlZS^^ZNOdqlE@>x%%g}iuh&EOPS#@-!m^7%XqP-kUp~~v z;#NvGD&>I6CMAh?M;zo5;CnIZi`Vh~X?l0<`estm#>ojLZzV6U2RtPXhXAGj1T(?G zJc~a}1VS0hds*~_W41d~4;A|skPniZ4HTLHr!c3P<*su{-yX!*kcBk z-fbrv2wQi!v#kfV$?lsV%qA5R9lVEekCs(tC%dS_j(Uw|)nqp!Gyn-|0Qxc2DE^-v zugkQIt+V+l1BD1+b&-R*D3-b$nAGKA{8krB?{%3VY~4G&EY{AaMKRGQUy#&A znVs;WF84w>G=HamO=;=FUwq8T#|pJYxtm9}G-4ZJ;QlyhpmtJfu5P*E}rwQ3I*sPhLlqc&S|QQZdmhcXwV&m{j5F zUQm2i?;9F4YBfpBOx_nZJV4xAn#T%3(0`qy&E$5JB^VBV5IUQ&HVswzXoR)E)yByiT8G`#JNuUT+-qE zwOg#3LPs?f6CKh}uBLK>WZGJZ#SyRZp%zftho;S;@v308JRrZyx0O$9;h0?6nkml=754g>4cfKy%pi{t>C zVlkNInc2Icc#MxzmeyOljhJ=+;cWQgpN$R50vi+)y>YiP8>(x?Vk;y=69+n~I`1H@ zsw0TNTXpo@k?I^yUaHe#ps>JzZEHE@4U#qax#g@g(!COUFguV8U8!W@fkgg%R>_kQzseepHyF|8Ux`cyX`Ld=;B z`xTPSX9PH%1rRNIvkf7Q6k|O?4&-P+NmzFlNIK7uhZ$g@8lNun_DyDsQbXlIZ(i^W zH7y=Wb)fYnNspfOPuqbF7DgW-^ zQ%6QBJ1vW2ZrK8u!j^+JQY<>AB~jRaBG_8R(tE2+61MK6-YPpkX04)Zw2ES);a$8{ zdIM#4ii`h&!cOY;yvUp&FJz7zD2xG4Ie=bzw2I}OUBL_xfSDTcKZv$mPV5Lt)~#@2 zkDfAOl?!4O6YUWbo6uI%8aq{3yC_im)@qC~no}v_m4-0CT#ew8WloOTux80G69@|i zILZniS?PXBsar>ot+XXt-(^`gL?7a#i^+5tcu>&hSOlVD2TeYQse=(I2RM3^WLU`c zOKVKz%00vApTF`$mT+VAv(s5qX6!JpZU8K5^FUQ)nw85dW6osnRK7_OynFzny<3co z!GsJsAfrV|at;!XwtAR>=OqCHhAZE1pwI`f!B7sGUa>Qq{;ia0$-U__Bw5$xO@Hj8 z*7V9n(<>%w+{xt>sk#wn)wJZ4R>{2b=Hzp-LilPdz^jtLXfO#7qpc;qW^UgfuCG&d zxm50)CFN%HpkUll2t?=p!1&h#J=TnJz`sUip4p5Rn2npU+Y<7=^+jt&_o^AU{dSEA zNDRz=A)TG4b@=x%K*Fm5NZ|8X_05?!i%Pzfo(J;c9``{DAG<^~Su=E)=eD<9{I~bj zUEi6`{sHr`X0t7-oR5l(O|mk^YY-+?ZWjaeV^VLp4UI9wwpaEY&t+e9>t8G7wNV~t z?Yb?cn-0ufx)BFTDt|CX+Q-82X3Oy}Yxr zF5aF2Os0E#JjmiRgi4j?pPRmg&!4_4#{U`ged>Yj)3;J0%dg5F?(AnP{96wH zh7$fQH`A;k@h^JvdwPrB%!l6#E|QB+z~X5qXX{D@8grQPY>FPeUxh!6ZIj=3!MK(B z@#==&)Q`oo9~jff2uF2oots6$*-g=Wn%@^#Zr~j7Z2JwAJB(}$N8e_>CX>1g1Hw$| zvfk8XAS_)j$?#u|d^CCWs_S>fGnM)^&b~jwPrWbBg3negYx#9T6~2~#g1t4{GOjoI z1=^LtDirkyJI+J?RE*~DWg?!nbKH?I$ zW`gr{pX6I+j*gjYA6S~3quV)fjz#Ajf=1OP%2IlE|E+=+0+)s zQ^mnAm`vG+8%2L?~kERAh3;qH8T$J89 z2<(>)uURd2-nn(_Yy%YY0Ub8!O*XAz=KFIPp@xM_KVmY3(uP`NT+aJ-@et@OH(#y% zF7Qk>{r|~?A2uFwUU$+Tn(e@D354Gq!UbqsqR$-lv;<|^_Ts3N8h+2B500wBFMWXM zarZ+~h98(dE&+l02t$LE&1SB!p<>8|+qFioF~c589jh&Gmi~SJ6P5Zjnhh=ex>U#g zgtB?03S3Ia2M?~&o{IF|S-Q8vE4gGZndSp{jlJYB>y!Fb_50Jx<*eO2q~+E8W)2u) zqcu;ng;XGSz62JW+LE)FY`YD%8se#1*ohEfBW~A#>(%7f(JRf)pOFNK8JD_Izle?* zs~%O5M9#<$+c(1>>%IMVYgDKcb7*u?A_s=;Bw)5~JE0^Qs4rX64^Z zC;z`#W5S+UtT893klW756;mry^A2pmaXW8;Yv6_L>y%vi7{grQ(}#I=pSHUjWwpVcNj*J_Svj4EuL;3QJh)EYNQ?XZcFL zQ9G*E@k)Zi9)-H)YquvKrs~dXxuS&!xbSSN=lbdGaK?>DZ(zn%HX`jXr1gg&OZ0>R z-ZQ!sl5>D~$%l9WFs>nuhhVE=$t(hvFY{z+z=d#yWi&aX>t2q~R&;4in_l^<#E3MO zcy(Go=hpgd^~K%L)1ngSz}Ji-LxCS{tyKp-SZ%}lbMUx=R%bDij3w*r2a1pza?e>wFoa0M$!9A3i=z=A`7vGy5$pS#k z_tuItjWg!^6sy|sy-msE6K8XwlHzL+U|rIEb?!67xq=YG$!TTBhDN|G6=S}~f)**F z%=bx4UFd@q&Ud+@SO5EVG=j5-kM>T$w1Ls+hfLng{I||!df3XSZ$jRrFfCPnLV-C4 z*tf`sIt0WD!b02>4RxUi+H=H{4FLvRLC6_>_ocN8Vn%bH^|C7SUv+2G5d*^II>MZ+ z{wpMxH-L_q*eE4%DS@UV`f$jokrZ-9pOo=%Flf=HBjiM6dJKfh2jk60NB;J0(h+A7 zh@}fp+^`lmPw9wn0Hq@Yx787bjCC|eZ3QJZa+{(yL;V#)t!E|(4Yi(*c&3i{2ohMO zBhC{0X4=gy15>WP|8A32m5Y`HB(hp@rg0{+>YtR`lpI+VKvvz?;Jz03)w!?PfScbT ztICe73LvY*#j+anGExMqkcPsHs1WcTYU#2nS9Hp&t8_#+A=z-1!awu4bcCE`9iiB2 z9pQKr9r59&S#(5~XE7b|)T>ky4et4Z38QZA?)RFG81qVu17aO9tPsAi31r=b3$>fX zGhY~{#6(9l|4w|*D6O9@8}ogDkk~ndGv@m;rQ^gI0XGW3r=~ddX}$qCvP^N0<}KZiVFX2G9}vZIBY!n?TbM(|pHqOK?9kHg%1n8!g&&gq(;> zq>q*WH_gB`PltpA!2}$HK?n9z$zpDY^PpcbTjz2w4RrvRZKt z;Y?&z>5x?cWYv8G?(1@2zx!6YFJqt}#B}%N9=A*YSp~$h8uPM45twCLvO?OyGHU6v zDp&MAwiM9Od>+w32$x+b{D?=TBjhaW2*pc{Ui9pS0+g9>C*k(C(q3yj+L z%~(fR2&&YQ`G-&JeLPtY;3C%%az;nbo1r6|prpCq^P<^wM3->6jxZ|e%=_D7vPI^M4d;N?QzccQpCFt5FhL@{>OEMoY9;1 zn4u$Tn|t3E&ZZ+K$QkPhb7I7$kX+sXI^yQ5qy!!!P%1zsmdSZytUZQfN=y&^fu)+X zRHiEAB^?Hw6Ab`jMVv&t`*{q1LAj(MHLO;p9hd(5ILrpZqhQx#w5gnYHT zAMwY;(x{tz-nglXI{A=mK&&dJo*;zDs*&v`j%Z&3Egn^o+Owi6F8h`EKB6q6cHVr< z_X$E`XM{86d!N!_FeAWz689-7zCrhmyKlgKhB#Lkv%o^X#~Bvvx$wn&pEO$C^sdbJ z9?vudE1d6gMH!avXP-_OTXUgvH|#f*qtT0^SXB%tAavWcuzu~YO;vcRe7B0qIf#!5 zXKy)yv8q^Uqy)<>nV(nA@}_)<58(T*D&&lI+iixbsBP})-Dgu3ZNlZ#33K|X(vZ}u z2vo(KE2S!Qnsr%Kv{)W}>xwPdHbr;;M5)r2%2b7%NKUhXP}xasK2*hDH>y9sk-%Pi zvgZ>HV*tfds^U?gRE6NSs=|zN7u*HG)}h-a#b5d^VH zRXnzD;lBI~|!_sPnJ zlp_Yrc8kv6?{R$sh%6u$*_fBI$w5_!GE%!COkt8*y2#2E-N6Nz!C``zGCK@VpU-wXjDsP5wz!+CmRO*z*U8u(LFoO zP!(%iqQpG{Q^3YV)2b7J195Dpj+Kvlft$5H}6#aC7p{g%g6g*oZ`Q~oEb3SK2OvSi1|KPaSr2*`MzA~ zIE+YuwR86=DZXy^4Y;q%eTFz!5Mo%k(&G#ZCtcu+`99W^Cl~I2n@&=PURX(jiE(5RBEN(sDz zz_O~Svpl9M%t_}z*itoFDpM75A~{o!3xvu}OPP<bRSizGGk#LypkUXU- zz6+G95ZqQ(7_u;!bktT5M>op{>ZOMIPlj60OmKmr*3%KsR2Bb;AXcf0Z;Oj4XW?Ui zouLiJ0J-{$H=4*Qi0h>QiO5!*!#ER>RXRjg0Fiayp!>SrH{iZ5_w^Yl2(d)gnulO^mrCi74=pU4et4Zv{5&A{tc!oTIEBo0kNuBpb)060@=Lz(7s7Ls^SJpOjO0| zH;C`kj~S9W62*LPtT>x-#(W=BI`&Zz0^cL|DJi~5_cge0!hMFAi!m&)Fs?w}tOYoB z2oUo<7PJvXl=(hvsSDk(!uc*&v|GICZrkAnW{O}KB`KtYJ<{NwT=vI2-KAQst}mm`W`d#tA(w$z1{)Y3&( zuIPhq8RnlpmJ^Z0);!zdfqQpd1%vmqKFIQUZFaR;%yDQEN&Y15l zO2>_90<5IFPf78m-Ph&5Huo7~4idD$LaWCa7OXn(#e9ziZGqy;d~fzl9k9arE?0C9 zSw#G{s>0Zc4Tm>;tAWvI#a*$gXj4EKPHW*PtiOYL!z53YZ&FcQ!C)l@4FaPF^zdy9Eo6dORwLZ^uMpcP6`MtW9Nr+Bp&J z4)u5@O$iNBL9=1Zr5BJAi(igTF~j_H6L187BXC%D%ek%ww}9r3Ham{>5qSu0Oy zQ!JgJ3t(1>lNGDP$DXvFuSy>7zbT<-?dBe$VDK8$r+? zt)?WpY(Xj(d5uNra+N{j?sYBIXvesWSvLu_zM2CESRW3<4lB^B8sDdx zUGG}JI^n`6v@;p2LgmLE%h1F}dj>uDqO01}_(8^Ey!(Y5Q_W^V3)v7oy~u}?bf{ZM zt;3};@U(*MiqTegj=}2|cOnGwp~RBCP6RgJtQa3M7ji7uEzFN}GLLd53%raiid=R8p5xc*mSyqsmmE0)~G_=+7YD-u?EB4-;xSUgcl z!xSaN2F$^fLTqP3SZDRf8;DQo$}e}^%K+;ZAbja?{&klxuZzBc>3Xz8joi*&uEsjOmiB~Y&192&^#vgY`;o>dIweNlfhulN)}_!*w75~2h-V(HsAoT z6-bxvXaP!H_ocI43-C8rG(xo*aP+K>lx2NL6f*J}p$+LUZ=4Db9++NE%?sv>Ps8QL zWlQXVx%JbQXZ?hMg2%0I^&|p}5a#2ZM?PtrP_F0=f3l+GhB;#bm;sn?L$n)oArT)m z?lu#c4PU`Cx&q~$GiRB*ik*$SlNO#x#3}U3;+F|3?OVg-+EneND&1RZt4UJZO#6sq z+i#}y;b6G7I)QeDBvf4Y7O40DrcPD*uV#E`GObsm_cq*+=soVUDUVgQM}+NrtZmam z(scZ3;JL2`pEiu>SEWZ!PVjYJ!-Qe%T6-Z&T2X!@B2om%~@OOtBx{#$}K zy>{~y(XNqkXg3S}CQRMKd}5N3b@OOyv-CT|&*W(89&K)++;K#9TrXAM=9)A%GO_JN ziE^nei&9g5O+zMpD{Iso;lfj|LWcnLDkPY^3hh_gk6i|-sYR(RNv4A>lb)WX^egPd z@2+eN`S4F`UUG8(tCt*9VNU8WHJq!z;0os0=GuU}euXJ{r zf{vZi%rSEZ)ss2E!#cEY_rT7@eIp(hxo_BghB#O7zFipdIK$%GOk!TsVSEpX^Sa;C z74+rBc`a9T5TY-lw|QN$eTi_UeFT<9Bh2D#56DK8Wu)JHqw~FN93Yv5!A<@r^weKfP<;!h)`DPT%sj$vD%`m=H zNSH<#$R7t74fOP0msj|xB{IJIP7f4uo6^%6Uw9JI6`W+Lmh)7qocR~o#+9Ux?FO$n zfrzI%=B_|>Ou?jMzD`F6`fis+h9JpWZ&~&9jHS`qZ5%&GSgO__HmmxWR*67NtBg+D zwUVp<%ViQPGr{NMK4YcT2|Iw8aG2SIGZw268%+HWa2Cqkr=*C*g!}5;H|{<|j2WPO zd{;9N8WwD0@HyU4%mT%*;xX|tUt!2IO(RV%TyjO@ywcKAz6LQxNH*N8@SD)3Idf*i zxPK~^Y9}4p#?VT;U;W4|eL39Iq&>CP)Ix9;38>M*SW#N9cg5KOC# zY~S&MMQajIcb;FWbmujfito#mmM^7%nD1Q`XAjPp@3tKSI~65o)j=Q^Dk;7;_pNka ztNRQwrd1YLXz@71f}sJvnC}u#P&6yP%=aeGGzlx5?{Y<2xtO(6J9~VF0g7s1T^Yj0g)YqB^M9#36Zlw)YX1i?62w4I(70hPphO=^ zT%JZi31T!ZXi)DnDni_&;xjH_e2NBfbS7gz;xZBeHEs}4Fe(ET{G)u+z+RZUfOHDs=!tF;7YuUN$Qxw_x` z>m%jLEHQHP)9IhsbY;1gVy?3B2NuMqzWQ^tH&)P9Zhj3^ZZ6v3<|=fc2}p}xZAEqU zf{ku|IYw0H=FK;nn@=JKZ5i=bOv=r>oGEh~RtkM5B$`{X7Mvg$&8+Hg_tOIBBZrz6w*gypWzpbFQ!LgCGv&b_{yn|j!K@3N+i z%!NN+7~OnE5%lAdnlwL9V;~)Dx^MUAc23BA5^4 zB($ckoM2eFw!zK4LTPhfdwrvu+o7TK<`S1wj)2gcb4`15i%=$O8hUerRMrS?K6`}R z{8g4~kgJN(n-iip=bHNJd1#N9Ho3~p&xOj(MH}2)h3L)eidL&>;{o!%T0&8>yh7;GmP&CT|wvr*b4BugsAMrr33oojN= zw$L+xw8*Lit2Z~|+wOs5xM*&AHY|2V>GUeb#dA5UQ#_@cn?hlGcDHA}`6MyCl&SdJ zzackQFmrRI*1NgOP1}9jb?dnKgcmV4|Eq1{QEzVb@#8|1)``>2%_me>dUHtHn=6Li zT!f9%o<5$Y^f~LzJ<}j0DtovV93>d_-l=@_<|6dw&M7Ngk8?xLbvrj; zB)+|3Czz7cq|lp_7WFR6BB4XMGrhNqW3CHTxZV{CV__pVH}%k)yR0rFb7A*yroFi$ z=*?}vbo1jh7NR$|T$MJfrW4+E5=Uz4Zh)=QLL{!YnnOubh{|yxuh&Et>3en})6-}(Du3oSa z3$De|>agHGQd4{*g>QEw2yOyWZhp{bWRru60!1OwCbgYD28#rvO?D|C-MUD8Ujz$v zuFunko$GPV1hdLzkyYD2&)`oSt6Y$1lX^B8t4LCvFs|C+WR$0Ln^Y*=%8Ae!7K{+X z%a@8@nGqH!m|=lZ>#@M)rdV+GHS1u(uop2b_?_+20Smlbq1|fN`oYf{7PN@thd3l+ z!Rjh8>~^tgSBzu9HcbZ$4*Yoy3qCt3z0a!%oiHRSd#M&&AsF>Op?sVhA_8POr>t<( z&Mi7O<(vuT#8r!|PI{V2;eAlJsP`qSYcj6%Oz%Z6G=wT#?+S%?U%wF+n0m_bfXHOh zM9zhluSYDHQbc0k4(dyq_tk)jC0NT<8P%;okc3py;`J||)eM1}>On}r4Xstg#+ReAj@GY1--sF}o7D3JYEX6&8p# zV1a}jXadusuePGPdcj64_%W7NhXwcinPEYb*VYKr_;BUsT|X(CT+q&SHkm@AO@>-< zm7v>B#df&U+bcT*PZ2ECxf$o;M*C^!OmMj>!RU3$bD9)3R>Qg6M9MVZn{I4F@dn za{e|+(mMJn!-5gjjyFXi5etSC!xn$5cEvchLZ|6q!Twj)u;8RqrT1>-WoHv4>b<`f z93&X^-lBZ0SBn6d&M7NghjV?-wL52m%T)mZxt&ndbWAU$&LjIhTs0U0SofYecfUs7Mvy6%9E z(4FGv3d$6*V3HthAu?BxjEDu}7GE%ujSC)pxUk?N%R9?eLd(Vnt-(EldY((Ua%1hF2>U8u;5Qplb;?fuvMk~4C-?84kybddlWTi zuXse8)JrKbI7BeoWSjD_ZB-<`AA*HC*Xe2f&UH9vg3HxDi>$VLnn~eZWw>aQQWgSR zM3U-=an&X#T|A}Rq(b4EtLw0!lNes6RQ%$!ut32K3zS-q1ui$mg75rf9W3bZB8COo zt|Kq!Z$BihZ#%`XATZsE%2pr|3l;V)3GM!UaxN+xZoGUtKg8BS`MaCCM5|hHu8X}|KXI<~Z%9iPU$P2Zj z3fH?r;WbxngaxJ^hKDX|)W}>|`AWosq9PK1Nh4|ARii3K0+y>Xs9UjUX?HC2i_qai zHc>%L)nYJD%Vr6*XP;;5hMa=d7#AoQZn(4o3-ZnVlgl$K*!DTbI7n}kAeJ7!b#~op zlD?m!2s-B0>qaz8;ID2S@O4w^y5jLS50h-`bqcJzUZ=C@HdwD)7GT(Vo&AK!t=GL4 zBxS(B)dmbu8!$jqkXUEE?$uUESB45)8`ta3#Q5sq;Yw*Pw_f+F3fB3rT(8qeFAe|* zg>64Inrt5X*e#G2)!c{g2NoV*J^S9RPUd^AB;=ywybtHU9Z!S-1V+d zn7Vuer`}+_?y+Bpy?1`S?r@EL?y~i|c%)KbSs?8D-Mo)CGsqa-u3oUw&G-3G&doPV1H7eS^~|r=9r@ofw_&B+P1oz1cuF@ng~F3At8?>J z#!{u^7OvrOpO>2}n7O%9>)kxRfYb54b=-W#iuQ;~*HW9Zr1 z;O6<}e$2&v&A#aZP)3HCAoCZk!K&)vwpNo3CB3y9w=ahB8;V`HfJy zxoCr%uU)UZ!HVkY1smP`$w|)5|5F;EH@AA`*X!OsX1%$ul&nJ1-kiK?Z%)tZ1Zjq;Sb5kfh|B^a4Um%8~lokJ+Ps_~}%-me5^=_VDzbxb;hM+SJSL8&dO2aoC8)X+$^gQ9gFx zh_L&{Ic0?#aBkGOe&>dbR3(_H%sx*uDZcRMa+A0e*R6DRfq3pNC(}Hoo0~%64d1PE z^C@C@twZsz{)F6I!OYE-TJPpAH=S~O{rt&9@!*UQF{}Ip4NOtz*YdD7<5I=UFz%m z9dEv_pZ<5d`L-Dz-F2-{X#LIxUY?(Co5W)p=i4sS@aL|XZ;S8m+I-t7U(367eVd-R z1)o0l@0o9NudADHbB}DCZ@b_?tgCLm&0KPw{qg6aD|Xazm1CX@m1Bygj=AA{Th)r{ z>IECS?o%+9I`{m(9)JD$wjaM+W_5R-Z=2#N-MADA)0{hxPxyS>Br)u$Q~a3~IkJLT z*R9k#M{byaIqB=``0|7oF<(A5-8h@yAOG}GbLW3xzU>d(F?Hvc9Vflto#)%eQHASW zq0r4)-m3hXmtHoQZ@ciMbc8O*%J#=!`vE!lU9~^{Oz*k_^GM;mbMrpl(A-n!XI-}* z<8REjxmVZCw?#K^m~Xq{iE{JWe4BEuw?F(#=hwaPb9oZazW`o8=V$?GMS#70ldRsr7E2 zpMaS@Zyh%u_9Euy*|fTsOXu5;dY8HRKQQ06%S_G9k9~*r+WL`tH=S=ALKUueg~H)m zHga=Q&zkwRD?gHs&^4Ev?T`P{3FhY0isV%{J^%k=fBYBR&4&;Z7QWKp=K1FSR<+U1 zH=1wrU2=8vZOpqesBYXJzw$V_x#rhc7twQ=o3EX3)91oj*5)cV*H^ve=AsR5zIMLt z)mBtjFWBhjKfs9U-2AW7!20uTJHFj|bD#IQTh6x)@RV+D3We*wR_EsZ#IOvm_^T4R zxq_LSE4ALu^Aj)^e{~%<@AD$&=GnBmmrLi{Mn=rd|AG0oeb1@6`H9C^Z+(AfF%}qUP=G$&LG40Le0@-}qeKi)k%jVm@=x!ePSs%8Y-Qec==Kk528{K@P z`8K_kuGKSy`g|Mnu5$BPO&-+d+jinD%KG`XCz_kDoo_oB?Xks;tK3{)yO*1bHn_QF zMehyokAZHm&aE()qRzz0KVGADD0JnXb9{)SIn0 z*No5IbiS<}Rk+?23MW)Ia&uG9n)$ZY52n4jY%7~@+fQSmyKKJgtk|1tzHR$2G`M-b zxqp9Fqnm4!6cy_?QaJ*`+iqN6>29ug-vrN(H|x!nk<~L1rq%b_Pj3Dy%QeXLBOKYt z+irw-+l_0wNPd5`$F~5u%FXWwm79w;xVZ}Pwp(4%J*=p%Ua-;4@4$%a+`LN~pf^VX zvx!D{+YPSV{G>NoZ?4&7-gblNCkDY5Qe&{4Adxz6LhC46J(D2bU3X4d;k33zT9b3O zauxT#^X|IRc-zg0?}lghGMvjz^lXTjQ95s38CTUTI)z$zN;fx!!tP(KbMq!*IO|^< z8FzWV++4xT&6Qg3<}Np#XZ`aR)^YPy$_uzDxh6lf zieWE|Rl8F3^zk&EY4sO>vF7IAdZYE`o@o#gl|5VwjuMP|?^HfEi;D2Jn{&zv*W=uf zbKTAj82KN+u^`JrM2B)`dT%#L)fH6XdRHi%`sIz>+|)yF?y|a!%!P*+)81SW^yX@e zq`6mPA$oJmRcW(oI^k_MahM)tlkAPR-K;7FD_gb%8fR6KeDnL+Xiaas5fdJCdV`zi zoBQ5pW^TUiPrSK@bhWZ}vfg$A)9Qckd0=N8SDR1QNilUNfZ1s?*Z1i=!F)i3gJf`g z@L_Y9>%HECesG>ZVoN8!+k4ws?`_f9-?lx+PyCw%+RVWo2Vo$6=kvJ<`wMT>)0KK> z`}9d;ebQcshuCRx&5y-}iJIb^nCZRA9bV2VEqc?)?*wtKO!pDm3G0&`73 zC(TD4t5)7T&%=*HIf=%n>AhJAGf!X>;dV^ch|gLNLB8q@s$h85=kpDESY2(NLT#4I zHpTKnmF8O#M(i*{eni2z#w&`SD=3q8F>vEPW#lAi5gOw0`wB!k`$xa5xYjqvt7^@0 z)*EuoagFNc$6_$c!?;ddrwDFj#E+y&nlDm2a=?uueJ8B7(H0hSiPru}Ya`!CS?DI) zwu{qd(l)YE@_4Rc|Krt63VJiy4zt)yemYv#QhS}AYbifW!dq&PtXY(!CP|Z z;^?2Mx8o3E!tAFT+A&|zFMlq!l&!WSfc3|YwzW~mz&0VZ#|&*wpiwBE2FEISiS^gz6{Ta$o!chnUKs%FQ>tn!cScn9ucUKQ^PO-swnZRf2KUkld!M6(UYL)j66a9nr-Bndxz*oa0sI zAk{bwmGD~D|R9*4aNh&f3OJd?bn_5H7v zv$(tS$`X-rjMQQGt8|IPvm5!mVwzsMF#P*xYh$EOyvoL=GGxZ45Z9uCP7JnFH0sox zfw8HHPL|C46UQe96~?BXw%}7q&SjAU31W-9ra0%D_y(k+fD`7^)yNd zd%oOsy>{h7=ga9Z%flAs5WC_1wj8b^Nn7kx}wjhy%yojmv?k(*>T zWjnPKC0jubr?DCr#zlC&67n^)!f;5zaPLp%eO8r7+qCJ^IP9?~Ll$kF=&*z&$q0mB z`&>=GoGPby{ObZ5u2^^v+}47QGi(|&<^W@&-+T#0j1_d1ubmB*uZgC<_K4+2;A>Xq z04pC$o@FI<^>WMe`J=eHaHu+ud$}Gh`*MB1Rng9pEH}UY6*8F)Mfo@7qn&gU6N7!K zzVyj)leT+3=`jg@A{SpvcCJMvJ)1IVa?S+vWpB$8Pvr7XUDqG+l}JxmO^|rL+UvQO z#FgxAb2pqxo;TcZq#2GcHEKgkDfy`44}OQ7RKd(imC9qw1?8lP%T3#KzfY~>r{iA4 z{B-YhYrmH(EL!bauY9Gs>by9%+(4qM&M1cdRfMl4d-`mej;oGwM>n8y^X~?w_o8PS zheT!TRe>0sCK&Z@OOi|sC_9KJ!fT?=4LdjC+>mo7n6D*UWIT~8F)0{6kuEopWg@U& z*)qNNd7&bzaJ?%O-uSW&95y|a)U}ihn#j5EqIbrhGee5tYsq$x=3_N1EXVUhD?N&2 zBEarg=n?__Ae&@wWsku;Et@6Ko}Hep9rATlh5srTo^x{Ee;b)Or_oxv2}k?v!<0c*u*G3lFB-_Pt#E8hvX!&PQDb zRXetuL81%yD+cSdYFCWoMbR`J7oOvesSEG_GJ{U#{TF^{UWUc91X}_~^}ZyIFHfTi z*SkXD%olIu!loW3pX|AlRU>oZqi>Hc+@yOX$&B5j`KubMlq;UAvZ%q~H33ukksFBNluG0_o^LN$Dtn5$g)NT^&`w84cX-~cNhOTNrX>gwehUHD84 zq^=jfQcqX%bH}pd$BGCoH(&n}nUdZzKzRd@=)yy_;0VF!!X3)TQH&x?XE~>=aNW)g zI@jf#2`*P97^~>?G?T*1_;AsMr5Z%EizL;ean&{_{XC_cl0xCA7uC6NA2FP&t@!ib zEEiTVb77^{yRgem+w`=P)^Xt;FJdnIiF8Z8mn*bb?OHb9>0{uV@UDuKibr70JhP?2d&&5l|5lUD#qUPs?TrwC8|l>w|1@7gjKA{cwW| zdxg^GKCjZ~!rhX?d;1VhE8*&AUL+Qe3m>zG-0K-6Y%M&UE4{Fo1B{7|_&>iS8wb)7 zaDbJMCD*(o+c1#62?MEf;r5T13%4VNUf2ku6S#8orWeVSf-nEAK%yx%ks5<-1fwa< zC?5x#NYDl!vtLyfwuF056I`xJFfMHCr2NVf$D|J=nvzsQA=`wVR8=!_`|^#g61XXK z%9KuhL7fYC5EI{#z4eW9VSh(9{)km-y$ieCv`v5Uk#$_S-HVtDXX^r9&X-M-)(;Pu z3y=FlOhBRwk17W16e(4VWAAvHjtd|1(V7dNvDu(gd4WzyRQ6CUI6^S$y+iqcP7$Ef zIc0_Gc5cwQF6a71ief=!A=Umti5IUFn(L+q_U4s&Kt46!v-kMlNjXDf>}+ z@u)q10`D>$UARm4Nc_~Ur1?=A!;~wXc4L1hAw4Y2zE&?(b+5=>=$wf%K9pxWkDJE}U=fTRxPz@U{^>1 zul`5ouP)gQSm?ct`77q4{*ULcuEWIYK;XX8Pj3F|VK2Z2|Ml}%-+i80)|&aNeO@n* z{(I-Ib{}8IooB6uH=e)R`a<(%o2I&R^H;}kyL3c-_2Kg675!kmyU$-8`P>b>I6r@N z_|Z78j<2Yjzj~{NE_coR)wkVkN6}b#PC4(k_48Lf|BcVysrjq_+(q4PZT^aGSIj?Y z{%ZL7Igk6a9&P>kt23V`ld);0|3Buh9`>BNZg&E=it|_Rd5xU(PRw5&{lRtobiB?_ zH<-VA5Kcx{HLu@vcW(abyWBB#)yFG^K@FaEV|vC7XHr*Un$PqOZ<{hs}j;{^}dA zkPF|5`KvRE>$vbxoeOU;e>HHJx$r+Qf3;(&=E84!mO-cMy|bq5?pm;~ruP;7faLpK z%3ey^M40+_uEn`7=bD`BFjAFZM$W7L8`q>T^-p9RIp2x-t6x5SBNw)LqBZkZm%l2y zaDM*k_Zq9*W%F0xaTlKE`NG8~G`O(UtCapw`r7*&U3k)el}|y|oxckAlndA9ujqyU ziSt*##6ap?_(AV87amoe8|JU}>60n-E9L)>`KwPot3+ zPn^Hn_Zc}C9?;XVx5^A5KY#V|r^%FpW(Jrqg+xat#Q;c-{l1my3XzdD{frUU71Pc`UtA)022de@{>42}?t zE^IST|JwPhR~@{O3)?)=n)$2ezAU8pGUW^H+23!Zv?(=(`$R*y@$_!jFGX z=E9BhR}X!0!~B(YH|OTBTGpNyaq;tO^H)vjc@YX||J7XYE%xQd{6`giDZ)OgD0$ih z#e@L+O)d#r@5heQ-W7csvHp9Cx3Tkfte~qFscwa8kxDdOq*~{^h(A~%UA;)-c@g(I zGzSg`N^iOIA`a`pHvg69MQES0Po3J1D;1>E zgjD1A6d!k-`FpqaHnGJ3!UnBH&%XfK_Q-Y4i@4zsbM|%>x^w5Vew5p#&VKt-hJ${a)YgwC2_F{CN?>xJ=`D5g*pr=B_y} z;`{E``VAi5Fp~G{`tu@=dM8eOEUJ^H=j>budzEzK?<%?v)}0&Sp4fP9#K-Q7KgONm z>wQmg4qc5Ebd_Ung~~BSQ^(x!yom2uQC+=Y<2xyDI5_8?r|R+JR9D0I6hD8E%xc9a zV^(W3FfBE+Y9|=YYF7E!_b2Q6XMIm`hNpDnQYeg$T1)vRu4!UQc2<7)uNTOXbs~P| z$V#nq{&^Ai!x4G-30IjWtzzG8Gg^P^eAe%9$JCu4b)fWa zlUsMw^I0cRh3j3R(DI%QoO*-vB0ju1_TAkwmh8NUFKgs;mz@{!1NZU3oIv=%+wwl% z(A*<$&-!k;xz2g8-R>Ko(;D4;ft-F$YjpEjB6tKNbi2E6xtgr z=qfk=BvfuL+Ti9($jzV6`Uxwls~2o^^Y>vyb-%K!(!l!XMO@G=a~oF8@22Ooj`Ngm zZVH8uzpKv8i^P)m`xPnnI`Mvqy?%}2e6x%u1Ey_#MwJuhPa z1I*1e-K1U{65YH-F@NiOiq~+*)Xks%MC-MEc4G;W_S&^z6Y|ntTlxOU-%}hx6|Q%M z!lrj_}-WAH(&91>&^8W{cid_#UY;3%}t^3 zm619(A0(!f9HICxK3i_CVCLpZt#@-ham~#?{^oVue87vCn~$gaIlWwZUPRv$%*`iU zWs{J!H&@Kx`kvx#+%a|YqaJ6yxeFPDL^mI<1xE=+H@A%!|K#r}_M-~dyF%fBw{PU; zrk*wDMO<`P+M7%3*?AGac(S>9mo>%z`g@8$bT`*TQaJzU1~<<)_nB|Xxw+1DFh8a@ zCrAYsjMSaeYA8^DZbWqRS!Jx98?hZ`LT^r__2$t0`K-@Fdt(J%<>t?Y%FRU^+*~5^ z=S3W5MRoOpjc$G}MpWnKH%SBZ=2pM_c@ZmJ)|)HkZhBrs4^Qdlrcn6a+v?oBn;71- zRQz|IAvaerb91HEyZMx!GV9I1^2T-CyvvK2o1c;H`Sfz>c@Zyvthu>uvbuBUv$p+b z&CN&lx87Xydw0|GB05op>s_Jng12tu=BA!C=S5uo%(OR`*0b{>Zhw-w`Ls2~|N4B^ z1$T2TR)))l8r(eJ+~0mfotu}NhnVnuln#LLBOiE+v|nwJB(-xR{CF5YPl7F=AI2Q$ zwaI0@HZ*@O#J*^0te~sh`QcExvuJ}mOGN%$h=*BGUA&%_IRAHu$ zMEKGkg#Dk7l36t=YRzE~u_NguG4>t{dQYFJQj_2xJuD|a=j$*eC(1I;b3d$lohVuxe@33oHN1Yssy9S9#1nV z{Njg;dY5G(qD$$S-aEZe6RL2%D-_=Mrj6X$)Wf2>%jz-0{?DgJch)i`Zqj7;XnvH& zJn0!Kl@3LgosQ?uBiOjCbUxGR*;c95rS8rOh8J;4{D0DLwI5_ule{4ov6GPq?|GuXGHr zC2w9@-l^Psd*2Bcb-e7`ydJ#7bo5GJnKzcpyY-ciSt%c|^HWO4-M)O~IDh|>{Kxzw z^7sDxtyhHdiz{#EuKeobYQOrR_Nxz?_8;pkt{h{9 zbmjLRS6f`Ur1sMLS&zu|9M`-;JqJgTl5go7!yF#kl6T=`&@6)MI3euQ3Fazj^SPVYQJTwYC7E!$tKo+ z_j*I5BkZITy}!xtH?HC4C)@8gi_lB7c)C(SjvhE$RzYam4P5m~>jpfdotVM0ie3s0 z^T@Fm-pOt6w)Z8il}-cyPKo8av5*MeW`!a1$Cz%4kpD#GSS=S(m!U07sw*3(RipR^H`yh4d- zCAyNQJbORHm8?)mUbg}4>mY=~(2VWZ4IMq`N*jh3`;uhTgf>5wUkbiHSeaA|-@6v! z3+y6u_Llo5nG7Fe_XI1LfBoIxQvV5BVW0m9*}{X4%HzB$kv8V8uK?taMK#M!+djdh z(BFZ#-}?8Ozjp}FQ-24`^%EP*2gmXG(&k&rn{Nrq@@0v;)ypfiC61-jE(D zwkvc0e0htjoPQUnoL@9`{)aC=Jl6ie-j%dis}t{lz&+?H*>qvZIIu_2 zeFqw!ddbguW=@mgD(AWeD(4bSoom14{p4I$io%kS7QWgF>*__9zmq@Y;@Nmmor}Fo z58?-GA+JxB@mB`Q&4q``K-v{WUjm7JLsu=>Lr_3Nw;ON@x`}RO=VQ?#jmKJadYYD6 zNi)Iassz)=+A?fB%Yt(Sh;+H}Xpm${g_3H&=Ux<7s%m}8%|xNl@li7qUmu+(hLdO% z|B@%jB^BgQJ9S*;f>L?Vv`0={Zi?g2IAR^Iob@6BQaiKH%h`DreM#%B9p;#}R6JME zy8^L$)~0?sAWJA!jGHUWr0I0epXZJ;7JjNXx9%yukE#eS@Ij*9Cu+edf>H1N%J;XA zwHQ|x205P71edE4j0y)l&7{!T!9~5xKq=Ix^i1zPUPucbu6KpP6mPGt>z;mmTRCbs z-I^cX(j9-B4eB0A(r))?{*VSY<;sBFxYDgijtjFprl(hQ!EKVgl|2UYv~0N}FZ@`F ztK3`LNDr@lQQlh{ntR|Swclnp>gQs5RK#33^zn7S&DQ*WV)@hl>iXH=J}UO-{mb{F z(_H0OSqmfgx!%K{&Lba83%z=?wNSSSLGKE1lTj2o3N4nKU;6-|l>Ibf^E#FpQEI3b z93d#Hpm*qy>9PY;gg1ztQ&zZc=LVhAj~a5CU=ClfNI&b414PB~1~J6tqF`PhR%~)i z5j1P_>|NB>@kyajeAq9APtUYA?IeaHn-%}mE*Y1C-lj_8;b!~nr)0bXVpAjQ`VVko zXW+?{PJ*9Hn6&;?zE(NR3i%a_h^?!XI#iE zBx-b_7F;42HCj|Ywxx@3tb%jO3ODK8ymJ%InP84pu*mATr7JK&#X|Z?F9?RP=ACSw$W2Vje zVlw5@Fsd}|$)qh`q+K&Q6H^URt|&y+J0T8qw%sP&XMgEF9<`amU8kI>{rTohZD0w2SgGYOL21h`_r^f?zg60Fi|L60X?&iN{lem0#|N+!tQeKX{GqsPu4_mo|qV1 zBuJzH(?@B^g0kb#B4vO3H15AEC$pY5?rA2tT%EDVIJ!$r3hzh}>2lLU=th(+sj6nc z=CG4_D(_CNP&mB9ocuY~`m@B8l5Z$}=YNxhD(J1Rq(<2EL+LV0y|o`dyoS4&75ZHZ zLso~@Z|z}#Fd)wN14i)dQw-xlky6FDxk5i&3ZBD<*T8e}KGJTx3+aGFm3GyFJp`k6 zHHb%_-OA376%l@{IM?J{r*rn(ogXU}S(RY)m)IJSB-0Uey0pqK{s3_Ww14=TW1E_OXcd|Xu@(j9PR!tjd&q}KfD>bPoHTT8qT7$&YI|dtcR2L9e5dvN}p!R!43= zq7o+`X3%Q)FKNe3$2oi9mKA2_Ry?N( zE?3(vvKnm1PhwJ7vnDb+|D+dMRC-cX&G7mK%UvC$^6vZ!g{(+^YY zE9kASq&3j$lG72&DbKElR!{Q-<&xIdv>7QX5;zam)2Gw)(uHA< z=hUF}xK?R*#50XTqISn?!AXKqyM4-6P9{V+P}n(Tg&TCP=-hyFCb(RcVD#1RX(nZ^ zFbo&9>n7*twq@Gw_CkHA$+fFcn0UZO&}!-_C$6QW-3;VS5ctE3FJBs_zy@XNj&9CcYvhokd%H)z!@ zxRc)UHE8wng#|??RVQ{-UHIgE1+DudLTDq(S=?l+L2CzbyyD0;yuj+Hpx04JSsit= ztd88gO(hPdsqORXm!b{8}&TB9$G!E&}nsO-FasNhjwwyjzc1}wkU=@@*<^*aSRdDbfEQXNY%hk zKl%4+k#-k-H>0*qM(sAdNgTBsH?FPPUbOUxJ7qrv7nGr9t;Gj^j3!}|_d1Fc?_v@zfM zw2h$EA3x3aZ1UxxHIH8Vk?hd=LaO4>st}LS2hof$&7fe|?x94p1CMZR)OwkQHakAm z{BIGB8nh}v&K~9T34sM-_^h{7e(FPHxC*-ADk+043D00FoOoysTIVgN!_kqu8no&b z+-bn-#HiKF7rGRkRGn0m8V=n>XfuZhp^a#Rq|hwBhqEPR&uF}n&{KLaOd z6ceq^Mk=a7_>WdS?58QEhZUt)A%Q-HYq2m%%$QyM9_vEuZ|_Od?$={Y zJ7J;#Qw4bDCfzJMLa+s{-2AY6$oUsmNtr7wLa=B}2!vX2m7qImWm5S#tVINOcTQR1 zW}I7cZrV8$T&_wm8e)8M(*3&^VQM=T|87wADdtkr;ln zDE?0mRO>6~t*@jt(CU&?FT0_q9$G!EP_#OVOf0~fXHCYLlRJ=5;0Z6vIYpeEO@Lg6|bZv6=XQx7|EyrtTV%!U2H1%pr{HlcPR$QCh7vTE-0p4u>@WQ@btwr9h)F{14=q%MpvM<-EMSYc*H?#pf%r^ z?FVlJtvS~ZD^F>FR=2&>CN3q}q4gZ9A`O-+3Sk6OkO-{`hSMHEGzVf6u8msXp`pze zsVphOXw;xp0r*MfbZ8wSrj)!&DnF!MhO3|(u97m?lJE?+!sDr29UKi>PKTo%7*A{1 zWch8Iu8mr~d|_PCN!3YZ1}=maq0Lc<5ZZ_q3!fsP2Ce^^kjopyMK9$qJUN>70WP0hPr1t$Rzr+Jdt-mcw-Z>#lnHakJ(kwdH|fD zRdg-1dPNGOs!vjNVxRE~f8J3K`y@)~VMU9D6UoMR#O*HK#Ecbm^?R%ftsmQtroHq4 zYuYXog~Ao!nFn=G_SlK|mgaKvcmKK>=kHP!=W0Tt^Y_()0|cY8Rb8XI<;Br-hasC!hGb#K|gp1BU>j~N(j8cX?_loWMt#(p*cYcM!4fm>p)(&F$ z&7$~E?V;9J&|6Ynti$saM;{r;IODVuo({$p>ylWSL@@PVB+f>u*cIdLr|!zPmRzwtSPR*xw3 z+dW!Wb~Nqvh-0`1*+gA{)-J`ct6Zd1F%Gj!)3FJHH=?9NW^@HwN9;xyhD)BX23qrt zx#dY4L90K0+UOPX7Ewp+?3QPX5PAaNFnA~0udnu*#u%gAnZ^$-g*J5FTm@&KhJ=TTR18?8l z6psCOYub4eg~Ao!nP+uRK42-rS1KUo<~RLO&Ofdw_RvD2^H0@+GX&j9D}%~cPNqe0 zcjuH9Zp67s=Z2j#!R4w1WZ_2%8Y}*!LTLL6%*G(>&RYIoS8OvRrLQSq+g~ERK*a%wZbraSsy#fnH=EAY~ zoI$Hc6sGMStrbS=RAo{e!#&6*>Vm6{D~7GxB7AMo(e*DeDBrosOcl<>P`2H%5DEIh|Ow5+QR5*N#C&XYE z`n0*J+}F`}!fclru-f?wutD1wzhF(Yj`*{E%u%=)_V#^@gkoyc)1EI?*|oDil$iE zz1%JTK@c0?*q@Z>D|meAkQZ34{-p$+IM#b&v9N~;($&Q*pU6Cv zGVWa}`-UjahxMFYMylPGrP|^-O$tK^IF~DJ`IaL_Kc02Pwq8_Qctm$mg~B_$*<%+? z3|%ya8V=prx@dyl?2ZcF?1@WEE&K_O$+f(}NNoAigS9P!PT5QNYb8nR@*fNi7gZyF z?IXhBykZz>T2=kCs*E(@EFCyJnR}&hxc%>Kr0GH?AyK>2wcsqlsAz2_LeVoKj5M87 zR=82;rkopbZo)`af;H0gG?T(e6D}$mYx4a{nW6{0gdo!utx#yg*i`eiOZui8hMC@! z!$#)9>+!qgH)%Mi2!@f8nlzUfUZWw;Wk+qn_1hhN1CQ^8+9c~@A=DGBY_@^BTag$G ztQb6%KiI;h;O7Wu71Oum))AfoWmYvPSGU!jLVFq$P;%aB({-& zPwV>r1>44u?OL!%rWRD2H?!B4JNXM#L1vg-FExIlMRuv6+oh7gFoPriLSiYk%TGQ! zXP4IJMZ5ehOWXO4VGU(pLD}W2(S8e+nJZjHbv4>8R}=~t4W;N*Q9Aa$pyy$;vN+y+ zvZvb`-o-<(EeVcoNnBZfqPi^na1~x%0~KD0rg-(N{*LQTR zA~7*IK`=U2kMgmsBZ4b9r>t-T&W$?P@0qOn|b{|I7U!Z(*E ztq=dLfmpk0#3BzQf>?`USmd#)R*ds~Kq-j*n0vVwm7AaZYw3DXYrr5OBr15N7HmRL z)b*6|aS)OSV>9QJ6>iqK;M|OJCYVJYi>yw2nn?jy;i9giaoIv~rt1kWq@kVbTA|Q) z!$vq}>S2+`o;#T~G8aCB!y1mwD1t>CNllu+#aI?4d9KR1A~}56?r0ly&_)q%6BWcf zM?JyHmMwwqc0`ew4CGg64IEQ2oV0HPj(LUBhAuvGEsmX}rnL2K=_3?6%{6)?KW-+; zMo@(=#WIu^Ve7JUou1Xx>`*MAV}QtT#RVh5R~f^M2h%1qPloZ;9{ z9+5N6Da+|2t4HWq&D;jpc$$3rv?o*6aIBBY%oQHYRln!U6@|j>ugq{v>EKwKkwjJJ zA&q08bPf+uEIf$FF}oHEr&EbBy9&ongA=~&V^gK)9(JPND(+hf zg`3@29LL6qDJ36N{JGo7SQK<)QBr0sE-`KJGxp6HOVM(=vD|*2h+|%&Fl04qJ@RJ5 zu>o;xv4lh%>r)I{EJfI2>FNDxI)ky+&Kiy#vrW2g_e>p-sOzp;u!msObhGBxG-%+lLm*s`~|#;D)TNj4rERxI-@ zBD@#x+>mGWH2-X2vSotEaP3ufI5vU;<2yJHy5qT+roV%upNC4yOw(?e)p!?b%*sOg z3vt+Tx@o?g^_vD9%a^@upNL~cDl=C&g6keXcM`bvsba1TSNTRCqkj4Qv zH}eq1!b^!9vn#s~sRX+ZxeCYr6Dk}NU5jHTjBWBR+HS<#Dt3ph;X@|+c_v!dV&RP@ zT2~j`h+{twIUH+KbMw1d^4ObiVr@T3x%mM%%C}au;>O7|kmy@2WQxIdg6;#AS>@xb z8n=|-DePW{i@Gj)19d1p({;NS>O&Q-YlXthl^fxh zsfW$0F00GPT(}PoYdF@e2u`fC)#v8NFy==|o~zQPTa}%}{Ru1v5V?s8(r`^y75~~{ z*%C0_RY~$43co>XjK=~oVaGiiaLg-|HuP%8S{&QmT!WX}?JxX65`a_5XTsS?hGWxW z<1UB9H$w2nlV|m`!lXDR{~+N3T(jSmJt(l093(Zq;7>A51-*+^Qf8WV%M8b!PL1nu ztlM(BX?~nNKMgpRFMBV_+IVc9%FGo`<@zcfvRqLp9Q~3E$CQqVj~hu;bso|wt+Fv^{6plbu7>nar z2Qe(XD*oZCG8P5hSd^3*i%U$+`vH6AjHTUjy0IKhN9~hiR)<2c8ns?>o#EJ`IDQgB zB96@~hRHFJQpGra#HHz_3&U~TEB#%0!_TGb3FQS0AyL=UwV+l3qpodTk;yS-XL3x0 zbs6VIottuQ#5ohpGOR_$qr7~f6lf(f>U!RuEE!a`OxFWms0~%Pt`!O^KiLS!Orgw= zxvXI$bKzMytj~`rg84DKNAv3#^P?osRq0nG^J8|$LXQaZV~~hr78CaZFhAzmx;c8gMM%&|ME+i(@;hGUrPd`U{VGpt(ki?mcRwg+noX9|P4iMFxdX{SURF~>#_py3#4zmm<)}t zDjs=@l;y7~YCN)H`J=L|8kw>Ve_&2o!6n=B#^>m$)V)~Md=Ep?e62u6wv@JuB@V$jPD_lY+d_9C~X#TwvtDsw*KK3fa?iS3oZ3Ux!O)@@{K=z6ED@I7!1R+tz6am33Cm2m?r{Ew@0 zR`>zw*Y`MZ^A5Y6?JfYp+QlW679-7{0AtB%96v*eWLmi?yoM!PSshP;m1nPgc9LGR z!g=W?xrl36{H>IwpesvBnX>%;X>anq`{$H3YdKw6dot6D6?R$Gk|kDh`jY0C-e6X! zTVsVyB4sE1o=_HkPe7s-T1?3|6976&=lxXAwg~yXTcLvCF}pWdVZNe!QPH~90<5rP zzMfg(raer{Gm_5Nu8m|?I3<sR!Ny+?UtDpzU6*7#ZFsJSFFB9sF9deCeaP4nsJQ8&K!{yUO{Ao73Rg?7xA(} zW!%6D7k-+v!tJDA<~Z%HPMDH6uIj|MPbAGxyxOdAP-)DDLd*)6SdT@(6i;GSr~v#Z z=`|~yBr<*f@i$V|sfw_5UL|G9vT9_?>fIx!tO=LgF3A%(0L@ZVWfI@-kTm~TBO3PY zE3#A>5Mf%$INu<_Zy&g5g?*mTZP_e=YWIlqoe{UV6?PF5zOY+^6^>Zp)Ll;9JzC+m z?=R`5)}Sm|htjW~+r)t_c0S^78rI)u;=wI->+eqr&u#kl=DyMmeVmV|sS2&XE0C_g zTW>aZrCJa-w7+ohebj<>>d1WE3j7SK&$E5W<|*iOUztz;lzOMaQ}xakFBYZSrxYMz zVcTg4^FH3TPu+uSIQ>^@Dg{f2P4ZN}*Q$4-@%X?`+}GNPEWHyf$@?y=!YVs6w!QHY zv{Sk@pmbs12^X?EU~|!y*pteLtwA0(+Goc#B*wCtnpjO9pKm+DbdU@nqHP|Vzx~%c z8rJvcYa0XZPc4=|viw?mia`Fj!Rp$Z^%TCrN>8CA9(jVGq$1oFAOU{v`}ui zei9z>${Y3LD}AOV&uP!}aZW^C-aog5X$$kr&RH%${4ulQpL2ZV@(*p_LE#8)@lGC% z`6NQ&djFs_maN?eevXN4K#1$~Tf=9*Ycok?W+sU%D|_67l|8PuvIn)5J!tw1>}ktS z^Kp-MBG~CteYP1PF7R&+hndjlnNVF>(=(yEvZlv%`KkU<;`+*iMj0p1Lxte9R$95CcEwlof8#xhCfpoLezc zm0-;w8A(hE69RB9*LEe$D3M7GD_@=V655UCKL!*Ezd#e&53hM*=qeR|)-Po<3cBSh zNj78WU%157_b1zO#;@I8n3NgH@WbN|FE3G;vKqB+{;_~GnGnZsCP+Ggq!=cUM3_MG z^zk&k#QxXaFmW5ymYa{h%qEaL(;y^jceoZDB^VXmseDWzi7LHdnMl;lD06MX$3f!F0pykvDUfk-2a=PV2Kr zieUE07WJBcuOSq(N0zJ7rdu(4WOwv^02mtFCRtb9831;uEa>IgR>ff~kUya^%^nd9 z7w_DF@cCB$+Ag_qM*LlIh`9x$NBaxadz)L>0wiM%yKQZ(A(pX*2xATBCM}OGhhsE~ z43oS*MR*#mS%0bk{48nPzRrCN-lm8wC7+XKx2Ml2ThL8aNtvly9Wo^PLu<}dCtb3c z>UZ`wjp;7dhon$lDJq6>hzNk~+^A(sVwyz)+eGTs-T40QmPN~3m{288*#dIsk8{XZ z?Il!g+dFC2h~MLsVo^$EH{GNMRL~z#NfEy#8{G`)PT)5r!|&I zw}EXs0hLdg-y?>O{J+AC~hS2$4`u70Qb|249H0X z$hj5^AK+$Vb`_AnA5K6nngV%ki-rjU%U!f8BEL1VHN4wIKM#%%V{k1N3MN`t7u-0N z_Wgw%od0DfhjYmT&P}ZCJ}5We^Adw|7EA@_kccuZWQxIdg0g?Xx$*($CczIN;f*2Z z7Co)WxdrD|j8r99aBjpm7~r9BE;rTXjM4!b6A?EVR7ZG92O5RKZr`ax^kHI3$f0cWH}wtKiQEYy4AtXFX>BKPxzrDy6Oj_LsCRn40a^~ zqI>#ynhv5rcIO(RpZtA8bk8&hi3%RB1xE=+U3V%Uh%N%6JEyF&4CjWN>vnFyh@X=I zqI;T20ny>2uIIghI+UL2y4`YD2T_IVTA}dyZ*K_d5(22ZtS%#S;f@qcl5=4Kpk!q6%?p@f|Ui-owK!4Oa_5}Mr#6fg5j3tMo{;fuqji= zcHPjj9;gqQb7aHorF%N4tFC~$ks7Fr1=K|Vb>}86k1fp$)ZxPS^fnaBJ!s89T>*hQ zY1^*mxeV0%iR67NY4%aq$yyb3YgJNatyYIpYONhSMBPBO&vLr8t~|s+-ReV~YoJcd z*X$#kAiGkN>WB!_^OiR$I%ko70EXpe^2rjaJ$9E%Xkrglx-H_nM0lvsMMU`Ad234Mu+EIg>1V{ zdqf+C?UKN7!g5sxb5-j^lEXgHz&_U(&{DuYq43B7hMPTU38C&o)^Knjcg4cFwxJ01NONV3lA~Ty1L*-*#Gf& zbFhEUdpPV%9<9EzR^H|t=(g%}R9Q~dSU$chwn zD^gPCNG>t8#VhWSbEGEA>5g{f$)&ol^$3LdTnM+rtCDpY;;p{CN z!oGw6`!1`?$XsZ_lYK0&2w-1}x=HiCmpbfQuK)G7%WjXbkL>W5J8sDDFwQshueV`*9T)6y+2Ky^$&0t>v!9Ho*zE6Yt zR0WYtRYxJuTlpj&IO{PAa})ggoZNAM7JK(}N$-CF<1K2qweyPU5%roM7N*uS;! zgssfIREw%6FR_RK`_7Gulzq=asbZ19K9N=)*tcxeMZ3#S$myZN0ukXUzsDXL2KSaf z^{nHzL*aa=A|2e%Q;HwjD*Lo6^~4JL6DujAykraIB?^>>WGJumHtQaK)^i%l-_A$a z8&O^oSR%1pcGN;`(&(v3a+D|2Yvu|^LiXNn*Yhe0gmYft?-kL=^AZBe8}a=u?Dr7| z${&OViiMZKjoGzW_$D_Sv#U`40yv?(=sGCxqI+Dl-3XMAqObj(L_g0&>sl;qG10oZ z;6{}H%|$ts@Axauz%qm6f$}ESzRFf^e#C`_@>+*U6`d z;Wx12|GFqEQqZkPNi~!=iK#9A_OCh9nY5hlH{asmCr5cJQJAtCwVw8EM|p9eJS0VV z#eni6puDG#r|F>l<~uO1I9;=4)==Iv4MI|suLVa5MqPI*A1E)v;NH1m=X#tQa<1FC z0V7ojM%P`QW>Og3!$n<3@T)i10XCGn7{VewMTv$`^^`q!MYi|0l9m1>IVelv%6QAw&5?Z_iolsO5BPy)Vnz zLV5189?Dy7E8`-dymO->puBSy3ChEzC~pbX5xa{}-b009BErD0)}p-SPd)3TKcnzE zlpmrLM_j1vkw4ZGE9g(Gq=@p8jk1O$3Y3RrD1X|sa}Pi0ISu9Sr%%H-jO8VP4H=fJ zGMKB{5lC{BCt4^E;bRq`Jb`e@VKtOjF;Lz}vM3TiE(gm02O0q7i3H`ja(V_gca-Kl(_ya*`ooU+38I5*^6w{rtVsuC=e_cW6N%ELun&wB%PC_U44 zyBF$46|QTA!d@8O1}HBfpuEfKGBOtq!jm246#>d?9hCL|?>Nd^u1cG31O{@^ID zJAm>=YA7!jlotWzotv~g^?Lw93olavR9$GzP+kF{JUMIg@|{F7e<97jenHl%pj)ew zGHbOuWGMf#TXWXhVL9DeAB7bP<*h!sDIBlpxCry|&W&2O#8$=Q(FOoKk^7*A^L1ew zd(rY1+EvLNPFp)cW67x_UHAv|`_9_Xy-m-P+*@T!Khy&%=ntr*20i zrJVX$H*|0DoCfNLXj5wgs7nH`xLGdWh>&Sb=SMoIlZgo$u6y%@OwbStrTuFYG!g=+ z8%g}}6XO8&L(UTNzLYd3Xt)*&J94uzy9(6r2`5k&T?f=%bdQUk7r}LnYz;Sl(Lfyz zQ0H1KG@EE$U2r3)KmPn2sK5Gm4(gHzsGHbAC#2l`pXVB=Ybza~4v9e1LTU`Q6GR_2 zFRy$I-A%&!hcYyI+Jfg?F;bOafw~bti2+cDbGfN5XOs@mn274M7g}Y%g9D91;T`BX z1N9YRI1y9vhyFlTq@Y`ok}@}OiK#6<;rBVy36|5{VRkc#|^zk$uP(PV_rJ%lj)j-`d4ML)Vhik!6f>GC<$_J>60P4;ut1QF0 zA?LcC8!%$8HVD)`&7=V8a8cLu-as8n&ve~xxvNX4!gZ}sXvOe00Cfog)LmAWk-6|% zJlR2A5rDcj+9b{I*ARo*QOi|n)2#q?yJMkA1W<=;l8piCo?vAGb>~(k36p_HYXWtG z;fP;1g1Xlvg8E^xaLW#f%*cG9D^y%R=z81RnVwB-g3IN4rtda z=i69)>Op;6G3*Qw;YC5`ik2;jX%@-b(nQwnk=e3fc?+|ulqdFXH-(eb%{qk!@3!7*g`T~|Kq{A$DQ_^hU>4heXE5*FXc5& zj01l!JzN{xZX&G#`iGRAPY0NwigB54Kgi9Nzc^;aA}BX*`Q7#vSxdI%_kq7MYw5E( z6pXOh%ebnON|$lXOAMEJM&o#UfXIJCN#T$8HcOeJI%X*fkgcEex@~SmvdxWac*DH3 zsGw_c((=ctJimX6Ye)V%r@9Ht>6Y?neyP%B4_MWb7O&y2zixi1TQef<6e&C5#Yl0y zB@T&xX)$abwQQC^wc9*f6J$Hq?D0zl!$rSr@XLHftG{aS%RaVNt1`8r)>oEI&x_ht zRxUWnhFbHA<nXlT5sG1G6YF;_4M@o)X@dw#6D(KIsr0A6rk9vx_S(1okUinH6qO2Qj z4S7!U${&HpjEY9Ql-D#d4zE1$x$??8NNe!QQDtXhzywu{%XE9|f$o(mwt-i^;7d8L zeBU;+mO-mS!3c|_##NnE`iyJ-FO7`&(tj30(BbE>EzseAvvnP7%Hx0omTYQo-=(n;N`w(6Xl$eJB;REzsM3_+#DF>Zr}9 z_vT^swLss0I?n^-&VTCGtPg+B)UG1?3+HdC?LX}z+4i3*@Um}j?Y#{ZkM-VG?7d>w zb2ncRM)vrlRJT++pYM1^Tj9&9tOJa-h#?KTQ{z|l1Vb#%32dJEZMB7h+NfG~gevvU z*zVG$+7$i4+pHnT(mSKwr4-->tLR|ciN3p(O`yGt+%2)M&QJ9v$MApiVrV{R8&-T9 zIqe)iXtDRa_*K0C$Epk0FnggYqM%nqNl5gHu)!@Vnwu^v`u3dt1Xd_G%6s{%}2>TX*u5j4N&WpOUux4M(`b{?ugG zb1NcYoCPl)uA4B9WG$BLF^fHft<;Q^N%Un)?QA>@HxNHo&{c@|dZ-XlG)2VP7xla%4PVrg2Era^>tSC7;#EjYC z!0)l{QKZwS)3nP=*0h5r3WY1cGcRfT7(+zcMHauPcm3zgsTGA&LsF-%1+{xKb!z3q zsYUL}FY37kBqNgB_(i<|D(_&aP`G2-T-(2>*H275PuJ6HUi#(b-wwBM_F|9ToICDk-a@#AS8l<}E7me5wkd+WpI06a}C< zsaS@`)QhHd?V&Uy1jM=qlZ+eZ{)$g$`pdR%Zn)c)?t!eek)0$QR>fNWC@j|=^lPQpL z^G7~qF0UwD9+J9zE!aaab$M+c!{wE|l(dNa?XT*!Tb8N>GoD2kdV zcqK{ce0kn;$K9_hRNetqp>XyW>Hswm6JI`4WPHv5b->~a-FA;wjlHRKr#Rm4glwWNxLUhnm_HLK zRgA;z(sV!dYZn7lT>;cVlY3z}>54Ugns3ba|11U6T?_`Bw`+P$srQx!SansT2Jn2! z}qvX(CetAtd0_w)sdS|s>Gic4OZ>` zT=R-IHV!_UZ2H%>j(Bs#18M4@m6c;;zow(P{ueJeK~ zbh0_VQaJJwk~)4ZsBO)u<0~JIFM{Jc=lhwHA?LG&d`#a}(p6*UEa#`R1=if7VPF+q_ojP^uR6X^as`^xwS{)#Sw-kl%bFCy)PH%lh zEmNzWbJA@dxT9LFdR(^MXlR`JxGM(vPz-=rtu`wJ#UOxU@c5P_9<}=3J1c7SC&S`y zkOdlt*aKqj)`1^8n{dY5HB(;9YLw@04oh1!W47deJl%z3V_}__I-D|3If%)pv ziE51o2z8*>XjB)$B)7Y7rxCx#$k@4%&z=EMg`%F}vOP?l_TfgI`cCvU2U6ScJqV!CIPgPZTEtFKLpbduUD(KUGC8>%~ z$wm|E)YIFQe{`mdVxyvB!xOHOhIuVnNW%!?Bch^CGlXGR#WPHPK{U$gG%6~kQQ4(5 zQh2*keE$2UPObdHgo03~4s0h-D1cB^mm@4kugeeZN>UM%%f6WKL3>J_z6hVxso-*T z>V#z5MNd?6V0SZyXMIAIJ)BgktY9vCJZOXV%-L3?L3?@`E2`7&m(sNN&REm7T2?4f zIjD29%H&W70k@+p*N(cu9}hX*O?@HmqWFTC{fv|0DnT1zh~kh7LOE*K~& zV|93s8yBF%1L6+v5)h3kBEC#8xn-}^0`cDA0}_|DI%_2u-|SJX0f z+G15t`pg$@tyZTV7axAt*nf#D1SfSE5UbMxg`f}w@T#9}r*`3sx$7bq zH7h>lZj&c!fKAR_xx#1Za4V}*V-J^k8wX>f>8Wrpea_TrtA)F%bJX}`X6F#SC>uAf zUZJR1od$&ziWZSCnh&uf(Bl30wx^gn)f08vX8G<6zx(zwbz0k)bKgtUX(Kw2IVu(b zoeN7QsWn<4e1Rl2D%Hg>5s!}$UH)>cQojw2g`%F}m497?-C0?JR%WR0MP9-OzGMBa z4o;d%l>^L4VY*6PMA7G?dwGU^J|lsZ(*;&hsk(AA(}a>ep`=O;Ef}V&p_Bb8QWZf- zGe#3C)zfFk6daWt*foV={4!~o-;#y2j3Dz>&?+i*jxf%p;u+pGDjMZ<8Wok&sKTmM z>WotS>vv71TKRrU2=96sffvCzeV_R<+J+4K-kLrs%{j5hc3q&PR26mH!aftU$FIOmiyh^2x5yJb4!q5DaT3=3YeMK!( zsh)EpsjvHXwMz9kKe;bzJm{mY6l5ohQh=0Lr3Qtd6wH9ukMct);7eZoZztE}#sAok zh`ZyS$s{1=?o7owhco7GPIv{k_{MU|eL{uTBkr4a->~~E_%-^}WiW|8j_C4Nr5HN{U8l|I76^Y>G?m(c8Dw;y23iFMh)c*)78)_X33f~8NQvS zN68#o;r?cU^klnseBmt@OUs;37Sb|;tgI4IQK|ieaR4~au&>c5r_-pYltyKj(nvKo zD#c?Vl?5Ivzc8U7RH}obA^d#0rY>h#j$W4|F(_qumuz#{HxoW+PpQ;5;gd=gT&_}` z5VvXPs$G%g#~X(Ji&WV+l1h~oBl4uv6B0Y;a3-BzcyxLJI=%a5+&ALB*a~&ned7j7 zlZH|nGT_$dbb5Sor*{ePi}&K267!{gPt*YPeJc-&OAO7*z-WV^=O3a%8Cz|XRaRcg0FPzsh)(R?Tce2GfkO0J1YozIE8 zEuM*NYGanRSDYD~F?Sba63c-JLdT{-fOTv4HMpOn_fqc88Fr~X<*r;|&*JV>>Vg+(fcdALwB znqsx`3lj=Lu{tOk!UZ5y)#ZWMc8>2y^L_!Th{X9TmA#)-s;nT#wGzQutX9e*A%j^xy^IwV>viYTw11qmrd_bC;Dj91xm#uO zJzRiw9zdb~H|JW{R}hDO1Cp*^ab|EPU0*h9bbX=I^#$nq?rU&goBQhA*J8kq31{}X zXeMuNmQU9wF7EoOKN$waMrywl`HJ^(JI9{M+k2!3cvB=YJEAq^%b>D zv3kx)xB23ZYQ^et*;%8Z@qOpHYLE}r0EiXqxI$130;mR$pG@LW0j)bLigjq4xSMmN zAwbOCk&1H+XUyFV!s9+D0Zg0RCscfW?i+UBM)z69g_1IcU%eh@xo`?HzL>i%a#6S9 zQ|@Lw(F|;I?#dNDM~7Sa_21Z2h@4ANuQkzB_#=JJ6srfsmgtR7VU7;bZ7RcU&tt{f zq7b%XSm8zUA$IsI9+|-TOjE3SqF6UtK|90mzp+fQ);8wdHzbO+etz{Glu~6MxOYBc`oYbISmHp|_7gg*}2Xv5w&OenS zu|GxQMr)qVB&hoQ(+Txjv$#ZkWs)06$FNZw&qO^VKwSlczjH*VaE1>)_kJ~&-#|KW zkGjGKc!u#|bp<)|T{<09Q6w5NgVf1X3x+RVZ`uu%&LIp^`wcDI2bjO%Xo#-8fwU^& zW)j*Bq|;_cdm(nT7lyi3$?oHx=}c66ap-?SX|D4lgPkAY1{w0_1{t1GmhT2iSqdh~ zvU2XH4ioL;wIdU82`imIPOQ3nlwI~i_|T0!xjV)()zh!u*P zNh^gYfIVNzpQ-}&eG69J~tT<)ysRn08ydYyT6r#{$`%V<1`^?0XZ}{%36JYtw zKysMpqS>M)=9taIdA_=GH42KPzgqgzoS~L_siOB+xkA}Rz{l$igkT@8@X{p`0Xba+ z6qSfT%^ zbR)i)(Gsg}MW&3-c!~^sa7N1&KFs>&ZWN<8tg|TUwbq&nKcWxXRrjtNZX1!(oN8wq^!bQEW!&=2uw@WGXCbetMv> z%WqrgfPvf^BQ`$sV#%ePE|-c*< z)A1T+wHT%|>)sdJKss%t#fFvjXKQ+csf_~jeuyi(NX?hc39ttU5X+&3FhD4RZ}W~e z;Ank-16>Z~3@4P9$YCv^FNIK(!_>;zG|ZZ#P`g#zuU`CB<8?-5@RDpG84{V3CUMn(X@3~*AVQ-UR zI(v&RLPyr#C|R2}Lt4ARs2gH5US!(@Pdgii?mbIRq z@zU+xJ^!x8N=MW4zG96PWZ}cQjhibi01EXN_Dji+D~K0pK&<3vD$Y5av69aTk98XX z)@|G;RD5PX#Ql=)Gh-vZ?Hfu-8KdNfJkE0A9UY(NoA7c#@vJO3cE5u5>EMd8qXE@_R35%RAEQ`2OVeuT30rj<|8ev&5Oc$1oZSjEWDYAV=QRCk4m%fO4 z<@5VllT{prFkBd^#cq$^07zDGzD`-mD$aAxv6+h_wE|*Zw^y7QoH4H#WM0I~Md-|2 z1pdDDVT+-Zlrg+sH0vZk`INzkz?j#ua0SJuyq+`cQh*iCYq`P;4%pq8YV6_QEh{U& zy>}|)=&&}X*0~&yTN(AA)^vog2ZmgnRUqfOS&3#{2uo-1#ky?TBP=afjks@80FeP4 z;<`-Euw`tCE^~sChJN>#myfAKYRbyZxbL{uy2g<5M{^oT_1J*C+#V$m75m)RZ#Zt) z$mRr#n-~U!3!hmvrq01Y-h9Qzn=g=P%ITu1s8lqq$W)Jg<4ZN7Icu0Mn%_Ch#?*~g zV59;e&3vecBlgsodJTa~R9$WMr;)wJR3YwWOx^dr;!irJzDgWsWx`5zfHAH4N)C$c z=BwW^pg!VOkZiFb5G&!j@VprtQ)j4&jj3{gwt@J{m^w`$W`R7z6$LR%PG^>)Qf3($ zDYGuTwuV`ghUv^2dA^OQy+)d!7aG;?uOTeG{a+lhET)d3F!ZW;lP|TInnX9OjxmIM#+!sM})$DG} zFrB%tV4wODF{@4cr)%O7H9$;kn14M^EJy{yu04`B(V{RI_{I!GA|9zWA5wkdCv~pL z1c8J0M8Y8h@#U#8^@~7_se;SLRLcwtd(YYmVwAEHc7;D&t*o!Hto6)gzhGJG=@~B_ zQ&(+L$4JN27pcklysZ3qgSTwW+Obf7%vsX&-3nq!9}w&LjTL7<&REa42#?Rp0?e7* zCscgx?(215oBJ$dY)ULJzP2>7T=TzZk$V&GRfuT_SuDU@SjZWqne*R&xSWaiLqEZ%HktyY~ zqctqywE<9{u zEeAhilaqtpXLd0Kw}0dVvtwGu7{8nOO=;4AUm@#ukDhPB%Q3}ct!WvSMmH_3-(9jtI(%M~Us+ug`&>|tr&^J+CP6@EaMwUM<=0Z|lWA`sQz zuXzc(F$}BNVD)mq?nj}xWgM&rt>z+I&Nec_%rXwNIj~>o8cojdy{ngKG$$x&=*j5!Pp1$ z#hDD6sELiNa^TMqUl~~&2;^uPp5Zqi5VPcTW+^IVmXVP%>+Vn1Fssfmoms!v^(hQ6 zMw*+EMfGQC5aSGG1?Js&FtH)DBUsfdiHqg1+tAzu4nr;XWd!(O0cdkMlrtQE)e=p1JI=Eo(hJE%Pgq-x zDL*#rS+;gME$hE;l9nG(5JLeV*7Cy@=O|7!IUMK~9-s9D_}c3}q2k-=hz(%=BTA>dAY*nE-U`7I!j1Cx?SOCyic+sr^||> zQd#jF6Gi*lt7>Fr#xPx0HYWG4c#3ShQPjBi8Ss-mz4G~;t?`K3tPlnZBeiHg_VnUQ z-c`R&S;@QVbKYpP7a2@2djZ6}t^+@IHsOqUJuWpr1E$c+0I1!D8Kg4^XW zd$GXMq{mq<3`O{2UdO^UrudZCZeUTGh850hxxx!J>~2Ig_OQI~(fmDrUZ%?MU7~V8>WlqcXZiGlx;I&V*8%Re5i1wk-jqLTVD#YE4sQdOxb)+NetHfb8rdg>D7#_`6a!{-@U;Rlo>#RPn z^$;X3Jddx$WH3feY($jT_T6Ig#P04SPrZAJ^83Qhfb(^RsGShv3t}Db&!hVutHg=5{Qa9_YFC!$GIgN zmxvP>>Rw$nst${x(ZxK&OE-zbayo|btk1Em^~_}>%UVy*c!0JU^YFIQOSvf`s^KOyXeQ1}zyBUzEt zWkpe`tay%zvRyS?BP)G|>9X=9cH-K5s;98S12a+MS5JkX`DjuUan1-J9#zK_!hm6< z7R|>wBT0OIXLt)`C8O$h{?%qM!es^nhh?2@ zj_#@&ReNC|8{Wmnv(J=h%ITu1s8lqq_KzcbjjBT2&8T|Q2C0s8RQ=<}j6Y*ms@=ehA{jMb$${Sx9MvCc zGfz9Bg9aS|Wq(*4Zs$WTNxG?tjjD3sA1A&ts%8jeR}0VZ%6E%dayqjVl`_l7NSSr? z#Wl?8FidCGKWi&1ql*z5^%I&@Jihw0WgA5s@>NYxfK{X+hu#_JBHEo2>}Lu#Al=vRqG z#TNIqI;zKIEs&G32@Iz-R#_^wi<{9AJi{;FDfY_g>{V3CUMn)C`UfAYVQ-sZI(y5F z%ZAk2w4WfYy{Kl4LffR*Y|f%Uc!P#qV?xm|Fep-N6p47`+I-0MTd4*Xcm!fz$1|6G zA!H2NQ={q&@M%;PTt2E=W>I!=!Lqi3_>3nXSwF$Dew<~kXD)k~Wv!=YymVCk%qi*` z>8SdH3$3|kl^^GNTejIbK%xGpuaTx7RS;j_0I{Z@tT< zko(5nmvf(GTqr4HH2r|bSuS)ue4cN@%Ra?(w2)(ObkIUAUDL}IKH=ixqiQoD7`7>V z{NE%la=N%EDis&cF;TXk8>$hPCc|`b`G#&Wk@E5swxcf-HTL$vPhMI?5lcjXcvS6B zNTFyEoEz=&nIt~HGpzn-WmG-q)#7!NBQ*nJUbj}9?Kopz+g=XlEJDvmbpqV|;6Ck# z!PnwG+v&muA%;>?#_(GEMo4G5aMc5WF|T9cnpJ$tYwd#|Q3I@SUdt6;#9@Du{pGjF z%~@HI0gSe-NbG;LiP>=hzGneqZDt{eq@h^^ z+HB0xMgYgSHj^{lT3DjZoS>wkcYb8~sCwcX)HPB~cEbhMH3qyi2dO6OQz#Q>fvDK) zzKxFRaajwDCUOLZi}=V2yZl|X4hH6<2iP|ep1Dz?DW{93qEgYcB2!J)1jSV^2aBYk z_O?6W05-KEm>Z0kNCiTg`A`uX?+mDds|Z{&s@7(IZRDe>5O*`GzWXHcCmmI<5{J2L z!Af<2J(BrK4vMYjt6!t(3ezO{m?i-ZN8-W<`IJlW0yVKwRSx_a;wz(S5O1QN@eB)Z z6|>}YW+^IVmXVP%>!%mgFl){*omuxj&PLU4BQ2^kP=EI8Ob%5vqiTx)Z?5LcHVI(U z2Z-g+LfA8BXcht44UV?>8(x)M4&@9dTy{Mj3xqsVHL;9A(6faJS(0?xAP2zw}{Dd zI+GQZGTDkuY5!oMhRHLA=}f+m0cMG~)u#O?(%RTMYZThpI%>|MK-fcLuaB*U5oL!J z%V#421{edo!sDq%F8gVGgZ9j2zXutE_SD$=U3?l_1(%PlmRXd|dDd1C_J?uS*VHTP zOD$_XbJ_1$)_QuzOUKr(e^GO#W9tWV)?6EvA7&tyZMF|ks6T(b^nJU6Fx~^i`o6p3 z?8O=D`v&2$*GzzAQTGWIUyJ)P?rV0RWn3sJV^nvO$5}3PKYX#i4<1n`5S9AOS6ckF zC7Ps`uJ7dv|K#H0W9v8}n7AqY)Hh39W1@2ZC0`>hoK_5`i%T!pq1f2! zDY6TqA!^+7MCpxaPCiaw2gGCRj6w=Ui^vzvhrLD;pWhk2Oj!~ios9X6SBcjnp2;X6 z=Jj~RIgK;sb)WDG(WC$~7xxJjU(S7F?i+BQWn3sJV|d-~ah40~toUMH&pNL+Dn8|P zuP5R()|l6Fg**1#-PmgE;j^#j)o)-b4A5n5Y#mSlr*>Nz^;c2S0*z{_2y$r(1EyF{neHuPK1Up}_x)RdJkt8dO)*J$$6 z9Hg48PN7Vn1^AqW89Kg20X}D0T-E}kiDrD^s8v;C>j(_wrXI0zN3TRvP8Ur@rJ`v? zrkd<4=hcYjuwlAreiLb7Yz-=&#Q-PGe2lGo&uDCYA%RPjU2XO~WUn_?A?{{uebPUR zKk3-|3UL@qBrDYcw^y03`BqE@L)65^Rypv`5?>ix za|CkL4$pA$>0*|g&MZZx%rY`kW}Tm{Vb*|QIsvC%9C%RMW9sV8+4qF&+SOC}Rqb2dx*^%Oy6v8}@?$gGZfZO2M)=9$FK2+6Df9%~ zbEZ%VU2|c-gYJ7Uv)yu0G~dHL(3D-O(INLO=zOn*FpRq^3{uTA){^`1Tr?b^R9hjAmSzqoKZ z(%TYOTn9gV*zQnZSl6^Bzaul%VX?qgmVnUeT?;Ty2@bz)s#Avt)NR)z6LpTj(vkjC zj(Acg+Psj-Z=TFVN4}VMb)4)@?3`I2bq)cw5l;T0@RIxgN-sPf+e{RGcm7rcrX3H9 z1w6xbr%JNr)ZG?r8^lGj0o(mc{>kt(#_^BLuR+-|!0z8RrTrvn%XO?gvS|?t>aNpc zD!U1Evw_OjWrFiKQT&|%fnrcql|M&z6s3N8gG>CbJ z6JuL(dEX>(eH7nB;=5T3**I>7^x@e1M9d4Sh?ypsyDI9g(_<=o6JG5**scfa2QU90 zTsy8O#MrJ=R;2J&5i^PxV&34yjLFAh8USMY-8Ue>$8+~7FkJH|5p!5dOrieT*Y?Eq z&hOZ^<8Lf5gO|^~lPC7LJe?)QHk`0Tpo)rag+@nia4I&)hv5eRDq7svD!`!WJ_Y7) z$?pgU870rJqT~=L5eJ^8Kx~$98iXA{RLD}GNRDv z$aPN1sC=kw0F?B(uV0{0jN=q&layRSun6&Cj?&?q_oUh(9)DJ9F6C^{EVmh}9n$x=>*m($I+ zZ$N@G(VCmjJH0O4{NyrckAFp83bso8xT z7sZ;LwBx$({+uh}e5;ExjWuLOB%mP$r#jdhCvb#Dm#Ge|)B=t*4b;)0iSSg%I@Y8B z8Pg0M>vizLR7ZESfs?I=c5HaI`A%&C6xMv`W_2JJ|@n=oaP+ zfc1<)evWgP;^a*3_zH?FlpOfJ2X@#I7(NBU{Eu-B8g<-aX>L9BO8E<*UMU5WSIWvQ zHmWEk&1v@?YiI_FVoCTdr#a@bKPQ!HFNo0+@fa=f%w>N@$e=yFj1|wb`Bew!*&OtK zn;p(tR%l5%D05PUVW%j-Y!OhXf7Wq&`596WuOk387|zj(a~vmuG@Wm(EJR~M&qo6S zoH5|Oe)o;Iug`s!aiOG)GkL#aBHg!{Bhd4WJDMNmAC*KI*xe3hAl_dz_X!o> zockKwH|svjm=l;Rur#AU7I*|OodCq#b&-oE6_Ijx+^|dIu*tbAS9ldYQ1gmqI?=?1 z#&#}6GgjnOIEYSY=h=9G?Fh|8jq8p#?u|GpqkscUfTAIVU~OcD7tM#*CGkuIaK0Oj zvUXfgK5orgK|8~<-@EKQ8z&`c%zfTRW1h_jR^Fq$ak*+;q65ZEI-~>KWt)#&2aJdh zH|i8cE({PF7X}z8Ixy7mNf64HFg`-C*nIfpRQ3b0oA-LdHY$RN z2!Lr`yZbr>xI@o<3e4|h8u7v3XrQ`^!jq|98&OGV&yU@dwkXxd^>l!^w2Qp7X3wz& zKxx4=WV9fF)q=+<&`KMz(mqjD+8j}u#$Kn#RQ5-Bt?-+fpx~A)uN^mu=1ejIAVI)M zIC9cRC`~JZH&p;5^RW9y1h|3FeF_Y}yGND1vZ{D(rn2&Go625*TP4{p62t^A_MXgE z^khugKmf%H#Kr&4i|<#2?+c{(jQhF;*m~kV1%~%n@mHk9S4)uQ0*RP?mNOXV_va(O z-LLsj?`LoP=j6SJ_e0)kW~<&23wrVEoGCv(Q|O$*HCN7Lu2UWL%S81pZM-u@UA!S} zo>^ab?E1oq4JT~f(L&_+pcU`{oXN9hx1yosG`TJG1T~gjg;`OU~kG(cisc$bYo_@OkMe$T z4%6f?UFf!y%-(;ps8td@vJ*np~)tZHqpZD_eq)j9ht4WTF4P#FXV++QzN}#Yn7sFQmy%h zGyXu|vRcljpC-ft@x>^&`sX=*n>UTWPWy z`Pi_$eyghL*9~cq)irJv?6wNxH%T0K`7pvDuxAcjh|B3t z(^*~li!n(x^yHS)bJi;pes8^JfM|-zQS^YHXGVZgMUYW7P(>A@!o{^$yv;Z&9?l^! zVfDu<0#iSK1sSC5nFBvovYdh#D~;hJ#|2HQZwPt{VPJEcL6(?|19s{JPW38en-;|NZBo zOr@*lE5fyuzIM;9I=`!v{4%D$|M&WjG4~PazkhJ~8b%*U`B%T9(mri;|NpiAe}v^9 z@DDEk0vq2S{`hnCKmCL2{|L)J;2&K61&fcc{n!43>;L!4Utv5xpsM^{ZHKyL{$t-{R!23+_%X(qv$ z21jrVI1L;R$~4#c;QX0YO0PygjW5?HCv_zJ+A;)RoU?K#3RH%X_I~%)f{F5NI(q~1((9k;&l z%7*nv?_`SJPq}(C0<7mCck@kXI&k*u%WaU8%j^hyfVV+0(VAOdpbuine3@2ZG>Q}# zPDf}me9RHvjyVeQLk3sv;7!g8xg~64{WaJ5z4A*yw4yxkZqIx3lDsW1vR8DdBm03Z z->cgscGbBpQZI?|U_JSp}#T+z6JZTIw=ZqeJA<{-7oMO~3IWgCyB75KcgK$jWUd#02J41#QWta?nIcLbjt zjfMSfcQA8~&!=;a8hOZ(nSNFCm%~$flKJE2amX4gKUwGDf@||f+K7vK^wvegS%Z$2 zgW6j!8&ZP%(0FQ08mMRP@Y^!^J2juz3TNj?c#KY;E1)!N=B~!x2ecXfXxE)&FdQ~h z5;L&1T5|0i%6DB5iU@t7>jD!U`?`kcbS=qRAS=d&q|#GvH8;|;p~Uv87@GBvmeR=B$Oa4mc-U^ zmoVi}j$T2C9dSY!2=R#W*+@PRF#tJpp?**G+3YY8R=gZ)9;0)P7^%Swhs{`lUe#Ff z<|m{g;!b$@pECLTa1SXxR^OIQlrvz5xQ54mNsaHH-LRyyY_}jW#Q{Uw5&oHTl&sYv z9h__(F2fm%RP~XffL3ggmrq@Q!*5PLZ!-dDjlG|e!X}-a zO7C{knuH!{?ARH$a{?R$yxNxg`-sm+`d$~F{Bki~P9GyktynTN##aehe7bNVXHTNa z^KTYv#2CUS1S>4Nppb$c99*XmzMTogW2$}U19<~j+gs@lj5w8JuW5p5b)VI~vadTn4g=1%DaMMpfFGnzzHA-B;=5@MwNW9}+k|(lXqE zs&0Y#qnUhnhrO=lyW4?u>FzdQ4s|`0$@jJ5Z>ea6V!M;m1_>lW+eC7O5BBo* z&DlhjFgq>4=6dt(2(M*r1&KJ>xZ6S?CnN9-t6nDV%9%=pVprm>QJZr2Mtb}F2SF`A zr-sS3SXY8o{&BhbE_Am4N=DL*&eE#S?we`&8gjV48lie6aWx0(%)f>g!Ych&Gd?sU zcKTK6y?tJi=)Hf;`|^$>zwjKS7oI&9PmHpw`t z#g~>ed-jo2HZYr+z1N@lc9p3SXePYbZe)O;)o=dzgB|gGW9J=U+=kmcga$f zbReHmyQahY>44xqTM1|jN$e-1(|`AiEA;om=CORw=gSR+&d+NpWRLQnT+^>P<$0P*>szsY;TNYN)_J%V zZCRiOleEp*hk+q$CMFcXIihEn1kD}*J`84HuygonBo>#L9KDaPH_XY$!@r&S^C|(a z;r9yk9{%v?{nT@7=zYm@dT)IGBct~N3BA|7{*lnT^+gYhzkh12q4zv^vV^}+euVUX zD53Z9kBHt|4}VznzOt6yJ1Aoby>CABk@5G#3B9j--6P@e0oC*-3-M*9;7nV6M*cbk zkb_Yqx2#-Gb>5?IReS}w2NOI6u5%MSo2{z@Qx61Kvv!-QOOVIb<#%-EXTq7c@dc{$ z)8)%53b{sJTa+KaDt)}Qt-{Y{`qu)VI+E`r&8OW68EHqeMW>%vvNl&u{wwr{1FG`x zeR%cP2eC(4|63n<{a^SGtbePsx0=5PROOHI-yF(&6*?c_^{mC0h+Vfg6!yvY+*|0m zH|+h6KRgJ>d4{kX>LtC&7?QkWw%WKT z5oDZ`XxcZdh0J42&n}i{Yw2Gh|5cAF|3e>k{#PGX;m^aTfAuwS0e9BOcV;<%)>h@; z0e{2;|01e)aGy7*tBOC2G2)NhWWV*#%8e+-^`6O1Pi9W5?-~V0tNVUO@M8Ho=I7Ct zIVSE0?~AgE8m~FHr|yJtjad4Hh4^`er53TUyk(GDJqbl!! zM_t~m#l#&R?q71F}AvY(bH=dYR2EQnXOyq)MYwWUp&<@@XJ*l0}uM=^)uA} z*IfQoO}$!#!7n`FH8z!*Ml zYk=Id5-vQ6yyDVVUpaZ;s$*5~bEAWnSZT1q$1CKEXLAU`aIGz!k3=mYPE)^r|I# z`Sv9mCu16?!#7~MX#8YMV+}u7pzqp){_*tDt}OhlOrI8Sc1vH&^7h`RioRxe7t*;D zv+bBMG;-quhaiV9)@n=FV)@6F2CAw53iH8h53JO`Me|JwNm>SzPRf{z1qo%uIy*`T zYnfx7%7|J~KTSr8`uAQ&!4vRUJvEjVA2Ip(Oft1q2gJ21Cu?Z9H)rbg$L^X6DQ;KDdr zA?=kp=JDxFW#Dg)oAOcLKOEPYTxY7Tin%yz+Pi6aeRe!Mu21dy*Hq`CaLf19q;FoH zeruAR^{ytp|0Vqx6BcjthRjy32CTyfN6I?a^I-WWRV3ErzXE*+B>69+PrZH#eJk|m zyAP+=~wG(U`wD!ns-Pr&gWP(;| zqk&2M*i7N5%+|lD&J=_OlTzM1y6L#`a~OeaMQKg(iFD7X@mbH%g!~6WClZ*8gYqr>^pQ+Xe&eczx; zasRI62mI=pj$b%tpmaKU;n<$iSZcKT9cMJ&6_XLZLt|F8y__}ezXH7n{C`7lz0>;< z-a}3p|7k++GarK973A%#{VV+a|B<{Mw70d#7n@bTkks#GbdHCXx957=_td6cMcSq9 zw_&-wz42KUesm*mHpxuKlWtQIlks>mZSscYC2zNh5oSF2%-O(kGxD`{i;=&&=+n)g z(nT1fqzBannGkHfUsMo8&+8i7^bD)uI8kFJrpg;^*#~^t#Fbg_npZx-*mL32#Gc>N#P8FOL_Iv)_@1fiU(lE zCnk)6rC14w*o|O)H~cc5gne^~K5AWF-bbHN;ZF^$!SIF-kB?pykdY&yPC>CzM%7Zp)9>4Q4(2&L67DWR#V@ zkGe@v1FB;>G_j8f79+#@%h23AGuw6|Wmrzv+^~#l$@3;{rd?gb9fO ztDTqPxdhLT@pN5+r^qBAho`5wzF<{5q411M{(CMF2~ z&H0PvZzJ=Pr)kc+t&ykp_`_S3JUzELmeWL@n!(wvJoR$TK`whbPvq$h0OY9~fIR(+ z1r|>5gEKi<&=MRx2%bN*2 zMt<9VwF*MoKttwR0h?Zqz;R2jLbjPLUklFF=k7;`DnD!f4iwY;5%oMi#t}^O3s~OI zpU94p`OjkrKL0x*ksQ5sO#MB3V%C0<%-VC&{^T*3)$`c8)x{kHzgzXE9ji9)QNBhW zHwQa^oXbATF!a>+%x3~OKXK4tF1sJT@*!!)AFs;z8J0{>PgMTaprKb6Q$PPNG&spw z2a;Z0eFXz^F1xQK)w34)kQ7;)Z&zPs$WJ$9J!_G*Q+{5Ll)CyV>U0IiU{=rCRM%O8 zxaLnYBt2F0rvg=T!CZC?&#IbV{g?_%pF-4NR!>i)nhU+Qq#h@&w&qW^qk)ruKM~q8+qqoAe&IvMX)Q9g&rHsEkSZ$F z=fI3lfAC`?G~}?qEkkVV+<;U0WFj|Qa_dw&oY`I#Y(T*$jl}|Lhd_Gax<(R=VcRXR z)ZlSu{^VD;;}aS93`rCmhX495|Wi?vr5M9CmhLy%Z^g&7XeW; zWbCOwPy{4v)5S5P-+`O^(R8B(K0{O$%m9!YS=vHkJ~*sIeiFtvXktvIa)gBE9fOcm zk27BLgk#S*EclEKzs~`pWk8eh*;)jyAv@hfz!II;_<;IQ{gsx zji1(Ke2GStb5y_MZxFy~U4~qo_EHVRSFCfo3W2eRjTX3Dtr4;9N1KQZC~q#_^pbLbLj6uKF_lyhTXO-ih;6Jm`*Fr1 z)*?K(ArN0yPWN+PyT|pqug!gyF&A%IV5!yPEEg0dzA6!GRwOq;I%<=HX%T zo+=TWB!ufC6n^D~OD>SWrlMVYB(z-%nto#ePnSD{C<;flDl{#?g?0sc`1gVi6lwKom`?fT;cr z515EKR&mZtHNgID`4DVCEMoDFe@n{|6N>jkB|sa;x6?&T&Tz&{mWWs_$9j&g6|sZ< zQX^ug9AzRltRlFA#7i0h6zWe0lli-XxHbw9i`YQLIfOG7v3B9X4FL{7b)Qi2b-SQFXxStps-(K#wkRL)7kbpYH7m7_r zcF}yC{EN@x(PAH_#Fa(NO5g~8OBx>rG8Oh-6N}iG!lP(brwv5)f4Sd8Y}CtHR3L&a zK;IDXgDYYYvk(rYGc-HVLM(B#8Gz2-W1y5XtU6+eh&e$C$A15kS`pj1SR-P8P---! zmt+97imy=r0GJ#gpcp@&A{Mb>LSpAA&RE2{g$FkT{Fn!PLd9q2I~4p33{F9DOv{)n znGB`0!7(itjupdKC1M#xaz~J(b~qTO)m_Bo3YWjDO2mc;$wwC`{PxunF*#EaQ>^%z z43wU4!mu4jt{`GLPhukWv*Z>DPv>V@M2+)eEK>wg$50Q@Iua7ltPoz1jqIZNIJ+!~ zN5uB0iB=XdD}n2cEUBMk!d&b#^cou|rxhOgxfXoSzt2Q$(#vTQK(Ni1trI}70kMc# z2$M`51yQgFSh6S|qdZ{RMNH1{iNlwOm=lz6?7}0eL@aRhAl$W`*-!n2Ij7_II9P6_ z6$OIMbOdkGdh4u3M7_+a;i36hM7!fCTZtLxCDUett1tG|--dxLKdRfjXL-+ZI~#T}{E zBZDO>IYA}!(MuGFk_S9SZOabqV2UU7oq@`H0G(J@w9Z9==U`4;nnSZu6VV zZ}thR-=b6i9tvEfsu<}LNH}n0* z>w5-Fo_~@KR*s5&$}Xz^;-9R71M;OMnvWT>0_lE$q{QDdL~+{upxKLz^@L?MQ4hE#dq^u zeeRcGwoal_*z*s|W#0wd^#1aDNn?5J2sC}Rm(WbK=Gphc&h7J3i2P1SDPY&6Fv2a5 zlO=wQh<;dSrA~E@D$TCWvAXi{RlZf_qvca(#H}hHT3*m%z+JwKoIRa92klw?%Do3i zVtt`(-{Evt$BxX_9SvkKuw_h?c8gM0S^=AqLsv%1uX91nc8Kpf03*KioqqQ$J6p~! zanINWV>|SbUePYxLdj2)DVdLjE(MY*W2rhvthbNQwTG#7uJ>640c`^ zThy%1-i?sW&-1V(Ll_K=R}Ox-gI+wOy6m`H^M7y7%BEYtVlqF`Zj~#w0nXl+0_9-j z=>V+$>Qfr>MLUg9+g%OQ+pbke(VDmZUTt@O+;$A8N=3sdI_&dUv@EJ%qM7;?vdV_j z3*|2AnXzTxsKJ~D!ciTznMe36^RWh)Z6Tvg`<0t1z0MHT9E;iu|IGRGST-x)&nvy* z$J?(At<0$w@O_dvJA_T^^gM!Q6cZIE1(;qqp8HBl%xG$ObBw z6wR9AMl6k;B^4%E-K4ltOHv&6+|0*jK=YN9IDFHK8+QZ)Do)(t`&~9?>9tKaGAG>m z11UJ0oQQ!5JzdE+(!?=`=<(5N@@7Shr&RP4ftyj$f~e?q>=YiFfT$4U`~pt z2)qPx44&{sn<1=A5TjkUR6)dkuL6ymEhn`38hmm}@GS z-TAC8H{JBX@~ac9)0qz|=oJ;Lx8$=wQ_!m`L4C|69P8=jx0K&je)kfF?;ogVS&H+A zT<{C#pgn7K<~PeXmv1cZDBnwRcm zQ#)~04O|m(u;Zdzv%NGBHj*Ef%G|aae9jqmLetL%>7gV02!?RY!DlbC@g{-p4XV=MH)H7Cj z?dFUG!aCMSB-9FWl{ZF4vC3;RM0NC5T&TQ4qVfzsQF%hEQh7~E#b+e}-q;N63h!_Q z)hsWUv0JF|6rXaZkOqq@3WR$cy~ToRG~@f|)QgKM!c>(x(L_*<;%Nk*31f~|=Vcp^(mIENXDqE1Y)%$QYYLvU_@rR-QSfj1 zAVk5_7Fiq@plJnoRWn~n*@R2I;8{m7;My|LI=Sd7@CLJbO5uD0D1{@qOyP_w8)uR^ zA>>nVHJAMw5rg*R*gDHkPtR?c!nx#UG_G}wTFrNbCDc=dd>kl31eXyqTp`4q5E2<7 zpEg4D%w;dP{PgtPmJ!lugwVlI<(^p<0x%08f=?n)4daYYX(VCA3>9tcTdQGX&Yl;r9e4vXd zL$()sSqk9EB7|3=!(I|z#M{9}1+am3+ix{-%P3bCz6?yX12%Qp@NFUf4Yy69?=HWX zmzDt%YyaK+WjtcPNSV*eU)!SR-mMlTP-PSv^0#dJRcAhWJ{~?6D@z+m<=++%mje~F zCtYZ~d`bD@nq=L4^Ri_73CBij`L_i`syRuvb^e`vv6+7xk9dfRCc0JED4Q`JBro0W z>lwnfQ4`_}S94i>40Ikxsohf;pc~%73O^I%KFhAyY#_U6ER9qK!^;K*vMM4UANJ&9 ze(iylfDQNVYZ2gNaDZ3|nw-0`t9hqruZJoUQC|6Dj z6fwK9_wlS7yix#5lpkU&@F$#|tG~K~zgzhG%ewrr2WIl?4s5{g0?!8yY{D@iEP0y4 zJNZ;#?cb-8e57j{MOU)eW0gQkO=S*V*mQ%QtcSur9D<~?CSd9A^x6D@(HQ{@hE`T>nQ2E~~v<(|d z(E!&R+ZD*!oC2eSHuFK-l?NGZLzW_I0NrW6$bqE~VqH>_`jv{5vT@0_aVF{+fCYV4 zj19Erq>RtdAxYcsWf))q-F!s{uF0-$MU&n2V{ya2TIlQNm;cgLYr$G$ztyV7<5#`^ z=Z{@=H}+)mKgT}01L@AA-`4s;QX%rLtNiSL*EMgdt;JcY9F8MeHH&I-A@Mtu|{<$=X=pEKU%r| zE6CTXs{E0!hrM6J?N1lWccdk`qlVurl=so!SLET5l=m2!yCTyMmH*+7GXFy#X8yPS zZYBCFHk?S}98Hi~aaL__Df)Jj+!kI^Qm#Ezect%!%e&;!l=r)ZM_s>*9)v$*io#%XD>N3&N7N#KV){TYp=_pMSVMKI>uS|LFDc zK2`ZYVtu?qf8Oz%8h*t3<6-rOc)Qml>klVA`tsuKTz{v$(dF`a_pg)sZM|oNXvA}X zxlq4m!POzks1D)!TWne}$5Fhm`Ib4g+ctpDb|(J>C3UXt1dHWs znHO%|vamFg9zo>Awj{*pYv#mCFipY*AZGkMljV$Md8wB- z$4Wj&0gTGBv=5BUElf}3$Q)#|^_S_H9(cU@pz=YK9C5-~w5In5)`{-_kvh>uaW4w( zNEBa+4)lfQ&JmwwYR0rHd{9dl+V$%ve@|DHEi0_ed{l8mv>jUI=2PEutT5I~*L?Z^ zSYa1fVV5L@eT(ML_(9t_67a|AKRd%yy__M+86tRc{;}k49lA!p=EMkoRr9M=_r&e{ z8V1;YT6c_j#i-1&%a7v#h5pxD!%`V|9bxV7r*e*E3P*!Cmnpoj0m#IQbAGfjj145a zI`8DYqVvvOop%7c?%37&-@u;#=3~sX3I}%@+{s;?HxPc>4ZAw8SJ)_T50m`eyms|h ze~{nLUm|e-Fn{WSO{>3p+V#NZ@P!#(!Olo3M-6N0w}Sj0P>$>8R`o+7z|JY$0;9Te z<-L(#1!BEyHHD+v^3XF)O=&irRDJaN!dlgGmTk7wSli#IL4n%m*#fRTiPQ$vxJF%8 zBWis8uFeV7aDtkT#WgqX?&|z>-Qa1T-qrajReXp_C$CR`SeHK{eSN~S$zGo}e@d?A zPcvKqG}b^4lO?T z_vbemFRr@0Yv(KFbx@X=HA9xuR;F)&nTE%U@EEbtz9W^0(@KT{O4oUqww-XxOgIJu zqw-BYIPsMI`y%!RHTLffarZdk>kTnQ;kgMNmAw?Skv31n_oNj!z{vGj?Ep{(82~rD znP;LMz&t(PCn34W3fnqCVi(&L28*^`qUV>W2d<1`6GKGrw-YM6kPk#iJ6UW)MAsxe z;+N}koi_k)SkH}8WY<;LcYXdejsw237oYE87&)QvdiZgg^@dD-&jZ5~s2dr>!yV)` zT=^!+D_ENm6(5}#U-j0IDR4rXAG?~P0fsW%cxHGgZXM&7_r3Y~TSCjQy)4SySK8Gt znd4$_!)}OAu58A~HB>yqZHxt6LuCPdLSp?`Am08!XQ@8U^V^r1`G+GWCs#HppD&UR zX~z(&iEZJKvLc<(l?i)H@%)>h}L-B8QysN%Xqh zWZeA2iz3<9+-Uxs`68_XKag;<(Px=4`_Ev_AJ4;Iuh-mq2O566tVr|=UurS~qJD8SKDCw? z@iHgm_OO1}(-6vFJyv=4S9=6u!rb8PSY1q?GFw>zon;Ca6A^GT3g zzfYmwr=}H>*opfwv3^-$Y$Y_Vcov5Y&2BNoHzptEw16+cXI9(f4E>F@RzlUxd1n)y z;l1#X)!jE&WGSoaS7hm}Pc&H?@X`#h(2lQAf97pwQmYtjL;$f2ZLB!^amM1*BD~bV zxWj!yh1c!w>vdn7`??L3lrdt`>T#9}Cbjsg#Hm@4nAAFIlY=GqcXgt2k7_Ebl zd~~eBk4L>1%$Z7*V&Ul``IyzV=bH%C5vx}as&-FeLe-IM4DfW>2BWU=RMYBlx^00`KA%*4zXZP-e-yA_eK zC)_F-i%;TpBk{ymJUio5%>rUEvk+D@6~U^W0PBv9HV)8gC}JjO*yjngVipsWaBPn! zB5CiEq|rITz1J%%9SR=uH<;7U7G|)HZN%-q#<2H(_GOFw2PVG8)2%38k7hE1-KhRP z)d%AQ;w1V2zEMy^4?#*5K}Qha0|_8Z{}baBdn2s1*h+7!zq>jbR?TlPTM+az%aN9@ zC=l+08yFVg9GKA4Z5QtFa!lhh>DV^UT9K`pZ)(5*?y==l%MX;9me>`LnW+BNPUuGE zi)Ao?)mag0A!sB;K#Krhr2%38-4R+og?!tE8Pz{HV+_d1he8L$46qP3R44*_9|4X} z285}#yI}y=-SpVkQDZ@?r7Q}Bi;V?G;T)LI(^>G{S{7t)UQ+c2LfPHhlM2| zCecDzI#)!&A|SB|UpR2LB&zDcOnB=XJl{q6+&(>KsfFaThQ=ocWshbDEqvQdfmUdH zs{T3zLc*zk8GAW#BXXNUMzdxiyeqtPK|}j5@eSIOt8YoiRoOiC$@B%lO-~p!nCrZ= zyh+&&cK()&U=2@C;XNOyO=E&wh|05kjFqgHU^# zzZQ`wft7>4J6ZODSzn8o(eVs*KeHK~1;pd6V#zB}qhy{>G{VBa+J@HJfw{@?O@}`4 zw7M0B(Qyr*$1xv+Oj8%CPgEKOgm=LyN^2k!BUKLkX7bG;>cZp=pRumX#=4A->_jVg z4i0)I!#SQyU6P9&pvit)l3@<~1D?!5&s=E1;*sk?SvjD=4Pu`O4)&Qm)nl6Ao^m1a zFn~{#X=eQjj!FXID8Hb5!Ez#r97z(BO{03Fr*Ht(cb5$-B&p;eRiDt%D*{^G@G5Wc z!~&uH>Bh9VB%vH6?Dd2OEMd0W5~&G&b3*)S$w*3eL9}|t0^u&tcqYkM4l-`@j16Fl zXFi({He1?>b^+wB_iP{WU`vB1u^4O!4IyeWV4DKMy7&A7lbCN?Nd<%X?0Vt{?U~Cy z4)^M>76q`A)aR*iE%!1co!uC^s1NW_$pP&-v~7|0{Fdc8XfT(3EEx<;=vlXkkAY|w z6vvlce+^4a7zwf*Fdt2lZ1uTU(e+Fa<&8g2j$6#2V&1i@b40hDjN&ni)AXT+K8_jn$L z6bObd`K2HFAR z8xbhPadxR__(m+#RT(gq5uWE`PRv~_gW`ZdR1yepYOuHKeyXd){=F278Oup}u+NbN zLW$ir3QCaWz~3(vk_t!-=`ZT=Z6g2D5s4y7Kg(rEt>c|4DLQKmQWh zzPcE6J3j<=W&efe3lIar@PW6)I*FGZ{3?Z{M=)|y+4}j_KCCd*sK~^c^etAto}&B= zpePs2W#7yb;g>{tTXc{uZSH`!xDNZMT=q>uV^k5$WlscW(4M*M8wnY-r)ORMuR+UH zMfDP=mJw9ToJvjSPqc3BGMu)I4phK=-SBc*9jYJ_1#{Wcc$N<{=Bm!TzZs8{dzf;? zQ$ZNa>gh?#-yF0=BH{If>h5X5T=sQ5=l_qGrV29{;#W)mt6)}7rP%=7L>fVkCE+=L z@zON0q3$U}4rcXK!XBXL7R+T&=2^qqHfOB^SbI7)T)FIPga&H`bJ>?0YxT@!UrorM zJw0o&R+&15^RI`IgGQcLbN;CopgKD1=Ra((Ue?8$yle-I)?dcjh@O`L**GBw{$`=E z4kl0;ts6YCKp6Br03As}IY`(_oMgxx_!spm!(e8Bx^83l54E#Yg9aHCNi#5^XEHfa zE+lSIW}2MD{sqrWAY49YC~ZmkawJJiiv3n!w~f&*B@t)HMxL@JWYTjK2;*L(mLx|x zK$#XwA-R%w+D3VDVLnZ?lMKqXFBEgtB`Kb}LY1i3*-5 zpRF?vlon;d=*qNCiK3D~c-dLnv~(Yl>T!acmq7$I=gH)mw@>&l0RJtMLZmDo>=Lwr=66+u2io0FA6g|Gl9!2ALbChKg3o~3l7 zQVvlq6lQM%huP{F@1l4poQu>;3892TDoS^OIQGIpX_!*`p` zQNp$#=WN>v+gSQhGR!#@6VAEKxJSz>v6DToqn!qgX4T}=L})}3)QI#&sxkk$M_!j< z(o>fq1En0m>LLeqQ7m;iG^vZW{#jiN-|Ny(*!GuuUH&v-bx|_vqL}cxTa&sdu@gSO zj=Ionn$^?4CdGNzbLK2W))rfLcq2#SiZ2umFc%{mDBdW*q7R~rg!c(>6bG0}WVdZ| zb$0e`V5x@)V%SYIJmm=;JXe1;5>R@}%`y$w(zhf`^Z(_qBM)CNHYk^TvD-i?12}ts zXp{qHDi&tGAhkx`d{p^Fq7B`7*#XM-PUq!kzhS&oDtM`waQck%l0-&SbuXBIfOn~Q zHc+ieVrKFdvEzT}iCd;m$S(SJs;+bM+A;Wh)dNeo@qA_9DC z)!FTo+^ksNLN@r6hFtMe#z+G&QfZN9<;30Pi4|98eP$%>`}Qn%fLhcoXy?ew!eqm z6gyZHYVIiw^RM-B%5a?xbHs0dm9ya+*BKj>1U4upob}z54b`<`t2!h@6GvRCI@InMAutD1%_DHIu4M8wz#z1M>z{Dir>=#fSImk`1gGHfI9h%xZ>2IK)HZ`BMv!(V5 zj)S}XM6civw_6332^CaK82XM^aDFYlHx}Iy4c|WB_uJI#=MQ1GY}F9btCsX3#GLHD zx3(>A5Qs_wVauOwiEfNyYzUD9IqDM%Yd8W)=Na%Y1H9ScEAJ1E9PHN|P6xf!*}qWJ z`J<^0v_3UKNwTqoAqiE&OZ^nHYbct%%si#HzX;Su5J4s++ueZ1OUuVwLI3XHGeSai z%&>vd5Wp0+9JG;Q(J^g_!oCo{wTj_;s|*mf{d8}Y&T(rMC8Jdo6aM@yZubb$eK3_LCMe`wWye0?s~|UV4g(MQbaV0Rpg8Bfg4gOXbA&g0lUsPVDg4j98_D zSjB{{nAn82n%3CEn%)~StM;wc7}GSTFw)6Mo0{Au%ba{lQwX~j1fr4w*4^=u)J~Z7 zhI?=l*=jbVi4IG$BYeCunN4RsDBI+@2!t!ov?R?35K_1;gsTj{{OvEO^a`eUC zVz(jg3=g~l0cY$mZzl&3%xhCaRb>{mh~||sC*R6!^|crTqLM&3VDpy?I6wCRtcOhfmkZv|z0pEv!LC2M-6qUjYA zUVXF6DN^;#r7byGsk}KkLCh;Z?v*z%l^w&EwxriAJ8BpcGlst--2Q~L89gXF;#mlU zJKkl@*aAJ)jB>!gIiW0VMhlGB?2FBYxHBC2Pu7g?RWmOC+KmWE415zxezg|u^9+#i zs*hs$+*W&GE`wI`U0`-C_Yi*PC*rq#pjXmc=rFR^sIkw|r&0Z??31>BGqKZ1?E6=+ zos_w!+tmR5SlE-lkIv|PuzZ^esruEFm+|7N%iE`_ybjD`CX@4L-86{~#>KeI7q-lW zvu0EyOun*{n+_`fU+T^TKDMgJ|3PdBY9N3}RFphHiF;7g2!cV(*y?*4Q84311ec&9 zaRKAFg<)E|(_W2BL)1}&%NP_SqOEax5Efs;Ux5gSQMM@Cc?LBsLdK2%_g8gpZ|Q(I z41;-}cdP0wbx+r+s(bD^bOu6^$~zbcQrY2Su>seS*tZu>^o%I|0ARogd={3_p4AFc)p zhPg?pr@oRKUUQ0}OZM1R$d^KyTsVx{wuCF+D&btixeWQfFOKznk!M%m7mjNk>-&O4 z_7xKv-N8G#eWRHVT0{l-GQn`%W0t&W7}9Y%MOHC;hfRf(n8)Gc++%$g=lecC*7tdM z#&0Os$-iUm@4NZj>hEj6r~5UU=-VkZ{OHf)mJ}0L*#qKAw@AAc__k!HY#ayr_na5c zZU8%{f{?ysw;!Kj@5F!mR$YAe=TW8_+YoxUzyF;7!SC15Rev@1eM-u&{=DSo-$xko z>b3P>pVlWlbuhn>@B1D?oWk_9mS`W@9_#yFzV8nEm^Gcx1ixZef9v}8fkn;_zN650 zS@E#T5b)&2;x+_v$~x!6C4a>wO0jh4xqZQ0$5l#^*q{44`CEA%{ww^rBE>rSHEHj+ zW~=fWq^aoSVN=Vy`We@QW+PMTZfh@!8{3PiEX(UGa>o_&7f@sV_f2|uq_?u9+qm0l;^x~YxcPrgmPL33{ z65p)`Z}h-NqN2>>#fDqpqqTZV-yA`(eRHgu*~Wv7L~HYf8GRsW6244H=vzC7jRU8E z6AA;iz{g!Kzw^$uPbs=eagh1gYpZ(J{AQlVRP`}fw16$TQIn0I=OugVe*Btd^5{|n z_^Z*^o6oBDUnl)n{XR^m9Z)WXV9BtkFNPqB!&buAAHFJGX|~_2$Jy8N|3nS{Zus+i z_?AYxr-?(?>GTB`v&Y8Tow%o>Wlh3(iA_skZ_QNeuAI4E`&ZZBO@80bHTUnVi38>f zm*Cs(!=(AHTsk(}8uJ!di@ zFiF)3J=UYa9~;xM>ftx)S#vfKxU5!kBUUT9>TT)6KrMO*#zS?E>)}i+XS4*PNf^mZ zOp4Jy#^{W(zB4#B${6YDY;ek%t+!Vr^FDVvp85OCPTF7i=?&MZ-$v=?QDDB9x%%rC zkf#?P)~EoCL^azxR7GWts-8{!yXXYusW|5h3EXwGXTKFGi!pD{U0$zKzz+j!boC4l_0)z$jc7`w)WU<5IU7C5G9+mz4|moO(j8UPn;dVx}9SIl~OEOMxkWX zoSjH#`FMZ_1q&gh;l<25PnE2voXIpG%6hhnE`UZ^kEk4zI|9t?IHjUc<4(;um3PV* z7t3Od3`afBxOk9flr?(fN4C1GhrIXzKiy?5EFAJUlXa7UdL9RWWHyb<_uasF%)(M9 zvPse_PDy3}jlv+v_b;HQA40cp&P&NCMx+j9JcTGTRb5Y@p%S zzd?1YZZ@fPvp>I{SAgT`N|{V*yh*3{nf;aw<>gf=#gYLG`6*_xxo%Ra#0myTtF^2o zG+cci#aWKBe6h99zGo8)#N-F7BEoDjuqAx_^$Gyl35xXzuB=5ON|yY%%FGW3%FG2* zGk?+Yi@e1pW0u6@di{jrLb9T{SxkOEV|^zSkwRQqU^LdcI^*T9VfcG7hve*b`x3fV zWB8X!dc-&QT(1GbaiEHsEB{McIjJ0`mH|;KXR7EtXw=GKl`DF9D0=9WiXw=-Q`1h3 zI%SNDWidu8M?BBCa3mg-^G#(rr2M43=%oi8WcigbDiu@SKWsHkuF-Go7O5{XF0gru*a+h+Gv7n5K+~=)yxf@Zq+=YdwK4u-C;NoEg)f=#6 zU@ly6HqL<)%r*xlB!0qblIcO;5R#WF&FWU1d|-F@6yY&k2?#~F1cY*xmv{V7;9aLAvM;zI^#w!@qTo$#!H+o0X9b5^}wl^`R*7+U5{nL4Y!k)t z&w%J9ECuznVlf=X55q-$SavzZy@b#(@v8f0*Hr~+rhQrlRvclVEHzd5Q@^w8t}t^i31hI1OJeJm6x~}Dm{;OdxXns z9#?sZ?SS$Uf@{5mS^?{6XKgnk*f6pV17dx)vDP)8%NT22opGa=I2;|U@e&`A02`uK z>~z~=X8a4%)ZC&wWm6f=`FFu5Fu1^AfG1JccHEiB(&PC|L%_?ug>SO|f(= zG0h!QFVXRN$$j1nEdZk2m#XLrXq5Ye$`#{Dq%rOwMyMpyp0_AKtgchWxM*Q3$bHiD zj0?NWprYJ^i8vWoenswiD_vef6fSpR;aXz7)%Z12EG`~mGMv|>0rtOrFM5e7CB$O| zlgv&0Zj8`Nl}2@|qJy{!$|1-kMlUgJO-YX%R0jPpB!Kz=zT{p)Xn5!44PK(YyN~*1 zGcVCAUhX9fCDuSG>@gL z3p21KJnAr+@>8K0KX7H49O1G^&Q)IGYM{J?;94(X%!vCEvm~(_RS#-B_Z4Ejr?J*G zpS#Lf>*|afy+pVAqB_;^dI=DRxC-~m`HEVcD`wvES!wI6a^~y+#Hg){q(oHfc2Qf$ zRgPc*0lb(~Dk}YSYQd>Vr;Ks2>}z4=3C}Ywj4Yv|wnkazl~3fO6)TTASm0N>wh9Z+ zK!GY=VxE*ja=y}^`z?71p%pKoTz+=tjl=n-UgAl=XyPSiy^48>AEw_u@OrrsYhBwF zpEEBpB#PZ&faoO#lu|5N261_wKbYn-mKfuXsh7BALUQl&LfwEU?A|Kc4;tmZs?a=k z=&Cs1VG>|L)2Vi+dYo!?$`}(HV~OP!&oeHpCPPKJM@3r^`-3qL(m~-91Vv#v|4)3eWtmevSoO%Li!L z$`4bsN$zA^r5Pja>yokl5Y$*s*L<#QtaWw9jm~0QbxGA(>?b+m7sZchA!BRt z+{Mg+CrN2LmBh!r08wdss%RE8D(%Yc;*j*JIL=If5vNnFPIWug;*>G=*j@B*Rn>W6 z5nzBxk*KuOUMVPp;2Wdt8&6c4;#a!T3Jb0FU5PlPm?Wi;{HM})IbF^|XvJA5x7JxW z-&A|h>y^e4h09%77$h6A>@K?o&W9)BZ^*?WmFnAOu9Eov5Nypiyc2RnDWyq^3@( zDAbTs<4z4aWsLdOjV0PSx0Ez4j5A4$N*iUFRWUwy zK6e9%&Z0vpeD21Y?U6h@#?yS9Mfb&3XE8A@xrf_~$qFFKy@m1-Z3m5VpHVrYV2yRM z=#+{g%>}3Im{H=HoHE9QVv6FxbOVWTVX*}&$~`LDwDK!*pYlpWh{EMAEF9Igp0hCV zc<3h0nYC8Ug};71I*WNFB+01VBlEUTn6vOwrAa07Hez?ojSDbI35d?ZQczDTW*PKn z-iwU@{>z<(&~VEI4bGyzyRZFeGiNa- zCWhiH`n=eX6|>h6q3BMpfkgEwZWP5&VvLy2y_Cc;yAqI&j0s2QDrfN~pqz!^T4!O* zl3cg5wi_|iWOv~E+s692##+~W?v2J;S7+SlEKWrgYn;WeBuCt%_!S-S?hRGUT$@N~ zmu@A8Gg|;rQ&+2KD+Qy{POBWdOT-8@bxK8{=ABw`YSt-ZTr7(*N;~6u#)aV~R8(5~ z`Mk*}KPjtal%DiT1N=%?T4CXvtdUooML#KpWTVn&z9MHKwBjt3Tk9;GZ|W?*`v00Z zi>y~MXR)8%i4OOAxe04s+bce9&LS^rE;kN{&SFF<#gb)k!jtEZrujIFZGTdA7H|Ei z3PP5wHT-<_o!&? z%CE@1)hqQP3YWXE@XQ_7a~39^V&YOtI<52O!oq(=XVIkuPD#E+AoE=G4Iz1{Qj2a? zbiiw}iZE9Rh|a=NP)}v>trr12tQT7Ze9fJO(D36QH#m#>?*8t4GiNa?UhXUmn|E>UGupEjkT`MxY1d>A62Yz z7N<*&xJU6Lh``w9MgXjT6r{AhN+NOr5S4bIiVlHBrEOO^g0}@wQ>RoEs>`WSRP#rjSt zLMpiOL3v}Xt21tN7B58=Yn;WXml!`*-otk!P)G1?3NQEVqM?BBCFx-TSN*iT4qdSA>Qlv>#jg;B`rRZ&;()cT z?N1*zXOR^}NChA|iyoyAQXxP{h3EIC`8bPHxnt@qcK#2^z10h~1ESnJt7tc9l=~tJ zUdX*m#R;i!N=2booa%5YIAx3psj$TIk`f825MX77#3=WuXbZ}y$bH^Qmsb#l%UxKw zk}7KaT4%ASn-Egr4OlWT7moizbQVDggjCo)GS~CF5t5fG%_@r`LM;X1Fa{t zaml>Ulp3T`#cUTP2@kf2XF@r%9niDDb|6vMt=Zymt4B<4qL!lJ-;o|p!9_Em0+!!R;w(8osP2( zom%#oU3!gu81ZYN1$EG2OZ#4uE&M|J+!earHyO^`L7S2K^wZE7b@t94;md~t3+IwD z5su?dnB~Fh!M^drrjLfhPNwfReYCJ?o~nd4vh#y@X!@*>%DrV9^_QZAKQQ}zLTkgn zP(`*~6SQa{)M_HVFoRLD z8H{JhVEkZEx{5|wC*@4LaH9L&Y0t80RVL4m1|?27p2DlhQa<&~HEcXdN-UHaGt*5E zXk{VQsCuC+!}s}&q%A8wg?CbXy5K`2MiJ#w$Z#MIW-vj9-Cl^g$J)6>j@fXM^cx@l zsYU;WXkoK^0W-pVZ`WStLU~;E(^D(s!IHUA-FD0Nwi7LHH*oXQ>FNx$EajZ=pl$te zg2JO_W^h?vgZ;NH;GcRNod@l96eWmY}omG!e>hb1u1HwbRPxO;{@+v7?Xw4?26=BIU zR?g#uM0S8%x}WHq_=&#EOj@1ItCqKU(Li~@6YUnovOtVwMnSqn$=g_@Z#d|?rVdI) zIP+F9cELGecMjx5BVJ+B?If>|?7=mhgYzyLT9K}Dn@M-c(o@fKB38NegCs5QRVU>7 zQm>`d@>R>dbw%pCXj3#6^M_|LTBWFJ-_ljA45lb!H3@Yf-+9?y7*)Ne@Ip7n3`3S+*U#Xl0`D@=>>izUn8<8Gn|p-uA(=Y|`&ofKH}9WQy0 z#A>dCX<}^DC2DRiqN}7v`A*8Ni;4TBWY#J7h{=poZq&)NQ|^<>VvG!@3?#;dNF1mr z>p%}oDAQ#h39dlPrvnTo*Bm@ zb(b^`^&T-vx2=@2&Qiclu+-}*DrS;rc0(zIY6&ps@%AGHecuW%t!cTqljQ(QN$u@o zghePPSDEQWK$)pvYNk(Gep2;`dVq0FD_>}pb@i%zCA4m{M;WE5nVGmjVqnd~TI;~~ zz7#Wmc(>HcV((e=;0c=QR26NdT2!xTd&I^KF3EyZs{*WfIJM%`tW(CAH4jTH&v>43 zL7AbPZ!%y4Os162+`CcbNv|}^uXH677Jk624?X5H6Ema~lJ6+}d^~K?(27ATm!F*) zbmDwdoBr0fn%MNTS23Hu!-9>_3$N!Vf+uZ*$D3K_)jHNZ0MV>Rl!D?~v+d+>@<-Er z%zCFYt7iS4cS-J9mGvDXQSO7JM06N5%DqG7So08I#OaiZLUlVe;8d4W#+Wq^ODuPK zo^kR0CsFQFQCPGqzasZmuQY`yT<*fc^H$a|?zo96O4m18VdYmQab}`R_h8M#qPa7F z{(uZU?!PLv=vJ(G*d6VJZKSbE$qh6RTVJtg@0`_T&BLi6fcgORAtG#DX!zM_^|s#7 z-RGWxxgS$&?$hFvBr^tl!wJ!=P$qxkVU)pX831ccE4S9%oo{OH z=bqlg-1A<=%)K=Yp7MIRc57YRJKkyL-Xh93x;a21G$0yFdH)RgBfI5p{%F($&*63Y{wXIz-*gNkyW zHxc`8kc!+#z0xS6aJdT$FTZI$b2sr6(_Ksx#&RzFt`N5uxy}#sOpes3|KKgkeF9}QK%2#WTb|<3k|=SYB2Zu?!NRJjpp7ZKJ3vn zQ0ft2DGd;x?v_DBAt}~5evGMnm5O5Sov#+mWkupe0alYqJEa_8DXGPN2pJOk$W`Y4 zL7>cCu+iMbhsxrSR{nrh*43*vn)@$MrW$i^J=M&;MT|JTNPszSKryrPF;cq)g~;PD z0a5J~m>$;*)azIo&lMmxZ zWpEa|HLyJHm4^A1u6Dx0l^k7PG4~--3dtLke#40}ccB$?S8lDjJKxmYFFm!1xet03 zGxvw5;ZI&Km$%ln{rlU^+($(5^aez8A5sdsE5I>~oQREJZ>xL6ir+-$q&85bh9prYJOwOBh-ensx9 z78+e1Kol-_Vc`v7J##nl5SwMamb4p~3xCT+bMH_BpEa`h>dd1wHsa03N|jcWSaiS` zQxs!Nzy=zKs#*%_X~q12Q(mXM*gRkYsbTIy!>wOwF!%cIzV2&{<~}YyEQlB=O&KUp z3-Cw>SdZ|=<0&fUe!!1RWWR}Lhz*mGyn);KgLyM85-X7@K&IfcW4ateZtPCqEdUbWFFoQulUI0che+{}Vw6+hnr zQ_TEj$dpq_xG_MgoKU1jWREJYN2FhYA<@CH(0hALEm2=iJ zS_G2vuu)IV$GpXy!qTe!hyaLAVL>UZvk7pRujenO`8b6={;TQ~{^QM(`=l3| z0z|pbRMC0RDEDENV-Z+@MPR2?6e{o3v{R!_8DkcKEwMb}dB%lBV5lf}Q!Qp+lwXni zpjYZf6fSpR;iViMkKEV3&&LBL6PHplVx2b^ww@53!l-p>(qs3?v}y!}=d@D3C4~S) zyJIdZz{4G|fd*n;mV)n829J6#*6YQ(0iQu?I0d2M>d6MDP~Y7bf4R{qta@a3tJo!_ zb_3-O0VZewt!e{G>nSQ0okELJ2=?;~v58J$MI3oi5vVwY55HVgy0NB{N>-Y0466PC zw)rKs>!%`VHfwQ}Q+NtcPC>BIDToi1#Uri!WUH*JS8a3(r=xN;PQm1b!}T^Bz~Mp_ zGdI4$lv6oGC;(FBtfKRvsdB0u$|-lB=C>J&~rrHNB$ z_bTQT{$K$-%ma8m+lG=&+6LZaP9f_*q8|{QLXT32P_WjQjKa^R`8b8`zf^S!#~vlQ zx2i0=JpobfomI3OG|GKZLHR5Zs5lV{PN^u=ic=j<1*eQL5ek+V_opPrg$M-_qufok z2x3*GirnW#@ohy!;c^!i_Fr1hDVTV8Pw@sU8JG)~eIPo8padSsc8|=hj7;S@t(2cB zPK1KpF*hy1!xRvmf~DX)mBFf|7n|~86M)aUQxF<1_|FEX;0;Q<`v+fabP9vwllZQb zq%>kwc~ro6o^XbWoPuRA0Zm493PUQxtc({Go9GkTuEr^tyl}W;RN1l8 z3suZqGHA-F9F!A~DrXh#22GVyk?<&|ildxPbvm`;REJZ+sa8=arzMt`lt}oD0Ln>X zR8IXiG8UA&Ww`(tMo4E!Ilhw*b9vSqTKUUbOJQWy;tRUAs1jR#VHkq8gOdVseY%7aj`7M=ylffj0=18p`zSP zwU}*GensxxUTFzYxZH(>$6mRfQ!w$c0_}a6H82;>es6RN{YprD=SPyc`e<_sUdnfx z6yt`IT!(J#8&0BAuoQf!GWe>TH7wWe#aaNLbEhCQd}pG;Db#oOS3g&A3R{n2)B`{D zvQ{g`k0WfU@~89WhVWT+>wOa%Ht<)o-uLWd({)MCF(lj8`-C)K@3XV+)>-d6x?c_P z^**0)s9*0RY!P3ft9->lK=}&6)K@fJ?>o?{>FSjl*Zbay4%T>yFH3;cPsg*~SALC@ zbc7kz|I_t84Fp{iZAkdJUz#TRdY^_9L^*Q}UwxN6fY6Eu@WDo9d7yS}sPvg8=I;+l z8z*jkpY1Ko)~)xw;B{vE|G;|R?c6T4{nx!(VqMUr`TcIaPvc^jwXpEi#dWN{e!cG! zEU0n4@3uF}((je^zIfo1t@mB{>3TD-?bCBk#>S7YT>$9ul?hwcV`+KRl^Yy+v z2c%w0T5!3auJ^U@D_zNih5z^Snn(I7uD6if#x-1qhb9^@4MbA>*`e-&HZwesm9#5|Ad))-dbC~-q(JZ)Na6AJP3#*$>AzG3ThJIG)tAc zkJtP3cIIj)EL`!k8gpMDrI6^Wtl|2%%G`xk%w4&)=02|07t#^@C7)wVpyteX48%O&?&&4b@h*ZXD>h09%7IBH=%b2ss6wo-Q=ulG$L3YWXE@a~_kXYMARHS2vlz9pJ_{d(V%H8#4} z*89HfFYNOy6ohRH4d!0o-M1AR&3)3>9HtDErUiVVug9P6mNA!8u_stcZbD`7RRS#U zZ*#Cw)OI~f`BxiPLX_mhA!cfm$;pAq*1>Q?efR#{iC+Gy^pC{vBOKVFjX zFLW_2;j1Y2S*K#=X`7^WS>1v`B_P$cDykKcsCFGH$8@Ct(>hKKI@RsefKy#g8DoOT zEV10_dB(-p4V`Z?>ly6=d~DiFw>rr4D_!k`g}+`Xfv7`6XuVD~$IM*(xBK`;t;vs}?Buf*$WjX+HCF zhmKXv{Rc0W+^1ERX=*@}`+OB$1dVbZRXM&RCqQ_FQz{BI;nb{C<4zglVp)utpUZom zabal&D$0Gv zpWE$)QqqzC>-o7Uet~PEu<+*}n zc`X-geM^kpt&PY3+KbHg|AG0r!#`ZL{j**mvED!D=komY=xxEm$IoBK>g(s{o^~Y0 zel*+7YU1%NnL~_4B&(94a3YWXEaOUhf#=Xw`+{V|%M|%DI z+*>suy4U9CzV457o1Z)Q1NFAv(A`fPtvu52Zhp>&*Sll0@@({NaP8cK7G` zxqg17tDUfLz*#lso+X8yy-M#Jkhu%3n7eXo&AooY=4l^nV(z_O#mv1j9q;wh`MF;| z&&>TFn4cTxj;Xn?K38&|^{JhCfN2VICRH?m+T$WAjjP;!9FO0FC|vHs!g)Vh&)iKs zYv$)(`>JT}_49M@*BIzto1gmzQcL6U4}EWgxz~61A@6TA_bv&wSvILyewyi5R;j#@3aDJuc>HG}!?B#MGWTZ!W$uEF=5BoI=jWbbm38&1jpqJ> z-a2z1kt8bLo@i0K(s=w64wTy6pXcYg_?519!otQM)R=oGDQq=Y`r)sTxeKkByK-yI zz14nr`oez5zcn%U4zFV7UYU;fdg=V!EeDyo{{!=Lr*OyA+;@16ApG!10y4U9CPIGgg=k-4vbzFnF*LU|TMjFk1(q|H;4Ajog zJ=l!fBlLZKj+t7S`-F;C=jRT7is{#^Qa#fCS#Iu@QXgr*6EbA6ovX}!N1)7Iu+iLY z5~Y5AuFWdz>Qx)feE?;udGjtv63yr5KKX2^UDjKyX|(v18LXnip!^KhCrdW7b|25r zweTxl?SzHbez(TlSD8m)v0dR)Z|;}53$2*Da%;_fRKK#a`u2+Bo0$8GS21(1Ovih@ zbbfBz1I*l4G`Vxn=I74jj;XmnqDOMKX|((4{9Hg3E_Y$!`tPh~?k1i!^K&0MG@5(; z{M;8bHoDj5=T3KXxB0nuzoWt2>%04n?`|}Ao1Wtgb#){Q%if;?N11V#EW?BDd99PV zx2p`kN`UG3L!Th%`vBNDLh7eDR+6WCj|v=MDQU#(jmVJ2cCIq_8-Ox*!A5fzA1aGS zTKRgbtgBaTH20%XrW$kqtR%ttteR_1mRO$fJmZ3rLpfjHb-^AHU?|)*)|_9MDy|4goD`<4wciFPxu-%egKDIC*>?U9zRfy+gN@acHDQzSl=Dd^xype zj>g!R-zIIzCcAz1=`v^bdfQ+4iGFE;&#vn{JI=AO15Of-i%K%%m@`R}+;VC!N{6#q zW5xy)AqXqpGc>Qr$!}Y~L#`dhq)p2 z*AtGF>GV;gZ=6GAEGE$p7TNkxwi7TdJ5P@fX&OJtY}U|&Z%gy*Ilzkl)d~LC%Ofh7 zp1r2i)cmY97G}u!ws*16@TIrbcd?z#65Djr+cB=31x@wZjs5hUq|`5prAB}Y-VgNQ z?TeIckplPYQ5n8)B|wL~iWBYfxg(&MZsA(nEpMoH%eGIe>z4iAW?r_F3Pk7_;KUN6 z$_`4cMr9s>@pD(B*rY(B_0_H)wZ771m-Us+dihx(TQ5kvtJAv6&d$ocz+Px7-K8x0 z*19Y4`=>oNa!g&1d6c0|J#Re{jph5M-PW{ZNj#EFtHw0Mu`4ki_k+Pfmyl-?}qixpAZXSiZ!M+DkH{ zQUSh(pgca-0kEEYAq%f0w?kV`3W1&kRC}@&s*pU8YxrTGdQzwxp0X-E>Gw~2@|$n1 z>&X@?={-3i5hR-ZSb)B_uanJr)T%xh7U)rN-1>J z0PMR!4ZsA`0oY#4do8z&_1(UI-yN||+3M)(HI^^JQU6@N-yQYMPmvx;IrSGFBMI3t zn|-su`C?|jC-K!yf+(<74s6-89y}*-yL1G#^$8k51=r0LfD6*TEfdjps=7={Gb+av zgzmtGEvMX}B@0fi3UDTrQ^q(RipXHd^Nb6hYk`Wg=CDpbmds^6W#ugX!DXFC2;nXJ zn5@@sO4f=zr?Ki#U&bM?#S7S?CL@PrRGgB`hx9-%9!9>KaB9i!j@XDwu?^~WhBJ0= z_eI6jYvq;5hkXD)Kq}093Jn8qsJC4;BJI`?Crxq*_&W$Z;xMoJoaXF_P6@6X3lEr z>h+fA>rW1Q-xKSs?lk>2)KzUu$1pbTVgFB;bf#T7yvG5eqI6Z!9?+;WwxXFHqUi^S z`B9hjxdw>nQ>R!lfOg6l7t^!Af)e=}l>kw>6~2k&M8={rl5*Cl@`9DNJ@BqMBmCab z{aDkSxKc?9E0szgd#X274Lw#Jjlfdic=B;&Y zkHgAn>x}=1SwOVaDW&k84S_<*C}P*rd~EgS+%dJ)1NV{KM^x627mIS&&V-0gf=0P# zRgTjv1lU;Zl!`(PI+b^7z$s%~ERR}ZJU}clE;7g@%&{>kYV}yYoj?hEeJRYskPSm(uCn3R0cFF24K^$W`&<23ldrl{Q&+FoXv5z_ zLu#I!K|hZ-LbW!og|h1(s+hTXZ|RaP5fNHOQdFRsDyrqrs7u43=+dkJyZ)V0QK-CA z(@u>#WsEtJ!V=3Po@ZQewop-*BpO%@DWBcvUV6|$Kfls-NmzK>h8i2rlEU(%(zhHS z8x~rzVdd7^u=7oA_}i~&#ccS)#u&WMD2_ePFcV zpagdP+dVRW)o6uX|5mCrt3-DF+Z}V$0=$0!q77RL>S@I+gZ`ZIViSNLxeW^qm%gUK zhP^>)cb|VmqYaOWPvU2x@wNfw@2`nvV8bulUG{Y{8C!BEaph?$Vt*r|B|Zz;u&l^c zHvCMWY*?_thQ(lis~>AV!)og4^%`yXRy3r>hWCE0+3+B2uwetdQ;`Q zXBKrSOG-osK%*|Ts9Z7W7vOX$r&JWG!>L}U+MP1SoK|g#@$jz1xcJ_Qs7n$JELQb; zl9bglhRG|U3gs?-rR$QgF!iV!8}1~9HASUAphq?=v|_``t+iq2n|A6SUfaZmJG_e7 z@E6jUf3KGd*1EPYJjQHzQ4|AEK(yg`r4&n+Q79QTXREcAj}32nUDbxmdrIyT&SVl0 zg*{zGXF;Rfhg6QQ2nygWol;S#QKzPy8ga@P7t3Od2!}n-xNztwRFu0E3l@XQugHDC zE43pEm%Fggy~lbsY~o?%$$1SMmXI$`uyUZ{yfF#jfSt1SRf5f(n)Ezl%*uf! zmM1*VxZrQ0qAp1^QcmSFgYBh99kf(*Nm#h<;Waj_$>F#w_n`e`!`h%*v0DInVLfKpgFu+k-?nEXuhvEc%D zOvlnUKT>k9;kXzxv~D(ixj(`sbLx z8s4SmnLCVK#rdoM_as^AJ($1x-l0tlb*RQr*O|Y1)9z-gGkR_0q;x=h=1wW)uI8_H zdwJDXKk!h=-KLrTIp(ic+t;z!b>^>r^OX3^t)IWzhW7=Hl;xxf|Ks_q^WA`L{^}Q- z>J7MI{%XFz^345v=dXUu+cfG`HctMi}4f9v~?jl{9RL(!g z{MBhY*4S{?Y}n?nwtKv6_#Vt(-TIOyHr!id!|TjneQ8&-;jD|S9}sQ0$HaRV^H(o> zY1M|m-!8e^G}AxF{MCMK>)CMg`Kw1WzFa<*1>pMms{=J!x!2~ee(W|p!RvL{^+gRf zTt9#Hz)g)dJnApyd4Z<$SKDM{!`1mKp2PRy{MFNUuCw7c=;y_={2S)4j@ePVWYbLl z9P?MK_Z1^6`Up@83O>DTM#)j9Kzq)!Sv*AU(z1_3C&vGApSY# zulC-)#)fO=uRgdzHhd4}uipBCCN}(c%wIhM>*Kw5$VGNf=C3Z`j;RgryMyFz(@g&y z^H-;3*0bT}^H(SB6>YeF{;I4|%)K^$HRm>L^H;^^HP~?d{MGyWDmL6WfA!`)`Y@yY zOTKmAgPbEWcPyu?)~L1swMHeFu2D5Tf8xhhO;@kfc>ctps9wz={Y1&F?)-_;cGAre z1quCMeh*Ud%szo?kO-(g^5AwJ}%<2_x z#Vd(Q5UMrhWiG5nlZoUV3CWg~^{={V(;@msuPyE!a zTj5pV^n>cHyY~EvQx3+okEajpC3()yh*01p@g6;rVzUoJx<%F=MB#SXco0Q-S6OHE zBgr;1P=Ef!$w-V5I#-$LNkEyYU}~m!asEWfD(mW18~3n$6{V>$*2^V^IQLbo{~qKu z50H8-`4mq8q&ihaTdV3dZ4*ED?e`$_{7P3cVd3i^vL5rOu2E7rQcCIH!NYQ-lqEzv zRc?(zHylWC%5$68^oUn6oBmMq^C$WrXl9*vk&OeQS=$uXU7ZhmCwENE`pw%&?pbHj z4~TLftfIr9(X1_yi3M8~zpuUrIgBV=?!v;;KDdr?uXFyyPahedQx)f{kter zjk(__Ni;uyV&!iyN9_i5i~H&KAP4!Cu6Dx058qc~?gOM0l2<7G$Ggegg;t*5%B?l` zasA3dx)OQj0Zq)k->aCpkEcPLUN1d=;`J?N?kz5|RzNiO70tvjCbhdX`yOQbbE@V( z@>j`y)+cY~0nywSt7rg?=02`+_wo4?Sw!J-7ZwirxAn~3#Ixr7iK}*x=5CX-?4Zz3 zNHTxf-pqZ%g=8=0?4VGdhclst3M|>6=kDEq5Aq^6_kL=GOP<+a?)BY$-m~k?Jxd)Q zW7`)W72cv&)EyMNy;{Lky)r!5$$DwcK@=yW0kmInQ)cesjm3&iE%pV-a4e^*%>7@0 zGIzm7b5|`Yi$_|y&noNcRU6HH4rQt__f<)v`S}yu{8?(Zpt&4Y_yJMvLKR&FjcTV! zAq^e{?yK)X_V6oR?SzG&zNg0AyGbb|Pg45jJImaKR?J4?_oj-B0oBKR- zCgIwrHJH11TiV^1J)_>-H8o}CoY)Dlv~Wr@FG=k|6y^>HzxOGbNkBCB38hpIqUb>l?&D?F;tN#3nJ(1y9PFI=xqk%Ga!A5fz7tCEeQgeTlRo2z3Hk$h)%2Z?SJ3QUY zeZ(4Be?IIkcS!BB%DJDO58KYKbhQ%}u6kFExwn$So<61D*d}uqS}}L!)|&gMer4t9 ze%aHTn0t#?F>^mN4Gr~r>G=~Uu9~^8XcGROoj>uk{i^2v**{9|)6PWGO3~aEGZoQA z&}i_l(GZ$*A<;i}sj2{@mCSr*>NxB4hngcxF&!`|+bQ+aFqq@m4yY5lR z`hzC!Kv-irU1is|17+8Ojdm?AR2GlauK#G2b@i%^cHMG&on7zyRDX<%5ubGyV96Cw z%8*4nl6P5t^`p4!B& zb(RHH%&sfpqFyhTx7M|N<2HYc`;Qm}q>pi>@E8~1v(BDBoaPfQ`l{}#U7vfiJ;uFI zFCYrLzlsimrjK!z<1sEkgqu?;3f1XU)~ODsdJL4sn8?p|&ubN6avu=oZmLCyr!p#X zUp3!W)-fG!*TO>b_Vw)A#KU9UdM#-;Kn&(X(#NV)KBXAvMB9g@!$z*kIT7-QD(-id}ELBIvgM4M@U8 zSGQ-nef*8t1NMGwH#;}p^N1Jzpi2VcuV$a~x3)>=*-yNwGg~+==-i0q2W5+WtJxFJ z?|kifU`xzfuVjntb}sImEglEDOZLGJqu}cDFYb>2%l<+Bd;OjKZ*KX=+W+*wlm93F zLH@-ZvzPwHM08p0_Vc^#j}8BW`~CLr?$_bnU)TS4ZfrU4ux#P_?1?wE)Bh`#zHhg_ zr?XqL#T~LI+|0x;R<~(&`I_1vqYi5bK+AI;!W{H65^QP(A%`sL@SLTPf z+S<*}s$1(%`a|85X0A(58qPl{+8HRb#mp~n!qN5RS-2V3Zw2ZrYl71Nro>AF64!cL z>L>7ULtY?{MUCUl22H$)Rbx5GxoldYV83#b<7O$8wL)c0)w>h3N&ESu&56CnPFT^* zIa5Ad!zJ6=l#eB7r!LOH=GA>~ye-+lG<|ZM`*?eDc)`s*lxN9C!Fb`D@Zo`<=v)EY zL7z?9-uHWZUUZ5rg9Si*Uf3cH^Oedd_>xV{S`N>PCp@A0y!hm@o)=5pL>?00LbOvo zBH9Y0DAH+_;~Ue)y7@->6&2wb?j?t>3$R-Wuz|MF zKbFFxpcSjzWbY?uT#i(DGz^m;ws~y*qd|>GJM)kG@LV_^K`pmz{S|T2pe5%lZA&uk;MNE9g>)#n6BGZOZ^%`C zVMn0+g5X{Hg*L0Et5-6=P;=zQ2hrD>H_J2jwwBCtcVw?4H_i$23;)YUZpbN^pQt-> zqlH$xz6uK`vLTZG@^#!*dVmc`T*GD@F##NwVD5x7bRf`1S$^Y@8>c_koI)(95;%nw zFCPF~hvREv?U5Tt{MLL!m+bVOZCTjyaaG@N{EhMr!A(SV9UX$qKcezA(j(mMj9JXR zf8>UIgL#a)BR8}*AU?FGmBL1IfkMeBHa@2LJhYGFj#3tVeEX_v zCHGO4C9W0_Eik^6w>85d5LfpWfy zsTT55ensxRUTFqVxZH(>k%4v0(-euuxs?16E8d)*_qUB6+dQb=Wc#e$BlCI*7+65;?`q?&#-d;On3^$RQE);u%(#TN&uj^{w_&bor*c8y}pI*5`ep zv%-S+L|n(H96rzJX@38vm8os;drQad=#S~3$Mov*#rTxu10kF2cH$D!OxiXwHhSUA zBfXt1;d6g%_&s{RnBd)`Zu~H$nP~oMe%IDp(s9cPHw}_);|C$}{et%j)nL4`#E)IH zW$EIk#qd!(BVFT)@0%JYyIqW12|wS%+|DT9I5#gSgdec5{7M^Sk3bfZcXJKLtjc(W zY6QrMM_zK)o}@gfQ=2{N(Xv^^qxH@53>~&&xgo&T;l0%`LfII|NIo`-N)K8L;qhB< z#8>n2h+GE0i2L_V zGQQ^jVJqR4LBHr=O6nI0=KIbV>pLT#>jfXPt8-lbCZ{j`I=-0MS!bxu>aXdcr$5qq zsK=NfcOl$l6hV#x^To_Fu92UzwwbA2*w|1Ki>rV4Eu0-yVslcrXsigieMZ`&r=D#yNif%t;OB)(IV zo;UB*gj2@27>_^mvk%#9uRLN&0P**tOYy)mljw-?D0d(lm#DDtz~8PDN6SllaTAi+ zG%o-7O00MJD0BwOPasU%-m4KvJZ{VnATyVqxK}Qg?5R-jeQF*BXZiFxE%`MfIe11_ z{2Z_O%#ZHQ(`UnaJ+|=?^w|69kL3p}?_XDlpP6>+J`}3UL#fid2a~saKK;$phx>D5 zd`U?tDO~_}b&1gMg(s^o?6k6~!@Eu9bRDfErybeBi>$*@_*tfchs9R|58tR(Uo-V z4iB@gT`*P%T!?f}Skh%S;D4SZDPFlhn4+vwE1 zQxi_jIyLT;G3L9CmKaBPiE&|bB8kp7YEUwwVo6yo!($FRn5Xe>=EB0GZZI?7XuUs6 zN+J1?(toj{-WTe4W)-rk?vSEb(gYVp`~T%?()_+L9~GB@Bon3=9z6XI3eU z2?YuzqgY5z^9$#O=j>i}pI=#&bURd*7ZyMiX?GRv1&z|RAs#O*D$Waw052>~wK&z~ zl)b+feVED%izSx*B|R}NKH`khb=^<&;#!sNqKzlZ(}>BXD=eIi!AYIg%z2r*(4626 zSTQgccEB(2g3H-0mf$CI!w$RaV7uiFw6wg`H?#jYFESlJ1c9c!W7u-GVz!SetOJUOzXiFrWJn8CB<+C#{hD2iGw2JGD`$w^3P@Hi})Pjof@hHQunRIaj-XakG+et`168 z;1CMb{FZkcNB=GT50`UQWAeFokv?WuIoEeW$+-%yb*|o!+@RW%lpU1Rf^hj&`myhz zmVT^YK6fk`EG5`ohDjOA>FW1r>RjLP3%d5ScI(<9V}<4m;Wzi{o*eEZz63a2Ir5O(DG(`i1=^%}U!KWSFt1(!;?BVK3}5T!d_MJGX{ zbh9eQshe;7<1~UC6@a=&$xI%rt?i)<&s|IbLyu{x5q1G5tB<- zSUB>U^_;6!;}|9HseS`<;WTW{oU14JhTx>_CydEybf@m&F_;_Vr8pH-DJ;a;%}Yk1 zc2Jg&PJmvEkPe>F73Vr&H##?*`j9ow)ti!b=EP3xIamMrX}Mv_)j3z!y)^q}WJl+! z2uce!VbvUzAEJQE=v;+{>o`~&OKPFfI9GGT$!@o3c=Lodv%p?tYR**%C6}lboof#% zg=9Yo{p=vs73!+1tcv3j^NQmNXYN?%kh-m;JEXH8YR*-+;7$q%wK0R&_vq22yrA5q zq}=ePU&`M+6&CV0g8AGvWK^ANCutn>$2C0C+9=f9sH{pG#jesuZr-jM+tXBf-0ol8 ztR$SPgOU}vp{?$>Jj6KqZ@HD7H%#WjHlKSi>0@@4bA1q$oU7nk=jsi~&8j^~*+EGy z2=86gkKKV<`muuf+{F|dvui%rO3IjB{T@x7>q9T0YhU_c>)IA$g*z3(Z=TdW33L$P zsR}4&vKPzzhn2)MApo7$J5j!hPJl-9?^QWMvIXMVfJHxZkd+nB8}+;|*=cna% zrCgnJb=^y|Z`+~bT>EKDbgn}AAz6UthUpfe;UkYCnZqZ*t0UJ54R0=_x#TP&Q**9D zpnFx)N3IK`@Kq!U{m5&jx+(`|yTX3fVYZD_^ zub=A{o5W8HB*+3P>~NX<%^WP`Zv^wX=aNx%t}~<+lJ9U0XZ=QP6zXkMR;7(%S7{?R zpHhvlx0-Xc`xiGW3FqpdWCaQosQE2lF^>LQPGSOj%o>x=eVOzzyUMwK2};gYaIJIo zhS(8^{Mb(W%_X%U>~X1n>?zdJj}_#(LIzJ2uKC;~DPwl^do*>f-}@{K<2-&N|K*@7|lPB646!AX#SHbhrtW**5{OpLd`g}pEwa}Oh;*!uv8&UHvB1WgJMH0k-nX+F;NvD;Uj zYcenC_IROQKon_z6&(bP(rr~af+htBnsiDGw13F{%N?RZD&U8GP&2Cbw!qzq$f4V|pKeH70| zu3kSkuH?i+lnJST3a4Epe{%#Z?-HFKa`xS;9BSE z4atrAk9AN|3&PnK>c>8tTKchq`P|3J7_)0W*F(yfUHu+So$IUS=-N_?b#1q?Lf}I9 z&4aop$2$oSV*w~;K6bv$zgtNh?*u@nHFC{X(E(65(^8Adv0^Q-PLy=7=e2uDW6bg7 zmRN4}JmbRKB9!y>9$AK1# zgUYW+cfc#PBPN%wu<+uG*K@8W9`>|*7Y-Yk3ngsMoU13~`t2TV-(kc~qkBc6OMnfu z1yk!*O0i@aY~A$yo-`kw0KEYr9Xz8e&UM6YbZ+?MU#@MObFJ^p6YjijojF(k`Dv&B zE9L5(>#YBj_-(!Y$&Svoowi7Xv{xuUq!kdS1%!qRcOjYmrrxo0S6LOuCFT{!6+ZX3>uN`PtJIMxv#zyu zN`X`ioveJW!`j5i)$8Y0v%13e5oU4P96}XrJH6z!{jHCaSE0HB@Y&0gHyOi`X zyUMv<0ww1vxYoIPLvprBB`G^7sRiN4dHvX*QA>#QQ|J2E zbLiThKU>$%8!H4Zgx@?X0T&%`wg6Nyv+vn5|8eE;MHN6a|EVfE1L|g48dSMrGA)3? zJEfvfBTh{^HSClzE|$fZvDJ|085iCbp`5Sx05c29Ps;ONy5GSpjd$}G7B>E*#<|Xr z!h4I-x4T>#D%5*lS!9sQm#(nzdkn7m$aP*fDJBN^;)~sK zF7#k?=3G4?H*NQ5dnF@wnldSh0UuxkZNb#Wl|l%oK%rz5YM17t6QDODq=RR4#knrp zjm{0vxMPiT^`@kqx%Zz^=bG92m@8mk69JOcS%3KN|8DTF?toHGzao42hZxF`wQ??8 zd}&S0mEx_mhEW%9H6i8TuO{B=y%$#Ft;We-W{b%ALOk9|qsrZKQZfsxQsr<0zY&#P z$STySnC;A-INNP1ER9YMnCk4)xZ*diVj7BK&}B_|qk_1)&8# zSy;@u*7QwU$kjr{4ThCfb8i&snnB*RUw(A05G_PEK7zhS#pNa1ut==f zgc?uW*aY!yuKF~V%_;udff*uFXc=!YqEr;h!kAc` zcB<9$j4@wxu*9;0j3{Ybn0bV9zLHt8;sFnXUNnf}Qx5z@H&$Wc*WUg9u$F^hPo&cS zyrAwE>fNs_bjG?ragM33|Nizm4KTmr4r}Yj_fV(=()Sv^2_R*tr&&sJC+EV zdJGQ3&i)-1S9T2BJu(L~)W-P@*{w=hCGxp1yQ9as@SuU(KUF-1bd%5+G_{L+ntv{E{_v~gyA+hT(WNtO1u=oKsJSdEy;(&eM$@voFQ5Q)sg}PoUtD={7%R;J` zhu>DGm$O#VJ<}a5cGriC`R5-ibss_9<*Rshw79SqXrT>!izT7qS3D`)xs(EF>AkQOZW{xgM}F=7G}8Sb7#|xF}uododqSoC7AlH7cIXivNmR%1SMvyJUMHl z@LnG=)@K`QUGurk##&cry!$Q79S3(2ZiL8!K`zx1(a_)^AJJ^Qz+K ze??g@krL4r&?swL{3Rwx#hK|9;7BH?rkz@JYRV~NT(n&h$T|il7#G3-C=z8Im1|s; zDzeTSr?SRYE^A@oo5!r@$xJ+z&wNf=PtAn^Ox8TvloFC;(C(3W&spZlyi{paiLCY5 z9X)i0wH~Mq(lK_(c!t#_{@bY`0aOO?J4A&i6B;)CuECSlcl1FkYdzVf@5wZ@;;p}M z!0*j8y2YP)B?IYLD%UBJSz&>s)b3P=m5F)rl&;NL62ne!sqtjv(!}JW660qskZKBb z)l^nRHSLxaZ}ibW)Tw6PO1f%3Sx0=<1-`~;mQ=0#scW9BM=kUy6@R%ewW@jTJiVj4 zu@XscRV(zIrlIl-Eo{AhOX%Qd@G%Aw`3eKqeC{JOgU|nRl_&c!P@YV1ttT^PNiH~R zyAf|Ek@e=I#rh5?26SBWxty`q)fqQ>vR7j>HJQ#x}PAC}v92vaSgw z&Dl2`qe)GZ646;u^*Wt7q;gD62{1L~l!`))IyL3gh*QRxsVPe=4||?*VQLD>`KGcQ zR6aoqUV6a62*1*;OIYZ4b#YHNObXvuQTkivq%J~TU6fT(7w4FE`D=eyr!GTQ($(c} zyF^dsHFEvdqPAVmG*8wmiis>h^km&iVIoVQat2vXn$Ljj9PX8Rvd5nxS+}UHN4`V> zcaRd%F3>3J1ufR{y=4_=T;P<7LItPVomz6r7#HKmAIpnMsPJUtq=XYggD3L_r5*k5<+Yyd!|KZK zGiz^u;T>DeG=}_c4l15(K&k0x8%tTI`n{;<`L`02&7&lS(wAKNFRdK)+F1{<+Ei0bv+~3xzX1|qm)jW#zoCZ%;U-!e*HBUB7W9D+t=epa4uim~` z5*EVVKI?!LE1!3c9s~YeOSYGYV%Rjvk6>F36x(XJ=5sHl5o30hAA1Ru{FvZcKPEZA zy30UfH{wYkO7D}#`dLtXjg@OYx5-%R>Wmxx*r&c(=f}>!(K@SD{E9gP1Rp_hme4n3 zTZ>wQ<6{eeXizIvw1tA|bR;mPa{mj#A@=ht!69lHV~PpgtWfUdSGsKp3yZES?#Fsa zAvjFwUpiOHBGmnuvMPSeIi~7e3U$iTZ6#eWC2muTE2|v5NMROt+(>}rsA9*B*4nCQ(aE=JJsow zF=i*2C6+rp&$zHO1?7BG|X zy5`5G)j|(xc!SBbG^*x(@FrJ9?AS^qxnUKIpUq@@uPEHjhxr+Vk3$i+%{8Cfoo0;L zRi5l&Q1WDgYdx7Hp@|s-iQR}Nfhbr%(O4e~MX)y4d~P>mt*bL`^kf&DTIb3B^c(B0 zUh!k%!Pw@qfMRCbugSXFl|-m4AevNH73~34wQ#z3lO30)T-xoIqAKVaAj*2YicW$?S!Y#_*Ea#;wVhH?C}g0# zyi)^C8DrwLEwSA1dB%l!ZKx>gs9e3uugJQ`E3F_3m$k5P=n?CU$V@y;lzM0P8<-1! zIXil?0VOc~V)w{Al2Jdt%S)BImB@BIyJN0Xz?bEtC$kh((u&!7Jr1wKi?ss&KXLB@ z7)ep>|7Ve4d@LKp)%b#-h*3m>f(AhdSE7ULLI4+ofCNDdK7;IPMA59+I+L*_ilf07 z!52|c13HpLgV|Mg1EK^_i1;8ru2dX^fGF_=|IhcF?w*-s*Nfik|2MnoQ>W_msZ*y< zovQA7Ex0FBFx>OYC7!JQLI3(!%RSj7-QwIP=|aD7`|VaWf(;n@IDGXh*{lsQ#&ZI( z54+RHby82W9n1JIwLoO}`pKrQciYGNAWMvYD>c68TQW@r-87YynWp8Od9rpSW_U9F zem`fF?#XWCb2lzx%7lrPA%=(Wx4JYSV#I?s+U^}BGN@>_Y<7?D=V&G92BS3%_DfrV29uqxF zN#M^>!Cs_s(&w**z?3yZBr__xhUTlKECpRzO3IWqCgz#49!6w1;g1tUt))2 zqRRw*jo^6r4$DQlXHIYlz@Pk{NR0*t``5-UtbVeMWjkCWLrDa!`I{^(Yy zVED~XmsnxFpg;ckQY$>f>Uw5{H{WJj9#JMtjx~^3VP0q<9u|m81C9+Ejg9*wy+y{8 zqeOFqwU9n2a6l+;#R=79v)>Q9dqjbf7ADJ(Vdtvn^K#Y_?!n*+Hq(u*P|rFE1^^ z_<{p4EBvsAso4XKl9&}L0NzV_)d~lR@(4PE<)V+e)VWr*ssWf&wWUzKtyed^eGUD6z3oyxLyZ>c7w(pHc1D)=B}uJYdmOHv%Ejx(fa5ve^KdNOt3^g^{>3~B zdtM4~^UVAgVCAhmG09}5SA1O$%O@+1qNU)(BTM%eTl-UcQjm0wFhoCRWHx(ge#0|) zQt4EI!j{|xTbM1dj=^?zZlKQDDC63}oNead$l*!PYQI+ZkHZO!z)gk;2iYiKw@Z(*;1c*w4d@R186d|YjW4`?HN!1OKb$jXrkQ_W21 z;9i(&AlZUAlrJAIrY|+7x-zzBOm$^!k89;C_45;s`lO65o1bvrPt0+&h;`9U`9eFb zV8zA@F4j9i@NvxrfV?r4uYuGgsEG$eQiuP4*z&C`v3Tnmv*FG1IEC{U0)@g6s5g80 z()1#lOU0i&E~`<{twu?*8rvPiIi}6!F}Kv2%BWGgsl0Wck zT}PS$ki2{iDu%V`0)>)cJ{chWjC3V=>CtMj>=Q?%=x%4CDFTUh`>MeKf{CJAMaR}S z0!%4&Or$ak$9f%Wcgz^GHI7A=+dR#<;Qzs#ubEYg5?SKnif;BhM$m&RTA?s|oGE%c z-;nG!KGfUYvCTihdA^5gYu}J;CQ9sE1H_G&svRnpoT}8Mtmt`Ijy@v*Lj&7O)|Jc= z@O?4Blz^Eo_;~6Z;IF8RZ%7J;x81nJ%ez47Q||k5U0=iN*Xq0VBsbB6v|l*mCaV_X z%Ax4v>X}E5d?YgVQOeS=Xjlm2q@HGj@dsh_>M&Qu4D(oOXTPcw}v7i&dQXI&a}LGuE9`*v)=$kHKs zi}Znf4RIzbdnad%HX4wS*M1A%UBB5wy=YB{HvbN6Ao1Y+Do^|d-Fw63DxiX1KqVy} zT)fduuL&0mWFGwSPpd0ypHt2P=5K%MG7sKk1u8keWGj&L(f{zN?!hOgMC4n8@Kr^2 z*iB5>kM_^)!8hMy`x_Cm21bC&W?*YLXsx{Nv0w}baAiL*q+vHOu5#sP0p-dCQ&(P{ ztYOSz--M2?x3g|fSl_lrtPeNVy5^(T7;9af@zM`!10St(=wH0SEVo(w*f_}8+B}3} z{jt(zEDwkZDnUy>au=ys%}tfDx_ z^pT%8Q)fImqx6dMnbyRo`yI9|M=oBuf607$Uh*-}21tDRfMR$n7buhrHxsRW$708ZY?G)nq6ck2p<(H|^v>-7)% zLqFP{TYs!oj;xFQf$Obuj46j=txC$Q)nv%r`t?7ov(`4FbZfouDdyIdOTAkk zAm(a2`7@b%z>*db@z!ayu?WB{lI@bf{G8CqX-g=#S}s4r{ybD_v54!4@KDrDM3^Zr zbNuzfuR{3wld6utiMyC1tb1?yf>fZOt3XMK;}>tV*CSc{+_lW{@4-f#HC^`xr$~pV;=s}rqbeDe>Gj7?P8|P)hc^TOQHO!pRTLXW zcl*$nT6dc?PDkU)0+9uUb(Q0P04T>VxZLp@Gsc9SwPnQDGGVa()l0iFM1T<7@5uQl6l62GGDCxTj=!HSKWVmYH(4c9Ry3`m^OLN(X`Vd9L&M8}x0 z0IuFKk%CP*795*!%owv_fJK(aJb#PA}k_z!+gcBG)&k&?2i{`* zxO&G#3fAUWw_~l28DqwTEwbF=X~u;yVX#EkiE%Y4J=1lA-!zLVT-OSPCJaxaFL(T= zP{xGqNyRM&wuLLH%RVNo2*!kM+_~{ad0KX`Fsjm`A{i65QRpZL@W~U9IDU&srYSHc z>|}FJHUs#(JAMVjW#3=o`0F3^$n^Fc|C6k8WRCx$tyVckl>-ZI4P=ggSSUSsfjAlZ zkMmCIY0)59c$Zdi@d*R1nd4Uge2ldD>ruRaupp8T7Sin8rLtB9-CC!OK6&*t88QcT z^R_x`oia+d*1s{QRE-t6Y|@veT(P?qhmpHrD_>yB{SuSjhyWAI9qSV)`bHQ9+o=HU z_Yi6K$CFb=R-Uk2Zh_K6(KrzyOfW~FzJp&c>obsb{&iJ9KgM0WZ0p{;Mpa@3y~IjN z{JeOhtZrq^=AD4d&p)5tE^GY!s8gDse}Hr1m-zXdI51RVR3*bQHQxES#LtgIbk?@$ zC4i@`SanrNf$*v)1haH?ZpDNzDh6WLM{F3b_;+X^A9ay7WLMT$lNpPfxys9b8YnL> zxZKMdGrYXBwv4FD!eCuA)-N#Dy5^%#8Eajg@lr2;@lc(YzwW#4<;4##Z)~GxK(X=W z_nVhrBn2-INWFYD*Z^VTdB#MCmlwdxJGS81lw-lM3CCs)l*Jgk8}~Hhf|mzNJWry_ zQKjQ~Ou+Jp-!x1q-Sa3E_Sj^zQQXVtiQzq1@nfHs6)EUeq@=2sH;$>7|HSv|OlQz2 zz21D6ZK2%D+a1xcNwl)N;9g!BULKHodBx!61@Q8oK9Hv4Tph~4a?AF-{9#r(vadE@nQ||$9FlDns$Xq} z6^oY_z{@+9cT!KYi4S3fl|z)KAFY{}R{(qr%Bq*|Ba*Ekq}jiILe{FFTdR^XYaO+0 zQfvLg<~nQbHA=VE)eLLP%R|3CFK=x8*f+eqV|@a6dB-dgFAtV_c}pnwST6GN9*Vk& z2s?d!xtBNkRMsPqwbsk$xT_E!se7BO#0q+em6UjS@kUwQVuhCnWL~~|x4Oc2I;DB} z79CYz-@p?`dNKzNP)BAD81hNBAegoN*XqaR=(~6_wp`y9*}x@#o*-y@baEM zkf!5kp75Qjm)|&OUfzjvfYi%ZgM9>3FE2X0yZ~O_u^z|T9P4(h)v-1 zuV2`9wR?HxfR{H=?aK?r%M0M;9m^YyZ#=+8zhL3Yd(6u>qc!vL3dqZoR{b{LL?mA@ zq}j)QRMx7XTdR^XYc&}%_w;ZIQPZ7mFiN-9{joxMd6Ng33&}ugsb4Y4wgz!B^d0vZ zSu%Mb?iGfE2kea+HtB*7oU%KkMMkB=exFX-@scn%=s^sfz=aWK^Y`NuJj61K{LNUD3V^ z0wWpfZFCY7K16$@-j_P>qTmC%0iU}0`uqWQ#5SIBtAVZIFk`(x82h_%%}4)jtaWw9OWpd<-&N<duX)x!T>T*QsY&&KGmWTbOSxV`yMxk&c%E;XM3^7cSQ+(yavLglEj+B&D6z7;e z@?TEW8PBv)dPUiVVHxYZ`yIAbLoQx<(fQ`q2P6^S-T{eQ?^6t0yqTya!5Rdzx`! z;tE)z>%_Pkl%DB&(I&@~r%;9KTA}co19$X^#?-?WZ}z0(W&_*8D(bRz-dhyG@Rhj6 zjn9e9tvgj|L6Pk6>(g=O1Q-

      ?IpxEY%b2UZ#vVHtS^50BMaOR|Uh)-&o?->mT%= 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

      FbvIjm7@e-7dp2;xu0sa%(Y|1nLo8=k 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

      =Bux)#nu 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�iz6-c+e=W2UZ;P{$6?q)~2WAVrwm= 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�ylLf1m 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

      $&#dPoSX$Z-8_s>@a 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þz`7A=`jYVc?aG0t=3$r^t9`U>Q=DPBtG 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 z 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 z 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⋙Uf9%czt=KMTW$gv6=gp7eIfrip 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

      83yF{&mWG#Ii14xtx0jP0$hKHxf^4~>y7#(M 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 z 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 z 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�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

      Z6YXhmSR%TAVs{&2Y1dSTo#&qey9Nr~r-k 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%0D+@mS^U(_btY3je_!aq6nW;LzrN+TqPww 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 z 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%0ATsZ%mZBZ!_FgZYW)G>%-h^q%$*ZDyN&%aVm~w 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

      A;sP&$(~VWH|wAQJS| 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

      GW;v6vL@P~w|+rd46T>^B1S4U6sP(blbsk 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%0Dn&F? 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ꪪ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

      kPVCjeN@37@d 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%0AJkrEfb%_;Je*jeIJfdLES4IdI%AX!?- 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%0Aww;ZPst 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 z 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

      *9Ms*`SoY-@Y? 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 z%0A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 Date: Fri, 10 May 2013 21:33:58 -0700 Subject: [PATCH 369/410] Test case for issue #4202 --- .../mod_trait_with_static_methods_lib.rs | 22 +++++++++++++++++++ .../trait_with_static_methods_cross_crate.rs | 19 ++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 src/test/auxiliary/mod_trait_with_static_methods_lib.rs create mode 100644 src/test/run-pass/trait_with_static_methods_cross_crate.rs diff --git a/src/test/auxiliary/mod_trait_with_static_methods_lib.rs b/src/test/auxiliary/mod_trait_with_static_methods_lib.rs new file mode 100644 index 0000000000000..b060c7aee49a2 --- /dev/null +++ b/src/test/auxiliary/mod_trait_with_static_methods_lib.rs @@ -0,0 +1,22 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub use sub_foo::Foo; + +pub mod sub_foo { + pub trait Foo { + pub fn foo() -> Self; + } + + impl Foo for int { + pub fn foo() -> int { 42 } + } +} + diff --git a/src/test/run-pass/trait_with_static_methods_cross_crate.rs b/src/test/run-pass/trait_with_static_methods_cross_crate.rs new file mode 100644 index 0000000000000..1af8629468024 --- /dev/null +++ b/src/test/run-pass/trait_with_static_methods_cross_crate.rs @@ -0,0 +1,19 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// xfail-fast +// aux-build:mod_trait_with_static_methods_lib.rs +extern mod mod_trait_with_static_methods_lib; + +use mod_trait_with_static_methods_lib::Foo; + +pub fn main() { + assert!(42 == Foo::foo()); +} From 9b30fa31168c9337da36a95484b2550954528216 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Sat, 11 May 2013 18:18:02 +1000 Subject: [PATCH 370/410] Correct testcases that passed because fns with #[test] were stripped before expansion. --- src/test/run-pass/issue-2904.rs | 6 ------ src/test/run-pass/issue-3424.rs | 3 +-- src/test/run-pass/issue-3559.rs | 6 ++---- 3 files changed, 3 insertions(+), 12 deletions(-) diff --git a/src/test/run-pass/issue-2904.rs b/src/test/run-pass/issue-2904.rs index 77cc6b3e1b5b5..304d8fe288465 100644 --- a/src/test/run-pass/issue-2904.rs +++ b/src/test/run-pass/issue-2904.rs @@ -79,12 +79,6 @@ mod test { pub fn trivial_to_str() { assert!(lambda.to_str() == "\\") } - - #[test] - pub fn read_simple_board() { - let s = include_str!("./maps/contest1.map"); - io::with_str_reader(s, read_board_grid) - } } pub fn main() {} diff --git a/src/test/run-pass/issue-3424.rs b/src/test/run-pass/issue-3424.rs index d79eef46f0523..70a01f8cf02d2 100644 --- a/src/test/run-pass/issue-3424.rs +++ b/src/test/run-pass/issue-3424.rs @@ -16,12 +16,11 @@ use core::path::{Path}; type rsrc_loader = ~fn(path: &Path) -> result::Result<~str, ~str>; -#[test] fn tester() { let loader: rsrc_loader = |_path| {result::Ok(~"more blah")}; - let path = path::from_str("blah"); + let path = path::Path("blah"); assert!(loader(&path).is_ok()); } diff --git a/src/test/run-pass/issue-3559.rs b/src/test/run-pass/issue-3559.rs index 334831fea4d03..b3f3aed9ea1f9 100644 --- a/src/test/run-pass/issue-3559.rs +++ b/src/test/run-pass/issue-3559.rs @@ -1,4 +1,4 @@ -// xfail-fast +// xfail-test #4276 // Copyright 2012 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at @@ -15,7 +15,6 @@ extern mod std; use core::io::{WriterUtil}; -#[cfg(test)] fn check_strs(actual: &str, expected: &str) -> bool { if actual != expected @@ -26,10 +25,9 @@ fn check_strs(actual: &str, expected: &str) -> bool return true; } -#[test] fn tester() { - let mut table = core::hashmap::HashMap(); + let mut table = core::hashmap::HashMap::new(); table.insert(@~"one", 1); table.insert(@~"two", 2); assert!(check_strs(table.to_str(), ~"xxx")); // not sure what expected should be From 3c1e78788423f6036d370c4ea37718f3494868e7 Mon Sep 17 00:00:00 2001 From: Samuel Chase Date: Sat, 11 May 2013 17:40:52 +0530 Subject: [PATCH 371/410] All tests, including newly added test_hashmap() pass. The empty Hash Table doesn't need to be mutable. --- src/libcore/to_str.rs | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/libcore/to_str.rs b/src/libcore/to_str.rs index d3e3d8348b1da..a54bb7e94a2b6 100644 --- a/src/libcore/to_str.rs +++ b/src/libcore/to_str.rs @@ -175,15 +175,17 @@ mod tests { ~"[[], [1], [1, 1]]"); } - // #[test] - // fn test_hashmap() { - // let mut table: HashMap = HashMap::new(); - // let mut empty: HashMap = HashMap::new(); + #[test] + fn test_hashmap() { + let mut table: HashMap = HashMap::new(); + let empty: HashMap = HashMap::new(); + + table.insert(3, 4); + table.insert(1, 2); - // table.insert(3, 4); - // table.insert(1, 2); + let table_str = table.to_str(); - // assert!(table.to_str() == ~"{1 : 2, 3 : 4}"); - // assert!(empty.to_str() == ~"{}"); - //} + assert!(table_str == ~"{1 : 2, 3 : 4}" || table_str == ~"{3 : 4, 1 : 2}"); + assert!(empty.to_str() == ~"{}"); + } } \ No newline at end of file From b8d0ebe124a574a55d9df7daf2b704802443aa2c Mon Sep 17 00:00:00 2001 From: Samuel Chase Date: Sat, 11 May 2013 19:09:11 +0530 Subject: [PATCH 372/410] Remove extra space between key and value. 1. Extra space removed. 2. Using acc.push_str() instead of str::push_str 3. Update test to reflect representation change. --- src/libcore/to_str.rs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/libcore/to_str.rs b/src/libcore/to_str.rs index a54bb7e94a2b6..3806335e2408b 100644 --- a/src/libcore/to_str.rs +++ b/src/libcore/to_str.rs @@ -15,7 +15,9 @@ The `ToStr` trait for converting to strings */ use str; +use str::OwnedStr; use hashmap::HashMap; +use hashmap::HashSet; use container::Map; use hash::Hash; use cmp::Eq; @@ -59,13 +61,13 @@ impl ToStr for HashMap { first = false; } else { - str::push_str(&mut acc, ~", "); + acc.push_str(", "); } - str::push_str(&mut acc, key.to_str()); - str::push_str(&mut acc, ~" : "); - str::push_str(&mut acc, value.to_str()); + acc.push_str(key.to_str()); + acc.push_str(": "); + acc.push_str(value.to_str()); } - str::push_char(&mut acc, '}'); + acc.push_char('}'); acc } } @@ -82,6 +84,7 @@ impl ToStr for (A, B) { } } } + impl ToStr for (A, B, C) { #[inline(always)] fn to_str(&self) -> ~str { @@ -185,7 +188,7 @@ mod tests { let table_str = table.to_str(); - assert!(table_str == ~"{1 : 2, 3 : 4}" || table_str == ~"{3 : 4, 1 : 2}"); + assert!(table_str == ~"{1: 2, 3: 4}" || table_str == ~"{3: 4, 1: 2}"); assert!(empty.to_str() == ~"{}"); } } \ No newline at end of file From e2c73ccaf22ec3908cf77e604233c5833ac5ae7d Mon Sep 17 00:00:00 2001 From: Samuel Chase Date: Sat, 11 May 2013 19:18:14 +0530 Subject: [PATCH 373/410] Add str representation for HashSet. --- src/libcore/to_str.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/libcore/to_str.rs b/src/libcore/to_str.rs index 3806335e2408b..299ba45986e61 100644 --- a/src/libcore/to_str.rs +++ b/src/libcore/to_str.rs @@ -72,6 +72,24 @@ impl ToStr for HashMap { } } +impl ToStr for HashSet { + #[inline(always)] + fn to_str(&self) -> ~str { + let mut acc = ~"{", first = true; + for self.each |element| { + if first { + first = false; + } + else { + acc.push_str(", "); + } + acc.push_str(element.to_str()); + } + acc.push_char('}'); + acc + } +} + impl ToStr for (A, B) { #[inline(always)] fn to_str(&self) -> ~str { From 9ed9e8c8d0ff0502697e715c2cd0cedd3323d423 Mon Sep 17 00:00:00 2001 From: Samuel Chase Date: Sat, 11 May 2013 19:25:14 +0530 Subject: [PATCH 374/410] Add test: test_hashset() --- src/libcore/to_str.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/libcore/to_str.rs b/src/libcore/to_str.rs index 299ba45986e61..be0aa5138c7bc 100644 --- a/src/libcore/to_str.rs +++ b/src/libcore/to_str.rs @@ -209,4 +209,18 @@ mod tests { assert!(table_str == ~"{1: 2, 3: 4}" || table_str == ~"{3: 4, 1: 2}"); assert!(empty.to_str() == ~"{}"); } + + #[test] + fn test_hashset() { + let mut set: HashSet = HashSet::new(); + let empty_set: HashSet = HashSet::new(); + + set.insert(1); + set.insert(2); + + let set_str = set.to_str(); + + assert!(set_str == ~"{1, 2}" || set_str == ~"{2, 1}"); + assert!(empty.to_str() == ~"{}"); + } } \ No newline at end of file From 7d43b12c323b07d3f3d17738d808071b66519c58 Mon Sep 17 00:00:00 2001 From: Samuel Chase Date: Sat, 11 May 2013 19:31:53 +0530 Subject: [PATCH 375/410] Use acc.push_str() instead of str::push_str(..) Also added some whitespace to enhance readabilty. --- src/libcore/to_str.rs | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/src/libcore/to_str.rs b/src/libcore/to_str.rs index be0aa5138c7bc..3c75cbaec15cd 100644 --- a/src/libcore/to_str.rs +++ b/src/libcore/to_str.rs @@ -125,11 +125,15 @@ impl<'self,A:ToStr> ToStr for &'self [A] { fn to_str(&self) -> ~str { let mut acc = ~"[", first = true; for self.each |elt| { - if first { first = false; } - else { str::push_str(&mut acc, ~", "); } - str::push_str(&mut acc, elt.to_str()); + if first { + first = false; + } + else { + acc.push_str(", "); + } + acc.push_str(elt.to_str()); } - str::push_char(&mut acc, ']'); + acc.push_char(']'); acc } } @@ -139,11 +143,15 @@ impl ToStr for ~[A] { fn to_str(&self) -> ~str { let mut acc = ~"[", first = true; for self.each |elt| { - if first { first = false; } - else { str::push_str(&mut acc, ~", "); } - str::push_str(&mut acc, elt.to_str()); + if first { + first = false; + } + else { + acc.push_str(", "); + } + acc.push_str(elt.to_str()); } - str::push_char(&mut acc, ']'); + acc.push_char(']'); acc } } @@ -153,11 +161,15 @@ impl ToStr for @[A] { fn to_str(&self) -> ~str { let mut acc = ~"[", first = true; for self.each |elt| { - if first { first = false; } - else { str::push_str(&mut acc, ~", "); } - str::push_str(&mut acc, elt.to_str()); + if first { + first = false; + } + else { + acc.push_str(", "); + } + acc.push_str(elt.to_str()); } - str::push_char(&mut acc, ']'); + acc.push_char(']'); acc } } From 37bea2a7d07b8a42d9502b7318cf9317ad3680b1 Mon Sep 17 00:00:00 2001 From: Samuel Chase Date: Sat, 11 May 2013 20:35:44 +0530 Subject: [PATCH 376/410] Fix errors in test_hashset(). All tests now pass. --- src/libcore/to_str.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/libcore/to_str.rs b/src/libcore/to_str.rs index 3c75cbaec15cd..08e72e8fe8624 100644 --- a/src/libcore/to_str.rs +++ b/src/libcore/to_str.rs @@ -178,6 +178,7 @@ impl ToStr for @[A] { #[allow(non_implicitly_copyable_typarams)] mod tests { use hashmap::HashMap; + use hashmap::HashSet; #[test] fn test_simple_types() { assert!(1i.to_str() == ~"1"); @@ -224,8 +225,8 @@ mod tests { #[test] fn test_hashset() { - let mut set: HashSet = HashSet::new(); - let empty_set: HashSet = HashSet::new(); + let mut set: HashSet = HashSet::new(); + let empty_set: HashSet = HashSet::new(); set.insert(1); set.insert(2); @@ -233,6 +234,6 @@ mod tests { let set_str = set.to_str(); assert!(set_str == ~"{1, 2}" || set_str == ~"{2, 1}"); - assert!(empty.to_str() == ~"{}"); + assert!(empty_set.to_str() == ~"{}"); } } \ No newline at end of file From 82f963e347fa16ac3824e81c53f5d15155fe319b Mon Sep 17 00:00:00 2001 From: gifnksm Date: Sun, 12 May 2013 07:56:08 +0900 Subject: [PATCH 377/410] libcore: Change `each_val` to follow new for-loop protocol --- src/libcore/old_iter.rs | 2 +- src/libcore/vec.rs | 25 +++++++++++++++++++------ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/libcore/old_iter.rs b/src/libcore/old_iter.rs index 8e31bbfd8781b..a596b07dc78d2 100644 --- a/src/libcore/old_iter.rs +++ b/src/libcore/old_iter.rs @@ -93,7 +93,7 @@ pub trait CopyableNonstrictIter { // Like "each", but copies out the value. If the receiver is mutated while // iterating over it, the semantics must not be memory-unsafe but are // otherwise undefined. - fn each_val(&const self, f: &fn(A) -> bool); + fn each_val(&const self, f: &fn(A) -> bool) -> bool; } // A trait for sequences that can be built by imperatively pushing elements diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs index 741644af4aa13..604f0297b647e 100644 --- a/src/libcore/vec.rs +++ b/src/libcore/vec.rs @@ -2945,34 +2945,37 @@ impl old_iter::CopyableOrderedIter for @[A] { } impl<'self,A:Copy> old_iter::CopyableNonstrictIter for &'self [A] { - fn each_val(&const self, f: &fn(A) -> bool) { + fn each_val(&const self, f: &fn(A) -> bool) -> bool { let mut i = 0; while i < self.len() { - if !f(copy self[i]) { break; } + if !f(copy self[i]) { return false; } i += 1; } + return true; } } // FIXME(#4148): This should be redundant impl old_iter::CopyableNonstrictIter for ~[A] { - fn each_val(&const self, f: &fn(A) -> bool) { + fn each_val(&const self, f: &fn(A) -> bool) -> bool { let mut i = 0; while i < uniq_len(self) { - if !f(copy self[i]) { break; } + if !f(copy self[i]) { return false; } i += 1; } + return true; } } // FIXME(#4148): This should be redundant impl old_iter::CopyableNonstrictIter for @[A] { - fn each_val(&const self, f: &fn(A) -> bool) { + fn each_val(&const self, f: &fn(A) -> bool) -> bool { let mut i = 0; while i < self.len() { - if !f(copy self[i]) { break; } + if !f(copy self[i]) { return false; } i += 1; } + return true; } } @@ -4688,4 +4691,14 @@ mod tests { i += 1; } } + + #[test] + fn test_each_val() { + use old_iter::CopyableNonstrictIter; + let mut i = 0; + for [1, 2, 3].each_val |v| { + i += v; + } + assert!(i == 6); + } } From cdb52c02015805beac9dc7931880a482409e7162 Mon Sep 17 00:00:00 2001 From: Tim Chevalier Date: Sat, 11 May 2013 17:51:00 -0700 Subject: [PATCH 378/410] rustc: Don't call type_error_message() with ty_err as the expected type In #6319, several people mentioned they ran into a "computing fictitious type" ICE in trans. This turns out to be because some of my recent changes to typeck::check::_match resulted in type errors getting reported with ty_err as the expected type, which meant the errors were suppressed, and typechecking incorrectly succeeded (since the errors weren't recorded). Changed the error messages in these cases not to use an expected type at all, rather, printing out a string describing the type that was expected (which is what the code originally did). The result is a bit repetitive and the proliferation of error-reporting functions in typeck::infer is a bit annoying, but I thought it was important to fix this now; more cleanup can happen later. --- src/librustc/middle/typeck/check/_match.rs | 74 +++++++++++----------- src/librustc/middle/typeck/infer/mod.rs | 43 ++++++++++--- src/test/compile-fail/issue-5100.rs | 2 +- src/test/compile-fail/suppressed-error.rs | 14 ++++ 4 files changed, 84 insertions(+), 49 deletions(-) create mode 100644 src/test/compile-fail/suppressed-error.rs diff --git a/src/librustc/middle/typeck/check/_match.rs b/src/librustc/middle/typeck/check/_match.rs index 40c5df7b76832..e27c2ff97dbd2 100644 --- a/src/librustc/middle/typeck/check/_match.rs +++ b/src/librustc/middle/typeck/check/_match.rs @@ -146,13 +146,12 @@ pub fn check_pat_variant(pcx: &pat_ctxt, pat: @ast::pat, path: @ast::Path, kind_name = "variant"; } None => { - let resolved_expected = - fcx.infcx().ty_to_str(fcx.infcx().resolve_type_vars_if_possible(expected)); - fcx.infcx().type_error_message_str(pat.span, - |actual| { + fcx.infcx().type_error_message_str_with_expected(pat.span, + |expected, actual| { + expected.map_default(~"", |&e| { fmt!("mismatched types: expected `%s` but found %s", - resolved_expected, actual)}, - ~"a structure pattern", + e, actual)})}, + Some(expected), ~"a structure pattern", None); fcx.write_error(pat.id); kind_name = "[error]"; @@ -189,13 +188,12 @@ pub fn check_pat_variant(pcx: &pat_ctxt, pat: @ast::pat, path: @ast::Path, kind_name = "structure"; } _ => { - let resolved_expected = - fcx.infcx().ty_to_str(fcx.infcx().resolve_type_vars_if_possible(expected)); - fcx.infcx().type_error_message_str(pat.span, - |actual| { + fcx.infcx().type_error_message_str_with_expected(pat.span, + |expected, actual| { + expected.map_default(~"", |&e| { fmt!("mismatched types: expected `%s` but found %s", - resolved_expected, actual)}, - ~"an enum or structure pattern", + e, actual)})}, + Some(expected), ~"an enum or structure pattern", None); fcx.write_error(pat.id); kind_name = "[error]"; @@ -514,9 +512,6 @@ pub fn check_pat(pcx: &pat_ctxt, pat: @ast::pat, expected: ty::t) { for elts.each |elt| { check_pat(pcx, *elt, ty::mk_err()); } - let actual = ty::mk_tup(tcx, elts.map(|pat_var| { - fcx.node_ty(pat_var.id) - })); // use terr_tuple_size if both types are tuples let type_error = match s { ty::ty_tup(ref ex_elts) => @@ -524,10 +519,10 @@ pub fn check_pat(pcx: &pat_ctxt, pat: @ast::pat, expected: ty::t) { found: e_count}), _ => ty::terr_mismatch }; - fcx.infcx().report_mismatched_types(pat.span, - expected, - actual, - &type_error); + fcx.infcx().type_error_message_str_with_expected(pat.span, |expected, actual| { + expected.map_default(~"", |&e| { + fmt!("mismatched types: expected `%s` but found %s", + e, actual)})}, Some(expected), ~"tuple", Some(&type_error)); fcx.write_error(pat.id); } } @@ -572,14 +567,15 @@ pub fn check_pat(pcx: &pat_ctxt, pat: @ast::pat, expected: ty::t) { for after.each |&elt| { check_pat(pcx, elt, ty::mk_err()); } - let resolved_expected = - fcx.infcx().ty_to_str(fcx.infcx().resolve_type_vars_if_possible(expected)); - fcx.infcx().type_error_message_str(pat.span, - |actual| { - fmt!("mismatched types: expected `%s` but found %s", - resolved_expected, actual)}, - ~"a vector pattern", - None); + fcx.infcx().type_error_message_str_with_expected( + pat.span, + |expected, actual| { + expected.map_default(~"", |&e| { + fmt!("mismatched types: expected `%s` but found %s", + e, actual)})}, + Some(expected), + ~"a vector pattern", + None); fcx.write_error(pat.id); return; } @@ -629,17 +625,19 @@ pub fn check_pointer_pat(pcx: &pat_ctxt, } _ => { check_pat(pcx, inner, ty::mk_err()); - let resolved_expected = - fcx.infcx().ty_to_str(fcx.infcx().resolve_type_vars_if_possible(expected)); - fcx.infcx().type_error_message_str(span, |actual| { - fmt!("mismatched types: expected `%s` but found %s", - resolved_expected, actual)}, - fmt!("%s pattern", match pointer_kind { - Managed => "an @-box", - Owned => "a ~-box", - Borrowed => "an &-pointer" - }), - None); + fcx.infcx().type_error_message_str_with_expected( + span, + |expected, actual| { + expected.map_default(~"", |&e| { + fmt!("mismatched types: expected `%s` but found %s", + e, actual)})}, + Some(expected), + fmt!("%s pattern", match pointer_kind { + Managed => "an @-box", + Owned => "a ~-box", + Borrowed => "an &-pointer" + }), + None); fcx.write_error(pat_id); } } diff --git a/src/librustc/middle/typeck/infer/mod.rs b/src/librustc/middle/typeck/infer/mod.rs index 2e784b11c357b..2c42914f4b551 100644 --- a/src/librustc/middle/typeck/infer/mod.rs +++ b/src/librustc/middle/typeck/infer/mod.rs @@ -728,21 +728,45 @@ pub impl InferCtxt { } } + fn type_error_message_str(@mut self, + sp: span, + mk_msg: &fn(Option<~str>, ~str) -> ~str, + actual_ty: ~str, err: Option<&ty::type_err>) { + self.type_error_message_str_with_expected(sp, mk_msg, None, actual_ty, err) + } + + fn type_error_message_str_with_expected(@mut self, + sp: span, + mk_msg: &fn(Option<~str>, ~str) -> ~str, + expected_ty: Option, actual_ty: ~str, + err: Option<&ty::type_err>) { + debug!("hi! expected_ty = %?, actual_ty = %s", expected_ty, actual_ty); - fn type_error_message_str(@mut self, sp: span, mk_msg: &fn(~str) -> ~str, - actual_ty: ~str, err: Option<&ty::type_err>) { let error_str = err.map_default(~"", |t_err| fmt!(" (%s)", ty::type_err_to_str(self.tcx, *t_err))); - self.tcx.sess.span_err(sp, - fmt!("%s%s", mk_msg(actual_ty), error_str)); - for err.each |err| { - ty::note_and_explain_type_err(self.tcx, *err) + let resolved_expected = expected_ty.map(|&e_ty| + { self.resolve_type_vars_if_possible(e_ty) }); + if !resolved_expected.map_default(false, |&e| { ty::type_is_error(e) }) { + match resolved_expected { + None => self.tcx.sess.span_err(sp, + fmt!("%s%s", mk_msg(None, actual_ty), error_str)), + Some(e) => { + self.tcx.sess.span_err(sp, + fmt!("%s%s", mk_msg(Some(self.ty_to_str(e)), actual_ty), error_str)); + } + } + for err.each |err| { + ty::note_and_explain_type_err(self.tcx, *err) + } } } - fn type_error_message(@mut self, sp: span, mk_msg: &fn(~str) -> ~str, - actual_ty: ty::t, err: Option<&ty::type_err>) { + fn type_error_message(@mut self, + sp: span, + mk_msg: &fn(~str) -> ~str, + actual_ty: ty::t, + err: Option<&ty::type_err>) { let actual_ty = self.resolve_type_vars_if_possible(actual_ty); // Don't report an error if actual type is ty_err. @@ -750,8 +774,7 @@ pub impl InferCtxt { return; } - self.type_error_message_str(sp, mk_msg, self.ty_to_str(actual_ty), - err); + self.type_error_message_str(sp, |_e, a| { mk_msg(a) }, self.ty_to_str(actual_ty), err); } fn report_mismatched_types(@mut self, sp: span, e: ty::t, a: ty::t, diff --git a/src/test/compile-fail/issue-5100.rs b/src/test/compile-fail/issue-5100.rs index dbfdb38f7211f..8cc047230dc97 100644 --- a/src/test/compile-fail/issue-5100.rs +++ b/src/test/compile-fail/issue-5100.rs @@ -17,7 +17,7 @@ fn main() { } match (true, false) { - (true, false, false) => () //~ ERROR mismatched types: expected `(bool,bool)` but found `(bool,bool,bool)` (expected a tuple with 2 elements but found one with 3 elements) + (true, false, false) => () //~ ERROR mismatched types: expected `(bool,bool)` but found tuple (expected a tuple with 2 elements but found one with 3 elements) } match (true, false) { diff --git a/src/test/compile-fail/suppressed-error.rs b/src/test/compile-fail/suppressed-error.rs new file mode 100644 index 0000000000000..b4a72548cfc0d --- /dev/null +++ b/src/test/compile-fail/suppressed-error.rs @@ -0,0 +1,14 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +fn main() { + let (x, y) = (); //~ ERROR expected `()` but found tuple (types differ) + return x; +} \ No newline at end of file From a2b81ccba45fc2dbeee83815f5463e48f29c7569 Mon Sep 17 00:00:00 2001 From: gifnksm Date: Sun, 12 May 2013 10:15:14 +0900 Subject: [PATCH 379/410] libstd: Fix BigUint::is_even --- src/libstd/num/bigint.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/libstd/num/bigint.rs b/src/libstd/num/bigint.rs index e64e97adfa308..0f3a6f63c472e 100644 --- a/src/libstd/num/bigint.rs +++ b/src/libstd/num/bigint.rs @@ -447,7 +447,7 @@ impl Integer for BigUint { if self.data.is_empty() { true } else { - self.data.last().is_even() + self.data[0].is_even() } } @@ -1448,6 +1448,17 @@ mod biguint_tests { check(99, 17, 1683); } + #[test] + fn test_is_even() { + assert!(FromStr::from_str::("1").get().is_odd()); + assert!(FromStr::from_str::("2").get().is_even()); + assert!(FromStr::from_str::("1000").get().is_even()); + assert!(FromStr::from_str::("1000000000000000000000").get().is_even()); + assert!(FromStr::from_str::("1000000000000000000001").get().is_odd()); + assert!((BigUint::from_uint(1) << 64).is_even()); + assert!(((BigUint::from_uint(1) << 64) + BigUint::from_uint(1)).is_odd()); + } + fn to_str_pairs() -> ~[ (BigUint, ~[(uint, ~str)]) ] { let bits = BigDigit::bits; ~[( Zero::zero(), ~[ From ed4186446492e141a4dc37829dc9599133d00dd0 Mon Sep 17 00:00:00 2001 From: Tim Chevalier Date: Thu, 9 May 2013 13:27:24 -0700 Subject: [PATCH 380/410] Warning police --- src/compiletest/compiletest.rc | 1 - src/libcore/comm.rs | 17 ++++---- src/libcore/core.rc | 1 - src/libcore/pipes.rs | 8 ++-- src/libcore/reflect.rs | 2 - src/libcore/rt/uv/net.rs | 6 +-- src/libcore/rt/uvio.rs | 8 ++-- src/libcore/task/spawn.rs | 2 +- src/librustc/middle/borrowck/mod.rs | 2 +- src/librustc/middle/mem_categorization.rs | 2 - src/librustc/middle/resolve.rs | 2 +- .../middle/typeck/infer/region_inference.rs | 2 +- src/libstd/ebml.rs | 7 ---- src/libstd/fileinput.rs | 21 ++++------ src/libstd/future.rs | 40 +------------------ src/libstd/json.rs | 13 ------ src/libstd/net_tcp.rs | 24 +++++------ src/libstd/num/bigint.rs | 2 - src/libstd/std.rc | 3 -- src/libstd/test.rs | 5 ++- src/libsyntax/ext/expand.rs | 2 - src/libsyntax/ext/pipes/mod.rs | 2 +- src/libsyntax/ext/tt/macro_parser.rs | 4 +- src/libsyntax/parse/comments.rs | 11 +++-- 24 files changed, 51 insertions(+), 136 deletions(-) diff --git a/src/compiletest/compiletest.rc b/src/compiletest/compiletest.rc index 6db926b29e394..7f691cc199567 100644 --- a/src/compiletest/compiletest.rc +++ b/src/compiletest/compiletest.rc @@ -12,7 +12,6 @@ #[allow(vecs_implicitly_copyable)]; #[allow(non_camel_case_types)]; -#[allow(deprecated_mode)]; #[allow(deprecated_pattern)]; extern mod std(vers = "0.7-pre"); diff --git a/src/libcore/comm.rs b/src/libcore/comm.rs index 140eb41fdf3d6..b1f60ec469084 100644 --- a/src/libcore/comm.rs +++ b/src/libcore/comm.rs @@ -13,7 +13,6 @@ Message passing */ use cast::{transmute, transmute_mut}; -use cast; use either::{Either, Left, Right}; use kinds::Owned; use option::{Option, Some, None}; @@ -150,7 +149,7 @@ impl GenericChan for Chan { #[inline(always)] fn send(&self, x: T) { unsafe { - let mut self_endp = transmute_mut(&self.endp); + let self_endp = transmute_mut(&self.endp); let endp = replace(self_endp, None); *self_endp = Some(streamp::client::data(endp.unwrap(), x)) } @@ -161,7 +160,7 @@ impl GenericSmartChan for Chan { #[inline(always)] fn try_send(&self, x: T) -> bool { unsafe { - let mut self_endp = transmute_mut(&self.endp); + let self_endp = transmute_mut(&self.endp); let endp = replace(self_endp, None); match streamp::client::try_data(endp.unwrap(), x) { Some(next) => { @@ -178,7 +177,7 @@ impl GenericPort for Port { #[inline(always)] fn recv(&self) -> T { unsafe { - let mut self_endp = transmute_mut(&self.endp); + let self_endp = transmute_mut(&self.endp); let endp = replace(self_endp, None); let streamp::data(x, endp) = recv(endp.unwrap()); *self_endp = Some(endp); @@ -189,7 +188,7 @@ impl GenericPort for Port { #[inline(always)] fn try_recv(&self) -> Option { unsafe { - let mut self_endp = transmute_mut(&self.endp); + let self_endp = transmute_mut(&self.endp); let endp = replace(self_endp, None); match try_recv(endp.unwrap()) { Some(streamp::data(x, endp)) => { @@ -206,7 +205,7 @@ impl Peekable for Port { #[inline(always)] fn peek(&self) -> bool { unsafe { - let mut self_endp = transmute_mut(&self.endp); + let self_endp = transmute_mut(&self.endp); let mut endp = replace(self_endp, None); let peek = match endp { Some(ref mut endp) => peek(endp), @@ -220,12 +219,10 @@ impl Peekable for Port { impl Selectable for Port { fn header(&mut self) -> *mut PacketHeader { - unsafe { match self.endp { Some(ref mut endp) => endp.header(), None => fail!(~"peeking empty stream") } - } } } @@ -259,7 +256,7 @@ pub impl PortSet { impl GenericPort for PortSet { fn try_recv(&self) -> Option { unsafe { - let mut self_ports = transmute_mut(&self.ports); + let self_ports = transmute_mut(&self.ports); let mut result = None; // we have to swap the ports array so we aren't borrowing // aliasable mutable memory. @@ -351,7 +348,7 @@ pub mod oneshot { pub fn init() -> (client::Oneshot, server::Oneshot) { pub use core::pipes::HasBuffer; - let mut buffer = ~::core::pipes::Buffer { + let buffer = ~::core::pipes::Buffer { header: ::core::pipes::BufferHeader(), data: __Buffer { Oneshot: ::core::pipes::mk_packet::>() diff --git a/src/libcore/core.rc b/src/libcore/core.rc index dcb61d4734169..d029fbc07f6fb 100644 --- a/src/libcore/core.rc +++ b/src/libcore/core.rc @@ -61,7 +61,6 @@ they contained the following prologue: #[no_core]; #[deny(non_camel_case_types)]; -#[allow(deprecated_mutable_fields)]; // Make core testable by not duplicating lang items. See #2912 #[cfg(test)] extern mod realcore(name = "core", vers = "0.7-pre"); diff --git a/src/libcore/pipes.rs b/src/libcore/pipes.rs index fe9c78198bb13..9b664b334ba36 100644 --- a/src/libcore/pipes.rs +++ b/src/libcore/pipes.rs @@ -348,7 +348,7 @@ pub fn send(mut p: SendPacketBuffered, payload: T) -> bool { let header = p.header(); - let mut p_ = p.unwrap(); + let p_ = p.unwrap(); let p = unsafe { &mut *p_ }; assert!(ptr::to_unsafe_ptr(&(p.header)) == header); assert!(p.payload.is_none()); @@ -405,10 +405,8 @@ a message, or `Some(T)` if a message was received. */ pub fn try_recv(mut p: RecvPacketBuffered) -> Option { - let mut p_ = p.unwrap(); - let mut p = unsafe { - &mut *p_ - }; + let p_ = p.unwrap(); + let p = unsafe { &mut *p_ }; do (|| { try_recv_(p) diff --git a/src/libcore/reflect.rs b/src/libcore/reflect.rs index 47de360f58995..30f60dce04113 100644 --- a/src/libcore/reflect.rs +++ b/src/libcore/reflect.rs @@ -409,7 +409,6 @@ impl TyVisitor for MovePtrAdaptor { disr_val: int, n_fields: uint, name: &str) -> bool { - self.inner.push_ptr(); // NOTE remove after next snapshot if ! self.inner.visit_enter_enum_variant(variant, disr_val, n_fields, name) { return false; @@ -433,7 +432,6 @@ impl TyVisitor for MovePtrAdaptor { n_fields, name) { return false; } - self.inner.pop_ptr(); // NOTE remove after next snapshot true } diff --git a/src/libcore/rt/uv/net.rs b/src/libcore/rt/uv/net.rs index 04b9008b06770..068d6db2a43be 100644 --- a/src/libcore/rt/uv/net.rs +++ b/src/libcore/rt/uv/net.rs @@ -152,8 +152,7 @@ pub impl StreamWatcher { extern fn close_cb(handle: *uvll::uv_stream_t) { let mut stream_watcher: StreamWatcher = NativeHandle::from_native_handle(handle); { - let mut data = get_watcher_data(&mut stream_watcher); - data.close_cb.swap_unwrap()(); + get_watcher_data(&mut stream_watcher).close_cb.swap_unwrap()(); } drop_watcher_data(&mut stream_watcher); unsafe { free_handle(handle as *c_void) } @@ -214,8 +213,7 @@ pub impl TcpWatcher { assert!(get_watcher_data(self).connect_cb.is_none()); get_watcher_data(self).connect_cb = Some(cb); - let mut connect_watcher = ConnectRequest::new(); - let connect_handle = connect_watcher.native_handle(); + let connect_handle = ConnectRequest::new().native_handle(); match address { Ipv4(*) => { do ip4_as_uv_ip4(address) |addr| { diff --git a/src/libcore/rt/uvio.rs b/src/libcore/rt/uvio.rs index ab8aea2b63c4f..62a165b6d7762 100644 --- a/src/libcore/rt/uvio.rs +++ b/src/libcore/rt/uvio.rs @@ -46,8 +46,7 @@ impl Drop for UvEventLoop { let self = unsafe { transmute::<&UvEventLoop, &mut UvEventLoop>(self) }; - let mut uv_loop = self.uvio.uv_loop(); - uv_loop.close(); + self.uvio.uv_loop().close(); } } @@ -189,9 +188,8 @@ impl TcpListener for UvTcpListener { let maybe_stream = if status.is_none() { let mut server_stream_watcher = server_stream_watcher; let mut loop_ = loop_from_watcher(&server_stream_watcher); - let mut client_tcp_watcher = TcpWatcher::new(&mut loop_); - let client_tcp_watcher = client_tcp_watcher.as_stream(); - // XXX: Need's to be surfaced in interface + let client_tcp_watcher = TcpWatcher::new(&mut loop_).as_stream(); + // XXX: Needs to be surfaced in interface server_stream_watcher.accept(client_tcp_watcher); Some(~UvStream::new(client_tcp_watcher)) } else { diff --git a/src/libcore/task/spawn.rs b/src/libcore/task/spawn.rs index 846d4a349508b..327b7a988aaa0 100644 --- a/src/libcore/task/spawn.rs +++ b/src/libcore/task/spawn.rs @@ -472,7 +472,7 @@ fn gen_child_taskgroup(linked: bool, supervised: bool) /*##################################################################* * Step 1. Get spawner's taskgroup info. *##################################################################*/ - let mut spawner_group: @@mut TCB = + let spawner_group: @@mut TCB = match local_get(OldHandle(spawner), taskgroup_key!()) { None => { // Main task, doing first spawn ever. Lazily initialise diff --git a/src/librustc/middle/borrowck/mod.rs b/src/librustc/middle/borrowck/mod.rs index 75acc2d951138..a61055340777f 100644 --- a/src/librustc/middle/borrowck/mod.rs +++ b/src/librustc/middle/borrowck/mod.rs @@ -10,7 +10,6 @@ /*! See doc.rs for a thorough explanation of the borrow checker */ -use core; use core::prelude::*; use mc = middle::mem_categorization; @@ -22,6 +21,7 @@ use middle::dataflow::DataFlowOperator; use util::common::stmt_set; use util::ppaux::{note_and_explain_region, Repr}; +use core; use core::hashmap::{HashSet, HashMap}; use core::io; use core::result::{Result}; diff --git a/src/librustc/middle/mem_categorization.rs b/src/librustc/middle/mem_categorization.rs index 7675efa76f4be..436905f9a53aa 100644 --- a/src/librustc/middle/mem_categorization.rs +++ b/src/librustc/middle/mem_categorization.rs @@ -571,8 +571,6 @@ pub impl mem_categorization_ctxt { } } - /// The `field_id` parameter is the ID of the enclosing expression or - /// pattern. It is used to determine which variant of an enum is in use. fn cat_field(&self, node: N, base_cmt: cmt, diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs index 9d75fa644a373..515ebc0e8db1e 100644 --- a/src/librustc/middle/resolve.rs +++ b/src/librustc/middle/resolve.rs @@ -60,7 +60,7 @@ use syntax::ast_util::{def_id_of_def, local_def}; use syntax::ast_util::{path_to_ident, walk_pat, trait_method_to_ty_method}; use syntax::ast_util::{Privacy, Public, Private}; use syntax::ast_util::{variant_visibility_to_privacy, visibility_to_privacy}; -use syntax::attr::{attr_metas, contains_name, attrs_contains_name}; +use syntax::attr::{attr_metas, contains_name}; use syntax::parse::token::ident_interner; use syntax::parse::token::special_idents; use syntax::print::pprust::path_to_str; diff --git a/src/librustc/middle/typeck/infer/region_inference.rs b/src/librustc/middle/typeck/infer/region_inference.rs index 73c120ad35dd3..11a7aafe1cd41 100644 --- a/src/librustc/middle/typeck/infer/region_inference.rs +++ b/src/librustc/middle/typeck/infer/region_inference.rs @@ -544,12 +544,12 @@ use middle::typeck::infer::cres; use util::common::indenter; use util::ppaux::note_and_explain_region; +use core; use core::cell::{Cell, empty_cell}; use core::hashmap::{HashMap, HashSet}; use core::to_bytes; use core::uint; use core::vec; -use core; use syntax::codemap::span; use syntax::ast; diff --git a/src/libstd/ebml.rs b/src/libstd/ebml.rs index a57a16fb87dae..98618e4928b0d 100644 --- a/src/libstd/ebml.rs +++ b/src/libstd/ebml.rs @@ -634,13 +634,6 @@ pub mod writer { use core::vec; // ebml writing - #[cfg(stage0)] - pub struct Encoder { - writer: @io::Writer, - priv mut size_positions: ~[uint], - } - - #[cfg(not(stage0))] pub struct Encoder { writer: @io::Writer, priv size_positions: ~[uint], diff --git a/src/libstd/fileinput.rs b/src/libstd/fileinput.rs index 2c5cbc1cbf927..4e205b50014ed 100644 --- a/src/libstd/fileinput.rs +++ b/src/libstd/fileinput.rs @@ -94,8 +94,6 @@ total line count). } */ -#[allow(deprecated_mutable_fields)]; - use core::io::ReaderUtil; /** @@ -212,8 +210,8 @@ impl FileInput { pub fn next_file(&self) -> bool { // No more files - // Compiler whines about "illegal borrow unless pure" for - // files.is_empty() + // unsafe block can be removed after the next snapshot + // (next one after 2013-05-03) if unsafe { self.fi.files.is_empty() } { self.fi.current_reader = None; return false; @@ -337,7 +335,8 @@ impl io::Reader for FileInput { fn eof(&self) -> bool { // we've run out of files, and current_reader is either None or eof. - // compiler whines about illegal borrows for files.is_empty() + // unsafe block can be removed after the next snapshot + // (next one after 2013-05-03) (unsafe { self.fi.files.is_empty() }) && match self.fi.current_reader { None => true, Some(r) => r.eof() } @@ -380,8 +379,7 @@ Fails when attempting to read from a file that can't be opened. */ #[cfg(stage0)] pub fn input(f: &fn(&str) -> bool) { - let mut i = FileInput::from_args(); - i.each_line(f); + FileInput::from_args().each_line(f); } /** Iterate directly over the command line arguments (no arguments implies @@ -404,8 +402,7 @@ Fails when attempting to read from a file that can't be opened. */ #[cfg(stage0)] pub fn input_state(f: &fn(&str, FileInputState) -> bool) { - let mut i = FileInput::from_args(); - i.each_line_state(f); + FileInput::from_args().each_line_state(f); } /** Iterate directly over the command line arguments (no arguments @@ -427,8 +424,7 @@ Fails when attempting to read from a file that can't be opened. */ #[cfg(stage0)] pub fn input_vec(files: ~[Option], f: &fn(&str) -> bool) { - let mut i = FileInput::from_vec(files); - i.each_line(f); + FileInput::from_vec(files).each_line(f); } /** Iterate over a vector of files (an empty vector implies just `stdin`). @@ -450,8 +446,7 @@ Fails when attempting to read from a file that can't be opened. #[cfg(stage0)] pub fn input_vec_state(files: ~[Option], f: &fn(&str, FileInputState) -> bool) { - let mut i = FileInput::from_vec(files); - i.each_line_state(f); + FileInput::from_vec(files).each_line_state(f); } /** Iterate over a vector of files (an empty vector implies just `stdin`) diff --git a/src/libstd/future.rs b/src/libstd/future.rs index ac23ea1a6e2c2..9906be13cb9e5 100644 --- a/src/libstd/future.rs +++ b/src/libstd/future.rs @@ -29,17 +29,12 @@ use core::task; use core::util::replace; #[doc = "The future type"] -#[cfg(stage0)] -pub struct Future { - priv mut state: FutureState, -} - -#[doc = "The future type"] -#[cfg(not(stage0))] pub struct Future { priv state: FutureState, } +// n.b. It should be possible to get rid of this. +// Add a test, though -- tjc // FIXME(#2829) -- futures should not be copyable, because they close // over ~fn's that have pipes and so forth within! #[unsafe_destructor] @@ -62,37 +57,6 @@ pub impl Future { } pub impl Future { - #[cfg(stage0)] - fn get_ref<'a>(&'a self) -> &'a A { - /*! - * Executes the future's closure and then returns a borrowed - * pointer to the result. The borrowed pointer lasts as long as - * the future. - */ - unsafe { - { - match self.state { - Forced(ref mut v) => { return cast::transmute(v); } - Evaluating => fail!(~"Recursive forcing of future!"), - Pending(_) => {} - } - } - { - let state = replace(&mut self.state, Evaluating); - match state { - Forced(_) | Evaluating => fail!(~"Logic error."), - Pending(f) => { - self.state = Forced(f()); - cast::transmute(self.get_ref()) - } - } - } - } - } - - #[cfg(stage1)] - #[cfg(stage2)] - #[cfg(stage3)] fn get_ref<'a>(&'a mut self) -> &'a A { /*! * Executes the future's closure and then returns a borrowed diff --git a/src/libstd/json.rs b/src/libstd/json.rs index c815c9dd48062..2acbcf5c7ec08 100644 --- a/src/libstd/json.rs +++ b/src/libstd/json.rs @@ -220,13 +220,6 @@ impl serialize::Encoder for Encoder { } } -#[cfg(stage0)] -pub struct PrettyEncoder { - priv wr: @io::Writer, - priv mut indent: uint, -} - -#[cfg(not(stage0))] pub struct PrettyEncoder { priv wr: @io::Writer, priv indent: uint, @@ -845,12 +838,6 @@ pub fn from_str(s: &str) -> Result { } } -#[cfg(stage0)] -pub struct Decoder { - priv mut stack: ~[Json], -} - -#[cfg(not(stage0))] pub struct Decoder { priv stack: ~[Json], } diff --git a/src/libstd/net_tcp.rs b/src/libstd/net_tcp.rs index 7e47106977fe3..20e1a272910cc 100644 --- a/src/libstd/net_tcp.rs +++ b/src/libstd/net_tcp.rs @@ -972,19 +972,17 @@ impl io::Reader for TcpSocketBuf { /// Implementation of `io::Reader` trait for a buffered `net::tcp::TcpSocket` impl io::Writer for TcpSocketBuf { pub fn write(&self, data: &[u8]) { - unsafe { - let socket_data_ptr: *TcpSocketData = - &(*((*(self.data)).sock).socket_data); - let w_result = write_common_impl(socket_data_ptr, - vec::slice(data, - 0, - data.len()).to_vec()); - if w_result.is_err() { - let err_data = w_result.get_err(); - debug!( - "ERROR sock_buf as io::writer.writer err: %? %?", - err_data.err_name, err_data.err_msg); - } + let socket_data_ptr: *TcpSocketData = + &(*((*(self.data)).sock).socket_data); + let w_result = write_common_impl(socket_data_ptr, + vec::slice(data, + 0, + data.len()).to_vec()); + if w_result.is_err() { + let err_data = w_result.get_err(); + debug!( + "ERROR sock_buf as io::writer.writer err: %? %?", + err_data.err_name, err_data.err_msg); } } fn seek(&self, dist: int, seek: io::SeekStyle) { diff --git a/src/libstd/num/bigint.rs b/src/libstd/num/bigint.rs index e64e97adfa308..7b39b2000798e 100644 --- a/src/libstd/num/bigint.rs +++ b/src/libstd/num/bigint.rs @@ -16,8 +16,6 @@ A BigUint is represented as an array of BigDigits. A BigInt is a combination of BigUint and Sign. */ -#[deny(deprecated_mutable_fields)]; - use core::cmp::{Eq, Ord, TotalEq, TotalOrd, Ordering, Less, Equal, Greater}; use core::num::{IntConvertible, Zero, One, ToStrRadix, FromStrRadix}; diff --git a/src/libstd/std.rc b/src/libstd/std.rc index 70bd5ceef9887..915aab59a718a 100644 --- a/src/libstd/std.rc +++ b/src/libstd/std.rc @@ -28,9 +28,6 @@ not required in or otherwise suitable for the core library. #[deny(non_camel_case_types)]; -// Allow mutable fields only in stage0. -#[warn(deprecated_mutable_fields)]; - pub mod uv_ll; // General io and system-services modules diff --git a/src/libstd/test.rs b/src/libstd/test.rs index c320bcea77c3b..bb90b7834447c 100644 --- a/src/libstd/test.rs +++ b/src/libstd/test.rs @@ -410,9 +410,10 @@ type MonitorMsg = (TestDesc, TestResult); fn run_tests(opts: &TestOpts, tests: ~[TestDescAndFn], callback: @fn(e: TestEvent)) { - let mut filtered_tests = filter_tests(opts, tests); - let filtered_descs = filtered_tests.map(|t| copy t.desc); + let filtered_tests = filter_tests(opts, tests); + let filtered_descs = filtered_tests.map(|t| t.desc); + callback(TeFiltered(filtered_descs)); let (filtered_tests, filtered_benchs) = diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs index 5129fa6ebd2aa..0fe28dadbc708 100644 --- a/src/libsyntax/ext/expand.rs +++ b/src/libsyntax/ext/expand.rs @@ -27,7 +27,6 @@ pub fn expand_expr(extsbox: @mut SyntaxEnv, fld: @ast_fold, orig: @fn(&expr_, span, @ast_fold) -> (expr_, span)) -> (expr_, span) { - let mut cx = cx; match *e { // expr_mac should really be expr_ext or something; it's the // entry-point for all syntax extensions. @@ -113,7 +112,6 @@ pub fn expand_mod_items(extsbox: @mut SyntaxEnv, fld: @ast_fold, orig: @fn(&ast::_mod, @ast_fold) -> ast::_mod) -> ast::_mod { - let mut cx = cx; // Fold the contents first: let module_ = orig(module_, fld); diff --git a/src/libsyntax/ext/pipes/mod.rs b/src/libsyntax/ext/pipes/mod.rs index 85c578bc2ce1a..642f22e973680 100644 --- a/src/libsyntax/ext/pipes/mod.rs +++ b/src/libsyntax/ext/pipes/mod.rs @@ -74,7 +74,7 @@ pub fn expand_proto(cx: @ext_ctxt, _sp: span, id: ast::ident, let rdr = tt_rdr as @reader; let rust_parser = Parser(sess, cfg, rdr.dup()); - let mut proto = rust_parser.parse_proto(cx.str_of(id)); + let proto = rust_parser.parse_proto(cx.str_of(id)); // check for errors visit(proto, cx); diff --git a/src/libsyntax/ext/tt/macro_parser.rs b/src/libsyntax/ext/tt/macro_parser.rs index 0c1e619985d26..46b09aca8b298 100644 --- a/src/libsyntax/ext/tt/macro_parser.rs +++ b/src/libsyntax/ext/tt/macro_parser.rs @@ -247,8 +247,8 @@ pub fn parse( let TokenAndSpan {tok: tok, sp: sp} = rdr.peek(); /* we append new items to this while we go */ - while cur_eis.len() > 0u { /* for each Earley Item */ - let mut ei = cur_eis.pop(); + while !cur_eis.is_empty() { /* for each Earley Item */ + let ei = cur_eis.pop(); let idx = ei.idx; let len = ei.elts.len(); diff --git a/src/libsyntax/parse/comments.rs b/src/libsyntax/parse/comments.rs index 4e29c3dcf183b..acfd18c74de11 100644 --- a/src/libsyntax/parse/comments.rs +++ b/src/libsyntax/parse/comments.rs @@ -202,15 +202,14 @@ fn all_whitespace(s: ~str, begin: uint, end: uint) -> bool { fn trim_whitespace_prefix_and_push_line(lines: &mut ~[~str], s: ~str, col: CharPos) { - let mut s1; - let len = str::len(s); + let len = s.len(); // FIXME #3961: Doing bytewise comparison and slicing with CharPos let col = col.to_uint(); - if all_whitespace(s, 0u, uint::min(len, col)) { + let s1 = if all_whitespace(s, 0, uint::min(len, col)) { if col < len { - s1 = str::slice(s, col, len).to_owned(); - } else { s1 = ~""; } - } else { s1 = s; } + str::slice(s, col, len).to_owned() + } else { ~"" } + } else { s }; debug!("pushing line: %s", s1); lines.push(s1); } From a279d6510251ebd3956c74ffe4b12bd49074da9c Mon Sep 17 00:00:00 2001 From: Corey Richardson Date: Sat, 11 May 2013 06:07:21 -0400 Subject: [PATCH 381/410] clean up the last bit of warnings --- src/libcore/condition.rs | 1 - src/libcore/os.rs | 1 - src/libcore/rand.rs | 1 - src/librustc/middle/borrowck/mod.rs | 3 ++- src/librustc/middle/ty.rs | 3 ++- src/librustc/middle/typeck/infer/region_inference.rs | 3 ++- src/libstd/fileinput.rs | 8 ++++---- src/libstd/test.rs | 2 +- src/libsyntax/ast.rs | 1 - 9 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/libcore/condition.rs b/src/libcore/condition.rs index 75c6cf0e969a3..baa6722b1936e 100644 --- a/src/libcore/condition.rs +++ b/src/libcore/condition.rs @@ -11,7 +11,6 @@ /*! Condition handling */ use prelude::*; -use task; use local_data::{local_data_pop, local_data_set}; // helper for transmutation, shown below. diff --git a/src/libcore/os.rs b/src/libcore/os.rs index 88b13d0ff59e9..030b7ec3e42ff 100644 --- a/src/libcore/os.rs +++ b/src/libcore/os.rs @@ -36,7 +36,6 @@ use option::{Some, None}; use prelude::*; use ptr; use str; -use task; use uint; use unstable::finally::Finally; use vec; diff --git a/src/libcore/rand.rs b/src/libcore/rand.rs index addc92c3a00be..daf0b9d094aca 100644 --- a/src/libcore/rand.rs +++ b/src/libcore/rand.rs @@ -43,7 +43,6 @@ fn main () { use int; use prelude::*; use str; -use task; use u32; use uint; use util; diff --git a/src/librustc/middle/borrowck/mod.rs b/src/librustc/middle/borrowck/mod.rs index a61055340777f..fbc186a6fd48a 100644 --- a/src/librustc/middle/borrowck/mod.rs +++ b/src/librustc/middle/borrowck/mod.rs @@ -21,7 +21,8 @@ use middle::dataflow::DataFlowOperator; use util::common::stmt_set; use util::ppaux::{note_and_explain_region, Repr}; -use core; +#[cfg(stage0)] +use core; // NOTE: this can be removed after the next snapshot use core::hashmap::{HashSet, HashMap}; use core::io; use core::result::{Result}; diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index 7e355f7192f09..f5adb2fe1084f 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -28,7 +28,8 @@ use util::ppaux::Repr; use util::common::{indenter}; use util::enum_set::{EnumSet, CLike}; -use core; +#[cfg(stage0)] +use core; // NOTE: this can be removed after the next snapshot use core::ptr::to_unsafe_ptr; use core::to_bytes; use core::hashmap::{HashMap, HashSet}; diff --git a/src/librustc/middle/typeck/infer/region_inference.rs b/src/librustc/middle/typeck/infer/region_inference.rs index 11a7aafe1cd41..96e289bc49732 100644 --- a/src/librustc/middle/typeck/infer/region_inference.rs +++ b/src/librustc/middle/typeck/infer/region_inference.rs @@ -544,7 +544,8 @@ use middle::typeck::infer::cres; use util::common::indenter; use util::ppaux::note_and_explain_region; -use core; +#[cfg(stage0)] +use core; // NOTE: this can be removed after next snapshot use core::cell::{Cell, empty_cell}; use core::hashmap::{HashMap, HashSet}; use core::to_bytes; diff --git a/src/libstd/fileinput.rs b/src/libstd/fileinput.rs index 4e205b50014ed..c3622fad53bac 100644 --- a/src/libstd/fileinput.rs +++ b/src/libstd/fileinput.rs @@ -389,7 +389,7 @@ Fails when attempting to read from a file that can't be opened. */ #[cfg(not(stage0))] pub fn input(f: &fn(&str) -> bool) -> bool { - let mut i = FileInput::from_args(); + let i = FileInput::from_args(); i.each_line(f) } @@ -413,7 +413,7 @@ Fails when attempting to read from a file that can't be opened. */ #[cfg(not(stage0))] pub fn input_state(f: &fn(&str, FileInputState) -> bool) -> bool { - let mut i = FileInput::from_args(); + let i = FileInput::from_args(); i.each_line_state(f) } @@ -433,7 +433,7 @@ Fails when attempting to read from a file that can't be opened. */ #[cfg(not(stage0))] pub fn input_vec(files: ~[Option], f: &fn(&str) -> bool) -> bool { - let mut i = FileInput::from_vec(files); + let i = FileInput::from_vec(files); i.each_line(f) } @@ -457,7 +457,7 @@ Fails when attempting to read from a file that can't be opened. #[cfg(not(stage0))] pub fn input_vec_state(files: ~[Option], f: &fn(&str, FileInputState) -> bool) -> bool { - let mut i = FileInput::from_vec(files); + let i = FileInput::from_vec(files); i.each_line_state(f) } diff --git a/src/libstd/test.rs b/src/libstd/test.rs index bb90b7834447c..71cbc0d7a6a5a 100644 --- a/src/libstd/test.rs +++ b/src/libstd/test.rs @@ -412,7 +412,7 @@ fn run_tests(opts: &TestOpts, callback: @fn(e: TestEvent)) { let filtered_tests = filter_tests(opts, tests); - let filtered_descs = filtered_tests.map(|t| t.desc); + let filtered_descs = filtered_tests.map(|t| copy t.desc); callback(TeFiltered(filtered_descs)); diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index 8aa59fd177559..5daa0de22728b 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -16,7 +16,6 @@ use opt_vec::OptVec; use core::cast; use core::option::{None, Option, Some}; -use core::task; use core::to_bytes; use core::to_str::ToStr; use std::serialize::{Encodable, Decodable, Encoder, Decoder}; From 258abf1424ea421c6986aa972122fb666bb06bee Mon Sep 17 00:00:00 2001 From: Corey Richardson Date: Sun, 12 May 2013 09:38:39 -0400 Subject: [PATCH 382/410] Fix failing test --- src/test/compile-fail/issue-2937.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/test/compile-fail/issue-2937.rs b/src/test/compile-fail/issue-2937.rs index ba4e25ea952a9..76ab31b4101da 100644 --- a/src/test/compile-fail/issue-2937.rs +++ b/src/test/compile-fail/issue-2937.rs @@ -8,8 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// error-pattern:failed to resolve imports -use x = m::f; +use x = m::f; //~ ERROR failed to resolve imports mod m { } From 0acb6abb86125a1db878c256fbcf1a94b2577feb Mon Sep 17 00:00:00 2001 From: Samuel Chase Date: Sun, 12 May 2013 21:02:12 +0530 Subject: [PATCH 383/410] Add use declaration for container::Set All tests pass now. --- src/libcore/to_str.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libcore/to_str.rs b/src/libcore/to_str.rs index 08e72e8fe8624..58a9f768644bd 100644 --- a/src/libcore/to_str.rs +++ b/src/libcore/to_str.rs @@ -14,7 +14,6 @@ The `ToStr` trait for converting to strings */ -use str; use str::OwnedStr; use hashmap::HashMap; use hashmap::HashSet; @@ -179,6 +178,7 @@ impl ToStr for @[A] { mod tests { use hashmap::HashMap; use hashmap::HashSet; + use container::Set; #[test] fn test_simple_types() { assert!(1i.to_str() == ~"1"); From a9f21326062b0b455aebd2459e8406b03a048a26 Mon Sep 17 00:00:00 2001 From: Matthijs Hofstra Date: Sun, 12 May 2013 21:22:20 +0200 Subject: [PATCH 384/410] Adds atomic_load, atomic_load_acq, atomic_store, and atomic_store_rel intrinsics. The default versions (atomic_load and atomic_store) are sequentially consistent. The atomic_load_acq intrinsic acquires as described in [1]. The atomic_store_rel intrinsic releases as described in [1]. [1]: http://llvm.org/docs/Atomics.html --- src/libcore/unstable/intrinsics.rs | 10 ++++++++++ src/librustc/lib/llvm.rs | 22 +++++++++++++++++---- src/librustc/middle/trans/build.rs | 26 +++++++++++++++++++++++++ src/librustc/middle/trans/foreign.rs | 24 +++++++++++++++++++++++ src/librustc/middle/trans/type_use.rs | 4 +++- src/librustc/middle/typeck/check/mod.rs | 19 ++++++++++++++++++ src/rustllvm/RustWrapper.cpp | 22 +++++++++++++++++++++ src/rustllvm/rustllvm.def.in | 2 ++ src/test/run-pass/intrinsic-atomics.rs | 15 ++++++++++++++ 9 files changed, 139 insertions(+), 5 deletions(-) diff --git a/src/libcore/unstable/intrinsics.rs b/src/libcore/unstable/intrinsics.rs index a820c5d15a8db..04ffd169e98a3 100644 --- a/src/libcore/unstable/intrinsics.rs +++ b/src/libcore/unstable/intrinsics.rs @@ -19,6 +19,16 @@ pub extern "rust-intrinsic" { pub fn atomic_cxchg(dst: &mut int, old: int, src: int) -> int; pub fn atomic_cxchg_acq(dst: &mut int, old: int, src: int) -> int; pub fn atomic_cxchg_rel(dst: &mut int, old: int, src: int) -> int; + + #[cfg(not(stage0))] + pub fn atomic_load(src: &int) -> int; + #[cfg(not(stage0))] + pub fn atomic_load_acq(src: &int) -> int; + + #[cfg(not(stage0))] + pub fn atomic_store(dst: &mut int, val: int); + #[cfg(not(stage0))] + pub fn atomic_store_rel(dst: &mut int, val: int); pub fn atomic_xchg(dst: &mut int, src: int) -> int; pub fn atomic_xchg_acq(dst: &mut int, src: int) -> int; diff --git a/src/librustc/lib/llvm.rs b/src/librustc/lib/llvm.rs index 36d5a8e3cfe9e..dfd9df3bb5c15 100644 --- a/src/librustc/lib/llvm.rs +++ b/src/librustc/lib/llvm.rs @@ -1339,13 +1339,16 @@ pub mod llvm { PointerVal: ValueRef) -> ValueRef; #[fast_ffi] pub unsafe fn LLVMBuildLoad(B: BuilderRef, - PointerVal: ValueRef, - Name: *c_char) - -> ValueRef; + PointerVal: ValueRef, + Name: *c_char) + -> ValueRef; + #[fast_ffi] pub unsafe fn LLVMBuildStore(B: BuilderRef, Val: ValueRef, - Ptr: ValueRef) -> ValueRef; + Ptr: ValueRef) + -> ValueRef; + #[fast_ffi] pub unsafe fn LLVMBuildGEP(B: BuilderRef, Pointer: ValueRef, @@ -1561,6 +1564,17 @@ pub mod llvm { Name: *c_char) -> ValueRef; /* Atomic Operations */ + pub unsafe fn LLVMBuildAtomicLoad(B: BuilderRef, + PointerVal: ValueRef, + Order: AtomicOrdering) + -> ValueRef; + + pub unsafe fn LLVMBuildAtomicStore(B: BuilderRef, + Val: ValueRef, + Ptr: ValueRef, + Order: AtomicOrdering) + -> ValueRef; + pub unsafe fn LLVMBuildAtomicCmpXchg(B: BuilderRef, LHS: ValueRef, CMP: ValueRef, diff --git a/src/librustc/middle/trans/build.rs b/src/librustc/middle/trans/build.rs index 29fd90edce898..6fb2250871478 100644 --- a/src/librustc/middle/trans/build.rs +++ b/src/librustc/middle/trans/build.rs @@ -537,6 +537,21 @@ pub fn Load(cx: block, PointerVal: ValueRef) -> ValueRef { } } +pub fn AtomicLoad(cx: block, PointerVal: ValueRef, order: AtomicOrdering) -> ValueRef { + unsafe { + let ccx = cx.fcx.ccx; + if cx.unreachable { + let ty = val_ty(PointerVal); + let eltty = if llvm::LLVMGetTypeKind(ty) == lib::llvm::Array { + llvm::LLVMGetElementType(ty) } else { ccx.int_type }; + return llvm::LLVMGetUndef(eltty); + } + count_insn(cx, "load.atomic"); + return llvm::LLVMBuildAtomicLoad(B(cx), PointerVal, order); + } +} + + pub fn LoadRangeAssert(cx: block, PointerVal: ValueRef, lo: c_ulonglong, hi: c_ulonglong, signed: lib::llvm::Bool) -> ValueRef { let value = Load(cx, PointerVal); @@ -567,6 +582,17 @@ pub fn Store(cx: block, Val: ValueRef, Ptr: ValueRef) { } } +pub fn AtomicStore(cx: block, Val: ValueRef, Ptr: ValueRef, order: AtomicOrdering) { + unsafe { + if cx.unreachable { return; } + debug!("Store %s -> %s", + val_str(cx.ccx().tn, Val), + val_str(cx.ccx().tn, Ptr)); + count_insn(cx, "store.atomic"); + llvm::LLVMBuildAtomicStore(B(cx), Val, Ptr, order); + } +} + pub fn GEP(cx: block, Pointer: ValueRef, Indices: &[ValueRef]) -> ValueRef { unsafe { if cx.unreachable { return llvm::LLVMGetUndef(T_ptr(T_nil())); } diff --git a/src/librustc/middle/trans/foreign.rs b/src/librustc/middle/trans/foreign.rs index 26654cf31f861..30db63e9c19da 100644 --- a/src/librustc/middle/trans/foreign.rs +++ b/src/librustc/middle/trans/foreign.rs @@ -592,6 +592,30 @@ pub fn trans_intrinsic(ccx: @CrateContext, Release); Store(bcx, old, fcx.llretptr.get()); } + ~"atomic_load" => { + let old = AtomicLoad(bcx, + get_param(decl, first_real_arg), + SequentiallyConsistent); + Store(bcx, old, fcx.llretptr.get()); + } + ~"atomic_load_acq" => { + let old = AtomicLoad(bcx, + get_param(decl, first_real_arg), + Acquire); + Store(bcx, old, fcx.llretptr.get()); + } + ~"atomic_store" => { + AtomicStore(bcx, + get_param(decl, first_real_arg + 1u), + get_param(decl, first_real_arg), + SequentiallyConsistent); + } + ~"atomic_store_rel" => { + AtomicStore(bcx, + get_param(decl, first_real_arg + 1u), + get_param(decl, first_real_arg), + Release); + } ~"atomic_xchg" => { let old = AtomicRMW(bcx, Xchg, get_param(decl, first_real_arg), diff --git a/src/librustc/middle/trans/type_use.rs b/src/librustc/middle/trans/type_use.rs index 3c2738d3ae80e..6a271f979caed 100644 --- a/src/librustc/middle/trans/type_use.rs +++ b/src/librustc/middle/trans/type_use.rs @@ -124,7 +124,9 @@ pub fn type_uses_for(ccx: @CrateContext, fn_id: def_id, n_tps: uint) ~"get_tydesc" | ~"needs_drop" => use_tydesc, ~"atomic_cxchg" | ~"atomic_cxchg_acq"| - ~"atomic_cxchg_rel"| ~"atomic_xchg" | + ~"atomic_cxchg_rel"| ~"atomic_load" | + ~"atomic_load_acq" | ~"atomic_store" | + ~"atomic_store_rel"| ~"atomic_xchg" | ~"atomic_xadd" | ~"atomic_xsub" | ~"atomic_xchg_acq" | ~"atomic_xadd_acq" | ~"atomic_xsub_acq" | ~"atomic_xchg_rel" | diff --git a/src/librustc/middle/typeck/check/mod.rs b/src/librustc/middle/typeck/check/mod.rs index 7c79693a8b2eb..7f73ed94c031c 100644 --- a/src/librustc/middle/typeck/check/mod.rs +++ b/src/librustc/middle/typeck/check/mod.rs @@ -3486,6 +3486,25 @@ pub fn check_intrinsic_type(ccx: @mut CrateCtxt, it: @ast::foreign_item) { ], ty::mk_int()) } + ~"atomic_load" | ~"atomic_load_acq" => { + (0, + ~[ + arg(ty::mk_imm_rptr(tcx, + ty::re_bound(ty::br_anon(0)), + ty::mk_int())) + ], + ty::mk_int()) + } + ~"atomic_store" | ~"atomic_store_rel" => { + (0, + ~[ + arg(ty::mk_mut_rptr(tcx, + ty::re_bound(ty::br_anon(0)), + ty::mk_int())), + arg(ty::mk_int()) + ], + ty::mk_nil()) + } ~"atomic_xchg" | ~"atomic_xadd" | ~"atomic_xsub" | ~"atomic_xchg_acq" | ~"atomic_xadd_acq" | ~"atomic_xsub_acq" | ~"atomic_xchg_rel" | ~"atomic_xadd_rel" | ~"atomic_xsub_rel" => { diff --git a/src/rustllvm/RustWrapper.cpp b/src/rustllvm/RustWrapper.cpp index 04e616de22334..8c081858d602a 100644 --- a/src/rustllvm/RustWrapper.cpp +++ b/src/rustllvm/RustWrapper.cpp @@ -545,6 +545,28 @@ extern "C" LLVMTypeRef LLVMMetadataType(void) { return LLVMMetadataTypeInContext(LLVMGetGlobalContext()); } +extern "C" LLVMValueRef LLVMBuildAtomicLoad(LLVMBuilderRef B, + LLVMValueRef source, + const char* Name, + AtomicOrdering order) { + LoadInst* li = new LoadInst(unwrap(source),0); + li->setVolatile(true); + li->setAtomic(order); + li->setAlignment(sizeof(intptr_t)); + return wrap(unwrap(B)->Insert(li)); +} + +extern "C" LLVMValueRef LLVMBuildAtomicStore(LLVMBuilderRef B, + LLVMValueRef val, + LLVMValueRef target, + AtomicOrdering order) { + StoreInst* si = new StoreInst(unwrap(val),unwrap(target)); + si->setVolatile(true); + si->setAtomic(order); + si->setAlignment(sizeof(intptr_t)); + return wrap(unwrap(B)->Insert(si)); +} + extern "C" LLVMValueRef LLVMBuildAtomicCmpXchg(LLVMBuilderRef B, LLVMValueRef target, LLVMValueRef old, diff --git a/src/rustllvm/rustllvm.def.in b/src/rustllvm/rustllvm.def.in index 73bf1af90cd34..dd5dc7102d1e9 100644 --- a/src/rustllvm/rustllvm.def.in +++ b/src/rustllvm/rustllvm.def.in @@ -84,6 +84,8 @@ LLVMArrayType LLVMBasicBlockAsValue LLVMBlockAddress LLVMBuildAShr +LLVMBuildAtomicLoad +LLVMBuildAtomicStore LLVMBuildAtomicCmpXchg LLVMBuildAtomicRMW LLVMBuildAdd diff --git a/src/test/run-pass/intrinsic-atomics.rs b/src/test/run-pass/intrinsic-atomics.rs index 42d4f5e4d2078..d4701f74488c8 100644 --- a/src/test/run-pass/intrinsic-atomics.rs +++ b/src/test/run-pass/intrinsic-atomics.rs @@ -15,6 +15,12 @@ mod rusti { pub fn atomic_cxchg_acq(dst: &mut int, old: int, src: int) -> int; pub fn atomic_cxchg_rel(dst: &mut int, old: int, src: int) -> int; + pub fn atomic_load(src: &int) -> int; + pub fn atomic_load_acq(src: &int) -> int; + + pub fn atomic_store(dst: &mut int, val: int); + pub fn atomic_store_rel(dst: &mut int, val: int); + pub fn atomic_xchg(dst: &mut int, src: int) -> int; pub fn atomic_xchg_acq(dst: &mut int, src: int) -> int; pub fn atomic_xchg_rel(dst: &mut int, src: int) -> int; @@ -33,6 +39,15 @@ pub fn main() { unsafe { let mut x = ~1; + assert!(rusti::atomic_load(x) == 1); + *x = 5; + assert!(rusti::atomic_load_acq(x) == 5); + + rusti::atomic_store(x,3); + assert!(*x == 3); + rusti::atomic_store_rel(x,1); + assert!(*x == 1); + assert!(rusti::atomic_cxchg(x, 1, 2) == 1); assert!(*x == 2); From 2a9a4a81e15fbd8146ce8fe5842c46ad615cbcf6 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Sun, 12 May 2013 17:48:01 -0400 Subject: [PATCH 385/410] Don't create subprocesses for the `rust` command Instead link against the built libraries and directly invoke those. --- src/driver/driver.rs | 3 -- src/librust/rust.rc | 99 ++++++++++++++++++--------------------- src/librustpkg/rustpkg.rc | 3 +- 3 files changed, 47 insertions(+), 58 deletions(-) diff --git a/src/driver/driver.rs b/src/driver/driver.rs index d3ab066929731..70dc9e895c01e 100644 --- a/src/driver/driver.rs +++ b/src/driver/driver.rs @@ -8,9 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#[no_core]; -extern mod core(vers = "0.7-pre"); - #[cfg(rustpkg)] extern mod this(name = "rustpkg", vers = "0.7-pre"); diff --git a/src/librust/rust.rc b/src/librust/rust.rc index 983ac1f1aaa65..92510be56c3a8 100644 --- a/src/librust/rust.rc +++ b/src/librust/rust.rc @@ -20,6 +20,11 @@ #[license = "MIT/ASL2"]; #[crate_type = "lib"]; +extern mod rustpkg(vers = "0.7-pre"); +extern mod rustdoc(vers = "0.7-pre"); +extern mod rusti(vers = "0.7-pre"); +extern mod rustc(vers = "0.7-pre"); + use core::run; enum ValidUsage { @@ -36,13 +41,13 @@ impl ValidUsage { } enum Action<'self> { - Exec(&'self str), - Call(&'self fn(args: &[~str]) -> ValidUsage) + Call(&'self fn(args: &[~str]) -> ValidUsage), + CallMain(&'static str, &'self fn()), } enum UsageSource<'self> { - UsgExec(&'self str), - UsgStr(&'self str) + UsgStr(&'self str), + UsgCall(&'self fn()), } struct Command<'self> { @@ -55,9 +60,9 @@ struct Command<'self> { static commands: &'static [Command<'static>] = &[ Command{ cmd: "build", - action: Exec("rustc"), + action: CallMain("rustc", rustc::main), usage_line: "compile rust source files", - usage_full: UsgExec("rustc --help") + usage_full: UsgCall(rustc_help), }, Command{ cmd: "run", @@ -81,21 +86,21 @@ static commands: &'static [Command<'static>] = &[ }, Command{ cmd: "doc", - action: Exec("rustdoc"), + action: CallMain("rustdoc", rustdoc::main), usage_line: "generate documentation from doc comments", - usage_full: UsgExec("rustdoc --help") + usage_full: UsgCall(rustdoc::config::usage), }, Command{ cmd: "pkg", - action: Exec("rustpkg"), + action: CallMain("rustpkg", rustpkg::main), usage_line: "download, build, install rust packages", - usage_full: UsgExec("rustpkg --help") + usage_full: UsgCall(rustpkg::usage::general), }, Command{ cmd: "sketch", - action: Exec("rusti"), + action: CallMain("rusti", rusti::main), usage_line: "run a rust interpreter", - usage_full: UsgStr("\nUsage:\trusti") + usage_full: UsgStr("\nUsage:\trusti"), }, Command{ cmd: "help", @@ -109,6 +114,10 @@ static commands: &'static [Command<'static>] = &[ } ]; +fn rustc_help() { + rustc::usage(copy os::args()[0]) +} + fn find_cmd(command_string: &str) -> Option { do commands.find |command| { command.cmd == command_string @@ -120,20 +129,14 @@ fn cmd_help(args: &[~str]) -> ValidUsage { match find_cmd(command_string) { Some(command) => { match command.action { - Exec(s) => io::println(fmt!( + CallMain(prog, _) => io::println(fmt!( "The %s command is an alias for the %s program.", - command.cmd, s)), + command.cmd, prog)), _ => () } match command.usage_full { - UsgStr(msg) => io::println(fmt!("%s\n", msg)), - UsgExec(commandline) => { - let mut words = ~[]; - for str::each_word(commandline) |word| { words.push(word.to_owned()) } - let words = words; - let (prog, args) = (words.head(), words.tail()); - run::run_program(*prog, args); - } + UsgStr(msg) => io::println(fmt!("%s\n", msg)), + UsgCall(f) => f(), } Valid }, @@ -151,17 +154,12 @@ fn cmd_test(args: &[~str]) -> ValidUsage { match args { [filename] => { let test_exec = Path(filename).filestem().unwrap() + "test~"; - if run::run_program("rustc", [ - ~"--test", - filename.to_owned(), - ~"-o", - test_exec.to_owned() - ]) == 0 { - run::run_program(~"./" + test_exec, []); - } + invoke("rustc", &[~"--test", filename.to_owned(), + ~"-o", test_exec.to_owned()], rustc::main); + run::run_program(~"./" + test_exec, []); Valid } - _ => Invalid + _ => Invalid } } @@ -169,32 +167,27 @@ fn cmd_run(args: &[~str]) -> ValidUsage { match args { [filename, ..prog_args] => { let exec = Path(filename).filestem().unwrap() + "~"; - if run::run_program("rustc", [ - filename.to_owned(), - ~"-o", - exec.to_owned() - ]) == 0 { - run::run_program(~"./"+exec, prog_args); - } + invoke("rustc", &[filename.to_owned(), ~"-o", exec.to_owned()], + rustc::main); + run::run_program(~"./"+exec, prog_args); Valid } - _ => Invalid + _ => Invalid } } +fn invoke(prog: &str, args: &[~str], f: &fn()) { + let mut osargs = ~[prog.to_owned()]; + osargs.push_all_move(args.to_owned()); + os::set_args(osargs); + f(); +} + fn do_command(command: &Command, args: &[~str]) -> ValidUsage { match command.action { Call(f) => f(args), - Exec(commandline) => { - let mut words = ~[]; - for str::each_word(commandline) |word| { words.push(word.to_owned()) } - let words = words; - let (prog, prog_args) = (words.head(), words.tail()); - let exitstatus = run::run_program( - *prog, - vec::append(vec::to_owned(prog_args), args) - ); - os::set_exit_status(exitstatus); + CallMain(prog, f) => { + invoke(prog, args, f); Valid } } @@ -232,11 +225,9 @@ pub fn main() { let args = os_args.tail(); if !args.is_empty() { - for commands.each |command| { - if command.cmd == *args.head() { - let result = do_command(command, args.tail()); - if result.is_valid() { return; } - } + for find_cmd(*args.head()).each |command| { + let result = do_command(command, args.tail()); + if result.is_valid() { return; } } } diff --git a/src/librustpkg/rustpkg.rc b/src/librustpkg/rustpkg.rc index dd5806ba01568..502f34a4d9e47 100644 --- a/src/librustpkg/rustpkg.rc +++ b/src/librustpkg/rustpkg.rc @@ -42,12 +42,13 @@ use context::Ctx; mod conditions; mod context; -mod usage; mod path_util; mod tests; mod util; mod workspace; +pub mod usage; + /// A PkgScript represents user-supplied custom logic for /// special build hooks. This only exists for packages with /// an explicit package script. From 4f8084a363b352e4a1d75f9ab53f6defcb65d366 Mon Sep 17 00:00:00 2001 From: Brendan Zabarauskas Date: Mon, 13 May 2013 07:57:27 +1000 Subject: [PATCH 386/410] Make Float::classify matching more clear for f64 and f32 --- src/libcore/num/f32.rs | 17 +++++++---------- src/libcore/num/f64.rs | 17 +++++++---------- 2 files changed, 14 insertions(+), 20 deletions(-) diff --git a/src/libcore/num/f32.rs b/src/libcore/num/f32.rs index 93e881c50e82f..a872a6388ba46 100644 --- a/src/libcore/num/f32.rs +++ b/src/libcore/num/f32.rs @@ -578,10 +578,7 @@ impl Float for f32 { /// Returns `true` if the number is neither zero, infinite, subnormal or NaN #[inline(always)] fn is_normal(&self) -> bool { - match self.classify() { - FPNormal => true, - _ => false, - } + self.classify() == FPNormal } /// Returns the floating point category of the number. If only one property is going to @@ -591,14 +588,14 @@ impl Float for f32 { static MAN_MASK: u32 = 0x007fffff; match ( + unsafe { ::cast::transmute::(*self) } & MAN_MASK, unsafe { ::cast::transmute::(*self) } & EXP_MASK, - unsafe { ::cast::transmute::(*self) } & MAN_MASK ) { - (EXP_MASK, 0) => FPInfinite, - (EXP_MASK, _) => FPNaN, - (exp, _) if exp != 0 => FPNormal, - _ if self.is_zero() => FPZero, - _ => FPSubnormal, + (0, 0) => FPZero, + (_, 0) => FPSubnormal, + (0, EXP_MASK) => FPInfinite, + (_, EXP_MASK) => FPNaN, + _ => FPNormal, } } diff --git a/src/libcore/num/f64.rs b/src/libcore/num/f64.rs index 096206d718301..8a17ae91934bb 100644 --- a/src/libcore/num/f64.rs +++ b/src/libcore/num/f64.rs @@ -621,10 +621,7 @@ impl Float for f64 { /// Returns `true` if the number is neither zero, infinite, subnormal or NaN #[inline(always)] fn is_normal(&self) -> bool { - match self.classify() { - FPNormal => true, - _ => false, - } + self.classify() == FPNormal } /// Returns the floating point category of the number. If only one property is going to @@ -634,14 +631,14 @@ impl Float for f64 { static MAN_MASK: u64 = 0x000fffffffffffff; match ( + unsafe { ::cast::transmute::(*self) } & MAN_MASK, unsafe { ::cast::transmute::(*self) } & EXP_MASK, - unsafe { ::cast::transmute::(*self) } & MAN_MASK ) { - (EXP_MASK, 0) => FPInfinite, - (EXP_MASK, _) => FPNaN, - (exp, _) if exp != 0 => FPNormal, - _ if self.is_zero() => FPZero, - _ => FPSubnormal, + (0, 0) => FPZero, + (_, 0) => FPSubnormal, + (0, EXP_MASK) => FPInfinite, + (_, EXP_MASK) => FPNaN, + _ => FPNormal, } } From fa1a172f9c8b5071a7bc9d818bfa6ae26401ec5b Mon Sep 17 00:00:00 2001 From: Matthijs Hofstra Date: Mon, 13 May 2013 00:12:14 +0200 Subject: [PATCH 387/410] Removed unnecessary check from build.rs --- src/librustc/middle/trans/build.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/librustc/middle/trans/build.rs b/src/librustc/middle/trans/build.rs index 6fb2250871478..b2af91887ecbf 100644 --- a/src/librustc/middle/trans/build.rs +++ b/src/librustc/middle/trans/build.rs @@ -541,10 +541,7 @@ pub fn AtomicLoad(cx: block, PointerVal: ValueRef, order: AtomicOrdering) -> Val unsafe { let ccx = cx.fcx.ccx; if cx.unreachable { - let ty = val_ty(PointerVal); - let eltty = if llvm::LLVMGetTypeKind(ty) == lib::llvm::Array { - llvm::LLVMGetElementType(ty) } else { ccx.int_type }; - return llvm::LLVMGetUndef(eltty); + return llvm::LLVMGetUndef(ccx.int_type); } count_insn(cx, "load.atomic"); return llvm::LLVMBuildAtomicLoad(B(cx), PointerVal, order); From 06ef889cdc77db862d526bf6a607ecdf3ee80beb Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Thu, 9 May 2013 14:14:42 -0700 Subject: [PATCH 388/410] libsyntax: Remove `extern mod foo { ... }` from the language. --- doc/rust.md | 81 +++++++------- doc/tutorial-ffi.md | 3 +- src/libcore/os.rs | 23 ++-- src/libstd/priority_queue.rs | 18 ++-- src/libstd/rc.rs | 11 +- src/libstd/uv_ll.rs | 141 ++++++++++++------------- src/libsyntax/parse/obsolete.rs | 6 ++ src/libsyntax/parse/parser.rs | 17 +-- src/test/compile-fail/unused-unsafe.rs | 6 +- 9 files changed, 160 insertions(+), 146 deletions(-) diff --git a/doc/rust.md b/doc/rust.md index 60848441e4e77..2e580cab265d5 100644 --- a/doc/rust.md +++ b/doc/rust.md @@ -618,7 +618,7 @@ each of which may have some number of [attributes](#attributes) attached to it. ~~~~~~~~ {.ebnf .gram} item : mod_item | fn_item | type_item | struct_item | enum_item - | static_item | trait_item | impl_item | foreign_mod_item ; + | static_item | trait_item | impl_item | extern_block ; ~~~~~~~~ An _item_ is a component of a crate; some module items can be defined in crate @@ -752,10 +752,11 @@ link_attr : ident '=' literal ; ~~~~~~~~ An _`extern mod` declaration_ specifies a dependency on an external crate. -The external crate is then bound into the declaring scope as the `ident` provided in the `extern_mod_decl`. +The external crate is then bound into the declaring scope +as the `ident` provided in the `extern_mod_decl`. -The external crate is resolved to a specific `soname` at compile time, and a -runtime linkage requirement to that `soname` is passed to the linker for +The external crate is resolved to a specific `soname` at compile time, +and a runtime linkage requirement to that `soname` is passed to the linker for loading at runtime. The `soname` is resolved at compile time by scanning the compiler's library path and matching the `link_attrs` provided in the `use_decl` against any `#link` attributes that were declared on the external @@ -992,10 +993,10 @@ Thus the return type on `f` only needs to reflect the `if` branch of the conditi #### Extern functions Extern functions are part of Rust's foreign function interface, -providing the opposite functionality to [foreign modules](#foreign-modules). -Whereas foreign modules allow Rust code to call foreign code, -extern functions with bodies defined in Rust code _can be called by foreign code_. -They are defined in the same way as any other Rust function, +providing the opposite functionality to [external blocks](#external-blocks). +Whereas external blocks allow Rust code to call foreign code, +extern functions with bodies defined in Rust code _can be called by foreign +code_. They are defined in the same way as any other Rust function, except that they have the `extern` modifier. ~~~ @@ -1011,7 +1012,8 @@ let fptr: *u8 = new_vec; ~~~ The primary motivation for extern functions is -to create callbacks for foreign functions that expect to receive function pointers. +to create callbacks for foreign functions that expect to receive function +pointers. ### Type definitions @@ -1308,64 +1310,61 @@ impl Seq for u32 { } ~~~~ -### Foreign modules +### External blocks ~~~ {.ebnf .gram} -foreign_mod_item : "extern mod" ident '{' foreign_mod '} ; -foreign_mod : [ foreign_fn ] * ; +extern_block_item : "extern" '{' extern_block '} ; +extern_block : [ foreign_fn ] * ; ~~~ -Foreign modules form the basis for Rust's foreign function interface. A -foreign module describes functions in external, non-Rust -libraries. -Functions within foreign modules are declared in the same way as other Rust functions, -with the exception that they may not have a body and are instead terminated by a semicolon. +External blocks form the basis for Rust's foreign function interface. +Declarations in an external block describe symbols +in external, non-Rust libraries. + +Functions within external blocks +are declared in the same way as other Rust functions, +with the exception that they may not have a body +and are instead terminated by a semicolon. ~~~ # use core::libc::{c_char, FILE}; # #[nolink] -extern mod c { +extern { fn fopen(filename: *c_char, mode: *c_char) -> *FILE; } ~~~ -Functions within foreign modules may be called by Rust code, just like functions defined in Rust. -The Rust compiler automatically translates between the Rust ABI and the foreign ABI. - -The name of the foreign module has special meaning to the Rust compiler in -that it will treat the module name as the name of a library to link to, -performing the linking as appropriate for the target platform. The name -given for the foreign module will be transformed in a platform-specific way -to determine the name of the library. For example, on Linux the name of the -foreign module is prefixed with 'lib' and suffixed with '.so', so the -foreign mod 'rustrt' would be linked to a library named 'librustrt.so'. +Functions within external blocks may be called by Rust code, +just like functions defined in Rust. +The Rust compiler automatically translates +between the Rust ABI and the foreign ABI. -A number of [attributes](#attributes) control the behavior of foreign -modules. +A number of [attributes](#attributes) control the behavior of external +blocks. -By default foreign modules assume that the library they are calling use the -standard C "cdecl" ABI. Other ABIs may be specified using the `abi` -attribute as in +By default external blocks assume +that the library they are calling uses the standard C "cdecl" ABI. +Other ABIs may be specified using the `abi` attribute as in ~~~{.xfail-test} // Interface to the Windows API #[abi = "stdcall"] -extern mod kernel32 { } +extern { } ~~~ -The `link_name` attribute allows the default library naming behavior to -be overridden by explicitly specifying the name of the library. +The `link_name` attribute allows the name of the library to be specified. ~~~{.xfail-test} #[link_name = "crypto"] -extern mod mycrypto { } +extern { } ~~~ -The `nolink` attribute tells the Rust compiler not to do any linking for the foreign module. -This is particularly useful for creating foreign -modules for libc, which tends to not follow standard library naming -conventions and is linked to all Rust programs anyway. +The `nolink` attribute tells the Rust compiler +not to do any linking for the external block. +This is particularly useful for creating external blocks for libc, +which tends to not follow standard library naming conventions +and is linked to all Rust programs anyway. ## Attributes diff --git a/doc/tutorial-ffi.md b/doc/tutorial-ffi.md index d8367fbdc2d79..b2c2a8824eee6 100644 --- a/doc/tutorial-ffi.md +++ b/doc/tutorial-ffi.md @@ -237,7 +237,8 @@ convention to use: ~~~~ #[cfg(target_os = "win32")] #[abi = "stdcall"] -extern mod kernel32 { +#[link_name = "kernel32"] +extern { fn SetEnvironmentVariableA(n: *u8, v: *u8) -> int; } ~~~~ diff --git a/src/libcore/os.rs b/src/libcore/os.rs index 030b7ec3e42ff..d983377245c4e 100644 --- a/src/libcore/os.rs +++ b/src/libcore/os.rs @@ -196,10 +196,10 @@ pub fn env() -> ~[(~str,~str)] { } #[cfg(unix)] unsafe fn get_env_pairs() -> ~[~str] { - extern mod rustrt { + extern { unsafe fn rust_env_pairs() -> **libc::c_char; } - let environ = rustrt::rust_env_pairs(); + let environ = rust_env_pairs(); if (environ as uint == 0) { fail!(fmt!("os::env() failure getting env string from OS: %s", os::last_os_error())); @@ -685,9 +685,8 @@ pub fn list_dir(p: &Path) -> ~[~str] { unsafe fn get_list(p: &Path) -> ~[~str] { use libc::{dirent_t}; use libc::{opendir, readdir, closedir}; - extern mod rustrt { - unsafe fn rust_list_dir_val(ptr: *dirent_t) - -> *libc::c_char; + extern { + unsafe fn rust_list_dir_val(ptr: *dirent_t) -> *libc::c_char; } let input = p.to_str(); let mut strings = ~[]; @@ -698,10 +697,8 @@ pub fn list_dir(p: &Path) -> ~[~str] { debug!("os::list_dir -- opendir() SUCCESS"); let mut entry_ptr = readdir(dir_ptr); while (entry_ptr as uint != 0) { - strings.push( - str::raw::from_c_str( - rustrt::rust_list_dir_val( - entry_ptr))); + strings.push(str::raw::from_c_str(rust_list_dir_val( + entry_ptr))); entry_ptr = readdir(dir_ptr); } closedir(dir_ptr); @@ -729,7 +726,7 @@ pub fn list_dir(p: &Path) -> ~[~str] { }; use unstable::exchange_alloc::{malloc_raw, free_raw}; #[nolink] - extern mod rustrt { + extern { unsafe fn rust_list_dir_wfd_size() -> libc::size_t; unsafe fn rust_list_dir_wfd_fp_buf(wfd: *libc::c_void) -> *u16; @@ -737,8 +734,7 @@ pub fn list_dir(p: &Path) -> ~[~str] { fn star(p: &Path) -> Path { p.push("*") } do as_utf16_p(star(p).to_str()) |path_ptr| { let mut strings = ~[]; - let wfd_ptr = malloc_raw( - rustrt::rust_list_dir_wfd_size() as uint); + let wfd_ptr = malloc_raw(rust_list_dir_wfd_size() as uint); let find_handle = FindFirstFileW( path_ptr, @@ -746,8 +742,7 @@ pub fn list_dir(p: &Path) -> ~[~str] { if find_handle as int != INVALID_HANDLE_VALUE { let mut more_files = 1 as libc::c_int; while more_files != 0 { - let fp_buf = rustrt::rust_list_dir_wfd_fp_buf( - wfd_ptr); + let fp_buf = rust_list_dir_wfd_fp_buf(wfd_ptr); if fp_buf as uint == 0 { fail!(~"os::list_dir() failure:"+ ~" got null ptr from wfd"); diff --git a/src/libstd/priority_queue.rs b/src/libstd/priority_queue.rs index ded632b29d94e..5b3f3e6efa746 100644 --- a/src/libstd/priority_queue.rs +++ b/src/libstd/priority_queue.rs @@ -14,7 +14,7 @@ use core::old_iter::BaseIter; use core::util::{replace, swap}; #[abi = "rust-intrinsic"] -extern "rust-intrinsic" mod rusti { +extern "rust-intrinsic" { fn move_val_init(dst: &mut T, src: T); fn init() -> T; #[cfg(not(stage0))] @@ -154,13 +154,13 @@ pub impl PriorityQueue { let parent = (pos - 1) >> 1; if new > self.data[parent] { let x = replace(&mut self.data[parent], rusti::uninit()); - rusti::move_val_init(&mut self.data[pos], x); + move_val_init(&mut self.data[pos], x); pos = parent; loop } break } - rusti::move_val_init(&mut self.data[pos], new); + move_val_init(&mut self.data[pos], new); } } @@ -173,13 +173,13 @@ pub impl PriorityQueue { let parent = (pos - 1) >> 1; if new > self.data[parent] { let x = replace(&mut self.data[parent], rusti::init()); - rusti::move_val_init(&mut self.data[pos], x); + move_val_init(&mut self.data[pos], x); pos = parent; loop } break } - rusti::move_val_init(&mut self.data[pos], new); + move_val_init(&mut self.data[pos], new); } } @@ -197,12 +197,12 @@ pub impl PriorityQueue { child = right; } let x = replace(&mut self.data[child], rusti::uninit()); - rusti::move_val_init(&mut self.data[pos], x); + move_val_init(&mut self.data[pos], x); pos = child; child = 2 * pos + 1; } - rusti::move_val_init(&mut self.data[pos], new); + move_val_init(&mut self.data[pos], new); self.siftup(start, pos); } } @@ -220,12 +220,12 @@ pub impl PriorityQueue { child = right; } let x = replace(&mut self.data[child], rusti::init()); - rusti::move_val_init(&mut self.data[pos], x); + move_val_init(&mut self.data[pos], x); pos = child; child = 2 * pos + 1; } - rusti::move_val_init(&mut self.data[pos], new); + move_val_init(&mut self.data[pos], new); self.siftup(start, pos); } } diff --git a/src/libstd/rc.rs b/src/libstd/rc.rs index 0c0f11fc9f023..8cf2da3a1e832 100644 --- a/src/libstd/rc.rs +++ b/src/libstd/rc.rs @@ -110,6 +110,13 @@ mod test_rc { } } +#[abi = "rust-intrinsic"] +extern "rust-intrinsic" { + fn init() -> T; + #[cfg(not(stage0))] + fn uninit() -> T; +} + #[deriving(Eq)] enum Borrow { Mutable, @@ -171,7 +178,7 @@ impl Drop for RcMut { unsafe { (*self.ptr).count -= 1; if (*self.ptr).count == 0 { - util::replace_ptr(self.ptr, intrinsics::uninit()); + util::replace_ptr(self.ptr, uninit()); free(self.ptr as *c_void) } } @@ -185,7 +192,7 @@ impl Drop for RcMut { unsafe { (*self.ptr).count -= 1; if (*self.ptr).count == 0 { - util::replace_ptr(self.ptr, intrinsics::init()); + util::replace_ptr(self.ptr, init()); free(self.ptr as *c_void) } } diff --git a/src/libstd/uv_ll.rs b/src/libstd/uv_ll.rs index 5cccf2c348dbf..a14c048b8ded5 100644 --- a/src/libstd/uv_ll.rs +++ b/src/libstd/uv_ll.rs @@ -730,8 +730,7 @@ pub mod uv_ll_struct_stubgen { } #[nolink] -extern mod rustrt { - +extern { // libuv public API unsafe fn rust_uv_loop_new() -> *libc::c_void; unsafe fn rust_uv_loop_delete(lp: *libc::c_void); @@ -884,49 +883,49 @@ extern mod rustrt { } pub unsafe fn loop_new() -> *libc::c_void { - return rustrt::rust_uv_loop_new(); + return rust_uv_loop_new(); } pub unsafe fn loop_delete(loop_handle: *libc::c_void) { - rustrt::rust_uv_loop_delete(loop_handle); + rust_uv_loop_delete(loop_handle); } pub unsafe fn run(loop_handle: *libc::c_void) { - rustrt::rust_uv_run(loop_handle); + rust_uv_run(loop_handle); } pub unsafe fn close(handle: *T, cb: *u8) { - rustrt::rust_uv_close(handle as *libc::c_void, cb); + rust_uv_close(handle as *libc::c_void, cb); } pub unsafe fn walk(loop_handle: *libc::c_void, cb: *u8, arg: *libc::c_void) { - rustrt::rust_uv_walk(loop_handle, cb, arg); + rust_uv_walk(loop_handle, cb, arg); } pub unsafe fn idle_new() -> *uv_idle_t { - rustrt::rust_uv_idle_new() + rust_uv_idle_new() } pub unsafe fn idle_delete(handle: *uv_idle_t) { - rustrt::rust_uv_idle_delete(handle) + rust_uv_idle_delete(handle) } pub unsafe fn idle_init(loop_handle: *uv_loop_t, handle: *uv_idle_t) -> libc::c_int { - rustrt::rust_uv_idle_init(loop_handle, handle) + rust_uv_idle_init(loop_handle, handle) } pub unsafe fn idle_start(handle: *uv_idle_t, cb: uv_idle_cb) -> libc::c_int { - rustrt::rust_uv_idle_start(handle, cb) + rust_uv_idle_start(handle, cb) } pub unsafe fn idle_stop(handle: *uv_idle_t) -> libc::c_int { - rustrt::rust_uv_idle_stop(handle) + rust_uv_idle_stop(handle) } pub unsafe fn tcp_init(loop_handle: *libc::c_void, handle: *uv_tcp_t) -> libc::c_int { - return rustrt::rust_uv_tcp_init(loop_handle, handle); + return rust_uv_tcp_init(loop_handle, handle); } // FIXME ref #2064 pub unsafe fn tcp_connect(connect_ptr: *uv_connect_t, @@ -934,7 +933,7 @@ pub unsafe fn tcp_connect(connect_ptr: *uv_connect_t, addr_ptr: *sockaddr_in, after_connect_cb: *u8) -> libc::c_int { - return rustrt::rust_uv_tcp_connect(connect_ptr, tcp_handle_ptr, + return rust_uv_tcp_connect(connect_ptr, tcp_handle_ptr, after_connect_cb, addr_ptr); } // FIXME ref #2064 @@ -943,40 +942,40 @@ pub unsafe fn tcp_connect6(connect_ptr: *uv_connect_t, addr_ptr: *sockaddr_in6, after_connect_cb: *u8) -> libc::c_int { - return rustrt::rust_uv_tcp_connect6(connect_ptr, tcp_handle_ptr, + return rust_uv_tcp_connect6(connect_ptr, tcp_handle_ptr, after_connect_cb, addr_ptr); } // FIXME ref #2064 pub unsafe fn tcp_bind(tcp_server_ptr: *uv_tcp_t, addr_ptr: *sockaddr_in) -> libc::c_int { - return rustrt::rust_uv_tcp_bind(tcp_server_ptr, + return rust_uv_tcp_bind(tcp_server_ptr, addr_ptr); } // FIXME ref #2064 pub unsafe fn tcp_bind6(tcp_server_ptr: *uv_tcp_t, addr_ptr: *sockaddr_in6) -> libc::c_int { - return rustrt::rust_uv_tcp_bind6(tcp_server_ptr, + return rust_uv_tcp_bind6(tcp_server_ptr, addr_ptr); } pub unsafe fn tcp_getpeername(tcp_handle_ptr: *uv_tcp_t, name: *sockaddr_in) -> libc::c_int { - return rustrt::rust_uv_tcp_getpeername(tcp_handle_ptr, name); + return rust_uv_tcp_getpeername(tcp_handle_ptr, name); } pub unsafe fn tcp_getpeername6(tcp_handle_ptr: *uv_tcp_t, name: *sockaddr_in6) ->libc::c_int { - return rustrt::rust_uv_tcp_getpeername6(tcp_handle_ptr, name); + return rust_uv_tcp_getpeername6(tcp_handle_ptr, name); } pub unsafe fn listen(stream: *T, backlog: libc::c_int, cb: *u8) -> libc::c_int { - return rustrt::rust_uv_listen(stream as *libc::c_void, backlog, cb); + return rust_uv_listen(stream as *libc::c_void, backlog, cb); } pub unsafe fn accept(server: *libc::c_void, client: *libc::c_void) -> libc::c_int { - return rustrt::rust_uv_accept(server as *libc::c_void, + return rust_uv_accept(server as *libc::c_void, client as *libc::c_void); } @@ -984,57 +983,57 @@ pub unsafe fn write(req: *uv_write_t, stream: *T, buf_in: *~[uv_buf_t], cb: *u8) -> libc::c_int { let buf_ptr = vec::raw::to_ptr(*buf_in); let buf_cnt = vec::len(*buf_in) as i32; - return rustrt::rust_uv_write(req as *libc::c_void, + return rust_uv_write(req as *libc::c_void, stream as *libc::c_void, buf_ptr, buf_cnt, cb); } pub unsafe fn read_start(stream: *uv_stream_t, on_alloc: *u8, on_read: *u8) -> libc::c_int { - return rustrt::rust_uv_read_start(stream as *libc::c_void, + return rust_uv_read_start(stream as *libc::c_void, on_alloc, on_read); } pub unsafe fn read_stop(stream: *uv_stream_t) -> libc::c_int { - return rustrt::rust_uv_read_stop(stream as *libc::c_void); + return rust_uv_read_stop(stream as *libc::c_void); } pub unsafe fn last_error(loop_handle: *libc::c_void) -> uv_err_t { - return rustrt::rust_uv_last_error(loop_handle); + return rust_uv_last_error(loop_handle); } pub unsafe fn strerror(err: *uv_err_t) -> *libc::c_char { - return rustrt::rust_uv_strerror(err); + return rust_uv_strerror(err); } pub unsafe fn err_name(err: *uv_err_t) -> *libc::c_char { - return rustrt::rust_uv_err_name(err); + return rust_uv_err_name(err); } pub unsafe fn async_init(loop_handle: *libc::c_void, async_handle: *uv_async_t, cb: *u8) -> libc::c_int { - return rustrt::rust_uv_async_init(loop_handle, + return rust_uv_async_init(loop_handle, async_handle, cb); } pub unsafe fn async_send(async_handle: *uv_async_t) { - return rustrt::rust_uv_async_send(async_handle); + return rust_uv_async_send(async_handle); } pub unsafe fn buf_init(input: *u8, len: uint) -> uv_buf_t { let out_buf = uv_buf_t { base: ptr::null(), len: 0 as libc::size_t }; let out_buf_ptr: *uv_buf_t = &out_buf; - rustrt::rust_uv_buf_init(out_buf_ptr, input, len as size_t); + rust_uv_buf_init(out_buf_ptr, input, len as size_t); return out_buf; } pub unsafe fn ip4_addr(ip: &str, port: int) -> sockaddr_in { do str::as_c_str(ip) |ip_buf| { - rustrt::rust_uv_ip4_addr(ip_buf as *u8, + rust_uv_ip4_addr(ip_buf as *u8, port as libc::c_int) } } pub unsafe fn ip6_addr(ip: &str, port: int) -> sockaddr_in6 { do str::as_c_str(ip) |ip_buf| { - rustrt::rust_uv_ip6_addr(ip_buf as *u8, + rust_uv_ip6_addr(ip_buf as *u8, port as libc::c_int) } } @@ -1043,7 +1042,7 @@ pub unsafe fn ip4_name(src: &sockaddr_in) -> ~str { let dst: ~[u8] = ~[0u8,0u8,0u8,0u8,0u8,0u8,0u8,0u8, 0u8,0u8,0u8,0u8,0u8,0u8,0u8,0u8]; do vec::as_imm_buf(dst) |dst_buf, size| { - rustrt::rust_uv_ip4_name(to_unsafe_ptr(src), + rust_uv_ip4_name(to_unsafe_ptr(src), dst_buf, size as libc::size_t); // seems that checking the result of uv_ip4_name // doesn't work too well.. @@ -1064,7 +1063,7 @@ pub unsafe fn ip6_name(src: &sockaddr_in6) -> ~str { 0u8,0u8,0u8,0u8,0u8,0u8]; do vec::as_imm_buf(dst) |dst_buf, size| { let src_unsafe_ptr = to_unsafe_ptr(src); - let result = rustrt::rust_uv_ip6_name(src_unsafe_ptr, + let result = rust_uv_ip6_name(src_unsafe_ptr, dst_buf, size as libc::size_t); match result { 0i32 => str::raw::from_buf(dst_buf), @@ -1073,23 +1072,23 @@ pub unsafe fn ip6_name(src: &sockaddr_in6) -> ~str { } } pub unsafe fn ip4_port(src: &sockaddr_in) -> uint { - rustrt::rust_uv_ip4_port(to_unsafe_ptr(src)) as uint + rust_uv_ip4_port(to_unsafe_ptr(src)) as uint } pub unsafe fn ip6_port(src: &sockaddr_in6) -> uint { - rustrt::rust_uv_ip6_port(to_unsafe_ptr(src)) as uint + rust_uv_ip6_port(to_unsafe_ptr(src)) as uint } pub unsafe fn timer_init(loop_ptr: *libc::c_void, timer_ptr: *uv_timer_t) -> libc::c_int { - return rustrt::rust_uv_timer_init(loop_ptr, timer_ptr); + return rust_uv_timer_init(loop_ptr, timer_ptr); } pub unsafe fn timer_start(timer_ptr: *uv_timer_t, cb: *u8, timeout: uint, repeat: uint) -> libc::c_int { - return rustrt::rust_uv_timer_start(timer_ptr, cb, timeout as libc::c_uint, + return rust_uv_timer_start(timer_ptr, cb, timeout as libc::c_uint, repeat as libc::c_uint); } pub unsafe fn timer_stop(timer_ptr: *uv_timer_t) -> libc::c_int { - return rustrt::rust_uv_timer_stop(timer_ptr); + return rust_uv_timer_stop(timer_ptr); } pub unsafe fn getaddrinfo(loop_ptr: *libc::c_void, handle: *uv_getaddrinfo_t, @@ -1097,7 +1096,7 @@ pub unsafe fn getaddrinfo(loop_ptr: *libc::c_void, node_name_ptr: *u8, service_name_ptr: *u8, hints: *addrinfo) -> libc::c_int { - rustrt::rust_uv_getaddrinfo(loop_ptr, + rust_uv_getaddrinfo(loop_ptr, handle, cb, node_name_ptr, @@ -1105,7 +1104,7 @@ pub unsafe fn getaddrinfo(loop_ptr: *libc::c_void, hints) } pub unsafe fn freeaddrinfo(res: *addrinfo) { - rustrt::rust_uv_freeaddrinfo(res); + rust_uv_freeaddrinfo(res); } // libuv struct initializers @@ -1131,53 +1130,53 @@ pub fn getaddrinfo_t() -> uv_getaddrinfo_t { // data access helpers pub unsafe fn get_loop_for_uv_handle(handle: *T) -> *libc::c_void { - return rustrt::rust_uv_get_loop_for_uv_handle(handle as *libc::c_void); + return rust_uv_get_loop_for_uv_handle(handle as *libc::c_void); } pub unsafe fn get_stream_handle_from_connect_req(connect: *uv_connect_t) -> *uv_stream_t { - return rustrt::rust_uv_get_stream_handle_from_connect_req( + return rust_uv_get_stream_handle_from_connect_req( connect); } pub unsafe fn get_stream_handle_from_write_req( write_req: *uv_write_t) -> *uv_stream_t { - return rustrt::rust_uv_get_stream_handle_from_write_req( + return rust_uv_get_stream_handle_from_write_req( write_req); } pub unsafe fn get_data_for_uv_loop(loop_ptr: *libc::c_void) -> *libc::c_void { - rustrt::rust_uv_get_data_for_uv_loop(loop_ptr) + rust_uv_get_data_for_uv_loop(loop_ptr) } pub unsafe fn set_data_for_uv_loop(loop_ptr: *libc::c_void, data: *libc::c_void) { - rustrt::rust_uv_set_data_for_uv_loop(loop_ptr, data); + rust_uv_set_data_for_uv_loop(loop_ptr, data); } pub unsafe fn get_data_for_uv_handle(handle: *T) -> *libc::c_void { - return rustrt::rust_uv_get_data_for_uv_handle(handle as *libc::c_void); + return rust_uv_get_data_for_uv_handle(handle as *libc::c_void); } pub unsafe fn set_data_for_uv_handle(handle: *T, data: *U) { - rustrt::rust_uv_set_data_for_uv_handle(handle as *libc::c_void, + rust_uv_set_data_for_uv_handle(handle as *libc::c_void, data as *libc::c_void); } pub unsafe fn get_data_for_req(req: *T) -> *libc::c_void { - return rustrt::rust_uv_get_data_for_req(req as *libc::c_void); + return rust_uv_get_data_for_req(req as *libc::c_void); } pub unsafe fn set_data_for_req(req: *T, data: *U) { - rustrt::rust_uv_set_data_for_req(req as *libc::c_void, + rust_uv_set_data_for_req(req as *libc::c_void, data as *libc::c_void); } pub unsafe fn get_base_from_buf(buf: uv_buf_t) -> *u8 { - return rustrt::rust_uv_get_base_from_buf(buf); + return rust_uv_get_base_from_buf(buf); } pub unsafe fn get_len_from_buf(buf: uv_buf_t) -> libc::size_t { - return rustrt::rust_uv_get_len_from_buf(buf); + return rust_uv_get_len_from_buf(buf); } pub unsafe fn malloc_buf_base_of(suggested_size: libc::size_t) -> *u8 { - return rustrt::rust_uv_malloc_buf_base_of(suggested_size); + return rust_uv_malloc_buf_base_of(suggested_size); } pub unsafe fn free_base_of_buf(buf: uv_buf_t) { - rustrt::rust_uv_free_base_of_buf(buf); + rust_uv_free_base_of_buf(buf); } pub unsafe fn get_last_err_info(uv_loop: *libc::c_void) -> ~str { @@ -1203,22 +1202,22 @@ pub struct uv_err_data { } pub unsafe fn is_ipv4_addrinfo(input: *addrinfo) -> bool { - rustrt::rust_uv_is_ipv4_addrinfo(input) + rust_uv_is_ipv4_addrinfo(input) } pub unsafe fn is_ipv6_addrinfo(input: *addrinfo) -> bool { - rustrt::rust_uv_is_ipv6_addrinfo(input) + rust_uv_is_ipv6_addrinfo(input) } pub unsafe fn get_INADDR_NONE() -> u32 { - rustrt::rust_uv_helper_get_INADDR_NONE() + rust_uv_helper_get_INADDR_NONE() } pub unsafe fn get_next_addrinfo(input: *addrinfo) -> *addrinfo { - rustrt::rust_uv_get_next_addrinfo(input) + rust_uv_get_next_addrinfo(input) } pub unsafe fn addrinfo_as_sockaddr_in(input: *addrinfo) -> *sockaddr_in { - rustrt::rust_uv_addrinfo_as_sockaddr_in(input) + rust_uv_addrinfo_as_sockaddr_in(input) } pub unsafe fn addrinfo_as_sockaddr_in6(input: *addrinfo) -> *sockaddr_in6 { - rustrt::rust_uv_addrinfo_as_sockaddr_in6(input) + rust_uv_addrinfo_as_sockaddr_in6(input) } #[cfg(test)] @@ -1792,7 +1791,7 @@ mod test { unsafe { struct_size_check_common::( ~"uv_tcp_t", - super::rustrt::rust_uv_helper_uv_tcp_t_size() + super::rust_uv_helper_uv_tcp_t_size() ); } } @@ -1801,7 +1800,7 @@ mod test { unsafe { struct_size_check_common::( ~"uv_connect_t", - super::rustrt::rust_uv_helper_uv_connect_t_size() + super::rust_uv_helper_uv_connect_t_size() ); } } @@ -1810,7 +1809,7 @@ mod test { unsafe { struct_size_check_common::( ~"uv_buf_t", - super::rustrt::rust_uv_helper_uv_buf_t_size() + super::rust_uv_helper_uv_buf_t_size() ); } } @@ -1819,7 +1818,7 @@ mod test { unsafe { struct_size_check_common::( ~"uv_write_t", - super::rustrt::rust_uv_helper_uv_write_t_size() + super::rust_uv_helper_uv_write_t_size() ); } } @@ -1829,7 +1828,7 @@ mod test { unsafe { struct_size_check_common::( ~"sockaddr_in", - super::rustrt::rust_uv_helper_sockaddr_in_size() + super::rust_uv_helper_sockaddr_in_size() ); } } @@ -1837,7 +1836,7 @@ mod test { fn test_uv_ll_struct_size_sockaddr_in6() { unsafe { let foreign_handle_size = - super::rustrt::rust_uv_helper_sockaddr_in6_size(); + super::rust_uv_helper_sockaddr_in6_size(); let rust_handle_size = sys::size_of::(); let output = fmt!("sockaddr_in6 -- foreign: %u rust: %u", foreign_handle_size as uint, rust_handle_size); @@ -1856,7 +1855,7 @@ mod test { fn test_uv_ll_struct_size_addr_in() { unsafe { let foreign_handle_size = - super::rustrt::rust_uv_helper_addr_in_size(); + super::rust_uv_helper_addr_in_size(); let rust_handle_size = sys::size_of::(); let output = fmt!("addr_in -- foreign: %u rust: %u", foreign_handle_size as uint, rust_handle_size); @@ -1872,7 +1871,7 @@ mod test { unsafe { struct_size_check_common::( ~"uv_async_t", - super::rustrt::rust_uv_helper_uv_async_t_size() + super::rust_uv_helper_uv_async_t_size() ); } } @@ -1882,7 +1881,7 @@ mod test { unsafe { struct_size_check_common::( ~"uv_timer_t", - super::rustrt::rust_uv_helper_uv_timer_t_size() + super::rust_uv_helper_uv_timer_t_size() ); } } @@ -1893,7 +1892,7 @@ mod test { unsafe { struct_size_check_common::( ~"uv_getaddrinfo_t", - super::rustrt::rust_uv_helper_uv_getaddrinfo_t_size() + super::rust_uv_helper_uv_getaddrinfo_t_size() ); } } @@ -1904,7 +1903,7 @@ mod test { unsafe { struct_size_check_common::( ~"addrinfo", - super::rustrt::rust_uv_helper_uv_timer_t_size() + super::rust_uv_helper_uv_timer_t_size() ); } } diff --git a/src/libsyntax/parse/obsolete.rs b/src/libsyntax/parse/obsolete.rs index e9e5bdfe13da5..3e64133e893f2 100644 --- a/src/libsyntax/parse/obsolete.rs +++ b/src/libsyntax/parse/obsolete.rs @@ -61,6 +61,7 @@ pub enum ObsoleteSyntax { ObsoleteStaticMethod, ObsoleteConstItem, ObsoleteFixedLengthVectorType, + ObsoleteNamedExternModule, } #[cfg(stage0)] @@ -225,6 +226,11 @@ pub impl Parser { "fixed-length vector notation", "instead of `[T * N]`, write `[T, ..N]`" ), + ObsoleteNamedExternModule => ( + "named external module", + "instead of `extern mod foo { ... }`, write `mod foo { \ + extern { ... } }`" + ), }; self.report(sp, kind, kind_str, desc); diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 5aa45ab3c9bec..6b0d5e3d38409 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -82,6 +82,7 @@ use parse::obsolete::ObsoleteMode; use parse::obsolete::{ObsoleteLifetimeNotation, ObsoleteConstManagedPointer}; use parse::obsolete::{ObsoletePurity, ObsoleteStaticMethod}; use parse::obsolete::{ObsoleteConstItem, ObsoleteFixedLengthVectorType}; +use parse::obsolete::{ObsoleteNamedExternModule}; use parse::token::{can_begin_expr, is_ident, is_ident_or_path}; use parse::token::{is_plain_ident, INTERPOLATED, special_idents, token_to_binop}; use parse::token; @@ -415,8 +416,7 @@ pub impl Parser { self.expect_keyword(&~"fn"); if self.parse_fn_ty_sigil().is_some() { - self.obsolete(*self.span, - ObsoletePostFnTySigil); + self.obsolete(*self.span, ObsoletePostFnTySigil); } let (decl, lifetimes) = self.parse_ty_fn_decl(); @@ -3688,10 +3688,11 @@ pub impl Parser { // at this point, this is essentially a wrapper for // parse_foreign_items. - fn parse_foreign_mod_items(&self, sort: ast::foreign_mod_sort, + fn parse_foreign_mod_items(&self, + sort: ast::foreign_mod_sort, abis: AbiSet, first_item_attrs: ~[attribute]) - -> foreign_mod { + -> foreign_mod { let ParsedItemsAndViewItems { attrs_remaining: _, view_items: view_items, @@ -3714,8 +3715,7 @@ pub impl Parser { visibility: visibility, attrs: ~[attribute], items_allowed: bool) - -> item_or_view_item - { + -> item_or_view_item { let mut must_be_named_mod = false; if self.is_keyword(&~"mod") { must_be_named_mod = true; @@ -3750,6 +3750,11 @@ pub impl Parser { // extern mod foo { ... } or extern { ... } if items_allowed && self.eat(&token::LBRACE) { + // `extern mod foo { ... }` is obsolete. + if sort == ast::named { + self.obsolete(*self.last_span, ObsoleteNamedExternModule); + } + let abis = opt_abis.get_or_default(AbiSet::C()); let (inner, next) = self.parse_inner_attrs_and_next(); diff --git a/src/test/compile-fail/unused-unsafe.rs b/src/test/compile-fail/unused-unsafe.rs index 9552badb57f67..465e5548f679c 100644 --- a/src/test/compile-fail/unused-unsafe.rs +++ b/src/test/compile-fail/unused-unsafe.rs @@ -12,8 +12,10 @@ #[deny(unused_unsafe)]; -extern mod foo { - fn bar(); +mod foo { + pub extern { + pub fn bar(); + } } fn callback(_f: &fn() -> T) -> T { fail!() } From 5d3559e6455757c5508bba5b5add69477ebac53e Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Fri, 10 May 2013 15:15:06 -0700 Subject: [PATCH 389/410] librustc: Make `self` and `static` into keywords --- src/libcore/cell.rs | 12 +- src/libcore/old_iter.rs | 64 +++--- src/libcore/rt/sched/mod.rs | 40 ++-- src/libcore/rt/uv/net.rs | 4 +- src/libcore/rt/uvio.rs | 4 +- src/librustc/driver/driver.rs | 4 +- src/librustc/driver/session.rs | 4 +- src/librustc/middle/borrowck/check_loans.rs | 97 +++++---- .../middle/borrowck/gather_loans/mod.rs | 77 +++---- src/librustc/middle/borrowck/mod.rs | 12 +- src/librustc/middle/dataflow.rs | 3 +- src/librustc/middle/freevars.rs | 2 +- src/librustc/middle/liveness.rs | 146 ++++++------- src/librustc/middle/mem_categorization.rs | 2 +- src/librustc/middle/moves.rs | 2 +- src/librustc/middle/region.rs | 6 +- src/librustc/middle/resolve.rs | 61 +++++- src/librustc/middle/resolve_stage0.rs | 61 +++++- src/librustc/middle/trans/_match.rs | 6 +- src/librustc/middle/trans/common.rs | 10 +- src/librustc/middle/trans/expr.rs | 6 +- src/librustc/middle/trans/meth.rs | 19 +- src/librustc/middle/trans/type_use.rs | 2 +- src/librustc/middle/ty.rs | 2 +- src/librustc/middle/typeck/astconv.rs | 148 ++++++------- src/librustc/middle/typeck/check/mod.rs | 6 + src/librustc/middle/typeck/check/regionck.rs | 2 +- src/librustc/middle/typeck/collect.rs | 8 +- src/librustc/middle/typeck/infer/combine.rs | 206 +++++++++--------- src/librustc/middle/typeck/infer/glb.rs | 22 +- src/librustc/middle/typeck/infer/lattice.rs | 72 +++--- src/librustc/middle/typeck/infer/lub.rs | 8 +- .../middle/typeck/infer/region_inference.rs | 24 +- src/librustc/middle/typeck/rscope.rs | 4 +- src/libsyntax/ast.rs | 3 + src/libsyntax/ext/auto_encode.rs | 24 +- src/libsyntax/ext/build.rs | 4 + src/libsyntax/ext/deriving/encodable.rs | 12 +- src/libsyntax/ext/deriving/mod.rs | 3 +- src/libsyntax/ext/deriving/ty.rs | 4 +- src/libsyntax/ext/pipes/parse_proto.rs | 4 +- src/libsyntax/fold.rs | 1 + src/libsyntax/parse/common.rs | 3 +- src/libsyntax/parse/mod.rs | 6 +- src/libsyntax/parse/parser.rs | 65 +++--- src/libsyntax/parse/token.rs | 27 +-- src/libsyntax/print/pprust.rs | 1 + src/libsyntax/visit.rs | 1 + src/test/compile-fail/issue-5099.rs | 2 +- .../use-after-move-self-based-on-type.rs | 2 +- src/test/compile-fail/use-after-move-self.rs | 2 +- 51 files changed, 700 insertions(+), 610 deletions(-) diff --git a/src/libcore/cell.rs b/src/libcore/cell.rs index 18e75fb1aa98e..6f0e03fb89501 100644 --- a/src/libcore/cell.rs +++ b/src/libcore/cell.rs @@ -44,21 +44,21 @@ pub fn empty_cell() -> Cell { pub impl Cell { /// Yields the value, failing if the cell is empty. fn take(&self) -> T { - let self = unsafe { transmute_mut(self) }; - if self.is_empty() { + let this = unsafe { transmute_mut(self) }; + if this.is_empty() { fail!(~"attempt to take an empty cell"); } - replace(&mut self.value, None).unwrap() + replace(&mut this.value, None).unwrap() } /// Returns the value, failing if the cell is full. fn put_back(&self, value: T) { - let self = unsafe { transmute_mut(self) }; - if !self.is_empty() { + let this = unsafe { transmute_mut(self) }; + if !this.is_empty() { fail!(~"attempt to put a value back into a full cell"); } - self.value = Some(value); + this.value = Some(value); } /// Returns true if the cell is empty and false if the cell is full. diff --git a/src/libcore/old_iter.rs b/src/libcore/old_iter.rs index a596b07dc78d2..95bc8872c91c7 100644 --- a/src/libcore/old_iter.rs +++ b/src/libcore/old_iter.rs @@ -116,10 +116,12 @@ pub trait Buildable { } #[inline(always)] -pub fn _eachi>(self: &IA, blk: &fn(uint, &A) -> bool) -> bool { +pub fn _eachi>(this: &IA, blk: &fn(uint, &A) -> bool) -> bool { let mut i = 0; - for self.each |a| { - if !blk(i, a) { return false; } + for this.each |a| { + if !blk(i, a) { + return false; + } i += 1; } return true; @@ -135,47 +137,47 @@ pub fn eachi>(self: &IA, blk: &fn(uint, &A) -> bool) -> bool { } #[inline(always)] -pub fn all>(self: &IA, blk: &fn(&A) -> bool) -> bool { - for self.each |a| { +pub fn all>(this: &IA, blk: &fn(&A) -> bool) -> bool { + for this.each |a| { if !blk(a) { return false; } } return true; } #[inline(always)] -pub fn any>(self: &IA, blk: &fn(&A) -> bool) -> bool { - for self.each |a| { +pub fn any>(this: &IA, blk: &fn(&A) -> bool) -> bool { + for this.each |a| { if blk(a) { return true; } } return false; } #[inline(always)] -pub fn filter_to_vec>(self: &IA, +pub fn filter_to_vec>(this: &IA, prd: &fn(&A) -> bool) -> ~[A] { - do vec::build_sized_opt(self.size_hint()) |push| { - for self.each |a| { + do vec::build_sized_opt(this.size_hint()) |push| { + for this.each |a| { if prd(a) { push(*a); } } } } #[inline(always)] -pub fn map_to_vec>(self: &IA, op: &fn(&A) -> B) -> ~[B] { - do vec::build_sized_opt(self.size_hint()) |push| { - for self.each |a| { +pub fn map_to_vec>(this: &IA, op: &fn(&A) -> B) -> ~[B] { + do vec::build_sized_opt(this.size_hint()) |push| { + for this.each |a| { push(op(a)); } } } #[inline(always)] -pub fn flat_map_to_vec,IB:BaseIter>(self: &IA, +pub fn flat_map_to_vec,IB:BaseIter>(this: &IA, op: &fn(&A) -> IB) -> ~[B] { do vec::build |push| { - for self.each |a| { + for this.each |a| { for op(a).each |&b| { push(b); } @@ -184,31 +186,31 @@ pub fn flat_map_to_vec,IB:BaseIter>(self: &IA, } #[inline(always)] -pub fn foldl>(self: &IA, b0: B, blk: &fn(&B, &A) -> B) +pub fn foldl>(this: &IA, b0: B, blk: &fn(&B, &A) -> B) -> B { let mut b = b0; - for self.each |a| { + for this.each |a| { b = blk(&b, a); } b } #[inline(always)] -pub fn to_vec>(self: &IA) -> ~[A] { - map_to_vec(self, |&x| x) +pub fn to_vec>(this: &IA) -> ~[A] { + map_to_vec(this, |&x| x) } #[inline(always)] -pub fn contains>(self: &IA, x: &A) -> bool { - for self.each |a| { +pub fn contains>(this: &IA, x: &A) -> bool { + for this.each |a| { if *a == *x { return true; } } return false; } #[inline(always)] -pub fn count>(self: &IA, x: &A) -> uint { - do foldl(self, 0) |count, value| { +pub fn count>(this: &IA, x: &A) -> uint { + do foldl(this, 0) |count, value| { if *value == *x { *count + 1 } else { @@ -218,10 +220,10 @@ pub fn count>(self: &IA, x: &A) -> uint { } #[inline(always)] -pub fn position>(self: &IA, f: &fn(&A) -> bool) +pub fn position>(this: &IA, f: &fn(&A) -> bool) -> Option { let mut i = 0; - for self.each |a| { + for this.each |a| { if f(a) { return Some(i); } i += 1; } @@ -253,8 +255,8 @@ pub fn repeat(times: uint, blk: &fn() -> bool) -> bool { } #[inline(always)] -pub fn min>(self: &IA) -> A { - match do foldl::,IA>(self, None) |a, b| { +pub fn min>(this: &IA) -> A { + match do foldl::,IA>(this, None) |a, b| { match a { &Some(ref a_) if *a_ < *b => { *(a) @@ -268,8 +270,8 @@ pub fn min>(self: &IA) -> A { } #[inline(always)] -pub fn max>(self: &IA) -> A { - match do foldl::,IA>(self, None) |a, b| { +pub fn max>(this: &IA) -> A { + match do foldl::,IA>(this, None) |a, b| { match a { &Some(ref a_) if *a_ > *b => { *(a) @@ -283,9 +285,9 @@ pub fn max>(self: &IA) -> A { } #[inline(always)] -pub fn find>(self: &IA, f: &fn(&A) -> bool) +pub fn find>(this: &IA, f: &fn(&A) -> bool) -> Option { - for self.each |i| { + for this.each |i| { if f(i) { return Some(*i) } } return None; diff --git a/src/libcore/rt/sched/mod.rs b/src/libcore/rt/sched/mod.rs index 663fe3e62d010..ba057254583b0 100644 --- a/src/libcore/rt/sched/mod.rs +++ b/src/libcore/rt/sched/mod.rs @@ -118,15 +118,15 @@ pub impl Scheduler { fn resume_task_from_queue(~self) -> bool { assert!(!self.in_task_context()); - let mut self = self; - match self.task_queue.pop_front() { + let mut this = self; + match this.task_queue.pop_front() { Some(task) => { - self.resume_task_immediately(task); + this.resume_task_immediately(task); return true; } None => { rtdebug!("no tasks in queue"); - local_sched::put(self); + local_sched::put(this); return false; } } @@ -165,16 +165,16 @@ pub impl Scheduler { // Core scheduling ops fn resume_task_immediately(~self, task: ~Task) { - let mut self = self; - assert!(!self.in_task_context()); + let mut this = self; + assert!(!this.in_task_context()); rtdebug!("scheduling a task"); // Store the task in the scheduler so it can be grabbed later - self.current_task = Some(task); - self.enqueue_cleanup_job(DoNothing); + this.current_task = Some(task); + this.enqueue_cleanup_job(DoNothing); - local_sched::put(self); + local_sched::put(this); // Take pointers to both the task and scheduler's saved registers. unsafe { @@ -203,17 +203,17 @@ pub impl Scheduler { /// running task. It gets transmuted to the scheduler's lifetime /// and called while the task is blocked. fn deschedule_running_task_and_then(~self, f: &fn(~Task)) { - let mut self = self; - assert!(self.in_task_context()); + let mut this = self; + assert!(this.in_task_context()); rtdebug!("blocking task"); - let blocked_task = self.current_task.swap_unwrap(); + let blocked_task = this.current_task.swap_unwrap(); let f_fake_region = unsafe { transmute::<&fn(~Task), &fn(~Task)>(f) }; let f_opaque = ClosureConverter::from_fn(f_fake_region); - self.enqueue_cleanup_job(GiveTask(blocked_task, f_opaque)); + this.enqueue_cleanup_job(GiveTask(blocked_task, f_opaque)); - local_sched::put(self); + local_sched::put(this); let sched = unsafe { local_sched::unsafe_borrow() }; let (sched_context, last_task_context, _) = sched.get_contexts(); @@ -229,18 +229,18 @@ pub impl Scheduler { /// You would want to think hard about doing this, e.g. if there are /// pending I/O events it would be a bad idea. fn switch_running_tasks_and_then(~self, next_task: ~Task, f: &fn(~Task)) { - let mut self = self; - assert!(self.in_task_context()); + let mut this = self; + assert!(this.in_task_context()); rtdebug!("switching tasks"); - let old_running_task = self.current_task.swap_unwrap(); + let old_running_task = this.current_task.swap_unwrap(); let f_fake_region = unsafe { transmute::<&fn(~Task), &fn(~Task)>(f) }; let f_opaque = ClosureConverter::from_fn(f_fake_region); - self.enqueue_cleanup_job(GiveTask(old_running_task, f_opaque)); - self.current_task = Some(next_task); + this.enqueue_cleanup_job(GiveTask(old_running_task, f_opaque)); + this.current_task = Some(next_task); - local_sched::put(self); + local_sched::put(this); unsafe { let sched = local_sched::unsafe_borrow(); diff --git a/src/libcore/rt/uv/net.rs b/src/libcore/rt/uv/net.rs index 068d6db2a43be..376231e3b27c5 100644 --- a/src/libcore/rt/uv/net.rs +++ b/src/libcore/rt/uv/net.rs @@ -141,8 +141,8 @@ pub impl StreamWatcher { fn close(self, cb: NullCallback) { { - let mut self = self; - let data = get_watcher_data(&mut self); + let mut this = self; + let data = get_watcher_data(&mut this); assert!(data.close_cb.is_none()); data.close_cb = Some(cb); } diff --git a/src/libcore/rt/uvio.rs b/src/libcore/rt/uvio.rs index 62a165b6d7762..8f1a6ea0d34c1 100644 --- a/src/libcore/rt/uvio.rs +++ b/src/libcore/rt/uvio.rs @@ -43,10 +43,10 @@ pub impl UvEventLoop { impl Drop for UvEventLoop { fn finalize(&self) { // XXX: Need mutable finalizer - let self = unsafe { + let this = unsafe { transmute::<&UvEventLoop, &mut UvEventLoop>(self) }; - self.uvio.uv_loop().close(); + this.uvio.uv_loop().close(); } } diff --git a/src/librustc/driver/driver.rs b/src/librustc/driver/driver.rs index 904a7ccb13f05..f54879b36bdb3 100644 --- a/src/librustc/driver/driver.rs +++ b/src/librustc/driver/driver.rs @@ -632,7 +632,7 @@ pub fn build_session_options(binary: @~str, let extra_debuginfo = debugging_opts & session::extra_debug_info != 0; let debuginfo = debugging_opts & session::debug_info != 0 || extra_debuginfo; - let static = debugging_opts & session::static != 0; + let statik = debugging_opts & session::statik != 0; let target = match target_opt { None => host_triple(), @@ -660,7 +660,7 @@ pub fn build_session_options(binary: @~str, let sopts = @session::options { crate_type: crate_type, - is_static: static, + is_static: statik, gc: gc, optimize: opt_level, debuginfo: debuginfo, diff --git a/src/librustc/driver/session.rs b/src/librustc/driver/session.rs index 92cdcff65d572..16eec0b10dea7 100644 --- a/src/librustc/driver/session.rs +++ b/src/librustc/driver/session.rs @@ -62,7 +62,7 @@ pub static gc: uint = 1 << 18; pub static jit: uint = 1 << 19; pub static debug_info: uint = 1 << 20; pub static extra_debug_info: uint = 1 << 21; -pub static static: uint = 1 << 22; +pub static statik: uint = 1 << 22; pub static print_link_args: uint = 1 << 23; pub fn debugging_opts_map() -> ~[(~str, ~str, uint)] { @@ -98,7 +98,7 @@ pub fn debugging_opts_map() -> ~[(~str, ~str, uint)] { extra_debug_info), (~"debug-info", ~"Produce debug info (experimental)", debug_info), (~"static", ~"Use or produce static libraries or binaries " + - "(experimental)", static) + "(experimental)", statik) ] } diff --git a/src/librustc/middle/borrowck/check_loans.rs b/src/librustc/middle/borrowck/check_loans.rs index 2f116cb1b284b..2f24a8ceb2465 100644 --- a/src/librustc/middle/borrowck/check_loans.rs +++ b/src/librustc/middle/borrowck/check_loans.rs @@ -359,7 +359,7 @@ pub impl<'self> CheckLoanCtxt<'self> { self, expr, cmt); } - fn mark_variable_as_used_mut(self: &CheckLoanCtxt, + fn mark_variable_as_used_mut(this: &CheckLoanCtxt, cmt: mc::cmt) { //! If the mutability of the `cmt` being written is inherited //! from a local variable, liveness will @@ -370,12 +370,12 @@ pub impl<'self> CheckLoanCtxt<'self> { let mut cmt = cmt; loop { debug!("mark_writes_through_upvars_as_used_mut(cmt=%s)", - cmt.repr(self.tcx())); + cmt.repr(this.tcx())); match cmt.cat { mc::cat_local(id) | mc::cat_arg(id) | mc::cat_self(id) => { - self.tcx().used_mut_nodes.insert(id); + this.tcx().used_mut_nodes.insert(id); return; } @@ -411,14 +411,14 @@ pub impl<'self> CheckLoanCtxt<'self> { } } - fn check_for_aliasable_mutable_writes(self: &CheckLoanCtxt, + fn check_for_aliasable_mutable_writes(this: &CheckLoanCtxt, expr: @ast::expr, cmt: mc::cmt) -> bool { //! Safety checks related to writes to aliasable, mutable locations let guarantor = cmt.guarantor(); debug!("check_for_aliasable_mutable_writes(cmt=%s, guarantor=%s)", - cmt.repr(self.tcx()), guarantor.repr(self.tcx())); + cmt.repr(this.tcx()), guarantor.repr(this.tcx())); match guarantor.cat { mc::cat_deref(b, _, mc::region_ptr(m_mutbl, _)) => { // Statically prohibit writes to `&mut` when aliasable @@ -426,7 +426,7 @@ pub impl<'self> CheckLoanCtxt<'self> { match b.freely_aliasable() { None => {} Some(cause) => { - self.bccx.report_aliasability_violation( + this.bccx.report_aliasability_violation( expr.span, MutabilityViolation, cause); @@ -442,7 +442,7 @@ pub impl<'self> CheckLoanCtxt<'self> { derefs: deref_count }; debug!("Inserting write guard at %?", key); - self.bccx.write_guard_map.insert(key); + this.bccx.write_guard_map.insert(key); } _ => {} @@ -452,7 +452,7 @@ pub impl<'self> CheckLoanCtxt<'self> { } fn check_for_assignment_to_restricted_or_frozen_location( - self: &CheckLoanCtxt, + this: &CheckLoanCtxt, expr: @ast::expr, cmt: mc::cmt) -> bool { @@ -494,11 +494,11 @@ pub impl<'self> CheckLoanCtxt<'self> { // `RESTR_MUTATE` restriction whenever the contents of an // owned pointer are borrowed, and hence while `v[*]` is not // restricted from being written, `v` is. - for self.each_in_scope_restriction(expr.id, loan_path) + for this.each_in_scope_restriction(expr.id, loan_path) |loan, restr| { if restr.set.intersects(RESTR_MUTATE) { - self.report_illegal_mutation(expr, loan_path, loan); + this.report_illegal_mutation(expr, loan_path, loan); return false; } } @@ -557,9 +557,9 @@ pub impl<'self> CheckLoanCtxt<'self> { } // Check for a non-const loan of `loan_path` - for self.each_in_scope_loan(expr.id) |loan| { + for this.each_in_scope_loan(expr.id) |loan| { if loan.loan_path == loan_path && loan.mutbl != m_const { - self.report_illegal_mutation(expr, full_loan_path, loan); + this.report_illegal_mutation(expr, full_loan_path, loan); return false; } } @@ -674,7 +674,7 @@ fn check_loans_in_fn<'a>(fk: &visit::fn_kind, body: &ast::blk, sp: span, id: ast::node_id, - self: @mut CheckLoanCtxt<'a>, + this: @mut CheckLoanCtxt<'a>, visitor: visit::vt<@mut CheckLoanCtxt<'a>>) { match *fk { visit::fk_item_fn(*) | @@ -685,48 +685,48 @@ fn check_loans_in_fn<'a>(fk: &visit::fn_kind, visit::fk_anon(*) | visit::fk_fn_block(*) => { - let fty = ty::node_id_to_type(self.tcx(), id); + let fty = ty::node_id_to_type(this.tcx(), id); let fty_sigil = ty::ty_closure_sigil(fty); - check_moves_from_captured_variables(self, id, fty_sigil); + check_moves_from_captured_variables(this, id, fty_sigil); } } - visit::visit_fn(fk, decl, body, sp, id, self, visitor); + visit::visit_fn(fk, decl, body, sp, id, this, visitor); - fn check_moves_from_captured_variables(self: @mut CheckLoanCtxt, + fn check_moves_from_captured_variables(this: @mut CheckLoanCtxt, id: ast::node_id, fty_sigil: ast::Sigil) { match fty_sigil { ast::ManagedSigil | ast::OwnedSigil => { - let cap_vars = self.bccx.capture_map.get(&id); + let cap_vars = this.bccx.capture_map.get(&id); for cap_vars.each |cap_var| { match cap_var.mode { moves::CapRef | moves::CapCopy => { loop; } moves::CapMove => { } } let def_id = ast_util::def_id_of_def(cap_var.def).node; - let ty = ty::node_id_to_type(self.tcx(), def_id); - let cmt = self.bccx.cat_def(id, cap_var.span, + let ty = ty::node_id_to_type(this.tcx(), def_id); + let cmt = this.bccx.cat_def(id, cap_var.span, ty, cap_var.def); - let move_err = self.analyze_move_out_from_cmt(cmt); + let move_err = this.analyze_move_out_from_cmt(cmt); match move_err { MoveOk => {} MoveFromIllegalCmt(move_cmt) => { - self.bccx.span_err( + this.bccx.span_err( cap_var.span, fmt!("illegal by-move capture of %s", - self.bccx.cmt_to_str(move_cmt))); + this.bccx.cmt_to_str(move_cmt))); } MoveWhileBorrowed(loan_path, loan_span) => { - self.bccx.span_err( + this.bccx.span_err( cap_var.span, fmt!("cannot move `%s` into closure \ because it is borrowed", - self.bccx.loan_path_to_str(loan_path))); - self.bccx.span_note( + this.bccx.loan_path_to_str(loan_path))); + this.bccx.span_note( loan_span, fmt!("borrow of `%s` occurs here", - self.bccx.loan_path_to_str(loan_path))); + this.bccx.loan_path_to_str(loan_path))); } } } @@ -738,48 +738,48 @@ fn check_loans_in_fn<'a>(fk: &visit::fn_kind, } fn check_loans_in_local<'a>(local: @ast::local, - self: @mut CheckLoanCtxt<'a>, + this: @mut CheckLoanCtxt<'a>, vt: visit::vt<@mut CheckLoanCtxt<'a>>) { - visit::visit_local(local, self, vt); + visit::visit_local(local, this, vt); } fn check_loans_in_expr<'a>(expr: @ast::expr, - self: @mut CheckLoanCtxt<'a>, + this: @mut CheckLoanCtxt<'a>, vt: visit::vt<@mut CheckLoanCtxt<'a>>) { debug!("check_loans_in_expr(expr=%s)", - expr.repr(self.tcx())); + expr.repr(this.tcx())); - visit::visit_expr(expr, self, vt); + visit::visit_expr(expr, this, vt); - self.check_for_conflicting_loans(expr.id); + this.check_for_conflicting_loans(expr.id); - if self.bccx.moves_map.contains(&expr.id) { - self.check_move_out_from_expr(expr); + if this.bccx.moves_map.contains(&expr.id) { + this.check_move_out_from_expr(expr); } match expr.node { ast::expr_assign(dest, _) | ast::expr_assign_op(_, dest, _) => { - self.check_assignment(dest); + this.check_assignment(dest); } ast::expr_call(f, ref args, _) => { - self.check_call(expr, Some(f), f.id, f.span, *args); + this.check_call(expr, Some(f), f.id, f.span, *args); } ast::expr_method_call(_, _, _, ref args, _) => { - self.check_call(expr, None, expr.callee_id, expr.span, *args); + this.check_call(expr, None, expr.callee_id, expr.span, *args); } ast::expr_index(_, rval) | ast::expr_binary(_, _, rval) - if self.bccx.method_map.contains_key(&expr.id) => { - self.check_call(expr, + if this.bccx.method_map.contains_key(&expr.id) => { + this.check_call(expr, None, expr.callee_id, expr.span, ~[rval]); } ast::expr_unary(*) | ast::expr_index(*) - if self.bccx.method_map.contains_key(&expr.id) => { - self.check_call(expr, + if this.bccx.method_map.contains_key(&expr.id) => { + this.check_call(expr, None, expr.callee_id, expr.span, @@ -790,10 +790,10 @@ fn check_loans_in_expr<'a>(expr: @ast::expr, } fn check_loans_in_pat<'a>(pat: @ast::pat, - self: @mut CheckLoanCtxt<'a>, + this: @mut CheckLoanCtxt<'a>, vt: visit::vt<@mut CheckLoanCtxt<'a>>) { - self.check_for_conflicting_loans(pat.id); + this.check_for_conflicting_loans(pat.id); // Note: moves out of pattern bindings are not checked by // the borrow checker, at least not directly. What happens @@ -806,13 +806,14 @@ fn check_loans_in_pat<'a>(pat: @ast::pat, // rewalk the patterns and rebuild the pattern // categorizations. - visit::visit_pat(pat, self, vt); + visit::visit_pat(pat, this, vt); } fn check_loans_in_block<'a>(blk: &ast::blk, - self: @mut CheckLoanCtxt<'a>, + this: @mut CheckLoanCtxt<'a>, vt: visit::vt<@mut CheckLoanCtxt<'a>>) { - visit::visit_block(blk, self, vt); - self.check_for_conflicting_loans(blk.node.id); + visit::visit_block(blk, this, vt); + this.check_for_conflicting_loans(blk.node.id); } + diff --git a/src/librustc/middle/borrowck/gather_loans/mod.rs b/src/librustc/middle/borrowck/gather_loans/mod.rs index 94a029911a87a..64d32d713d0da 100644 --- a/src/librustc/middle/borrowck/gather_loans/mod.rs +++ b/src/librustc/middle/borrowck/gather_loans/mod.rs @@ -90,14 +90,14 @@ pub fn gather_loans(bccx: @BorrowckCtxt, } fn add_pat_to_id_range(p: @ast::pat, - self: @mut GatherLoanCtxt, + this: @mut GatherLoanCtxt, v: visit::vt<@mut GatherLoanCtxt>) { // NB: This visitor function just adds the pat ids into the id // range. We gather loans that occur in patterns using the // `gather_pat()` method below. Eventually these two should be // brought together. - self.id_range.add(p.id); - visit::visit_pat(p, self, v); + this.id_range.add(p.id); + visit::visit_pat(p, this, v); } fn gather_loans_in_fn(fk: &visit::fn_kind, @@ -105,7 +105,7 @@ fn gather_loans_in_fn(fk: &visit::fn_kind, body: &ast::blk, sp: span, id: ast::node_id, - self: @mut GatherLoanCtxt, + this: @mut GatherLoanCtxt, v: visit::vt<@mut GatherLoanCtxt>) { match fk { // Do not visit items here, the outer loop in borrowck/mod @@ -116,95 +116,95 @@ fn gather_loans_in_fn(fk: &visit::fn_kind, // Visit closures as part of the containing item. &visit::fk_anon(*) | &visit::fk_fn_block(*) => { - self.push_repeating_id(body.node.id); - visit::visit_fn(fk, decl, body, sp, id, self, v); - self.pop_repeating_id(body.node.id); + this.push_repeating_id(body.node.id); + visit::visit_fn(fk, decl, body, sp, id, this, v); + this.pop_repeating_id(body.node.id); } } } fn gather_loans_in_block(blk: &ast::blk, - self: @mut GatherLoanCtxt, + this: @mut GatherLoanCtxt, vt: visit::vt<@mut GatherLoanCtxt>) { - self.id_range.add(blk.node.id); - visit::visit_block(blk, self, vt); + this.id_range.add(blk.node.id); + visit::visit_block(blk, this, vt); } fn gather_loans_in_expr(ex: @ast::expr, - self: @mut GatherLoanCtxt, + this: @mut GatherLoanCtxt, vt: visit::vt<@mut GatherLoanCtxt>) { - let bccx = self.bccx; + let bccx = this.bccx; let tcx = bccx.tcx; debug!("gather_loans_in_expr(expr=%?/%s)", ex.id, pprust::expr_to_str(ex, tcx.sess.intr())); - self.id_range.add(ex.id); - self.id_range.add(ex.callee_id); + this.id_range.add(ex.id); + this.id_range.add(ex.callee_id); // If this expression is borrowed, have to ensure it remains valid: for tcx.adjustments.find(&ex.id).each |&adjustments| { - self.guarantee_adjustments(ex, *adjustments); + this.guarantee_adjustments(ex, *adjustments); } // Special checks for various kinds of expressions: match ex.node { ast::expr_addr_of(mutbl, base) => { - let base_cmt = self.bccx.cat_expr(base); + let base_cmt = this.bccx.cat_expr(base); // make sure that the thing we are pointing out stays valid // for the lifetime `scope_r` of the resulting ptr: let scope_r = ty_region(tcx, ex.span, ty::expr_ty(tcx, ex)); - self.guarantee_valid(ex.id, ex.span, base_cmt, mutbl, scope_r); - visit::visit_expr(ex, self, vt); + this.guarantee_valid(ex.id, ex.span, base_cmt, mutbl, scope_r); + visit::visit_expr(ex, this, vt); } ast::expr_match(ex_v, ref arms) => { - let cmt = self.bccx.cat_expr(ex_v); + let cmt = this.bccx.cat_expr(ex_v); for arms.each |arm| { for arm.pats.each |pat| { - self.gather_pat(cmt, *pat, arm.body.node.id, ex.id); + this.gather_pat(cmt, *pat, arm.body.node.id, ex.id); } } - visit::visit_expr(ex, self, vt); + visit::visit_expr(ex, this, vt); } ast::expr_index(_, arg) | ast::expr_binary(_, _, arg) - if self.bccx.method_map.contains_key(&ex.id) => { + if this.bccx.method_map.contains_key(&ex.id) => { // Arguments in method calls are always passed by ref. // // Currently these do not use adjustments, so we have to // hardcode this check here (note that the receiver DOES use // adjustments). let scope_r = ty::re_scope(ex.id); - let arg_cmt = self.bccx.cat_expr(arg); - self.guarantee_valid(arg.id, arg.span, arg_cmt, m_imm, scope_r); - visit::visit_expr(ex, self, vt); + let arg_cmt = this.bccx.cat_expr(arg); + this.guarantee_valid(arg.id, arg.span, arg_cmt, m_imm, scope_r); + visit::visit_expr(ex, this, vt); } // see explanation attached to the `root_ub` field: ast::expr_while(cond, ref body) => { // during the condition, can only root for the condition - self.push_repeating_id(cond.id); - (vt.visit_expr)(cond, self, vt); - self.pop_repeating_id(cond.id); + this.push_repeating_id(cond.id); + (vt.visit_expr)(cond, this, vt); + this.pop_repeating_id(cond.id); // during body, can only root for the body - self.push_repeating_id(body.node.id); - (vt.visit_block)(body, self, vt); - self.pop_repeating_id(body.node.id); + this.push_repeating_id(body.node.id); + (vt.visit_block)(body, this, vt); + this.pop_repeating_id(body.node.id); } // see explanation attached to the `root_ub` field: ast::expr_loop(ref body, _) => { - self.push_repeating_id(body.node.id); - visit::visit_expr(ex, self, vt); - self.pop_repeating_id(body.node.id); + this.push_repeating_id(body.node.id); + visit::visit_expr(ex, this, vt); + this.pop_repeating_id(body.node.id); } _ => { - visit::visit_expr(ex, self, vt); + visit::visit_expr(ex, this, vt); } } } @@ -624,13 +624,14 @@ pub impl GatherLoanCtxt { // Setting up info that preserve needs. // This is just the most convenient place to do it. fn add_stmt_to_map(stmt: @ast::stmt, - self: @mut GatherLoanCtxt, + this: @mut GatherLoanCtxt, vt: visit::vt<@mut GatherLoanCtxt>) { match stmt.node { ast::stmt_expr(_, id) | ast::stmt_semi(_, id) => { - self.bccx.stmt_map.insert(id); + this.bccx.stmt_map.insert(id); } _ => () } - visit::visit_stmt(stmt, self, vt); + visit::visit_stmt(stmt, this, vt); } + diff --git a/src/librustc/middle/borrowck/mod.rs b/src/librustc/middle/borrowck/mod.rs index fbc186a6fd48a..0f01b2b1e418e 100644 --- a/src/librustc/middle/borrowck/mod.rs +++ b/src/librustc/middle/borrowck/mod.rs @@ -110,7 +110,7 @@ fn borrowck_fn(fk: &visit::fn_kind, body: &ast::blk, sp: span, id: ast::node_id, - self: @BorrowckCtxt, + this: @BorrowckCtxt, v: visit::vt<@BorrowckCtxt>) { match fk { &visit::fk_anon(*) | @@ -124,11 +124,11 @@ fn borrowck_fn(fk: &visit::fn_kind, // Check the body of fn items. let (id_range, all_loans) = - gather_loans::gather_loans(self, body); + gather_loans::gather_loans(this, body); let all_loans: &~[Loan] = &*all_loans; // FIXME(#5074) let mut dfcx = - DataFlowContext::new(self.tcx, - self.method_map, + DataFlowContext::new(this.tcx, + this.method_map, LoanDataFlowOperator, id_range, all_loans.len()); @@ -137,11 +137,11 @@ fn borrowck_fn(fk: &visit::fn_kind, dfcx.add_kill(loan.kill_scope, loan_idx); } dfcx.propagate(body); - check_loans::check_loans(self, &dfcx, *all_loans, body); + check_loans::check_loans(this, &dfcx, *all_loans, body); } } - visit::visit_fn(fk, decl, body, sp, id, self, v); + visit::visit_fn(fk, decl, body, sp, id, this, v); } // ---------------------------------------------------------------------- diff --git a/src/librustc/middle/dataflow.rs b/src/librustc/middle/dataflow.rs index dc08fb39ad984..31d22b76800c1 100644 --- a/src/librustc/middle/dataflow.rs +++ b/src/librustc/middle/dataflow.rs @@ -753,7 +753,8 @@ impl<'self, O:DataFlowOperator> PropagationContext<'self, O> { } ast::expr_lit(*) | - ast::expr_path(*) => { + ast::expr_path(*) | + ast::expr_self => { } ast::expr_addr_of(_, e) | diff --git a/src/librustc/middle/freevars.rs b/src/librustc/middle/freevars.rs index 419b75a2ad9d8..98cc8cc014fb6 100644 --- a/src/librustc/middle/freevars.rs +++ b/src/librustc/middle/freevars.rs @@ -45,7 +45,7 @@ fn collect_freevars(def_map: resolve::DefMap, blk: &ast::blk) |expr, depth, v| { match expr.node { ast::expr_fn_block(*) => visit::visit_expr(expr, depth + 1, v), - ast::expr_path(*) => { + ast::expr_path(*) | ast::expr_self => { let mut i = 0; match def_map.find(&expr.id) { None => fail!(~"path not found"), diff --git a/src/librustc/middle/liveness.rs b/src/librustc/middle/liveness.rs index 52274f3d30570..171048eac5575 100644 --- a/src/librustc/middle/liveness.rs +++ b/src/librustc/middle/liveness.rs @@ -341,11 +341,11 @@ pub impl IrMaps { } } -fn visit_item(item: @item, self: @mut IrMaps, v: vt<@mut IrMaps>) { - let old_cur_item = self.cur_item; - self.cur_item = item.id; - visit::visit_item(item, self, v); - self.cur_item = old_cur_item; +fn visit_item(item: @item, this: @mut IrMaps, v: vt<@mut IrMaps>) { + let old_cur_item = this.cur_item; + this.cur_item = item.id; + visit::visit_item(item, this, v); + this.cur_item = old_cur_item; } fn visit_fn(fk: &visit::fn_kind, @@ -353,24 +353,24 @@ fn visit_fn(fk: &visit::fn_kind, body: &blk, sp: span, id: node_id, - self: @mut IrMaps, + this: @mut IrMaps, v: vt<@mut IrMaps>) { debug!("visit_fn: id=%d", id); let _i = ::util::common::indenter(); // swap in a new set of IR maps for this function body: - let fn_maps = @mut IrMaps(self.tcx, - self.method_map, - self.variable_moves_map, - self.capture_map, - self.cur_item); + let fn_maps = @mut IrMaps(this.tcx, + this.method_map, + this.variable_moves_map, + this.capture_map, + this.cur_item); unsafe { debug!("creating fn_maps: %x", transmute(&*fn_maps)); } for decl.inputs.each |arg| { - do pat_util::pat_bindings(self.tcx.def_map, arg.pat) + do pat_util::pat_bindings(this.tcx.def_map, arg.pat) |_bm, arg_id, _x, path| { debug!("adding argument %d", arg_id); let ident = ast_util::path_to_ident(path); @@ -378,7 +378,7 @@ fn visit_fn(fk: &visit::fn_kind, } }; - // Add `self`, whether explicit or implicit. + // Add `this`, whether explicit or implicit. match *fk { fk_method(_, _, method) => { match method.self_ty.node { @@ -423,35 +423,35 @@ fn visit_fn(fk: &visit::fn_kind, lsets.warn_about_unused_args(decl, entry_ln); } -fn visit_local(local: @local, self: @mut IrMaps, vt: vt<@mut IrMaps>) { - let def_map = self.tcx.def_map; +fn visit_local(local: @local, this: @mut IrMaps, vt: vt<@mut IrMaps>) { + let def_map = this.tcx.def_map; do pat_util::pat_bindings(def_map, local.node.pat) |_bm, p_id, sp, path| { debug!("adding local variable %d", p_id); let name = ast_util::path_to_ident(path); - self.add_live_node_for_node(p_id, VarDefNode(sp)); + this.add_live_node_for_node(p_id, VarDefNode(sp)); let kind = match local.node.init { Some(_) => FromLetWithInitializer, None => FromLetNoInitializer }; - self.add_variable(Local(LocalInfo { + this.add_variable(Local(LocalInfo { id: p_id, ident: name, is_mutbl: local.node.is_mutbl, kind: kind })); } - visit::visit_local(local, self, vt); + visit::visit_local(local, this, vt); } -fn visit_arm(arm: &arm, self: @mut IrMaps, vt: vt<@mut IrMaps>) { - let def_map = self.tcx.def_map; +fn visit_arm(arm: &arm, this: @mut IrMaps, vt: vt<@mut IrMaps>) { + let def_map = this.tcx.def_map; for arm.pats.each |pat| { do pat_util::pat_bindings(def_map, *pat) |bm, p_id, sp, path| { debug!("adding local variable %d from match with bm %?", p_id, bm); let name = ast_util::path_to_ident(path); - self.add_live_node_for_node(p_id, VarDefNode(sp)); - self.add_variable(Local(LocalInfo { + this.add_live_node_for_node(p_id, VarDefNode(sp)); + this.add_variable(Local(LocalInfo { id: p_id, ident: name, is_mutbl: false, @@ -459,35 +459,35 @@ fn visit_arm(arm: &arm, self: @mut IrMaps, vt: vt<@mut IrMaps>) { })); } } - visit::visit_arm(arm, self, vt); + visit::visit_arm(arm, this, vt); } -fn visit_expr(expr: @expr, self: @mut IrMaps, vt: vt<@mut IrMaps>) { +fn visit_expr(expr: @expr, this: @mut IrMaps, vt: vt<@mut IrMaps>) { match expr.node { // live nodes required for uses or definitions of variables: - expr_path(_) => { - let def = self.tcx.def_map.get_copy(&expr.id); + expr_path(_) | expr_self => { + let def = this.tcx.def_map.get_copy(&expr.id); debug!("expr %d: path that leads to %?", expr.id, def); if moves::moved_variable_node_id_from_def(def).is_some() { - self.add_live_node_for_node(expr.id, ExprNode(expr.span)); + this.add_live_node_for_node(expr.id, ExprNode(expr.span)); } - visit::visit_expr(expr, self, vt); + visit::visit_expr(expr, this, vt); } expr_fn_block(*) => { // Interesting control flow (for loops can contain labeled // breaks or continues) - self.add_live_node_for_node(expr.id, ExprNode(expr.span)); + this.add_live_node_for_node(expr.id, ExprNode(expr.span)); // Make a live_node for each captured variable, with the span // being the location that the variable is used. This results // in better error messages than just pointing at the closure // construction site. - let cvs = self.capture_map.get(&expr.id); + let cvs = this.capture_map.get(&expr.id); let mut call_caps = ~[]; for cvs.each |cv| { match moves::moved_variable_node_id_from_def(cv.def) { Some(rv) => { - let cv_ln = self.add_live_node(FreeVarNode(cv.span)); + let cv_ln = this.add_live_node(FreeVarNode(cv.span)); let is_move = match cv.mode { // var must be dead afterwards moves::CapMove => true, @@ -502,19 +502,19 @@ fn visit_expr(expr: @expr, self: @mut IrMaps, vt: vt<@mut IrMaps>) { None => {} } } - self.set_captures(expr.id, call_caps); + this.set_captures(expr.id, call_caps); - visit::visit_expr(expr, self, vt); + visit::visit_expr(expr, this, vt); } // live nodes required for interesting control flow: expr_if(*) | expr_match(*) | expr_while(*) | expr_loop(*) => { - self.add_live_node_for_node(expr.id, ExprNode(expr.span)); - visit::visit_expr(expr, self, vt); + this.add_live_node_for_node(expr.id, ExprNode(expr.span)); + visit::visit_expr(expr, this, vt); } expr_binary(op, _, _) if ast_util::lazy_binop(op) => { - self.add_live_node_for_node(expr.id, ExprNode(expr.span)); - visit::visit_expr(expr, self, vt); + this.add_live_node_for_node(expr.id, ExprNode(expr.span)); + visit::visit_expr(expr, this, vt); } // otherwise, live nodes are not required: @@ -526,7 +526,7 @@ fn visit_expr(expr: @expr, self: @mut IrMaps, vt: vt<@mut IrMaps>) { expr_assign(*) | expr_assign_op(*) | expr_mac(*) | expr_struct(*) | expr_repeat(*) | expr_paren(*) | expr_inline_asm(*) => { - visit::visit_expr(expr, self, vt); + visit::visit_expr(expr, this, vt); } } } @@ -1006,7 +1006,7 @@ pub impl Liveness { match expr.node { // Interesting cases with control flow or which gen/kill - expr_path(_) => { + expr_path(_) | expr_self => { self.access_path(expr, succ, ACC_READ | ACC_USE) } @@ -1409,13 +1409,13 @@ pub impl Liveness { // _______________________________________________________________________ // Checking for error conditions -fn check_local(local: @local, self: @Liveness, vt: vt<@Liveness>) { +fn check_local(local: @local, this: @Liveness, vt: vt<@Liveness>) { match local.node.init { Some(_) => { // Initializer: - self.warn_about_unused_or_dead_vars_in_pat(local.node.pat); - self.check_for_reassignments_in_pat(local.node.pat, + this.warn_about_unused_or_dead_vars_in_pat(local.node.pat); + this.check_for_reassignments_in_pat(local.node.pat, local.node.is_mutbl); } None => { @@ -1424,12 +1424,12 @@ fn check_local(local: @local, self: @Liveness, vt: vt<@Liveness>) { // should not be live at this point. debug!("check_local() with no initializer"); - do self.pat_bindings(local.node.pat) |ln, var, sp, id| { - if !self.warn_about_unused(sp, id, ln, var) { - match self.live_on_exit(ln, var) { + do this.pat_bindings(local.node.pat) |ln, var, sp, id| { + if !this.warn_about_unused(sp, id, ln, var) { + match this.live_on_exit(ln, var) { None => { /* not live: good */ } Some(lnk) => { - self.report_illegal_read( + this.report_illegal_read( local.span, lnk, var, PossiblyUninitializedVariable); } @@ -1439,77 +1439,77 @@ fn check_local(local: @local, self: @Liveness, vt: vt<@Liveness>) { } } - visit::visit_local(local, self, vt); + visit::visit_local(local, this, vt); } -fn check_arm(arm: &arm, self: @Liveness, vt: vt<@Liveness>) { - do self.arm_pats_bindings(arm.pats) |ln, var, sp, id| { - self.warn_about_unused(sp, id, ln, var); +fn check_arm(arm: &arm, this: @Liveness, vt: vt<@Liveness>) { + do this.arm_pats_bindings(arm.pats) |ln, var, sp, id| { + this.warn_about_unused(sp, id, ln, var); } - visit::visit_arm(arm, self, vt); + visit::visit_arm(arm, this, vt); } -fn check_expr(expr: @expr, self: @Liveness, vt: vt<@Liveness>) { +fn check_expr(expr: @expr, this: @Liveness, vt: vt<@Liveness>) { match expr.node { - expr_path(_) => { - for self.variable_from_def_map(expr.id, expr.span).each |var| { - let ln = self.live_node(expr.id, expr.span); + expr_path(_) | expr_self => { + for this.variable_from_def_map(expr.id, expr.span).each |var| { + let ln = this.live_node(expr.id, expr.span); - match self.ir.variable_moves_map.find(&expr.id) { + match this.ir.variable_moves_map.find(&expr.id) { None => {} Some(&entire_expr) => { debug!("(checking expr) is a move: `%s`", - expr_to_str(expr, self.tcx.sess.intr())); - self.check_move_from_var(ln, *var, entire_expr); + expr_to_str(expr, this.tcx.sess.intr())); + this.check_move_from_var(ln, *var, entire_expr); } } } - visit::visit_expr(expr, self, vt); + visit::visit_expr(expr, this, vt); } expr_fn_block(*) => { - let caps = self.ir.captures(expr); + let caps = this.ir.captures(expr); for caps.each |cap| { - let var = self.variable(cap.var_nid, expr.span); + let var = this.variable(cap.var_nid, expr.span); if cap.is_move { - self.check_move_from_var(cap.ln, var, expr); + this.check_move_from_var(cap.ln, var, expr); } } - visit::visit_expr(expr, self, vt); + visit::visit_expr(expr, this, vt); } expr_assign(l, r) => { - self.check_lvalue(l, vt); - (vt.visit_expr)(r, self, vt); + this.check_lvalue(l, vt); + (vt.visit_expr)(r, this, vt); - visit::visit_expr(expr, self, vt); + visit::visit_expr(expr, this, vt); } expr_assign_op(_, l, _) => { - self.check_lvalue(l, vt); + this.check_lvalue(l, vt); - visit::visit_expr(expr, self, vt); + visit::visit_expr(expr, this, vt); } expr_inline_asm(ref ia) => { for ia.inputs.each |&(_, in)| { - (vt.visit_expr)(in, self, vt); + (vt.visit_expr)(in, this, vt); } // Output operands must be lvalues for ia.outputs.each |&(_, out)| { match out.node { expr_addr_of(_, inner) => { - self.check_lvalue(inner, vt); + this.check_lvalue(inner, vt); } _ => {} } - (vt.visit_expr)(out, self, vt); + (vt.visit_expr)(out, this, vt); } - visit::visit_expr(expr, self, vt); + visit::visit_expr(expr, this, vt); } // no correctness conditions related to liveness @@ -1521,7 +1521,7 @@ fn check_expr(expr: @expr, self: @Liveness, vt: vt<@Liveness>) { expr_again(*) | expr_lit(_) | expr_block(*) | expr_mac(*) | expr_addr_of(*) | expr_struct(*) | expr_repeat(*) | expr_paren(*) => { - visit::visit_expr(expr, self, vt); + visit::visit_expr(expr, this, vt); } } } diff --git a/src/librustc/middle/mem_categorization.rs b/src/librustc/middle/mem_categorization.rs index 436905f9a53aa..95ed7fe8efcd5 100644 --- a/src/librustc/middle/mem_categorization.rs +++ b/src/librustc/middle/mem_categorization.rs @@ -406,7 +406,7 @@ pub impl mem_categorization_ctxt { self.cat_index(expr, base_cmt, 0) } - ast::expr_path(_) => { + ast::expr_path(_) | ast::expr_self => { let def = self.tcx.def_map.get_copy(&expr.id); self.cat_def(expr.id, expr.span, expr_ty, def) } diff --git a/src/librustc/middle/moves.rs b/src/librustc/middle/moves.rs index 2471e383bca9c..3a2fb654006ec 100644 --- a/src/librustc/middle/moves.rs +++ b/src/librustc/middle/moves.rs @@ -435,7 +435,7 @@ pub impl VisitContext { debug!("comp_mode = %?", comp_mode); match expr.node { - expr_path(*) => { + expr_path(*) | expr_self => { match comp_mode { MoveInPart(entire_expr) => { self.move_maps.variable_moves_map.insert( diff --git a/src/librustc/middle/region.rs b/src/librustc/middle/region.rs index 76d35527104d5..74082c02f6d04 100644 --- a/src/librustc/middle/region.rs +++ b/src/librustc/middle/region.rs @@ -310,14 +310,14 @@ pub impl RegionMaps { } } - fn ancestors_of(self: &RegionMaps, scope: ast::node_id) + fn ancestors_of(this: &RegionMaps, scope: ast::node_id) -> ~[ast::node_id] { // debug!("ancestors_of(scope=%d)", scope); let mut result = ~[scope]; let mut scope = scope; loop { - match self.scope_map.find(&scope) { + match this.scope_map.find(&scope) { None => return result, Some(&superscope) => { result.push(superscope); @@ -685,7 +685,7 @@ pub impl DetermineRpCtxt { None => { self.anon_implies_rp } - Some(ref l) if l.ident == special_idents::static => { + Some(ref l) if l.ident == special_idents::statik => { false } Some(ref l) if l.ident == special_idents::self_ => { diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs index 515ebc0e8db1e..9a37f65f47053 100644 --- a/src/librustc/middle/resolve.rs +++ b/src/librustc/middle/resolve.rs @@ -35,7 +35,7 @@ use syntax::ast::{def_prim_ty, def_region, def_self, def_ty, def_ty_param}; use syntax::ast::{def_upvar, def_use, def_variant, div, eq}; use syntax::ast::{expr, expr_again, expr_assign_op}; use syntax::ast::{expr_index, expr_loop}; -use syntax::ast::{expr_path, expr_struct, expr_unary, fn_decl}; +use syntax::ast::{expr_path, expr_self, expr_struct, expr_unary, fn_decl}; use syntax::ast::{foreign_item, foreign_item_const, foreign_item_fn, ge}; use syntax::ast::Generics; use syntax::ast::{gt, ident, inherited, item, item_struct}; @@ -326,12 +326,14 @@ pub fn namespace_for_duplicate_checking_mode(mode: DuplicateCheckingMode) /// One local scope. pub struct Rib { bindings: @mut HashMap, + self_binding: @mut Option, kind: RibKind, } pub fn Rib(kind: RibKind) -> Rib { Rib { bindings: @mut HashMap::new(), + self_binding: @mut None, kind: kind } } @@ -762,7 +764,7 @@ pub fn Resolver(session: Session, let current_module = graph_root.get_module(); - let self = Resolver { + let this = Resolver { session: @session, lang_items: copy lang_items, crate: crate, @@ -800,7 +802,7 @@ pub fn Resolver(session: Session, intr: session.intr() }; - self + this } /// The main resolver class. @@ -3655,8 +3657,7 @@ pub impl Resolver { HasSelfBinding(self_node_id, is_implicit) => { let def_like = dl_def(def_self(self_node_id, is_implicit)); - (*function_value_rib).bindings.insert(self.self_ident, - def_like); + *function_value_rib.self_binding = Some(def_like); } } @@ -4562,7 +4563,7 @@ pub impl Resolver { ident: ident, namespace: Namespace, span: span) - -> Option { + -> Option { // Check the local set of ribs. let search_result; match namespace { @@ -4591,6 +4592,35 @@ pub impl Resolver { } } + fn resolve_self_value_in_local_ribs(@mut self, span: span) + -> Option { + // FIXME #4950: This should not use a while loop. + let ribs = &mut self.value_ribs; + let mut i = ribs.len(); + while i != 0 { + i -= 1; + match *ribs[i].self_binding { + Some(def_like) => { + match self.upvarify(*ribs, + i, + def_like, + span, + DontAllowCapturingSelf) { + Some(dl_def(def)) => return Some(def), + _ => { + self.session.span_bug(span, + ~"self wasn't mapped to a \ + def?!") + } + } + } + None => {} + } + } + + None + } + fn resolve_item_by_identifier_in_lexical_scope(@mut self, ident: ident, namespace: Namespace) @@ -4805,12 +4835,25 @@ pub impl Resolver { `%s`", *self.session.str_of( label))), - Some(dl_def(def @ def_label(_))) => - self.record_def(expr.id, def), - Some(_) => + Some(dl_def(def @ def_label(_))) => { + self.record_def(expr.id, def) + } + Some(_) => { self.session.span_bug(expr.span, ~"label wasn't mapped to a \ label def!") + } + } + } + + expr_self => { + match self.resolve_self_value_in_local_ribs(expr.span) { + None => { + self.session.span_err(expr.span, + ~"`self` is not allowed in \ + this context") + } + Some(def) => self.record_def(expr.id, def), } } diff --git a/src/librustc/middle/resolve_stage0.rs b/src/librustc/middle/resolve_stage0.rs index 4fd2e9670832c..de6a4452da1da 100644 --- a/src/librustc/middle/resolve_stage0.rs +++ b/src/librustc/middle/resolve_stage0.rs @@ -36,7 +36,7 @@ use syntax::ast::{def_prim_ty, def_region, def_self, def_ty, def_ty_param}; use syntax::ast::{def_upvar, def_use, def_variant, div, eq}; use syntax::ast::{expr, expr_again, expr_assign_op}; use syntax::ast::{expr_index, expr_loop}; -use syntax::ast::{expr_path, expr_struct, expr_unary, fn_decl}; +use syntax::ast::{expr_path, expr_self, expr_struct, expr_unary, fn_decl}; use syntax::ast::{foreign_item, foreign_item_const, foreign_item_fn, ge}; use syntax::ast::Generics; use syntax::ast::{gt, ident, inherited, item, item_struct}; @@ -327,12 +327,14 @@ pub fn namespace_for_duplicate_checking_mode(mode: DuplicateCheckingMode) /// One local scope. pub struct Rib { bindings: @mut HashMap, + self_binding: @mut Option, kind: RibKind, } pub fn Rib(kind: RibKind) -> Rib { Rib { bindings: @mut HashMap::new(), + self_binding: @mut None, kind: kind } } @@ -763,7 +765,7 @@ pub fn Resolver(session: Session, let current_module = graph_root.get_module(); - let self = Resolver { + let this = Resolver { session: @session, lang_items: copy lang_items, crate: crate, @@ -806,7 +808,7 @@ pub fn Resolver(session: Session, intr: session.intr() }; - self + this } /// The main resolver class. @@ -3695,8 +3697,7 @@ pub impl Resolver { HasSelfBinding(self_node_id, is_implicit) => { let def_like = dl_def(def_self(self_node_id, is_implicit)); - (*function_value_rib).bindings.insert(self.self_ident, - def_like); + *function_value_rib.self_binding = Some(def_like); } } @@ -4603,7 +4604,7 @@ pub impl Resolver { ident: ident, namespace: Namespace, span: span) - -> Option { + -> Option { // Check the local set of ribs. let search_result; match namespace { @@ -4632,6 +4633,35 @@ pub impl Resolver { } } + fn resolve_self_value_in_local_ribs(@mut self, span: span) + -> Option { + // FIXME #4950: This should not use a while loop. + let ribs = &mut self.value_ribs; + let mut i = ribs.len(); + while i != 0 { + i -= 1; + match *ribs[i].self_binding { + Some(def_like) => { + match self.upvarify(ribs, + i, + def_like, + span, + DontAllowCapturingSelf) { + Some(dl_def(def)) => return Some(def), + _ => { + self.session.span_bug(span, + ~"self wasn't mapped to a \ + def?!") + } + } + } + None => {} + } + } + + None + } + fn resolve_item_by_identifier_in_lexical_scope(@mut self, ident: ident, namespace: Namespace) @@ -4845,12 +4875,25 @@ pub impl Resolver { `%s`", *self.session.str_of( label))), - Some(dl_def(def @ def_label(_))) => - self.record_def(expr.id, def), - Some(_) => + Some(dl_def(def @ def_label(_))) => { + self.record_def(expr.id, def) + } + Some(_) => { self.session.span_bug(expr.span, ~"label wasn't mapped to a \ label def!") + } + } + } + + expr_self => { + match self.resolve_self_value_in_local_ribs(expr.span) { + None => { + self.session.span_err(expr.span, + ~"`self` is not allowed in \ + this context") + } + Some(def) => self.record_def(expr.id, def), } } diff --git a/src/librustc/middle/trans/_match.rs b/src/librustc/middle/trans/_match.rs index e05f9d5f290b8..b24e88698af88 100644 --- a/src/librustc/middle/trans/_match.rs +++ b/src/librustc/middle/trans/_match.rs @@ -426,10 +426,10 @@ pub fn enter_match<'r>(bcx: block, vec::append(sub, vec::slice(br.pats, 0u, col)), vec::slice(br.pats, col + 1u, br.pats.len())); - let self = br.pats[col]; - match self.node { + let this = br.pats[col]; + match this.node { ast::pat_ident(_, path, None) => { - if pat_is_binding(dm, self) { + if pat_is_binding(dm, this) { let binding_info = br.data.bindings_map.get( &path_to_ident(path)); diff --git a/src/librustc/middle/trans/common.rs b/src/librustc/middle/trans/common.rs index aff45cbb99390..8000484c0550f 100644 --- a/src/librustc/middle/trans/common.rs +++ b/src/librustc/middle/trans/common.rs @@ -256,13 +256,11 @@ pub impl param_substs { } } -fn param_substs_to_str(self: ¶m_substs, - tcx: ty::ctxt) -> ~str -{ +fn param_substs_to_str(this: ¶m_substs, tcx: ty::ctxt) -> ~str { fmt!("param_substs {tys:%s, vtables:%s, type_param_defs:%s}", - self.tys.repr(tcx), - self.vtables.repr(tcx), - self.type_param_defs.repr(tcx)) + this.tys.repr(tcx), + this.vtables.repr(tcx), + this.type_param_defs.repr(tcx)) } impl Repr for param_substs { diff --git a/src/librustc/middle/trans/expr.rs b/src/librustc/middle/trans/expr.rs index ed3dfdc07c373..59526ffbe498d 100644 --- a/src/librustc/middle/trans/expr.rs +++ b/src/librustc/middle/trans/expr.rs @@ -451,7 +451,7 @@ fn trans_rvalue_datum_unadjusted(bcx: block, expr: @ast::expr) -> DatumBlock { trace_span!(bcx, expr.span, @shorten(bcx.expr_to_str(expr))); match expr.node { - ast::expr_path(_) => { + ast::expr_path(_) | ast::expr_self => { return trans_def_datum_unadjusted(bcx, expr, bcx.def(expr.id)); } ast::expr_vstore(contents, ast::expr_vstore_box) | @@ -558,7 +558,7 @@ fn trans_rvalue_dps_unadjusted(bcx: block, expr: @ast::expr, ast::expr_paren(e) => { return trans_rvalue_dps_unadjusted(bcx, e, dest); } - ast::expr_path(_) => { + ast::expr_path(_) | ast::expr_self => { return trans_def_dps_unadjusted(bcx, expr, bcx.def(expr.id), dest); } @@ -810,7 +810,7 @@ fn trans_lvalue_unadjusted(bcx: block, expr: @ast::expr) -> DatumBlock { ast::expr_paren(e) => { trans_lvalue_unadjusted(bcx, e) } - ast::expr_path(_) => { + ast::expr_path(_) | ast::expr_self => { trans_def_lvalue(bcx, expr, bcx.def(expr.id)) } ast::expr_field(base, ident, _) => { diff --git a/src/librustc/middle/trans/meth.rs b/src/librustc/middle/trans/meth.rs index ffe414ab5b5d2..02afbbdb11f7e 100644 --- a/src/librustc/middle/trans/meth.rs +++ b/src/librustc/middle/trans/meth.rs @@ -174,14 +174,15 @@ pub fn trans_self_arg(bcx: block, pub fn trans_method_callee(bcx: block, callee_id: ast::node_id, - self: @ast::expr, + this: @ast::expr, mentry: typeck::method_map_entry) - -> Callee { + -> Callee { let _icx = bcx.insn_ctxt("impl::trans_method_callee"); let tcx = bcx.tcx(); - debug!("trans_method_callee(callee_id=%?, self=%s, mentry=%s)", - callee_id, bcx.expr_to_str(self), + debug!("trans_method_callee(callee_id=%?, this=%s, mentry=%s)", + callee_id, + bcx.expr_to_str(this), mentry.repr(bcx.tcx())); // Replace method_self with method_static here. @@ -202,7 +203,7 @@ pub fn trans_method_callee(bcx: block, } typeck::method_super(trait_id, method_index) => { // is the self type for this method call - let self_ty = node_id_type(bcx, self.id); + let self_ty = node_id_type(bcx, this.id); // is the ID of the implementation of // trait for type let impl_id = ty::get_impl_id(tcx, trait_id, self_ty); @@ -232,13 +233,13 @@ pub fn trans_method_callee(bcx: block, match origin { typeck::method_static(did) => { let callee_fn = callee::trans_fn_ref(bcx, did, callee_id); - let Result {bcx, val} = trans_self_arg(bcx, self, mentry); + let Result {bcx, val} = trans_self_arg(bcx, this, mentry); Callee { bcx: bcx, data: Method(MethodData { llfn: callee_fn.llfn, llself: val, - self_ty: node_id_type(bcx, self.id), + self_ty: node_id_type(bcx, this.id), self_mode: mentry.self_mode, }) } @@ -252,7 +253,7 @@ pub fn trans_method_callee(bcx: block, match bcx.fcx.param_substs { Some(substs) => { let vtbl = find_vtable(bcx.tcx(), substs, p, b); - trans_monomorphized_callee(bcx, callee_id, self, mentry, + trans_monomorphized_callee(bcx, callee_id, this, mentry, trait_id, off, vtbl) } // how to get rid of this? @@ -263,7 +264,7 @@ pub fn trans_method_callee(bcx: block, trans_trait_callee(bcx, callee_id, off, - self, + this, store, mentry.explicit_self) } diff --git a/src/librustc/middle/trans/type_use.rs b/src/librustc/middle/trans/type_use.rs index 3c2738d3ae80e..cd1b89d7ffa65 100644 --- a/src/librustc/middle/trans/type_use.rs +++ b/src/librustc/middle/trans/type_use.rs @@ -293,7 +293,7 @@ pub fn mark_for_expr(cx: Context, e: @expr) { _ => () } } - expr_path(_) => { + expr_path(_) | expr_self => { let opt_ts = cx.ccx.tcx.node_type_substs.find_copy(&e.id); for opt_ts.each |ts| { let id = ast_util::def_id_of_def(cx.ccx.tcx.def_map.get_copy(&e.id)); diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index f5adb2fe1084f..5eaa6478ecfb6 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -3383,7 +3383,7 @@ pub fn expr_kind(tcx: ctxt, } match expr.node { - ast::expr_path(*) => { + ast::expr_path(*) | ast::expr_self => { match resolve_expr(tcx, expr) { ast::def_variant(*) | ast::def_struct(*) => RvalueDpsExpr, diff --git a/src/librustc/middle/typeck/astconv.rs b/src/librustc/middle/typeck/astconv.rs index 0baad7e7b7a7b..469e31d0c49cc 100644 --- a/src/librustc/middle/typeck/astconv.rs +++ b/src/librustc/middle/typeck/astconv.rs @@ -102,7 +102,7 @@ pub fn get_region_reporting_err( } pub fn ast_region_to_region( - self: &AC, + this: &AC, rscope: &RS, default_span: span, opt_lifetime: Option<@ast::Lifetime>) -> ty::Region @@ -111,7 +111,7 @@ pub fn ast_region_to_region( None => { (default_span, rscope.anon_region(default_span)) } - Some(ref lifetime) if lifetime.ident == special_idents::static => { + Some(ref lifetime) if lifetime.ident == special_idents::statik => { (lifetime.span, Ok(ty::re_static)) } Some(ref lifetime) if lifetime.ident == special_idents::self_ => { @@ -123,11 +123,11 @@ pub fn ast_region_to_region( } }; - get_region_reporting_err(self.tcx(), span, opt_lifetime, res) + get_region_reporting_err(this.tcx(), span, opt_lifetime, res) } fn ast_path_substs( - self: &AC, + this: &AC, rscope: &RS, def_id: ast::def_id, decl_generics: &ty::Generics, @@ -141,9 +141,9 @@ fn ast_path_substs( * set of substitutions for this particular reference to `I`. */ - let tcx = self.tcx(); + let tcx = this.tcx(); - // If the type is parameterized by the self region, then replace self + // If the type is parameterized by the this region, then replace this // region with the current anon region binding (in other words, // whatever & would get replaced with). let self_r = match (&decl_generics.region_param, &path.rp) { @@ -160,55 +160,55 @@ fn ast_path_substs( } (&Some(_), &None) => { let res = rscope.anon_region(path.span); - let r = get_region_reporting_err(self.tcx(), path.span, None, res); + let r = get_region_reporting_err(this.tcx(), path.span, None, res); Some(r) } (&Some(_), &Some(_)) => { - Some(ast_region_to_region(self, rscope, path.span, path.rp)) + Some(ast_region_to_region(this, rscope, path.span, path.rp)) } }; // Convert the type parameters supplied by the user. if !vec::same_length(*decl_generics.type_param_defs, path.types) { - self.tcx().sess.span_fatal( + this.tcx().sess.span_fatal( path.span, fmt!("wrong number of type arguments: expected %u but found %u", decl_generics.type_param_defs.len(), path.types.len())); } - let tps = path.types.map(|a_t| ast_ty_to_ty(self, rscope, *a_t)); + let tps = path.types.map(|a_t| ast_ty_to_ty(this, rscope, *a_t)); substs {self_r:self_r, self_ty:self_ty, tps:tps} } pub fn ast_path_to_substs_and_ty( - self: &AC, + this: &AC, rscope: &RS, did: ast::def_id, path: @ast::Path) -> ty_param_substs_and_ty { - let tcx = self.tcx(); + let tcx = this.tcx(); let ty::ty_param_bounds_and_ty { generics: generics, ty: decl_ty - } = self.get_item_ty(did); + } = this.get_item_ty(did); - let substs = ast_path_substs(self, rscope, did, &generics, None, path); + let substs = ast_path_substs(this, rscope, did, &generics, None, path); let ty = ty::subst(tcx, &substs, decl_ty); ty_param_substs_and_ty { substs: substs, ty: ty } } pub fn ast_path_to_trait_ref( - self: &AC, + this: &AC, rscope: &RS, trait_def_id: ast::def_id, self_ty: Option, path: @ast::Path) -> @ty::TraitRef { let trait_def = - self.get_trait_def(trait_def_id); + this.get_trait_def(trait_def_id); let substs = ast_path_substs( - self, + this, rscope, trait_def.trait_ref.def_id, &trait_def.generics, @@ -222,7 +222,7 @@ pub fn ast_path_to_trait_ref( pub fn ast_path_to_ty( - self: &AC, + this: &AC, rscope: &RS, did: ast::def_id, path: @ast::Path) @@ -233,7 +233,7 @@ pub fn ast_path_to_ty( let ty::ty_param_substs_and_ty { substs: substs, ty: ty - } = ast_path_to_substs_and_ty(self, rscope, did, path); + } = ast_path_to_substs_and_ty(this, rscope, did, path); ty_param_substs_and_ty { substs: substs, ty: ty } } @@ -244,29 +244,29 @@ pub static NO_TPS: uint = 2; // internal notion of a type. `getter` is a function that returns the type // corresponding to a definition ID: pub fn ast_ty_to_ty( - self: &AC, rscope: &RS, ast_ty: @ast::Ty) -> ty::t { + this: &AC, rscope: &RS, ast_ty: @ast::Ty) -> ty::t { fn ast_mt_to_mt( - self: &AC, rscope: &RS, mt: &ast::mt) -> ty::mt { + this: &AC, rscope: &RS, mt: &ast::mt) -> ty::mt { - ty::mt {ty: ast_ty_to_ty(self, rscope, mt.ty), mutbl: mt.mutbl} + ty::mt {ty: ast_ty_to_ty(this, rscope, mt.ty), mutbl: mt.mutbl} } // Handle @, ~, and & being able to mean estrs and evecs. // If a_seq_ty is a str or a vec, make it an estr/evec. // Also handle first-class trait types. fn mk_pointer( - self: &AC, + this: &AC, rscope: &RS, a_seq_ty: &ast::mt, vst: ty::vstore, constr: &fn(ty::mt) -> ty::t) -> ty::t { - let tcx = self.tcx(); + let tcx = this.tcx(); match a_seq_ty.ty.node { ast::ty_vec(ref mt) => { - let mut mt = ast_mt_to_mt(self, rscope, mt); + let mut mt = ast_mt_to_mt(this, rscope, mt); if a_seq_ty.mutbl == ast::m_mutbl || a_seq_ty.mutbl == ast::m_const { mt = ty::mt { ty: mt.ty, mutbl: a_seq_ty.mutbl }; @@ -281,7 +281,7 @@ pub fn ast_ty_to_ty( } Some(&ast::def_trait(trait_def_id)) => { let result = ast_path_to_trait_ref( - self, rscope, trait_def_id, None, path); + this, rscope, trait_def_id, None, path); let trait_store = match vst { ty::vstore_box => ty::BoxTraitStore, ty::vstore_uniq => ty::UniqTraitStore, @@ -308,7 +308,7 @@ pub fn ast_ty_to_ty( _ => {} } - let seq_ty = ast_mt_to_mt(self, rscope, a_seq_ty); + let seq_ty = ast_mt_to_mt(this, rscope, a_seq_ty); return constr(seq_ty); } @@ -332,7 +332,7 @@ pub fn ast_ty_to_ty( } } - let tcx = self.tcx(); + let tcx = this.tcx(); match tcx.ast_ty_to_ty_cache.find(&ast_ty.id) { Some(&ty::atttce_resolved(ty)) => return ty, @@ -348,36 +348,36 @@ pub fn ast_ty_to_ty( ast::ty_nil => ty::mk_nil(), ast::ty_bot => ty::mk_bot(), ast::ty_box(ref mt) => { - mk_pointer(self, rscope, mt, ty::vstore_box, + mk_pointer(this, rscope, mt, ty::vstore_box, |tmt| ty::mk_box(tcx, tmt)) } ast::ty_uniq(ref mt) => { - mk_pointer(self, rscope, mt, ty::vstore_uniq, + mk_pointer(this, rscope, mt, ty::vstore_uniq, |tmt| ty::mk_uniq(tcx, tmt)) } ast::ty_vec(ref mt) => { tcx.sess.span_err(ast_ty.span, "bare `[]` is not a type"); // return /something/ so they can at least get more errors - ty::mk_evec(tcx, ast_mt_to_mt(self, rscope, mt), ty::vstore_uniq) + ty::mk_evec(tcx, ast_mt_to_mt(this, rscope, mt), ty::vstore_uniq) } ast::ty_ptr(ref mt) => { - ty::mk_ptr(tcx, ast_mt_to_mt(self, rscope, mt)) + ty::mk_ptr(tcx, ast_mt_to_mt(this, rscope, mt)) } ast::ty_rptr(region, ref mt) => { - let r = ast_region_to_region(self, rscope, ast_ty.span, region); - mk_pointer(self, rscope, mt, ty::vstore_slice(r), + let r = ast_region_to_region(this, rscope, ast_ty.span, region); + mk_pointer(this, rscope, mt, ty::vstore_slice(r), |tmt| ty::mk_rptr(tcx, r, tmt)) } ast::ty_tup(ref fields) => { - let flds = fields.map(|t| ast_ty_to_ty(self, rscope, *t)); + let flds = fields.map(|t| ast_ty_to_ty(this, rscope, *t)); ty::mk_tup(tcx, flds) } ast::ty_bare_fn(ref bf) => { - ty::mk_bare_fn(tcx, ty_of_bare_fn(self, rscope, bf.purity, + ty::mk_bare_fn(tcx, ty_of_bare_fn(this, rscope, bf.purity, bf.abis, &bf.lifetimes, &bf.decl)) } ast::ty_closure(ref f) => { - let fn_decl = ty_of_closure(self, + let fn_decl = ty_of_closure(this, rscope, f.sigil, f.purity, @@ -407,7 +407,7 @@ pub fn ast_ty_to_ty( ty::mk_err() } ast::def_ty(did) | ast::def_struct(did) => { - ast_path_to_ty(self, rscope, did, path).ty + ast_path_to_ty(this, rscope, did, path).ty } ast::def_prim_ty(nty) => { match nty { @@ -440,7 +440,7 @@ pub fn ast_ty_to_ty( ty::mk_param(tcx, n, id) } ast::def_self_ty(id) => { - // n.b.: resolve guarantees that the self type only appears in a + // n.b.: resolve guarantees that the this type only appears in a // trait, which we rely upon in various places when creating // substs check_path_args(tcx, path, NO_TPS | NO_REGIONS); @@ -458,10 +458,10 @@ pub fn ast_ty_to_ty( Ok(ref r) => { match *r { const_eval::const_int(i) => - ty::mk_evec(tcx, ast_mt_to_mt(self, rscope, a_mt), + ty::mk_evec(tcx, ast_mt_to_mt(this, rscope, a_mt), ty::vstore_fixed(i as uint)), const_eval::const_uint(i) => - ty::mk_evec(tcx, ast_mt_to_mt(self, rscope, a_mt), + ty::mk_evec(tcx, ast_mt_to_mt(this, rscope, a_mt), ty::vstore_fixed(i as uint)), _ => { tcx.sess.span_fatal( @@ -482,7 +482,7 @@ pub fn ast_ty_to_ty( // values in a fn_expr, or as the type of local variables. Both of // these cases are handled specially and should not descend into this // routine. - self.tcx().sess.span_bug( + this.tcx().sess.span_bug( ast_ty.span, "found `ty_infer` in unexpected place"); } @@ -498,15 +498,15 @@ pub fn ast_ty_to_ty( pub fn ty_of_arg( - self: &AC, + this: &AC, rscope: &RS, a: ast::arg, expected_ty: Option) -> ty::arg { let ty = match a.ty.node { ast::ty_infer if expected_ty.is_some() => expected_ty.get().ty, - ast::ty_infer => self.ty_infer(a.ty.span), - _ => ast_ty_to_ty(self, rscope, a.ty), + ast::ty_infer => this.ty_infer(a.ty.span), + _ => ast_ty_to_ty(this, rscope, a.ty), }; arg { @@ -515,28 +515,28 @@ pub fn ty_of_arg( - self: &AC, + this: &AC, ast_lifetimes: &OptVec) -> OptVec { /*! * * Converts a list of lifetimes into a list of bound identifier - * names. Does not permit special names like 'static or 'self to + * names. Does not permit special names like 'static or 'this to * be bound. Note that this function is for use in closures, - * methods, and fn definitions. It is legal to bind 'self in a + * methods, and fn definitions. It is legal to bind 'this in a * type. Eventually this distinction should go away and the same - * rules should apply everywhere ('self would not be a special name + * rules should apply everywhere ('this would not be a special name * at that point). */ - let special_idents = [special_idents::static, special_idents::self_]; + let special_idents = [special_idents::statik, special_idents::self_]; let mut bound_lifetime_names = opt_vec::Empty; ast_lifetimes.map_to_vec(|ast_lifetime| { if special_idents.any(|&i| i == ast_lifetime.ident) { - self.tcx().sess.span_err( + this.tcx().sess.span_err( ast_lifetime.span, fmt!("illegal lifetime parameter name: `%s`", - lifetime_to_str(ast_lifetime, self.tcx().sess.intr()))); + lifetime_to_str(ast_lifetime, this.tcx().sess.intr()))); } else { bound_lifetime_names.push(ast_lifetime.ident); } @@ -550,7 +550,7 @@ struct SelfInfo { } pub fn ty_of_method( - self: &AC, + this: &AC, rscope: &RS, purity: ast::purity, lifetimes: &OptVec, @@ -563,12 +563,12 @@ pub fn ty_of_method( self_transform: self_transform }; let (a, b) = ty_of_method_or_bare_fn( - self, rscope, purity, AbiSet::Rust(), lifetimes, Some(&self_info), decl); + this, rscope, purity, AbiSet::Rust(), lifetimes, Some(&self_info), decl); (a.get(), b) } pub fn ty_of_bare_fn( - self: &AC, + this: &AC, rscope: &RS, purity: ast::purity, abi: AbiSet, @@ -576,12 +576,12 @@ pub fn ty_of_bare_fn( decl: &ast::fn_decl) -> ty::BareFnTy { let (_, b) = ty_of_method_or_bare_fn( - self, rscope, purity, abi, lifetimes, None, decl); + this, rscope, purity, abi, lifetimes, None, decl); b } fn ty_of_method_or_bare_fn( - self: &AC, + this: &AC, rscope: &RS, purity: ast::purity, abi: AbiSet, @@ -593,18 +593,18 @@ fn ty_of_method_or_bare_fn( // new region names that appear inside of the fn decl are bound to // that function type - let bound_lifetime_names = bound_lifetimes(self, lifetimes); + let bound_lifetime_names = bound_lifetimes(this, lifetimes); let rb = in_binding_rscope(rscope, RegionParamNames(copy bound_lifetime_names)); let opt_transformed_self_ty = opt_self_info.map(|&self_info| { - transform_self_ty(self, &rb, self_info) + transform_self_ty(this, &rb, self_info) }); - let input_tys = decl.inputs.map(|a| ty_of_arg(self, &rb, *a, None)); + let input_tys = decl.inputs.map(|a| ty_of_arg(this, &rb, *a, None)); let output_ty = match decl.output.node { - ast::ty_infer => self.ty_infer(decl.output.span), - _ => ast_ty_to_ty(self, &rb, decl.output) + ast::ty_infer => this.ty_infer(decl.output.span), + _ => ast_ty_to_ty(this, &rb, decl.output) }; return (opt_transformed_self_ty, @@ -617,7 +617,7 @@ fn ty_of_method_or_bare_fn( }); fn transform_self_ty( - self: &AC, + this: &AC, rscope: &RS, self_info: &SelfInfo) -> Option { @@ -628,20 +628,20 @@ fn ty_of_method_or_bare_fn( } ast::sty_region(lifetime, mutability) => { let region = - ast_region_to_region(self, rscope, + ast_region_to_region(this, rscope, self_info.self_transform.span, lifetime); - Some(ty::mk_rptr(self.tcx(), region, + Some(ty::mk_rptr(this.tcx(), region, ty::mt {ty: self_info.untransformed_self_ty, mutbl: mutability})) } ast::sty_box(mutability) => { - Some(ty::mk_box(self.tcx(), + Some(ty::mk_box(this.tcx(), ty::mt {ty: self_info.untransformed_self_ty, mutbl: mutability})) } ast::sty_uniq(mutability) => { - Some(ty::mk_uniq(self.tcx(), + Some(ty::mk_uniq(this.tcx(), ty::mt {ty: self_info.untransformed_self_ty, mutbl: mutability})) } @@ -650,7 +650,7 @@ fn ty_of_method_or_bare_fn( } pub fn ty_of_closure( - self: &AC, + this: &AC, rscope: &RS, sigil: ast::Sigil, purity: ast::purity, @@ -674,7 +674,7 @@ pub fn ty_of_closure( // scope `rscope`, not the scope of the function parameters let bound_region = match opt_lifetime { Some(_) => { - ast_region_to_region(self, rscope, span, opt_lifetime) + ast_region_to_region(this, rscope, span, opt_lifetime) } None => { match sigil { @@ -685,7 +685,7 @@ pub fn ty_of_closure( } ast::BorrowedSigil => { // &fn() defaults as normal for an omitted lifetime: - ast_region_to_region(self, rscope, span, opt_lifetime) + ast_region_to_region(this, rscope, span, opt_lifetime) } } } @@ -693,7 +693,7 @@ pub fn ty_of_closure( // new region names that appear inside of the fn decl are bound to // that function type - let bound_lifetime_names = bound_lifetimes(self, lifetimes); + let bound_lifetime_names = bound_lifetimes(this, lifetimes); let rb = in_binding_rscope(rscope, RegionParamNames(copy bound_lifetime_names)); let input_tys = do decl.inputs.mapi |i, a| { @@ -702,14 +702,14 @@ pub fn ty_of_closure( // were supplied if i < e.inputs.len() {Some(e.inputs[i])} else {None} }; - ty_of_arg(self, &rb, *a, expected_arg_ty) + ty_of_arg(this, &rb, *a, expected_arg_ty) }; let expected_ret_ty = expected_sig.map(|e| e.output); let output_ty = match decl.output.node { ast::ty_infer if expected_ret_ty.is_some() => expected_ret_ty.get(), - ast::ty_infer => self.ty_infer(decl.output.span), - _ => ast_ty_to_ty(self, &rb, decl.output) + ast::ty_infer => this.ty_infer(decl.output.span), + _ => ast_ty_to_ty(this, &rb, decl.output) }; ty::ClosureTy { diff --git a/src/librustc/middle/typeck/check/mod.rs b/src/librustc/middle/typeck/check/mod.rs index 7c79693a8b2eb..498e5c9d2007d 100644 --- a/src/librustc/middle/typeck/check/mod.rs +++ b/src/librustc/middle/typeck/check/mod.rs @@ -2391,6 +2391,12 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt, let tpt = ty_param_bounds_and_ty_for_def(fcx, expr.span, defn); instantiate_path(fcx, pth, tpt, expr.span, expr.id); } + ast::expr_self => { + let definition = lookup_def(fcx, expr.span, id); + let ty_param_bounds_and_ty = + ty_param_bounds_and_ty_for_def(fcx, expr.span, definition); + fcx.write_ty(id, ty_param_bounds_and_ty.ty); + } ast::expr_inline_asm(ref ia) => { fcx.require_unsafe(expr.span, ~"use of inline assembly"); diff --git a/src/librustc/middle/typeck/check/regionck.rs b/src/librustc/middle/typeck/check/regionck.rs index 55c1f03b330e2..ecec07ec51287 100644 --- a/src/librustc/middle/typeck/check/regionck.rs +++ b/src/librustc/middle/typeck/check/regionck.rs @@ -993,7 +993,7 @@ pub mod guarantor { guarantor(rcx, e) } - ast::expr_path(*) => { + ast::expr_path(*) | ast::expr_self => { // Either a variable or constant and hence resides // in constant memory or on the stack frame. Either way, // not guaranteed by a region pointer. diff --git a/src/librustc/middle/typeck/collect.rs b/src/librustc/middle/typeck/collect.rs index 6de877620315b..03601a716c020 100644 --- a/src/librustc/middle/typeck/collect.rs +++ b/src/librustc/middle/typeck/collect.rs @@ -370,7 +370,7 @@ pub fn ensure_trait_methods(ccx: &CrateCtxt, }); } - fn ty_method_of_trait_method(self: &CrateCtxt, + fn ty_method_of_trait_method(this: &CrateCtxt, trait_id: ast::node_id, trait_rp: Option, trait_generics: &ast::Generics, @@ -381,15 +381,15 @@ pub fn ensure_trait_methods(ccx: &CrateCtxt, m_purity: &ast::purity, m_decl: &ast::fn_decl) -> ty::method { - let trait_self_ty = ty::mk_self(self.tcx, local_def(trait_id)); + let trait_self_ty = ty::mk_self(this.tcx, local_def(trait_id)); let rscope = MethodRscope::new(m_self_ty.node, trait_rp, trait_generics); let (transformed_self_ty, fty) = - astconv::ty_of_method(self, &rscope, *m_purity, &m_generics.lifetimes, + astconv::ty_of_method(this, &rscope, *m_purity, &m_generics.lifetimes, trait_self_ty, *m_self_ty, m_decl); let num_trait_type_params = trait_generics.ty_params.len(); ty::method { ident: *m_ident, - generics: ty_generics(self, None, m_generics, num_trait_type_params), + generics: ty_generics(this, None, m_generics, num_trait_type_params), transformed_self_ty: transformed_self_ty, fty: fty, self_ty: m_self_ty.node, diff --git a/src/librustc/middle/typeck/infer/combine.rs b/src/librustc/middle/typeck/infer/combine.rs index 362104e98b0bd..a845d6fe9d0fd 100644 --- a/src/librustc/middle/typeck/infer/combine.rs +++ b/src/librustc/middle/typeck/infer/combine.rs @@ -120,31 +120,31 @@ pub struct CombineFields { } pub fn expected_found( - self: &C, a: T, b: T) -> ty::expected_found { - if self.a_is_expected() { + this: &C, a: T, b: T) -> ty::expected_found { + if this.a_is_expected() { ty::expected_found {expected: a, found: b} } else { ty::expected_found {expected: b, found: a} } } -pub fn eq_tys(self: &C, a: ty::t, b: ty::t) -> ures { - let suber = self.sub(); - do self.infcx().try { +pub fn eq_tys(this: &C, a: ty::t, b: ty::t) -> ures { + let suber = this.sub(); + do this.infcx().try { do suber.tys(a, b).chain |_ok| { suber.contratys(a, b) }.to_ures() } } -pub fn eq_regions(self: &C, a: ty::Region, b: ty::Region) +pub fn eq_regions(this: &C, a: ty::Region, b: ty::Region) -> ures { debug!("eq_regions(%s, %s)", - a.inf_str(self.infcx()), - b.inf_str(self.infcx())); - let sub = self.sub(); + a.inf_str(this.infcx()), + b.inf_str(this.infcx())); + let sub = this.sub(); do indent { - self.infcx().try(|| { + this.infcx().try(|| { do sub.regions(a, b).chain |_r| { sub.contraregions(a, b) } @@ -161,7 +161,7 @@ pub fn eq_regions(self: &C, a: ty::Region, b: ty::Region) } pub fn eq_opt_regions( - self: &C, + this: &C, a: Option, b: Option) -> cres> { @@ -170,7 +170,7 @@ pub fn eq_opt_regions( Ok(None) } (Some(a), Some(b)) => { - do eq_regions(self, a, b).then { + do eq_regions(this, a, b).then { Ok(Some(a)) } } @@ -179,21 +179,21 @@ pub fn eq_opt_regions( // they should be), then the type should either // consistently have a region parameter or not have a // region parameter. - self.infcx().tcx.sess.bug( + this.infcx().tcx.sess.bug( fmt!("substitution a had opt_region %s and \ b had opt_region %s", - a.inf_str(self.infcx()), - b.inf_str(self.infcx()))); + a.inf_str(this.infcx()), + b.inf_str(this.infcx()))); } } } pub fn super_substs( - self: &C, generics: &ty::Generics, + this: &C, generics: &ty::Generics, a: &ty::substs, b: &ty::substs) -> cres { fn relate_region_param( - self: &C, + this: &C, generics: &ty::Generics, a: Option, b: Option) @@ -204,17 +204,17 @@ pub fn super_substs( Ok(None) } (&Some(ty::rv_invariant), &Some(a), &Some(b)) => { - do eq_regions(self, a, b).then { + do eq_regions(this, a, b).then { Ok(Some(a)) } } (&Some(ty::rv_covariant), &Some(a), &Some(b)) => { - do self.regions(a, b).chain |r| { + do this.regions(a, b).chain |r| { Ok(Some(r)) } } (&Some(ty::rv_contravariant), &Some(a), &Some(b)) => { - do self.contraregions(a, b).chain |r| { + do this.contraregions(a, b).chain |r| { Ok(Some(r)) } } @@ -224,19 +224,19 @@ pub fn super_substs( // consistently have a region parameter or not have a // region parameter, and that should match with the // polytype. - self.infcx().tcx.sess.bug( + this.infcx().tcx.sess.bug( fmt!("substitution a had opt_region %s and \ b had opt_region %s with variance %?", - a.inf_str(self.infcx()), - b.inf_str(self.infcx()), + a.inf_str(this.infcx()), + b.inf_str(this.infcx()), generics.region_param)); } } } - do self.tps(a.tps, b.tps).chain |tps| { - do self.self_tys(a.self_ty, b.self_ty).chain |self_ty| { - do relate_region_param(self, generics, + do this.tps(a.tps, b.tps).chain |tps| { + do this.self_tys(a.self_ty, b.self_ty).chain |self_ty| { + do relate_region_param(this, generics, a.self_r, b.self_r).chain |self_r| { Ok(substs { @@ -250,7 +250,7 @@ pub fn super_substs( } pub fn super_tps( - self: &C, as_: &[ty::t], bs: &[ty::t]) -> cres<~[ty::t]> { + this: &C, as_: &[ty::t], bs: &[ty::t]) -> cres<~[ty::t]> { // Note: type parameters are always treated as *invariant* // (otherwise the type system would be unsound). In the @@ -259,16 +259,16 @@ pub fn super_tps( if vec::same_length(as_, bs) { iter_vec2(as_, bs, |a, b| { - eq_tys(self, *a, *b) + eq_tys(this, *a, *b) }).then(|| Ok(as_.to_vec()) ) } else { Err(ty::terr_ty_param_size( - expected_found(self, as_.len(), bs.len()))) + expected_found(this, as_.len(), bs.len()))) } } pub fn super_self_tys( - self: &C, a: Option, b: Option) -> cres> { + this: &C, a: Option, b: Option) -> cres> { match (a, b) { (None, None) => { @@ -276,8 +276,8 @@ pub fn super_self_tys( } (Some(a), Some(b)) => { // FIXME(#5781) this should be eq_tys - // eq_tys(self, a, b).then(|| Ok(Some(a)) ) - self.contratys(a, b).chain(|t| Ok(Some(t))) + // eq_tys(this, a, b).then(|| Ok(Some(a)) ) + this.contratys(a, b).chain(|t| Ok(Some(t))) } (None, Some(_)) | (Some(_), None) => { @@ -290,46 +290,46 @@ pub fn super_self_tys( } pub fn super_sigils( - self: &C, p1: ast::Sigil, p2: ast::Sigil) -> cres { + this: &C, p1: ast::Sigil, p2: ast::Sigil) -> cres { if p1 == p2 { Ok(p1) } else { - Err(ty::terr_sigil_mismatch(expected_found(self, p1, p2))) + Err(ty::terr_sigil_mismatch(expected_found(this, p1, p2))) } } pub fn super_flds( - self: &C, a: ty::field, b: ty::field) -> cres { + this: &C, a: ty::field, b: ty::field) -> cres { if a.ident == b.ident { - self.mts(&a.mt, &b.mt) + this.mts(&a.mt, &b.mt) .chain(|mt| Ok(ty::field {ident: a.ident, mt: mt}) ) .chain_err(|e| Err(ty::terr_in_field(@e, a.ident)) ) } else { Err(ty::terr_record_fields( - expected_found(self, a.ident, b.ident))) + expected_found(this, a.ident, b.ident))) } } -pub fn super_args(self: &C, a: ty::arg, b: ty::arg) +pub fn super_args(this: &C, a: ty::arg, b: ty::arg) -> cres { - do self.contratys(a.ty, b.ty).chain |t| { + do this.contratys(a.ty, b.ty).chain |t| { Ok(arg { ty: t }) } } -pub fn super_vstores(self: &C, +pub fn super_vstores(this: &C, vk: ty::terr_vstore_kind, a: ty::vstore, b: ty::vstore) -> cres { - debug!("%s.super_vstores(a=%?, b=%?)", self.tag(), a, b); + debug!("%s.super_vstores(a=%?, b=%?)", this.tag(), a, b); match (a, b) { (ty::vstore_slice(a_r), ty::vstore_slice(b_r)) => { - do self.contraregions(a_r, b_r).chain |r| { + do this.contraregions(a_r, b_r).chain |r| { Ok(ty::vstore_slice(r)) } } @@ -339,21 +339,21 @@ pub fn super_vstores(self: &C, } _ => { - Err(ty::terr_vstores_differ(vk, expected_found(self, a, b))) + Err(ty::terr_vstores_differ(vk, expected_found(this, a, b))) } } } -pub fn super_trait_stores(self: &C, +pub fn super_trait_stores(this: &C, vk: ty::terr_vstore_kind, a: ty::TraitStore, b: ty::TraitStore) -> cres { - debug!("%s.super_vstores(a=%?, b=%?)", self.tag(), a, b); + debug!("%s.super_vstores(a=%?, b=%?)", this.tag(), a, b); match (a, b) { (ty::RegionTraitStore(a_r), ty::RegionTraitStore(b_r)) => { - do self.contraregions(a_r, b_r).chain |r| { + do this.contraregions(a_r, b_r).chain |r| { Ok(ty::RegionTraitStore(r)) } } @@ -363,19 +363,19 @@ pub fn super_trait_stores(self: &C, } _ => { - Err(ty::terr_trait_stores_differ(vk, expected_found(self, a, b))) + Err(ty::terr_trait_stores_differ(vk, expected_found(this, a, b))) } } } pub fn super_closure_tys( - self: &C, a_f: &ty::ClosureTy, b_f: &ty::ClosureTy) -> cres + this: &C, a_f: &ty::ClosureTy, b_f: &ty::ClosureTy) -> cres { - let p = if_ok!(self.sigils(a_f.sigil, b_f.sigil)); - let r = if_ok!(self.contraregions(a_f.region, b_f.region)); - let purity = if_ok!(self.purities(a_f.purity, b_f.purity)); - let onceness = if_ok!(self.oncenesses(a_f.onceness, b_f.onceness)); - let sig = if_ok!(self.fn_sigs(&a_f.sig, &b_f.sig)); + let p = if_ok!(this.sigils(a_f.sigil, b_f.sigil)); + let r = if_ok!(this.contraregions(a_f.region, b_f.region)); + let purity = if_ok!(this.purities(a_f.purity, b_f.purity)); + let onceness = if_ok!(this.oncenesses(a_f.onceness, b_f.onceness)); + let sig = if_ok!(this.fn_sigs(&a_f.sig, &b_f.sig)); Ok(ty::ClosureTy {purity: purity, sigil: p, onceness: onceness, @@ -384,43 +384,43 @@ pub fn super_closure_tys( } pub fn super_abis( - self: &C, a: AbiSet, b: AbiSet) -> cres + this: &C, a: AbiSet, b: AbiSet) -> cres { if a == b { Ok(a) } else { - Err(ty::terr_abi_mismatch(expected_found(self, a, b))) + Err(ty::terr_abi_mismatch(expected_found(this, a, b))) } } pub fn super_bare_fn_tys( - self: &C, a_f: &ty::BareFnTy, b_f: &ty::BareFnTy) -> cres + this: &C, a_f: &ty::BareFnTy, b_f: &ty::BareFnTy) -> cres { - let purity = if_ok!(self.purities(a_f.purity, b_f.purity)); - let abi = if_ok!(self.abis(a_f.abis, b_f.abis)); - let sig = if_ok!(self.fn_sigs(&a_f.sig, &b_f.sig)); + let purity = if_ok!(this.purities(a_f.purity, b_f.purity)); + let abi = if_ok!(this.abis(a_f.abis, b_f.abis)); + let sig = if_ok!(this.fn_sigs(&a_f.sig, &b_f.sig)); Ok(ty::BareFnTy {purity: purity, abis: abi, sig: sig}) } pub fn super_fn_sigs( - self: &C, a_f: &ty::FnSig, b_f: &ty::FnSig) -> cres + this: &C, a_f: &ty::FnSig, b_f: &ty::FnSig) -> cres { - fn argvecs(self: &C, + fn argvecs(this: &C, a_args: &[ty::arg], b_args: &[ty::arg]) -> cres<~[ty::arg]> { if vec::same_length(a_args, b_args) { - map_vec2(a_args, b_args, |a, b| self.args(*a, *b)) + map_vec2(a_args, b_args, |a, b| this.args(*a, *b)) } else { Err(ty::terr_arg_count) } } - do argvecs(self, a_f.inputs, b_f.inputs) + do argvecs(this, a_f.inputs, b_f.inputs) .chain |inputs| { - do self.tys(a_f.output, b_f.output).chain |output| { + do this.tys(a_f.output, b_f.output).chain |output| { Ok(FnSig {bound_lifetime_names: opt_vec::Empty, // FIXME(#4846) inputs: /*bad*/copy inputs, output: output}) @@ -429,8 +429,8 @@ pub fn super_fn_sigs( } pub fn super_tys( - self: &C, a: ty::t, b: ty::t) -> cres { - let tcx = self.infcx().tcx; + this: &C, a: ty::t, b: ty::t) -> cres { + let tcx = this.infcx().tcx; return match (/*bad*/copy ty::get(a).sty, /*bad*/copy ty::get(b).sty) { // The "subtype" ought to be handling cases involving bot or var: (ty::ty_bot, _) | @@ -439,45 +439,45 @@ pub fn super_tys( (_, ty::ty_infer(TyVar(_))) => { tcx.sess.bug( fmt!("%s: bot and var types should have been handled (%s,%s)", - self.tag(), - a.inf_str(self.infcx()), - b.inf_str(self.infcx()))); + this.tag(), + a.inf_str(this.infcx()), + b.inf_str(this.infcx()))); } // Relate integral variables to other types (ty::ty_infer(IntVar(a_id)), ty::ty_infer(IntVar(b_id))) => { - if_ok!(self.infcx().simple_vars(self.a_is_expected(), + if_ok!(this.infcx().simple_vars(this.a_is_expected(), a_id, b_id)); Ok(a) } (ty::ty_infer(IntVar(v_id)), ty::ty_int(v)) => { - unify_integral_variable(self, self.a_is_expected(), + unify_integral_variable(this, this.a_is_expected(), v_id, IntType(v)) } (ty::ty_int(v), ty::ty_infer(IntVar(v_id))) => { - unify_integral_variable(self, !self.a_is_expected(), + unify_integral_variable(this, !this.a_is_expected(), v_id, IntType(v)) } (ty::ty_infer(IntVar(v_id)), ty::ty_uint(v)) => { - unify_integral_variable(self, self.a_is_expected(), + unify_integral_variable(this, this.a_is_expected(), v_id, UintType(v)) } (ty::ty_uint(v), ty::ty_infer(IntVar(v_id))) => { - unify_integral_variable(self, !self.a_is_expected(), + unify_integral_variable(this, !this.a_is_expected(), v_id, UintType(v)) } // Relate floating-point variables to other types (ty::ty_infer(FloatVar(a_id)), ty::ty_infer(FloatVar(b_id))) => { - if_ok!(self.infcx().simple_vars(self.a_is_expected(), + if_ok!(this.infcx().simple_vars(this.a_is_expected(), a_id, b_id)); Ok(a) } (ty::ty_infer(FloatVar(v_id)), ty::ty_float(v)) => { - unify_float_variable(self, self.a_is_expected(), v_id, v) + unify_float_variable(this, this.a_is_expected(), v_id, v) } (ty::ty_float(v), ty::ty_infer(FloatVar(v_id))) => { - unify_float_variable(self, !self.a_is_expected(), v_id, v) + unify_float_variable(this, !this.a_is_expected(), v_id, v) } (ty::ty_nil, _) | @@ -488,7 +488,7 @@ pub fn super_tys( if ty::get(a).sty == ty::get(b).sty { Ok(a) } else { - Err(ty::terr_sorts(expected_found(self, a, b))) + Err(ty::terr_sorts(expected_found(this, a, b))) } } @@ -500,7 +500,7 @@ pub fn super_tys( ty::ty_enum(b_id, ref b_substs)) if a_id == b_id => { let type_def = ty::lookup_item_type(tcx, a_id); - do self.substs(&type_def.generics, a_substs, b_substs).chain |substs| { + do this.substs(&type_def.generics, a_substs, b_substs).chain |substs| { Ok(ty::mk_enum(tcx, a_id, substs)) } } @@ -509,8 +509,8 @@ pub fn super_tys( ty::ty_trait(b_id, ref b_substs, b_store, b_mutbl)) if a_id == b_id && a_mutbl == b_mutbl => { let trait_def = ty::lookup_trait_def(tcx, a_id); - do self.substs(&trait_def.generics, a_substs, b_substs).chain |substs| { - do self.trait_stores(ty::terr_trait, a_store, b_store).chain |s| { + do this.substs(&trait_def.generics, a_substs, b_substs).chain |substs| { + do this.trait_stores(ty::terr_trait, a_store, b_store).chain |s| { Ok(ty::mk_trait(tcx, a_id, /*bad*/copy substs, s, a_mutbl)) } } @@ -519,76 +519,76 @@ pub fn super_tys( (ty::ty_struct(a_id, ref a_substs), ty::ty_struct(b_id, ref b_substs)) if a_id == b_id => { let type_def = ty::lookup_item_type(tcx, a_id); - do self.substs(&type_def.generics, a_substs, b_substs).chain |substs| { + do this.substs(&type_def.generics, a_substs, b_substs).chain |substs| { Ok(ty::mk_struct(tcx, a_id, substs)) } } (ty::ty_box(ref a_mt), ty::ty_box(ref b_mt)) => { - do self.mts(a_mt, b_mt).chain |mt| { + do this.mts(a_mt, b_mt).chain |mt| { Ok(ty::mk_box(tcx, mt)) } } (ty::ty_uniq(ref a_mt), ty::ty_uniq(ref b_mt)) => { - do self.mts(a_mt, b_mt).chain |mt| { + do this.mts(a_mt, b_mt).chain |mt| { Ok(ty::mk_uniq(tcx, mt)) } } (ty::ty_ptr(ref a_mt), ty::ty_ptr(ref b_mt)) => { - do self.mts(a_mt, b_mt).chain |mt| { + do this.mts(a_mt, b_mt).chain |mt| { Ok(ty::mk_ptr(tcx, mt)) } } (ty::ty_rptr(a_r, ref a_mt), ty::ty_rptr(b_r, ref b_mt)) => { - let r = if_ok!(self.contraregions(a_r, b_r)); - let mt = if_ok!(self.mts(a_mt, b_mt)); + let r = if_ok!(this.contraregions(a_r, b_r)); + let mt = if_ok!(this.mts(a_mt, b_mt)); Ok(ty::mk_rptr(tcx, r, mt)) } (ty::ty_evec(ref a_mt, vs_a), ty::ty_evec(ref b_mt, vs_b)) => { - do self.mts(a_mt, b_mt).chain |mt| { - do self.vstores(ty::terr_vec, vs_a, vs_b).chain |vs| { + do this.mts(a_mt, b_mt).chain |mt| { + do this.vstores(ty::terr_vec, vs_a, vs_b).chain |vs| { Ok(ty::mk_evec(tcx, mt, vs)) } } } (ty::ty_estr(vs_a), ty::ty_estr(vs_b)) => { - do self.vstores(ty::terr_str, vs_a, vs_b).chain |vs| { + do this.vstores(ty::terr_str, vs_a, vs_b).chain |vs| { Ok(ty::mk_estr(tcx,vs)) } } (ty::ty_tup(ref as_), ty::ty_tup(ref bs)) => { if as_.len() == bs.len() { - map_vec2(*as_, *bs, |a, b| self.tys(*a, *b) ) + map_vec2(*as_, *bs, |a, b| this.tys(*a, *b) ) .chain(|ts| Ok(ty::mk_tup(tcx, ts)) ) } else { Err(ty::terr_tuple_size( - expected_found(self, as_.len(), bs.len()))) + expected_found(this, as_.len(), bs.len()))) } } (ty::ty_bare_fn(ref a_fty), ty::ty_bare_fn(ref b_fty)) => { - do self.bare_fn_tys(a_fty, b_fty).chain |fty| { + do this.bare_fn_tys(a_fty, b_fty).chain |fty| { Ok(ty::mk_bare_fn(tcx, fty)) } } (ty::ty_closure(ref a_fty), ty::ty_closure(ref b_fty)) => { - do self.closure_tys(a_fty, b_fty).chain |fty| { + do this.closure_tys(a_fty, b_fty).chain |fty| { Ok(ty::mk_closure(tcx, fty)) } } - _ => Err(ty::terr_sorts(expected_found(self, a, b))) + _ => Err(ty::terr_sorts(expected_found(this, a, b))) }; fn unify_integral_variable( - self: &C, + this: &C, vid_is_expected: bool, vid: ty::IntVid, val: ty::IntVarValue) -> cres @@ -596,7 +596,7 @@ pub fn super_tys( if val == IntType(ast::ty_char) { Err(ty::terr_integer_as_char) } else { - if_ok!(self.infcx().simple_var_t(vid_is_expected, vid, val)); + if_ok!(this.infcx().simple_var_t(vid_is_expected, vid, val)); match val { IntType(v) => Ok(ty::mk_mach_int(v)), UintType(v) => Ok(ty::mk_mach_uint(v)) @@ -605,18 +605,18 @@ pub fn super_tys( } fn unify_float_variable( - self: &C, + this: &C, vid_is_expected: bool, vid: ty::FloatVid, val: ast::float_ty) -> cres { - if_ok!(self.infcx().simple_var_t(vid_is_expected, vid, val)); + if_ok!(this.infcx().simple_var_t(vid_is_expected, vid, val)); Ok(ty::mk_mach_float(val)) } } pub fn super_trait_refs( - self: &C, a: &ty::TraitRef, b: &ty::TraitRef) -> cres + this: &C, a: &ty::TraitRef, b: &ty::TraitRef) -> cres { // Different traits cannot be related @@ -624,11 +624,11 @@ pub fn super_trait_refs( if a.def_id != b.def_id { Err(ty::terr_traits( - expected_found(self, a.def_id, b.def_id))) + expected_found(this, a.def_id, b.def_id))) } else { - let tcx = self.infcx().tcx; + let tcx = this.infcx().tcx; let trait_def = ty::lookup_trait_def(tcx, a.def_id); - let substs = if_ok!(self.substs(&trait_def.generics, &a.substs, &b.substs)); + let substs = if_ok!(this.substs(&trait_def.generics, &a.substs, &b.substs)); Ok(ty::TraitRef { def_id: a.def_id, substs: substs diff --git a/src/librustc/middle/typeck/infer/glb.rs b/src/librustc/middle/typeck/infer/glb.rs index c195454b53276..462d7a003f405 100644 --- a/src/librustc/middle/typeck/infer/glb.rs +++ b/src/librustc/middle/typeck/infer/glb.rs @@ -198,7 +198,7 @@ impl Combine for Glb { debug!("sig1 = %s", sig1.inf_str(self.infcx)); return Ok(sig1); - fn generalize_region(self: &Glb, + fn generalize_region(this: &Glb, snapshot: uint, new_vars: &[RegionVid], a_isr: isr_alist, @@ -209,19 +209,19 @@ impl Combine for Glb { return r0; } - let tainted = self.infcx.region_vars.tainted(snapshot, r0); + let tainted = this.infcx.region_vars.tainted(snapshot, r0); let mut a_r = None, b_r = None, only_new_vars = true; for tainted.each |r| { if is_var_in_set(a_vars, *r) { if a_r.is_some() { - return fresh_bound_variable(self); + return fresh_bound_variable(this); } else { a_r = Some(*r); } } else if is_var_in_set(b_vars, *r) { if b_r.is_some() { - return fresh_bound_variable(self); + return fresh_bound_variable(this); } else { b_r = Some(*r); } @@ -246,17 +246,17 @@ impl Combine for Glb { if a_r.is_some() && b_r.is_some() && only_new_vars { // Related to exactly one bound variable from each fn: - return rev_lookup(self, a_isr, a_r.get()); + return rev_lookup(this, a_isr, a_r.get()); } else if a_r.is_none() && b_r.is_none() { // Not related to bound variables from either fn: return r0; } else { // Other: - return fresh_bound_variable(self); + return fresh_bound_variable(this); } } - fn rev_lookup(self: &Glb, + fn rev_lookup(this: &Glb, a_isr: isr_alist, r: ty::Region) -> ty::Region { @@ -267,13 +267,13 @@ impl Combine for Glb { } } - self.infcx.tcx.sess.span_bug( - self.span, + this.infcx.tcx.sess.span_bug( + this.span, fmt!("could not find original bound region for %?", r)); } - fn fresh_bound_variable(self: &Glb) -> ty::Region { - self.infcx.region_vars.new_bound() + fn fresh_bound_variable(this: &Glb) -> ty::Region { + this.infcx.region_vars.new_bound() } } diff --git a/src/librustc/middle/typeck/infer/lattice.rs b/src/librustc/middle/typeck/infer/lattice.rs index b9344724f60e5..3c48e09c05747 100644 --- a/src/librustc/middle/typeck/infer/lattice.rs +++ b/src/librustc/middle/typeck/infer/lattice.rs @@ -330,27 +330,27 @@ impl TyLatticeDir for Glb { } pub fn super_lattice_tys( - self: &L, + this: &L, a: ty::t, b: ty::t) -> cres { - debug!("%s.lattice_tys(%s, %s)", self.tag(), - a.inf_str(self.infcx()), - b.inf_str(self.infcx())); + debug!("%s.lattice_tys(%s, %s)", this.tag(), + a.inf_str(this.infcx()), + b.inf_str(this.infcx())); let _r = indenter(); if a == b { return Ok(a); } - let tcx = self.infcx().tcx; + let tcx = this.infcx().tcx; match (&ty::get(a).sty, &ty::get(b).sty) { - (&ty::ty_bot, _) => { return self.ty_bot(b); } - (_, &ty::ty_bot) => { return self.ty_bot(a); } + (&ty::ty_bot, _) => { return this.ty_bot(b); } + (_, &ty::ty_bot) => { return this.ty_bot(a); } (&ty::ty_infer(TyVar(a_id)), &ty::ty_infer(TyVar(b_id))) => { - let r = if_ok!(lattice_vars(self, a_id, b_id, - |x, y| self.tys(*x, *y))); + let r = if_ok!(lattice_vars(this, a_id, b_id, + |x, y| this.tys(*x, *y))); return match r { VarResult(v) => Ok(ty::mk_var(tcx, v)), ValueResult(t) => Ok(t) @@ -358,17 +358,17 @@ pub fn super_lattice_tys( } (&ty::ty_infer(TyVar(a_id)), _) => { - return lattice_var_and_t(self, a_id, &b, - |x, y| self.tys(*x, *y)); + return lattice_var_and_t(this, a_id, &b, + |x, y| this.tys(*x, *y)); } (_, &ty::ty_infer(TyVar(b_id))) => { - return lattice_var_and_t(self, b_id, &a, - |x, y| self.tys(*x, *y)); + return lattice_var_and_t(this, b_id, &a, + |x, y| this.tys(*x, *y)); } _ => { - return super_tys(self, a, b); + return super_tys(this, a, b); } } } @@ -398,22 +398,22 @@ pub enum LatticeVarResult { pub fn lattice_vars>>( - self: &L, // defines whether we want LUB or GLB + this: &L, // defines whether we want LUB or GLB a_vid: V, // first variable b_vid: V, // second variable lattice_dir_op: LatticeDirOp) // LUB or GLB operation on types -> cres> { - let nde_a = self.infcx().get(a_vid); - let nde_b = self.infcx().get(b_vid); + let nde_a = this.infcx().get(a_vid); + let nde_b = this.infcx().get(b_vid); let a_vid = nde_a.root; let b_vid = nde_b.root; let a_bounds = &nde_a.possible_types; let b_bounds = &nde_b.possible_types; debug!("%s.lattice_vars(%s=%s <: %s=%s)", - self.tag(), - a_vid.to_str(), a_bounds.inf_str(self.infcx()), - b_vid.to_str(), b_bounds.inf_str(self.infcx())); + this.tag(), + a_vid.to_str(), a_bounds.inf_str(this.infcx()), + b_vid.to_str(), b_bounds.inf_str(this.infcx())); // Same variable: the easy case. if a_vid == b_vid { @@ -422,10 +422,10 @@ pub fn lattice_vars { - match self.infcx().try(|| lattice_dir_op(a_ty, b_ty) ) { + match this.infcx().try(|| lattice_dir_op(a_ty, b_ty) ) { Ok(t) => return Ok(ValueResult(t)), Err(_) => { /*fallthrough */ } } @@ -435,7 +435,7 @@ pub fn lattice_vars>>( - self: &L, + this: &L, a_id: V, b: &T, lattice_dir_op: LatticeDirOp) -> cres { - let nde_a = self.infcx().get(a_id); + let nde_a = this.infcx().get(a_id); let a_id = nde_a.root; let a_bounds = &nde_a.possible_types; @@ -457,24 +457,24 @@ pub fn lattice_var_and_t { // If a has an upper bound, return the LUB(a.ub, b) - debug!("bnd=Some(%s)", a_bnd.inf_str(self.infcx())); + debug!("bnd=Some(%s)", a_bnd.inf_str(this.infcx())); lattice_dir_op(a_bnd, b) } None => { // If a does not have an upper bound, make b the upper bound of a // and then return b. debug!("bnd=None"); - let a_bounds = self.with_bnd(a_bounds, *b); - do self.combine_fields().bnds(&a_bounds.lb, &a_bounds.ub).then { - self.infcx().set(a_id, Root(a_bounds, nde_a.rank)); + let a_bounds = this.with_bnd(a_bounds, *b); + do this.combine_fields().bnds(&a_bounds.lb, &a_bounds.ub).then { + this.infcx().set(a_id, Root(a_bounds, nde_a.rank)); Ok(*b) } } @@ -485,14 +485,14 @@ pub fn lattice_var_and_t(self: &T, isr: isr_alist) -> ~[RegionVid] { +pub fn var_ids(this: &T, isr: isr_alist) -> ~[RegionVid] { let mut result = ~[]; for list::each(isr) |pair| { match pair.second() { ty::re_infer(ty::ReVar(r)) => { result.push(r); } r => { - self.infcx().tcx.sess.span_bug( - self.span(), + this.infcx().tcx.sess.span_bug( + this.span(), fmt!("Found non-region-vid: %?", r)); } } diff --git a/src/librustc/middle/typeck/infer/lub.rs b/src/librustc/middle/typeck/infer/lub.rs index 34e006c9615a7..bd5821873d2cb 100644 --- a/src/librustc/middle/typeck/infer/lub.rs +++ b/src/librustc/middle/typeck/infer/lub.rs @@ -149,7 +149,7 @@ impl Combine for Lub { a_isr, r)); return Ok(sig1); - fn generalize_region(self: &Lub, + fn generalize_region(this: &Lub, snapshot: uint, new_vars: &[RegionVid], a_isr: isr_alist, @@ -160,7 +160,7 @@ impl Combine for Lub { return r0; } - let tainted = self.infcx.region_vars.tainted(snapshot, r0); + let tainted = this.infcx.region_vars.tainted(snapshot, r0); // Variables created during LUB computation which are // *related* to regions that pre-date the LUB computation @@ -187,8 +187,8 @@ impl Combine for Lub { } } - self.infcx.tcx.sess.span_bug( - self.span, + this.infcx.tcx.sess.span_bug( + this.span, fmt!("Region %? is not associated with \ any bound region from A!", r0)); } diff --git a/src/librustc/middle/typeck/infer/region_inference.rs b/src/librustc/middle/typeck/infer/region_inference.rs index 96e289bc49732..a5e8b42dee5ac 100644 --- a/src/librustc/middle/typeck/infer/region_inference.rs +++ b/src/librustc/middle/typeck/infer/region_inference.rs @@ -876,7 +876,7 @@ pub impl RegionVarBindings { a: Region, b: Region, span: span, - relate: &fn(self: &mut RegionVarBindings, + relate: &fn(this: &mut RegionVarBindings, old_r: Region, new_r: Region) -> cres<()>) -> cres { @@ -1103,11 +1103,11 @@ priv impl RegionVarBindings { Equal => ty::re_free(*a) }; - fn helper(self: &RegionVarBindings, + fn helper(this: &RegionVarBindings, a: &FreeRegion, b: &FreeRegion) -> ty::Region { - let rm = self.tcx.region_maps; + let rm = this.tcx.region_maps; if rm.sub_free_region(*a, *b) { ty::re_free(*b) } else if rm.sub_free_region(*b, *a) { @@ -1198,17 +1198,17 @@ priv impl RegionVarBindings { Equal => Ok(ty::re_free(*a)) }; - fn helper(self: &RegionVarBindings, + fn helper(this: &RegionVarBindings, a: &FreeRegion, b: &FreeRegion) -> cres { - let rm = self.tcx.region_maps; + let rm = this.tcx.region_maps; if rm.sub_free_region(*a, *b) { Ok(ty::re_free(*a)) } else if rm.sub_free_region(*b, *a) { Ok(ty::re_free(*b)) } else { - self.intersect_scopes(ty::re_free(*a), ty::re_free(*b), + this.intersect_scopes(ty::re_free(*a), ty::re_free(*b), a.scope_id, b.scope_id) } } @@ -1461,13 +1461,13 @@ pub impl RegionVarBindings { } }; - fn check_node(self: &mut RegionVarBindings, + fn check_node(this: &mut RegionVarBindings, a_vid: RegionVid, a_node: &mut GraphNode, a_region: Region, b_region: Region) -> bool { - if !self.is_subregion_of(a_region, b_region) { + if !this.is_subregion_of(a_region, b_region) { debug!("Setting %? to ErrorValue: %? not subregion of %?", a_vid, a_region, b_region); a_node.value = ErrorValue; @@ -1475,13 +1475,13 @@ pub impl RegionVarBindings { false } - fn adjust_node(self: &mut RegionVarBindings, + fn adjust_node(this: &mut RegionVarBindings, a_vid: RegionVid, a_node: &mut GraphNode, a_region: Region, b_region: Region) -> bool { - match self.glb_concrete_regions(a_region, b_region) { + match this.glb_concrete_regions(a_region, b_region) { Ok(glb) => { if glb == a_region { false @@ -1744,14 +1744,14 @@ pub impl RegionVarBindings { let WalkState {result, dup_found, _} = state; return (result, dup_found); - fn process_edges(self: &mut RegionVarBindings, + fn process_edges(this: &mut RegionVarBindings, state: &mut WalkState, graph: &Graph, source_vid: RegionVid, dir: Direction) { debug!("process_edges(source_vid=%?, dir=%?)", source_vid, dir); - for self.each_edge(graph, source_vid, dir) |edge| { + for this.each_edge(graph, source_vid, dir) |edge| { match edge.constraint { ConstrainVarSubVar(from_vid, to_vid) => { let opp_vid = diff --git a/src/librustc/middle/typeck/rscope.rs b/src/librustc/middle/typeck/rscope.rs index 316792f688f46..e5ed2efa4c263 100644 --- a/src/librustc/middle/typeck/rscope.rs +++ b/src/librustc/middle/typeck/rscope.rs @@ -267,10 +267,10 @@ pub struct binding_rscope { } pub fn in_binding_rscope( - self: &RS, + this: &RS, region_param_names: RegionParamNames) -> binding_rscope { - let base = @copy *self; + let base = @copy *this; let base = base as @region_scope; binding_rscope { base: base, diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index 5daa0de22728b..f98cbe2e5b996 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -572,6 +572,9 @@ pub enum expr_ { expr_field(@expr, ident, ~[@Ty]), expr_index(@expr, @expr), expr_path(@Path), + + /// The special identifier `self`. + expr_self, expr_addr_of(mutability, @expr), expr_break(Option), expr_again(Option), diff --git a/src/libsyntax/ext/auto_encode.rs b/src/libsyntax/ext/auto_encode.rs index 1d3af61be7036..e1416230720fc 100644 --- a/src/libsyntax/ext/auto_encode.rs +++ b/src/libsyntax/ext/auto_encode.rs @@ -245,6 +245,7 @@ trait ExtCtxtMethods { fn expr_path(&self, span: span, strs: ~[ast::ident]) -> @ast::expr; fn expr_path_global(&self, span: span, strs: ~[ast::ident]) -> @ast::expr; fn expr_var(&self, span: span, var: &str) -> @ast::expr; + fn expr_self(&self, span: span) -> @ast::expr; fn expr_field(&self, span: span, expr: @ast::expr, ident: ast::ident) -> @ast::expr; fn expr_call(&self, span: span, expr: @ast::expr, args: ~[@ast::expr]) @@ -450,6 +451,10 @@ impl ExtCtxtMethods for @ext_ctxt { self.expr_path(span, ~[self.ident_of(var)]) } + fn expr_self(&self, span: span) -> @ast::expr { + self.expr(span, ast::expr_self) + } + fn expr_field( &self, span: span, @@ -790,12 +795,8 @@ fn mk_struct_ser_impl( let expr_lambda = cx.lambda_expr_1( cx.expr_method_call( span, - cx.expr_field( - span, - cx.expr_var(span, "self"), - field.ident - ), - cx.ident_of("encode"), + cx.expr_field(span, cx.expr_self(span), field.ident), + cx.ident_of(~"encode"), ~[cx.expr_var(span, "__s")] ), cx.ident_of("__s") @@ -1062,13 +1063,10 @@ fn mk_enum_ser_body( // ast for `match *self { $(arms) }` let match_expr = cx.expr( span, - ast::expr_match( - cx.expr( - span, - ast::expr_unary(ast::deref, cx.expr_var(span, "self")) - ), - arms - ) + ast::expr_match(cx.expr(span, + ast::expr_unary(ast::deref, + cx.expr_self(span))), + arms) ); // ast for `__s.emit_enum($(name), || $(match_expr))` diff --git a/src/libsyntax/ext/build.rs b/src/libsyntax/ext/build.rs index 3bfb93b34b3a5..3f90fd6267bfb 100644 --- a/src/libsyntax/ext/build.rs +++ b/src/libsyntax/ext/build.rs @@ -518,6 +518,10 @@ pub fn mk_unreachable_arm(cx: @ext_ctxt, span: span) -> ast::arm { mk_arm(cx, span, ~[mk_pat_wild(cx, span)], mk_unreachable(cx, span)) } +pub fn make_self(cx: @ext_ctxt, span: span) -> @ast::expr { + build::mk_expr(cx, span, ast::expr_self) +} + // // Duplication functions // diff --git a/src/libsyntax/ext/deriving/encodable.rs b/src/libsyntax/ext/deriving/encodable.rs index 2786c9c6eb5fc..a5edd92022f78 100644 --- a/src/libsyntax/ext/deriving/encodable.rs +++ b/src/libsyntax/ext/deriving/encodable.rs @@ -204,8 +204,6 @@ fn expand_deriving_encodable_struct_method( type_ident: ident, struct_def: &struct_def ) -> @method { - let self_ident = cx.ident_of("self"); - // Create the body of the method. let mut idx = 0; let mut statements = ~[]; @@ -213,12 +211,10 @@ fn expand_deriving_encodable_struct_method( match struct_field.node.kind { named_field(ident, _) => { // Create the accessor for this field. - let self_field = build::mk_access( - cx, - span, - ~[self_ident], - ident - ); + let self_field = build::mk_access_(cx, + span, + build::make_self(cx, span), + ident); // Call the substructure method. let encode_expr = call_substructure_encode_method( diff --git a/src/libsyntax/ext/deriving/mod.rs b/src/libsyntax/ext/deriving/mod.rs index 78eacafe3d75c..3b94a95dfe032 100644 --- a/src/libsyntax/ext/deriving/mod.rs +++ b/src/libsyntax/ext/deriving/mod.rs @@ -371,8 +371,7 @@ pub fn expand_enum_or_struct_match(cx: @ext_ctxt, span: span, arms: ~[ ast::arm ]) -> @expr { - let self_ident = cx.ident_of("self"); - let self_expr = build::mk_path(cx, span, ~[ self_ident ]); + let self_expr = build::make_self(cx, span); let self_expr = build::mk_unary(cx, span, ast::deref, self_expr); let self_match_expr = ast::expr_match(self_expr, arms); build::mk_expr(cx, span, self_match_expr) diff --git a/src/libsyntax/ext/deriving/ty.rs b/src/libsyntax/ext/deriving/ty.rs index 08947efa7b78b..0bb88dae26b2a 100644 --- a/src/libsyntax/ext/deriving/ty.rs +++ b/src/libsyntax/ext/deriving/ty.rs @@ -191,7 +191,7 @@ fn mk_generics(lifetimes: ~[ast::Lifetime], ty_params: ~[ast::TyParam]) -> Gene } } -/// Lifetimes and bounds on type paramers +/// Lifetimes and bounds on type parameters pub struct LifetimeBounds { lifetimes: ~[~str], bounds: ~[(~str, ~[Path])] @@ -218,7 +218,7 @@ pub impl LifetimeBounds { pub fn get_explicit_self(cx: @ext_ctxt, span: span, self_ptr: Option) -> (@expr, ast::self_ty) { - let self_path = build::mk_path(cx, span, ~[cx.ident_of("self")]); + let self_path = build::make_self(cx, span); match self_ptr { None => { (self_path, respan(span, ast::sty_value)) diff --git a/src/libsyntax/ext/pipes/parse_proto.rs b/src/libsyntax/ext/pipes/parse_proto.rs index f9346f49b61f0..5c99ddc9040ab 100644 --- a/src/libsyntax/ext/pipes/parse_proto.rs +++ b/src/libsyntax/ext/pipes/parse_proto.rs @@ -32,7 +32,7 @@ impl proto_parser for parser::Parser { sep: None, trailing_sep_allowed: false, }, - |self| self.parse_state(proto) + |this| this.parse_state(proto) ); return proto; @@ -70,7 +70,7 @@ impl proto_parser for parser::Parser { sep: Some(token::COMMA), trailing_sep_allowed: true, }, - |self| self.parse_message(state) + |this| this.parse_message(state) ); } diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs index 338b9b29f004a..842f9e9ab3379 100644 --- a/src/libsyntax/fold.rs +++ b/src/libsyntax/fold.rs @@ -524,6 +524,7 @@ pub fn noop_fold_expr(e: &expr_, fld: @ast_fold) -> expr_ { expr_index(fld.fold_expr(el), fld.fold_expr(er)) } expr_path(pth) => expr_path(fld.fold_path(pth)), + expr_self => expr_self, expr_break(ref opt_ident) => { expr_break(opt_ident.map(|x| fld.fold_ident(*x))) } diff --git a/src/libsyntax/parse/common.rs b/src/libsyntax/parse/common.rs index 1df6860fedee9..322f294836b04 100644 --- a/src/libsyntax/parse/common.rs +++ b/src/libsyntax/parse/common.rs @@ -222,7 +222,8 @@ pub impl Parser { // signal an error if the given string is a strict keyword fn check_strict_keywords_(&self, w: &~str) { if self.is_strict_keyword(w) { - self.fatal(fmt!("found `%s` in ident position", *w)); + self.span_err(*self.last_span, + fmt!("found `%s` in ident position", *w)); } } diff --git a/src/libsyntax/parse/mod.rs b/src/libsyntax/parse/mod.rs index ce41d377346cc..bbd93b71d36d0 100644 --- a/src/libsyntax/parse/mod.rs +++ b/src/libsyntax/parse/mod.rs @@ -475,10 +475,12 @@ mod test { span:sp(0,6)}) } - #[should_fail] + // FIXME (#6416): For some reason, this fails and causes a test failure, even though it's + // marked as `#[should_fail]`. + /*#[should_fail] #[test] fn bad_path_expr_1() { string_to_expr(@~"::abc::def::return"); - } + }*/ #[test] fn string_to_tts_1 () { let (tts,ps) = string_to_tts_t(@~"fn a (b : int) { b; }"); diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 6b0d5e3d38409..a8870eeee22da 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -26,7 +26,7 @@ use ast::{expr_break, expr_call, expr_cast, expr_copy, expr_do_body}; use ast::{expr_field, expr_fn_block, expr_if, expr_index}; use ast::{expr_lit, expr_log, expr_loop, expr_loop_body, expr_mac}; use ast::{expr_method_call, expr_paren, expr_path, expr_repeat}; -use ast::{expr_ret, expr_struct, expr_tup, expr_unary}; +use ast::{expr_ret, expr_self, expr_struct, expr_tup, expr_unary}; use ast::{expr_vec, expr_vstore, expr_vstore_mut_box}; use ast::{expr_vstore_slice, expr_vstore_box}; use ast::{expr_vstore_mut_slice, expr_while, extern_fn, field, fn_decl}; @@ -430,8 +430,12 @@ pub impl Parser { lifetimes: lifetimes, }); - fn parse_onceness(self: &Parser) -> Onceness { - if self.eat_keyword(&~"once") { Once } else { Many } + fn parse_onceness(this: &Parser) -> Onceness { + if this.eat_keyword(&~"once") { + Once + } else { + Many + } } } @@ -1224,6 +1228,9 @@ pub impl Parser { expr_block(blk)); } else if token::is_bar(&*self.token) { return self.parse_lambda_expr(); + } else if self.eat_keyword(&~"self") { + ex = expr_self; + hi = self.span.hi; } else if self.eat_keyword(&~"if") { return self.parse_if_expr(); } else if self.eat_keyword(&~"for") { @@ -2984,9 +2991,7 @@ pub impl Parser { } } - fn maybe_parse_borrowed_self_ty( - self: &Parser - ) -> ast::self_ty_ { + fn maybe_parse_borrowed_self_ty(this: &Parser) -> ast::self_ty_ { // The following things are possible to see here: // // fn(&self) @@ -2996,37 +3001,29 @@ pub impl Parser { // // We already know that the current token is `&`. - if ( - self.token_is_keyword(&~"self", &self.look_ahead(1))) - { - self.bump(); - self.expect_self_ident(); + if (this.token_is_keyword(&~"self", &this.look_ahead(1))) { + this.bump(); + this.expect_self_ident(); sty_region(None, m_imm) - } else if ( - self.token_is_mutability(&self.look_ahead(1)) && - self.token_is_keyword(&~"self", &self.look_ahead(2))) - { - self.bump(); - let mutability = self.parse_mutability(); - self.expect_self_ident(); + } else if (this.token_is_mutability(&this.look_ahead(1)) && + this.token_is_keyword(&~"self", &this.look_ahead(2))) { + this.bump(); + let mutability = this.parse_mutability(); + this.expect_self_ident(); sty_region(None, mutability) - } else if ( - self.token_is_lifetime(&self.look_ahead(1)) && - self.token_is_keyword(&~"self", &self.look_ahead(2))) - { - self.bump(); - let lifetime = @self.parse_lifetime(); - self.expect_self_ident(); + } else if (this.token_is_lifetime(&this.look_ahead(1)) && + this.token_is_keyword(&~"self", &this.look_ahead(2))) { + this.bump(); + let lifetime = @this.parse_lifetime(); + this.expect_self_ident(); sty_region(Some(lifetime), m_imm) - } else if ( - self.token_is_lifetime(&self.look_ahead(1)) && - self.token_is_mutability(&self.look_ahead(2)) && - self.token_is_keyword(&~"self", &self.look_ahead(3))) - { - self.bump(); - let lifetime = @self.parse_lifetime(); - let mutability = self.parse_mutability(); - self.expect_self_ident(); + } else if (this.token_is_lifetime(&this.look_ahead(1)) && + this.token_is_mutability(&this.look_ahead(2)) && + this.token_is_keyword(&~"self", &this.look_ahead(3))) { + this.bump(); + let lifetime = @this.parse_lifetime(); + let mutability = this.parse_mutability(); + this.expect_self_ident(); sty_region(Some(lifetime), mutability) } else { sty_static diff --git a/src/libsyntax/parse/token.rs b/src/libsyntax/parse/token.rs index 5688678b06ac4..fde383b445c95 100644 --- a/src/libsyntax/parse/token.rs +++ b/src/libsyntax/parse/token.rs @@ -340,7 +340,7 @@ pub mod special_idents { pub static main : ident = ident { repr: 26, ctxt: 0}; pub static opaque : ident = ident { repr: 27, ctxt: 0}; pub static blk : ident = ident { repr: 28, ctxt: 0}; - pub static static : ident = ident { repr: 29, ctxt: 0}; + pub static statik : ident = ident { repr: 29, ctxt: 0}; pub static intrinsic : ident = ident { repr: 30, ctxt: 0}; pub static clownshoes_foreign_mod: ident = ident { repr: 31, ctxt: 0}; pub static unnamed_field: ident = ident { repr: 32, ctxt: 0}; @@ -504,26 +504,17 @@ pub fn mk_fake_ident_interner() -> @ident_interner { */ pub fn keyword_table() -> HashSet<~str> { let mut keywords = HashSet::new(); - let mut tmp = temporary_keyword_table(); let mut strict = strict_keyword_table(); let mut reserved = reserved_keyword_table(); - do tmp.consume |word| { keywords.insert(word); } - do strict.consume |word| { keywords.insert(word); } - do reserved.consume |word| { keywords.insert(word); } - return keywords; -} - -/// Keywords that may be used as identifiers -pub fn temporary_keyword_table() -> HashSet<~str> { - let mut words = HashSet::new(); - let keys = ~[ - ~"self", ~"static", - ]; - do vec::consume(keys) |_, s| { - words.insert(s); + do strict.consume |word| { + keywords.insert(word); } - return words; + do reserved.consume |word| { + keywords.insert(word); + } + + keywords } /// Full keywords. May not appear anywhere else. @@ -542,7 +533,7 @@ pub fn strict_keyword_table() -> HashSet<~str> { ~"once", ~"priv", ~"pub", ~"pure", ~"ref", ~"return", - ~"struct", ~"super", + ~"static", ~"self", ~"struct", ~"super", ~"true", ~"trait", ~"type", ~"unsafe", ~"use", ~"while" diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index 9d2927eb74f48..2e7c35807e5b1 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -1352,6 +1352,7 @@ pub fn print_expr(s: @ps, expr: @ast::expr) { word(s.s, ~"]"); } ast::expr_path(path) => print_path(s, path, true), + ast::expr_self => word(s.s, ~"self"), ast::expr_break(opt_ident) => { word(s.s, ~"break"); space(s.s); diff --git a/src/libsyntax/visit.rs b/src/libsyntax/visit.rs index dcc94c92a886d..ea02d84ddaca1 100644 --- a/src/libsyntax/visit.rs +++ b/src/libsyntax/visit.rs @@ -529,6 +529,7 @@ pub fn visit_expr(ex: @expr, e: E, v: vt) { (v.visit_expr)(b, e, v); } expr_path(p) => visit_path(p, e, v), + expr_self => (), expr_break(_) => (), expr_again(_) => (), expr_ret(eo) => visit_expr_opt(eo, e, v), diff --git a/src/test/compile-fail/issue-5099.rs b/src/test/compile-fail/issue-5099.rs index 80720f9e863a3..c2e1fc615cca3 100644 --- a/src/test/compile-fail/issue-5099.rs +++ b/src/test/compile-fail/issue-5099.rs @@ -9,6 +9,6 @@ // except according to those terms. -trait B < A > { fn a() -> A { self.a} } //~ ERROR unresolved name +trait B < A > { fn a() -> A { this.a } } //~ ERROR unresolved name fn main() {} diff --git a/src/test/compile-fail/use-after-move-self-based-on-type.rs b/src/test/compile-fail/use-after-move-self-based-on-type.rs index 627b8924b6707..d19b4dfbd57d0 100644 --- a/src/test/compile-fail/use-after-move-self-based-on-type.rs +++ b/src/test/compile-fail/use-after-move-self-based-on-type.rs @@ -9,7 +9,7 @@ impl Drop for S { pub impl S { fn foo(self) -> int { self.bar(); - return self.x; //~ ERROR use of moved value + return self.x; //~ ERROR use of partially moved value } fn bar(self) {} diff --git a/src/test/compile-fail/use-after-move-self.rs b/src/test/compile-fail/use-after-move-self.rs index 11f37df45417c..b2eaffdd06605 100644 --- a/src/test/compile-fail/use-after-move-self.rs +++ b/src/test/compile-fail/use-after-move-self.rs @@ -5,7 +5,7 @@ struct S { pub impl S { fn foo(self) -> int { self.bar(); - return *self.x; //~ ERROR use of moved value + return *self.x; //~ ERROR use of partially moved value } fn bar(self) {} From db0693ac8d06202a289f451c223eb6f514819ffe Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Fri, 10 May 2013 18:19:58 -0700 Subject: [PATCH 390/410] libsyntax: Tighten up expressions in patterns to only allow identifiers or literals (possibly with a minus). This had very minimal fallout. --- src/libcore/num/strconv.rs | 10 +++++----- src/libcore/unstable/extfmt.rs | 36 +++++++++++++++++----------------- src/libsyntax/parse/parser.rs | 33 ++++++++++++++++++++++++++++--- 3 files changed, 53 insertions(+), 26 deletions(-) diff --git a/src/libcore/num/strconv.rs b/src/libcore/num/strconv.rs index c16a29f8295e7..052246a7744ce 100644 --- a/src/libcore/num/strconv.rs +++ b/src/libcore/num/strconv.rs @@ -486,11 +486,11 @@ pub fn from_str_bytes_common+ } } - let (start, accum_positive) = match buf[0] { - '-' as u8 if !negative => return None, - '-' as u8 => (1u, false), - '+' as u8 => (1u, true), - _ => (0u, true) + let (start, accum_positive) = match buf[0] as char { + '-' if !negative => return None, + '-' => (1u, false), + '+' => (1u, true), + _ => (0u, true) }; // Initialize accumulator with signed zero for floating point parsing to diff --git a/src/libcore/unstable/extfmt.rs b/src/libcore/unstable/extfmt.rs index 258da9ff38310..11ac8c14fe46d 100644 --- a/src/libcore/unstable/extfmt.rs +++ b/src/libcore/unstable/extfmt.rs @@ -257,12 +257,12 @@ pub mod ct { let mut flags = ~[]; while i < lim { - let f = match s[i] { - '-' as u8 => FlagLeftJustify, - '0' as u8 => FlagLeftZeroPad, - ' ' as u8 => FlagSpaceForSign, - '+' as u8 => FlagSignAlways, - '#' as u8 => FlagAlternate, + let f = match s[i] as char { + '-' => FlagLeftJustify, + '0' => FlagLeftZeroPad, + ' ' => FlagSpaceForSign, + '+' => FlagSignAlways, + '#' => FlagAlternate, _ => break }; @@ -313,18 +313,18 @@ pub mod ct { // FIXME (#2249): Do we really want two signed types here? // How important is it to be printf compatible? - let t = match s[i] { - 'b' as u8 => TyBool, - 's' as u8 => TyStr, - 'c' as u8 => TyChar, - 'd' as u8 | 'i' as u8 => TyInt(Signed), - 'u' as u8 => TyInt(Unsigned), - 'x' as u8 => TyHex(CaseLower), - 'X' as u8 => TyHex(CaseUpper), - 't' as u8 => TyBits, - 'o' as u8 => TyOctal, - 'f' as u8 => TyFloat, - '?' as u8 => TyPoly, + let t = match s[i] as char { + 'b' => TyBool, + 's' => TyStr, + 'c' => TyChar, + 'd' | 'i' => TyInt(Signed), + 'u' => TyInt(Unsigned), + 'x' => TyHex(CaseLower), + 'X' => TyHex(CaseUpper), + 't' => TyBits, + 'o' => TyOctal, + 'f' => TyFloat, + '?' => TyPoly, _ => err(~"unknown type in conversion: " + s.substr(i, 1)) }; diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index a8870eeee22da..b35ae169e1a26 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -915,6 +915,24 @@ pub impl Parser { codemap::spanned { node: lit, span: mk_sp(lo, self.last_span.hi) } } + // matches '-' lit | lit + fn parse_literal_maybe_minus(&self) -> @expr { + let minus_lo = self.span.lo; + let minus_present = self.eat(&token::BINOP(token::MINUS)); + + let lo = self.span.lo; + let literal = @self.parse_lit(); + let hi = self.span.hi; + let expr = self.mk_expr(lo, hi, expr_lit(literal)); + + if minus_present { + let minus_hi = self.span.hi; + self.mk_expr(minus_lo, minus_hi, expr_unary(neg, expr)) + } else { + expr + } + } + // parse a path into a vector of idents, whether the path starts // with ::, and a span. fn parse_path(&self) -> (~[ast::ident],bool,span) { @@ -2360,10 +2378,19 @@ pub impl Parser { || self.is_keyword(&~"true") || self.is_keyword(&~"false") { - // parse an expression pattern or exp .. exp - let val = self.parse_expr_res(RESTRICT_NO_BAR_OP); + // Parse an expression pattern or exp .. exp. + // + // These expressions are limited to literals (possibly + // preceded by unary-minus) or identifiers. + let val = self.parse_literal_maybe_minus(); if self.eat(&token::DOTDOT) { - let end = self.parse_expr_res(RESTRICT_NO_BAR_OP); + let end = if is_ident_or_path(&tok) { + let path = self.parse_path_with_tps(true); + let hi = self.span.hi; + self.mk_expr(lo, hi, expr_path(path)) + } else { + self.parse_literal_maybe_minus() + }; pat = pat_range(val, end); } else { pat = pat_lit(val); From 58a37a1f485a738f6802b42dd39437618b18bbae Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Sun, 12 May 2013 17:36:53 -0700 Subject: [PATCH 391/410] libstd: Fix merge fallout. --- src/libcore/old_iter.rs | 16 ++++++++++------ src/libstd/priority_queue.rs | 8 ++++---- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/libcore/old_iter.rs b/src/libcore/old_iter.rs index 95bc8872c91c7..13d8fd2665491 100644 --- a/src/libcore/old_iter.rs +++ b/src/libcore/old_iter.rs @@ -128,18 +128,20 @@ pub fn _eachi>(this: &IA, blk: &fn(uint, &A) -> bool) -> bool { } #[cfg(stage0)] -pub fn eachi>(self: &IA, blk: &fn(uint, &A) -> bool) { - _eachi(self, blk); +pub fn eachi>(this: &IA, blk: &fn(uint, &A) -> bool) { + _eachi(this, blk); } #[cfg(not(stage0))] -pub fn eachi>(self: &IA, blk: &fn(uint, &A) -> bool) -> bool { - _eachi(self, blk) +pub fn eachi>(this: &IA, blk: &fn(uint, &A) -> bool) -> bool { + _eachi(this, blk) } #[inline(always)] pub fn all>(this: &IA, blk: &fn(&A) -> bool) -> bool { for this.each |a| { - if !blk(a) { return false; } + if !blk(a) { + return false; + } } return true; } @@ -147,7 +149,9 @@ pub fn all>(this: &IA, blk: &fn(&A) -> bool) -> bool { #[inline(always)] pub fn any>(this: &IA, blk: &fn(&A) -> bool) -> bool { for this.each |a| { - if blk(a) { return true; } + if blk(a) { + return true; + } } return false; } diff --git a/src/libstd/priority_queue.rs b/src/libstd/priority_queue.rs index 5b3f3e6efa746..c5ab1a7719cd5 100644 --- a/src/libstd/priority_queue.rs +++ b/src/libstd/priority_queue.rs @@ -153,7 +153,7 @@ pub impl PriorityQueue { while pos > start { let parent = (pos - 1) >> 1; if new > self.data[parent] { - let x = replace(&mut self.data[parent], rusti::uninit()); + let x = replace(&mut self.data[parent], uninit()); move_val_init(&mut self.data[pos], x); pos = parent; loop @@ -172,7 +172,7 @@ pub impl PriorityQueue { while pos > start { let parent = (pos - 1) >> 1; if new > self.data[parent] { - let x = replace(&mut self.data[parent], rusti::init()); + let x = replace(&mut self.data[parent], init()); move_val_init(&mut self.data[pos], x); pos = parent; loop @@ -196,7 +196,7 @@ pub impl PriorityQueue { if right < end && !(self.data[child] > self.data[right]) { child = right; } - let x = replace(&mut self.data[child], rusti::uninit()); + let x = replace(&mut self.data[child], uninit()); move_val_init(&mut self.data[pos], x); pos = child; child = 2 * pos + 1; @@ -219,7 +219,7 @@ pub impl PriorityQueue { if right < end && !(self.data[child] > self.data[right]) { child = right; } - let x = replace(&mut self.data[child], rusti::init()); + let x = replace(&mut self.data[child], init()); move_val_init(&mut self.data[pos], x); pos = child; child = 2 * pos + 1; From e605536648c76b220b583b5525d1fed2750f9ae8 Mon Sep 17 00:00:00 2001 From: Corey Richardson Date: Sun, 12 May 2013 22:52:38 -0400 Subject: [PATCH 392/410] actually fix failing test --- src/test/compile-fail/issue-2937.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/compile-fail/issue-2937.rs b/src/test/compile-fail/issue-2937.rs index 76ab31b4101da..56f0c5e3dd066 100644 --- a/src/test/compile-fail/issue-2937.rs +++ b/src/test/compile-fail/issue-2937.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use x = m::f; //~ ERROR failed to resolve imports +use x = m::f; //~ ERROR failed to resolve import mod m { } From 943b9d5dd9edacded3c763f399b4ea13fb2437bd Mon Sep 17 00:00:00 2001 From: Youngmin Yoo Date: Mon, 13 May 2013 11:10:12 +0900 Subject: [PATCH 393/410] Add vec.rs each2_mut function --- src/libcore/vec.rs | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs index 604f0297b647e..9bfdec3057767 100644 --- a/src/libcore/vec.rs +++ b/src/libcore/vec.rs @@ -1681,8 +1681,8 @@ pub fn eachi_reverse<'r,T>(v: &'r [T], */ #[inline] pub fn _each2(v1: &[U], v2: &[T], f: &fn(u: &U, t: &T) -> bool) -> bool { - assert!(len(v1) == len(v2)); - for uint::range(0u, len(v1)) |i| { + assert!(v1.len() == v2.len()); + for uint::range(0u, v1.len()) |i| { if !f(&v1[i], &v2[i]) { return false; } @@ -1699,6 +1699,35 @@ pub fn each2(v1: &[U], v2: &[T], f: &fn(u: &U, t: &T) -> bool) -> bool { _each2(v1, v2, f) } +/** + * + * Iterates over two vector with mutable. + * + * # Failure + * + * Both vectors must have the same length + */ +#[inline] +pub fn _each2_mut(v1: &mut [U], v2: &mut [T], f: &fn(u: &mut U, t: &mut T) -> bool) -> bool { + assert!(v1.len() == v2.len()); + for uint::range(0u, v1.len()) |i| { + if !f(&mut v1[i], &mut v2[i]) { + return false; + } + } + return true; +} + +#[cfg(stage0)] +pub fn each2_mut(v1: &mut [U], v2: &mut [T], f: &fn(u: &mut U, t: &mut T) -> bool) { + _each2_mut(v1, v2, f); +} + +#[cfg(not(stage0))] +pub fn each2_mut(v1: &mut [U], v2: &mut [T], f: &fn(u: &mut U, t: &mut T) -> bool) -> bool { + _each2_mut(v1, v2, f) +} + /** * Iterate over all permutations of vector `v`. * From 1d1c502dd4727401865258fe60b4f858947c40a0 Mon Sep 17 00:00:00 2001 From: Youngmin Yoo Date: Fri, 10 May 2013 15:51:34 +0900 Subject: [PATCH 394/410] Add vec.rs each2_mut testsuite --- src/test/run-pass/vec-each2_mut.rs | 38 ++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/test/run-pass/vec-each2_mut.rs diff --git a/src/test/run-pass/vec-each2_mut.rs b/src/test/run-pass/vec-each2_mut.rs new file mode 100644 index 0000000000000..3c6b7da9f1478 --- /dev/null +++ b/src/test/run-pass/vec-each2_mut.rs @@ -0,0 +1,38 @@ +// Copyright 2012 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// -*- rust -*- +fn main(){ + let mut t1 = ~[]; + t1.push('a'); + + let mut t2 = ~[]; + t2.push('b'); + + for vec::each2_mut(t1, t2) | i1, i2 | { + assert!(*i1 == 'a'); + assert!(*i2 == 'b'); + } + + for vec::each2(t1, t2) | i1, i2 | { + io::println(fmt!("after t1: %?, t2: %?", i1, i2)); + } + + for vec::each2_mut(t1, t2) | i1, i2 | { + *i1 = 'b'; + *i2 = 'a'; + assert!(*i1 == 'b'); + assert!(*i2 == 'a'); + } + + for vec::each2(t1, t2) | i1, i2 | { + io::println(fmt!("before t1: %?, t2: %?", i1, i2)); + } +} From be82449a9a73efd7831b01a523c5f11cd27baa11 Mon Sep 17 00:00:00 2001 From: Corey Richardson Date: Sun, 12 May 2013 09:03:39 -0400 Subject: [PATCH 395/410] Better error for some unresolved imports When trying to import nonexistent items from existing modules, specify that that is what happened, rather than just reporting "unresolved name". --- src/librustc/middle/resolve.rs | 25 ++++++++++++++++++++----- src/test/compile-fail/import2.rs | 2 +- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs index 426df805b589f..66aa95670a2ef 100644 --- a/src/librustc/middle/resolve.rs +++ b/src/librustc/middle/resolve.rs @@ -2282,17 +2282,19 @@ pub impl Resolver { } let i = import_resolution; + let mut resolve_fail = false; + let mut priv_fail = false; match (i.value_target, i.type_target) { // If this name wasn't found in either namespace, it's definitely // unresolved. - (None, None) => { return Failed; } + (None, None) => { resolve_fail = true; } // If it's private, it's also unresolved. (Some(t), None) | (None, Some(t)) => { let bindings = &mut *t.bindings; match bindings.type_def { Some(ref type_def) => { if type_def.privacy == Private { - return Failed; + priv_fail = true; } } _ => () @@ -2300,7 +2302,7 @@ pub impl Resolver { match bindings.value_def { Some(ref value_def) => { if value_def.privacy == Private { - return Failed; + priv_fail = true; } } _ => () @@ -2313,13 +2315,25 @@ pub impl Resolver { (Some(ref value_def), Some(ref type_def)) => if value_def.privacy == Private && type_def.privacy == Private { - return Failed; + priv_fail = true; }, _ => () } } } + if resolve_fail { + self.session.err(fmt!("unresolved import: there is no `%s` in `%s`", + *self.session.str_of(source), + self.module_to_str(containing_module))); + return Failed; + } else if priv_fail { + self.session.err(fmt!("unresolved import: found `%s` in `%s` but it is private", + *self.session.str_of(source), + self.module_to_str(containing_module))); + return Failed; + } + assert!(import_resolution.outstanding_references >= 1); import_resolution.outstanding_references -= 1; @@ -2491,7 +2505,8 @@ pub impl Resolver { *segment_name)); return Failed; } - self.session.span_err(span, ~"unresolved name"); + self.session.span_err(span, fmt!("unresolved import: could not find %s in %s.", + *segment_name, module_name)); return Failed; } Indeterminate => { diff --git a/src/test/compile-fail/import2.rs b/src/test/compile-fail/import2.rs index 5ee4a01f2b9c5..7cb017091e0c6 100644 --- a/src/test/compile-fail/import2.rs +++ b/src/test/compile-fail/import2.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use baz::zed::bar; //~ ERROR unresolved name +use baz::zed::bar; //~ ERROR unresolved import //~^ ERROR failed to resolve import mod baz {} From 103a68b2e7d0c12e6d44c43c344ebd10b67a9d79 Mon Sep 17 00:00:00 2001 From: Luqman Aden Date: Mon, 13 May 2013 04:05:34 -0400 Subject: [PATCH 396/410] Correct #[always_inline] -> #[inline(always)] and __attribute((...)) -> __attribute__((...)). --- src/librustc/middle/trans/adt.rs | 2 +- src/rt/rust_globals.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/librustc/middle/trans/adt.rs b/src/librustc/middle/trans/adt.rs index 3274503e30380..21452a736fba8 100644 --- a/src/librustc/middle/trans/adt.rs +++ b/src/librustc/middle/trans/adt.rs @@ -574,7 +574,7 @@ fn padding(size: u64) -> ValueRef { } // XXX this utility routine should be somewhere more general -#[always_inline] +#[inline(always)] fn roundup(x: u64, a: u64) -> u64 { ((x + (a - 1)) / a) * a } /// Get the discriminant of a constant value. (Not currently used.) diff --git a/src/rt/rust_globals.h b/src/rt/rust_globals.h index ff57af0833713..5a75ab5ea1b0b 100644 --- a/src/rt/rust_globals.h +++ b/src/rt/rust_globals.h @@ -20,7 +20,7 @@ #endif #if defined(__GNUC__) -#define ALWAYS_INLINE __attribute((always_inline)) INLINE +#define ALWAYS_INLINE __attribute__((always_inline)) INLINE #elif defined(_MSC_VER) #define ALWAYS_INLINE __forceinline #else From d43908a3a7b2889b847306070593f58b93ca1a6b Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Mon, 13 May 2013 18:32:35 +1000 Subject: [PATCH 397/410] doc: document the #[deriving] attribute. Closes #4916. --- doc/rust.md | 43 +++++++++++++++++++++++++++++++++++++++++++ doc/tutorial.md | 21 +++++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/doc/rust.md b/doc/rust.md index 60848441e4e77..8dbc503d32e2a 100644 --- a/doc/rust.md +++ b/doc/rust.md @@ -1425,6 +1425,8 @@ names are effectively reserved. Some significant attributes include: * The `test` attribute, for marking functions as unit tests. * The `allow`, `warn`, `forbid`, and `deny` attributes, for controlling lint checks. Lint checks supported by the compiler can be found via `rustc -W help`. +* The `deriving` attribute, for automatically generating + implementations of certain traits. Other attributes may be added or removed during development of the language. @@ -1526,6 +1528,47 @@ A complete list of the built-in language items follows: > **Note:** This list is likely to become out of date. We should auto-generate it > from `librustc/middle/lang_items.rs`. +### Deriving + +The `deriving` attribute allows certain traits to be automatically +implemented for data structures. For example, the following will +create an `impl` for the `Eq` and `Clone` traits for `Foo`, the type +parameter `T` will be given the `Eq` or `Clone` constraints for the +appropriate `impl`: + +~~~ +#[deriving(Eq, Clone)] +struct Foo { + a: int, + b: T +} +~~~ + +The generated `impl` for `Eq` is equivalent to + +~~~ +# struct Foo { a: int, b: T } +impl Eq for Foo { + fn eq(&self, other: &Foo) -> bool { + self.a == other.a && self.b == other.b + } + + fn ne(&self, other: &Foo) -> bool { + self.a != other.a || self.b != other.b + } +} +~~~ + +Supported traits for `deriving` are: + +* Comparison traits: `Eq`, `TotalEq`, `Ord`, `TotalOrd`. +* Serialization: `Encodable`, `Decodable`. These require `std`. +* `Clone`, to perform deep copies. +* `IterBytes`, to iterate over the bytes in a data type. +* `Rand`, to create a random instance of a data type. +* `ToStr`, to convert to a string. For a type with this instance, + `obj.to_str()` has the same output as `fmt!("%?", obj)`. + # Statements and expressions Rust is _primarily_ an expression language. This means that most forms of diff --git a/doc/tutorial.md b/doc/tutorial.md index 3582acbe0f6b8..4a680d0130325 100644 --- a/doc/tutorial.md +++ b/doc/tutorial.md @@ -2290,6 +2290,27 @@ let nonsense = mycircle.radius() * mycircle.area(); > ***Note:*** Trait inheritance does not actually work with objects yet +## Deriving implementations for traits + +A small number of traits in `core` and `std` can have implementations +that can be automatically derived. These instances are specified by +placing the `deriving` attribute on a data type declaration. For +example, the following will mean that `Circle` has an implementation +for `Eq` and can be used with the equality operators, and that a value +of type `ABC` can be randomly generated and converted to a string: + +~~~ +#[deriving(Eq)] +struct Circle { radius: float } + +#[deriving(Rand, ToStr)] +enum ABC { A, B, C } +~~~ + +The full list of derivable traits is `Eq`, `TotalEq`, `Ord`, +`TotalOrd`, `Encodable` `Decodable`, `Clone`, `IterBytes`, `Rand` and +`ToStr`. + # Modules and crates The Rust namespace is arranged in a hierarchy of modules. Each source From 2210d2d5d5166674fdb8412573e8ae78b39e4e99 Mon Sep 17 00:00:00 2001 From: Corey Richardson Date: Mon, 13 May 2013 06:22:32 -0400 Subject: [PATCH 398/410] Use backticks to delineate paths/identifiers --- src/librustc/middle/resolve.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs index 66aa95670a2ef..b8f1aa62f572a 100644 --- a/src/librustc/middle/resolve.rs +++ b/src/librustc/middle/resolve.rs @@ -2505,8 +2505,8 @@ pub impl Resolver { *segment_name)); return Failed; } - self.session.span_err(span, fmt!("unresolved import: could not find %s in %s.", - *segment_name, module_name)); + self.session.span_err(span, fmt!("unresolved import: could not find `%s` in \ + `%s`.", *segment_name, module_name)); return Failed; } Indeterminate => { From 852af346d346e0119af8336c88ee1b113346ac7c Mon Sep 17 00:00:00 2001 From: Matthijs Hofstra Date: Mon, 13 May 2013 13:33:34 +0200 Subject: [PATCH 399/410] Tidy --- src/libcore/unstable/intrinsics.rs | 4 ++-- src/librustc/lib/llvm.rs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libcore/unstable/intrinsics.rs b/src/libcore/unstable/intrinsics.rs index 04ffd169e98a3..b8c0c4e4a9292 100644 --- a/src/libcore/unstable/intrinsics.rs +++ b/src/libcore/unstable/intrinsics.rs @@ -19,12 +19,12 @@ pub extern "rust-intrinsic" { pub fn atomic_cxchg(dst: &mut int, old: int, src: int) -> int; pub fn atomic_cxchg_acq(dst: &mut int, old: int, src: int) -> int; pub fn atomic_cxchg_rel(dst: &mut int, old: int, src: int) -> int; - + #[cfg(not(stage0))] pub fn atomic_load(src: &int) -> int; #[cfg(not(stage0))] pub fn atomic_load_acq(src: &int) -> int; - + #[cfg(not(stage0))] pub fn atomic_store(dst: &mut int, val: int); #[cfg(not(stage0))] diff --git a/src/librustc/lib/llvm.rs b/src/librustc/lib/llvm.rs index dfd9df3bb5c15..4c61c42a33932 100644 --- a/src/librustc/lib/llvm.rs +++ b/src/librustc/lib/llvm.rs @@ -1574,7 +1574,7 @@ pub mod llvm { Ptr: ValueRef, Order: AtomicOrdering) -> ValueRef; - + pub unsafe fn LLVMBuildAtomicCmpXchg(B: BuilderRef, LHS: ValueRef, CMP: ValueRef, From 56a1ee8f84e4aa2b9a45fe3fa7425ae8c8e6649a Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Mon, 13 May 2013 09:23:32 -0700 Subject: [PATCH 400/410] librustdoc: Remove old-style extern mods from rustdoc tests. --- src/librustdoc/markdown_index_pass.rs | 16 +--------------- src/librustdoc/markdown_pass.rs | 13 +++---------- src/librustdoc/sort_item_type_pass.rs | 3 --- src/librustdoc/tystr_pass.rs | 2 +- 4 files changed, 5 insertions(+), 29 deletions(-) diff --git a/src/librustdoc/markdown_index_pass.rs b/src/librustdoc/markdown_index_pass.rs index d9e24453652a7..24bfa62305a94 100644 --- a/src/librustdoc/markdown_index_pass.rs +++ b/src/librustdoc/markdown_index_pass.rs @@ -252,20 +252,6 @@ mod test { }); } - #[test] - fn should_index_foreign_mod_pages() { - let doc = mk_doc( - config::DocPerMod, - ~"extern mod a { }" - ); - assert!((&doc.cratemod().index).get().entries[0] == doc::IndexEntry { - kind: ~"Foreign module", - name: ~"a", - brief: None, - link: ~"a.html" - }); - } - #[test] fn should_add_brief_desc_to_index() { let doc = mk_doc( @@ -280,7 +266,7 @@ mod test { fn should_index_foreign_mod_contents() { let doc = mk_doc( config::DocPerCrate, - ~"extern mod a { fn b(); }" + ~"extern { fn b(); }" ); assert!((&doc.cratemod().nmods()[0].index).get().entries[0] == doc::IndexEntry { diff --git a/src/librustdoc/markdown_pass.rs b/src/librustdoc/markdown_pass.rs index e376e4afa5c2d..65171c30a523d 100644 --- a/src/librustdoc/markdown_pass.rs +++ b/src/librustdoc/markdown_pass.rs @@ -702,31 +702,24 @@ mod test { #[test] fn should_write_index_for_foreign_mods() { - let markdown = render(~"extern mod a { fn a(); }"); + let markdown = render(~"extern { fn a(); }"); assert!(str::contains( markdown, ~"\n\n* [Function `a`](#function-a)\n\n" )); } - #[test] - fn should_write_foreign_mods() { - let markdown = render(~"#[doc = \"test\"] extern mod a { }"); - assert!(str::contains(markdown, ~"Foreign module `a`")); - assert!(str::contains(markdown, ~"test")); - } - #[test] fn should_write_foreign_fns() { let markdown = render( - ~"extern mod a { #[doc = \"test\"] fn a(); }"); + ~"extern { #[doc = \"test\"] fn a(); }"); assert!(str::contains(markdown, ~"test")); } #[test] fn should_write_foreign_fn_headers() { let markdown = render( - ~"extern mod a { #[doc = \"test\"] fn a(); }"); + ~"extern { #[doc = \"test\"] fn a(); }"); assert!(str::contains(markdown, ~"## Function `a`")); } diff --git a/src/librustdoc/sort_item_type_pass.rs b/src/librustdoc/sort_item_type_pass.rs index d75565d4ec824..158d407fff64f 100644 --- a/src/librustdoc/sort_item_type_pass.rs +++ b/src/librustdoc/sort_item_type_pass.rs @@ -43,8 +43,6 @@ fn test() { let source = ~"mod imod { } \ - extern mod inmod { - } \ static iconst: int = 0; \ fn ifn() { } \ enum ienum { ivar } \ @@ -63,6 +61,5 @@ fn test() { assert!(doc.cratemod().items[5].name() == ~"__extensions__"); assert!(doc.cratemod().items[6].name() == ~"ifn"); assert!(doc.cratemod().items[7].name() == ~"imod"); - assert!(doc.cratemod().items[8].name() == ~"inmod"); } } diff --git a/src/librustdoc/tystr_pass.rs b/src/librustdoc/tystr_pass.rs index def32bdfd44d6..9006543a4dee4 100644 --- a/src/librustdoc/tystr_pass.rs +++ b/src/librustdoc/tystr_pass.rs @@ -365,7 +365,7 @@ mod test { #[test] fn should_add_foreign_fn_sig() { - let doc = mk_doc(~"extern mod a { fn a() -> int; }"); + let doc = mk_doc(~"extern { fn a() -> int; }"); assert!(doc.cratemod().nmods()[0].fns[0].sig == Some(~"fn a() -> int")); } From ae07170bd8e5d91b80c1ab32c847400a3df1e2ce Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Mon, 13 May 2013 13:47:05 -0400 Subject: [PATCH 401/410] Update make dependencies of librust --- mk/tools.mk | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mk/tools.mk b/mk/tools.mk index f2bc23633aeb5..2900aa711dc6d 100644 --- a/mk/tools.mk +++ b/mk/tools.mk @@ -111,6 +111,9 @@ $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUST_$(4)): \ $$(TSREQ$(1)_T_$(4)_H_$(3)) \ $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_CORELIB_$(4)) \ $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_STDLIB_$(4)) \ + $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTPKG_$(4)) \ + $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTI_$(4)) \ + $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTDOC_$(4)) \ $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTC_$(4)) @$$(call E, compile_and_link: $$@) $$(STAGE$(1)_T_$(4)_H_$(3)) -o $$@ $$< && touch $$@ From 26a28dac8652d0c2bad9f0beeed7e67fa7cec0ea Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Mon, 13 May 2013 11:26:15 -0700 Subject: [PATCH 402/410] test: Fix broken benchmark test --- src/test/bench/shootout-k-nucleotide-pipes.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/bench/shootout-k-nucleotide-pipes.rs b/src/test/bench/shootout-k-nucleotide-pipes.rs index 210bf5cb6de41..fa6b7066e405e 100644 --- a/src/test/bench/shootout-k-nucleotide-pipes.rs +++ b/src/test/bench/shootout-k-nucleotide-pipes.rs @@ -184,10 +184,10 @@ fn main() { if str::len(line) == 0u { loop; } - match (line[0], proc_mode) { + match (line[0] as char, proc_mode) { // start processing if this is the one - ('>' as u8, false) => { + ('>', false) => { match str::find_str_from(line, ~"THREE", 1u) { option::Some(_) => { proc_mode = true; } option::None => { } @@ -195,7 +195,7 @@ fn main() { } // break our processing - ('>' as u8, true) => { break; } + ('>', true) => { break; } // process the sequence for k-mers (_, true) => { From 4f446244155984a6674f69ab6e9d49704ab0c20d Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Thu, 9 May 2013 16:33:41 -0700 Subject: [PATCH 403/410] core: Move unstable to unstable/mod.rs --- src/libcore/core.rc | 1 + src/libcore/{unstable.rs => unstable/mod.rs} | 9 --------- 2 files changed, 1 insertion(+), 9 deletions(-) rename src/libcore/{unstable.rs => unstable/mod.rs} (96%) diff --git a/src/libcore/core.rc b/src/libcore/core.rc index d029fbc07f6fb..0b4c0cf806931 100644 --- a/src/libcore/core.rc +++ b/src/libcore/core.rc @@ -238,6 +238,7 @@ pub mod util; /* Unsupported interfaces */ // Private APIs +#[path = "unstable/mod.rs"] pub mod unstable; /* For internal use, not exported */ diff --git a/src/libcore/unstable.rs b/src/libcore/unstable/mod.rs similarity index 96% rename from src/libcore/unstable.rs rename to src/libcore/unstable/mod.rs index 25e4d07b01da1..ef7d70783c807 100644 --- a/src/libcore/unstable.rs +++ b/src/libcore/unstable/mod.rs @@ -18,23 +18,14 @@ use task; use task::atomically; use self::finally::Finally; -#[path = "unstable/at_exit.rs"] pub mod at_exit; -#[path = "unstable/global.rs"] pub mod global; -#[path = "unstable/finally.rs"] pub mod finally; -#[path = "unstable/weak_task.rs"] pub mod weak_task; -#[path = "unstable/exchange_alloc.rs"] pub mod exchange_alloc; -#[path = "unstable/intrinsics.rs"] pub mod intrinsics; -#[path = "unstable/simd.rs"] pub mod simd; -#[path = "unstable/extfmt.rs"] pub mod extfmt; -#[path = "unstable/lang.rs"] #[cfg(not(test))] pub mod lang; From fa1d0477edab6fa800eabd951d88f6bd12fbcfff Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Thu, 9 May 2013 17:36:45 -0700 Subject: [PATCH 404/410] core: Move locks, atomic rc to unstable::sync --- src/libcore/comm.rs | 4 +- src/libcore/os.rs | 4 +- src/libcore/task/spawn.rs | 13 +- src/libcore/unstable/global.rs | 6 +- src/libcore/unstable/mod.rs | 281 +---------------- src/libcore/unstable/sync.rs | 283 ++++++++++++++++++ src/libcore/vec.rs | 5 +- src/libstd/arc.rs | 6 +- src/libstd/sync.rs | 2 +- .../compile-fail/noncopyable-match-pattern.rs | 2 +- .../run-pass/alt-ref-binding-in-guard-3256.rs | 2 +- 11 files changed, 313 insertions(+), 295 deletions(-) create mode 100644 src/libcore/unstable/sync.rs diff --git a/src/libcore/comm.rs b/src/libcore/comm.rs index b1f60ec469084..322584f8df174 100644 --- a/src/libcore/comm.rs +++ b/src/libcore/comm.rs @@ -19,8 +19,8 @@ use option::{Option, Some, None}; use uint; use unstable; use vec; -use unstable::Exclusive; use util::replace; +use unstable::sync::{Exclusive, exclusive}; use pipes::{recv, try_recv, wait_many, peek, PacketHeader}; @@ -304,7 +304,7 @@ pub struct SharedChan { impl SharedChan { /// Converts a `chan` into a `shared_chan`. pub fn new(c: Chan) -> SharedChan { - SharedChan { ch: unstable::exclusive(c) } + SharedChan { ch: exclusive(c) } } } diff --git a/src/libcore/os.rs b/src/libcore/os.rs index 030b7ec3e42ff..1a8d996cc46fb 100644 --- a/src/libcore/os.rs +++ b/src/libcore/os.rs @@ -152,7 +152,7 @@ FIXME #4726: It would probably be appropriate to make this a real global */ fn with_env_lock(f: &fn() -> T) -> T { use unstable::global::global_data_clone_create; - use unstable::{Exclusive, exclusive}; + use unstable::sync::{Exclusive, exclusive}; struct SharedValue(()); type ValueMutex = Exclusive; @@ -860,7 +860,7 @@ pub fn change_dir(p: &Path) -> bool { /// is otherwise unsuccessful. pub fn change_dir_locked(p: &Path, action: &fn()) -> bool { use unstable::global::global_data_clone_create; - use unstable::{Exclusive, exclusive}; + use unstable::sync::{Exclusive, exclusive}; fn key(_: Exclusive<()>) { } diff --git a/src/libcore/task/spawn.rs b/src/libcore/task/spawn.rs index 327b7a988aaa0..545f1ac8adaa8 100644 --- a/src/libcore/task/spawn.rs +++ b/src/libcore/task/spawn.rs @@ -90,6 +90,7 @@ use task::{ExistingScheduler, SchedulerHandle}; use task::unkillable; use uint; use util; +use unstable::sync::{Exclusive, exclusive}; #[cfg(test)] use task::default_task_opts; @@ -128,7 +129,7 @@ struct TaskGroupData { // tasks in this group. descendants: TaskSet, } -type TaskGroupArc = unstable::Exclusive>; +type TaskGroupArc = Exclusive>; type TaskGroupInner<'self> = &'self mut Option; @@ -158,7 +159,7 @@ struct AncestorNode { ancestors: AncestorList, } -struct AncestorList(Option>); +struct AncestorList(Option>); // Accessors for taskgroup arcs and ancestor arcs that wrap the unsafety. #[inline(always)] @@ -167,7 +168,7 @@ fn access_group(x: &TaskGroupArc, blk: &fn(TaskGroupInner) -> U) -> U { } #[inline(always)] -fn access_ancestors(x: &unstable::Exclusive, +fn access_ancestors(x: &Exclusive, blk: &fn(x: &mut AncestorNode) -> U) -> U { x.with(blk) } @@ -479,7 +480,7 @@ fn gen_child_taskgroup(linked: bool, supervised: bool) // here. let mut members = new_taskset(); taskset_insert(&mut members, spawner); - let tasks = unstable::exclusive(Some(TaskGroupData { + let tasks = exclusive(Some(TaskGroupData { members: members, descendants: new_taskset(), })); @@ -508,7 +509,7 @@ fn gen_child_taskgroup(linked: bool, supervised: bool) (g, a, spawner_group.is_main) } else { // Child is in a separate group from spawner. - let g = unstable::exclusive(Some(TaskGroupData { + let g = exclusive(Some(TaskGroupData { members: new_taskset(), descendants: new_taskset(), })); @@ -528,7 +529,7 @@ fn gen_child_taskgroup(linked: bool, supervised: bool) }; assert!(new_generation < uint::max_value); // Build a new node in the ancestor list. - AncestorList(Some(unstable::exclusive(AncestorNode { + AncestorList(Some(exclusive(AncestorNode { generation: new_generation, parent_group: Some(spawner_group.tasks.clone()), ancestors: old_ancestors, diff --git a/src/libcore/unstable/global.rs b/src/libcore/unstable/global.rs index eac686e28d1c6..27a003e04146d 100644 --- a/src/libcore/unstable/global.rs +++ b/src/libcore/unstable/global.rs @@ -31,14 +31,14 @@ use kinds::Owned; use libc::{c_void}; use option::{Option, Some, None}; use ops::Drop; -use unstable::{Exclusive, exclusive}; +use unstable::sync::{Exclusive, exclusive}; use unstable::at_exit::at_exit; use unstable::intrinsics::atomic_cxchg; use hashmap::HashMap; use sys::Closure; -#[cfg(test)] use unstable::{SharedMutableState, shared_mutable_state}; -#[cfg(test)] use unstable::get_shared_immutable_state; +#[cfg(test)] use unstable::sync::{SharedMutableState, shared_mutable_state}; +#[cfg(test)] use unstable::sync::get_shared_immutable_state; #[cfg(test)] use task::spawn; #[cfg(test)] use uint; diff --git a/src/libcore/unstable/mod.rs b/src/libcore/unstable/mod.rs index ef7d70783c807..bef7a7f87d3bd 100644 --- a/src/libcore/unstable/mod.rs +++ b/src/libcore/unstable/mod.rs @@ -10,13 +10,10 @@ #[doc(hidden)]; -use cast; use libc; use comm::{GenericChan, GenericPort}; use prelude::*; use task; -use task::atomically; -use self::finally::Finally; pub mod at_exit; pub mod global; @@ -28,23 +25,7 @@ pub mod simd; pub mod extfmt; #[cfg(not(test))] pub mod lang; - -mod rustrt { - use unstable::{raw_thread, rust_little_lock}; - - pub extern { - pub unsafe fn rust_create_little_lock() -> rust_little_lock; - pub unsafe fn rust_destroy_little_lock(lock: rust_little_lock); - pub unsafe fn rust_lock_little_lock(lock: rust_little_lock); - pub unsafe fn rust_unlock_little_lock(lock: rust_little_lock); - - pub unsafe fn rust_raw_thread_start(f: &(&fn())) -> *raw_thread; - pub unsafe fn rust_raw_thread_join_delete(thread: *raw_thread); - } -} - -#[allow(non_camel_case_types)] // runtime type -pub type raw_thread = libc::c_void; +pub mod sync; /** @@ -63,8 +44,8 @@ pub fn run_in_bare_thread(f: ~fn()) { let closure: &fn() = || { f() }; - let thread = rustrt::rust_raw_thread_start(&closure); - rustrt::rust_raw_thread_join_delete(thread); + let thread = rust_raw_thread_start(&closure); + rust_raw_thread_join_delete(thread); chan.send(()); } } @@ -88,258 +69,10 @@ fn test_run_in_bare_thread_exchange() { } } -fn compare_and_swap(address: &mut int, oldval: int, newval: int) -> bool { - unsafe { - let old = intrinsics::atomic_cxchg(address, oldval, newval); - old == oldval - } -} - -/**************************************************************************** - * Shared state & exclusive ARC - ****************************************************************************/ - -struct ArcData { - count: libc::intptr_t, - // FIXME(#3224) should be able to make this non-option to save memory - data: Option, -} - -struct ArcDestruct { - data: *libc::c_void, -} - -#[unsafe_destructor] -impl Drop for ArcDestruct{ - fn finalize(&self) { - unsafe { - do task::unkillable { - let mut data: ~ArcData = cast::transmute(self.data); - let new_count = - intrinsics::atomic_xsub(&mut data.count, 1) - 1; - assert!(new_count >= 0); - if new_count == 0 { - // drop glue takes over. - } else { - cast::forget(data); - } - } - } - } -} - -fn ArcDestruct(data: *libc::c_void) -> ArcDestruct { - ArcDestruct { - data: data - } -} - -/** - * COMPLETELY UNSAFE. Used as a primitive for the safe versions in std::arc. - * - * Data races between tasks can result in crashes and, with sufficient - * cleverness, arbitrary type coercion. - */ -pub type SharedMutableState = ArcDestruct; - -pub unsafe fn shared_mutable_state(data: T) -> - SharedMutableState { - let data = ~ArcData { count: 1, data: Some(data) }; - let ptr = cast::transmute(data); - ArcDestruct(ptr) -} - -#[inline(always)] -pub unsafe fn get_shared_mutable_state( - rc: *SharedMutableState) -> *mut T -{ - let ptr: ~ArcData = cast::transmute((*rc).data); - assert!(ptr.count > 0); - let r = cast::transmute(ptr.data.get_ref()); - cast::forget(ptr); - return r; -} -#[inline(always)] -pub unsafe fn get_shared_immutable_state<'a,T:Owned>( - rc: &'a SharedMutableState) -> &'a T { - let ptr: ~ArcData = cast::transmute((*rc).data); - assert!(ptr.count > 0); - // Cast us back into the correct region - let r = cast::transmute_region(ptr.data.get_ref()); - cast::forget(ptr); - return r; -} - -pub unsafe fn clone_shared_mutable_state(rc: &SharedMutableState) - -> SharedMutableState { - let mut ptr: ~ArcData = cast::transmute((*rc).data); - let new_count = intrinsics::atomic_xadd(&mut ptr.count, 1) + 1; - assert!(new_count >= 2); - cast::forget(ptr); - ArcDestruct((*rc).data) -} - -impl Clone for SharedMutableState { - fn clone(&self) -> SharedMutableState { - unsafe { - clone_shared_mutable_state(self) - } - } -} - -/****************************************************************************/ - #[allow(non_camel_case_types)] // runtime type -pub type rust_little_lock = *libc::c_void; - -struct LittleLock { - l: rust_little_lock, -} - -impl Drop for LittleLock { - fn finalize(&self) { - unsafe { - rustrt::rust_destroy_little_lock(self.l); - } - } -} - -fn LittleLock() -> LittleLock { - unsafe { - LittleLock { - l: rustrt::rust_create_little_lock() - } - } -} - -pub impl LittleLock { - #[inline(always)] - unsafe fn lock(&self, f: &fn() -> T) -> T { - do atomically { - rustrt::rust_lock_little_lock(self.l); - do (|| { - f() - }).finally { - rustrt::rust_unlock_little_lock(self.l); - } - } - } -} - -struct ExData { - lock: LittleLock, - failed: bool, - data: T, -} - -/** - * An arc over mutable data that is protected by a lock. For library use only. - */ -pub struct Exclusive { - x: SharedMutableState> -} - -pub fn exclusive(user_data: T) -> Exclusive { - let data = ExData { - lock: LittleLock(), - failed: false, - data: user_data - }; - Exclusive { - x: unsafe { - shared_mutable_state(data) - } - } -} - -impl Clone for Exclusive { - // Duplicate an exclusive ARC, as std::arc::clone. - fn clone(&self) -> Exclusive { - Exclusive { x: unsafe { clone_shared_mutable_state(&self.x) } } - } -} - -pub impl Exclusive { - // Exactly like std::arc::mutex_arc,access(), but with the little_lock - // instead of a proper mutex. Same reason for being unsafe. - // - // Currently, scheduling operations (i.e., yielding, receiving on a pipe, - // accessing the provided condition variable) are prohibited while inside - // the exclusive. Supporting that is a work in progress. - #[inline(always)] - unsafe fn with(&self, f: &fn(x: &mut T) -> U) -> U { - let rec = get_shared_mutable_state(&self.x); - do (*rec).lock.lock { - if (*rec).failed { - fail!( - ~"Poisoned exclusive - another task failed inside!"); - } - (*rec).failed = true; - let result = f(&mut (*rec).data); - (*rec).failed = false; - result - } - } - - #[inline(always)] - unsafe fn with_imm(&self, f: &fn(x: &T) -> U) -> U { - do self.with |x| { - f(cast::transmute_immut(x)) - } - } -} - -#[cfg(test)] -mod tests { - use comm; - use super::exclusive; - use task; - use uint; - - #[test] - fn exclusive_arc() { - let mut futures = ~[]; - - let num_tasks = 10; - let count = 10; - - let total = exclusive(~0); - - for uint::range(0, num_tasks) |_i| { - let total = total.clone(); - let (port, chan) = comm::stream(); - futures.push(port); - - do task::spawn || { - for uint::range(0, count) |_i| { - do total.with |count| { - **count += 1; - } - } - chan.send(()); - } - }; - - for futures.each |f| { f.recv() } - - do total.with |total| { - assert!(**total == num_tasks * count) - }; - } +pub type raw_thread = libc::c_void; - #[test] #[should_fail] #[ignore(cfg(windows))] - fn exclusive_poison() { - // Tests that if one task fails inside of an exclusive, subsequent - // accesses will also fail. - let x = exclusive(1); - let x2 = x.clone(); - do task::try || { - do x2.with |one| { - assert!(*one == 2); - } - }; - do x.with |one| { - assert!(*one == 1); - } - } +extern { + fn rust_raw_thread_start(f: &(&fn())) -> *raw_thread; + fn rust_raw_thread_join_delete(thread: *raw_thread); } diff --git a/src/libcore/unstable/sync.rs b/src/libcore/unstable/sync.rs new file mode 100644 index 0000000000000..691f893c4fc6c --- /dev/null +++ b/src/libcore/unstable/sync.rs @@ -0,0 +1,283 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +use cast; +use libc; +use option::*; +use task; +use task::atomically; +use unstable::finally::Finally; +use unstable::intrinsics; +use ops::Drop; +use clone::Clone; +use kinds::Owned; + +/**************************************************************************** + * Shared state & exclusive ARC + ****************************************************************************/ + +struct ArcData { + count: libc::intptr_t, + // FIXME(#3224) should be able to make this non-option to save memory + data: Option, +} + +struct ArcDestruct { + data: *libc::c_void, +} + +#[unsafe_destructor] +impl Drop for ArcDestruct{ + fn finalize(&self) { + unsafe { + do task::unkillable { + let mut data: ~ArcData = cast::transmute(self.data); + let new_count = + intrinsics::atomic_xsub(&mut data.count, 1) - 1; + assert!(new_count >= 0); + if new_count == 0 { + // drop glue takes over. + } else { + cast::forget(data); + } + } + } + } +} + +fn ArcDestruct(data: *libc::c_void) -> ArcDestruct { + ArcDestruct { + data: data + } +} + +/** + * COMPLETELY UNSAFE. Used as a primitive for the safe versions in std::arc. + * + * Data races between tasks can result in crashes and, with sufficient + * cleverness, arbitrary type coercion. + */ +pub type SharedMutableState = ArcDestruct; + +pub unsafe fn shared_mutable_state(data: T) -> + SharedMutableState { + let data = ~ArcData { count: 1, data: Some(data) }; + let ptr = cast::transmute(data); + ArcDestruct(ptr) +} + +#[inline(always)] +pub unsafe fn get_shared_mutable_state( + rc: *SharedMutableState) -> *mut T +{ + let ptr: ~ArcData = cast::transmute((*rc).data); + assert!(ptr.count > 0); + let r = cast::transmute(ptr.data.get_ref()); + cast::forget(ptr); + return r; +} +#[inline(always)] +pub unsafe fn get_shared_immutable_state<'a,T:Owned>( + rc: &'a SharedMutableState) -> &'a T { + let ptr: ~ArcData = cast::transmute((*rc).data); + assert!(ptr.count > 0); + // Cast us back into the correct region + let r = cast::transmute_region(ptr.data.get_ref()); + cast::forget(ptr); + return r; +} + +pub unsafe fn clone_shared_mutable_state(rc: &SharedMutableState) + -> SharedMutableState { + let mut ptr: ~ArcData = cast::transmute((*rc).data); + let new_count = intrinsics::atomic_xadd(&mut ptr.count, 1) + 1; + assert!(new_count >= 2); + cast::forget(ptr); + ArcDestruct((*rc).data) +} + +impl Clone for SharedMutableState { + fn clone(&self) -> SharedMutableState { + unsafe { + clone_shared_mutable_state(self) + } + } +} + +/****************************************************************************/ + +#[allow(non_camel_case_types)] // runtime type +pub type rust_little_lock = *libc::c_void; + +struct LittleLock { + l: rust_little_lock, +} + +impl Drop for LittleLock { + fn finalize(&self) { + unsafe { + rust_destroy_little_lock(self.l); + } + } +} + +fn LittleLock() -> LittleLock { + unsafe { + LittleLock { + l: rust_create_little_lock() + } + } +} + +pub impl LittleLock { + #[inline(always)] + unsafe fn lock(&self, f: &fn() -> T) -> T { + do atomically { + rust_lock_little_lock(self.l); + do (|| { + f() + }).finally { + rust_unlock_little_lock(self.l); + } + } + } +} + +struct ExData { + lock: LittleLock, + failed: bool, + data: T, +} + +/** + * An arc over mutable data that is protected by a lock. For library use only. + */ +pub struct Exclusive { + x: SharedMutableState> +} + +pub fn exclusive(user_data: T) -> Exclusive { + let data = ExData { + lock: LittleLock(), + failed: false, + data: user_data + }; + Exclusive { + x: unsafe { + shared_mutable_state(data) + } + } +} + +impl Clone for Exclusive { + // Duplicate an exclusive ARC, as std::arc::clone. + fn clone(&self) -> Exclusive { + Exclusive { x: unsafe { clone_shared_mutable_state(&self.x) } } + } +} + +pub impl Exclusive { + // Exactly like std::arc::mutex_arc,access(), but with the little_lock + // instead of a proper mutex. Same reason for being unsafe. + // + // Currently, scheduling operations (i.e., yielding, receiving on a pipe, + // accessing the provided condition variable) are prohibited while inside + // the exclusive. Supporting that is a work in progress. + #[inline(always)] + unsafe fn with(&self, f: &fn(x: &mut T) -> U) -> U { + let rec = get_shared_mutable_state(&self.x); + do (*rec).lock.lock { + if (*rec).failed { + fail!( + ~"Poisoned exclusive - another task failed inside!"); + } + (*rec).failed = true; + let result = f(&mut (*rec).data); + (*rec).failed = false; + result + } + } + + #[inline(always)] + unsafe fn with_imm(&self, f: &fn(x: &T) -> U) -> U { + do self.with |x| { + f(cast::transmute_immut(x)) + } + } +} + +fn compare_and_swap(address: &mut int, oldval: int, newval: int) -> bool { + unsafe { + let old = intrinsics::atomic_cxchg(address, oldval, newval); + old == oldval + } +} + +extern { + fn rust_create_little_lock() -> rust_little_lock; + fn rust_destroy_little_lock(lock: rust_little_lock); + fn rust_lock_little_lock(lock: rust_little_lock); + fn rust_unlock_little_lock(lock: rust_little_lock); +} + +#[cfg(test)] +mod tests { + use comm; + use super::exclusive; + use task; + use uint; + + #[test] + fn exclusive_arc() { + let mut futures = ~[]; + + let num_tasks = 10; + let count = 10; + + let total = exclusive(~0); + + for uint::range(0, num_tasks) |_i| { + let total = total.clone(); + let (port, chan) = comm::stream(); + futures.push(port); + + do task::spawn || { + for uint::range(0, count) |_i| { + do total.with |count| { + **count += 1; + } + } + chan.send(()); + } + }; + + for futures.each |f| { f.recv() } + + do total.with |total| { + assert!(**total == num_tasks * count) + }; + } + + #[test] #[should_fail] #[ignore(cfg(windows))] + fn exclusive_poison() { + // Tests that if one task fails inside of an exclusive, subsequent + // accesses will also fail. + let x = exclusive(1); + let x2 = x.clone(); + do task::try || { + do x2.with |one| { + assert!(*one == 2); + } + }; + do x.with |one| { + assert!(*one == 1); + } + } +} diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs index 604f0297b647e..e56144ebc0a3b 100644 --- a/src/libcore/vec.rs +++ b/src/libcore/vec.rs @@ -3298,8 +3298,9 @@ mod tests { #[test] fn test_swap_remove_noncopyable() { // Tests that we don't accidentally run destructors twice. - let mut v = ~[::unstable::exclusive(()), ::unstable::exclusive(()), - ::unstable::exclusive(())]; + let mut v = ~[::unstable::sync::exclusive(()), + ::unstable::sync::exclusive(()), + ::unstable::sync::exclusive(())]; let mut _e = v.swap_remove(0); assert!(v.len() == 2); _e = v.swap_remove(1); diff --git a/src/libstd/arc.rs b/src/libstd/arc.rs index 7af68f3321d49..86a77f36fb6ff 100644 --- a/src/libstd/arc.rs +++ b/src/libstd/arc.rs @@ -17,9 +17,9 @@ use sync; use sync::{Mutex, mutex_with_condvars, RWlock, rwlock_with_condvars}; use core::cast; -use core::unstable::{SharedMutableState, shared_mutable_state}; -use core::unstable::{clone_shared_mutable_state}; -use core::unstable::{get_shared_mutable_state, get_shared_immutable_state}; +use core::unstable::sync::{SharedMutableState, shared_mutable_state}; +use core::unstable::sync::{clone_shared_mutable_state}; +use core::unstable::sync::{get_shared_mutable_state, get_shared_immutable_state}; use core::ptr; use core::task; diff --git a/src/libstd/sync.rs b/src/libstd/sync.rs index 17d051518a9ec..108f24d60dc36 100644 --- a/src/libstd/sync.rs +++ b/src/libstd/sync.rs @@ -15,7 +15,7 @@ * in std. */ -use core::unstable::{Exclusive, exclusive}; +use core::unstable::sync::{Exclusive, exclusive}; use core::ptr; use core::task; use core::util; diff --git a/src/test/compile-fail/noncopyable-match-pattern.rs b/src/test/compile-fail/noncopyable-match-pattern.rs index e8b01765a447d..155b398148339 100644 --- a/src/test/compile-fail/noncopyable-match-pattern.rs +++ b/src/test/compile-fail/noncopyable-match-pattern.rs @@ -9,7 +9,7 @@ // except according to those terms. fn main() { - let x = Some(unstable::exclusive(false)); + let x = Some(unstable::sync::exclusive(false)); match x { Some(copy z) => { //~ ERROR copying a value of non-copyable type do z.with |b| { assert!(!*b); } diff --git a/src/test/run-pass/alt-ref-binding-in-guard-3256.rs b/src/test/run-pass/alt-ref-binding-in-guard-3256.rs index 1ece3b5fd93b6..ed7a631637433 100644 --- a/src/test/run-pass/alt-ref-binding-in-guard-3256.rs +++ b/src/test/run-pass/alt-ref-binding-in-guard-3256.rs @@ -9,7 +9,7 @@ // except according to those terms. pub fn main() { - let x = Some(unstable::exclusive(true)); + let x = Some(unstable::sync::exclusive(true)); match x { Some(ref z) if z.with(|b| *b) => { do z.with |b| { assert!(*b); } From 369231beb4b29a16c27bcc2c4f9a5679b613ed19 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Thu, 9 May 2013 20:27:42 -0700 Subject: [PATCH 405/410] core: Rename SharedMutableState to UnsafeAtomicRcBox --- src/libcore/unstable/global.rs | 21 ++--- src/libcore/unstable/sync.rs | 157 +++++++++++++++++---------------- src/libstd/arc.rs | 84 +++++++++--------- 3 files changed, 131 insertions(+), 131 deletions(-) diff --git a/src/libcore/unstable/global.rs b/src/libcore/unstable/global.rs index 27a003e04146d..2d6698fb96ade 100644 --- a/src/libcore/unstable/global.rs +++ b/src/libcore/unstable/global.rs @@ -37,8 +37,7 @@ use unstable::intrinsics::atomic_cxchg; use hashmap::HashMap; use sys::Closure; -#[cfg(test)] use unstable::sync::{SharedMutableState, shared_mutable_state}; -#[cfg(test)] use unstable::sync::get_shared_immutable_state; +#[cfg(test)] use unstable::sync::{UnsafeAtomicRcBox}; #[cfg(test)] use task::spawn; #[cfg(test)] use uint; @@ -234,18 +233,16 @@ extern { #[test] fn test_clone_rc() { - type MyType = SharedMutableState; - - fn key(_v: SharedMutableState) { } + fn key(_v: UnsafeAtomicRcBox) { } for uint::range(0, 100) |_| { do spawn { unsafe { let val = do global_data_clone_create(key) { - ~shared_mutable_state(10) + ~UnsafeAtomicRcBox::new(10) }; - assert!(get_shared_immutable_state(&val) == &10); + assert!(val.get() == &10); } } } @@ -253,16 +250,14 @@ fn test_clone_rc() { #[test] fn test_modify() { - type MyType = SharedMutableState; - - fn key(_v: SharedMutableState) { } + fn key(_v: UnsafeAtomicRcBox) { } unsafe { do global_data_modify(key) |v| { match v { None => { unsafe { - Some(~shared_mutable_state(10)) + Some(~UnsafeAtomicRcBox::new(10)) } } _ => fail!() @@ -272,7 +267,7 @@ fn test_modify() { do global_data_modify(key) |v| { match v { Some(sms) => { - let v = get_shared_immutable_state(sms); + let v = sms.get(); assert!(*v == 10); None }, @@ -284,7 +279,7 @@ fn test_modify() { match v { None => { unsafe { - Some(~shared_mutable_state(10)) + Some(~UnsafeAtomicRcBox::new(10)) } } _ => fail!() diff --git a/src/libcore/unstable/sync.rs b/src/libcore/unstable/sync.rs index 691f893c4fc6c..e22046f04f95b 100644 --- a/src/libcore/unstable/sync.rs +++ b/src/libcore/unstable/sync.rs @@ -19,98 +19,103 @@ use ops::Drop; use clone::Clone; use kinds::Owned; -/**************************************************************************** - * Shared state & exclusive ARC - ****************************************************************************/ - -struct ArcData { - count: libc::intptr_t, - // FIXME(#3224) should be able to make this non-option to save memory - data: Option, +/// An atomically reference counted pointer. +/// +/// Enforces no shared-memory safety. +pub struct UnsafeAtomicRcBox { + data: *mut libc::c_void, } -struct ArcDestruct { - data: *libc::c_void, +struct AtomicRcBoxData { + count: int, + data: Option, } -#[unsafe_destructor] -impl Drop for ArcDestruct{ - fn finalize(&self) { +impl UnsafeAtomicRcBox { + pub fn new(data: T) -> UnsafeAtomicRcBox { unsafe { - do task::unkillable { - let mut data: ~ArcData = cast::transmute(self.data); - let new_count = - intrinsics::atomic_xsub(&mut data.count, 1) - 1; - assert!(new_count >= 0); - if new_count == 0 { - // drop glue takes over. - } else { - cast::forget(data); - } - } + let data = ~AtomicRcBoxData { count: 1, data: Some(data) }; + let ptr = cast::transmute(data); + return UnsafeAtomicRcBox { data: ptr }; } } -} -fn ArcDestruct(data: *libc::c_void) -> ArcDestruct { - ArcDestruct { - data: data + #[inline(always)] + #[cfg(stage0)] + pub unsafe fn get(&self) -> *mut T + { + let mut data: ~AtomicRcBoxData = cast::transmute(self.data); + assert!(data.count > 0); + let r: *mut T = cast::transmute(data.data.get_mut_ref()); + cast::forget(data); + return r; } -} -/** - * COMPLETELY UNSAFE. Used as a primitive for the safe versions in std::arc. - * - * Data races between tasks can result in crashes and, with sufficient - * cleverness, arbitrary type coercion. - */ -pub type SharedMutableState = ArcDestruct; + #[inline(always)] + #[cfg(not(stage0))] + pub unsafe fn get(&self) -> *mut T + { + let mut data: ~AtomicRcBoxData = cast::transmute(self.data); + assert!(data.count > 0); + let r: *mut T = data.data.get_mut_ref(); + cast::forget(data); + return r; + } -pub unsafe fn shared_mutable_state(data: T) -> - SharedMutableState { - let data = ~ArcData { count: 1, data: Some(data) }; - let ptr = cast::transmute(data); - ArcDestruct(ptr) -} + #[inline(always)] + #[cfg(stage0)] + pub unsafe fn get_immut(&self) -> *T + { + let mut data: ~AtomicRcBoxData = cast::transmute(self.data); + assert!(data.count > 0); + let r: *T = cast::transmute(data.data.get_mut_ref()); + cast::forget(data); + return r; + } -#[inline(always)] -pub unsafe fn get_shared_mutable_state( - rc: *SharedMutableState) -> *mut T -{ - let ptr: ~ArcData = cast::transmute((*rc).data); - assert!(ptr.count > 0); - let r = cast::transmute(ptr.data.get_ref()); - cast::forget(ptr); - return r; -} -#[inline(always)] -pub unsafe fn get_shared_immutable_state<'a,T:Owned>( - rc: &'a SharedMutableState) -> &'a T { - let ptr: ~ArcData = cast::transmute((*rc).data); - assert!(ptr.count > 0); - // Cast us back into the correct region - let r = cast::transmute_region(ptr.data.get_ref()); - cast::forget(ptr); - return r; + #[inline(always)] + #[cfg(not(stage0))] + pub unsafe fn get_immut(&self) -> *T + { + let mut data: ~AtomicRcBoxData = cast::transmute(self.data); + assert!(data.count > 0); + let r: *T = cast::transmute_immut(data.data.get_mut_ref()); + cast::forget(data); + return r; + } } -pub unsafe fn clone_shared_mutable_state(rc: &SharedMutableState) - -> SharedMutableState { - let mut ptr: ~ArcData = cast::transmute((*rc).data); - let new_count = intrinsics::atomic_xadd(&mut ptr.count, 1) + 1; - assert!(new_count >= 2); - cast::forget(ptr); - ArcDestruct((*rc).data) +impl Clone for UnsafeAtomicRcBox { + fn clone(&self) -> UnsafeAtomicRcBox { + unsafe { + let mut data: ~AtomicRcBoxData = cast::transmute(self.data); + let new_count = intrinsics::atomic_xadd(&mut data.count, 1) + 1; + assert!(new_count >= 2); + cast::forget(data); + return UnsafeAtomicRcBox { data: self.data }; + } + } } -impl Clone for SharedMutableState { - fn clone(&self) -> SharedMutableState { +#[unsafe_destructor] +impl Drop for UnsafeAtomicRcBox{ + fn finalize(&self) { unsafe { - clone_shared_mutable_state(self) + do task::unkillable { + let mut data: ~AtomicRcBoxData = cast::transmute(self.data); + let new_count = intrinsics::atomic_xsub(&mut data.count, 1) - 1; + assert!(new_count >= 0); + if new_count == 0 { + // drop glue takes over. + } else { + cast::forget(data); + } + } } } } + /****************************************************************************/ #[allow(non_camel_case_types)] // runtime type @@ -160,7 +165,7 @@ struct ExData { * An arc over mutable data that is protected by a lock. For library use only. */ pub struct Exclusive { - x: SharedMutableState> + x: UnsafeAtomicRcBox> } pub fn exclusive(user_data: T) -> Exclusive { @@ -170,16 +175,14 @@ pub fn exclusive(user_data: T) -> Exclusive { data: user_data }; Exclusive { - x: unsafe { - shared_mutable_state(data) - } + x: UnsafeAtomicRcBox::new(data) } } impl Clone for Exclusive { // Duplicate an exclusive ARC, as std::arc::clone. fn clone(&self) -> Exclusive { - Exclusive { x: unsafe { clone_shared_mutable_state(&self.x) } } + Exclusive { x: self.x.clone() } } } @@ -192,7 +195,7 @@ pub impl Exclusive { // the exclusive. Supporting that is a work in progress. #[inline(always)] unsafe fn with(&self, f: &fn(x: &mut T) -> U) -> U { - let rec = get_shared_mutable_state(&self.x); + let rec = self.x.get(); do (*rec).lock.lock { if (*rec).failed { fail!( diff --git a/src/libstd/arc.rs b/src/libstd/arc.rs index 86a77f36fb6ff..d3f774a1cd51f 100644 --- a/src/libstd/arc.rs +++ b/src/libstd/arc.rs @@ -17,9 +17,7 @@ use sync; use sync::{Mutex, mutex_with_condvars, RWlock, rwlock_with_condvars}; use core::cast; -use core::unstable::sync::{SharedMutableState, shared_mutable_state}; -use core::unstable::sync::{clone_shared_mutable_state}; -use core::unstable::sync::{get_shared_mutable_state, get_shared_immutable_state}; +use core::unstable::sync::UnsafeAtomicRcBox; use core::ptr; use core::task; @@ -83,11 +81,11 @@ pub impl<'self> Condvar<'self> { ****************************************************************************/ /// An atomically reference counted wrapper for shared immutable state. -struct ARC { x: SharedMutableState } +struct ARC { x: UnsafeAtomicRcBox } /// Create an atomically reference counted wrapper. pub fn ARC(data: T) -> ARC { - ARC { x: unsafe { shared_mutable_state(data) } } + ARC { x: UnsafeAtomicRcBox::new(data) } } /** @@ -95,7 +93,7 @@ pub fn ARC(data: T) -> ARC { * wrapper. */ pub fn get<'a, T:Const + Owned>(rc: &'a ARC) -> &'a T { - unsafe { get_shared_immutable_state(&rc.x) } + unsafe { &*rc.x.get_immut() } } /** @@ -106,7 +104,7 @@ pub fn get<'a, T:Const + Owned>(rc: &'a ARC) -> &'a T { * allowing them to share the underlying data. */ pub fn clone(rc: &ARC) -> ARC { - ARC { x: unsafe { clone_shared_mutable_state(&rc.x) } } + ARC { x: rc.x.clone() } } impl Clone for ARC { @@ -122,7 +120,7 @@ impl Clone for ARC { #[doc(hidden)] struct MutexARCInner { lock: Mutex, failed: bool, data: T } /// An ARC with mutable data protected by a blocking mutex. -struct MutexARC { x: SharedMutableState> } +struct MutexARC { x: UnsafeAtomicRcBox> } /// Create a mutex-protected ARC with the supplied data. pub fn MutexARC(user_data: T) -> MutexARC { @@ -137,7 +135,7 @@ pub fn mutex_arc_with_condvars(user_data: T, let data = MutexARCInner { lock: mutex_with_condvars(num_condvars), failed: false, data: user_data }; - MutexARC { x: unsafe { shared_mutable_state(data) } } + MutexARC { x: UnsafeAtomicRcBox::new(data) } } impl Clone for MutexARC { @@ -145,7 +143,7 @@ impl Clone for MutexARC { fn clone(&self) -> MutexARC { // NB: Cloning the underlying mutex is not necessary. Its reference // count would be exactly the same as the shared state's. - MutexARC { x: unsafe { clone_shared_mutable_state(&self.x) } } + MutexARC { x: self.x.clone() } } } @@ -176,7 +174,7 @@ pub impl MutexARC { */ #[inline(always)] unsafe fn access(&self, blk: &fn(x: &mut T) -> U) -> U { - let state = get_shared_mutable_state(&self.x); + let state = self.x.get(); // Borrowck would complain about this if the function were // not already unsafe. See borrow_rwlock, far below. do (&(*state).lock).lock { @@ -192,7 +190,7 @@ pub impl MutexARC { &self, blk: &fn(x: &'x mut T, c: &'c Condvar) -> U) -> U { - let state = get_shared_mutable_state(&self.x); + let state = self.x.get(); do (&(*state).lock).lock_cond |cond| { check_poison(true, (*state).failed); let _z = PoisonOnFail(&mut (*state).failed); @@ -254,7 +252,7 @@ struct RWARCInner { lock: RWlock, failed: bool, data: T } */ #[mutable] struct RWARC { - x: SharedMutableState>, + x: UnsafeAtomicRcBox>, cant_nest: () } @@ -273,13 +271,13 @@ pub fn rw_arc_with_condvars( let data = RWARCInner { lock: rwlock_with_condvars(num_condvars), failed: false, data: user_data }; - RWARC { x: unsafe { shared_mutable_state(data) }, cant_nest: () } + RWARC { x: UnsafeAtomicRcBox::new(data), cant_nest: () } } pub impl RWARC { /// Duplicate a rwlock-protected ARC, as arc::clone. fn clone(&self) -> RWARC { - RWARC { x: unsafe { clone_shared_mutable_state(&self.x) }, + RWARC { x: self.x.clone(), cant_nest: () } } @@ -299,7 +297,7 @@ pub impl RWARC { #[inline(always)] fn write(&self, blk: &fn(x: &mut T) -> U) -> U { unsafe { - let state = get_shared_mutable_state(&self.x); + let state = self.x.get(); do (*borrow_rwlock(state)).write { check_poison(false, (*state).failed); let _z = PoisonOnFail(&mut (*state).failed); @@ -313,7 +311,7 @@ pub impl RWARC { blk: &fn(x: &'x mut T, c: &'c Condvar) -> U) -> U { unsafe { - let state = get_shared_mutable_state(&self.x); + let state = self.x.get(); do (*borrow_rwlock(state)).write_cond |cond| { check_poison(false, (*state).failed); let _z = PoisonOnFail(&mut (*state).failed); @@ -334,10 +332,12 @@ pub impl RWARC { * access modes, this will not poison the ARC. */ fn read(&self, blk: &fn(x: &T) -> U) -> U { - let state = unsafe { get_shared_immutable_state(&self.x) }; - do (&state.lock).read { - check_poison(false, state.failed); - blk(&state.data) + let state = self.x.get(); + unsafe { + do (*state).lock.read { + check_poison(false, (*state).failed); + blk(&(*state).data) + } } } @@ -360,7 +360,7 @@ pub impl RWARC { */ fn write_downgrade(&self, blk: &fn(v: RWWriteMode) -> U) -> U { unsafe { - let state = get_shared_mutable_state(&self.x); + let state = self.x.get(); do (*borrow_rwlock(state)).write_downgrade |write_mode| { check_poison(false, (*state).failed); blk(RWWriteMode { @@ -374,25 +374,27 @@ pub impl RWARC { /// To be called inside of the write_downgrade block. fn downgrade<'a>(&self, token: RWWriteMode<'a, T>) -> RWReadMode<'a, T> { - // The rwlock should assert that the token belongs to us for us. - let state = unsafe { get_shared_immutable_state(&self.x) }; - let RWWriteMode { - data: data, - token: t, - poison: _poison - } = token; - // Let readers in - let new_token = (&state.lock).downgrade(t); - // Whatever region the input reference had, it will be safe to use - // the same region for the output reference. (The only 'unsafe' part - // of this cast is removing the mutability.) - let new_data = unsafe { cast::transmute_immut(data) }; - // Downgrade ensured the token belonged to us. Just a sanity check. - assert!(ptr::ref_eq(&state.data, new_data)); - // Produce new token - RWReadMode { - data: new_data, - token: new_token, + unsafe { + // The rwlock should assert that the token belongs to us for us. + let state = self.x.get(); + let RWWriteMode { + data: data, + token: t, + poison: _poison + } = token; + // Let readers in + let new_token = (*state).lock.downgrade(t); + // Whatever region the input reference had, it will be safe to use + // the same region for the output reference. (The only 'unsafe' part + // of this cast is removing the mutability.) + let new_data = cast::transmute_immut(data); + // Downgrade ensured the token belonged to us. Just a sanity check. + assert!(ptr::ref_eq(&(*state).data, new_data)); + // Produce new token + RWReadMode { + data: new_data, + token: new_token, + } } } } From 66e1e517019c70450dcadeb0d876c686729215e3 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Sun, 12 May 2013 20:34:15 -0400 Subject: [PATCH 406/410] Remove re-exports from libcore/core.rc Also fix up all the fallout elsewhere throughout core. It's really nice being able to have the prelude. --- src/libcore/at_vec.rs | 2 + src/libcore/comm.rs | 5 ++- src/libcore/core.rc | 42 ------------------- src/libcore/either.rs | 3 ++ src/libcore/hash.rs | 2 + src/libcore/io.rs | 5 +++ src/libcore/iter.rs | 1 + src/libcore/logging.rs | 1 + src/libcore/num/strconv.rs | 3 ++ src/libcore/option.rs | 1 + src/libcore/path.rs | 4 ++ src/libcore/pipes.rs | 3 ++ src/libcore/ptr.rs | 2 +- src/libcore/repr.rs | 3 +- src/libcore/result.rs | 2 + src/libcore/rt/mod.rs | 1 + src/libcore/rt/stack.rs | 2 + src/libcore/rt/test.rs | 2 +- src/libcore/rt/uv/mod.rs | 2 + src/libcore/rt/uv/net.rs | 2 +- src/libcore/rt/uvio.rs | 4 +- src/libcore/rt/work_queue.rs | 2 + src/libcore/run.rs | 1 - src/libcore/str.rs | 12 +++++- src/libcore/str/ascii.rs | 3 ++ src/libcore/task/mod.rs | 2 +- src/libcore/task/spawn.rs | 1 - src/libcore/to_bytes.rs | 1 + src/libcore/to_str.rs | 3 +- src/libcore/unstable/global.rs | 12 +----- src/libcore/unstable/weak_task.rs | 2 +- src/libcore/vec.rs | 22 +++++----- src/librustc/util/enum_set.rs | 6 +-- .../tag-that-dare-not-speak-its-name.rs | 2 +- 34 files changed, 81 insertions(+), 80 deletions(-) diff --git a/src/libcore/at_vec.rs b/src/libcore/at_vec.rs index a3981dd84913b..d0f9a4ff90f1e 100644 --- a/src/libcore/at_vec.rs +++ b/src/libcore/at_vec.rs @@ -11,8 +11,10 @@ //! Managed vectors use cast::transmute; +use container::Container; use kinds::Copy; use old_iter; +use old_iter::BaseIter; use option::Option; use sys; use uint; diff --git a/src/libcore/comm.rs b/src/libcore/comm.rs index 322584f8df174..f4eb856865d07 100644 --- a/src/libcore/comm.rs +++ b/src/libcore/comm.rs @@ -13,12 +13,13 @@ Message passing */ use cast::{transmute, transmute_mut}; +use container::Container; use either::{Either, Left, Right}; use kinds::Owned; use option::{Option, Some, None}; use uint; -use unstable; use vec; +use vec::OwnedVector; use util::replace; use unstable::sync::{Exclusive, exclusive}; @@ -577,7 +578,7 @@ impl(level: u32, object: &T) { + use container::Container; use cast::transmute; use io; use libc; diff --git a/src/libcore/num/strconv.rs b/src/libcore/num/strconv.rs index 052246a7744ce..5ed99a8399559 100644 --- a/src/libcore/num/strconv.rs +++ b/src/libcore/num/strconv.rs @@ -8,6 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +use container::Container; use core::cmp::{Ord, Eq}; use ops::{Add, Sub, Mul, Div, Rem, Neg}; use option::{None, Option, Some}; @@ -15,6 +16,8 @@ use char; use str; use kinds::Copy; use vec; +use vec::{CopyableVector, ImmutableVector}; +use vec::OwnedVector; use num::{NumCast, Zero, One, cast, pow_with_uint}; use f64; diff --git a/src/libcore/option.rs b/src/libcore/option.rs index 7cb408767058c..e171552af4c74 100644 --- a/src/libcore/option.rs +++ b/src/libcore/option.rs @@ -48,6 +48,7 @@ use util; use num::Zero; use old_iter::{BaseIter, MutableIter, ExtendedIter}; use old_iter; +use str::StrSlice; #[cfg(test)] use str; diff --git a/src/libcore/path.rs b/src/libcore/path.rs index c6c164c2728fa..2015c5474be32 100644 --- a/src/libcore/path.rs +++ b/src/libcore/path.rs @@ -14,12 +14,16 @@ Cross-platform file path handling */ +use container::Container; use cmp::Eq; use libc; use option::{None, Option, Some}; use str; +use str::StrSlice; use to_str::ToStr; use ascii::{AsciiCast, AsciiStr}; +use old_iter::BaseIter; +use vec::OwnedVector; #[cfg(windows)] pub use Path = self::WindowsPath; diff --git a/src/libcore/pipes.rs b/src/libcore/pipes.rs index 9b664b334ba36..fb80a43347e01 100644 --- a/src/libcore/pipes.rs +++ b/src/libcore/pipes.rs @@ -82,6 +82,7 @@ bounded and unbounded protocols allows for less code duplication. */ +use container::Container; use cast::{forget, transmute, transmute_copy}; use either::{Either, Left, Right}; use kinds::Owned; @@ -91,8 +92,10 @@ use option::{None, Option, Some}; use unstable::finally::Finally; use unstable::intrinsics; use ptr; +use ptr::Ptr; use task; use vec; +use vec::OwnedVector; use util::replace; static SPIN_COUNT: uint = 0; diff --git a/src/libcore/ptr.rs b/src/libcore/ptr.rs index 77e4143d090f5..0aff6e06e69bd 100644 --- a/src/libcore/ptr.rs +++ b/src/libcore/ptr.rs @@ -353,7 +353,7 @@ pub mod ptr_tests { assert!((p.fst == 50)); assert!((p.snd == 60)); - let mut v0 = ~[32000u16, 32001u16, 32002u16]; + let v0 = ~[32000u16, 32001u16, 32002u16]; let mut v1 = ~[0u16, 0u16, 0u16]; copy_memory(mut_offset(vec::raw::to_mut_ptr(v1), 1u), diff --git a/src/libcore/repr.rs b/src/libcore/repr.rs index a645a7e868076..0bf8635d1c8f3 100644 --- a/src/libcore/repr.rs +++ b/src/libcore/repr.rs @@ -25,10 +25,11 @@ use managed; use ptr; use reflect; use reflect::{MovePtr, align}; +use str::StrSlice; use to_str::ToStr; -use vec::UnboxedVecRepr; use vec::raw::{VecRepr, SliceRepr}; use vec; +use vec::{OwnedVector, UnboxedVecRepr}; #[cfg(test)] use io; diff --git a/src/libcore/result.rs b/src/libcore/result.rs index 1d67e754a4f24..b7de667878399 100644 --- a/src/libcore/result.rs +++ b/src/libcore/result.rs @@ -17,7 +17,9 @@ use either; use either::Either; use kinds::Copy; use option::{None, Option, Some}; +use old_iter::BaseIter; use vec; +use vec::OwnedVector; /// The result type #[deriving(Clone, Eq)] diff --git a/src/libcore/rt/mod.rs b/src/libcore/rt/mod.rs index 25f6c870654a6..fbbc82743407c 100644 --- a/src/libcore/rt/mod.rs +++ b/src/libcore/rt/mod.rs @@ -13,6 +13,7 @@ #[doc(hidden)]; use libc::c_char; +use ptr::Ptr; #[path = "sched/mod.rs"] mod sched; diff --git a/src/libcore/rt/stack.rs b/src/libcore/rt/stack.rs index 9eca3bda0473c..3a4e9307d3b50 100644 --- a/src/libcore/rt/stack.rs +++ b/src/libcore/rt/stack.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +use container::Container; +use ptr::Ptr; use vec; pub struct StackSegment { diff --git a/src/libcore/rt/test.rs b/src/libcore/rt/test.rs index 63db705408800..0c6843c605d15 100644 --- a/src/libcore/rt/test.rs +++ b/src/libcore/rt/test.rs @@ -77,7 +77,7 @@ pub fn spawntask_try(f: ~fn()) -> Result<(), ()> { // Switch to the scheduler let f = Cell(Cell(f)); - let mut sched = local_sched::take(); + let sched = local_sched::take(); do sched.deschedule_running_task_and_then() |old_task| { let old_task = Cell(old_task); let f = f.take(); diff --git a/src/libcore/rt/uv/mod.rs b/src/libcore/rt/uv/mod.rs index 013a28abf2813..6499f0a3efdcf 100644 --- a/src/libcore/rt/uv/mod.rs +++ b/src/libcore/rt/uv/mod.rs @@ -34,11 +34,13 @@ via `close` and `delete` methods. */ +use container::Container; use option::*; use str::raw::from_c_str; use to_str::ToStr; use vec; use ptr; +use ptr::Ptr; use libc::{c_void, c_int, size_t, malloc, free}; use cast::transmute; use ptr::null; diff --git a/src/libcore/rt/uv/net.rs b/src/libcore/rt/uv/net.rs index 376231e3b27c5..3e6aa657c57dd 100644 --- a/src/libcore/rt/uv/net.rs +++ b/src/libcore/rt/uv/net.rs @@ -388,7 +388,7 @@ fn listen() { assert!(status.is_none()); let mut server_stream_watcher = server_stream_watcher; let mut loop_ = loop_; - let mut client_tcp_watcher = TcpWatcher::new(&mut loop_); + let client_tcp_watcher = TcpWatcher::new(&mut loop_); let mut client_tcp_watcher = client_tcp_watcher.as_stream(); server_stream_watcher.accept(client_tcp_watcher); let count_cell = Cell(0); diff --git a/src/libcore/rt/uvio.rs b/src/libcore/rt/uvio.rs index 8f1a6ea0d34c1..24bffd8d1cd24 100644 --- a/src/libcore/rt/uvio.rs +++ b/src/libcore/rt/uvio.rs @@ -15,10 +15,12 @@ use super::io::net::ip::IpAddr; use super::uv::*; use super::rtio::*; use ops::Drop; +use old_iter::CopyableIter; use cell::{Cell, empty_cell}; use cast::transmute; use super::sched::{Scheduler, local_sched}; +#[cfg(test)] use container::Container; #[cfg(test)] use uint; #[cfg(test)] use unstable::run_in_bare_thread; #[cfg(test)] use super::test::*; @@ -426,7 +428,7 @@ fn test_read_read_read() { let io = local_sched::unsafe_borrow_io(); let mut listener = io.bind(addr).unwrap(); let mut stream = listener.listen().unwrap(); - let mut buf = [1, .. 2048]; + let buf = [1, .. 2048]; let mut total_bytes_written = 0; while total_bytes_written < MAX { stream.write(buf); diff --git a/src/libcore/rt/work_queue.rs b/src/libcore/rt/work_queue.rs index dfa88b783c59f..495cd75a0bf8e 100644 --- a/src/libcore/rt/work_queue.rs +++ b/src/libcore/rt/work_queue.rs @@ -8,7 +8,9 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +use container::Container; use option::*; +use vec::OwnedVector; pub struct WorkQueue { priv queue: ~[T] diff --git a/src/libcore/run.rs b/src/libcore/run.rs index fd168dc02f606..c865e77cc6b78 100644 --- a/src/libcore/run.rs +++ b/src/libcore/run.rs @@ -778,7 +778,6 @@ pub fn waitpid(pid: pid_t) -> int { #[cfg(test)] mod tests { - use libc; use option::None; use os; use run::{readclose, writeclose}; diff --git a/src/libcore/str.rs b/src/libcore/str.rs index 3e2116dda0d11..d31152e1e1c66 100644 --- a/src/libcore/str.rs +++ b/src/libcore/str.rs @@ -23,14 +23,19 @@ use cast; use char; use clone::Clone; use cmp::{TotalOrd, Ordering, Less, Equal, Greater}; +use container::Container; +use iter::Times; +use iterator::Iterator; use libc; use option::{None, Option, Some}; -use iterator::Iterator; +use old_iter::{BaseIter, EqIter}; use ptr; +use ptr::Ptr; use str; +use to_str::ToStr; use uint; use vec; -use to_str::ToStr; +use vec::{OwnedVector, OwnedCopyableVector}; #[cfg(not(test))] use cmp::{Eq, Ord, Equiv, TotalEq}; @@ -3133,13 +3138,16 @@ impl<'self> Iterator for StrCharIterator<'self> { #[cfg(test)] mod tests { + use container::Container; use char; use option::Some; use libc::c_char; use libc; + use old_iter::BaseIter; use ptr; use str::*; use vec; + use vec::ImmutableVector; use cmp::{TotalOrd, Less, Equal, Greater}; #[test] diff --git a/src/libcore/str/ascii.rs b/src/libcore/str/ascii.rs index 73f556518fa66..4e239c4c82c7d 100644 --- a/src/libcore/str/ascii.rs +++ b/src/libcore/str/ascii.rs @@ -12,7 +12,10 @@ use to_str::{ToStr,ToStrConsume}; use str; +use str::StrSlice; use cast; +use old_iter::BaseIter; +use vec::{CopyableVector, ImmutableVector, OwnedVector}; /// Datatype to hold one ascii character. It is 8 bit long. #[deriving(Clone, Eq)] diff --git a/src/libcore/task/mod.rs b/src/libcore/task/mod.rs index 2484d8c5feda4..1518f80a125a9 100644 --- a/src/libcore/task/mod.rs +++ b/src/libcore/task/mod.rs @@ -772,7 +772,7 @@ fn test_add_wrapper() { do b0.add_wrapper |body| { let ch = Cell(ch.take()); let result: ~fn() = || { - let mut ch = ch.take(); + let ch = ch.take(); body(); ch.send(()); }; diff --git a/src/libcore/task/spawn.rs b/src/libcore/task/spawn.rs index 545f1ac8adaa8..9a1689ca05614 100644 --- a/src/libcore/task/spawn.rs +++ b/src/libcore/task/spawn.rs @@ -78,7 +78,6 @@ use cell::Cell; use container::Map; use comm::{Chan, GenericChan}; use prelude::*; -use unstable; use ptr; use hashmap::HashSet; use task::local_data_priv::{local_get, local_set, OldHandle}; diff --git a/src/libcore/to_bytes.rs b/src/libcore/to_bytes.rs index 182a03da4b1c6..6cc621e3419ad 100644 --- a/src/libcore/to_bytes.rs +++ b/src/libcore/to_bytes.rs @@ -17,6 +17,7 @@ The `ToBytes` and `IterBytes` traits use io; use io::Writer; use option::{None, Option, Some}; +use old_iter::BaseIter; use str; pub type Cb<'self> = &'self fn(buf: &[u8]) -> bool; diff --git a/src/libcore/to_str.rs b/src/libcore/to_str.rs index 58a9f768644bd..365cb847740b2 100644 --- a/src/libcore/to_str.rs +++ b/src/libcore/to_str.rs @@ -20,6 +20,7 @@ use hashmap::HashSet; use container::Map; use hash::Hash; use cmp::Eq; +use old_iter::BaseIter; pub trait ToStr { fn to_str(&self) -> ~str; @@ -236,4 +237,4 @@ mod tests { assert!(set_str == ~"{1, 2}" || set_str == ~"{2, 1}"); assert!(empty_set.to_str() == ~"{}"); } -} \ No newline at end of file +} diff --git a/src/libcore/unstable/global.rs b/src/libcore/unstable/global.rs index 2d6698fb96ade..88433f9cefe51 100644 --- a/src/libcore/unstable/global.rs +++ b/src/libcore/unstable/global.rs @@ -255,11 +255,7 @@ fn test_modify() { unsafe { do global_data_modify(key) |v| { match v { - None => { - unsafe { - Some(~UnsafeAtomicRcBox::new(10)) - } - } + None => { Some(~UnsafeAtomicRcBox::new(10)) } _ => fail!() } } @@ -277,11 +273,7 @@ fn test_modify() { do global_data_modify(key) |v| { match v { - None => { - unsafe { - Some(~UnsafeAtomicRcBox::new(10)) - } - } + None => { Some(~UnsafeAtomicRcBox::new(10)) } _ => fail!() } } diff --git a/src/libcore/unstable/weak_task.rs b/src/libcore/unstable/weak_task.rs index 8670bcfcd9a05..d5c5230cef819 100644 --- a/src/libcore/unstable/weak_task.rs +++ b/src/libcore/unstable/weak_task.rs @@ -191,7 +191,7 @@ fn test_select_stream_and_oneshot() { use comm::select2i; use either::{Left, Right}; - let mut (port, chan) = stream(); + let (port, chan) = stream(); let port = Cell(port); let (waitport, waitchan) = stream(); do spawn { diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs index e56144ebc0a3b..3a6bbf5c860a6 100644 --- a/src/libcore/vec.rs +++ b/src/libcore/vec.rs @@ -22,9 +22,11 @@ use old_iter; use iterator::Iterator; use kinds::Copy; use libc; +use old_iter::{BaseIter, CopyableIter}; use option::{None, Option, Some}; use ptr::to_unsafe_ptr; use ptr; +use ptr::Ptr; use sys; use uint; use unstable::intrinsics; @@ -3565,7 +3567,7 @@ mod tests { fn sub(a: int, b: &int) -> int { a - *b } - let mut v = ~[1, 2, 3, 4]; + let v = ~[1, 2, 3, 4]; let sum = foldl(0, v, sub); assert!(sum == -10); } @@ -3575,7 +3577,7 @@ mod tests { fn sub(a: &int, b: int) -> int { *a - b } - let mut v = ~[1, 2, 3, 4]; + let v = ~[1, 2, 3, 4]; let sum = foldr(v, 0, sub); assert!(sum == -2); } @@ -3739,7 +3741,7 @@ mod tests { assert!(position_between(~[], 0u, 0u, f).is_none()); fn f(xy: &(int, char)) -> bool { let (_x, y) = *xy; y == 'b' } - let mut v = ~[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'b')]; + let v = ~[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'b')]; assert!(position_between(v, 0u, 0u, f).is_none()); assert!(position_between(v, 0u, 1u, f).is_none()); @@ -3768,7 +3770,7 @@ mod tests { fn f(xy: &(int, char)) -> bool { let (_x, y) = *xy; y == 'b' } fn g(xy: &(int, char)) -> bool { let (_x, y) = *xy; y == 'd' } - let mut v = ~[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'b')]; + let v = ~[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'b')]; assert!(find(v, f) == Some((1, 'b'))); assert!(find(v, g).is_none()); @@ -3779,7 +3781,7 @@ mod tests { assert!(find_between(~[], 0u, 0u, f).is_none()); fn f(xy: &(int, char)) -> bool { let (_x, y) = *xy; y == 'b' } - let mut v = ~[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'b')]; + let v = ~[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'b')]; assert!(find_between(v, 0u, 0u, f).is_none()); assert!(find_between(v, 0u, 1u, f).is_none()); @@ -3808,7 +3810,7 @@ mod tests { fn f(xy: &(int, char)) -> bool { let (_x, y) = *xy; y == 'b' } fn g(xy: &(int, char)) -> bool { let (_x, y) = *xy; y == 'd' } - let mut v = ~[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'b')]; + let v = ~[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'b')]; assert!(position(v, f) == Some(1u)); assert!(position(v, g).is_none()); @@ -3819,7 +3821,7 @@ mod tests { assert!(rposition_between(~[], 0u, 0u, f).is_none()); fn f(xy: &(int, char)) -> bool { let (_x, y) = *xy; y == 'b' } - let mut v = ~[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'b')]; + let v = ~[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'b')]; assert!(rposition_between(v, 0u, 0u, f).is_none()); assert!(rposition_between(v, 0u, 1u, f).is_none()); @@ -3848,7 +3850,7 @@ mod tests { fn f(xy: &(int, char)) -> bool { let (_x, y) = *xy; y == 'b' } fn g(xy: &(int, char)) -> bool { let (_x, y) = *xy; y == 'd' } - let mut v = ~[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'b')]; + let v = ~[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'b')]; assert!(rfind(v, f) == Some((3, 'b'))); assert!(rfind(v, g).is_none()); @@ -3859,7 +3861,7 @@ mod tests { assert!(rfind_between(~[], 0u, 0u, f).is_none()); fn f(xy: &(int, char)) -> bool { let (_x, y) = *xy; y == 'b' } - let mut v = ~[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'b')]; + let v = ~[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'b')]; assert!(rfind_between(v, 0u, 0u, f).is_none()); assert!(rfind_between(v, 0u, 1u, f).is_none()); @@ -4328,7 +4330,7 @@ mod tests { #[ignore(windows)] #[should_fail] fn test_map_fail() { - let mut v = [(~0, @0), (~0, @0), (~0, @0), (~0, @0)]; + let v = [(~0, @0), (~0, @0), (~0, @0), (~0, @0)]; let mut i = 0; do map(v) |_elt| { if i == 2 { diff --git a/src/librustc/util/enum_set.rs b/src/librustc/util/enum_set.rs index c589ab5287421..8c4cbd0bce586 100644 --- a/src/librustc/util/enum_set.rs +++ b/src/librustc/util/enum_set.rs @@ -82,19 +82,19 @@ pub impl EnumSet { } } -impl core::Sub, EnumSet> for EnumSet { +impl Sub, EnumSet> for EnumSet { fn sub(&self, e: &EnumSet) -> EnumSet { EnumSet {bits: self.bits & !e.bits} } } -impl core::BitOr, EnumSet> for EnumSet { +impl BitOr, EnumSet> for EnumSet { fn bitor(&self, e: &EnumSet) -> EnumSet { EnumSet {bits: self.bits | e.bits} } } -impl core::BitAnd, EnumSet> for EnumSet { +impl BitAnd, EnumSet> for EnumSet { fn bitand(&self, e: &EnumSet) -> EnumSet { EnumSet {bits: self.bits & e.bits} } diff --git a/src/test/compile-fail/tag-that-dare-not-speak-its-name.rs b/src/test/compile-fail/tag-that-dare-not-speak-its-name.rs index af99c0e5f2953..22f6a34a181fb 100644 --- a/src/test/compile-fail/tag-that-dare-not-speak-its-name.rs +++ b/src/test/compile-fail/tag-that-dare-not-speak-its-name.rs @@ -15,7 +15,7 @@ extern mod core; -fn last(v: ~[&T]) -> core::Option { +fn last(v: ~[&T]) -> core::option::Option { fail!(); } From e1a199227635deddbdf010b3a79c2c96112909d7 Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Mon, 13 May 2013 19:46:20 -0400 Subject: [PATCH 407/410] revert PriorityQueue to using init() uninit() would result in potentially running a destructor on arbitrary memory if the Ord implementation throws --- src/libstd/priority_queue.rs | 60 +++--------------------------------- 1 file changed, 4 insertions(+), 56 deletions(-) diff --git a/src/libstd/priority_queue.rs b/src/libstd/priority_queue.rs index c5ab1a7719cd5..3c96a8e145d80 100644 --- a/src/libstd/priority_queue.rs +++ b/src/libstd/priority_queue.rs @@ -12,14 +12,7 @@ use core::old_iter::BaseIter; use core::util::{replace, swap}; - -#[abi = "rust-intrinsic"] -extern "rust-intrinsic" { - fn move_val_init(dst: &mut T, src: T); - fn init() -> T; - #[cfg(not(stage0))] - fn uninit() -> T; -} +use core::unstable::intrinsics::{init, move_val_init}; pub struct PriorityQueue { priv data: ~[T], @@ -141,33 +134,13 @@ pub impl PriorityQueue { // The implementations of siftup and siftdown use unsafe blocks in // order to move an element out of the vector (leaving behind a - // junk element), shift along the others and move it back into the + // zeroed element), shift along the others and move it back into the // vector over the junk element. This reduces the constant factor // compared to using swaps, which involves twice as many moves. - #[cfg(not(stage0))] - priv fn siftup(&mut self, start: uint, mut pos: uint) { - unsafe { - let new = *ptr::to_unsafe_ptr(&self.data[pos]); - - while pos > start { - let parent = (pos - 1) >> 1; - if new > self.data[parent] { - let x = replace(&mut self.data[parent], uninit()); - move_val_init(&mut self.data[pos], x); - pos = parent; - loop - } - break - } - move_val_init(&mut self.data[pos], new); - } - } - - #[cfg(stage0)] priv fn siftup(&mut self, start: uint, mut pos: uint) { unsafe { - let new = *ptr::to_unsafe_ptr(&self.data[pos]); + let new = replace(&mut self.data[pos], init()); while pos > start { let parent = (pos - 1) >> 1; @@ -183,35 +156,10 @@ pub impl PriorityQueue { } } - - #[cfg(not(stage0))] - priv fn siftdown_range(&mut self, mut pos: uint, end: uint) { - unsafe { - let start = pos; - let new = *ptr::to_unsafe_ptr(&self.data[pos]); - - let mut child = 2 * pos + 1; - while child < end { - let right = child + 1; - if right < end && !(self.data[child] > self.data[right]) { - child = right; - } - let x = replace(&mut self.data[child], uninit()); - move_val_init(&mut self.data[pos], x); - pos = child; - child = 2 * pos + 1; - } - - move_val_init(&mut self.data[pos], new); - self.siftup(start, pos); - } - } - - #[cfg(stage0)] priv fn siftdown_range(&mut self, mut pos: uint, end: uint) { unsafe { let start = pos; - let new = *ptr::to_unsafe_ptr(&self.data[pos]); + let new = replace(&mut self.data[pos], init()); let mut child = 2 * pos + 1; while child < end { From d0da21d4caec9a710efd0f8c967c0d6547c5b42d Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Mon, 13 May 2013 19:29:19 -0700 Subject: [PATCH 408/410] Upgrade libuv --- src/libuv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libuv b/src/libuv index 218ab86721eef..97ac7c087a0ca 160000 --- a/src/libuv +++ b/src/libuv @@ -1 +1 @@ -Subproject commit 218ab86721eefd7b7e97fa6d9f95a80a1fa8686c +Subproject commit 97ac7c087a0caf6b0f611b80e14f7fe3cb18bb27 From d204cfd739bfecb6252b54c5007a28559d0f9a73 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Tue, 14 May 2013 09:26:21 -0400 Subject: [PATCH 409/410] Issue #5967: Make rvalues mutable --- src/librustc/middle/borrowck/gather_loans/lifetime.rs | 10 +++++++++- src/librustc/middle/mem_categorization.rs | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/librustc/middle/borrowck/gather_loans/lifetime.rs b/src/librustc/middle/borrowck/gather_loans/lifetime.rs index 330d60a59d3ae..b0ddf2057d9dd 100644 --- a/src/librustc/middle/borrowck/gather_loans/lifetime.rs +++ b/src/librustc/middle/borrowck/gather_loans/lifetime.rs @@ -93,7 +93,7 @@ impl GuaranteeLifetimeContext { let omit_root = ( ptr_mutbl == m_imm && self.bccx.is_subregion_of(self.loan_region, base_scope) && - base.mutbl.is_immutable() && + self.is_rvalue_or_immutable(base) && !self.is_moved(base) ); @@ -168,6 +168,14 @@ impl GuaranteeLifetimeContext { } } + fn is_rvalue_or_immutable(&self, + cmt: mc::cmt) -> bool { + cmt.mutbl.is_immutable() || match cmt.guarantor().cat { + mc::cat_rvalue => true, + _ => false + } + } + fn check_root(&self, cmt_deref: mc::cmt, cmt_base: mc::cmt, diff --git a/src/librustc/middle/mem_categorization.rs b/src/librustc/middle/mem_categorization.rs index 95ed7fe8efcd5..91c0b8e61cc7b 100644 --- a/src/librustc/middle/mem_categorization.rs +++ b/src/librustc/middle/mem_categorization.rs @@ -551,7 +551,7 @@ pub impl mem_categorization_ctxt { id:elt.id(), span:elt.span(), cat:cat_rvalue, - mutbl:McImmutable, + mutbl:McDeclared, ty:expr_ty } } From 87398f31e5615bef744f2ac3f66c00b1a7d4959e Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Tue, 14 May 2013 09:28:58 -0400 Subject: [PATCH 410/410] Add explanatory comment to is_rvalue_or_immutable() --- src/librustc/middle/borrowck/gather_loans/lifetime.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/librustc/middle/borrowck/gather_loans/lifetime.rs b/src/librustc/middle/borrowck/gather_loans/lifetime.rs index b0ddf2057d9dd..e01a26a1281b0 100644 --- a/src/librustc/middle/borrowck/gather_loans/lifetime.rs +++ b/src/librustc/middle/borrowck/gather_loans/lifetime.rs @@ -170,6 +170,11 @@ impl GuaranteeLifetimeContext { fn is_rvalue_or_immutable(&self, cmt: mc::cmt) -> bool { + //! We can omit the root on an `@T` value if the location + //! that holds the box is either (1) an rvalue, in which case + //! is is in a non-user-accessible temporary, or (2) an immutable + //! lvalue. + cmt.mutbl.is_immutable() || match cmt.guarantor().cat { mc::cat_rvalue => true, _ => false

      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�$0dd+oH_)zuBcr7x&=R8E_7<;ygH? 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

    2wqaeW`3rm#8PC#izu28bd@H{UvT5{yg|Gt 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�$0dd+oH_)zuBcr7x&=R8E_7<;ygH? z8P7j|k!4axwA)=6!eU=En}VLqA}zxCsx`p5@FeRCDMbdSZh$kTFE#Tf7<7Jrzu@!+ z9dy%h?wz{BYD=q!95={!ZaW|eaOxR2{l(6~bN}QuPz{STFTJH|>-g;Lz)TKq7itaeTOU_c|*KLPP;Vf0XFn&{#=Qpb`+rfSM z;`IPi!G&Id3xBbL%H2yWgHd{&)Tge>;Nm8$&*S1NveMS`&mXc(72fUPIYNE-cY(V5 zCq@C?yf>(I1JpS|y$(#7_fRJ<^T}uUbvwc91-tc7E2)+Oe6_3E^~F{>qky0<=@n4> zOP6KX5x6R7sgvPP-O6BSsgwEusVOmhp*6^(r69#b`%&uo=l57f`RDuA1_P-#_D;w@ zzkI6PH0gpF$NVPVoDTZd=qH!NP&z}9p!e6;YSHRZQDkz!EQwuzxHYJ6;L~|YIGQ(F zF2{_f?Pc`WUqbuovb6rxuUsr<8)V*-wrt~nluhqJf0F7$lw*F~I}rdxIo1m!Vy_jM zl$uRDQbg>I@^NhAJbRH27y(3y9ScqyfzND^(*e}93cw~kl|VI7&Gx34LBjAuBRPR~UAjuYhpW!URh zOL7wuKmwMbUHw)G39wLUUijvc71%V*M&kXtTU4w0b?c6$r5qQxE6YAue0@lO*}Mq{ zfu8YWQTYD$LQ;)pD-}j-;Rymy(ko%BnVS$2z-L^m9C)>87;$qc2RwGhkO0@HkZ>Mc zfo}H^Zxs@tv#cqJg~}lTW~y?l%tt^=Ee>VymPajp0lJ%75VljwGvx1#zAk7jRAE-g;X%JU0uDvgjMq%Ze}j z8Q{L>GV(Cx)l6@ zl=&`u>G9HG2}Wq`x=q&h*%zxDxOhU6+T#gHcMy`2-1=Xak>bDb>%7V8PS#(ATkt zJWe_@rt>=U&GYW4$jNpXc?+!5K-hQXV^+fFRcMVEB zT}=Ug0PZoGsh)4DLbv8^nfYe7<@A=}7bG6s9JPF@tw)+Sw9$9FZ%-Zj{C3vzrKJ0o zFZVfX=9>q6Hlv>zZv=z(^-Duvb5&73l4?ek||mH}rA+2_Ccb>MWG_)gS5zv3>zIT`!>)ro*J zIA?e`{l&+F`vj>ewR%TGo2Rzt6c6sv8-Zw__11F@6lOiA8}%eTSD9l;7zg`&FMKpP z`~2q)R_Dd}rZh_W&tH5zxEnrGhPqB_2dOEjw~&4Qr@i3fC7Kx%S|*Mpy5U*sPz4u* zhKoD+byp+NCug6(tsqb%F8Wn|HXhs;ErU@&ozx3SP2u8s+vgwt8c@$1FbdG*%P7Fl z!m8$*-3ImN1oaK@`sD2MSIjXAkOo=bK7ZY%X|!~BwD^lR;9qPR3@vq1&mc90mP_<~ zkZ1o(A^E2%fCN_O3xzBKo?ik{G}QGUzpuUPeU)0bX$=kwE-_K5n@0WBM$@>+fAIos#w z+*-lICiSJ4URSLz&1scDo2?6;Ou|9^~J0Rr*43AaRttqyb1dm+SaN&CZjK%a|y+bt1rEa z)YP!>y!EAT^Z?N_{gcy|mcvJr)0a+vlR7Wz2u?ybt1o@z;xg2AQWuh%f_e+-OaJ+w z;Np=M>)i?KOXncbC#NqJE)u8_7j-nE4_Jor^rd;Erf~7R^`#rX4Af)aot(b(5qN!a z`qKMm83l~5FD+e}MoS%y=vd1zp1yPdsVTJlAJCUt@Q$6teun23KljM**3*~12g6TL zU-}`Is1#l&t}lIx53BX1)2KJ2FHO`QzwLij^aXE^@A5P3WWL03))0@zpWrzdg0jY) z{o};Xz5DZ!og8?oPSuX_bAQ)(WR?B>-fxRnwA`Z|spU|M8-m?tL(9x&X?7v3ZaIE# zbV5oRzfe=;1-{5Wie$lN^F=Ct?x8F?0BKw{kTV$mUKSL!0{SMS=lU3Vw6#H}7nu!n z34>TAey(s^F_vq9!&t6aG{*9t2^h;?&Dv=_WBF{PO*EE!fe?-5nwFZee5B$w((!Fk zU{(BF4Z3beNiFSvc;VvbYUs8Zqmh?9rnKlV@%XuZdGA?{oeQ>fL+dD|Vj4D^_U7&7 zU%N+b5Ea)8p?l(h2)4#vK1j$aoI{N)wO4*TAR&prN!f}zGbKBO$w z;d2FvQ1B+XcZnKBF(bJGK5}**V2F0;y|EHo-iwQUF%qJwv~DijJoI_3d7aXPJ8xcp z(f6Rqw0S*6$v@~rBp#hIuXjrRsgpA6k#*vQZu`xO{QG|!FZ9x@Thbm&w>>x{^1;Qq z#)<5FfWiR{|@fi&HbLlu$K^$>AiUx0X_ZJkEQOFZxT3yubxi5L3x z7c*Tl^8t0qM4ZTesSj(N$X@&x>!;Q-Lpl?Zf-^K2|6*)IRGHd;P z=If#dwpeghI5*Po2B{Yz5I0xIZ%A@@7&%Om$>Sk+4db45=2oTKN)3HSE2Ux)EyS8*XP##hBWr- zgj1sDpgu6q!M=mOCHqM@O#J+lO0)R5n|5psgGwQz-tNy+@0wVl{GsSnrMbg=-R(r4 zrF=i*wCX!@a}wnXiXZw{4Fle!=G*cXm7o9pN--x&{@x) zEdtMVqWhtLbX^4xo3yun>9T5j>yQ3jqr+tFt;bT1`^pV;_=MJ{_xieqlnL2eU)j86 z?X6cOwEX@z+K|`|shN1!jrcJvJ!pgs=aroUk4?nhs@+Mcd9)uh{X*yD*QfvT8QOR# zv<-F_#Ww1OXK`_@z4cD`b#m*|x4aq@jB9Vb>)Z@DTgcuzRdD9^wZ51Y;nYo#egRHt z(81pNi?0dJ$=F-}@ga&E*WUU|Qd8abyzQ+A7l7!}uUgMFM2K{wo}}k0YqDd^&BFS0 zlL7T-y|CpiB|(i<-U73IDKekBKkuf_i#EnO7S(MkP}fOyAIw0#h3u{Wekr*4!0WAd zCv0#12UI^fd+V+MQ^7?Yd+RfVZw(YsC-vu~rYPWf+gs=4fx6>bqksvoPj6#TYpL2( zKzCgV7`C_mys|&;ViaHld0qdp7a7!%L^||o_CT}Wo?S*uozy!?O`+xgfW38+>(i%} z0Dsc!(~tHbeQVaI-wDG{(B68~x(r?y`!4O2sMxgs*iL*{ZEyY4S2Ei7=KaU6y}F_& zY(ahL@q+0~AG+cB=}WCqU+UU@Bh*`~FFoh=>8rj}!9#t0sZY{2X*_#XwZ3%KUJ_{a z^d;BE8xbz}xxo&7r)R&g<7>oypSj*4R3%^yv=j@aK zPHmQRXAo*BC0`a>Hs9>Y`;XmuF>Txt+6MB4lw@txjTpS5FU{vo@E_~?Pa$|R{$ner zOW@k_REtW^`j377%nUe(_`0nZUO@k`Ut9#7GxoH;m`N1|r*42#Gs2)RHS;F;kA3sY zf^#>$uwwcE>B!d2uitQU0v|*n_9*l|fx6wV%`! z)LY1Z?Adm3anNh6cL!;r;X*gyVtz(<9N=Z}AG;T-pPc_#=`?{Fana{-;V<5Q>~70o zxTuqQ6R9a&Ja7N8Z3XqhZleIHJqERIfLaEFy8dGiBEKi+Kem1cqky0SXw~WiYhVN$nyvg_i$={$or2U-*xG=?nC**Po>N1pl!YBLF7oKel~;2G5H; zp-9kfMt^$nd(cvq|Jb*$s?wiiZxP33)@v-_5yqvI|JaFFR`iEi-hV7-;>Ns*vFgoM zgW|Haa+v>^&r|jv^W#V~an|=AdkNzgvTa=dv3;JDf-;Nd=}#+R+jWVTQVL1~ZP~p4 zm=7_9ja5cdylj%jpFUAt^evyWqI<~HGm&*{`Hy|s*0J#)JBGFF5j8S+gS~}jUAjuY zavwX8tK7$Q#eM9)(p?CGtoxV@gO{$-ug@Ob#{w3^Qh58O-N!cAIH^|Hn)pbK1DQIm zvL-HZL2pX>Vg>Fbw?}(a z|CEZ5YoTyk6CbK9KrQ{8sJzO7%!cO%$^rdl2Qt~zC~LM_SfJmZg9BL;MVQphU~=LP zWL>jVxvhyiYt1sDbwsyiAF>9XHnkvpY_nIes0ktdSlqNSbze4^SQRp}et5;u+5PssBvVnhd_Wg}X zMb5T^%`If#KVXH;SAW3L&hxSFA0OwdkH35)+*mtbea`-8#m`jmu*v!AZ6B$guNHTf zLYW#4%Km4buIkTM&!-%>{xXSso2D8o^cZQ>o39>rg{0er=Bsm>w(NX$%`#g4XC}q8 zd^ruamg@#2)S0h-=5n=s^Yhi!3Z=w0>Q6B~umuhC6UnQm4s8}~Vk2_!84Vf~z`Rc)hH>lvE&Wv;y%P`)2^&c!g zrx^En&sR@852$>iO!{)SKEJuz7p`EtgdEhApT+{pEbqpFVNf^V6T+ zAN8l}x7`SB*XmEt+1`KS#T7hM=}$%1O4G<0jZHV{QPTkPXfzrpUor65)lRNlzM_M~|>)WX$at@}Z0QvGc47SnQ z9r!Qy>M{SdM))uY1>1D&j-c8y7~ipy>=^Chejbd0EEsCGkJ04;(yk)Em%AJaua_(l zvM-+vWDjp=Js@4yAPY)uU+JR;SvT*)BFuT8Ru6ckmKjdmvYLjhK#dVPcg4GCO&Kh) zIK88bJ0J2ZgLR1#Lhqd9L*?~l!BU$ARt%N5oaYF`BOd^Uy(y30S;BjRK{w#MxA+yP z&%jvB8;ooGy03pqVCdF&kdnslAYZp>rS7tSsGsBsVR3a(K^E%ULh#L4=X%=o7&~&l zPt?V&yeI{+)Yb^`VvDB7bRMFc?+b zdhw3k27%!-r^z*f2XcMgw#VMx@Qn2{IA1%e@u{%dU%Kp)U+4Odsj*h6YgS566 zzZDTAeH2Nh_FOA2wA&!5cv(XO>{*QGnXEs8^fc5d`naJwEhPsoRazM%{i+4=rWTz2 z$rMKXP7{xjV`M|N!_m|9A#l_5(aUoL|7T|c{_d0q_&vP$vdliPCC}m`5d+=4M56KQ z{!?6Ow;lsZs=`2o9^Cut{dSX!$Babik~*=9=||UfI7N+vtP85sQph?*X=P-2HP$c4 zyzLVyWO@D6BkSL^vpj5P%}|i=<0;5DJVQ0yS z5YIp(i;~n2W(KBdkpkO}GUbsht%Ep2EVgW`MqrfE9&~sG-5f7j`D$mrD(?2QwMKbK zaX*3=(Ht}OwmSQ>SAMLbCk@beOr4t529VP`wPVQ4@^P$Xdm=hh9-P@Zd6IZKtg%h+ zbmC>V;nZ(3=2d?#IY7<8t~X$Wn85Y6JZ(qeb-06p1q>c<7}TVa^?QEZ1L7pRS`bbh-0b;sJBnuXosjPLd6(`l=?I*50P4&o zQ%_Uj31^jYh$pwW1GEjtgGaflD>|(!*np38@}0~vB>6Vq58=d75gz@~F)x4jy!?Ic z_dowNYcKDmW}M5gyJU~v7*j?3rQqFfc?I54k^t1hYr*_Vuk@#!DaF>uJQ5(O*8rep z6o5KF&toQ#qhQV92;|n9kBJCQ25ryKY^gRE0XwG+V8U^Gvac_s#qLK?6qGXGfZ!wD z@O?b{U9`cuSIT+b3elKu?Km{Q8l$60Fm|UlPPi|U1p-4&TG0n}wdmUu`IfF2A@8u? zj6a*#OFv;Wky|rOc;b&PB8%2bmi2fSO`TN}H`njaCqOR2;ywcd1A3$-iSaZhNb-g)^AtWM~TM$NDn>+l!Q-P~sh<;Z{A+Mz6aN$5oCr^<8)x(~hs z;(0huVl(^_k&>dHjmrZ4%%>e=b`WfnD1~EqHncPu1~(WYOOIQTnet)_QsrG6%j1}~ zKH;B3j>9^##D>Ku*JSp1%9Ng7Z4 zWDAu+rSPMU!lB~_0Aq-E1H2pb?;3A9-Lm!Zs^3n&U}y;MQNNKXzDJkq@0D*$AT>J8e2?oVTHRUjD|9 z(6Bt~;RXI_^lzZb%<6UvpU2la`^qFdgq*-;VE=TIZ`BV8y~3#<<)>aN6-<)DydT*t zC6s&d*X@>)AM!pzC~j@fCl?AwMoX z{>39QL(dCog#J?ayYIshfBt-DTCagLbLPDu8f9o00-6DNoIuC;L-9{a10yq|GmOu< zzB}k7;x@zz*I@^7HI&vwPOa0Qb@Ye1<@T(6YJl$%6e7qVg~LjER*ew3sfBQv&nn#k zVQQyLBg6|Y&*dM?t-PyQ#jU(ct;!XSY4(8XxJXUG?{e>xLEMG`0Nq-&A>pgRT>@K! zoMf4n!8rM}@kEh~9~s%Azy@;DpIIF~IEJ@v|69Y-C+MU^RA7keVbsW}vDyd_#tpFP zJpzYq+W{U@I$P6^&56!YlX9YKP(?*n;czcGXqnU?FrcAey?c*_COc5dI~U?gTXi61 zh8`j#rs!eal1L9xzAbA92R;7*XwitU8*iA<$*1=wic8otT zuAoWdc8ko=*YznBlqw=Z%$k8Oyu+g{kKm1onfjQ%ycrEbXy}{!1$sMpFqoZ{F{KDNPN+o&R5Hq z3KZJ_yWHBNj?C^ye&8UJ)3Mo0Qq7*c|JDI&<0bT|=#Y{;9r_|gPPP79jn>TL$l{y1 z&@xxM0Co5xa$MX-2MYZ9uAVX4_)9qdD+|t{{=-f#FX;JS#{*}_)7BTWDBIxF4RDJO zYW=rf1#?c$f9sGr0*+~6VeJf+Ty_2zsj1by9ev#f=W~iL`tb!oboU3X=cHK}M7mK= z0#RN6t=xG6>d%_r8;yHH@AxAuQhofig$wNCl7@v;t^U52_&>P%8oPE}Cl@>>LI#D!jg3x5gce^~~jfI6wWk($DVx2kzu zTwzwVFvCmB=wSn*GKTc>9HGA8SfCy}+bE#gu%>~!vLCsduYzIiFnB#0)&#YZ1a%tR ztU>Kfj~fLnq(msYL;17rS%)5|R}n3BGVEa)3@vq18%a%}nDqHyXG6y|{#&1h;iElH-52a}B3d|27Nznu=d*3I*IS5T>DjmJs~rv)d9sNjv8n+dAWErWhO z&agCPSTNw;AxjHdx|i@qw1^Tru%Q>#7u^uamuQm|-!ACk8@=wvrlwck=x5dmrUJ{A zNqVJB3&~q`JO{TOX!MMpeIrOPII-|cY_T8H9*C}Vje!cjqMIf-Bv*Km!xcH7m zW{>DsALNq8{W(Y~yX$+W_e)~goM)u|yttX_D)VAZvK$`_2RMeLb?nQGbNljb zH@Odf03^2EWEM3uLk!pimoFoHKk|-TP}hoqL(xOsd-$XlUygeC%H!*Y8er4-N|kp3 zpgUinnBvDRwH z1llx9Y-tzk^p$rg$qb`XJq!-npDd@hKZ&_Yzv7*4>e!#QDpeoNe8e#}gZuAuYz8;X zZ0tE5&3vVw!S%Rjo*WftS^dn0SFRILYu1r8es;BpbiQ8jC;B??bR$wkY?w7kvohli z#X+2#*;HXN!B4{DXnoI-jMm%y-gFc(xydKvc1GW@sY1-mF)sYNFT*87rqc@zoPOIp z79DOw;WJ6YaH@;@KD}hSP}W1g#diJ{y8n})7KM?V8|A(5YBuJn=#W#@$8KzXX`{mE2Q$$Ec!7Y&J;{N!) z6eMAL$P86`5cySq77{Nfn?kujy+m0GeiaNJF239Jm9X%?!JSQ8MgB(rInpxYS3d$? zf2r~7m5U)WX$a*neNKoz?i9x=KJVD##Pf*p|KZl#~fU|eSf35M-_{BZ!qYFmZkRNEaVMVCw|>7 z28M1u7)q)FBgNRhZhtt{zlPOMwjU>_k1|t!2+B>{M{gs0a*r}yJDQ)=)_o-TnD_IZn& zlvIU;%zm5$_a?ofF=YCA7p0Yn!g*<7+JAaK&M0q!m-3q=0)m&a2@Ick97gnYd*7d(9x z>gSm=$H&HYN-JZ-X1awgUEJ^Aox;Zb)*6qE?z;PN1ihyL-!=`Hp0CT+fN9(#G19AA5N~S1qbH{@a-CK0G4d(RNow}v2;8(B=;k?s|MqtP{^gVh_?^7>vdliP z0k*Oqr-PSBG=AOol0$YIB%0+PPgeWtZN}^Vr0A8Vo2*@~j|!{(rOPgmNTYyGGfWCu z#eb_xOCjsWN-L9(O@#eXknZM_QpnOamMAn&G;OGk8X^363i3^lYJ?wXm?UNQ<1CVr zQQ41UkI5>?nYVWFD|OP-P2b5SQ@`(R20?dQsH{ocd)ut1vNj}b$Nktu*Q!Odi~gx# zC-M8t*au-P?(+Iiq@O2GBD>$ivygPeIKS>#$rif}V%$Eh-NTb-6v7aL1h73k^DUd- zSi6ZmJje1?(f!pR7&1oO;2NpXw5-ZcWz3myde#U@OfXE93mZ+MgR+ur zp5YT)N6n!)mrTD`2T0wv(2s6l(5TuvhS^ZCqX_F^LFGRrVZwq6(RCeTaz~zL;xv207x;jl>M9FCMRn^VXdCwQhzaHjXRfdD}{wOD2JcjlooAf0{sbw z^ECa6Cn9oZtI`y0r;QQ+fSZah7Ci;$Vz!2fuOmfe=&4s&=PyN1ryf_Kryi1+9`}IC zZf4J&rCnKB)JwBe@LFrSwg&20bkvNmGX3u0!}gLwtNJ}M?G!K)kWW@d8k9&vt(w(p zMW;DrAH}k?1$n2t--#A2ia-msMhs|vZmXF_p-T*v3UjNDul3{nhsLh~(WWzNK-)G=xt`?>x4#qj6coe!1wtIStd_&t47kTY>lAH)*Gf-TjJrcJQ>yvF*5EGx9a zD6!#+C#Y{~%@AgOK#*;HJ%a3y$C@A$KO33ohL%EY{FDA$mNyeJN6fa*jnktRaLB<_ z^HEL1QG{bPx}lo((mPF@Kng&-8^3OQT8$R07q)PuByx5FNho}p-k{AY_r5g0_y=QN zq*X>=pJg9bG}k7cW1D&pqD@ajK(wiW_XfId0>72cv}TP_F!2cab;}twSkKZ6zn-N! z)vStCiP8p@P<6Z0?v*|gTkZ4#yTDc0N2$3u$6nM?5!BG2WZGR+5j^;9V>Gr>saag3 znA`JJu+)nfP17tj(e?JLj;ip}CfD1~o+CqqNgI)lnFEPF#?Z?+Tq4Na9!=;Jwd z!XA|4K76!wLND*F6LdpSb=KSeikzL`dVBHiExX=+)@)jS-NQ!G?Xl&$q2+KKDC_`N*wV%`!)Q{==a9HCDxZeKk{@~&uJAk1kvd8=k zE;OAA>+SbK^^;p~FYPQ)BQE+qF8sx>x8H3Ui~{PU-b88&7tedWeOp1jaGp^>4~;Pj z&tSUK^ph4eHPF>mEdYPj0<^{hdYu3pL8rU2ngCr!-nR)PU@Q{I@NGp`}i0 z7pW<Azn+A}XK)(z* z$k9@FDCuP8J<*_{c}tjCG94v!{P|> zrDMXaz&eg~Q!v18WUL3;Gs>*5e_kFZg4X`I&#E5uz0yVH*8BA&kz{5)X|{^vF9pYs zS|c1QpPEH-SV(2_fHA!H-zxo^!L{-ZP)2TLNbCq|xnfE3D@oWh<=Z9sdA11l$8$b(jVCW7ZkB`Nu8(m8nzrEzCj4 z+wHpV9u*B+{UA2I!n$vF^)lJ^5G*A#gW%ufr!*~w1ykdr=6co}kInIR^>YDfDZ zY2s3RvAQx&&RUw)=@c^Ca#ZweNwC=3+xDfkFQG{49E{sl~!1TM|l(0^$Lfp z!G2w@ozj&Q8(f)sq~<%S-ktwL4JX0=V;*_TcSiWseHv0s!xI+&1dpw@sukIJgO|Xt zOgOV9Yzz0BRk$HxyN8zOxM=O>n;Rx3yb#zH`CrY58|Fot@DB;(0LKMD`aids${2 zTjHs#lS^^(^PLCwp^baK!>~KC`Ofv?GFyN2)3SyCA9?QrSXWW)ai>5r2&F|Rw>*@f zhyhWHJPa>My+ltT(Sj5Uh!zDcqF97_gHlbc(Hsuj8y?Z1fGo>oTc>q$aT5LiWzgT4-^s%<2g{_-*d5M2kTX2=>myaD8R=&Ocr$RAX9{v1op4 z878xLZY4EAi_Nxoc6$R@FFD#cV9NH+lgRJN?495A83!!VXj9hSd3?JhS=u~{_@G09 zyWKKOX75}}YJx2P0``uaVJonA&b<%%ptwK^#7;>Qh@yUVS3F5XvTTRF#p;3k>D$RZ z!N2$oboeRSJ8$`5impqn5;I^nVekCy0~76?d+Upuf>)}iy54ZX;U#@xORhIe^iTZW zex^Mibc|`w#r20+YbL}(Vl_2fL>YFN`2`1W3rVZ)>i61nmpkQWqcqmUg@H^o{b_C= zO8Y0?bA-C3&2DwR1nt?|5T>ce`sf>9M{obg9VX+XT-yky2dXLKpZMb2#VAwtPuvr5 zZLw_g{S#Nd7C3)HtHbi9s!Gw;gSvp=p5UMOUIX<7`hs_*^jhpj{S)7QlVno7+-r(< z@J~E}nv0l77pJ4nQME6Rf8t$7g?=FZucJ$)?8!kULiCrgCogzgiU0da_FGnYz--j! z)UdBDntt5gC2slSIKUX@)z^T)|BH;ILzoTEzJ1Dt7AodxrKPP9`oxS zI8uC~N3YH)NgS1!VQ0uwh3?KDrS#=y%V|ePUP~Hm!6dNbL$flx$1q;I7cf3co6>Og#QR?8i!|=`dSo3jI12OYmZ@vmqX$z- z6AA3=^ap>R{zEah4VSgboU^0C87K7SKD|{6oqeo0kIs#DB37BTF=5~v!q*d2n7A!! zU|Dq&a>aPAehqkz$uymKfpkJ&uI7_$v<<&5QpdALkEfD+b69PO7NN*7dXBqcnvgR* z^$wms=&;nUkeW~np7q1mQcBIQGoL%}y`EaU6b8wbb9@wIRCqNQ9e${_+z9d3a(V!q zw7xt{WH!2wU)M)J%GskwN=XwN&sS?3)Z8^cP~*iq;-K>9dVSEL!2JaA7O*ap+DU2x z>pQGI-?~GS?Zu#tME%fMVp`_5j(hbuM+^H|_+VEn67K(xvKIpIv-?I$H0cBDzCN)6|P1ggT zaljp#agODG(*3#5GL`yn8}BjJ`8~k8?qK797UB(SJy2>!Sg)ZU*rZM~k*q@U>wZFC z$0}EZUxl>%}C9fqmkA+y-p&&CIG z2a(-t*z%>rcZ6T}^F!3&dh`wM-Rv~1OxVHq%k;^&8LPxvViOwn<$Rcb_Bq2t{Hzs) zbE$XSe6@siO26o&ef5{nFLrxNNxx`M+9e%he9bu-B6)EepK|z(5jr%++JPzd#$0_h zGuE0^W@27v>@<<;Z%B6c?kxChzh1;Pys(s0{HU9cddSR-p85x8J7k->+*SS~7!hXF zJ;)tvS{|L&!buogaZ1LQK_R2FFCxDL68SmvX!>)nHkG}l&Q$gmEnb8}AzHvh^POnz zZ9HnIrNI{~@P}=A^*!uX_KIQH-{jAsA)EU6i3m}S9@3-B{#d?4nP~c4u8vCYfqT_l zKfRl4;_ORnCW@m zM<`CwT>HEY{N1ldu6_0zGlF7{;jh&d-F;0K-;d+Vr^#uDtf5T!Y0giVzSZ2iht8v)i3qv zx2964QYlbEiP6Vs75nroe~ZRZ@A8|o4WIaTwW*x#D2Hzaa6ntodbDR5zMf$I99eRT zids_gXG9!AOt*b&$Tag9BXiguhK!Md!#+rHPrb>IQH3q~$a{10Hdi%y0|}}+OIz!1 z25Pzg8BfIbSdZi%l3+aL?yJu3R~FSbr5{Gqk6J$7V&Cfkb@`Wbz3YOV z(Kl|ArRtkq?HU@s+U!6zH*nbm?@jR-t|Ud^qGCF<*H(g z^Z-WE14}mRm~?kLM8}QMk1AX5di+~zyx4ws8hO+HeSaG*VqGS6nA8N;k9(7#9We7R zqkrFCGoZyOH(KisQH61_9-zg76fFjc4C`I%;rhzfyS6t}V_KMvn?6tHPxz1r4k(j) zH>n9)+?1fjOFBlKtLkSZl(-{SEnD*?QMwR~iQ_qQvs+ zUC%z1wBOqVK-$0WUdvz|qfBZqsR^=t(Ia3i@_*F7Z>d@1TiUlgXyuPR@c!eS5|28Z|lD~uOe5o< z;4l{Nk5f`Oncx;KJxVVceRFT|c6?q=IeW8SC5O!=I+3)r9OX~Y!A#+l5gm9L>9|In z)Wi8A_}8IJw}i8EBp`_D!U7-Vv>f)c9rd&Uyu8QuvPG+5!TUi=2`q)MbVH4UL6Iqa7gEVhV4<>BG%e}epBIy!f`3& zm~qhr&RcCCV(tWHZ*<~zOvu&(0xGgYcDf6@S!rP{gJT|UF8r7yx1XZLZPf5g+5k6j zZnO>>wG&R4Q`&MCE*G|QxoMWU1b>PW$ESKfM)z7(5lk!F_Y^X$b$|Ff{kW>|DVs>G zhb&p!<>)@~TJeJ4@QBS48vw>+CEL~}l43k^c^h5^6I07>F@PgIDIq?CUHs+_qIB?? zq@Z_D5C@aKCY3%|BG~q##)zFbt@V@?Z`6{ezeHcZc8{1hR<5ss0Y~jP=^FEKg(<5u zt(^MaIOZ(+UfTB$(T?2%U5wL>&H z;VsdT$?jBK$E)Q%wz7V|HM+zBdzvm$Bm8Npa3DFh`N_t-bBO28U4C5;(w#eZ711Q- zRT6+T6C{`uz0t%~SBDu|2_BuLLjIFNnAnqGqo)Dz!Z!7-fp^rXd9}W0r5;WnTdJoV zdBUm3c7jFNfvowtMV20#daawu_jKx+2@#j#AFF^o2_AlQPKk%-(Agz^obmA-<6|dI zfqO?8ZZzu*G|rBT=cG0}E`GtR!fz7tRQ9xn+|+ziCo`P-OVoQ-vECKy+cg2Y9Zv6h zD6WV1gGDBqe#BPeTl*~RSD@;iXiwWG*^)ioM-g#L|7992{f^zOrF)3CmevDB#r~t+ zyt2y0uUm)QXO&A4w%(&8u~@p9RiRsTS<0U7vYa-(nSahNEO(VR`@>ADx2FyE;(EB$ zz!>tw1o`>j7Sc9#X^^*hc;fZ&7GA?j{tgED#FcznF0~$h$m1#fvpE5FecAPJ!IWH8 zUCMh5V@DM*K2Dng;}YTxMm>by5$x&3#Bi28zwS&r9cRfa!U(LSi3Ij_`rCq!zZ4R9 zJ9B|D=X!l$7Yw_P{2_%-qZQ{{;oQmA!-at`%0<4O(BJ$7_=+_(uq>Udo?J1W-`_C5 z%DFCUi#p;BPdx~4I%B|dE-~SrsO1Rg_?{^GdaIIzCzYyqC;5pfY!cl!AG6`EjiF8N z;OPT@Bh=?eO_&XPT5%rF>}2cV!XVjlvv`j&`rV6QwEw?Z%T*I^80i6wB%(_8bQO`| zW~grZQG7F$kW$jb#`D$s8=)?5SL4MtaydK`K_~Lr_2t~!T`1L=b#Vcj`XIqDfH(Ka{_XR0h$jHt{ck}DMxtnOA zN6*Mg3JomroNnNLeeu%~p&HXdQP9E%9hTwimcb0iGN~7mnxMt4R-fm9FC#!{4#Aoh zIU|;-BpG{nkFkE}1+cE2Z5+@|ykV^eu+9kUHS_};3A>2o{BC~Tb@X-S8x>*QS4k5& zz*lR>*SJf+VjK{Ltajzk_4=SgfxG6BBw5O2SZNuIEM-#9BsD>niwz)8mZe${ooqe4 z$1-X?+(SF*dU#~_ra%-MpZ$eS^Og4ANVEd0Sm$bGd+lrD$6tDIDf!QwKb7H zKQyv6Iq{r0v*;x^#GAX@Drjv1NZO^O*M^OCIlI{kBXiK0J=T~%@yZsyD2!|>-_ z)n*fY7~sV^z)5hb`#bhrf|yH7#N31ty@n6-2aXvY>YnJc?kehyRfLp2vIyk#m(UB2 zpH6Q@8by&*$lXN6U13~Aq2$4) zTt?xLW0o7ijt1PFK0kHXph>~AW@Ze}iuJPcHf_)U=|kh~`MY;g-};xb=XE&c398g{L?rQ})Ip zE7Mfu{2Q1;fNbzta+y(Jc}2(rtP#}w63~JmI1ok|vc!Q z1U-BXF_`ZBy1ydGG2Inm3X76x)o})$uhZ^Fb&s}6VKH^1TA6dbKIl;3{`No$oo%c* z-wIco`4pU!k_}O7nGhXDZ^-WL`?xJ?d|Qk$*v4&f)L+1}`EoI!>CuMgs2`0bc>|u# z26?SAxfzD19zC8)5}s5#(cX}5>ka^ufT!uYxn3XmGah$L<9VMI=kZ+S?J64qQVb^y zk}WsLdyLW9e+HvlUTH1YPrPBI2Qbv=QL;Dshztii*6paq)5?)YN=XwN&sW z;RD-qny)3!n&`LCUStUwlzbdd+isD14I)nX+?px4>~Nv!S^P~ zQYORBmchtUCiSnsNs;9k1IUxb4#Jqs-dJK8Wp8+B%iA0A)M6dEW5UgS8p53|Lz=lz z;*D^6;C&Wo7EUoMt(F)T^Z9jEjCw5QE5fLzq`)gu*b=l%>_Y#>mC z!K@^MxugZgD;#t+)$QKaGPEIIYYpwU7!A}*mNFDZf+drkmWg75dNV9|PX^CMZ@6W9 z$4oxk0q4Nv^cHDBrDIr+-lD5lxxxC1I@*V71|fYWM*vhk_+a#5QSc_${XHREGEnfH=e69BZ4O z=3R~#Sp5U;MfzfFpGlt*HYt6o%zXpbZ&lK#{C>W0>}7{W8E%MMLV$;^#H8t3%4E8h z3mU&P5BxM{z(K?6YT zLJwMA(KMH({^3_95h!PQA4`_9kKDJZpm6ATl>HSEU}$8@WM@(zc)kaG2i#xi0QsvS zmtZ%i;Nh8<#(vYiM6${;p+L>b+gfRSvZW42;l32E=H+k{ovA4zijQcN8VhVcoNLuk z96V%AO-Q);b~GDyhd1Wlfh#fAh=~~rs8)P-wffR|2l2I}Pw=9({w3#O> z?&+$nR7~nh+TY&I=gG9OQqi}OmS10V)J@rMPRz_-!fu(jp|0xog_-OV92Yb~62izD zrMMQq#G1kumkYY)S(#+e#XSOEwN3~sqqgE_{nM}bE#g}{ibfA*?7ZUPoqwyYr)E~6 z!{r`OY!G@36PG-^^XR9JR<=zZ-dTk=|GYl^!XnO9f3e)*oyTmW=9QuA$AQp^QDmFO z5?#}M;;wicE*;)^0N;YQp_N=nj7Oy>|H!Dcch*MIdJ#dn^#Js3Al8=F>^zN2+Dsie zGEz?d3bMPeHyLaOprv`={A@ zXo-$Xd5`J%UdnObe$nW-#COt-*~|MP6sBk|@76r2y}bX+VJ~0t1d!kNCC^MTS1M0+spq=YNFYa_VTSS#a=$*4`6iBKdj|sCYz|z0~ju*`osddbrHf=Az z1;O!yX0ew&#rlWF{NddI0N;uwKKEZ_3dk!&*kN+t#qwqi1U+A(Y2WcXe8< zx0nC?DdPY?W|p&;w=t|^7Rl(-v_buc+lyo=llpT~6J$BYS8Xiv9W7gKroAjxF%#(; zHh*2ifGL~xkcOt5W6Wnq!0}e&-)33RS_dHUAoQz8AoX@DjKSs-Z=}|P#0eElw6L$D zXHL<=zAk;zZB2pz-$vWdL}4GM-!eO83ww9LeAaWu9b6>+wr@ z%|;*Rmm93rs(RGT2f_Q)@8nJC%SZKFKP1cYVXRbBF<%&~t17&8yisXOLC9y_q=|)^ zsg5nw<53RtM|ul&#qv?1Jo9V)`%F8s>inOg^^IoUM4BuC8BHyz#j*!8YyP+mYqRaP zY#Z-T^@Bq=TC+o#`M zdEg!Bb^tK|{}?QoqRR*2L=$lIE;Lhb8DWrWH>au#TT|}X zT+Opk%l=EURns6gZ&y+EMic6E_uM9lsD(bY`ZOMgGTC|6dB)O74a6(?CjUn|)kOX( zV;}DQOo_in4AIK%!{C{W|Eey76idnf=`S0+WCTa`lR7+-fg zLH?A<{5OSxZwOyc&`smLsWm1K?RNSY&;Pj}JZt~M+F~wW8=iUqPmP3OJ++pY`20`0 zZe{x+ABK$so^w<(v!53D{gAhjnoxsfU{kl@`6<7$C^*vnqRujv`b9PGF-Cg`qmTWM zwOkePhLIj9Rl{n@CK{t#hy9R_epK0h$ooE`#*3AIC!H_7AM(kYi&&RQ9V9h@wao1p z>kGY2Bv{i}3rpX+9{<=rgn$YE&0&g)X)*IYXmRW^YuzE@jTU;KE)C!%S_~2ypZ^Kh zSGFJWA3qVQF)jL3etJLTZ!Lo@9F|GFmDB_+WTnTnSUQ>irmz$(;=bF>dyMsN_k#73 zf^k3>@rJb?C{;>L$v*5PG8Z7M&#-SP3>Bw5O2xZN@s zS<0kdOKO5FU-SrA$FTbVC$kSl3avi+J1LnT_v5tpNSo4mMp1CQOc{oWV~qwZJ>kkZ zCJu~dXxu|fsxr>?3mRczkmF~SC4Jw)4-rRgtt$byP<4@oZLLg-#k(DwNeGUb^Xbl0 zbksaPeX#D*64f^0s5yrZ^O-S&Qbd+j^Vjvks)=Wd$K5X<8&L`S=ISSd9x(4D-DuEd zBG>lDK^gVw!pw^ro(}i8ojUIW!GUuy6Z!rVHMHP2_EkRPGJ~fYqlHheYj}zkperQ> z=jZll%AJQ!ugeUUVX@fd258f#jS#1ULBeLnE4}nMtqb?gZkD@xFs(2HiWeJrot9T` zNxAF(@#2P-!Bi2$jxUcKt_ImgZ4X()7ueQ?X_udD6`@@GF`qiPEk8svHa@_7GI zGp|8^z1W%XQiS<$D2bdC);D^8kdpUHEt^+_D%W3U3&u0xZK%7Lk_<*YgdQLCx<$l< zV?&?#qrj|0f4%244S+U$WmIxne|_@C6gpc-e|^(k8tXr9Z80~-QxD)-UVr^30=hE& zbx$yvTz`G>`zbs(TYo+E7hv?g$12lbYYnMqHDVf%joGj_-uS5Vba5oQUEZ(8i*+_d zjniNE1+Rd0nbhhu)>}w_eb1fH;-ZgP>rPpJ-4mHonf`jj4M|0<&(p#O{=Tl=EyHB` z>kI#t;(*Q8Ur!zc>+X@t^w)jq>y_!RuR6szU~>I+AMh%%NSh~%5B&M{TU&<7^w%f8 zmm`pjRoCuA!6YnJXjMg8>>wC9A@KXv_e5g(4%Uk{<)lImtpo6?6K z{ar~9Xfb+hk^K>`zsvNY8=u%bedx`xK6L-$QF!%b)Q2AWZHW#W)rbD;j`8}?LuX20 zRjLntm~z~Y9-gW`bSUy+iu%xgCv91M==$4%{Bc>sQ<~4a@Db|_j71yQhpxRYB|kP# zADS*0PlUIptPkD)-vYA|eQ3>z5~!2uLl0b=LT3xMGNc0i_7rVqUlWJR9eBPP;roTS*+s)HokBarz*(Z%6TPEtS z(_ZR)-fly2yG?eUP@e|+XnJAQc>Q&^Q#HU;s=t1Ra@?PxJ{r~(=JP&%zeK>4=JU=v zZp-Sg`92`uN7nF^^w(SOGvQTKn3{_UQ`%qoiEpGOmt}jY^LY(|@p9U9%KGbU1G5tS zb=t8S04LL5cTJg23=zW=aEWaLIss6gtK&%Iu{;K8WroO^p%+fzg;0p)i^M@9j z6F6Q0_;>G%dOVc!7sxf&(U|>w;60oHE-LJA&tnm)r)pi8WdkoVu z?ceOtP2#)ajuO60g)2CN0zA2g=ShF&lHrUp24+o;1A65HkoJ}6;p1*T?g}{L^c~|o zN)oOWa6`_{{u&~Lu1&P25biXD{|J-CHkT0YE+O0{gwHXA!|_U|7corncjrX>uD(6S z54(e8KxqfcHmYwayvCogq?L24)95X-PPZ~MibCbDB-=g*JwOO~aux48J@tn1_82F$O=6FssE|_ff@|kJ_JZ4)a@>dD zHi~W|-aG*G0L^3n3OOx=Q&OKqPEPT@(}#{q*<;OCroU+KRemF8SK4t=U^}xIF?u7eJTM_)_wz(!igh0Mdf8Xi3M@peH zb*xq;r|&!cQj|hR1`u^GCCFbqnSZb_@D1VX3Fg8^?mPYE_25~J0Z!So_}cK)1Mdm{ zifUrQeWzC<&?~#|^wx`umdTj6Onl()JH3k3gxaY&{TR<{Ci4%T6Yz|^LuK&9E%%RZ zFgkXPwcH5thLIj9burz#08(1ANvP~o;KIyS0r;Nrp43Wg%qegEZ)}oVJIPwVufw3 z-<8zzn@ScD5suG#u3yc0q9V*;N=XciIOR<^`gOy9r|7)Ea+;vsgh%l@KFserrgpdN z@+kfe^`@(n99o( z9oXMpN;pC}LvH4`;6N$Ya0^G`_`QkY3-2-B$}SPs6K{~~0mx&2>7~4~Z<}BDe)BPzV;G;f3K$QD*TH-d@dl$Fco)kAf9VCpa340mu9rT?c3VXlm`W0u zX@$VoX(ocZdae`#8_w&MIoIoh4h8NfD^lnjX~lVT&Y4V~Uu>BWol%QD#rk}Y-d3!s zvHlv(rDi= z9$*5Vvy?g4>w^vj?pLHH)RrBrIFIL-Ce!DIL9*qlc#ko9qcHkRueID*5P7Y70Hd@% zKT0G=rSa>==tmrtrU+|1B~5HRUu~<51NZow)p)T!Z}vj2*9Ue^zWdwfi&&RQ9VRt_ z^}|-5$GUwoeO_4lZsq}r_4yvf7tc=}qNtb_dwmmHoPv1{?t{cz>*|4bjguwYrk}`c zq^lC#dbmDkkDeAv3Jtu7Z_*9iqc65MRAX8wiZ=E^hh_NF=Zdr_lX^F)30mA>^?6!+ zaWZ{=$TF2AV;Ao+*86<}tebyq9MDO;VXX(S&Is!@^aDE`qMb;t&F0tr4f)Nr*@`d@ zP|`#W@YULF1MaZ{i~~dyPC9B){#>sQ?9u`E>~diplch|Cdo6o@AB|-))J+a@MaE|kw)WWvcHg+Wg(7L9J_7s8L}8y{ya&JIGTP8<>`TFo zVS!)QKo_6ljfYK~Q=6cq*-l{+Y~NJP;|~Mfg%9%wj~V1`hSh+3=BAX!p3>LL=u21M zSkenh`jSozVgA$ZbOLEp(>e3Qrfj)5N>>(U7mgt`33XVBj;!Mx#(37>^mc!qs1^YH zmqAZwLf_8Q=;sTPng$8`+##32i`q~YG3{-aYT4$pZl-^``MyOp8{_K`6Xs8Kris5V z+r1J1^Y4W(OixVVTjsotAAY}t?+9OFl&H^zr3}>cI(u6!jTSY%mcYoMyqW`!PZArtAq zSQsx0QF9iGuwqJx9d2I`IBVTamrBrbx!On4IHvezkpYszZ^eI=@LRyb0A&LZ5EKsg z3vvJl@pbACoglZJuC812*fw1H07P$Z%)OI?SJw(2WBcs#{_{>K=#qxfj4d2A4Hs@p zh!!!4nR_e~O#4M9_e#p4HaDG;FKFwjnO{&kn%(?$*O0%=CER6gGbF~}$V(cUwey(A30M(uG6y4pt0NBLzt zcvfQ|gV)>`Pd)ISu$O9y3Fo6+i2$$6AMMujirVrVm7MlRyNc8Vp1b(E+X?a?oy=aU zvrMIytL8m!xqtj87#-VfEmuXnwVWQ*lC)gOMvxH|&PN%fA64d$cGKQ!yjU4_(oxgr zqpbT>5$iIk-J~Y4PWq#rJDI&CEPd;G{9}8mPw_>2X&6vqT0H#~XtBS{@(TRXZiVYB z^GEyLxk5FjMW3gI5B&bpTP%ZddYRO3lA54J(jV>2$?PRzDO$uUVBHCK?vrqh|>3ipVZ}arM&&2v($LmLFyb$mwz zK9MY5EnQ@p$Ip+q`64m|ZpCgIFecOYzWT8gI$KEJ`~8=|b55b z|83z}$^L`8&njv@b5wF#-@B32#IUy6`rh`!=#;A})AxqyN0sS&cl?_gFV=CKMwqm| z_rQ`O)@4%rNKIh9h4j4*UxXHi?`y5A$x>@wKWjQ}eteMBa30>>aD8R^Ug4uj#ioo# z_Y2D~nZ9=esR>$aw!XKWuwL}d%JjVlkl&T*duwMK2P~RY-@ET4NwTzg7V&{UPvpmz zVKRNMgVY3B{(q7;*Y|ej!}0pw=#`b|dslxgG4B7rr|%tdA-wj| z^u6!pE7A9U_|+1=TTtKoYpdydpX=H@eJ>m9d)MwUihzC@^}XvmN_5z$zW3SBkJtCE zuaQ8mRNp&@a@-f-wyEiR+kQj6XG;3s^Rp(^_g3i2+Auub^_b!>K0b??K?>eeYi2J0z_i~