summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* a typo correctedsrinivasreddy2013-03-101-1/+1
|
* Merge pull request #2217 from JamesIry/master_7006bJames Iry2013-03-081-3/+3
|\ | | | | SI-7006 Fix the unreachable test
| * SI-7006 Fix the unreachable testJames Iry2013-03-081-3/+3
|/ | | | | The unreachable test was missing the cases when Random.nextInt returned a negative number. This commit fixes that.
* Merge pull request #2216 from JamesIry/master_7231James Iry2013-03-083-1/+14
|\ | | | | SI-7231 Fix assertion when adapting Null type to Array type
| * SI-7231 Fix assertion when adapting Null type to Array typeJames Iry2013-03-083-1/+14
| | | | | | | | | | | | | | | | | | GenICode was doing a sanity check when adapting an expression of type Null to something else. It was just doing the wrong one. Instead of checking whether the result expression type was a reference type it was checking to see if it was an class reference type. This commit fixes that and adds a test to make sure both forms of adaptation work as expected.
* | Merge pull request #2185 from JamesIry/master_unreachableGrzegorz Kossakowski2013-03-0810-115/+460
|\ \ | |/ |/| SI-7006 Prevent unreachable blocks in GenICode
| * SI-7006 Cleanup from code reviewJames Iry2013-03-071-4/+13
| | | | | | | | | | | | | | | | | | Minor cleanup from review of https://github.com/scala/scala/pull/2185 * Changed several instances of |= to ||= for better clarity (and bonus savings!) * Documented the return of two methods that compute the reachability of follow-on blocks.
| * SI-7006 Prevent unreachable blocks in GenICodeJames Iry2013-03-0610-115/+451
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit makes GenICode prevent the generation of most unreachable blocks. The new unreachable block prevention code can be disabled with a compiler flag. Because full unreachable analysis is no longer necessary for normal code it makes the unreachable block analysis run only under -optimise. A test is included to make sure unreachable code doesn't cause issues in code gen. A concrete example will help. def foo(): X = { try return something() catch { case e: Throwable => println(e) throw e } unreachableCode() ] Here unreachableCode() is unreachable but GenICode would create ICode for it and then ASM would turn it into a pile of NOPS. A previous commit added a reachability analysis step to eliminate that unreachable code but that added a bit of time to the compilation process even when optimization was turned off. This commit avoids generating most unreachable ICode in the first place so that full reachability analysis is only needed after doing other optimization work. The new code works by extending a mechanism that was already in place. When GenICode encountered a THROW or RETURN it would put the current block into "ignore" mode so that no further instructions would be written into the block. However, that ignore mode flag was itself ignored when it came to figuring out if follow on blocks should be written. So this commit goes through places like try/catch and if/else and uses the ignore mode of the current block to decide whether to create follow on blocks, or if it already has, to kill by putting them into ignore mode and closing them where they'll be removed from the method's list of active blocks. It's not quite as good as full reachability analysis. In particular because a label def can be emitted before anything that jumps to it, this simple logic is forced to leave label defs alone and that means some of them may be unreachable without being removed. However, in practice it gets close the the benefit of reachability analysis at very nearly no cost.
* | Merge pull request #2204 from adriaanm/merge-2.10.xPaul Phillips2013-03-0636-511/+764
|\ \ | |/ |/| Merge 2.10.x into master
| * Merge 2.10.x into master.Adriaan Moors2013-03-0515-191/+237
| |\ | | | | | | | | | | | | | | | | | | | | | Resurrect some undead code from 373ded2ad3 (tuple2Pickler). Conflicts: src/compiler/scala/tools/nsc/interactive/CompilerControl.scala src/compiler/scala/tools/nsc/typechecker/Typers.scala
| | * Merge pull request #2199 from retronym/ticket/7214Adriaan Moors2013-03-052-1/+60
| | |\ | | | | | | | | SI-7214 outer check based on dealiased pattern type.
| | * \ Merge pull request #2156 from vigdorchik/hierarchyAdriaan Moors2013-03-0511-145/+171
| | |\ \ | | | | | | | | | | SI-7109 SI-7153 Generalize the API to get docComments: allow to force do...
| | | * | SI-7109 SI-7153 Generalize the API to get docComments: allow to force docTreesEugene Vigdorchik2013-02-2411-145/+171
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | for given fragments. Don't type-check when forcing doc comments, but rather do it directly. Test the new functionality as well as better tests for the old one.
| * | | | Merge 2.10.x into master.Adriaan Moors2013-03-056-283/+305
| |\| | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/compiler/scala/tools/nsc/transform/patmat/Logic.scala
| | * | | Merge pull request #2193 from adriaanm/patmat-refactorAdriaan Moors2013-03-0518-374/+386
| | |\ \ \ | | | | | | | | | | | | merge 2.10.1 into 2.10.x
| | | * \ \ Merge 2.10.1 into 2.10.xAdriaan Moors2013-03-038-74/+40
| | | |\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The fix for SI-7183 in 440bf0a8c2 was forward ported in f73d50f46c. Conflicts: src/compiler/scala/tools/nsc/typechecker/PatternMatching.scala
| | | | * \ \ Merge pull request #2190 from adriaanm/test-runs-mima-2.10.1v2.10.1-RC3v2.10.1James Iry2013-03-022-4/+8
| | | | |\ \ \ | | | | | | | | | | | | | | | | test.done again checks bin compat (using mima 0.1.5)
| | | | * \ \ \ Merge pull request #2189 from adriaanm/ticket-7195James Iry2013-03-024-64/+3
| | | | |\ \ \ \ | | | | | | | | | | | | | | | | | | [nomaster] SI-7195 minor version mustn't introduce warnings
| | | * | | | | | [port] SI-7183 Disable unreachability for withFilter matches.Adriaan Moors2013-03-035-16/+43
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a forward port of #2168 (originally for 2.10.1, but the pattern matcher has since been refactored in 2.10.x.)
| | | * | | | | | better names for components of MatchTranslatorAdriaan Moors2013-03-033-34/+33
| | | | | | | | |
| | | * | | | | | move sat solving to separate fileAdriaan Moors2013-03-033-233/+243
| | | | | | | | |
| * | | | | | | | Merge 2.10.x into master.Adriaan Moors2013-03-052-10/+19
| |\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/library/scala/collection/mutable/ArrayOps.scala
| | * | | | | | | Merge pull request #2198 from retronym/ticket/7215Paul Phillips2013-03-052-10/+19
| | |\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | SI-7215 Fix transpose of an empty Array[Array[T]].
| | | * | | | | | | SI-7215 Fix transpose of an empty Array[Array[T]].Jason Zaugg2013-03-052-10/+19
| | | | | | | | | |
| | * | | | | | | | Merge pull request #2175 from retronym/ticket/7185Paul Phillips2013-03-055-1/+58
| | |\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | SI-7185 Avoid NPE in TreeInfo.isExprSafeToInline
| * | | | | | | | | | Merge 2.10.x into master.Adriaan Moors2013-03-052-0/+27
| |\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/compiler/scala/tools/nsc/transform/Erasure.scala
| | * | | | | | | | | Merge pull request #2178 from scalamacros/ticket/7190Paul Phillips2013-03-052-0/+27
| | |\ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | SI-7190 macros no longer give rise to bridges
| | | * | | | | | | | | SI-7190 macros no longer give rise to bridgesEugene Burmako2013-02-272-0/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Amazingly enough, this got through all the testing we performed. But now erasure knows that it shouldn't generate bridges for macro methods.
| | | | | | | | | | | |
| | \ \ \ \ \ \ \ \ \ \
| *-. \ \ \ \ \ \ \ \ \ \ No-op merge for [nomaster] part of 2.10.x.Adriaan Moors2013-03-050-0/+0
| |\ \ \ \ \ \ \ \ \ \ \ \ | | | |_|_|_|_|_|_|/ / / / | | |/| | | | | | | / / / | | | | |_|_|_|_|_|/ / / | | | |/| | | | | | | |
| | | * | | | | | | | | test.done again checks bin compat (using mima 0.1.5)Adriaan Moors2013-03-012-4/+8
| | | | |_|_|_|_|/ / / | | | |/| | | | | | |
| | * / | | | | | | | [nomaster] SI-7195 minor version mustn't introduce warningsAdriaan Moors2013-03-014-64/+3
| | |/ / / / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We want 2.10.1 to be a drop-in replacement for 2.10.0, so we can't start warning where we weren't warning in 2.10.0. See SI-5954 (#1882, #2079) for when it was an implementation restriction, which was then weakened to a warning. It's now hidden behind -Ydebug.
| | * | | | | | | | Merge pull request #2168 from retronym/ticket/7183Adriaan Moors2013-03-013-14/+42
| | |\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | SI-7183 Disable unreachability for withFilter matches.
| | | * | | | | | | | SI-7183 Disable unreachability for withFilter matches.Jason Zaugg2013-02-253-14/+42
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This avoids spurious unreachable warnings on code that the user didn't write. The parser desugars for-comprehensions such as: for (A(a) <- List(new A)) yield a To: List(new A()).withFilter(((check$ifrefutable$2) => check$ifrefutable$2: @scala.unhecked match { case A((a @ _)) => true case _ => false }) ) But, if `A.unapply` returns `Some[_]`, the last case is dead code. (Matching against a regular case class *would* fall through in the caes of a null scrutinee.) In SI-6902, we enabled unreachability warnings, even if the scrutinee was annotated as @unchecked. That was consistent with the 2.9.2 behaviour, it was only disabled temporarily (actually, accidentally) in 2.10.0. But, the old pattern matcher didn't warn about this code. This commit makes the pattern matcher recognise the special scrutinee based on its name and disables both exhaustivity *and* unreachability analysis. To do so, the we generalize the boolean flag `unchecked` to the class `Suppression`.
| | | | | | | | | | |
| | \ \ \ \ \ \ \ \ \
| | \ \ \ \ \ \ \ \ \
| | \ \ \ \ \ \ \ \ \
| | \ \ \ \ \ \ \ \ \
| | \ \ \ \ \ \ \ \ \
| *-----. \ \ \ \ \ \ \ \ \ Merge 2.10.x into master.Adriaan Moors2013-03-0517-51/+200
| |\ \ \ \ \ \ \ \ \ \ \ \ \ | | | | | |/ / / / / / / / / | | | | |/| | | | / / / / / | | | | |_|_|_|_|/ / / / / | | | |/| | | | | | / / / | | | |_|_|_|_|_|_|/ / / | | |/| | | | | | | | / | | | | | | |_|_|_|_|/ | | | | | |/| | | | | Fix check file for run/t7185.
| | | | | * | | | | | SI-7214 outer check based on dealiased pattern type.Jason Zaugg2013-03-052-1/+60
| | | | | | |_|_|/ / | | | | | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A Typed Pattern (_: T) is more than `.isInstanceOf`: if `T` is a path dependent type, the scrutinee's $outer reference is also compared against the prefix of `T`. The code that synthesises this is split into two places. `needsOuterCheck` determines whether to add this check, based on the type `T`, and the type of the scrutinee. If it gives the go-ahead, `treeCondStrategy.outerCheck` synthesizes the check. The new test case demonstrates the problems caused by the failure to dealias in `needsOuterCheck`: it could either wrongly lead to synthesis of an outer test (which would crash), or wrongly omit the outer test (meaning overly liberal matching.) A simple `dealias` remedies this. `dealiasWiden` is *not* appropriate here; we need to keep hold of singleton types. I'll also note that there is already a little slack between these methods, as commented: > ExplicitOuter replaces `Select(q, outerSym) OBJ_EQ expectedPrefix` > by `Select(q, > outerAccessor(outerSym.owner)) OBJ_EQ expectedPrefix` > if there's an outer accessor, otherwise the condition becomes `true` > TODO: can we improve needsOuterTest so there's always an outerAccessor? So this is probably a fragile area that warrants a careful review with a view to design improvements.
| | | | * | | | | | Merge pull request #2167 from retronym/ticket/7126Adriaan Moors2013-03-013-6/+29
| | | | |\ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | SI-7126 Account for the alias types that don't dealias.
| | | | | * | | | | | SI-7126 Eliminate a source of malformed types.Jason Zaugg2013-02-261-4/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The kind-polymorphic nature of Nothing and Any in concert with type argument inference could lead to types like `T[T]` (where `type T=Any`). Compensatory action is taken later on to recover; see the usages of `TypeRef#typeParamsMatchArgs`. But this these types have a nasty property, they can dealias to themselves. Callers recursing through types who fail to account for this hit an infinite recursion, as was reported in SI-7126. This commit simply dealiases `T` when registering the type bound in `unifySimple`. We should try to weed out additional sources of these types.
| | | | | * | | | | | SI-7126 Account for the alias types that don't dealias.Jason Zaugg2013-02-252-2/+18
| | | | | | |/ / / / | | | | | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | After this change: qbin/scalac -Ydebug test/files/pos/t7126.scala 2>&1 | grep warning warning: dropExistential did not progress dealiasing Test.this.T[Test.this.T], see SI-7126 one warning found T[T]? Really? The true bug lies somewhere else; the comments of the ticket illuminate the general areas of concern.
| | | * | | | | | | SI-7185 Avoid NPE in TreeInfo.isExprSafeToInlineJason Zaugg2013-03-025-1/+58
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We got there typechecking code with a redundant layer of Block. We can't express that in source code, so we test this with manual tree construction and with XML literals, which as reported produce such trees.
| | * | | | | | | | simplify dependencies between patmat components, remove self typesAdriaan Moors2013-03-037-41/+51
| | | |_|_|_|/ / / | | |/| | | | | |
| | * | | | | | | Merge pull request #2184 from adriaanm/revert-pr-2083Adriaan Moors2013-03-0128-3539/+331
| | |\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | Revert SI-6240 synchronization for runtime reflection
| | | * | | | | | | Revert SI-6240 synchronization for runtime reflectionAdriaan Moors2013-03-0128-3539/+331
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit reverts #2083: - 387b2590db runtime reflection: death from thousand threads - 73d079fb38 removes the assertion in missingHook - f4dd56ca5d synchronizes names - dd148de5a8 synchronizes pendingVolatiles - 4cbb9357c5 synchronizes toolboxes - 07bcb6176a SI-7045 reflection now auto-initializes selfType - bebd62d566 optimizes Scala reflection GIL - 735634f1d6 initializes lazy vals and inner objects in advance - 5b37cfb19a introduces GIL to Scala reflection - 981da8edfc cleans up initialization of runtime reflection - b2c2493b22 reflection no longer uses atPhase and friends - a9dca512d8 synchronizes symbols - 0262941b3c removes the crazy extraneous log - 21d5d3820b moves Symbol#SymbolKind to Symbols
| | * | | | | | | | Merge pull request #2179 from adriaanm/merge-2.10.1Adriaan Moors2013-03-0133-479/+878
| | |\ \ \ \ \ \ \ \ | | | |/ / / / / / / | | |/| | | | | | | Merge 2.10.1 into 2.10.x
| | * | | | | | | | Merge pull request #2182 from retronym/ticket/6191James Iry2013-03-011-2/+2
| | |\ \ \ \ \ \ \ \ | | | |_|_|_|_|/ / / | | |/| | | | | | | Tone down a soft-warning to only show under -Ydebug.
| | | * | | | | | | Tone down a soft-warning to only show under -Ydebug.Jason Zaugg2013-03-011-2/+2
| | | | |/ / / / / | | | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | SI-6191 remains open and can lead to incomplete debug scope information. In 2.10.0, the backend detected when this happend, and warned the user. But there is little the user can do about the warning. We have a few test cases for the problem now, so we should not pollute the compile output.
| | * | | | | | | Merge pull request #2083 from scalamacros/ticket/6240Adriaan Moors2013-02-2728-331/+3539
| | |\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | SI-6240 synchronization for runtime reflection
| | | * | | | | | | runtime reflection: death from thousand threadsEugene Burmako2013-02-114-0/+2051
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | not anymore
| | | * | | | | | | removes the assertion in missingHookEugene Burmako2013-02-111-2/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In the current synchronization scheme multiple threads can enter the missingHook trying to materialize a package, which hasn't been created. That's fine, because makeScalaPackage, which creates and enters package symbols is synchronized and checks whether the creation is necessary before commencing. Therefore even if makeScalaPackage is called multiple times in rapid succession, the calls will be serialized and all calls except the first one won't do anything.
| | | * | | | | | | synchronizes namesEugene Burmako2013-02-112-27/+35
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously we didn't have all possible name creation facilities covered with locks, so some of them silently misbehaved and caused much grief: http://groups.google.com/group/scala-internals/browse_thread/thread/ec1d3e2c4bcb000a. This patch gets all the name factories under control. Unfortunately it comes at a performance cost, which has to be evaluated.
| | | * | | | | | | synchronizes pendingVolatilesEugene Burmako2013-02-112-4/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Called from isVolatile, which is called from isStable, which is a part of the public reflection API.