aboutsummaryrefslogtreecommitdiff
path: root/libjava/include/jvm.h
diff options
context:
space:
mode:
authorTom Tromey <tromey@cygnus.com>1999-11-25 00:36:51 +0000
committerTom Tromey <tromey@gcc.gnu.org>1999-11-25 00:36:51 +0000
commit93d455621810ca1fcb759fcb6cc4c237ba02a584 (patch)
tree35bb29ca80faf5479ebdd7ea3a0fbd2086f9fc89 /libjava/include/jvm.h
parentfc39d3710887c5a0d560d93e29e8c222d40bf072 (diff)
downloadgcc-93d455621810ca1fcb759fcb6cc4c237ba02a584.zip
gcc-93d455621810ca1fcb759fcb6cc4c237ba02a584.tar.gz
gcc-93d455621810ca1fcb759fcb6cc4c237ba02a584.tar.bz2
prims.cc (_Jv_NewObjectArray): Use _Jv_GetArrayElementFromElementType.
* 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. From-SVN: r30655
Diffstat (limited to 'libjava/include/jvm.h')
-rw-r--r--libjava/include/jvm.h30
1 files changed, 30 insertions, 0 deletions
diff --git a/libjava/include/jvm.h b/libjava/include/jvm.h
index d917a4f7..33925d3 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, ...);