diff options
| author | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-11-25 00:36:51 +0000 |
|---|---|---|
| committer | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-11-25 00:36:51 +0000 |
| commit | 973df4d4252fba4f542a7a6cfd8bb667ededc989 (patch) | |
| tree | 35bb29ca80faf5479ebdd7ea3a0fbd2086f9fc89 /libjava/include | |
| parent | c957c6029353ee062b8bffcfe4267f5ca2045b7a (diff) | |
| download | ppe42-gcc-973df4d4252fba4f542a7a6cfd8bb667ededc989.tar.gz ppe42-gcc-973df4d4252fba4f542a7a6cfd8bb667ededc989.zip | |
* prims.cc (_Jv_NewObjectArray): Use
_Jv_GetArrayElementFromElementType.
(_Jv_NewPrimArray): Likewise.
* java/lang/natObject.cc (clone): Use
_Jv_GetArrayElementFromElementType instead of sizeof.
* java/lang/natSystem.cc (arraycopy): Use
_Jv_GetArrayElementFromElementType.
* include/jvm.h (_Jv_GetArrayElementFromElementType): New
function.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@30655 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/include')
| -rw-r--r-- | libjava/include/jvm.h | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/libjava/include/jvm.h b/libjava/include/jvm.h index d917a4f70f7..33925d34d78 100644 --- a/libjava/include/jvm.h +++ b/libjava/include/jvm.h @@ -114,6 +114,36 @@ _Jv_HashCode (jobject obj) return (jint) obj; } +// Return a raw pointer to the elements of an array given the array +// and its element type. You might think we could just pick a single +// array type and use elements() on it, but we can't because we must +// account for alignment of the element type. +inline char * +_Jv_GetArrayElementFromElementType (jobject array, + jclass element_type) +{ + char *elts; + if (element_type == JvPrimClass (byte)) + elts = (char *) elements ((jbyteArray) array); + else if (element_type == JvPrimClass (short)) + elts = (char *) elements ((jshortArray) array); + else if (element_type == JvPrimClass (int)) + elts = (char *) elements ((jintArray) array); + else if (element_type == JvPrimClass (long)) + elts = (char *) elements ((jlongArray) array); + else if (element_type == JvPrimClass (boolean)) + elts = (char *) elements ((jbooleanArray) array); + else if (element_type == JvPrimClass (char)) + elts = (char *) elements ((jcharArray) array); + else if (element_type == JvPrimClass (float)) + elts = (char *) elements ((jfloatArray) array); + else if (element_type == JvPrimClass (double)) + elts = (char *) elements ((jdoubleArray) array); + else + elts = (char *) elements ((jobjectArray) array); + return elts; +} + extern "C" void _Jv_ThrowBadArrayIndex (jint bad_index); extern "C" jobject _Jv_NewArray (jint type, jint size); extern "C" jobject _Jv_NewMultiArray (jclass klass, jint dims, ...); |

