summaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* Merge pull request #638 from lrytz/wip/t5843Adriaan Moors2012-05-301-2/+2
|\ | | | | fix t5843
| * fix t5843Lukas Rytz2012-05-281-2/+2
| |
* | Merge pull request #640 from odersky/topic/inklingAdriaan Moors2012-05-287-6/+127
|\ \ | | | | | | Implemented functionality to invalidate classpath entries
| * | Implemented functionality to invalidate classpath entries, to enable ↵Martin Odersky2012-05-287-6/+127
| | | | | | | | | | | | incremental compiles.
* | | Merge pull request #636 from retronym/ticket/5845Adriaan Moors2012-05-281-1/+1
|\ \ \ | | | | | | | | SI-5845 Advances the example from a crasher to an inference failure.
| * | | SI-5845 Advances the example from a crasher to an inference failure.Jason Zaugg2012-05-281-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The inference failure itself seems like an instance of of SI-3346. But dependent method types (which triggered the crash), can be employed to avoid inferring the type constructor CC. class Num[T] { def mkOps = new Ops class Ops { def +++(rhs: T) = () } } class A { implicit def infixOps[T](lhs: T)(implicit num: Num[T]): num.Ops = num.mkOps implicit val n1: Num[Int] = new Num[Int] { } 5 +++ 5 }
* | | | Merge pull request #635 from adriaanm/topic/virtpatmatAdriaan Moors2012-05-281-1/+5
|\ \ \ \ | |_|_|/ |/| | | fixes for exhaustivity
| * | | handle approximating alternative of empty patternAdriaan Moors2012-05-281-1/+4
| | | |
| * | | don't check exhaustivity involving user-defined unapplySeqAdriaan Moors2012-05-281-0/+1
| |/ /
* | | Merge pull request #633 from retronym/topic/value-class-bridgeAdriaan Moors2012-05-271-2/+13
|\ \ \ | |/ / |/| | Fix a NSDNHAO in extension methods.
| * | Fix a NSDNHAO in extension methods.Jason Zaugg2012-05-271-2/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A bridge method, created when we override a method from a superclass and refine the return type, was appearing as an overloaded alternative. (`erasure` doesn't create new scopes, so the bridges it builds are visible at earlier phases.) The problem was masked when compiling with specialization, which *does* create a new scope, shielding the code in question from the artefacts of erasure. To fix the problem, we filter out bridge methods from the overloaded alternatives returned by `.decl`, as would happen internally in `.member`.
* | | Handled some of our new exhaustiveness warnings.Paul Phillips2012-05-269-11/+17
| | | | | | | | | | | | Who could have suspected it would actually be right most of the time?
* | | Help our new exhaustiveness checker.Paul Phillips2012-05-261-6/+9
|/ / | | | | | | ...be a little less chatty.
* | Merge pull request #612 from adriaanm/ticket/5829Adriaan Moors2012-05-261-2/+2
|\ \ | | | | | | fix SI-5829: refinement typeref has a prefix
| * | fix SI-5829: refinement typeref has a prefixAdriaan Moors2012-05-241-2/+2
| |/
* | Merge pull request #625 from retronym/ticket/5318-3Adriaan Moors2012-05-252-35/+25
|\ \ | | | | | | SI-5318 Make implicit divergence checking PolyType aware.
| * | SI-5318 Make implicit divergence checking PolyType aware.Jason Zaugg2012-05-252-35/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Replaces the two active subclasses of `SymCollector` with direct use of traversal methods of `Type`. Wildcard free class type parameters, not just method type parameters, when stripping the core type of candidate implicits. The spec doesn't make any such distinction, and the enclosed test, t5318c, crashes without this change.
* | | Merge pull request #624 from hubertp/topic/cleanupJosh Suereth2012-05-253-23/+1
|\ \ \ | | | | | | | | Cleaning up some code introduced for the old presentation compiler long ...
| * | | Cleaning up some code introduced for the old presentation compiler long time ↵Hubert Plociniczak2012-05-243-23/+1
| | | | | | | | | | | | | | | | ago. Review by @dragos
* | | | Merge pull request #613 from hubertp/issue/5821Adriaan Moors2012-05-252-10/+16
|\ \ \ \ | | | | | | | | | | Closes SI-5821.
| * | | | Closes SI-5821.Hubert Plociniczak2012-05-242-10/+16
| |/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This was an interesting one. Basically an erroneous import was creating an erroneous symbol for Array (similary for other symbols that were 'found' in this import) which was leading to all sorts of inconsistencies and spurious errors. This wasn't a bug in ContextErrors but rather something that existed for ages and was hidden from the general audience. Review by @paulp.
* | | | Merge pull request #621 from axel22/issue/5085bAdriaan Moors2012-05-251-4/+22
|\ \ \ \ | | | | | | | | | | Fixes SI-5085 and SI-4833.
| * | | | Fixes SI-5085 and SI-4833.Aleksandar Prokopec2012-05-251-4/+22
| | |_|/ | |/| |
* | | | don't error when not emitting required switchAdriaan Moors2012-05-251-1/+1
| | | | | | | | | | | | | | | | | | | | we don't handle switches with guards, whereas the old patmat did to ease the transition, let's not error out and see how we can resolve this
* | | | Merge pull request #619 from magarciaEPFL/ticket-SI-5805Adriaan Moors2012-05-251-4/+5
|\ \ \ \ | | | | | | | | | | Fixes SI-5805
| * | | | Fixes SI-5805Miguel Garcia2012-05-241-4/+5
| |/ / /
* | | | Merge pull request #618 from axel22/issue/5428Adriaan Moors2012-05-251-0/+5
|\ \ \ \ | | | | | | | | | | Fixes SI-5428.
| * | | | Fixes SI-5428.Aleksandar Prokopec2012-05-241-0/+5
| |/ / /
* | | | Merge pull request #617 from phaller/implicit-execution-contextAdriaan Moors2012-05-244-42/+97
|\ \ \ \ | | | | | | | | | | Move implicit ExecutionContext to be determined by lexical scope
| * | | | Move implicit ExecutionContext to be determined by lexical scopephaller2012-05-244-42/+97
| |/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Port of a pull request originally submitted by @havocp. - declare the invariant that all app callbacks have an associated ExecutionContext provided at the place the callback is passed to a method on Future - always run callbacks in their associated EC - since all callbacks have their own EC, Promise does not need one - "internal" callbacks don't need to defer execution either since we know the ultimate app callback will do so, therefore we can use an immediate executor for these
* / / / Fixes SI-5441.Aleksandar Prokopec2012-05-241-2/+2
|/ / /
* | | Fix to naming of file.Josh Suereth2012-05-231-0/+0
| | |
* | | Merge branch 'master' into asm-compiled-onceJosh Suereth2012-05-2312-108/+115
|\ \ \
| * | | Widen types in names/defaults transformations.Paul Phillips2012-05-231-13/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We were getting away with this somehow, but the types are wrong after typer and that sort of thing is noticed by more people now. I took the opportunity to add our first -Ycheck:all test, which is at least as much about helping -Ycheck:all remain in good working order as it is about this test.
| * | | Creator for superconstructor tree.Paul Phillips2012-05-237-19/+14
| | | |
| * | | Usability improvements to Origins.Paul Phillips2012-05-231-37/+49
| | | |
| * | | Cleanups in Treecheckers.Paul Phillips2012-05-231-34/+33
| | | |
| * | | Make phase fmask a public val instead of a private var.Paul Phillips2012-05-231-4/+6
| | | |
| * | | Relax -Xlint warning for implicit classes. Closes SI-5809.Paul Phillips2012-05-231-1/+1
| | | |
* | | | ASM now compiled once in the build.Josh Suereth2012-05-2377-0/+0
|/ / / | | | | | | | | | | | | | | | | | | | | | * Moved ASM sources to src/asm * New ant task builds asm *ONCE*. Build times improve by a few seconds * Fixed SBT build for new asm location. SBT build still broken from actors-migration and partest Review by @magarciaEPFL
* | | Merge pull request #595 from som-snytt/ticket/3761-overload-byname-onlyLukas Rytz2012-05-231-3/+15
|\ \ \ | | | | | | | | SI-3761: Overload resolution fails on by-name parameter
| * | | SI-3761: Overload resolution fails on by-name parameter (amended per lrytz)Som Snytt2012-05-221-2/+1
| | | | | | | | | | | | | | | | Lukas noted the stopgap at methTypeArgs isn't needed. What! No black tie formals.
| * | | SI-3761: Overload resolution fails on by-name parameterSom Snytt2012-05-211-4/+17
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When isAsSpecific checks if method m applies to args of types of formal params of m1, a by-name parameter was converted to its underlying result type for the params (of m) but not the args (of m1). This had the useful effect of making m(A) more specific than m(=>A), which is the specified prioritization for implicit views, but also made m(=>A) and m(=>A, B*) ambiguous. To handle this edge case, the isCompatible test for A and =>A is made explicit, and by-name params are no longer converted.
* | | Merge pull request #575 from vjovanov/actors-migration-kitAdriaan Moors2012-05-2322-20/+660
|\ \ \ | | | | | | | | Adding the Actor Migration Kit.
| * | | Minor fixes for the Actor Migration KitVojin Jovanovic2012-05-234-24/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixed behavior of the StashingActor in case of unhandeled message. Fixed a typo in deprecated annotation. Fixed comments. Fixed copyright.
| * | | Adding the Actor Migration Kit.Vojin Jovanovic2012-05-1821-15/+660
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Kit consists of: 1) The StashingActor which adopts an interface similar to Akka. 2) Props mockup for creating Akka like code 3) Pattern mockup 4) Test cases for every step in the migration. 5) MigrationSystem which will paired on the Akka side. Review of the code : @phaller Review of the build: @jsuereth
* | | | Merge pull request #601 from adriaanm/3f7b8b58748eb70aec4269f1ef63853b5ad4af60Adriaan Moors2012-05-235-236/+1115
|\ \ \ \ | | | | | | | | | | virtpatmat: treemaker approximation refactorings and exhaustivity
| * | | | Exhaustivity: TreeMakers as boolean propositionsAdriaan Moors2012-05-225-9/+712
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We check exhaustivity by representing a match as a formula in finite-domain propositional logic (FDPL) that is false when the match may fail. The variables in the formula represent tested trees in the match (type tests/value equality tests). The approximation uses the same framework as the CSE analysis. A matrix of tree makers is turned into a DAG, where sharing represents the same value/type being tested. We reduce FDPL to Boolean PL as follows. For all assignments, V_i = c_i_j, we introduce a proposition P_i_j that is true iff V_i is equal to the constant c_i_j, for a given i, and all j, P_i_j are mutually exclusive (a variable cannot have multiple values). If the variable's domain is closed, we assert that one of P_i_j must be true for each i and some j. The conjunction of these propositions constitutes the equality axioms. After going through negational normal form to conjunctive normal form, we use a small SAT solver (the DPLL algorithm) to find a model under which the equational axioms hold but the match fails. The formula: EqAxioms /\ -MatchSucceeds. Note that match failure expresses nicely in CNF: the negation of each case (which yields a disjunction) is anded. We then turn this model into variable assignments (what's the variable (not) equal to, along with recursive assignments for its fields). Valid assignments (no ill-typed field assignments) are then presented to the user as counter examples. A counter example is a value, a type test, a constructor call or a wildcard. We prune the example set and only report the most general examples. (Finally, we sort the output to yield stable, i.e. testable, warning messages.) A match is only checked for exhaustivity when the type of the selector is "checkable" (has a sealed type or is a tuple with at least one component of sealed type). We consider statically known guard outcomes, but generally back off (don't check exhaustivity) when a match has guards or user-defined extractor calls. (Sometimes constant folding lets us statically decide a guard.) We ignore possibly failing null checks (which are performed before calling extractors, for example), though this could be done easily in the current framework. The problem is false positives. People don't usually put nulls in tuples or lists. To improve the exhaustivity checks, we rewrite `List()` to Nil. TODO: more general rewrite of List(a, b, ..., z) to `a :: b :: ... :: z`. When presenting counter examples, we represent lists in the user-friendly List(a,...,z) format. (Similarly for tuples.) There are no exhaustivity checks for a match-defined PartialFunction. misc notes: - fix pure case of dpll solver impure set (symbol that occurs both as a positive and negative literal) was always empty since I was looking for literals (which are not equal if positivity is not equal) but should have been looking for symbols - FDPL -> BoolPL translation collects all syms in props since propForEqualsTo generates an Or, must traverse the prop rather than assuming only top-level Syms are relevant... also, propForEqualsTo will not assume Or'ing a whole domain is equivalent to True (which it isn't, since the type test may fail in general) - improve counter example description - treat as constructor call when we either have definite type information about a real class, or we have no equality information at all, but the variable's type is a class and we gathered constraints about its fields (typically when selector is a tuple) - flatten a :: b :: ... :: Nil to List(a, b, ...) - don't print tuple constructor names, so instead of "Tuple2(a, b)", say "(a, b)" - filter out more statically impossible subtypes the static types convey more information than is actually checkable at run time this is good, as it allows us to narrow down the subtypes of a sealed type, however, when modeling the corresponding run-time checks we need to "erase" the uncheckable parts (using existentials so that the types are still well-kinded), so that we can use static subtyping as a sound model for dynamic type checks - experimental java enum handling seals enum class before, we created a refinement class as the placeholder for the sealed children it seems more direct to use the enum class for that this way, the new pattern matcher's exhaustiveness checker just works for java enums
| * | | | TreeMaker approximation refactorings and bug fixesAdriaan Moors2012-05-221-225/+401
| | |/ / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - TypeTestTreeMaker subsumes the old TypeTestTM and TypeAndEqualityTM its type- and equality-testing logic is configurable so that it can: - generate trees (main purpose) - check whether this tree maker is a pure type test - generate the proposition that models this tree maker (for exhaustivity and other analyses) - [CSE] subst binders of dropped tm's to stored ones somehow the refactoring broke the replacement of the binder of dropped treemakers by the binder of the reused treemaker when replacing TM1(x1 => ...) >> TM2(x2 => ...) >> TM3(x3 => ...) >> ... TM1'(x1' => ...) >> TM2'(x2' => ...) >> TM3(x3' => ...) >> ... by Memo1(x1 => ...) >> TM2(x2 => ...) >> Memo2(x3 => ...) >> ... Reuse(Memo2)... you need to replace x1' and x2' by x1 since TM2 tested a shared condition but was not memo-ised, that implies it simply passed x1 through to x3 unmodified, and x2' can simply use the stored x1 - type of first uniqued binder sets type of tree when approximating a tree of treemakers as a DAG, where sharing indicates the same value is tested, use the type of the binder that was first used to create a unique tree as the type of that tree, and thus all trees used for the same binder in the future - track substitution of alternatives when approximating - error on unswitchable @switch annotated matches if we can't turn a match (with more than two cases) into a switch, but the user insists, emit an error misc notes: - when all you need is nextBinder, FunTreeMaker is your guy - must pass flag to TypeTestTM for extractorarg test case TypeTestTreeMaker(prevBinder, testedBinder, expectedTp, nextBinderTp) (prevBinder eq testedBinder) does not imply it's a pure type test for an extractor call note that the expected type for an extractor argument is not a type pattern, thus we only do a classic type test -- the idea was to detect that case by noticing we're being called with the same previous and tested binder, but that case also arises for Typed patterns
* | | | Merge pull request #599 from som-snytt/ticket/5779-numeq-warnAdriaan Moors2012-05-222-3/+12
|\ \ \ \ | | | | | | | | | | SI-5779: Wrong warning message (comparing Number)