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;
}
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;
}
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());
}
}
}
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;
}
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;
}
Aggregations