File tree 4 files changed +17
-6
lines changed
compiler/src/dotty/tools/dotc 4 files changed +17
-6
lines changed Original file line number Diff line number Diff line change @@ -196,6 +196,7 @@ enum ErrorMessageID(val isActive: Boolean = true) extends java.lang.Enum[ErrorMe
196
196
case AmbiguousExtensionMethodID // errorNumber 180
197
197
case UnqualifiedCallToAnyRefMethodID // errorNumber: 181
198
198
case NotConstantID // errorNumber: 182
199
+ case ClosureCannotHaveInternalParameterDependenciesID // errorNumber: 183
199
200
200
201
def errorNumber = ordinal - 1
201
202
Original file line number Diff line number Diff line change @@ -2920,3 +2920,10 @@ class MatchTypeScrutineeCannotBeHigherKinded(tp: Type)(using Context)
2920
2920
extends TypeMsg (MatchTypeScrutineeCannotBeHigherKindedID ) :
2921
2921
def msg (using Context ) = i " the scrutinee of a match type cannot be higher-kinded "
2922
2922
def explain (using Context ) = " "
2923
+
2924
+ class ClosureCannotHaveInternalParameterDependencies (mt : Type )(using Context )
2925
+ extends TypeMsg (ClosureCannotHaveInternalParameterDependenciesID ):
2926
+ def msg (using Context ) =
2927
+ i """ cannot turn method type $mt into closure
2928
+ |because it has internal parameter dependencies """
2929
+ def explain (using Context ) = " "
Original file line number Diff line number Diff line change @@ -1678,19 +1678,20 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
1678
1678
TypeTree (targetTpe)
1679
1679
case _ =>
1680
1680
if (mt.isParamDependent)
1681
- errorTree(tree,
1682
- em """ cannot turn method type $mt into closure
1683
- |because it has internal parameter dependencies """ )
1681
+ errorTree(tree, ClosureCannotHaveInternalParameterDependencies (mt))
1684
1682
else if hasCaptureConversionArg(mt.resType) then
1685
1683
errorTree(tree,
1686
1684
em """ cannot turn method type $mt into closure
1687
1685
|because it has capture conversion skolem types """ )
1688
1686
else
1689
1687
EmptyTree
1690
1688
}
1691
- case _ : PolyType =>
1692
- // Polymorphic SAMs are not currently supported (#6904).
1693
- EmptyTree
1689
+ case poly @ PolyType (_, mt : MethodType ) =>
1690
+ if (mt.isParamDependent)
1691
+ errorTree(tree, ClosureCannotHaveInternalParameterDependencies (poly))
1692
+ else
1693
+ // Polymorphic SAMs are not currently supported (#6904).
1694
+ EmptyTree
1694
1695
case tp =>
1695
1696
if ! tp.isErroneous then
1696
1697
throw new java.lang.Error (i " internal error: closing over non-method $tp, pos = ${tree.span}" )
Original file line number Diff line number Diff line change @@ -2,4 +2,6 @@ object Test {
2
2
val pv0 : [T ] => List [T ] = ??? // error
3
3
val pv1 : Any = [T ] => Nil // error
4
4
val pv2 : [T ] => List [T ] = [T ] => Nil // error // error
5
+
6
+ val intraDep = [T ] => (x : T , y : List [x.type ]) => List (y) // error
5
7
}
You can’t perform that action at this time.
0 commit comments