modules/asc/src/java/macromedia/abc/Printer.java (1,093 lines of code) (raw):

/* * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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 macromedia.abc; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import static macromedia.abc.Opcodes.*; import static macromedia.asc.embedding.avmplus.ActionBlockConstants.*; public class Printer { /** * Usage: macromedia.abc.Printer -c mx.core:UIObject -m setColor -l 10-15 -b foo.abc * * @param args command-line arguments */ public static void main(String[] args) throws Throwable { if (args.length == 0) { System.err.println("Usage: abcdump [-b] [-c mx.core:UIObject] [-m setColor] [-l 10-15] foo.abc"); System.err.println(); System.err.println(" -b: include opcodes in the output"); System.err.println(" -c className: restrict output to the specified class"); System.err.println(" -m methodName: restrict output to the specified method"); System.err.println(" -l startLine[-endLine]: restrict output to the specified line(s)"); return; } for (int i = 0, argc = args.length; i < argc; i++) { if ("-c".equals(args[i])) { className = args[i + 1].intern(); i++; } else if ("-m".equals(args[i])) { methodName = args[i + 1].intern(); i++; } else if ("-l".equals(args[i])) { String lineRange = args[i + 1]; int index = lineRange.indexOf("-"); if (index != -1) { startLine = Integer.parseInt(lineRange.substring(0, index)); endLine = Integer.parseInt(lineRange.substring(index + 1)); } else { startLine = Integer.parseInt(lineRange); endLine = startLine + 1; } i++; } else if ("-b".equals(args[i])) { showOpcodes = true; } else if (i == argc - 1) { fileName = args[i]; } } byte[] bytecodes = readBytes(new File(fileName)); BytecodeBuffer in = new BytecodeBuffer(bytecodes); decoder = new Decoder(in); processScripts(); } private static Decoder decoder; private static String fileName; private static boolean showOpcodes; private static String className; private static String methodName; private static int startLine; private static int endLine; private static String currentClass; private static String currentMethod; private static int currentLine; private static void processScripts() throws DecoderException { Decoder.ScriptInfo scriptInfo = decoder.scriptInfo; Visitor v = new ABCVisitor(decoder); for (int i = 0, size = scriptInfo.size(); i < size; i++) { scriptInfo.decode(i, v); } } static class ABCVisitor extends DefaultVisitor { ABCVisitor(Decoder decoder) { super(decoder); } public void methodInfo(QName returnType, QName[] paramTypes, String nativeName, int flags, Object[] values, String[] param_names) { print("<info name='" + nativeName + "' paramTypes='"); for (int i = 0, length = paramTypes != null ? paramTypes.length : 0; i < length; i++) { print(paramTypes[i] + " "); } print("'"); if (returnType != null) { print(" returnType='" + returnType + "'"); } print(" paramNames='"); for (int i = 0, length = param_names != null ? param_names.length : 0; i < length; i++) { print(param_names[i] + " "); } print("'"); println("/>"); } public void metadata(String name, String[] keys, String[] values) { println("<metadata/>"); } public void beginVar(QName name, int slotID, QName type, Object value) { print("<var name='" + name + "'"); if (type != null) { print(" type='" + type + "'"); } println(">"); if (value != null) { println("<value>" + value + "</value>"); } } public void endVar(QName name) { println("</var>"); } public void beginConst(QName name, int slotID, QName type, Object value) { print("<const name='" + name + "'"); if (type != null) { print(" type='" + type + "'"); } println(">"); if (value != null) { println("<value>" + value + "</value>"); } } public void endConst(QName name) { println("</const>"); } public void beginGetter(int methodInfo, QName name, int dispID, int attr) { if (methodName != null) { currentMethod = name.toString().intern(); } println("<getter name='" + name + "' dispID='" + dispID + "' attr='" + attr + "'>"); } public void endGetter(QName name) { println("</getter>"); if (methodName != null) { currentMethod = null; } } public void beginSetter(int methodInfo, QName name, int dispID, int attr) { if (methodName != null) { currentMethod = name.toString().intern(); } println("<setter name='" + name + "' dispID='" + dispID + "' attr='" + attr + "'>"); } public void endSetter(QName name) { println("</setter>"); if (methodName != null) { currentMethod = null; } } public void beginMethod(int methodInfo, QName name, int dispID, int attr) { if (methodName != null) { currentMethod = name.toString().intern(); } println("<method name='" + name + "' dispID='" + dispID + "' attr='" + attr + "'>"); } public void endMethod(QName name) { println("</method>"); if (methodName != null) { currentMethod = null; } } public void beginClass(QName name, int slotID) { if (className != null) { currentClass = name.toString().intern(); } println("<class name='" + name + "' slot='" + slotID + "'>"); } public void endClass(QName name) { println("</class>"); if (className != null) { currentClass = null; } } public void beginIInit(int methodInfo) { println("<iinit>"); } public void endIInit() { println("</iinit>"); } public void beginCInit(int methodInfo) { println("<cinit>"); } public void endCInit() { println("</cinit>"); } public void beginFunction(int methodInfo, QName name, int slotID) { println("<function name='" + name + "'>"); } public void endFunction(QName name) { println("</function>"); } public void instanceInfo(QName name, QName superName, MultiName[] interfaces) { print("<info type='" + name + "'"); if (superName != null) { print(" superType='" + superName + "'"); } println("/>"); } public void classInfo(QName name) { } public void beginABC() { println("<abc>"); } public void endABC() { println("</abc>"); } public void beginBody(int methodID, int codeStart, long codeLength) { println("<![CDATA["); } public void endBody() { println("]]>"); } private Object getConstantStringValue(int index) { try { return decoder.constantPool.getString(index); } catch (DecoderException ex) { return "decoder exception..."; } } private Object getConstantNamespaceValue(int index) { try { return decoder.constantPool.getNamespaceName(index); } catch (DecoderException ex) { return "decoder exception..."; } } private Object getConstantIntValue(int index) { return decoder.constantPool.getInt(index); } private Object getConstantUIntValue(int index) { return decoder.constantPool.getLong(index); } /*private Object getConstantDoubleValue(int index) { try { return decoder.constantPool.getDouble(index); } catch (DecoderException ex) { return "decoder exception..."; } }*/ private Object getConstantMultinameValue(int index) { try { return decoder.constantPool.getGeneralMultiname(index); } catch (DecoderException ex) { return "decoder exception..."; } } public void target(int pos) { System.out.println("target "+pos); } public void OP_returnvoid() { printOpcode(opNames[OP_returnvoid]); } public void OP_returnvalue() { printOpcode(opNames[OP_returnvalue]); } public void OP_nop() { printOpcode(opNames[OP_nop]); } public void OP_bkpt() { printOpcode(opNames[OP_bkpt]); } public void OP_timestamp() { printOpcode(opNames[OP_timestamp]); } public void OP_debugline(int linenum) { if (startLine != 0 && endLine != 0) { currentLine = linenum; } printOpcode(System.getProperty("line.separator") + opNames[OP_debugline] + " linenum=" + linenum); } public void OP_bkptline() { printOpcode(opNames[OP_bkptline]); } public void OP_debug(int di_local, int index, int slot, int linenum) { printOpcode(opNames[OP_debug] + " di_local=" + di_local + " index=" + index + " slot=" + slot + " linenum=" + linenum); } public void OP_debugfile(int index) { printOpcode(opNames[OP_debugfile] + " cpool[" + index + "]" + " = " + getConstantStringValue(index)); } public void OP_jump(int jump, int pos) { printOpcode(opNames[OP_jump] + " " + jump); } public void OP_pushnull() { printOpcode(opNames[OP_pushnull]); } public void OP_pushundefined() { printOpcode(opNames[OP_pushundefined]); } public void OP_pushstring(int index) { printOpcode(opNames[OP_pushstring] + " cpool_string[" + index + "]" + " = " + getConstantStringValue(index)); } public void OP_pushnamespace(int index) { printOpcode(opNames[OP_pushnamespace] + " cpool_namespace[" + index + "]" + " = " + getConstantNamespaceValue(index)); } public void OP_pushint(int index) { printOpcode(opNames[OP_pushint] + " cpool_int[" + index + "]" + " = " + getConstantIntValue(index)); } public void OP_pushuint(int index) { printOpcode(opNames[OP_pushuint] + " cpool_uint[" + index + "]" + " = " + getConstantUIntValue(index)); } public void OP_pushdouble(int index) { printOpcode(opNames[OP_pushdouble] + " cpool_double[" + index + "]"); } public void OP_pushdecimal(int index) { printOpcode(opNames[OP_pushdouble] + " cpool_decimal[" + index + "]"); } public void OP_getlocal(int index) { printOpcode(opNames[OP_getlocal] + " r" + index); } public void OP_pushtrue() { printOpcode(opNames[OP_pushtrue]); } public void OP_pushfalse() { printOpcode(opNames[OP_pushfalse]); } public void OP_pushnan() { printOpcode(opNames[OP_pushnan]); } public void OP_pushdnan() { printOpcode(opNames[OP_pushdnan]); } public void OP_pop() { printOpcode(opNames[OP_pop]); } public void OP_dup() { printOpcode(opNames[OP_dup]); } public void OP_swap() { printOpcode(opNames[OP_swap]); } public void OP_convert_s() { printOpcode(opNames[OP_convert_s]); } public void OP_esc_xelem() { printOpcode(opNames[OP_esc_xelem]); } public void OP_esc_xattr() { printOpcode(opNames[OP_esc_xattr]); } public void OP_checkfilter() { printOpcode(opNames[OP_checkfilter]); } public void OP_convert_d() { printOpcode(opNames[OP_convert_d]); } public void OP_convert_b() { printOpcode(opNames[OP_convert_b]); } public void OP_convert_o() { printOpcode(opNames[OP_convert_o]); } public void OP_convert_m() { printOpcode(opNames[OP_convert_m]); } public void OP_convert_m_p(int param) { printOpcode(opNames[OP_convert_m_p] + " p" + param); } public void OP_negate() { printOpcode(opNames[OP_negate]); } public void OP_negate_p(int param) { printOpcode(opNames[OP_negate_p] + " p" + param); } public void OP_negate_i() { printOpcode(opNames[OP_negate_i]); } public void OP_increment() { printOpcode(opNames[OP_increment]); } public void OP_increment_p(int param) { printOpcode(opNames[OP_increment_p] + " p" + param); } public void OP_increment_i() { printOpcode(opNames[OP_increment_i]); } public void OP_inclocal(int index) { printOpcode(opNames[OP_inclocal] + " r" + index); } public void OP_inclocal_p(int param, int index) { printOpcode(opNames[OP_inclocal] + " p" + param + " r" + index); } public void OP_kill(int index) { printOpcode(opNames[OP_kill] + " r" + index); } public void OP_inclocal_i(int index) { printOpcode(opNames[OP_inclocal_i] + " r" + index); } public void OP_decrement() { printOpcode(opNames[OP_decrement]); } public void OP_decrement_p(int param) { printOpcode(opNames[OP_decrement_p] + " p" + param); } public void OP_decrement_i() { printOpcode(opNames[OP_decrement_i]); } public void OP_declocal(int index) { printOpcode(opNames[OP_declocal] + " r" + index); } public void OP_declocal_p(int param, int index) { printOpcode(opNames[OP_declocal_p] + " p" + param + " r" + index); } public void OP_declocal_i(int index) { printOpcode(opNames[OP_declocal_i] + " r" + index); } public void OP_typeof() { printOpcode(opNames[OP_typeof]); } public void OP_not() { printOpcode(opNames[OP_not]); } public void OP_bitnot() { printOpcode(opNames[OP_bitnot]); } public void OP_setlocal(int index) { printOpcode(opNames[OP_setlocal] + " r" + index); } public void OP_add() { printOpcode(opNames[OP_add]); } public void OP_add_p(int param) { printOpcode(opNames[OP_add] + " p" + param); } public void OP_add_i() { printOpcode(opNames[OP_add_i]); } public void OP_subtract() { printOpcode(opNames[OP_subtract]); } public void OP_subtract_p(int param) { printOpcode(opNames[OP_subtract_p] + " p" + param); } public void OP_subtract_i() { printOpcode(opNames[OP_subtract_i]); } public void OP_multiply() { printOpcode(opNames[OP_multiply]); } public void OP_multiply_p(int param) { printOpcode(opNames[OP_multiply_p] + " p" + param); } public void OP_multiply_i() { printOpcode(opNames[OP_multiply_i]); } public void OP_divide() { printOpcode(opNames[OP_divide]); } public void OP_divide_p(int param) { printOpcode(opNames[OP_divide_p] + " p" + param); } public void OP_modulo() { printOpcode(opNames[OP_modulo]); } public void OP_modulo_p(int param) { printOpcode(opNames[OP_modulo_p] + " p" + param); } public void OP_lshift() { printOpcode(opNames[OP_lshift]); } public void OP_rshift() { printOpcode(opNames[OP_rshift]); } public void OP_urshift() { printOpcode(opNames[OP_urshift]); } public void OP_bitand() { printOpcode(opNames[OP_bitand]); } public void OP_bitor() { printOpcode(opNames[OP_bitor]); } public void OP_bitxor() { printOpcode(opNames[OP_bitxor]); } public void OP_equals() { printOpcode(opNames[OP_equals]); } public void OP_strictequals() { printOpcode(opNames[OP_strictequals]); } public void OP_lookupswitch(int defaultPos, int[] casePos, int pos, int p2) { String caseList = ""; for (int i = 0, len = casePos.length; i < len; i++) { caseList += casePos[i] + ","; } printOpcode(opNames[OP_lookupswitch] + " defaultPos=" + defaultPos + " casePos=" + caseList); } public void OP_iftrue(int offset, int pos) { printOpcode(opNames[OP_iftrue] + " " + offset); } public void OP_iffalse(int offset, int pos) { printOpcode(opNames[OP_iffalse] + " " + offset); } public void OP_ifeq(int offset, int pos) { printOpcode(opNames[OP_ifeq] + " " + offset); } public void OP_ifne(int offset, int pos) { printOpcode(opNames[OP_ifne] + " " + offset); } public void OP_ifstricteq(int offset, int pos) { printOpcode(opNames[OP_ifstricteq] + " " + offset); } public void OP_ifstrictne(int offset, int pos) { printOpcode(opNames[OP_ifstrictne] + " " + offset); } public void OP_iflt(int offset, int pos) { printOpcode(opNames[OP_iflt] + " " + offset); } public void OP_ifle(int offset, int pos) { printOpcode(opNames[OP_ifle] + " " + offset); } public void OP_ifgt(int offset, int pos) { printOpcode(opNames[OP_ifgt] + " " + offset); } public void OP_ifge(int offset, int pos) { printOpcode(opNames[OP_ifge] + " " + offset); } public void OP_lessthan() { printOpcode(opNames[OP_lessthan]); } public void OP_lessequals() { printOpcode(opNames[OP_lessequals]); } public void OP_greaterthan() { printOpcode(opNames[OP_greaterthan]); } public void OP_greaterequals() { printOpcode(opNames[OP_greaterequals]); } public void OP_newobject(int size) { printOpcode(opNames[OP_newobject] + " size=" + size); } public void OP_newarray(int size) { printOpcode(opNames[OP_newarray] + " size=" + size); } public void OP_getproperty(int index) { printOpcode(opNames[OP_getproperty] + " cpool[" + index + "]" + " = " + getConstantMultinameValue(index)); } public void OP_setproperty(int index) { printOpcode(opNames[OP_setproperty] + " cpool[" + index + "]" + " = " + getConstantMultinameValue(index)); } public void OP_initproperty(int index) { printOpcode(opNames[OP_initproperty] + " cpool[" + index + "]" + " = " + getConstantMultinameValue(index)); } public void OP_getdescendants(int index) { printOpcode(opNames[OP_getdescendants] + " cpool[" + index + "]" + " = " + getConstantMultinameValue(index)); } public void OP_findpropstrict(int index) { printOpcode(opNames[OP_findpropstrict] + " cpool[" + index + "]" + " = " + getConstantMultinameValue(index)); } public void OP_findproperty(int index) { printOpcode(opNames[OP_findproperty] + " cpool[" + index + "]" + " = " + getConstantMultinameValue(index)); } public void OP_finddef(int index) { printOpcode(opNames[OP_finddef] + " cpool[" + index + "]" + " = " + getConstantMultinameValue(index)); } public void OP_getlex(int index) { printOpcode(opNames[OP_getlex] + " cpool[" + index + "]" + " = " + getConstantMultinameValue(index)); } public void OP_nextname() { printOpcode(opNames[OP_nextname]); } public void OP_nextvalue() { printOpcode(opNames[OP_nextvalue]); } public void OP_hasnext() { printOpcode(opNames[OP_hasnext]); } public void OP_hasnext2(int objectRegister, int indexRegister) { printOpcode(opNames[OP_hasnext2] + " " + objectRegister + " " + indexRegister); } public void OP_deleteproperty(int index) { printOpcode(opNames[OP_deleteproperty] + " cpool[" + index + "]" + " = " + getConstantMultinameValue(index)); } public void OP_setslot(int index) { printOpcode(opNames[OP_setslot] + " " + index); } public void OP_getslot(int index) { printOpcode(opNames[OP_getslot] + " " + index); } public void OP_setglobalslot(int index) { printOpcode(opNames[OP_setglobalslot] + " " + index); } public void OP_getglobalslot(int index) { printOpcode(opNames[OP_getglobalslot] + " " + index); } public void OP_call(int size) { printOpcode(opNames[OP_call] + " size=" + size); } public void OP_construct(int size) { printOpcode(opNames[OP_construct] + " size=" + size); } public void OP_applytype(int size) { printOpcode(opNames[OP_applytype] + " size=" + size); } public void OP_newfunction(int id) { printOpcode(opNames[OP_newfunction] + " function=" + id); } public void OP_newclass(int id) { printOpcode(opNames[OP_newclass] + " class=" + id); } public void OP_callstatic(int id, int argc) { printOpcode(opNames[OP_callstatic] + " method=" + id + " argc=" + argc); } public void OP_callmethod(int id, int argc) { printOpcode(opNames[OP_callmethod] + " dispid=" + id + " argc=" + argc); } public void OP_callproperty(int index, int argc) { printOpcode(opNames[OP_callproperty] + " cpool[" + index + "]" + " = " + getConstantMultinameValue(index) + " argc=" + argc); } public void OP_callproplex(int index, int argc) { printOpcode(opNames[OP_callproplex] + " cpool[" + index + "]" + " = " + getConstantMultinameValue(index) + " argc=" + argc); } public void OP_constructprop(int index, int argc) { printOpcode(opNames[OP_constructprop] + " cpool[" + index + "]" + " = " + getConstantMultinameValue(index) + " argc=" + argc); } public void OP_callsuper(int index, int argc) { printOpcode(opNames[OP_callsuper] + " cpool[" + index + "]" + " = " + getConstantMultinameValue(index) + " argc=" + argc); } public void OP_getsuper(int index) { printOpcode(opNames[OP_getsuper] + " cpool[" + index + "]" + " = " + getConstantMultinameValue(index)); } public void OP_setsuper(int index) { printOpcode(opNames[OP_setsuper] + " cpool[" + index + "]" + " = " + getConstantMultinameValue(index)); } public void OP_constructsuper(int argc) { printOpcode(opNames[OP_constructsuper] + " argc=" + argc); } public void OP_pushshort(int n) { printOpcode(opNames[OP_pushshort] + " " + n); } public void OP_astype(int index) { printOpcode(opNames[OP_astype] + " cpool[" + index + "]" + " = " + getConstantMultinameValue(index)); } public void OP_astypelate() { printOpcode(opNames[OP_astypelate]); } public void OP_coerce(int index) { printOpcode(opNames[OP_coerce] + " cpool[" + index + "]" + " = " + getConstantMultinameValue(index)); } public void OP_coerce_b() { printOpcode(opNames[OP_coerce_b]); } public void OP_coerce_o() { printOpcode(opNames[OP_coerce_o]); } public void OP_coerce_a() { printOpcode(opNames[OP_coerce_a]); } public void OP_coerce_i() { printOpcode(opNames[OP_coerce_i]); } public void OP_coerce_u() { printOpcode(opNames[OP_coerce_u]); } public void OP_coerce_d() { printOpcode(opNames[OP_coerce_d]); } public void OP_coerce_s() { printOpcode(opNames[OP_coerce_s]); } public void OP_istype(int index) { printOpcode(opNames[OP_istype] + " cpool[" + index + "]" + " = " + getConstantMultinameValue(index)); } public void OP_istypelate() { printOpcode(opNames[OP_istypelate]); } public void OP_pushbyte(int n) { printOpcode(opNames[OP_pushbyte] + " " + n); } public void OP_getscopeobject(int index) { printOpcode(opNames[OP_getscopeobject] + " index=" + index); } public void OP_pushscope() { printOpcode(opNames[OP_pushscope]); } public void OP_popscope() { printOpcode(opNames[OP_popscope]); } public void OP_convert_i() { printOpcode(opNames[OP_convert_i]); } public void OP_convert_u() { printOpcode(opNames[OP_convert_u]); } public void OP_throw() { printOpcode(opNames[OP_throw]); } public void OP_instanceof() { printOpcode(opNames[OP_instanceof]); } public void OP_in() { printOpcode(opNames[OP_in]); } public void OP_dxns(int index) { printOpcode(opNames[OP_dxns] + " cpool[" + index + "]" + " = " + getConstantMultinameValue(index)); } public void OP_dxnslate() { printOpcode(opNames[OP_dxnslate]); } public void OP_ifnlt(int offset, int pos) { printOpcode(opNames[OP_ifnlt] + " " + offset); } public void OP_ifnle(int offset, int pos) { printOpcode(opNames[OP_ifnle] + " " + offset); } public void OP_ifngt(int offset, int pos) { printOpcode(opNames[OP_ifngt] + " " + offset); } public void OP_ifnge(int offset, int pos) { printOpcode(opNames[OP_ifnge] + " " + offset); } public void OP_pushwith() { printOpcode(opNames[OP_pushwith]); } public void OP_newactivation() { printOpcode(opNames[OP_newactivation]); } public void OP_newcatch(int index) { printOpcode(opNames[OP_newcatch] + " " + index); } public void OP_deldescendants() { printOpcode(opNames[OP_deldescendants]); } public void OP_getglobalscope() { printOpcode(opNames[OP_getglobalscope]); } public void OP_getlocal0() { printOpcode(opNames[OP_getlocal0]); } public void OP_getlocal1() { printOpcode(opNames[OP_getlocal1]); } public void OP_getlocal2() { printOpcode(opNames[OP_getlocal2]); } public void OP_getlocal3() { printOpcode(opNames[OP_getlocal3]); } public void OP_setlocal0() { printOpcode(opNames[OP_setlocal0]); } public void OP_setlocal1() { printOpcode(opNames[OP_setlocal1]); } public void OP_setlocal2() { printOpcode(opNames[OP_setlocal2]); } public void OP_setlocal3() { printOpcode(opNames[OP_setlocal3]); } public void OP_label() { printOpcode(opNames[OP_label]); } public void OP_pushconstant(int id) { printOpcode(opNames[OP_pushuninitialized] + " " + id); } public void OP_callsupervoid(int index, int argc) { printOpcode(opNames[OP_callsupervoid] + " cpool[" + index + "]" + " = " + getConstantMultinameValue(index) + " argc=" + argc); } public void OP_callpropvoid(int index, int argc) { printOpcode(opNames[OP_callpropvoid] + " cpool[" + index + "]" + " = " + getConstantMultinameValue(index) + " argc=" + argc); } public void OP_li8() { printOpcode(opNames[OP_li8]); } public void OP_li16() { printOpcode(opNames[OP_li16]); } public void OP_li32() { printOpcode(opNames[OP_li32]); } public void OP_lf32() { printOpcode(opNames[OP_lf32]); } public void OP_lf64() { printOpcode(opNames[OP_lf64]); } public void OP_si8() { printOpcode(opNames[OP_si8]); } public void OP_si16() { printOpcode(opNames[OP_si16]); } public void OP_si32() { printOpcode(opNames[OP_si32]); } public void OP_sf32() { printOpcode(opNames[OP_sf32]); } public void OP_sf64() { printOpcode(opNames[OP_sf64]); } public void OP_sxi1() { printOpcode(opNames[OP_sxi1]); } public void OP_sxi8() { printOpcode(opNames[OP_sxi8]); } public void OP_sxi16() { printOpcode(opNames[OP_sxi16]); } } private static void print(String s) { if (currentClass == className && currentMethod == methodName) { System.out.print(s); } } private static void println(String s) { if (currentClass == className && currentMethod == methodName) { System.out.println(s); } } private static void printOpcode(String s) { if (currentClass == className && currentMethod == methodName && ((startLine == 0 && endLine == 0) || (currentLine >= startLine && currentLine < endLine)) && showOpcodes) { System.out.println(s); } } private static byte[] readBytes(File path) throws IOException { BufferedInputStream in = null; try { in = new BufferedInputStream(new FileInputStream(path)); byte[] a = new byte[in.available()]; in.read(a); return a; } finally { if (in != null) { try { in.close(); } catch (IOException ex) { } } } } }