Search in sources :

Example 1 with ObjectRef

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

the class Xastore method fastore.

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

Example 2 with ObjectRef

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

the class Xastore method castore.

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

Example 3 with ObjectRef

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

the class NativeAbstractStringBuilder method append.

/**
 * override
 *
 * @see AbstractStringBuilder#append(float)
 * @see AbstractStringBuilder#append(double)
 */
private static Result append(MethodCode methodCode, MethodArgs methodArgs, Frame frame) {
    ObjectRef objectRef = methodArgs.objectRef;
    Object a = methodArgs.invokeArgs[0];
    ObjectRef ref = frame.heap.newString(a.toString());
    MethodCode append = frame.methodArea.loadMethod(TYPE, "append", "(Ljava/lang/String;)Ljava/lang/AbstractStringBuilder;");
    frame.vm.run(append, new Object[] { objectRef, ref }, false);
    Result result = NativeMethod.result(methodCode, objectRef, 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 4 with ObjectRef

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

the class NativeClass method getInterfaces.

/**
 * override
 *
 * @see Class#getInterfaces()
 */
private static Result getInterfaces(MethodCode methodCode, MethodArgs methodArgs, Frame frame) {
    ObjectRef objectRef = methodArgs.objectRef;
    VariableType variableType;
    if (objectRef.getVariableType().isArray()) {
        variableType = objectRef.getVariableType();
    } else {
        variableType = VariableType.valueOf(objectRef.getRef());
    }
    ObjectRef array;
    if (!variableType.isPrimitiveType()) {
        ClassCode classCode = frame.methodArea.loadClass(variableType.getType());
        List<String> interfaces = classCode.interfaces;
        int length = interfaces.size();
        array = frame.heap.newArray(VariableType.valueOf("[Ljava/lang/Class;"), length);
        for (int i = 0; i < length; i++) {
            String interfaceName = interfaces.get(i);
            VariableType interfaceType = VariableType.valueOf(interfaceName);
            ObjectRef ref = frame.heap.getClassRef(interfaceType.getDesc());
            frame.heap.putArray(array, i, ref);
        }
    } else {
        array = frame.heap.newArray(VariableType.valueOf("[Ljava/lang/Class;"), 0);
    }
    Result result = NativeMethod.result(methodCode, array, frame);
    return result;
}
Also used : ClassCode(io.nuls.contract.vm.code.ClassCode) VariableType(io.nuls.contract.vm.code.VariableType) ObjectRef(io.nuls.contract.vm.ObjectRef) Result(io.nuls.contract.vm.Result)

Example 5 with ObjectRef

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

the class NativeClass method isInterface.

/**
 * native
 *
 * @see Class#isInterface()
 */
private static Result isInterface(MethodCode methodCode, MethodArgs methodArgs, Frame frame) {
    ObjectRef objectRef = methodArgs.objectRef;
    VariableType variableType;
    if (objectRef.getVariableType().isArray()) {
        variableType = objectRef.getVariableType();
    } else {
        variableType = VariableType.valueOf(objectRef.getRef());
    }
    boolean b = false;
    if (!variableType.isArray() && !variableType.isPrimitiveType()) {
        ClassCode classCode = frame.methodArea.loadClass(variableType.getType());
        b = classCode.isInterface;
    }
    Result result = NativeMethod.result(methodCode, b, frame);
    return result;
}
Also used : ClassCode(io.nuls.contract.vm.code.ClassCode) VariableType(io.nuls.contract.vm.code.VariableType) ObjectRef(io.nuls.contract.vm.ObjectRef) Result(io.nuls.contract.vm.Result)

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