| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
More robust cyclicity check which does not depend on source positions.
|
|
|
|
| |
to reflect last commit.
|
|
|
|
| |
Toucher checks, but only deprecated warnings instead of errors.
|
|
|
|
|
| |
We used to approximate these by their bounds, but this is confusing.
See comment in printbounds.scala.
|
|
|
|
|
|
| |
Move core logic to TypeOps, only leave error reporting in Checking.
That way, we have the option of re-using the code as a simple test
elsewhere.
|
| |
|
|
|
|
|
| |
Need to account for the fact that some argument types may be TypeBoudns themselves.
The change makes Jason's latest example work.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The previous scheme did not propagate bounds correctly. More generally,
given a comparison
T { X <: A } <: U { X <: B }
it would errenously decompose this to
T <: U, A <: B
But we really need to check whether the total constraint for X in T { X <: A }
subsumes the total constraint for X in T { X <: B }
The new scheme propagates only if the binding in the lower type is an alias.
E.g.
T { X = A } <: Y { X <: B }
decomposes to
T { A = A } <: U, A <: B
The change uncovered another bug, where in the slow path we too a member relative to a refined type;
We need to "narrow" the type to a RefinedThis instead. (See use of "narrow" in TypeComparer).
That change uncovered a third bug concerning the underlying type of a RefinedThis. The last bug was fixed in a previous commit (84f32cd814f2e07725b6ad1f6bff23d4ee38c397).
Two tests (1048, 1843) which were pos tests for scalac but failed compling in dotc have
changed their status and location. They typecheck now, but fail later. They have been
moved to pending.
There's a lot of diagnostic code in TypeComparer to figure out the various problems. I left it in
to be able to come back to the commit in case there are more problems. The checks and diagnostics
will be removed in a subsequent commit.
|
|
|
|
|
|
|
| |
Now: The underlying refined type. Was: The parent of the type.
We need the change because RefinedThis is used as a narrowed version
of the underlying refinedType (e.g. in TypeComparer rebase), and the old
scheme would lose a binding of that type.
|
|
|
|
| |
Avoids cyclic references caused by forcing info too early.
|
|
|
|
|
| |
Avoid the crash if origin is not associated with a bound in the
current constraint.
|
|
|
|
|
|
|
| |
We need to adapt type parameter bounds with an as-ssen-from to the
prefix of the type constructor.
Makes pos/boundspropagation pass.
|
|
|
|
|
|
|
|
|
|
|
| |
Needed some fixes to lookup refined. The potential alias
type is now calculated by taking the member of the original
refined type, instead of by simply following the refined info.
This takes into account refinements that were defined after
the refinement type that contains the alias.
The change amde another test (transform) hit the deep subtype limit,
which is now disabled.
|
|
|
|
|
|
|
|
|
|
| |
An example where this helps:
Previously, the private value `mnemonics` in Coder.scala was fof the form
Lambda$IP { ... } # Apply
It now simplifies to a Map[...] type.
|
|\
| |
| | |
Javaparser & ElimRepeated fixes & Annotation-fixes
|
| |
| |
| |
| | |
Packages also get a JavaDefined flag, but they shouldn't be removed by FirstTransform.
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
| |
| |
| | |
see annot.scala for examples
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Annotations in java could be compiled as-if array-only
annotation had <repeated> arguments constructor.
That isn't true for scala.
Also, type checking creation of single-element array
requires implicit resolution to provide ClassTag.
This makes problems while reading deferred annotation.
|
| | |
|
| |
| |
| |
| |
| |
| |
| | |
Required as gettersAndSetters ignores modifiers
in tree and uses ones in the type instead.
This means that gettersAndSetters carries over
modifiers from type to tree and this one violates postconditions.
|
| |
| |
| |
| | |
to be reused by FirstTransform
|
| |
| |
| |
| |
| |
| |
| |
| | |
transformSym explicitly checks that a field is JavaDefined and does not create a symbol for it.
Creation of a setter body looks for the symbol and fails because it does not find it.
We do not need setter bodies for Java fields because we are not generating bytecode for them.
|
| |
| |
| |
| |
| |
| | |
The dummy constructor is needed so that the real constructors see the import of the companion object.
The constructor has a parameter of type Unit so that no Java code can call it.
|
| |
| |
| |
| | |
A Java constructor needs to see the import of the companion object of the class. It is not necessary to move to an outer context because a Java constructor does not have an implementation. scalac also does it this way: see Namers.Namer.createNamer.isConstrParam.
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
| |
| |
| | |
thisTransformer.next
|
| | |
|
| | |
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Ported from scalac 2.11.x branch SHA 9753f23f9362b25a9f481b11dd8d51187187882a
This is mostly a direct port, with few significant dotty-specific
changes needed. The two more significant changes are:
In dotty, the first constructor of a class is pulled out separately from
the other stats in the Template.
The keyword detection code (buildKeywordArray) was moved into Tokens so
that it can more cleanly be shared by the Scala and Java scanners.
|
| | |
|
| | |
|
| |
| |
| |
| |
| | |
Check now fails after erasure.
Should become error after fixed.
|
| |
| |
| |
| | |
See #209 for explanation.
|
| | |
|
| | |
|
| |
| |
| |
| | |
This doesn't require additional argument. Decision can be made solely from the phaseId.
|