Skip to content

Commit 97d775b

Browse files
authored
Merge pull request swiftlang#79386 from ktoso/pick-wip-correct-metadata-lookup-result-type
[6.1][Distributed] Improve getting return type metadata for distributed invocations
2 parents c2a0cc7 + fb62a7a commit 97d775b

File tree

3 files changed

+1104
-5
lines changed

3 files changed

+1104
-5
lines changed

stdlib/public/runtime/MetadataLookup.cpp

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2942,8 +2942,12 @@ swift_func_getReturnTypeInfo(const char *typeNameStart, size_t typeNameLength,
29422942

29432943
SubstGenericParametersFromMetadata substFn(genericEnv, genericArguments);
29442944

2945-
DecodedMetadataBuilder builder(
2946-
demangler,
2945+
auto request = MetadataRequest(MetadataState::Complete);
2946+
2947+
NodePointer nodePointer = resultType->getFirstChild();
2948+
auto typeInfoOrErr = swift_getTypeByMangledNode(
2949+
request, demangler, nodePointer,
2950+
/*arguments=*/genericArguments,
29472951
/*substGenericParam=*/
29482952
[&substFn](unsigned depth, unsigned index) {
29492953
return substFn.getMetadata(depth, index).Ptr;
@@ -2953,9 +2957,12 @@ swift_func_getReturnTypeInfo(const char *typeNameStart, size_t typeNameLength,
29532957
return substFn.getWitnessTable(type, index);
29542958
});
29552959

2956-
TypeDecoder<DecodedMetadataBuilder> decoder(builder);
2960+
if (typeInfoOrErr.isError()) {
2961+
return nullptr;
2962+
}
29572963

2958-
return decodeType(decoder, resultType->getFirstChild());
2964+
auto typeInfo = typeInfoOrErr.getType();
2965+
return typeInfo.getMetadata();
29592966
}
29602967

29612968
SWIFT_CC(swift) SWIFT_RUNTIME_STDLIB_SPI

test/Distributed/Inputs/FakeDistributedActorSystems.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,7 @@ public final class FakeInvocationDecoder: DistributedTargetInvocationDecoder {
459459

460460
var argumentIndex: Int = 0
461461

462-
fileprivate init(
462+
public init(
463463
args: [Any],
464464
substitutions: [Any.Type] = [],
465465
returnType: Any.Type? = nil,

0 commit comments

Comments
 (0)