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