Skip to content

Commit c576c61

Browse files
committed
[NFC] Runtime: Extract fields from param aggregate
Rather than pass a MethodOverrideDescriptor directly, instead pass the fields from it that are needed by the callee. In preparation for adding another caller which doesn't have a MethodOverrideDescriptor.
1 parent 4bfdaed commit c576c61

File tree

1 file changed

+12
-9
lines changed

1 file changed

+12
-9
lines changed

stdlib/public/runtime/Metadata.cpp

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3644,13 +3644,13 @@ static void copySuperclassMetadataToSubclass(ClassMetadata *theClass,
36443644
#endif
36453645
}
36463646

3647-
static void installOverrideInVTable(
3648-
ClassDescriptor::MethodOverrideDescriptor const &descriptor,
3649-
ClassDescriptor::OverrideTableHeader const *overrideTable,
3650-
void **classWords) {
3647+
template <typename GetImpl>
3648+
static void installOverrideInVTable(ContextDescriptor const *baseContext,
3649+
MethodDescriptor const *baseMethod,
3650+
GetImpl getImpl, void const *table,
3651+
void **classWords) {
36513652
// Get the base class and method.
3652-
auto *baseClass = cast_or_null<ClassDescriptor>(descriptor.Class.get());
3653-
auto *baseMethod = descriptor.Method.get();
3653+
auto *baseClass = cast_or_null<ClassDescriptor>(baseContext);
36543654

36553655
// If the base method is null, it's an unavailable weak-linked
36563656
// symbol.
@@ -3669,14 +3669,14 @@ static void installOverrideInVTable(
36693669
fatalError(0,
36703670
"resilient vtable at %p contains out-of-bounds "
36713671
"method descriptor %p\n",
3672-
overrideTable, baseMethod);
3672+
table, baseMethod);
36733673
}
36743674

36753675
// Install the method override in our vtable.
36763676
auto baseVTable = baseClass->getVTableDescriptor();
36773677
auto offset = (baseVTable->getVTableOffset(baseClass) +
36783678
(baseMethod - baseClassMethods.data()));
3679-
swift_ptrauth_init_code_or_data(&classWords[offset], descriptor.getImpl(),
3679+
swift_ptrauth_init_code_or_data(&classWords[offset], getImpl(),
36803680
baseMethod->Flags.getExtraDiscriminator(),
36813681
!baseMethod->Flags.isData());
36823682
}
@@ -3707,7 +3707,10 @@ static void initClassVTable(ClassMetadata *self) {
37073707
for (unsigned i = 0, e = overrideTable->NumEntries; i < e; ++i) {
37083708
auto &descriptor = overrideDescriptors[i];
37093709

3710-
installOverrideInVTable(descriptor, overrideTable, classWords);
3710+
installOverrideInVTable(
3711+
descriptor.Class.get(), descriptor.Method.get(),
3712+
[&descriptor]() { return descriptor.getImpl(); }, overrideTable,
3713+
classWords);
37113714
}
37123715
}
37133716
}

0 commit comments

Comments
 (0)