Search in sources :

Example 11 with ObjectRef

use of io.nuls.contract.vm.ObjectRef in project nuls by nuls-io.

the class Instanceof method instanceof_.

public static void instanceof_(Frame frame) {
    TypeInsnNode typeInsnNode = frame.typeInsnNode();
    VariableType variableType = VariableType.valueOf(typeInsnNode.desc);
    ObjectRef objectRef = frame.operandStack.popRef();
    boolean result = instanceof_(objectRef, variableType, frame);
    frame.operandStack.pushInt(result ? 1 : 0);
// Log.result(frame.getCurrentOpCode(), result, objectRef, variableType);
}
Also used : VariableType(io.nuls.contract.vm.code.VariableType) TypeInsnNode(org.objectweb.asm.tree.TypeInsnNode) ObjectRef(io.nuls.contract.vm.ObjectRef)

Example 12 with ObjectRef

use of io.nuls.contract.vm.ObjectRef in project nuls by nuls-io.

the class Invokespecial method invokespecial.

public static void invokespecial(Frame frame) {
    MethodInsnNode methodInsnNode = frame.methodInsnNode();
    String className = methodInsnNode.owner;
    String methodName = methodInsnNode.name;
    String methodDesc = methodInsnNode.desc;
    MethodCode methodCode = frame.methodArea.loadMethod(className, methodName, methodDesc);
    MethodArgs methodArgs = new MethodArgs(methodCode.argsVariableType, frame.operandStack, false);
    ObjectRef objectRef = methodArgs.objectRef;
    if (objectRef == null) {
        frame.throwNullPointerException();
        return;
    }
    if (Constants.OBJECT_CLASS_NAME.equals(className) && Constants.CONSTRUCTOR_NAME.equals(methodName)) {
        return;
    }
    Result result = NativeMethod.run(methodCode, methodArgs, frame);
    if (result != null) {
        return;
    }
    frame.vm.run(methodCode, methodArgs.frameArgs, true);
}
Also used : MethodInsnNode(org.objectweb.asm.tree.MethodInsnNode) MethodCode(io.nuls.contract.vm.code.MethodCode) ObjectRef(io.nuls.contract.vm.ObjectRef) MethodArgs(io.nuls.contract.vm.MethodArgs) Result(io.nuls.contract.vm.Result)

Example 13 with ObjectRef

use of io.nuls.contract.vm.ObjectRef in project nuls by nuls-io.

the class Checkcast method checkcast.

public static void checkcast(Frame frame) {
    TypeInsnNode typeInsnNode = frame.typeInsnNode();
    String desc = typeInsnNode.desc;
    VariableType variableType = VariableType.valueOf(desc);
    ObjectRef objectRef = frame.operandStack.popRef();
    if (objectRef == null || Instanceof.instanceof_(objectRef, variableType, frame)) {
        frame.operandStack.pushRef(objectRef);
    } else {
        frame.throwClassCastException();
    }
// Log.opcode(frame.getCurrentOpCode(), objectRef, desc);
}
Also used : VariableType(io.nuls.contract.vm.code.VariableType) TypeInsnNode(org.objectweb.asm.tree.TypeInsnNode) ObjectRef(io.nuls.contract.vm.ObjectRef)

Example 14 with ObjectRef

use of io.nuls.contract.vm.ObjectRef in project nuls by nuls-io.

the class Xaload method daload.

public static void daload(final Frame frame) {
    int index = frame.operandStack.popInt();
    ObjectRef arrayRef = frame.operandStack.popRef();
    if (!frame.checkArray(arrayRef, index)) {
        return;
    }
    double value = (double) frame.heap.getArray(arrayRef, index);
    frame.operandStack.pushDouble(value);
// Log.result(frame.getCurrentOpCode(), value, arrayRef, index);
}
Also used : ObjectRef(io.nuls.contract.vm.ObjectRef)

Example 15 with ObjectRef

use of io.nuls.contract.vm.ObjectRef in project nuls by nuls-io.

the class Xaload method aaload.

public static void aaload(final Frame frame) {
    int index = frame.operandStack.popInt();
    ObjectRef arrayRef = frame.operandStack.popRef();
    if (!frame.checkArray(arrayRef, index)) {
        return;
    }
    ObjectRef value = (ObjectRef) frame.heap.getArray(arrayRef, index);
    frame.operandStack.pushRef(value);
// Log.result(frame.getCurrentOpCode(), value, arrayRef, index);
}
Also used : ObjectRef(io.nuls.contract.vm.ObjectRef)

Aggregations

ObjectRef (io.nuls.contract.vm.ObjectRef)74 Result (io.nuls.contract.vm.Result)35 VariableType (io.nuls.contract.vm.code.VariableType)18 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 TypeInsnNode (org.objectweb.asm.tree.TypeInsnNode)3 Frame (io.nuls.contract.vm.Frame)2 FieldInsnNode (org.objectweb.asm.tree.FieldInsnNode)2 BiMap (com.google.common.collect.BiMap)1 BlockHeaderDto (io.nuls.contract.entity.BlockHeaderDto)1 VM (io.nuls.contract.vm.VM)1 ErrorException (io.nuls.contract.vm.exception.ErrorException)1 ArrayList (java.util.ArrayList)1 LinkedHashMap (java.util.LinkedHashMap)1 Map (java.util.Map)1 AccountState (org.ethereum.core.AccountState)1 DataWord (org.ethereum.vm.DataWord)1 Type (org.objectweb.asm.Type)1