use of io.nuls.contract.vm.Result in project nuls by nuls-io.
the class NativeClass method getName0.
/**
* native
*
* @see Class#getName0()
*/
private static Result getName0(MethodCode methodCode, MethodArgs methodArgs, Frame frame) {
ObjectRef objectRef = methodArgs.objectRef;
VariableType variableType;
if (objectRef.getVariableType().isArray()) {
variableType = objectRef.getVariableType();
} else {
variableType = VariableType.valueOf(objectRef.getRef());
}
String name;
if (variableType.isArray()) {
name = variableType.getDesc();
} else {
name = variableType.getType();
if (name.startsWith("L") && name.endsWith(";")) {
name = name.substring(1, name.length() - 1);
}
}
name = name.replace('/', '.');
ObjectRef ref = frame.heap.newString(name);
Result result = NativeMethod.result(methodCode, ref, frame);
return result;
}
use of io.nuls.contract.vm.Result in project nuls by nuls-io.
the class NativeClass method desiredAssertionStatus0.
/**
* native
*
* @see Class#desiredAssertionStatus0(Class)
*/
private static Result desiredAssertionStatus0(MethodCode methodCode, MethodArgs methodArgs, Frame frame) {
boolean status = false;
Result result = NativeMethod.result(methodCode, status, frame);
return result;
}
use of io.nuls.contract.vm.Result 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.Result 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.Result in project nuls by nuls-io.
the class NativeMethod method result.
public static Result result(MethodCode methodCode, Object resultValue, Frame frame) {
VariableType variableType = methodCode.returnVariableType;
Result result = new Result(variableType);
if (variableType.isNotVoid()) {
result.value(resultValue);
if (resultValue == null) {
frame.operandStack.pushRef(null);
} else if (variableType.isPrimitive()) {
frame.operandStack.push(resultValue, variableType);
} else if (resultValue instanceof ObjectRef) {
frame.operandStack.pushRef((ObjectRef) resultValue);
} else {
throw new IllegalArgumentException("unknown result value");
}
}
return result;
}
Aggregations