From e569ada528f8664337f700235bc771cbfecbd432 Mon Sep 17 00:00:00 2001 From: Camille GILLOT Date: Sun, 1 Dec 2019 17:48:49 +0100 Subject: [PATCH] Retire hir::ptr. --- src/librustc/hir/lowering.rs | 3 +- src/librustc/hir/mod.rs | 1 - src/librustc/hir/ptr.rs | 128 -------------------------- src/librustc_typeck/astconv.rs | 3 +- src/librustc_typeck/check/coercion.rs | 7 -- src/librustdoc/clean/mod.rs | 13 --- 6 files changed, 2 insertions(+), 153 deletions(-) delete mode 100644 src/librustc/hir/ptr.rs diff --git a/src/librustc/hir/lowering.rs b/src/librustc/hir/lowering.rs index e4836ef4eef8..127b8536b1a8 100644 --- a/src/librustc/hir/lowering.rs +++ b/src/librustc/hir/lowering.rs @@ -37,7 +37,6 @@ use crate::dep_graph::DepGraph; use crate::hir::def::{DefKind, Namespace, PartialRes, PerNS, Res}; use crate::hir::def_id::{DefId, DefIndex, CRATE_DEF_INDEX}; use crate::hir::map::{DefKey, DefPathData, Definitions}; -use crate::hir::ptr::P; use crate::hir::{self, ParamName}; use crate::hir::{ConstArg, GenericArg}; use crate::lint; @@ -3205,7 +3204,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> { /// `std::cell::Ref`; note that implicit lifetimes in these /// sorts of cases are deprecated. This may therefore report a warning or an /// error, depending on the mode. - fn elided_path_lifetimes(&mut self, span: Span, count: usize) -> P<[hir::Lifetime]> { + fn elided_path_lifetimes(&mut self, span: Span, count: usize) -> Vec { (0..count).map(|_| self.elided_path_lifetime(span)).collect() } diff --git a/src/librustc/hir/mod.rs b/src/librustc/hir/mod.rs index cf31c44ed685..f56c9f8e72c2 100644 --- a/src/librustc/hir/mod.rs +++ b/src/librustc/hir/mod.rs @@ -43,7 +43,6 @@ pub mod lowering; pub mod map; pub mod pat_util; pub mod print; -pub mod ptr; pub mod upvars; /// Uniquely identifies a node in the HIR of the current crate. It is diff --git a/src/librustc/hir/ptr.rs b/src/librustc/hir/ptr.rs deleted file mode 100644 index b43817c9601b..000000000000 --- a/src/librustc/hir/ptr.rs +++ /dev/null @@ -1,128 +0,0 @@ -// HACK(eddyb) this is a copy of `syntax::ptr`, minus the mutation (the HIR is -// frozen anyway). The only reason for doing this instead of replacing `P` -// with `Box` in HIR, is that `&Box<[T]>` doesn't implement `IntoIterator`. - -use std::fmt::{self, Debug, Display}; -use std::iter::FromIterator; -use std::ops::Deref; -use std::{slice, vec}; - -use rustc_serialize::{Decodable, Decoder, Encodable, Encoder}; - -use rustc_data_structures::stable_hasher::{HashStable, StableHasher}; -/// An owned smart pointer. -#[derive(PartialEq, Eq)] -pub struct P { - ptr: Box, -} - -/// Construct a `P` from a `T` value. -#[allow(non_snake_case)] -pub fn P(value: T) -> P { - P { ptr: box value } -} - -impl Deref for P { - type Target = T; - - fn deref(&self) -> &T { - &self.ptr - } -} - -impl Debug for P { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - Debug::fmt(&self.ptr, f) - } -} - -impl Display for P { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - Display::fmt(&**self, f) - } -} - -impl Decodable for P { - fn decode(d: &mut D) -> Result, D::Error> { - Decodable::decode(d).map(P) - } -} - -impl Encodable for P { - fn encode(&self, s: &mut S) -> Result<(), S::Error> { - (**self).encode(s) - } -} - -impl P<[T]> { - pub const fn new() -> P<[T]> { - // HACK(eddyb) bypass the lack of a `const fn` to create an empty `Box<[T]>` - // (as trait methods, `default` in this case, can't be `const fn` yet). - P { - ptr: unsafe { - use std::ptr::NonNull; - std::mem::transmute(NonNull::<[T; 0]>::dangling() as NonNull<[T]>) - }, - } - } - - #[inline(never)] - pub fn from_vec(v: Vec) -> P<[T]> { - P { ptr: v.into_boxed_slice() } - } - - // HACK(eddyb) used by HIR lowering in a few places still. - // NOTE: do not make this more public than `pub(super)`, - // and do not make this into an `IntoIterator` impl. - pub(super) fn into_iter(self) -> vec::IntoIter { - self.ptr.into_vec().into_iter() - } -} - -impl Default for P<[T]> { - /// Creates an empty `P<[T]>`. - fn default() -> P<[T]> { - P::new() - } -} - -impl From> for P<[T]> { - fn from(v: Vec) -> Self { - P::from_vec(v) - } -} - -impl FromIterator for P<[T]> { - fn from_iter>(iter: I) -> P<[T]> { - P::from_vec(iter.into_iter().collect()) - } -} - -impl<'a, T> IntoIterator for &'a P<[T]> { - type Item = &'a T; - type IntoIter = slice::Iter<'a, T>; - fn into_iter(self) -> Self::IntoIter { - self.ptr.into_iter() - } -} - -impl Encodable for P<[T]> { - fn encode(&self, s: &mut S) -> Result<(), S::Error> { - Encodable::encode(&**self, s) - } -} - -impl Decodable for P<[T]> { - fn decode(d: &mut D) -> Result, D::Error> { - Ok(P::from_vec(Decodable::decode(d)?)) - } -} - -impl HashStable for P -where - T: ?Sized + HashStable, -{ - fn hash_stable(&self, hcx: &mut CTX, hasher: &mut StableHasher) { - (**self).hash_stable(hcx, hasher); - } -} diff --git a/src/librustc_typeck/astconv.rs b/src/librustc_typeck/astconv.rs index 4cfa051adc18..569be6e1a55f 100644 --- a/src/librustc_typeck/astconv.rs +++ b/src/librustc_typeck/astconv.rs @@ -5,7 +5,6 @@ use crate::hir::def::{CtorOf, DefKind, Res}; use crate::hir::def_id::DefId; use crate::hir::print; -use crate::hir::ptr::P; use crate::hir::{self, ExprKind, GenericArg, GenericArgs}; use crate::lint; use crate::middle::lang_items::SizedTraitLangItem; @@ -255,7 +254,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { seg: &hir::PathSegment<'_>, is_method_call: bool, ) -> bool { - let empty_args = P(hir::GenericArgs { args: &[], bindings: &[], parenthesized: false }); + let empty_args = hir::GenericArgs::none(); let suppress_mismatch = Self::check_impl_trait(tcx, seg, &def); Self::check_generic_arg_count( tcx, diff --git a/src/librustc_typeck/check/coercion.rs b/src/librustc_typeck/check/coercion.rs index 1df6a495343a..552e6a57c1d2 100644 --- a/src/librustc_typeck/check/coercion.rs +++ b/src/librustc_typeck/check/coercion.rs @@ -54,7 +54,6 @@ use crate::check::{FnCtxt, Needs}; use errors::DiagnosticBuilder; use rustc::hir; use rustc::hir::def_id::DefId; -use rustc::hir::ptr::P; use rustc::infer::type_variable::{TypeVariableOrigin, TypeVariableOriginKind}; use rustc::infer::{Coercion, InferOk, InferResult}; use rustc::traits::{self, ObligationCause, ObligationCauseCode}; @@ -1377,12 +1376,6 @@ impl AsCoercionSite for hir::Expr<'_> { } } -impl AsCoercionSite for P> { - fn as_coercion_site(&self) -> &hir::Expr<'_> { - self - } -} - impl<'a, T> AsCoercionSite for &'a T where T: AsCoercionSite, diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index db17d23c910e..defdeb52186c 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -12,7 +12,6 @@ pub mod utils; use rustc::hir; use rustc::hir::def::{CtorKind, DefKind, Res}; use rustc::hir::def_id::{CrateNum, DefId, CRATE_DEF_INDEX}; -use rustc::hir::ptr::P; use rustc::infer::region_constraints::{Constraint, RegionConstraintData}; use rustc::middle::lang_items; use rustc::middle::resolve_lifetime as rl; @@ -74,12 +73,6 @@ impl, U> Clean for &T { } } -impl, U> Clean for P { - fn clean(&self, cx: &DocContext<'_>) -> U { - (**self).clean(cx) - } -} - impl, U> Clean for Rc { fn clean(&self, cx: &DocContext<'_>) -> U { (**self).clean(cx) @@ -101,12 +94,6 @@ where } } -impl, U> Clean> for P<[T]> { - fn clean(&self, cx: &DocContext<'_>) -> Vec { - self.iter().map(|x| x.clean(cx)).collect() - } -} - impl Clean for CrateNum { fn clean(&self, cx: &DocContext<'_>) -> ExternalCrate { let root = DefId { krate: *self, index: CRATE_DEF_INDEX };