aboutsummaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* Fix SI-2712Martin Odersky2016-07-116-18/+84
| | | | | Allows partially instantiated types as type constrictors when inferring higher-kinded types.
* 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-113-5/+63
| | | | | | | | | | | 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-111-2/+4
| | | | 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.
* Change underlying of HKApplyMartin Odersky2016-07-111-2/+10
| | | | | It's now the same as upperBound, i.e. the underlying of the type constructor re-applied to the arguments.
* Tweaks to appliedToMartin Odersky2016-07-111-4/+11
| | | | | | | | | - Allow appliedTo over TypeBounds - Difference in handling of empty type parameter lists - Always consider EtaExpansions in appliedTo EtaExpanions were not simplified before in Coder.scala and collections.scala. Need to come back and simplify appliedTo logic.
* Refactoring of PolyType and TypeLambdaMartin Odersky2016-07-1116-102/+124
| | | | | | | Make them each inherit from common BaseType GenericType. That way we avoid inheriting accidentally stuff from PolyType in TypeLambda. Also, Fix adaptation of type lambdas. Don't confuse them with PolyTypes.
* Various hk related fixes in typesMartin Odersky2016-07-113-45/+73
| | | | | | | | - Handle hk applications in normalizeToRefs - Handle type lambdas in classSymbol(s) - Fix variances computation in type lambdas - Provide type parameters for uncompleted type lambdas - Revert TermOrHK type characterization
* Fix printing of type lambda trees and typesMartin Odersky2016-07-112-3/+5
|
* Fix appliedTo and typeParams, and higher kinded subtyping testsMartin Odersky2016-07-113-65/+196
| | | | Add existential type elimination for HKApply
* Make Constraint#bounds work for aliasesMartin Odersky2016-07-111-3/+3
| | | | | Bounds did not do the right thing if a constrain parameter was aliased.
* Start new, direct HK schemeMartin Odersky2016-07-1118-186/+478
| | | | | - Re-introduce newHK option. Label some things that will be removed with OLD.
* Remove old hk schemeMartin Odersky2016-07-1123-688/+104
| | | | | | | | | | | | - Simplify RefinedType - Drop recursive definition of RefinedThis - this is now taken over by RecType. - Drop RefinedThis. - Simplify typeParams The logic avoiding forcing is no longer needed. - Remove unused code and out of date comments.
* Various tweaksMartin Odersky2016-07-114-69/+86
| | | | | | | | | | | | | | | | | | | | | | - Swap order of subtype tests The theory is that if two refined types have the same refined name, then they are likely to be of related classes. So it seems more fruitful to check the argument before the typeconstructor because that way we test the part that's more likely to fail first. Rough observations seem to indicate a 3% improvement in the junit test time. - Cleanups Drop some unnecessary cases; improve comments. - Smarter handling of LazyRefs in betaReduce Try to combine type constructor and arguments under a common LazyRef. - Optimize RecType/RecType comparisons - Fix compareHkLambda, make it check variances.
* Deal with nested findMember calls over the same RecTypeMartin Odersky2016-07-111-5/+43
|
* Change testsMartin Odersky2016-07-114-3/+22
| | | | | | | | | | | | | | | | - compileMixed failed because there was a cycle between immutable.Seq (compiled) and parallel.ParSeq (loaded from classfile). Inspection of the completion log (turn completions Printer on) and the stack trace showed that there's nothing we can do here. The old hk scheme did not go into the cycle because it did not force an unrelated type. I believe with enough tweaking we would also hva egotten a cycle in the old hk scheme. The test is "fixed" by adding parallel.ParSeq to the files to compile. - Disable named parameter tests Those tests do not work yet with the revised hk scheme. Before trying to fix this, we should first decide what parts of named parameters should be kept.
* Avoid creating dependent function types for closuresMartin Odersky2016-07-111-1/+7
| | | | | | | | Without this step, anonymous functions can have dependent types which causes the parameter references to "leak out" to types in the environment in illegal ways. This caused a tasty failure for Typer before (not sure why the failure was not observed under the old hk scheme).
* Make TypeAccumulators follow LazyRefsMartin Odersky2016-07-112-0/+7
| | | | | | | | | | | | | | | TypeMaps do the same, so it is logical, and helps prevent subtle errors as when we mispredicted whether a RecType contains references that point to it. Also, add normalizeHkApply to homogenize Fixes some discrepancies in Tasty typing. Also, homogenize skolem types Skolem types are eliminated by pickling, so they should not appear in the "before-pickling" output.