about summary refs log tree commit diff
path: root/src/libstd/net_ip.rs
diff options
context:
space:
mode:
authorNiko Matsakis <niko@alum.mit.edu>2013-01-10 10:59:58 -0800
committerNiko Matsakis <niko@alum.mit.edu>2013-01-31 12:09:00 -0800
commit0682ad0eb9a6b268498a81b2e16a40544e44f0fa (patch)
tree694819bae28cd319401c121afa4daa00adcbdde2 /src/libstd/net_ip.rs
parent42b462e0765f02fd7bb0f2613240ae2489a47fee (diff)
downloadrust-0682ad0eb9a6b268498a81b2e16a40544e44f0fa.tar.gz
rust-0682ad0eb9a6b268498a81b2e16a40544e44f0fa.zip
Finalize moves-based-on-type implementation.
Changes:

- Refactor move mode computation
- Removes move mode arguments, unary move, capture clauses
  (though they still parse for backwards compatibility)
- Simplify how moves are handled in trans
- Fix a number of illegal copies that cropped up
- Workaround for bug involving def-ids in params
  (see details below)

Future work (I'll open bugs for these...):

- Improve error messages for moves that are due
  to bindings
- Add support for moving owned content like a.b.c
  to borrow check, test in trans (but I think it'll
  "just work")
- Proper fix for def-ids in params

Def ids in params:

Move captures into a map instead of recomputing.

This is a workaround for a larger bug having to do with the def-ids associated
with ty_params, which are not always properly preserved when inlining.  I am
not sure of my preferred fix for the larger bug yet.  This current fix removes
the only code in trans that I know of which relies on ty_param def-ids, but
feels fragile.
Diffstat (limited to 'src/libstd/net_ip.rs')
-rw-r--r--src/libstd/net_ip.rs3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/libstd/net_ip.rs b/src/libstd/net_ip.rs
index 839d0d23a61..2447c2eb530 100644
--- a/src/libstd/net_ip.rs
+++ b/src/libstd/net_ip.rs
@@ -117,8 +117,9 @@ enum IpGetAddrErr {
 pub fn get_addr(node: &str, iotask: &iotask)
     -> result::Result<~[IpAddr], IpGetAddrErr> {
     let (output_po, output_ch) = stream();
-    let output_ch = SharedChan(output_ch);
+    let mut output_ch = Some(SharedChan(output_ch));
     do str::as_buf(node) |node_ptr, len| {
+        let output_ch = output_ch.swap_unwrap();
         unsafe {
             log(debug, fmt!("slice len %?", len));
             let handle = create_uv_getaddrinfo_t();