| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
| |
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.
|
|\
| |
| | |
SI-7006 Eliminate NOPs and unreachable code
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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.
|
|/
|
|
|
|
| |
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.
|
|\
| |
| | |
Spring cleaning
|
| |
| |
| |
| |
| |
| | |
- @param tags whose name drifted from the corresponding parameter
- Remove or complete a few stray stub comments (@param foo ...)
- Use @tparam where appropriate.
|
| |
| |
| |
| |
| | |
Was: ``blah''
Now: `blah`
|
| | |
|
| |
| |
| |
| | |
Use .length directly, avoiding the allocation of the WrappedArray.
|
| | |
|
| | |
|
| | |
|
| |
| |
| |
| |
| | |
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.
|
| | |
|
| |
| |
| |
| | |
With the exception of toString and the odd JavaBean getter.
|
| |
| |
| |
| | |
An exception is made for toString.
|
|\ \
| |/
|/| |
fixes the test for SI-7112
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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.
|
|\ \
| | |
| | | |
SI-7120 Erasure must honor typeref prefixes
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
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 2.10.x into master.
|
|/| | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
* 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
|
| |\ \ \
| | | | |
| | | | | |
SI-7171 Consider prefix when assessing type finality.
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
`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.
|
| |\ \ \ \
| | | | | |
| | | | | | |
refactor the pattern matcher into smaller files
|
| | | | | | |
|
| | | | | | |
|
| |\ \ \ \ \
| | |_|/ / /
| |/| | | | |
Fixed error in reflection API docs about linearization order on method baseClasses
|
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
baseClasses
|
| |\ \ \ \ \
| | | | | | |
| | | | | | | |
Shadowed Implict typo (fixes no issue)
|
| | | | | | | |
|
|\ \ \ \ \ \ \
| |_|_|_|_|_|/
|/| | | | | | |
SI-7015 Removes redundant aconst_null; pop; aconst_null creation
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
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
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
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 the patmat refactoring into master
|
| |\ \ \ \ \ \ \
| | | |_|_|_|/ /
| | |/| | | | /
| | |_|_|_|_|/
| |/| | | | | |
Conflicts:
src/compiler/scala/tools/nsc/typechecker/PatternMatching.scala
|
| | | | | | | |
|
| | | | | | | |
|
| | | | | | | |
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
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
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
There's no change in behavior.
Remove `modelNull` boolean in favor of subclassing.
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
move instanceOfTpImplies out of CodeGen into TypeAnalysis
|
| | | | | | | |
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
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
```
|
|\ \ \ \ \ \ \
| | | | | | | |
| | | | | | | | |
SI-6807 Deprecating the Actors library.
|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
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
|
|\ \ \ \ \ \ \ \
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | | |
viktorklang/wip-SI7164-nonfatal-notimplementederror
SI-7164 - Removing NotImplementedError as Fatal from s.u.c.NonFatal
|