/** * @see * org.epistem.jvm.code.InstructionVisitor.Delegator#visitCall(org.epistem.jvm.code.instructions.MethodCall) */ @Override public void visitCall(MethodCall call) { // only intercept calls to AVM2_ASM if (!call.owner.equals(AVM2_ASM.class.getName())) { super.visitCall(call); return; } String name = call.signature.name; CallbackInstruction callback = null; if (name.startsWith("append")) callback = append(name); else if (name.startsWith("pop")) callback = nothing(name); else if (name.startsWith("push")) callback = nothing(name); else if (name.startsWith("retype")) callback = nothing(name); else if (name.startsWith("trace")) callback = trace(name); else if (name.startsWith("equal")) callback = equal(name); else if (name.startsWith("setPublicProperty")) callback = setPubProp(name); else if (name.startsWith("getPublicProperty")) callback = getPubProp(name); else if (name.startsWith("callVoidFunction")) callback = callVoid(name); else if (name.startsWith("callFunction")) callback = call(name); if (callback != null) { call.list().insertAfter(call, callback); call.remove(); } }