| Commit message (Collapse) | Author | Age | Files | Lines |
|\
| |
| | |
Fix using of wrong period for creating nested ctx in TreeTransforms
|
| | |
|
| |
| |
| |
| |
| |
| |
| | |
`owner` for nestedContext in `TreeTransforms` was assigned
using initial period of whole `TreeTransforms` block.
That is incorrect as denotation for this owner could have been
create by some phase in this block.
|
| |
| |
| |
| | |
No need to perform zero transformations.
|
| |
| |
| |
| | |
There is no need to recurse in tree if there are no transformations left.
|
|\ \
| |/
|/| |
Docs/higher kinded v2
|
| |
| |
| |
| | |
Adapted docs so that they reflect what has been implemented.
|
| | |
|
| | |
|
| | |
|
|\ \
| | |
| | | |
Change/higher kinded
|
| | |
| | |
| | |
| | | |
Closes #94.
|
| | |
| | |
| | |
| | | |
Added explanations where suggested by Adriaan in his review.
|
| | |
| | |
| | |
| | |
| | | |
Avoid special treating TermRef, as this is not demanded by the
comment and does not change any of the test outcomes.
|
| | |
| | |
| | |
| | | |
Guard every occurrence of name.head with a test whether name.length > 0
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
TypeVars flip from the initial state, where underlying == origin to the final state
where underlying == inst. This flip can invalidate information that depends on the underlying
type of a TypeVar. Since we do not know when the flip occurs, we need to avoid keeping
any such information in a cache.
The commit makes three caches depend on a new value: typerState.ephemeral. The value is
set to `true` each time we follow the underlying type of a TypeVar, and this disables cached
information to be retained.
A test case for this commit is t2693.scala. This test passes typechecking with the previous commit,
but fails in -Ycheck:front because of stale cache info in an "#Apply" typeref. The present commit fixes that.
|
| | |
| | |
| | |
| | | |
refines needs to be made more stable, so that also aliases and derefernces typevars are recognized as prefixes.
|
| | |
| | |
| | |
| | | |
Was not called when comparing a named type with an #Apply projection. The commit fixes this.
|
| | |
| | |
| | |
| | |
| | |
| | | |
1) Honor variance of Apply and $hkArgs when instantiating them
2) Eta-lifting a higher-kinded type is straight eta expansion,
no arguments are applied.
|
| | | |
|
| | | |
|
| | |
| | |
| | |
| | |
| | | |
Switch to the new scheme where higher-kinded types (and also some polymorphic
type aliases) are represented as instances of Lambda traits.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Refined type subtyping needs to take into account all information
that was seen about members of both refined types. This is handled by
storing context info in `pendingRefinedBases` and making use of this
to selective rebase qualifiers when comparing refined types.
Note: This commit fails in pos/collections and dotc/ast, presumably because
of bad interaction between the refined subtyping and the "matchingNames" logic
(which will go away).
|
| | |
| | |
| | |
| | |
| | | |
In case of "types differ" failure, explain why original and retyped type are
not subtypes of each other.
|
| | |
| | |
| | |
| | |
| | | |
Printing a type parameter reference `A#T` now only reduces to `T` if
`A` is some `B.this.type`.
|
| | |
| | |
| | |
| | |
| | | |
Avoid to reduce projections `A{ ... }#T` to aliases if the
alias would refer to abstract members of the refinement type.
|
| | |
| | |
| | |
| | |
| | | |
Now also works for symbols that are not class members (and returns
Iterator.empty for them).
|
| | |
| | |
| | |
| | |
| | |
| | | |
Apply cannot be treated as a type parameter because it does not count
towards the number of legal arguments in an instantiation of a higher-kinded
type.
|
| | |
| | |
| | |
| | |
| | | |
Make sure that Lambda Arg refinements have the same variance as the Lambda classes
they instantiate. Controlled by a Config parameter.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Type members used to always pick the last refined info for a type name.
This is incorrect, as a type might have several refinements for the
same type name, which are not necessarily subsumed by the last one.
We now only pick the last one if it is an alias type (assuming we check
for conflicts elsewhere).
|
| | |
| | |
| | |
| | | |
... to bring it in sync with equals.
|
| | |
| | |
| | |
| | | |
Testing whether a type is (a subtype of) a Lambda class.
|
| | |
| | |
| | |
| | |
| | | |
Adding names and definitions for the Lambda scheme to hk types.
Also add HigherKinded flag for HK type parameters and abstract types.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
abstract type.
This is needed to make the encoding og higher-kinded types work. E.g.
Rep[Int]
would be represented as
Rep { type Arg$0 = Int } # Apply
where Apply is an abstract member of the base class Lambfa$I of Rep.
|
|\ \ \
| | | |
| | | | |
Use the final scala 2.11.
|
|/ / / |
|
|\| |
| | |
| | | |
Fix/systematic prototypes
|
| | |
| | |
| | |
| | |
| | |
| | | |
In a refinement type T { R } we do not need T to be a class. But analyzing the refeinement
type will create a temporary class type. This refinement class has to be treated specially in
what concerns parent types.
|
| | |
| | |
| | |
| | |
| | |
| | | |
Following the example of SelectionProto, we now always hide the result in a FunProto
behind an IgnoreProto. This avoids a special case retry with a weaker FunProto in
tryInsertApplyOrImplicit.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
The type of a SelectionProto needs to be ignorable because there might be an
implicit conversion on the selection. E.g.
implicit def a2b(x: A): B = ???
val x: { a: A } = ???
val b: B = x.a
This was previously handled by allowing implicit conversions in compatibility checks.
But it turns out we can afford to ignore the type of a selectProto and unignore on ambiguities
later.
|
| | | |
|
| | | |
|
| | | |
|
| | |
| | |
| | |
| | |
| | | |
The first part of a type ascription e: T can be a pattern or an expression. The mode
has to be kept depending on what it was on the outside.
|
| | |
| | |
| | |
| | |
| | | |
Auxiliary constructors need to be wrapped in the type parameters of the primary constructor.
Otherwise they will not take part in type inference.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Needed to wrap a dummyTreeOfType in a TypedSplice to prevent re-typechecking. (In fact, the
"tree without pos" check revealed a deeper problem: DummyTrees of types could be typed again,
but without the surrounding TypedSplice, the originally stored type would be forgotten and Null
would be returned.
|
| | | |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Another problem where we need to insert an implicit on the result type of complex operation.
Two additions: (1) If adapt fails, we now try with a weaker FunProto without result type, thus
allowing for an additional implicit cpmversion on the result. (2) An Application in a committable
context will not fail if the result type does not match the expected one. The problem will be
simply deferred in that case.
|
| | |
| | |
| | |
| | |
| | |
| | | |
This fixes a bug introuced by 7754c1ee6c4230e424fd99b820471dbd2c1c8390.
The reporter state need to be reset undconditionally in a tryWithFallback.
|
| | |
| | |
| | |
| | |
| | |
| | | |
1) glb/lub's are reported to subtyping printer instead of typr
2) Null arguments of function protos are printed with their types
(views sometimes are transformed into these).
|