]> git.lizzy.rs Git - rust.git/commitdiff
Add a lang item to allow `impl [u8] {…}` in the standard library
authorSimon Sapin <simon.sapin@exyr.org>
Sun, 1 Oct 2017 15:05:35 +0000 (17:05 +0200)
committerLukas Kalbertodt <lukas.kalbertodt@gmail.com>
Fri, 3 Nov 2017 20:27:40 +0000 (21:27 +0100)
src/librustc/middle/lang_items.rs
src/librustc_typeck/check/method/probe.rs
src/librustc_typeck/coherence/inherent_impls.rs

index 679c4f17a6c03f55cc589b0f90604042a0697014..a38b37ff745f7d1b90244358f76ac1fe53518fce 100644 (file)
@@ -211,6 +211,7 @@ pub fn collect<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) -> LanguageItems {
     CharImplItem,                    "char",                    char_impl;
     StrImplItem,                     "str",                     str_impl;
     SliceImplItem,                   "slice",                   slice_impl;
     CharImplItem,                    "char",                    char_impl;
     StrImplItem,                     "str",                     str_impl;
     SliceImplItem,                   "slice",                   slice_impl;
+    SliceU8ImplItem,                 "slice_u8",                slice_u8_impl;
     ConstPtrImplItem,                "const_ptr",               const_ptr_impl;
     MutPtrImplItem,                  "mut_ptr",                 mut_ptr_impl;
     I8ImplItem,                      "i8",                      i8_impl;
     ConstPtrImplItem,                "const_ptr",               const_ptr_impl;
     MutPtrImplItem,                  "mut_ptr",                 mut_ptr_impl;
     I8ImplItem,                      "i8",                      i8_impl;
index a24f420af80dcdfff8caefb0fd8821567b4f9639..81e5b2fe00a6ae895e73dfe1f0d5526b94c662a4 100644 (file)
@@ -431,6 +431,9 @@ fn assemble_probe(&mut self, self_ty: Ty<'tcx>) {
             ty::TySlice(_) => {
                 let lang_def_id = lang_items.slice_impl();
                 self.assemble_inherent_impl_for_primitive(lang_def_id);
             ty::TySlice(_) => {
                 let lang_def_id = lang_items.slice_impl();
                 self.assemble_inherent_impl_for_primitive(lang_def_id);
+
+                let lang_def_id = lang_items.slice_u8_impl();
+                self.assemble_inherent_impl_for_primitive(lang_def_id);
             }
             ty::TyRawPtr(ty::TypeAndMut { ty: _, mutbl: hir::MutImmutable }) => {
                 let lang_def_id = lang_items.const_ptr_impl();
             }
             ty::TyRawPtr(ty::TypeAndMut { ty: _, mutbl: hir::MutImmutable }) => {
                 let lang_def_id = lang_items.const_ptr_impl();
index c56a3b91ca37f7d720d9b37562ec20b1e748c09d..569b6a2febb4509a631b3aecc84bb7bb8c315d83 100644 (file)
@@ -137,6 +137,13 @@ fn visit_item(&mut self, item: &hir::Item) {
                                           "str",
                                           item.span);
             }
                                           "str",
                                           item.span);
             }
+            ty::TySlice(slice_item) if slice_item == self.tcx.types.u8 => {
+                self.check_primitive_impl(def_id,
+                                          lang_items.slice_u8_impl(),
+                                          "slice_u8",
+                                          "[u8]",
+                                          item.span);
+            }
             ty::TySlice(_) => {
                 self.check_primitive_impl(def_id,
                                           lang_items.slice_impl(),
             ty::TySlice(_) => {
                 self.check_primitive_impl(def_id,
                                           lang_items.slice_impl(),