use of io.nuls.contract.vm.Result in project nuls by nuls-io.
the class NativeThrowable method getStackTraceDepth.
/**
* native
*
* @see Throwable#getStackTraceDepth()
*/
private static Result getStackTraceDepth(MethodCode methodCode, MethodArgs methodArgs, Frame frame) {
ObjectRef objectRef = methodArgs.objectRef;
ObjectRef stackTraceElementsRef = (ObjectRef) frame.heap.getField(objectRef, "stackTraceElements");
int depth = stackTraceElementsRef.getDimensions()[0];
Result result = NativeMethod.result(methodCode, depth, frame);
return result;
}
use of io.nuls.contract.vm.Result 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.Result 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.Result 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.Result in project nuls by nuls-io.
the class NativeStrictMath method cbrt.
/**
* native
*
* @see StrictMath#cbrt(double)
*/
private static Result cbrt(MethodCode methodCode, MethodArgs methodArgs, Frame frame) {
double a = (double) methodArgs.invokeArgs[0];
double r = StrictMath.cbrt(a);
Result result = NativeMethod.result(methodCode, r, frame);
return result;
}
Aggregations