use of io.nuls.contract.vm.Result in project nuls by nuls-io.
the class NativeString method getBytes.
/**
* override
*
* @see String#getBytes()
*/
private static Result getBytes(MethodCode methodCode, MethodArgs methodArgs, Frame frame) {
ObjectRef objectRef = methodArgs.objectRef;
ObjectRef ref = null;
if (objectRef != null) {
String str = frame.heap.runToString(objectRef);
if (str != null) {
byte[] bytes = str.getBytes();
ref = frame.heap.newArray(bytes);
}
}
Result result = NativeMethod.result(methodCode, ref, frame);
return result;
}
use of io.nuls.contract.vm.Result in project nuls by nuls-io.
the class NativeString method intern.
/**
* native
*
* @see String#intern()
*/
private static Result intern(MethodCode methodCode, MethodArgs methodArgs, Frame frame) {
ObjectRef objectRef = methodArgs.objectRef;
Result result = NativeMethod.result(methodCode, objectRef, frame);
return result;
}
use of io.nuls.contract.vm.Result 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