Files
UnrealEngineUWP/Engine/Source/Runtime/Core/Public/Modules
phillip kavan 324ff4be9c Further revise TObjectPtr to avoid indirection by keeping references to placeholder-typed objects unresolved.
Change summary:
- Reduced IsObjectHandleTypeSafe() to just a simple bit test. The LSB must also be set to require that it's a packed ref.
- Modified ResolveObjectHandleNoRead()/ResolveObjectHandleNoReadNoCheck() to update the handle only if type safe.
- Modified ObjectPtr_Private::Get() to return NULL without first resolving the handle (for pointers bound to UObject subtypes).
- Modified FLinkerLoad::operator<<() to serialize placeholder-typed object references as an "unsafe" packed reference only if the pointer type is unsafe.
- Modified TObjectPtr::GetInternalRef() to assert if the handle is not resolved. This will catch an attempt to return an unsafe pointer as a packed reference.
- Modified ToRawPtrArrayUnsafe() to assert if any item in the array is not resolved. This will catch an attempt to treat a packed reference as the element type.
- Modified TContainerElementTypeCompatibility::ReinterpretRange()/ReinterpretRangeContiguous() to assert if any element of the pointer array is not resolved.
- Modified ToRawPtrTArrayUnsafe() to reinterpret the pointer array through the type compatibility layer to catch any attempt to treat a packed reference as the element type.
- Revised TObjectPtr natvis to reduce the placeholder intrinsic query down to just a single bit test.
- Removed 'GObjectIndexToPackedObjectRefDebug' as it is no longer required for natvis support.
- Revised FObjectHandle/TObjectPtr type safety unit tests to validate the unresolved state of placeholder-typed references as well as include invalid address inputs to ensure we're only using pointer semantics.

#jira UE-215308
#rb Francis.Hurteau, Zousar.Shaker

[CL 33975641 by phillip kavan in ue5-main branch]
2024-05-29 11:43:30 -04:00
..