| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
| |
Rename `undoLog.run` to `rollback`, use java ArrayList instead of
helper methods to copy to an array.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Some changes to the trait encoding came late in the 2.12 cycle, and the
inliner was not adapted to support it in the best possible way.
In 2.12.0 concrete trait methods are encoded as
interface T {
default int m() { return 1 }
static int m$(T $this) { <invokespecial $this.m()> }
}
class C implements T {
public int m() { return T.m$(this) }
}
If a trait method is selected for inlining, the 2.12.0 inliner would
copy its body into the static super accessor `T.m$`, and from there into
the mixin forwarder `C.m`.
This commit special-cases the inliner:
- We don't inline into static super accessors and mixin forwarders.
- Insted, when inlining an invocation of a mixin forwarder, the
inliner also follows through the two forwarders and inlines the
trait method body.
There was a difficulty implementing this: inlining the static static
super accessor would copy an `invokespecial` instruction into a
different classfile, which is not legal / may change semantics. That
`invokespecial` is supposed to disappear when inlining the actual
default method body. However, this last step may fail, for example
because the trait method body itself contains instructions that are not
legal in a different classfile.
It is very difficult to perform all necessary checks ahead of time. So
instead, this commit implements the ability to speculatively inline a
callsite and roll back if necessary.
The commit also cleans up the implementation of inliner warnings a
little. The previous code would always emit a warning when a method
annotated `@inline` was not picked by the heuristics - this was a
problem when the callsite in the static super accessor was no longer
chosen.
|
|\
| |
| | |
SI-9814 Fix synchronized in specialized overrides
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Specialization creates a subclasses of a specializd class for each
type parameter combination. These contains copies of the methods from
the superclass.
However, before this transform, the pattern of self-synchronization
in a method body had been replace by flag Flag.SYNCHRONIZED on the
method symbol. This was not being propagated to the override, and
hence no locking occured.
This commit modifies the creation of the specialized overload symbol
to copy the SYNCHRONIZED flag, as was already done for ASBOVERRIDE.
I have also done the same for the `@strictfp` annotation.
|
|\ \
| | |
| | | |
SI-6412 remove flaky test
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
I have repeatedly seen this fail CI runs, including recently
as the comment in the test itself says: "I'm not sure this is a great
way to test for memory leaks, since we're also testing how good
the JVM's GC is, and this is not easily reproduced between
machines/over time"
|
|\ \ \
| | | |
| | | | |
SI-9945 Don't warn imports in java units
|
| | | |
| | | |
| | | |
| | | | |
Scaladoc was prone to warning about java imports.
|
|\ \ \ \
| | | | |
| | | | | |
Changed HashMap.getOrElseUpdate to only calculate the index once
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Fixes https://issues.scala-lang.org/browse/SI-10049
Since `groupBy` uses this method extensively and suffered a measurable slowdown in `2.12.0`, this modification restores (and exceeds) its original speed.
---
included benchmarks:
(`ns/op` → smaller is better)
`before (2.12.0):`
```java
Benchmark (size) Mode Cnt Score Error Units
s.c.immutable.VectorMapBenchmark.groupBy 10 avgt 20 865.693 ± 7.869 ns/op
s.c.immutable.VectorMapBenchmark.groupBy 100 avgt 20 3095.657 ± 56.438 ns/op
s.c.immutable.VectorMapBenchmark.groupBy 1000 avgt 20 28247.005 ± 470.513 ns/op
s.c.mutable.HashMapBenchmark.get 10 avgt 20 679.448 ± 11.809 ns/op
s.c.mutable.HashMapBenchmark.get 100 avgt 20 7240.178 ± 61.734 ns/op
s.c.mutable.HashMapBenchmark.get 1000 avgt 20 95725.127 ± 2373.458 ns/op
s.c.mutable.HashMapBenchmark.getOrElseUpdate 10 avgt 20 836.561 ± 20.085 ns/op
s.c.mutable.HashMapBenchmark.getOrElseUpdate 100 avgt 20 7891.368 ± 56.808 ns/op
s.c.mutable.HashMapBenchmark.getOrElseUpdate 1000 avgt 20 97478.629 ± 1782.497 ns/op
s.c.mutable.HashMapBenchmark.put 10 avgt 20 243.422 ± 2.915 ns/op
s.c.mutable.HashMapBenchmark.put 100 avgt 20 5810.927 ± 60.054 ns/op
s.c.mutable.HashMapBenchmark.put 1000 avgt 20 82175.539 ± 1690.296 ns/op
```
`after:`
```java
Benchmark (size) Mode Cnt Score Error Units
s.c.immutable.VectorMapBenchmark.groupBy 10 avgt 20 627.007 ± 9.718 ns/op
s.c.immutable.VectorMapBenchmark.groupBy 100 avgt 20 2086.955 ± 19.042 ns/op
s.c.immutable.VectorMapBenchmark.groupBy 1000 avgt 20 19515.234 ± 173.647 ns/op
s.c.mutable.HashMapBenchmark.get 10 avgt 20 683.977 ± 11.843 ns/op
s.c.mutable.HashMapBenchmark.get 100 avgt 20 7345.675 ± 41.092 ns/op
s.c.mutable.HashMapBenchmark.get 1000 avgt 20 95085.926 ± 1702.997 ns/op
s.c.mutable.HashMapBenchmark.getOrElseUpdate 10 avgt 20 503.208 ± 2.643 ns/op
s.c.mutable.HashMapBenchmark.getOrElseUpdate 100 avgt 20 5526.483 ± 28.262 ns/op
s.c.mutable.HashMapBenchmark.getOrElseUpdate 1000 avgt 20 69265.900 ± 674.958 ns/op
s.c.mutable.HashMapBenchmark.put 10 avgt 20 252.481 ± 7.597 ns/op
s.c.mutable.HashMapBenchmark.put 100 avgt 20 5708.034 ± 110.360 ns/op
s.c.mutable.HashMapBenchmark.put 1000 avgt 20 82051.378 ± 1432.009 ns/op
```
i.e. for the given benchmark conditions `~40%` faster `groupBy` and `getOrElseUpdate`
|
| | | | | |
|
| | | | | |
|
|\ \ \ \ \
| |/ / / /
|/| | | | |
Whitelist the remaining changes since 2.12.0 that break all builds
|
|/ / / /
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
The changes were made in https://github.com/scala/scala/pull/5481,
subsequently breaking binary compatibility checks after
https://github.com/scala/scala/pull/5532 was merged, too. The affected
methods are part of an internal implementation class. Whitelisting
should be safe.
|
|\ \ \ \
| | | | |
| | | | | |
SI-10007 sys.process thread sync
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
A previous change to replace `SyncVar.set` with `SyncVar.put`
breaks things.
This commit tweaks the thread synchronizing in `sys.process`
to actually use `SyncVar` to sync and pass a var.
Joining the thread about to exit is superfluous.
A result is put exactly once, and consumers use
non-destructive `get`.
Note that as usual, avoid kicking off threads in a static
context, since class loading cycles are somewhat dicier
with 2.12 lambdas. In particular, REPL is a static context
by default.
SI-10007 Clarify deprecation message
The message on `set` was self-fulfilling, as it didn't
hint that `put` has different semantics.
So explain why `put` helps avoid errors instead of
creating them.
SI-10007 Always set exit value
Always put a value to exit code, defaulting to None.
Also clean up around tuple change to unfortunately
named Future.apply. Very hard to follow those types.
Date command pollutes output, so tweak test.
|
|\ \ \ \ \
| |_|_|_|/
|/| | | | |
SI-9885 Don't return offset past EOF
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
On bad line number, `lineToOffset` should not return
an offset past EOF (which was sentinel, internally).
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
* Add "scala" language code to pure-Scala code blocks.
* Add "java" language code to Java code block.
* Add "scala" language code to almost-pure-Scala code blocks.
Add "scala" language code to two code blocks whose content was Scala except
for containing ellipses (\ldots).
* Add "scala" language code to non-literal-Scala code blocks.
Add "scala" language code to code blocks that contain Scala but also special
elements, such as identifiers that are italicized or have prime marks (e.g., e′,
e′′), ellipses (\ldots), etc.
|
|\ \ \ \ \
| |_|_|/ /
|/| | | | |
Reinstate MiMa and address problems
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
MiMa has been off-duty because of a bug in handling the default
value of the new paramter `--direction`.
This commit explicitly provides this parameter to get things
working again post haste.
Fixes scala/scala-dev#264
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
This reverts commit 656162bb48fbbd703790a2c94d4563e40ddfdfc2.
Adding new APIs is not possible until a major release.
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
- Revert a typo fix to a non-private method
- Whitelist changes to internals of runtime reflection that
are not part of the API and should only be referenced from
within scala-reflect.jar itself.
|
|\ \ \ \ \
| | | | | |
| | | | | | |
SI-9953 Any Any aborts warn on equals
|
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
Don't warn about equals if any `Any` is involved. cf SI-8965
The condition for warning is that both types lub to a supertype
of Object.
|
|\ \ \ \ \ \
| | | | | | |
| | | | | | | |
SI-9944 Scan after interp expr keeps CR
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
In an interpolated expression `s"""${ e }"""`, the scanner
advances input past the RBRACE. If a multiline string as
shown, get the next raw char, because CR is significant.
|
|\ \ \ \ \ \ \
| | | | | | | |
| | | | | | | | |
SI-9915 Fix test on windows
|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
Use `javac: -encoding UTF-8` tool args comment
so javac uses correct source encoding.
|
|\ \ \ \ \ \ \ \
| | | | | | | | |
| | | | | | | | | |
Avoid double-compiling junit sources
|
| |/ / / / / / /
| | | | | | | |
| | | | | | | |
| | | | | | | | |
Fixes scala/scala-dev#266
|
|\ \ \ \ \ \ \ \
| | | | | | | | |
| | | | | | | | | |
improve top-level compiler/reflect doc text
|
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | | |
this shows up at http://www.scala-lang.org/api/2.12.0/scala-compiler/
ideally there'd be something better here, but we should at least not
link to egregiously outdated stuff
|
|\ \ \ \ \ \ \ \ \
| |_|_|_|_|/ / / /
|/| | | | | | | | |
SI-10059 reset the `DEFERRED` flag for Java varargs forwarders
|
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | | |
When an abstract method is annotated `@varargs`, make sure that the
generated synthetic Java varargs method does not have the `DEFERRED`
flag (`ACC_ABSTRACT` in bytecode).
The flag lead to an NPE in the code generator, because the ASM framework
leaves certain fields `null` for abstract methods (`localVariables` in
this case).
Interestingly this did not crash in 2.11.x: the reason is that the test
whether to emit a method body or not has changed in the 2.12 backend
(in c8e6050).
val isAbstractMethod = [..] methSymbol.isDeferred [..] // 2.11
val isAbstractMethod = rhs == EmptyTree // 2.12
So in 2.11, the varargs forwarder method was actually left abstract in
bytecode, leading to an `AbstractMethodError: T.m([I)I` at run-time.
|
|\ \ \ \ \ \ \ \ \
| |_|_|/ / / / / /
|/| | | | | | | | |
Add “test”, “scaladoc” and “repl” projects to scala-compiler docs
|
| |/ / / / / / /
| | | | | | | |
| | | | | | | |
| | | | | | | | |
This makes the scaladoc bundle for scala-compiler consistent with the
binary and source bundles.
|
|\ \ \ \ \ \ \ \
| | | | | | | | |
| | | | | | | | | |
SI-9915 Utf8_info are modified UTF8
|
| | |_|_|/ / / /
| |/| | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
Use DataInputStream.readUTF to read CONSTANT_Utf8_info.
This fixes reading embedded null char and supplementary chars.
|
|\ \ \ \ \ \ \ \
| | | | | | | | |
| | | | | | | | | |
Fix typo in scalac, scalap man pages
|
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | | |
s/exist status/exit status/
|
|\ \ \ \ \ \ \ \ \
| |/ / / / / / / /
|/| | | | | | | | |
SI-8433 SI-9689 Progressive tests
|
|/ / / / / / / /
| | | | | | | |
| | | | | | | |
| | | | | | | | |
Because no one votes against a progressive test.
|
|\ \ \ \ \ \ \ \
| | | | | | | | |
| | | | | | | | | |
Typo and spelling corrections
|
|/ / / / / / / / |
|
|\ \ \ \ \ \ \ \
| | | | | | | | |
| | | | | | | | | |
remove old, now-unused MANIFEST.MF file
|
| | |_|/ / / / /
| |/| | | | | |
| | | | | | | |
| | | | | | | | |
as per https://github.com/scala/scala-dev/issues/211
|
|\ \ \ \ \ \ \ \
| | | | | | | | |
| | | | | | | | | |
avoid boxing
|
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | | |
scala.runtime.Rich{Double, Float} has `isNaN` and these are value class.
Also java.lang.{Double, Float} has `isNaN`.
- https://docs.oracle.com/javase/8/docs/api/java/lang/Double.html#isNaN--
- https://docs.oracle.com/javase/8/docs/api/java/lang/Float.html#isNaN--
We can't call `RichDouble#isNaN` because
`implicit def double2Double(x: Double): java.lang.Double`
is higher priority than
`implicit def doubleWrapper(x: Double): RichDouble`
```
$ scala -version
Scala code runner version 2.11.8 -- Copyright 2002-2016, LAMP/EPFL
$ scala -Xprint:jvm -e "1.0.isNaN"
[[syntax trees at end of jvm]] // scalacmd616162202928036892.scala
package <empty> {
object Main extends Object {
def main(args: Array[String]): Unit = {
new <$anon: Object>();
()
};
def <init>(): Main.type = {
Main.super.<init>();
()
}
};
final class anon$1 extends Object {
def <init>(): <$anon: Object> = {
anon$1.super.<init>();
scala.this.Predef.double2Double(1.0).isNaN();
()
}
}
}
```
|
|\ \ \ \ \ \ \ \ \
| | | | | | | | | |
| | | | | | | | | | |
SI-9888. Prevent OOM on ParRange. Improve toString.
|