| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
| |
Will now print the full chain of instances using ? for uninstantiated and ' for
instantiated.
|
| |
|
|
|
|
|
| |
Add test whether we are after typer. Use it to assert that
eta expansion and implicit search do not happen after typer.
|
| |
|
|
|
|
| |
Used for debugging purposes for now. Might be used for replaying IDE interactions later.
|
|
|
|
|
|
|
|
|
|
|
| |
We need to take into account that symbols can can have non-class owners yet still be valid.
Previously such symbols were treated as invalid. Now they are valid if their owners are valid.
The commit supersedes
29976d7922c5c3e99f0469e3db1
which got reverted.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
We cannot have same named methods defined in Object and Any because after erasure
the Any references get remapped to the Object methods which would result in a double binding
assertion failure.
Instead we do the following:
- Have some methods exist only in Any, and remap them with the Erasure denotation
transformer to be owned by Object.
- Have other methods exist only in Object.
To achieve this, we synthesize all Any and Object methods; Objetc methods no longer get
loaded from a classfile.
There's a complication with getClass. We need to reconsider what the best treatment of getClass is.
Right now there's too much magic going on for my taste. It might be better to leave getClass on Object only as it
is in Java, forget about the special treatement of its type, and have another getClass like method in
an decorator on class Any. That could produce the right types and could also work for primitive types.
|
|
|
|
| |
There was a mismatch between symbol and signature before.
|
|
|
|
|
| |
Need to allow for possibility that term ref does not have a symbol (e.g. termrefs with union prefixes do not
always have symbols).
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
Conflicts:
src/dotty/tools/dotc/backend/jvm/BCodeBodyBuilder.scala
src/dotty/tools/dotc/core/Definitions.scala
|
|
|
|
| |
TermRef's for primitive types are of primitive-type.
|
| |
|
|
|
|
|
| |
Collect entry points for backend.
Previously this was done by cleanup.
|
| |
|
|\
| |
| | |
Context escape detection.
|
| | |
|
| | |
|
| | |
|
| |
| |
| |
| | |
Eliminates ExprTypes and PolyTypes over value types.
|
| |
| |
| |
| |
| | |
As a denotation need to take the symbol's info *as seen from
the qualifier type*.
|
| |
| |
| |
| | |
Was an oversight before.
|
| |
| |
| |
| |
| | |
Factored out denot transformer behavior where the we transform types
in a uniform way into InfoTransformers.
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Stable methods are introduced from getters by inserting () parameters.
This change makes sure that adding () does not lose the members of an
ExprType.
Also, avoid spurious stale symbol errors in loadDenot. When something is not
a SymDenotation, no use retrying in first phase; current would fail immediately.
|
| |
| |
| |
| |
| |
| |
| | |
Implicit members are TermRefs that should have a prefix corresponding to the object of which they are a member. They used to have the ThisType of their owner before.
`implicits2` provides a way to verify that the change works. It would be good to turn this
into a more robust test at some point. But it's not high preiority, so I prefer no test to a fragile test.
|
| | |
|
| |
| |
| |
| | |
Do not discard non-bridge methods
|
| | |
|
|\ \
| | |
| | | |
Allow phases to give restrictions on pipeline position.
|
| | |
| | |
| | |
| | |
| | |
| | | |
Phases can now specify which phases should it follow.
Tree transforms can additionally specify which TreeTransforms
should have finished their processing of compilation units entirely.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Ported tailcall phase from scalac with such changes:
- all transformation is done in the phase itself
(previously half of the work was done in backend)
- it is now able to run before uncurry
- it is now a treeTransform
- renamed to tailrec to make it more obvious that
this phase transforms only recursive calls.
For now this is a single phase which speculatively
transforms DefDefs.
Speculation can be potentially removed by
splitting into 2 phases:
one detecting which methods should be transformed
second performing transformation.
But, as transformation requires as same amount of work
as detection, I believe it will be simpler to maintain
it as a single phase.
Conflicts:
tests/pos/typers.scala
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This shouldn't require any changes to backend,
as all type parameters will be erased in erasure
Conflicts:
src/dotty/tools/dotc/core/Symbols.scala
|
| | |
| | |
| | |
| | |
| | |
| | | |
Helper method that tests weather this particular
SymDenotation cant have overrides: eg if it's defined in module class,
if it is inner method, if it is method of anonymous class, etc.
|
|\ \ \
| |_|/
|/| | |
Fixing annotations
|
| | |
| | |
| | |
| | | |
Instead of by-hand testing of modifier type.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Two fixes:
1) Annotation#symbol now returns the correct annotations for classes as well as traits.
2) Typer copies annotations from Modifiers to Symbols
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
In TypeAssigner#ensureAccible we sometimes pick an inherited public
member as the denotation of a NamedType instead of an inaccessible
private one. The problem is that both are denotations for the same type,
which caused a noDoubleBindings assert failure. We now solve this problem
by creating a "shadowed" named type to hold the inherited member.
The shadowed named type is distinguished by its name, which reads
(inherited)originalName
In the future, we should make this more robust by using a general
tagging scheme to create shadowed names.
Another fix is about import symbols. They are now referenced with
NonMemberTermRefs. With this fix, the test suite passes with no
double def violations.
|
| | |
| | |
| | |
| | |
| | | |
Conflicts:
src/dotty/tools/dotc/transform/Splitter.scala
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
A double binding is if a named type gets assigned two denotations in the same period. This is
a side-effect and also a race condition, so it's very bad. I am trying to eliminate all causes of this. But one cause which will likely remain are double defitions in a prgram, if a user writes
class C {
val x: Int
val x: Int
}
Then it's really hard to avoid setting two meanings of C.this.x! That's why the testing
against double bindings is enabled by a -YnoDoubleBindings option. The understanding is that
-YnoDoubleBindings should be set only if there are no double def errors anticipated. Otherwise
the program might fail with an assertion error before the double def error is reported.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
A self name may no longer have the same name as a parameterless
class member (or param accessor). The restriction makes sense because
otherwise scoping is confusing. It's needed because otherwise we get
TermRefs that have the same name and prefix but denote different things.
Moved some code which exercises this from pos/typers to neg/typers
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
The main problem with TermRef handling was that signatures were not always tracked correctly.
New invariant: A TermRef that points to a symbol is always a TermRefWithSig, and the signature
is the one of the corresponding member.
We achieve this by sometimes generating a new TermRefWithSig if a TermRef gets a denotation.
One possible simplification would be to always store a signature in a TermRef.
There's still a problem in TermRefWithSig#newLikeThis, which currently works only if the previously stored
denotation references a symbol. We will need to generalize JointRefDenotation to contain multiple symbols for
a complete fix.
|
| | |
| | |
| | |
| | | |
Retyping should not create new symbols and that includes local dummys.
|
| | |
| | |
| | |
| | | |
... to check whether tree types make sense. Still produces errors when enabled.
|
| | |
| | |
| | |
| | |
| | | |
Used to print <none> for denotations with a symbol,
now prints "some I" where I is the denotation's info.Reworked phases.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Implemented splitting operations
As a side effect, this contains a test ruling out structural term member dispatch.
Tests 0586 and 0625 which used structural dispatch got moved to neg.
|
| | |
| | |
| | |
| | |
| | |
| | | |
Cannot discard a symbol simply because the other side's type is weaker.
If in (A | B)#m A and B resolve to different symbols `m`, the resulting denotation
cannot have either `m` as symbol; it must be NoSymbol instead.
|
|\ \ \
| | | |
| | | | |
Install method for SymDenotations
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Add a new method to install a SymDenotation after a specific
phase has run. The new denotation replaces the current denotation
of the symbol starting with the period after the given phase.
|