@@ -20,7 +20,7 @@ object ContextFunctionResults:
20
20
*/
21
21
def annotateContextResults (mdef : DefDef )(using Context ): Unit =
22
22
def contextResultCount (rhs : Tree , tp : Type ): Int = tp match
23
- case defn.ContextFunctionType (_, resTpe, _ ) =>
23
+ case defn.ContextFunctionType (_, resTpe) =>
24
24
rhs match
25
25
case closureDef(meth) => 1 + contextResultCount(meth.rhs, resTpe)
26
26
case _ => 0
@@ -58,7 +58,8 @@ object ContextFunctionResults:
58
58
*/
59
59
def contextResultsAreErased (sym : Symbol )(using Context ): Boolean =
60
60
def allErased (tp : Type ): Boolean = tp.dealias match
61
- case defn.ContextFunctionType (_, resTpe, erasedParams) => ! erasedParams.contains(false ) && allErased(resTpe)
61
+ case defn.ContextFunctionType (argTpes, resTpe) =>
62
+ argTpes.forall(_.hasAnnotation(defn.ErasedParamAnnot )) && allErased(resTpe)
62
63
case _ => true
63
64
contextResultCount(sym) > 0 && allErased(sym.info.finalResultType)
64
65
@@ -72,7 +73,7 @@ object ContextFunctionResults:
72
73
integrateContextResults(rt, crCount)
73
74
case tp : MethodOrPoly =>
74
75
tp.derivedLambdaType(resType = integrateContextResults(tp.resType, crCount))
75
- case defn.ContextFunctionType (argTypes, resType, erasedParams ) =>
76
+ case defn.ContextFunctionType (argTypes, resType) =>
76
77
MethodType (argTypes, integrateContextResults(resType, crCount - 1 ))
77
78
78
79
/** The total number of parameters of method `sym`, not counting
@@ -83,10 +84,10 @@ object ContextFunctionResults:
83
84
def contextParamCount (tp : Type , crCount : Int ): Int =
84
85
if crCount == 0 then 0
85
86
else
86
- val defn .ContextFunctionType (params, resTpe, erasedParams ) = tp : @ unchecked
87
+ val defn .ContextFunctionType (params, resTpe) = tp : @ unchecked
87
88
val rest = contextParamCount(resTpe, crCount - 1 )
88
- // TODO use mt.nonErasedParamCount
89
- if erasedParams.contains( true ) then erasedParams.count(_ == false ) + rest else params.length + rest // TODO use mt.nonErasedParamCount
89
+ val nonErasedParams = params.count( ! _.hasAnnotation(defn. ErasedParamAnnot ))
90
+ nonErasedParams + rest
90
91
91
92
def normalParamCount (tp : Type ): Int = tp.widenExpr.stripPoly match
92
93
case mt @ MethodType (pnames) => mt.nonErasedParamCount + normalParamCount(mt.resType)
@@ -100,7 +101,7 @@ object ContextFunctionResults:
100
101
def recur (tp : Type , n : Int ): Type =
101
102
if n == 0 then tp
102
103
else tp match
103
- case defn.ContextFunctionType (_, resTpe, _ ) => recur(resTpe, n - 1 )
104
+ case defn.ContextFunctionType (_, resTpe) => recur(resTpe, n - 1 )
104
105
recur(meth.info.finalResultType, depth)
105
106
106
107
/** Should selection `tree` be eliminated since it refers to an `apply`
@@ -115,7 +116,7 @@ object ContextFunctionResults:
115
116
case Select (qual, name) =>
116
117
if name == nme.apply then
117
118
qual.tpe match
118
- case defn.ContextFunctionType (_, _, _ ) =>
119
+ case defn.ContextFunctionType (_, _) =>
119
120
integrateSelect(qual, n + 1 )
120
121
case _ if defn.isContextFunctionClass(tree.symbol.maybeOwner) => // for TermRefs
121
122
integrateSelect(qual, n + 1 )
0 commit comments