diff src/main/gov/nasa/jpf/jvm/JVMByteCodePrinter.java @ 0:61d41facf527

initial v8 import (history reset)
author Peter Mehlitz <Peter.C.Mehlitz@nasa.gov>
date Fri, 23 Jan 2015 10:14:01 -0800
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/gov/nasa/jpf/jvm/JVMByteCodePrinter.java	Fri Jan 23 10:14:01 2015 -0800
@@ -0,0 +1,1096 @@
+/*
+ * Copyright (C) 2014, United States Government, as represented by the
+ * Administrator of the National Aeronautics and Space Administration.
+ * All rights reserved.
+ *
+ * The Java Pathfinder core (jpf-core) platform is licensed under the
+ * Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ *        http://www.apache.org/licenses/LICENSE-2.0. 
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+package gov.nasa.jpf.jvm;
+
+import java.io.PrintWriter;
+
+/**
+ * utility class that prints out bytecode in readable form
+ */
+public class JVMByteCodePrinter implements JVMByteCodeReader {
+
+  PrintWriter pw;
+  ClassFile cf; // need this to get the constpool entries
+
+  String prefix;
+
+  public JVMByteCodePrinter (PrintWriter pw, ClassFile cf, String prefix){
+    this.pw = pw;
+    this.cf = cf;
+    this.prefix = prefix;
+  }
+
+  @Override
+  public void aconst_null() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "aconst_null");
+  }
+
+  @Override
+  public void aload(int localVarIndex) {
+    pw.printf("%s%3d: %s [%d]\n", prefix, cf.getPc(), "aload", localVarIndex);
+  }
+
+  @Override
+  public void aload_0() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "aload_0");
+  }
+
+  @Override
+  public void aload_1() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "aload_1");
+  }
+
+  @Override
+  public void aload_2() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "aload_2");
+  }
+
+  @Override
+  public void aload_3() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "aload_3");
+  }
+
+  @Override
+  public void aaload() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "aaload");
+  }
+
+  @Override
+  public void astore(int localVarIndex) {
+    pw.printf("%s%3d: %s [%d]\n", prefix, cf.getPc(), "astore", localVarIndex);
+  }
+
+  @Override
+  public void astore_0() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "astore_0");
+  }
+
+  @Override
+  public void astore_1() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "astore_1");
+  }
+
+  @Override
+  public void astore_2() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "astore_2");
+  }
+
+  @Override
+  public void astore_3() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "astore_3");
+  }
+
+  @Override
+  public void aastore() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "aastore");
+  }
+
+  @Override
+  public void areturn() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "areturn");
+  }
+
+  @Override
+  public void anewarray(int cpClassIndex) {
+    pw.printf("%s%3d: %s @%d(\"%s\")\n", prefix, cf.getPc(), "anewarray", cpClassIndex, cf.classNameAt(cpClassIndex));
+  }
+
+  @Override
+  public void arraylength() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "arraylength");
+  }
+
+  @Override
+  public void athrow() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "athrow");
+  }
+
+  @Override
+  public void baload() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "baload");
+  }
+
+  @Override
+  public void bastore() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "bastore");
+  }
+
+  @Override
+  public void bipush(int b) {
+    pw.printf("%s%3d: %s %d\n", prefix, cf.getPc(), "bipush", b);
+  }
+
+  @Override
+  public void caload() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "caload");
+  }
+
+  @Override
+  public void castore() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "castore");
+  }
+
+  @Override
+  public void checkcast(int cpClassIndex) {
+    pw.printf("%s%3d: %s @%d(\"%s\")\n", prefix, cf.getPc(), "checkcast", cpClassIndex, cf.classNameAt(cpClassIndex));
+  }
+
+  @Override
+  public void d2f() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "d2f");
+  }
+
+  @Override
+  public void d2i() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "d2i");
+  }
+
+  @Override
+  public void d2l() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "d2l");
+  }
+
+  @Override
+  public void dadd() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dadd");
+  }
+
+  @Override
+  public void daload() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "daload");
+  }
+
+  @Override
+  public void dastore() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dastore");
+  }
+
+  @Override
+  public void dcmpg() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dcmpg");
+  }
+
+  @Override
+  public void dcmpl() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dcmpl");
+  }
+
+  @Override
+  public void dconst_0() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dconst_0");
+  }
+
+  @Override
+  public void dconst_1() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dcont_1");
+  }
+
+  @Override
+  public void ddiv() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "ddiv");
+  }
+
+  @Override
+  public void dload(int localVarIndex) {
+    pw.printf("%s%3d: %s [%d]\n", prefix, cf.getPc(), "dload", localVarIndex);
+  }
+
+  @Override
+  public void dload_0() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dload_0");
+  }
+
+  @Override
+  public void dload_1() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dload_1");
+  }
+
+  @Override
+  public void dload_2() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dload_2");
+  }
+
+  @Override
+  public void dload_3() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dload_3");
+  }
+
+  @Override
+  public void dmul() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dmul");
+  }
+
+  @Override
+  public void dneg() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dneg");
+  }
+
+  @Override
+  public void drem() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "drem");
+  }
+
+  @Override
+  public void dreturn() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dreturn");
+  }
+
+  @Override
+  public void dstore(int localVarIndex) {
+    pw.printf("%s%3d: %s [%d]\n", prefix, cf.getPc(), "dstore", localVarIndex);
+  }
+
+  @Override
+  public void dstore_0() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dstore_0");
+  }
+
+  @Override
+  public void dstore_1() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dstore_1");
+  }
+
+  @Override
+  public void dstore_2() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dstore_2");
+  }
+
+  @Override
+  public void dstore_3() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dstore_3");
+  }
+
+  @Override
+  public void dsub() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dsub");
+  }
+
+  @Override
+  public void dup() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dup");
+  }
+
+  @Override
+  public void dup_x1() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dup_x1");
+  }
+
+  @Override
+  public void dup_x2() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dup_x2");
+  }
+
+  @Override
+  public void dup2() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dup2");
+  }
+
+  @Override
+  public void dup2_x1() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dup2_x1");
+  }
+
+  @Override
+  public void dup2_x2() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "dup2_x2");
+  }
+
+  @Override
+  public void f2d() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "f2d");
+  }
+
+  @Override
+  public void f2i() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "f2i");
+  }
+
+  @Override
+  public void f2l() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "f2l");
+  }
+
+  @Override
+  public void fadd() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fadd");
+  }
+
+  @Override
+  public void faload() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "faload");
+  }
+
+  @Override
+  public void fastore() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fastore");
+  }
+
+  @Override
+  public void fcmpg() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fcmpg");
+  }
+
+  @Override
+  public void fcmpl() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fcmpl");
+  }
+
+  @Override
+  public void fconst_0() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fconst_0");
+  }
+
+  @Override
+  public void fconst_1() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fconst_1");
+  }
+
+  @Override
+  public void fconst_2() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fconst_2");
+  }
+
+  @Override
+  public void fdiv() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fdiv");
+  }
+
+  @Override
+  public void fload(int localVarIndex) {
+    pw.printf("%s%3d: %s [%d]\n", prefix, cf.getPc(), "fload", localVarIndex);
+  }
+
+  @Override
+  public void fload_0() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fload_0");
+  }
+
+  @Override
+  public void fload_1() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fload_1");
+  }
+
+  @Override
+  public void fload_2() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fload_2");
+  }
+
+  @Override
+  public void fload_3() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fload_3");
+  }
+
+  @Override
+  public void fmul() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fmul");
+  }
+
+  @Override
+  public void fneg() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fneg");
+  }
+
+  @Override
+  public void frem() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "frem");
+  }
+
+  @Override
+  public void freturn() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "freturn");
+  }
+
+  @Override
+  public void fstore(int localVarIndex) {
+    pw.printf("%s%3d: %s [%d]\n", prefix, cf.getPc(), "fstore", localVarIndex);
+  }
+
+  @Override
+  public void fstore_0() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fstore_0");
+  }
+
+  @Override
+  public void fstore_1() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fstore_1");
+  }
+
+  @Override
+  public void fstore_2() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fstore_2");
+  }
+
+  @Override
+  public void fstore_3() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fstore_3");
+  }
+
+  @Override
+  public void fsub() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "fsub");
+  }
+
+  @Override
+  public void getfield(int cpFieldRefIndex) {
+    pw.printf("%s%3d: %s @%d(\"%s\",\"%s\",\"%s\")\n", prefix, cf.getPc(), "getfield", cpFieldRefIndex,
+            cf.fieldClassNameAt(cpFieldRefIndex),
+            cf.fieldNameAt(cpFieldRefIndex),
+            cf.fieldDescriptorAt(cpFieldRefIndex));
+  }
+
+  @Override
+  public void getstatic(int cpFieldRefIndex) {
+    pw.printf("%s%3d: %s @%d(\"%s\",\"%s\",\"%s\")\n", prefix, cf.getPc(), "getstatic", cpFieldRefIndex,
+            cf.fieldClassNameAt(cpFieldRefIndex),
+            cf.fieldNameAt(cpFieldRefIndex),
+            cf.fieldDescriptorAt(cpFieldRefIndex));
+  }
+
+  @Override
+  public void goto_(int pcOffset) {
+    pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "goto", pcOffset, (cf.getPc() + pcOffset));
+  }
+
+  @Override
+  public void goto_w(int pcOffset) {
+    pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "goto_w", pcOffset, (cf.getPc() + pcOffset));
+  }
+
+  @Override
+  public void i2b() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "i2b");
+  }
+
+  @Override
+  public void i2c() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "i2c");
+  }
+
+  @Override
+  public void i2d() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "i2d");
+  }
+
+  @Override
+  public void i2f() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "i2f");
+  }
+
+  @Override
+  public void i2l() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "i2l");
+  }
+
+  @Override
+  public void i2s() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "i2s");
+  }
+
+  @Override
+  public void iadd() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "iadd");
+  }
+
+  @Override
+  public void iaload() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "iaload");
+  }
+
+  @Override
+  public void iand() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "iand");
+  }
+
+  @Override
+  public void iastore() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "iastore");
+  }
+
+  @Override
+  public void iconst_m1() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "iconst_m1");
+  }
+
+  @Override
+  public void iconst_0() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "iconst_0");
+  }
+
+  @Override
+  public void iconst_1() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "iconst_1");
+  }
+
+  @Override
+  public void iconst_2() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "iconst_2");
+  }
+
+  @Override
+  public void iconst_3() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "iconst_3");
+  }
+
+  @Override
+  public void iconst_4() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "iconst_4");
+  }
+
+  @Override
+  public void iconst_5() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "iconst_5");
+  }
+
+  @Override
+  public void idiv() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "idiv");
+  }
+
+  @Override
+  public void if_acmpeq(int pcOffset) {
+    pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "if_acmpeq", pcOffset, (cf.getPc() + pcOffset));
+  }
+
+  @Override
+  public void if_acmpne(int pcOffset) {
+    pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "if_acmpne", pcOffset, (cf.getPc() + pcOffset));
+  }
+
+  @Override
+  public void if_icmpeq(int pcOffset) {
+    pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "if_icmpeq", pcOffset, (cf.getPc() + pcOffset));
+  }
+
+  @Override
+  public void if_icmpne(int pcOffset) {
+    pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "if_icmpne", pcOffset, (cf.getPc() + pcOffset));
+  }
+
+  @Override
+  public void if_icmplt(int pcOffset) {
+    pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "if_icmplt", pcOffset, (cf.getPc() + pcOffset));
+  }
+
+  @Override
+  public void if_icmpge(int pcOffset) {
+    pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "if_icmpge", pcOffset, (cf.getPc() + pcOffset));
+  }
+
+  @Override
+  public void if_icmpgt(int pcOffset) {
+    pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "if_icmpgt", pcOffset, (cf.getPc() + pcOffset));
+  }
+
+  @Override
+  public void if_icmple(int pcOffset) {
+    pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "if_icmple", pcOffset, (cf.getPc() + pcOffset));
+  }
+
+  @Override
+  public void ifeq(int pcOffset) {
+    pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "ifeq", pcOffset, (cf.getPc() + pcOffset));
+  }
+
+  @Override
+  public void ifne(int pcOffset) {
+    pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "ifne", pcOffset, (cf.getPc() + pcOffset));
+  }
+
+  @Override
+  public void iflt(int pcOffset) {
+    pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "iflt", pcOffset, (cf.getPc() + pcOffset));
+  }
+
+  @Override
+  public void ifge(int pcOffset) {
+    pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "ifge", pcOffset, (cf.getPc() + pcOffset));
+  }
+
+  @Override
+  public void ifgt(int pcOffset) {
+    pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "ifgt", pcOffset, (cf.getPc() + pcOffset));
+  }
+
+  @Override
+  public void ifle(int pcOffset) {
+    pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "ifle", pcOffset, (cf.getPc() + pcOffset));
+  }
+
+  @Override
+  public void ifnonnull(int pcOffset) {
+    pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "ifnonnull", pcOffset, (cf.getPc() + pcOffset));
+  }
+
+  @Override
+  public void ifnull(int pcOffset) {
+    pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "ifnull", pcOffset, (cf.getPc() + pcOffset));
+  }
+
+  @Override
+  public void iinc(int localVarIndex, int incConstant) {
+    pw.printf("%s%3d: %s [%d] %+d\n", prefix, cf.getPc(), "iinc", localVarIndex, incConstant);
+  }
+
+  @Override
+  public void iload(int localVarIndex) {
+    pw.printf("%s%3d: %s [%d]\n", prefix, cf.getPc(), "iload", localVarIndex);
+  }
+
+  @Override
+  public void iload_0() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "iload_0");
+  }
+
+  @Override
+  public void iload_1() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "iload_1");
+  }
+
+  @Override
+  public void iload_2() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "iload_2");
+  }
+
+  @Override
+  public void iload_3() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "iload_3");
+  }
+
+  @Override
+  public void imul() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "imul");
+  }
+
+  @Override
+  public void ineg() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "ineg");
+  }
+
+  @Override
+  public void instanceof_(int cpClassIndex) {
+    pw.printf("%s%3d: %s @%d(\"%s\")\n", prefix, cf.getPc(), "instanceof", cpClassIndex, cf.classNameAt(cpClassIndex));
+  }
+
+  @Override
+  public void invokeinterface(int cpInterfaceMethodRefIndex, int count, int zero) {
+    pw.printf("%s%3d: %s @%d(\"%s\",\"%s\",\"%s\") %d\n", prefix, cf.getPc(), "invokeinterface", cpInterfaceMethodRefIndex,
+            cf.methodClassNameAt(cpInterfaceMethodRefIndex),
+            cf.methodNameAt(cpInterfaceMethodRefIndex),
+            cf.methodDescriptorAt(cpInterfaceMethodRefIndex),
+            count);
+  }
+
+  @Override
+  public void invokespecial(int cpMethodRefIndex) {
+    pw.printf("%s%3d: %s @%d(\"%s\",\"%s\",\"%s\")\n", prefix, cf.getPc(), "invokespecial", cpMethodRefIndex,
+            cf.methodClassNameAt(cpMethodRefIndex),
+            cf.methodNameAt(cpMethodRefIndex),
+            cf.methodDescriptorAt(cpMethodRefIndex));
+  }
+
+  @Override
+  public void invokestatic(int cpMethodRefIndex) {
+    pw.printf("%s%3d: %s @%d(\"%s\",\"%s\",\"%s\")\n", prefix, cf.getPc(), "invokestatic", cpMethodRefIndex,
+            cf.methodClassNameAt(cpMethodRefIndex),
+            cf.methodNameAt(cpMethodRefIndex),
+            cf.methodDescriptorAt(cpMethodRefIndex));
+  }
+
+  @Override
+  public void invokevirtual(int cpMethodRefIndex) {
+    pw.printf("%s%3d: %s @%d(\"%s\",\"%s\",\"%s\")\n", prefix, cf.getPc(), "invokevirtual", cpMethodRefIndex,
+            cf.methodClassNameAt(cpMethodRefIndex),
+            cf.methodNameAt(cpMethodRefIndex),
+            cf.methodDescriptorAt(cpMethodRefIndex));
+  }
+
+  @Override
+  public void invokedynamic (int cpInvokeDynamicIndex){
+    pw.printf("%s%3d: %s @%d\n", prefix, cf.getPc(), "invokedynamic", cpInvokeDynamicIndex);
+  }
+  
+  @Override
+  public void ior() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "ior");
+  }
+
+  @Override
+  public void irem() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "irem");
+  }
+
+  @Override
+  public void ireturn() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "ireturn");
+  }
+
+  @Override
+  public void ishl() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "ishl");
+  }
+
+  @Override
+  public void ishr() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "ishr");
+  }
+
+  @Override
+  public void istore(int localVarIndex) {
+    pw.printf("%s%3d: %s [%d]\n", prefix, cf.getPc(), "istore", localVarIndex);
+  }
+
+  @Override
+  public void istore_0() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "istore_0");
+  }
+
+  @Override
+  public void istore_1() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "istore_1");
+  }
+
+  @Override
+  public void istore_2() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "istore_2");
+  }
+
+  @Override
+  public void istore_3() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "istore_3");
+  }
+
+  @Override
+  public void isub() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "isub");
+  }
+
+  @Override
+  public void iushr() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "iushr");
+  }
+
+  @Override
+  public void ixor() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "ixor");
+  }
+
+  @Override
+  public void jsr(int pcOffset) {
+    pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "jsr", pcOffset, (cf.getPc() + pcOffset));
+  }
+
+  @Override
+  public void jsr_w(int pcOffset) {
+    pw.printf("%s%3d: %s %+d (%d)\n", prefix, cf.getPc(), "jsr_w", pcOffset, (cf.getPc() + pcOffset));
+  }
+
+  @Override
+  public void l2d() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "l2d");
+  }
+
+  @Override
+  public void l2f() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "l2f");
+  }
+
+  @Override
+  public void l2i() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "l2i");
+  }
+
+  @Override
+  public void ladd() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "ladd");
+  }
+
+  @Override
+  public void laload() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "laload");
+  }
+
+  @Override
+  public void land() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "land");
+  }
+
+  @Override
+  public void lastore() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lastore");
+  }
+
+  @Override
+  public void lcmp() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lcmp");
+  }
+
+  @Override
+  public void lconst_0() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lconst_0");
+  }
+
+  @Override
+  public void lconst_1() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lconst_1");
+  }
+
+  @Override
+  public void ldc_(int cpIntOrFloatOrStringIndex) {
+    pw.printf("%s%3d: %s @%d(%s)\n", prefix, cf.getPc(), "ldc", cpIntOrFloatOrStringIndex,
+            cf.getCpValue(cpIntOrFloatOrStringIndex));
+  }
+
+  @Override
+  public void ldc_w_(int cpIntOrFloatOrStringIndex) {
+    pw.printf("%s%3d: %s @%d(%s)\n", prefix, cf.getPc(), "ldc_w", cpIntOrFloatOrStringIndex,
+            cf.getCpValue(cpIntOrFloatOrStringIndex));
+  }
+
+  @Override
+  public void ldc2_w(int cpLongOrDoubleIndex) {
+    pw.printf("%s%3d: %s @%d(%s)\n", prefix, cf.getPc(), "ldc2_w", cpLongOrDoubleIndex,
+            cf.getCpValue(cpLongOrDoubleIndex));
+  }
+
+  @Override
+  public void ldiv() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "ldiv");
+  }
+
+  @Override
+  public void lload(int localVarIndex) {
+    pw.printf("%s%3d: %s [%d]\n", prefix, cf.getPc(), "lload", localVarIndex);
+  }
+
+  @Override
+  public void lload_0() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lload_0");
+  }
+
+  @Override
+  public void lload_1() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lload_1");
+  }
+
+  @Override
+  public void lload_2() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lload_2");
+  }
+
+  @Override
+  public void lload_3() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lload_3");
+  }
+
+  @Override
+  public void lmul() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lmul");
+  }
+
+  @Override
+  public void lneg() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lneg");
+  }
+
+  @Override
+  public void lookupswitch(int defaultPcOffset, int nEntries) {
+    pw.printf("%s%3d: %s default:%+d\n", prefix, cf.getPc(), "lookupswitch", defaultPcOffset);
+    cf.parseLookupSwitchEntries(this, nEntries);
+  }
+  @Override
+  public void lookupswitchEntry(int index, int match, int pcOffset){
+    pw.printf("%s      %d : %+d (%d)\n", prefix, match, pcOffset, (cf.getPc() + pcOffset));
+  }
+
+
+  @Override
+  public void lor() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lor");
+  }
+
+  @Override
+  public void lrem() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lrem");
+  }
+
+  @Override
+  public void lreturn() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lreturn");
+  }
+
+  @Override
+  public void lshl() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lshl");
+  }
+
+  @Override
+  public void lshr() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lshr");
+  }
+
+  @Override
+  public void lstore(int localVarIndex) {
+    pw.printf("%s%3d: %s [%d]\n", prefix, cf.getPc(), "lstore", localVarIndex);
+  }
+
+  @Override
+  public void lstore_0() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lstore_0");
+  }
+
+  @Override
+  public void lstore_1() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lstore_1");
+  }
+
+  @Override
+  public void lstore_2() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lstore_2");
+  }
+
+  @Override
+  public void lstore_3() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lstore_3");
+  }
+
+  @Override
+  public void lsub() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lsub");
+  }
+
+  @Override
+  public void lushr() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lushr");
+  }
+
+  @Override
+  public void lxor() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "lxor");
+  }
+
+  @Override
+  public void monitorenter() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "monitorenter");
+  }
+
+  @Override
+  public void monitorexit() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "monitorexit");
+  }
+
+  @Override
+  public void multianewarray(int cpClassIndex, int dimensions) {
+    pw.printf("%s%3d: %s @%d(\"%s\") dim: %d\n", prefix, cf.getPc(), "multianewarray",
+            cpClassIndex, cf.classNameAt(cpClassIndex), dimensions);
+  }
+
+  @Override
+  public void new_(int cpClassIndex) {
+    pw.printf("%s%3d: %s @%d(\"%s\")\n", prefix, cf.getPc(), "new",
+            cpClassIndex, cf.classNameAt(cpClassIndex));
+  }
+
+  @Override
+  public void newarray(int typeCode) {
+    pw.printf("%s%3d: %s %s[]\n", prefix, cf.getPc(), "newarray", cf.getTypeName(typeCode));
+  }
+
+  @Override
+  public void nop() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "nop");
+  }
+
+  @Override
+  public void pop() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "pop");
+  }
+
+  @Override
+  public void pop2() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "pop2");
+  }
+
+  @Override
+  public void putfield(int cpFieldRefIndex) {
+    pw.printf("%s%3d: %s @%d(\"%s\",\"%s\",\"%s\")\n", prefix, cf.getPc(), "putfield", cpFieldRefIndex,
+            cf.fieldClassNameAt(cpFieldRefIndex),
+            cf.fieldNameAt(cpFieldRefIndex),
+            cf.fieldDescriptorAt(cpFieldRefIndex));
+  }
+
+  @Override
+  public void putstatic(int cpFieldRefIndex) {
+    pw.printf("%s%3d: %s @%d(\"%s\",\"%s\",\"%s\")\n", prefix, cf.getPc(), "putstatic", cpFieldRefIndex,
+            cf.fieldClassNameAt(cpFieldRefIndex),
+            cf.fieldNameAt(cpFieldRefIndex),
+            cf.fieldDescriptorAt(cpFieldRefIndex));
+  }
+
+  @Override
+  public void ret(int localVarIndex) {
+    pw.printf("%s%3d: %s [%d]\n", prefix, cf.getPc(), "ret", localVarIndex);
+  }
+
+  @Override
+  public void return_() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "return");
+  }
+
+  @Override
+  public void saload() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "saload");
+  }
+
+  @Override
+  public void sastore() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "sastore");
+  }
+
+  @Override
+  public void sipush(int val) {
+    pw.printf("%s%3d: %s %d\n", prefix, cf.getPc(), "sipush", val);
+  }
+
+  @Override
+  public void swap() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "swap");
+  }
+
+  @Override
+  public void tableswitch(int defaultPcOffset, int low, int high) {
+    pw.printf("%s%3d: %s [%d..%d] default: %+d\n", prefix, cf.getPc(), "tableswitch", low, high, defaultPcOffset);
+    cf.parseTableSwitchEntries(this, low, high);
+  }
+  @Override
+  public void tableswitchEntry(int val, int pcOffset){
+    pw.printf("%s      %d: %+d (%d)\n", prefix, val, pcOffset, (cf.getPc() + pcOffset));
+  }
+
+  @Override
+  public void wide() {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "wide");
+  }
+
+  @Override
+  public void unknown(int bytecode) {
+    pw.printf("%s%3d: %s\n", prefix, cf.getPc(), "");
+  }
+
+
+}