| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
by bringing homogenization of # $Apply projections back.
|
| |
|
|
|
|
|
|
| |
All Lambda abstractions, not just eta expansions, should
use actual parameter bounds, not the one retrieved from
the parameter symbols.
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
This prevents propagation changes leading to long
recompiles when a printer is changed.
|
|
|
|
| |
Makes i815 compile.
|
|
|
|
| |
Taking typeAlias is illegal in that case.
|
|
|
|
|
|
| |
Arg bounds do not count is bindings.
Also: TypeLambda's $Apply binding should be covariant,
because the parameter is (not sure it matters though).
|
|
|
|
| |
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.
|
|\
| |
| | |
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.
|