Skip to content

Commit d310532

Browse files
committed
auto merge of #5586 : pcwalton/rust/expr-repeat-vstore, r=graydon
r? @graydon
2 parents 3ff8e01 + e5dda81 commit d310532

File tree

4 files changed

+41
-14
lines changed

4 files changed

+41
-14
lines changed

src/libcore/rt/context.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ fn initialize_call_frame(regs: &mut Registers, fptr: *c_void, arg: *c_void, sp:
126126
type Registers = [uint, ..22];
127127

128128
#[cfg(target_arch = "x86_64")]
129-
fn new_regs() -> ~Registers { ~[0, .. 22] }
129+
fn new_regs() -> ~Registers { ~([0, .. 22]) }
130130

131131
#[cfg(target_arch = "x86_64")]
132132
fn initialize_call_frame(regs: &mut Registers, fptr: *c_void, arg: *c_void, sp: *mut uint) {

src/librustc/middle/typeck/check/mod.rs

+9-5
Original file line numberDiff line numberDiff line change
@@ -2150,17 +2150,21 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
21502150
let count = ty::eval_repeat_count(tcx, count_expr);
21512151
check_expr_with_hint(fcx, count_expr, ty::mk_uint(tcx));
21522152
let tt = ast_expr_vstore_to_vstore(fcx, ev, count, vst);
2153+
let mutability = match vst {
2154+
ast::expr_vstore_mut_box | ast::expr_vstore_mut_slice => {
2155+
ast::m_mutbl
2156+
}
2157+
_ => mutbl
2158+
};
21532159
let t: ty::t = fcx.infcx().next_ty_var();
21542160
check_expr_has_type(fcx, element, t);
21552161
let arg_t = fcx.expr_ty(element);
21562162
if ty::type_is_error(arg_t) {
21572163
ty::mk_err(tcx)
2158-
}
2159-
else if ty::type_is_bot(arg_t) {
2164+
} else if ty::type_is_bot(arg_t) {
21602165
ty::mk_bot(tcx)
2161-
}
2162-
else {
2163-
ty::mk_evec(tcx, ty::mt {ty: t, mutbl: mutbl}, tt)
2166+
} else {
2167+
ty::mk_evec(tcx, ty::mt {ty: t, mutbl: mutability}, tt)
21642168
}
21652169
}
21662170
_ =>

src/libsyntax/parse/parser.rs

+8-8
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ pub fn Parser(sess: @mut ParseSess,
232232
token: @mut copy tok0.tok,
233233
span: @mut copy tok0.sp,
234234
last_span: @mut copy tok0.sp,
235-
buffer: @mut [copy tok0, .. 4],
235+
buffer: @mut ([copy tok0, .. 4]),
236236
buffer_start: @mut 0,
237237
buffer_end: @mut 0,
238238
tokens_consumed: @mut 0,
@@ -1653,12 +1653,11 @@ pub impl Parser {
16531653
hi = e.span.hi;
16541654
// HACK: turn @[...] into a @-evec
16551655
ex = match e.node {
1656-
expr_vec(*) if m == m_mutbl =>
1656+
expr_vec(*) | expr_repeat(*) if m == m_mutbl =>
16571657
expr_vstore(e, expr_vstore_mut_box),
1658-
expr_vec(*) if m == m_imm => expr_vstore(e, expr_vstore_box),
1659-
expr_lit(@codemap::spanned {
1660-
node: lit_str(_), span: _}) if m == m_imm =>
1661-
expr_vstore(e, expr_vstore_box),
1658+
expr_vec(*) |
1659+
expr_lit(@codemap::spanned { node: lit_str(_), span: _}) |
1660+
expr_repeat(*) if m == m_imm => expr_vstore(e, expr_vstore_box),
16621661
_ => expr_unary(box(m), e)
16631662
};
16641663
}
@@ -1673,8 +1672,9 @@ pub impl Parser {
16731672
hi = e.span.hi;
16741673
// HACK: turn ~[...] into a ~-evec
16751674
ex = match e.node {
1676-
expr_vec(*) | expr_lit(@codemap::spanned {
1677-
node: lit_str(_), span: _})
1675+
expr_vec(*) |
1676+
expr_lit(@codemap::spanned { node: lit_str(_), span: _}) |
1677+
expr_repeat(*)
16781678
if m == m_imm => expr_vstore(e, expr_vstore_uniq),
16791679
_ => expr_unary(uniq(m), e)
16801680
};
+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
use core::io::println;
2+
3+
fn main() {
4+
let v: ~[int] = ~[ 1, ..5 ];
5+
println(v[0].to_str());
6+
println(v[1].to_str());
7+
println(v[2].to_str());
8+
println(v[3].to_str());
9+
println(v[4].to_str());
10+
let v: @[int] = @[ 2, ..5 ];
11+
println(v[0].to_str());
12+
println(v[1].to_str());
13+
println(v[2].to_str());
14+
println(v[3].to_str());
15+
println(v[4].to_str());
16+
let v: @mut [int] = @mut [ 3, ..5 ];
17+
println((copy v[0]).to_str());
18+
println((copy v[1]).to_str());
19+
println((copy v[2]).to_str());
20+
println((copy v[3]).to_str());
21+
println((copy v[4]).to_str());
22+
}
23+

0 commit comments

Comments
 (0)