1
Fork 0

libsyntax: Separate multiple inherited traits with +

This commit is contained in:
Patrick Walton 2013-03-04 16:11:30 -08:00
parent 5f55a07075
commit 6d4ed5283c
17 changed files with 30 additions and 24 deletions

View file

@ -3112,7 +3112,7 @@ pub impl Parser {
fn parse_trait_ref_list(&self, ket: &token::Token) -> ~[@trait_ref] { fn parse_trait_ref_list(&self, ket: &token::Token) -> ~[@trait_ref] {
self.parse_seq_to_before_end( self.parse_seq_to_before_end(
ket, ket,
seq_sep_none(), seq_sep_trailing_disallowed(token::BINOP(token::PLUS)),
|p| p.parse_trait_ref() |p| p.parse_trait_ref()
) )
} }

View file

@ -600,8 +600,11 @@ pub fn print_item(s: @ps, &&item: @ast::item) {
print_generics(s, generics); print_generics(s, generics);
if traits.len() != 0u { if traits.len() != 0u {
word(s.s, ~":"); word(s.s, ~":");
for traits.each |trait_| { for traits.eachi |i, trait_| {
nbsp(s); nbsp(s);
if i != 0 {
word_space(s, ~"+");
}
print_path(s, trait_.path, false); print_path(s, trait_.path, false);
} }
} }

View file

@ -12,6 +12,6 @@ trait Foo { fn f() -> int; }
trait Bar { fn g() -> int; } trait Bar { fn g() -> int; }
trait Baz { fn h() -> int; } trait Baz { fn h() -> int; }
trait Quux: Foo Bar Baz { } trait Quux: Foo + Bar + Baz { }
impl<T:Foo + Bar + Baz> Quux for T { } impl<T:Foo + Bar + Baz> Quux for T { }

View file

@ -10,7 +10,7 @@
use core::cmp::Eq; use core::cmp::Eq;
pub trait MyNum : Add<Self,Self> Sub<Self,Self> Mul<Self,Self> Eq { pub trait MyNum : Add<Self,Self> + Sub<Self,Self> + Mul<Self,Self> + Eq {
} }
pub struct MyInt { pub struct MyInt {

View file

@ -10,12 +10,15 @@
use core::cmp::Eq; use core::cmp::Eq;
trait Hahaha: Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq //~ ERROR Duplicate supertrait in trait declaration trait Hahaha: Eq + Eq + Eq + Eq + Eq + //~ ERROR Duplicate supertrait
Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq +
Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq +
Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq +
Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq +
Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq Eq {} Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq +
Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq +
Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq + Eq +
Eq {}
enum Lol = int; enum Lol = int;

View file

@ -17,7 +17,7 @@ extern mod aux(name = "trait_inheritance_auto_xc_2_aux");
use aux::{Foo, Bar, Baz, A}; use aux::{Foo, Bar, Baz, A};
// We want to extend all Foo, Bar, Bazes to Quuxes // We want to extend all Foo, Bar, Bazes to Quuxes
pub trait Quux: Foo Bar Baz { } pub trait Quux: Foo + Bar + Baz { }
impl<T:Foo + Bar + Baz> Quux for T { } impl<T:Foo + Bar + Baz> Quux for T { }
fn f<T:Quux>(a: &T) { fn f<T:Quux>(a: &T) {

View file

@ -16,7 +16,7 @@ trait Foo { fn f() -> int; }
trait Bar { fn g() -> int; } trait Bar { fn g() -> int; }
trait Baz { fn h() -> int; } trait Baz { fn h() -> int; }
trait Quux: Foo Bar Baz { } trait Quux: Foo + Bar + Baz { }
struct A { x: int } struct A { x: int }

View file

@ -13,7 +13,7 @@
trait A { fn a(&self) -> int; } trait A { fn a(&self) -> int; }
trait B: A { fn b(&self) -> int; } trait B: A { fn b(&self) -> int; }
trait C: A { fn c(&self) -> int; } trait C: A { fn c(&self) -> int; }
trait D: B C { fn d(&self) -> int; } trait D: B + C { fn d(&self) -> int; }
struct S { bogus: () } struct S { bogus: () }

View file

@ -16,9 +16,9 @@ use core::num::NumCast::from;
extern mod std; extern mod std;
use std::cmp::FuzzyEq; use std::cmp::FuzzyEq;
pub trait NumExt: NumCast Eq Ord {} pub trait NumExt: NumCast + Eq + Ord {}
pub trait FloatExt: NumExt FuzzyEq<Self> {} pub trait FloatExt: NumExt + FuzzyEq<Self> {}
fn greater_than_one<T:NumExt>(n: &T) -> bool { *n > from(1) } fn greater_than_one<T:NumExt>(n: &T) -> bool { *n > from(1) }
fn greater_than_one_float<T:FloatExt>(n: &T) -> bool { *n > from(1) } fn greater_than_one_float<T:FloatExt>(n: &T) -> bool { *n > from(1) }

View file

@ -19,7 +19,7 @@ trait Num {
fn gt(&self, other: &Self) -> bool; fn gt(&self, other: &Self) -> bool;
} }
pub trait NumExt: Num NumCast { } pub trait NumExt: Num + NumCast { }
fn greater_than_one<T:NumExt>(n: &T) -> bool { fn greater_than_one<T:NumExt>(n: &T) -> bool {
n.gt(&from(1)) n.gt(&from(1))

View file

@ -11,7 +11,7 @@
use core::cmp::Ord; use core::cmp::Ord;
use core::num::NumCast::from; use core::num::NumCast::from;
pub trait NumExt: NumCast Ord { } pub trait NumExt: NumCast + Ord { }
fn greater_than_one<T:NumExt>(n: &T) -> bool { fn greater_than_one<T:NumExt>(n: &T) -> bool {
*n > from(1) *n > from(1)

View file

@ -38,7 +38,7 @@ impl TypeExt for f64 {}
impl TypeExt for float {} impl TypeExt for float {}
pub trait NumExt: TypeExt Eq Ord NumCast {} pub trait NumExt: TypeExt + Eq + Ord + NumCast {}
impl NumExt for u8 {} impl NumExt for u8 {}
impl NumExt for u16 {} impl NumExt for u16 {}
@ -94,7 +94,7 @@ impl IntegerExt for i64 {}
impl IntegerExt for int {} impl IntegerExt for int {}
pub trait FloatExt: NumExt FuzzyEq<Self> {} pub trait FloatExt: NumExt + FuzzyEq<Self> {}
impl FloatExt for f32 {} impl FloatExt for f32 {}
impl FloatExt for f64 {} impl FloatExt for f64 {}

View file

@ -11,7 +11,7 @@
use core::cmp::{Eq, Ord}; use core::cmp::{Eq, Ord};
use core::num::NumCast::from; use core::num::NumCast::from;
pub trait NumExt: Eq Ord NumCast {} pub trait NumExt: Eq + Ord + NumCast {}
impl NumExt for f32 {} impl NumExt for f32 {}

View file

@ -11,7 +11,7 @@
use core::cmp::{Eq, Ord}; use core::cmp::{Eq, Ord};
use core::num::NumCast::from; use core::num::NumCast::from;
pub trait NumExt: Eq NumCast {} pub trait NumExt: Eq + NumCast {}
impl NumExt for f32 {} impl NumExt for f32 {}
impl NumExt for int {} impl NumExt for int {}

View file

@ -10,7 +10,7 @@
use core::cmp::Eq; use core::cmp::Eq;
trait MyNum : Add<Self,Self> Sub<Self,Self> Mul<Self,Self> Eq { } trait MyNum : Add<Self,Self> + Sub<Self,Self> + Mul<Self,Self> + Eq { }
struct MyInt { val: int } struct MyInt { val: int }

View file

@ -14,7 +14,7 @@ trait MyNum {
static fn from_int(int) -> Self; static fn from_int(int) -> Self;
} }
pub trait NumExt: MyEq MyNum { } pub trait NumExt: MyEq + MyNum { }
struct S { v: int } struct S { v: int }

View file

@ -12,7 +12,7 @@ trait Foo { fn f() -> int; }
trait Bar { fn g() -> int; } trait Bar { fn g() -> int; }
trait Baz { fn h() -> int; } trait Baz { fn h() -> int; }
trait Quux: Foo Bar Baz { } trait Quux: Foo + Bar + Baz { }
struct A { x: int } struct A { x: int }