| Commit message (Collapse) | Author | Age | Files | Lines |
|\
| |
| | |
Closes #579 Implement mini-phase for classOf[T]
|
| | |
|
|\ \
| | |
| | | |
Fix/#646 array addition
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Previously `viewExists(X, Y)` failed if there were ambiguous
implicit conversions from X to Y. This is too fragile, as
demonstrated by test case run/array-addition.scala. Here,
the `genericArrayOps` implicit was not inserted because its
result type `Array[?T]` was deemed to be incompatible with
`? { +: : ? }`. It was incompatible because there were multiple
implicits that added :+ to arrays of various element types.
But once `genericArrayOps` gets applied, the type parameter
`?T` of the array result is fixed, and the ambuity goes away.
The scenario shows that we should not test for ambiguous implicits
in viewExists. Such a test is fragile because it depends on the
progress of type inference when the test is made. It's preferable
to just test for any implicit conversion to exist and to check
for ambiguities later, when the implicit conversion is actually
applied. This has also the potential of speeding up implicit search
in situations where `viewExists` is called often (e.g. when coupled
with overloading resolution).
|
|\ \ \
| |/ /
|/| | |
Fix/#652 erase constructors
|
| | |
| | |
| | |
| | | |
Ws disabled by accident.
|
| | |
| | |
| | |
| | |
| | |
| | | |
We seem to have an instability where the testing framework influences what numbers
anonymous classes are given. We have to deal with this, but not now. For the moment
I am masking numbers from the test output.
|
| | |
| | |
| | |
| | | |
Difference was in generated number for anonymous classes only.
|
| | |
| | |
| | |
| | |
| | |
| | | |
Previously this was only done in secondary constructors; need
to do it in primary constructor as well to avoid "reference to
this before super" problems.
|
| | |
| | |
| | |
| | |
| | | |
Proxy references in constructors can't be left as fields because
they can happen before the supercall.
|
| |/
| |
| |
| |
| | |
Map references to outer accessors in secondary constructors to outer parameters. This
was the second source of "reference to this before super call" errors.
|
|\ \
| | |
| | | |
Fix checking whether types are instantiable.
|
| | |
| | |
| | |
| | |
| | | |
The logic for checking aginst the self type was wrong, as demonstrated
by pos/checkInstantiable.scala.
|
|\ \ \
| |_|/
|/| | |
Fix/#655 eta expansion
|
| | |
| | |
| | |
| | | |
Failure to do a widen caused by-name parameters to go undetected.
|
|\ \ \
| | | |
| | | | |
Fix sequence matching.
|
| | | |
| | | |
| | | |
| | | | |
Was also fixed in this PR.
|
| | | |
| | | |
| | | |
| | | |
| | | | |
Call drop method directly if class derives from sequence.
I do not understand how callRuntime works in scalac. Calling this method requires implicit search.
|
|\| | |
| |/ /
|/| | |
Fix/#659 lambdalift proxies
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
If an inner class has proxy fields, we missed so far the assignment sfrom
the proxy parameters in the primary constructor of the class to the proxy
fields.
Test case tries several variations of this.
|
| | |
| | |
| | |
| | | |
Even if an explicit outer accessor was a method, it got a TermRef as type.
|
| | | |
|
| | | |
|
|/ /
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Previously, the expected result type of a FunProto type was ignored and taken into
account only in case of ambiguities. arrayclone-new.scala shows that this is not enough.
In a case like
val x: Array[Byte] = Array(1, 2)
we typed 1, 2 to be Int, so overloading resulution would give the Array.apply of
type (Int, Int*)Array[Int]. But that's a dead end, since Array[Int] is not a subtype
of Array[Byte].
This commit proposes the following modified rule for overloading resulution:
A method alternative is applicable if ... (as before), and if its result type
is copmpatible with the expected type of the method application.
The commit does not pre-select alternatives based on comparing with the expected
result type. I tried that but it slowed down typechecking by a factor of at least 4.
Instead, we proceed as usual, ignoring the result type except in case of
ambiguities, but check whether the result of overloading resolution has a
compatible result type. If that's not the case, we filter all alternatives
for result type compatibility and try again.
|
| |
| |
| |
| | |
As suggested by @retronym
|
| |
| |
| |
| |
| | |
Parameter accessors in traits have the ParamAccessor flag removed
in the Mixin transformSym method.
|
| |
| |
| |
| | |
Verify that the initilialization order described in #640 is correctly implemented.
|
| | |
|
| |
| |
| |
| |
| |
| | |
Add necessary logic to Mixin. Also add tests
that all parameterized traits are called with
parameters set.
|
| |
| |
| |
| |
| | |
A parent trait may not be parameterized (as in T()) if the calling class does not
directly implement that trait.
|
| | |
|
|\ \
| | |
| | | |
Fix #643 - Scala2 unpickling now sets NoInits flag for interfaces.
|
| |/
| |
| |
| |
| |
| |
| | |
Refinement classes and their members could give spurious stale symbol errors if the
symbol is loaded in a different run than the classfile containing it. The problem
is that refinement classes do not form part of the scope of their owners. The fix
assumes that refinement classes are always "stillValid".
|
|\ \
| | |
| | | |
Tighten comparison of skolem types
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
We want to establish the invariant (optionally checked by assertNoSkolems)
that symbols do not contain skolemized types as their info. This avoids unsoundness situations
where a skolem gets exported as part if the result type of a method, so different instantiations
look like their are the same instance.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Skolemize unstable prefixes in asSeenFrom provided
- the prefix appears at least once in non-variant or contra-variant position
- we are in phase typer.
After typer, we have already established soundness, so there's no need to
do skolemization again. We can simply do the (otherwise unsound) substitution
from this-type to prefix.
|
| | |
| | |
| | |
| | |
| | | |
A term ref is stable only if its prefix is also stable. At the same time, we
drop stability requirements where they no longer make sense (e.g. in isLegalPrefix).
|
|\ \ \
| |_|/
|/| | |
Enable tests that pass, move macro tests to disabled.
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | |
| | |
| | |
| | | |
Changes were made by accident.
|
| | |
| | |
| | |
| | |
| | | |
Methods like + can have multiple parameters. In that case
+= also takes multiple parameters.
|
|\| |
| | |
| | | |
Some fixes around mixin and memoization
|
| | |
| | |
| | |
| | | |
Implementations inherit all annotations on the implemented trait methods.
|
| |/
| |
| |
| |
| | |
The logic to add trait setters to Scala 2 traits was wrong. This led
to AbstractMethodErrors in the formerly commented out part of scala-trait.scala.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
It's easy to get this wrong. What happened was that when
computing deferred members of a class a deferred member
was preferred over a concrete one because the types did not match.
Thsi should not happen. We now change the scheme to always
prefer concrete over abstract, and subclass-owned over superclass-owned.
But we pick a denotation only if the overrides relationship on types
coincides with the preference on symbols.
|
| |
| |
| |
| | |
The tests in this commit pos were verified to work again.
|
|/
|
|
|
|
|
|
| |
A reference to an object from anywhere in its module class can be
established by the This of the module class. The previous behavior always
referenced the object as a term ref which might cause a reference to
the outer This which might not be available (since this is not tracked
by ExplicitOuter). Brings t3174.scala back from disabled.
|