use of io.nuls.contract.vm.ObjectRef in project nuls by nuls-io.
the class NativeThrowable method getStackTraceElement.
/**
* native
*
* @see Throwable#getStackTraceElement(int)
*/
private static Result getStackTraceElement(MethodCode methodCode, MethodArgs methodArgs, Frame frame) {
int index = (int) methodArgs.invokeArgs[0];
ObjectRef objectRef = methodArgs.objectRef;
ObjectRef stackTraceElementsRef = (ObjectRef) frame.heap.getField(objectRef, "stackTraceElements");
ObjectRef stackTraceElementRef = (ObjectRef) frame.heap.getArray(stackTraceElementsRef, index);
Result result = NativeMethod.result(methodCode, stackTraceElementRef, frame);
return result;
}
use of io.nuls.contract.vm.ObjectRef in project nuls by nuls-io.
the class NativeThrowable method fillInStackTrace.
/**
* native
*
* @see Throwable#fillInStackTrace(int)
*/
private static Result fillInStackTrace(MethodCode methodCode, MethodArgs methodArgs, Frame frame) {
int dummy = (int) methodArgs.invokeArgs[0];
ObjectRef objectRef = methodArgs.objectRef;
int size = frame.vm.vmStack.size();
boolean isThrowable = true;
List<Frame> frames = new ArrayList<>();
for (int i = size - 1; i >= 0; i--) {
Frame frame1 = frame.vm.vmStack.get(i);
if (isThrowable) {
if (Instanceof.instanceof_(frame1.methodCode.className, "java/lang/Throwable", frame)) {
continue;
} else {
isThrowable = false;
}
}
frames.add(frame1);
}
ObjectRef stackTraceElementsRef = frame.heap.newArray(VariableType.STACK_TRACE_ELEMENT_ARRAY_TYPE, frames.size());
frame.heap.putField(objectRef, "stackTraceElements", stackTraceElementsRef);
int index = 0;
for (Frame frame1 : frames) {
ObjectRef declaringClass = frame.heap.newString(frame1.methodCode.className);
ObjectRef methodName = frame.heap.newString(frame1.methodCode.name);
ObjectRef fileName = frame.heap.newString(frame1.methodCode.classCode.sourceFile);
int lineNumber = frame1.getLine();
ObjectRef stackTraceElementRef = frame.heap.runNewObjectWithArgs(VariableType.STACK_TRACE_ELEMENT_TYPE, null, declaringClass, methodName, fileName, lineNumber);
frame.heap.putArray(stackTraceElementsRef, index++, stackTraceElementRef);
}
Result result = NativeMethod.result(methodCode, objectRef, frame);
return result;
}
use of io.nuls.contract.vm.ObjectRef in project nuls by nuls-io.
the class NativeVM method initialize.
/**
* native
*
* @see VM#initialize()
*/
private static Result initialize(MethodCode methodCode, MethodArgs methodArgs, Frame frame) {
ObjectRef savedProps = (ObjectRef) frame.heap.getStatic(TYPE, "savedProps");
ObjectRef key = frame.heap.newString("user.script");
ObjectRef value = frame.heap.newString("");
MethodCode methodCode1 = frame.methodArea.loadMethod("java/util/Properties", "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
frame.vm.run(methodCode1, new Object[] { savedProps, key, value }, false);
Result result = NativeMethod.result(methodCode, null, frame);
return result;
}
use of io.nuls.contract.vm.ObjectRef in project nuls by nuls-io.
the class NativeSystem method identityHashCode.
/**
* native
*
* @see System#identityHashCode(Object)
*/
private static Result identityHashCode(MethodCode methodCode, MethodArgs methodArgs, Frame frame) {
ObjectRef objectRef = (ObjectRef) methodArgs.invokeArgs[0];
int hashCode = identityHashCode(objectRef);
Result result = NativeMethod.result(methodCode, hashCode, frame);
return result;
}
use of io.nuls.contract.vm.ObjectRef in project nuls by nuls-io.
the class NativeSystem method arraycopy.
/**
* native
*
* @see System#arraycopy(Object, int, Object, int, int)
*/
private static Result arraycopy(MethodCode methodCode, MethodArgs methodArgs, Frame frame) {
Object[] args = methodArgs.invokeArgs;
ObjectRef srcObjectRef = (ObjectRef) args[0];
int srcPos = (int) args[1];
ObjectRef destObjectRef = (ObjectRef) args[2];
int destPos = (int) args[3];
int length = (int) args[4];
if (length > 0 && frame.checkArray(srcObjectRef, srcPos) && frame.checkArray(srcObjectRef, srcPos + length - 1) && frame.checkArray(destObjectRef, destPos) && frame.checkArray(destObjectRef, destPos + length - 1)) {
frame.heap.arraycopy(srcObjectRef, srcPos, destObjectRef, destPos, length);
}
Result result = NativeMethod.result(methodCode, null, frame);
return result;
}
Aggregations