aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Fix bounds checking of hk applied typedMartin Odersky2016-07-147-53/+67
| | | | | Previous logic could only handle classes as constructors. Also, address other reviewers comments.
* Allow hk parameters in lower boundsMartin Odersky2016-07-137-28/+23
|
* Simplify variance computationsMartin Odersky2016-07-131-6/+2
|
* Make rewritings of hk applications configurableMartin Odersky2016-07-134-18/+42
| | | | | | | | | Beta-reduce only if `Config.simplifyApplications` is true. Turning off beta-reduction revealed two problems which are also fixed in this commit: 1. Bad treatement of higher-kinded argyments in cyclicity checking 2. Wrong variance for higher-kinded arguments in TypeAccumulator
* Optimize hk comparisonsMartin Odersky2016-07-132-11/+24
| | | | Use (cached) superType where possible.
* Enable test for fixed #1181: Typer should preserve aliases in TypeTreesGuillaume Martres2016-07-121-0/+0
| | | | This was fixed two commits ago.
* Drop restriction to 2nd order hk typesMartin Odersky2016-07-126-12/+60
| | | | Allow hk type parameters to be higher kinded themselves.
* Avoid dealiasing on type applicationMartin Odersky2016-07-1210-66/+103
| | | | | | | | | When applying a type alias of a type lambda, keep the original application instead of reducing. But reduce anyway if - the reduced type is an application where the type constructor has the same kind as the original type constructor, or - some of the arguments are wildcards.
* Allow definition of new types in refinementsMartin Odersky2016-07-127-11/+65
| | | | | Allow definition of types in refinements that do not appear in parent type.
* ExtractAPI: Add support for RecTypeGuillaume Martres2016-07-121-2/+14
|
* ExtractAPI: Add support for TypeLambdasGuillaume Martres2016-07-121-4/+11
| | | | | Before the new higher-kinded implementation this wasn't needed because lambdas were just RefinedTypes.
* ExtractAPI: Do not miss value parameters of PolyTypesGuillaume Martres2016-07-128-0/+55
| | | | | This bug has been present since we merged this phase. In the new test `signature-change`, only "Case 1" did not pass before.
* Address reviewers commentsMartin Odersky2016-07-1111-49/+55
|
* Fix SI-2712Martin Odersky2016-07-1113-22/+163
| | | | | Allows partially instantiated types as type constrictors when inferring higher-kinded types.
* More testsMartin Odersky2016-07-112-0/+24
|
* Drop compareAliasedRefinedMartin Odersky2016-07-112-37/+4
| | | | | | | | If there is a new named type param scheme it will almost certainly not need something like compareAliasedRefined. Also: harden printer to compute less and thereby avoid a possible NPE.
* Refactor Typevar instantiationMartin Odersky2016-07-112-43/+52
| | | | | It seemed more cohesive to keep the concepts of "instanceType" and "approximation" side-by-side.
* Add a case where caching was missing.Martin Odersky2016-07-112-3/+5
| | | | Gave several times improvement for linker.
* Do the right thing for NoDenotation.mapInfoMartin Odersky2016-07-111-0/+1
|
* Unify aliases when taking a lub.Martin Odersky2016-07-111-2/+18
|
* Less eager removal of type parameters from constraintMartin Odersky2016-07-113-24/+26
| | | | | | | | | | | | | | | | | Previously, a unified or otherwise instantiated type parameter would be removed from the constraint, i.e. if it was the last parameter of its polytype to be instantiated, the polytype would be dropped. This is a potential problem since it means that the alias `param = instance` is forgetten whereas we might still need it in the same subtype test sequence. The solution is to wait with cleaning up polytypes until all associated type variables are fully instantiated. This change uncovered another bug, where we failed to follow an existing instantiation when adding to a constraint. This manifested itself in deep subtype errors for run/colltest1 and some others.
* Disallow higher-kinded types that simulate general existential typesMartin Odersky2016-07-117-7/+125
| | | | | | | | | | | We cannot handle such types in general. So we now check that a hk application C[args] where some of the arguments are wildcards does not have as a supertype a hk application ([X] -> B)[args]
* Fix bug in printing untyped New nodes.Martin Odersky2016-07-111-1/+5
| | | | Printed as <notype> before.
* Avoid orphan parameters in Constraint#replaceMartin Odersky2016-07-111-1/+1
| | | | | The previous implementation of `replace` made it possible that formerly constrained parameters would stay on embedded in bounds of other constraint enrties.
* Drop Config.checkKindsMartin Odersky2016-07-1113-107/+20
| | | | | Allows us to drop also the involved knownHK method. Lots of other cleanups.
* Refactorings of GenericTypes and underlying/upperboundMartin Odersky2016-07-119-146/+100
| | | | | | | 1. Make genericType a trait instead of a class. 2. Make TypeLambda a type proxy 3. Split underlying in TypeProxy into underlying and superType 4. Cleanups in many other places
* Revert complications in asMemberOfMartin Odersky2016-07-112-25/+4
| | | | | | We needed fairly specific code to make the refinement based hk encoding work without cyclic references. With the new encoding these complications are no longer needed.
* Cleanup of Signature matchingMartin Odersky2016-07-114-14/+19
| | | | | Eliminate sameParams, add comments. Also, minor cleanups elsewhere.
* Simplify appliedToMartin Odersky2016-07-111-23/+9
| | | | Only use one method instead of a succession of two.
* Get rid of BindingKindMartin Odersky2016-07-115-65/+17
| | | | | Under direct hk encoding this is no longer needed. Also, drop now redundant pieces of widenForMatchSelector.
* Handle signatures over uninstantiated type variablesMartin Odersky2016-07-115-12/+40
| | | | | | | | | | | | | Taking the signature over a type with uninstantiated type variables means that the signature can change later, once we instantiate the type variable. We handle this by recording uninstantiated positions of signatures and fixing them in PostTyper, when type variables are instantiated. - This allows to drop the kludge of "normalizing" in derivedRefinedType Dropping this initially revealed the problems with under-determined signatures. Now that these problems are fixed, we can drop for good.
* Remove refinement encoding of hk typesMartin Odersky2016-07-1117-653/+112
| | | | | | | | | | Remove the code that implemented the encoding of hk types using refinements. Drop the notion that RefinedTypes can be type parameters. This is no longer true under the new representation. Also, refactoring MemberBinding -> TypeParamInfo
* Fixes for printing under -Ytest-picklerMartin Odersky2016-07-112-2/+3
| | | | | | | | | | - Make printing package ids more robost Crashed before when printers were turned on during test pickling mode. - Make Denotation#bringForward more robost Assertion failed before when printers were turned on during test pickling mode.
* Fix parameter unpicklingMartin Odersky2016-07-111-10/+10
| | | | | | | | Parameter names always come in as term names, ahve to be explicitly converted to type names. The previous implementation used a cast instead of a conversion, which caused a ClassCastException. For symmetry we model readParamNames such that it returns a List[Name] which has to be explicitly converted to a List[TermName] or a List[TypeName], using a map.
* Drop assertion in TypeMapMartin Odersky2016-07-112-6/+6
| | | | | | | The deleted assertion could fail for code that was erroneous. - Enable new hk scheme.
* Special case for TypeRefs in upperboundMartin Odersky2016-07-111-1/+6
| | | | | | Done for efficiency. Also that way we would do something meaningful if the type constructor was, say, Nothing. However, that case is now rules out anyways.
* Fixes to hk comparisonsMartin Odersky2016-07-111-14/+8
| | | | | | | | | | | - Follow aliases in isMatchingApply - Avoid comparing with TypeBounds in compareHkApply - Generalize kind adaption in liftIfHK Previously we only covered EtaExpansion/reduction. Need to generalize this to the case where a type is partially applied. Test case is pos/partialApplications.scala
* Don't dealias when applying typesMartin Odersky2016-07-111-4/+6
| | | | | | | | | | | | Keep the higher-kinded application instead. This should be better for inference. We have to evaluate the performance impact. Maybe dealias if the kind stays the same? Also, reduce Nothing[...] to Nothing Nothing cannot be a type constructor in a HK application because it does not have type parameters. Avoid the problemn by the reduction above.
* Don't make * types higher-kinded in avoidMartin Odersky2016-07-113-12/+14
| | | | Also, fix error counts in tests for new hk scheme.
* Handle WildcardType in liftToClassesMartin Odersky2016-07-112-1/+2
|
* Handle findMember for unreduced hk types.Martin Odersky2016-07-111-3/+22
| | | | | | - Follow upper bound, as before. - But if type constructor is a lambda, needs special treatment.
* Beta-reduce with wildcard arguments if this is safe.Martin Odersky2016-07-112-9/+45
| | | | | | | | Makes pos/partialApplications compile. - Fix appliedTo for aliasTypes Returned a general TypeBounds instance before.
* When comparing types revert eta-expansion as neededMartin Odersky2016-07-113-14/+53
| | | | | | | | | | | | | The problem is that some existential types read from Java (and Scala as well? not sure) appear as naked typerefs. They consequently get expanded via eta expansion to type lambdas. This commit compensates for this by collapsing an eta expansion if this can make a subtype tests succeed or a union or intersection be legal. Also, take hk types into account for liftToClasses Needs to special-treat TypeLambda and HKApply since otherwise we risk creating malformed And-types.
* Skip typeBounds when computing upperBoundMartin Odersky2016-07-111-1/+1
|
* Drop bounds checking for type lambdasMartin Odersky2016-07-111-5/+13
|
* Allow for HK types in widenForMatchSelectorMartin Odersky2016-07-111-2/+4
|
* Refactor handling of unpickled type paramsMartin Odersky2016-07-117-64/+103
| | | | | | | | | | | | | | | | | | | | | | | Under the new hk scheme we discovered that type parameters are sometimes unpickled in the wrong order. The fault was always present but the previous hk schemes were somehow lenient enough in their subtyping rules to not discover the problem. E.g., when reading Coder.scala, dotc believed that parameter `A` of `TraversableOnce#BufferedCanBuildFrom` is higher-kinded and parameter `CC` is first-order where the opposite is true. This commit hardens the way we read type parameters in order to make this swap impossible by design. - Revert auto-healing in derivedAppliedType The healing hid a real error about order of type parameters in Scala2 unpickling which was fixed in the previous commits. The healing caused Map.scala to fail because it is possible that type parameters are mis-prediced to be Nil in an F-bounded context. - Smallish fixes to type applications
* Avoid cyclic errors when reading nsc.GlobalMartin Odersky2016-07-111-0/+7
| | | | | | | With the change in the next commit this addition is needed to make i859.scala compile. Previously the same effect was achieved accidentally by `updateTypeParams`. The comment admits that we do not really know why the functionality is needed.
* Handle TypeLambdas in findMemberMartin Odersky2016-07-112-10/+7
|
* Ensure wildApprox maintains kindsMartin Odersky2016-07-111-0/+5
| | | | | | When approximating the constructor of an ak apply to a wildcard type, approximate the whole application by WildcardType. Otherwise we might have a wildcardtype with hk bounds as result.