Search in sources :

Example 36 with ObjectRef

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

the class NativeObject method clone.

/**
 * native
 *
 * @see Object#clone()
 */
private static Result clone(MethodCode methodCode, MethodArgs methodArgs, Frame frame) {
    ObjectRef objectRef = methodArgs.objectRef;
    ObjectRef newRef;
    if (objectRef.isArray()) {
        newRef = frame.heap.newArray(objectRef.getVariableType(), objectRef.getDimensions());
        frame.heap.arraycopy(objectRef, 0, newRef, 0, objectRef.getDimensions()[0]);
    } else {
        Map<String, Object> fields = frame.heap.getFields(objectRef);
        Map<String, Object> newFields = CloneUtils.clone(fields);
        newRef = frame.heap.newObjectRef(null, objectRef.getDesc(), objectRef.getDimensions());
        frame.heap.putFields(newRef, newFields);
    }
    Result result = NativeMethod.result(methodCode, newRef, frame);
    return result;
}
Also used : ObjectRef(io.nuls.contract.vm.ObjectRef) Result(io.nuls.contract.vm.Result)

Example 37 with ObjectRef

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

the class NativeFloat method toString.

/**
 * override
 *
 * @see Float#toString(float)
 */
private static Result toString(MethodCode methodCode, MethodArgs methodArgs, Frame frame) {
    float f = (float) methodArgs.invokeArgs[0];
    String s = Float.toString(f);
    ObjectRef ref = frame.heap.newString(s);
    Result result = NativeMethod.result(methodCode, ref, frame);
    return result;
}
Also used : ObjectRef(io.nuls.contract.vm.ObjectRef) Result(io.nuls.contract.vm.Result)

Example 38 with ObjectRef

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

the class NativeFloat method parseFloat.

/**
 * override
 *
 * @see Float#parseFloat(String)
 */
private static Result parseFloat(MethodCode methodCode, MethodArgs methodArgs, Frame frame) {
    ObjectRef objectRef = (ObjectRef) methodArgs.invokeArgs[0];
    String s = frame.heap.runToString(objectRef);
    float f;
    try {
        f = Float.parseFloat(s);
    } catch (Exception e) {
        frame.throwNumberFormatException(e.getMessage());
        return null;
    }
    Result result = NativeMethod.result(methodCode, f, frame);
    return result;
}
Also used : ObjectRef(io.nuls.contract.vm.ObjectRef) Result(io.nuls.contract.vm.Result)

Example 39 with ObjectRef

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

the class JsonUtils method encodeArray.

public static String encodeArray(Object value, Class<?> elementType, BiMap<String, String> classNames) {
    String json;
    if (elementType == ObjectRef.class) {
        int length = Array.getLength(value);
        String[] array = new String[length];
        for (int i = 0; i < length; i++) {
            ObjectRef objectRef = (ObjectRef) Array.get(value, i);
            if (objectRef != null) {
                array[i] = objectRef.getEncoded(classNames);
            }
        }
        json = toJson(array);
    } else {
        json = toJson(value);
    }
    return json;
}
Also used : ObjectRef(io.nuls.contract.vm.ObjectRef)

Example 40 with ObjectRef

use of io.nuls.contract.vm.ObjectRef 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)

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