use of io.nuls.contract.vm.ObjectRef in project nuls by nuls-io.
the class NativeObject method clone.
/**
* native
*
* @see Object#clone()
*/
private static Result clone(MethodCode methodCode, MethodArgs methodArgs, Frame frame) {
ObjectRef objectRef = methodArgs.objectRef;
ObjectRef newRef;
if (objectRef.isArray()) {
newRef = frame.heap.newArray(objectRef.getVariableType(), objectRef.getDimensions());
frame.heap.arraycopy(objectRef, 0, newRef, 0, objectRef.getDimensions()[0]);
} else {
Map<String, Object> fields = frame.heap.getFields(objectRef);
Map<String, Object> newFields = CloneUtils.clone(fields);
newRef = frame.heap.newObjectRef(null, objectRef.getDesc(), objectRef.getDimensions());
frame.heap.putFields(newRef, newFields);
}
Result result = NativeMethod.result(methodCode, newRef, frame);
return result;
}
use of io.nuls.contract.vm.ObjectRef in project nuls by nuls-io.
the class NativeFloat method toString.
/**
* override
*
* @see Float#toString(float)
*/
private static Result toString(MethodCode methodCode, MethodArgs methodArgs, Frame frame) {
float f = (float) methodArgs.invokeArgs[0];
String s = Float.toString(f);
ObjectRef ref = frame.heap.newString(s);
Result result = NativeMethod.result(methodCode, ref, frame);
return result;
}
use of io.nuls.contract.vm.ObjectRef in project nuls by nuls-io.
the class NativeFloat method parseFloat.
/**
* override
*
* @see Float#parseFloat(String)
*/
private static Result parseFloat(MethodCode methodCode, MethodArgs methodArgs, Frame frame) {
ObjectRef objectRef = (ObjectRef) methodArgs.invokeArgs[0];
String s = frame.heap.runToString(objectRef);
float f;
try {
f = Float.parseFloat(s);
} catch (Exception e) {
frame.throwNumberFormatException(e.getMessage());
return null;
}
Result result = NativeMethod.result(methodCode, f, frame);
return result;
}
use of io.nuls.contract.vm.ObjectRef in project nuls by nuls-io.
the class JsonUtils method encodeArray.
public static String encodeArray(Object value, Class<?> elementType, BiMap<String, String> classNames) {
String json;
if (elementType == ObjectRef.class) {
int length = Array.getLength(value);
String[] array = new String[length];
for (int i = 0; i < length; i++) {
ObjectRef objectRef = (ObjectRef) Array.get(value, i);
if (objectRef != null) {
array[i] = objectRef.getEncoded(classNames);
}
}
json = toJson(array);
} else {
json = toJson(value);
}
return json;
}
use of io.nuls.contract.vm.ObjectRef in project nuls by nuls-io.
the class NativeThrowable method getStackTraceDepth.
/**
* native
*
* @see Throwable#getStackTraceDepth()
*/
private static Result getStackTraceDepth(MethodCode methodCode, MethodArgs methodArgs, Frame frame) {
ObjectRef objectRef = methodArgs.objectRef;
ObjectRef stackTraceElementsRef = (ObjectRef) frame.heap.getField(objectRef, "stackTraceElements");
int depth = stackTraceElementsRef.getDimensions()[0];
Result result = NativeMethod.result(methodCode, depth, frame);
return result;
}
Aggregations