| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
| |
| |
| |
| | |
Arg bounds do not count is bindings.
|
| |
| |
| |
| | |
Printing bounds omits the "<:" otherwise.
|
| |
| |
| |
| |
| | |
Previous implementation died because
TermRef had no denotation.
|
| |
| |
| |
| | |
typeSymbols always have empty type parameter list.
|
| |
| |
| |
| |
| | |
Also: fix EtaExpansion.
Also: Add some debug code to Applications, awaiting further fixes.
|
| |
| |
| |
| | |
Also: fix adaptArgs and LambdaTrait to make it work.
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
| |
| |
| |
| |
| |
| | |
Done in order to keep the basics as simple as possible.
Treating existentially bound parameters as still instantiatable type
parameters does not seem to add anything fundamental, and makes the
type system less regular.
|
| | |
|
| |
| |
| |
| | |
It seems to complciate things with no real purpose.
|
|\ \
| |/
|/| |
Add initial CompilerCallback implementation for IntelliJ
|
| |
| |
| |
| |
| | |
This adds some simple callbacks to Dotty that should be enough to
get basic integration from IntelliJ.
|
|\ \
| | |
| | | |
TypeComparer: delay looking up members of AndTypes
|
| |/
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
In ParFactory.scala we have checks that look like:
(Foo { type Bar = X }) & (Foo { type Bar = X }) <:< (Foo { type Bar = X })
where `Foo` is a recursive type.
Before this commit, we would first try to check this by looking up `Bar`
in the `AndType` on the left, which means looking it up in both branches
and then merging the result, but the merge requires more subtyping
checks, which in turn require looking up a member inside an `AndType`,
seemingly ad infinitum.
We now avoid this by checking if either branch of the `AndType` on the left
is a subtype of the `RefinedType` on the right before looking up a member
in the `AndType` itself.
|
| |
| |
| |
| | |
The less typing we do during Namer, the better.
|
|/
|
|
|
|
|
|
|
|
|
| |
This commit fixes two issues which caused us to complete Seq too early and
read it from the classpath instead of from the sources:
- Evaluting RepeatedParamClass forced Seq, this is not necessary
because the type of RepeatedParamClass is a LazyType
- TypeErasure#sigName on a Scala type always forced Seq, even if
the type is not a repeated param type.
This fixes #980.
|
| |
|
| |
|
|
|
|
|
|
|
| |
It turns out it's not needed because now all type arguments are
expressed as aliases. Interestingly dropping this feature shaved
20% off the time off junit tests. Which seems to indicate that the
handling of type application is really performance critical.
|
|
|
|
|
|
|
|
| |
I noted a slowdown of about 25% (66sec -> 81sec) when compiling dotty even
after the subtype optimization (before it was 117sec).
I tracked it down to the traceIndented fix which avoided questions to be evaluated
twice. But it also caused the question to be evaluated
Making the val lazy fixed the problem.
|
|
|
|
|
|
|
| |
compileStdLib went from 45 sec to 230 sec. The problem were many redundant tests
when every member of an alias chain was compared to every other.
The new scheme follows alias chains to their end before doing anything else.
|
|
|
|
|
| |
Pickling/unpickling of STABLE modifier allows to fix problem with
unpickling of path-dependent types (#982)
|
| |
|
|
|
|
|
|
|
| |
While trying to debug #943 I noticed that the exception output from
traceIndented was interspersed with unrelated logging output, this
happened because `question` in traceIndented is by-name and was
evaluated both before executing an operation and afterwards.
|
| |
|
|
|
|
|
|
|
| |
As demonstrated by tests/pos/hk-deep-subtype.scala, we can avoid some
deep subtype recursions that result in stack overflows by doing this.
Fix #943.
|
| |
|
|
|
|
|
|
|
|
|
| |
The fact that the annotation comes first is weird, because when I write
an annotated type it's <type> @<annotation>. Also, annotated types
are like RefinedTypes in that they derive from a parent type. And in
RefinedTypes the parent comes first.
So swapping the arguments improves consistency.
|
|
|
|
| |
Also reorder the cases to be in the same order as the documentation.
|
|
|
|
|
|
|
|
|
| |
Previously, `isAsSpecific(alt1, tp1, alt2, tp2)` did not handle
having `tp2` be a polymorphic non-method type like `[A]Foo[A]`.
Also update the documentation of `isAsSpecific` to account for this
change, the new documentation is based on SLS ยง 6.26.3 but
adapted to reflect the code.
|
| |
|
|\
| |
| | |
Fix #938
|
| | |
|
| |
| |
| |
| |
| |
| | |
Getters transform `T` to `=> T`. This means that `=> T <: T`
might need to be true after getters. Observed in the wild
tree checking t938.scala after getters.
|
| |
| |
| |
| |
| | |
-Ycheck:era checked after phase resolveSuper. This was due to an overly simplistic containsPhase
check.
|
| |
| |
| |
| | |
Need to avoid also symbols in ThisTypes
|
|/ |
|
|\
| |
| | |
Adapt type parameters of typed eta expansion according to expected variances
|
| |
| |
| |
| |
| |
| |
| | |
Just noted that the previous scope might have been too small.
We compute the bucket index with the table size before going into the
synchronized. But that might mean we see a stale table size.
Let's see what this gives us.
|
| |
| |
| |
| |
| |
| | |
The previous commit made packages always fully completed.
This is wrong - since new members can be added to packages
at any time, packages are never fully completed.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Fix problems arising when hierarchies of classes are under completion at the same time.
In this case it can happen that we see a subclass (e.g. Arrays.scala) which depends
on a superclass (e.g. GenTraversableLike.scala) that itself does not have its parents
defined yet. Previously, several things went wrong here
- One of the base classes would be marked as frozen, even though it dod not have all
members entered yet. This led to an error in finger printing.
- The baseclasses and super class bits of the subclass would be computed before the parents
of the middle class were known. The baseclasses would then be chached, leading to
false results for isDerivedFrom.
We need to refine the logic for computing base classes, super class bits, and fingerprints
to account for that issue.
|
| |
| |
| |
| |
| |
| | |
Adding parents signals (via SymDenotation.fullyDefined) that
the class can now be frozen. So this should be done only after all
members are entered.
|
| |
| |
| |
| |
| |
| | |
getSimpleName crashes on some module names created by scalac.
May help finding the partest issue. (reverted from commit c11646c40042404550eb983577c9e7096a40502a)
|
| |
| |
| |
| |
| | |
Exclude false positives such as `Lambda|` be requiring
that lambda traits are defined in the Scala package.
|
| |
| |
| |
| |
| |
| |
| | |
When eta expanding a type `C` to `[vX] => C[X]` the variance `v`
is now the variance of the expected type, not the variance of the
type constructor `C`, as long as the variance of the expected type
is compatible with the variance of `C`.
|