| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
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.
|
|\ \ \ \
| |/ / /
|/| | | |
Enable test strip-tvars-for-lubbasetypes.scala and disable debug message
|
| | | | |
|
|/ / /
| | |
| | |
| | |
| | | |
The test had to be slightly modified because of dotty's stricter
checking of type bounds validity, see #525 where this was discussed.
|
|\ \ \
| |/ /
|/| | |
Fix #523: Instantiate lower bound when bounds checking
|
|/ /
| |
| |
| |
| |
| |
| |
| | |
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.
|
| | | |
|
|\ \ \
| |_|/
|/| | |
Implement value classes
|
| | |
| | |
| | |
| | |
| | |
| | | |
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.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Each test needs to have its own package because pos_all will try to
compile the whole valueclasses directory at once.
The remaining tests with "extends AnyVal" in tests/pending/pos are
related to separate compilation, except for:
- t6482.scala and t7022.scala which were fixed by
https://github.com/scala/scala/pull/1468 in scalac and seem to
trigger a similar bug in FullParameterization
- strip-tvars-for-lubbasetypes.scala which was fixed by
https://github.com/scala/scala/pull/1758 in scalac
|
| | |
| | |
| | |
| | |
| | | |
Each test needs to have its own package because pos_all will try to
compile the whole valueclasses directory at once.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
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.
|
| | | |
|
| | |
| | |
| | |
| | |
| | | |
This reduces the number of objects created and speeds up subtyping tests
Also make ErasedValueType extend ValueType
|
| | | |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
- isSemi is replaced by semiEraseVCs with a different meaning (but is
still unimplemented):
* If true, value classes are semi-erased to ErasedValueType
(they will be fully erased in ElimErasedValueType which is not
yet present in this commit).
* If false, they are erased like normal classes.
- Fix the documentation of the TypeErasure class which was wrong.
- Remove intermediate functions scalaErasureFn, scalaSigFn, javaSigFn
and semiErasureFn. It's clearer to just use erasureFn directly
instead.
- Add an optional parameter semiEraseVCs to TypeErasure#erasure which
will be used in Erasure#Typer when we need to disable semi-erasure.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This commit tries to disentangle the TypeErasure class and the
TypeErasure object thereby fixing #386.
- Remove the `eraseInfo` method in the TypeErasure object, use `transformInfo`
instead which takes care of using the correct instance of TypeErasure
depending on the symbol to erase.
- Remove the unused method `eraseResult` in the TypeErasure class.
- In `transformInfo`, use the correct instance of the TypeErasure class when
calling `eraseInfo`.
- In the `eraseInfo` method of the TypeErasure class, do not call the
`erasure` method of the TypeErasure object, instead use the `apply`
method of the current instance of TypeErasure.
|