| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|\
| |
| | |
Fix #2137: Create dummy companions for top-level objects without a real one
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The previous commit introduced two new usages of `denotNamed` which broke
tests/run/t1987b because `denotNamed` indirectly calls `packageObj`
which caches the package object, except that at this point the package
object is not yet entered, so the cache was incorrect. We fix this by
using `effectiveScope.lookup` instead since we only need to look into
the current scope, this is also true for the two existing usage of
`denotNamed` in `createCompanionLinks` so they were also replaced by
`effectiveScope.lookup`.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Previously, we sometimes ended up forcing a companion class symbol from
a previous run or from the classpath which lead to weird issues like in
`false-companion`. Even if we end up not forcing such a symbol, its
presence can still lead to issue: before this commit incremental
compilation of `dotty-compiler-bootstrapped` was broken because we
recorded a false dependency on the non-bootstrapped `dotty-compiler`
jar.
The added test is currently marked pending because it does not work with
JUnit (which doesn't handle separate compilation), only partest. I
didn't managed to get it to work right, and this won't be necessary once
our testing framework is overhauled by
https://github.com/lampepfl/dotty/pull/2125 anyway, so I'll just have to
remember to enable this test afterwards.
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This reverts commit 57641b9c7447fa0a6f1f47352dffb4c56c560b6a.
Using `Type#select` instead of `Type#member` turned out to not help at
all in avoiding false dependencies, you can still get a symbol whose
denotation does not reallyExists. A proper fix for this issue is
contained in the next commit.
|
|\ \
| | |
| | | |
Fix desugaring of variable pattern leaking into API
|
| | |
| | |
| | |
| | |
| | | |
This was especially bad for incremental compilation since the temporary
variable name is unstable.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
* Fix varargs in methods (Issue: #1625)
* Fix minor comments
* Change varargs parameter message
* Fix failed test, fix case for constructor
|
| |/
|/|
| |
| |
| |
| |
| |
| |
| | |
Previously, every time sbt was restarted, `compile` would do a full
recompilation. This happened because sbt uses Java serialization to
persist the incremental compilation analysis, deserialization was always
silently failing because we used to serialize a class from the
dotty-compiler jar which is not on the classpath at deserialization
time. See the added comments for more details.
|
| | |
|
| | |
|
| | |
|
| |
| |
| |
| |
| |
| | |
Normal references won't work since the referenced accessor has
the same name as a private name in the class defining the forwarder.
This showed up as pickling failures under separate compilation.
|
|/
|
|
| |
Making a name shadowed lost the signature before.
|
| |
|
|\
| |
| | |
Fix position of errors in Inliner TreeTypeMap
|
| | |
|
|\ \
| | |
| | | |
Fix #2117: bug in typechecking super prefix with invalid enclosing class
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
When typechecking
class A {
C.super.foo()
}
If C isn't an enclosing class, the compiler was throwing because of an
unguarded pattern match.
Fix the issue by checking for ErrorType.
Tested:
Verified that the example above no longer throws.
Added a test.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Before this commit, the added testcase failed because the type of `inv`
was inferred to be `Inv[Any]` instead of `Inv[Int]`. The situation looks
like this:
def inv(cond: Boolean) =
if (cond)
new Inv(1) // : Inv[A] where A >: Int
else
Inv.empty // : Inv[A'] where A' unconstrained
// : Inv[A] | Inv[A']
To get the type of `inv`, we call `harmonizeUnion` which will take the
lub of `Inv[A]` and `Inv[A']`, eventually this mean that we do:
A' <:< A
But since `harmonizeUnion` uses `fluidly`, this does not result in `A'`
getting constrained to be a subtype of `A`, instead we constrain `A` to
the upper bound of `A'`:
Any <:< A
We use `fluidly` to avoid creating OrTypes in `lub`, but it turns out
that there is a less aggressive solution: `lub` calls `mergeIfSuper`
which then calls `isSubTypeWhenFrozen`, if we just make these subtype
calls non-frozen, we can achieve what we want. This is what the new
`lub` parameter `canConstrain` allows.
|
|\ \ \
| | | |
| | | | |
Reduce type lambdas even if variance changes
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Previously, the added testcase failed with (when running with -Ydebug-alias):
2 | def foo = Seq(a)
| ^
|covariant type A occurs in invariant position in type => Seq.CC[Cov.this.A] of method foo
Because the type parameter of `CC` is invariant.
Of course, this is fine because `CC[A]` can be reduced to `Seq[A]`, but
before this commit, `TypeApplications#appliedTo` used to disallow
reductions that replaced an invariant type parameter with a variant one.
I believe that for type inference, only preserving the arity is
important, so I removed this restriction.
|
| | |/
| |/| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
The phase width in a period was bumped from 6 to 7 in
https://github.com/lampepfl/dotty/commit/16671a00371df2bdbaf6ae7f51b0ec7191ce94f3
but the comment wasn't updated.
Update the comment (and another unrelated comment).
Tested:
No
|
|\ \ \
| |_|/
|/| | |
Fix #2054
|
| | | |
|
| | | |
|
| | |
| | |
| | |
| | |
| | |
| | | |
Due to way how we desugar lambdas, we can decide to make a lambda static
Static methods could refer to those lambdas and we need to make
them public
|
| |/
|/|
| |
| |
| |
| |
| |
| |
| | |
As part of https://github.com/lampepfl/dotty/issues/1589, use the
new error message for static super references where the qualifier
isn't a parent of the class.
Tested:
Added unit test.
|
|\ \
| | |
| | | |
Alternative fix for #2099: avoid loading a private member when recomputing a NamedType denot
|
| | | |
|
| | |
| | |
| | |
| | |
| | |
| | | |
This was introduced in the previous commit and caused unpickling
failures, we are now more conservative and only check the Private flag
on SymDenotations so we don't have to load any other denotation.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
ParamForwarding creates the following forwarder in B:
private[this] def member: Int = super.member
Where the type for `super.member` is `TermRef(SubA, member)` and the
symbol is the `val member` in `A`.
So far this is correct, but in later phases we might call `loadDenot` on
this `TermRef` which will end up calling `asMemberOf`, which before this
commit just did:
prefix.member(name)
This is incorrect in our case because `SubA` also happens to have a
private `def member`, which means that our forwarder in B now forwards
to a private method in a superclass, this subsequently crashes in
`ExpandPrivate`.
(Note: in the bytecode, a private method cannot have the same name as an
overriden method, but this is already worked around in EnsurePrivate.)
The fix is simple: when we recompute a member, we should only look at
private members if the previous denotation was private.
|
|/ / |
|
|\ \
| | |
| | | |
Fix #2051: allow override T with => T or ()T
|
| | | |
|
|\ \ \
| | | |
| | | | |
Tailrec for derivesFrom/lookupRefined/classSymbol/classSymbols
|
| | | | |
|
| | | | |
|
|\ \ \ \
| | | | |
| | | | | |
Allow inter-parameter dependencies
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
All PolyTypes get variances passed, so isTypeLambda is always true
and the deleted assert is never triggered.
|
| | | | | |
|
| | | | | |
|
| | | | | |
|