From c4fa2a37ae4958cae22d442885f04eeba9ba21ba Mon Sep 17 00:00:00 2001 From: Jorge Aparicio Date: Mon, 1 Dec 2014 15:09:03 -0500 Subject: [PATCH] libsyntax: convert `LockstepIterSize` binops to by value --- src/libsyntax/ext/tt/transcribe.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/libsyntax/ext/tt/transcribe.rs b/src/libsyntax/ext/tt/transcribe.rs index 99799fecb788..e2439bad178f 100644 --- a/src/libsyntax/ext/tt/transcribe.rs +++ b/src/libsyntax/ext/tt/transcribe.rs @@ -106,6 +106,8 @@ enum LockstepIterSize { LisContradiction(String), } +// NOTE(stage0): Remove impl after a snapshot +#[cfg(stage0)] impl Add for LockstepIterSize { fn add(&self, other: &LockstepIterSize) -> LockstepIterSize { match *self { @@ -127,6 +129,28 @@ impl Add for LockstepIterSize { } } +#[cfg(not(stage0))] // NOTE(stage0): Remove cfg after a snapshot +impl Add for LockstepIterSize { + fn add(self, other: LockstepIterSize) -> LockstepIterSize { + match self { + LisUnconstrained => other, + LisContradiction(_) => self, + LisConstraint(l_len, ref l_id) => match other { + LisUnconstrained => self.clone(), + LisContradiction(_) => other, + LisConstraint(r_len, _) if l_len == r_len => self.clone(), + LisConstraint(r_len, r_id) => { + let l_n = token::get_ident(l_id.clone()); + let r_n = token::get_ident(r_id); + LisContradiction(format!("inconsistent lockstep iteration: \ + '{}' has {} items, but '{}' has {}", + l_n, l_len, r_n, r_len).to_string()) + } + }, + } + } +} + fn lockstep_iter_size(t: &TokenTree, r: &TtReader) -> LockstepIterSize { match *t { TtDelimited(_, ref delimed) => {