aboutsummaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* add stripAnnots method to Type to unwrap AnnotatedTypesOndrej Lhotak2014-12-131-0/+5
|
* fix dealias to handle AnnotatedTypes transparentlyOndrej Lhotak2014-12-131-0/+2
|
* fix stripTypeVar to handle AnnotatedType transparentlyOndrej Lhotak2014-12-131-0/+2
|
* Disable implicit conversions between from `Null` and `Nothing`.Martin Odersky2014-12-131-1/+3
| | | | | | | | | | | | This is necessary to reject code like val x: Boolean = null Without the restriction, this code would typecheck and expand to val x: Boolean = Predef.Boolean2boolean(null) since `null` counts as a value of type `java.kang.Boolean`.
* Merge pull request #277 from dotty-staging/change/drop-not-nullodersky2014-12-135-10/+10
|\ | | | | Change/drop not null
| * Remove obsolete mentions of the NotNull classGuillaume Martres2014-12-132-2/+2
| |
| * Drop NotNull class and associated code.Martin Odersky2014-12-134-7/+2
| |
| * Fix subtyping of null and refined types.Martin Odersky2014-12-131-1/+6
| |
* | Fix #248: Class cannot inherit from refinement typesMartin Odersky2014-12-133-14/+20
|/ | | | | | We now check that classes do not inherit from refinement types (unless they are an encoding of parameterized types), nor from & or | types.
* Merge pull request #274 from smarter/fix/period-of-phasesDmitry Petrashko2014-12-131-2/+2
|\ | | | | Phases: set the period correctly
| * Phases: set the period correctlyGuillaume Martres2014-12-121-1/+1
| |
| * Phases: The operator <= does not need a context anymoreGuillaume Martres2014-12-121-1/+1
| |
* | Merge pull request #265 from dotty-staging/fix/type-seqliteralDmitry Petrashko2014-12-122-2/+9
|\ \ | |/ |/| Pass right prototype to SeqLiteral elements.
| * Better typing of seqLiteral in erasure.Martin Odersky2014-12-052-3/+6
| | | | | | | | Fixed two problems with previous commit.
| * Pass right prototype to SeqLiteral elements.Martin Odersky2014-12-051-0/+4
| |
* | Fix by-name argumentsMartin Odersky2014-12-054-16/+17
| | | | | | | | | | | | Previous scheme relying on Attachments was fragile. We now use a dummy method application, which transmits info reliably to Erasure.
* | Fixed formatting (wrong indentation)Martin Odersky2014-12-051-1/+1
| |
* | Simplified code a bitMartin Odersky2014-12-051-11/+7
| |
* | Fix erasure of trait infoMartin Odersky2014-12-054-26/+47
| | | | | | | | | | | | | | | | After erasure, traits always extend object, and no other class. The change flushed out three more problems, one in the handling of Super trees in erasure, another in bridge method generation. and a third that class RepeatedParam had Seq, which is a trait, as first parent.
* | Merge pull request #261 from dotty-staging/fix/type-seqliteralDmitry Petrashko2014-12-046-7/+58
|\| | | | | Fix/type seqliteral
| * Add new SeqLiterals phase.Martin Odersky2014-12-032-0/+50
| | | | | | | | | | Replaces SeqLiterals by JavaSeqLiterals, because the latter's (array-)type is preserved after erasure.
| * Replace `==` with `eq` when determining unique typesMartin Odersky2014-12-031-4/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When hash-consing TypeBounds, RefinedTypes and NamedTypes, we now check the argument types with `eq`, where before it was `==`. This is necessary for TypeBounds, because it makes a difference whether a TypeBound has `eq` parts (then it is a type alias) or not. So we cannot merge type aliases with non-aliases. The symptom of the problem was when compiling Patterns.scala twice with the new SeqLiterals phase (next commit) enabled. On second run, we encountered an ArrayType[>: String <: String], even if we only created an ArrayType[String]. This was a consequence of the two types being identified by uniques. Todo: Change the system so that type aliases are recognized more robustly. But the present change seems to be useful anyway because it speeds up uniques hashing. I verified that the stricter condition on uniques creates less than 1% more types than before. So the speedup of hashing looks worthwhile.
| * Simplification in type assigning SeqLiteralsMartin Odersky2014-12-032-2/+1
| |
| * made ArrayType constructor phase awareMartin Odersky2014-12-031-1/+2
| | | | | | | | | | | | | | | | | | Avoid to create ArrayTypes after erase. Note that the *extractor* does not recognize JavaArrayTypes as ArrayTypes. Doing so would create an infinite loop in sigName. Generally, we do not want to ppaper over the difference when analysing types.
* | Merge pull request #260 from dotty-staging/fix/method-implsDmitry Petrashko2014-12-033-24/+44
|\ \ | |/ |/| Make sure all non-deferred methods are implemented
| * Make sure all non-deferred methods are implementedMartin Odersky2014-12-033-24/+44
| | | | | | | | | | | | | | | | | | Checked by a new post condition after memoize. Two bugs were detected and fixed by the condition (1) Memoize did not implement getters and setters of ParamAccessors (2) ResolveSuper did not implement super accessors in non-trait classes.
* | Fix TreeTransfrom ignoring SeqLiterals.Dmitry Petrashko2014-12-031-1/+1
|/
* Merge pull request #254 from dotty-staging/fix/newArray-v2Dmitry Petrashko2014-12-0111-15/+107
|\ | | | | Fix array creation v2
| * Previous scheme was buggy; leaked Array types to backend.Martin Odersky2014-11-2811-15/+107
| | | | | | | | | | | | Now: All new Array[T] methods are translated to calls of the form dotty.Arrays.newXYZArray ...
* | Merge pull request #242 from dotty-staging/fix/mixinsDmitry Petrashko2014-11-263-12/+19
|\ \ | |/ |/| Fix/mixins
| * Removed println's left accidentally in code base.Martin Odersky2014-11-261-2/+0
| |
| * Fixed data race in ResolveSuperMartin Odersky2014-11-262-10/+15
| | | | | | | | | | | | | | | | | | | | The datarace happened because for method "transform" implemented by ResolveSuper which disambiguated overridden methods. Previously, there was a reference FirstTransform.this.transform of type termRefWithSig to the method implemented in a super trait. Now the same reference points to the newly implemented method. Solved because ResolveSuper now generates symbolic references.
| * Fix of intersection not emptyMartin Odersky2014-11-261-2/+6
| | | | | | | | The bug caused new version of FirstTransform to compile with errors.
* | Allow refinements that refine already refined types.Martin Odersky2014-11-262-8/+36
|/ | | | | | | | | | | | | | | | | | | | | | | | | | Previously, a double definition errorfor `T` was produced in a case like this: type T1 = C { T <: A } type T2 = T1 { T <: B } This was caused by the way T1 was treated in the refinement class that is used to typecheck the type. Desugaring of T2 with `refinedTypeToClass` would give trait <refinement> extends T1 { type T <: B } and `normalizeToClassRefs` would transform this to: trait <refinement> extends C { type T <: A; type T <: B } Hence the double definition. The new scheme desugars the rhs of `T2` to: trait <refinement> extends C { this: T1 => type T <: B } which avoids the problem. Also, added tests that #232 (fix/boundsPropagation) indeed considers all refinements together when comparing refined types.
* Simpler cycle detectionMartin Odersky2014-11-243-23/+15
| | | | | | | | | | | Turns out that the last commit was a red herring. None of the hoops it jumped though was necessary. Instead there was a bug in isRef which caused `&` to erroneously compute T & Int as Int. The bug was that we always approximated alias types by their high bound. But in the present case, this leads to errors because U gets 'bounds >: Nothing <: Any', but it was still an alias type (i.e. its Deferred flag is not set). The fix dereferences aliases only if their info is a TypeAlias.
* Fixed cycle detection.Martin Odersky2014-11-242-1/+20
| | | | Now detects the cycles reported by @retronym
* Cyclicity checking independent of positions.Martin Odersky2014-11-241-1/+5
| | | | More robust cyclicity check which does not depend on source positions.
* Updated refinement checking.Martin Odersky2014-11-242-8/+50
| | | | Toucher checks, but only deprecated warnings instead of errors.
* Better printing of variant types with wildcard arguments.Martin Odersky2014-11-242-6/+20
| | | | | We used to approximate these by their bounds, but this is confusing. See comment in printbounds.scala.
* checkBounds refactoringMartin Odersky2014-11-244-30/+44
| | | | | | Move core logic to TypeOps, only leave error reporting in Checking. That way, we have the option of re-using the code as a simple test elsewhere.
* Take off the training wheels for refined type comparisons.Martin Odersky2014-11-241-19/+2
|
* Fix to checkBoundsMartin Odersky2014-11-242-4/+8
| | | | | Need to account for the fact that some argument types may be TypeBoudns themselves. The change makes Jason's latest example work.
* Fixes in TypeComparer for RefinedTypes.Martin Odersky2014-11-243-46/+73
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The previous scheme did not propagate bounds correctly. More generally, given a comparison T { X <: A } <: U { X <: B } it would errenously decompose this to T <: U, A <: B But we really need to check whether the total constraint for X in T { X <: A } subsumes the total constraint for X in T { X <: B } The new scheme propagates only if the binding in the lower type is an alias. E.g. T { X = A } <: Y { X <: B } decomposes to T { A = A } <: U, A <: B The change uncovered another bug, where in the slow path we too a member relative to a refined type; We need to "narrow" the type to a RefinedThis instead. (See use of "narrow" in TypeComparer). That change uncovered a third bug concerning the underlying type of a RefinedThis. The last bug was fixed in a previous commit (84f32cd814f2e07725b6ad1f6bff23d4ee38c397). Two tests (1048, 1843) which were pos tests for scalac but failed compling in dotc have changed their status and location. They typecheck now, but fail later. They have been moved to pending. There's a lot of diagnostic code in TypeComparer to figure out the various problems. I left it in to be able to come back to the commit in case there are more problems. The checks and diagnostics will be removed in a subsequent commit.
* Changed underlying type of RefinedThisMartin Odersky2014-11-241-1/+1
| | | | | | | Now: The underlying refined type. Was: The parent of the type. We need the change because RefinedThis is used as a narrowed version of the underlying refinedType (e.g. in TypeComparer rebase), and the old scheme would lose a binding of that type.
* More robust isSetter test.Martin Odersky2014-11-241-1/+1
| | | | Avoids cyclic references caused by forcing info too early.
* More robust TypeVar printing.Martin Odersky2014-11-241-3/+7
| | | | | Avoid the crash if origin is not associated with a bound in the current constraint.
* Fixed type adaptation problem in checkBoundsMartin Odersky2014-11-241-1/+3
| | | | | | | We need to adapt type parameter bounds with an as-ssen-from to the prefix of the type constructor. Makes pos/boundspropagation pass.
* Make reduceProjection use lookupRefinedMartin Odersky2014-11-241-69/+48
| | | | | | | | | | | Needed some fixes to lookup refined. The potential alias type is now calculated by taking the member of the original refined type, instead of by simply following the refined info. This takes into account refinements that were defined after the refinement type that contains the alias. The change amde another test (transform) hit the deep subtype limit, which is now disabled.
* Improve simplifications of type projections.Martin Odersky2014-11-242-1/+40
| | | | | | | | | | An example where this helps: Previously, the private value `mnemonics` in Coder.scala was fof the form Lambda$IP { ... } # Apply It now simplifies to a Map[...] type.
* Do not skip packages in FirstTransformDmitry Petrashko2014-11-221-1/+2
| | | | Packages also get a JavaDefined flag, but they shouldn't be removed by FirstTransform.