diff options
| author | Thomas Bahn <thomas@thomas-bahn.net> | 2020-12-19 23:13:50 +0100 |
|---|---|---|
| committer | Thomas Bahn <thomas@thomas-bahn.net> | 2020-12-20 13:11:07 +0100 |
| commit | b05ab18aec28c5025212ad44a202072ed2f610d7 (patch) | |
| tree | 4c24cf8947c9ed79b37dde8d54b7d55215ad6cb8 /compiler | |
| parent | b1964e60b72c2d10e9fd4e801990f8af3f306ac0 (diff) | |
| download | rust-b05ab18aec28c5025212ad44a202072ed2f610d7.tar.gz rust-b05ab18aec28c5025212ad44a202072ed2f610d7.zip | |
Fix pretty printing an AST representing `&(mut ident)`
`PatKind::Ref(PatKind::Ident(BindingMode::ByValue(Mutability::Mut), ..), ..)` is an AST representing `&(mut ident)`. It was errorneously printed as `&mut ident` which reparsed into a syntactically different AST. This affected help diagnostics in the parser.
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/rustc_ast_pretty/src/pprust/state.rs | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/compiler/rustc_ast_pretty/src/pprust/state.rs b/compiler/rustc_ast_pretty/src/pprust/state.rs index fdb129d9e2a..dcb6e115eda 100644 --- a/compiler/rustc_ast_pretty/src/pprust/state.rs +++ b/compiler/rustc_ast_pretty/src/pprust/state.rs @@ -2420,7 +2420,15 @@ impl<'a> State<'a> { if mutbl == ast::Mutability::Mut { self.s.word("mut "); } - self.print_pat(inner); + if let PatKind::Ident(ast::BindingMode::ByValue(ast::Mutability::Mut), ..) = + inner.kind + { + self.popen(); + self.print_pat(inner); + self.pclose(); + } else { + self.print_pat(inner); + } } PatKind::Lit(ref e) => self.print_expr(&**e), PatKind::Range(ref begin, ref end, Spanned { node: ref end_kind, .. }) => { |
