From 197a0ac481ae6d154c0966b21849432f1b32c28f Mon Sep 17 00:00:00 2001 From: Andrew Cann Date: Mon, 17 Nov 2014 17:35:18 +0800 Subject: change return type of slice_shift_char `slice_shift_char` splits a `str` into it's leading `char` and the remainder of the `str`. Currently, it returns a `(Option, &str)` such that: "bar".slice_shift_char() => (Some('b'), "ar") "ar".slice_shift_char() => (Some('a'), "r") "r".slice_shift_char() => (Some('r'), "") "".slice_shift_char() => (None, "") This is a little odd. Either a `str` can be split into both a head and a tail or it cannot. So the return type should be `Option<(char, &str)>`. With the current behaviour, in the case of the empty string, the `str` returned is meaningless - it is always the empty string. This commit changes slice_shift_char so that: "bar".slice_shift_char() => Some(('b', "ar")) "ar".slice_shift_char() => Some(('a', "r")) "r".slice_shift_char() => Some(('r', "")) "".slice_shift_char() => None [breaking-change] --- src/libsyntax/ext/asm.rs | 4 ++-- src/libsyntax/print/pprust.rs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'src/libsyntax') diff --git a/src/libsyntax/ext/asm.rs b/src/libsyntax/ext/asm.rs index d57d6e52d7f..dc9e62cabff 100644 --- a/src/libsyntax/ext/asm.rs +++ b/src/libsyntax/ext/asm.rs @@ -96,8 +96,8 @@ pub fn expand_asm<'cx>(cx: &'cx mut ExtCtxt, sp: Span, tts: &[ast::TokenTree]) // cannot be shared with any other operand (usually when // a register is clobbered early.) let output = match constraint.get().slice_shift_char() { - (Some('='), _) => None, - (Some('+'), operand) => { + Some(('=', _)) => None, + Some(('+', operand)) => { Some(token::intern_and_get_ident(format!( "={}", operand).as_slice())) diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index 7025555ab40..a78b7b10de8 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -1853,7 +1853,7 @@ impl<'a> State<'a> { try!(self.commasep(Inconsistent, a.outputs.as_slice(), |s, &(ref co, ref o, is_rw)| { match co.get().slice_shift_char() { - (Some('='), operand) if is_rw => { + Some(('=', operand)) if is_rw => { try!(s.print_string(format!("+{}", operand).as_slice(), ast::CookedStr)) } -- cgit 1.4.1-3-g733a5