| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
| |
Various fixes to the tree transformer.
In the denotation transformer we now keep self types around because otherwise
sourceModule would stop to work.
Conflicts:
src/dotty/tools/dotc/core/transform/Erasure.scala
|
|
|
|
|
|
| |
Fix of d6df293d2120f2247198cb6646a23c338f7dcbbf. It turned out the original commit
was faulty in that iterator.flatten did not typecheck. The problem is fixed in this
commit and flatten is added to the collections test.
|
|
|
|
| |
stripImplicits needs to take polytypes into account.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
test case t0273. Was positive in Scala 2, is now deemed to be negative.
Two two definitions
def a = () => ()
def a[T] = (p:A) => ()
do have matching signatures, so should constitute a double definition.
I previously thought that we can get away if the two definitions have
different result types, but then you immediately have a problem because
the denotations have matching signatures for the pruposes of "&" yet
cannot be merged. Which of the two definitions would override
a definition in a base class is then an arbitrary decision.
|
|
|
|
|
| |
baseTypeWithArgs now also keeps track of refinements in the subtypes. Without
that, the approximated lub in t1279a is too coarse and the program fails to typecheck.
|
|
|
|
| |
Mostly Java interop tests which are not yet supported. The test infrastructure for Java ocmpilation and the java parser from Scala are still missing.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(and also of t0625, which reappeared).
Several fixes were made. In summary:
1. Naming and representation of KigherKinded traits changed. It's now $HigherKinded$NIP where
the letters after the second $ indicate variance (N)egative, (I)nvariant, (P)ositive. The HKtraits
themselves are always non-variant in their parameters.
2. When deriving refined types over higher-kinded types, the variance of a type alias
is the variance of the new type constructor.
3. isSubTypeHK was changed, as was the position from where it is called.
4. appliedTo also works for PolyTypes.
|
|
|
|
|
|
| |
The type of self name "x" was taken to be the thisType of the current owner.
But the current owner was a local dummy of the class in question, so the ThisType
was NoPrefix. Inserting an enclosingClass fixes the problem.
|
|
|
|
|
|
|
|
| |
The original test is now in error because the type Meta in the prefix Meta#Event
is not stable and contains an abstract member Slog.
Even after removing Slog, the test in pos was still in error because the bound type parameters
were incorrectly recognized as abstract members. This has been fixed by the changes to Types.
|
| |
|
|
|
|
| |
Need to do unit discarding also in selection prototypes.
|
|
|
|
| |
Needed an extra case in isSubType.
|
|
|
|
|
|
| |
Method type comparison via <:< yielded false if the signatures of the two method types differed.
This is too strict, because methods can have the same parametyers but different result types and still
be in a subtype relationship. We now onyl demand that the sighatures have the same parameters.
|
|
|
|
| |
which all pass.
|
|
|
|
|
|
|
|
|
| |
Was previously wrapped in a
package <empty>
but the resulting tree had no position, which caused a Typer assertion. If now
represented as EmptyTree.
|
|
|
|
|
|
|
| |
Previously, only implicit method types were eligible as views. This is too strict,
as it rules out view bounds. We now also consider types that derive from Function1.
The reason for not allowing any type is that this would cause us to check many more
types for applicability when an implicit view is searched.
|
|
|
|
|
|
| |
Added more tests which all pass, except for tests in disabled and pending.
t0694 went from pos to neg, because the kind of alias type used in t0695 is no longer supported.
|
|
|
|
| |
A debug assertion in implicitSearch gave a false alarm and was removed.
|
|
|
|
| |
_root_ is now entered into an enclosing context.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Two fixes were needed
1) When typing a function value (x1: T1, ..., xN: Tn) => e, don't unconditionally issue an error
if the expected function type arity is different from N. Instead, issue an error only
if one of the types T1, ..., Tn is absent. The idea is that only then we need to
consult the expected type for the parameter type. This allows to fix the problem later
by an implicit conversion applied to the function value.
2) When eta-expanding, do not automtically take the arity of the expected function value as the
arity of the generated lambda. Instead, take the method's arity, and copy method parameters
into the lambda in case the arities are different.
|
|
|
|
|
|
|
|
| |
Test t0288 moved to disabled due to lack of Java interop.
Test t0273 fixed by relaxing double def condition: We only regard two
definitions that define the same name and have exactly the same signature
as double definitions. Previously, signatures that defined the same parameters
were also excluded.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Made desugaring hygienic. Trees that are derived from some other tree are no longer stored as simple
untyped Ident trees, but as TypeTrees that know how to derive their types from some other type.
Test cases in pos: hygiene.scala, t0054.scala and t0085.scala.
The comment in hygiene.scala points to the difficulties we are facing. In particular, we need type
trees that can rebind some references of a source type to local occurrences with the same name. t0054.scala is similar to hygiene.scala. t0085.scala is trickier, but also related. Essentially the problem there is that we have a class
that inherits its outer class. In this case it is important to resolve an identifier in the right context. The identifier added to the copy method of a case class must be resolved outside the class (just like the same
identifier in the constructor of that case class).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
| |
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
|
|\
| |
| | |
Bullet-proofing companion objects
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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.
|
|\ \
| | |
| | | |
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.
|
|/
|
|
| |
Mentioned in scala-user by Haoyi Li on 12-Mar-2014
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
| |
1) New method compileFiles which allows one to compile the content of a directory one file or directory
after another.
2) max constraint is printed to typr.
Added new test pos_all. Other pos tests can be retired.
|
| |
|
|
|
|
|
|
|
|
| |
Two fixes:
1) Avoid the infinite recursion in checkAccessible if the accessibility check fails.
2) Make accessibility succeed for the test, and in general if the target denotation does not have a symbol.
Added original test in pos and a negative test which makes accessibility fail.
|
|
|
|
|
|
|
| |
What was `baseType` and is now `baseTypeRef` only computes the prefix of of basetype, not the type arguments.
If type arguments need to be included there is `baseTypeWithArgs`. The reason is that type arguments are usually already encoded as member types. But this was a source of errors because in Scala 2, baseType includes the type arguements.
(also added test file structural.scala forgotten from last commit)
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Template parents always were constructor calls before. This is not correct because in a situation like the one
elaborated in templateParents, the trait D has the class C as supertype, but it does not call its constructor (in fact, if we added a () parameter list to make it into a constructor this would be wrong because C takes parameters.
Now parents can be either types or constructor calls.
The logic in Namer and Typer that deals with parents is cleaned up. In particular, we now construct any synthetic class parent as a full type, before calling normalizeToClassRefs. This obviates the forwardRefs logic that needed to be done in a cleanup of Namers.
Also added two more checks: (1) All parents except the first one must point to traits. (2) A trait may not call a parent class constructor.
|
|
|
|
|
|
|
|
|
|
|
| |
When froming the &=merge of two denotations, we now discard denotations which have inaccessible symbols.
The reason for this change is that, without it, the following code gives the warning "cannot merge Int and Int() as members of one type, keeping only Int()".
val m = new java.util.HashMap
m.size
Indeed java.util.HashMap has a filed and method which are both named size. The field is package private, so is inaccessible from outside java.util, however.
|
|
|
|
| |
Compiler tests can now be run with configurable number of compilers and runs in a compiler.
|
| |
|
| |
|
|
|
|
|
| |
1) Simplify skipped one level over arguments of AndType/OrType.
2) variances needs to follow instantiated typevars
|
|
|
|
|
|
| |
Now this is required only for members of a template. Local statements can still have implicits with no result type. (Maybe we need to get back on this).
Also, changed Dotty itself and tests to adhere to the new restriction.
|
|
|
|
|
|
|
|
| |
In particular, need to unify polyparams before replacing one with the other, if the result wiould lead to a cyclic constraint.
Also: Avoid setting `inst` field of a type variable if a subtype operation is in progress, because the constraint might be retracted, and the instantiation should be retracted with it.
Third, tighter checks of cyclic constraint, and deep subtype recursions can now be demanded to cause an abort.
|
| |
|
|
|
|
| |
Also: forward type parameter references of newly added to class scope. This is necessary, or the pattern match in test.scala would fail. Need to find out why.
|
|
|
|
| |
It needs to follow type aliases in order not to give false indications what variables are contained in a type.
|