Testing and fixes

This commit is contained in:
Sunjay Varma 2017-11-25 14:42:55 -05:00
parent 1c023b3cec
commit 38c2a73017
6 changed files with 19 additions and 46 deletions

View file

@ -1295,7 +1295,6 @@ impl<'a> Parser<'a> {
let (name, node, generics) = if self.eat_keyword(keywords::Type) {
let (generics, TyParam {ident, bounds, default, ..}) =
self.parse_trait_item_assoc_ty(vec![])?;
self.expect(&token::Semi)?;
(ident, TraitItemKind::Type(bounds, default), generics)
} else if self.is_const_item() {
self.expect_keyword(keywords::Const)?;
@ -4464,6 +4463,7 @@ impl<'a> Parser<'a> {
} else {
None
};
self.expect(&token::Semi)?;
Ok((generics, TyParam {
attrs: preceding_attrs.into(),

View file

@ -10,8 +10,15 @@
use std::ops::Deref;
trait PointerFamily {
trait PointerFamily<U> {
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() {}

View file

@ -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() {}

View file

@ -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

View file

@ -8,11 +8,12 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
// compile-flags: -Zparse-only
// compile-flags: -Z parse-only
#![feature(generic_associated_types)]
impl<T> Baz for T where T: Foo {
//FIXME(sunjay): This should parse successfully
type Quux<'a> = <T as Foo>::Bar<'a, 'static>;
}

View file

@ -8,10 +8,12 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
// compile-flags: -Zparse-only
// compile-flags: -Z parse-only
#![feature(generic_associated_types)]
use std::ops::Deref;
trait Foo {
type Bar<'a>;
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: 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() {}