summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcnsun <cnsun@google.com>2017-12-12 08:18:36 -0800
committerColin Cross <ccross@android.com>2017-12-14 12:16:25 -0800
commitb06ac544a149ba745b7e1356047bc7a4a91a502f (patch)
treef459171a19b9878bd7e8cf1a5b14a125364ea167
parent399ca0fdaa1cbd7120b07df54b207aad2d6fe77c (diff)
downloaddesugar-b06ac544a149ba745b7e1356047bc7a4a91a502f.tar.gz
Correct stack map frame computation. When visiting CHOP Frame (discarding n local local variables), the current implementation deletes n local slots, which is wrong when the local variable to delete is of type category 2.
This CL deletes local variables instead of local slots. Another change is using the Label objects to identify uninitialized values, instead of the offsets of labels, because the offsets of labels might not be computed. RELNOTES:n/a. PiperOrigin-RevId: 178762969 GitOrigin-RevId: 770b1779dfd4e673e1523bc7e6f1772d4f4dfc04 Change-Id: Ib1ae1a813a51649d5d9522bdf393f48e56432b66
-rw-r--r--java/com/google/devtools/build/android/desugar/BytecodeTypeInference.java138
-rw-r--r--java/com/google/devtools/build/android/desugar/TryWithResourcesRewriter.java27
-rw-r--r--test/java/com/google/devtools/build/android/desugar/ByteCodeTypePrinter.java34
-rw-r--r--test/java/com/google/devtools/build/android/desugar/BytecodeTypeInferenceTest.golden.txt627
-rw-r--r--test/java/com/google/devtools/build/android/desugar/BytecodeTypeInferenceTest.java41
-rw-r--r--test/java/com/google/devtools/build/android/desugar/classes_for_testing_type_inference/test_subjects.jarbin3361 -> 3594 bytes
-rw-r--r--test/java/com/google/devtools/build/android/desugar/classes_for_testing_type_inference/testsubjects/TestSubject.java18
7 files changed, 811 insertions, 74 deletions
diff --git a/java/com/google/devtools/build/android/desugar/BytecodeTypeInference.java b/java/com/google/devtools/build/android/desugar/BytecodeTypeInference.java
index 777a4ab..783069f 100644
--- a/java/com/google/devtools/build/android/desugar/BytecodeTypeInference.java
+++ b/java/com/google/devtools/build/android/desugar/BytecodeTypeInference.java
@@ -14,12 +14,14 @@
package com.google.devtools.build.android.desugar;
import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
import com.google.auto.value.AutoValue;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
-import java.util.HashMap;
+import java.util.Optional;
+import javax.annotation.Nullable;
import org.objectweb.asm.Handle;
import org.objectweb.asm.Label;
import org.objectweb.asm.MethodVisitor;
@@ -41,11 +43,6 @@ public final class BytecodeTypeInference extends MethodVisitor {
private FrameInfo previousFrame;
/** For debugging purpose. */
private final String methodSignature;
- /**
- * Stores mapping from "uninitialized" value to concrete value. This is for the "new" instruction.
- */
- private final HashMap<InferredType, InferredType> uninitializedToConcreteTypeMap =
- new HashMap<>();
public BytecodeTypeInference(int access, String owner, String name, String methodDescriptor) {
super(Opcodes.ASM6);
@@ -81,6 +78,10 @@ public final class BytecodeTypeInference extends MethodVisitor {
return operandStack.toString();
}
+ public String getLocalsAsString() {
+ return localVariableSlots.toString();
+ }
+
@Override
public void visitInsn(int opcode) {
switch (opcode) {
@@ -476,8 +477,7 @@ public final class BytecodeTypeInference extends MethodVisitor {
int argumentSize = (Type.getArgumentsAndReturnSizes(desc) >> 2);
InferredType receiverType = getTypeOfOperandFromTop(argumentSize - 1);
if (receiverType.isUninitialized()) {
- InferredType realType = InferredType.create('L' + owner + ';');
- uninitializedToConcreteTypeMap.put(receiverType, realType);
+ InferredType realType = InferredType.createNonUninitializedType('L' + owner + ';');
replaceUninitializedTypeInStack(receiverType, realType);
}
}
@@ -642,7 +642,6 @@ public final class BytecodeTypeInference extends MethodVisitor {
operandStack.addAll(previousFrame.stack());
localVariableSlots.clear();
localVariableSlots.addAll(previousFrame.locals());
-
super.visitFrame(type, nLocal, local, nStack, stack);
}
@@ -672,7 +671,7 @@ public final class BytecodeTypeInference extends MethodVisitor {
checkArgument(oldType.isUninitialized(), "The old type is NOT uninitialized. %s", oldType);
for (int i = 0, size = operandStack.size(); i < size; ++i) {
InferredType type = operandStack.get(i);
- if (type == oldType) {
+ if (type.equals(oldType)) {
operandStack.set(i, newType);
}
}
@@ -703,7 +702,7 @@ public final class BytecodeTypeInference extends MethodVisitor {
break;
case 'L':
case '[':
- push(InferredType.create(desc.substring(index)));
+ push(InferredType.createNonUninitializedType(desc.substring(index)));
break;
default:
throw new RuntimeException("Unhandled type: " + desc);
@@ -771,12 +770,6 @@ public final class BytecodeTypeInference extends MethodVisitor {
return lastPopped;
}
- private static ImmutableList<InferredType> removeBackFromList(
- ImmutableList<InferredType> list, int countToRemove) {
- int newSize = list.size() - countToRemove;
- return list.subList(0, newSize);
- }
-
/**
* Create the types of local variables at the very beginning of the method with the information of
* the declaring class and the method descriptor.
@@ -787,7 +780,7 @@ public final class BytecodeTypeInference extends MethodVisitor {
if (!BitFlags.isSet(access, Opcodes.ACC_STATIC)) {
// Instance method, and this is the receiver
- types.add(InferredType.create(convertToDescriptor(ownerClass)));
+ types.add(InferredType.createNonUninitializedType(convertToDescriptor(ownerClass)));
}
Type[] argumentTypes = Type.getArgumentTypes(methodDescriptor);
for (Type argumentType : argumentTypes) {
@@ -812,7 +805,7 @@ public final class BytecodeTypeInference extends MethodVisitor {
break;
case Type.ARRAY:
case Type.OBJECT:
- types.add(InferredType.create(argumentType.getDescriptor()));
+ types.add(InferredType.createNonUninitializedType(argumentType.getDescriptor()));
break;
default:
throw new RuntimeException(
@@ -828,6 +821,28 @@ public final class BytecodeTypeInference extends MethodVisitor {
return types;
}
+ private static ImmutableList<InferredType> removeBackFromList(
+ ImmutableList<InferredType> list, int countToRemove) {
+ int origSize = list.size();
+ int index = origSize - 1;
+
+ while (index >= 0 && countToRemove > 0) {
+ InferredType type = list.get(index);
+ if (type.equals(InferredType.TOP) && index > 0 && list.get(index - 1).isCategory2()) {
+ --index; // A category 2 takes two slots.
+ }
+ --index; // Eat this local variable.
+ --countToRemove;
+ }
+ checkState(
+ countToRemove == 0,
+ "countToRemove is %s but not 0. index=%s, list=%s",
+ countToRemove,
+ index,
+ list);
+ return list.subList(0, index + 1);
+ }
+
private ImmutableList<InferredType> appendArrayToList(
ImmutableList<InferredType> list, int size, Object[] array) {
ImmutableList.Builder<InferredType> builder = ImmutableList.builder();
@@ -861,13 +876,13 @@ public final class BytecodeTypeInference extends MethodVisitor {
} else if (typeInStackMapFrame instanceof String) {
String referenceTypeName = (String) typeInStackMapFrame;
if (referenceTypeName.charAt(0) == '[') {
- return InferredType.create(referenceTypeName);
+ return InferredType.createNonUninitializedType(referenceTypeName);
} else {
- return InferredType.create('L' + referenceTypeName + ';');
+ return InferredType.createNonUninitializedType('L' + referenceTypeName + ';');
}
} else if (typeInStackMapFrame instanceof Label) {
Label label = (Label) typeInStackMapFrame;
- return InferredType.createUninitialized(label.getOffset());
+ return InferredType.createUninitializedType(label);
} else {
throw new RuntimeException(
"Cannot reach here. Unhandled element: value="
@@ -911,26 +926,45 @@ public final class BytecodeTypeInference extends MethodVisitor {
public static final String UNINITIALIZED_PREFIX = "UNINIT@";
public static final InferredType BOOLEAN =
- new AutoValue_BytecodeTypeInference_InferredType("Z");
- public static final InferredType BYTE = new AutoValue_BytecodeTypeInference_InferredType("B");
- public static final InferredType INT = new AutoValue_BytecodeTypeInference_InferredType("I");
- public static final InferredType FLOAT = new AutoValue_BytecodeTypeInference_InferredType("F");
- public static final InferredType LONG = new AutoValue_BytecodeTypeInference_InferredType("J");
- public static final InferredType DOUBLE = new AutoValue_BytecodeTypeInference_InferredType("D");
+ new AutoValue_BytecodeTypeInference_InferredType("Z", /*uninitializationLabel=*/ null);
+ public static final InferredType BYTE =
+ new AutoValue_BytecodeTypeInference_InferredType("B", /*uninitializationLabel=*/ null);
+ public static final InferredType INT =
+ new AutoValue_BytecodeTypeInference_InferredType("I", /*uninitializationLabel=*/ null);
+ public static final InferredType FLOAT =
+ new AutoValue_BytecodeTypeInference_InferredType("F", /*uninitializationLabel=*/ null);
+ public static final InferredType LONG =
+ new AutoValue_BytecodeTypeInference_InferredType("J", /*uninitializationLabel=*/ null);
+ public static final InferredType DOUBLE =
+ new AutoValue_BytecodeTypeInference_InferredType("D", /*uninitializationLabel=*/ null);
/** Not a real value. */
- public static final InferredType TOP = new AutoValue_BytecodeTypeInference_InferredType("TOP");
+ public static final InferredType TOP =
+ new AutoValue_BytecodeTypeInference_InferredType("TOP", /*uninitializationLabel=*/ null);
/** The value NULL */
public static final InferredType NULL =
- new AutoValue_BytecodeTypeInference_InferredType("NULL");
+ new AutoValue_BytecodeTypeInference_InferredType("NULL", /*uninitializationLabel=*/ null);
public static final InferredType UNINITIALIZED_THIS =
- new AutoValue_BytecodeTypeInference_InferredType("UNINITIALIZED_THIS");
+ new AutoValue_BytecodeTypeInference_InferredType(
+ "UNINITIALIZED_THIS", /*uninitializationLabel=*/ null);
- static InferredType create(String descriptor) {
+ /**
+ * Create a type for a value. This method is not intended to be called outside of this class.
+ */
+ private static InferredType create(String descriptor, @Nullable Label uninitializationLabel) {
+ if (UNINITIALIZED_PREFIX.equals(descriptor)) {
+ return new AutoValue_BytecodeTypeInference_InferredType(
+ UNINITIALIZED_PREFIX, checkNotNull(uninitializationLabel));
+ }
+ checkArgument(
+ uninitializationLabel == null,
+ "The uninitializationLabel should be null for non-uninitialized value. %s",
+ descriptor);
char firstChar = descriptor.charAt(0);
- if (firstChar == 'L' || firstChar == '[' || descriptor.startsWith(UNINITIALIZED_PREFIX)) {
- // Reference, array, or uninitialized values.
- return new AutoValue_BytecodeTypeInference_InferredType(descriptor);
+ if (firstChar == 'L' || firstChar == '[') {
+ // Reference, array.
+ return new AutoValue_BytecodeTypeInference_InferredType(
+ descriptor, /*uninitializationLabel=*/ null);
}
switch (descriptor) {
case "Z":
@@ -956,12 +990,23 @@ public final class BytecodeTypeInference extends MethodVisitor {
}
}
- /** Create a type for uninitialized value. The label is generated by ASM. */
- static InferredType createUninitialized(int label) {
- return create(UNINITIALIZED_PREFIX + label);
+ /** Creates all types except UNINITIALIZED. This method can also create UNINTIALIZED_THIS. */
+ static InferredType createNonUninitializedType(String descriptor) {
+ return create(descriptor, /*uninitializationLabel=*/ null);
+ }
+
+ /** Create a type for an UNINITIALIZED value. The uninitializationLabel is generated by ASM. */
+ static InferredType createUninitializedType(Label uninitializationLabel) {
+ return create(UNINITIALIZED_PREFIX, uninitializationLabel);
}
abstract String descriptor();
+ /**
+ * The label may be null. This field is meaningful if the current type is "UNINITIALIZED". For
+ * other types, this field is null.
+ */
+ @Nullable
+ abstract Label uninitializationLabel();
@Override
public String toString() {
@@ -978,7 +1023,7 @@ public final class BytecodeTypeInference extends MethodVisitor {
public InferredType getElementTypeIfArrayOrThrow() {
String descriptor = descriptor();
checkState(descriptor.charAt(0) == '[', "This type %s is not an array.", this);
- return create(descriptor.substring(1));
+ return createNonUninitializedType(descriptor.substring(1));
}
/** Is an uninitialized value? */
@@ -992,17 +1037,16 @@ public final class BytecodeTypeInference extends MethodVisitor {
}
/**
- * If this type is a reference type, then return the internal name. Otherwise, throw an
- * exception.
+ * If this type is a reference type, then return the internal name. Otherwise, returns empty.
*/
- public String getInternalNameOrThrow() {
+ public Optional<String> getInternalName() {
String descriptor = descriptor();
int length = descriptor.length();
- checkState(
- descriptor.charAt(0) == 'L' && descriptor.charAt(length - 1) == ';',
- "The type is expected to be either a class or an interface: %s",
- descriptor);
- return descriptor.substring(1, length - 1);
+ if (length > 0 && descriptor.charAt(0) == 'L' && descriptor.charAt(length - 1) == ';') {
+ return Optional.of(descriptor.substring(1, length - 1));
+ } else {
+ return Optional.empty();
+ }
}
}
}
diff --git a/java/com/google/devtools/build/android/desugar/TryWithResourcesRewriter.java b/java/com/google/devtools/build/android/desugar/TryWithResourcesRewriter.java
index e4d4da5..8e6d6d5 100644
--- a/java/com/google/devtools/build/android/desugar/TryWithResourcesRewriter.java
+++ b/java/com/google/devtools/build/android/desugar/TryWithResourcesRewriter.java
@@ -31,6 +31,7 @@ import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.android.desugar.BytecodeTypeInference.InferredType;
import java.util.Collections;
import java.util.LinkedHashSet;
+import java.util.Optional;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
import javax.annotation.Nullable;
@@ -291,10 +292,16 @@ public class TryWithResourcesRewriter extends ClassVisitor {
// Check the exception type.
InferredType exceptionClass = typeInference.getTypeOfOperandFromTop(1);
if (!exceptionClass.isNull()) {
- String exceptionClassInternalName = exceptionClass.getInternalNameOrThrow();
+ Optional<String> exceptionClassInternalName = exceptionClass.getInternalName();
+ checkState(
+ exceptionClassInternalName.isPresent(),
+ "The exception %s is not a reference type in %s.%s",
+ exceptionClass,
+ internalName,
+ methodSignature);
checkState(
isAssignableFrom(
- "java.lang.Throwable", exceptionClassInternalName.replace('/', '.')),
+ "java.lang.Throwable", exceptionClassInternalName.get().replace('/', '.')),
"The exception type %s in %s.%s should be a subclass of java.lang.Throwable.",
exceptionClassInternalName,
internalName,
@@ -302,20 +309,26 @@ public class TryWithResourcesRewriter extends ClassVisitor {
}
}
- String resourceClassInternalName =
- typeInference.getTypeOfOperandFromTop(0).getInternalNameOrThrow();
+ InferredType resourceType = typeInference.getTypeOfOperandFromTop(0);
+ Optional<String> resourceClassInternalName = resourceType.getInternalName();
+ checkState(
+ resourceClassInternalName.isPresent(),
+ "The resource class %s is not a reference type in %s.%s",
+ resourceType,
+ internalName,
+ methodSignature);
checkState(
isAssignableFrom(
- "java.lang.AutoCloseable", resourceClassInternalName.replace('/', '.')),
+ "java.lang.AutoCloseable", resourceClassInternalName.get().replace('/', '.')),
"The resource type should be a subclass of java.lang.AutoCloseable: %s",
resourceClassInternalName);
- resourceTypeInternalNames.add(resourceClassInternalName);
+ resourceTypeInternalNames.add(resourceClassInternalName.get());
super.visitMethodInsn(
opcode,
owner,
"$closeResource",
- "(Ljava/lang/Throwable;L" + resourceClassInternalName + ";)V",
+ "(Ljava/lang/Throwable;L" + resourceClassInternalName.get() + ";)V",
itf);
return;
}
diff --git a/test/java/com/google/devtools/build/android/desugar/ByteCodeTypePrinter.java b/test/java/com/google/devtools/build/android/desugar/ByteCodeTypePrinter.java
index fefc599..d58d002 100644
--- a/test/java/com/google/devtools/build/android/desugar/ByteCodeTypePrinter.java
+++ b/test/java/com/google/devtools/build/android/desugar/ByteCodeTypePrinter.java
@@ -20,6 +20,7 @@ import java.io.InputStream;
import java.io.PrintWriter;
import java.nio.file.Files;
import java.nio.file.Path;
+import java.util.Comparator;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import org.objectweb.asm.ClassReader;
@@ -53,7 +54,7 @@ public class ByteCodeTypePrinter {
private static ImmutableList<ZipEntry> getSortedClassEntriess(ZipFile jar) {
return jar.stream()
.filter(entry -> entry.getName().endsWith(".class"))
- .sorted()
+ .sorted(Comparator.comparing(ZipEntry::getName))
.collect(ImmutableList.toImmutableList());
}
@@ -116,105 +117,106 @@ public class ByteCodeTypePrinter {
this.printWriter = printWriter;
}
- private void printTypeOfOperandStackTop() {
+ private void printTypeOfOperandStack() {
printer.print(" |__STACK: " + inference.getOperandStackAsString() + "\n");
+ printer.print(" |__LOCAL: " + inference.getLocalsAsString() + "\n");
}
@Override
public void visitIntInsn(int opcode, int operand) {
printer.visitIntInsn(opcode, operand);
- printTypeOfOperandStackTop();
+ printTypeOfOperandStack();
super.visitIntInsn(opcode, operand);
}
@Override
public void visitInsn(int opcode) {
printer.visitInsn(opcode);
- printTypeOfOperandStackTop();
+ printTypeOfOperandStack();
super.visitInsn(opcode);
}
@Override
public void visitMultiANewArrayInsn(String desc, int dims) {
printer.visitMultiANewArrayInsn(desc, dims);
- printTypeOfOperandStackTop();
+ printTypeOfOperandStack();
super.visitMultiANewArrayInsn(desc, dims);
}
@Override
public void visitLookupSwitchInsn(Label dflt, int[] keys, Label[] labels) {
printer.visitLookupSwitchInsn(dflt, keys, labels);
- printTypeOfOperandStackTop();
+ printTypeOfOperandStack();
super.visitLookupSwitchInsn(dflt, keys, labels);
}
@Override
public void visitTableSwitchInsn(int min, int max, Label dflt, Label... labels) {
printer.visitTableSwitchInsn(min, max, dflt, labels);
- printTypeOfOperandStackTop();
+ printTypeOfOperandStack();
super.visitTableSwitchInsn(min, max, dflt, labels);
}
@Override
public void visitIincInsn(int var, int increment) {
printer.visitIincInsn(var, increment);
- printTypeOfOperandStackTop();
+ printTypeOfOperandStack();
super.visitIincInsn(var, increment);
}
@Override
public void visitLdcInsn(Object cst) {
printer.visitLdcInsn(cst);
- printTypeOfOperandStackTop();
+ printTypeOfOperandStack();
super.visitLdcInsn(cst);
}
@Override
public void visitJumpInsn(int opcode, Label label) {
printer.visitJumpInsn(opcode, label);
- printTypeOfOperandStackTop();
+ printTypeOfOperandStack();
super.visitJumpInsn(opcode, label);
}
@Override
public void visitInvokeDynamicInsn(String name, String desc, Handle bsm, Object... bsmArgs) {
printer.visitInvokeDynamicInsn(name, desc, bsm, bsmArgs);
- printTypeOfOperandStackTop();
+ printTypeOfOperandStack();
super.visitInvokeDynamicInsn(name, desc, bsm, bsmArgs);
}
@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) {
printer.visitMethodInsn(opcode, owner, name, desc, itf);
- printTypeOfOperandStackTop();
+ printTypeOfOperandStack();
super.visitMethodInsn(opcode, owner, name, desc, itf);
}
@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc) {
printer.visitMethodInsn(opcode, owner, name, desc);
- printTypeOfOperandStackTop();
+ printTypeOfOperandStack();
super.visitMethodInsn(opcode, owner, name, desc);
}
@Override
public void visitFieldInsn(int opcode, String owner, String name, String desc) {
printer.visitFieldInsn(opcode, owner, name, desc);
- printTypeOfOperandStackTop();
+ printTypeOfOperandStack();
super.visitFieldInsn(opcode, owner, name, desc);
}
@Override
public void visitTypeInsn(int opcode, String type) {
printer.visitTypeInsn(opcode, type);
- printTypeOfOperandStackTop();
+ printTypeOfOperandStack();
super.visitTypeInsn(opcode, type);
}
@Override
public void visitVarInsn(int opcode, int var) {
printer.visitVarInsn(opcode, var);
- printTypeOfOperandStackTop();
+ printTypeOfOperandStack();
super.visitVarInsn(opcode, var);
}
diff --git a/test/java/com/google/devtools/build/android/desugar/BytecodeTypeInferenceTest.golden.txt b/test/java/com/google/devtools/build/android/desugar/BytecodeTypeInferenceTest.golden.txt
index 722c2ad..dabfe14 100644
--- a/test/java/com/google/devtools/build/android/desugar/BytecodeTypeInferenceTest.golden.txt
+++ b/test/java/com/google/devtools/build/android/desugar/BytecodeTypeInferenceTest.golden.txt
@@ -3,1168 +3,1793 @@ Method <init>
L0
ALOAD 0
|__STACK: [Ltestsubjects/TestSubject;]
+ |__LOCAL: [Ltestsubjects/TestSubject;]
INVOKESPECIAL java/lang/Object.<init> ()V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;]
RETURN
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;]
Method catchTest
L0
ALOAD 0
|__STACK: [Ljava/lang/Object;]
+ |__LOCAL: [Ljava/lang/Object;, Ljava/lang/Object;]
INSTANCEOF java/lang/String
|__STACK: [I]
+ |__LOCAL: [Ljava/lang/Object;, Ljava/lang/Object;]
IFNE L1
|__STACK: []
+ |__LOCAL: [Ljava/lang/Object;, Ljava/lang/Object;]
L2
GETSTATIC testsubjects/TestSubject.VALUE_ONE : I
|__STACK: [I]
+ |__LOCAL: [Ljava/lang/Object;, Ljava/lang/Object;]
IRETURN
|__STACK: []
+ |__LOCAL: [Ljava/lang/Object;, Ljava/lang/Object;]
L1
FRAME SAME
ALOAD 0
|__STACK: [Ljava/lang/Object;]
+ |__LOCAL: [Ljava/lang/Object;, Ljava/lang/Object;]
CHECKCAST java/lang/String
|__STACK: [Ljava/lang/String;]
+ |__LOCAL: [Ljava/lang/Object;, Ljava/lang/Object;]
INVOKESTATIC java/util/regex/Pattern.compile (Ljava/lang/String;)Ljava/util/regex/Pattern;
|__STACK: [Ljava/util/regex/Pattern;]
+ |__LOCAL: [Ljava/lang/Object;, Ljava/lang/Object;]
POP
|__STACK: []
+ |__LOCAL: [Ljava/lang/Object;, Ljava/lang/Object;]
L3
GOTO L4
|__STACK: []
+ |__LOCAL: [Ljava/lang/Object;, Ljava/lang/Object;]
L5
FRAME SAME1 java/util/regex/PatternSyntaxException
ASTORE 2
|__STACK: []
+ |__LOCAL: [Ljava/lang/Object;, Ljava/lang/Object;, Ljava/util/regex/PatternSyntaxException;]
L6
GETSTATIC testsubjects/TestSubject.VALUE_TWO : I
|__STACK: [I]
+ |__LOCAL: [Ljava/lang/Object;, Ljava/lang/Object;, Ljava/util/regex/PatternSyntaxException;]
IRETURN
|__STACK: []
+ |__LOCAL: [Ljava/lang/Object;, Ljava/lang/Object;, Ljava/util/regex/PatternSyntaxException;]
L4
FRAME SAME
GETSTATIC testsubjects/TestSubject.VALUE_ONE : I
|__STACK: [I]
+ |__LOCAL: [Ljava/lang/Object;, Ljava/lang/Object;]
IRETURN
|__STACK: []
+ |__LOCAL: [Ljava/lang/Object;, Ljava/lang/Object;]
Method assertEquals
L0
DLOAD 1
|__STACK: [D, TOP]
+ |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
DLOAD 3
|__STACK: [D, TOP, D, TOP]
+ |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
INVOKESTATIC java/lang/Double.compare (DD)I
|__STACK: [I]
+ |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
IFNE L1
|__STACK: []
+ |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
L2
RETURN
|__STACK: []
+ |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
L1
FRAME SAME
DLOAD 1
|__STACK: [D, TOP]
+ |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
DLOAD 3
|__STACK: [D, TOP, D, TOP]
+ |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
DSUB
|__STACK: [D, TOP]
+ |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
INVOKESTATIC java/lang/Math.abs (D)D
|__STACK: [D, TOP]
+ |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
DLOAD 5
|__STACK: [D, TOP, D, TOP]
+ |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
DCMPG
|__STACK: [I]
+ |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
IFLE L3
|__STACK: []
+ |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
L4
NEW java/lang/RuntimeException
|__STACK: [Ljava/lang/RuntimeException;]
+ |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
DUP
|__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;]
+ |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
NEW java/lang/StringBuilder
|__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;, Ljava/lang/StringBuilder;]
+ |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
DUP
|__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;, Ljava/lang/StringBuilder;, Ljava/lang/StringBuilder;]
+ |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
INVOKESPECIAL java/lang/StringBuilder.<init> ()V
|__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;, Ljava/lang/StringBuilder;]
+ |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
ALOAD 0
|__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;, Ljava/lang/StringBuilder;, Ljava/lang/String;]
+ |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;
|__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;, Ljava/lang/StringBuilder;]
+ |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
NEW java/lang/Double
|__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;, Ljava/lang/StringBuilder;, Ljava/lang/Double;]
+ |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
DUP
|__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;, Ljava/lang/StringBuilder;, Ljava/lang/Double;, Ljava/lang/Double;]
+ |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
DLOAD 1
|__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;, Ljava/lang/StringBuilder;, Ljava/lang/Double;, Ljava/lang/Double;, D, TOP]
+ |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
INVOKESPECIAL java/lang/Double.<init> (D)V
|__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;, Ljava/lang/StringBuilder;, Ljava/lang/Double;]
+ |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/Object;)Ljava/lang/StringBuilder;
|__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;, Ljava/lang/StringBuilder;]
+ |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
NEW java/lang/Double
|__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;, Ljava/lang/StringBuilder;, Ljava/lang/Double;]
+ |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
DUP
|__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;, Ljava/lang/StringBuilder;, Ljava/lang/Double;, Ljava/lang/Double;]
+ |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
DLOAD 3
|__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;, Ljava/lang/StringBuilder;, Ljava/lang/Double;, Ljava/lang/Double;, D, TOP]
+ |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
INVOKESPECIAL java/lang/Double.<init> (D)V
|__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;, Ljava/lang/StringBuilder;, Ljava/lang/Double;]
+ |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/Object;)Ljava/lang/StringBuilder;
|__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;, Ljava/lang/StringBuilder;]
+ |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
INVOKEVIRTUAL java/lang/StringBuilder.toString ()Ljava/lang/String;
|__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;, Ljava/lang/String;]
+ |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
INVOKESPECIAL java/lang/RuntimeException.<init> (Ljava/lang/String;)V
|__STACK: [Ljava/lang/RuntimeException;]
+ |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
ATHROW
|__STACK: []
+ |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
L3
FRAME SAME
RETURN
|__STACK: []
+ |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
Method simpleTryWithResources
L0
NEW testsubjects/TestSubject$SimpleResource
|__STACK: [Ltestsubjects/TestSubject$SimpleResource;]
+ |__LOCAL: []
DUP
|__STACK: [Ltestsubjects/TestSubject$SimpleResource;, Ltestsubjects/TestSubject$SimpleResource;]
+ |__LOCAL: []
INVOKESPECIAL testsubjects/TestSubject$SimpleResource.<init> ()V
|__STACK: [Ltestsubjects/TestSubject$SimpleResource;]
+ |__LOCAL: []
ASTORE 0
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;]
ACONST_NULL
|__STACK: [NULL]
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;]
ASTORE 1
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, NULL]
L1
ALOAD 0
|__STACK: [Ltestsubjects/TestSubject$SimpleResource;]
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, NULL]
ICONST_1
|__STACK: [Ltestsubjects/TestSubject$SimpleResource;, I]
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, NULL]
INVOKEVIRTUAL testsubjects/TestSubject$SimpleResource.call (Z)V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, NULL]
L2
ALOAD 0
|__STACK: [Ltestsubjects/TestSubject$SimpleResource;]
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, NULL]
IFNULL L3
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, NULL]
ALOAD 1
|__STACK: [NULL]
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, NULL]
IFNULL L4
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, NULL]
L5
ALOAD 0
|__STACK: [Ltestsubjects/TestSubject$SimpleResource;]
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, NULL]
INVOKEVIRTUAL testsubjects/TestSubject$SimpleResource.close ()V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, NULL]
L6
GOTO L3
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, NULL]
L7
FRAME FULL [testsubjects/TestSubject$SimpleResource java/lang/Throwable] [java/lang/Throwable]
ASTORE 2
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ALOAD 1
|__STACK: [Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ALOAD 2
|__STACK: [Ljava/lang/Throwable;, Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
INVOKEVIRTUAL java/lang/Throwable.addSuppressed (Ljava/lang/Throwable;)V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
GOTO L3
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
L4
FRAME SAME
ALOAD 0
|__STACK: [Ltestsubjects/TestSubject$SimpleResource;]
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;]
INVOKEVIRTUAL testsubjects/TestSubject$SimpleResource.close ()V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;]
GOTO L3
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;]
L8
FRAME SAME1 java/lang/Throwable
ASTORE 2
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ALOAD 2
|__STACK: [Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ASTORE 1
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ALOAD 2
|__STACK: [Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ATHROW
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
L9
FRAME SAME1 java/lang/Throwable
ASTORE 3
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;]
L10
ALOAD 0
|__STACK: [Ltestsubjects/TestSubject$SimpleResource;]
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;]
IFNULL L11
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;]
ALOAD 1
|__STACK: [Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;]
IFNULL L12
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;]
L13
ALOAD 0
|__STACK: [Ltestsubjects/TestSubject$SimpleResource;]
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;]
INVOKEVIRTUAL testsubjects/TestSubject$SimpleResource.close ()V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;]
L14
GOTO L11
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;]
L15
FRAME FULL [testsubjects/TestSubject$SimpleResource java/lang/Throwable T java/lang/Throwable] [java/lang/Throwable]
ASTORE 4
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ALOAD 1
|__STACK: [Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ALOAD 4
|__STACK: [Ljava/lang/Throwable;, Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
INVOKEVIRTUAL java/lang/Throwable.addSuppressed (Ljava/lang/Throwable;)V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
GOTO L11
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
L12
FRAME SAME
ALOAD 0
|__STACK: [Ltestsubjects/TestSubject$SimpleResource;]
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;]
INVOKEVIRTUAL testsubjects/TestSubject$SimpleResource.close ()V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;]
L11
FRAME SAME
ALOAD 3
|__STACK: [Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;]
ATHROW
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;]
L3
FRAME FULL [] []
RETURN
|__STACK: []
+ |__LOCAL: []
Method internalCompare
L0
ALOAD 4
|__STACK: [Ljava/util/function/BinaryOperator;]
+ |__LOCAL: [J, TOP, J, TOP, Ljava/util/function/BinaryOperator;]
LLOAD 0
|__STACK: [Ljava/util/function/BinaryOperator;, J, TOP]
+ |__LOCAL: [J, TOP, J, TOP, Ljava/util/function/BinaryOperator;]
INVOKESTATIC java/lang/Long.valueOf (J)Ljava/lang/Long;
|__STACK: [Ljava/util/function/BinaryOperator;, Ljava/lang/Long;]
+ |__LOCAL: [J, TOP, J, TOP, Ljava/util/function/BinaryOperator;]
LLOAD 2
|__STACK: [Ljava/util/function/BinaryOperator;, Ljava/lang/Long;, J, TOP]
+ |__LOCAL: [J, TOP, J, TOP, Ljava/util/function/BinaryOperator;]
INVOKESTATIC java/lang/Long.valueOf (J)Ljava/lang/Long;
|__STACK: [Ljava/util/function/BinaryOperator;, Ljava/lang/Long;, Ljava/lang/Long;]
+ |__LOCAL: [J, TOP, J, TOP, Ljava/util/function/BinaryOperator;]
INVOKEINTERFACE java/util/function/BinaryOperator.apply (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
|__STACK: [Ljava/lang/Object;]
+ |__LOCAL: [J, TOP, J, TOP, Ljava/util/function/BinaryOperator;]
CHECKCAST java/lang/Long
|__STACK: [Ljava/lang/Long;]
+ |__LOCAL: [J, TOP, J, TOP, Ljava/util/function/BinaryOperator;]
INVOKEVIRTUAL java/lang/Long.longValue ()J
|__STACK: [J, TOP]
+ |__LOCAL: [J, TOP, J, TOP, Ljava/util/function/BinaryOperator;]
LRETURN
|__STACK: []
+ |__LOCAL: [J, TOP, J, TOP, Ljava/util/function/BinaryOperator;]
Method closeResourceArray
L0
ALOAD 1
|__STACK: [[Ljava/sql/Statement;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;]
ASTORE 2
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;]
ALOAD 2
|__STACK: [[Ljava/sql/Statement;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;]
ARRAYLENGTH
|__STACK: [I]
+ |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;]
ISTORE 3
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I]
ICONST_0
|__STACK: [I]
+ |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I]
ISTORE 4
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I]
L1
FRAME APPEND [[Ljava/sql/Statement; I I]
ILOAD 4
|__STACK: [I]
+ |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I]
ILOAD 3
|__STACK: [I, I]
+ |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I]
IF_ICMPGE L2
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I]
ALOAD 2
|__STACK: [[Ljava/sql/Statement;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I]
ILOAD 4
|__STACK: [[Ljava/sql/Statement;, I]
+ |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I]
AALOAD
|__STACK: [Ljava/sql/Statement;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I]
ASTORE 5
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I, Ljava/sql/Statement;]
L3
ALOAD 0
|__STACK: [Ltestsubjects/TestSubject;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I, Ljava/sql/Statement;]
ALOAD 5
|__STACK: [Ltestsubjects/TestSubject;, Ljava/sql/Statement;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I, Ljava/sql/Statement;]
ACONST_NULL
|__STACK: [Ltestsubjects/TestSubject;, Ljava/sql/Statement;, NULL]
+ |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I, Ljava/sql/Statement;]
INVOKEVIRTUAL testsubjects/TestSubject.closeResource (Ljava/lang/AutoCloseable;Ljava/lang/Throwable;)V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I, Ljava/sql/Statement;]
L4
IINC 4 1
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I, Ljava/sql/Statement;]
GOTO L1
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I, Ljava/sql/Statement;]
L2
FRAME CHOP 3
RETURN
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;]
Method closeResourceMultiArray
L0
ALOAD 1
|__STACK: [[[Ljava/sql/Statement;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;]
ASTORE 2
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;]
ALOAD 2
|__STACK: [[[Ljava/sql/Statement;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;]
ARRAYLENGTH
|__STACK: [I]
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;]
ISTORE 3
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I]
ICONST_0
|__STACK: [I]
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I]
ISTORE 4
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I]
L1
FRAME APPEND [[[Ljava/sql/Statement; I I]
ILOAD 4
|__STACK: [I]
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I]
ILOAD 3
|__STACK: [I, I]
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I]
IF_ICMPGE L2
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I]
ALOAD 2
|__STACK: [[[Ljava/sql/Statement;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I]
ILOAD 4
|__STACK: [[[Ljava/sql/Statement;, I]
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I]
AALOAD
|__STACK: [[Ljava/sql/Statement;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I]
ASTORE 5
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;]
L3
ALOAD 5
|__STACK: [[Ljava/sql/Statement;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;]
ASTORE 6
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;]
ALOAD 6
|__STACK: [[Ljava/sql/Statement;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;]
ARRAYLENGTH
|__STACK: [I]
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;]
ISTORE 7
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I]
ICONST_0
|__STACK: [I]
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I]
ISTORE 8
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I]
L4
FRAME FULL [testsubjects/TestSubject [[Ljava/sql/Statement; [[Ljava/sql/Statement; I I [Ljava/sql/Statement; [Ljava/sql/Statement; I I] []
ILOAD 8
|__STACK: [I]
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I]
ILOAD 7
|__STACK: [I, I]
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I]
IF_ICMPGE L5
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I]
ALOAD 6
|__STACK: [[Ljava/sql/Statement;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I]
ILOAD 8
|__STACK: [[Ljava/sql/Statement;, I]
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I]
AALOAD
|__STACK: [Ljava/sql/Statement;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I]
ASTORE 9
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I, Ljava/sql/Statement;]
L6
ALOAD 0
|__STACK: [Ltestsubjects/TestSubject;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I, Ljava/sql/Statement;]
ALOAD 9
|__STACK: [Ltestsubjects/TestSubject;, Ljava/sql/Statement;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I, Ljava/sql/Statement;]
ACONST_NULL
|__STACK: [Ltestsubjects/TestSubject;, Ljava/sql/Statement;, NULL]
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I, Ljava/sql/Statement;]
INVOKEVIRTUAL testsubjects/TestSubject.closeResource (Ljava/lang/AutoCloseable;Ljava/lang/Throwable;)V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I, Ljava/sql/Statement;]
L7
IINC 8 1
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I, Ljava/sql/Statement;]
GOTO L4
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I, Ljava/sql/Statement;]
L5
FRAME FULL [testsubjects/TestSubject [[Ljava/sql/Statement; [[Ljava/sql/Statement; I I] []
IINC 4 1
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I]
GOTO L1
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I]
L2
FRAME CHOP 3
RETURN
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;]
Method closeResourceArrayList
L0
ALOAD 1
|__STACK: [Ljava/util/List;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/util/List;]
INVOKEINTERFACE java/util/List.iterator ()Ljava/util/Iterator;
|__STACK: [Ljava/util/Iterator;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/util/List;]
ASTORE 2
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/util/List;, Ljava/util/Iterator;]
L1
FRAME APPEND [java/util/Iterator]
ALOAD 2
|__STACK: [Ljava/util/Iterator;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/util/List;, Ljava/util/Iterator;]
INVOKEINTERFACE java/util/Iterator.hasNext ()Z
|__STACK: [I]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/util/List;, Ljava/util/Iterator;]
IFEQ L2
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/util/List;, Ljava/util/Iterator;]
ALOAD 2
|__STACK: [Ljava/util/Iterator;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/util/List;, Ljava/util/Iterator;]
INVOKEINTERFACE java/util/Iterator.next ()Ljava/lang/Object;
|__STACK: [Ljava/lang/Object;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/util/List;, Ljava/util/Iterator;]
CHECKCAST java/sql/Statement
|__STACK: [Ljava/sql/Statement;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/util/List;, Ljava/util/Iterator;]
ASTORE 3
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/util/List;, Ljava/util/Iterator;, Ljava/sql/Statement;]
L3
ALOAD 0
|__STACK: [Ltestsubjects/TestSubject;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/util/List;, Ljava/util/Iterator;, Ljava/sql/Statement;]
ALOAD 3
|__STACK: [Ltestsubjects/TestSubject;, Ljava/sql/Statement;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/util/List;, Ljava/util/Iterator;, Ljava/sql/Statement;]
ACONST_NULL
|__STACK: [Ltestsubjects/TestSubject;, Ljava/sql/Statement;, NULL]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/util/List;, Ljava/util/Iterator;, Ljava/sql/Statement;]
INVOKEVIRTUAL testsubjects/TestSubject.closeResource (Ljava/lang/AutoCloseable;Ljava/lang/Throwable;)V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/util/List;, Ljava/util/Iterator;, Ljava/sql/Statement;]
L4
GOTO L1
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/util/List;, Ljava/util/Iterator;, Ljava/sql/Statement;]
L2
FRAME CHOP 1
RETURN
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/util/List;]
Method closeSqlStmt
L0
ACONST_NULL
|__STACK: [NULL]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/sql/Connection;]
ASTORE 2
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/sql/Connection;, NULL]
L1
ALOAD 1
|__STACK: [Ljava/sql/Connection;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/sql/Connection;, NULL]
INVOKEINTERFACE java/sql/Connection.createStatement ()Ljava/sql/Statement;
|__STACK: [Ljava/sql/Statement;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/sql/Connection;, NULL]
ASTORE 2
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/sql/Connection;, Ljava/sql/Statement;]
L2
GOTO L3
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/sql/Connection;, Ljava/sql/Statement;]
L4
FRAME FULL [testsubjects/TestSubject java/sql/Connection java/sql/Statement] [java/sql/SQLException]
ASTORE 3
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/sql/Connection;, Ljava/sql/Statement;, Ljava/sql/SQLException;]
L5
ALOAD 0
|__STACK: [Ltestsubjects/TestSubject;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/sql/Connection;, Ljava/sql/Statement;, Ljava/sql/SQLException;]
ALOAD 2
|__STACK: [Ltestsubjects/TestSubject;, Ljava/sql/Statement;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/sql/Connection;, Ljava/sql/Statement;, Ljava/sql/SQLException;]
ALOAD 3
|__STACK: [Ltestsubjects/TestSubject;, Ljava/sql/Statement;, Ljava/sql/SQLException;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/sql/Connection;, Ljava/sql/Statement;, Ljava/sql/SQLException;]
INVOKEVIRTUAL testsubjects/TestSubject.closeResource (Ljava/lang/AutoCloseable;Ljava/lang/Throwable;)V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/sql/Connection;, Ljava/sql/Statement;, Ljava/sql/SQLException;]
L3
FRAME SAME
ALOAD 0
|__STACK: [Ltestsubjects/TestSubject;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/sql/Connection;, Ljava/sql/Statement;]
ALOAD 2
|__STACK: [Ltestsubjects/TestSubject;, Ljava/sql/Statement;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/sql/Connection;, Ljava/sql/Statement;]
ACONST_NULL
|__STACK: [Ltestsubjects/TestSubject;, Ljava/sql/Statement;, NULL]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/sql/Connection;, Ljava/sql/Statement;]
INVOKEVIRTUAL testsubjects/TestSubject.closeResource (Ljava/lang/AutoCloseable;Ljava/lang/Throwable;)V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/sql/Connection;, Ljava/sql/Statement;]
L6
RETURN
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/sql/Connection;, Ljava/sql/Statement;]
Method closeResource
L0
ALOAD 1
|__STACK: [Ljava/lang/AutoCloseable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
IFNONNULL L1
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
L2
RETURN
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
L1
FRAME SAME
ALOAD 1
|__STACK: [Ljava/lang/AutoCloseable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
INVOKEINTERFACE java/lang/AutoCloseable.close ()V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
L3
GOTO L4
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
L5
FRAME SAME1 java/lang/Exception
ASTORE 3
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Exception;]
L6
ALOAD 2
|__STACK: [Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Exception;]
IFNULL L7
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Exception;]
L8
ALOAD 2
|__STACK: [Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Exception;]
ALOAD 3
|__STACK: [Ljava/lang/Throwable;, Ljava/lang/Exception;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Exception;]
INVOKEVIRTUAL java/lang/Throwable.addSuppressed (Ljava/lang/Throwable;)V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Exception;]
L7
FRAME APPEND [java/lang/Exception]
ALOAD 3
|__STACK: [Ljava/lang/Exception;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Exception;]
ATHROW
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Exception;]
L4
FRAME CHOP 1
RETURN
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
Method intAdd
L0
ILOAD 0
|__STACK: [I]
+ |__LOCAL: [I, I]
ISTORE 2
|__STACK: []
+ |__LOCAL: [I, I, I]
L1
IINC 2 1
|__STACK: []
+ |__LOCAL: [I, I, I]
L2
IINC 2 1
|__STACK: []
+ |__LOCAL: [I, I, I]
L3
ILOAD 2
|__STACK: [I]
+ |__LOCAL: [I, I, I]
ILOAD 1
|__STACK: [I, I]
+ |__LOCAL: [I, I, I]
IADD
|__STACK: [I]
+ |__LOCAL: [I, I, I]
ISTORE 2
|__STACK: []
+ |__LOCAL: [I, I, I]
L4
IINC 2 -1
|__STACK: []
+ |__LOCAL: [I, I, I]
L5
IINC 2 -1
|__STACK: []
+ |__LOCAL: [I, I, I]
L6
ILOAD 2
|__STACK: [I]
+ |__LOCAL: [I, I, I]
ILOAD 1
|__STACK: [I, I]
+ |__LOCAL: [I, I, I]
ISUB
|__STACK: [I]
+ |__LOCAL: [I, I, I]
ISTORE 2
|__STACK: []
+ |__LOCAL: [I, I, I]
L7
ILOAD 2
|__STACK: [I]
+ |__LOCAL: [I, I, I]
ILOAD 1
|__STACK: [I, I]
+ |__LOCAL: [I, I, I]
IMUL
|__STACK: [I]
+ |__LOCAL: [I, I, I]
ISTORE 2
|__STACK: []
+ |__LOCAL: [I, I, I]
L8
ILOAD 2
|__STACK: [I]
+ |__LOCAL: [I, I, I]
ILOAD 1
|__STACK: [I, I]
+ |__LOCAL: [I, I, I]
IDIV
|__STACK: [I]
+ |__LOCAL: [I, I, I]
ISTORE 2
|__STACK: []
+ |__LOCAL: [I, I, I]
L9
ILOAD 2
|__STACK: [I]
+ |__LOCAL: [I, I, I]
ILOAD 1
|__STACK: [I, I]
+ |__LOCAL: [I, I, I]
IREM
|__STACK: [I]
+ |__LOCAL: [I, I, I]
ISTORE 2
|__STACK: []
+ |__LOCAL: [I, I, I]
L10
ILOAD 2
|__STACK: [I]
+ |__LOCAL: [I, I, I]
ICONST_2
|__STACK: [I, I]
+ |__LOCAL: [I, I, I]
ISHL
|__STACK: [I]
+ |__LOCAL: [I, I, I]
ISTORE 2
|__STACK: []
+ |__LOCAL: [I, I, I]
L11
ILOAD 2
|__STACK: [I]
+ |__LOCAL: [I, I, I]
ILOAD 1
|__STACK: [I, I]
+ |__LOCAL: [I, I, I]
ISHR
|__STACK: [I]
+ |__LOCAL: [I, I, I]
ISTORE 2
|__STACK: []
+ |__LOCAL: [I, I, I]
L12
ILOAD 2
|__STACK: [I]
+ |__LOCAL: [I, I, I]
ICONST_3
|__STACK: [I, I]
+ |__LOCAL: [I, I, I]
IUSHR
|__STACK: [I]
+ |__LOCAL: [I, I, I]
ISTORE 2
|__STACK: []
+ |__LOCAL: [I, I, I]
L13
ILOAD 2
|__STACK: [I]
+ |__LOCAL: [I, I, I]
I2L
|__STACK: [J, TOP]
+ |__LOCAL: [I, I, I]
LSTORE 3
|__STACK: []
+ |__LOCAL: [I, I, I, J, TOP]
L14
LLOAD 3
|__STACK: [J, TOP]
+ |__LOCAL: [I, I, I, J, TOP]
ILOAD 1
|__STACK: [J, TOP, I]
+ |__LOCAL: [I, I, I, J, TOP]
LSHL
|__STACK: [J, TOP]
+ |__LOCAL: [I, I, I, J, TOP]
LSTORE 3
|__STACK: []
+ |__LOCAL: [I, I, I, J, TOP]
L15
LLOAD 3
|__STACK: [J, TOP]
+ |__LOCAL: [I, I, I, J, TOP]
L2I
|__STACK: [I]
+ |__LOCAL: [I, I, I, J, TOP]
IRETURN
|__STACK: []
+ |__LOCAL: [I, I, I, J, TOP]
Method createNumberWithDiamond
L0
ACONST_NULL
|__STACK: [NULL]
+ |__LOCAL: [I]
ASTORE 1
|__STACK: []
+ |__LOCAL: [I, NULL]
L1
ILOAD 0
|__STACK: [I]
+ |__LOCAL: [I, NULL]
IFEQ L2
|__STACK: []
+ |__LOCAL: [I, NULL]
L3
NEW java/lang/Integer
|__STACK: [Ljava/lang/Integer;]
+ |__LOCAL: [I, NULL]
DUP
|__STACK: [Ljava/lang/Integer;, Ljava/lang/Integer;]
+ |__LOCAL: [I, NULL]
ICONST_1
|__STACK: [Ljava/lang/Integer;, Ljava/lang/Integer;, I]
+ |__LOCAL: [I, NULL]
INVOKESPECIAL java/lang/Integer.<init> (I)V
|__STACK: [Ljava/lang/Integer;]
+ |__LOCAL: [I, NULL]
ASTORE 1
|__STACK: []
+ |__LOCAL: [I, Ljava/lang/Integer;]
GOTO L4
|__STACK: []
+ |__LOCAL: [I, Ljava/lang/Integer;]
L2
FRAME APPEND [java/lang/Number]
NEW java/lang/Double
|__STACK: [Ljava/lang/Double;]
+ |__LOCAL: [I, Ljava/lang/Number;]
DUP
|__STACK: [Ljava/lang/Double;, Ljava/lang/Double;]
+ |__LOCAL: [I, Ljava/lang/Number;]
DCONST_1
|__STACK: [Ljava/lang/Double;, Ljava/lang/Double;, D, TOP]
+ |__LOCAL: [I, Ljava/lang/Number;]
INVOKESPECIAL java/lang/Double.<init> (D)V
|__STACK: [Ljava/lang/Double;]
+ |__LOCAL: [I, Ljava/lang/Number;]
ASTORE 1
|__STACK: []
+ |__LOCAL: [I, Ljava/lang/Double;]
L4
FRAME SAME
ALOAD 1
|__STACK: [Ljava/lang/Number;]
+ |__LOCAL: [I, Ljava/lang/Number;]
ARETURN
|__STACK: []
+ |__LOCAL: [I, Ljava/lang/Number;]
Method createMultiObjectArray
L0
ICONST_0
|__STACK: [I]
+ |__LOCAL: []
ICONST_0
|__STACK: [I, I]
+ |__LOCAL: []
MULTIANEWARRAY [[Ljava/lang/Object; 2
|__STACK: [[[Ljava/lang/Object;]
+ |__LOCAL: []
ARETURN
|__STACK: []
+ |__LOCAL: []
Method createObjectArray
L0
ICONST_0
|__STACK: [I]
+ |__LOCAL: []
ANEWARRAY java/lang/Object
|__STACK: [[Ljava/lang/Object;]
+ |__LOCAL: []
ARETURN
|__STACK: []
+ |__LOCAL: []
Method createIntArray
L0
ICONST_0
|__STACK: [I]
+ |__LOCAL: []
NEWARRAY T_INT
|__STACK: [[I]
+ |__LOCAL: []
ARETURN
|__STACK: []
+ |__LOCAL: []
Method staticEmpty1
L0
RETURN
|__STACK: []
+ |__LOCAL: []
Method instanceEmpty1
L0
RETURN
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;]
Method identity
L0
ILOAD 0
|__STACK: [I]
+ |__LOCAL: [I]
IRETURN
|__STACK: []
+ |__LOCAL: [I]
Method identity2
L0
ILOAD 0
|__STACK: [I]
+ |__LOCAL: [I]
ISTORE 1
|__STACK: []
+ |__LOCAL: [I, I]
L1
ILOAD 1
|__STACK: [I]
+ |__LOCAL: [I, I]
IRETURN
|__STACK: []
+ |__LOCAL: [I, I]
Method readFile
L0
NEW java/io/BufferedReader
|__STACK: [Ljava/io/BufferedReader;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;]
DUP
|__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;]
NEW java/io/FileReader
|__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;, Ljava/io/FileReader;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;]
DUP
|__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;, Ljava/io/FileReader;, Ljava/io/FileReader;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;]
ALOAD 1
|__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;, Ljava/io/FileReader;, Ljava/io/FileReader;, Ljava/io/File;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;]
INVOKESPECIAL java/io/FileReader.<init> (Ljava/io/File;)V
|__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;, Ljava/io/FileReader;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;]
INVOKESPECIAL java/io/BufferedReader.<init> (Ljava/io/Reader;)V
|__STACK: [Ljava/io/BufferedReader;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;]
ASTORE 2
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;]
ACONST_NULL
|__STACK: [NULL]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;]
ASTORE 3
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL]
L1
NEW java/io/BufferedReader
|__STACK: [Ljava/io/BufferedReader;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL]
DUP
|__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL]
NEW java/io/FileReader
|__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;, Ljava/io/FileReader;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL]
DUP
|__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;, Ljava/io/FileReader;, Ljava/io/FileReader;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL]
ALOAD 1
|__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;, Ljava/io/FileReader;, Ljava/io/FileReader;, Ljava/io/File;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL]
INVOKESPECIAL java/io/FileReader.<init> (Ljava/io/File;)V
|__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;, Ljava/io/FileReader;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL]
INVOKESPECIAL java/io/BufferedReader.<init> (Ljava/io/Reader;)V
|__STACK: [Ljava/io/BufferedReader;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL]
ASTORE 4
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;]
L2
ACONST_NULL
|__STACK: [NULL]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;]
ASTORE 5
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
L3
NEW java/io/BufferedReader
|__STACK: [Ljava/io/BufferedReader;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
DUP
|__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
NEW java/io/FileReader
|__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;, Ljava/io/FileReader;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
DUP
|__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;, Ljava/io/FileReader;, Ljava/io/FileReader;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
ALOAD 1
|__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;, Ljava/io/FileReader;, Ljava/io/FileReader;, Ljava/io/File;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
INVOKESPECIAL java/io/FileReader.<init> (Ljava/io/File;)V
|__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;, Ljava/io/FileReader;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
INVOKESPECIAL java/io/BufferedReader.<init> (Ljava/io/Reader;)V
|__STACK: [Ljava/io/BufferedReader;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
ASTORE 6
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;]
L4
ACONST_NULL
|__STACK: [NULL]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;]
ASTORE 7
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
L5
NEW java/io/BufferedReader
|__STACK: [Ljava/io/BufferedReader;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
DUP
|__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
NEW java/io/FileReader
|__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;, Ljava/io/FileReader;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
DUP
|__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;, Ljava/io/FileReader;, Ljava/io/FileReader;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
ALOAD 1
|__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;, Ljava/io/FileReader;, Ljava/io/FileReader;, Ljava/io/File;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
INVOKESPECIAL java/io/FileReader.<init> (Ljava/io/File;)V
|__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;, Ljava/io/FileReader;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
INVOKESPECIAL java/io/BufferedReader.<init> (Ljava/io/Reader;)V
|__STACK: [Ljava/io/BufferedReader;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
ASTORE 8
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;]
L6
ACONST_NULL
|__STACK: [NULL]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;]
ASTORE 9
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
L7
ALOAD 8
|__STACK: [Ljava/io/BufferedReader;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
IFNULL L8
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
ALOAD 9
|__STACK: [NULL]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
IFNULL L9
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
L10
ALOAD 8
|__STACK: [Ljava/io/BufferedReader;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
INVOKEINTERFACE java/lang/AutoCloseable.close ()V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
L11
GOTO L8
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
L12
FRAME FULL [testsubjects/TestSubject java/io/File java/lang/AutoCloseable java/lang/Throwable java/lang/AutoCloseable java/lang/Throwable java/lang/AutoCloseable java/lang/Throwable java/lang/AutoCloseable java/lang/Throwable] [java/lang/Throwable]
ASTORE 10
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ALOAD 9
|__STACK: [Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ALOAD 10
|__STACK: [Ljava/lang/Throwable;, Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
INVOKEVIRTUAL java/lang/Throwable.addSuppressed (Ljava/lang/Throwable;)V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
GOTO L8
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
L9
FRAME SAME
ALOAD 8
|__STACK: [Ljava/lang/AutoCloseable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
INVOKEINTERFACE java/lang/AutoCloseable.close ()V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
L8
FRAME CHOP 2
ALOAD 6
|__STACK: [Ljava/lang/AutoCloseable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
IFNULL L13
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
ALOAD 7
|__STACK: [Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
IFNULL L14
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
L15
ALOAD 6
|__STACK: [Ljava/lang/AutoCloseable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
INVOKEINTERFACE java/lang/AutoCloseable.close ()V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
L16
GOTO L13
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
L17
FRAME SAME1 java/lang/Throwable
ASTORE 8
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ALOAD 7
|__STACK: [Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ALOAD 8
|__STACK: [Ljava/lang/Throwable;, Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
INVOKEVIRTUAL java/lang/Throwable.addSuppressed (Ljava/lang/Throwable;)V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
GOTO L13
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
L14
FRAME SAME
ALOAD 6
|__STACK: [Ljava/lang/AutoCloseable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
INVOKEINTERFACE java/lang/AutoCloseable.close ()V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
GOTO L13
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
L18
FRAME SAME1 java/lang/Throwable
ASTORE 8
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ALOAD 8
|__STACK: [Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ASTORE 7
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ALOAD 8
|__STACK: [Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ATHROW
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
L19
FRAME SAME1 java/lang/Throwable
ASTORE 11
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;]
L20
ALOAD 6
|__STACK: [Ljava/lang/AutoCloseable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;]
IFNULL L21
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;]
ALOAD 7
|__STACK: [Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;]
IFNULL L22
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;]
L23
ALOAD 6
|__STACK: [Ljava/lang/AutoCloseable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;]
INVOKEINTERFACE java/lang/AutoCloseable.close ()V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;]
L24
GOTO L21
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;]
L25
FRAME FULL [testsubjects/TestSubject java/io/File java/lang/AutoCloseable java/lang/Throwable java/lang/AutoCloseable java/lang/Throwable java/lang/AutoCloseable java/lang/Throwable T T T java/lang/Throwable] [java/lang/Throwable]
ASTORE 12
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ALOAD 7
|__STACK: [Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ALOAD 12
|__STACK: [Ljava/lang/Throwable;, Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
INVOKEVIRTUAL java/lang/Throwable.addSuppressed (Ljava/lang/Throwable;)V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
GOTO L21
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
L22
FRAME SAME
ALOAD 6
|__STACK: [Ljava/lang/AutoCloseable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;]
INVOKEINTERFACE java/lang/AutoCloseable.close ()V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;]
L21
FRAME SAME
ALOAD 11
|__STACK: [Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;]
ATHROW
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;]
L13
FRAME FULL [testsubjects/TestSubject java/io/File java/lang/AutoCloseable java/lang/Throwable java/lang/AutoCloseable java/lang/Throwable] []
ALOAD 4
|__STACK: [Ljava/lang/AutoCloseable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
IFNULL L26
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
ALOAD 5
|__STACK: [Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
IFNULL L27
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
L28
ALOAD 4
|__STACK: [Ljava/lang/AutoCloseable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
INVOKEINTERFACE java/lang/AutoCloseable.close ()V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
L29
GOTO L26
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
L30
FRAME SAME1 java/lang/Throwable
ASTORE 6
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ALOAD 5
|__STACK: [Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ALOAD 6
|__STACK: [Ljava/lang/Throwable;, Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
INVOKEVIRTUAL java/lang/Throwable.addSuppressed (Ljava/lang/Throwable;)V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
GOTO L26
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
L27
FRAME SAME
ALOAD 4
|__STACK: [Ljava/lang/AutoCloseable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
INVOKEINTERFACE java/lang/AutoCloseable.close ()V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
GOTO L26
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
L31
FRAME SAME1 java/lang/Throwable
ASTORE 6
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ALOAD 6
|__STACK: [Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ASTORE 5
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ALOAD 6
|__STACK: [Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ATHROW
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
L32
FRAME SAME1 java/lang/Throwable
ASTORE 13
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
L33
ALOAD 4
|__STACK: [Ljava/lang/AutoCloseable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
IFNULL L34
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
ALOAD 5
|__STACK: [Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
IFNULL L35
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
L36
ALOAD 4
|__STACK: [Ljava/lang/AutoCloseable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
INVOKEINTERFACE java/lang/AutoCloseable.close ()V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
L37
GOTO L34
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
L38
FRAME FULL [testsubjects/TestSubject java/io/File java/lang/AutoCloseable java/lang/Throwable java/lang/AutoCloseable java/lang/Throwable T T T T T T T java/lang/Throwable] [java/lang/Throwable]
ASTORE 14
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ALOAD 5
|__STACK: [Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ALOAD 14
|__STACK: [Ljava/lang/Throwable;, Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
INVOKEVIRTUAL java/lang/Throwable.addSuppressed (Ljava/lang/Throwable;)V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
GOTO L34
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
L35
FRAME SAME
ALOAD 4
|__STACK: [Ljava/lang/AutoCloseable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
INVOKEINTERFACE java/lang/AutoCloseable.close ()V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
L34
FRAME SAME
ALOAD 13
|__STACK: [Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
ATHROW
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
L26
FRAME FULL [testsubjects/TestSubject java/io/File java/lang/AutoCloseable java/lang/Throwable] []
ALOAD 2
|__STACK: [Ljava/lang/AutoCloseable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
IFNULL L39
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
ALOAD 3
|__STACK: [Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
IFNULL L40
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
L41
ALOAD 2
|__STACK: [Ljava/lang/AutoCloseable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
INVOKEINTERFACE java/lang/AutoCloseable.close ()V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
L42
GOTO L39
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
L43
FRAME SAME1 java/lang/Throwable
ASTORE 4
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ALOAD 3
|__STACK: [Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ALOAD 4
|__STACK: [Ljava/lang/Throwable;, Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
INVOKEVIRTUAL java/lang/Throwable.addSuppressed (Ljava/lang/Throwable;)V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
GOTO L39
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
L40
FRAME SAME
ALOAD 2
|__STACK: [Ljava/lang/AutoCloseable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
INVOKEINTERFACE java/lang/AutoCloseable.close ()V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
GOTO L39
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
L44
FRAME SAME1 java/lang/Throwable
ASTORE 4
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ALOAD 4
|__STACK: [Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ASTORE 3
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ALOAD 4
|__STACK: [Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ATHROW
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
L45
FRAME SAME1 java/lang/Throwable
ASTORE 15
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
L46
ALOAD 2
|__STACK: [Ljava/lang/AutoCloseable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
IFNULL L47
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
ALOAD 3
|__STACK: [Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
IFNULL L48
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
L49
ALOAD 2
|__STACK: [Ljava/lang/AutoCloseable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
INVOKEINTERFACE java/lang/AutoCloseable.close ()V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
L50
GOTO L47
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
L51
FRAME FULL [testsubjects/TestSubject java/io/File java/lang/AutoCloseable java/lang/Throwable T T T T T T T T T T T java/lang/Throwable] [java/lang/Throwable]
ASTORE 16
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ALOAD 3
|__STACK: [Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
ALOAD 16
|__STACK: [Ljava/lang/Throwable;, Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
INVOKEVIRTUAL java/lang/Throwable.addSuppressed (Ljava/lang/Throwable;)V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
GOTO L47
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
L48
FRAME SAME
ALOAD 2
|__STACK: [Ljava/lang/AutoCloseable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
INVOKEINTERFACE java/lang/AutoCloseable.close ()V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
L47
FRAME SAME
ALOAD 15
|__STACK: [Ljava/lang/Throwable;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
ATHROW
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
L39
FRAME FULL [testsubjects/TestSubject java/io/File] []
GOTO L52
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;]
L53
FRAME SAME1 java/io/IOException
ASTORE 2
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/IOException;]
L54
ALOAD 2
|__STACK: [Ljava/io/IOException;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/IOException;]
INVOKEVIRTUAL java/io/IOException.printStackTrace ()V
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/IOException;]
L52
FRAME SAME
RETURN
|__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;]
+Method testWithDoubleTypes
+ L0
+ DCONST_1
+ |__STACK: [D, TOP]
+ |__LOCAL: [Ltestsubjects/TestSubject;]
+ DSTORE 1
+ |__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP]
+ L1
+ DCONST_1
+ |__STACK: [D, TOP]
+ |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP]
+ DSTORE 3
+ |__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+ L2
+ FRAME APPEND [D D]
+ DLOAD 3
+ |__STACK: [D, TOP]
+ |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+ LDC 22.0
+ |__STACK: [D, TOP, D, TOP]
+ |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+ DCMPG
+ |__STACK: [I]
+ |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+ IFGE L3
+ |__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+ L4
+ GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
+ |__STACK: [Ljava/io/PrintStream;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+ DLOAD 3
+ |__STACK: [Ljava/io/PrintStream;, D, TOP]
+ |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+ INVOKEVIRTUAL java/io/PrintStream.println (D)V
+ |__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+ L5
+ DLOAD 1
+ |__STACK: [D, TOP]
+ |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+ DLOAD 3
+ |__STACK: [D, TOP, D, TOP]
+ |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+ DADD
+ |__STACK: [D, TOP]
+ |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+ DSTORE 1
+ |__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+ L6
+ DLOAD 3
+ |__STACK: [D, TOP]
+ |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+ DCONST_1
+ |__STACK: [D, TOP, D, TOP]
+ |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+ DADD
+ |__STACK: [D, TOP]
+ |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+ DSTORE 3
+ |__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+ GOTO L2
+ |__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+ L3
+ FRAME CHOP 1
+ DLOAD 1
+ |__STACK: [D, TOP]
+ |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP]
+ DRETURN
+ |__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP]
+Method testWithFloatAndDoubleTypes
+ L0
+ FCONST_1
+ |__STACK: [F]
+ |__LOCAL: [Ltestsubjects/TestSubject;]
+ FSTORE 1
+ |__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, F]
+ L1
+ DCONST_1
+ |__STACK: [D, TOP]
+ |__LOCAL: [Ltestsubjects/TestSubject;, F]
+ DSTORE 2
+ |__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+ L2
+ FRAME APPEND [F D]
+ DLOAD 2
+ |__STACK: [D, TOP]
+ |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+ LDC 22.0
+ |__STACK: [D, TOP, D, TOP]
+ |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+ DCMPG
+ |__STACK: [I]
+ |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+ IFGE L3
+ |__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+ L4
+ GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
+ |__STACK: [Ljava/io/PrintStream;]
+ |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+ DLOAD 2
+ |__STACK: [Ljava/io/PrintStream;, D, TOP]
+ |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+ INVOKEVIRTUAL java/io/PrintStream.println (D)V
+ |__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+ L5
+ FLOAD 1
+ |__STACK: [F]
+ |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+ DLOAD 2
+ |__STACK: [F, D, TOP]
+ |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+ D2F
+ |__STACK: [F, F]
+ |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+ FADD
+ |__STACK: [F]
+ |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+ FSTORE 1
+ |__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+ L6
+ DLOAD 2
+ |__STACK: [D, TOP]
+ |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+ DCONST_1
+ |__STACK: [D, TOP, D, TOP]
+ |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+ DADD
+ |__STACK: [D, TOP]
+ |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+ DSTORE 2
+ |__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+ GOTO L2
+ |__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+ L3
+ FRAME CHOP 1
+ FLOAD 1
+ |__STACK: [F]
+ |__LOCAL: [Ltestsubjects/TestSubject;, F]
+ FRETURN
+ |__STACK: []
+ |__LOCAL: [Ltestsubjects/TestSubject;, F]
Method <clinit>
L0
ICONST_1
|__STACK: [I]
+ |__LOCAL: []
PUTSTATIC testsubjects/TestSubject.VALUE_ONE : I
|__STACK: []
+ |__LOCAL: []
L1
ICONST_2
|__STACK: [I]
+ |__LOCAL: []
PUTSTATIC testsubjects/TestSubject.VALUE_TWO : I
|__STACK: []
+ |__LOCAL: []
RETURN
- |__STACK: [] \ No newline at end of file
+ |__STACK: []
+ |__LOCAL: [] \ No newline at end of file
diff --git a/test/java/com/google/devtools/build/android/desugar/BytecodeTypeInferenceTest.java b/test/java/com/google/devtools/build/android/desugar/BytecodeTypeInferenceTest.java
index 2573648..476da87 100644
--- a/test/java/com/google/devtools/build/android/desugar/BytecodeTypeInferenceTest.java
+++ b/test/java/com/google/devtools/build/android/desugar/BytecodeTypeInferenceTest.java
@@ -13,8 +13,11 @@
// limitations under the License.
package com.google.devtools.build.android.desugar;
+import static com.google.common.truth.Truth.assertThat;
+
+import com.google.common.collect.ImmutableMap;
import com.google.common.io.Files;
-import com.google.common.truth.Truth;
+import com.google.devtools.build.android.desugar.BytecodeTypeInference.InferredType;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
@@ -24,6 +27,7 @@ import java.nio.file.Paths;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
+import org.objectweb.asm.Label;
/** Test for {@link BytecodeTypeInference} */
@RunWith(JUnit4.class)
@@ -33,7 +37,7 @@ public class BytecodeTypeInferenceTest {
private static final Path GOLDEN_PATH = Paths.get(System.getProperty("golden_file"));
@Test
- public void test() throws IOException {
+ public void testTypeInference() throws IOException {
StringWriter stringWriter = new StringWriter();
try (PrintWriter printWriter = new PrintWriter(stringWriter)) {
ByteCodeTypePrinter.printClassesWithTypes(JAR_PATH, printWriter);
@@ -41,6 +45,37 @@ public class BytecodeTypeInferenceTest {
}
String inferenceResult = stringWriter.toString().trim();
String golden = Files.asCharSource(GOLDEN_PATH.toFile(), StandardCharsets.UTF_8).read().trim();
- Truth.assertThat(inferenceResult).isEqualTo(golden);
+ assertThat(inferenceResult).isEqualTo(golden);
+ }
+
+ @Test
+ public void testUninitializedInferType() {
+ Label label = new Label();
+ InferredType type = InferredType.createUninitializedType(label);
+ assertThat(type.descriptor()).isEqualTo(InferredType.UNINITIALIZED_PREFIX);
+ assertThat(type.uninitializationLabel()).isEqualTo(label);
+ }
+
+ @Test
+ public void testNonUninitializedInferType() {
+ ImmutableMap<String, InferredType> map =
+ ImmutableMap.<String, InferredType>builder()
+ .put("Z", InferredType.BOOLEAN)
+ .put("B", InferredType.BYTE)
+ .put("I", InferredType.INT)
+ .put("F", InferredType.FLOAT)
+ .put("D", InferredType.DOUBLE)
+ .put("J", InferredType.LONG)
+ .put("TOP", InferredType.TOP)
+ .put("NULL", InferredType.NULL)
+ .put("UNINITIALIZED_THIS", InferredType.UNINITIALIZED_THIS)
+ .build();
+ map.forEach(
+ (descriptor, expected) -> {
+ InferredType type = InferredType.createNonUninitializedType(descriptor);
+ assertThat(type.uninitializationLabel()).isNull();
+ assertThat(type.descriptor()).isEqualTo(descriptor);
+ assertThat(type).isSameAs(expected);
+ });
}
}
diff --git a/test/java/com/google/devtools/build/android/desugar/classes_for_testing_type_inference/test_subjects.jar b/test/java/com/google/devtools/build/android/desugar/classes_for_testing_type_inference/test_subjects.jar
index efa491b..f1bb726 100644
--- a/test/java/com/google/devtools/build/android/desugar/classes_for_testing_type_inference/test_subjects.jar
+++ b/test/java/com/google/devtools/build/android/desugar/classes_for_testing_type_inference/test_subjects.jar
Binary files differ
diff --git a/test/java/com/google/devtools/build/android/desugar/classes_for_testing_type_inference/testsubjects/TestSubject.java b/test/java/com/google/devtools/build/android/desugar/classes_for_testing_type_inference/testsubjects/TestSubject.java
index b5463a7..a07e73b 100644
--- a/test/java/com/google/devtools/build/android/desugar/classes_for_testing_type_inference/testsubjects/TestSubject.java
+++ b/test/java/com/google/devtools/build/android/desugar/classes_for_testing_type_inference/testsubjects/TestSubject.java
@@ -193,4 +193,22 @@ public class TestSubject {
e.printStackTrace();
}
}
+
+ public double testWithDoubleTypes() {
+ double result = 1;
+ for (double i = 1; i < 22; i = i + 1) {
+ System.out.println(i);
+ result += i;
+ }
+ return result;
+ }
+
+ public float testWithFloatAndDoubleTypes() {
+ float result = 1;
+ for (double i = 1; i < 22; i = i + 1) {
+ System.out.println(i);
+ result += (float) i;
+ }
+ return result;
+ }
}