use of io.nuls.contract.vm.MethodArgs in project nuls by nuls-io.
the class Invokestatic method invokestatic.
public static void invokestatic(Frame frame) {
MethodInsnNode methodInsnNode = frame.methodInsnNode();
String className = methodInsnNode.owner;
String methodName = methodInsnNode.name;
String methodDesc = methodInsnNode.desc;
MethodCode methodCode = frame.methodArea.loadMethod(className, methodName, methodDesc);
MethodArgs methodArgs = new MethodArgs(methodCode.argsVariableType, frame.operandStack, true);
// Log.opcode(frame.getCurrentOpCode(), className, methodName, methodDesc);
Result result = NativeMethod.run(methodCode, methodArgs, frame);
if (result != null) {
return;
}
frame.vm.run(methodCode, methodArgs.frameArgs, true);
}
use of io.nuls.contract.vm.MethodArgs in project nuls by nuls-io.
the class Invokespecial method invokespecial.
public static void invokespecial(Frame frame) {
MethodInsnNode methodInsnNode = frame.methodInsnNode();
String className = methodInsnNode.owner;
String methodName = methodInsnNode.name;
String methodDesc = methodInsnNode.desc;
MethodCode methodCode = frame.methodArea.loadMethod(className, methodName, methodDesc);
MethodArgs methodArgs = new MethodArgs(methodCode.argsVariableType, frame.operandStack, false);
ObjectRef objectRef = methodArgs.objectRef;
if (objectRef == null) {
frame.throwNullPointerException();
return;
}
if (Constants.OBJECT_CLASS_NAME.equals(className) && Constants.CONSTRUCTOR_NAME.equals(methodName)) {
return;
}
Result result = NativeMethod.run(methodCode, methodArgs, frame);
if (result != null) {
return;
}
frame.vm.run(methodCode, methodArgs.frameArgs, true);
}
use of io.nuls.contract.vm.MethodArgs in project nuls by nuls-io.
the class Invokeinterface method invokeinterface.
public static void invokeinterface(Frame frame) {
MethodInsnNode methodInsnNode = frame.methodInsnNode();
String interfaceName = methodInsnNode.owner;
String interfaceMethodName = methodInsnNode.name;
String interfaceMethodDesc = methodInsnNode.desc;
List<VariableType> variableTypes = VariableType.parseArgs(interfaceMethodDesc);
MethodArgs methodArgs = new MethodArgs(variableTypes, frame.operandStack, false);
ObjectRef objectRef = methodArgs.objectRef;
if (objectRef == null) {
frame.throwNullPointerException();
return;
}
String className = objectRef.getVariableType().getType();
MethodCode methodCode = frame.methodArea.loadMethod(className, interfaceMethodName, interfaceMethodDesc);
// Log.opcode(frame.getCurrentOpCode(), className, interfaceMethodName, interfaceMethodDesc);
frame.vm.run(methodCode, methodArgs.frameArgs, true);
}
use of io.nuls.contract.vm.MethodArgs in project nuls by nuls-io.
the class Invokevirtual method invokevirtual.
public static void invokevirtual(Frame frame) {
MethodInsnNode methodInsnNode = frame.methodInsnNode();
String className = methodInsnNode.owner;
String methodName = methodInsnNode.name;
String methodDesc = methodInsnNode.desc;
List<VariableType> variableTypes = VariableType.parseArgs(methodDesc);
MethodArgs methodArgs = new MethodArgs(variableTypes, frame.operandStack, false);
ObjectRef objectRef = methodArgs.objectRef;
if (objectRef == null) {
frame.throwNullPointerException();
return;
}
String type = objectRef.getVariableType().getType();
if (!Objects.equals(className, type)) {
if (objectRef.getVariableType().isPrimitiveType()) {
} else {
className = type;
}
}
if (objectRef.isArray()) {
className = Constants.OBJECT_CLASS_NAME;
}
MethodCode methodCode = frame.methodArea.loadMethod(className, methodName, methodDesc);
// Log.opcode(frame.getCurrentOpCode(), objectRef, methodName, methodDesc);
Result result = NativeMethod.run(methodCode, methodArgs, frame);
if (result != null) {
return;
}
frame.vm.run(methodCode, methodArgs.frameArgs, true);
}
Aggregations