jobject JVM_NewArray(JNIEnv *env, jclass eltClass, jint length)
{
+ classinfo *c;
+ classinfo *pc;
+ java_objectarray *oa;
+
+ c = (classinfo *) eltClass;
+
#if PRINTJVM
- log_println("JVM_NewArray: eltClass=%p, length=%d", eltClass, length);
+ log_println("JVM_NewArray(eltClass=%p, length=%d)", eltClass, length);
#endif
- return (jobject) builtin_anewarray(length, (classinfo *) eltClass);
+
+ /* create primitive or object array */
+
+ if (primitive_class_is_primitive(c)) {
+ pc = primitive_arrayclass_get_by_name(c->name);
+ oa = builtin_newarray(length, pc);
+ }
+ else {
+ oa = builtin_anewarray(length, c);
+ }
+
+ return (jobject) oa;
}
#include "config.h"
#include <assert.h>
-
-#include "vm/types.h"
+#include <stdint.h>
#include "vm/global.h"
utf *name;
classinfo *c;
utf *u;
- s4 i;
+ int i;
for (i = 0; i < PRIMITIVETYPE_COUNT; i++) {
/* skip dummies */
bool primitive_class_is_primitive(classinfo *c)
{
- s4 i;
+ int i;
/* search table of primitive classes */
classinfo *primitive_class_get_by_name(utf *name)
{
- s4 i;
+ int i;
/* search table of primitive classes */
*******************************************************************************/
-classinfo *primitive_class_get_by_type(s4 type)
+classinfo *primitive_class_get_by_type(int32_t type)
{
return primitivetype_table[type].class_primitive;
}
classinfo *primitive_class_get_by_char(char ch)
{
- s4 index;
+ int32_t index;
switch (ch) {
case 'I':
}
+/* primitive_arrayclass_get_by_name ********************************************
+
+ Returns the primitive array-class of the given primitive class
+ name.
+
+*******************************************************************************/
+
+classinfo *primitive_arrayclass_get_by_name(utf *name)
+{
+ int i;
+
+ /* search table of primitive classes */
+
+ for (i = 0; i < PRIMITIVETYPE_COUNT; i++)
+ if (primitivetype_table[i].name == name)
+ return primitivetype_table[i].arrayclass;
+
+ /* keep compiler happy */
+
+ return NULL;
+}
+
+
/* primitive_arrayclass_get_by_type ********************************************
Returns the primitive array-class of the given type.
*******************************************************************************/
-classinfo *primitive_arrayclass_get_by_type(s4 type)
+classinfo *primitive_arrayclass_get_by_type(int32_t type)
{
return primitivetype_table[type].arrayclass;
}
#include "config.h"
+#include <stdint.h>
+
#include "vm/global.h"
#include "vmcore/class.h"
bool primitive_init(void);
bool primitive_class_is_primitive(classinfo *c);
classinfo *primitive_class_get_by_name(utf *name);
-classinfo *primitive_class_get_by_type(s4 type);
+classinfo *primitive_class_get_by_type(int32_t type);
classinfo *primitive_class_get_by_char(char ch);
-classinfo *primitive_arrayclass_get_by_type(s4 type);
+classinfo *primitive_arrayclass_get_by_name(utf *name);
+classinfo *primitive_arrayclass_get_by_type(int32_t type);
#endif /* _PRIMITIVE_H */