You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Merge the regular and capture-checking version of isSubInfo
The isSubInfo for capture-checking introduced in scala#15877 had the following TODO:
// A relaxed version of subtyping for dependent functions where method types
// are treated as contravariant.
// TODO: Merge with isSubInfo in hasMatchingMember. Currently, we can't since
// the isSubinfo of hasMatchingMember has problems dealing with PolyTypes
// (---> orphan params during pickling)
The orphan params error was due to the recursion on the result of the PolyTypes
being done without first calling `compareTypeLambda`. After fixing this we can
safely merge the two versions while keeping the new behavior for dependent and
polymorphic function types hidden under the `captureChecking` feature since
they're language changes. I'll open a separate PR to create a
`relaxedSubtyping` feature for these improvements since their usefulness is
independent of capture checking.
The isSubInfo for capture-checking got two additional cases involving
CapturingTypes in 3e690a8, I don't know what
they're supposed to do, but moving those to the regular isSubInfo breaks
various capture-checking tests:
-- [E007] Type Mismatch Error: tests/pos-custom-args/captures/classes.scala:11:32 --------------------------------------
11 | val c1: C{val n: B^{x}}^{x} = c0
| ^^
| Found: (c0 : C{val n: B^}^{x})
| Required: C{val n: B^{x}}^{x}
So this commit breaks capture-checking and I don't know enough about what this
code is supposed to do to fix it.
0 commit comments