Skip to content

Commit 8668d06

Browse files
committed
Get rid of many implicit copies as a preliminary to Issue #2448.
1 parent d89b4c8 commit 8668d06

File tree

22 files changed

+75
-78
lines changed

22 files changed

+75
-78
lines changed

src/cargo/cargo.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -603,7 +603,7 @@ fn install_uuid(c: cargo, wd: str, uuid: str) {
603603
for_each_package(c, { |s, p|
604604
info(#fmt["%s ? %s", p.uuid, uuid]);
605605
if p.uuid == uuid {
606-
vec::grow(ps, 1u, (s, p));
606+
vec::grow(ps, 1u, (s.name, p));
607607
}
608608
});
609609
if vec::len(ps) == 1u {
@@ -616,16 +616,16 @@ fn install_uuid(c: cargo, wd: str, uuid: str) {
616616
}
617617
error("Found multiple packages:");
618618
for ps.each {|elt|
619-
let (s,p) = elt;
620-
info(" " + s.name + "/" + p.uuid + " (" + p.name + ")");
619+
let (sname,p) = elt;
620+
info(" " + sname + "/" + p.uuid + " (" + p.name + ")");
621621
}
622622
}
623623

624624
fn install_named(c: cargo, wd: str, name: str) {
625625
let mut ps = [];
626626
for_each_package(c, { |s, p|
627627
if p.name == name {
628-
vec::grow(ps, 1u, (s, p));
628+
vec::grow(ps, 1u, (s.name, p));
629629
}
630630
});
631631
if vec::len(ps) == 1u {
@@ -638,8 +638,8 @@ fn install_named(c: cargo, wd: str, name: str) {
638638
}
639639
error("Found multiple packages:");
640640
for ps.each {|elt|
641-
let (s,p) = elt;
642-
info(" " + s.name + "/" + p.uuid + " (" + p.name + ")");
641+
let (sname,p) = elt;
642+
info(" " + sname + "/" + p.uuid + " (" + p.name + ")");
643643
}
644644
}
645645

src/libcore/priv.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ task to receive from it.
2424
unsafe fn chan_from_global_ptr<T: send>(
2525
global: global_ptr,
2626
builder: fn() -> task::builder,
27-
f: fn~(comm::port<T>)
27+
+f: fn~(comm::port<T>)
2828
) -> comm::chan<T> {
2929

3030
enum msg {
@@ -233,4 +233,4 @@ fn test_weaken_task_fail() unsafe {
233233
}
234234
};
235235
assert result::is_failure(res);
236-
}
236+
}

src/libstd/getopts.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ enum optval { val(str), given, }
132132
The result of checking command line arguments. Contains a vector
133133
of matches and a vector of free strings.
134134
"]
135-
type match = {opts: [opt], vals: [mut [optval]], free: [str]};
135+
type match = {opts: [opt], vals: [[optval]], free: [str]};
136136

137137
fn is_arg(arg: str) -> bool {
138138
ret str::len(arg) > 1u && arg[0] == '-' as u8;
@@ -275,7 +275,7 @@ fn getopts(args: [str], opts: [opt]) -> result unsafe {
275275
}
276276
i += 1u;
277277
}
278-
ret ok({opts: opts, vals: vals, free: free});
278+
ret ok({opts: opts, vals: vec::from_mut(vals), free: free});
279279
}
280280

281281
fn opt_vals(m: match, nm: str) -> [optval] {

src/libstd/net_tcp.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -476,7 +476,7 @@ once a new connection is recv'd. Its parameter:
476476
variant
477477
"]
478478
fn conn_recv_spawn(server_port: tcp_conn_port,
479-
cb: fn~(result::result<tcp_socket, tcp_err_data>)) {
479+
+cb: fn~(result::result<tcp_socket, tcp_err_data>)) {
480480
let new_conn_po = (**server_port).new_conn_po;
481481
let iotask = (**server_port).iotask;
482482
let new_conn_result = comm::recv(new_conn_po);
@@ -681,8 +681,8 @@ of listen exiting because of an error
681681
fn listen_for_conn(host_ip: ip::ip_addr, port: uint, backlog: uint,
682682
iotask: iotask,
683683
on_establish_cb: fn~(comm::chan<option<tcp_err_data>>),
684-
new_connect_cb: fn~(tcp_new_connection,
685-
comm::chan<option<tcp_err_data>>))
684+
+new_connect_cb: fn~(tcp_new_connection,
685+
comm::chan<option<tcp_err_data>>))
686686
-> result::result<(), tcp_err_data> unsafe {
687687
let stream_closed_po = comm::port::<()>();
688688
let kill_po = comm::port::<option<tcp_err_data>>();
@@ -773,7 +773,7 @@ Convenience methods extending `net::tcp::tcp_conn_port`
773773
"]
774774
impl conn_port_methods for tcp_conn_port {
775775
fn recv() -> result::result<tcp_socket, tcp_err_data> { conn_recv(self) }
776-
fn recv_spawn(cb: fn~(result::result<tcp_socket,tcp_err_data>))
776+
fn recv_spawn(+cb: fn~(result::result<tcp_socket,tcp_err_data>))
777777
{ conn_recv_spawn(self, cb); }
778778
fn peek() -> bool { conn_peek(self) }
779779
}

src/libstd/sha1.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ fn sha1() -> sha1 {
5858
msg_block: [mut u8],
5959
mut msg_block_idx: uint,
6060
mut computed: bool,
61-
work_buf: [mut u32]};
61+
work_buf: @[mut u32]};
6262

6363
fn add_input(st: sha1state, msg: [u8]) {
6464
/* FIXME: Should be typestate precondition (#2345) */
@@ -71,7 +71,6 @@ fn sha1() -> sha1 {
7171
st.len_high += 1u32;
7272
if st.len_high == 0u32 {
7373
// FIXME: Need better failure mode (#2346)
74-
7574
fail;
7675
}
7776
}
@@ -81,7 +80,7 @@ fn sha1() -> sha1 {
8180
fn process_msg_block(st: sha1state) {
8281
// FIXME: Make precondition (#2345)
8382
assert (vec::len(st.h) == digest_buf_len);
84-
assert (vec::len(st.work_buf) == work_buf_len);
83+
assert (vec::len(*st.work_buf) == work_buf_len);
8584
let mut t: int; // Loop counter
8685
let w = st.work_buf;
8786

@@ -249,7 +248,7 @@ fn sha1() -> sha1 {
249248
msg_block: vec::to_mut(vec::from_elem(msg_block_len, 0u8)),
250249
mut msg_block_idx: 0u,
251250
mut computed: false,
252-
work_buf: vec::to_mut(vec::from_elem(work_buf_len, 0u32))
251+
work_buf: @vec::to_mut(vec::from_elem(work_buf_len, 0u32))
253252
};
254253
let sh = st as sha1;
255254
sh.reset();

src/libstd/test.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ fn test_main(args: [str], tests: [test_desc]) {
5858
}
5959

6060
type test_opts = {filter: option<str>, run_ignored: bool,
61-
logfile: option<str>};
61+
logfile: option<str>};
6262

6363
type opt_res = either<test_opts, str>;
6464

@@ -81,7 +81,7 @@ fn parse_opts(args: [str]) -> opt_res {
8181
let logfile = getopts::opt_maybe_str(match, "logfile");
8282

8383
let test_opts = {filter: filter, run_ignored: run_ignored,
84-
logfile: logfile};
84+
logfile: logfile};
8585

8686
ret either::left(test_opts);
8787
}
@@ -126,7 +126,7 @@ fn run_tests_console(opts: test_opts,
126126
st.failed += 1u;
127127
write_failed(st.out, st.use_color);
128128
st.out.write_line("");
129-
st.failures += [test];
129+
st.failures += [copy test];
130130
}
131131
tr_ignored {
132132
st.ignored += 1u;
@@ -273,7 +273,7 @@ fn run_tests(opts: test_opts, tests: [test_desc],
273273
callback: fn@(testevent)) {
274274

275275
let mut filtered_tests = filter_tests(opts, tests);
276-
callback(te_filtered(filtered_tests));
276+
callback(te_filtered(copy filtered_tests));
277277

278278
// It's tempting to just spawn all the tests at once, but since we have
279279
// many tests that run in other processes we would be making a big mess.
@@ -295,7 +295,7 @@ fn run_tests(opts: test_opts, tests: [test_desc],
295295
// We are doing one test at a time so we can print the name
296296
// of the test before we run it. Useful for debugging tests
297297
// that hang forever.
298-
callback(te_wait(test));
298+
callback(te_wait(copy test));
299299
}
300300
run_test(test, ch);
301301
wait_idx += 1u;
@@ -304,7 +304,7 @@ fn run_tests(opts: test_opts, tests: [test_desc],
304304

305305
let (test, result) = comm::recv(p);
306306
if concurrency != 1u {
307-
callback(te_wait(test));
307+
callback(te_wait(copy test));
308308
}
309309
callback(te_result(test, result));
310310
wait_idx -= 1u;
@@ -329,7 +329,7 @@ fn get_concurrency() -> uint {
329329

330330
fn filter_tests(opts: test_opts,
331331
tests: [test_desc]) -> [test_desc] {
332-
let mut filtered = tests;
332+
let mut filtered = copy tests;
333333

334334
// Remove tests that don't match the test filter
335335
filtered = if option::is_none(opts.filter) {
@@ -344,7 +344,7 @@ fn filter_tests(opts: test_opts,
344344
fn filter_fn(test: test_desc, filter_str: str) ->
345345
option<test_desc> {
346346
if str::contains(test.name, filter_str) {
347-
ret option::some(test);
347+
ret option::some(copy test);
348348
} else { ret option::none; }
349349
}
350350

@@ -360,7 +360,7 @@ fn filter_tests(opts: test_opts,
360360
fn filter(test: test_desc) -> option<test_desc> {
361361
if test.ignore {
362362
ret option::some({name: test.name,
363-
fn: test.fn,
363+
fn: copy test.fn,
364364
ignore: false,
365365
should_fail: test.should_fail});
366366
} else { ret option::none; }
@@ -385,19 +385,19 @@ type test_future = {test: test_desc, wait: fn@() -> test_result};
385385

386386
fn run_test(+test: test_desc, monitor_ch: comm::chan<monitor_msg>) {
387387
if test.ignore {
388-
comm::send(monitor_ch, (test, tr_ignored));
388+
comm::send(monitor_ch, (copy test, tr_ignored));
389389
ret;
390390
}
391391

392392
task::spawn {||
393-
let testfn = test.fn;
393+
let testfn = copy test.fn;
394394
let mut builder = task::builder();
395395
let result_future = task::future_result(builder);
396396
task::unsupervise(builder);
397397
task::run(builder, testfn);
398398
let task_result = future::get(result_future);
399399
let test_result = calc_result(test, task_result == task::success);
400-
comm::send(monitor_ch, (test, test_result));
400+
comm::send(monitor_ch, (copy test, test_result));
401401
};
402402
}
403403

src/libstd/uv_ll.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -624,11 +624,10 @@ unsafe fn tcp_connect(connect_ptr: *uv_connect_t,
624624
addr_ptr: *sockaddr_in,
625625
++after_connect_cb: *u8)
626626
-> libc::c_int {
627-
let address = *addr_ptr;
628627
log(debug, #fmt("b4 native tcp_connect--addr port: %u cb: %u",
629-
address.sin_port as uint, after_connect_cb as uint));
628+
(*addr_ptr).sin_port as uint, after_connect_cb as uint));
630629
ret rustrt::rust_uv_tcp_connect(connect_ptr, tcp_handle_ptr,
631-
after_connect_cb, addr_ptr);
630+
after_connect_cb, addr_ptr);
632631
}
633632
// FIXME ref #2064
634633
unsafe fn tcp_bind(tcp_server_ptr: *uv_tcp_t,
@@ -1420,4 +1419,4 @@ mod test {
14201419
log(debug, output);
14211420
assert native_handle_size as uint == rust_handle_size;
14221421
}
1423-
}
1422+
}

src/rustc/driver/rustc.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ diagnostic emitter which records when we hit a fatal error. If the task
200200
fails without recording a fatal error then we've encountered a compiler
201201
bug and need to present an error.
202202
*/
203-
fn monitor(f: fn~(diagnostic::emitter)) {
203+
fn monitor(+f: fn~(diagnostic::emitter)) {
204204
enum monitor_msg {
205205
fatal,
206206
done,

src/rustc/metadata/encoder.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -552,7 +552,7 @@ fn encode_info_for_item(ecx: @encode_ctxt, ebml_w: ebml::writer, item: @item,
552552
index: @mut [entry<int>]) {
553553
*index += [{val: item.id, pos: ebml_w.writer.tell()}];
554554
}
555-
let add_to_index = bind add_to_index_(item, ebml_w, index);
555+
let add_to_index = bind add_to_index_(item, copy ebml_w, index);
556556

557557
alt item.node {
558558
item_const(_, _) {
@@ -796,7 +796,7 @@ fn encode_info_for_items(ecx: @encode_ctxt, ebml_w: ebml::writer,
796796
crate_node_id, [], "");
797797
visit::visit_crate(*crate, (), visit::mk_vt(@{
798798
visit_expr: {|_e, _cx, _v|},
799-
visit_item: {|i, cx, v|
799+
visit_item: {|i, cx, v, copy ebml_w|
800800
visit::visit_item(i, cx, v);
801801
alt check ecx.tcx.items.get(i.id) {
802802
ast_map::node_item(_, pt) {
@@ -820,7 +820,7 @@ fn encode_info_for_items(ecx: @encode_ctxt, ebml_w: ebml::writer,
820820
}
821821
}
822822
},
823-
visit_native_item: {|ni, cx, v|
823+
visit_native_item: {|ni, cx, v, copy ebml_w|
824824
visit::visit_native_item(ni, cx, v);
825825
alt check ecx.tcx.items.get(ni.id) {
826826
ast_map::node_native_item(_, abi, pt) {

src/rustc/middle/astencode.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -725,7 +725,7 @@ fn encode_side_tables_for_ii(ecx: @e::encode_ctxt,
725725
ebml_w: ebml::writer,
726726
ii: ast::inlined_item) {
727727
ebml_w.wr_tag(c::tag_table as uint) {||
728-
visit_ids(ii, fn@(id: ast::node_id) {
728+
visit_ids(ii, fn@(id: ast::node_id, copy ebml_w) {
729729
// Note: this will cause a copy of ebml_w, which is bad as
730730
// it has mut fields. But I believe it's harmless since
731731
// we generate balanced EBML.

src/rustc/middle/resolve.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1481,7 +1481,7 @@ fn lookup_in_local_mod(e: env, node_id: node_id, sp: span, id: ident,
14811481
alt inf.index.find(id) {
14821482
none { }
14831483
some(lst) {
1484-
let found = list_search(lst, bind lookup_in_mie(e, _, ns));
1484+
let found = list_search(lst, {|x| lookup_in_mie(e, x, ns)});
14851485
if !is_none(found) {
14861486
ret found;
14871487
}
@@ -1511,7 +1511,7 @@ fn lookup_in_globs(e: env, globs: [glob_imp_def], sp: span, id: ident,
15111511
}
15121512
}
15131513
let matches = vec::filter_map(copy globs,
1514-
bind lookup_in_mod_(e, _, sp, id, ns, dr));
1514+
{|x| lookup_in_mod_(e, x, sp, id, ns, dr)});
15151515
if vec::len(matches) == 0u {
15161516
ret none;
15171517
}

src/rustc/middle/trans/base.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4020,7 +4020,7 @@ fn trans_stmt(cx: block, s: ast::stmt) -> block {
40204020

40214021
// You probably don't want to use this one. See the
40224022
// next three functions instead.
4023-
fn new_block(cx: fn_ctxt, parent: block_parent, kind: block_kind,
4023+
fn new_block(cx: fn_ctxt, parent: block_parent, +kind: block_kind,
40244024
name: str, opt_node_info: option<node_info>) -> block {
40254025

40264026
let s = if cx.ccx.sess.opts.save_temps || cx.ccx.sess.opts.debuginfo {

src/rustc/middle/trans/type_use.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ fn type_uses_for(ccx: @crate_ctxt, fn_id: def_id, n_tps: uint)
5656
}
5757

5858
if fn_id_loc.crate != local_crate {
59-
let uses = vec::from_mut(cx.uses);
59+
let uses = vec::from_mut(copy cx.uses);
6060
ccx.type_use_cache.insert(fn_id, uses);
6161
ret uses;
6262
}
@@ -95,7 +95,7 @@ fn type_uses_for(ccx: @crate_ctxt, fn_id: def_id, n_tps: uint)
9595
}
9696

9797
}
98-
let uses = vec::from_mut(cx.uses);
98+
let uses = vec::from_mut(copy cx.uses);
9999
ccx.type_use_cache.insert(fn_id, uses);
100100
uses
101101
}

src/rustdoc/astsrv.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ fn from_file<T>(file: str, owner: srv_owner<T>) -> T {
5656
run(owner, file, parse::from_file_sess)
5757
}
5858

59-
fn run<T>(owner: srv_owner<T>, source: str, parse: parser) -> T {
59+
fn run<T>(owner: srv_owner<T>, source: str, +parse: parser) -> T {
6060

6161
let srv_ = srv({
6262
ch: task::spawn_listener {|po|

src/rustdoc/attr_pass.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ fn fold_item(
9090
fn parse_item_attrs<T:send>(
9191
srv: astsrv::srv,
9292
id: doc::ast_id,
93-
parse_attrs: fn~([ast::attribute]) -> T) -> T {
93+
+parse_attrs: fn~([ast::attribute]) -> T) -> T {
9494
astsrv::exec(srv) {|ctxt|
9595
let attrs = alt ctxt.ast_map.get(id) {
9696
ast_map::node_item(item, _) { item.attrs }

0 commit comments

Comments
 (0)