diff options
| author | Alex Burka <alex@alexburka.com> | 2017-10-02 13:48:57 +0000 |
|---|---|---|
| committer | Alex Burka <aburka@seas.upenn.edu> | 2017-12-14 12:56:26 -0500 |
| commit | f1c4a922fe00cd236bb4360f5fb7077d70a1e675 (patch) | |
| tree | a5175b402898a4a8a271fecaa522b7533a2d3e26 | |
| parent | d4a28268cc1c8314f0de2519c78ff97696486a36 (diff) | |
| download | rust-f1c4a922fe00cd236bb4360f5fb7077d70a1e675.tar.gz rust-f1c4a922fe00cd236bb4360f5fb7077d70a1e675.zip | |
stub out trait aliases in resolve
| -rw-r--r-- | src/librustc_resolve/build_reduced_graph.rs | 6 | ||||
| -rw-r--r-- | src/librustc_resolve/lib.rs | 12 |
2 files changed, 18 insertions, 0 deletions
diff --git a/src/librustc_resolve/build_reduced_graph.rs b/src/librustc_resolve/build_reduced_graph.rs index 8df6458b72e..3b20c1e74cd 100644 --- a/src/librustc_resolve/build_reduced_graph.rs +++ b/src/librustc_resolve/build_reduced_graph.rs @@ -344,6 +344,11 @@ impl<'a> Resolver<'a> { } } + ItemKind::TraitAlias(..) => { + let def = Def::TraitAlias(self.definitions.local_def_id(item.id)); + self.define(parent, ident, TypeNS, (def, vis, sp, expansion)); + } + // These items live in both the type and value namespaces. ItemKind::Struct(ref struct_def, _) => { // Define a name in the type namespace. @@ -411,6 +416,7 @@ impl<'a> Resolver<'a> { self.define(parent, ident, TypeNS, (module, vis, sp, expansion)); self.current_module = module; } + ItemKind::MacroDef(..) | ItemKind::Mac(_) => unreachable!(), } } diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index 33e57b2d180..377c70f642d 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -474,6 +474,7 @@ impl<'a> PathSource<'a> { }, PathSource::Trait => match def { Def::Trait(..) => true, + Def::TraitAlias(..) => true, _ => false, }, PathSource::Expr(..) => match def { @@ -1935,6 +1936,17 @@ impl<'a> Resolver<'a> { }); } + ItemKind::TraitAlias(ref generics, ref bounds) => { + // Create a new rib for the trait-wide type parameters. + self.with_type_parameter_rib(HasTypeParameters(generics, ItemRibKind), |this| { + let local_def_id = this.definitions.local_def_id(item.id); + this.with_self_rib(Def::SelfTy(Some(local_def_id), None), |this| { + this.visit_generics(generics); + walk_list!(this, visit_ty_param_bound, bounds); + }); + }); + } + ItemKind::Mod(_) | ItemKind::ForeignMod(_) => { self.with_scope(item.id, |this| { visit::walk_item(this, item); |
