fn parse_trait_ref_list(&self, ket: &token::Token) -> ~[@trait_ref] {
self.parse_seq_to_before_end(
ket,
- seq_sep_none(),
+ seq_sep_trailing_disallowed(token::BINOP(token::PLUS)),
|p| p.parse_trait_ref()
)
}
print_generics(s, generics);
if traits.len() != 0u {
word(s.s, ~":");
- for traits.each |trait_| {
+ for traits.eachi |i, trait_| {
nbsp(s);
+ if i != 0 {
+ word_space(s, ~"+");
+ }
print_path(s, trait_.path, false);
}
}
trait Bar { fn g() -> int; }
trait Baz { fn h() -> int; }
-trait Quux: Foo Bar Baz { }
+trait Quux: Foo + Bar + Baz { }
impl<T:Foo + Bar + Baz> Quux for T { }
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 {
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
- 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 {}
+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 {}
enum Lol = int;
use aux::{Foo, Bar, Baz, A};
// 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 { }
fn f<T:Quux>(a: &T) {
trait Bar { fn g() -> int; }
trait Baz { fn h() -> int; }
-trait Quux: Foo Bar Baz { }
+trait Quux: Foo + Bar + Baz { }
struct A { x: int }
trait A { fn a(&self) -> int; }
trait B: A { fn b(&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: () }
extern mod std;
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_float<T:FloatExt>(n: &T) -> bool { *n > from(1) }
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 {
n.gt(&from(1))
use core::cmp::Ord;
use core::num::NumCast::from;
-pub trait NumExt: NumCast Ord { }
+pub trait NumExt: NumCast + Ord { }
fn greater_than_one<T:NumExt>(n: &T) -> bool {
*n > from(1)
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 u16 {}
impl IntegerExt for int {}
-pub trait FloatExt: NumExt FuzzyEq<Self> {}
+pub trait FloatExt: NumExt + FuzzyEq<Self> {}
impl FloatExt for f32 {}
impl FloatExt for f64 {}
use core::cmp::{Eq, Ord};
use core::num::NumCast::from;
-pub trait NumExt: Eq Ord NumCast {}
+pub trait NumExt: Eq + Ord + NumCast {}
impl NumExt for f32 {}
use core::cmp::{Eq, Ord};
use core::num::NumCast::from;
-pub trait NumExt: Eq NumCast {}
+pub trait NumExt: Eq + NumCast {}
impl NumExt for f32 {}
impl NumExt for int {}
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 }
static fn from_int(int) -> Self;
}
-pub trait NumExt: MyEq MyNum { }
+pub trait NumExt: MyEq + MyNum { }
struct S { v: int }
trait Bar { fn g() -> int; }
trait Baz { fn h() -> int; }
-trait Quux: Foo Bar Baz { }
+trait Quux: Foo + Bar + Baz { }
struct A { x: int }