// Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8;

import static org.junit.Assert.assertTrue;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.Label;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;

@RunWith(Parameterized.class)
public class SwitchDebugLocalsConflictTest extends TestBase {

  private final TestParameters parameters;

  @Parameterized.Parameters(name = "{0}")
  public static TestParametersCollection data() {
    return getTestParameters().withNoneRuntime().build();
  }

  public SwitchDebugLocalsConflictTest(TestParameters parameters) {
    this.parameters = parameters;
  }

  @Test
  public void test() throws CompilationFailedException {
    testForD8()
        .addProgramClassFileData(Dump.dump())
        .noDesugaring()
        .compileWithExpectedDiagnostics(
            diagnotics -> {
              diagnotics.assertOnlyInfos();
              assertTrue(
                  diagnotics.getInfos().stream()
                      .anyMatch(
                          d -> d.getDiagnosticMessage().contains("invalid locals information")));
            });
  }

  // Dump of class file from b/138952302, which is produced with Java 7 and contains too large a
  // local scope for the local variable 'valueDiv'. The larger scope causes a debug read of an
  // uninitialized value, thus the value can be of either type long or of type double depending on
  // which execution path leads up to the local start. More recent javac compilers emit the smaller
  // correct scope for the local variable.
  public static class Dump implements Opcodes {

    public static byte[] dump() {

      ClassWriter cw = new ClassWriter(0);
      FieldVisitor fv;
      MethodVisitor mv;
      cw.visit(V1_7, ACC_PUBLIC | ACC_SUPER, "TestClass", null, "java/lang/Object", null);
      cw.visitSource("TestClass.java", null);
      {
        fv = cw.visitField(ACC_PUBLIC | ACC_STATIC, "DEFAULT_VALUE", "J", null, null);
        fv.visitEnd();
      }
      {
        mv =
            cw.visitMethod(
                ACC_PUBLIC | ACC_STATIC,
                "foo",
                "([Ljava/lang/Object;I)Ljava/lang/Object;",
                null,
                null);
        mv.visitCode();
        Label label0 = new Label();
        Label label1 = new Label();
        Label label2 = new Label();
        mv.visitTryCatchBlock(label0, label1, label2, "java/lang/Throwable");
        Label label3 = new Label();
        Label label4 = new Label();
        mv.visitTryCatchBlock(label3, label4, label2, "java/lang/Throwable");
        Label label5 = new Label();
        Label label6 = new Label();
        mv.visitTryCatchBlock(label5, label6, label2, "java/lang/Throwable");
        Label label7 = new Label();
        Label label8 = new Label();
        mv.visitTryCatchBlock(label7, label8, label2, "java/lang/Throwable");
        Label label9 = new Label();
        Label label10 = new Label();
        mv.visitTryCatchBlock(label9, label10, label2, "java/lang/Throwable");
        Label label11 = new Label();
        Label label12 = new Label();
        mv.visitTryCatchBlock(label11, label12, label2, "java/lang/Throwable");
        Label label13 = new Label();
        Label label14 = new Label();
        mv.visitTryCatchBlock(label13, label14, label2, "java/lang/Throwable");
        Label label15 = new Label();
        Label label16 = new Label();
        mv.visitTryCatchBlock(label15, label16, label2, "java/lang/Throwable");
        mv.visitLabel(label0);
        mv.visitLineNumber(23, label0);
        mv.visitVarInsn(ALOAD, 0);
        Label label17 = new Label();
        mv.visitJumpInsn(IFNULL, label17);
        mv.visitVarInsn(ALOAD, 0);
        mv.visitInsn(ARRAYLENGTH);
        mv.visitJumpInsn(IFNE, label3);
        mv.visitLabel(label17);
        mv.visitLineNumber(24, label17);
        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
        mv.visitFieldInsn(GETSTATIC, "TestClass", "DEFAULT_VALUE", "J");
        mv.visitMethodInsn(INVOKESTATIC, "java/lang/Long", "valueOf", "(J)Ljava/lang/Long;", false);
        mv.visitLabel(label1);
        mv.visitInsn(ARETURN);
        mv.visitLabel(label3);
        mv.visitLineNumber(26, label3);
        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
        mv.visitVarInsn(ALOAD, 0);
        mv.visitInsn(ARRAYLENGTH);
        mv.visitVarInsn(ISTORE, 2);
        Label label18 = new Label();
        mv.visitLabel(label18);
        mv.visitLineNumber(27, label18);
        mv.visitInsn(ICONST_0);
        mv.visitVarInsn(ISTORE, 3);
        Label label19 = new Label();
        mv.visitLabel(label19);
        mv.visitLineNumber(28, label19);
        mv.visitInsn(ICONST_0);
        mv.visitVarInsn(ISTORE, 4);
        Label label20 = new Label();
        mv.visitLabel(label20);
        mv.visitLineNumber(29, label20);
        mv.visitInsn(DCONST_0);
        mv.visitVarInsn(DSTORE, 5);
        Label label21 = new Label();
        mv.visitLabel(label21);
        mv.visitLineNumber(30, label21);
        mv.visitInsn(LCONST_0);
        mv.visitVarInsn(LSTORE, 7);
        Label label22 = new Label();
        mv.visitLabel(label22);
        mv.visitLineNumber(31, label22);
        mv.visitFrame(
            Opcodes.F_FULL,
            7,
            new Object[] {
              "[Ljava/lang/Object;",
              Opcodes.INTEGER,
              Opcodes.INTEGER,
              Opcodes.INTEGER,
              Opcodes.INTEGER,
              Opcodes.DOUBLE,
              Opcodes.LONG
            },
            0,
            new Object[] {});
        mv.visitVarInsn(ILOAD, 3);
        mv.visitVarInsn(ILOAD, 2);
        Label label23 = new Label();
        mv.visitJumpInsn(IF_ICMPGE, label23);
        Label label24 = new Label();
        mv.visitLabel(label24);
        mv.visitLineNumber(32, label24);
        mv.visitVarInsn(ALOAD, 0);
        mv.visitVarInsn(ILOAD, 3);
        mv.visitInsn(AALOAD);
        mv.visitVarInsn(ASTORE, 9);
        Label label25 = new Label();
        mv.visitLabel(label25);
        mv.visitLineNumber(33, label25);
        mv.visitInsn(DCONST_0);
        mv.visitVarInsn(DSTORE, 10);
        Label label26 = new Label();
        mv.visitLabel(label26);
        mv.visitLineNumber(34, label26);
        mv.visitInsn(LCONST_0);
        mv.visitVarInsn(LSTORE, 12);
        Label label27 = new Label();
        mv.visitLabel(label27);
        mv.visitLineNumber(36, label27);
        mv.visitVarInsn(ALOAD, 9);
        mv.visitTypeInsn(INSTANCEOF, "java/lang/String");
        Label label28 = new Label();
        mv.visitJumpInsn(IFEQ, label28);
        Label label29 = new Label();
        mv.visitLabel(label29);
        mv.visitLineNumber(37, label29);
        mv.visitVarInsn(ALOAD, 9);
        mv.visitTypeInsn(CHECKCAST, "java/lang/String");
        mv.visitVarInsn(ASTORE, 14);
        Label label30 = new Label();
        mv.visitLabel(label30);
        mv.visitLineNumber(38, label30);
        mv.visitVarInsn(ILOAD, 4);
        Label label31 = new Label();
        mv.visitJumpInsn(IFNE, label31);
        mv.visitVarInsn(ALOAD, 14);
        mv.visitMethodInsn(
            INVOKESTATIC,
            "NumberUtil",
            "hasDigit",
            "(Ljava/lang/String;)Z",
            false);
        Label label32 = new Label();
        mv.visitJumpInsn(IFEQ, label32);
        mv.visitLabel(label31);
        mv.visitLineNumber(39, label31);
        mv.visitFrame(
            Opcodes.F_FULL,
            11,
            new Object[] {
              "[Ljava/lang/Object;",
              Opcodes.INTEGER,
              Opcodes.INTEGER,
              Opcodes.INTEGER,
              Opcodes.INTEGER,
              Opcodes.DOUBLE,
              Opcodes.LONG,
              "java/lang/Object",
              Opcodes.DOUBLE,
              Opcodes.LONG,
              "java/lang/String"
            },
            0,
            new Object[] {});
        mv.visitVarInsn(ALOAD, 14);
        mv.visitMethodInsn(
            INVOKESTATIC,
            "NumberUtil",
            "parseDouble",
            "(Ljava/lang/String;)D",
            false);
        mv.visitVarInsn(DSTORE, 10);
        Label label33 = new Label();
        mv.visitLabel(label33);
        mv.visitLineNumber(40, label33);
        mv.visitInsn(ICONST_1);
        mv.visitVarInsn(ISTORE, 4);
        Label label34 = new Label();
        mv.visitJumpInsn(GOTO, label34);
        mv.visitLabel(label32);
        mv.visitLineNumber(42, label32);
        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
        mv.visitVarInsn(ALOAD, 14);
        mv.visitMethodInsn(
            INVOKESTATIC,
            "NumberUtil",
            "parseLong",
            "(Ljava/lang/String;)J",
            false);
        mv.visitVarInsn(LSTORE, 12);
        mv.visitLabel(label34);
        mv.visitLineNumber(44, label34);
        mv.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
        Label label35 = new Label();
        mv.visitJumpInsn(GOTO, label35);
        mv.visitLabel(label28);
        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
        mv.visitVarInsn(ILOAD, 4);
        Label label36 = new Label();
        mv.visitJumpInsn(IFNE, label36);
        mv.visitVarInsn(ALOAD, 9);
        mv.visitMethodInsn(
            INVOKESTATIC,
            "NumberUtil",
            "isFloatPointNum",
            "(Ljava/lang/Object;)Z",
            false);
        Label label37 = new Label();
        mv.visitJumpInsn(IFEQ, label37);
        mv.visitLabel(label36);
        mv.visitLineNumber(45, label36);
        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
        mv.visitVarInsn(ALOAD, 9);
        mv.visitTypeInsn(CHECKCAST, "java/lang/Number");
        mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Number", "doubleValue", "()D", false);
        mv.visitVarInsn(DSTORE, 10);
        Label label38 = new Label();
        mv.visitLabel(label38);
        mv.visitLineNumber(46, label38);
        mv.visitInsn(ICONST_1);
        mv.visitVarInsn(ISTORE, 4);
        mv.visitJumpInsn(GOTO, label35);
        mv.visitLabel(label37);
        mv.visitLineNumber(47, label37);
        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
        mv.visitVarInsn(ALOAD, 9);
        mv.visitTypeInsn(INSTANCEOF, "java/lang/Integer");
        Label label39 = new Label();
        mv.visitJumpInsn(IFNE, label39);
        mv.visitVarInsn(ALOAD, 9);
        mv.visitTypeInsn(INSTANCEOF, "java/lang/Long");
        Label label40 = new Label();
        mv.visitJumpInsn(IFEQ, label40);
        mv.visitLabel(label39);
        mv.visitLineNumber(48, label39);
        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
        mv.visitVarInsn(ALOAD, 9);
        mv.visitTypeInsn(CHECKCAST, "java/lang/Number");
        mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Number", "longValue", "()J", false);
        mv.visitVarInsn(LSTORE, 12);
        mv.visitJumpInsn(GOTO, label35);
        mv.visitLabel(label40);
        mv.visitLineNumber(50, label40);
        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
        mv.visitFieldInsn(GETSTATIC, "TestClass", "DEFAULT_VALUE", "J");
        mv.visitVarInsn(LSTORE, 12);
        mv.visitLabel(label35);
        mv.visitLineNumber(53, label35);
        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
        mv.visitVarInsn(ILOAD, 4);
        Label label41 = new Label();
        mv.visitJumpInsn(IFEQ, label41);
        Label label42 = new Label();
        mv.visitLabel(label42);
        mv.visitLineNumber(54, label42);
        mv.visitVarInsn(LLOAD, 7);
        mv.visitInsn(LCONST_0);
        mv.visitInsn(LCMP);
        Label label43 = new Label();
        mv.visitJumpInsn(IFEQ, label43);
        Label label44 = new Label();
        mv.visitLabel(label44);
        mv.visitLineNumber(55, label44);
        mv.visitVarInsn(LLOAD, 7);
        mv.visitInsn(L2D);
        mv.visitVarInsn(DSTORE, 5);
        Label label45 = new Label();
        mv.visitLabel(label45);
        mv.visitLineNumber(56, label45);
        mv.visitInsn(LCONST_0);
        mv.visitVarInsn(LSTORE, 7);
        mv.visitLabel(label43);
        mv.visitLineNumber(58, label43);
        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
        mv.visitVarInsn(ILOAD, 3);
        Label label46 = new Label();
        mv.visitJumpInsn(IFNE, label46);
        Label label47 = new Label();
        mv.visitLabel(label47);
        mv.visitLineNumber(59, label47);
        mv.visitVarInsn(DLOAD, 10);
        mv.visitVarInsn(DSTORE, 5);
        Label label48 = new Label();
        mv.visitJumpInsn(GOTO, label48);
        mv.visitLabel(label46);
        mv.visitLineNumber(61, label46);
        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
        mv.visitVarInsn(ILOAD, 1);
        Label label49 = new Label();
        Label label50 = new Label();
        Label label51 = new Label();
        Label label52 = new Label();
        Label label53 = new Label();
        Label label54 = new Label();
        mv.visitTableSwitchInsn(
            1, 5, label54, new Label[] {label49, label50, label51, label52, label53});
        mv.visitLabel(label49);
        mv.visitLineNumber(63, label49);
        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
        mv.visitVarInsn(DLOAD, 5);
        mv.visitVarInsn(DLOAD, 10);
        mv.visitInsn(DADD);
        mv.visitVarInsn(DSTORE, 5);
        Label label55 = new Label();
        mv.visitLabel(label55);
        mv.visitLineNumber(64, label55);
        mv.visitJumpInsn(GOTO, label54);
        mv.visitLabel(label50);
        mv.visitLineNumber(66, label50);
        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
        mv.visitVarInsn(DLOAD, 5);
        mv.visitVarInsn(DLOAD, 10);
        mv.visitInsn(DSUB);
        mv.visitVarInsn(DSTORE, 5);
        Label label56 = new Label();
        mv.visitLabel(label56);
        mv.visitLineNumber(67, label56);
        mv.visitJumpInsn(GOTO, label54);
        mv.visitLabel(label51);
        mv.visitLineNumber(69, label51);
        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
        mv.visitVarInsn(DLOAD, 5);
        mv.visitVarInsn(DLOAD, 10);
        mv.visitInsn(DMUL);
        mv.visitVarInsn(DSTORE, 5);
        Label label57 = new Label();
        mv.visitLabel(label57);
        mv.visitLineNumber(70, label57);
        mv.visitJumpInsn(GOTO, label54);
        mv.visitLabel(label52);
        mv.visitLineNumber(72, label52);
        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
        mv.visitVarInsn(DLOAD, 10);
        mv.visitVarInsn(DSTORE, 14);
        Label label58 = new Label();
        mv.visitLabel(label58);
        mv.visitLineNumber(73, label58);
        // start of 'valueDiv' ====================================
        mv.visitVarInsn(DLOAD, 14);
        mv.visitInsn(DCONST_0);
        mv.visitInsn(DCMPL);
        mv.visitJumpInsn(IFNE, label5);
        Label label59 = new Label();
        mv.visitLabel(label59);
        mv.visitLineNumber(74, label59);
        mv.visitFieldInsn(GETSTATIC, "TestClass", "DEFAULT_VALUE", "J");
        mv.visitMethodInsn(INVOKESTATIC, "java/lang/Long", "valueOf", "(J)Ljava/lang/Long;", false);
        mv.visitLabel(label4);
        mv.visitInsn(ARETURN);
        mv.visitLabel(label5);
        mv.visitLineNumber(76, label5);
        mv.visitFrame(Opcodes.F_APPEND, 1, new Object[] {Opcodes.DOUBLE}, 0, null);
        mv.visitVarInsn(DLOAD, 5);
        mv.visitVarInsn(DLOAD, 14);
        mv.visitInsn(DDIV);
        mv.visitVarInsn(DSTORE, 5);
        Label label60 = new Label();
        mv.visitLabel(label60);
        mv.visitLineNumber(77, label60);
        mv.visitJumpInsn(GOTO, label54);
        mv.visitLabel(label53);
        mv.visitLineNumber(79, label53);
        mv.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
        // **********************
        // Entry to switch case for which 'valueDiv' has not been initialized.
        // Reading slot 14 at this point will create a phi with operands of type long and double.
        // **********************
        mv.visitVarInsn(DLOAD, 10);
        mv.visitVarInsn(DSTORE, 16);
        Label label61 = new Label();
        mv.visitLabel(label61);
        mv.visitLineNumber(80, label61);
        mv.visitVarInsn(DLOAD, 16);
        mv.visitInsn(DCONST_0);
        mv.visitInsn(DCMPL);
        mv.visitJumpInsn(IFNE, label7);
        Label label62 = new Label();
        mv.visitLabel(label62);
        mv.visitLineNumber(81, label62);
        mv.visitFieldInsn(GETSTATIC, "TestClass", "DEFAULT_VALUE", "J");
        mv.visitMethodInsn(INVOKESTATIC, "java/lang/Long", "valueOf", "(J)Ljava/lang/Long;", false);
        mv.visitLabel(label6);
        mv.visitInsn(ARETURN);
        mv.visitLabel(label7);
        mv.visitLineNumber(83, label7);
        mv.visitFrame(
            Opcodes.F_APPEND, 3, new Object[] {Opcodes.TOP, Opcodes.TOP, Opcodes.DOUBLE}, 0, null);
        mv.visitVarInsn(DLOAD, 5);
        mv.visitVarInsn(DLOAD, 16);
        mv.visitInsn(DREM);
        mv.visitVarInsn(DSTORE, 5);
        // end of local 'valueDiv' ====================================
        mv.visitLabel(label54);
        mv.visitLineNumber(85, label54);
        mv.visitFrame(Opcodes.F_CHOP, 3, null, 0, null);
        mv.visitJumpInsn(GOTO, label48);
        mv.visitLabel(label41);
        mv.visitLineNumber(89, label41);
        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
        mv.visitVarInsn(ILOAD, 3);
        Label label63 = new Label();
        mv.visitJumpInsn(IFNE, label63);
        Label label64 = new Label();
        mv.visitLabel(label64);
        mv.visitLineNumber(90, label64);
        mv.visitVarInsn(LLOAD, 12);
        mv.visitVarInsn(LSTORE, 7);
        mv.visitJumpInsn(GOTO, label48);
        mv.visitLabel(label63);
        mv.visitLineNumber(92, label63);
        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
        mv.visitVarInsn(ILOAD, 1);
        Label label65 = new Label();
        Label label66 = new Label();
        Label label67 = new Label();
        Label label68 = new Label();
        Label label69 = new Label();
        mv.visitTableSwitchInsn(
            1, 5, label48, new Label[] {label65, label66, label67, label68, label69});
        mv.visitLabel(label65);
        mv.visitLineNumber(94, label65);
        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
        mv.visitVarInsn(LLOAD, 7);
        mv.visitVarInsn(LLOAD, 12);
        mv.visitInsn(LADD);
        mv.visitVarInsn(LSTORE, 7);
        Label label70 = new Label();
        mv.visitLabel(label70);
        mv.visitLineNumber(95, label70);
        mv.visitJumpInsn(GOTO, label48);
        mv.visitLabel(label66);
        mv.visitLineNumber(97, label66);
        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
        mv.visitVarInsn(LLOAD, 7);
        mv.visitVarInsn(LLOAD, 12);
        mv.visitInsn(LSUB);
        mv.visitVarInsn(LSTORE, 7);
        Label label71 = new Label();
        mv.visitLabel(label71);
        mv.visitLineNumber(98, label71);
        mv.visitJumpInsn(GOTO, label48);
        mv.visitLabel(label67);
        mv.visitLineNumber(100, label67);
        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
        mv.visitVarInsn(LLOAD, 7);
        mv.visitVarInsn(LLOAD, 12);
        mv.visitInsn(LMUL);
        mv.visitVarInsn(LSTORE, 7);
        Label label72 = new Label();
        mv.visitLabel(label72);
        mv.visitLineNumber(101, label72);
        mv.visitJumpInsn(GOTO, label48);
        mv.visitLabel(label68);
        mv.visitLineNumber(103, label68);
        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
        mv.visitVarInsn(LLOAD, 12);
        mv.visitInsn(LCONST_0);
        mv.visitInsn(LCMP);
        mv.visitJumpInsn(IFNE, label9);
        Label label73 = new Label();
        mv.visitLabel(label73);
        mv.visitLineNumber(104, label73);
        mv.visitFieldInsn(GETSTATIC, "TestClass", "DEFAULT_VALUE", "J");
        mv.visitMethodInsn(INVOKESTATIC, "java/lang/Long", "valueOf", "(J)Ljava/lang/Long;", false);
        mv.visitLabel(label8);
        mv.visitInsn(ARETURN);
        mv.visitLabel(label9);
        mv.visitLineNumber(106, label9);
        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
        mv.visitVarInsn(LLOAD, 7);
        mv.visitVarInsn(LLOAD, 12);
        mv.visitInsn(LDIV);
        mv.visitVarInsn(LSTORE, 7);
        Label label74 = new Label();
        mv.visitLabel(label74);
        mv.visitLineNumber(107, label74);
        mv.visitJumpInsn(GOTO, label48);
        mv.visitLabel(label69);
        mv.visitLineNumber(109, label69);
        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
        mv.visitVarInsn(LLOAD, 12);
        mv.visitVarInsn(LSTORE, 14);
        Label label75 = new Label();
        mv.visitLabel(label75);
        mv.visitLineNumber(110, label75);
        mv.visitVarInsn(LLOAD, 14);
        mv.visitInsn(LCONST_0);
        mv.visitInsn(LCMP);
        mv.visitJumpInsn(IFNE, label11);
        Label label76 = new Label();
        mv.visitLabel(label76);
        mv.visitLineNumber(111, label76);
        mv.visitFieldInsn(GETSTATIC, "TestClass", "DEFAULT_VALUE", "J");
        mv.visitMethodInsn(INVOKESTATIC, "java/lang/Long", "valueOf", "(J)Ljava/lang/Long;", false);
        mv.visitLabel(label10);
        mv.visitInsn(ARETURN);
        mv.visitLabel(label11);
        mv.visitLineNumber(113, label11);
        mv.visitFrame(Opcodes.F_APPEND, 1, new Object[] {Opcodes.LONG}, 0, null);
        mv.visitVarInsn(LLOAD, 7);
        mv.visitVarInsn(LLOAD, 14);
        mv.visitInsn(LREM);
        mv.visitVarInsn(LSTORE, 7);
        mv.visitLabel(label48);
        mv.visitLineNumber(118, label48);
        mv.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
        mv.visitVarInsn(ILOAD, 4);
        mv.visitJumpInsn(IFEQ, label13);
        mv.visitVarInsn(DLOAD, 5);
        mv.visitLdcInsn(new Double("Infinity"));
        mv.visitInsn(DCMPL);
        Label label77 = new Label();
        mv.visitJumpInsn(IFEQ, label77);
        mv.visitVarInsn(DLOAD, 5);
        mv.visitLdcInsn(new Double("-Infinity"));
        mv.visitInsn(DCMPL);
        mv.visitJumpInsn(IFEQ, label77);
        mv.visitLdcInsn(new Double("NaN"));
        mv.visitVarInsn(DLOAD, 5);
        mv.visitInsn(DCMPL);
        mv.visitJumpInsn(IFNE, label13);
        mv.visitLabel(label77);
        mv.visitLineNumber(120, label77);
        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
        mv.visitInsn(DCONST_0);
        mv.visitMethodInsn(
            INVOKESTATIC, "java/lang/Double", "valueOf", "(D)Ljava/lang/Double;", false);
        mv.visitLabel(label12);
        mv.visitInsn(ARETURN);
        mv.visitLabel(label13);
        mv.visitLineNumber(122, label13);
        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
        mv.visitIincInsn(3, 1);
        Label label78 = new Label();
        mv.visitLabel(label78);
        mv.visitLineNumber(123, label78);
        mv.visitJumpInsn(GOTO, label22);
        mv.visitLabel(label23);
        mv.visitLineNumber(125, label23);
        mv.visitFrame(Opcodes.F_CHOP, 3, null, 0, null);
        mv.visitVarInsn(ILOAD, 4);
        mv.visitJumpInsn(IFEQ, label15);
        Label label79 = new Label();
        mv.visitLabel(label79);
        mv.visitLineNumber(126, label79);
        mv.visitVarInsn(DLOAD, 5);
        mv.visitMethodInsn(
            INVOKESTATIC, "java/lang/Double", "valueOf", "(D)Ljava/lang/Double;", false);
        mv.visitLabel(label14);
        mv.visitInsn(ARETURN);
        mv.visitLabel(label15);
        mv.visitLineNumber(128, label15);
        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
        mv.visitVarInsn(LLOAD, 7);
        mv.visitMethodInsn(INVOKESTATIC, "java/lang/Long", "valueOf", "(J)Ljava/lang/Long;", false);
        mv.visitLabel(label16);
        mv.visitInsn(ARETURN);
        mv.visitLabel(label2);
        mv.visitLineNumber(130, label2);
        mv.visitFrame(
            Opcodes.F_FULL,
            2,
            new Object[] {"[Ljava/lang/Object;", Opcodes.INTEGER},
            1,
            new Object[] {"java/lang/Throwable"});
        mv.visitVarInsn(ASTORE, 2);
        Label label80 = new Label();
        mv.visitLabel(label80);
        mv.visitLineNumber(132, label80);
        mv.visitFieldInsn(GETSTATIC, "TestClass", "DEFAULT_VALUE", "J");
        mv.visitMethodInsn(INVOKESTATIC, "java/lang/Long", "valueOf", "(J)Ljava/lang/Long;", false);
        mv.visitInsn(ARETURN);
        Label label81 = new Label();
        mv.visitLabel(label81);
        mv.visitLocalVariable("numStr", "Ljava/lang/String;", null, label30, label34, 14);
        mv.visitLocalVariable("valueMod", "D", null, label61, label54, 16);
        mv.visitLocalVariable("valueDiv", "D", null, label58, label54, 14);
        mv.visitLocalVariable("valueMod", "J", null, label75, label48, 14);
        mv.visitLocalVariable("num", "Ljava/lang/Object;", null, label25, label78, 9);
        mv.visitLocalVariable("dTmp", "D", null, label26, label78, 10);
        mv.visitLocalVariable("lTmp", "J", null, label27, label78, 12);
        mv.visitLocalVariable("len", "I", null, label18, label2, 2);
        mv.visitLocalVariable("i", "I", null, label19, label2, 3);
        mv.visitLocalVariable("needDouble", "Z", null, label20, label2, 4);
        mv.visitLocalVariable("douRet", "D", null, label21, label2, 5);
        mv.visitLocalVariable("lonRet", "J", null, label22, label2, 7);
        mv.visitLocalVariable("e", "Ljava/lang/Throwable;", null, label80, label80, 2);
        mv.visitLocalVariable("operationList", "[Ljava/lang/Object;", null, label0, label81, 0);
        mv.visitLocalVariable("type", "I", null, label0, label81, 1);
        mv.visitMaxs(4, 18);
        mv.visitEnd();
      }
      {
        mv = cw.visitMethod(ACC_STATIC, "<clinit>", "()V", null, null);
        mv.visitCode();
        Label label0 = new Label();
        mv.visitLabel(label0);
        mv.visitLineNumber(19, label0);
        mv.visitInsn(LCONST_0);
        mv.visitFieldInsn(PUTSTATIC, "TestClass", "DEFAULT_VALUE", "J");
        mv.visitInsn(RETURN);
        mv.visitMaxs(2, 0);
        mv.visitEnd();
      }
      cw.visitEnd();
      return cw.toByteArray();
    }
  }
}
