summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Fix another several typosMichaƂ Pociecha2015-06-1810-12/+12
| | | | | | I just used text search to check whether there are no more typos like these corrected by janekdb, and by the way fixed also some other ones which I saw.
* Fix some typos (a-c)Janek Bogucki2015-06-1818-21/+21
|
* Merge pull request #4527 from nicky-zs/fix_BigDecimalLukas Rytz2015-06-182-2/+34
|\ | | | | fix BigDecimal losing MathContext
| * make BigDecimalTest.testMathContext a bit easier to understandZhong Sheng2015-06-181-13/+14
| |
| * add more test for testMathContextZhong Sheng2015-05-291-2/+26
| |
| * add unit test for MathContext lostZhong Sheng2015-05-281-0/+7
| |
| * fix BigDecimal loosing MathContextZhong Sheng2015-05-271-2/+2
| |
* | Merge pull request #4535 from retronym/topic/sbt-replAdriaan Moors2015-06-171-1/+6
|\ \ | | | | | | [sbt] Allow the REPL to be run from the SBT build
| * | [sbt] Allow the REPL to be run from the SBT buildJason Zaugg2015-06-021-1/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Tell SBT to that we're forking an interactive process - Automatically add `-usejavacp` so the REPL adds the classes from the system classloader to the compilers classpath. JLine seems to be working from within this setup. ``` % sbt Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=384m; support was removed in 8.0 [info] Loading global plugins from /Users/jason/.sbt/0.13/plugins [info] Loading project definition from /Users/jason/code/scala2/project [info] *** Welcome to the sbt build definition for Scala! *** [info] This build definition has an EXPERIMENTAL status. If you are not [info] interested in testing or working on the build itself, please use [info] the Ant build definition for now. Check README.md for more information. > repl/run [info] Running scala.tools.nsc.MainGenericRunner -usejavacp Welcome to Scala version 2.11.6-SNAPSHOT-20150528-131650-70f0b1ded8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_25). Type in expressions to have them evaluated. Type :help for more information. scala> 1 + 1 res0: Int = 2 (reverse-i-search)`1': 1 + 1 ```
* | | Merge pull request #4550 from YawarRaza7349/patch-2Adriaan Moors2015-06-171-1/+1
|\ \ \ | | | | | | | | Fix missing quotes in EBNF of type alias
| * | | Fix missing quotes in EBNF of type aliasYawarRaza73492015-06-111-1/+1
| | | |
* | | | Merge pull request #4560 from adriaanm/t9356Adriaan Moors2015-06-174-11/+30
|\ \ \ \ | | | | | | | | | | SI-9356 more careful assertion in back-end
| * | | | SI-9356 more careful assertion in back-endAdriaan Moors2015-06-164-11/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Calling `exists` on a `Symbol` triggers unpickling, which failed for reasons I did not investigate. Replaced `sym.exists` by `sym != NoSymbol`, which is good enough here. Also replaced assertion by a `devWarning`, since the logic seems too ad-hoc to actually crash the compiler when it's invalidated. Partially reverts b45a91fe22. See also #1532.
* | | | | Merge pull request #4558 from janekdb/2.11.x-scaladoc-1-list-buffer-tryAdriaan Moors2015-06-172-2/+2
|\ \ \ \ \ | | | | | | | | | | | | Improve API documentation for ListBuffer and Try
| * | | | | Improve API documentation for ListBuffer and TryJanek Bogucki2015-06-162-2/+2
| | | | | |
* | | | | | Merge pull request #4551 from soc/topic/spec-default-argsAdriaan Moors2015-06-171-8/+20
|\ \ \ \ \ \ | | | | | | | | | | | | | | spec: Add 'Default Arguments' heading, sentence, example
| * | | | | | spec: Add 'Default Arguments' heading, sentence, exampleSimon Ochsenreither2015-06-121-8/+20
| | |_|/ / / | |/| | | | | | | | | | | | | | | | The sentence and the accompanying example were stolen from SID-1.
* | | | | | Merge pull request #4541 from vuakko/SI-9348_2.11.xAdriaan Moors2015-06-174-11/+52
|\ \ \ \ \ \ | | | | | | | | | | | | | | SI-9348 Fix missing last element in exclusive floating point ranges
| * | | | | | SI-9348 Fix missing last element in exclusive floating point rangesNiko Vuokko2015-06-174-11/+52
| | |_|/ / / | |/| | | | | | | | | | | | | | | | | | | | | | Fix exclusive floating point ranges to contain also the last element when the end-start difference is not an integer multiple of step.
* | | | | | Merge pull request #4545 from retronym/topic/constr-varargs-toolboxAdriaan Moors2015-06-173-0/+22
|\ \ \ \ \ \ | | | | | | | | | | | | | | Fix toolbox with varargs constructors
| * | | | | | SI-9212 Fix toolbox with varargs constructorsJason Zaugg2015-06-093-0/+22
| | |/ / / / | |/| | | | | | | | | | | | | | | | It was already working for methods, but not for constructors.
* | | | | | Merge pull request #4420 from Ichoran/issue/8254Adriaan Moors2015-06-171-0/+2
|\ \ \ \ \ \ | | | | | | | | | | | | | | SI-8254 List SerializationProxy fails to default(Read/Write)Object
| * | | | | | SI-8254 List SerializationProxy fails to default(Read/Write)ObjectRex Kerr2015-03-311-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Added `defaultWriteObject` to the beginning of `writeObject` and `defaultReadObject` to the beginning of `readObject` as required by specs: [writing](http://docs.oracle.com/javase/6/docs/platform/serialization/spec/output.html#861), [reading](http://docs.oracle.com/javase/6/docs/platform/serialization/spec/input.html#2971). Verified that it is a no-op in terms of serialization stream (but it provides hooks that Infinispan and others may use). No explicit tests. If there is a change in serialization, t8549 will catch it.
* | | | | | | Merge pull request #4540 from YawarRaza7349/patch-1Seth Tisue2015-06-171-0/+1
|\ \ \ \ \ \ \ | |_|_|/ / / / |/| | | | | | Clarify the definition of inheritance closure
| * | | | | | Clarify the definition of inheritance closureYawarRaza73492015-06-051-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | The definition now specifically mentions that C is an element of the inheritance closure of C.
* | | | | | | Merge pull request #4534 from Ichoran/sorting-reimplAdriaan Moors2015-06-163-477/+357
|\ \ \ \ \ \ \ | |_|_|_|/ / / |/| | | | | | Clean implementation of sorts for scala.util.Sorting.
| * | | | | | Clean implementation of sorts for scala.util.Sorting.Rex Kerr2015-06-013-477/+357
| | |_|_|/ / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Removed code based on Sun JDK sorts and implemented new (basic) sorts from scratch. Deferred to Java Arrays.sort whenever practical. Behavior of `scala.util.Sorting` should be unchanged, but changed documentation to specify when the Java methods are being used (as they're typically very fast). A JUnit test is provided. Performance is important for sorts. Everything is better with this patch, though it could be better yet, as described below. Below are sort times (in microseconds, SEM < 5%) for various 1024-element arrays of small case classes that compare on an int field (quickSort), or int arrays that use custom ordering (stableSort). Note: "degenerate" means there are only 16 values possible, so there are lots of ties. Times are all with fresh data (no re-using cache from run to run). Results: ``` random sorted reverse degenerate big:64k tiny:16 Old Sorting.quickSort 234 181 178 103 25,700 1.4 New Sorting.quickSort 170 27 115 74 18,600 0.8 Old Sorting.stableSort 321 234 236 282 32,600 2.1 New Sorting.stableSort 239 16 194 194 25,100 1.2 java.util.Arrays.sort 124 4 8 105 13,500 0.8 java.util.Arrays.sort|Box 126 15 13 112 13,200 0.9 ``` The new versions are uniformly faster, but uniformly slower than Java sorting. scala.util.Sorting has use cases that don't map easily in to Java unless everything is pre-boxed, but the overhead of pre-boxing is minimal compared to the sort. A snapshot of some of my benchmarking code is below. (Yes, lots of repeating myself--it's dangerous not to when trying to get somewhat accurate benchmarks.) ``` import java.util.Arrays import java.util.Comparator import math.Ordering import util.Sorting import reflect.ClassTag val th = ichi.bench.Thyme.warmed() case class N(i: Int, j: Int) {} val a = Array.fill(1024)( Array.tabulate(1024)(i => N(util.Random.nextInt, i)) ) var ai = 0 val b = Array.fill(1024)( Array.tabulate(1024)(i => N(i, i)) ) var bi = 0 val c = Array.fill(1024)( Array.tabulate(1024)(i => N(1024-i, i)) ) var ci = 0 val d = Array.fill(1024)( Array.tabulate(1024)(i => N(util.Random.nextInt(16), i)) ) var di = 0 val e = Array.fill(16)( Array.tabulate(65536)(i => N(util.Random.nextInt, i)) ) var ei = 0 val f = Array.fill(65535)( Array.tabulate(16)(i => N(util.Random.nextInt, i)) ) var fi = 0 val o = new Ordering[N]{ def compare(a: N, b: N) = if (a.i < b.i) -1 else if (a.i > b.i) 1 else 0 } for (s <- Seq("one", "two", "three")) { println(s) th.pbench{ val x = a(ai).clone; ai = (ai+1)%a.length; Sorting.quickSort(x)(o); x(x.length/3) } th.pbench{ val x = b(bi).clone; bi = (bi+1)%b.length; Sorting.quickSort(x)(o); x(x.length/3) } th.pbench{ val x = c(ci).clone; ci = (ci+1)%c.length; Sorting.quickSort(x)(o); x(x.length/3) } th.pbench{ val x = d(di).clone; di = (di+1)%d.length; Sorting.quickSort(x)(o); x(x.length/3) } th.pbench{ val x = e(ei).clone; ei = (ei+1)%e.length; Sorting.quickSort(x)(o); x(x.length/3) } th.pbench{ val x = f(fi).clone; fi = (fi+1)%f.length; Sorting.quickSort(x)(o); x(x.length/3) } } def ix(ns: Array[N]) = { val is = new Array[Int](ns.length) var i = 0 while (i < ns.length) { is(i) = ns(i).i i += 1 } is } val p = new Ordering[Int]{ def compare(a: Int, b: Int) = if (a > b) 1 else if (a < b) -1 else 0 } for (s <- Seq("one", "two", "three")) { println(s) val tag: ClassTag[Int] = implicitly[ClassTag[Int]] th.pbench{ val x = ix(a(ai)); ai = (ai+1)%a.length; Sorting.stableSort(x)(tag, p); x(x.length/3) } th.pbench{ val x = ix(b(bi)); bi = (bi+1)%b.length; Sorting.stableSort(x)(tag, p); x(x.length/3) } th.pbench{ val x = ix(c(ci)); ci = (ci+1)%c.length; Sorting.stableSort(x)(tag, p); x(x.length/3) } th.pbench{ val x = ix(d(di)); di = (di+1)%d.length; Sorting.stableSort(x)(tag, p); x(x.length/3) } th.pbench{ val x = ix(e(ei)); ei = (ei+1)%e.length; Sorting.stableSort(x)(tag, p); x(x.length/3) } th.pbench{ val x = ix(f(fi)); fi = (fi+1)%f.length; Sorting.stableSort(x)(tag, p); x(x.length/3) } } for (s <- Seq("one", "two", "three")) { println(s) th.pbench{ val x = a(ai).clone; ai = (ai+1)%a.length; Arrays.sort(x, o); x(x.length/3) } th.pbench{ val x = b(bi).clone; bi = (bi+1)%b.length; Arrays.sort(x, o); x(x.length/3) } th.pbench{ val x = c(ci).clone; ci = (ci+1)%c.length; Arrays.sort(x, o); x(x.length/3) } th.pbench{ val x = d(di).clone; di = (di+1)%d.length; Arrays.sort(x, o); x(x.length/3) } th.pbench{ val x = e(ei).clone; ei = (ei+1)%e.length; Arrays.sort(x, o); x(x.length/3) } th.pbench{ val x = f(fi).clone; fi = (fi+1)%f.length; Arrays.sort(x, o); x(x.length/3) } } def bx(is: Array[Int]): Array[java.lang.Integer] = { val Is = new Array[java.lang.Integer](is.length) var i = 0 while (i < is.length) { Is(i) = java.lang.Integer.valueOf(is(i)) i += 1 } Is } def xb(Is: Array[java.lang.Integer]): Array[Int] = { val is = new Array[Int](Is.length) var i = 0 while (i < is.length) { is(i) = Is(i).intValue i += 1 } is } val q = new Comparator[java.lang.Integer]{ def compare(a: java.lang.Integer, b: java.lang.Integer) = o.compare(a.intValue, b.intValue) } for (s <- Seq("one", "two", "three")) { println(s) val tag: ClassTag[Int] = implicitly[ClassTag[Int]] th.pbench{ val x = bx(ix(a(ai))); ai = (ai+1)%a.length; Arrays.sort(x, q); xb(x)(x.length/3) } th.pbench{ val x = bx(ix(b(bi))); bi = (bi+1)%b.length; Arrays.sort(x, q); xb(x)(x.length/3) } th.pbench{ val x = bx(ix(c(ci))); ci = (ci+1)%c.length; Arrays.sort(x, q); xb(x)(x.length/3) } th.pbench{ val x = bx(ix(d(di))); di = (di+1)%d.length; Arrays.sort(x, q); xb(x)(x.length/3) } th.pbench{ val x = bx(ix(e(ei))); ei = (ei+1)%e.length; Arrays.sort(x, q); xb(x)(x.length/3) } th.pbench{ val x = bx(ix(f(fi))); fi = (fi+1)%f.length; Arrays.sort(x, q); xb(x)(x.length/3) } } ```
* | | | | | Merge pull request #4548 from ScrapCodes/git_4522Jason Zaugg2015-06-146-25/+187
|\ \ \ \ \ \ | |_|_|_|/ / |/| | | | | SI-7747 Make REPL wrappers serialization friendly.
| * | | | | SI-7747 More tests and logic according to our conclusions on #4522.Prashant Sharma2015-06-105-6/+29
| | | | | |
| * | | | | SI-7747 Limit previous change to imports of REPL valsJason Zaugg2015-05-262-14/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We only need to introduce the temporary val in the imports wrapper when we are importing a val or module defined in the REPL. The test case from the previous commit still passes, but we are generating slightly simpler code. Compared to 2.11.6, these two commits result in the following diff: https://gist.github.com/retronym/aa4bd3aeef1ab1b85fe9
| * | | | | SI-7747 Make REPL wrappers serialization friendlyPrashant Sharma2015-05-266-25/+162
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Spark has been shipping a forked version of our REPL for sometime. We have been trying to fold the patches back into the mainline so they can defork. This is the last outstanding issue. Consider this REPL session: ``` scala> val x = StdIn.readInt scala> class A(a: Int) scala> serializedAndExecuteRemotely { () => new A(x) } ``` As shown by the enclosed test, the REPL, even with the Spark friendly option `-Yrepl-class-based`, will re-initialize `x` on the remote system. This test simulates this by running a REPL session, and then deserializing the resulting closure into a fresh classloader based on the class files generated by that session. Before this patch, it printed "evaluating x" twice. This is based on the Spark change described: https://github.com/mesos/spark/pull/535#discussion_r3541925 A followup commit will avoid the `val lineN$read = ` part if we import classes or type aliases only. [Original commit from Prashant Sharma, test case from Jason Zaugg]
* | | | | | Merge pull request #4536 from danieldietrich/2.11.xJason Zaugg2015-06-071-4/+5
|\ \ \ \ \ \ | | | | | | | | | | | | | | Applying inverse index instead of reversing a List
| * | | | | | Better names for length valuesDaniel Dietrich2015-06-051-5/+5
| | | | | | |
| * | | | | | Applying inverse index instead of reversing a ListDaniel Dietrich2015-06-021-1/+2
| | |/ / / / | |/| | | |
* | | | | | Merge pull request #4519 from lrytz/opt/nullness-2.11Jason Zaugg2015-06-0713-26/+1364
|\ \ \ \ \ \ | |_|_|/ / / |/| | | | | Nullness Analysis for GenBCode
| * | | | | Fix aliasing / nullness of CHECKCASTLukas Rytz2015-06-043-3/+30
| | | | | |
| * | | | | Compiler option for disabling nullness analysisLukas Rytz2015-06-044-9/+23
| | | | | |
| * | | | | Address review feedbackLukas Rytz2015-05-254-69/+109
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Address feedback in #4516 / 57b8da4cd8. Save allocations of NullnessValue - there's only 4 possible instances. Also save tuple allocations in InstructionStackEffect.
| * | | | | Fix wrong result in InstructionStackEffect for ATHROW, RETURNLukas Rytz2015-05-251-3/+3
| | | | | |
| * | | | | Fix wrong indexing in FrameExtensions.peekStackLukas Rytz2015-05-251-1/+1
| | | | | |
| * | | | | Enable nullness analysis in the inlinerLukas Rytz2015-05-255-15/+43
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When inlining an instance call, the inliner has to ensure that a NPE is still thrown if the receiver object is null. By using the nullness analysis, we can avoid emitting this code in case the receiver object is known to be not-null.
| * | | | | Nullness AnalysisLukas Rytz2015-05-228-8/+1237
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Tracks nullness of values using an ASM analyzer. Tracking nullness requires alias tracking for local variables and stack values. For example, after an instance call, local variables that point to the same object as the receiver are treated not-null.
* | | | | | Merge pull request #4537 from som-snytt/issue/xml-unapplyJason Zaugg2015-06-043-21/+17
|\ \ \ \ \ \ | |_|/ / / / |/| | | | | SI-9343 Xlint less strict on pattern sequences
| * | | | | SI-9343 Xlint less strict on pattern sequencesSom Snytt2015-06-033-21/+17
|/ / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -Xlint:stars-align warns only if elementarity > 0, that is, if an extracted sequence is not matched entirely by a pattern sequence, that is, in SLS 8.1.9 on pattern sequences, n = 1 and that pattern is a pattern sequence. This is still only triggered if productarity > 0, that is, a non-pattern-sequence pattern is required for the match. This is a sensitive area because it borders on exhaustiveness checking: it would be preferable to verify just that the match is exhaustive, and to emit this warning only if it is not.
* | | | | Merge pull request #4511 from sriggin/SI-9322Lukas Rytz2015-05-282-3/+3
|\ \ \ \ \ | | | | | | | | | | | | SI-9322 Elapsed times in compiler calculated with System.currentTimeMillis and System.nanoTime
| * | | | | SI-9322 Elapsed times in compiler calculated withSean Riggin2015-05-262-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | System.currentTimeMillis and System.nanoTime Reverted elapsedTime calculation in compiler to use System.currentTimeMillis, consistent with the start time.
* | | | | | Merge pull request #4528 from xuwei-k/patch-2Lukas Rytz2015-05-281-1/+1
|\ \ \ \ \ \ | | | | | | | | | | | | | | fix typo
| * | | | | | fix typokenji yoshida2015-05-281-1/+1
| | |_|_|_|/ | |/| | | |
* | | | | | Merge pull request #4530 from som-snytt/issue/9332Lukas Rytz2015-05-282-20/+22
|\ \ \ \ \ \ | | | | | | | | | | | | | | SI-9332 Iterator.span exhausts leading iterator
| * | | | | | SI-9332 Iterator.span simplifiedSom Snytt2015-05-271-15/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The queue is only used when the prefix is drained by finish. Since a finished flag has been introduced, distinguish between the drained state and using the underlying (buffered) iterator.