jarray _Jv_NewPrimArray(java_lang_Class *eltype, jint count) { if (__builtin_expect(count < 0, false)) { fprintf(stderr, "throw negative array size\n"); abort(); } assert(eltype->vtable == (vtable_t*)-1); int elsize = eltype->size_in_bytes; assert(elsize > 0); // TODO: check for overflow size_t size = sizeof(array_header_t) + elsize * count; array_header_t *result = calloc(1, size); result->base.vptr = get_array_class(eltype)->vtable; result->length = count; return result; }
jarray _Jv_NewObjectArray(jsize count, java_lang_Class *eltype, jobject init) { (void)eltype; if (__builtin_expect(count < 0, false)) { fprintf(stderr, "throw negative array size\n"); abort(); } size_t elsize = sizeof(java_lang_Object*); // TODO: check for overflow size_t size = sizeof(array_header_t) + elsize * count; array_header_t *result = malloc(size); result->base.vptr = get_array_class(eltype)->vtable; result->length = count; java_lang_Object **data = get_array_data(java_lang_Object*, result); for (jsize i = 0; i < count; ++i) { data[i] = init; } return result; }
ObjectPtr<Array> create_array_from_range(const Value* begin, const Value* end) { ASSERT(begin <= end); int32_t sz = (int32_t)(end - begin); return create_object(get_array_class(), sz, begin); }
ObjectPtr<Array> create_array() { return create_object(get_array_class(), 0, NULL); }
java_lang_Class *_Z17_Jv_GetArrayClassPN4java4lang5ClassEPNS0_11ClassLoaderE( java_lang_Class *eltype, jobject loader) { (void)loader; return get_array_class(eltype); }