| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
| |
The policy is now made clear in a doc comment. The new part is that we will prefer
a symbol defined in a subclass over a symbol defined in a superclass. With the previous
commit 0a0d3dd1 on "More precise and uniform modelling of isCurrent" we got runtime test
failures for Course-2002-03.scala because the new definition isCurrent assumed a behavior
of `member` which was not assured: Namely that the merged denotation would prefer symbols
in subclasses over symbols in superclasses.
|
|
|
|
|
|
|
|
| |
For implemented getters and forwarded methods we need a notion of "isCurrent",
which means: would the getter or method before the implementation is added be
a member of the implementing class? Only in this case do we need to do anything.
The method formulation was previously weaker than the getter formulation, which
led to an error when compiling core (duplicate methods: andThen and size).
|
|
|
|
| |
Scalac does not generate them either.
|
|
|
|
| |
Scala 2 doe snot generate default methods, so we always need forwarders.
|
|
|
|
|
| |
A transformFollowingDeep was missing, so LinkScala2ImplClasses never got to see
the call.
|
|
|
|
|
|
| |
Instead of cleaning up, generate sensical code in the first place. This is shorter and
(I would argue) clearer, and also has the advantage that some initializing assignments
are not generated at all.
|
|
|
|
|
|
|
|
| |
Fixes junit failure in dotty where a lazy val was initialized with
a "...$lazy = _" assignment.
Moved ElimWiildcard to one group before. It does not really matter where it goes
so it might as well go someshere in the middle of the pack.
|
| |
|
|
|
|
| |
This phase rewrites supercalls to calls to static implementation class methods.
|
|
|
|
| |
Erasure uncurries arguments, need to track that in memberSignature.
|
| |
|
|
|
|
|
| |
They don't exist for Scala2 traits. Instead we let the initializer be `_'
and rely on trait setters (to be implemented) to initialize the field.
|
|
|
|
| |
A typed `_'. This is needed in a few places.
|
|
|
|
|
| |
Previously it didn't, because it created an ExprType, which is
illegal after erasure.
|
|
|
|
| |
This brings it in line with Scala2 conventions.
|
|
|
|
| |
We'd like to make it reusable for a phase that treats Scala2 traits.
|
|
|
|
| |
Also: generalize expandedName so that it can cater for trait setters.
|
|
|
|
|
|
| |
It definitely does appear in trees, so should be included in the set.
Affects how things are printed. Before, typed var's would still show up
as vals.
|
|
|
|
|
|
|
| |
If memoize and constructors are run in different groups,
memoize's previous postcondition "all concerete methods are implemented"
is wrong, because constructors are not implemengted yet. Solved
by moving the postcondition to phase Constructors.
|
| |
|
|\
| |
| | |
Trees: Add toString for AST nodes which are not case classes
|
| |
| |
| |
| | |
This makes debugging trees easier.
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
- Only transform static methods which are inside module classes.
- Make sure that the prefix of the underlying type of the Ident
is a ThisType of the current module class. For example in
"scala.Int.box(42)", "box" is an Ident whose underlying type is
"TermRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,scala)),Int$)),box)",
but we should not trigger an assertion in this case.
|
| | |
|
| |
| |
| |
| | |
Previously was only done for DefDefs. Caused backend failure.
|
| |
| |
| |
| |
| |
| | |
class is also the top-level class"
This reverts commit 6898d2c296326779d373ef0e0b84e4451550120a.
|
|/
|
|
|
|
|
|
|
| |
Constants that are adapted to a different supertype need to do this
explicitly (not just by changing the type). Otherwise tree checkers
will compute the original type and fail.
This caused a test failure in pos/harmonize. The mystery is why this
was not caught in the checkin tests.
|
|\
| |
| | |
Add a test for supercalls in traits.
|
| |
| |
| |
| | |
Fixes problem with run/t261.scala.
|
| |
| |
| |
| | |
Also added non-unit fields and a class that directly implements two traits with the same fields.
|
| |
| |
| |
| |
| |
| | |
A class might implement several fields in inherited traits with the same and type.
In that case only one getter should be produced, but all initializing expressions
have to be executed.
|
| |
| |
| |
| | |
()Unit translates to ()BoxedUnit not BoxedUnit.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Also mark the forwarder as Stable otherwise we get a RefChecks error.
This fixes #608.
Note that we do less parameter forwarding than scalac. See for example D
and Y in tests/run/paramForwarding.scala which don't get their own local
fields in scalac but do in dotty.
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Harmonization is Dotty's alternative to Scala 2's notion of weak conformance. It is less powerful but also
less entangled with the core type system. The idea is that in some specific contexts trees that
all have primitive numeric types will be converted as necessary so that they all have the same numeric type.
These tree sets are:
- the two branches of an if
- the alternatives of a match
- the body together with the catch blocks of a try
- the arguments of a vararg parameter
Examples are in the test file, harmonize.scala.
|
|/ |
|
| |
|
|\
| |
| | |
Improvements to higher-kinded types
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Adds IterableSelfRec.scala which caused lockup of the compiler.
After a lot of work the problem was determined to be polyomial or
exponential behavior of the compiler when executing findMember
on refined types that contain several bindings where the
resutling & causes a recursive invokation of findMember with
the same name. We do have a stop for this now, but if the
stop comes too late the runtime will grow very fast.
Problem addressed by kiccking in earlier with the stopping logic.
|
| |
| |
| |
| |
| | |
Typecomparer is not a good place because it gets re-generated for new context,
which causes the counts to be reset.
|
| |
| |
| |
| |
| | |
More refular that way. Also, change some raw printlns in low-level
code to reporter.printlns in order to harden them against prints over prints.
|
| |
| |
| |
| |
| | |
Displaying stuff should never report an exception or cause more messages to be displayed that
relate to the displaying.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
As test case IterableDotty shows, there can be a cycle
findMember --> & --> <:< --> hasMatchingMember --> findMember
which leads to an infinite recursion. This commit avoids this by
keeping track of names of outstanding findMember searches and falling
back to forming AndTypes instead of `&' is we repeat a findMember
search on a name seen before after a certain recursion depth.
|
| | |
|
| |
| |
| |
| | |
Previously, this fell back to toString
|
| |
| |
| |
| | |
It's a more logical home for them than the Context object.
|
| |
| |
| |
| | |
lookupRefined now reduces fully instantiated lambdas.
|
| |
| |
| |
| |
| | |
This gives us a cheap way to bound the search of all baseclasses in
testLifted.
|
| | |
|
| |
| |
| |
| |
| | |
This was uncovered by previous commit "Fix isSubType bug ...".
Also removed two redundants ".fresh" calls in "fresh.addMode".
|