// Copyright (c) 2018, 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.ir;

import org.objectweb.asm.*;

public class PhiDefinitionsTestDump implements Opcodes {

  private static final String SIMPLE_NAME = "PhiDefinitionsTest";
  static final String INTERNAL_NAME = "com/android/tools/r8/ir/" + SIMPLE_NAME;
  private static final String INNER_SIMPLE_NAME = "MethodWriter";
  static final String INNER_INTERNAL_NAME = INTERNAL_NAME + "$" + INNER_SIMPLE_NAME;

  // static String INTERNAL_NAME = "com/android/tools/r8/ir/PhiDefinitionsTest";
  // private static String INNER_SIMPLE_NAME = "MethodWriter";
  // static String INNER_INTERNAL_NAME = INTERNAL_NAME + '$' + INNER_SIMPLE_NAME;

  public static byte[] dump() throws Exception {

    ClassWriter cw = new ClassWriter(0);
    FieldVisitor fv;
    AnnotationVisitor av0;

    cw.visit(V1_8, ACC_PUBLIC + ACC_SUPER, INTERNAL_NAME, null, "java/lang/Object", null);

    cw.visitSource(SIMPLE_NAME + ".java", null);

    cw.visitInnerClass(INNER_INTERNAL_NAME, INTERNAL_NAME, INNER_SIMPLE_NAME, ACC_STATIC);

    method0(cw);
    method1(cw);
    method2(cw);
    nativeMethod(cw, "visitMethod", "()L" + INTERNAL_NAME + "$" + INNER_SIMPLE_NAME + ";");
    nativeMethod(cw, "cond", "()Z");
    nativeMethod(cw, "read", "(I)Ljava/lang/String;");
    nativeMethod(cw, "count", "(I)I");
    nativeMethod(cw, "count", "()I");
    cw.visitEnd();

    return cw.toByteArray();
  }

  private static void nativeMethod(ClassWriter cw, String name, String desc) {
    MethodVisitor mv;
    mv = cw.visitMethod(ACC_PRIVATE + ACC_NATIVE, name, desc, null, null);
    mv.visitEnd();
  }

  private static void method0(ClassWriter cw) {
    MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
    Label[] labels = new Label[2];
    for (int i = 0; i < labels.length; i++) {
      labels[i] = new Label();
    }
    mv.visitCode();
    mv.visitLabel(labels[0]);
    mv.visitLineNumber(6, labels[0]);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false);
    mv.visitInsn(RETURN);
    mv.visitLabel(labels[1]);
    mv.visitLocalVariable("this", "L" + INTERNAL_NAME + ";", null, labels[0], labels[1], 0);
    mv.visitMaxs(1, 1);
    mv.visitEnd();
  }

  private static void method1(ClassWriter cw) {
    MethodVisitor mv =
        cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "main", "([Ljava/lang/String;)V", null, null);
    Label[] labels = new Label[4];
    for (int i = 0; i < labels.length; i++) {
      labels[i] = new Label();
    }
    mv.visitCode();
    mv.visitLabel(labels[0]);
    mv.visitLineNumber(18, labels[0]);
    mv.visitLdcInsn(new Integer(42));
    mv.visitVarInsn(ISTORE, 1);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitInsn(ARRAYLENGTH);
    mv.visitVarInsn(ILOAD, 1);
    mv.visitJumpInsn(IF_ICMPLT, labels[1]);
    mv.visitLabel(labels[2]);
    mv.visitLineNumber(19, labels[2]);
    mv.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
    mv.visitVarInsn(ASTORE, 1);
    mv.visitTypeInsn(NEW, INTERNAL_NAME);
    mv.visitVarInsn(ASTORE, 2);
    mv.visitVarInsn(ALOAD, 2);
    mv.visitMethodInsn(INVOKESPECIAL, INTERNAL_NAME, "<init>", "()V", false);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitInsn(ARRAYLENGTH);
    mv.visitVarInsn(ISTORE, 3);
    mv.visitVarInsn(ALOAD, 2);
    mv.visitVarInsn(ILOAD, 3);
    mv.visitMethodInsn(INVOKESPECIAL, INTERNAL_NAME, "readMethod", "(I)I", false);
    mv.visitVarInsn(ISTORE, 2);
    mv.visitVarInsn(ALOAD, 1);
    mv.visitVarInsn(ILOAD, 2);
    mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println", "(I)V", false);
    mv.visitLabel(labels[1]);
    mv.visitLineNumber(21, labels[1]);
    mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
    mv.visitInsn(RETURN);
    mv.visitLabel(labels[3]);
    mv.visitLocalVariable("args", "[Ljava/lang/String;", null, labels[0], labels[3], 0);
    mv.visitMaxs(2, 4);
    mv.visitEnd();
  }

  private static void method2(ClassWriter cw) {
    MethodVisitor mv = cw.visitMethod(ACC_PRIVATE, "readMethod", "(I)I", null, null);
    Label[] labels = new Label[31];
    for (int i = 0; i < labels.length; i++) {
      labels[i] = new Label();
    }
    mv.visitCode();
    mv.visitLabel(labels[0]);
    mv.visitLineNumber(24, labels[0]);
    mv.visitLdcInsn(new Integer(6));
    mv.visitInsn(POP);
    mv.visitLdcInsn(new Integer(6));
    mv.visitVarInsn(ISTORE, 2);
    mv.visitVarInsn(ILOAD, 1);
    mv.visitVarInsn(ILOAD, 2);
    mv.visitInsn(IADD);
    mv.visitVarInsn(ISTORE, 1);
    mv.visitLabel(labels[1]);
    mv.visitLineNumber(25, labels[1]);
    mv.visitInsn(ICONST_0);
    mv.visitVarInsn(ISTORE, 3);
    mv.visitLabel(labels[2]);
    mv.visitLineNumber(26, labels[2]);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitVarInsn(ILOAD, 1);
    mv.visitMethodInsn(INVOKESPECIAL, INTERNAL_NAME, "count", "(I)I", false);
    mv.visitVarInsn(ISTORE, 4);
    mv.visitVarInsn(ILOAD, 4);
    mv.visitVarInsn(ILOAD, 1);
    mv.visitVarInsn(ILOAD, 3);
    mv.visitVarInsn(ISTORE, 4);
    mv.visitVarInsn(ISTORE, 3);
    mv.visitVarInsn(ISTORE, 1);
    mv.visitLabel(labels[3]);
    mv.visitFrame(
        Opcodes.F_APPEND,
        3,
        new Object[] {Opcodes.INTEGER, Opcodes.INTEGER, Opcodes.INTEGER},
        0,
        null);
    mv.visitVarInsn(ILOAD, 1);
    mv.visitVarInsn(ISTORE, 1);
    mv.visitVarInsn(ILOAD, 1);
    mv.visitJumpInsn(IFLE, labels[4]);
    mv.visitLabel(labels[5]);
    mv.visitLineNumber(27, labels[5]);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitVarInsn(ILOAD, 3);
    mv.visitMethodInsn(INVOKESPECIAL, INTERNAL_NAME, "count", "(I)I", false);
    mv.visitVarInsn(ISTORE, 4);
    mv.visitLabel(labels[6]);
    mv.visitLineNumber(28, labels[6]);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitMethodInsn(INVOKESPECIAL, INTERNAL_NAME, "count", "()I", false);
    mv.visitVarInsn(ISTORE, 5);
    mv.visitVarInsn(ILOAD, 5);
    mv.visitVarInsn(ILOAD, 4);
    mv.visitVarInsn(ISTORE, 5);
    mv.visitVarInsn(ISTORE, 4);
    mv.visitLabel(labels[7]);
    mv.visitFrame(Opcodes.F_APPEND, 1, new Object[] {Opcodes.INTEGER}, 0, null);
    mv.visitVarInsn(ILOAD, 4);
    mv.visitVarInsn(ISTORE, 4);
    mv.visitVarInsn(ILOAD, 4);
    mv.visitJumpInsn(IFLE, labels[8]);
    mv.visitLabel(labels[9]);
    mv.visitLineNumber(29, labels[9]);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitVarInsn(ILOAD, 5);
    mv.visitMethodInsn(INVOKESPECIAL, INTERNAL_NAME, "read", "(I)Ljava/lang/String;", false);
    mv.visitInsn(POP);
    mv.visitLabel(labels[10]);
    mv.visitLineNumber(30, labels[10]);
    mv.visitInsn(ICONST_2);
    mv.visitInsn(POP);
    mv.visitInsn(ICONST_2);
    mv.visitVarInsn(ISTORE, 6);
    mv.visitVarInsn(ILOAD, 5);
    mv.visitVarInsn(ILOAD, 6);
    mv.visitInsn(IADD);
    mv.visitVarInsn(ISTORE, 5);
    mv.visitLabel(labels[11]);
    mv.visitLineNumber(28, labels[11]);
    mv.visitInsn(ICONST_M1);
    mv.visitInsn(POP);
    mv.visitInsn(ICONST_M1);
    mv.visitVarInsn(ISTORE, 6);
    mv.visitVarInsn(ILOAD, 4);
    mv.visitVarInsn(ILOAD, 6);
    mv.visitInsn(IADD);
    mv.visitVarInsn(ISTORE, 4);
    mv.visitJumpInsn(GOTO, labels[7]);
    mv.visitLabel(labels[8]);
    mv.visitLineNumber(32, labels[8]);
    mv.visitFrame(
        Opcodes.F_FULL,
        6,
        new Object[] {
          INTERNAL_NAME,
          Opcodes.INTEGER,
          Opcodes.INTEGER,
          Opcodes.INTEGER,
          Opcodes.TOP,
          Opcodes.INTEGER
        },
        0,
        new Object[] {});
    mv.visitLdcInsn(new Integer(6));
    mv.visitInsn(POP);
    mv.visitInsn(ICONST_4);
    mv.visitVarInsn(ISTORE, 4);
    mv.visitVarInsn(ILOAD, 3);
    mv.visitVarInsn(ILOAD, 4);
    mv.visitInsn(IADD);
    mv.visitVarInsn(ISTORE, 4);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitVarInsn(ILOAD, 4);
    mv.visitMethodInsn(INVOKESPECIAL, INTERNAL_NAME, "count", "(I)I", false);
    mv.visitVarInsn(ISTORE, 4);
    mv.visitVarInsn(ILOAD, 2);
    mv.visitVarInsn(ILOAD, 4);
    mv.visitInsn(IADD);
    mv.visitVarInsn(ISTORE, 4);
    mv.visitVarInsn(ILOAD, 3);
    mv.visitVarInsn(ILOAD, 4);
    mv.visitInsn(IADD);
    mv.visitVarInsn(ISTORE, 3);
    mv.visitLabel(labels[12]);
    mv.visitLineNumber(26, labels[12]);
    mv.visitInsn(ICONST_M1);
    mv.visitInsn(POP);
    mv.visitInsn(ICONST_M1);
    mv.visitVarInsn(ISTORE, 4);
    mv.visitVarInsn(ILOAD, 1);
    mv.visitVarInsn(ILOAD, 4);
    mv.visitInsn(IADD);
    mv.visitVarInsn(ISTORE, 1);
    mv.visitVarInsn(ILOAD, 5);
    mv.visitVarInsn(ISTORE, 4);
    mv.visitJumpInsn(GOTO, labels[3]);
    mv.visitLabel(labels[4]);
    mv.visitLineNumber(34, labels[4]);
    mv.visitFrame(
        Opcodes.F_FULL,
        5,
        new Object[] {INTERNAL_NAME, Opcodes.TOP, Opcodes.TOP, Opcodes.INTEGER, Opcodes.INTEGER},
        0,
        new Object[] {});
    mv.visitInsn(ICONST_2);
    mv.visitInsn(POP);
    mv.visitInsn(ICONST_2);
    mv.visitVarInsn(ISTORE, 1);
    mv.visitVarInsn(ILOAD, 3);
    mv.visitVarInsn(ILOAD, 1);
    mv.visitInsn(IADD);
    mv.visitVarInsn(ISTORE, 1);
    mv.visitLabel(labels[13]);
    mv.visitLineNumber(35, labels[13]);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitMethodInsn(
        INVOKESPECIAL,
        INTERNAL_NAME,
        "visitMethod",
        "()L" + INTERNAL_NAME + "$" + INNER_SIMPLE_NAME + ";",
        false);
    mv.visitVarInsn(ASTORE, 2);
    mv.visitLabel(labels[14]);
    mv.visitLineNumber(36, labels[14]);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitMethodInsn(INVOKESPECIAL, INTERNAL_NAME, "cond", "()Z", false);
    mv.visitJumpInsn(IFEQ, labels[15]);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitMethodInsn(INVOKESPECIAL, INTERNAL_NAME, "cond", "()Z", false);
    mv.visitJumpInsn(IFEQ, labels[15]);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitMethodInsn(INVOKESPECIAL, INTERNAL_NAME, "cond", "()Z", false);
    mv.visitJumpInsn(IFEQ, labels[15]);
    mv.visitLabel(labels[16]);
    mv.visitLineNumber(37, labels[16]);
    mv.visitVarInsn(ALOAD, 2);
    mv.visitVarInsn(ASTORE, 3);
    mv.visitLabel(labels[17]);
    mv.visitLineNumber(38, labels[17]);
    mv.visitInsn(ICONST_0);
    mv.visitVarInsn(ISTORE, 5);
    mv.visitLabel(labels[18]);
    mv.visitLineNumber(39, labels[18]);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitMethodInsn(INVOKESPECIAL, INTERNAL_NAME, "count", "()I", false);
    mv.visitVarInsn(ISTORE, 6);
    mv.visitVarInsn(ALOAD, 3);
    mv.visitFieldInsn(GETFIELD, INNER_INTERNAL_NAME, "exceptionCount", "I");
    mv.visitVarInsn(ISTORE, 7);
    mv.visitVarInsn(ILOAD, 6);
    mv.visitVarInsn(ILOAD, 7);
    mv.visitJumpInsn(IF_ICMPNE, labels[19]);
    mv.visitLabel(labels[20]);
    mv.visitLineNumber(40, labels[20]);
    mv.visitInsn(ICONST_1);
    mv.visitVarInsn(ISTORE, 5);
    mv.visitLabel(labels[21]);
    mv.visitLineNumber(41, labels[21]);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitMethodInsn(INVOKESPECIAL, INTERNAL_NAME, "count", "()I", false);
    mv.visitVarInsn(ISTORE, 6);
    mv.visitVarInsn(ILOAD, 6);
    mv.visitVarInsn(ILOAD, 4);
    mv.visitVarInsn(ISTORE, 6);
    mv.visitVarInsn(ISTORE, 4);
    mv.visitLabel(labels[22]);
    mv.visitFrame(
        Opcodes.F_FULL,
        7,
        new Object[] {
          INTERNAL_NAME,
          Opcodes.INTEGER,
          INNER_INTERNAL_NAME,
          INNER_INTERNAL_NAME,
          Opcodes.INTEGER,
          Opcodes.INTEGER,
          Opcodes.INTEGER
        },
        0,
        new Object[] {});
    mv.visitVarInsn(ILOAD, 4);
    mv.visitVarInsn(ISTORE, 4);
    mv.visitVarInsn(ILOAD, 4);
    mv.visitJumpInsn(IFLT, labels[23]);
    mv.visitLabel(labels[24]);
    mv.visitLineNumber(42, labels[24]);
    mv.visitLdcInsn(new Integer(-2));
    mv.visitVarInsn(ISTORE, 7);
    mv.visitVarInsn(ILOAD, 6);
    mv.visitVarInsn(ILOAD, 7);
    mv.visitInsn(IADD);
    mv.visitVarInsn(ISTORE, 6);
    mv.visitLabel(labels[25]);
    mv.visitLineNumber(41, labels[25]);
    mv.visitInsn(ICONST_M1);
    mv.visitInsn(POP);
    mv.visitInsn(ICONST_M1);
    mv.visitVarInsn(ISTORE, 7);
    mv.visitVarInsn(ILOAD, 4);
    mv.visitVarInsn(ILOAD, 7);
    mv.visitInsn(IADD);
    mv.visitVarInsn(ISTORE, 4);
    mv.visitJumpInsn(GOTO, labels[22]);
    mv.visitLabel(labels[23]);
    mv.visitFrame(
        Opcodes.F_FULL,
        7,
        new Object[] {
          INTERNAL_NAME,
          Opcodes.INTEGER,
          INNER_INTERNAL_NAME,
          INNER_INTERNAL_NAME,
          Opcodes.TOP,
          Opcodes.INTEGER,
          Opcodes.INTEGER
        },
        0,
        new Object[] {});
    mv.visitVarInsn(ILOAD, 5);
    mv.visitVarInsn(ILOAD, 6);
    mv.visitVarInsn(ISTORE, 5);
    mv.visitVarInsn(ISTORE, 4);
    mv.visitJumpInsn(GOTO, labels[26]);
    mv.visitLabel(labels[19]);
    mv.visitFrame(
        Opcodes.F_FULL,
        6,
        new Object[] {
          INTERNAL_NAME,
          Opcodes.INTEGER,
          INNER_INTERNAL_NAME,
          INNER_INTERNAL_NAME,
          Opcodes.INTEGER,
          Opcodes.INTEGER
        },
        0,
        new Object[] {});
    mv.visitVarInsn(ILOAD, 5);
    mv.visitVarInsn(ILOAD, 4);
    mv.visitVarInsn(ISTORE, 5);
    mv.visitVarInsn(ISTORE, 4);
    mv.visitLabel(labels[26]);
    mv.visitLineNumber(45, labels[26]);
    mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitMethodInsn(INVOKESPECIAL, INTERNAL_NAME, "cond", "()Z", false);
    mv.visitJumpInsn(IFEQ, labels[27]);
    mv.visitLabel(labels[28]);
    mv.visitLineNumber(46, labels[28]);
    mv.visitVarInsn(ILOAD, 1);
    mv.visitInsn(IRETURN);
    mv.visitLabel(labels[27]);
    mv.visitFrame(
        Opcodes.F_FULL,
        6,
        new Object[] {
          INTERNAL_NAME,
          Opcodes.INTEGER,
          INNER_INTERNAL_NAME,
          Opcodes.TOP,
          Opcodes.TOP,
          Opcodes.INTEGER
        },
        0,
        new Object[] {});
    mv.visitVarInsn(ILOAD, 5);
    mv.visitVarInsn(ISTORE, 3);
    mv.visitJumpInsn(GOTO, labels[29]);
    mv.visitLabel(labels[15]);
    mv.visitFrame(
        Opcodes.F_FULL,
        5,
        new Object[] {
          INTERNAL_NAME, Opcodes.INTEGER, INNER_INTERNAL_NAME, Opcodes.TOP, Opcodes.INTEGER
        },
        0,
        new Object[] {});
    mv.visitVarInsn(ILOAD, 4);
    mv.visitVarInsn(ISTORE, 3);
    mv.visitLabel(labels[29]);
    mv.visitLineNumber(49, labels[29]);
    mv.visitFrame(
        Opcodes.F_FULL,
        4,
        new Object[] {INTERNAL_NAME, Opcodes.INTEGER, INNER_INTERNAL_NAME, Opcodes.INTEGER},
        0,
        new Object[] {});
    mv.visitVarInsn(ILOAD, 1);
    mv.visitInsn(IRETURN);
    mv.visitLabel(labels[30]);
    mv.visitLocalVariable("u", "I", null, labels[0], labels[3], 1);
    mv.visitLocalVariable("exception", "I", null, labels[2], labels[3], 3);
    mv.visitLocalVariable("exception", "I", null, labels[3], labels[7], 4);
    mv.visitLocalVariable("j", "I", null, labels[7], labels[8], 4);
    mv.visitLocalVariable("i", "I", null, labels[3], labels[4], 1);
    mv.visitLocalVariable("exception", "I", null, labels[7], labels[4], 5);
    mv.visitLocalVariable("u", "I", null, labels[3], labels[13], 3);
    mv.visitLocalVariable("exception", "I", null, labels[4], labels[22], 4);
    mv.visitLocalVariable("j", "I", null, labels[22], labels[23], 4);
    mv.visitLocalVariable("exception", "I", null, labels[22], labels[19], 6);
    mv.visitLocalVariable("exception", "I", null, labels[19], labels[26], 4);
    mv.visitLocalVariable("sameExceptions", "Z", null, labels[18], labels[26], 5);
    mv.visitLocalVariable(
        "mw", "L" + INTERNAL_NAME + "$" + INNER_SIMPLE_NAME + ";", null, labels[17], labels[27], 3);
    mv.visitLocalVariable("sameExceptions", "Z", null, labels[26], labels[27], 4);
    mv.visitLocalVariable("exception", "I", null, labels[26], labels[15], 5);
    mv.visitLocalVariable("exception", "I", null, labels[15], labels[29], 4);
    mv.visitLocalVariable("this", "L" + INTERNAL_NAME + ";", null, labels[0], labels[30], 0);
    mv.visitLocalVariable("u", "I", null, labels[13], labels[30], 1);
    mv.visitLocalVariable("exception", "I", null, labels[29], labels[30], 3);
    mv.visitLocalVariable(
        "mv", "L" + INTERNAL_NAME + "$" + INNER_SIMPLE_NAME + ";", null, labels[14], labels[30], 2);
    mv.visitMaxs(3, 8);
    mv.visitEnd();
  }

  public static byte[] dumpInner() throws Exception {

    ClassWriter cw = new ClassWriter(0);
    FieldVisitor fv;
    MethodVisitor mv;
    AnnotationVisitor av0;

    cw.visit(V1_8, ACC_SUPER, INNER_INTERNAL_NAME, null, "java/lang/Object", null);

    cw.visitSource(SIMPLE_NAME + ".java", null);

    cw.visitInnerClass(INNER_INTERNAL_NAME, INTERNAL_NAME, INNER_SIMPLE_NAME, ACC_STATIC);

    {
      fv = cw.visitField(ACC_PUBLIC, "exceptionCount", "I", null, null);
      fv.visitEnd();
    }
    {
      mv = cw.visitMethod(0, "<init>", "()V", null, null);
      mv.visitCode();
      Label l0 = new Label();
      mv.visitLabel(l0);
      mv.visitLineNumber(13, l0);
      mv.visitVarInsn(ALOAD, 0);
      mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false);
      mv.visitInsn(RETURN);
      Label l1 = new Label();
      mv.visitLabel(l1);
      mv.visitLocalVariable(
          "this", "L" + INTERNAL_NAME + "$" + INNER_SIMPLE_NAME + ";", null, l0, l1, 0);
      mv.visitMaxs(1, 1);
      mv.visitEnd();
    }
    cw.visitEnd();

    return cw.toByteArray();
  }
}
