@@ -4789,24 +4789,27 @@ class SILFunctionType final
4789
4789
using Representation = SILExtInfoBuilder::Representation;
4790
4790
4791
4791
private:
4792
- unsigned NumParameters;
4792
+ unsigned NumParameters = 0 ;
4793
4793
4794
- // These are *normal* results if this is not a coroutine and *yield* results
4795
- // otherwise.
4796
- unsigned NumAnyResults; // Not including the ErrorResult.
4797
- unsigned NumAnyIndirectFormalResults; // Subset of NumAnyResults.
4798
- unsigned NumPackResults; // Subset of NumAnyIndirectFormalResults.
4794
+ // These are *normal* results
4795
+ unsigned NumAnyResults = 0 ; // Not including the ErrorResult.
4796
+ unsigned NumAnyIndirectFormalResults = 0 ; // Subset of NumAnyResults.
4797
+ unsigned NumPackResults = 0 ; // Subset of NumAnyIndirectFormalResults.
4798
+ // These are *yield* results
4799
+ unsigned NumAnyYieldResults = 0 ; // Not including the ErrorResult.
4800
+ unsigned NumAnyIndirectFormalYieldResults = 0 ; // Subset of NumAnyYieldResults.
4801
+ unsigned NumPackYieldResults = 0 ; // Subset of NumAnyIndirectFormalYieldResults.
4799
4802
4800
4803
// [NOTE: SILFunctionType-layout]
4801
4804
// The layout of a SILFunctionType in memory is:
4802
4805
// SILFunctionType
4803
4806
// SILParameterInfo[NumParameters]
4804
- // SILResultInfo[isCoroutine() ? 0 : NumAnyResults]
4807
+ // SILResultInfo[NumAnyResults]
4805
4808
// SILResultInfo? // if hasErrorResult()
4806
- // SILYieldInfo[isCoroutine() ? NumAnyResults : 0 ]
4809
+ // SILYieldInfo[NumAnyYieldResults ]
4807
4810
// SubstitutionMap[HasPatternSubs + HasInvocationSubs]
4808
- // CanType? // if !isCoro && NumAnyResults > 1, formal result cache
4809
- // CanType? // if !isCoro && NumAnyResults > 1, all result cache
4811
+ // CanType? // if NumAnyResults > 1, formal result cache
4812
+ // CanType? // if NumAnyResults > 1, all result cache
4810
4813
4811
4814
CanGenericSignature InvocationGenericSig;
4812
4815
ProtocolConformanceRef WitnessMethodConformance;
@@ -4845,7 +4848,7 @@ class SILFunctionType final
4845
4848
4846
4849
// / Do we have slots for caches of the normal-result tuple type?
4847
4850
bool hasResultCache () const {
4848
- return NumAnyResults > 1 && ! isCoroutine () ;
4851
+ return NumAnyResults > 1 ;
4849
4852
}
4850
4853
4851
4854
CanType &getMutableFormalResultsCache () const {
@@ -4945,14 +4948,14 @@ class SILFunctionType final
4945
4948
ArrayRef<SILYieldInfo> getYields () const {
4946
4949
return const_cast <SILFunctionType *>(this )->getMutableYields ();
4947
4950
}
4948
- unsigned getNumYields () const { return isCoroutine () ? NumAnyResults : 0 ; }
4951
+ unsigned getNumYields () const { return NumAnyYieldResults ; }
4949
4952
4950
4953
// / Return the array of all result information. This may contain inter-mingled
4951
4954
// / direct and indirect results.
4952
4955
ArrayRef<SILResultInfo> getResults () const {
4953
4956
return const_cast <SILFunctionType *>(this )->getMutableResults ();
4954
4957
}
4955
- unsigned getNumResults () const { return isCoroutine () ? 0 : NumAnyResults; }
4958
+ unsigned getNumResults () const { return NumAnyResults; }
4956
4959
4957
4960
ArrayRef<SILResultInfo> getResultsWithError () const {
4958
4961
return const_cast <SILFunctionType *>(this )->getMutableResultsWithError ();
@@ -4989,17 +4992,17 @@ class SILFunctionType final
4989
4992
// indirect property, not the SIL indirect property, should be consulted to
4990
4993
// determine whether function reabstraction is necessary.
4991
4994
unsigned getNumIndirectFormalResults () const {
4992
- return isCoroutine () ? 0 : NumAnyIndirectFormalResults;
4995
+ return NumAnyIndirectFormalResults;
4993
4996
}
4994
4997
// / Does this function have any formally indirect results?
4995
4998
bool hasIndirectFormalResults () const {
4996
4999
return getNumIndirectFormalResults () != 0 ;
4997
5000
}
4998
5001
unsigned getNumDirectFormalResults () const {
4999
- return isCoroutine () ? 0 : NumAnyResults - NumAnyIndirectFormalResults;
5002
+ return NumAnyResults - NumAnyIndirectFormalResults;
5000
5003
}
5001
5004
unsigned getNumPackResults () const {
5002
- return isCoroutine () ? 0 : NumPackResults;
5005
+ return NumPackResults;
5003
5006
}
5004
5007
bool hasIndirectErrorResult () const {
5005
5008
return hasErrorResult () && getErrorResult ().isFormalIndirect ();
@@ -5057,17 +5060,17 @@ class SILFunctionType final
5057
5060
TypeExpansionContext expansion);
5058
5061
5059
5062
unsigned getNumIndirectFormalYields () const {
5060
- return isCoroutine () ? NumAnyIndirectFormalResults : 0 ;
5063
+ return NumAnyIndirectFormalYieldResults ;
5061
5064
}
5062
5065
// / Does this function have any formally indirect yields?
5063
5066
bool hasIndirectFormalYields () const {
5064
5067
return getNumIndirectFormalYields () != 0 ;
5065
5068
}
5066
5069
unsigned getNumDirectFormalYields () const {
5067
- return isCoroutine () ? NumAnyResults - NumAnyIndirectFormalResults : 0 ;
5070
+ return NumAnyYieldResults - NumAnyIndirectFormalYieldResults ;
5068
5071
}
5069
5072
unsigned getNumPackYields () const {
5070
- return isCoroutine () ? NumPackResults : 0 ;
5073
+ return NumPackYieldResults ;
5071
5074
}
5072
5075
5073
5076
struct IndirectFormalYieldFilter {
0 commit comments