about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlexander Regueiro <alexreg@me.com>2019-03-17 15:26:01 +0000
committerAlexander Regueiro <alexreg@me.com>2019-06-05 21:09:26 +0100
commitdce27cba78ebda2c5adfe149d33af5a88a28d08d (patch)
treebcfdfda599a9219608fcf8568fbe0c48cb6f5cf7
parent35585c499f1466037b3788598756e1eb0009f51f (diff)
downloadrust-dce27cba78ebda2c5adfe149d33af5a88a28d08d.tar.gz
rust-dce27cba78ebda2c5adfe149d33af5a88a28d08d.zip
Enabled `Self` in type aliases.
-rw-r--r--src/librustc_resolve/lib.rs12
-rw-r--r--src/librustc_typeck/astconv.rs2
2 files changed, 12 insertions, 2 deletions
diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs
index fb5c1b1953f..61a860aef85 100644
--- a/src/librustc_resolve/lib.rs
+++ b/src/librustc_resolve/lib.rs
@@ -2529,7 +2529,17 @@ impl<'a> Resolver<'a> {
         debug!("(resolving item) resolving {} ({:?})", name, item.node);
 
         match item.node {
-            ItemKind::Ty(_, ref generics) |
+            ItemKind::Ty(_, ref generics) => {
+                self.with_current_self_item(item, |this| {
+                    this.with_generic_param_rib(HasGenericParams(generics, ItemRibKind), |this| {
+                        let item_def_id = this.definitions.local_def_id(item.id);
+                        this.with_self_rib(Def::SelfTy(Some(item_def_id), None), |this| {
+                            visit::walk_item(this, item)
+                        })
+                    })
+                });
+            }
+
             ItemKind::Existential(_, ref generics) |
             ItemKind::Fn(_, _, ref generics, _) => {
                 self.with_generic_param_rib(
diff --git a/src/librustc_typeck/astconv.rs b/src/librustc_typeck/astconv.rs
index 72ac041d2e5..f6e3f1a99e8 100644
--- a/src/librustc_typeck/astconv.rs
+++ b/src/librustc_typeck/astconv.rs
@@ -1770,7 +1770,7 @@ impl<'o, 'gcx: 'tcx, 'tcx> dyn AstConv<'gcx, 'tcx> + 'o {
                 tcx.mk_ty_param(index, tcx.hir().name_by_hir_id(hir_id).as_interned_str())
             }
             Res::SelfTy(Some(_), None) => {
-                // `Self` in trait.
+                // `Self` in trait or type alias.
                 assert_eq!(opt_self_ty, None);
                 self.prohibit_generics(&path.segments);
                 tcx.mk_self_type()