Skip to content

Commit de177dc

Browse files
committed
[Runtime] Add destructiveEnumInject support for singleton enums with layout strings
1 parent 40a7396 commit de177dc

File tree

3 files changed

+20
-0
lines changed

3 files changed

+20
-0
lines changed

include/swift/Runtime/RuntimeFunctions.def

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2336,6 +2336,17 @@ FUNCTION(SingletonEnumGetEnumTag,
23362336
ATTRS(NoUnwind, WillReturn),
23372337
EFFECT(NoEffect))
23382338

2339+
// void swift_singletonEnum_destructiveInjectEnumTag(swift::OpaqueValue *address,
2340+
// unsigned tag,
2341+
// const Metadata *metadata)
2342+
FUNCTION(SingletonEnumDestructiveInjectEnumTag,
2343+
swift_singletonEnum_destructiveInjectEnumTag,
2344+
C_CC, AlwaysAvailable,
2345+
RETURNS(VoidTy),
2346+
ARGS(Int8PtrTy, Int32Ty, TypeMetadataPtrTy),
2347+
ATTRS(NoUnwind, WillReturn),
2348+
EFFECT(NoEffect))
2349+
23392350
// unsigned swift_enumSimple_getEnumTag(swift::OpaqueValue *address,
23402351
// const Metadata *metadata);
23412352
FUNCTION(EnumSimpleGetEnumTag,

stdlib/public/runtime/BytecodeLayouts.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -659,6 +659,11 @@ extern "C" unsigned swift_singletonEnum_getEnumTag(swift::OpaqueValue *address,
659659
return 0;
660660
}
661661

662+
extern "C" void swift_singletonEnum_destructiveInjectEnumTag(
663+
swift::OpaqueValue *address, unsigned tag, const Metadata *metadata) {
664+
return;
665+
}
666+
662667
template <typename T>
663668
static inline T handleSinglePayloadEnumSimpleTag(
664669
LayoutStringReader &reader, uint8_t *addr,

stdlib/public/runtime/BytecodeLayouts.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,10 @@ SWIFT_RUNTIME_EXPORT
121121
unsigned swift_singletonEnum_getEnumTag(swift::OpaqueValue *address,
122122
const Metadata *metadata);
123123
SWIFT_RUNTIME_EXPORT
124+
void swift_singletonEnum_destructiveInjectEnumTag(swift::OpaqueValue *address,
125+
unsigned tag,
126+
const Metadata *metadata);
127+
SWIFT_RUNTIME_EXPORT
124128
unsigned swift_enumSimple_getEnumTag(swift::OpaqueValue *address,
125129
const Metadata *metadata);
126130
SWIFT_RUNTIME_EXPORT

0 commit comments

Comments
 (0)