{"push_id":2182837649,"size":1000,"distinct_size":4,"ref":"refs/heads/issue/2458-precedence","head":"6c49757d86daf82b111220350da74d0e88f0f1ca","before":"cdad6626a93ec65593456db8586453497cd48d1c","commits":[{"sha":"18269eabe19a33e627b07a83b43521efafb95ba1","author":{"name":"Adriaan Moors","email":"b1bbc8f7d9b1f3f69d0e5ab77559c084f9d79d89@lightbend.com"},"message":"Merge pull request #5612 from adriaanm/patmat_cleanup\n\nCleanup in aisle patmat","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/18269eabe19a33e627b07a83b43521efafb95ba1"},{"sha":"c2356bed162c4720888d17eade7c39d96f54916e","author":{"name":"Martijn Hoekstra","email":"2e5d7594944976f023463915c014b158e56f193d@gmail.com"},"message":"fix doc for walkfilter and walk","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/c2356bed162c4720888d17eade7c39d96f54916e"},{"sha":"cb7192c79f35e8b4c852f6859c9ef0cece173a36","author":{"name":"Adriaan Moors","email":"b1bbc8f7d9b1f3f69d0e5ab77559c084f9d79d89@lightbend.com"},"message":"Restarr on 2.11.8-18269ea","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/cb7192c79f35e8b4c852f6859c9ef0cece173a36"},{"sha":"f31745ac9bc5d2fcad1ab52caf4a3b6169c7f9b4","author":{"name":"Carsten Varming","email":"aef953c9bb8ae4cb6968861ba5a977229eee1607@twitter.com"},"message":"SI-8774 Null link fields in mutable hash maps on removal.\n\n(cherry picked from commit 9a2486087a9739108265e7830ebaa96373605d02)","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/f31745ac9bc5d2fcad1ab52caf4a3b6169c7f9b4"},{"sha":"5fd422b6aa40855c86d0054e61da774151a3272e","author":{"name":"Pap Lőrinc","email":"f9c795f4c14e026c90379a405bd993c89d9e32dc@gmail.com"},"message":"Optimized HashTable.index\n\n(`ops/s`, smaller is better)\n\n`Before (9c5d3f8)`:\n```scala\n[info] # Run complete. Total time: 00:08:15\n[info]\n[info] Benchmark                                     (size)  Mode  Cnt      Score      Error  Units\n[info] s.c.immutable.VectorMapBenchmark.groupBy          10  avgt   20    645.594 ±    9.435  ns/op\n[info] s.c.immutable.VectorMapBenchmark.groupBy         100  avgt   20   2084.216 ±   37.814  ns/op\n[info] s.c.immutable.VectorMapBenchmark.groupBy        1000  avgt   20  19878.481 ±  262.404  ns/op\n[info] s.c.mutable.HashMapBenchmark.get                  10  avgt   20    689.941 ±    5.850  ns/op\n[info] s.c.mutable.HashMapBenchmark.get                 100  avgt   20   7357.330 ±   45.956  ns/op\n[info] s.c.mutable.HashMapBenchmark.get                1000  avgt   20  95767.200 ± 1550.771  ns/op\n[info] s.c.mutable.HashMapBenchmark.getOrElseUpdate      10  avgt   20    509.181 ±    2.683  ns/op\n[info] s.c.mutable.HashMapBenchmark.getOrElseUpdate     100  avgt   20   5563.301 ±   32.335  ns/op\n[info] s.c.mutable.HashMapBenchmark.getOrElseUpdate    1000  avgt   20  71965.365 ± 1809.738  ns/op\n[info] s.c.mutable.HashMapBenchmark.put                  10  avgt   20    247.270 ±    3.972  ns/op\n[info] s.c.mutable.HashMapBenchmark.put                 100  avgt   20   5646.185 ±  106.172  ns/op\n[info] s.c.mutable.HashMapBenchmark.put                1000  avgt   20  81303.663 ±  954.938  ns/op\n```\n\n`Changed modulo to bitwise and in hash calculation (4c729fe)`:\n```scala\n[info] Benchmark                                     (size)  Mode  Cnt      Score      Error  Units\n[info] s.c.immutable.VectorMapBenchmark.groupBy          10  avgt   20    631.291 ±    9.269  ns/op\n[info] s.c.immutable.VectorMapBenchmark.groupBy         100  avgt   20   2077.885 ±   59.737  ns/op\n[info] s.c.immutable.VectorMapBenchmark.groupBy        1000  avgt   20  15458.278 ±  317.347  ns/op\n[info] s.c.mutable.HashMapBenchmark.get                  10  avgt   20    678.013 ±    4.453  ns/op\n[info] s.c.mutable.HashMapBenchmark.get                 100  avgt   20   7258.522 ±   76.088  ns/op\n[info] s.c.mutable.HashMapBenchmark.get                1000  avgt   20  94748.845 ± 1226.120  ns/op\n[info] s.c.mutable.HashMapBenchmark.getOrElseUpdate      10  avgt   20    498.042 ±    5.006  ns/op\n[info] s.c.mutable.HashMapBenchmark.getOrElseUpdate     100  avgt   20   5243.154 ±  110.372  ns/op\n[info] s.c.mutable.HashMapBenchmark.getOrElseUpdate    1000  avgt   20  68194.752 ±  655.436  ns/op\n[info] s.c.mutable.HashMapBenchmark.put                  10  avgt   20    257.275 ±    1.411  ns/op\n[info] s.c.mutable.HashMapBenchmark.put                 100  avgt   20   5318.532 ±  152.923  ns/op\n[info] s.c.mutable.HashMapBenchmark.put                1000  avgt   20  79607.160 ±  651.779  ns/op\n\n```\n\n`Optimized HashTable.index (6cc1504)`:\n```scala\n[info] Benchmark                                     (size)  Mode  Cnt      Score      Error  Units\n[info] s.c.immutable.VectorMapBenchmark.groupBy          10  avgt   20    616.164 ±    4.712  ns/op\n[info] s.c.immutable.VectorMapBenchmark.groupBy         100  avgt   20   2034.447 ±   14.495  ns/op\n[info] s.c.immutable.VectorMapBenchmark.groupBy        1000  avgt   20  14712.164 ±  119.983  ns/op\n[info] s.c.mutable.HashMapBenchmark.get                  10  avgt   20    679.046 ±    6.872  ns/op\n[info] s.c.mutable.HashMapBenchmark.get                 100  avgt   20   7242.097 ±   41.244  ns/op\n[info] s.c.mutable.HashMapBenchmark.get                1000  avgt   20  95342.919 ± 1521.328  ns/op\n[info] s.c.mutable.HashMapBenchmark.getOrElseUpdate      10  avgt   20    488.034 ±    4.554  ns/op\n[info] s.c.mutable.HashMapBenchmark.getOrElseUpdate     100  avgt   20   4883.123 ±   59.268  ns/op\n[info] s.c.mutable.HashMapBenchmark.getOrElseUpdate    1000  avgt   20  65174.034 ±  496.759  ns/op\n[info] s.c.mutable.HashMapBenchmark.put                  10  avgt   20    267.983 ±    1.797  ns/op\n[info] s.c.mutable.HashMapBenchmark.put                 100  avgt   20   5097.351 ±  104.538  ns/op\n[info] s.c.mutable.HashMapBenchmark.put                1000  avgt   20  78772.540 ±  543.935  ns/op\n```\n\nSummary, i.e. the effect of this PR, according to the benchmarks:\n* `groupBy` has a `~35%` speedup\n* `get` didn't change\n* `getOrElseUpdate` has a `~10%` speedup\n* `put` has a `~3%` speedup\n\nNote: caching the `exponent` to a local private field (`Byte` or `Int`) didn't have any performance advantage (only a minor slowdown was measured, possibly because it's accessed via an interface now)\n(cherry picked from commit a5014447861a5678c8b595e235019bb8fec098a7)","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/5fd422b6aa40855c86d0054e61da774151a3272e"},{"sha":"26ad9cc73c88bad0140adb7cec583a4d05db498d","author":{"name":"Pap Lőrinc","email":"f9c795f4c14e026c90379a405bd993c89d9e32dc@gmail.com"},"message":"Changed modulo to bitwise AND in hash calculation\n\n(cherry picked from commit 7952525e7119282ec8308a0076db54923f95dc21)","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/26ad9cc73c88bad0140adb7cec583a4d05db498d"},{"sha":"276db03285e25e54acbe004070ea9853193ab73f","author":{"name":"Pap Lőrinc","email":"f9c795f4c14e026c90379a405bd993c89d9e32dc@gmail.com"},"message":"Changed hashing bit rotation to use Integer.rotateRight\n\n(cherry picked from commit bc912230129d68466474bcc6c99356b44f65c3c2)","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/276db03285e25e54acbe004070ea9853193ab73f"},{"sha":"02c30a174de3032e377b3bea8854a9588d374dfb","author":{"name":"Pap Lőrinc","email":"f9c795f4c14e026c90379a405bd993c89d9e32dc@gmail.com"},"message":"Changed HashMap.getOrElseUpdate to only calculate the index once\n\nFixes https://issues.scala-lang.org/browse/SI-10049\n\nSince `groupBy` uses this method extensively and suffered a measurable slowdown in `2.12.0`, this modification restores (and exceeds) its original speed.\n\n---\nincluded benchmarks:\n\n(`ns/op` → smaller is better)\n\n`before (2.12.0):`\n```java\nBenchmark                                     (size)  Mode  Cnt      Score      Error  Units\ns.c.immutable.VectorMapBenchmark.groupBy          10  avgt   20    865.693 ±    7.869  ns/op\ns.c.immutable.VectorMapBenchmark.groupBy         100  avgt   20   3095.657 ±   56.438  ns/op\ns.c.immutable.VectorMapBenchmark.groupBy        1000  avgt   20  28247.005 ±  470.513  ns/op\ns.c.mutable.HashMapBenchmark.get                  10  avgt   20    679.448 ±   11.809  ns/op\ns.c.mutable.HashMapBenchmark.get                 100  avgt   20   7240.178 ±   61.734  ns/op\ns.c.mutable.HashMapBenchmark.get                1000  avgt   20  95725.127 ± 2373.458  ns/op\ns.c.mutable.HashMapBenchmark.getOrElseUpdate      10  avgt   20    836.561 ±   20.085  ns/op\ns.c.mutable.HashMapBenchmark.getOrElseUpdate     100  avgt   20   7891.368 ±   56.808  ns/op\ns.c.mutable.HashMapBenchmark.getOrElseUpdate    1000  avgt   20  97478.629 ± 1782.497  ns/op\ns.c.mutable.HashMapBenchmark.put                  10  avgt   20    243.422 ±    2.915  ns/op\ns.c.mutable.HashMapBenchmark.put                 100  avgt   20   5810.927 ±   60.054  ns/op\ns.c.mutable.HashMapBenchmark.put                1000  avgt   20  82175.539 ± 1690.296  ns/op\n```\n`after:`\n```java\nBenchmark                                     (size)  Mode  Cnt      Score      Error  Units\ns.c.immutable.VectorMapBenchmark.groupBy          10  avgt   20    627.007 ±    9.718  ns/op\ns.c.immutable.VectorMapBenchmark.groupBy         100  avgt   20   2086.955 ±   19.042  ns/op\ns.c.immutable.VectorMapBenchmark.groupBy        1000  avgt   20  19515.234 ±  173.647  ns/op\ns.c.mutable.HashMapBenchmark.get                  10  avgt   20    683.977 ±   11.843  ns/op\ns.c.mutable.HashMapBenchmark.get                 100  avgt   20   7345.675 ±   41.092  ns/op\ns.c.mutable.HashMapBenchmark.get                1000  avgt   20  95085.926 ± 1702.997  ns/op\ns.c.mutable.HashMapBenchmark.getOrElseUpdate      10  avgt   20    503.208 ±    2.643  ns/op\ns.c.mutable.HashMapBenchmark.getOrElseUpdate     100  avgt   20   5526.483 ±   28.262  ns/op\ns.c.mutable.HashMapBenchmark.getOrElseUpdate    1000  avgt   20  69265.900 ±  674.958  ns/op\ns.c.mutable.HashMapBenchmark.put                  10  avgt   20    252.481 ±    7.597  ns/op\ns.c.mutable.HashMapBenchmark.put                 100  avgt   20   5708.034 ±  110.360  ns/op\ns.c.mutable.HashMapBenchmark.put                1000  avgt   20  82051.378 ± 1432.009  ns/op\n```\n\ni.e. for the given benchmark conditions `~40%` faster `groupBy` and `getOrElseUpdate`\n\n(cherry picked from commit b67ca7dc6bb84758f9c9f64d68b0b11c20995aa0)","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/02c30a174de3032e377b3bea8854a9588d374dfb"},{"sha":"1e82a92f01cc40a2293a7f1fe93d1d5f5a7595aa","author":{"name":"Pap Lőrinc","email":"f9c795f4c14e026c90379a405bd993c89d9e32dc@gmail.com"},"message":"Simplify HashTable.index further\n\n(cherry picked from commit 26c87f1af4cac782911500d6b143681ecdcef8ad)","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/1e82a92f01cc40a2293a7f1fe93d1d5f5a7595aa"},{"sha":"1b6b19b701fb0bb63bab9644a2baba5611268235","author":{"name":"Adriaan Moors","email":"b1bbc8f7d9b1f3f69d0e5ab77559c084f9d79d89@lightbend.com"},"message":"Merge pull request #5626 from adriaanm/rebase-5566\n\n[backport] Hash table getOrElseUpdate and indexing","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/1b6b19b701fb0bb63bab9644a2baba5611268235"},{"sha":"855492c928a795f175c6bb10ee6d4b23c871a123","author":{"name":"Som Snytt","email":"3c3f83f1f185f1ed954b8448b0a64ad9c8269a57@gmail.com"},"message":"SI-10133 Require escaped single quote char lit\n\nThe spec specifically requires `'\\''` and not `'''`.\n\nThe error consumes all consecutive single quotes.","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/855492c928a795f175c6bb10ee6d4b23c871a123"},{"sha":"939abf1c7062f8be4f84854bb44a8e146d14a07f","author":{"name":"Som Snytt","email":"3c3f83f1f185f1ed954b8448b0a64ad9c8269a57@gmail.com"},"message":"SI-10120 Extra advice on unclosed char literal\n\nFolks from other languages might mistakenly enclose\na string in single quotes. Since this presents as\na symbol literal followed by the unpaired single\nquote, we can add a syntax reminder.\n\nAlso polish the wording for bad string\ninterpolation.","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/939abf1c7062f8be4f84854bb44a8e146d14a07f"},{"sha":"c95e6bb6ae3693be016a89b7aa4dc19a24fe363d","author":{"name":"Dale Wijnand","email":"6766ab40c083feb8afd54ef3df21c39f9d192577@gmail.com"},"message":"SIP-27 Test varargs, \"@\", and \": _*\"\n\nFrom https://gist.github.com/lrytz/e10b166ffbed2e47348a7ef8cd072fd9","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/c95e6bb6ae3693be016a89b7aa4dc19a24fe363d"},{"sha":"d55bad83108d030ef214d4a2477df66fffbbb8f5","author":{"name":"Dale Wijnand","email":"6766ab40c083feb8afd54ef3df21c39f9d192577@gmail.com"},"message":"SIP-27 Tweak and test wildstar in REPL\n\nFrom https://github.com/scala/scala/pull/5245#issuecomment-266658070","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/d55bad83108d030ef214d4a2477df66fffbbb8f5"},{"sha":"4f5c30e10a16697edbe7bb6b4719ff09f5c3900b","author":{"name":"Stefan Zeiger","email":"924ecd33b566ad2611882686aea56dc565588177@novocode.com"},"message":"Merge pull request #5615 from monkey-mas/modify-ArrayBuilder-reusability-bug-2016-12-24\n\n[Backport] Modify ArrayBuilder and WrappedArrayBuilder to be reusable","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/4f5c30e10a16697edbe7bb6b4719ff09f5c3900b"},{"sha":"f841dab6c2eb8d9002c286d57ea80df637a0d4bc","author":{"name":"Adriaan Moors","email":"b1bbc8f7d9b1f3f69d0e5ab77559c084f9d79d89@lightbend.com"},"message":"support --show-log for partest command","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/f841dab6c2eb8d9002c286d57ea80df637a0d4bc"},{"sha":"de361dfe4fab67a01750bccf960788ef10321e4d","author":{"name":"Lukas Rytz","email":"5cbdf6e2c4d3aeb436f9f1dfc215f66ee5cda9e4@gmail.com"},"message":"SI-8786 fix generic signature for @varargs forwarder methods\n\nWhen generating a varargs forwarder for\n\n    def foo[T](a: T*)\n\nthe parameter type of the forwarder needs to be Array[Object]. If we\ngenerate Array[T] in UnCurry, that would be erased to plain Object, and\nthe method would not be a valid varargs.\n\nUnfortunately, setting the parameter type to Array[Object] lead to\nan invalid generic signature - the generic signature should reflect the\nreal signature.\n\nThis change adds an attachment to the parameter symbol in the varargs\nforwarder method and special-cases signature generation.\n\nAlso cleans up the code to produce the varargs forwarder. For example,\ntype parameter and parameter symbols in the forwarder's method type were\nnot clones, but the same symbols from the original method were re-used.\n\nBackported from 0d2760dce189cdcb363e54868381175af4b2646f,\nwith a small tweak (checkVarargs) to make the test work on Java 6,\nas well as later versions.","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/de361dfe4fab67a01750bccf960788ef10321e4d"},{"sha":"5b972dc10f0c263bcecd11c528715e8b94ca9efa","author":{"name":"Iulian Dragos","email":"880cd4d6234e89dc5c3f044c82f4ea2eb95e1c52@gmail.com"},"message":"SI-10071 Separate compilation for varargs methods\n\nMake sure that methods annotated with varargs are properly mixed-in. This commit\nsplits the transformation into an info transformer (that works on all symbols, whether\nthey come from source or binary) and a tree transformer.\n\nThe gist of this is that the symbol-creation part of the code was moved to the UnCurry\ninfo transformer, while tree operations remained in the tree transformer. The newly\ncreated symbol is attached to the original method so that the tree transformer can still\nretrieve the symbol.\n\nA few fall outs:\n\n- I removed a local map that was identical to TypeParamsVarargsAttachment\n- moved the said attachment to StdAttachments so it’s visible between reflect.internal\n  and nsc.transform\n- a couple more comments in UnCurry to honour the boy-scout rule","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/5b972dc10f0c263bcecd11c528715e8b94ca9efa"},{"sha":"c603449b3ed6c36483605acfa45a72d9b5c52af2","author":{"name":"Iulian Dragos","email":"880cd4d6234e89dc5c3f044c82f4ea2eb95e1c52@gmail.com"},"message":"Don’t run the uncurry info transformer on Java symbols.","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/c603449b3ed6c36483605acfa45a72d9b5c52af2"},{"sha":"8ad55f851585d69ad01d983411f5662e2c9a9fa1","author":{"name":"Jason Zaugg","email":"ed7c853e8cee0d3b3580a0be792529cf101f03e4@gmail.com"},"message":"Simplify creation of varargs forwarder symbol\n\nCloning the original symbol in its entirety, rather than cloning\nits type/value parameters individually. `cloneSymbol` takes care of\nall the tricky substitutions for us!","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/8ad55f851585d69ad01d983411f5662e2c9a9fa1"}]}
{"actor":{"display_login":"som-snytt"}}