/* * 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(), ""); } }