libsyntax: Separate multiple inherited traits with +
This commit is contained in:
parent
5f55a07075
commit
6d4ed5283c
17 changed files with 30 additions and 24 deletions
|
@ -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()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 { }
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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 }
|
||||||
|
|
||||||
|
|
|
@ -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: () }
|
||||||
|
|
||||||
|
|
|
@ -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) }
|
||||||
|
|
|
@ -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))
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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 {}
|
||||||
|
|
|
@ -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 {}
|
||||||
|
|
||||||
|
|
|
@ -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 {}
|
||||||
|
|
|
@ -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 }
|
||||||
|
|
||||||
|
|
|
@ -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 }
|
||||||
|
|
||||||
|
|
|
@ -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 }
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue