mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-28 11:07:42 +00:00
Visit Stmt span in MutVisitor::flat_map_stmt
This commit is contained in:
parent
a2eca35c15
commit
a3cfe2fd08
@ -1789,20 +1789,21 @@ pub fn noop_filter_map_expr<T: MutVisitor>(vis: &mut T, mut e: P<Expr>) -> Optio
|
|||||||
|
|
||||||
pub fn walk_flat_map_stmt<T: MutVisitor>(
|
pub fn walk_flat_map_stmt<T: MutVisitor>(
|
||||||
vis: &mut T,
|
vis: &mut T,
|
||||||
Stmt { kind, mut span, mut id }: Stmt,
|
Stmt { kind, span, mut id }: Stmt,
|
||||||
) -> SmallVec<[Stmt; 1]> {
|
) -> SmallVec<[Stmt; 1]> {
|
||||||
vis.visit_id(&mut id);
|
vis.visit_id(&mut id);
|
||||||
let stmts: SmallVec<_> = walk_flat_map_stmt_kind(vis, kind)
|
let mut stmts: SmallVec<[Stmt; 1]> = walk_flat_map_stmt_kind(vis, kind)
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|kind| Stmt { id, kind, span })
|
.map(|kind| Stmt { id, kind, span })
|
||||||
.collect();
|
.collect();
|
||||||
if stmts.len() > 1 {
|
match stmts.len() {
|
||||||
panic!(
|
0 => {}
|
||||||
|
1 => vis.visit_span(&mut stmts[0].span),
|
||||||
|
2.. => panic!(
|
||||||
"cloning statement `NodeId`s is prohibited by default, \
|
"cloning statement `NodeId`s is prohibited by default, \
|
||||||
the visitor should implement custom statement visiting"
|
the visitor should implement custom statement visiting"
|
||||||
);
|
),
|
||||||
}
|
}
|
||||||
vis.visit_span(&mut span);
|
|
||||||
stmts
|
stmts
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,12 +36,11 @@ extern crate rustc_errors;
|
|||||||
extern crate rustc_parse;
|
extern crate rustc_parse;
|
||||||
extern crate rustc_session;
|
extern crate rustc_session;
|
||||||
extern crate rustc_span;
|
extern crate rustc_span;
|
||||||
extern crate smallvec;
|
|
||||||
|
|
||||||
use std::mem;
|
use std::mem;
|
||||||
use std::process::ExitCode;
|
use std::process::ExitCode;
|
||||||
|
|
||||||
use rustc_ast::ast::{DUMMY_NODE_ID, Expr, ExprKind, Stmt};
|
use rustc_ast::ast::{DUMMY_NODE_ID, Expr, ExprKind};
|
||||||
use rustc_ast::mut_visit::{self, DummyAstNode as _, MutVisitor};
|
use rustc_ast::mut_visit::{self, DummyAstNode as _, MutVisitor};
|
||||||
use rustc_ast::node_id::NodeId;
|
use rustc_ast::node_id::NodeId;
|
||||||
use rustc_ast::ptr::P;
|
use rustc_ast::ptr::P;
|
||||||
@ -50,7 +49,6 @@ use rustc_errors::Diag;
|
|||||||
use rustc_parse::parser::Recovery;
|
use rustc_parse::parser::Recovery;
|
||||||
use rustc_session::parse::ParseSess;
|
use rustc_session::parse::ParseSess;
|
||||||
use rustc_span::{DUMMY_SP, FileName, Span};
|
use rustc_span::{DUMMY_SP, FileName, Span};
|
||||||
use smallvec::SmallVec;
|
|
||||||
|
|
||||||
// Every parenthesis in the following expressions is re-inserted by the
|
// Every parenthesis in the following expressions is re-inserted by the
|
||||||
// pretty-printer.
|
// pretty-printer.
|
||||||
@ -164,11 +162,6 @@ impl MutVisitor for Normalize {
|
|||||||
fn visit_span(&mut self, span: &mut Span) {
|
fn visit_span(&mut self, span: &mut Span) {
|
||||||
*span = DUMMY_SP;
|
*span = DUMMY_SP;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn flat_map_stmt(&mut self, mut stmt: Stmt) -> SmallVec<[Stmt; 1]> {
|
|
||||||
self.visit_span(&mut stmt.span);
|
|
||||||
mut_visit::walk_flat_map_stmt(self, stmt)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parse_expr(psess: &ParseSess, source_code: &str) -> Option<P<Expr>> {
|
fn parse_expr(psess: &ParseSess, source_code: &str) -> Option<P<Expr>> {
|
||||||
|
Loading…
Reference in New Issue
Block a user