From cf5c04ef0cbb2810c1584bcc78779e7df0a23786 Mon Sep 17 00:00:00 2001 From: Seth Pink Date: Mon, 25 Feb 2013 19:06:41 +1000 Subject: [PATCH 1/2] Obsolete message for capture clauses. --- src/libsyntax/parse/obsolete.rs | 5 +++++ src/libsyntax/parse/parser.rs | 3 ++- src/test/compile-fail/obsolete-syntax.rs | 6 ++++++ src/test/run-pass/cap-clause-not-used.rs | 15 --------------- 4 files changed, 13 insertions(+), 16 deletions(-) delete mode 100644 src/test/run-pass/cap-clause-not-used.rs diff --git a/src/libsyntax/parse/obsolete.rs b/src/libsyntax/parse/obsolete.rs index 1ae8786e09bb2..0f7c50ec8b657 100644 --- a/src/libsyntax/parse/obsolete.rs +++ b/src/libsyntax/parse/obsolete.rs @@ -48,6 +48,7 @@ pub enum ObsoleteSyntax { ObsoleteUnenforcedBound, ObsoleteImplSyntax, ObsoleteTraitBoundSeparator, + ObsoleteCaptureClause, } pub impl to_bytes::IterBytes for ObsoleteSyntax { @@ -126,6 +127,10 @@ pub impl Parser { "space-separated trait bounds", "write `+` between trait bounds" ), + ObsoleteCaptureClause => ( + "capture clause", + "referenced variables are now captured implicitly" + ), }; self.report(sp, kind, kind_str, desc); diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 9bac163dab6ef..3d0e5808253aa 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -75,7 +75,7 @@ use parse::obsolete::{ObsoleteMoveInit, ObsoleteBinaryMove}; use parse::obsolete::{ObsoleteStructCtor, ObsoleteWith}; use parse::obsolete::{ObsoleteSyntax, ObsoleteLowerCaseKindBounds}; use parse::obsolete::{ObsoleteUnsafeBlock, ObsoleteImplSyntax}; -use parse::obsolete::{ObsoleteTraitBoundSeparator}; +use parse::obsolete::{ObsoleteTraitBoundSeparator, ObsoleteCaptureClause}; use parse::prec::{as_prec, token_to_binop}; use parse::token::{can_begin_expr, is_ident, is_ident_or_path}; use parse::token::{is_plain_ident, INTERPOLATED, special_idents}; @@ -753,6 +753,7 @@ pub impl Parser { { if self.eat_keyword(~"copy") { // XXX outdated syntax now that moves-based-on-type has gone in + self.obsolete(*self.span, ObsoleteCaptureClause); self.parse_ident(); either::Right(()) } else { diff --git a/src/test/compile-fail/obsolete-syntax.rs b/src/test/compile-fail/obsolete-syntax.rs index cd3be9dc3d9d3..88ff504d9aa10 100644 --- a/src/test/compile-fail/obsolete-syntax.rs +++ b/src/test/compile-fail/obsolete-syntax.rs @@ -61,4 +61,10 @@ fn obsolete_moves() { //~^ ERROR obsolete syntax: binary move } +fn obsolete_capture() { + let a = 5; + let b = |copy a| { }; + //~^ ERROR obsolete syntax: capture clause +} + fn main() { } diff --git a/src/test/run-pass/cap-clause-not-used.rs b/src/test/run-pass/cap-clause-not-used.rs deleted file mode 100644 index e26a8ae11fdb2..0000000000000 --- a/src/test/run-pass/cap-clause-not-used.rs +++ /dev/null @@ -1,15 +0,0 @@ -// 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. - -// error-pattern: warning: Captured variable 'y' not used in closure -pub fn main() { - let x = 5; - let _y = fn~(copy x) { }; -} From d4952c8a9b2d71b337153b857387d97a15e1c9e0 Mon Sep 17 00:00:00 2001 From: Seth Pink Date: Tue, 26 Feb 2013 09:22:30 +1000 Subject: [PATCH 2/2] Obsolete message capture clause with 'move' --- src/libsyntax/parse/parser.rs | 5 ++++- src/test/compile-fail/obsolete-syntax.rs | 6 +++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 3d0e5808253aa..8e4b2b9baaa3c 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -751,9 +751,12 @@ pub impl Parser { fn parse_capture_item_or(parse_arg_fn: fn(Parser) -> arg_or_capture_item) -> arg_or_capture_item { - if self.eat_keyword(~"copy") { + if self.token_is_keyword(~"copy", *self.token) || + self.token_is_word(~"move", *self.token) { + // XXX outdated syntax now that moves-based-on-type has gone in self.obsolete(*self.span, ObsoleteCaptureClause); + self.bump(); // eat move/copy self.parse_ident(); either::Right(()) } else { diff --git a/src/test/compile-fail/obsolete-syntax.rs b/src/test/compile-fail/obsolete-syntax.rs index 88ff504d9aa10..473f32652c3da 100644 --- a/src/test/compile-fail/obsolete-syntax.rs +++ b/src/test/compile-fail/obsolete-syntax.rs @@ -63,7 +63,11 @@ fn obsolete_moves() { fn obsolete_capture() { let a = 5; - let b = |copy a| { }; + let b = ~"abc"; + + let x = |copy a| { }; + //~^ ERROR obsolete syntax: capture clause + let y = |move b| { }; //~^ ERROR obsolete syntax: capture clause }