| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
| | | |
|
|\ \ \
| | | |
| | | | |
Fix #511. Lambdas of traits that inherit abstract member.
|
| | | | |
|
| | | |
| | | |
| | | |
| | | |
| | | | |
https://github.com/DarkDimius/scala/commit/9c054bd687bbbcaa75f3f10a1d343998c6c1a2ba
As bug is minor I do not want to update scalac fork dependency just yet.
|
|\ \ \ \
| | | | |
| | | | | |
Fix of #503
|
| | | | |
| | | | |
| | | | |
| | | | | |
A search revealed duplicates, which are eliminated now.
|
| | |_|/
| |/| |
| | | |
| | | | |
Previously, we considered only methods. #503 shows that this is wrong.
|
|\ \ \ \
| | | | |
| | | | | |
Fix compatibility of Java with value classes
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
This avoids getting a runtime error when calling a Java-defined method
whose signature contains value classes. It happened because we erased
the value classes in this signature even though it comes from a
classfile.
Amusingly, this problem also exists in scalac:
<https://issues.scala-lang.org/browse/SI-9298>
|
| |/ / / |
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
DottyPredef needs to be compiled with -Yno-imports because it would
clash otherwise with the DottyPredef in the root context.
Note that ??? has to be written in fully qualified form because of #530.
|
|/ / /
| | |
| | |
| | | |
If the flag is set, no root imports are added.
|
|\ \ \
| | | |
| | | | |
Expand private members if necessary
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | |
| | | |
| | | |
| | | | |
It is now redundant.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
A late miniphase which resets private flag of all
members that are not accessed from within same class.
Replaces logic in RefChecks. Doing this late has two
advantages
- we can use name expansion, because references are
symbolic, so the names of symbols and references
to them do not need to correspond anymore.
- we can automatically correct for symbols moved in earlier
phases (e.g. lifted out by LambdaLift).
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Logic moved from RefChecks to Mixin; implementation
is now by name expansion instead of setting NotJavaPrivate
flag.
|
| | | |
| | | |
| | | |
| | | | |
Resets private flag, and expands the name if necessary.
|
| | | |
| | | |
| | | |
| | | |
| | | | |
Verified that all tests still run. This is a first step, so that
we can later on eliminate NotJavaPrivate altogether.
|
|\ \ \ \
| | | | |
| | | | | |
Pickling modularization reorg
|
| | |_|/
| |/| |
| | | |
| | | |
| | | |
| | | |
| | | | |
The pickling package got rather large and confusing with three
separate tasks that each had their own conventions: read JVM classfiles,
read Scala2 pickle info, read Tasty. The classes for each task are now in
separate packages.
|
|\ \ \ \
| | | | |
| | | | | |
Fix #522.
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
We were missing a substitution in full parameterization. Embarraingly, this
made even the example in the doc comment of `fullyParameterizedDef` fail.
|
|/ / / / |
|
|/ / /
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Lower bounds need to be instantiated just like upper bounds.
F-bounded polymorphism (which only applies too upper bounds)
is one reason for instantiating arguments, but parameters
referring to other parameters is another one. An the latter
applies to lower bounds as well.
|
|\ \ \
| | | |
| | | | |
Compile from Tasty
|
| | | |
| | | |
| | | |
| | | |
| | | | |
We want to ensure that the whole tree is read at phase
frontend. To achieve this, we run an empty traverser over the tree.
|
| | | |
| | | |
| | | |
| | | |
| | | | |
These only exist if there was a pickler, and they are not unique
per CompilationUnit.
|
| | | | |
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
A missing delta position signifies that the node has
the same position as its parent. Once that case was
added, we can now enable positions when reading from Tasty.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
So far: Only one source file is recorded. Should evaluate
whether more are needed. Will programs composed from several
source files be pickled? They will certainly be generated after
inlining, but maybe all that happens after pickling?
|
| | | | |
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Previously, the empty package was always initialized with the empty scope.
This means that separate compilation between files in the empty package
was not possible.
|
| | | |
| | | |
| | | |
| | | | |
`FromTasty` is a main module which compiles TASTY info instead of sources.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
To be able able to post process pickled TASTY tree we let ClassfileParser#run
return any embedded unpickler. The unpickler is further propagated by a new
method ClassFileLoader#load in SymbolLoaders.
|
| | | | |
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
After erasure, we may have to replace the closure method by a bridge.
LambdaMetaFactory handles this automatically for most types, but we have
to deal with boxing and unboxing of value classes ourselves.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
For a module class V$, the synthesized companion class method looks
like:
val companion$class: V
If V is a value class, after erasure it will look like:
val companion$class: ErasedValueType(V, ...)
This will break SymDenotation#companionClass which relies on the type of
companion$class.
The solution is to not semi-erase the type of companion$class.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
This corresponds roughly to step 2 of SIP-15 and to the peephole
optimizations of step 3.
The extractors in TreeExtractors are copied or inspired from
src/compiler/scala/tools/nsc/ast/TreeInfo.scala in scalac.
|
| | | |
| | | |
| | | |
| | | | |
This method will be needed to implement VCInline.
|
| | | |
| | | |
| | | |
| | | | |
This fixes the issues reported in SI-5866 and SI-8097
|
| | | |
| | | |
| | | |
| | | |
| | | | |
This phase erases ErasedValueType to their underlying type, in scalac
this was done in PostErasure.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
There are three ways to erase a value class:
- In most case, it should be semi-erased to an ErasedValueType, which will be
fully erased to its underlying type in ElimErasedValueType.
This corresponds to semiEraseVCs = true in TypeErasure.
- In a few cases, it should be erased like a normal class, so far this
seems to be necessary for:
* The return type of a constructor
* The underlying type of a ThisType
* TypeTree nodes inside New nodes
* TypeApply nodes
* Arrays
In these cases, we set semiEraseVCs = false
- When calling `sigName` it should be erased to its underlying type.
This commit implements all these cases. Note that this breaks most tests
because ElimErasedValueType has not been implemented yet, it is part of
the next commit.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
For a value class V, let U be the underlying type after
erasure. We add to the companion object of V two cast methods:
def u2evt$(x0: U): ErasedValueType(V, U)
def evt2u$(x0: ErasedValueType(V, U)): U
The casts are used in Erasure to make it typecheck, they are then removed
in ElimErasedValueType (not yet present in this commit). This is
different from the implementation of value classes in Scala 2 (see
SIP-15) which uses `asInstanceOf` which does not typecheck.
|
| | | | |
|