From: Jorge Aparicio Date: Thu, 1 Jan 2015 23:07:31 +0000 (-0500) Subject: std: remove remaining boxed closures X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=37f62ae1c0ee44cb6ca563c18da19b8d5be58c0e;p=rust.git std: remove remaining boxed closures --- diff --git a/src/libstd/io/fs.rs b/src/libstd/io/fs.rs index 5cb79d41db9..4691c06c1de 100644 --- a/src/libstd/io/fs.rs +++ b/src/libstd/io/fs.rs @@ -518,14 +518,16 @@ pub fn rmdir(path: &Path) -> IoResult<()> { /// use std::io; /// /// // one possible implementation of fs::walk_dir only visiting files -/// fn visit_dirs(dir: &Path, cb: |&Path|) -> io::IoResult<()> { +/// fn visit_dirs(dir: &Path, cb: &mut F) -> io::IoResult<()> where +/// F: FnMut(&Path), +/// { /// if dir.is_dir() { /// let contents = try!(fs::readdir(dir)); /// for entry in contents.iter() { /// if entry.is_dir() { -/// try!(visit_dirs(entry, |p| cb(p))); +/// try!(visit_dirs(entry, cb)); /// } else { -/// cb(entry); +/// (*cb)(entry); /// } /// } /// Ok(()) diff --git a/src/libstd/io/net/ip.rs b/src/libstd/io/net/ip.rs index 52b589b5f24..d398b61fe64 100644 --- a/src/libstd/io/net/ip.rs +++ b/src/libstd/io/net/ip.rs @@ -17,11 +17,12 @@ pub use self::IpAddr::*; +use boxed::Box; use fmt; use io::{self, IoResult, IoError}; use io::net; use iter::{Iterator, IteratorExt}; -use ops::FnOnce; +use ops::{FnOnce, FnMut}; use option::Option; use option::Option::{None, Some}; use result::Result::{Ok, Err}; @@ -120,10 +121,10 @@ fn read_till_eof(&mut self, cb: F) -> Option where } // Return result of first successful parser - fn read_or(&mut self, parsers: &mut [|&mut Parser| -> Option]) + fn read_or(&mut self, parsers: &mut [Box Option>]) -> Option { for pf in parsers.iter_mut() { - match self.read_atomically(|p: &mut Parser| (*pf)(p)) { + match self.read_atomically(|p: &mut Parser| pf.call_mut((p,))) { Some(r) => return Some(r), None => {} } @@ -320,22 +321,22 @@ fn read_ipv6_addr(&mut self) -> Option { } fn read_ip_addr(&mut self) -> Option { - let ipv4_addr = |p: &mut Parser| p.read_ipv4_addr(); - let ipv6_addr = |p: &mut Parser| p.read_ipv6_addr(); - self.read_or(&mut [ipv4_addr, ipv6_addr]) + let ipv4_addr = |&mut: p: &mut Parser| p.read_ipv4_addr(); + let ipv6_addr = |&mut: p: &mut Parser| p.read_ipv6_addr(); + self.read_or(&mut [box ipv4_addr, box ipv6_addr]) } fn read_socket_addr(&mut self) -> Option { let ip_addr = |&: p: &mut Parser| { - let ipv4_p = |p: &mut Parser| p.read_ip_addr(); - let ipv6_p = |p: &mut Parser| { + let ipv4_p = |&mut: p: &mut Parser| p.read_ip_addr(); + let ipv6_p = |&mut: p: &mut Parser| { let open_br = |&: p: &mut Parser| p.read_given_char('['); let ip_addr = |&: p: &mut Parser| p.read_ipv6_addr(); let clos_br = |&: p: &mut Parser| p.read_given_char(']'); p.read_seq_3::(open_br, ip_addr, clos_br) .map(|t| match t { (_, ip, _) => ip }) }; - p.read_or(&mut [ipv4_p, ipv6_p]) + p.read_or(&mut [box ipv4_p, box ipv6_p]) }; let colon = |&: p: &mut Parser| p.read_given_char(':'); let port = |&: p: &mut Parser| p.read_number(10, 5, 0x10000).map(|n| n as u16);