Retire hir::ptr.
This commit is contained in:
parent
e2c9dd7a10
commit
e569ada528
6 changed files with 2 additions and 153 deletions
|
|
@ -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<T>`; 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<hir::Lifetime> {
|
||||
(0..count).map(|_| self.elided_path_lifetime(span)).collect()
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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<T>`
|
||||
// with `Box<T>` 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<T: ?Sized> {
|
||||
ptr: Box<T>,
|
||||
}
|
||||
|
||||
/// Construct a `P<T>` from a `T` value.
|
||||
#[allow(non_snake_case)]
|
||||
pub fn P<T: 'static>(value: T) -> P<T> {
|
||||
P { ptr: box value }
|
||||
}
|
||||
|
||||
impl<T: ?Sized> Deref for P<T> {
|
||||
type Target = T;
|
||||
|
||||
fn deref(&self) -> &T {
|
||||
&self.ptr
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: ?Sized + Debug> Debug for P<T> {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
Debug::fmt(&self.ptr, f)
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Display> Display for P<T> {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
Display::fmt(&**self, f)
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: 'static + Decodable> Decodable for P<T> {
|
||||
fn decode<D: Decoder>(d: &mut D) -> Result<P<T>, D::Error> {
|
||||
Decodable::decode(d).map(P)
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Encodable> Encodable for P<T> {
|
||||
fn encode<S: Encoder>(&self, s: &mut S) -> Result<(), S::Error> {
|
||||
(**self).encode(s)
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> 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<T>) -> 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<T> {
|
||||
self.ptr.into_vec().into_iter()
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Default for P<[T]> {
|
||||
/// Creates an empty `P<[T]>`.
|
||||
fn default() -> P<[T]> {
|
||||
P::new()
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> From<Vec<T>> for P<[T]> {
|
||||
fn from(v: Vec<T>) -> Self {
|
||||
P::from_vec(v)
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> FromIterator<T> for P<[T]> {
|
||||
fn from_iter<I: IntoIterator<Item = T>>(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<T: Encodable> Encodable for P<[T]> {
|
||||
fn encode<S: Encoder>(&self, s: &mut S) -> Result<(), S::Error> {
|
||||
Encodable::encode(&**self, s)
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Decodable> Decodable for P<[T]> {
|
||||
fn decode<D: Decoder>(d: &mut D) -> Result<P<[T]>, D::Error> {
|
||||
Ok(P::from_vec(Decodable::decode(d)?))
|
||||
}
|
||||
}
|
||||
|
||||
impl<CTX, T> HashStable<CTX> for P<T>
|
||||
where
|
||||
T: ?Sized + HashStable<CTX>,
|
||||
{
|
||||
fn hash_stable(&self, hcx: &mut CTX, hasher: &mut StableHasher) {
|
||||
(**self).hash_stable(hcx, hasher);
|
||||
}
|
||||
}
|
||||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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<hir::Expr<'_>> {
|
||||
fn as_coercion_site(&self) -> &hir::Expr<'_> {
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, T> AsCoercionSite for &'a T
|
||||
where
|
||||
T: AsCoercionSite,
|
||||
|
|
|
|||
|
|
@ -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<T: Clean<U>, U> Clean<U> for &T {
|
|||
}
|
||||
}
|
||||
|
||||
impl<T: Clean<U>, U> Clean<U> for P<T> {
|
||||
fn clean(&self, cx: &DocContext<'_>) -> U {
|
||||
(**self).clean(cx)
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Clean<U>, U> Clean<U> for Rc<T> {
|
||||
fn clean(&self, cx: &DocContext<'_>) -> U {
|
||||
(**self).clean(cx)
|
||||
|
|
@ -101,12 +94,6 @@ where
|
|||
}
|
||||
}
|
||||
|
||||
impl<T: Clean<U>, U> Clean<Vec<U>> for P<[T]> {
|
||||
fn clean(&self, cx: &DocContext<'_>) -> Vec<U> {
|
||||
self.iter().map(|x| x.clean(cx)).collect()
|
||||
}
|
||||
}
|
||||
|
||||
impl Clean<ExternalCrate> for CrateNum {
|
||||
fn clean(&self, cx: &DocContext<'_>) -> ExternalCrate {
|
||||
let root = DefId { krate: *self, index: CRATE_DEF_INDEX };
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue