use of io.nuls.contract.vm.code.VariableType 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