Various cleanups
This commit is contained in:
parent
c53b76324c
commit
d4ea2c43f5
4 changed files with 35 additions and 11 deletions
|
@ -558,12 +558,6 @@ impl<'hir> Map<'hir> {
|
||||||
pub fn ty_param_owner(&self, id: NodeId) -> NodeId {
|
pub fn ty_param_owner(&self, id: NodeId) -> NodeId {
|
||||||
match self.get(id) {
|
match self.get(id) {
|
||||||
NodeItem(&Item { node: ItemTrait(..), .. }) => id,
|
NodeItem(&Item { node: ItemTrait(..), .. }) => id,
|
||||||
NodeItem(&Item {
|
|
||||||
node: ItemExistential(ExistTy {
|
|
||||||
impl_trait_fn: Some(did),
|
|
||||||
..
|
|
||||||
}), ..
|
|
||||||
}) => self.def_index_to_node_id(did.index),
|
|
||||||
NodeTyParam(_) => self.get_parent_node(id),
|
NodeTyParam(_) => self.get_parent_node(id),
|
||||||
_ => {
|
_ => {
|
||||||
bug!("ty_param_owner: {} not a type parameter",
|
bug!("ty_param_owner: {} not a type parameter",
|
||||||
|
@ -774,7 +768,7 @@ impl<'hir> Map<'hir> {
|
||||||
|
|
||||||
/// Retrieve the NodeId for `id`'s parent item, or `id` itself if no
|
/// Retrieve the NodeId for `id`'s parent item, or `id` itself if no
|
||||||
/// parent item is in this map. The "parent item" is the closest parent node
|
/// parent item is in this map. The "parent item" is the closest parent node
|
||||||
/// in the AST which is recorded by the map and is an item, either an item
|
/// in the HIR which is recorded by the map and is an item, either an item
|
||||||
/// in a module, trait, or impl.
|
/// in a module, trait, or impl.
|
||||||
pub fn get_parent(&self, id: NodeId) -> NodeId {
|
pub fn get_parent(&self, id: NodeId) -> NodeId {
|
||||||
match self.walk_parent_nodes(id, |node| match *node {
|
match self.walk_parent_nodes(id, |node| match *node {
|
||||||
|
|
|
@ -944,6 +944,7 @@ impl<'b, 'a, 'v> ItemLikeVisitor<'v> for RootCollector<'b, 'a, 'v> {
|
||||||
hir::ItemTy(..) |
|
hir::ItemTy(..) |
|
||||||
hir::ItemTrait(..) |
|
hir::ItemTrait(..) |
|
||||||
hir::ItemTraitAlias(..) |
|
hir::ItemTraitAlias(..) |
|
||||||
|
hir::ItemExistential(..) |
|
||||||
hir::ItemMod(..) => {
|
hir::ItemMod(..) => {
|
||||||
// Nothing to do, just keep recursing...
|
// Nothing to do, just keep recursing...
|
||||||
}
|
}
|
||||||
|
@ -958,7 +959,6 @@ impl<'b, 'a, 'v> ItemLikeVisitor<'v> for RootCollector<'b, 'a, 'v> {
|
||||||
|
|
||||||
hir::ItemEnum(_, ref generics) |
|
hir::ItemEnum(_, ref generics) |
|
||||||
hir::ItemStruct(_, ref generics) |
|
hir::ItemStruct(_, ref generics) |
|
||||||
hir::ItemExistential(hir::ExistTy { ref generics, .. }) |
|
|
||||||
hir::ItemUnion(_, ref generics) => {
|
hir::ItemUnion(_, ref generics) => {
|
||||||
if generics.params.is_empty() {
|
if generics.params.is_empty() {
|
||||||
if self.mode == MonoItemCollectionMode::Eager {
|
if self.mode == MonoItemCollectionMode::Eager {
|
||||||
|
|
|
@ -797,7 +797,7 @@ fn generics_of<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
|
||||||
}
|
}
|
||||||
NodeItem(item) => {
|
NodeItem(item) => {
|
||||||
match item.node {
|
match item.node {
|
||||||
ItemExistential(hir::ExistTy { impl_trait_fn: parent_did, .. }) => parent_did,
|
ItemExistential(hir::ExistTy { impl_trait_fn, .. }) => impl_trait_fn,
|
||||||
_ => None,
|
_ => None,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -1353,8 +1353,6 @@ pub fn explicit_predicates_of<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
|
||||||
|
|
||||||
let predicates = bounds.predicates(tcx, anon_ty);
|
let predicates = bounds.predicates(tcx, anon_ty);
|
||||||
|
|
||||||
debug!("explicit_predicates_of: predicates={:?}", predicates);
|
|
||||||
|
|
||||||
return ty::GenericPredicates {
|
return ty::GenericPredicates {
|
||||||
parent: None,
|
parent: None,
|
||||||
predicates: predicates
|
predicates: predicates
|
||||||
|
|
32
src/test/run-pass/impl-trait/bounds_regression.rs
Normal file
32
src/test/run-pass/impl-trait/bounds_regression.rs
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
// Copyright 2018 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.
|
||||||
|
|
||||||
|
pub trait FakeGenerator {
|
||||||
|
type Yield;
|
||||||
|
type Return;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub trait FakeFuture {
|
||||||
|
type Output;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn future_from_generator<
|
||||||
|
T: FakeGenerator<Yield = ()>
|
||||||
|
>(x: T) -> impl FakeFuture<Output = T::Return> {
|
||||||
|
GenFuture(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
struct GenFuture<T: FakeGenerator<Yield = ()>>(T);
|
||||||
|
|
||||||
|
impl<T: FakeGenerator<Yield = ()>> FakeFuture for GenFuture<T> {
|
||||||
|
type Output = T::Return;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
Loading…
Add table
Add a link
Reference in a new issue