librustc: Change repeated vector expressions to use implicit copyability.

This commit is contained in:
Patrick Walton 2013-07-10 16:00:11 -07:00
parent 2dbb3c3887
commit d57e8f8419
4 changed files with 34 additions and 6 deletions

View File

@ -56,7 +56,24 @@ pub struct Variables {
impl Variables {
/// Return a new zero-initialized Variables
pub fn new() -> Variables {
Variables{ sta: [Number(0), ..26], dyn: [Number(0), ..26] }
Variables {
sta: [
Number(0), Number(0), Number(0), Number(0), Number(0),
Number(0), Number(0), Number(0), Number(0), Number(0),
Number(0), Number(0), Number(0), Number(0), Number(0),
Number(0), Number(0), Number(0), Number(0), Number(0),
Number(0), Number(0), Number(0), Number(0), Number(0),
Number(0),
],
dyn: [
Number(0), Number(0), Number(0), Number(0), Number(0),
Number(0), Number(0), Number(0), Number(0), Number(0),
Number(0), Number(0), Number(0), Number(0), Number(0),
Number(0), Number(0), Number(0), Number(0), Number(0),
Number(0), Number(0), Number(0), Number(0), Number(0),
Number(0),
],
}
}
}
@ -81,7 +98,10 @@ pub fn expand(cap: &[u8], params: &[Param], vars: &mut Variables)
let mut stack: ~[Param] = ~[];
// Copy parameters into a local vector for mutability
let mut mparams = [Number(0), ..9];
let mut mparams = [
Number(0), Number(0), Number(0), Number(0), Number(0),
Number(0), Number(0), Number(0), Number(0),
];
for mparams.mut_iter().zip(params.iter()).advance |(dst, src)| {
*dst = (*src).clone();
}

View File

@ -433,7 +433,7 @@ fn check_copy(cx: Context, ty: ty::t, sp: span, reason: &str) {
debug!("type_contents(%s)=%s",
ty_to_str(cx.tcx, ty),
ty::type_contents(cx.tcx, ty).to_str());
if !ty::type_is_copyable(cx.tcx, ty) {
if ty::type_moves_by_default(cx.tcx, ty) {
cx.tcx.sess.span_err(
sp, fmt!("copying a value of non-copyable type `%s`",
ty_to_str(cx.tcx, ty)));

View File

@ -33,8 +33,11 @@ pub trait reader {
fn dup(@mut self) -> @reader;
}
#[deriving(Eq)]
pub struct TokenAndSpan {tok: token::Token, sp: span}
#[deriving(Clone, Eq)]
pub struct TokenAndSpan {
tok: token::Token,
sp: span,
}
pub struct StringReader {
span_diagnostic: @span_handler,

View File

@ -280,7 +280,12 @@ pub fn Parser(sess: @mut ParseSess,
token: @mut tok0.tok,
span: @mut span,
last_span: @mut span,
buffer: @mut ([placeholder, .. 4]),
buffer: @mut ([
placeholder.clone(),
placeholder.clone(),
placeholder.clone(),
placeholder.clone(),
]),
buffer_start: @mut 0,
buffer_end: @mut 0,
tokens_consumed: @mut 0,