本文整理了Java中org.objectweb.asm.tree.InsnNode.<init>()
方法的一些代码示例,展示了InsnNode.<init>()
的具体用法。这些代码示例主要来源于Github
/Stackoverflow
/Maven
等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。InsnNode.<init>()
方法的具体详情如下:
包路径:org.objectweb.asm.tree.InsnNode
类名称: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) {
内容来源于网络,如有侵权,请联系作者删除!