Search in sources :

Example 61 with Result

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

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

Example 63 with 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);
}
Also used : VariableType(io.nuls.contract.vm.code.VariableType) MethodInsnNode(org.objectweb.asm.tree.MethodInsnNode) ObjectRef(io.nuls.contract.vm.ObjectRef) MethodCode(io.nuls.contract.vm.code.MethodCode) MethodArgs(io.nuls.contract.vm.MethodArgs) 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