Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: jni.c 8312 2007-08-15 22:10:22Z twisti $
-
*/
*******************************************************************************/
java_handle_t *_Jv_jni_invokeNative(methodinfo *m, java_handle_t *o,
- java_objectarray *params)
+ java_handle_objectarray_t *params)
{
methodinfo *resm;
java_handle_t *ro;
/* check if we got the right number of arguments */
if (((params == NULL) && (paramcount != 0)) ||
- (params && (params->header.size != paramcount)))
+ (params && (LLNI_array_size(params) != paramcount)))
{
exceptions_throw_illegalargumentexception();
return NULL;
classloader *cl;
classinfo *c;
- TRACEJNICALLS("_Jv_JNI_DefineClass(env=%p, name=%s, loader=%p, buf=%p, bufLen=%d", env, name, loader, buf, bufLen);
+ TRACEJNICALLS("_Jv_JNI_DefineClass(env=%p, name=%s, loader=%p, buf=%p, bufLen=%d)", env, name, loader, buf, bufLen);
u = utf_new_char(name);
cl = (classloader *) loader;
- c = class_define(u, cl, bufLen, (const uint8_t *) buf);
+ c = class_define(u, cl, bufLen, (const uint8_t *) buf, NULL);
return (jclass) _Jv_JNI_NewLocalRef(env, (jobject) c);
#else
TRACEJNICALLS("_Jv_JNI_GetSuperclass(env=%p, sub=%p)", env, sub);
- c = (classinfo *) sub;
+ c = LLNI_classinfo_unwrap(sub);
if (c == NULL)
return NULL;
STATISTICS(jniinvokation());
- c = (classinfo *) clazz;
+ c = LLNI_classinfo_unwrap(clazz);
if (msg == NULL)
msg = "";
s = javastring_new_from_utf_string(msg);
STATISTICS(jniinvokation());
- c = (classinfo *) clazz;
+ c = LLNI_classinfo_unwrap(clazz);
if ((c->flags & ACC_INTERFACE) || (c->flags & ACC_ABSTRACT)) {
exceptions_throw_instantiationexception(c);
STATISTICS(jniinvokation());
- c = (classinfo *) clazz;
+ c = LLNI_classinfo_unwrap(clazz);
m = (methodinfo *) methodID;
/* create object */
STATISTICS(jniinvokation());
- c = (classinfo *) clazz;
+ c = LLNI_classinfo_unwrap(clazz);
m = (methodinfo *) methodID;
/* create object */
STATISTICS(jniinvokation());
- c = (classinfo *) clazz;
+ c = LLNI_classinfo_unwrap(clazz);
m = (methodinfo *) methodID;
/* create object */
STATISTICS(jniinvokation());
- c = (classinfo *) clazz;
+ c = LLNI_classinfo_unwrap(clazz);
if (c == NULL)
return NULL;
type ret; \
\
o = (java_handle_t *) obj; \
- c = (classinfo *) clazz; \
+ c = LLNI_classinfo_unwrap(clazz); \
m = (methodinfo *) methodID; \
\
va_start(ap, methodID); \
type ret; \
\
o = (java_handle_t *) obj; \
- c = (classinfo *) clazz; \
+ c = LLNI_classinfo_unwrap(clazz); \
m = (methodinfo *) methodID; \
\
ret = _Jv_jni_CallIntMethod(o, c->vftbl, m, args); \
va_list ap;
o = (java_handle_t *) obj;
- c = (classinfo *) clazz;
+ c = LLNI_classinfo_unwrap(clazz);
m = (methodinfo *) methodID;
va_start(ap, methodID);
java_handle_t *r;
o = (java_handle_t *) obj;
- c = (classinfo *) clazz;
+ c = LLNI_classinfo_unwrap(clazz);
m = (methodinfo *) methodID;
r = _Jv_jni_CallObjectMethod(o, c->vftbl, m, args);
va_list ap;
o = (java_handle_t *) obj;
- c = (classinfo *) clazz;
+ c = LLNI_classinfo_unwrap(clazz);
m = (methodinfo *) methodID;
va_start(ap, methodID);
methodinfo *m;
o = (java_handle_t *) obj;
- c = (classinfo *) clazz;
+ c = LLNI_classinfo_unwrap(clazz);
m = (methodinfo *) methodID;
_Jv_jni_CallVoidMethod(o, c->vftbl, m, args);
methodinfo *m;
o = (java_handle_t *) obj;
- c = (classinfo *) clazz;
+ c = LLNI_classinfo_unwrap(clazz);
m = (methodinfo *) methodID;
_Jv_jni_CallVoidMethodA(o, c->vftbl, m, args);
STATISTICS(jniinvokation());
- c = (classinfo *) clazz;
+ c = LLNI_classinfo_unwrap(clazz);
/* XXX NPE check? */
STATISTICS(jniinvokation());
- c = (classinfo *) clazz;
+ c = LLNI_classinfo_unwrap(clazz);
if (!c)
return NULL;
STATISTICS(jniinvokation());
- c = (classinfo *) clazz;
+ c = LLNI_classinfo_unwrap(clazz);
uname = utf_new_char((char *) name);
usig = utf_new_char((char *) sig);
\
STATISTICS(jniinvokation()); \
\
- c = (classinfo *) clazz; \
+ c = LLNI_classinfo_unwrap(clazz); \
f = (fieldinfo *) fieldID; \
\
if (!(c->state & CLASS_INITIALIZED)) \
STATISTICS(jniinvokation());
- c = (classinfo *) clazz;
+ c = LLNI_classinfo_unwrap(clazz);
f = (fieldinfo *) fieldID;
if (!(c->state & CLASS_INITIALIZED))
\
STATISTICS(jniinvokation()); \
\
- c = (classinfo *) clazz; \
+ c = LLNI_classinfo_unwrap(clazz); \
f = (fieldinfo *) fieldID; \
\
if (!(c->state & CLASS_INITIALIZED)) \
STATISTICS(jniinvokation());
- c = (classinfo *) clazz;
+ c = LLNI_classinfo_unwrap(clazz);
f = (fieldinfo *) fieldID;
if (!(c->state & CLASS_INITIALIZED))
jstring _Jv_JNI_NewString(JNIEnv *env, const jchar *buf, jsize len)
{
- java_lang_String *s;
- java_chararray *a;
- u4 i;
+ java_lang_String *s;
+ java_handle_chararray_t *a;
+ u4 i;
STATISTICS(jniinvokation());
/* copy text */
for (i = 0; i < len; i++)
- a->data[i] = buf[i];
+ LLNI_array_direct(a, i) = buf[i];
LLNI_field_set_ref(s, value , a);
LLNI_field_set_val(s, offset, 0);
u2 *javastring_tou2(jstring so)
{
- java_lang_String *s;
- java_chararray *a;
- u2 *stringbuffer;
- u4 i;
+ java_lang_String *s;
+ java_handle_chararray_t *a;
+ u2 *stringbuffer;
+ u4 i;
+ int32_t count;
+ int32_t offset;
STATISTICS(jniinvokation());
if (!a)
return NULL;
+ LLNI_field_get_val(s, count, count);
+ LLNI_field_get_val(s, offset, offset);
+
/* allocate memory */
- stringbuffer = MNEW(u2, LLNI_field_direct(s, count) + 1);
+ stringbuffer = MNEW(u2, count + 1);
/* copy text */
- for (i = 0; i < LLNI_field_direct(s, count); i++)
- stringbuffer[i] = a->data[LLNI_field_direct(s, offset) + i];
+ for (i = 0; i < count; i++)
+ stringbuffer[i] = LLNI_array_direct(a, offset + i);
/* terminate string */
jsize _Jv_JNI_GetStringUTFLength(JNIEnv *env, jstring string)
{
- java_lang_String *s;
+ java_lang_String *s;
s4 length;
TRACEJNICALLS("_Jv_JNI_GetStringUTFLength(env=%p, string=%p)", env, string);
s = (java_lang_String *) string;
- length = u2_utflength(LLNI_field_direct(s, value)->data, LLNI_field_direct(s, count));
+ length = u2_utflength(LLNI_field_direct(s, value)->data, LLNI_field_direct(s, count));
return length;
}
jsize _Jv_JNI_GetArrayLength(JNIEnv *env, jarray array)
{
- java_arrayheader *a;
+ java_handle_t *a;
+ jsize size;
STATISTICS(jniinvokation());
- a = (java_arrayheader *) array;
+ a = (java_handle_t *) array;
- return a->size;
+ size = LLNI_array_size(a);
+
+ return size;
}
jobjectArray _Jv_JNI_NewObjectArray(JNIEnv *env, jsize length,
jclass elementClass, jobject initialElement)
{
- classinfo *c;
- java_handle_t *o;
- java_objectarray *oa;
- s4 i;
+ classinfo *c;
+ java_handle_t *o;
+ java_handle_objectarray_t *oa;
+ s4 i;
STATISTICS(jniinvokation());
- c = (classinfo *) elementClass;
+ c = LLNI_classinfo_unwrap(elementClass);
o = (java_handle_t *) initialElement;
if (length < 0) {
/* set all elements to initialElement */
for (i = 0; i < length; i++)
- oa->data[i] = o;
+ LLNI_objectarray_element_set(oa, i, o);
return (jobjectArray) _Jv_JNI_NewLocalRef(env, (jobject) oa);
}
jobject _Jv_JNI_GetObjectArrayElement(JNIEnv *env, jobjectArray array,
jsize index)
{
- java_objectarray *oa;
- java_handle_t *o;
+ java_handle_objectarray_t *oa;
+ java_handle_t *o;
STATISTICS(jniinvokation());
- oa = (java_objectarray *) array;
+ oa = (java_handle_objectarray_t *) array;
- if (index >= oa->header.size) {
+ if (index >= LLNI_array_size(oa)) {
exceptions_throw_arrayindexoutofboundsexception();
return NULL;
}
- o = oa->data[index];
+ LLNI_objectarray_element_get(oa, index, o);
return _Jv_JNI_NewLocalRef(env, (jobject) o);
}
void _Jv_JNI_SetObjectArrayElement(JNIEnv *env, jobjectArray array,
jsize index, jobject val)
{
- java_objectarray *oa;
- java_handle_t *o;
+ java_handle_objectarray_t *oa;
+ java_handle_t *o;
STATISTICS(jniinvokation());
- oa = (java_objectarray *) array;
+ oa = (java_handle_objectarray_t *) array;
o = (java_handle_t *) val;
- if (index >= oa->header.size) {
+ if (index >= LLNI_array_size(oa)) {
exceptions_throw_arrayindexoutofboundsexception();
return;
}
if (!builtin_canstore(oa, o))
return;
- oa->data[index] = o;
+ LLNI_objectarray_element_set(oa, index, o);
}
#define JNI_NEW_ARRAY(name, type, intern) \
type _Jv_JNI_New##name##Array(JNIEnv *env, jsize len) \
{ \
- java_##intern##array *a; \
+ java_handle_##intern##array_t *a; \
\
STATISTICS(jniinvokation()); \
\
type *_Jv_JNI_Get##name##ArrayElements(JNIEnv *env, type##Array array, \
jboolean *isCopy) \
{ \
- java_##intern##array *a; \
+ java_handle_##intern##array_t *a; \
\
STATISTICS(jniinvokation()); \
\
- a = (java_##intern##array *) array; \
+ a = (java_handle_##intern##array_t *) array; \
\
if (isCopy) \
*isCopy = JNI_FALSE; \
\
- return a->data; \
+ return LLNI_array_data(a); \
}
JNI_GET_ARRAY_ELEMENTS(Boolean, jboolean, boolean)
*******************************************************************************/
-#define JNI_RELEASE_ARRAY_ELEMENTS(name, type, intern, intern2) \
-void _Jv_JNI_Release##name##ArrayElements(JNIEnv *env, type##Array array, \
- type *elems, jint mode) \
-{ \
- java_##intern##array *a; \
- \
- STATISTICS(jniinvokation()); \
- \
- a = (java_##intern##array *) array; \
- \
- if (elems != a->data) { \
- switch (mode) { \
- case JNI_COMMIT: \
- MCOPY(a->data, elems, intern2, a->header.size); \
- break; \
- case 0: \
- MCOPY(a->data, elems, intern2, a->header.size); \
- /* XXX TWISTI how should it be freed? */ \
- break; \
- case JNI_ABORT: \
- /* XXX TWISTI how should it be freed? */ \
- break; \
- } \
- } \
+#define JNI_RELEASE_ARRAY_ELEMENTS(name, type, intern, intern2) \
+void _Jv_JNI_Release##name##ArrayElements(JNIEnv *env, type##Array array, \
+ type *elems, jint mode) \
+{ \
+ java_handle_##intern##array_t *a; \
+ \
+ STATISTICS(jniinvokation()); \
+ \
+ a = (java_handle_##intern##array_t *) array; \
+ \
+ if (elems != LLNI_array_data(a)) { \
+ switch (mode) { \
+ case JNI_COMMIT: \
+ MCOPY(LLNI_array_data(a), elems, intern2, LLNI_array_size(a)); \
+ break; \
+ case 0: \
+ MCOPY(LLNI_array_data(a), elems, intern2, LLNI_array_size(a)); \
+ /* XXX TWISTI how should it be freed? */ \
+ break; \
+ case JNI_ABORT: \
+ /* XXX TWISTI how should it be freed? */ \
+ break; \
+ } \
+ } \
}
JNI_RELEASE_ARRAY_ELEMENTS(Boolean, jboolean, boolean, u1)
*******************************************************************************/
-#define JNI_GET_ARRAY_REGION(name, type, intern, intern2) \
-void _Jv_JNI_Get##name##ArrayRegion(JNIEnv *env, type##Array array, \
- jsize start, jsize len, type *buf) \
-{ \
- java_##intern##array *a; \
- \
- STATISTICS(jniinvokation()); \
- \
- a = (java_##intern##array *) array; \
- \
- if ((start < 0) || (len < 0) || (start + len > a->header.size)) \
- exceptions_throw_arrayindexoutofboundsexception(); \
- else \
- MCOPY(buf, &a->data[start], intern2, len); \
+#define JNI_GET_ARRAY_REGION(name, type, intern, intern2) \
+void _Jv_JNI_Get##name##ArrayRegion(JNIEnv *env, type##Array array, \
+ jsize start, jsize len, type *buf) \
+{ \
+ java_handle_##intern##array_t *a; \
+ \
+ STATISTICS(jniinvokation()); \
+ \
+ a = (java_handle_##intern##array_t *) array; \
+ \
+ if ((start < 0) || (len < 0) || (start + len > LLNI_array_size(a))) \
+ exceptions_throw_arrayindexoutofboundsexception(); \
+ else \
+ MCOPY(buf, &LLNI_array_direct(a, start), intern2, len); \
}
JNI_GET_ARRAY_REGION(Boolean, jboolean, boolean, u1)
void _Jv_JNI_Set##name##ArrayRegion(JNIEnv *env, type##Array array, \
jsize start, jsize len, const type *buf) \
{ \
- java_##intern##array *a; \
+ java_handle_##intern##array_t *a; \
\
STATISTICS(jniinvokation()); \
\
- a = (java_##intern##array *) array; \
+ a = (java_handle_##intern##array_t *) array; \
\
- if ((start < 0) || (len < 0) || (start + len > a->header.size)) \
+ if ((start < 0) || (len < 0) || (start + len > LLNI_array_size(a))) \
exceptions_throw_arrayindexoutofboundsexception(); \
else \
- MCOPY(&a->data[start], buf, intern2, len); \
+ MCOPY(&LLNI_array_direct(a, start), buf, intern2, len); \
}
JNI_SET_ARRAY_REGION(Boolean, jboolean, boolean, u1)
STATISTICS(jniinvokation());
- c = (classinfo *) clazz;
+ c = LLNI_classinfo_unwrap(clazz);
/* XXX: if implemented this needs a call to jvmti_NativeMethodBind
if (jvmti) jvmti_NativeMethodBind(method, address, new_address_ptr);
void _Jv_JNI_GetStringRegion(JNIEnv* env, jstring str, jsize start, jsize len,
jchar *buf)
{
- java_lang_String *s;
- java_chararray *ca;
+ java_lang_String *s;
+ java_handle_chararray_t *ca;
STATISTICS(jniinvokation());
return;
}
- MCOPY(buf, &ca->data[start], u2, len);
+ MCOPY(buf, &LLNI_array_direct(ca, start), u2, len);
}
void _Jv_JNI_GetStringUTFRegion(JNIEnv* env, jstring str, jsize start,
jsize len, char *buf)
{
- java_lang_String *s;
- java_chararray *ca;
- s4 i;
+ java_lang_String *s;
+ java_handle_chararray_t *ca;
+ s4 i;
+ int32_t count;
+ int32_t offset;
TRACEJNICALLS("_Jv_JNI_GetStringUTFRegion(env=%p, str=%p, start=%d, len=%d, buf=%p)", env, str, start, len, buf);
s = (java_lang_String *) str;
LLNI_field_get_ref(s, value, ca);
+ LLNI_field_get_val(s, count, count);
+ LLNI_field_get_val(s, offset, offset);
- if ((start < 0) || (len < 0) || (start > LLNI_field_direct(s, count)) ||
- (start + len > LLNI_field_direct(s, count))) {
+ if ((start < 0) || (len < 0) || (start > count) || (start + len > count)) {
exceptions_throw_stringindexoutofboundsexception();
return;
}
for (i = 0; i < len; i++)
- buf[i] = ca->data[LLNI_field_direct(s, offset) + start + i];
+ buf[i] = LLNI_array_direct(ca, offset + start + i);
buf[i] = '\0';
}
void *_Jv_JNI_GetPrimitiveArrayCritical(JNIEnv *env, jarray array,
jboolean *isCopy)
{
- java_bytearray *ba;
- jbyte *bp;
+ java_handle_bytearray_t *ba;
+ jbyte *bp;
- ba = (java_bytearray *) array;
+ ba = (java_handle_bytearray_t *) array;
/* do the same as Kaffe does */