pub fn ty_param_owner(&self, id: NodeId) -> NodeId {
match self.get(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),
_ => {
bug!("ty_param_owner: {} not a type parameter",
/// 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
- /// 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.
pub fn get_parent(&self, id: NodeId) -> NodeId {
match self.walk_parent_nodes(id, |node| match *node {
hir::ItemTy(..) |
hir::ItemTrait(..) |
hir::ItemTraitAlias(..) |
+ hir::ItemExistential(..) |
hir::ItemMod(..) => {
// Nothing to do, just keep recursing...
}
hir::ItemEnum(_, ref generics) |
hir::ItemStruct(_, ref generics) |
- hir::ItemExistential(hir::ExistTy { ref generics, .. }) |
hir::ItemUnion(_, ref generics) => {
if generics.params.is_empty() {
if self.mode == MonoItemCollectionMode::Eager {
}
NodeItem(item) => {
match item.node {
- ItemExistential(hir::ExistTy { impl_trait_fn: parent_did, .. }) => parent_did,
+ ItemExistential(hir::ExistTy { impl_trait_fn, .. }) => impl_trait_fn,
_ => None,
}
},
let predicates = bounds.predicates(tcx, anon_ty);
- debug!("explicit_predicates_of: predicates={:?}", predicates);
-
return ty::GenericPredicates {
parent: None,
predicates: predicates
--- /dev/null
+// 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() {}
\ No newline at end of file