in src/jvm/main/org/jetbrains/kotlinx/lincheck/runner/TestThreadExecutionGenerator.java [381:408]
private static void pushArgumentOnStack(GeneratorAdapter mv, List<Object> objArgs, Object arg, Class<?> argClass) {
if (argClass == boolean.class) {
mv.push((boolean) arg);
} else if (argClass == byte.class) {
mv.push((byte) arg);
} else if (argClass == char.class) {
mv.push((char) arg);
} else if (argClass == short.class) {
mv.push((short) arg);
} else if (argClass == int.class) {
mv.push((int) arg);
} else if (argClass == long.class) {
mv.push((long) arg);
} else if (argClass == float.class) {
mv.push((float) arg);
} else if (argClass == double.class) {
mv.push((double) arg);
} else if (argClass == String.class) {
mv.push((String) arg);
} else { // Object type
mv.loadThis(); // -> this
mv.getField(TEST_THREAD_EXECUTION_TYPE, "objArgs", OBJECT_ARRAY_TYPE); // this -> objArgs
mv.push(objArgs.size()); // objArgs -> objArgs, index
mv.arrayLoad(OBJECT_TYPE); // objArgs, index -> arg
mv.checkCast(getType(argClass)); // cast object to argument type
objArgs.add(arg);
}
}