Search in sources :

Example 11 with ClassCode

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

the class MethodArea method loadClass.

public ClassCode loadClass(String className) {
    ClassCode classCode = INIT_CLASS_CODES.get(className);
    if (classCode != null) {
        return classCode;
    }
    classCode = this.classCodes.get(className);
    if (classCode != null) {
        return classCode;
    }
    classCode = ClassCodeLoader.getFromNewestResource(className);
    if (classCode == null) {
        classCode = this.loadClassCodes.get(className);
    }
    if (classCode == null) {
        throw new RuntimeException("can't load class " + className);
    }
    this.classCodes.put(className, classCode);
    clinit(classCode);
    return classCode;
}
Also used : ClassCode(io.nuls.contract.vm.code.ClassCode)

Example 12 with ClassCode

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

the class MethodArea method loadSuperMethod.

private MethodCode loadSuperMethod(String className, String methodName, String methodDesc) {
    ClassCode classCode = loadClass(className);
    MethodCode methodCode = classCode.getMethodCode(methodName, methodDesc);
    if (methodCode == null && classCode.superName != null) {
        methodCode = loadSuperMethod(classCode.superName, methodName, methodDesc);
    }
    return methodCode;
}
Also used : ClassCode(io.nuls.contract.vm.code.ClassCode) MethodCode(io.nuls.contract.vm.code.MethodCode)

Example 13 with ClassCode

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

the class Heap method initFields.

private void initFields(ClassCode classCode, ObjectRef objectRef) {
    if (StringUtils.isNotBlank(classCode.superName)) {
        ClassCode superClassCode = this.vm.methodArea.loadClass(classCode.superName);
        initFields(superClassCode, objectRef);
    }
    for (FieldCode fieldCode : classCode.fields.values()) {
        if (!fieldCode.isStatic) {
            putField(objectRef, fieldCode.name, fieldCode.variableType.getDefaultValue());
        }
    }
}
Also used : ClassCode(io.nuls.contract.vm.code.ClassCode) FieldCode(io.nuls.contract.vm.code.FieldCode)

Example 14 with ClassCode

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

the class Heap method getStaticObjectRef.

private ObjectRef getStaticObjectRef(String className) {
    ClassCode classCode = this.vm.methodArea.loadClass(className);
    ObjectRef objectRef = new ObjectRef(classCode.name, classCode.variableType.getDesc());
    Map<String, Object> map = getFieldsInit(objectRef);
    if (map == null) {
        objectRef = newObjectRef(classCode.name, classCode.variableType.getDesc());
    }
    return objectRef;
}
Also used : ClassCode(io.nuls.contract.vm.code.ClassCode)

Example 15 with ClassCode

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

the class Heap method getClassRef.

public ObjectRef getClassRef(String desc) {
    ObjectRef objectRef = new ObjectRef(desc, Constants.CLASS_DESC);
    Object object = getFields(objectRef);
    if (object == null) {
        ClassCode classCode = this.vm.methodArea.loadClass(Constants.CLASS_NAME);
        objectRef = newObject(desc, classCode);
    }
    return objectRef;
}
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