org.objectweb.asm.tree.InsnNode.<init>()方法的使用及代码示例

x33g5p2x  于2022-01-21 转载在 其他  
字(7.6k)|赞(0)|评价(0)|浏览(97)

本文整理了Java中org.objectweb.asm.tree.InsnNode.<init>()方法的一些代码示例,展示了InsnNode.<init>()的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。InsnNode.<init>()方法的具体详情如下:
包路径:org.objectweb.asm.tree.InsnNode
类名称:InsnNode
方法名:<init>

InsnNode.<init>介绍

[英]Constructs a new InsnNode.
[中]构造一个新的InsnNode。

代码示例

代码示例来源:origin: jphp-group/jphp

void makePop(StackItem.Type type) {
  switch (type.size()) {
    case 2:
      code.add(new InsnNode(POP2));
      break;
    case 1:
      code.add(new InsnNode(POP));
      break;
    default:
      throw new IllegalArgumentException("Invalid of size StackItem: " + type.size());
  }
}

代码示例来源:origin: jphp-group/jphp

public void writePushDup(StackItem.Type type) {
  stackPush(null, type);
  if (type.size() == 2)
    code.add(new InsnNode(DUP2));
  else
    code.add(new InsnNode(DUP));
}

代码示例来源:origin: jphp-group/jphp

public void writePushConstNull() {
  stackPush(Memory.Type.REFERENCE);
  code.add(new InsnNode(ACONST_NULL));
}

代码示例来源:origin: jphp-group/jphp

public void writePushSmallInt(int value) {
  switch (value) {
    case -1:
      code.add(new InsnNode(ICONST_M1));
      break;
    case 0:
      code.add(new InsnNode(ICONST_0));
      break;
    case 1:
      code.add(new InsnNode(ICONST_1));
      break;
    case 2:
      code.add(new InsnNode(ICONST_2));
      break;
    case 3:
      code.add(new InsnNode(ICONST_3));
      break;
    case 4:
      code.add(new InsnNode(ICONST_4));
      break;
    case 5:
      code.add(new InsnNode(ICONST_5));
      break;
    default:
      code.add(new LdcInsnNode(value));
  }
  stackPush(Memory.Type.INT);
}

代码示例来源:origin: jphp-group/jphp

public void writePushDup() {
  StackItem item = method.peek();
  stackPush(item);
  if (item.type.size() == 2)
    code.add(new InsnNode(DUP2));
  else
    code.add(new InsnNode(DUP));
}

代码示例来源:origin: jphp-group/jphp

void writePushGetArrayLength() {
  code.add(new InsnNode(ARRAYLENGTH));
  stackPop();
  stackPush(null, StackItem.Type.INT);
}

代码示例来源:origin: jphp-group/jphp

public void writePopInteger() {
  writePopLong();
  code.add(new InsnNode(L2I));
  stackPop();
  stackPush(null, StackItem.Type.INT);
}

代码示例来源:origin: jphp-group/jphp

public void writePopFloat() {
  writePopDouble();
  code.add(new InsnNode(D2F));
  stackPop();
  stackPush(null, StackItem.Type.FLOAT);
}

代码示例来源:origin: jphp-group/jphp

public void writePopAll(int count) {
  int i = 0;
  while (method.getStackCount() > 0 && i < count) {
    i++;
    StackItem o = stackPop();
    ValueExprToken token = o.getToken();
    StackItem.Type type = o.type;
    if (token == null) {
      switch (type.size()) {
        case 2:
          code.add(new InsnNode(POP2));
          break;
        case 1:
          code.add(new InsnNode(POP));
          break;
        default:
          throw new IllegalArgumentException("Invalid of size StackItem: " + type.size());
      }
    } else/* if (o.isInvalidForOperations())*/
      unexpectedToken(token);
  }
}

代码示例来源:origin: jphp-group/jphp

void writePushGetFromArray(int index, Class clazz) {
  writePushSmallInt(index);
  code.add(new InsnNode(AALOAD));
  stackPop();
  stackPop();
  stackPush(null, StackItem.Type.valueOf(clazz));
}

代码示例来源:origin: jphp-group/jphp

break;
case FLOAT: {
  code.add(new InsnNode(L2F));
  stackPop();
  stackPush(Memory.Type.INT);
case CHAR:
case INT: {
  code.add(new InsnNode(I2L));
  stackPop();
  stackPush(Memory.Type.INT);
  code.add(new InsnNode(D2L));
  stackPop();
  stackPush(Memory.Type.INT);

代码示例来源:origin: jphp-group/jphp

public void writePopDouble() {
  switch (stackPeek().type) {
    case DOUBLE:
      break;
    case BYTE:
    case SHORT:
    case BOOL:
    case CHAR:
    case INT: {
      code.add(new InsnNode(I2D));
      stackPop();
      stackPush(Memory.Type.DOUBLE);
    }
    break;
    case LONG: {
      code.add(new InsnNode(L2D));
      stackPop();
      stackPush(Memory.Type.DOUBLE);
    }
    break;
    case STRING: {
      writeSysStaticCall(StringMemory.class, "toNumeric", Memory.class, String.class);
      writeSysDynamicCall(Memory.class, "toDouble", Double.TYPE);
    }
    break;
    default: {
      writeSysDynamicCall(Memory.class, "toDouble", Double.TYPE);
    }
  }
}

代码示例来源:origin: jphp-group/jphp

public void writePushParameters(Collection<Memory> memories) {
  writePushSmallInt(memories.size());
  code.add(new TypeInsnNode(ANEWARRAY, Type.getInternalName(Memory.class)));
  stackPop();
  stackPush(Memory.Type.REFERENCE);
  int i = 0;
  for (Memory param : memories) {
    writePushDup();
    writePushSmallInt(i);
    writePushMemory(param);
    writePopBoxing(true, false);
    code.add(new InsnNode(AASTORE));
    stackPop();
    stackPop();
    stackPop();
    i++;
  }
}

代码示例来源:origin: jphp-group/jphp

public void writePushParameters(Collection<ExprStmtToken> parameters, boolean useConstants, Memory... additional) {
  if (parameters.isEmpty()) {
    code.add(new InsnNode(ACONST_NULL));
    stackPush(Memory.Type.REFERENCE);
    return;
  code.add(new TypeInsnNode(ANEWARRAY, Type.getInternalName(Memory.class)));
  stackPop();
  stackPush(Memory.Type.REFERENCE);
    writePopBoxing();
    code.add(new InsnNode(AASTORE));
    stackPop();
    stackPop();
      writePopBoxing();
      code.add(new InsnNode(AASTORE));
      stackPop();
      stackPop();

代码示例来源:origin: jphp-group/jphp

constructor.instructions.add(new MethodInsnNode(
    INVOKESPECIAL,
    node.superName,
constructor.instructions.add(new InsnNode(RETURN));
node.methods.add(constructor);

代码示例来源:origin: jphp-group/jphp

protected void writeInterfaceMethod(MethodEntity method) {
  MethodNode node = new MethodNodeImpl();
  node.access = ACC_PUBLIC;
  node.name = method.getName();
  node.desc = Type.getMethodDescriptor(
      Type.getType(Memory.class),
      Type.getType(Environment.class),
      Type.getType(Memory[].class)
  );
  MethodStmtCompiler methodCompiler = new MethodStmtCompiler(this, node);
  ExpressionStmtCompiler expressionCompiler = new ExpressionStmtCompiler(methodCompiler, null);
  methodCompiler.writeHeader();
  LabelNode l0 = writeLabel(node, statement.getMeta().getStartLine());
  methodCompiler.addLocalVariable("~this", l0);
  methodCompiler.addLocalVariable("~env", l0);
  methodCompiler.addLocalVariable("~args", l0);
  expressionCompiler.writeVarLoad("~this");
  expressionCompiler.writeVarLoad("~env");
  expressionCompiler.writeVarLoad("~args");
  String internalName = entity.findMethod(method.getLowerName()).getInternalName();
  expressionCompiler.writeSysDynamicCall(null, internalName, Memory.class, Environment.class, Memory[].class);
  node.instructions.add(new InsnNode(ARETURN));
  methodCompiler.writeFooter();
  this.node.methods.add(node);
}

代码示例来源:origin: jphp-group/jphp

node.instructions.add(new TypeInsnNode(ANEWARRAY, Type.getInternalName(TraceInfo.class)));
expressionCompiler.stackPush(Memory.Type.REFERENCE);
  expressionCompiler.writePushCreateTraceInfo(traceInfo.getStartLine(), traceInfo.getStartPosition());
  node.instructions.add(new InsnNode(AASTORE));
  expressionCompiler.stackPop();
  expressionCompiler.stackPop();
node.instructions.add(new TypeInsnNode(ANEWARRAY, Type.getInternalName(Memory.class)));
expressionCompiler.stackPush(Memory.Type.REFERENCE);
  expressionCompiler.writePopBoxing(true, false);
  node.instructions.add(new InsnNode(AASTORE));
  expressionCompiler.stackPop();
  expressionCompiler.stackPop();
  node.instructions.add(new InsnNode(AASTORE));
  expressionCompiler.stackPop();
  expressionCompiler.stackPop();
expressionCompiler.writePutStatic("$CALL_CLASS_CACHE", ClassCallCache.class);
node.instructions.add(new InsnNode(RETURN));
methodCompiler.writeFooter();

代码示例来源:origin: jphp-group/jphp

node.instructions.add(new InsnNode(RETURN));
methodCompiler.writeFooter();

代码示例来源:origin: jphp-group/jphp

destructor.instructions.add(new JumpInsnNode(IFEQ, end));
expressionCompiler.writePopAll(1);
destructor.instructions.add(end);
destructor.instructions.add(new InsnNode(Opcodes.RETURN));
methodCompiler.writeFooter();
node.methods.add(destructor);

代码示例来源:origin: jphp-group/jphp

code.add(new FieldInsnNode(
      GETSTATIC, Type.getInternalName(Memory.class), "UNDEFINED", Type.getDescriptor(Memory.class)
  ));
} else if (memory instanceof NullMemory) {
  code.add(new FieldInsnNode(
      GETSTATIC, Type.getInternalName(Memory.class), "NULL", Type.getDescriptor(Memory.class)
  ));
  return;
} else if (memory instanceof ReferenceMemory) {
  code.add(new TypeInsnNode(NEW, Type.getInternalName(ReferenceMemory.class)));
  code.add(new InsnNode(DUP));
  code.add(new MethodInsnNode(INVOKESPECIAL, Type.getInternalName(ReferenceMemory.class), Constants.INIT_METHOD, "()V", false));
} else if (memory instanceof ArrayMemory) {

相关文章

微信公众号

最新文章

更多