@@ -4593,24 +4593,27 @@ class SILFunctionType final
4593
4593
using Representation = SILExtInfoBuilder::Representation;
4594
4594
4595
4595
private:
4596
- unsigned NumParameters;
4596
+ unsigned NumParameters = 0 ;
4597
4597
4598
- // These are *normal* results if this is not a coroutine and *yield* results
4599
- // otherwise.
4600
- unsigned NumAnyResults; // Not including the ErrorResult.
4601
- unsigned NumAnyIndirectFormalResults; // Subset of NumAnyResults.
4602
- unsigned NumPackResults; // Subset of NumAnyIndirectFormalResults.
4598
+ // These are *normal* results
4599
+ unsigned NumAnyResults = 0 ; // Not including the ErrorResult.
4600
+ unsigned NumAnyIndirectFormalResults = 0 ; // Subset of NumAnyResults.
4601
+ unsigned NumPackResults = 0 ; // Subset of NumAnyIndirectFormalResults.
4602
+ // These are *yield* results
4603
+ unsigned NumAnyYieldResults = 0 ; // Not including the ErrorResult.
4604
+ unsigned NumAnyIndirectFormalYieldResults = 0 ; // Subset of NumAnyYieldResults.
4605
+ unsigned NumPackYieldResults = 0 ; // Subset of NumAnyIndirectFormalYieldResults.
4603
4606
4604
4607
// [NOTE: SILFunctionType-layout]
4605
4608
// The layout of a SILFunctionType in memory is:
4606
4609
// SILFunctionType
4607
4610
// SILParameterInfo[NumParameters]
4608
- // SILResultInfo[isCoroutine() ? 0 : NumAnyResults]
4611
+ // SILResultInfo[NumAnyResults]
4609
4612
// SILResultInfo? // if hasErrorResult()
4610
- // SILYieldInfo[isCoroutine() ? NumAnyResults : 0 ]
4613
+ // SILYieldInfo[NumAnyYieldResults ]
4611
4614
// SubstitutionMap[HasPatternSubs + HasInvocationSubs]
4612
- // CanType? // if !isCoro && NumAnyResults > 1, formal result cache
4613
- // CanType? // if !isCoro && NumAnyResults > 1, all result cache
4615
+ // CanType? // if NumAnyResults > 1, formal result cache
4616
+ // CanType? // if NumAnyResults > 1, all result cache
4614
4617
4615
4618
CanGenericSignature InvocationGenericSig;
4616
4619
ProtocolConformanceRef WitnessMethodConformance;
@@ -4645,7 +4648,7 @@ class SILFunctionType final
4645
4648
4646
4649
// / Do we have slots for caches of the normal-result tuple type?
4647
4650
bool hasResultCache () const {
4648
- return NumAnyResults > 1 && ! isCoroutine () ;
4651
+ return NumAnyResults > 1 ;
4649
4652
}
4650
4653
4651
4654
CanType &getMutableFormalResultsCache () const {
@@ -4733,14 +4736,14 @@ class SILFunctionType final
4733
4736
ArrayRef<SILYieldInfo> getYields () const {
4734
4737
return const_cast <SILFunctionType *>(this )->getMutableYields ();
4735
4738
}
4736
- unsigned getNumYields () const { return isCoroutine () ? NumAnyResults : 0 ; }
4739
+ unsigned getNumYields () const { return NumAnyYieldResults ; }
4737
4740
4738
4741
// / Return the array of all result information. This may contain inter-mingled
4739
4742
// / direct and indirect results.
4740
4743
ArrayRef<SILResultInfo> getResults () const {
4741
4744
return const_cast <SILFunctionType *>(this )->getMutableResults ();
4742
4745
}
4743
- unsigned getNumResults () const { return isCoroutine () ? 0 : NumAnyResults; }
4746
+ unsigned getNumResults () const { return NumAnyResults; }
4744
4747
4745
4748
// / Given that this function type has exactly one result, return it.
4746
4749
// / This is a common situation when working with a function with a known
@@ -4770,17 +4773,17 @@ class SILFunctionType final
4770
4773
// indirect property, not the SIL indirect property, should be consulted to
4771
4774
// determine whether function reabstraction is necessary.
4772
4775
unsigned getNumIndirectFormalResults () const {
4773
- return isCoroutine () ? 0 : NumAnyIndirectFormalResults;
4776
+ return NumAnyIndirectFormalResults;
4774
4777
}
4775
4778
// / Does this function have any formally indirect results?
4776
4779
bool hasIndirectFormalResults () const {
4777
4780
return getNumIndirectFormalResults () != 0 ;
4778
4781
}
4779
4782
unsigned getNumDirectFormalResults () const {
4780
- return isCoroutine () ? 0 : NumAnyResults - NumAnyIndirectFormalResults;
4783
+ return NumAnyResults - NumAnyIndirectFormalResults;
4781
4784
}
4782
4785
unsigned getNumPackResults () const {
4783
- return isCoroutine () ? 0 : NumPackResults;
4786
+ return NumPackResults;
4784
4787
}
4785
4788
bool hasIndirectErrorResult () const {
4786
4789
return hasErrorResult () && getErrorResult ().isFormalIndirect ();
@@ -4838,17 +4841,17 @@ class SILFunctionType final
4838
4841
TypeExpansionContext expansion);
4839
4842
4840
4843
unsigned getNumIndirectFormalYields () const {
4841
- return isCoroutine () ? NumAnyIndirectFormalResults : 0 ;
4844
+ return NumAnyIndirectFormalYieldResults ;
4842
4845
}
4843
4846
// / Does this function have any formally indirect yields?
4844
4847
bool hasIndirectFormalYields () const {
4845
4848
return getNumIndirectFormalYields () != 0 ;
4846
4849
}
4847
4850
unsigned getNumDirectFormalYields () const {
4848
- return isCoroutine () ? NumAnyResults - NumAnyIndirectFormalResults : 0 ;
4851
+ return NumAnyYieldResults - NumAnyIndirectFormalYieldResults ;
4849
4852
}
4850
4853
unsigned getNumPackYields () const {
4851
- return isCoroutine () ? NumPackResults : 0 ;
4854
+ return NumPackYieldResults ;
4852
4855
}
4853
4856
4854
4857
struct IndirectFormalYieldFilter {
0 commit comments