| Commit message (Collapse) | Author | Age | Files | Lines |
|\
| |
| | |
Topic/language features
|
| |
| |
| |
| |
| | |
Removed annotations from the dotty codebase that were necessary because the inferred union types
caused inference errors later on.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Appromiximate union types by intersections of their common base classes. Controlled by option -Xkeep-unions.
If option is set, no approximation is done.
Motivations for approximating: There are two. First, union types are departure from Scala 2. From time to
time they lead to failure of inference. One example experiences in Dotty was in a foldLeft, where the accumulator
type was inferred to be Tree before and was now a union of two tree specific kinds. Tree was the correct type, whereas
the union type was too specific. These failures are not common (in the Dotty codebase there were 3, I believe), but
they cause considerable difficulty to diagnose. So it seems safer to have a compatibility mode with Scala 2.
The second motivation is that union types can become large and unwieldy. A function like TreeCopier has a result
type consisting of ~ 40 alternatives, where the alternative type would be just Tree.
Once we gain more experience with union types, we might consider flipping the option, and making union types the
default. But for now it is safer this way, I believe.
|
| |
| |
| |
| |
| |
| |
| |
| | |
Use the equality (where ~ is any form of refinement)
T1 { x ~ R1 } & T2 { x ~ R2 } == T1 & T2 { x ~ R1 & R2 }
We already did the same thing when distributing via "&".
|
| |
| |
| |
| |
| |
| |
| | |
Introduce new cases for AndTypes and OrTypes in methods `derivesFrom`, `baseClasses`, and `baseTypeWithArgs`.
These cases are ultimately needed so that `baseTypeWithArgs` makes sense for union and intersection types.
Also, fixed embarrassing typo in method `TypeBounds#|`.
|
| |
| |
| |
| | |
Eliminated all "Dotty deviations" which were due to lack of auto-tupling.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Auto-tupling should satisfy the following spec.
1. An application `f(args)` where `f` is a non-overloaded method which has a single, non-repeated parameter as its
first parameter list and where args consists of two or more arguments is expanded to `f((args))`.
2. A constructor pattern `C(args)` where `C.unapply` is a non-overloaded method which has a single, non-repeated parameter as its first parameter list and where args consists of two or more arguments is expanded to `C((args))`.
Auto-tupling can be disabled by language feature "noAutoTupling".
Conflicts:
test/dotc/tests.scala
|
|/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add a method "featureEnabled" that checks whether a feature is enabled. Features can be enabled
by imports or by command-line options. The Scala 2.10 way of enabling features by implicits got
dropped, because the use of the feature mechanism is now different.
Previously, features imposed restrictions on what used to work. So it was important to offer
way to avoid the restrictions it that was as smooth as possible, and implicits fit the bill.
Furthermore, features did not change the way things were compiled, so it was OK to test them
only once all types were compiled.
Now, features are essentially switches that change compile time behavior. keepUnions and
noAutoTupling, if on, will modify the way type inference works. So we need to interprete a
switch on the spot, and doing an implicit search to determine a switch value is too dangerous
in what concerns causing cyclic references. At the same time, because we are dealing with
new functionality, there is less of a concern for being able to set or reset features for large
pieces of code with some implicit. You could argue that's not even desirable, and that an
explicit import or command line option is preferable.
Conflicts:
src/dotty/tools/dotc/core/SymDenotations.scala
|
|\
| |
| | |
Allow MiniPhase to be DenotTransformer & LazyVals
|
| |
| |
| |
| |
| |
| | |
All MiniPhases now as are full-fledged phases,
and are given their own periods and can register DenotTransformers.
MiniPhases belonging to same group(list) will be squashed to single phase.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Creates accessors for lazy vals:
1) lazy local vals are rewritten to dotty.runtime.Lazy*** holders
2) for a non-volatile field lazy val create a non-thread-safe accessor and flag:
2.a) if lazy val type indicates that val is not nullable, uses null value as a flag
2.b) else uses boolean flag for sake of performance, method size, and
allowing more jvm optimizations
3) for a volatile field lazy val use double locking scheme, that guaranties no
spurious deadlocks, using long bits as bitmaps and creating companion
objects to store offsets needed for unsafe methods.
Conflicts:
test/dotc/tests.scala
|
| |
| |
| |
| |
| | |
CreateCompanionObjectTests were re-enabled. They failed in a previous version but succeed again in the latest commit.
Also uncurry.scala got renamed to curried.scala.
|
| |
| |
| |
| |
| |
| |
| |
| | |
Many small and large changes. Added samplePhase to demonstrate functionality.
To test functioning, run the compiler with args
tests/pos/uncurry.scala -Ylog:sample,terminal
|
| |
| |
| |
| | |
To bring in line with TreeTransformer terminology.
|
| |
| |
| |
| |
| |
| |
| | |
This makes naming uniform between trees and types, and also avoids the clash with
transform.TreeTransformer. The idea is that transformers are parts of phases, and
have logic that is phase-specific. In particular, a context is passed around when
transforming a tree. Maps are simpler, they only have a T -> T apply method.
|
| | |
|
|\ \
| | |
| | | |
Explicit types for implicits in tests/untried
|
| | |
| | |
| | |
| | | |
tests/untried/neg-with-implicits
|
| | | |
|
|/ /
| |
| |
| | |
for constructors) to tests/untried/pos
|
|\ \
| |/
|/| |
Remove dependency on scala-xml.
|
| |
| |
| |
| | |
Mimic https://github.com/scala/scala/commit/4e9b33ab24bb3bf922c37a05a79af364b7b32b84
|
|\ \
| |/
|/| |
Test and refactor TreeInfo#defPath
|
| |
| |
| |
| | |
Uses a TreeAccumulator, rather than ad-hoc descent through `productIterator`.
|
|/
|
|
|
|
|
|
|
|
|
| |
I'm about to refactor that method in terms of a TreeAccumulator.
Note that I've packaged the test case in `dotty.tools.dotc.ast`
I believe this is the best approach for organizing unit tests:
the import tax is minimized, and use of relative imports is
made less fragile by avoiding creating new packages to test code.
I'll reorganize the other unit tests like this if others agree.
|
|\
| |
| | |
Bullet-proofing companion objects
|
| |
| |
| |
| | |
Dotty currently cannot parse @unchecked annotations in pattern types. That's why the previous commit failed. We need to come back to this and fix it. For the moment, to make on the current branch, the annotation is removed.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Companion class/module computations now also work for local classes and modules. For this to work,
either one of two conditions must be met: (1) some enclosing context refers to a scope that
contains the companions. (2) the context's compilation unit has a typed tree that contains the
companions. (1) is usually true when type-checking, (2) when transforming trees.
Local companions are searched as follows: If (2) holds, we locate the statement sequence containing
the companions by searching down from the root stored in the compilation unit. Otherwise, we search
outwards in the enclosing contexts for a scope containing the
companions.
|
|\ \
| | |
| | | |
Fixes for transforms
|
| | |
| | |
| | |
| | | |
... so that we can add new members to transformed class denotations.
|
| |/ |
|
|\ \
| | |
| | | |
Fixed two problems with annotated types in patterns
|
| |/
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Problem 1: The parser did not accept them. It has to accept a "RefinedType" as an ascription,
not a "WithType" (as it did before), or even a "SimpleType" (as speced in the SyntaxSummary).
Problem 2: Annotations are always typed as expressions. The annotations in question were typed
as patterns before.
Tests in Patterns.scala and in the Dotty compiler itself.
|
|\ \
| | |
| | | |
Add untried tests from scala/test/files/{pos,neg}
|
| | |
| | |
| | |
| | | |
with explicit Unit return type
|
|\ \ \
| |/ /
|/| | |
Post typer transformer
|
| | |
| | |
| | |
| | |
| | | |
A transformer that provides a convenient way to create
companion objects.
|
| | |
| | |
| | |
| | |
| | |
| | | |
Added a prepareForStats&transformStats pair of methods,
which provide a convinient way to alter scopes of
PackageDefs, Templates and Block's.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
1) reorders companion objects so that they allways follow matching
classes
2) removes imports and named arguments
3) rewrites all trees holding types are to TypeTrees
|
| | |
| | |
| | |
| | |
| | | |
Distringuish between ModifierFlags -- which can appear in trees -- and SourceModifierFlags -- which are
modifiers according to the language spec.
|
| |/
| |
| |
| |
| | |
Needs new TypeRef creation method that works for NoPrefix and at the same time
does not need a denotation. This is provided by method TermRef.withNakedSymbol.
|
|\ \
| |/
|/| |
Added test for implicits which fail in Scala 2.11.
|
|/
|
|
| |
Mentioned in scala-user by Haoyi Li on 12-Mar-2014
|
|\
| |
| | |
Fixes t00xx
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Constructors need to be completed in the context which immediately encloses
a class. Otherwise type references in the constructor see the wrong types,
as is demonstrated in t0054. The difficulty here is that the inner class B
nested in A also extends from A. Then it makes a difference whether the constructor
parameter types of B are resolved in the context of B or in the context of A.
Added explanation for context handling of constructors.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This test case exercised several problems:
1.)2.) Two ways to run into a cyclic references. Fixed by
- assuming an early info when completing a typedef, similarly to what is done for a classdef
- doing wellformed bounds checking in a later phase.
Failure to check whether arguments correspond to F-bounds.
- a substitution was missing.
|
| |
| |
| |
| |
| | |
Need to compile the self type of a class not in the context of the class members but one context further out.
Reason: self type should not be able to see the members.
|
|\ \
| |/
|/| |
Fix/#50 volatile
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Volatile checking needs to take all intersections into account; previously these
could be discarded through needsChecking.
Plus several refactorings and additions.
1) Module vals now have Final and Stable flags set
2) All logic around isVolatile is now in TypeOps; some of it was moved from Types.
3) Added stability checking to Select and SelectFromType typings.
Todo: We should find a better name for isVolatile. Maybe define the negation instead under the name
"isRealizable"?.
|