mirror of https://github.com/rust-lang/rust.git
Simplify `CfgEval`.
It can contain an owned value instead of a reference.
This commit is contained in:
parent
7d97c59438
commit
1680b791d5
|
@ -38,16 +38,14 @@ pub(crate) fn cfg_eval(
|
||||||
lint_node_id: NodeId,
|
lint_node_id: NodeId,
|
||||||
) -> Annotatable {
|
) -> Annotatable {
|
||||||
let features = Some(features);
|
let features = Some(features);
|
||||||
CfgEval { cfg: &mut StripUnconfigured { sess, features, config_tokens: true, lint_node_id } }
|
CfgEval(StripUnconfigured { sess, features, config_tokens: true, lint_node_id })
|
||||||
.configure_annotatable(annotatable)
|
.configure_annotatable(annotatable)
|
||||||
// Since the item itself has already been configured by the `InvocationCollector`,
|
// Since the item itself has already been configured by the `InvocationCollector`,
|
||||||
// we know that fold result vector will contain exactly one element.
|
// we know that fold result vector will contain exactly one element.
|
||||||
.unwrap()
|
.unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
struct CfgEval<'a, 'b> {
|
struct CfgEval<'a>(StripUnconfigured<'a>);
|
||||||
cfg: &'a mut StripUnconfigured<'b>,
|
|
||||||
}
|
|
||||||
|
|
||||||
fn flat_map_annotatable(
|
fn flat_map_annotatable(
|
||||||
vis: &mut impl MutVisitor,
|
vis: &mut impl MutVisitor,
|
||||||
|
@ -125,9 +123,9 @@ fn has_cfg_or_cfg_attr(annotatable: &Annotatable) -> bool {
|
||||||
res.is_break()
|
res.is_break()
|
||||||
}
|
}
|
||||||
|
|
||||||
impl CfgEval<'_, '_> {
|
impl CfgEval<'_> {
|
||||||
fn configure<T: HasAttrs + HasTokens>(&mut self, node: T) -> Option<T> {
|
fn configure<T: HasAttrs + HasTokens>(&mut self, node: T) -> Option<T> {
|
||||||
self.cfg.configure(node)
|
self.0.configure(node)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn configure_annotatable(&mut self, mut annotatable: Annotatable) -> Option<Annotatable> {
|
fn configure_annotatable(&mut self, mut annotatable: Annotatable) -> Option<Annotatable> {
|
||||||
|
@ -196,7 +194,7 @@ impl CfgEval<'_, '_> {
|
||||||
// Re-parse the tokens, setting the `capture_cfg` flag to save extra information
|
// Re-parse the tokens, setting the `capture_cfg` flag to save extra information
|
||||||
// to the captured `AttrTokenStream` (specifically, we capture
|
// to the captured `AttrTokenStream` (specifically, we capture
|
||||||
// `AttrTokenTree::AttributesData` for all occurrences of `#[cfg]` and `#[cfg_attr]`)
|
// `AttrTokenTree::AttributesData` for all occurrences of `#[cfg]` and `#[cfg_attr]`)
|
||||||
let mut parser = Parser::new(&self.cfg.sess.psess, orig_tokens, None);
|
let mut parser = Parser::new(&self.0.sess.psess, orig_tokens, None);
|
||||||
parser.capture_cfg = true;
|
parser.capture_cfg = true;
|
||||||
match parse_annotatable_with(&mut parser) {
|
match parse_annotatable_with(&mut parser) {
|
||||||
Ok(a) => annotatable = a,
|
Ok(a) => annotatable = a,
|
||||||
|
@ -212,16 +210,16 @@ impl CfgEval<'_, '_> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MutVisitor for CfgEval<'_, '_> {
|
impl MutVisitor for CfgEval<'_> {
|
||||||
#[instrument(level = "trace", skip(self))]
|
#[instrument(level = "trace", skip(self))]
|
||||||
fn visit_expr(&mut self, expr: &mut P<ast::Expr>) {
|
fn visit_expr(&mut self, expr: &mut P<ast::Expr>) {
|
||||||
self.cfg.configure_expr(expr, false);
|
self.0.configure_expr(expr, false);
|
||||||
mut_visit::noop_visit_expr(expr, self);
|
mut_visit::noop_visit_expr(expr, self);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[instrument(level = "trace", skip(self))]
|
#[instrument(level = "trace", skip(self))]
|
||||||
fn visit_method_receiver_expr(&mut self, expr: &mut P<ast::Expr>) {
|
fn visit_method_receiver_expr(&mut self, expr: &mut P<ast::Expr>) {
|
||||||
self.cfg.configure_expr(expr, true);
|
self.0.configure_expr(expr, true);
|
||||||
mut_visit::noop_visit_expr(expr, self);
|
mut_visit::noop_visit_expr(expr, self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue