1
Fork 0

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 { impl Variables {
/// Return a new zero-initialized Variables /// Return a new zero-initialized Variables
pub fn new() -> 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] = ~[]; let mut stack: ~[Param] = ~[];
// Copy parameters into a local vector for mutability // 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)| { for mparams.mut_iter().zip(params.iter()).advance |(dst, src)| {
*dst = (*src).clone(); *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", debug!("type_contents(%s)=%s",
ty_to_str(cx.tcx, ty), ty_to_str(cx.tcx, ty),
ty::type_contents(cx.tcx, ty).to_str()); 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( cx.tcx.sess.span_err(
sp, fmt!("copying a value of non-copyable type `%s`", sp, fmt!("copying a value of non-copyable type `%s`",
ty_to_str(cx.tcx, ty))); ty_to_str(cx.tcx, ty)));

View file

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

View file

@ -280,7 +280,12 @@ pub fn Parser(sess: @mut ParseSess,
token: @mut tok0.tok, token: @mut tok0.tok,
span: @mut span, span: @mut span,
last_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_start: @mut 0,
buffer_end: @mut 0, buffer_end: @mut 0,
tokens_consumed: @mut 0, tokens_consumed: @mut 0,