Skip to content

Commit 1c03f13

Browse files
committed
---
yaml --- r: 52453 b: refs/heads/dist-snap c: 92e52bc h: refs/heads/master i: 52451: aa041d0 v: v3
1 parent 2f0f3a2 commit 1c03f13

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+166
-98
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
88
refs/heads/try2: 147ecfdd8221e4a4d4e090486829a06da1e0ca3c
99
refs/heads/incoming: 44d4d6de762f3f9aae1fedcf454c66b79b3ad58d
10-
refs/heads/dist-snap: 9dc8e96c5fac7812039bf6ddf640dcbb77f1a2f0
10+
refs/heads/dist-snap: 92e52bc95e554fc61e4b058850d878eb01de4bbd
1111
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1212
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503
1313
refs/heads/try3: 9387340aab40a73e8424c48fd42f0c521a4875c0

branches/dist-snap/doc/tutorial.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1226,6 +1226,18 @@ match crayons[0] {
12261226
}
12271227
~~~~
12281228
1229+
A vector can be destructured using pattern matching:
1230+
1231+
~~~~
1232+
let numbers: [int * 3] = [1, 2, 3];
1233+
let score = match numbers {
1234+
[] => 0,
1235+
[a] => a * 10,
1236+
[a, b] => a * 6 + b * 4,
1237+
[a, b, c, ..rest] => a * 5 + b * 3 + c * 2 + rest.len() as int
1238+
};
1239+
~~~~
1240+
12291241
The elements of a vector _inherit the mutability of the vector_,
12301242
and as such, individual elements may not be reassigned when the
12311243
vector lives in an immutable slot.

branches/dist-snap/src/compiletest/runtest.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ fn check_expected_errors(expected_errors: ~[errors::expected_error],
273273
procres: procres) {
274274

275275
// true if we found the error in question
276-
let found_flags = vec::cast_to_mut(vec::from_elem(
276+
let found_flags = vec::to_mut(vec::from_elem(
277277
vec::len(expected_errors), false));
278278

279279
if procres.status == 0 {

branches/dist-snap/src/libcore/dvec.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ impl<A> DVec<A> {
145145
#[inline(always)]
146146
fn swap_mut(f: &fn(v: ~[mut A]) -> ~[mut A]) {
147147
do self.swap |v| {
148-
vec::cast_from_mut(f(vec::cast_to_mut(move v)))
148+
vec::from_mut(f(vec::to_mut(move v)))
149149
}
150150
}
151151

branches/dist-snap/src/libcore/os.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ pub fn as_c_charp<T>(s: &str, f: fn(*c_char) -> T) -> T {
8484

8585
pub fn fill_charp_buf(f: fn(*mut c_char, size_t) -> bool)
8686
-> Option<~str> {
87-
let buf = vec::cast_to_mut(vec::from_elem(tmpbuf_sz, 0u8 as c_char));
87+
let buf = vec::to_mut(vec::from_elem(tmpbuf_sz, 0u8 as c_char));
8888
do vec::as_mut_buf(buf) |b, sz| {
8989
if f(b, sz as size_t) unsafe {
9090
Some(str::raw::from_buf(b as *u8))
@@ -111,7 +111,7 @@ pub mod win32 {
111111
let mut res = None;
112112
let mut done = false;
113113
while !done {
114-
let buf = vec::cast_to_mut(vec::from_elem(n as uint, 0u16));
114+
let buf = vec::to_mut(vec::from_elem(n as uint, 0u16));
115115
do vec::as_mut_buf(buf) |b, _sz| {
116116
let k : DWORD = f(b, tmpbuf_sz as DWORD);
117117
if k == (0 as DWORD) {
@@ -1269,7 +1269,7 @@ mod tests {
12691269
};
12701270
assert (ostream as uint != 0u);
12711271
let s = ~"hello";
1272-
let mut buf = vec::cast_to_mut(str::to_bytes(s) + ~[0 as u8]);
1272+
let mut buf = vec::to_mut(str::to_bytes(s) + ~[0 as u8]);
12731273
do vec::as_mut_buf(buf) |b, _len| {
12741274
assert (libc::fwrite(b as *c_void, 1u as size_t,
12751275
(str::len(s) + 1u) as size_t, ostream)

branches/dist-snap/src/libcore/vec.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -209,12 +209,12 @@ pub pure fn build_sized_opt<A>(size: Option<uint>,
209209
}
210210

211211
/// Produces a mut vector from an immutable vector.
212-
pub pure fn cast_to_mut<T>(v: ~[T]) -> ~[mut T] {
212+
pub pure fn to_mut<T>(v: ~[T]) -> ~[mut T] {
213213
unsafe { ::cast::transmute(v) }
214214
}
215215

216216
/// Produces an immutable vector from a mut vector.
217-
pub pure fn cast_from_mut<T>(v: ~[mut T]) -> ~[T] {
217+
pub pure fn from_mut<T>(v: ~[mut T]) -> ~[T] {
218218
unsafe { ::cast::transmute(v) }
219219
}
220220

@@ -552,7 +552,7 @@ pub fn consume<T>(v: ~[T], f: fn(uint, v: T)) unsafe {
552552
}
553553

554554
pub fn consume_mut<T>(v: ~[mut T], f: fn(uint, v: T)) {
555-
consume(vec::cast_from_mut(v), f)
555+
consume(vec::from_mut(v), f)
556556
}
557557

558558
/// Remove the last element from a vector and return it
@@ -718,7 +718,7 @@ pub pure fn append_one<T>(lhs: ~[T], x: T) -> ~[T] {
718718

719719
#[inline(always)]
720720
pub pure fn append_mut<T: Copy>(lhs: ~[mut T], rhs: &[const T]) -> ~[mut T] {
721-
cast_to_mut(append(cast_from_mut(lhs), rhs))
721+
to_mut(append(from_mut(lhs), rhs))
722722
}
723723

724724
/**
@@ -3271,22 +3271,22 @@ mod tests {
32713271
}
32723272

32733273
#[test]
3274-
fn cast_to_mut_no_copy() {
3274+
fn to_mut_no_copy() {
32753275
unsafe {
32763276
let x = ~[1, 2, 3];
32773277
let addr = raw::to_ptr(x);
3278-
let x_mut = cast_to_mut(x);
3278+
let x_mut = to_mut(x);
32793279
let addr_mut = raw::to_ptr(x_mut);
32803280
assert addr == addr_mut;
32813281
}
32823282
}
32833283

32843284
#[test]
3285-
fn cast_from_mut_no_copy() {
3285+
fn from_mut_no_copy() {
32863286
unsafe {
32873287
let x = ~[mut 1, 2, 3];
32883288
let addr = raw::to_ptr(x);
3289-
let x_imm = cast_from_mut(x);
3289+
let x_imm = from_mut(x);
32903290
let addr_imm = raw::to_ptr(x_imm);
32913291
assert addr == addr_imm;
32923292
}

branches/dist-snap/src/librustc/middle/astencode.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,7 @@ impl ast::def: tr {
415415
ast::def_mod(did) => { ast::def_mod(did.tr(xcx)) }
416416
ast::def_foreign_mod(did) => { ast::def_foreign_mod(did.tr(xcx)) }
417417
ast::def_const(did) => { ast::def_const(did.tr(xcx)) }
418-
ast::def_arg(nid, m) => { ast::def_arg(xcx.tr_id(nid), m) }
418+
ast::def_arg(nid, m, b) => { ast::def_arg(xcx.tr_id(nid), m, b) }
419419
ast::def_local(nid, b) => { ast::def_local(xcx.tr_id(nid), b) }
420420
ast::def_variant(e_did, v_did) => {
421421
ast::def_variant(e_did.tr(xcx), v_did.tr(xcx))

branches/dist-snap/src/librustc/middle/liveness.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@ enum VarKind {
286286
fn relevant_def(def: def) -> Option<node_id> {
287287
match def {
288288
def_binding(nid, _) |
289-
def_arg(nid, _) |
289+
def_arg(nid, _, _) |
290290
def_local(nid, _) |
291291
def_self(nid, _) => Some(nid),
292292

@@ -661,11 +661,11 @@ fn Liveness(ir: @IrMaps, specials: Specials) -> Liveness {
661661
tcx: ir.tcx,
662662
s: specials,
663663
successors:
664-
vec::cast_to_mut(
664+
vec::to_mut(
665665
vec::from_elem(ir.num_live_nodes,
666666
invalid_node())),
667667
users:
668-
vec::cast_to_mut(
668+
vec::to_mut(
669669
vec::from_elem(ir.num_live_nodes * ir.num_vars,
670670
invalid_users())),
671671
loop_scope: DVec(),

branches/dist-snap/src/librustc/middle/mem_categorization.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -453,26 +453,27 @@ impl &mem_categorization_ctxt {
453453
mutbl:m_imm, ty:expr_ty}
454454
}
455455

456-
ast::def_arg(vid, mode) => {
456+
ast::def_arg(vid, mode, mutbl) => {
457457
// Idea: make this could be rewritten to model by-ref
458458
// stuff as `&const` and `&mut`?
459459

460460
// m: mutability of the argument
461461
// lp: loan path, must be none for aliasable things
462-
let {m,lp} = match ty::resolved_mode(self.tcx, mode) {
462+
let m = if mutbl {m_mutbl} else {m_imm};
463+
let lp = match ty::resolved_mode(self.tcx, mode) {
463464
ast::by_move | ast::by_copy => {
464-
{m: m_imm, lp: Some(@lp_arg(vid))}
465+
Some(@lp_arg(vid))
465466
}
466467
ast::by_ref => {
467-
{m: m_imm, lp: None}
468+
None
468469
}
469470
ast::by_val => {
470471
// by-value is this hybrid mode where we have a
471472
// pointer but we do not own it. This is not
472473
// considered loanable because, for example, a by-ref
473474
// and and by-val argument might both actually contain
474475
// the same unique ptr.
475-
{m: m_imm, lp: None}
476+
None
476477
}
477478
};
478479
@{id:id, span:span,

branches/dist-snap/src/librustc/middle/resolve.rs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4104,9 +4104,11 @@ impl Resolver {
41044104
for declaration.inputs.each |argument| {
41054105
let binding_mode =
41064106
ArgumentIrrefutableMode(argument.mode);
4107+
let mutability =
4108+
if argument.is_mutbl {Mutable} else {Immutable};
41074109
self.resolve_pattern(argument.pat,
41084110
binding_mode,
4109-
Immutable,
4111+
mutability,
41104112
None,
41114113
visitor);
41124114

@@ -4295,12 +4297,7 @@ impl Resolver {
42954297
}
42964298

42974299
fn resolve_local(local: @local, visitor: ResolveVisitor) {
4298-
let mut mutability;
4299-
if local.node.is_mutbl {
4300-
mutability = Mutable;
4301-
} else {
4302-
mutability = Immutable;
4303-
}
4300+
let mutability = if local.node.is_mutbl {Mutable} else {Immutable};
43044301

43054302
// Resolve the type.
43064303
self.resolve_type(local.node.ty, visitor);
@@ -4561,7 +4558,8 @@ impl Resolver {
45614558
}
45624559
ArgumentIrrefutableMode(argument_mode) => {
45634560
// And for function arguments, `def_arg`.
4564-
def_arg(pattern.id, argument_mode)
4561+
def_arg(pattern.id, argument_mode,
4562+
is_mutable)
45654563
}
45664564
};
45674565

branches/dist-snap/src/librustc/middle/trans/_match.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -985,7 +985,7 @@ fn pick_col(m: &[@Match]) -> uint {
985985
_ => 0u
986986
}
987987
}
988-
let scores = vec::cast_to_mut(vec::from_elem(m[0].pats.len(), 0u));
988+
let scores = vec::to_mut(vec::from_elem(m[0].pats.len(), 0u));
989989
for vec::each(m) |br| {
990990
let mut i = 0u;
991991
for vec::each(br.pats) |p| { scores[i] += score(*p); i += 1u; }

branches/dist-snap/src/librustc/middle/trans/base.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1845,6 +1845,7 @@ fn trans_enum_variant(ccx: @crate_ctxt,
18451845
let fn_args = do args.map |varg| {
18461846
ast::arg {
18471847
mode: ast::expl(ast::by_copy),
1848+
is_mutbl: false,
18481849
ty: varg.ty,
18491850
pat: ast_util::ident_to_pat(
18501851
ccx.tcx.sess.next_node_id(),
@@ -1908,6 +1909,7 @@ fn trans_tuple_struct(ccx: @crate_ctxt,
19081909
let fn_args = do fields.map |field| {
19091910
ast::arg {
19101911
mode: ast::expl(ast::by_copy),
1912+
is_mutbl: false,
19111913
ty: field.node.ty,
19121914
pat: ast_util::ident_to_pat(ccx.tcx.sess.next_node_id(),
19131915
ast_util::dummy_sp(),

branches/dist-snap/src/librustc/middle/trans/expr.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -854,7 +854,7 @@ fn trans_local_var(bcx: block,
854854
}
855855
}
856856
}
857-
ast::def_arg(nid, _) => {
857+
ast::def_arg(nid, _, _) => {
858858
take_local(bcx, bcx.fcx.llargs, nid, expr_id_opt)
859859
}
860860
ast::def_local(nid, _) | ast::def_binding(nid, _) => {

branches/dist-snap/src/librustc/middle/trans/foreign.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -297,14 +297,14 @@ fn classify_ty(ty: TypeRef) -> ~[x86_64_reg_class] {
297297
}
298298

299299
let words = (ty_size(ty) + 7) / 8;
300-
let cls = vec::cast_to_mut(vec::from_elem(words, no_class));
300+
let cls = vec::to_mut(vec::from_elem(words, no_class));
301301
if words > 4 {
302302
all_mem(cls);
303-
return vec::cast_from_mut(move cls);
303+
return vec::from_mut(move cls);
304304
}
305305
classify(ty, cls, 0, 0);
306306
fixup(ty, cls);
307-
return vec::cast_from_mut(move cls);
307+
return vec::from_mut(move cls);
308308
}
309309

310310
fn llreg_ty(cls: &[x86_64_reg_class]) -> TypeRef {

branches/dist-snap/src/librustc/middle/trans/type_use.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ fn type_uses_for(ccx: @crate_ctxt, fn_id: def_id, n_tps: uint)
6868
// Conservatively assume full use for recursive loops
6969
ccx.type_use_cache.insert(fn_id, vec::from_elem(n_tps, 3u));
7070

71-
let cx = {ccx: ccx, uses: vec::cast_to_mut(vec::from_elem(n_tps, 0u))};
71+
let cx = {ccx: ccx, uses: vec::to_mut(vec::from_elem(n_tps, 0u))};
7272
match ty::get(ty::lookup_item_type(cx.ccx.tcx, fn_id).ty).sty {
7373
ty::ty_fn(ref fn_ty) => {
7474
for vec::each(fn_ty.sig.inputs) |arg| {
@@ -84,7 +84,7 @@ fn type_uses_for(ccx: @crate_ctxt, fn_id: def_id, n_tps: uint)
8484
}
8585

8686
if fn_id_loc.crate != local_crate {
87-
let uses = vec::cast_from_mut(copy cx.uses);
87+
let uses = vec::from_mut(copy cx.uses);
8888
ccx.type_use_cache.insert(fn_id, copy uses);
8989
return uses;
9090
}
@@ -167,7 +167,7 @@ fn type_uses_for(ccx: @crate_ctxt, fn_id: def_id, n_tps: uint)
167167
ccx.tcx.sess.parse_sess.interner)));
168168
}
169169
}
170-
let uses = vec::cast_from_mut(copy cx.uses);
170+
let uses = vec::from_mut(copy cx.uses);
171171
// XXX: Bad copy, use @vec instead?
172172
ccx.type_use_cache.insert(fn_id, copy uses);
173173
uses

branches/dist-snap/src/librustc/middle/typeck/check/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2818,7 +2818,7 @@ fn ty_param_bounds_and_ty_for_def(fcx: @fn_ctxt, sp: span, defn: ast::def) ->
28182818
ty_param_bounds_and_ty {
28192819

28202820
match defn {
2821-
ast::def_arg(nid, _) | ast::def_local(nid, _) |
2821+
ast::def_arg(nid, _, _) | ast::def_local(nid, _) |
28222822
ast::def_self(nid, _) | ast::def_binding(nid, _) => {
28232823
assert (fcx.inh.locals.contains_key(nid));
28242824
let typ = ty::mk_var(fcx.ccx.tcx, lookup_local(fcx, sp, nid));
@@ -3024,7 +3024,7 @@ fn check_bounds_are_used(ccx: @crate_ctxt,
30243024

30253025
// make a vector of booleans initially false, set to true when used
30263026
if tps.len() == 0u { return; }
3027-
let tps_used = vec::cast_to_mut(vec::from_elem(tps.len(), false));
3027+
let tps_used = vec::to_mut(vec::from_elem(tps.len(), false));
30283028

30293029
ty::walk_regions_and_ty(
30303030
ccx.tcx, ty,

branches/dist-snap/src/librustc/middle/typeck/check/regionck.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ type rvt = visit::vt<@rcx>;
5555
fn encl_region_of_def(fcx: @fn_ctxt, def: ast::def) -> ty::Region {
5656
let tcx = fcx.tcx();
5757
match def {
58-
def_local(node_id, _) | def_arg(node_id, _) | def_self(node_id, _) |
59-
def_binding(node_id, _) =>
58+
def_local(node_id, _) | def_arg(node_id, _, _) |
59+
def_self(node_id, _) | def_binding(node_id, _) =>
6060
return encl_region(tcx, node_id),
6161
def_upvar(_, subdef, closure_id, body_id) => {
6262
match ty_fn_proto(fcx.node_ty(closure_id)) {

branches/dist-snap/src/libstd/bitv.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
use core::ops;
1414
use core::prelude::*;
1515
use core::uint;
16-
use core::vec::{cast_to_mut, from_elem};
16+
use core::vec::{to_mut, from_elem};
1717
use core::vec;
1818

1919
struct SmallBitv {
@@ -231,7 +231,7 @@ pub fn Bitv (nbits: uint, init: bool) -> Bitv {
231231
let nelems = nbits/uint_bits +
232232
if nbits % uint_bits == 0 {0} else {1};
233233
let elem = if init {!0} else {0};
234-
let s = cast_to_mut(from_elem(nelems, elem));
234+
let s = to_mut(from_elem(nelems, elem));
235235
Big(~BigBitv(move s))
236236
};
237237
Bitv {rep: move rep, nbits: nbits}
@@ -516,7 +516,7 @@ impl Bitv: Clone {
516516
Bitv{nbits: self.nbits, rep: Small(~SmallBitv{bits: b.bits})}
517517
}
518518
Big(ref b) => {
519-
let st = cast_to_mut(from_elem(self.nbits / uint_bits + 1, 0));
519+
let st = to_mut(from_elem(self.nbits / uint_bits + 1, 0));
520520
let len = st.len();
521521
for uint::range(0, len) |i| { st[i] = b.storage[i]; };
522522
Bitv{nbits: self.nbits, rep: Big(~BigBitv{storage: move st})}

branches/dist-snap/src/libstd/getopts.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ pub type Result = result::Result<Matches, Fail_>;
222222
pub fn getopts(args: &[~str], opts: &[Opt]) -> Result unsafe {
223223
let n_opts = opts.len();
224224
fn f(_x: uint) -> ~[Optval] { return ~[]; }
225-
let vals = vec::cast_to_mut(vec::from_fn(n_opts, f));
225+
let vals = vec::to_mut(vec::from_fn(n_opts, f));
226226
let mut free: ~[~str] = ~[];
227227
let l = args.len();
228228
let mut i = 0;
@@ -337,7 +337,7 @@ pub fn getopts(args: &[~str], opts: &[Opt]) -> Result unsafe {
337337
i += 1;
338338
}
339339
return Ok(Matches {opts: vec::from_slice(opts),
340-
vals: vec::cast_from_mut(move vals),
340+
vals: vec::from_mut(move vals),
341341
free: free});
342342
}
343343

branches/dist-snap/src/libstd/map.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -450,7 +450,7 @@ pub mod chained {
450450
}
451451

452452
fn chains<K,V>(nchains: uint) -> ~[mut Option<@Entry<K,V>>] {
453-
vec::cast_to_mut(vec::from_elem(nchains, None))
453+
vec::to_mut(vec::from_elem(nchains, None))
454454
}
455455

456456
pub fn mk<K:Eq IterBytes Hash, V: Copy>() -> T<K,V> {

0 commit comments

Comments
 (0)