Search in sources :

Example 1 with ClassCode

use of io.nuls.contract.vm.code.ClassCode in project nuls by nuls-io.

the class Heap method runNewObjectWithArgs.

public ObjectRef runNewObjectWithArgs(VariableType variableType, String methodDesc, Object... args) {
    ClassCode classCode = this.vm.methodArea.loadClass(variableType.getType());
    ObjectRef objectRef = newObject(classCode);
    MethodCode methodCode = this.vm.methodArea.loadMethod(objectRef.getVariableType().getType(), Constants.CONSTRUCTOR_NAME, methodDesc);
    if (methodCode == null) {
        throw new RuntimeException(String.format("can't new %s", variableType.getType()));
    }
    Object[] runArgs = new Object[args.length + 1];
    runArgs[0] = objectRef;
    for (int i = 1; i < runArgs.length; i++) {
        runArgs[i] = args[i - 1];
    }
    this.vm.run(methodCode, runArgs, false);
    return objectRef;
}
Also used : ClassCode(io.nuls.contract.vm.code.ClassCode) MethodCode(io.nuls.contract.vm.code.MethodCode)

Example 2 with ClassCode

use of io.nuls.contract.vm.code.ClassCode 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 3 with ClassCode

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

Example 4 with ClassCode

use of io.nuls.contract.vm.code.ClassCode in project nuls by nuls-io.

the class NativeClass method getGenericSignature0.

/**
 * native
 *
 * @see Class#getGenericSignature0()
 */
private static Result getGenericSignature0(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 ref = null;
    if (!variableType.isPrimitiveType()) {
        ClassCode classCode = frame.methodArea.loadClass(variableType.getType());
        String signature = classCode.signature;
        ref = frame.heap.newString(signature);
    }
    Result result = NativeMethod.result(methodCode, ref, 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 ClassCode

use of io.nuls.contract.vm.code.ClassCode in project nuls by nuls-io.

the class Athrow method extends_.

private static boolean extends_(String refType, String className, Frame frame) {
    if (Objects.equals(refType, className)) {
        return true;
    } else {
        ClassCode classCode = frame.methodArea.loadClass(refType);
        String superName = classCode.superName;
        if (Constants.OBJECT_CLASS_NAME.equals(superName)) {
            return false;
        } else {
            return extends_(superName, className, frame);
        }
    }
}
Also used : ClassCode(io.nuls.contract.vm.code.ClassCode)

Aggregations

ClassCode (io.nuls.contract.vm.code.ClassCode)19 MethodCode (io.nuls.contract.vm.code.MethodCode)7 ObjectRef (io.nuls.contract.vm.ObjectRef)6 Result (io.nuls.contract.vm.Result)6 VariableType (io.nuls.contract.vm.code.VariableType)4 VM (io.nuls.contract.vm.VM)2 ErrorException (io.nuls.contract.vm.exception.ErrorException)2 AccountState (org.ethereum.core.AccountState)2 DataWord (org.ethereum.vm.DataWord)2 BlockHeaderDto (io.nuls.contract.entity.BlockHeaderDto)1 VMContext (io.nuls.contract.util.VMContext)1 OpCode (io.nuls.contract.vm.OpCode)1 VMFactory (io.nuls.contract.vm.VMFactory)1 ClassCodeLoader (io.nuls.contract.vm.code.ClassCodeLoader)1 ClassCodes (io.nuls.contract.vm.code.ClassCodes)1 FieldCode (io.nuls.contract.vm.code.FieldCode)1 NativeAddress (io.nuls.contract.vm.natives.io.nuls.contract.sdk.NativeAddress)1 io.nuls.contract.vm.program (io.nuls.contract.vm.program)1 Constants (io.nuls.contract.vm.util.Constants)1 DBService (io.nuls.db.service.DBService)1