diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2012-09-23 04:39:27 -0700 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2012-09-23 13:30:13 -0500 |
| commit | ba3eebd41db384c2a46535e8db8c7b2337d55f0b (patch) | |
| tree | 0a746d1b95cd85358fa07aca67683524c8dd1f79 /src/libsyntax/parse | |
| parent | 2e7ddee8239ceba5989c5dfd83e9a935775b00d1 (diff) | |
| download | rust-ba3eebd41db384c2a46535e8db8c7b2337d55f0b.tar.gz rust-ba3eebd41db384c2a46535e8db8c7b2337d55f0b.zip | |
Make it illegal to use modes in a fn signature with providing
an explicit variable name. (Step one to changing the defaults) First step to #3535
Diffstat (limited to 'src/libsyntax/parse')
| -rw-r--r-- | src/libsyntax/parse/obsolete.rs | 8 | ||||
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 16 |
2 files changed, 20 insertions, 4 deletions
diff --git a/src/libsyntax/parse/obsolete.rs b/src/libsyntax/parse/obsolete.rs index 3891e7b6d17..d787123bf61 100644 --- a/src/libsyntax/parse/obsolete.rs +++ b/src/libsyntax/parse/obsolete.rs @@ -21,7 +21,8 @@ pub enum ObsoleteSyntax { ObsoleteWith, ObsoleteClassMethod, ObsoleteClassTraits, - ObsoletePrivSection + ObsoletePrivSection, + ObsoleteModeInFnType } #[cfg(stage0)] @@ -99,6 +100,11 @@ impl parser : ObsoleteReporter { "the `priv` keyword is applied to individual items, methods, \ and fields" ), + ObsoleteModeInFnType => ( + "mode without identifier in fn type", + "to use a (deprecated) mode in a fn type, you should \ + give the argument an explicit name (like `&&v: int`)" + ), }; self.report(sp, kind, kind_str, desc); diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index a6ad5b35484..f2e7245a1d4 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -19,7 +19,8 @@ use obsolete::{ ObsoleteReporter, ObsoleteSyntax, ObsoleteLowerCaseKindBounds, ObsoleteLet, ObsoleteFieldTerminator, ObsoleteStructCtor, - ObsoleteWith, ObsoleteClassMethod, ObsoleteClassTraits + ObsoleteWith, ObsoleteClassMethod, ObsoleteClassTraits, + ObsoleteModeInFnType }; use ast::{_mod, add, alt_check, alt_exhaustive, arg, arm, attribute, bind_by_ref, bind_by_implicit_ref, bind_by_value, bind_by_move, @@ -618,6 +619,15 @@ impl parser { } else { special_idents::invalid } }; + match m { + expl(_) => { + if i == special_idents::invalid { + self.obsolete(copy self.span, ObsoleteModeInFnType); + } + } + _ => {} + } + let t = self.parse_ty(false); {mode: m, ty: t, ident: i, id: self.get_id()} @@ -1585,7 +1595,7 @@ impl parser { } fn parse_sugary_call_expr(keyword: ~str, - ctor: fn(+@expr) -> expr_) -> @expr { + ctor: fn(+v: @expr) -> expr_) -> @expr { let lo = self.last_span; // Parse the callee `foo` in // for foo || { @@ -2400,7 +2410,7 @@ impl parser { fn(parser) -> arg_or_capture_item) -> (self_ty, fn_decl, capture_clause) { - fn maybe_parse_self_ty(cnstr: fn(+mutability) -> ast::self_ty_, + fn maybe_parse_self_ty(cnstr: fn(+v: mutability) -> ast::self_ty_, p: parser) -> ast::self_ty_ { // We need to make sure it isn't a mode or a type if p.token_is_keyword(~"self", p.look_ahead(1)) || |
