package org.reldb.rel.v0.vm; import java.util.Vector; import java.util.HashSet; public class Dumper { private HashSet<String> printed; public void dumpMachineCode(Instruction code[]) { int address = 0; for (Instruction op : code) { if (op == null) System.out.print("<NULL>"); else if (op instanceof Instruction) { Instruction instruction = (Instruction)op; System.out.println(); System.out.print(address + ": " + instruction.toString()); } else System.out.print(op.toString()); address++; System.out.print(" "); } } private void dump(Operator operator) { System.out.print("--------" + operator.toString() + "--------"); Vector<Operator> operators = new Vector<Operator>(); if (printed.contains(operator.toString())) return; printed.add(operator.toString()); dumpMachineCode(operator.getExecutableCode()); System.out.println(); System.out.println("-----------------"); for (Operator code : operators) { dump(code); } } public void dumpMachineCode(Instruction code[], String prompt) { System.out.print("--------" + prompt + "--------"); dumpMachineCode(code); System.out.println(); System.out.println("-----------------"); } /** Dump machine code. */ public void dumpMachineCode(Operator operator) { printed = new HashSet<String>(); dump(operator); } }