File tree 2 files changed +25
-1
lines changed
compiler/src/dotty/tools/dotc/typer
2 files changed +25
-1
lines changed Original file line number Diff line number Diff line change @@ -2561,9 +2561,17 @@ class Typer extends Namer
2561
2561
missingArgs(wtp)
2562
2562
}
2563
2563
2564
+ def isImplicitFunctionRef (wtp : Type ): Boolean = wtp match {
2565
+ case RefinedType (parent, nme.apply, _) =>
2566
+ isImplicitFunctionRef(parent) // apply refinements indicate a dependent IFT
2567
+ case _ =>
2568
+ val underlying = wtp.underlyingClassRef(refinementOK = false ) // other refinements are not OK
2569
+ defn.isImplicitFunctionClass(underlying.classSymbol)
2570
+ }
2571
+
2564
2572
def adaptNoArgsOther (wtp : Type ): Tree = {
2565
2573
ctx.typeComparer.GADTused = false
2566
- if (defn.isImplicitFunctionClass (wtp.underlyingClassRef(refinementOK = false ).classSymbol ) &&
2574
+ if (isImplicitFunctionRef (wtp) &&
2567
2575
! untpd.isContextualClosure(tree) &&
2568
2576
! isApplyProto(pt) &&
2569
2577
! ctx.mode.is(Mode .Pattern ) &&
Original file line number Diff line number Diff line change
1
+ object Dependent {
2
+ def x : given (i : Int ) => Int = ???
3
+ def y : given (i : Int ) => Int = x
4
+ }
5
+ object Independent {
6
+ def x : given Int => Int = ???
7
+ def y : given Int => Int = x
8
+ }
9
+ object NarrowDependent {
10
+ def x : given Int => Int = ???
11
+ def y : given (i : Int ) => Int = x
12
+ }
13
+ object WidenDependent {
14
+ def x : given (i : Int ) => Int = ???
15
+ def y : given Int => Int = x
16
+ }
You can’t perform that action at this time.
0 commit comments