| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
If -uniqid is on, RefinedPrinter now prints unique ids in definitions.
|
|
|
|
|
|
|
|
| |
If a symbol is defined in phases M..N, and that
symbol is then accessed in a phase before M, but in a new run,
we should not issue a stale symbol error (after all, the
symbol is not defined yet). Instead we now return a
NoDenotation.
|
|
|
|
|
|
|
|
|
| |
The problem is that exploration methods are run and phase dependent,
whereas Definitions has an implicit context that freezes the period
when Definitions ewas created.
We should complement this by splitting Definitions into a global and
per/run part, but that is independent of the change in this commit.
|
|
|
|
|
|
|
| |
1) Make local context go to module class if the tree symbol is a package val.
Perviously, this gave the wrong context owner for package definitions.
2) Add a hook to define the phase in which a transform should be run.
|
|
|
|
|
|
|
|
|
| |
A membercache is not valid in a period different from the one it was
created in. Reason: The denotations stored in the cache might have
different infos in different periods.
Also: add maybeOwner convenience method for printing, which handles
NoDenotation/NoSymbol gracefully.
|
|
|
|
|
|
| |
Type params should have different flags, depending on whether they are
owned by a method or a class. Only class type parameters are marked Deferred,
protected, and Local.
|
| |
|
| |
|
|
|
|
| |
This is a trap waiting to happen elsewhere as well. Not clear how to avoid it.
|
|
|
|
|
|
|
|
|
| |
Added two levels: pure and idempotent and fixed what look like
obvious bugs. It seems the previous treatment confused the two
levels.
Changed EtaExpansion and Erasure to use Pure instead of Idempotent
where appropriate.
|
|
|
|
|
|
| |
Added now because it affects purity if expressions: Inlined pure values
are pure even if referenced from impure prefixes (i.e. prefix need not
be evaluated).
|
|
|
|
| |
Convert expressions with constant types to Literals.
|
|
|
|
|
|
|
| |
Added several forms of "select" and "appliedTo" methods which construct Select, Apply, TypeApply
trees.
Motivation: Infix methods allow chaining which is more legible than deep nesting.
|
|
|
|
|
|
|
|
|
|
|
|
| |
New phase for extension methods.
Also, split off some type handling functionality that can be used
elsewhere in new TypeUtils decorator. The idea is that TypeUtils should
contain methods on Type that make sense specifically for transformations.
That way, we can keep Types from growing. Might make sense to do similar
decorators for Denotations as well.
There's a bug fix in MacroTransform: Need to treat selfInfo varDels specially, since they have no symbol.
|
|
|
|
|
|
|
| |
- Some new functionality in tpd and in Symbols.
- Added `sm` interpolator to print nicely.
- Make use of nestedMap where possible.
- Add IdentityDenotTransformer as a convencience class
|
|
|
|
|
|
|
|
|
|
|
|
| |
1) We now always generate companion objects for classes. This is done in
mini-phase "companions", which also assures that companion-modules appear
after companion-classes.
2) PostTyperTransformers is gone; the part which normalizes trees has been
rolled into TreeTransform and the part which reordered companion classes
and modules is now in Companions.
Note: Some tests were deisabled; should be re-enabled by Dmitry where needed.
|
|
|
|
|
| |
d.T is an access to a structural type member, so rejecting this is OK. Not sure why we compiled
this before without warning.
|
|
|
|
|
|
| |
The problem is that when an installAfter completely replaces a previous denotation, a symbol or NamedType
might still hang on to that denotation in the cache. We need to enforce that we switch to the new denotation.
This is done by setting the replaced denotation's validFor field to Nowhere.
|
|
|
|
|
| |
... for the common supertype of MethodType, PolyType, and ExprType.
Signed was confusing.
|
|
|
|
|
| |
Rewrote SuperAccessors (more to be done; see comments), and
added stuff here and there to make it work smoother.
|
|
|
|
|
|
| |
(1) Make sure ModifierFlags is TermFlags and TypeFlags
(2) Shorten private <local> to private[this]; same with protected
(3) Print [this] for local symbols in RefinedPrinter
|
| |
|
|
|
|
| |
Added this case, so that .symbol on a ThisType returns the underlying class.
|
|
|
|
|
|
|
|
|
| |
Added the following utility methods:
- polyDefDef: Create a DefDef given a function that takes type and value parameters and yields a body.
- appliedToTypeTrees: Apply function to type arguments ion a TypeApply if arguments are nonempty.
- mkAsInstanceOf
- ensureConforms: generate a cast if expression has non-conforming type.
|
| |
|
|
|
|
| |
Should do the same with other name-creator/name-test pairs.
|
|
|
|
|
| |
This is done to streamline changing class denotations in new phases
by adding to (or otherwise modifying) their decls scope.
|
|\
| |
| | |
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).
|