Skip to content

Changes to wildApprox #1054

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 2 commits into from
Closed

Changes to wildApprox #1054

wants to merge 2 commits into from

Conversation

odersky
Copy link
Contributor

@odersky odersky commented Feb 4, 2016

See comment in new overloaded variant of wildApprox for an explanation.
Fixes #1044.

Review by @smarter.

See comment in new overloaded variant of wildApprox for an explanation.
Fixes scala#1044.

Review by @smarter.
@@ -379,6 +379,19 @@ object ProtoTypes {
}
}

/** Like wildApprox, but assume that all parameters of `disregarded` are not
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's a bit weird to say "Like wildApprox" when this method is called wildApprox too, maybe use another name, or say, "Like the other overload of wildApprox"?

smarter added a commit to dotty-staging/dotty that referenced this pull request Feb 5, 2016
When `wildApprox` encounters a PolyParam it approximates it by its
bounds in the current constraint set, this only makes sense if we have
added the PolyType corresponding to this PolyParam to the constrain set
using `ProtoTypes#constrained`, otherwise, we might get the bounds of
another use of this `PolyType`. This is exactly what happened in
i1044.scala: to compile, the implicit view `refArrayOps` needs to be
used twice with two different type parameters.

The fix is to always constrain polymorphic implicit views before
calling `wildApprox` on their result type.

This fix was inspired by the approach of scala#1054.
smarter added a commit to dotty-staging/dotty that referenced this pull request Feb 5, 2016
When `wildApprox` encounters a PolyParam it approximates it by its
bounds in the current constraint set, this only makes sense if we have
added the PolyType corresponding to this PolyParam to the constrain set
using `ProtoTypes#constrained`, otherwise, we might get the bounds of
another use of this `PolyType`. This is exactly what happened in
i1044.scala: to compile, the implicit view `refArrayOps` needs to be
used twice with two different type parameters.

The fix is to always constrain polymorphic implicit views before
calling `wildApprox` on their result type.

This fix was inspired by the approach of scala#1054.
@smarter
Copy link
Member

smarter commented Feb 5, 2016

I have an alternative fix which I think is a cleaner solution: #1056

smarter added a commit to dotty-staging/dotty that referenced this pull request Feb 5, 2016
When `wildApprox` encounters a PolyParam it approximates it by its
bounds in the current constraint set, but this is incorrect if
`TypevarsMissContext` is set, we might get the bounds of another use of
this `PolyType`. This is exactly what happened in i1044.scala where the
implicit view `refArrayOps` needs to be used twice with two different
type parameters.

The fix is to approximate a PolyParam by its original bounds in its
PolyType if `TypevarsMissContext` is set.

This fix was inspired by the approach of scala#1054.
smarter added a commit to dotty-staging/dotty that referenced this pull request Feb 6, 2016
When `wildApprox` encounters a PolyParam it approximates it by its
bounds in the current constraint set, but this is incorrect if
`TypevarsMissContext` is set, we might get the bounds of another use of
this `PolyType`. This is exactly what happened in i1044.scala where the
implicit view `refArrayOps` needs to be used twice with two different
type parameters.

The fix is to approximate a PolyParam by its original bounds in its
PolyType if `TypevarsMissContext` is set.

This fix was inspired by the approach of scala#1054.
@smarter
Copy link
Member

smarter commented Feb 6, 2016

Superceded by #1064

@smarter smarter closed this Feb 6, 2016
OlivierBlanvillain pushed a commit to OlivierBlanvillain/dotty that referenced this pull request Dec 8, 2016
OlivierBlanvillain pushed a commit to OlivierBlanvillain/dotty that referenced this pull request Dec 12, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants