@@ -528,9 +528,13 @@ bool AbstractFunctionDecl::isDistributedActorSystemRemoteCall(bool isVoidReturn)
528
528
}
529
529
530
530
auto sig = getGenericSignature ();
531
- auto requirements = sig.getRequirements ();
532
531
533
- if (requirements.size () != expectedRequirementsNum) {
532
+ SmallVector<Requirement, 2 > reqs;
533
+ SmallVector<InverseRequirement, 2 > inverseReqs;
534
+ sig->getRequirementsWithInverses (reqs, inverseReqs);
535
+ assert (inverseReqs.empty () && " Non-copyable generics not supported here!" );
536
+
537
+ if (reqs.size () != expectedRequirementsNum) {
534
538
return false ;
535
539
}
536
540
@@ -545,7 +549,7 @@ bool AbstractFunctionDecl::isDistributedActorSystemRemoteCall(bool isVoidReturn)
545
549
// same_type: Act.ID FakeActorSystem.ActorID // LAST one
546
550
547
551
// --- Check requirement: conforms_to: Act DistributedActor
548
- auto actorReq = requirements [0 ];
552
+ auto actorReq = reqs [0 ];
549
553
if (actorReq.getKind () != RequirementKind::Conformance) {
550
554
return false ;
551
555
}
@@ -554,7 +558,7 @@ bool AbstractFunctionDecl::isDistributedActorSystemRemoteCall(bool isVoidReturn)
554
558
}
555
559
556
560
// --- Check requirement: conforms_to: Err Error
557
- auto errorReq = requirements [1 ];
561
+ auto errorReq = reqs [1 ];
558
562
if (errorReq.getKind () != RequirementKind::Conformance) {
559
563
return false ;
560
564
}
@@ -593,7 +597,7 @@ bool AbstractFunctionDecl::isDistributedActorSystemRemoteCall(bool isVoidReturn)
593
597
}
594
598
595
599
// -- Check requirement: same_type Actor.ID Self.ActorID
596
- auto actorIdReq = requirements .back ();
600
+ auto actorIdReq = reqs .back ();
597
601
if (actorIdReq.getKind () != RequirementKind::SameType) {
598
602
return false ;
599
603
}
@@ -667,10 +671,14 @@ AbstractFunctionDecl::isDistributedTargetInvocationEncoderRecordGenericSubstitut
667
671
return false ;
668
672
}
669
673
674
+ SmallVector<Requirement, 2 > reqs;
675
+ SmallVector<InverseRequirement, 2 > inverseReqs;
676
+ fd->getGenericSignature ()->getRequirementsWithInverses (reqs, inverseReqs);
677
+ assert (inverseReqs.empty () && " Non-copyable generics not supported here!" );
678
+
670
679
// No requirements on the generic parameter
671
- if (fd-> getGenericRequirements (). size () != 0 ) {
680
+ if (!reqs. empty ())
672
681
return false ;
673
- }
674
682
675
683
if (!fd->getResultInterfaceType ()->isVoid ())
676
684
return false ;
@@ -785,9 +793,13 @@ AbstractFunctionDecl::isDistributedTargetInvocationEncoderRecordArgument() const
785
793
786
794
787
795
auto sig = getGenericSignature ();
788
- auto requirements = sig.getRequirements ();
789
796
790
- if (requirements.size () != expectedRequirementsNum) {
797
+ SmallVector<Requirement, 2 > reqs;
798
+ SmallVector<InverseRequirement, 2 > inverseReqs;
799
+ sig->getRequirementsWithInverses (reqs, inverseReqs);
800
+ assert (inverseReqs.empty () && " Non-copyable generics not supported here!" );
801
+
802
+ if (reqs.size () != expectedRequirementsNum) {
791
803
return false ;
792
804
}
793
805
@@ -891,9 +903,13 @@ AbstractFunctionDecl::isDistributedTargetInvocationEncoderRecordReturnType() con
891
903
GenericTypeParamDecl *ArgumentParam = genericParams->getParams ()[0 ];
892
904
893
905
auto sig = getGenericSignature ();
894
- auto requirements = sig.getRequirements ();
895
906
896
- if (requirements.size () != expectedRequirementsNum) {
907
+ SmallVector<Requirement, 2 > reqs;
908
+ SmallVector<InverseRequirement, 2 > inverseReqs;
909
+ sig->getRequirementsWithInverses (reqs, inverseReqs);
910
+ assert (inverseReqs.empty () && " Non-copyable generics not supported here!" );
911
+
912
+ if (reqs.size () != expectedRequirementsNum) {
897
913
return false ;
898
914
}
899
915
@@ -1000,8 +1016,13 @@ AbstractFunctionDecl::isDistributedTargetInvocationEncoderRecordErrorType() cons
1000
1016
1001
1017
// --- Check: Argument: SerializationRequirement
1002
1018
auto sig = getGenericSignature ();
1003
- auto requirements = sig.getRequirements ();
1004
- if (requirements.size () != 1 ) {
1019
+
1020
+ SmallVector<Requirement, 2 > reqs;
1021
+ SmallVector<InverseRequirement, 2 > inverseReqs;
1022
+ sig->getRequirementsWithInverses (reqs, inverseReqs);
1023
+ assert (inverseReqs.empty () && " Non-copyable generics not supported here!" );
1024
+
1025
+ if (reqs.size () != 1 ) {
1005
1026
return false ;
1006
1027
}
1007
1028
@@ -1016,7 +1037,7 @@ AbstractFunctionDecl::isDistributedTargetInvocationEncoderRecordErrorType() cons
1016
1037
}
1017
1038
1018
1039
// --- Check requirement: conforms_to: Err Error
1019
- auto errorReq = requirements [0 ];
1040
+ auto errorReq = reqs [0 ];
1020
1041
if (errorReq.getKind () != RequirementKind::Conformance) {
1021
1042
return false ;
1022
1043
}
0 commit comments