Skip to content

Commit 1331b92

Browse files
committed
[Distributed] AST: Expand criteria of what constitutes a valid decodeNextArgument
1 parent 8046423 commit 1331b92

File tree

1 file changed

+23
-4
lines changed

1 file changed

+23
-4
lines changed

lib/Sema/TypeCheckDistributed.cpp

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -469,10 +469,29 @@ GetDistributedActorArgumentDecodingMethodRequest::evaluate(Evaluator &evaluator,
469469

470470
auto decoderTy = decoder->getInterfaceType()->getMetatypeInstanceType();
471471

472-
DeclName methodName(ctx, {ctx.Id_decodeNextArgument}, {ctx.Id_type});
473472
auto members = TypeChecker::lookupMember(actor->getDeclContext(), decoderTy,
474-
DeclNameRef(methodName));
473+
DeclNameRef(ctx.Id_decodeNextArgument));
474+
475+
// Looking for `decodeNextArgument<Arg>() throws -> Arg`
476+
for (auto &member : members) {
477+
auto *FD = dyn_cast<FuncDecl>(member.getValueDecl());
478+
if (!FD || FD->hasAsync() || !FD->hasThrows())
479+
continue;
480+
481+
auto *params = FD->getParameters();
482+
if (params->size() != 0)
483+
continue;
484+
485+
auto genericParamList = FD->getGenericParams();
486+
if (genericParamList->size() == 1) {
487+
auto paramTy = genericParamList->getParams()[0]
488+
->getInterfaceType()
489+
->getMetatypeInstanceType();
490+
491+
if (FD->getResultInterfaceType()->isEqual(paramTy))
492+
return FD;
493+
}
494+
}
475495

476-
assert(members.size() == 1);
477-
return cast<FuncDecl>(members[0].getValueDecl());
496+
return nullptr;
478497
}

0 commit comments

Comments
 (0)