Search in sources :

Example 26 with Result

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;
}
Also used : ObjectRef(io.nuls.contract.vm.ObjectRef) Result(io.nuls.contract.vm.Result)

Example 27 with 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;
}
Also used : ObjectRef(io.nuls.contract.vm.ObjectRef) Result(io.nuls.contract.vm.Result)

Example 28 with 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;
}
Also used : Frame(io.nuls.contract.vm.Frame) ArrayList(java.util.ArrayList) ObjectRef(io.nuls.contract.vm.ObjectRef) Result(io.nuls.contract.vm.Result)

Example 29 with 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;
}
Also used : ObjectRef(io.nuls.contract.vm.ObjectRef) MethodCode(io.nuls.contract.vm.code.MethodCode) Result(io.nuls.contract.vm.Result)

Example 30 with 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;
}
Also used : Result(io.nuls.contract.vm.Result)

Aggregations

Result (io.nuls.contract.vm.Result)63 ObjectRef (io.nuls.contract.vm.ObjectRef)35 VariableType (io.nuls.contract.vm.code.VariableType)12 MethodCode (io.nuls.contract.vm.code.MethodCode)6 ClassCode (io.nuls.contract.vm.code.ClassCode)5 MethodArgs (io.nuls.contract.vm.MethodArgs)3 MethodInsnNode (org.objectweb.asm.tree.MethodInsnNode)3 Frame (io.nuls.contract.vm.Frame)1 VM (io.nuls.contract.vm.VM)1 ErrorException (io.nuls.contract.vm.exception.ErrorException)1 ArrayList (java.util.ArrayList)1 AccountState (org.ethereum.core.AccountState)1 DataWord (org.ethereum.vm.DataWord)1