{"push_id":684678393,"size":203,"distinct_size":42,"ref":"refs/heads/topic/javap-decom","head":"79f3f2f0378d8d8220712d4f7f1118347537f342","before":"55ebeb8230fb5e373f792db405b1eee432c50b0f","commits":[{"sha":"081c1f1d3ae01b1a237ab0f7cacdf04eecf71793","author":{"email":"af9d50c5890ef203d7cd74146c0743c9e4caadf5@gmail.com","name":"Gerard Basler"},"message":"Add a check to ensure that if the formulas originating from the exhaustivity /\nreachability analysis are too big to be solved in reasonable time, then we skip\nthe analysis. I also cleaned up warnings.\n\nWhy did `t9181.scala` work fine with 2.11.4, but is now running out of memory?\n\nIn order to ensure that the scrutinee is associated only with one of the 400\nderived classes we add 400*400 / 2 ~ 80k clauses to ensure mutual exclusivity.\n\nIn 2.11.4 the translation into CNF used to fail, since it would blow up already\nat this point in memory. This has been fixed in 2.11.5, but now the DPLL solver\nis the bottleneck.\n\nThere's a check in the search for all models (exhaustivity) that it would avoid\na blow up, but in the search for a model (reachability), such a check is\nmissing.","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/081c1f1d3ae01b1a237ab0f7cacdf04eecf71793"},{"sha":"fe2572c0df8fd209fc5d2e1e32d913b889acbbdd","author":{"email":"af9d50c5890ef203d7cd74146c0743c9e4caadf5@gmail.com","name":"Gerard Basler"},"message":"Bring back improvements from `SI-6942` that were lost during the switch to\nTseitin's transformation, e.g., use\n\n`CNF(P1 /\\ ... /\\ PN) == CNF(P1) ++ CNF(...) ++ CNF(PN)`\n\nin order to simplify the resultung formula.","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/fe2572c0df8fd209fc5d2e1e32d913b889acbbdd"},{"sha":"1e7a990e028dffc5fa8ac07a02ff3f79bde24749","author":{"email":"8287c3bf2f3045ed7dda958850d2b0fdb9e67898@gmail.com","name":"Jason Zaugg"},"message":"SI-8359 Adjust parameter order of accessor method in Delambdafy\n\nUnder `-Ydelambdafy:method`, a public, static accessor method is\ncreated to expose the private method containing the body of the\nlambda.\n\nCurrently this accessor method has its parameters in the same order\nstructure as those of the lambda body method.\n\nWhat is this order? There are three categories of parameters:\n\n  1. lambda parameters\n  2. captured parameters (added by lambdalift)\n  3. self parameters (added to lambda bodies that end up in trait\n     impl classes by mixin, and added unconditionally to the static\n     accessor method.)\n\nThese are currently emitted in order #3, #1, #2.\n\nHere are examples of the current behaviour:\n\nBEFORE (trait):\n\n```\n% cat sandbox/test.scala && scalac-hash v2.11.5 -Ydelambdafy:method sandbox/test.scala && javap -private -classpath . 'Test$class'\ntrait Member; class Capture; trait LambdaParam\ntrait Test {\n  def member: Member\n  def foo {\n    val local = new Capture\n    (arg: LambdaParam) => \"\" + arg + member + local\n  }\n}\nCompiled from \"test.scala\"\npublic abstract class Test$class {\n  public static void foo(Test);\n  private static final java.lang.String $anonfun$1(Test, LambdaParam, Capture);\n  public static void $init$(Test);\n  public static final java.lang.String accessor$1(Test, LambdaParam, Capture);\n}\n```\n\nBEFORE (class):\n\n```\n% cat sandbox/test.scala && scalac-hash v2.11.5 -Ydelambdafy:method sandbox/test.scala && javap -private -classpath . Test\ntrait Member; class Capture; trait LambdaParam\nabstract class Test {\n  def member: Member\n  def foo {\n    val local = new Capture\n    (arg: LambdaParam) => \"\" + arg + member + local\n  }\n}\nCompiled from \"test.scala\"\npublic abstract class Test {\n  public abstract Member member();\n  public void foo();\n  private final java.lang.String $anonfun$1(LambdaParam, Capture);\n  public Test();\n  public static final java.lang.String accessor$1(Test, LambdaParam, Capture);\n}\n```\n\nContrasting the class case with Java:\n\n```\n% cat sandbox/Test.java && javac -d . sandbox/Test.java && javap -private -classpath . Test\npublic abstract class Test {\n  public static class Member {};\n  public static class Capture {};\n  public static class LambaParam {};\n  public static interface I {\n    public abstract Object c(LambaParam arg);\n  }\n  public abstract Member member();\n  public void test() {\n    Capture local = new Capture();\n    I i1 = (LambaParam arg) -> \"\" + member() + local;\n  }\n}\n\nCompiled from \"Test.java\"\npublic abstract class Test {\n  public Test();\n  public abstract Test$Member member();\n  public void test();\n  private java.lang.Object lambda$test$0(Test$Capture, Test$LambaParam);\n}\n```\n\nWe can see that in Java 8 lambda parameters come after captures. If we\nwant to use Java's LambdaMetafactory to spin up our anoymous FunctionN\nsubclasses on the fly, our ordering must change.\n\nI can see three options for change:\n\n  1. Adjust `LambdaLift` to always prepend captured parameters,\n     rather than appending them. I think we could leave `Mixin` as\n     it is, it already prepends the self parameter. This would result\n     a parameter ordering, in terms of the list above: #3, #2, #1.\n  2. More conservatively, do this just for methods known to hold\n     lambda bodies. This might avoid needlessly breaking code that\n     has come to depend on our binary encoding.\n  3. Adjust the parameters of the accessor method only. The body\n     of this method can permute params before calling the lambda\n     body method.\n\nThis commit implements option #2.\n\nIn also prototyped #1, and found it worked so long as I limited it to\nnon-constructors, to sidestep the need to make corresponding\nchanges elsewhere in the compiler to avoid the crasher shown\nin the enclosed test case, which was minimized from a bootstrap\nfailure from an earlier a version of this patch.\n\nWe would need to defer option #1 to 2.12 in any case, as some of\nthese lifted methods are publicied by the optimizer, and we must\nleave the signatures alone to comply with MiMa.\n\nI've included a test that shows this in all in action. However, that\nis currently disabled, as we don't have a partest category for tests\nthat require Java 8.","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/1e7a990e028dffc5fa8ac07a02ff3f79bde24749"},{"sha":"bbd693ae44bab4be2be7930641f8ca2bf27c962c","author":{"email":"8287c3bf2f3045ed7dda958850d2b0fdb9e67898@gmail.com","name":"Jason Zaugg"},"message":"SI-7741 Tread more lightly during classfile parsing\n\n1. Avoid forcing info of non-Scala interface members\n\nThis avoids parsing the ostensibly malformed class definitions that\ncorrespond to a Groovy lambda defined in an interface.\n\n2. Be more tolerant of absent inner classfiles\n\nTaking a leaf out of javac's book (see transcript below),\nwe can use stub symbols for InnerClass entries that don't\nhave corresponding class files on the compilation classpath.\n\nThis will limit failures to code that directly refers to the\ninner class, rather than any code that simply refers to the\nenclosing class.\n\nIt seems that groovyc has a habit of emitting incongrous\nbytecode in this regard. But this change seems generally\nuseful.\n\n```\n% cat sandbox/{Test,Client}.java\npublic class Test {\n\tpublic class Inner {}\n}\npublic class Client {\n\tpublic Test.Inner x() { return null; }\n}\n\n% javac -d . sandbox/Test.java && javac -classpath . sandbox/Client.java\n\n% javac -d . sandbox/Test.java && rm 'Test$Inner.class' && javac -classpath . sandbox/Client.java\nsandbox/Client.java:2: error: cannot access Inner\n\tpublic Test.Inner x() { return null; }\n\t           ^\n  class file for Test$Inner not found\n1 error\n\n% cat sandbox/{Test,Client}.java\npublic class Test {\n\tpublic class Inner {}\n}\npublic class Client {\n\tpublic Test.NeverExisted x() { return null; }\n}\n\n% javac -classpath . sandbox/Client.java\nsandbox/Client.java:2: error: cannot find symbol\n\tpublic Test.NeverExisted x() { return null; }\n\t           ^\n  symbol:   class NeverExisted\n  location: class Test\n1 error\n\n% cat sandbox/{Test,Client}.java\npublic class Test {\n\tpublic class Inner {}\n}\npublic class Client {\n\tpublic Test x() { return null; }\n}\ntopic/groovy-interop ~/code/scala2 javac -d . sandbox/Test.java && rm 'Test$Inner.class' && javac -classpath . sandbox/Client.java # allowed\n```","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/bbd693ae44bab4be2be7930641f8ca2bf27c962c"},{"sha":"e9bfa33c1eef822eb9d3d0f471f4bbbe390e1e65","author":{"email":"9359a4d812173b65a3a0094cd86363e79731a3c2@gourlay.fr","name":"Antoine Gourlay"},"message":"SI-9239 fix java generic signature when traits extend classes\n\nGiven the following code:\n\n  class C1[T]\n  trait T1[T] extends C1[T]\n  class C2[T] extends T1[T]\n\nThe generic signature of C2 changed after ced3ca8 from \"C1[T], T1[T]\"\nto \"Object, T1[T]\", even though C1 was still marked as a superclass in\nthe bytecode...\n\nC1 was removed because a subclass (T1) appeared later on, and it was\npossible for a trait to cause a class to be evicted. It turns out that\nif a class A appears in \"parents\", it *always* has to stay in the\nsignature: if a trait later in the list inherits from some class, that\nclass has to be a superclass of A (per SLS §5.1), or A itself, so in\nany case, the most specific superclass is A, so A should stay in the\nsignature.\n\nThus minimizeParents now only allows traits/interfaces to be removed\nfrom the list (the refactoring in 7552739, moving from mixinClasses to\nparents, makes this much easier to fix).\n\nThis didn't happen for non-generic signatures because there are two\nseparate fields in the classfile for this (one for the superclass,\none for interfaces), so interfaces were processed on their own.\nThus non-parametrized classes were not affected. Anything that used\nerased types at runtime was also fine (like isInstanceOf checks),\nand anything that used ScalaSignature was also unaffected.\nMaybethat's why so few things broke...\n\nSee the test for how this affects Java (hint: badly).\n\nThis changes very few things when building scala itself, and the\nchanges seem sensible:\n\n--- sandbox/lib/scala-library.jar#!scala/runtime/NonLocalReturnControl.class\n+++ build/pack/lib/scala-library.jar#!scala/runtime/NonLocalReturnControl.class\n\n- Generic Signature: <T:Ljava/lang/Object;>Ljava/lang/Object;Lscala/util/control/ControlThrowable;\n+ Generic Signature: <T:Ljava/lang/Object;>Ljava/lang/Throwable;Lscala/util/control/ControlThrowable;\n--- sandbox/lib/scala-library.jar#!scala/collection/mutable/QueueProxy$$anon$1.class\n+++ build/pack/lib/scala-library.jar#!scala/collection/mutable/QueueProxy$$anon$1.class\n\n- Generic Signature: Ljava/lang/Object;Lscala/collection/mutable/QueueProxy<TA;>;\n+ Generic Signature: Lscala/collection/mutable/Queue<TA;>;Lscala/collection/mutable/QueueProxy<TA;>;\n--- sandbox/lib/scala-library.jar#!scala/collection/mutable/Iterable$.class\n+++ build/pack/lib/scala-library.jar#!scala/collection/mutable/Iterable$.class\n\n- Generic Signature: Ljava/lang/Object;Lscala/collection/generic/TraversableFactory<Lscala/collection/mutable/Iterable;>;\n+ Generic Signature: Lscala/collection/generic/GenTraversableFactory<Lscala/collection/mutable/Iterable;>;Lscala/collection/generic/TraversableFactory<Lscala/collection/mutable/Iterable;>;\n--- sandbox/lib/scala-library.jar#!scala/collection/immutable/Traversable$.class\n+++ build/pack/lib/scala-library.jar#!scala/collection/immutable/Traversable$.class\n\n- Generic Signature: Ljava/lang/Object;Lscala/collection/generic/TraversableFactory<Lscala/collection/immutable/Traversable;>;\n+ Generic Signature: Lscala/collection/generic/GenTraversableFactory<Lscala/collection/immutable/Traversable;>;Lscala/collection/generic/TraversableFactory<Lscala/collection/immutable/Traversable;>;\n--- sandbox/lib/scala-library.jar#!scala/collection/immutable/Iterable$.class\n+++ build/pack/lib/scala-library.jar#!scala/collection/immutable/Iterable$.class\n\n- Generic Signature: Ljava/lang/Object;Lscala/collection/generic/TraversableFactory<Lscala/collection/immutable/Iterable;>;\n+ Generic Signature: Lscala/collection/generic/GenTraversableFactory<Lscala/collection/immutable/Iterable;>;Lscala/collection/generic/TraversableFactory<Lscala/collection/immutable/Iterable;>;\n--- sandbox/lib/scala-library.jar#!scala/collection/mutable/Traversable$.class\n+++ build/pack/lib/scala-library.jar#!scala/collection/mutable/Traversable$.class\n\n- Generic Signature: Ljava/lang/Object;Lscala/collection/generic/TraversableFactory<Lscala/collection/mutable/Traversable;>;\n+ Generic Signature: Lscala/collection/generic/GenTraversableFactory<Lscala/collection/mutable/Traversable;>;Lscala/collection/generic/TraversableFactory<Lscala/collection/mutable/Traversable;>;\n--- sandbox/lib/scala-library.jar#!scala/throws.class\n+++ build/pack/lib/scala-library.jar#!scala/throws.class\n\n- Generic Signature: <T:Ljava/lang/Throwable;>Ljava/lang/Object;Lscala/annotation/StaticAnnotation;\n+ Generic Signature: <T:Ljava/lang/Throwable;>Lscala/annotation/Annotation;Lscala/annotation/StaticAnnotation;\n--- sandbox/lib/scala-library.jar#!scala/collection/mutable/StackProxy$$anon$1.class\n+++ build/pack/lib/scala-library.jar#!scala/collection/mutable/StackProxy$$anon$1.class\n\n- Generic Signature: Ljava/lang/Object;Lscala/collection/mutable/StackProxy<TA;>;\n+ Generic Signature: Lscala/collection/mutable/Stack<TA;>;Lscala/collection/mutable/StackProxy<TA;>;\n--- sandbox/lib/scala-library.jar#!scala/collection/convert/Wrappers$IterableWrapper.class\n+++ build/pack/lib/scala-library.jar#!scala/collection/convert/Wrappers$IterableWrapper.class\n\n- Generic Signature: <A:Ljava/lang/Object;>Ljava/lang/Object;Lscala/collection/convert/Wrappers$IterableWrapperTrait<TA;>;Lscala/Product;Lscala/Serializable;\n+ Generic Signature: <A:Ljava/lang/Object;>Ljava/util/AbstractCollection<TA;>;Lscala/collection/convert/Wrappers$IterableWrapperTrait<TA;>;Lscala/Product;Lscala/Serializable;\n--- sandbox/lib/scala-library.jar#!scala/collection/Iterable$.class\n+++ build/pack/lib/scala-library.jar#!scala/collection/Iterable$.class\n\n- Generic Signature: Ljava/lang/Object;Lscala/collection/generic/TraversableFactory<Lscala/collection/Iterable;>;\n+ Generic Signature: Lscala/collection/generic/GenTraversableFactory<Lscala/collection/Iterable;>;Lscala/collection/generic/TraversableFactory<Lscala/collection/Iterable;>;\n--- sandbox/lib/scala-library.jar#!scala/collection/Traversable$.class\n+++ build/pack/lib/scala-library.jar#!scala/collection/Traversable$.class\n\n- Generic Signature: Ljava/lang/Object;Lscala/collection/generic/TraversableFactory<Lscala/collection/Traversable;>;\n+ Generic Signature: Lscala/collection/generic/GenTraversableFactory<Lscala/collection/Traversable;>;Lscala/collection/generic/TraversableFactory<Lscala/collection/Traversable;>;\n--- sandbox/lib/scala-library.jar#!scala/collection/parallel/AdaptiveWorkStealingForkJoinTasks$WrappedTask.class\n+++ build/pack/lib/scala-library.jar#!scala/collection/parallel/AdaptiveWorkStealingForkJoinTasks$WrappedTask.class\n\n- Generic Signature: <R:Ljava/lang/Object;Tp:Ljava/lang/Object;>Ljava/lang/Object;Lscala/collection/parallel/ForkJoinTasks$WrappedTask<TR;TTp;>;Lscala/collection/parallel/AdaptiveWorkStealingTasks$WrappedTask<TR;TTp;>;\n+ Generic Signature: <R:Ljava/lang/Object;Tp:Ljava/lang/Object;>Lscala/concurrent/forkjoin/RecursiveAction;Lscala/collection/parallel/ForkJoinTasks$WrappedTask<TR;TTp;>;Lscala/collection/parallel/AdaptiveWorkStealingTasks$WrappedTask<TR;TTp;>;","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/e9bfa33c1eef822eb9d3d0f471f4bbbe390e1e65"},{"sha":"06b5bfa306c4c53ca4b671cb6472828b8fcdd5c3","author":{"email":"9425c2a21b664cae6604ffe3caa6afaedb7b3cf2@gmail.com","name":"Eugene Burmako"},"message":"SI-9252 gets rid of custom logic for jArrayClass in runtime reflection\n\nApparently, I've already fixed a very similar issue two years ago.\nThat was a fun surprise! (https://issues.scala-lang.org/browse/SI-5680)","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/06b5bfa306c4c53ca4b671cb6472828b8fcdd5c3"},{"sha":"56c1af90999f0a9a55a90f3dd3bf6d04ddda5943","author":{"email":"9c84447e109e4f823d88679be7072efee4463241@gmail.com","name":"Rex Kerr"},"message":"Performance improvement: collectFirst in TraversableOnce\n\ncollectFirst was implemented in TraversableOnce by calling toIterator and then using a non-local return to pull out a Some when the partial function succeeded.  This had two problems:\n\n  1. If the TraversableOnce was Iterator or Iterable, stepping through until pf is happy is much (15x!) faster.\n  2. If the TraversableOnce was not, creating an Iterator is a waste of time and memory\n\nThis fixes both of these issues by inspecting the self-type and choosing the appropriate implementation.\n\nFurther (modest) improvements likely possible in 2.12 by moving specialized implementations to child classes and using `applyOrElse` on the partial function with a package-private object instead of a locally created one.","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/56c1af90999f0a9a55a90f3dd3bf6d04ddda5943"},{"sha":"093be1add315bd5b76057e943bdba1a4cc198a0d","author":{"email":"c4c4cd0781e8a49d848921386970d334ffda1135@gmail.com","name":"Lukas Rytz"},"message":"Make class Invalid a ControlThrowable\n\nInvalid is used for control flow in RightBiasedEither.orThrow.","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/093be1add315bd5b76057e943bdba1a4cc198a0d"},{"sha":"6cf17ccd0101514a603a8c191438bdc2764838f9","author":{"email":"c4c4cd0781e8a49d848921386970d334ffda1135@gmail.com","name":"Lukas Rytz"},"message":"Command-line flag to control inlining heuristics\n\nIntroduces a stress-test mode \"everything\" in which the inliner tries\nto inline every calliste that can be statically resolved.","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/6cf17ccd0101514a603a8c191438bdc2764838f9"},{"sha":"61df503303800acbb5c4448cbb7cbac0bcd4bd07","author":{"email":"7639fe603eb93a42390376ac4f0d54260fa6a394@typesafe.com","name":"Adriaan Moors"},"message":"Bump partest to 1.0.6\n\nTo enable #4285","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/61df503303800acbb5c4448cbb7cbac0bcd4bd07"},{"sha":"302562f86e418630b476852b9ba235e85f98bacb","author":{"email":"9c84447e109e4f823d88679be7072efee4463241@gmail.com","name":"Rex Kerr"},"message":"SI-9254  UnrolledBuffer appends in wrong position\n\nFixed two bugs in insertion (insertAll of Unrolled):\n\n1. Incorrect recursion leading to an inability to insert past the first chunk\n2. Incorect repositioning of `lastptr` leading to strange `append` behavior after early insertion\n\nAdded tests checking that both of these things now work.\n\nAlso added a comment that \"waterlineDelim\" is misnamed.  But we can't fix it now--it's part of the public API.  (Shouldn't be, but it is.)","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/302562f86e418630b476852b9ba235e85f98bacb"},{"sha":"71777cc9ff27786d74bda55a00ab477a4e53efb5","author":{"email":"9c84447e109e4f823d88679be7072efee4463241@gmail.com","name":"Rex Kerr"},"message":"SI-9197  Duration.Inf not a singleton when deserialized\n\nMade `Duration.Undefined`, `.Inf`, and `.MinusInf` all give back the singleton instance instead of creating a new copy by overriding readResolve.\n\nThis override can be (and is) private, which at least on Sun's JDK8 doesn't mess with the auto-generated SerialVersionUIDs.\n\nThus, the patch should make things strictly better: if you're on 2.11.7+ on JVMs which pick the same SerialVersionUIDs, you can recover singletons.  Everywhere else you were already in trouble anyway.","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/71777cc9ff27786d74bda55a00ab477a4e53efb5"},{"sha":"fa110edd473ac5bbdb66fbd5a51fa2685c0dcf21","author":{"email":"c4c4cd0781e8a49d848921386970d334ffda1135@gmail.com","name":"Lukas Rytz"},"message":"Eliminate unreachable code before inlining a method\n\nRunning an ASM analyzer returns null frames for unreachable\ninstructions in the analyzed method. The inliner (and other components\nof the optimizer) require unreachable code to be eliminated to avoid\nnull frames.\n\nBefore this change, unreachable code was eliminated before building\nthe call graph, but not again before inlining: the inliner assumed\nthat methods in the call graph have no unreachable code.\n\nThis invariant can break when inlining a method. Example:\n\n  def f = throw e\n  def g = f; println()\n\nWhen building the call graph, both f and g contain no unreachable\ncode. After inlining f, the println() call becomes unreachable. This\nbreaks the inliner's assumption if it tries to inline a call to g.\n\nThis change intruduces a cache to remember methods that have no\nunreachable code. This allows invoking DCE every time no dead code is\nrequired, and bail out fast. This also simplifies following the\ncontrol flow in the optimizer (call DCE whenever no dead code is\nrequired).","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/fa110edd473ac5bbdb66fbd5a51fa2685c0dcf21"},{"sha":"eb43d62b4e0665b6b509a04d4ec2edae53c9256b","author":{"email":"c4c4cd0781e8a49d848921386970d334ffda1135@gmail.com","name":"Lukas Rytz"},"message":"Don't try to inline native methods\n\nBecause you can't, really.","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/eb43d62b4e0665b6b509a04d4ec2edae53c9256b"},{"sha":"638ed9108f10bcbebb69f2fefe05c7423c8bdfd7","author":{"email":"c4c4cd0781e8a49d848921386970d334ffda1135@gmail.com","name":"Lukas Rytz"},"message":"Clean up the way compiler settings are accessed in the backend.\n\nMany backend components don't have access to the compiler instance\nholding the settings.\n\nBefore this change, individual settings required in these parts of the\nbackend were made available as members of trait BTypes, implemented\nin the subclass BTypesFromSymbols (which has access to global).\n\nThis change exposes a single value of type ScalaSettings in the super\ntrait BTypes, which gives access to all compiler settings.","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/638ed9108f10bcbebb69f2fefe05c7423c8bdfd7"},{"sha":"09f5752b871a2e870dfc1bb57fda203515d26651","author":{"email":"c4c4cd0781e8a49d848921386970d334ffda1135@gmail.com","name":"Lukas Rytz"},"message":"Apply local variable index shift when inlining iinc instruction\n\nThat was an oversight. Scalac never emits iinc, but it can appear when\ninlining from the classpath.","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/09f5752b871a2e870dfc1bb57fda203515d26651"},{"sha":"a40ee59d4455c2bb45168844f50e9d15120bd7d8","author":{"email":"c4c4cd0781e8a49d848921386970d334ffda1135@gmail.com","name":"Lukas Rytz"},"message":"Don't force the GenASM backend when passing -optimize\n\nThis behavior is confusing and also problematic for writing partest\ntests: CI passes -optimize, which negates the -Ybackend:GenBCode entry\nin a flags file.","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/a40ee59d4455c2bb45168844f50e9d15120bd7d8"},{"sha":"323d044f93242cb023042c37b64ce79c5810e612","author":{"email":"c4c4cd0781e8a49d848921386970d334ffda1135@gmail.com","name":"Lukas Rytz"},"message":"Don't inlinie if the resulting method becomes too large for the JVM\n\nThis threshold is really the last resort and should never be reached.\nAn inlining heuristic that blows up methods to the maximum size\nallowed by the JVM is broken.\n\nIn the future we need to include some heuristic about code size when\nmaking an inlining decision, see github.com/scala-opt/scala/issues/2","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/323d044f93242cb023042c37b64ce79c5810e612"},{"sha":"a5dc9b7913c113ffd15b1f23cba2a4a710546cd8","author":{"email":"c4c4cd0781e8a49d848921386970d334ffda1135@gmail.com","name":"Lukas Rytz"},"message":"Test case: cannot inline a private call into a different class.\n\nInvocations of private methods cannot be inlined into a different\nclass, this would cause an IllegalAccessError.","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/a5dc9b7913c113ffd15b1f23cba2a4a710546cd8"},{"sha":"6becefe90690ae025308b00e0fd7e46646b4f961","author":{"email":"c4c4cd0781e8a49d848921386970d334ffda1135@gmail.com","name":"Lukas Rytz"},"message":"SI-9139 don't inline across @strictfp modes\n\nCannot inline if one of the methods is @strictfp, but not the other.","distinct":false,"url":"https://api.github.com/repos/som-snytt/scala/commits/6becefe90690ae025308b00e0fd7e46646b4f961"}]}