Skip to content

Commit

Permalink
auto merge of #9336 : alexcrichton/rust/issue-7981, r=catamorphism
Browse files Browse the repository at this point in the history
Progress on #7981

This doesn't completely close the issue because `struct A;` is still allowed, and it's a much larger change to disallow that. I'm also not entirely sure that we want to disallow that. Regardless, punting that discussion to the issue instead.
  • Loading branch information
bors committed Sep 24, 2013
2 parents e3624ed + 4b266f1 commit a7d68ad
Show file tree
Hide file tree
Showing 24 changed files with 36 additions and 35 deletions.
2 changes: 1 addition & 1 deletion src/libstd/rt/io/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -472,7 +472,7 @@ pub trait Writer {

pub trait Stream: Reader + Writer { }

impl<T: Reader + Writer> Stream for T;
impl<T: Reader + Writer> Stream for T {}

pub enum SeekStyle {
/// Seek from the beginning of the stream
Expand Down
2 changes: 1 addition & 1 deletion src/libstd/rt/uv/file.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ use libc::{c_int};
use option::{None, Some, Option};

pub struct FsRequest(*uvll::uv_fs_t);
impl Request for FsRequest;
impl Request for FsRequest {}

pub struct RequestData {
complete_cb: Option<FsCallback>
Expand Down
5 changes: 5 additions & 0 deletions src/libsyntax/parse/obsolete.rs
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ pub enum ObsoleteSyntax {
ObsoletePrivVisibility,
ObsoleteTraitFuncVisibility,
ObsoleteConstPointer,
ObsoleteEmptyImpl,
}

impl to_bytes::IterBytes for ObsoleteSyntax {
Expand Down Expand Up @@ -256,6 +257,10 @@ impl ParserObsoleteMethods for Parser {
"instead of `&const Foo` or `@const Foo`, write `&Foo` or \
`@Foo`"
),
ObsoleteEmptyImpl => (
"empty implementation",
"instead of `impl A;`, write `impl A {}`"
),
};

self.report(sp, kind, kind_str, desc);
Expand Down
4 changes: 3 additions & 1 deletion src/libsyntax/parse/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3852,7 +3852,9 @@ impl Parser {
}

let mut meths = ~[];
if !self.eat(&token::SEMI) {
if self.eat(&token::SEMI) {
self.obsolete(*self.span, ObsoleteEmptyImpl);
} else {
self.expect(&token::LBRACE);
while !self.eat(&token::RBRACE) {
meths.push(self.parse_method());
Expand Down
16 changes: 5 additions & 11 deletions src/libsyntax/print/pprust.rs
Original file line number Diff line number Diff line change
Expand Up @@ -598,18 +598,12 @@ pub fn print_item(s: @ps, item: &ast::item) {

print_type(s, ty);

if methods.len() == 0 {
word(s.s, ";");
end(s); // end the head-ibox
end(s); // end the outer cbox
} else {
space(s.s);
bopen(s);
for meth in methods.iter() {
print_method(s, *meth);
}
bclose(s, item.span);
space(s.s);
bopen(s);
for meth in methods.iter() {
print_method(s, *meth);
}
bclose(s, item.span);
}
ast::item_trait(ref generics, ref traits, ref methods) => {
head(s, visibility_qualified(item.vis, "trait"));
Expand Down
2 changes: 1 addition & 1 deletion src/test/auxiliary/trait_inheritance_overloading_xc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,6 @@ impl Eq for MyInt {
fn ne(&self, other: &MyInt) -> bool { !self.eq(other) }
}

impl MyNum for MyInt;
impl MyNum for MyInt {}

fn mi(v: int) -> MyInt { MyInt { val: v } }
2 changes: 1 addition & 1 deletion src/test/compile-fail/missing-derivable-attr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ impl MyEq for int {
fn eq(&self, other: &int) -> bool { *self == *other }
}

impl MyEq for A; //~ ERROR missing method
impl MyEq for A {} //~ ERROR missing method

fn main() {
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ trait Trait<T1> {
}
}

impl<T> Trait<T> for Struct;
impl<T> Trait<T> for Struct {}

fn main() {

Expand Down
2 changes: 1 addition & 1 deletion src/test/debug-info/self-in-default-method.rs
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ trait Trait {
}
}

impl Trait for Struct;
impl Trait for Struct {}

fn main() {
let stack = Struct { x: 100 };
Expand Down
2 changes: 1 addition & 1 deletion src/test/debug-info/self-in-generic-default-method.rs
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ trait Trait {
}
}

impl Trait for Struct;
impl Trait for Struct {}

fn main() {
let stack = Struct { x: 987 };
Expand Down
2 changes: 1 addition & 1 deletion src/test/debug-info/trait-generic-static-default-method.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ trait Trait {
}
}

impl Trait for Struct;
impl Trait for Struct {}

fn main() {

Expand Down
4 changes: 2 additions & 2 deletions src/test/pretty/empty-impl.pp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
trait X { }
impl X for uint;
impl X for uint { }

trait Y { }
impl Y for uint;
impl Y for uint { }
4 changes: 2 additions & 2 deletions src/test/pretty/empty-impl.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
trait X { }
impl X for uint;
impl X for uint { }

trait Y { }
impl Y for uint;
impl Y for uint { }
2 changes: 1 addition & 1 deletion src/test/pretty/path-type-bounds.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// pp-exact

trait Tr { }
impl Tr for int;
impl Tr for int { }

fn foo(x: ~Tr: Freeze) -> ~Tr: Freeze { x }

Expand Down
2 changes: 1 addition & 1 deletion src/test/run-pass/default-method-supertrait-vtable.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ impl Y for int {
fn y(self) -> int { self }
}

impl Z for int;
impl Z for int {}

fn main() {
assert_eq!(12.x(), 12);
Expand Down
2 changes: 1 addition & 1 deletion src/test/run-pass/issue-3979-generics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ impl Positioned<int> for Point {
}
}

impl Movable<int> for Point;
impl Movable<int> for Point {}

pub fn main() {
let mut p = Point{ x: 1, y: 2};
Expand Down
2 changes: 1 addition & 1 deletion src/test/run-pass/issue-3979-xcrate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ impl Positioned for Point {
}
}

impl Movable for Point;
impl Movable for Point {}

pub fn main() {
let mut p = Point{ x: 1, y: 2};
Expand Down
2 changes: 1 addition & 1 deletion src/test/run-pass/issue-3979.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ impl Positioned for Point {
}
}

impl Movable for Point;
impl Movable for Point {}

pub fn main() {
let mut p = Point{ x: 1, y: 2};
Expand Down
2 changes: 1 addition & 1 deletion src/test/run-pass/supertrait-default-generics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ impl<S: Clone> Positioned<S> for Point<S> {
}
}

impl<S: Clone + Add<S, S>> Movable<S> for Point<S>;
impl<S: Clone + Add<S, S>> Movable<S> for Point<S> {}

pub fn main() {
let mut p = Point{ x: 1, y: 2};
Expand Down
2 changes: 1 addition & 1 deletion src/test/run-pass/trait-inheritance-overloading-simple.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ impl Eq for MyInt {
fn ne(&self, other: &MyInt) -> bool { !self.eq(other) }
}

impl MyNum for MyInt;
impl MyNum for MyInt {}

fn f<T:MyNum>(x: T, y: T) -> bool {
return x == y;
Expand Down
2 changes: 1 addition & 1 deletion src/test/run-pass/trait-inheritance-overloading.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ impl Eq for MyInt {
fn ne(&self, other: &MyInt) -> bool { !self.eq(other) }
}

impl MyNum for MyInt;
impl MyNum for MyInt {}

fn f<T:MyNum>(x: T, y: T) -> (T, T, T) {
return (x + y, x - y, x * y);
Expand Down
2 changes: 1 addition & 1 deletion src/test/run-pass/trait-inheritance-subst.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ impl Add<MyInt, MyInt> for MyInt {
fn add(&self, other: &MyInt) -> MyInt { mi(self.val + other.val) }
}

impl MyNum for MyInt;
impl MyNum for MyInt {}

fn f<T:MyNum>(x: T, y: T) -> T {
return x.add(&y);
Expand Down
2 changes: 1 addition & 1 deletion src/test/run-pass/trait-inheritance-subst2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ impl Add<MyInt, MyInt> for MyInt {
fn add(&self, other: &MyInt) -> MyInt { self.chomp(other) }
}

impl MyNum for MyInt;
impl MyNum for MyInt {}

fn f<T:MyNum>(x: T, y: T) -> T {
return x.add(&y).chomp(&y);
Expand Down
2 changes: 1 addition & 1 deletion src/test/run-pass/trait-inheritance2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ struct A { x: int }
impl Foo for A { fn f(&self) -> int { 10 } }
impl Bar for A { fn g(&self) -> int { 20 } }
impl Baz for A { fn h(&self) -> int { 30 } }
impl Quux for A;
impl Quux for A {}

fn f<T:Quux + Foo + Bar + Baz>(a: &T) {
assert_eq!(a.f(), 10);
Expand Down

0 comments on commit a7d68ad

Please sign in to comment.