Skip to content

Commit 70b56fa

Browse files
committed
librustc: Allow expr_repeat to be used with any vstore
1 parent 2a74fda commit 70b56fa

File tree

4 files changed

+41
-14
lines changed

4 files changed

+41
-14
lines changed

src/libcore/rt/context.rs

Lines changed: 1 addition & 1 deletion
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

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2187,17 +2187,21 @@ pub fn check_expr_with_unifier(fcx: @mut FnCtxt,
21872187
let count = ty::eval_repeat_count(tcx, count_expr);
21882188
check_expr_with_hint(fcx, count_expr, ty::mk_uint(tcx));
21892189
let tt = ast_expr_vstore_to_vstore(fcx, ev, count, vst);
2190+
let mutability = match vst {
2191+
ast::expr_vstore_mut_box | ast::expr_vstore_mut_slice => {
2192+
ast::m_mutbl
2193+
}
2194+
_ => mutbl
2195+
};
21902196
let t: ty::t = fcx.infcx().next_ty_var();
21912197
check_expr_has_type(fcx, element, t);
21922198
let arg_t = fcx.expr_ty(element);
21932199
if ty::type_is_error(arg_t) {
21942200
ty::mk_err(tcx)
2195-
}
2196-
else if ty::type_is_bot(arg_t) {
2201+
} else if ty::type_is_bot(arg_t) {
21972202
ty::mk_bot(tcx)
2198-
}
2199-
else {
2200-
ty::mk_evec(tcx, ty::mt {ty: t, mutbl: mutbl}, tt)
2203+
} else {
2204+
ty::mk_evec(tcx, ty::mt {ty: t, mutbl: mutability}, tt)
22012205
}
22022206
}
22032207
_ =>

src/libsyntax/parse/parser.rs

Lines changed: 8 additions & 8 deletions
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,
@@ -1661,12 +1661,11 @@ pub impl Parser {
16611661
hi = e.span.hi;
16621662
// HACK: turn @[...] into a @-evec
16631663
ex = match e.node {
1664-
expr_vec(*) if m == m_mutbl =>
1664+
expr_vec(*) | expr_repeat(*) if m == m_mutbl =>
16651665
expr_vstore(e, expr_vstore_mut_box),
1666-
expr_vec(*) if m == m_imm => expr_vstore(e, expr_vstore_box),
1667-
expr_lit(@codemap::spanned {
1668-
node: lit_str(_), span: _}) if m == m_imm =>
1669-
expr_vstore(e, expr_vstore_box),
1666+
expr_vec(*) |
1667+
expr_lit(@codemap::spanned { node: lit_str(_), span: _}) |
1668+
expr_repeat(*) if m == m_imm => expr_vstore(e, expr_vstore_box),
16701669
_ => expr_unary(box(m), e)
16711670
};
16721671
}
@@ -1681,8 +1680,9 @@ pub impl Parser {
16811680
hi = e.span.hi;
16821681
// HACK: turn ~[...] into a ~-evec
16831682
ex = match e.node {
1684-
expr_vec(*) | expr_lit(@codemap::spanned {
1685-
node: lit_str(_), span: _})
1683+
expr_vec(*) |
1684+
expr_lit(@codemap::spanned { node: lit_str(_), span: _}) |
1685+
expr_repeat(*)
16861686
if m == m_imm => expr_vstore(e, expr_vstore_uniq),
16871687
_ => expr_unary(uniq(m), e)
16881688
};
Lines changed: 23 additions & 0 deletions
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)