diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs index 9bfeb81b74a97af66b54082a2302399f5705fa2a..df1bbf5f26ecd3101ae8443bfba94b8fb6375ad1 100644 --- a/src/libsyntax/ext/expand.rs +++ b/src/libsyntax/ext/expand.rs @@ -70,7 +70,6 @@ fn dummy($span: Span) -> Self { $dummy } } pub fn expand_expr(e: P, fld: &mut MacroExpander) -> P { - let expr_span = e.span; return e.and_then(|ast::Expr {id, node, span, attrs}| match node { // expr_mac should really be expr_ext or something; it's the @@ -79,21 +78,6 @@ pub fn expand_expr(e: P, fld: &mut MacroExpander) -> P { expand_mac_invoc(mac, None, attrs.into_attr_vec(), span, fld) } - ast::ExprKind::InPlace(placer, value_expr) => { - // Ensure feature-gate is enabled - if !fld.cx.ecfg.features.unwrap().placement_in_syntax { - feature_gate::emit_feature_err( - &fld.cx.parse_sess.span_diagnostic, "placement_in_syntax", expr_span, - feature_gate::GateIssue::Language, feature_gate::EXPLAIN_PLACEMENT_IN - ); - } - - let placer = fld.fold_expr(placer); - let value_expr = fld.fold_expr(value_expr); - fld.cx.expr(span, ast::ExprKind::InPlace(placer, value_expr)) - .with_attrs(fold_thin_attrs(attrs, fld)) - } - ast::ExprKind::While(cond, body, opt_ident) => { let cond = fld.fold_expr(cond); let (body, opt_ident) = expand_loop_block(body, opt_ident, fld); diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs index acef98f2afc1bc3b724480e556dd66109623001d..dbef06f7aa495532b360016a2c5e258bb88d8cd3 100644 --- a/src/libsyntax/feature_gate.rs +++ b/src/libsyntax/feature_gate.rs @@ -997,6 +997,9 @@ fn visit_expr(&mut self, e: &ast::Expr) { ast::ExprKind::Try(..) => { gate_feature_post!(&self, question_mark, e.span, "the `?` operator is not stable"); } + ast::ExprKind::InPlace(..) => { + gate_feature_post!(&self, placement_in_syntax, e.span, EXPLAIN_PLACEMENT_IN); + } _ => {} } visit::walk_expr(self, e);