summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* SI-7159 Prepare to remove erroneous INT <:< LONG in TypeKindsJames Iry2013-02-265-28/+45
| | | | | | | | | | | | | | In preparation for dealing with a problem in TypeKinds, this commit does some cleanup of code related to doing coercions. * Comments are added to clarify. * A println when converting between BOOL and anything else is removed and the code is allowed to flow through to an assertion. * Assertions are refactored to use string interpolation. * A few pattern matches were reformulated to equivalent variants In addition, a test is created for SI-107, the bug that necessitated the special case in GenICode#adapt for LONG coercion
* SI-7159 Remove unreachable cases in GenICode#adaptJames Iry2013-02-261-3/+1
| | | | | | | | This commit removes some unreachable code in GenICode#adapt. It's hard to prove that these cases are unreachable, but they do appear to be and I wasn't able to find a way to get to them. Code archaeology was un-fruitful; they're very old. Which may mean they are legacies from a time when Null and Nothing types weren't fully baked.
* Merge pull request #2158 from JamesIry/master_7006Grzegorz Kossakowski2013-02-266-203/+223
|\ | | | | SI-7006 Eliminate NOPs and unreachable code
| * SI-7006 Simplify jump-only block destination determinationJames Iry2013-02-253-114/+98
| | | | | | | | | | | | | | | | | | | | | | | | With proper reachability analysis, the code for finding the final destination of jump-only blocks was more complicated than needed. This commit simplifies and speeds up that process using a standard Tortoise and Hare algorithm on a Map from jump-only blocks to their immediate destinations. Test t7006 is increased a bit to make sure we don't get stuck on infinite loops and to make sure we're deleting all but the essential jump.
| * SI-7006 Eliminate unreachable blocksJames Iry2013-02-254-63/+79
| | | | | | | | | | | | | | | | | | | | | | | | GenASM was doing a bunch of stuff to eliminate unreachable exception handlers, but it was still leaving behind other unreachable blocks, for instance a finally block associated with an exception handler that got removed would still be left lying around. ASM would in turn turn those into a big pile of NOPs, which just take up space uselessly. This commit replaces all the logic for eliding exception handlers with a single unreachable block remover that catches unused exception handlers and a whole lot more.
| * SI-7006 Recognize more jump only blocksJames Iry2013-02-252-26/+50
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | During ASM code emission we would recognize a block that consisted of ICode-only artifacts (ENTER_SCOPE, EXIT_SCOPE, and LOAD_EXCEPTION) followed by a jump. But we weren't using the same logic to recognize all jump-only blocks. So jump-elision wasn't removing them. And that in fact was why the ASM code emission had to do its special case. This commit makes all jump-only block recognition use the same logic: a jump-only block is one that has 0 or more ICode-only instructions followed by a JUMP. It does't necessarily have to start with a JUMP. There's now a debugWarning if the old NOP emitting code is triggered and test t6102 is enhanced to error if that warning occurs.
| * SI-7006 Improve jump-elision code in GenASMJames Iry2013-02-252-40/+36
|/ | | | | | While working on SI-7006 I found a O(N*M) loop in jump-elision that should be O(N). This commit clean that up. It also improves the diagnostics in Members#removeBlock.
* Merge pull request #2165 from retronym/topic/empty-parenPaul Phillips2013-02-25294-1613/+1612
|\ | | | | Spring cleaning
| * Address some ScaladocrotJason Zaugg2013-02-2522-57/+35
| | | | | | | | | | | | - @param tags whose name drifted from the corresponding parameter - Remove or complete a few stray stub comments (@param foo ...) - Use @tparam where appropriate.
| * Modernize legacy backquotes in comments.Jason Zaugg2013-02-2519-52/+52
| | | | | | | | | | Was: ``blah'' Now: `blah`
| * Remove redundant explicit returns.Jason Zaugg2013-02-2511-16/+16
| |
| * Don't wrap an array just to get its length.Jason Zaugg2013-02-258-11/+11
| | | | | | | | Use .length directly, avoiding the allocation of the WrappedArray.
| * Remove redundant 'val' from case class params.Jason Zaugg2013-02-2519-33/+33
| |
| * Fix two malformed format strings.Jason Zaugg2013-02-242-2/+2
| |
| * More explicit empty paren lists in method calls.Jason Zaugg2013-02-24133-550/+552
| |
| * Reorder to avoid code appearing like a forward reference.Jason Zaugg2013-02-241-12/+12
| | | | | | | | | | It isn't, because LOOP_HEADER and friends are compile time constants. But I'd argue that its clearer not to rely on that here.
| * Banish needless semicolons.Jason Zaugg2013-02-24104-519/+538
| |
| * Be explicit about empty param list calls.Jason Zaugg2013-02-2466-390/+390
| | | | | | | | With the exception of toString and the odd JavaBean getter.
| * Don't override empty-paren methods as paren-less.Jason Zaugg2013-02-243-4/+4
| | | | | | | | An exception is made for toString.
* | Merge pull request #2161 from scalamacros/topic/7112-followup-masterJames Iry2013-02-241-1/+1
|\ \ | |/ |/| fixes the test for SI-7112
| * fixes the test for SI-7112Eugene Burmako2013-02-231-1/+1
| | | | | | | | | | | | | | | | | | Freshly released Java 1.6.0_41 for OSX fails with "IllegalAccessError: tried to access class JavaSimpleEnumeration_1 from class sun.proxy.$Proxy6", and rightfully so, because that class isn't public. I think I will avoid the usual "how could this even work before" in this commit message.
* | Merge pull request #2125 from retronym/ticket/7120Paul Phillips2013-02-237-1/+53
|\ \ | | | | | | SI-7120 Erasure must honor typeref prefixes
| * | SI-7120 Erasure must honor typeref prefixesJason Zaugg2013-02-147-1/+53
| | | | | | | | | | | | | | | | | | | | | Erasure was discarding these, which led to unnecessarily wide types in quite particular circumstances. This showed up as a double definition error in the reported bug when the bridge method clashed with the erased signature.
* | | Merge pull request #2162 from paulp/merge-210Paul Phillips2013-02-2318-286/+307
|\ \ \ | | | | | | | | Merge 2.10.x into master.
| * | | Merge remote-tracking branch 'origin/2.10.x' into masterPaul Phillips2013-02-2318-286/+307
|/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * origin/2.10.x: SI-7171 Consider prefix when assessing type finality. please ant with filenames, add comments Fixed error in reflection API docs about linearization order on method baseClasses Shadowed Implict typo (fixes no issue) remove unused imports Conflicts: src/reflect/scala/reflect/internal/Types.scala
| * | | Merge pull request #2157 from retronym/ticket/7171James Iry2013-02-228-2/+69
| |\ \ \ | | | | | | | | | | SI-7171 Consider prefix when assessing type finality.
| | * | | SI-7171 Consider prefix when assessing type finality.Jason Zaugg2013-02-228-2/+69
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `Type#isFinalType` determines if a type could have a non-bottom subtype. This property is exploited by the pattern matcher to flag impossible patterns. This check was ignoring the type's prefix, and incorrectly deemed that `T#A` in `trait T { final class A }` was a final type. But it could have been subtyped by `U#A` where `U` <:< `T`, or, more simply, by `T.this.A`. Now, type finality requires that the prefix is stable. The existing test cases in neg/patmat-type-check.scala still correctly flag incompatiblities. `isFinalType` is also used by some code that massages pattern matches post specialization. That is actually either broken or obsolete under virtpatmat, I've opened SI-7172 to invesigate that. It is also used by GenICode to determine whether to emit the appropriate equality checks that are correct in the face of boxing. It is possible that this change will force the slow path in some rare cases, but it won't affect correctness.
| * | | | Merge pull request #2120 from adriaanm/patmat-refactorAdriaan Moors2013-02-229-3862/+3951
| |\ \ \ \ | | | | | | | | | | | | refactor the pattern matcher into smaller files
| | * | | | please ant with filenames, add commentsAdriaan Moors2013-02-216-21/+37
| | | | | |
| | * | | | remove unused importsAdriaan Moors2013-02-157-263/+206
| | | | | |
| * | | | | Merge pull request #2143 from heathermiller/docs/linearization-typoJames Iry2013-02-222-2/+2
| |\ \ \ \ \ | | |_|/ / / | |/| | | | Fixed error in reflection API docs about linearization order on method baseClasses
| | * | | | Fixed error in reflection API docs about linearization order on method ↵Heather Miller2013-02-192-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | baseClasses
| * | | | | Merge pull request #2133 from som-snytt/typos-2.10.xPaul Phillips2013-02-221-1/+1
| |\ \ \ \ \ | | | | | | | | | | | | | | Shadowed Implict typo (fixes no issue)
| | * | | | | Shadowed Implict typo (fixes no issue)Som Snytt2013-02-161-1/+1
| | | | | | |
* | | | | | | Merge pull request #2147 from JamesIry/master_SI-7015Grzegorz Kossakowski2013-02-224-12/+115
|\ \ \ \ \ \ \ | |_|_|_|_|_|/ |/| | | | | | SI-7015 Removes redundant aconst_null; pop; aconst_null creation
| * | | | | | SI-7015 Cleanup from review of null duplicationJames Iry2013-02-222-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Based on feedback on https://github.com/scala/scala/pull/2147 * Assertion in GenICode#adaptNullRef reports the erroneous type * Test makes the Null type explicit for greater clarity
| * | | | | | SI-7015 Removes redundant aconst_null; pop; aconst_null creationJames Iry2013-02-214-12/+115
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In an effort to adapt methods and field accesses of type Null to other types, we were always emitting aconst_null pop aconst_null The problem is we were doing that even when the JVM was in a position to know it had null value, e.g. when the user had written a null constant. This commit fixes that and includes a test to show that the resulting byte code still works even without repeating ourselves and/or repeating ourselves. This commit also makes the scala.runtim.Null$ constructor private. It was a sealed abstract class which prevented subclassing in Scala, but it didn't prevent subclassing in Java. A private constructor takes care of that hole so now the only value of type Null$ should be null. Along the way I found some other questionable things in adapt and I've added TODO's and issue https://issues.scala-lang.org/browse/SI-7159 to track.
* | | | | | | Merge pull request #2121 from adriaanm/patmat-refactor-masterGrzegorz Kossakowski2013-02-229-3850/+3989
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | merge the patmat refactoring into master
| * \ \ \ \ \ \ Merge branch 'patmat-refactor' into patmat-refactor-masterAdriaan Moors2013-02-129-3850/+3989
| |\ \ \ \ \ \ \ | | | |_|_|_|/ / | | |/| | | | / | | |_|_|_|_|/ | |/| | | | | Conflicts: src/compiler/scala/tools/nsc/typechecker/PatternMatching.scala
| | * | | | | [refactor] move some logic-related codeAdriaan Moors2013-02-123-352/+358
| | | | | | |
| | * | | | | [refactor] better name for symbolicCaseAdriaan Moors2013-02-121-16/+6
| | | | | | |
| | * | | | | [refactor] make hash-consing more robustAdriaan Moors2013-02-122-21/+23
| | | | | | |
| | * | | | | drop Cond in favor of PropAdriaan Moors2013-02-123-129/+93
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This brings the optimizations and the analyses closer together. In the future we may consider using a solver in the optimizations. For now, implication is checked ad-hoc using hash-consing and equality/subset tests... NOTE: prepareNewAnalysis resets said hash-consing, so must be called before approximating a match to propositions
| | * | | | | [refactor] prepare migration from Cond to PropAdriaan Moors2013-02-121-52/+52
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There's no change in behavior. Remove `modelNull` boolean in favor of subclassing.
| | * | | | | [refactor] type analysis consolidationAdriaan Moors2013-02-122-21/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | move instanceOfTpImplies out of CodeGen into TypeAnalysis
| | * | | | | [refactor] move PatternMatching.scala to transform.patmatAdriaan Moors2013-02-129-3806/+4032
| | | | | | |
| | * | | | | re-align 2.10.x's pattern matcher with master'sAdriaan Moors2013-02-121-93/+37
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The diff was mostly code cleanup, so most of that was propagated from master to 2.10.x. The remaining diff is encapsulated in compatibility stubs (see below). (There was also the on/off potential for the 2.10.x "new" pattern matcher. The old one is gone in 2.11, so no turning off new patmat, of course.) The stubs: ``` protected final def dealiasWiden(tp: Type) = tp.dealias // 2.11: dealiasWiden protected final def mkTRUE = CODE.TRUE_typed // 2.11: CODE.TRUE protected final def mkFALSE = CODE.FALSE_typed // 2.11: CODE.FALSE protected final def hasStableSymbol(p: Tree) = p.hasSymbol && p.symbol.isStable // 2.11: p.hasSymbolField && p.symbol.isStable protected final def devWarning(str: String) = global.debugwarn(str) // 2.11: omit ```
* | | | | | | Merge pull request #2082 from vjovanov/deprecate-actorsJames Iry2013-02-2230-2/+38
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | SI-6807 Deprecating the Actors library.
| * | | | | | | SI-6807 Deprecating the Actors library.Vojin Jovanovic2013-02-0730-2/+38
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | All public classes, traits and objects marked as deprecated. Added deprecation note on the package object. Embedded external libraries (ThreadPool etc.) are not deprecated as they are intended for internal use only. Review by: @phaller
* | | | | | | | Merge pull request #2154 from ↵James Iry2013-02-223-6/+6
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | viktorklang/wip-SI7164-nonfatal-notimplementederror SI-7164 - Removing NotImplementedError as Fatal from s.u.c.NonFatal