about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlex Burka <alex@alexburka.com>2017-10-02 13:48:57 +0000
committerAlex Burka <aburka@seas.upenn.edu>2017-12-14 12:56:26 -0500
commitf1c4a922fe00cd236bb4360f5fb7077d70a1e675 (patch)
treea5175b402898a4a8a271fecaa522b7533a2d3e26
parentd4a28268cc1c8314f0de2519c78ff97696486a36 (diff)
downloadrust-f1c4a922fe00cd236bb4360f5fb7077d70a1e675.tar.gz
rust-f1c4a922fe00cd236bb4360f5fb7077d70a1e675.zip
stub out trait aliases in resolve
-rw-r--r--src/librustc_resolve/build_reduced_graph.rs6
-rw-r--r--src/librustc_resolve/lib.rs12
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);