mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Runtime: Provide value witness implementations for class existentials.
Same deal as for opaque existentials--pre-instantiate a static witness table for one-witness-table types (the zero-witness-tables case is nicely handled by Builtin.ObjCPointer's value witness), and generate a vwtable using dynamic witness implementations for each different-sized container on demand as necessary. Swift SVN r9850
This commit is contained in:
@@ -199,7 +199,12 @@ static void **assignWithoutObjCRetain(void **dest, void **src,
|
||||
|
||||
const Metadata *swift::swift_objcTypeof(OpaqueValue *src, const Metadata *self)
|
||||
{
|
||||
auto object = *reinterpret_cast<void**>(src);
|
||||
auto object = *reinterpret_cast<HeapObject**>(src);
|
||||
return swift_unknownTypeOf(object);
|
||||
}
|
||||
|
||||
const Metadata *swift::swift_unknownTypeOf(HeapObject *object)
|
||||
{
|
||||
auto theClass = object_getClass(object);
|
||||
auto classAsMetadata = reinterpret_cast<const ClassMetadata*>(theClass);
|
||||
if (classAsMetadata->isTypeMetadata()) return classAsMetadata;
|
||||
|
||||
Reference in New Issue
Block a user