From 9d96c33d592732fb52055987be35b24e2929b616 Mon Sep 17 00:00:00 2001 From: topecongiro Date: Tue, 9 May 2017 17:33:45 +0900 Subject: [PATCH] Inherit alignment to last else --- src/expr.rs | 7 +++++-- tests/source/issue-1468.rs | 27 +++++++++++++++++++++++++++ tests/target/issue-1468.rs | 27 +++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 tests/source/issue-1468.rs create mode 100644 tests/target/issue-1468.rs diff --git a/src/expr.rs b/src/expr.rs index 8dfc29c38cc..6a63e1733d9 100644 --- a/src/expr.rs +++ b/src/expr.rs @@ -988,8 +988,11 @@ fn rewrite(&self, context: &RewriteContext, shape: Shape) -> Option { if let Some(else_block) = self.else_block { // Since this is an else block, we should not indent for the assignment preceding - // the original if, so set shape.offset to 0. - let shape = Shape { offset: 0, ..shape }; + // the original if, so set shape.offset to shape.indent.alignment. + let shape = Shape { + offset: shape.indent.alignment, + ..shape + }; let mut last_in_chain = false; let rewrite = match else_block.node { // If the else expression is another if-else expression, prevent it diff --git a/tests/source/issue-1468.rs b/tests/source/issue-1468.rs new file mode 100644 index 00000000000..1b45aa5d616 --- /dev/null +++ b/tests/source/issue-1468.rs @@ -0,0 +1,27 @@ +fn issue1468() { +euc_jp_decoder_functions!({ +let trail_minus_offset = byte.wrapping_sub(0xA1); +// Fast-track Hiragana (60% according to Lunde) +// and Katakana (10% acconding to Lunde). +if jis0208_lead_minus_offset == 0x03 && +trail_minus_offset < 0x53 { +// Hiragana +handle.write_upper_bmp(0x3041 + trail_minus_offset as u16) +} else if jis0208_lead_minus_offset == 0x04 && +trail_minus_offset < 0x56 { +// Katakana +handle.write_upper_bmp(0x30A1 + trail_minus_offset as u16) +} else if trail_minus_offset > (0xFE - 0xA1) { +if byte < 0x80 { +return (DecoderResult::Malformed(1, 0), +unread_handle_trail.unread(), +handle.written()); +} +return (DecoderResult::Malformed(2, 0), +unread_handle_trail.consumed(), +handle.written()); +} else { +unreachable!(); +} +}); +} diff --git a/tests/target/issue-1468.rs b/tests/target/issue-1468.rs new file mode 100644 index 00000000000..518c31b625c --- /dev/null +++ b/tests/target/issue-1468.rs @@ -0,0 +1,27 @@ +fn issue1468() { + euc_jp_decoder_functions!({ + let trail_minus_offset = byte.wrapping_sub(0xA1); + // Fast-track Hiragana (60% according to Lunde) + // and Katakana (10% acconding to Lunde). + if jis0208_lead_minus_offset == 0x03 && + trail_minus_offset < 0x53 { + // Hiragana + handle.write_upper_bmp(0x3041 + trail_minus_offset as u16) + } else if jis0208_lead_minus_offset == 0x04 && + trail_minus_offset < 0x56 { + // Katakana + handle.write_upper_bmp(0x30A1 + trail_minus_offset as u16) + } else if trail_minus_offset > (0xFE - 0xA1) { + if byte < 0x80 { + return (DecoderResult::Malformed(1, 0), + unread_handle_trail.unread(), + handle.written()); + } + return (DecoderResult::Malformed(2, 0), + unread_handle_trail.consumed(), + handle.written()); + } else { + unreachable!(); + } + }); +}