Testing and fixes
This commit is contained in:
parent
1c023b3cec
commit
38c2a73017
6 changed files with 19 additions and 46 deletions
|
@ -1295,7 +1295,6 @@ impl<'a> Parser<'a> {
|
||||||
let (name, node, generics) = if self.eat_keyword(keywords::Type) {
|
let (name, node, generics) = if self.eat_keyword(keywords::Type) {
|
||||||
let (generics, TyParam {ident, bounds, default, ..}) =
|
let (generics, TyParam {ident, bounds, default, ..}) =
|
||||||
self.parse_trait_item_assoc_ty(vec![])?;
|
self.parse_trait_item_assoc_ty(vec![])?;
|
||||||
self.expect(&token::Semi)?;
|
|
||||||
(ident, TraitItemKind::Type(bounds, default), generics)
|
(ident, TraitItemKind::Type(bounds, default), generics)
|
||||||
} else if self.is_const_item() {
|
} else if self.is_const_item() {
|
||||||
self.expect_keyword(keywords::Const)?;
|
self.expect_keyword(keywords::Const)?;
|
||||||
|
@ -4464,6 +4463,7 @@ impl<'a> Parser<'a> {
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
};
|
};
|
||||||
|
self.expect(&token::Semi)?;
|
||||||
|
|
||||||
Ok((generics, TyParam {
|
Ok((generics, TyParam {
|
||||||
attrs: preceding_attrs.into(),
|
attrs: preceding_attrs.into(),
|
||||||
|
|
|
@ -10,8 +10,15 @@
|
||||||
|
|
||||||
use std::ops::Deref;
|
use std::ops::Deref;
|
||||||
|
|
||||||
trait PointerFamily {
|
trait PointerFamily<U> {
|
||||||
type Pointer<T>: Deref<Target = T>;
|
type Pointer<T>: Deref<Target = T>;
|
||||||
|
type Pointer2<T>: Deref<Target = T> where T: Clone, U: Clone;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Foo;
|
||||||
|
impl PointerFamily<u32> for Foo {
|
||||||
|
type Pointer<usize> = Box<usize>;
|
||||||
|
type Pointer2<u32> = Box<u32>;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {}
|
fn main() {}
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
|
||||||
// file at the top-level directory of this distribution and at
|
|
||||||
// http://rust-lang.org/COPYRIGHT.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
|
||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
|
||||||
// option. This file may not be copied, modified, or distributed
|
|
||||||
// except according to those terms.
|
|
||||||
|
|
||||||
#![feature(generic_associated_types)]
|
|
||||||
|
|
||||||
trait Foo {
|
|
||||||
type Bar<T=usize>;
|
|
||||||
type X<T> where T = f64;
|
|
||||||
}
|
|
||||||
|
|
||||||
fn main() {}
|
|
|
@ -1,24 +0,0 @@
|
||||||
error: equality constraints are not yet supported in where clauses (#20041)
|
|
||||||
--> $DIR/generic_associated_types_equals.rs:15:21
|
|
||||||
|
|
|
||||||
15 | type X<T> where T = f64;
|
|
||||||
| ^^^^^^^
|
|
||||||
|
|
||||||
error[E0412]: cannot find type `T` in this scope
|
|
||||||
--> $DIR/generic_associated_types_equals.rs:15:21
|
|
||||||
|
|
|
||||||
15 | type X<T> where T = f64;
|
|
||||||
| ^ not found in this scope
|
|
||||||
|
|
||||||
error: defaults for type parameters are only allowed in `struct`, `enum`, `type`, or `trait` definitions.
|
|
||||||
--> $DIR/generic_associated_types_equals.rs:14:14
|
|
||||||
|
|
|
||||||
14 | type Bar<T=usize>;
|
|
||||||
| ^
|
|
||||||
|
|
|
||||||
= note: #[deny(invalid_type_param_default)] on by default
|
|
||||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
|
||||||
= note: for more information, see issue #36887 <https://github.com/rust-lang/rust/issues/36887>
|
|
||||||
|
|
||||||
error: aborting due to 3 previous errors
|
|
||||||
|
|
|
@ -8,11 +8,12 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// compile-flags: -Zparse-only
|
// compile-flags: -Z parse-only
|
||||||
|
|
||||||
#![feature(generic_associated_types)]
|
#![feature(generic_associated_types)]
|
||||||
|
|
||||||
impl<T> Baz for T where T: Foo {
|
impl<T> Baz for T where T: Foo {
|
||||||
|
//FIXME(sunjay): This should parse successfully
|
||||||
type Quux<'a> = <T as Foo>::Bar<'a, 'static>;
|
type Quux<'a> = <T as Foo>::Bar<'a, 'static>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,10 +8,12 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// compile-flags: -Zparse-only
|
// compile-flags: -Z parse-only
|
||||||
|
|
||||||
#![feature(generic_associated_types)]
|
#![feature(generic_associated_types)]
|
||||||
|
|
||||||
|
use std::ops::Deref;
|
||||||
|
|
||||||
trait Foo {
|
trait Foo {
|
||||||
type Bar<'a>;
|
type Bar<'a>;
|
||||||
type Bar<'a, 'b>;
|
type Bar<'a, 'b>;
|
||||||
|
@ -20,6 +22,11 @@ trait Foo {
|
||||||
type Bar<'a, 'b, T, U>;
|
type Bar<'a, 'b, T, U>;
|
||||||
type Bar<'a, 'b, T, U,>;
|
type Bar<'a, 'b, T, U,>;
|
||||||
type Bar<'a, 'b, T: Debug, U,>;
|
type Bar<'a, 'b, T: Debug, U,>;
|
||||||
|
type Bar<'a, 'b, T: Debug, U,>: Debug;
|
||||||
|
type Bar<'a, 'b, T: Debug, U,>: Deref<Target = T> + Into<U>;
|
||||||
|
type Bar<'a, 'b, T: Debug, U,> where T: Deref<Target = U>, U: Into<T>;
|
||||||
|
type Bar<'a, 'b, T: Debug, U,>: Deref<Target = T> + Into<U>
|
||||||
|
where T: Deref<Target = U>, U: Into<T>;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {}
|
fn main() {}
|
||||||
|
|
Loading…
Reference in a new issue