aboutsummaryrefslogtreecommitdiff
path: root/tests/pos
Commit message (Collapse)AuthorAgeFilesLines
* Partially reverting of 08c6eacaMartin Odersky2014-09-051-11/+0
| | | | | | | | | | | | | | | Partial revert of 08c6eaca "this type is a term ref to the source module". The problem with doing this is that it introduces spurious outer references. An inner module that contains self referenves always needs the directly enclosing class. The revert avoids this dependency by making ThisTypes always point to TypeRefs. Several other changes were necessary to make the builds pass: TypeRefs had to get prefixes after erasure so that they can be reloaded. Symbols of such typerefs had to be retrieved without forcing a denotation. One test (blockescapes.scala) fails and is moved to pending, awaiting further resolution. Also two other new tests in pending which currently fail (and have failed before).
* Add outer parameters in constructor calls.Martin Odersky2014-08-311-6/+6
| | | | | 1) Constructors of inner classes get outer parameters 2) Outer arguments are passed as needed.
* New phase: outerAccessorsMartin Odersky2014-08-311-0/+48
| | | | | | | | The new phase replaces attachOuter. It creates outer accessors where needed but does not yet define outer parameters or pass outer arguments. It should run before pattern matcher, so that pattern matcher can access the outer fields of scrutinees.
* Fixes to erasure to make -Ycheck:all work.Martin Odersky2014-08-282-0/+15
| | | | | | | | Main change: Introduce JavaArrayType as a new type constructor for Java erased array. Translate all methods of Array class during erasure to primitive operations on arrays. Some other small fixes for more localized problems.
* Check that idents don't assume magic.Martin Odersky2014-08-241-1/+5
| | | | | | In TreeChecker, make sure that every identifier has a type with an elidable prefix. This excludes identifiers pointing to members of random prefixes without making the prefix explicit in the tree as part of a Select node.
* Make ElimByName change owners of by-name parametersMartin Odersky2014-08-181-0/+21
| | | | | | | | | By-name parameters did not have their owner changed before. This was not noticed in treecheck because the method generated for the closure did not have its Method flag set by accident, so owmer checking ignored the new val. Once the Methgod flag was set, owner checking failed. Once changeOwner was added, a whole lot of other things failed, which led to the fixes in the previous commits.
* Split Nullarify functionality to ElimByName, ErasureMartin Odersky2014-08-171-3/+3
| | | | | | | | | | | | | New phase ElimByName elimintaes by-name parameters. All other occurrences of parameterless methods and ExprTypes are eliminated in erasure. The reason for the split like this is that it is very hard for Nullarify to determine when to insert ()'s. The logic for this is fragile because we need to look at previous denotations which might not exist (before splitter) or might result from a merge between parameterless and nullary methods. In Erasure the same is much simpler to achieve.
* Fix and enable RefChecksMartin Odersky2014-08-137-46/+49
| | | | RefChecks is now enabled. Some of the tests had to be fixed to be refchecks-correct.
* Re-enabled checkbounds testsMartin Odersky2014-08-081-39/+0
| | | | | | | | Now that F-bunded types are treated more robustly, we can check bounds for non-emptyness during Typer. This unvealed one wrong test (wonder how that passed scalac?), which got moved to neg.
* Enabled variance checkingMartin Odersky2014-08-033-2/+5
| | | | | | | Variance checking is now run as part of type-checking. Fixed tests that exhibited variance errors. Added tests where some classes of variance errors should be detected.
* Add test for tailcallDmitry Petrashko2014-07-221-0/+4
| | | | Test for order of type parameters in recursive call
* Merge pull request #149 from dotty-staging/fix/#148Nada Amin2014-07-201-0/+44
|\ | | | | fix/#148
| * fix/148Martin Odersky2014-07-201-0/+44
| | | | | | | | Fixed typo in Splitter. Closes #148.
* | Added test for #143 to regression testsMartin Odersky2014-07-191-0/+14
|/
* Handle selftypes in FullParameterizationMartin Odersky2014-07-171-0/+6
| | | | Adapt the transformation so that self types are handled correctly.
* Fix to rewire typesMartin Odersky2014-07-172-2/+19
| | | | | | | t6574 has a new test where we produce identical code in an if-then-else. This broke the rewiring logic before, and is fixed now. Also, more comments and test cases.
* Enabled ExtensionMethodsMartin Odersky2014-07-171-0/+109
| | | | | | | | | Fixed extension methods so that it now runs and passes the build. Also enables ElimRepeated, which is a prerequistite for ExtensionMethods. Exception: Tailrec is currently disabled, because it needs to run before ExtensionMethods but it fails the -Ycheck test. Therefore the current tests skip this phase.
* Removed test caseMartin Odersky2014-07-171-17/+0
| | | | | d.T is an access to a structural type member, so rejecting this is OK. Not sure why we compiled this before without warning.
* Added phase: SuperAccessorsMartin Odersky2014-07-171-0/+11
| | | | | Rewrote SuperAccessors (more to be done; see comments), and added stuff here and there to make it work smoother.
* Added test case for LMS inspired HK code.Martin Odersky2014-06-261-0/+43
| | | | Closes #94.
* Avoid caching values that depend on typevar state.Martin Odersky2014-06-201-0/+6
| | | | | | | | | | | | | | TypeVars flip from the initial state, where underlying == origin to the final state where underlying == inst. This flip can invalidate information that depends on the underlying type of a TypeVar. Since we do not know when the flip occurs, we need to avoid keeping any such information in a cache. The commit makes three caches depend on a new value: typerState.ephemeral. The value is set to `true` each time we follow the underlying type of a TypeVar, and this disables cached information to be retained. A test case for this commit is t2693.scala. This test passes typechecking with the previous commit, but fails in -Ycheck:front because of stale cache info in an "#Apply" typeref. The present commit fixes that.
* Fixes to lambda abstractionMartin Odersky2014-06-191-0/+15
| | | | | | 1) Honor variance of Apply and $hkArgs when instantiating them 2) Eta-lifting a higher-kinded type is straight eta expansion, no arguments are applied.
* Handling higher-kinded types with lambdasMartin Odersky2014-06-1810-12/+153
| | | | | Switch to the new scheme where higher-kinded types (and also some polymorphic type aliases) are represented as instances of Lambda traits.
* Change definition of isLegalPrefix so that it allows projecting on an ↵Martin Odersky2014-06-121-0/+14
| | | | | | | | | | | | | | abstract type. This is needed to make the encoding og higher-kinded types work. E.g. Rep[Int] would be represented as Rep { type Arg$0 = Int } # Apply where Apply is an abstract member of the base class Lambfa$I of Rep.
* Avoid classtype checking for refinements.Martin Odersky2014-05-301-0/+22
| | | | | | In a refinement type T { R } we do not need T to be a class. But analyzing the refeinement type will create a temporary class type. This refinement class has to be treated specially in what concerns parent types.
* Simplify result handling in FunProto.Martin Odersky2014-05-301-0/+7
| | | | | | Following the example of SelectionProto, we now always hide the result in a FunProto behind an IgnoreProto. This avoids a special case retry with a weaker FunProto in tryInsertApplyOrImplicit.
* Always ignore type in selectionProtoMartin Odersky2014-05-301-0/+8
| | | | | | | | | | | | | The type of a SelectionProto needs to be ignorable because there might be an implicit conversion on the selection. E.g. implicit def a2b(x: A): B = ??? val x: { a: A } = ??? val b: B = x.a This was previously handled by allowing implicit conversions in compatibility checks. But it turns out we can afford to ignore the type of a selectProto and unignore on ambiguities later.
* Triage of tests t27xx-t29xx.Martin Odersky2014-05-3020-0/+151
|
* tests t26xxMartin Odersky2014-05-3014-0/+294
|
* Fix of t2591.Martin Odersky2014-05-301-0/+15
| | | | | | | Needed to wrap a dummyTreeOfType in a TypedSplice to prevent re-typechecking. (In fact, the "tree without pos" check revealed a deeper problem: DummyTrees of types could be typed again, but without the surrounding TypedSplice, the originally stored type would be forgotten and Null would be returned.
* Added t25xx testsMartin Odersky2014-05-303-0/+33
|
* Fix of t2504Martin Odersky2014-05-302-6/+6
| | | | | | | | | Another problem where we need to insert an implicit on the result type of complex operation. Two additions: (1) If adapt fails, we now try with a weaker FunProto without result type, thus allowing for an additional implicit cpmversion on the result. (2) An Application in a committable context will not fail if the result type does not match the expected one. The problem will be simply deferred in that case.
* Fix of pos/t2454Martin Odersky2014-05-3014-0/+268
| | | | "_" type paraeters need to be given fresh names.
* remove test t1591b because it depends on scalac 2 sourceSamuel Gruetter2014-05-201-13/+0
|
* Fix of pos/t2429Martin Odersky2014-05-201-0/+25
| | | | | | | | | | | | | | | | | This was a hard nut to crack. The problem exemplified by t2429 is that in a situation like val x: T = foo(...) where `foo` needs implicit parameters the expected result type `T` is propagated into the typechecking of foo(...) and consequently also into the implicit parameter search. This is often necessary, for instance to instantiate type parameters. But it can lead to overconstrained searches if in fact the right expansion is val x: T = viewToT(foo(...)(implicit params)) where `viewToT` is some implicit conversion. The fix handles that case by re-hecking the application foo(...) with an empty result type, if the implicit parameter search fails. But the re-checking is very subtle as is explained in the comment to `TyperState#tryWithFallback`.
* Nothing is not a superclass of Null.Martin Odersky2014-05-201-0/+9
| | | | | | | | Fix so it isn't. This caused an error in ErrorReporting because we do not propagate bounds into a type like ValOrDefDef[_]. Error in `ErrorReporting` is now fixed but the problem is reflected in test case `boundspropagation`.
* Tests pos/23xx to 24xx.Martin Odersky2014-05-2010-0/+128
|
* More systematic treatment of prototypes.Martin Odersky2014-05-204-0/+70
| | | | | | | | | | | | | | | | | | | There's a delicate balance about how much of a prototype should be passed down the tree when typechecking. Passing little can cause ambiguity errors (both in overloading and in implicit search). Passing too much can cause spurious errors because implicit conversions "down the road" that apply to some tree continaing the result might not be considered. Symptoms of the problems wree that we could not handle the tests included in this commit before. The new scheme is as follows: we always keep all available information in a prototype, but hide nested prototypes behined a `IgnoredProto` wall. These trees will not be considered for conformity checking. When type checking hits an ambiguity, it tries again with a prototype that's one level deeper (has fewer Ignore links) than the previous one. This continues until there are no more Ignore links to unwrap. We also generalize the scheme for wrapping qualifiers of select nodes from realApply to all instances where we compare against a FunProto. Finally, there are some fixes that avoid assertion violations that were provoked by the new typechecking scheme.
* Tests pos 20xx 21xxMartin Odersky2014-05-2021-0/+222
|
* Fix of SI 2133Martin Odersky2014-05-201-0/+18
| | | | We now restrict wildcard imports to members that are accessible at the point of import. This is a fix of an open Scala ticket.
* Pos tests t17xx - t19xxMartin Odersky2014-05-2027-0/+351
|
* More testsMartin Odersky2014-05-1215-0/+217
|
* Re-enable t0786.Martin Odersky2014-05-081-0/+29
| | | | t0786 works again after type inference fixes. Re-enabling.
* Moved tests to pending because they fail -Ycheck:frontMartin Odersky2014-05-082-58/+0
|
* New phase: NullarifyMartin Odersky2014-04-151-0/+13
| | | | Eliminates ExprTypes and PolyTypes over value types.
* Fixing prefix of implicit membersMartin Odersky2014-04-141-0/+19
| | | | | | | Implicit members are TermRefs that should have a prefix corresponding to the object of which they are a member. They used to have the ThisType of their owner before. `implicits2` provides a way to verify that the change works. It would be good to turn this into a more robust test at some point. But it's not high preiority, so I prefer no test to a fragile test.
* TailRec phase and tests for it.Dmitry Petrashko2014-04-119-1/+125
| | | | | | | | | | | | | | | | | | | | | | | | Ported tailcall phase from scalac with such changes: - all transformation is done in the phase itself (previously half of the work was done in backend) - it is now able to run before uncurry - it is now a treeTransform - renamed to tailrec to make it more obvious that this phase transforms only recursive calls. For now this is a single phase which speculatively transforms DefDefs. Speculation can be potentially removed by splitting into 2 phases: one detecting which methods should be transformed second performing transformation. But, as transformation requires as same amount of work as detection, I believe it will be simpler to maintain it as a single phase. Conflicts: tests/pos/typers.scala
* Shadowed referencesMartin Odersky2014-04-081-0/+7
| | | | | | | | | | | | | | | | | | | In TypeAssigner#ensureAccible we sometimes pick an inherited public member as the denotation of a NamedType instead of an inaccessible private one. The problem is that both are denotations for the same type, which caused a noDoubleBindings assert failure. We now solve this problem by creating a "shadowed" named type to hold the inherited member. The shadowed named type is distinguished by its name, which reads (inherited)originalName In the future, we should make this more robust by using a general tagging scheme to create shadowed names. Another fix is about import symbols. They are now referenced with NonMemberTermRefs. With this fix, the test suite passes with no double def violations.
* CleanupsMartin Odersky2014-04-081-0/+3
| | | | | Conflicts: src/dotty/tools/dotc/transform/Splitter.scala
* Flag self names that conflict with parameters or membersMartin Odersky2014-04-081-41/+43
| | | | | | | | | A self name may no longer have the same name as a parameterless class member (or param accessor). The restriction makes sense because otherwise scoping is confusing. It's needed because otherwise we get TermRefs that have the same name and prefix but denote different things. Moved some code which exercises this from pos/typers to neg/typers