@@ -984,28 +984,39 @@ class Definitions {
984984 isNonDepFunctionType(tp.dropDependentRefinement)
985985
986986 // Specialized type parameters defined for scala.Function{0,1,2}.
987- private lazy val Function1SpecializedParams : collection.Set [Type ] =
987+ lazy val Function1SpecializedParamTypes : collection.Set [TypeRef ] =
988988 Set (IntType , LongType , FloatType , DoubleType )
989- private lazy val Function2SpecializedParams : collection.Set [Type ] =
989+ lazy val Function2SpecializedParamTypes : collection.Set [TypeRef ] =
990990 Set (IntType , LongType , DoubleType )
991- private lazy val Function0SpecializedReturns : collection.Set [Type ] =
992- ScalaNumericValueTypeList .toSet[ Type ] + UnitType + BooleanType
993- private lazy val Function1SpecializedReturns : collection.Set [Type ] =
991+ lazy val Function0SpecializedReturnTypes : collection.Set [TypeRef ] =
992+ ScalaNumericValueTypeList .toSet + UnitType + BooleanType
993+ lazy val Function1SpecializedReturnTypes : collection.Set [TypeRef ] =
994994 Set (UnitType , BooleanType , IntType , FloatType , LongType , DoubleType )
995- private lazy val Function2SpecializedReturns : collection.Set [Type ] =
996- Function1SpecializedReturns
995+ lazy val Function2SpecializedReturnTypes : collection.Set [TypeRef ] =
996+ Function1SpecializedReturnTypes
997+
998+ lazy val Function1SpecializedParamClasses =
999+ new PerRun [collection.Set [Symbol ]](implicit ctx => Function1SpecializedParamTypes .map(_.symbol))
1000+ lazy val Function2SpecializedParamClasses =
1001+ new PerRun [collection.Set [Symbol ]](implicit ctx => Function2SpecializedParamTypes .map(_.symbol))
1002+ lazy val Function0SpecializedReturnClasses =
1003+ new PerRun [collection.Set [Symbol ]](implicit ctx => Function0SpecializedReturnTypes .map(_.symbol))
1004+ lazy val Function1SpecializedReturnClasses =
1005+ new PerRun [collection.Set [Symbol ]](implicit ctx => Function1SpecializedReturnTypes .map(_.symbol))
1006+ lazy val Function2SpecializedReturnClasses =
1007+ new PerRun [collection.Set [Symbol ]](implicit ctx => Function2SpecializedReturnTypes .map(_.symbol))
9971008
9981009 def isSpecializableFunction (cls : ClassSymbol , paramTypes : List [Type ], retType : Type )(implicit ctx : Context ) =
999- isFunctionClass( cls) && (paramTypes match {
1010+ paramTypes.length <= 2 && cls.derivesFrom( FunctionClass (paramTypes.length) ) && (paramTypes match {
10001011 case Nil =>
1001- Function0SpecializedReturns .contains(retType)
1012+ Function0SpecializedReturnClasses () .contains(retType.typeSymbol )
10021013 case List (paramType0) =>
1003- Function1SpecializedParams .contains(paramType0) &&
1004- Function1SpecializedReturns .contains(retType)
1014+ Function1SpecializedParamClasses () .contains(paramType0.typeSymbol ) &&
1015+ Function1SpecializedReturnClasses () .contains(retType.typeSymbol )
10051016 case List (paramType0, paramType1) =>
1006- Function2SpecializedParams .contains(paramType0) &&
1007- Function2SpecializedParams .contains(paramType1) &&
1008- Function2SpecializedReturns .contains(retType)
1017+ Function2SpecializedParamClasses () .contains(paramType0.typeSymbol ) &&
1018+ Function2SpecializedParamClasses () .contains(paramType1.typeSymbol ) &&
1019+ Function2SpecializedReturnClasses () .contains(retType.typeSymbol )
10091020 case _ =>
10101021 false
10111022 })
0 commit comments