Sprinkle some #[inline] in rustc_data_structures::tagged_ptr

This commit is contained in:
Maybe Waffle 2023-04-25 17:30:05 +00:00
parent 91b61a4ad6
commit 021a12c00d
2 changed files with 17 additions and 0 deletions

View File

@ -82,11 +82,13 @@ impl<P, T, const CP: bool> CopyTaggedPtr<P, T, CP>
/// drop, use [`TaggedPtr`] instead.
///
/// [`TaggedPtr`]: crate::tagged_ptr::TaggedPtr
#[inline]
pub fn new(pointer: P, tag: T) -> Self {
Self { packed: Self::pack(P::into_ptr(pointer), tag), tag_ghost: PhantomData }
}
/// Retrieves the pointer.
#[inline]
pub fn pointer(self) -> P
where
P: Copy,
@ -123,6 +125,7 @@ pub fn set_tag(&mut self, tag: T) {
/// according to `self.packed` encoding scheme.
///
/// [`P::into_ptr`]: Pointer::into_ptr
#[inline]
fn pack(ptr: NonNull<P::Target>, tag: T) -> NonNull<P::Target> {
// Trigger assert!
let () = Self::ASSERTION;
@ -145,6 +148,7 @@ fn pack(ptr: NonNull<P::Target>, tag: T) -> NonNull<P::Target> {
}
/// Retrieves the original raw pointer from `self.packed`.
#[inline]
pub(super) fn pointer_raw(&self) -> NonNull<P::Target> {
self.packed.map_addr(|addr| unsafe { NonZeroUsize::new_unchecked(addr.get() << T::BITS) })
}
@ -184,6 +188,7 @@ impl<P, T, const CP: bool> Clone for CopyTaggedPtr<P, T, CP>
P: Pointer + Copy,
T: Tag,
{
#[inline]
fn clone(&self) -> Self {
*self
}
@ -196,6 +201,7 @@ impl<P, T, const CP: bool> Deref for CopyTaggedPtr<P, T, CP>
{
type Target = P::Target;
#[inline]
fn deref(&self) -> &Self::Target {
// Safety:
// `pointer_raw` returns the original pointer from `P::into_ptr` which,
@ -209,6 +215,7 @@ impl<P, T, const CP: bool> DerefMut for CopyTaggedPtr<P, T, CP>
P: Pointer + DerefMut,
T: Tag,
{
#[inline]
fn deref_mut(&mut self) -> &mut Self::Target {
// Safety:
// `pointer_raw` returns the original pointer from `P::into_ptr` which,
@ -235,6 +242,7 @@ impl<P, T> PartialEq for CopyTaggedPtr<P, T, true>
P: Pointer,
T: Tag,
{
#[inline]
fn eq(&self, other: &Self) -> bool {
self.packed == other.packed
}
@ -252,6 +260,7 @@ impl<P, T> Hash for CopyTaggedPtr<P, T, true>
P: Pointer,
T: Tag,
{
#[inline]
fn hash<H: Hasher>(&self, state: &mut H) {
self.packed.hash(state);
}

View File

@ -30,16 +30,19 @@ impl<P, T, const CP: bool> TaggedPtr<P, T, CP>
T: Tag,
{
/// Tags `pointer` with `tag`.
#[inline]
pub fn new(pointer: P, tag: T) -> Self {
TaggedPtr { raw: CopyTaggedPtr::new(pointer, tag) }
}
/// Retrieves the tag.
#[inline]
pub fn tag(&self) -> T {
self.raw.tag()
}
/// Sets the tag to a new value.
#[inline]
pub fn set_tag(&mut self, tag: T) {
self.raw.set_tag(tag)
}
@ -63,6 +66,8 @@ impl<P, T, const CP: bool> Deref for TaggedPtr<P, T, CP>
T: Tag,
{
type Target = P::Target;
#[inline]
fn deref(&self) -> &Self::Target {
self.raw.deref()
}
@ -73,6 +78,7 @@ impl<P, T, const CP: bool> DerefMut for TaggedPtr<P, T, CP>
P: Pointer + DerefMut,
T: Tag,
{
#[inline]
fn deref_mut(&mut self) -> &mut Self::Target {
self.raw.deref_mut()
}
@ -108,6 +114,7 @@ impl<P, T> PartialEq for TaggedPtr<P, T, true>
P: Pointer,
T: Tag,
{
#[inline]
fn eq(&self, other: &Self) -> bool {
self.raw.eq(&other.raw)
}
@ -125,6 +132,7 @@ impl<P, T> Hash for TaggedPtr<P, T, true>
P: Pointer,
T: Tag,
{
#[inline]
fn hash<H: Hasher>(&self, state: &mut H) {
self.raw.hash(state);
}