示例#1
0
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;
}
示例#2
0
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;
}
示例#3
0
	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);
	}
示例#4
0
	ObjectPtr<Array> create_array() {
		return create_object(get_array_class(), 0, NULL);
	}
示例#5
0
java_lang_Class *_Z17_Jv_GetArrayClassPN4java4lang5ClassEPNS0_11ClassLoaderE(
	java_lang_Class *eltype, jobject loader)
{
	(void)loader;
	return get_array_class(eltype);
}