{"push_id":1191092079,"size":67,"distinct_size":18,"ref":"refs/heads/fields","head":"a8a9f297de480d46ad07f2fec78565793834da53","before":"3ccaa66d6fb24fc8edf03bbd74a97af76f3b5aa1","commits":[{"sha":"7b132f39b82e4fc47cd95eadce9e3f22da8c8d82","author":{"name":"Jason Zaugg","email":"ed7c853e8cee0d3b3580a0be792529cf101f03e4@gmail.com"},"message":"Avoid tree sharing with substituteThis\n\nThe underlying transformer has a by-name parameter for the\nto provide the `to` tree, but this was strict in the layers\nof API above.\n\nTree sharing is frowned upon in general as it leads to cross\ntalk when, e.g., the erasure typechecker mutates the\n`tpe` field of the shared tree in different context.","distinct":false,"url":"https://api.github.com/repos/adriaanm/scala/commits/7b132f39b82e4fc47cd95eadce9e3f22da8c8d82"},{"sha":"0533a3df71e9c855ac68e10d060c2c87d16994e0","author":{"name":"Jason Zaugg","email":"ed7c853e8cee0d3b3580a0be792529cf101f03e4@gmail.com"},"message":"Lambda impl methods static and more stably named\n\nThe body of lambdas is compiled into a synthetic method\nin the enclosing class. Previously, this method was a public\nvirtual method named `fully$qualified$Class$$anonfun$n`.\nFor lambdas that didn't capture a `this` reference, a static\nmethod was used.\n\nThis commit changes two aspects.\n\nFirstly, all lambda impl methods are now emitted static.\nAn extra parameter is added to those that require a this\nreference.\n\nThis is an improvement as it:\n\n  - allows, shorter, more readable names for the lambda impl method\n  - avoids pollution of the vtable of the class. Note that javac uses\n    private instance methods, rather than public static methods. If\n    we followed its lead, we would be unable to support important use\n    cases in our inliner\n\nSecondly, the name of the enclosing method has been included in\nthe name of the lambda impl method to improve debuggability and\nto improve serialization compatibility. The serialization improvement\ncomes from the way that fresh names for the impl methods are\nallocated: adding or removing lambdas in methods not named \"foo\" won't\nchange the numbering of the `anonfun$foo$n` impl methods from methods\nnamed \"foo\". This is in line with user expectations about anonymous\nclass and lambda serialization stability. Brian Goetz has described\nthis tricky area well in:\n\n  http://cr.openjdk.java.net/~briangoetz/eg-attachments/lambda-serialization.html\n\nThis commit doesn't go as far a Javac, we don't use the hash of the\nlambda type info, param names, etc to map to a lambda impl method name.\nAs such, we are more prone to the type-1 and -2 failures described there.\nHowever, our Scala 2.11.8 has similar characteristics, so we aren't going\nbackwards.\n\nSpecial case in the naming: Use \"new\" rather than \"<init>\" for constructor enclosed\nlambdas, as javac does.\n\nI have also changed the way that \"delambdafy target\" methods are identifed.\nRather than relying on the naming convention, I have switched to using a\nsymbol attachment. The assumption is that we only need to identify them\nfrom within the same compilation unit.\n\nThis means we can distinguish impl metbods for expanded functions\n(ones called from an `apply` method of an ahead-of-time expanded\nanonfun class), from those that truly end up as targets for lambda\nmetafactory. Only the latter are translated to static methods in\nthis patch.","distinct":false,"url":"https://api.github.com/repos/adriaanm/scala/commits/0533a3df71e9c855ac68e10d060c2c87d16994e0"},{"sha":"f01d061caaae26b3fdff0e4db800292e9b3252c2","author":{"name":"Lukas Rytz","email":"5cbdf6e2c4d3aeb436f9f1dfc215f66ee5cda9e4@gmail.com"},"message":"Treat self parameter as non-null in the optimizer","distinct":false,"url":"https://api.github.com/repos/adriaanm/scala/commits/f01d061caaae26b3fdff0e4db800292e9b3252c2"},{"sha":"e077c24525bf8f9bd8b73684e630eb7fc6bcb5f6","author":{"name":"Jason Zaugg","email":"ed7c853e8cee0d3b3580a0be792529cf101f03e4@gmail.com"},"message":"SI-9390 Emit local defs that don't capture this as static\n\nThis avoids unnecessary memory retention, and allows lambdas\nthat call the local methods to be serializable, regardless of\nwhether or not the enclosing class is serializable.\n\nThe second point is especially pressing, given that the enclosing\nclass for local methods defined in a used to be the (serializable)\nanonymous function class, but as of Scala 2.12 will be the enclosing\nclass of the lambda.\n\nThis change is similar in spirit to SI-9408 / 93bee55e.","distinct":false,"url":"https://api.github.com/repos/adriaanm/scala/commits/e077c24525bf8f9bd8b73684e630eb7fc6bcb5f6"},{"sha":"3f685073923d76de08ffdba78075f2267ee56133","author":{"name":"Jason Zaugg","email":"ed7c853e8cee0d3b3580a0be792529cf101f03e4@gmail.com"},"message":"Drop local suffix in lambda impl method name","distinct":false,"url":"https://api.github.com/repos/adriaanm/scala/commits/3f685073923d76de08ffdba78075f2267ee56133"},{"sha":"f07019ffa56ec2dfab8ab0d9a83133005761a877","author":{"name":"Jason Zaugg","email":"ed7c853e8cee0d3b3580a0be792529cf101f03e4@gmail.com"},"message":"SI-9390 Avoid needless outer capture with local classes\n\nAn existing optimization in `Constructors` elides the outer\nfield in member and local classes, if the class doesn't use\nthe outer reference. (Member classes also need to be final,\nwhich is a secret handshake to say we're also happy to weaken\nprefix matching in the pattern matcher.)\n\nThat optimization leaves the constructor signature as is: the\nconstructor still accepts the outer instance, but does not store\nit. For member classes, this means that we can separately compile\ncode that calls the constructor.\n\nLocal classes need not be hampered by this constraint, we could\nremove the outer instance from the constructor call too.\n\nWhy would we want to do this?\n\nLet's look at the case before and after this commit.\n\nBefore:\n```\nclass C extends Object {\n  def foo(): Function1 = $anonfun();\n  final <static> <artifact> def $anonfun$foo$1($this: C, x: Object): Object = new <$anon: Object>($this);\n  def <init>(): C = {\n    C.super.<init>();\n    ()\n  }\n};\nfinal class anon$1 extends Object {\n  def <init>($outer: C): <$anon: Object> = {\n    anon$1.super.<init>();\n    ()\n  }\n}\n```\n\nAfter:\n\n```\nclass C extends Object {\n  def foo(): Function1 = $anonfun();\n  final <static> <artifact> def $anonfun$foo$1(x: Object): Object = new <$anon: Object>(null);\n  def <init>(): C = {\n    C.super.<init>();\n    ()\n  }\n};\nfinal class anon$1 extends Object {\n  def <init>($outer: C): <$anon: Object> = {\n    anon$1.super.<init>();\n    ()\n  }\n}\n\n```\n\nHowever, the status quo means that a lambda that\nThis in turn makes lambdas that refer to such classes serializable\neven when the outer class is not itself serialiable.\n\nI have not attempted to extend this to calls to secondary constructors.","distinct":false,"url":"https://api.github.com/repos/adriaanm/scala/commits/f07019ffa56ec2dfab8ab0d9a83133005761a877"},{"sha":"be9c0febd65875615b318209e0aa994eb76c2011","author":{"name":"Nicolas Stucki","email":"e440cf251d80e41a5f1f533d0dec4caad355e147@gmail.com"},"message":"SI-9737 [no-merge] Backport stringOf ParIterable\n\nCherry-picked c5f3d3f286ee5c26c8ddcf10f6878058e8f7e040\n\nEdited comment: in stringOf, let GenIterable subsume\nboth Iterable and ParIterable.\n\nThis change is required for Scala.js compatibility as it does not\nsupport parallel collections.\n\nConflicts:\n\n\tsrc/library/scala/runtime/ScalaRunTime.scala","distinct":false,"url":"https://api.github.com/repos/adriaanm/scala/commits/be9c0febd65875615b318209e0aa994eb76c2011"},{"sha":"a23f6a7ba2c20096837a8d254a42d2bedd620f15","author":{"name":"Janek Bogucki","email":"54a33c3b24c74beaffa567d2a7068483b6450a82@gmail.com"},"message":"Remove experimental status from sbt build in load message\n\nsbt is now the preferred build tool.","distinct":false,"url":"https://api.github.com/repos/adriaanm/scala/commits/a23f6a7ba2c20096837a8d254a42d2bedd620f15"},{"sha":"fcf17beee7304928cb97c4902a2e2833091d3a8f","author":{"name":"Som Snytt","email":"3c3f83f1f185f1ed954b8448b0a64ad9c8269a57@gmail.com"},"message":"SI-7898 Preserve reader against subversion\n\nSBT tries to install its own SimpleReader (for some reason)\nif it needs to create its own IMain.\n\nBecause Rube Goldberg needs to execute some postinit hooks,\ndon't let SBT do that.","distinct":false,"url":"https://api.github.com/repos/adriaanm/scala/commits/fcf17beee7304928cb97c4902a2e2833091d3a8f"},{"sha":"650fbee7855c7162bf3cf23cb8340704274834d9","author":{"name":"Adriaan Moors","email":"b1bbc8f7d9b1f3f69d0e5ab77559c084f9d79d89@lightbend.com"},"message":"Merge pull request #5214 from som-snytt/issue/7898-sbt\n\nSI-7898 Preserve reader against subversion","distinct":false,"url":"https://api.github.com/repos/adriaanm/scala/commits/650fbee7855c7162bf3cf23cb8340704274834d9"},{"sha":"cc6a25114fa85f928d3da604837a57511fc1b6da","author":{"name":"Adriaan Moors","email":"f49fe8e628c98e28393d6102d918645e55da46bc@typesafe.com"},"message":"Merge branch '2.11.x' into 2.12.x","distinct":false,"url":"https://api.github.com/repos/adriaanm/scala/commits/cc6a25114fa85f928d3da604837a57511fc1b6da"},{"sha":"361f3f1540c755e36aaed22484924bb44eabc83b","author":{"name":"Jason Zaugg","email":"ed7c853e8cee0d3b3580a0be792529cf101f03e4@gmail.com"},"message":"Merge pull request #5157 from retronym/topic/lambda-statics\n\nLambda impl methods static and more stably named","distinct":false,"url":"https://api.github.com/repos/adriaanm/scala/commits/361f3f1540c755e36aaed22484924bb44eabc83b"},{"sha":"3bb735823f6815002895b1a335c6d105ddbe3e9e","author":{"name":"Jason Zaugg","email":"ed7c853e8cee0d3b3580a0be792529cf101f03e4@gmail.com"},"message":"Merge pull request #5099 from retronym/ticket/9390\n\nSI-9390 Emit local defs that don't capture this as static","distinct":false,"url":"https://api.github.com/repos/adriaanm/scala/commits/3bb735823f6815002895b1a335c6d105ddbe3e9e"},{"sha":"34dbd396a214fb58d3b305b01eb134e1d51f34c7","author":{"name":"Jason Zaugg","email":"ed7c853e8cee0d3b3580a0be792529cf101f03e4@gmail.com"},"message":"Merge pull request #5211 from janekdb/topic/2.12.x-remove-experimental-notice-from-sbt-build\n\nRemove experimental status from sbt build in load message","distinct":false,"url":"https://api.github.com/repos/adriaanm/scala/commits/34dbd396a214fb58d3b305b01eb134e1d51f34c7"},{"sha":"1f812e9482855d3fd5a8a5e9118942dc80f22db5","author":{"name":"Lukas Rytz","email":"5cbdf6e2c4d3aeb436f9f1dfc215f66ee5cda9e4@gmail.com"},"message":"Avoid separate traversal in inliner to remove line number nodes","distinct":false,"url":"https://api.github.com/repos/adriaanm/scala/commits/1f812e9482855d3fd5a8a5e9118942dc80f22db5"},{"sha":"037a089ad4fb7137513777ccda6d47e30e151838","author":{"name":"Lukas Rytz","email":"5cbdf6e2c4d3aeb436f9f1dfc215f66ee5cda9e4@gmail.com"},"message":"Store source file paths of classes being compiled in the bytecode repo\n\nFor classes being compiled (vs. being loaded from classfiles), keep the\nsource file path in the bytecode repo. This will allow to keep line\nnumbers when inlining from one class into another in case the two are\ndefined in the same compilation unit.","distinct":false,"url":"https://api.github.com/repos/adriaanm/scala/commits/037a089ad4fb7137513777ccda6d47e30e151838"},{"sha":"59d6dbc0aac912567d235048b5114cccf965c7ce","author":{"name":"Lukas Rytz","email":"5cbdf6e2c4d3aeb436f9f1dfc215f66ee5cda9e4@gmail.com"},"message":"clear all flags when resetting a symbol\n\nthis change is a bit scary because it changes code that's not been\nchanged in 11 years\nhttps://github.com/scala/scala/commit/7fa7c93#diff-d5789e5ae5061197d782d08324b260dbL214","distinct":false,"url":"https://api.github.com/repos/adriaanm/scala/commits/59d6dbc0aac912567d235048b5114cccf965c7ce"},{"sha":"e1084299350bcc20f5d412993d77b8f956ba3165","author":{"name":"Lukas Rytz","email":"5cbdf6e2c4d3aeb436f9f1dfc215f66ee5cda9e4@gmail.com"},"message":"SI-9256 check companions in same compilation unit only if same run","distinct":false,"url":"https://api.github.com/repos/adriaanm/scala/commits/e1084299350bcc20f5d412993d77b8f956ba3165"},{"sha":"2980c3921f1270f05add25239da93e05f64ad45f","author":{"name":"Lukas Rytz","email":"5cbdf6e2c4d3aeb436f9f1dfc215f66ee5cda9e4@gmail.com"},"message":"Keep line numbers when inlining from the same compilation unit\n\nSo far, line numbers were kept only when inlining from the same class.\nWe can also keep them when inlining from a different class defined in\nthe same compilation unit.\n\nLonger-term we should support JSR-45, see SI-7518 and scala-dev#3.","distinct":false,"url":"https://api.github.com/repos/adriaanm/scala/commits/2980c3921f1270f05add25239da93e05f64ad45f"},{"sha":"28e0e18106a93fd8fd9a086c29836631c754ba35","author":{"name":"Adriaan Moors","email":"b1bbc8f7d9b1f3f69d0e5ab77559c084f9d79d89@lightbend.com"},"message":"Merge pull request #5216 from adriaanm/2.12.x\n\nMerge 2.11.x into 2.12.x for the fix for SI-7898","distinct":false,"url":"https://api.github.com/repos/adriaanm/scala/commits/28e0e18106a93fd8fd9a086c29836631c754ba35"}]}
{"actor":{"display_login":"adriaanm"}}