Пример #1
0
  /**
   * @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();
    }
  }