use of io.nuls.contract.vm.ObjectRef in project nuls by nuls-io.
the class Instanceof method instanceof_.
public static void instanceof_(Frame frame) {
TypeInsnNode typeInsnNode = frame.typeInsnNode();
VariableType variableType = VariableType.valueOf(typeInsnNode.desc);
ObjectRef objectRef = frame.operandStack.popRef();
boolean result = instanceof_(objectRef, variableType, frame);
frame.operandStack.pushInt(result ? 1 : 0);
// Log.result(frame.getCurrentOpCode(), result, objectRef, variableType);
}
use of io.nuls.contract.vm.ObjectRef in project nuls by nuls-io.
the class Invokespecial method invokespecial.
public static void invokespecial(Frame frame) {
MethodInsnNode methodInsnNode = frame.methodInsnNode();
String className = methodInsnNode.owner;
String methodName = methodInsnNode.name;
String methodDesc = methodInsnNode.desc;
MethodCode methodCode = frame.methodArea.loadMethod(className, methodName, methodDesc);
MethodArgs methodArgs = new MethodArgs(methodCode.argsVariableType, frame.operandStack, false);
ObjectRef objectRef = methodArgs.objectRef;
if (objectRef == null) {
frame.throwNullPointerException();
return;
}
if (Constants.OBJECT_CLASS_NAME.equals(className) && Constants.CONSTRUCTOR_NAME.equals(methodName)) {
return;
}
Result result = NativeMethod.run(methodCode, methodArgs, frame);
if (result != null) {
return;
}
frame.vm.run(methodCode, methodArgs.frameArgs, true);
}
use of io.nuls.contract.vm.ObjectRef in project nuls by nuls-io.
the class Checkcast method checkcast.
public static void checkcast(Frame frame) {
TypeInsnNode typeInsnNode = frame.typeInsnNode();
String desc = typeInsnNode.desc;
VariableType variableType = VariableType.valueOf(desc);
ObjectRef objectRef = frame.operandStack.popRef();
if (objectRef == null || Instanceof.instanceof_(objectRef, variableType, frame)) {
frame.operandStack.pushRef(objectRef);
} else {
frame.throwClassCastException();
}
// Log.opcode(frame.getCurrentOpCode(), objectRef, desc);
}
use of io.nuls.contract.vm.ObjectRef in project nuls by nuls-io.
the class Xaload method daload.
public static void daload(final Frame frame) {
int index = frame.operandStack.popInt();
ObjectRef arrayRef = frame.operandStack.popRef();
if (!frame.checkArray(arrayRef, index)) {
return;
}
double value = (double) frame.heap.getArray(arrayRef, index);
frame.operandStack.pushDouble(value);
// Log.result(frame.getCurrentOpCode(), value, arrayRef, index);
}
use of io.nuls.contract.vm.ObjectRef in project nuls by nuls-io.
the class Xaload method aaload.
public static void aaload(final Frame frame) {
int index = frame.operandStack.popInt();
ObjectRef arrayRef = frame.operandStack.popRef();
if (!frame.checkArray(arrayRef, index)) {
return;
}
ObjectRef value = (ObjectRef) frame.heap.getArray(arrayRef, index);
frame.operandStack.pushRef(value);
// Log.result(frame.getCurrentOpCode(), value, arrayRef, index);
}
Aggregations