Skip to content

Add multiversal equals 3 #1279

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 21 commits into from

Conversation

odersky
Copy link
Contributor

@odersky odersky commented May 25, 2016

Replaces #1246, which for some reason refuses to get the build started.

odersky added 21 commits May 23, 2016 16:10
If all overloaded variants of a method are uniary, we should
also allow auto-tupling. This is necessary to make overloaded
`==' methods work in cases like:

    xs == (1, 2)
tpd.applyOverloaded should not do type parameter inference; therefore it has
to make sure all eligible alternatives have the same number of type parameters
as there are type arguments.
Caches were set when information was not complete yet. Problem was
exhibited by missing some `eqName` implicits when adding safe equality
for Name.
This came up when tasty-checking Eq.scala.
Compare selected contravariant arguments as if they were covariant.
Which ones is explained in the doc comment for method `isAsSpecificValueType`
in Applications.scala.

This has the same motivation than what @paulp proposed around 2012. The solution is a bit
different from the one proposed then because it only affects top-level parameters.
Also, check that pattern matching against idents/selects/literals makes
sense.

The hooks perform an implicit search for an instance of `Eq[L, R]`, where
`L`, `R` are the argument types. So far this always succeeeds because Eq.eqAny
matches all such types. A separate commit will check the returned
search term for validity.
This is done by checking each instance of an eqAny implicit
so that it does not contain non-bottom instances of equality
types as instances.
(and add it to commit set).
Name, Symbol, Denotation, Type.

This uncovered two nonsensical comparisons, one in CollectEntryPoints,
the other in DottyBackendInterface.
Needed a fix in string interpolation for suriviving inserted
types that contain `$` characters.
To make tests pass, this required a looser specification of
`assumedCanEquals`, so that an abstract type T can be compared to
arbitrary values, as long as its upper bound can be compared. E.g.

    T == null
    T == "abc"
@odersky
Copy link
Contributor Author

odersky commented May 25, 2016

@felixmulder For some reason this PR is now screwed up so that no build starts anymore. Can you sort things out? Thanks!

@odersky
Copy link
Contributor Author

odersky commented May 25, 2016

Closed since it did not help the build

@odersky odersky closed this May 25, 2016
@odersky odersky deleted the add-multiversal-equals-3 branch May 26, 2016 06:34
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.

1 participant