xref: /aosp_15_r20/external/angle/third_party/bazel/desugar/stateful-lambdas.patch (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Workerdiff --git a/src/tools/android/java/com/google/devtools/build/android/desugar/LambdaClassFixer.java b/src/tools/android/java/com/google/devtools/build/android/desugar/LambdaClassFixer.java
2*8975f5c5SAndroid Build Coastguard Workerindex ff3e351996..f857e61d1e 100644
3*8975f5c5SAndroid Build Coastguard Worker--- a/src/tools/android/java/com/google/devtools/build/android/desugar/LambdaClassFixer.java
4*8975f5c5SAndroid Build Coastguard Worker+++ b/src/tools/android/java/com/google/devtools/build/android/desugar/LambdaClassFixer.java
5*8975f5c5SAndroid Build Coastguard Worker@@ -93,7 +93,7 @@ class LambdaClassFixer extends ClassVisitor {
6*8975f5c5SAndroid Build Coastguard Worker     checkArgument(BitFlags.noneSet(access, Opcodes.ACC_INTERFACE), "Not a class: %s", name);
7*8975f5c5SAndroid Build Coastguard Worker     checkState(this.originalInternalName == null, "not intended for reuse but reused for %s", name);
8*8975f5c5SAndroid Build Coastguard Worker     originalInternalName = name;
9*8975f5c5SAndroid Build Coastguard Worker-    hasState = false;
10*8975f5c5SAndroid Build Coastguard Worker+    hasState = true;
11*8975f5c5SAndroid Build Coastguard Worker     hasFactory = false;
12*8975f5c5SAndroid Build Coastguard Worker     desc = null;
13*8975f5c5SAndroid Build Coastguard Worker     this.signature = null;
14*8975f5c5SAndroid Build Coastguard Worker@@ -136,7 +136,7 @@ class LambdaClassFixer extends ClassVisitor {
15*8975f5c5SAndroid Build Coastguard Worker     } else if ("<init>".equals(name)) {
16*8975f5c5SAndroid Build Coastguard Worker       this.desc = desc;
17*8975f5c5SAndroid Build Coastguard Worker       this.signature = signature;
18*8975f5c5SAndroid Build Coastguard Worker-      if (!lambdaInfo.needFactory() && !desc.startsWith("()")) {
19*8975f5c5SAndroid Build Coastguard Worker+      if (!lambdaInfo.needFactory()) {
20*8975f5c5SAndroid Build Coastguard Worker         access &= ~Opcodes.ACC_PRIVATE; // make constructor accessible if we'll call it directly
21*8975f5c5SAndroid Build Coastguard Worker       }
22*8975f5c5SAndroid Build Coastguard Worker     }
23*8975f5c5SAndroid Build Coastguard Worker@@ -156,10 +156,6 @@ class LambdaClassFixer extends ClassVisitor {
24*8975f5c5SAndroid Build Coastguard Worker
25*8975f5c5SAndroid Build Coastguard Worker   @Override
26*8975f5c5SAndroid Build Coastguard Worker   public void visitEnd() {
27*8975f5c5SAndroid Build Coastguard Worker-    checkState(
28*8975f5c5SAndroid Build Coastguard Worker-        !hasState || hasFactory,
29*8975f5c5SAndroid Build Coastguard Worker-        "Expected factory method for capturing lambda %s",
30*8975f5c5SAndroid Build Coastguard Worker-        getInternalName());
31*8975f5c5SAndroid Build Coastguard Worker     if (!hasState) {
32*8975f5c5SAndroid Build Coastguard Worker       checkState(
33*8975f5c5SAndroid Build Coastguard Worker           signature == null,
34*8975f5c5SAndroid Build Coastguard Workerdiff --git a/src/tools/android/java/com/google/devtools/build/android/desugar/LambdaDesugaring.java b/src/tools/android/java/com/google/devtools/build/android/desugar/LambdaDesugaring.java
35*8975f5c5SAndroid Build Coastguard Workerindex 8f90d25ff5..f5ed6d524a 100644
36*8975f5c5SAndroid Build Coastguard Worker--- a/src/tools/android/java/com/google/devtools/build/android/desugar/LambdaDesugaring.java
37*8975f5c5SAndroid Build Coastguard Worker+++ b/src/tools/android/java/com/google/devtools/build/android/desugar/LambdaDesugaring.java
38*8975f5c5SAndroid Build Coastguard Worker@@ -423,8 +423,7 @@ class LambdaDesugaring extends ClassVisitor {
39*8975f5c5SAndroid Build Coastguard Worker         String lambdaClassName = internalName + "$$Lambda$" + (lambdaCount++);
40*8975f5c5SAndroid Build Coastguard Worker         Type[] capturedTypes = Type.getArgumentTypes(desc);
41*8975f5c5SAndroid Build Coastguard Worker         boolean needFactory =
42*8975f5c5SAndroid Build Coastguard Worker-            capturedTypes.length != 0
43*8975f5c5SAndroid Build Coastguard Worker-                && !attemptAllocationBeforeArgumentLoads(lambdaClassName, capturedTypes);
44*8975f5c5SAndroid Build Coastguard Worker+                !attemptAllocationBeforeArgumentLoads(lambdaClassName, capturedTypes);
45*8975f5c5SAndroid Build Coastguard Worker         lambdas.generateLambdaClass(
46*8975f5c5SAndroid Build Coastguard Worker             internalName,
47*8975f5c5SAndroid Build Coastguard Worker             LambdaInfo.create(
48*8975f5c5SAndroid Build Coastguard Worker@@ -435,7 +434,7 @@ class LambdaDesugaring extends ClassVisitor {
49*8975f5c5SAndroid Build Coastguard Worker                 bridgeInfo.bridgeMethod()),
50*8975f5c5SAndroid Build Coastguard Worker             bsmMethod,
51*8975f5c5SAndroid Build Coastguard Worker             args);
52*8975f5c5SAndroid Build Coastguard Worker-        if (desc.startsWith("()")) {
53*8975f5c5SAndroid Build Coastguard Worker+        if (false) {
54*8975f5c5SAndroid Build Coastguard Worker           // For stateless lambda classes we'll generate a singleton instance that we can just load
55*8975f5c5SAndroid Build Coastguard Worker           checkState(capturedTypes.length == 0);
56*8975f5c5SAndroid Build Coastguard Worker           super.visitFieldInsn(
57*8975f5c5SAndroid Build Coastguard Worker@@ -493,7 +492,6 @@ class LambdaDesugaring extends ClassVisitor {
58*8975f5c5SAndroid Build Coastguard Worker      * @return {@code true} if we were able to insert a new/dup, {@code false} otherwise
59*8975f5c5SAndroid Build Coastguard Worker      */
60*8975f5c5SAndroid Build Coastguard Worker     private boolean attemptAllocationBeforeArgumentLoads(String internalName, Type[] paramTypes) {
61*8975f5c5SAndroid Build Coastguard Worker-      checkArgument(paramTypes.length > 0, "Expected at least one param for %s", internalName);
62*8975f5c5SAndroid Build Coastguard Worker       // Walk backwards past loads corresponding to constructor arguments to find the instruction
63*8975f5c5SAndroid Build Coastguard Worker       // after which we need to insert our NEW/DUP pair
64*8975f5c5SAndroid Build Coastguard Worker       AbstractInsnNode insn = instructions.getLast();
65