X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fvm%2Farray.c;fp=src%2Fvm%2Farray.c;h=6c8d5e41b938bc75e83ceefcf42b21ed788934c1;hb=01819c7561c7208a322a40961bc66074da4b93d0;hp=c90686a89dd7c3e50a582ea03461e76b6d5284a6;hpb=b222b26cb9052c27af8005482b8a68161fb33397;p=cacao.git diff --git a/src/vm/array.c b/src/vm/array.c index c90686a89..6c8d5e41b 100644 --- a/src/vm/array.c +++ b/src/vm/array.c @@ -228,6 +228,30 @@ type array_##name##array_element_get(java_handle_##name##array_t *a, int32_t ind return value; \ } +java_handle_t *array_objectarray_element_get(java_handle_objectarray_t *a, int32_t index) +{ + java_handle_t *value; + int32_t size; + + if (a == NULL) { + exceptions_throw_nullpointerexception(); + return NULL; + } + + size = LLNI_array_size(a); + + if ((index < 0) || (index > size)) { + exceptions_throw_arrayindexoutofboundsexception(); + return NULL; + } + + LLNI_CRITICAL_START; + value = LLNI_WRAP(LLNI_array_direct(a, index)); + LLNI_CRITICAL_END; + + return value; +} + ARRAY_TYPEARRAY_ELEMENT_GET(boolean, uint8_t) ARRAY_TYPEARRAY_ELEMENT_GET(byte, int8_t) ARRAY_TYPEARRAY_ELEMENT_GET(char, uint16_t) @@ -236,7 +260,6 @@ ARRAY_TYPEARRAY_ELEMENT_GET(int, int32_t) ARRAY_TYPEARRAY_ELEMENT_GET(long, int64_t) ARRAY_TYPEARRAY_ELEMENT_GET(float, float) ARRAY_TYPEARRAY_ELEMENT_GET(double, double) -ARRAY_TYPEARRAY_ELEMENT_GET(object, java_handle_t*) /* array_xxxarray_element_set ************************************************** @@ -265,6 +288,27 @@ void array_##name##array_element_set(java_handle_##name##array_t *a, int32_t ind LLNI_array_direct(a, index) = value; \ } +void array_objectarray_element_set(java_handle_objectarray_t *a, int32_t index, java_handle_t *value) +{ + int32_t size; + + if (a == NULL) { + exceptions_throw_nullpointerexception(); + return; + } + + size = LLNI_array_size(a); + + if ((index < 0) || (index > size)) { + exceptions_throw_arrayindexoutofboundsexception(); + return; + } + + LLNI_CRITICAL_START; + LLNI_array_direct(a, index) = LLNI_UNWRAP(value); + LLNI_CRITICAL_END; +} + ARRAY_TYPEARRAY_ELEMENT_SET(boolean, uint8_t) ARRAY_TYPEARRAY_ELEMENT_SET(byte, int8_t) ARRAY_TYPEARRAY_ELEMENT_SET(char, uint16_t) @@ -273,7 +317,6 @@ ARRAY_TYPEARRAY_ELEMENT_SET(int, int32_t) ARRAY_TYPEARRAY_ELEMENT_SET(long, int64_t) ARRAY_TYPEARRAY_ELEMENT_SET(float, float) ARRAY_TYPEARRAY_ELEMENT_SET(double, double) -ARRAY_TYPEARRAY_ELEMENT_SET(object, java_handle_t*) /* array_length_get ***********************************************************