@@ -1104,8 +1104,6 @@ class Definitions {
1104
1104
@ tu lazy val AbstractFunctionType : Array [TypeRef ] = mkArityArray(" scala.runtime.AbstractFunction" , MaxImplementedFunctionArity , 0 )
1105
1105
val AbstractFunctionClassPerRun : PerRun [Array [Symbol ]] = new PerRun (AbstractFunctionType .map(_.symbol.asClass))
1106
1106
def AbstractFunctionClass (n : Int )(using Context ): Symbol = AbstractFunctionClassPerRun ()(using ctx)(n)
1107
- @ tu private lazy val ImplementedFunctionType = mkArityArray(" scala.Function" , MaxImplementedFunctionArity , 0 )
1108
- def FunctionClassPerRun : PerRun [Array [Symbol ]] = new PerRun (ImplementedFunctionType .map(_.symbol.asClass))
1109
1107
1110
1108
val LazyHolder : PerRun [Map [Symbol , Symbol ]] = new PerRun ({
1111
1109
def holderImpl (holderType : String ) = requiredClass(" scala.runtime." + holderType)
@@ -1124,23 +1122,33 @@ class Definitions {
1124
1122
1125
1123
@ tu lazy val TupleType : Array [TypeRef ] = mkArityArray(" scala.Tuple" , MaxTupleArity , 1 )
1126
1124
1125
+ private class FunType (prefix : String ):
1126
+ private var classRefs : Array [TypeRef ] = new Array (22 )
1127
+ def apply (n : Int ): TypeRef =
1128
+ while n >= classRefs.length do
1129
+ val classRefs1 = new Array [TypeRef ](classRefs.length * 2 )
1130
+ Array .copy(classRefs, 0 , classRefs1, 0 , classRefs.length)
1131
+ classRefs = classRefs1
1132
+ if classRefs(n) == null then
1133
+ classRefs(n) = requiredClassRef(prefix + n.toString)
1134
+ classRefs(n)
1135
+
1136
+ private val erasedContextFunType = FunType (" scala.ErasedContextFunction" )
1137
+ private val contextFunType = FunType (" scala.ContextFunction" )
1138
+ private val erasedFunType = FunType (" scala.ErasedFunction" )
1139
+ private val funType = FunType (" scala.Function" )
1140
+
1127
1141
def FunctionClass (n : Int , isContextual : Boolean = false , isErased : Boolean = false )(using Context ): Symbol =
1128
- if (isContextual && isErased)
1129
- requiredClass(" scala.ErasedContextFunction" + n.toString)
1130
- else if (isContextual)
1131
- requiredClass(" scala.ContextFunction" + n.toString)
1132
- else if (isErased)
1133
- requiredClass(" scala.ErasedFunction" + n.toString)
1134
- else if (n <= MaxImplementedFunctionArity )
1135
- FunctionClassPerRun ()(n)
1136
- else
1137
- requiredClass(" scala.Function" + n.toString)
1138
-
1139
- @ tu lazy val Function0_apply : Symbol = ImplementedFunctionType (0 ).symbol.requiredMethod(nme.apply)
1142
+ ( if isContextual && isErased then erasedContextFunType(n)
1143
+ else if isContextual then contextFunType(n)
1144
+ else if isErased then erasedFunType(n)
1145
+ else funType(n)
1146
+ ).symbol.asClass
1147
+
1148
+ @ tu lazy val Function0_apply : Symbol = FunctionClass (0 ).requiredMethod(nme.apply)
1140
1149
1141
1150
def FunctionType (n : Int , isContextual : Boolean = false , isErased : Boolean = false )(using Context ): TypeRef =
1142
- if (n <= MaxImplementedFunctionArity && (! isContextual || ctx.erasedTypes) && ! isErased) ImplementedFunctionType (n)
1143
- else FunctionClass (n, isContextual, isErased).typeRef
1151
+ FunctionClass (n, isContextual && ! ctx.erasedTypes, isErased).typeRef
1144
1152
1145
1153
lazy val PolyFunctionClass = requiredClass(" scala.PolyFunction" )
1146
1154
def PolyFunctionType = PolyFunctionClass .typeRef
0 commit comments