package org.codehaus.groovy.gjit;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.tree.AbstractInsnNode;
import org.objectweb.asm.tree.FieldInsnNode;
import org.objectweb.asm.tree.IincInsnNode;
import org.objectweb.asm.tree.InsnNode;
import org.objectweb.asm.tree.IntInsnNode;
import org.objectweb.asm.tree.JumpInsnNode;
import org.objectweb.asm.tree.LdcInsnNode;
import org.objectweb.asm.tree.MethodInsnNode;
import org.objectweb.asm.tree.TypeInsnNode;
import org.objectweb.asm.tree.VarInsnNode;
import org.objectweb.asm.util.AbstractVisitor;
public class DebugUtils {
public static boolean debug = false;
public static boolean dump = false;
public static void toggle() {
debug = !debug;
dump = !dump;
}
public static void dump(AbstractInsnNode insn) {
if(debug == false) return;
if(dump == false) return;
int opcode = insn.getOpcode();
if(insn.getOpcode() != -1) System.out.print(":: " + AbstractVisitor.OPCODES[opcode]);
if(insn instanceof InsnNode) {
System.out.println();
} else if(insn instanceof IntInsnNode) {
int operand = ((IntInsnNode)insn).operand;
System.out.print(' ');
System.out.println(opcode == Opcodes.NEWARRAY ? AbstractVisitor.TYPES[operand] : Integer.toString(operand));
} else if(insn instanceof VarInsnNode) {
int var = ((VarInsnNode)insn).var;
System.out.print(' ');
System.out.println(var);
} else if(insn instanceof TypeInsnNode) {
String desc = ((TypeInsnNode)insn).desc;
System.out.print(' ');
System.out.println(desc);
} else if(insn instanceof FieldInsnNode) {
System.out.print(' ');
System.out.print(((FieldInsnNode)insn).owner);
System.out.print('.');
System.out.print(((FieldInsnNode)insn).name);
System.out.print(" : ");
System.out.println(((FieldInsnNode)insn).desc);
} else if(insn instanceof MethodInsnNode){
System.out.print(' ');
System.out.print(((MethodInsnNode)insn).owner);
System.out.print('.');
System.out.print(((MethodInsnNode)insn).name);
System.out.println(((MethodInsnNode)insn).desc);
} else if(insn instanceof JumpInsnNode) {
System.out.print(' ');
System.out.println(((JumpInsnNode)insn).label.getLabel());
} else if(insn instanceof LdcInsnNode) {
System.out.print(' ');
System.out.println(((LdcInsnNode)insn).cst);
} else if(insn instanceof IincInsnNode) {
System.out.print(' ');
System.out.print(((IincInsnNode)insn).var);
System.out.print(' ');
System.out.println(((IincInsnNode)insn).incr);
}
}
public static void println(Object o) {
if(debug == false) return;
System.out.println(o.toString());
}
public static void print(Object o) {
if(debug == false) return;
System.out.print(o);
}
public static void println() {
if(debug == false) return;
System.out.println();
}
}