| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
| |
| |
| |
| |
| |
| |
| | |
With the change in the next commit this addition is needed
to make i859.scala compile. Previously the same effect was
achieved accidentally by `updateTypeParams`. The comment
admits that we do not really know why the functionality is needed.
|
| | |
|
| |
| |
| |
| |
| |
| | |
When approximating the constructor of an ak apply to a wildcard
type, approximate the whole application by WildcardType. Otherwise
we might have a wildcardtype with hk bounds as result.
|
| |
| |
| |
| |
| | |
It's now the same as upperBound, i.e. the underlying of the
type constructor re-applied to the arguments.
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
- Allow appliedTo over TypeBounds
- Difference in handling of empty type parameter lists
- Always consider EtaExpansions in appliedTo
EtaExpanions were not simplified before in Coder.scala and collections.scala.
Need to come back and simplify appliedTo logic.
|
| |
| |
| |
| |
| |
| |
| | |
Make them each inherit from common BaseType GenericType.
That way we avoid inheriting accidentally stuff from PolyType in TypeLambda.
Also, Fix adaptation of type lambdas. Don't confuse them with PolyTypes.
|
| |
| |
| |
| |
| |
| |
| |
| | |
- Handle hk applications in normalizeToRefs
- Handle type lambdas in classSymbol(s)
- Fix variances computation in type lambdas
- Provide type parameters for uncompleted type lambdas
- Revert TermOrHK type characterization
|
| | |
|
| |
| |
| |
| | |
Add existential type elimination for HKApply
|
| |
| |
| |
| |
| | |
Bounds did not do the right thing if a constrain parameter
was aliased.
|
| |
| |
| |
| |
| | |
- Re-introduce newHK option. Label some things that will be
removed with OLD.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
- Simplify RefinedType
- Drop recursive definition of RefinedThis - this is now
taken over by RecType.
- Drop RefinedThis.
- Simplify typeParams
The logic avoiding forcing is no longer needed.
- Remove unused code and out of date comments.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
- Swap order of subtype tests
The theory is that if two refined types have the same refined name, then
they are likely to be of related classes. So it seems more fruitful to
check the argument before the typeconstructor because that way we test
the part that's more likely to fail first. Rough observations seem to
indicate a 3% improvement in the junit test time.
- Cleanups
Drop some unnecessary cases; improve comments.
- Smarter handling of LazyRefs in betaReduce
Try to combine type constructor and arguments under a
common LazyRef.
- Optimize RecType/RecType comparisons
- Fix compareHkLambda, make it check variances.
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
- compileMixed failed because there was a cycle between immutable.Seq (compiled) and
parallel.ParSeq (loaded from classfile). Inspection of the completion log (turn completions
Printer on) and the stack trace showed that there's nothing we can do here. The old hk scheme
did not go into the cycle because it did not force an unrelated type. I believe with enough
tweaking we would also hva egotten a cycle in the old hk scheme.
The test is "fixed" by adding parallel.ParSeq to the files to compile.
- Disable named parameter tests
Those tests do not work yet with the revised hk scheme.
Before trying to fix this, we should first decide what parts of
named parameters should be kept.
|
| |
| |
| |
| |
| |
| |
| |
| | |
Without this step, anonymous functions can have dependent
types which causes the parameter references to "leak out"
to types in the environment in illegal ways. This caused
a tasty failure for Typer before (not sure why the failure
was not observed under the old hk scheme).
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
TypeMaps do the same, so it is logical, and helps
prevent subtle errors as when we mispredicted whether
a RecType contains references that point to it.
Also, add normalizeHkApply to homogenize
Fixes some discrepancies in Tasty typing.
Also, homogenize skolem types
Skolem types are eliminated by pickling, so they should not appear
in the "before-pickling" output.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The previous condition could make a (derived) type a * type
for a little while even though it had type parameters. This
loophole caused collection/generic/MapFactory.scala and with
it compile-stdlib to fail.
Refinement for knownHK for PolyParams
pos test t2082.scala shows that knownHK can be constructed before
the binder PolyType of a PolyParam is initialized.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The previous scheme goes into an infinite recursion if the recursive type
does not contain a reference to itself.
Also, make typeParams more defensive
The problematic case is something like
{ z => CC { type hk$0 = z.hk$0; type(param) hk$0 }
Here $hk0 becomes a type parameter through CC and the type lambda.
It's true that such types are eliminated later on. But we want to
avoid mispredictions at all points.
|
| |
| |
| |
| | |
Optionally, check kinds of operands of & and | match.
|
| |
| |
| |
| |
| |
| |
| |
| | |
Also, handle LazyRefs conservatively in isReferredTo
Without the change we risk losing RecTypes because
it looks like nobody refers to them. This was observed
for pos/i974.scala.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
We would like to change from a scheme where eta-expansion was
prototype driven to one where unapplied parameterized types are always
eta expanded. The reason is that we might miss some eta expansions due
to cyclic references.
run/colltest4
is an exmaple. Here, we missed an eta expansion in the type of Iterator.
The class definition is:
trait Iterable[+A] extends IterableOnce[A] with FromIterable[Iterable] {
We'd expect that the second parent would expand to
FromIterable[[X0] -> Iterable[X0]]
But we miss the expansion because at the time we complete Iterable we have not
completed FromIterable yet. In fact this happens in both the old and the new hk scheme.
But in the old scheme we did not notice the error whereas in the new scheme we
get an error in PostTyper that the type Iterable does not conform to its bound
`[X0] -> Iterable[X0]`.
With this commit, we change the scheme, so that eta-expansion depends on the
type parameters of a type itself, instead of the expected type.
We should investigate whether we can do a similar change for Scala2 classloading.
Check kinds of type parameters
Also, do not allow a hk type if the bound is a * type.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
- Swap subtype tests
Previous order could create constraints where hk type parameters
got a * bound. (this is now caught in an assert).
- Make underlyingClassRef work for hk types under new scheme.
- Ensure that toAvoid does not creat hk from * types
- Let getClass return a * type
We will be pickier than before. An unapplied type such as
`java.lang.Class` will always be an hk type. Hence, the type
of getClass has to be appleid to [_] to make it a * type.
|
| |
| |
| |
| |
| | |
Their type parameters are not the type parameters in the completer,
but hk type parameters with the same variances.
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The new one only reduces straight applications of type lambdas with
definite arguments. It is called very early on appliedTo, and derivedRefinedType.
The old one, now renamed to normalizeHkApply also handles wildcard arguments
and can garbage collect general unneeded hk-refinements. It is called later, at various
places.
TODO: See what functionality of normalizeHkApply should go into betaReduce instead.
Maybe we can even drop normalizeHkApply? However: need to be careful to maintain aliases
for hk type inference.
|
| |
| |
| |
| |
| | |
With this change, ski compiles (but with more errors than before).
Without it, it goes into various infinite recursions.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The new one only reduces straight applications of type lambdas with
definite arguments. It is called very early on appliedTo, and derivedRefinedType.
The old one, now renamed to normalizeHkApply also handles wildcard arguments
and can garbage collect general unneeded hk-refinements. It is called later, at various
places.
TODO: See what functionality of normalizeHkApply should go into betaReduce instead.
Maybe we can even drop normalizeHkApply? However: need to be careful to maintain aliases
for hk type inference.
Handle LazyRefs in BetaReduce
Needs to be careful to not skip LazyRefs when dealiasing.
- Fix^2 of asMemberOf: This fix ensures that
- under the old hk scheme test succeeds for compilestdlib and tasty-new-all
- under the new scheme test succeeds for i94-nada (i.e. REP[T] = T).
- Try to beta-reduce bounds before adding to a constraint.
- More subtle handling of LazyRefs in BetaReduce
- Another refinement to asMemberOf
Need to assume lastSymbol in sync with lastDenotation.
- Drop isSafe test from BetaReduce
Instead, track the higherkinded argument names that a
type variable could potentially instantiate to.
|
| |
| |
| |
| |
| |
| |
| |
| | |
Mapping the info may create new skolems which undermines
the idea of a skolem as a fixed reference. In a sense, SkolemTypes
are like Termrefs, mapping them does not map their info either.
Creating new skolems on the fly in type maps caused some hard find
to infinite loops under the new hk scheme.
|
| |
| |
| |
| | |
Fixes a crasher in t2994.scala
|
| |
| |
| |
| | |
The previous fix caused 4 tests to fail under the old hk scheme.
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
- Swap order of tests in lookupRefined
- Change joins of BindingKinds.
A type parameter joint with a normal refinement represents
a type parameter that has been filled in. So the Binding attribute
should be removed.
- Fix printing of type lambdas under new hk scheme
- refine isRef for hk type
The new definition avoids that a higher-kinded type "isRef"
of an underlying class. I.e. `[X] -> Any` is not longer a ref
to `Any`.
- Fix withBindingKind for type aliases
Old definition converted aliases to type bounds.
- Multiple fixes to BetaReduce
- Fix logic for hk subtype tests
- Make isHK more precise
|
| |
| |
| |
| |
| |
| |
| | |
For the moment under newHK flag.
- avoid crasher in derivedTypeParams (NamedTypes don't always have symbols)
- Revise logic in type comparer for new HK scheme
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
There was a special case that triggered a parse error in this course
def lift[T <: Type](tp: T): (RecType => T) = arg match {
case rt0: RecType => tp.subst(rt0, _).asInstanceOf[T]
case _ => (x => tp)
}
The problem was that the rhs of the first case became a Function node, which
caused a premature return from the case clause sequence. I could not determine
anymore what the purpose of the removed case in the parser was; all tests compile
without it.
|
| |
| |
| |
| |
| | |
Also fix printing of variances in typedefs and params;
they were suppressed before.
|
| |
| |
| |
| |
| | |
It can give false negatives.
Also, simplify RecType.closeOver
|
| |
| |
| |
| |
| |
| |
| |
| | |
In the new hk scheme, a type parameter can be represented by a
refinement without a corresponding symbol. Therefore, we need
to disentangle the info inherent in a type parameter from the
contents of a type symbol. We achieve this by creating a common
super trait "MemerInfo" of Symbol and RefinedType.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Map self-references in refinements to recursive types. This
commit does this for refinement types appearing in source.
We still have to do it for unpickled refinements.
Test apply-equiv got moved to pending because it simulates
the old higher-kinded type encoding in source, which relies
on the old representation in terms of self-referential refinement
types. The plan is not to adapt this encoding to the new
representation, but to replace it with a different encoding
that makes critical use of the added power of recursive types.
Use recursive types also when unpickling from Scala 2.x.
Add mapInfo method to Denotations.
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
They not print similar to scalac: "?x" where `x` is a unique number.
Todo: An offline explanation what they are, similar to javac. I.e.
... ?3 ...
where ?3: T
|
| |
| |
| |
| |
| | |
Treat parent like refinedInfo. Introduce isBinding convenience method
in TypeBounds.
|
| |
| |
| |
| |
| |
| | |
Previously a refinement could only apply to a type bound in
the parent. This restriction needs to be dropped for the new
encoding of hk type parameters.
|
|\ \
| | |
| | | |
Discard reporter output for tests that succeed.
|
| | | |
|
|\ \ \
| | | |
| | | | |
Skip redundant superclasses\supertraits.
|
| | | | |
|
|\ \ \ \
| | | | |
| | | | | |
Fix erasure of Java Array[T]
|
| |/ / /
| | | |
| | | |
| | | | |
Should be erased to Object[], not Object.
|
|\ \ \ \
| |/ / /
|/| | | |
Correct typo in IsInstanceOfEvalautor, fixes #1352
|