/*
* $Id$
*
* Copyright (C) 2003-2015 JNode.org
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; If not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package org.jnode.vm.bytecode;
import java.io.PrintStream;
import org.jnode.vm.classmgr.VmConstClass;
import org.jnode.vm.classmgr.VmConstFieldRef;
import org.jnode.vm.classmgr.VmConstIMethodRef;
import org.jnode.vm.classmgr.VmConstMethodRef;
import org.jnode.vm.classmgr.VmConstString;
import org.jnode.vm.classmgr.VmMethod;
import org.jnode.vm.classmgr.VmType;
/**
* <description>
*
* @author epr
*/
public class BytecodeViewer extends BytecodeVisitor {
private int address;
private ControlFlowGraph cfg;
private String indent = "";
private final PrintStream out;
/**
* @param parser
* @see org.jnode.vm.bytecode.BytecodeVisitor#setParser(org.jnode.vm.bytecode.BytecodeParser)
*/
public void setParser(BytecodeParser parser) {
}
/**
* Constructor for BytecodeViewer.
*/
public BytecodeViewer() {
this(null, System.out);
}
/**
* Constructor for BytecodeViewer.
*/
public BytecodeViewer(PrintStream out) {
this(null, out);
}
/**
* Constructor for BytecodeViewer.
*
* @param cfg
*/
public BytecodeViewer(ControlFlowGraph cfg) {
this(cfg, System.out);
}
/**
* Constructor for BytecodeViewer.
*
* @param cfg
*/
public BytecodeViewer(ControlFlowGraph cfg, PrintStream out) {
this.cfg = cfg;
this.out = out;
}
/**
* @param method
* @see org.jnode.vm.bytecode.BytecodeVisitor#startMethod(org.jnode.vm.classmgr.VmMethod)
*/
public void startMethod(VmMethod method) {
out.println("Method: " + method.getName() + ", #locals " + method.getBytecode().getNoLocals());
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#endMethod()
*/
public void endMethod() {
out.println("end\n");
}
/**
* @param address
* @see org.jnode.vm.bytecode.BytecodeVisitor#startInstruction(int)
*/
public void startInstruction(int address) {
this.address = address;
if (cfg != null) {
final BasicBlock bb = cfg.getBasicBlock(address);
if (bb.getStartPC() == address) {
out("-- Start of Basic Block " + bb + " --");
}
}
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#endInstruction()
*/
public void endInstruction() {
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_nop()
*/
public void visit_nop() {
out("nop");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_aconst_null()
*/
public void visit_aconst_null() {
out("aconst_null");
}
/**
* @param value
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_iconst(int)
*/
public void visit_iconst(int value) {
out("iconst " + value);
}
/**
* @param value
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_lconst(long)
*/
public void visit_lconst(long value) {
out("lconst " + value);
}
/**
* @param value
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_fconst(float)
*/
public void visit_fconst(float value) {
out("fconst " + value);
}
/**
* @param value
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_dconst(double)
*/
public void visit_dconst(double value) {
out("dconst " + value);
}
/**
* @param value
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ldc(VmConstString)
*/
public void visit_ldc(VmConstString value) {
out("ldc " + value);
}
/**
* @param value
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ldc(VmConstClass)
*/
public void visit_ldc(VmConstClass value) {
out("ldc " + value);
}
/**
* @param value
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ldc(VmConstClass)
*/
public void visit_ldc(VmType<?> value) {
out("ldc-type " + value.getName());
}
/**
* @param index
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_iload(int)
*/
public void visit_iload(int index) {
out("iload " + index);
}
/**
* @param index
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_lload(int)
*/
public void visit_lload(int index) {
out("lload " + index);
}
/**
* @param index
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_fload(int)
*/
public void visit_fload(int index) {
out("fload " + index);
}
/**
* @param index
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_dload(int)
*/
public void visit_dload(int index) {
out("dload " + index);
}
/**
* @param index
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_aload(int)
*/
public void visit_aload(int index) {
out("aload " + index);
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_iaload()
*/
public void visit_iaload() {
out("iaload");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_laload()
*/
public void visit_laload() {
out("laload");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_faload()
*/
public void visit_faload() {
out("faload");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_daload()
*/
public void visit_daload() {
out("daload");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_aaload()
*/
public void visit_aaload() {
out("aaload");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_baload()
*/
public void visit_baload() {
out("baload");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_caload()
*/
public void visit_caload() {
out("caload");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_saload()
*/
public void visit_saload() {
out("saload");
}
/**
* @param index
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_istore(int)
*/
public void visit_istore(int index) {
out("istore " + index);
}
/**
* @param index
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_lstore(int)
*/
public void visit_lstore(int index) {
out("lstore " + index);
}
/**
* @param index
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_fstore(int)
*/
public void visit_fstore(int index) {
out("fstore " + index);
}
/**
* @param index
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_dstore(int)
*/
public void visit_dstore(int index) {
out("dstore " + index);
}
/**
* @param index
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_astore(int)
*/
public void visit_astore(int index) {
out("astore " + index);
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_iastore()
*/
public void visit_iastore() {
out("iastore");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_lastore()
*/
public void visit_lastore() {
out("lastore");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_fastore()
*/
public void visit_fastore() {
out("fastore");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_dastore()
*/
public void visit_dastore() {
out("dastore");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_aastore()
*/
public void visit_aastore() {
out("aastore");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_bastore()
*/
public void visit_bastore() {
out("bastore");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_castore()
*/
public void visit_castore() {
out("castore");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_sastore()
*/
public void visit_sastore() {
out("sastore");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_pop()
*/
public void visit_pop() {
out("pop");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_pop2()
*/
public void visit_pop2() {
out("pop2");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_dup()
*/
public void visit_dup() {
out("dup");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_dup_x1()
*/
public void visit_dup_x1() {
out("dup_x1");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_dup_x2()
*/
public void visit_dup_x2() {
out("dup_x2");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_dup2()
*/
public void visit_dup2() {
out("dup2");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_dup2_x1()
*/
public void visit_dup2_x1() {
out("dup2_x1");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_dup2_x2()
*/
public void visit_dup2_x2() {
out("dup2_x2");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_swap()
*/
public void visit_swap() {
out("swap");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_iadd()
*/
public void visit_iadd() {
out("iadd");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ladd()
*/
public void visit_ladd() {
out("ladd");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_fadd()
*/
public void visit_fadd() {
out("fadd");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_dadd()
*/
public void visit_dadd() {
out("dadd");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_isub()
*/
public void visit_isub() {
out("isub");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_lsub()
*/
public void visit_lsub() {
out("lsub");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_fsub()
*/
public void visit_fsub() {
out("fsub");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_dsub()
*/
public void visit_dsub() {
out("dsub");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_imul()
*/
public void visit_imul() {
out("imul");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_lmul()
*/
public void visit_lmul() {
out("lmul");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_fmul()
*/
public void visit_fmul() {
out("fmul");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_dmul()
*/
public void visit_dmul() {
out("dmul");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_idiv()
*/
public void visit_idiv() {
out("idiv");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ldiv()
*/
public void visit_ldiv() {
out("ldiv");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_fdiv()
*/
public void visit_fdiv() {
out("fdiv");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ddiv()
*/
public void visit_ddiv() {
out("ddiv");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_irem()
*/
public void visit_irem() {
out("irem");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_lrem()
*/
public void visit_lrem() {
out("lrem");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_frem()
*/
public void visit_frem() {
out("frem");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_drem()
*/
public void visit_drem() {
out("drem");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ineg()
*/
public void visit_ineg() {
out("ineg");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_lneg()
*/
public void visit_lneg() {
out("lneg");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_fneg()
*/
public void visit_fneg() {
out("fneg");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_dneg()
*/
public void visit_dneg() {
out("dneg");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ishl()
*/
public void visit_ishl() {
out("ishl");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_lshl()
*/
public void visit_lshl() {
out("lshl");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ishr()
*/
public void visit_ishr() {
out("ishr");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_lshr()
*/
public void visit_lshr() {
out("lshr");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_iushr()
*/
public void visit_iushr() {
out("iushr");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_lushr()
*/
public void visit_lushr() {
out("lushr");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_iand()
*/
public void visit_iand() {
out("iand");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_land()
*/
public void visit_land() {
out("land");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ior()
*/
public void visit_ior() {
out("ior");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_lor()
*/
public void visit_lor() {
out("lor");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ixor()
*/
public void visit_ixor() {
out("ixor");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_lxor()
*/
public void visit_lxor() {
out("lxor");
}
/**
* @param index
* @param incValue
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_iinc(int, int)
*/
public void visit_iinc(int index, int incValue) {
out("iinc index=" + index + ", incr=" + incValue);
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_i2l()
*/
public void visit_i2l() {
out("i2l");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_i2f()
*/
public void visit_i2f() {
out("i2f");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_i2d()
*/
public void visit_i2d() {
out("i2d");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_l2i()
*/
public void visit_l2i() {
out("l2i");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_l2f()
*/
public void visit_l2f() {
out("l2f");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_l2d()
*/
public void visit_l2d() {
out("l2d");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_f2i()
*/
public void visit_f2i() {
out("f2i");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_f2l()
*/
public void visit_f2l() {
out("f2l");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_f2d()
*/
public void visit_f2d() {
out("f2d");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_d2i()
*/
public void visit_d2i() {
out("d2i");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_d2l()
*/
public void visit_d2l() {
out("d2l");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_d2f()
*/
public void visit_d2f() {
out("d2f");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_i2b()
*/
public void visit_i2b() {
out("i2b");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_i2c()
*/
public void visit_i2c() {
out("i2c");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_i2s()
*/
public void visit_i2s() {
out("i2s");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_lcmp()
*/
public void visit_lcmp() {
out("lcmp");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_fcmpl()
*/
public void visit_fcmpl() {
out("fcmpl");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_fcmpg()
*/
public void visit_fcmpg() {
out("fcmpg");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_dcmpl()
*/
public void visit_dcmpl() {
out("dcmpl");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_dcmpg()
*/
public void visit_dcmpg() {
out("dcmpg");
}
/**
* @param address
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ifeq(int)
*/
public void visit_ifeq(int address) {
out("ifeq " + address);
}
/**
* @param address
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ifne(int)
*/
public void visit_ifne(int address) {
out("ifne " + address);
}
/**
* @param address
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_iflt(int)
*/
public void visit_iflt(int address) {
out("iflt " + address);
}
/**
* @param address
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ifge(int)
*/
public void visit_ifge(int address) {
out("ifge " + address);
}
/**
* @param address
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ifgt(int)
*/
public void visit_ifgt(int address) {
out("ifgt " + address);
}
/**
* @param address
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ifle(int)
*/
public void visit_ifle(int address) {
out("ifle " + address);
}
/**
* @param address
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_if_icmpeq(int)
*/
public void visit_if_icmpeq(int address) {
out("if_icmpeq " + address);
}
/**
* @param address
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_if_icmpne(int)
*/
public void visit_if_icmpne(int address) {
out("if_icmpne " + address);
}
/**
* @param address
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_if_icmplt(int)
*/
public void visit_if_icmplt(int address) {
out("if_icmplt " + address);
}
/**
* @param address
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_if_icmpge(int)
*/
public void visit_if_icmpge(int address) {
out("if_icmpge " + address);
}
/**
* @param address
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_if_icmpgt(int)
*/
public void visit_if_icmpgt(int address) {
out("if_icmpgt " + address);
}
/**
* @param address
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_if_icmple(int)
*/
public void visit_if_icmple(int address) {
out("if_icmple " + address);
}
/**
* @param address
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_if_acmpeq(int)
*/
public void visit_if_acmpeq(int address) {
out("if_acmpeq " + address);
}
/**
* @param address
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_if_acmpne(int)
*/
public void visit_if_acmpne(int address) {
out("if_acmpne " + address);
}
/**
* @param address
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_goto(int)
*/
public void visit_goto(int address) {
out("goto " + address);
}
/**
* @param address
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_jsr(int)
*/
public void visit_jsr(int address) {
out("jsr " + address);
}
/**
* @param index
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ret(int)
*/
public void visit_ret(int index) {
out("ret " + index);
}
/**
* @param defValue
* @param lowValue
* @param highValue
* @param addresses
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_tableswitch(int, int, int, int[])
*/
public void visit_tableswitch(int defValue, int lowValue, int highValue, int[] addresses) {
out("tableswitch def=" + defValue);
for (int i = 0; i < addresses.length; i++) {
out("\t" + (lowValue + i) + "\t-> " + addresses[i]);
}
}
/**
* @param defValue
* @param matchValues
* @param addresses
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_lookupswitch(int, int[], int[])
*/
public void visit_lookupswitch(int defValue, int[] matchValues, int[] addresses) {
out("lookupswitch def=" + defValue);
for (int i = 0; i < addresses.length; i++) {
out("\t" + matchValues[i] + "\t-> " + addresses[i]);
}
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ireturn()
*/
public void visit_ireturn() {
out("ireturn");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_lreturn()
*/
public void visit_lreturn() {
out("lreturn");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_freturn()
*/
public void visit_freturn() {
out("freturn");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_dreturn()
*/
public void visit_dreturn() {
out("dreturn");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_areturn()
*/
public void visit_areturn() {
out("areturn");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_return()
*/
public void visit_return() {
out("return");
}
/**
* @param fieldRef
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_getstatic(org.jnode.vm.classmgr.VmConstFieldRef)
*/
public void visit_getstatic(VmConstFieldRef fieldRef) {
out("getstatic " + fieldRef);
}
/**
* @param fieldRef
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_putstatic(org.jnode.vm.classmgr.VmConstFieldRef)
*/
public void visit_putstatic(VmConstFieldRef fieldRef) {
out("putstatic " + fieldRef);
}
/**
* @param fieldRef
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_getfield(org.jnode.vm.classmgr.VmConstFieldRef)
*/
public void visit_getfield(VmConstFieldRef fieldRef) {
out("getfield " + fieldRef);
}
/**
* @param fieldRef
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_putfield(org.jnode.vm.classmgr.VmConstFieldRef)
*/
public void visit_putfield(VmConstFieldRef fieldRef) {
out("putfield " + fieldRef);
}
/**
* @param methodRef
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_invokevirtual(org.jnode.vm.classmgr.VmConstMethodRef)
*/
public void visit_invokevirtual(VmConstMethodRef methodRef) {
out("invokevirtual " + methodRef);
}
/**
* @param methodRef
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_invokespecial(org.jnode.vm.classmgr.VmConstMethodRef)
*/
public void visit_invokespecial(VmConstMethodRef methodRef) {
out("invokespecial " + methodRef);
}
/**
* @param methodRef
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_invokestatic(org.jnode.vm.classmgr.VmConstMethodRef)
*/
public void visit_invokestatic(VmConstMethodRef methodRef) {
out("invokestatic " + methodRef);
}
/**
* @param methodRef
* @param count
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_invokeinterface(org.jnode.vm.classmgr.VmConstIMethodRef, int)
*/
public void visit_invokeinterface(VmConstIMethodRef methodRef, int count) {
out("invokeinterface " + methodRef + ", count=" + count);
}
/**
* @param clazz
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_new(org.jnode.vm.classmgr.VmConstClass)
*/
public void visit_new(VmConstClass clazz) {
out("new " + clazz);
}
/**
* @param type
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_newarray(int)
*/
public void visit_newarray(int type) {
out("newarray " + type);
}
/**
* @param clazz
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_anewarray(org.jnode.vm.classmgr.VmConstClass)
*/
public void visit_anewarray(VmConstClass clazz) {
out("anewarray " + clazz);
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_arraylength()
*/
public void visit_arraylength() {
out("arraylength");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_athrow()
*/
public void visit_athrow() {
out("athrow");
}
/**
* @param clazz
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_checkcast(org.jnode.vm.classmgr.VmConstClass)
*/
public void visit_checkcast(VmConstClass clazz) {
out("checkcast " + clazz);
}
/**
* @param clazz
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_instanceof(org.jnode.vm.classmgr.VmConstClass)
*/
public void visit_instanceof(VmConstClass clazz) {
out("instanceof " + clazz);
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_monitorenter()
*/
public void visit_monitorenter() {
out("monitorenter");
}
/**
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_monitorexit()
*/
public void visit_monitorexit() {
out("monitorexit");
}
/**
* @param clazz
* @param dimensions
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_multianewarray(org.jnode.vm.classmgr.VmConstClass, int)
*/
public void visit_multianewarray(VmConstClass clazz, int dimensions) {
out("multianewarray " + clazz + ' ' + dimensions);
}
/**
* @param address
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ifnull(int)
*/
public void visit_ifnull(int address) {
out("ifnull " + address);
}
/**
* @param address
* @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ifnonnull(int)
*/
public void visit_ifnonnull(int address) {
out("ifnonnull " + address);
}
public void out(String line) {
out.print(indent);
out.print(address);
out.print(":\t");
out.println(line);
}
public void indent() {
indent += "\t";
}
public void unindent() {
indent = indent.substring(0, indent.length() - 1);
}
protected void out(Object obj) {
String str = obj.toString();
out(str);
}
}