Skip to content

Commit 9d7014e

Browse files
committed
auto merge of #4861 : sethpink/rust/incoming, r=catamorphism
Fix for issue #4830.
2 parents 2fc1f41 + 8ebdb3d commit 9d7014e

File tree

4 files changed

+40
-60
lines changed

4 files changed

+40
-60
lines changed

src/libsyntax/parse/obsolete.rs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ pub enum ObsoleteSyntax {
3939
ObsoleteFieldTerminator,
4040
ObsoleteStructCtor,
4141
ObsoleteWith,
42-
ObsoleteClassMethod,
4342
ObsoleteClassTraits,
4443
ObsoletePrivSection,
4544
ObsoleteModeInFnType,
@@ -85,10 +84,6 @@ pub impl Parser {
8584
"record update is done with `..`, e.g. \
8685
`MyStruct { foo: bar, .. baz }`"
8786
),
88-
ObsoleteClassMethod => (
89-
"class method",
90-
"methods should be defined inside impls"
91-
),
9287
ObsoleteClassTraits => (
9388
"class traits",
9489
"implemented traits are specified on the impl, as in \

src/libsyntax/parse/parser.rs

Lines changed: 24 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ use parse::lexer::TokenAndSpan;
7272
use parse::obsolete::{ObsoleteClassTraits, ObsoleteModeInFnType};
7373
use parse::obsolete::{ObsoleteLet, ObsoleteFieldTerminator};
7474
use parse::obsolete::{ObsoleteMoveInit, ObsoleteBinaryMove};
75-
use parse::obsolete::{ObsoleteStructCtor, ObsoleteWith, ObsoleteClassMethod};
75+
use parse::obsolete::{ObsoleteStructCtor, ObsoleteWith};
7676
use parse::obsolete::{ObsoleteSyntax, ObsoleteLowerCaseKindBounds};
7777
use parse::obsolete::{ObsoleteUnsafeBlock};
7878
use parse::prec::{as_prec, token_to_binop};
@@ -3002,52 +3002,29 @@ pub impl Parser {
30023002
}
30033003

30043004
fn parse_single_class_item(vis: visibility) -> @struct_field {
3005-
let obsolete_let = self.eat_obsolete_ident("let");
3006-
if obsolete_let { self.obsolete(copy self.last_span, ObsoleteLet) }
3007-
3008-
let parse_obsolete_method =
3009-
!((obsolete_let || self.is_keyword(~"mut") ||
3010-
!self.is_any_keyword(copy self.token))
3011-
&& !self.token_is_pound_or_doc_comment(copy self.token));
3005+
if self.eat_obsolete_ident("let") {
3006+
self.obsolete(copy self.last_span, ObsoleteLet);
3007+
}
30123008

3013-
if !parse_obsolete_method {
3014-
let a_var = self.parse_instance_var(vis);
3015-
match self.token {
3016-
token::SEMI => {
3017-
self.obsolete(copy self.span, ObsoleteFieldTerminator);
3018-
self.bump();
3019-
}
3020-
token::COMMA => {
3021-
self.bump();
3022-
}
3023-
token::RBRACE => {}
3024-
_ => {
3025-
self.span_fatal(copy self.span,
3026-
fmt!("expected `;`, `,`, or '}' but \
3027-
found `%s`",
3028-
token_to_str(self.reader,
3029-
self.token)));
3030-
}
3031-
}
3032-
a_var
3033-
} else {
3034-
self.obsolete(copy self.span, ObsoleteClassMethod);
3035-
self.parse_method();
3036-
// bogus value
3037-
@spanned(
3038-
self.span.lo,
3039-
self.span.hi,
3040-
ast::struct_field_ {
3041-
kind: unnamed_field,
3042-
id: self.get_id(),
3043-
ty: @ast::Ty {
3044-
id: self.get_id(),
3045-
node: ty_nil,
3046-
span: copy self.span,
3047-
}
3048-
}
3049-
)
3009+
let a_var = self.parse_instance_var(vis);
3010+
match self.token {
3011+
token::SEMI => {
3012+
self.obsolete(copy self.span, ObsoleteFieldTerminator);
3013+
self.bump();
3014+
}
3015+
token::COMMA => {
3016+
self.bump();
3017+
}
3018+
token::RBRACE => {}
3019+
_ => {
3020+
self.span_fatal(copy self.span,
3021+
fmt!("expected `;`, `,`, or '}' but \
3022+
found `%s`",
3023+
token_to_str(self.reader,
3024+
self.token)));
3025+
}
30503026
}
3027+
a_var
30513028
}
30523029

30533030
fn parse_dtor(attrs: ~[attribute]) -> class_contents {
@@ -3062,6 +3039,8 @@ pub impl Parser {
30623039
return members(~[]);
30633040
}
30643041

3042+
let attrs = self.parse_outer_attributes();
3043+
30653044
if self.eat_keyword(~"priv") {
30663045
return members(~[self.parse_single_class_item(private)])
30673046
}
@@ -3070,8 +3049,6 @@ pub impl Parser {
30703049
return members(~[self.parse_single_class_item(public)]);
30713050
}
30723051

3073-
let attrs = self.parse_outer_attributes();
3074-
30753052
if self.try_parse_obsolete_struct_ctor() {
30763053
return members(~[]);
30773054
}

src/test/compile-fail/obsolete-syntax.rs

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,6 @@ struct s {
2929
//~^ ERROR obsolete syntax: struct constructor
3030
}
3131

32-
struct ss {
33-
fn foo() { }
34-
//~^ ERROR obsolete syntax: class method
35-
#[whatever]
36-
fn foo() { }
37-
//~^ ERROR obsolete syntax: class method
38-
}
39-
4032
struct q : r {
4133
//~^ ERROR obsolete syntax: class traits
4234
}

src/test/run-pass/issue-4830.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// Copyright 2012 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
pub struct Scheduler {
12+
/// The event loop used to drive the scheduler and perform I/O
13+
priv event_loop: ~int
14+
}
15+
16+
pub fn main() { }

0 commit comments

Comments
 (0)