[Runtime] Rename CVW entry points for compatibility

This commit is contained in:
Dario Rexin
2025-01-27 10:37:55 -08:00
parent 92bebee121
commit e15bdc132c
13 changed files with 428 additions and 180 deletions

View File

@@ -47,6 +47,11 @@ void swift_initEnumMetadataSingleCase(EnumMetadata *enumType,
EnumLayoutFlags flags,
const TypeLayout *payload);
SWIFT_RUNTIME_EXPORT
void swift_cvw_initEnumMetadataSingleCaseWithLayoutString(
EnumMetadata *self, EnumLayoutFlags layoutFlags,
const Metadata *payloadType);
SWIFT_RUNTIME_EXPORT
void swift_initEnumMetadataSingleCaseWithLayoutString(
EnumMetadata *self, EnumLayoutFlags layoutFlags,
@@ -65,6 +70,11 @@ void swift_initEnumMetadataSinglePayload(EnumMetadata *enumType,
const TypeLayout *payload,
unsigned emptyCases);
SWIFT_RUNTIME_EXPORT
void swift_cvw_initEnumMetadataSinglePayloadWithLayoutString(
EnumMetadata *enumType, EnumLayoutFlags flags, const Metadata *payload,
unsigned emptyCases);
SWIFT_RUNTIME_EXPORT
void swift_initEnumMetadataSinglePayloadWithLayoutString(
EnumMetadata *enumType, EnumLayoutFlags flags, const Metadata *payload,
@@ -123,6 +133,11 @@ void swift_initEnumMetadataMultiPayload(EnumMetadata *enumType,
unsigned numPayloads,
const TypeLayout * const *payloadTypes);
SWIFT_RUNTIME_EXPORT
void swift_cvw_initEnumMetadataMultiPayloadWithLayoutString(
EnumMetadata *enumType, EnumLayoutFlags flags, unsigned numPayloads,
const Metadata *const *payloadTypes);
SWIFT_RUNTIME_EXPORT
void swift_initEnumMetadataMultiPayloadWithLayoutString(EnumMetadata *enumType,
EnumLayoutFlags flags,

View File

@@ -319,6 +319,12 @@ swift_allocateGenericClassMetadata(const ClassDescriptor *description,
const void *arguments,
const GenericClassMetadataPattern *pattern);
SWIFT_EXTERN_C SWIFT_RETURNS_NONNULL SWIFT_NODISCARD
SWIFT_RUNTIME_EXPORT_ATTRIBUTE ClassMetadata *
swift_cvw_allocateGenericClassMetadataWithLayoutString(
const ClassDescriptor *description, const void *arguments,
const GenericClassMetadataPattern *pattern);
SWIFT_EXTERN_C SWIFT_RETURNS_NONNULL SWIFT_NODISCARD SWIFT_RUNTIME_EXPORT_ATTRIBUTE
ClassMetadata *
swift_allocateGenericClassMetadataWithLayoutString(
@@ -336,6 +342,12 @@ swift_allocateGenericValueMetadata(const ValueTypeDescriptor *description,
const GenericValueMetadataPattern *pattern,
size_t extraDataSize);
SWIFT_EXTERN_C SWIFT_RETURNS_NONNULL SWIFT_NODISCARD
SWIFT_RUNTIME_EXPORT_ATTRIBUTE ValueMetadata *
swift_cvw_allocateGenericValueMetadataWithLayoutString(
const ValueTypeDescriptor *description, const void *arguments,
const GenericValueMetadataPattern *pattern, size_t extraDataSize);
SWIFT_EXTERN_C SWIFT_RETURNS_NONNULL SWIFT_NODISCARD SWIFT_RUNTIME_EXPORT_ATTRIBUTE
ValueMetadata *
swift_allocateGenericValueMetadataWithLayoutString(
@@ -674,6 +686,12 @@ void swift_initStructMetadata(StructMetadata *self,
const TypeLayout * const *fieldTypes,
uint32_t *fieldOffsets);
SWIFT_RUNTIME_EXPORT
void swift_cvw_initStructMetadataWithLayoutString(
StructMetadata *self, StructLayoutFlags flags, size_t numFields,
const uint8_t *const *fieldTypes, const uint8_t *fieldTags,
uint32_t *fieldOffsets);
SWIFT_RUNTIME_EXPORT
void swift_initStructMetadataWithLayoutString(StructMetadata *self,
StructLayoutFlags flags,

View File

@@ -1027,12 +1027,12 @@ FUNCTION(AllocateGenericClassMetadata, Swift, swift_allocateGenericClassMetadata
EFFECT(MetaData),
UNKNOWN_MEMEFFECTS)
// Metadata *swift_allocateGenericClassMetadataWithLayoutString(
// Metadata *swift_cvw_allocateGenericClassMetadataWithLayoutString(
// ClassDescriptor *type,
// const void * const *arguments,
// const void *template);
FUNCTION(AllocateGenericClassMetadataWithLayoutString,
Swift, swift_allocateGenericClassMetadataWithLayoutString,
Swift, swift_cvw_allocateGenericClassMetadataWithLayoutString,
C_CC, AlwaysAvailable,
RETURNS(TypeMetadataPtrTy),
ARGS(TypeContextDescriptorPtrTy, Int8PtrPtrTy, Int8PtrTy),
@@ -1052,13 +1052,13 @@ FUNCTION(AllocateGenericValueMetadata, Swift, swift_allocateGenericValueMetadata
EFFECT(MetaData),
UNKNOWN_MEMEFFECTS)
// Metadata *swift_allocateGenericValueMetadataWithLayoutString(
// Metadata *swift_cvw_allocateGenericValueMetadataWithLayoutString(
// ValueTypeDescriptor *type,
// const void * const *arguments,
// const void *template,
// size_t extraSize);
FUNCTION(AllocateGenericValueMetadataWithLayoutString,
Swift, swift_allocateGenericValueMetadataWithLayoutString,
Swift, swift_cvw_allocateGenericValueMetadataWithLayoutString,
C_CC, AlwaysAvailable,
RETURNS(TypeMetadataPtrTy),
ARGS(TypeContextDescriptorPtrTy, Int8PtrPtrTy, Int8PtrTy, SizeTy),
@@ -1489,14 +1489,14 @@ FUNCTION(InitStructMetadata,
EFFECT(MetaData),
UNKNOWN_MEMEFFECTS)
// void swift_initStructMetadataWithLayoutString(Metadata *structType,
// void swift_cvw_initStructMetadataWithLayoutString(Metadata *structType,
// StructLayoutFlags flags,
// size_t numFields,
// uint8_t * const *fieldTypes,
// const uint8_t *fieldTags
// uint32_t *fieldOffsets);
FUNCTION(InitStructMetadataWithLayoutString,
Swift, swift_initStructMetadataWithLayoutString, C_CC, AlwaysAvailable,
Swift, swift_cvw_initStructMetadataWithLayoutString, C_CC, AlwaysAvailable,
RETURNS(VoidTy),
ARGS(TypeMetadataPtrTy, SizeTy, SizeTy,
Int8PtrPtrTy->getPointerTo(0),
@@ -1518,11 +1518,11 @@ FUNCTION(InitEnumMetadataSingleCase,
EFFECT(MetaData),
UNKNOWN_MEMEFFECTS)
// void swift_initEnumMetadataSingleCaseWithLayoutString(Metadata *enumType,
// void swift_cvw_initEnumMetadataSingleCaseWithLayoutString(Metadata *enumType,
// EnumLayoutFlags flags,
// Metadata *payload);
FUNCTION(InitEnumMetadataSingleCaseWithLayoutString,
Swift, swift_initEnumMetadataSingleCaseWithLayoutString,
Swift, swift_cvw_initEnumMetadataSingleCaseWithLayoutString,
C_CC, AlwaysAvailable,
RETURNS(VoidTy),
ARGS(TypeMetadataPtrTy, SizeTy, TypeMetadataPtrTy),
@@ -1543,12 +1543,12 @@ FUNCTION(InitEnumMetadataSinglePayload,
EFFECT(MetaData),
UNKNOWN_MEMEFFECTS)
// void swift_initEnumMetadataSinglePayloadWithLayoutString(Metadata *enumType,
// void swift_cvw_initEnumMetadataSinglePayloadWithLayoutString(Metadata *enumType,
// EnumLayoutFlags flags,
// Metadata *payload,
// unsigned num_empty_cases);
FUNCTION(InitEnumMetadataSinglePayloadWithLayoutString,
Swift, swift_initEnumMetadataSinglePayloadWithLayoutString,
Swift, swift_cvw_initEnumMetadataSinglePayloadWithLayoutString,
C_CC, AlwaysAvailable,
RETURNS(VoidTy),
ARGS(TypeMetadataPtrTy, SizeTy, TypeMetadataPtrTy, Int32Ty),
@@ -1570,12 +1570,12 @@ FUNCTION(InitEnumMetadataMultiPayload,
UNKNOWN_MEMEFFECTS)
// void
// swift_initEnumMetadataMultiPayloadWithLayoutString(Metadata *enumType,
// swift_cvw_initEnumMetadataMultiPayloadWithLayoutString(Metadata *enumType,
// EnumLayoutFlags layoutFlags,
// size_t numPayloads,
// Metadata * const *payloadTypes);
FUNCTION(InitEnumMetadataMultiPayloadWithLayoutString,
Swift, swift_initEnumMetadataMultiPayloadWithLayoutString,
Swift, swift_cvw_initEnumMetadataMultiPayloadWithLayoutString,
C_CC, AlwaysAvailable,
RETURNS(VoidTy),
ARGS(TypeMetadataPtrTy, SizeTy, SizeTy, TypeMetadataPtrPtrTy),
@@ -2684,9 +2684,9 @@ FUNCTION(StoreMultiPayloadEnumTagSinglePayload,
EFFECT(NoEffect),
UNKNOWN_MEMEFFECTS)
// void swift_generic_destroy(opaque*, const Metadata* type);
// void swift_cvw_destroy(opaque*, const Metadata* type);
FUNCTION(GenericDestroy,
Swift, swift_generic_destroy,
Swift, swift_cvw_destroy,
C_CC, AlwaysAvailable,
RETURNS(VoidTy),
ARGS(Int8PtrTy, TypeMetadataPtrTy),
@@ -2695,9 +2695,9 @@ FUNCTION(GenericDestroy,
UNKNOWN_MEMEFFECTS)
// void *swift_generic_assignWithCopy(opaque* dest, opaque* src, const Metadata* type);
// void *swift_cvw_assignWithCopy(opaque* dest, opaque* src, const Metadata* type);
FUNCTION(GenericAssignWithCopy,
Swift, swift_generic_assignWithCopy,
Swift, swift_cvw_assignWithCopy,
C_CC, AlwaysAvailable,
RETURNS(Int8PtrTy),
ARGS(Int8PtrTy, Int8PtrTy, TypeMetadataPtrTy),
@@ -2705,9 +2705,9 @@ FUNCTION(GenericAssignWithCopy,
EFFECT(RefCounting, Deallocating),
UNKNOWN_MEMEFFECTS)
// void *swift_generic_assignWithTake(opaque* dest, opaque* src, const Metadata* type);
// void *swift_cvw_assignWithTake(opaque* dest, opaque* src, const Metadata* type);
FUNCTION(GenericAssignWithTake,
Swift, swift_generic_assignWithTake,
Swift, swift_cvw_assignWithTake,
C_CC, AlwaysAvailable,
RETURNS(Int8PtrTy),
ARGS(Int8PtrTy, Int8PtrTy, TypeMetadataPtrTy),
@@ -2715,9 +2715,9 @@ FUNCTION(GenericAssignWithTake,
EFFECT(RefCounting, Deallocating),
UNKNOWN_MEMEFFECTS)
// void *swift_generic_initWithCopy(opaque* dest, opaque* src, const Metadata* type);
// void *swift_cvw_initWithCopy(opaque* dest, opaque* src, const Metadata* type);
FUNCTION(GenericInitWithCopy,
Swift, swift_generic_initWithCopy,
Swift, swift_cvw_initWithCopy,
C_CC, AlwaysAvailable,
RETURNS(Int8PtrTy),
ARGS(Int8PtrTy, Int8PtrTy, TypeMetadataPtrTy),
@@ -2725,9 +2725,9 @@ FUNCTION(GenericInitWithCopy,
EFFECT(RefCounting),
UNKNOWN_MEMEFFECTS)
// void *swift_generic_initWithTake(opaque* dest, opaque* src, const Metadata* type);
// void *swift_cvw_initWithTake(opaque* dest, opaque* src, const Metadata* type);
FUNCTION(GenericInitWithTake,
Swift, swift_generic_initWithTake,
Swift, swift_cvw_initWithTake,
C_CC, AlwaysAvailable,
RETURNS(Int8PtrTy),
ARGS(Int8PtrTy, Int8PtrTy, TypeMetadataPtrTy),
@@ -2735,9 +2735,9 @@ FUNCTION(GenericInitWithTake,
EFFECT(RefCounting),
UNKNOWN_MEMEFFECTS)
// void *swift_generic_initializeBufferWithCopyOfBuffer(ValueBuffer* dest, ValueBuffer* src, const Metadata* type);
// void *swift_cvw_initializeBufferWithCopyOfBuffer(ValueBuffer* dest, ValueBuffer* src, const Metadata* type);
FUNCTION(GenericInitializeBufferWithCopyOfBuffer,
Swift, swift_generic_initializeBufferWithCopyOfBuffer,
Swift, swift_cvw_initializeBufferWithCopyOfBuffer,
C_CC, AlwaysAvailable,
RETURNS(Int8PtrTy),
ARGS(getFixedBufferTy()->getPointerTo(),
@@ -2747,10 +2747,10 @@ FUNCTION(GenericInitializeBufferWithCopyOfBuffer,
EFFECT(RefCounting),
UNKNOWN_MEMEFFECTS)
// unsigned swift_singletonEnum_getEnumTag(swift::OpaqueValue *address,
// unsigned swift_cvw_singletonEnum_getEnumTag(swift::OpaqueValue *address,
// const Metadata *metadata);
FUNCTION(SingletonEnumGetEnumTag,
Swift, swift_singletonEnum_getEnumTag,
Swift, swift_cvw_singletonEnum_getEnumTag,
C_CC, AlwaysAvailable,
RETURNS(Int32Ty),
ARGS(Int8PtrTy, TypeMetadataPtrTy),
@@ -2758,11 +2758,11 @@ FUNCTION(SingletonEnumGetEnumTag,
EFFECT(NoEffect),
UNKNOWN_MEMEFFECTS)
// void swift_singletonEnum_destructiveInjectEnumTag(swift::OpaqueValue *address,
// void swift_cvw_singletonEnum_destructiveInjectEnumTag(swift::OpaqueValue *address,
// unsigned tag,
// const Metadata *metadata)
FUNCTION(SingletonEnumDestructiveInjectEnumTag,
Swift, swift_singletonEnum_destructiveInjectEnumTag,
Swift, swift_cvw_singletonEnum_destructiveInjectEnumTag,
C_CC, AlwaysAvailable,
RETURNS(VoidTy),
ARGS(Int8PtrTy, Int32Ty, TypeMetadataPtrTy),
@@ -2770,10 +2770,10 @@ FUNCTION(SingletonEnumDestructiveInjectEnumTag,
EFFECT(NoEffect),
UNKNOWN_MEMEFFECTS)
// unsigned swift_enumSimple_getEnumTag(swift::OpaqueValue *address,
// unsigned swift_cvw_enumSimple_getEnumTag(swift::OpaqueValue *address,
// const Metadata *metadata);
FUNCTION(EnumSimpleGetEnumTag,
Swift, swift_enumSimple_getEnumTag,
Swift, swift_cvw_enumSimple_getEnumTag,
C_CC, AlwaysAvailable,
RETURNS(Int32Ty),
ARGS(Int8PtrTy, TypeMetadataPtrTy),
@@ -2781,11 +2781,11 @@ FUNCTION(EnumSimpleGetEnumTag,
EFFECT(NoEffect),
UNKNOWN_MEMEFFECTS)
// unsigned swift_enumSimple_destructiveInjectEnumTag(swift::OpaqueValue *address,
// unsigned swift_cvw_enumSimple_destructiveInjectEnumTag(swift::OpaqueValue *address,
// unsigned tag,
// const Metadata *metadata)
FUNCTION(EnumSimpleDestructiveInjectEnumTag,
Swift, swift_enumSimple_destructiveInjectEnumTag,
Swift, swift_cvw_enumSimple_destructiveInjectEnumTag,
C_CC, AlwaysAvailable,
RETURNS(VoidTy),
ARGS(Int8PtrTy, Int32Ty, TypeMetadataPtrTy),
@@ -2793,10 +2793,10 @@ FUNCTION(EnumSimpleDestructiveInjectEnumTag,
EFFECT(NoEffect),
UNKNOWN_MEMEFFECTS)
// unsigned swift_enumFn_getEnumTag(swift::OpaqueValue *address,
// unsigned swift_cvw_enumFn_getEnumTag(swift::OpaqueValue *address,
// const Metadata *metadata);
FUNCTION(EnumFnGetEnumTag,
Swift, swift_enumFn_getEnumTag,
Swift, swift_cvw_enumFn_getEnumTag,
C_CC, AlwaysAvailable,
RETURNS(Int32Ty),
ARGS(Int8PtrTy, TypeMetadataPtrTy),
@@ -2804,10 +2804,10 @@ FUNCTION(EnumFnGetEnumTag,
EFFECT(NoEffect),
UNKNOWN_MEMEFFECTS)
// unsigned swift_multiPayloadEnumGeneric_getEnumTag(opaque* address,
// unsigned swift_cvw_multiPayloadEnumGeneric_getEnumTag(opaque* address,
// const Metadata *type);
FUNCTION(MultiPayloadEnumGenericGetEnumTag,
Swift, swift_multiPayloadEnumGeneric_getEnumTag,
Swift, swift_cvw_multiPayloadEnumGeneric_getEnumTag,
C_CC, AlwaysAvailable,
RETURNS(Int32Ty),
ARGS(Int8PtrTy, TypeMetadataPtrTy),
@@ -2815,11 +2815,11 @@ FUNCTION(MultiPayloadEnumGenericGetEnumTag,
EFFECT(NoEffect),
UNKNOWN_MEMEFFECTS)
// void swift_multiPayloadEnumGeneric_destructiveInjectEnumTag(swift::OpaqueValue *address,
// void swift_cvw_multiPayloadEnumGeneric_destructiveInjectEnumTag(swift::OpaqueValue *address,
// unsigned tag,
// const Metadata *metadata)
FUNCTION(MultiPayloadEnumGenericDestructiveInjectEnumTag,
Swift, swift_multiPayloadEnumGeneric_destructiveInjectEnumTag,
Swift, swift_cvw_multiPayloadEnumGeneric_destructiveInjectEnumTag,
C_CC, AlwaysAvailable,
RETURNS(VoidTy),
ARGS(Int8PtrTy, Int32Ty, TypeMetadataPtrTy),
@@ -2827,10 +2827,10 @@ FUNCTION(MultiPayloadEnumGenericDestructiveInjectEnumTag,
EFFECT(NoEffect),
UNKNOWN_MEMEFFECTS)
// unsigned swift_singlePayloadEnumGeneric_getEnumTag(swift::OpaqueValue *address,
// unsigned swift_cvw_singlePayloadEnumGeneric_getEnumTag(swift::OpaqueValue *address,
// const Metadata *metadata);
FUNCTION(SinglePayloadEnumGenericGetEnumTag,
Swift, swift_singlePayloadEnumGeneric_getEnumTag,
Swift, swift_cvw_singlePayloadEnumGeneric_getEnumTag,
C_CC, AlwaysAvailable,
RETURNS(Int32Ty),
ARGS(Int8PtrTy, TypeMetadataPtrTy),
@@ -2838,11 +2838,11 @@ FUNCTION(SinglePayloadEnumGenericGetEnumTag,
EFFECT(NoEffect),
UNKNOWN_MEMEFFECTS)
// void swift_singlePayloadEnumGeneric_destructiveInjectEnumTag(swift::OpaqueValue *address,
// void swift_cvw_singlePayloadEnumGeneric_destructiveInjectEnumTag(swift::OpaqueValue *address,
// unsigned tag,
// const Metadata *metadata)
FUNCTION(SinglePayloadEnumGenericDestructiveInjectEnumTag,
Swift, swift_singlePayloadEnumGeneric_destructiveInjectEnumTag,
Swift, swift_cvw_singlePayloadEnumGeneric_destructiveInjectEnumTag,
C_CC, AlwaysAvailable,
RETURNS(VoidTy),
ARGS(Int8PtrTy, Int32Ty, TypeMetadataPtrTy),
@@ -2850,10 +2850,10 @@ FUNCTION(SinglePayloadEnumGenericDestructiveInjectEnumTag,
EFFECT(NoEffect),
UNKNOWN_MEMEFFECTS)
// void swift_generic_instantiateLayoutString(const uint8_t* layoutStr,
// void swift_cvw_instantiateLayoutString(const uint8_t* layoutStr,
// Metadata* type);
FUNCTION(GenericInstantiateLayoutString,
Swift, swift_generic_instantiateLayoutString,
Swift, swift_cvw_instantiateLayoutString,
C_CC, AlwaysAvailable,
RETURNS(VoidTy),
ARGS(Int8PtrTy, TypeMetadataPtrTy),

View File

@@ -230,7 +230,7 @@ OVERRIDE_WITNESSTABLE(getAssociatedConformanceWitnessSlow, const WitnessTable *,
(wtable, conformingType, assocType, reqBase,
assocConformance))
OVERRIDE_CVW_METADATA(allocateGenericValueMetadataWithLayoutString, ValueMetadata *,
OVERRIDE_CVW_METADATA(cvw_allocateGenericValueMetadataWithLayoutString, ValueMetadata *,
SWIFT_RUNTIME_EXPORT, , swift::,
(const ValueTypeDescriptor *description,
const void *arguments,
@@ -238,7 +238,7 @@ OVERRIDE_CVW_METADATA(allocateGenericValueMetadataWithLayoutString, ValueMetadat
size_t extraDataSize),
(description, arguments, pattern, extraDataSize))
OVERRIDE_CVW_METADATA(initStructMetadataWithLayoutString, void, SWIFT_RUNTIME_EXPORT,
OVERRIDE_CVW_METADATA(cvw_initStructMetadataWithLayoutString, void, SWIFT_RUNTIME_EXPORT,
, swift::, (StructMetadata *structType,
StructLayoutFlags layoutFlags,
size_t numFields,
@@ -248,101 +248,101 @@ OVERRIDE_CVW_METADATA(initStructMetadataWithLayoutString, void, SWIFT_RUNTIME_EX
(structType, layoutFlags, numFields, fieldTypes,
fieldTags, fieldOffsets))
OVERRIDE_CVW_METADATA(allocateGenericClassMetadataWithLayoutString, ClassMetadata *,
OVERRIDE_CVW_METADATA(cvw_allocateGenericClassMetadataWithLayoutString, ClassMetadata *,
SWIFT_RUNTIME_EXPORT, , swift::,
(const ClassDescriptor *description,
const void *arguments,
const GenericClassMetadataPattern *pattern),
(description, arguments, pattern))
OVERRIDE_CVW_METADATA_ENUM(initEnumMetadataSingleCaseWithLayoutString, void,
OVERRIDE_CVW_METADATA_ENUM(cvw_initEnumMetadataSingleCaseWithLayoutString, void,
SWIFT_RUNTIME_EXPORT, , swift::,
(EnumMetadata *self, EnumLayoutFlags layoutFlags,
const Metadata *payloadType),
(self, layoutFlags, payloadType))
OVERRIDE_CVW_METADATA_ENUM(initEnumMetadataSinglePayloadWithLayoutString, void,
OVERRIDE_CVW_METADATA_ENUM(cvw_initEnumMetadataSinglePayloadWithLayoutString, void,
SWIFT_RUNTIME_EXPORT, , swift::,
(EnumMetadata *self, EnumLayoutFlags layoutFlags,
const Metadata *payloadType, unsigned emptyCases),
(self, layoutFlags, payloadType, emptyCases))
OVERRIDE_CVW_METADATA_ENUM(initEnumMetadataMultiPayloadWithLayoutString, void,
OVERRIDE_CVW_METADATA_ENUM(cvw_initEnumMetadataMultiPayloadWithLayoutString, void,
SWIFT_RUNTIME_EXPORT, , swift::,
(EnumMetadata *self, EnumLayoutFlags layoutFlags,
unsigned numPayloads,
const Metadata * const *payloadLayouts),
(self, layoutFlags, numPayloads, payloadLayouts))
OVERRIDE_CVW(generic_destroy, void, SWIFT_RUNTIME_EXPORT,
OVERRIDE_CVW(cvw_destroy, void, SWIFT_RUNTIME_EXPORT,
, swift::, (swift::OpaqueValue *address,
const Metadata *metadata),
(address, metadata))
OVERRIDE_CVW(generic_assignWithCopy, swift::OpaqueValue *, SWIFT_RUNTIME_EXPORT,
OVERRIDE_CVW(cvw_assignWithCopy, swift::OpaqueValue *, SWIFT_RUNTIME_EXPORT,
, swift::, (swift::OpaqueValue *dest,
swift::OpaqueValue *src,
const Metadata *metadata),
(dest, src, metadata))
OVERRIDE_CVW(generic_assignWithTake, swift::OpaqueValue *, SWIFT_RUNTIME_EXPORT,
OVERRIDE_CVW(cvw_assignWithTake, swift::OpaqueValue *, SWIFT_RUNTIME_EXPORT,
, swift::, (swift::OpaqueValue *dest,
swift::OpaqueValue *src,
const Metadata *metadata),
(dest, src, metadata))
OVERRIDE_CVW(generic_initWithCopy, swift::OpaqueValue *, SWIFT_RUNTIME_EXPORT,
OVERRIDE_CVW(cvw_initWithCopy, swift::OpaqueValue *, SWIFT_RUNTIME_EXPORT,
, swift::, (swift::OpaqueValue *dest,
swift::OpaqueValue *src,
const Metadata *metadata),
(dest, src, metadata))
OVERRIDE_CVW(generic_initWithTake, swift::OpaqueValue *, SWIFT_RUNTIME_EXPORT,
OVERRIDE_CVW(cvw_initWithTake, swift::OpaqueValue *, SWIFT_RUNTIME_EXPORT,
, swift::, (swift::OpaqueValue *dest,
swift::OpaqueValue *src,
const Metadata *metadata),
(dest, src, metadata))
OVERRIDE_CVW(generic_initializeBufferWithCopyOfBuffer, swift::OpaqueValue *,
OVERRIDE_CVW(cvw_initializeBufferWithCopyOfBuffer, swift::OpaqueValue *,
SWIFT_RUNTIME_EXPORT,
, swift::, (swift::ValueBuffer *dest,
swift::ValueBuffer *src,
const Metadata *metadata),
(dest, src, metadata))
OVERRIDE_CVW(enumSimple_getEnumTag, unsigned, SWIFT_RUNTIME_EXPORT,
OVERRIDE_CVW(cvw_enumSimple_getEnumTag, unsigned, SWIFT_RUNTIME_EXPORT,
, swift::, (swift::OpaqueValue *address,
const Metadata *metadata),
(address, metadata))
OVERRIDE_CVW(enumSimple_destructiveInjectEnumTag, void, SWIFT_RUNTIME_EXPORT,
OVERRIDE_CVW(cvw_enumSimple_destructiveInjectEnumTag, void, SWIFT_RUNTIME_EXPORT,
, swift::, (swift::OpaqueValue *address,
unsigned tag,
const Metadata *metadata),
(address, tag, metadata))
OVERRIDE_CVW(enumFn_getEnumTag, unsigned, SWIFT_RUNTIME_EXPORT,
OVERRIDE_CVW(cvw_enumFn_getEnumTag, unsigned, SWIFT_RUNTIME_EXPORT,
, swift::, (swift::OpaqueValue *address,
const Metadata *metadata),
(address, metadata))
OVERRIDE_CVW(multiPayloadEnumGeneric_getEnumTag, unsigned, SWIFT_RUNTIME_EXPORT,
OVERRIDE_CVW(cvw_multiPayloadEnumGeneric_getEnumTag, unsigned, SWIFT_RUNTIME_EXPORT,
, swift::, (swift::OpaqueValue *address,
const Metadata *metadata),
(address, metadata))
OVERRIDE_CVW(multiPayloadEnumGeneric_destructiveInjectEnumTag, void, SWIFT_RUNTIME_EXPORT,
OVERRIDE_CVW(cvw_multiPayloadEnumGeneric_destructiveInjectEnumTag, void, SWIFT_RUNTIME_EXPORT,
, swift::, (swift::OpaqueValue *address,
unsigned tag,
const Metadata *metadata),
(address, tag, metadata))
OVERRIDE_CVW(singlePayloadEnumGeneric_getEnumTag, unsigned, SWIFT_RUNTIME_EXPORT,
OVERRIDE_CVW(cvw_singlePayloadEnumGeneric_getEnumTag, unsigned, SWIFT_RUNTIME_EXPORT,
, swift::, (swift::OpaqueValue *address,
const Metadata *metadata),
(address, metadata))
OVERRIDE_CVW(singlePayloadEnumGeneric_destructiveInjectEnumTag, void, SWIFT_RUNTIME_EXPORT,
OVERRIDE_CVW(cvw_singlePayloadEnumGeneric_destructiveInjectEnumTag, void, SWIFT_RUNTIME_EXPORT,
, swift::, (swift::OpaqueValue *address,
unsigned tag,
const Metadata *metadata),

View File

@@ -113,12 +113,12 @@ static void array_copy_operation(OpaqueValue *dest, OpaqueValue *src,
if (copyKind == ArrayCopy::NoAlias || copyKind == ArrayCopy::FrontToBack) {
if (self->hasLayoutString() && destOp == ArrayDest::Init &&
srcOp == ArraySource::Copy) {
return swift_generic_arrayInitWithCopy(dest, src, count, stride, self);
return swift_cvw_arrayInitWithCopy(dest, src, count, stride, self);
}
if (self->hasLayoutString() && destOp == ArrayDest::Assign &&
srcOp == ArraySource::Copy) {
return swift_generic_arrayAssignWithCopy(dest, src, count, stride, self);
return swift_cvw_arrayAssignWithCopy(dest, src, count, stride, self);
}
auto copy = get_witness_function<destOp, srcOp>(wtable);
@@ -214,7 +214,7 @@ void swift_arrayDestroy(OpaqueValue *begin, size_t count, const Metadata *self)
auto stride = wtable->getStride();
if (self->hasLayoutString()) {
return swift_generic_arrayDestroy(begin, count, stride, self);
return swift_cvw_arrayDestroy(begin, count, stride, self);
}
for (size_t i = 0; i < count; ++i) {

View File

@@ -899,8 +899,8 @@ static void handleRefCountsDestroy(const Metadata *metadata,
}
}
static void swift_generic_destroyImpl(swift::OpaqueValue *address,
const Metadata *metadata) {
static void swift_cvw_destroyImpl(swift::OpaqueValue *address,
const Metadata *metadata) {
const uint8_t *layoutStr = metadata->getLayoutString();
LayoutStringReader1 reader{layoutStr + layoutStringHeaderSize};
uintptr_t addrOffset = 0;
@@ -914,7 +914,8 @@ static void swift_generic_destroyImpl(swift::OpaqueValue *address,
#endif
}
void swift::swift_generic_arrayDestroy(swift::OpaqueValue *address, size_t count, size_t stride, const Metadata *metadata) {
void swift::swift_cvw_arrayDestroy(swift::OpaqueValue *address, size_t count,
size_t stride, const Metadata *metadata) {
const uint8_t *layoutStr = metadata->getLayoutString();
uint8_t *addr = (uint8_t *)address;
for (size_t i = 0; i < count; i++) {
@@ -1160,9 +1161,8 @@ static void handleRefCountsInitWithCopy(const Metadata *metadata,
}
static swift::OpaqueValue *
swift_generic_initWithCopyImpl(swift::OpaqueValue *_dest,
swift::OpaqueValue *_src,
const Metadata *metadata) {
swift_cvw_initWithCopyImpl(swift::OpaqueValue *_dest, swift::OpaqueValue *_src,
const Metadata *metadata) {
const uint8_t *layoutStr = metadata->getLayoutString();
LayoutStringReader1 reader{layoutStr + layoutStringHeaderSize};
uintptr_t addrOffset = 0;
@@ -1181,10 +1181,10 @@ swift_generic_initWithCopyImpl(swift::OpaqueValue *_dest,
return _dest;
}
void swift::swift_generic_arrayInitWithCopy(swift::OpaqueValue *_dest,
swift::OpaqueValue *_src,
size_t count, size_t stride,
const Metadata *metadata) {
void swift::swift_cvw_arrayInitWithCopy(swift::OpaqueValue *_dest,
swift::OpaqueValue *_src, size_t count,
size_t stride,
const Metadata *metadata) {
const uint8_t *layoutStr = metadata->getLayoutString();
uint8_t *dest = (uint8_t *)_dest;
uint8_t *src = (uint8_t *)_src;
@@ -1319,9 +1319,8 @@ static void handleRefCountsInitWithTake(const Metadata *metadata,
}
static swift::OpaqueValue *
swift_generic_initWithTakeImpl(swift::OpaqueValue *_dest,
swift::OpaqueValue *_src,
const Metadata *metadata) {
swift_cvw_initWithTakeImpl(swift::OpaqueValue *_dest, swift::OpaqueValue *_src,
const Metadata *metadata) {
if (SWIFT_LIKELY(metadata->getValueWitnesses()->isBitwiseTakable())) {
size_t size = metadata->vw_size();
memcpy(_dest, _src, size);
@@ -2072,9 +2071,9 @@ static void multiPayloadEnumFNAssignWithCopy(const Metadata *metadata,
}
static swift::OpaqueValue *
swift_generic_assignWithCopyImpl(swift::OpaqueValue *_dest,
swift::OpaqueValue *_src,
const Metadata *metadata) {
swift_cvw_assignWithCopyImpl(swift::OpaqueValue *_dest,
swift::OpaqueValue *_src,
const Metadata *metadata) {
uint8_t *dest = (uint8_t *)_dest;
uint8_t *src = (uint8_t *)_src;
const uint8_t *layoutStr = metadata->getLayoutString();
@@ -2093,10 +2092,10 @@ swift_generic_assignWithCopyImpl(swift::OpaqueValue *_dest,
return _dest;
}
void swift::swift_generic_arrayAssignWithCopy(swift::OpaqueValue *_dest,
swift::OpaqueValue *_src,
size_t count, size_t stride,
const Metadata *metadata) {
void swift::swift_cvw_arrayAssignWithCopy(swift::OpaqueValue *_dest,
swift::OpaqueValue *_src,
size_t count, size_t stride,
const Metadata *metadata) {
uint8_t *dest = (uint8_t *)_dest;
uint8_t *src = (uint8_t *)_src;
const uint8_t *layoutStr = metadata->getLayoutString();
@@ -2114,19 +2113,19 @@ void swift::swift_generic_arrayAssignWithCopy(swift::OpaqueValue *_dest,
}
static swift::OpaqueValue *
swift_generic_assignWithTakeImpl(swift::OpaqueValue *dest,
swift::OpaqueValue *src,
const Metadata *metadata) {
swift_generic_destroy(dest, metadata);
return swift_generic_initWithTake(dest, src, metadata);
swift_cvw_assignWithTakeImpl(swift::OpaqueValue *dest, swift::OpaqueValue *src,
const Metadata *metadata) {
swift_cvw_destroy(dest, metadata);
return swift_cvw_initWithTake(dest, src, metadata);
}
extern "C" unsigned swift_singletonEnum_getEnumTag(swift::OpaqueValue *address,
const Metadata *metadata) {
extern "C" unsigned
swift_cvw_singletonEnum_getEnumTag(swift::OpaqueValue *address,
const Metadata *metadata) {
return 0;
}
extern "C" void swift_singletonEnum_destructiveInjectEnumTag(
extern "C" void swift_cvw_singletonEnum_destructiveInjectEnumTag(
swift::OpaqueValue *address, unsigned tag, const Metadata *metadata) {
return;
}
@@ -2159,8 +2158,8 @@ static inline T handleSinglePayloadEnumSimpleTag(
xiTagBytesOffset, payloadSize, numExtraTagBytes);
}
static unsigned swift_enumSimple_getEnumTagImpl(swift::OpaqueValue *address,
const Metadata *metadata) {
static unsigned swift_cvw_enumSimple_getEnumTagImpl(swift::OpaqueValue *address,
const Metadata *metadata) {
auto addr = reinterpret_cast<uint8_t *>(address);
LayoutStringReader reader{metadata->getLayoutString(),
layoutStringHeaderSize + sizeof(uint64_t)};
@@ -2202,7 +2201,7 @@ static unsigned swift_enumSimple_getEnumTagImpl(swift::OpaqueValue *address,
reader, addr, extraTagBytesHandler, xihandler);
}
static void swift_enumSimple_destructiveInjectEnumTagImpl(
static void swift_cvw_enumSimple_destructiveInjectEnumTagImpl(
swift::OpaqueValue *address, unsigned tag, const Metadata *metadata) {
auto addr = reinterpret_cast<uint8_t *>(address);
LayoutStringReader reader{metadata->getLayoutString(),
@@ -2260,8 +2259,8 @@ static void swift_enumSimple_destructiveInjectEnumTagImpl(
xihandler);
}
static unsigned swift_enumFn_getEnumTagImpl(swift::OpaqueValue *address,
const Metadata *metadata) {
static unsigned swift_cvw_enumFn_getEnumTagImpl(swift::OpaqueValue *address,
const Metadata *metadata) {
auto addr = reinterpret_cast<const uint8_t *>(address);
LayoutStringReader reader{metadata->getLayoutString(),
layoutStringHeaderSize + sizeof(uint64_t)};
@@ -2271,8 +2270,8 @@ static unsigned swift_enumFn_getEnumTagImpl(swift::OpaqueValue *address,
}
static unsigned
swift_multiPayloadEnumGeneric_getEnumTagImpl(swift::OpaqueValue *address,
const Metadata *metadata) {
swift_cvw_multiPayloadEnumGeneric_getEnumTagImpl(swift::OpaqueValue *address,
const Metadata *metadata) {
auto addr = reinterpret_cast<const uint8_t *>(address);
LayoutStringReader1 reader{metadata->getLayoutString() +
layoutStringHeaderSize + sizeof(uint64_t)};
@@ -2299,7 +2298,7 @@ swift_multiPayloadEnumGeneric_getEnumTagImpl(swift::OpaqueValue *address,
}
}
static void swift_multiPayloadEnumGeneric_destructiveInjectEnumTagImpl(
static void swift_cvw_multiPayloadEnumGeneric_destructiveInjectEnumTagImpl(
swift::OpaqueValue *address, unsigned tag, const Metadata *metadata) {
auto addr = reinterpret_cast<uint8_t *>(address);
LayoutStringReader reader{metadata->getLayoutString(),
@@ -2363,8 +2362,8 @@ static inline T handleSinglePayloadEnumGenericTag(
}
static unsigned
swift_singlePayloadEnumGeneric_getEnumTagImpl(swift::OpaqueValue *address,
const Metadata *metadata) {
swift_cvw_singlePayloadEnumGeneric_getEnumTagImpl(swift::OpaqueValue *address,
const Metadata *metadata) {
auto addr = reinterpret_cast<uint8_t *>(address);
LayoutStringReader reader{metadata->getLayoutString(),
layoutStringHeaderSize + sizeof(uint64_t)};
@@ -2404,7 +2403,7 @@ swift_singlePayloadEnumGeneric_getEnumTagImpl(swift::OpaqueValue *address,
reader, addr, extraTagBytesHandler, xihandler);
}
static void swift_singlePayloadEnumGeneric_destructiveInjectEnumTagImpl(
static void swift_cvw_singlePayloadEnumGeneric_destructiveInjectEnumTagImpl(
swift::OpaqueValue *address, unsigned tag, const Metadata *metadata) {
auto addr = reinterpret_cast<uint8_t *>(address);
LayoutStringReader reader{metadata->getLayoutString(),
@@ -2463,12 +2462,12 @@ static void swift_singlePayloadEnumGeneric_destructiveInjectEnumTagImpl(
}
static swift::OpaqueValue *
swift_generic_initializeBufferWithCopyOfBufferImpl(swift::ValueBuffer *dest,
swift::ValueBuffer *src,
const Metadata *metadata) {
swift_cvw_initializeBufferWithCopyOfBufferImpl(swift::ValueBuffer *dest,
swift::ValueBuffer *src,
const Metadata *metadata) {
if (metadata->getValueWitnesses()->isValueInline()) {
return swift_generic_initWithCopy((swift::OpaqueValue *)dest,
(swift::OpaqueValue *)src, metadata);
return swift_cvw_initWithCopy((swift::OpaqueValue *)dest,
(swift::OpaqueValue *)src, metadata);
} else {
memcpy(dest, src, sizeof(swift::HeapObject *));
swift_retain(*(swift::HeapObject **)src);
@@ -2476,10 +2475,10 @@ swift_generic_initializeBufferWithCopyOfBufferImpl(swift::ValueBuffer *dest,
}
}
void swift::swift_resolve_resilientAccessors(uint8_t *layoutStr,
size_t layoutStrOffset,
const uint8_t *fieldLayoutStr,
const Metadata *fieldType) {
void swift::swift_cvw_resolve_resilientAccessors(uint8_t *layoutStr,
size_t layoutStrOffset,
const uint8_t *fieldLayoutStr,
const Metadata *fieldType) {
LayoutStringWriter writer{layoutStr, layoutStrOffset};
LayoutStringReader reader{fieldLayoutStr, 0};
while (true) {
@@ -2558,9 +2557,9 @@ void swift::swift_resolve_resilientAccessors(uint8_t *layoutStr,
size_t caseOffset = reader.readBytes<size_t>();
const uint8_t *caseLayoutString = fieldCasesBeginOffset +
caseOffset;
swift_resolve_resilientAccessors(layoutStr,
casesBeginOffset + caseOffset,
caseLayoutString, fieldType);
swift_cvw_resolve_resilientAccessors(layoutStr,
casesBeginOffset + caseOffset,
caseLayoutString, fieldType);
}
reader.skip(refCountBytes);
break;
@@ -2590,11 +2589,102 @@ void swift::swift_resolve_resilientAccessors(uint8_t *layoutStr,
}
}
extern "C"
void swift_generic_instantiateLayoutString(const uint8_t* layoutStr,
Metadata* type) {
extern "C" void swift_cvw_instantiateLayoutString(const uint8_t *layoutStr,
Metadata *type) {
type->setLayoutString(layoutStr);
}
// Forwarders for compatibility reasons
extern "C" void swift_generic_destroy(swift::OpaqueValue *address,
const Metadata *metadata) {
swift_cvw_destroy(address, metadata);
}
extern "C" swift::OpaqueValue *
swift_generic_assignWithCopy(swift::OpaqueValue *dest, swift::OpaqueValue *src,
const Metadata *metadata) {
return swift_cvw_assignWithCopy(dest, src, metadata);
}
extern "C" swift::OpaqueValue *
swift_generic_assignWithTake(swift::OpaqueValue *dest, swift::OpaqueValue *src,
const Metadata *metadata) {
return swift_cvw_assignWithTake(dest, src, metadata);
}
extern "C" swift::OpaqueValue *
swift_generic_initWithCopy(swift::OpaqueValue *dest, swift::OpaqueValue *src,
const Metadata *metadata) {
return swift_cvw_initWithCopy(dest, src, metadata);
}
extern "C" swift::OpaqueValue *
swift_generic_initWithTake(swift::OpaqueValue *dest, swift::OpaqueValue *src,
const Metadata *metadata) {
return swift_cvw_initWithTake(dest, src, metadata);
}
extern "C" swift::OpaqueValue *
swift_generic_initializeBufferWithCopyOfBuffer(swift::ValueBuffer *dest,
swift::ValueBuffer *src,
const Metadata *metadata) {
return swift_cvw_initializeBufferWithCopyOfBuffer(dest, src, metadata);
}
extern "C" unsigned swift_enumSimple_getEnumTag(swift::OpaqueValue *address,
const Metadata *metadata) {
return swift_cvw_enumSimple_getEnumTag(address, metadata);
}
extern "C" void swift_enumSimple_destructiveInjectEnumTag(
swift::OpaqueValue *address, unsigned tag, const Metadata *metadata) {
swift_cvw_enumSimple_destructiveInjectEnumTag(address, tag, metadata);
}
extern "C" unsigned swift_enumFn_getEnumTag(swift::OpaqueValue *address,
const Metadata *metadata) {
return swift_cvw_enumFn_getEnumTag(address, metadata);
}
extern "C" unsigned
swift_multiPayloadEnumGeneric_getEnumTag(swift::OpaqueValue *address,
const Metadata *metadata) {
return swift_cvw_multiPayloadEnumGeneric_getEnumTag(address, metadata);
}
extern "C" void swift_multiPayloadEnumGeneric_destructiveInjectEnumTag(
swift::OpaqueValue *address, unsigned tag, const Metadata *metadata) {
swift_cvw_multiPayloadEnumGeneric_destructiveInjectEnumTag(address, tag,
metadata);
}
extern "C" unsigned
swift_singlePayloadEnumGeneric_getEnumTag(swift::OpaqueValue *address,
const Metadata *metadata) {
return swift_cvw_singlePayloadEnumGeneric_getEnumTagImpl(address, metadata);
}
extern "C" void swift_singlePayloadEnumGeneric_destructiveInjectEnumTag(
swift::OpaqueValue *address, unsigned tag, const Metadata *metadata) {
swift_cvw_singlePayloadEnumGeneric_destructiveInjectEnumTag(address, tag,
metadata);
}
extern "C" unsigned swift_singletonEnum_getEnumTag(swift::OpaqueValue *address,
const Metadata *metadata) {
return 0;
}
extern "C" void swift_singletonEnum_destructiveInjectEnumTag(
swift::OpaqueValue *address, unsigned tag, const Metadata *metadata) {
return;
}
extern "C" void swift_generic_instantiateLayoutString(const uint8_t *layoutStr,
Metadata *type) {
swift_cvw_instantiateLayoutString(layoutStr, type);
}
#define OVERRIDE_CVW COMPATIBILITY_OVERRIDE
#include "../CompatibilityOverride/CompatibilityOverrideIncludePath.h"

View File

@@ -172,6 +172,81 @@ struct LayoutStringWriter {
inline void skip(size_t n) { offset += n; }
};
SWIFT_RUNTIME_EXPORT
void swift_cvw_destroy(swift::OpaqueValue *address, const Metadata *metadata);
SWIFT_RUNTIME_EXPORT
swift::OpaqueValue *swift_cvw_assignWithCopy(swift::OpaqueValue *dest,
swift::OpaqueValue *src,
const Metadata *metadata);
SWIFT_RUNTIME_EXPORT
swift::OpaqueValue *swift_cvw_assignWithTake(swift::OpaqueValue *dest,
swift::OpaqueValue *src,
const Metadata *metadata);
SWIFT_RUNTIME_EXPORT
swift::OpaqueValue *swift_cvw_initWithCopy(swift::OpaqueValue *dest,
swift::OpaqueValue *src,
const Metadata *metadata);
SWIFT_RUNTIME_EXPORT
swift::OpaqueValue *swift_cvw_initWithTake(swift::OpaqueValue *dest,
swift::OpaqueValue *src,
const Metadata *metadata);
SWIFT_RUNTIME_EXPORT
swift::OpaqueValue *
swift_cvw_initializeBufferWithCopyOfBuffer(swift::ValueBuffer *dest,
swift::ValueBuffer *src,
const Metadata *metadata);
SWIFT_RUNTIME_EXPORT
unsigned swift_cvw_singletonEnum_getEnumTag(swift::OpaqueValue *address,
const Metadata *metadata);
SWIFT_RUNTIME_EXPORT
void swift_cvw_singletonEnum_destructiveInjectEnumTag(
swift::OpaqueValue *address, unsigned tag, const Metadata *metadata);
SWIFT_RUNTIME_EXPORT
unsigned swift_cvw_enumSimple_getEnumTag(swift::OpaqueValue *address,
const Metadata *metadata);
SWIFT_RUNTIME_EXPORT
void swift_cvw_enumSimple_destructiveInjectEnumTag(swift::OpaqueValue *address,
unsigned tag,
const Metadata *metadata);
SWIFT_RUNTIME_EXPORT
unsigned swift_cvw_enumFn_getEnumTag(swift::OpaqueValue *address,
const Metadata *metadata);
SWIFT_RUNTIME_EXPORT
unsigned
swift_cvw_multiPayloadEnumGeneric_getEnumTag(swift::OpaqueValue *address,
const Metadata *metadata);
SWIFT_RUNTIME_EXPORT
void swift_cvw_multiPayloadEnumGeneric_destructiveInjectEnumTag(
swift::OpaqueValue *address, unsigned tag, const Metadata *metadata);
SWIFT_RUNTIME_EXPORT
unsigned
swift_cvw_singlePayloadEnumGeneric_getEnumTag(swift::OpaqueValue *address,
const Metadata *metadata);
SWIFT_RUNTIME_EXPORT
void swift_cvw_singlePayloadEnumGeneric_destructiveInjectEnumTag(
swift::OpaqueValue *address, unsigned tag, const Metadata *metadata);
SWIFT_RUNTIME_EXPORT
void swift_cvw_instantiateLayoutString(const uint8_t *layoutStr,
Metadata *type);
void swift_cvw_resolve_resilientAccessors(uint8_t *layoutStr,
size_t layoutStrOffset,
const uint8_t *fieldLayoutStr,
const Metadata *fieldType);
void swift_cvw_arrayDestroy(swift::OpaqueValue *addr, size_t count,
size_t stride, const Metadata *metadata);
void swift_cvw_arrayInitWithCopy(swift::OpaqueValue *dest,
swift::OpaqueValue *src, size_t count,
size_t stride, const Metadata *metadata);
extern "C" void swift_cvw_arrayAssignWithCopy(swift::OpaqueValue *dest,
swift::OpaqueValue *src,
size_t count, size_t stride,
const Metadata *metadata);
// For backwards compatibility
SWIFT_RUNTIME_EXPORT
void swift_generic_destroy(swift::OpaqueValue *address,
const Metadata *metadata);
@@ -226,29 +301,7 @@ SWIFT_RUNTIME_EXPORT
void swift_singlePayloadEnumGeneric_destructiveInjectEnumTag(
swift::OpaqueValue *address, unsigned tag, const Metadata *metadata);
SWIFT_RUNTIME_EXPORT
void swift_generic_instantiateLayoutString(const uint8_t *layoutStr,
Metadata *type);
void swift_resolve_resilientAccessors(uint8_t *layoutStr,
size_t layoutStrOffset,
const uint8_t *fieldLayoutStr,
const Metadata *fieldType);
void swift_generic_arrayDestroy(swift::OpaqueValue *addr,
size_t count,
size_t stride,
const Metadata *metadata);
void swift_generic_arrayInitWithCopy(swift::OpaqueValue *dest,
swift::OpaqueValue *src,
size_t count,
size_t stride,
const Metadata *metadata);
extern "C" void swift_generic_arrayAssignWithCopy(swift::OpaqueValue *dest,
swift::OpaqueValue *src,
size_t count, size_t stride,
const Metadata *metadata);
void swift_generic_instantiateLayoutString(const uint8_t *layoutStr, Metadata *type);
constexpr size_t layoutStringHeaderSize = sizeof(uint64_t) + sizeof(size_t);

View File

@@ -67,7 +67,7 @@ swift::swift_initEnumMetadataSingleCase(EnumMetadata *self,
vwtable->publishLayout(layout);
}
static void swift_initEnumMetadataSingleCaseWithLayoutStringImpl(
static void swift_cvw_initEnumMetadataSingleCaseWithLayoutStringImpl(
EnumMetadata *self, EnumLayoutFlags layoutFlags,
const Metadata *payloadType) {
assert(self->hasLayoutString());
@@ -108,12 +108,6 @@ static void swift_initEnumMetadataSingleCaseWithLayoutStringImpl(
writer.writeBytes(((uint64_t)flags) &
~((uint64_t)LayoutStringFlags::HasRelativePointers));
vwtable->destroy = swift_generic_destroy;
vwtable->initializeWithCopy = swift_generic_initWithCopy;
vwtable->initializeWithTake = swift_generic_initWithTake;
vwtable->assignWithCopy = swift_generic_assignWithCopy;
vwtable->assignWithTake = swift_generic_assignWithTake;
installCommonValueWitnesses(layout, vwtable);
self->setLayoutString(layoutStr);
@@ -121,6 +115,13 @@ static void swift_initEnumMetadataSingleCaseWithLayoutStringImpl(
vwtable->publishLayout(layout);
}
void swift::swift_initEnumMetadataSingleCaseWithLayoutString(
EnumMetadata *self, EnumLayoutFlags layoutFlags,
const Metadata *payloadType) {
swift_cvw_initEnumMetadataSingleCaseWithLayoutString(self, layoutFlags,
payloadType);
}
void
swift::swift_initEnumMetadataSinglePayload(EnumMetadata *self,
EnumLayoutFlags layoutFlags,
@@ -220,7 +221,7 @@ XIElement findXIElement(const Metadata *type) {
}
} // namespace
static void swift_initEnumMetadataSinglePayloadWithLayoutStringImpl(
static void swift_cvw_initEnumMetadataSinglePayloadWithLayoutStringImpl(
EnumMetadata *self, EnumLayoutFlags layoutFlags,
const Metadata *payloadType, unsigned emptyCases) {
assert(self->hasLayoutString());
@@ -319,11 +320,6 @@ static void swift_initEnumMetadataSinglePayloadWithLayoutStringImpl(
~((uint64_t)LayoutStringFlags::HasRelativePointers));
self->setLayoutString(layoutStr);
vwtable->destroy = swift_generic_destroy;
vwtable->initializeWithCopy = swift_generic_initWithCopy;
vwtable->initializeWithTake = swift_generic_initWithTake;
vwtable->assignWithCopy = swift_generic_assignWithCopy;
vwtable->assignWithTake = swift_generic_assignWithTake;
// Substitute in better common value witnesses if we have them.
// If the payload type is a single-refcounted pointer, and the enum has
@@ -354,6 +350,13 @@ static void swift_initEnumMetadataSinglePayloadWithLayoutStringImpl(
vwtable->publishLayout(layout);
}
void swift::swift_initEnumMetadataSinglePayloadWithLayoutString(
EnumMetadata *self, EnumLayoutFlags layoutFlags,
const Metadata *payloadType, unsigned emptyCases) {
return swift_cvw_initEnumMetadataSinglePayloadWithLayoutString(
self, layoutFlags, payloadType, emptyCases);
}
unsigned
swift::swift_getEnumTagSinglePayloadGeneric(const OpaqueValue *value,
unsigned emptyCases,
@@ -439,7 +442,7 @@ swift::swift_initEnumMetadataMultiPayload(EnumMetadata *enumType,
vwtable->publishLayout(layout);
}
static void swift_initEnumMetadataMultiPayloadWithLayoutStringImpl(
static void swift_cvw_initEnumMetadataMultiPayloadWithLayoutStringImpl(
EnumMetadata *enumType, EnumLayoutFlags layoutFlags, unsigned numPayloads,
const Metadata *const *payloadLayouts) {
assert(enumType->hasLayoutString());
@@ -545,12 +548,6 @@ static void swift_initEnumMetadataMultiPayloadWithLayoutStringImpl(
~((uint64_t)LayoutStringFlags::HasRelativePointers));
enumType->setLayoutString(layoutStr);
vwtable->destroy = swift_generic_destroy;
vwtable->initializeWithCopy = swift_generic_initWithCopy;
vwtable->initializeWithTake = swift_generic_initWithTake;
vwtable->assignWithCopy = swift_generic_assignWithCopy;
vwtable->assignWithTake = swift_generic_assignWithTake;
}
// Set up the layout info in the vwtable.
@@ -578,6 +575,13 @@ static void swift_initEnumMetadataMultiPayloadWithLayoutStringImpl(
vwtable->publishLayout(layout);
}
void swift::swift_initEnumMetadataMultiPayloadWithLayoutString(
EnumMetadata *enumType, EnumLayoutFlags layoutFlags, unsigned numPayloads,
const Metadata *const *payloadLayouts) {
swift_cvw_initEnumMetadataMultiPayloadWithLayoutString(
enumType, layoutFlags, numPayloads, payloadLayouts);
}
namespace {
struct MultiPayloadLayout {
size_t payloadSize;

View File

@@ -756,7 +756,8 @@ swift::swift_allocateGenericClassMetadata(const ClassDescriptor *description,
return metadata;
}
static ClassMetadata *swift_allocateGenericClassMetadataWithLayoutStringImpl(
static ClassMetadata *
swift_cvw_allocateGenericClassMetadataWithLayoutStringImpl(
const ClassDescriptor *description, const void *arguments,
const GenericClassMetadataPattern *pattern) {
return swift::swift_allocateGenericClassMetadata(description,
@@ -764,6 +765,13 @@ static ClassMetadata *swift_allocateGenericClassMetadataWithLayoutStringImpl(
pattern);
}
ClassMetadata *swift::swift_allocateGenericClassMetadataWithLayoutString(
const ClassDescriptor *description, const void *arguments,
const GenericClassMetadataPattern *pattern) {
return swift_cvw_allocateGenericClassMetadataWithLayoutString(
description, arguments, pattern);
}
static void
initializeValueMetadataFromPattern(ValueMetadata *metadata,
const ValueTypeDescriptor *description,
@@ -835,7 +843,8 @@ swift::swift_allocateGenericValueMetadata(const ValueTypeDescriptor *description
return metadata;
}
static ValueMetadata *swift_allocateGenericValueMetadataWithLayoutStringImpl(
static ValueMetadata *
swift_cvw_allocateGenericValueMetadataWithLayoutStringImpl(
const ValueTypeDescriptor *description, const void *arguments,
const GenericValueMetadataPattern *pattern, size_t extraDataSize) {
return swift::swift_allocateGenericValueMetadata(description,
@@ -844,6 +853,13 @@ static ValueMetadata *swift_allocateGenericValueMetadataWithLayoutStringImpl(
extraDataSize);
}
ValueMetadata *swift::swift_allocateGenericValueMetadataWithLayoutString(
const ValueTypeDescriptor *description, const void *arguments,
const GenericValueMetadataPattern *pattern, size_t extraDataSize) {
return swift_cvw_allocateGenericValueMetadataWithLayoutString(
description, arguments, pattern, extraDataSize);
}
// Look into the canonical prespecialized metadata attached to the type
// descriptor and add them to the metadata cache.
static void
@@ -3076,7 +3092,7 @@ void swift::swift_initStructMetadata(StructMetadata *structType,
vwtable->publishLayout(layout);
}
static void swift_initStructMetadataWithLayoutStringImpl(
static void swift_cvw_initStructMetadataWithLayoutStringImpl(
StructMetadata *structType, StructLayoutFlags layoutFlags, size_t numFields,
const uint8_t *const *fieldTypes, const uint8_t *fieldTags,
uint32_t *fieldOffsets) {
@@ -3186,11 +3202,6 @@ static void swift_initStructMetadataWithLayoutStringImpl(
structType->setLayoutString(layoutStr);
auto *vwtable = getMutableVWTableForInit(structType, layoutFlags);
vwtable->destroy = swift_generic_destroy;
vwtable->initializeWithCopy = swift_generic_initWithCopy;
vwtable->initializeWithTake = swift_generic_initWithTake;
vwtable->assignWithCopy = swift_generic_assignWithCopy;
vwtable->assignWithTake = swift_generic_assignWithTake;
layout.extraInhabitantCount = extraInhabitantCount;
@@ -3200,6 +3211,14 @@ static void swift_initStructMetadataWithLayoutStringImpl(
vwtable->publishLayout(layout);
}
void swift::swift_initStructMetadataWithLayoutString(
StructMetadata *structType, StructLayoutFlags layoutFlags, size_t numFields,
const uint8_t *const *fieldTypes, const uint8_t *fieldTags,
uint32_t *fieldOffsets) {
swift_cvw_initStructMetadataWithLayoutString(
structType, layoutFlags, numFields, fieldTypes, fieldTags, fieldOffsets);
}
size_t swift::_swift_refCountBytesForMetatype(const Metadata *type) {
auto *vwt = type->getValueWitnesses();
if (type->vw_size() == 0 || vwt->isPOD()) {
@@ -3297,8 +3316,9 @@ void swift::_swift_addRefCountStringForMetatype(LayoutStringWriter &writer,
reader.layoutStr + layoutStringHeaderSize, fieldRefCountBytes);
if (fieldFlags & LayoutStringFlags::HasRelativePointers) {
swift_resolve_resilientAccessors(writer.layoutStr, writer.offset,
reader.layoutStr + layoutStringHeaderSize, fieldType);
swift_cvw_resolve_resilientAccessors(
writer.layoutStr, writer.offset,
reader.layoutStr + layoutStringHeaderSize, fieldType);
}
if (offset) {

View File

@@ -3,31 +3,31 @@
// REQUIRES: swift_feature_LayoutStringValueWitnesses
// REQUIRES: swift_feature_LayoutStringValueWitnessesInstantiation
// CHECK-NOT: @"$s3Foo7GenericVWV" = {{.*}}ptr @swift_generic{{.*$}}
// CHECK-NOT: @"$s3Foo7GenericVWV" = {{.*}}ptr @swift_cvw{{.*$}}
struct Generic<T: ~Copyable>: ~Copyable {
let x: T
let y: Int
}
// CHECK-NOT: @"$s3Foo13SinglePayloadOWV" = {{.*}}ptr @swift_generic{{.*$}}
// CHECK-NOT: @"$s3Foo13SinglePayloadOWV" = {{.*}}ptr @swift_cvw{{.*$}}
enum SinglePayload: ~Copyable {
case x(AnyObject)
case y
}
// CHECK-NOT: @"$s3Foo12MultiPayloadOWV" = {{.*}}ptr @swift_generic{{.*$}}
// CHECK-NOT: @"$s3Foo12MultiPayloadOWV" = {{.*}}ptr @swift_cvw{{.*$}}
enum MultiPayload: ~Copyable {
case x(AnyObject)
case y(AnyObject)
}
// CHECK-NOT: @"$s3Foo20SinglePayloadGenericOWV" = {{.*}}ptr @swift_generic{{.*$}}
// CHECK-NOT: @"$s3Foo20SinglePayloadGenericOWV" = {{.*}}ptr @swift_cvw{{.*$}}
enum SinglePayloadGeneric<T>: ~Copyable {
case x(T)
case y
}
// CHECK-NOT: @"$s3Foo19MultiPayloadGenericOWV" = {{.*}}ptr @swift_generic{{.*$}}
// CHECK-NOT: @"$s3Foo19MultiPayloadGenericOWV" = {{.*}}ptr @swift_cvw{{.*$}}
enum MultiPayloadGeneric<T>: ~Copyable {
case x(T)
case y(T)

View File

@@ -845,3 +845,27 @@ Added: _$ss4SlabVsRi__rlE8_storagexq_BVvr
// Shared string creation for Foundation
Added: _$ss40_SwiftCreateImmortalString_ForFoundation6buffer7isASCIISSSgSRys5UInt8VG_SbtF
// Compact value witnesses
Added: _swift_cvw_allocateGenericClassMetadataWithLayoutString
Added: _swift_cvw_allocateGenericValueMetadataWithLayoutString
Added: _swift_cvw_assignWithCopy
Added: _swift_cvw_assignWithTake
Added: _swift_cvw_destroy
Added: _swift_cvw_enumFn_getEnumTag
Added: _swift_cvw_enumSimple_destructiveInjectEnumTag
Added: _swift_cvw_enumSimple_getEnumTag
Added: _swift_cvw_initEnumMetadataMultiPayloadWithLayoutString
Added: _swift_cvw_initEnumMetadataSingleCaseWithLayoutString
Added: _swift_cvw_initEnumMetadataSinglePayloadWithLayoutString
Added: _swift_cvw_initStructMetadataWithLayoutString
Added: _swift_cvw_initWithCopy
Added: _swift_cvw_initWithTake
Added: _swift_cvw_initializeBufferWithCopyOfBuffer
Added: _swift_cvw_instantiateLayoutString
Added: _swift_cvw_multiPayloadEnumGeneric_destructiveInjectEnumTag
Added: _swift_cvw_multiPayloadEnumGeneric_getEnumTag
Added: _swift_cvw_singlePayloadEnumGeneric_destructiveInjectEnumTag
Added: _swift_cvw_singlePayloadEnumGeneric_getEnumTag
Added: _swift_cvw_singletonEnum_destructiveInjectEnumTag
Added: _swift_cvw_singletonEnum_getEnumTag

View File

@@ -846,3 +846,27 @@ Added: _$ss4SlabVsRi__rlE8_storagexq_BVvr
// Shared string creation for Foundation
Added: _$ss40_SwiftCreateImmortalString_ForFoundation6buffer7isASCIISSSgSRys5UInt8VG_SbtF
// Compact value witnesses
Added: _swift_cvw_allocateGenericClassMetadataWithLayoutString
Added: _swift_cvw_allocateGenericValueMetadataWithLayoutString
Added: _swift_cvw_assignWithCopy
Added: _swift_cvw_assignWithTake
Added: _swift_cvw_destroy
Added: _swift_cvw_enumFn_getEnumTag
Added: _swift_cvw_enumSimple_destructiveInjectEnumTag
Added: _swift_cvw_enumSimple_getEnumTag
Added: _swift_cvw_initEnumMetadataMultiPayloadWithLayoutString
Added: _swift_cvw_initEnumMetadataSingleCaseWithLayoutString
Added: _swift_cvw_initEnumMetadataSinglePayloadWithLayoutString
Added: _swift_cvw_initStructMetadataWithLayoutString
Added: _swift_cvw_initWithCopy
Added: _swift_cvw_initWithTake
Added: _swift_cvw_initializeBufferWithCopyOfBuffer
Added: _swift_cvw_instantiateLayoutString
Added: _swift_cvw_multiPayloadEnumGeneric_destructiveInjectEnumTag
Added: _swift_cvw_multiPayloadEnumGeneric_getEnumTag
Added: _swift_cvw_singlePayloadEnumGeneric_destructiveInjectEnumTag
Added: _swift_cvw_singlePayloadEnumGeneric_getEnumTag
Added: _swift_cvw_singletonEnum_destructiveInjectEnumTag
Added: _swift_cvw_singletonEnum_getEnumTag

View File

@@ -4,8 +4,8 @@
// REQUIRES: swift_feature_LayoutStringValueWitnessesInstantiation
// CHECK: define internal ptr @"$s13rdar1275352744TestVMi"
// CHECK: [[METADATA:%.*]] = call ptr @swift_allocateGenericValueMetadataWithLayoutString
// CHECK: call void @swift_generic_instantiateLayoutString(ptr @"type_layout_string l13rdar1275352744TestVyxG", ptr [[METADATA]])
// CHECK: [[METADATA:%.*]] = call ptr @swift_cvw_allocateGenericValueMetadataWithLayoutString
// CHECK: call void @swift_cvw_instantiateLayoutString(ptr @"type_layout_string l13rdar1275352744TestVyxG", ptr [[METADATA]])
// CHECK: ret ptr [[METADATA]]
// CHECK: }
public struct Test<T> {