From 9f15ccb4480794491bcddbd642c78436d2471d72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adolfo=20Ochagav=C3=ADa?= Date: Sat, 22 Nov 2014 16:24:58 +0100 Subject: [PATCH 1/2] Fix pretty printing unsafe match arms --- src/libsyntax/print/pprust.rs | 37 +++++++++++++++-------------------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index 4ce0d74bd37..10de040c048 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -11,31 +11,25 @@ pub use self::AnnNode::*; use abi; -use ast::{FnUnboxedClosureKind, FnMutUnboxedClosureKind}; +use ast::{mod, FnUnboxedClosureKind, FnMutUnboxedClosureKind}; use ast::{FnOnceUnboxedClosureKind}; use ast::{MethodImplItem, RegionTyParamBound, TraitTyParamBound}; use ast::{RequiredMethod, ProvidedMethod, TypeImplItem, TypeTraitItem}; use ast::{UnboxedClosureKind}; -use ast; use ast_util; use owned_slice::OwnedSlice; use attr::{AttrMetaMethods, AttributeMethods}; -use codemap::{CodeMap, BytePos}; -use codemap; +use codemap::{mod, CodeMap, BytePos}; use diagnostic; -use parse::token::{BinOpToken, Token}; -use parse::token; +use parse::token::{mod, BinOpToken, Token}; use parse::lexer::comments; use parse; -use print::pp::{break_offset, word, space, zerobreak, hardbreak}; +use print::pp::{mod, break_offset, word, space, zerobreak, hardbreak}; use print::pp::{Breaks, Consistent, Inconsistent, eof}; -use print::pp; use ptr::P; -use std::ascii; -use std::io::IoResult; -use std::io; -use std::mem; +use std::{ascii, mem}; +use std::io::{mod, IoResult}; pub enum AnnNode<'a> { NodeIdent(&'a ast::Ident), @@ -2164,21 +2158,22 @@ impl<'a> State<'a> { try!(self.print_pat(&**p)); } try!(space(&mut self.s)); - match arm.guard { - Some(ref e) => { - try!(self.word_space("if")); - try!(self.print_expr(&**e)); - try!(space(&mut self.s)); - } - None => () + if let Some(ref e) = arm.guard { + try!(self.word_space("if")); + try!(self.print_expr(&**e)); + try!(space(&mut self.s)); } try!(self.word_space("=>")); match arm.body.node { ast::ExprBlock(ref blk) => { // the block will close the pattern's ibox - try!(self.print_block_unclosed_indent(&**blk, - indent_unit)); + try!(self.print_block_unclosed_indent(&**blk, indent_unit)); + + // If it is a user-provided unsafe block, print a comma after it + if let ast::UnsafeBlock(ast::UserProvided) = blk.rules { + try!(word(&mut self.s, ",")); + } } _ => { try!(self.end()); // close the ibox for the pattern From d678684236fece2e8b55515f936c9429036f2d73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adolfo=20Ochagav=C3=ADa?= Date: Sat, 22 Nov 2014 21:41:15 +0100 Subject: [PATCH 2/2] Add test --- src/test/pretty/issue-19077.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/test/pretty/issue-19077.rs diff --git a/src/test/pretty/issue-19077.rs b/src/test/pretty/issue-19077.rs new file mode 100644 index 00000000000..6214b3e450f --- /dev/null +++ b/src/test/pretty/issue-19077.rs @@ -0,0 +1,20 @@ +// Copyright 2012 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. +// +// Testing that unsafe blocks in match arms are followed by a comma +// pp-exact +fn main() { + match true { + true if true => (), + false => unsafe { }, + true => { } + false => (), + } +}