Changeset 1391 for branches/GNU/src/gcc/libjava/jni.cc
- Timestamp:
- Apr 27, 2004, 8:39:34 PM (21 years ago)
- Location:
- branches/GNU/src/gcc
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/GNU/src/gcc
- Property svn:ignore
-
old new 26 26 configure.vr 27 27 configure.vrs 28 dir.info 28 29 Makefile 29 dir.info30 30 lost+found 31 31 update.out
-
- Property svn:ignore
-
branches/GNU/src/gcc/libjava/jni.cc
-
Property cvs2svn:cvs-rev
changed from
1.1
to1.1.1.2
r1390 r1391 1 1 // jni.cc - JNI implementation, including the jump table. 2 2 3 /* Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation3 /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation 4 4 5 5 This file is part of libgcj. … … 11 11 #include <config.h> 12 12 13 #include <stdio.h> 13 14 #include <stddef.h> 14 15 #include <string.h> … … 220 221 221 222 static jobject 222 _Jv_JNI_NewGlobalRef(JNIEnv *, jobject obj)223 (JNICALL _Jv_JNI_NewGlobalRef) (JNIEnv *, jobject obj) 223 224 { 224 225 // This seems weird but I think it is correct. … … 229 230 230 231 static void 231 _Jv_JNI_DeleteGlobalRef(JNIEnv *, jobject obj)232 (JNICALL _Jv_JNI_DeleteGlobalRef) (JNIEnv *, jobject obj) 232 233 { 233 234 // This seems weird but I think it is correct. … … 237 238 238 239 static void 239 _Jv_JNI_DeleteLocalRef(JNIEnv *env, jobject obj)240 (JNICALL _Jv_JNI_DeleteLocalRef) (JNIEnv *env, jobject obj) 240 241 { 241 242 _Jv_JNI_LocalFrame *frame; … … 264 265 265 266 static jint 266 _Jv_JNI_EnsureLocalCapacity(JNIEnv *env, jint size)267 (JNICALL _Jv_JNI_EnsureLocalCapacity) (JNIEnv *env, jint size) 267 268 { 268 269 // It is easier to just always allocate a new frame of the requested … … 292 293 293 294 static jint 294 _Jv_JNI_PushLocalFrame(JNIEnv *env, jint size)295 (JNICALL _Jv_JNI_PushLocalFrame) (JNIEnv *env, jint size) 295 296 { 296 297 jint r = _Jv_JNI_EnsureLocalCapacity (env, size); … … 305 306 306 307 static jobject 307 _Jv_JNI_NewLocalRef(JNIEnv *env, jobject obj)308 (JNICALL _Jv_JNI_NewLocalRef) (JNIEnv *env, jobject obj) 308 309 { 309 310 // This seems weird but I think it is correct. … … 346 347 347 348 static jobject 348 _Jv_JNI_PopLocalFrame(JNIEnv *env, jobject result, int stop)349 (JNICALL _Jv_JNI_PopLocalFrame) (JNIEnv *env, jobject result, int stop) 349 350 { 350 351 _Jv_JNI_LocalFrame *rf = env->locals; … … 381 382 382 383 static jobject 383 _Jv_JNI_PopLocalFrame(JNIEnv *env, jobject result)384 (JNICALL _Jv_JNI_PopLocalFrame) (JNIEnv *env, jobject result) 384 385 { 385 386 return _Jv_JNI_PopLocalFrame (env, result, MARK_USER); … … 426 427 427 428 static jint 428 _Jv_JNI_GetVersion(JNIEnv *)429 { 430 return JNI_VERSION_1_ 2;429 (JNICALL _Jv_JNI_GetVersion) (JNIEnv *) 430 { 431 return JNI_VERSION_1_4; 431 432 } 432 433 433 434 static jclass 434 _Jv_JNI_DefineClass (JNIEnv *env, jobject loader,435 const jbyte *buf, jsize bufLen)435 (JNICALL _Jv_JNI_DefineClass) (JNIEnv *env, const char *name, jobject loader, 436 const jbyte *buf, jsize bufLen) 436 437 { 437 438 try … … 439 440 loader = unwrap (loader); 440 441 442 jstring sname = JvNewStringUTF (name); 441 443 jbyteArray bytes = JvNewByteArray (bufLen); 442 444 … … 447 449 = reinterpret_cast<java::lang::ClassLoader *> (loader); 448 450 449 jclass result = l->defineClass ( bytes, 0, bufLen);451 jclass result = l->defineClass (sname, bytes, 0, bufLen); 450 452 return (jclass) wrap_value (env, result); 451 453 } … … 458 460 459 461 static jclass 460 _Jv_JNI_FindClass(JNIEnv *env, const char *name)462 (JNICALL _Jv_JNI_FindClass) (JNIEnv *env, const char *name) 461 463 { 462 464 // FIXME: assume that NAME isn't too long. … … 494 496 495 497 static jclass 496 _Jv_JNI_GetSuperclass(JNIEnv *env, jclass clazz)498 (JNICALL _Jv_JNI_GetSuperclass) (JNIEnv *env, jclass clazz) 497 499 { 498 500 return (jclass) wrap_value (env, unwrap (clazz)->getSuperclass ()); … … 500 502 501 503 static jboolean 502 _Jv_JNI_IsAssignableFrom(JNIEnv *, jclass clazz1, jclass clazz2)504 (JNICALL _Jv_JNI_IsAssignableFrom) (JNIEnv *, jclass clazz1, jclass clazz2) 503 505 { 504 506 return unwrap (clazz1)->isAssignableFrom (unwrap (clazz2)); … … 506 508 507 509 static jint 508 _Jv_JNI_Throw(JNIEnv *env, jthrowable obj)510 (JNICALL _Jv_JNI_Throw) (JNIEnv *env, jthrowable obj) 509 511 { 510 512 // We check in case the user did some funky cast. … … 516 518 517 519 static jint 518 _Jv_JNI_ThrowNew(JNIEnv *env, jclass clazz, const char *message)520 (JNICALL _Jv_JNI_ThrowNew) (JNIEnv *env, jclass clazz, const char *message) 519 521 { 520 522 using namespace java::lang::reflect; … … 553 555 554 556 static jthrowable 555 _Jv_JNI_ExceptionOccurred(JNIEnv *env)557 (JNICALL _Jv_JNI_ExceptionOccurred) (JNIEnv *env) 556 558 { 557 559 return (jthrowable) wrap_value (env, env->ex); … … 559 561 560 562 static void 561 _Jv_JNI_ExceptionDescribe(JNIEnv *env)563 (JNICALL _Jv_JNI_ExceptionDescribe) (JNIEnv *env) 562 564 { 563 565 if (env->ex != NULL) … … 566 568 567 569 static void 568 _Jv_JNI_ExceptionClear(JNIEnv *env)570 (JNICALL _Jv_JNI_ExceptionClear) (JNIEnv *env) 569 571 { 570 572 env->ex = NULL; … … 572 574 573 575 static jboolean 574 _Jv_JNI_ExceptionCheck(JNIEnv *env)576 (JNICALL _Jv_JNI_ExceptionCheck) (JNIEnv *env) 575 577 { 576 578 return env->ex != NULL; … … 578 580 579 581 static void 580 _Jv_JNI_FatalError(JNIEnv *, const char *message)582 (JNICALL _Jv_JNI_FatalError) (JNIEnv *, const char *message) 581 583 { 582 584 JvFail (message); … … 587 589 588 590 static jboolean 589 _Jv_JNI_IsSameObject(JNIEnv *, jobject obj1, jobject obj2)591 (JNICALL _Jv_JNI_IsSameObject) (JNIEnv *, jobject obj1, jobject obj2) 590 592 { 591 593 return unwrap (obj1) == unwrap (obj2); … … 593 595 594 596 static jobject 595 _Jv_JNI_AllocObject(JNIEnv *env, jclass clazz)597 (JNICALL _Jv_JNI_AllocObject) (JNIEnv *env, jclass clazz) 596 598 { 597 599 jobject obj = NULL; … … 605 607 env->ex = new java::lang::InstantiationException (); 606 608 else 607 { 608 // FIXME: will this work for String? 609 obj = JvAllocObject (clazz); 610 } 609 obj = JvAllocObject (clazz); 611 610 } 612 611 catch (jthrowable t) … … 619 618 620 619 static jclass 621 _Jv_JNI_GetObjectClass(JNIEnv *env, jobject obj)620 (JNICALL _Jv_JNI_GetObjectClass) (JNIEnv *env, jobject obj) 622 621 { 623 622 obj = unwrap (obj); … … 627 626 628 627 static jboolean 629 _Jv_JNI_IsInstanceOf(JNIEnv *, jobject obj, jclass clazz)628 (JNICALL _Jv_JNI_IsInstanceOf) (JNIEnv *, jobject obj, jclass clazz) 630 629 { 631 630 return unwrap (clazz)->isInstance(unwrap (obj)); … … 641 640 template<jboolean is_static> 642 641 static jmethodID 643 _Jv_JNI_GetAnyMethodID(JNIEnv *env, jclass clazz,644 const char *name, const char *sig)642 (JNICALL _Jv_JNI_GetAnyMethodID) (JNIEnv *env, jclass clazz, 643 const char *name, const char *sig) 645 644 { 646 645 try … … 700 699 for (int i = 0; i < arg_types->length; ++i) 701 700 { 701 // Here we assume that sizeof(int) >= sizeof(jint), because we 702 // use `int' when decoding the varargs. Likewise for 703 // float, and double. Also we assume that sizeof(jlong) >= 704 // sizeof(int), i.e. that jlong values are not further 705 // promoted. 706 JvAssert (sizeof (int) >= sizeof (jint)); 707 JvAssert (sizeof (jlong) >= sizeof (int)); 708 JvAssert (sizeof (double) >= sizeof (jfloat)); 709 JvAssert (sizeof (double) >= sizeof (jdouble)); 702 710 if (arg_elts[i] == JvPrimClass (byte)) 703 711 values[i].b = (jbyte) va_arg (vargs, int); … … 705 713 values[i].s = (jshort) va_arg (vargs, int); 706 714 else if (arg_elts[i] == JvPrimClass (int)) 707 values[i].i = va_arg (vargs, jint);715 values[i].i = (jint) va_arg (vargs, int); 708 716 else if (arg_elts[i] == JvPrimClass (long)) 709 values[i].j = va_arg (vargs, jlong);717 values[i].j = (jlong) va_arg (vargs, jlong); 710 718 else if (arg_elts[i] == JvPrimClass (float)) 711 values[i].f = va_arg (vargs, jfloat);719 values[i].f = (jfloat) va_arg (vargs, double); 712 720 else if (arg_elts[i] == JvPrimClass (double)) 713 values[i].d = va_arg (vargs, jdouble);721 values[i].d = (jdouble) va_arg (vargs, double); 714 722 else if (arg_elts[i] == JvPrimClass (boolean)) 715 723 values[i].z = (jboolean) va_arg (vargs, int); … … 728 736 template<typename T, invocation_type style> 729 737 static T 730 _Jv_JNI_CallAnyMethodV(JNIEnv *env, jobject obj, jclass klass,731 jmethodID id, va_list vargs)738 (JNICALL _Jv_JNI_CallAnyMethodV) (JNIEnv *env, jobject obj, jclass klass, 739 jmethodID id, va_list vargs) 732 740 { 733 741 obj = unwrap (obj); … … 776 784 template<typename T, invocation_type style> 777 785 static T 778 _Jv_JNI_CallAnyMethod(JNIEnv *env, jobject obj, jclass klass,779 jmethodID method, ...)786 (JNICALL _Jv_JNI_CallAnyMethod) (JNIEnv *env, jobject obj, jclass klass, 787 jmethodID method, ...) 780 788 { 781 789 va_list args; … … 791 799 template<typename T, invocation_type style> 792 800 static T 793 _Jv_JNI_CallAnyMethodA(JNIEnv *env, jobject obj, jclass klass,794 jmethodID id, jvalue *args)801 (JNICALL _Jv_JNI_CallAnyMethodA) (JNIEnv *env, jobject obj, jclass klass, 802 jmethodID id, jvalue *args) 795 803 { 796 804 obj = unwrap (obj); … … 846 854 template<invocation_type style> 847 855 static void 848 _Jv_JNI_CallAnyVoidMethodV(JNIEnv *env, jobject obj, jclass klass,849 jmethodID id, va_list vargs)856 (JNICALL _Jv_JNI_CallAnyVoidMethodV) (JNIEnv *env, jobject obj, jclass klass, 857 jmethodID id, va_list vargs) 850 858 { 851 859 obj = unwrap (obj); … … 887 895 template<invocation_type style> 888 896 static void 889 _Jv_JNI_CallAnyVoidMethod(JNIEnv *env, jobject obj, jclass klass,890 jmethodID method, ...)897 (JNICALL _Jv_JNI_CallAnyVoidMethod) (JNIEnv *env, jobject obj, jclass klass, 898 jmethodID method, ...) 891 899 { 892 900 va_list args; … … 899 907 template<invocation_type style> 900 908 static void 901 _Jv_JNI_CallAnyVoidMethodA(JNIEnv *env, jobject obj, jclass klass,902 jmethodID id, jvalue *args)909 (JNICALL _Jv_JNI_CallAnyVoidMethodA) (JNIEnv *env, jobject obj, jclass klass, 910 jmethodID id, jvalue *args) 903 911 { 904 912 if (style == normal) … … 943 951 template<typename T> 944 952 static T 945 _Jv_JNI_CallMethodV (JNIEnv *env, jobject obj, jmethodID id, va_list args) 953 (JNICALL _Jv_JNI_CallMethodV) (JNIEnv *env, jobject obj, 954 jmethodID id, va_list args) 946 955 { 947 956 return _Jv_JNI_CallAnyMethodV<T, normal> (env, obj, NULL, id, args); … … 952 961 template<typename T> 953 962 static T 954 _Jv_JNI_CallMethod(JNIEnv *env, jobject obj, jmethodID id, ...)963 (JNICALL _Jv_JNI_CallMethod) (JNIEnv *env, jobject obj, jmethodID id, ...) 955 964 { 956 965 va_list args; … … 968 977 template<typename T> 969 978 static T 970 _Jv_JNI_CallMethodA (JNIEnv *env, jobject obj, jmethodID id, jvalue *args) 979 (JNICALL _Jv_JNI_CallMethodA) (JNIEnv *env, jobject obj, 980 jmethodID id, jvalue *args) 971 981 { 972 982 return _Jv_JNI_CallAnyMethodA<T, normal> (env, obj, NULL, id, args); … … 974 984 975 985 static void 976 _Jv_JNI_CallVoidMethodV (JNIEnv *env, jobject obj, jmethodID id, va_list args) 986 (JNICALL _Jv_JNI_CallVoidMethodV) (JNIEnv *env, jobject obj, 987 jmethodID id, va_list args) 977 988 { 978 989 _Jv_JNI_CallAnyVoidMethodV<normal> (env, obj, NULL, id, args); … … 980 991 981 992 static void 982 _Jv_JNI_CallVoidMethod(JNIEnv *env, jobject obj, jmethodID id, ...)993 (JNICALL _Jv_JNI_CallVoidMethod) (JNIEnv *env, jobject obj, jmethodID id, ...) 983 994 { 984 995 va_list args; … … 990 1001 991 1002 static void 992 _Jv_JNI_CallVoidMethodA (JNIEnv *env, jobject obj, jmethodID id, jvalue *args) 1003 (JNICALL _Jv_JNI_CallVoidMethodA) (JNIEnv *env, jobject obj, 1004 jmethodID id, jvalue *args) 993 1005 { 994 1006 _Jv_JNI_CallAnyVoidMethodA<normal> (env, obj, NULL, id, args); … … 999 1011 template<typename T> 1000 1012 static T 1001 _Jv_JNI_CallStaticMethodV(JNIEnv *env, jclass klass,1002 jmethodID id, va_list args)1013 (JNICALL _Jv_JNI_CallStaticMethodV) (JNIEnv *env, jclass klass, 1014 jmethodID id, va_list args) 1003 1015 { 1004 1016 JvAssert (((id->accflags) & java::lang::reflect::Modifier::STATIC)); … … 1012 1024 template<typename T> 1013 1025 static T 1014 _Jv_JNI_CallStaticMethod (JNIEnv *env, jclass klass, jmethodID id, ...) 1026 (JNICALL _Jv_JNI_CallStaticMethod) (JNIEnv *env, jclass klass, 1027 jmethodID id, ...) 1015 1028 { 1016 1029 va_list args; … … 1032 1045 template<typename T> 1033 1046 static T 1034 _Jv_JNI_CallStaticMethodA(JNIEnv *env, jclass klass, jmethodID id,1035 jvalue *args)1047 (JNICALL _Jv_JNI_CallStaticMethodA) (JNIEnv *env, jclass klass, jmethodID id, 1048 jvalue *args) 1036 1049 { 1037 1050 JvAssert (((id->accflags) & java::lang::reflect::Modifier::STATIC)); … … 1042 1055 1043 1056 static void 1044 _Jv_JNI_CallStaticVoidMethodV (JNIEnv *env, jclass klass, jmethodID id, 1045 1057 (JNICALL _Jv_JNI_CallStaticVoidMethodV) (JNIEnv *env, jclass klass, 1058 jmethodID id, va_list args) 1046 1059 { 1047 1060 _Jv_JNI_CallAnyVoidMethodV<static_type> (env, NULL, klass, id, args); … … 1049 1062 1050 1063 static void 1051 _Jv_JNI_CallStaticVoidMethod (JNIEnv *env, jclass klass, jmethodID id, ...) 1064 (JNICALL _Jv_JNI_CallStaticVoidMethod) (JNIEnv *env, jclass klass, 1065 jmethodID id, ...) 1052 1066 { 1053 1067 va_list args; … … 1059 1073 1060 1074 static void 1061 _Jv_JNI_CallStaticVoidMethodA (JNIEnv *env, jclass klass, jmethodID id, 1062 1075 (JNICALL _Jv_JNI_CallStaticVoidMethodA) (JNIEnv *env, jclass klass, 1076 jmethodID id, jvalue *args) 1063 1077 { 1064 1078 _Jv_JNI_CallAnyVoidMethodA<static_type> (env, NULL, klass, id, args); … … 1066 1080 1067 1081 static jobject 1068 _Jv_JNI_NewObjectV(JNIEnv *env, jclass klass,1069 jmethodID id, va_list args)1082 (JNICALL _Jv_JNI_NewObjectV) (JNIEnv *env, jclass klass, 1083 jmethodID id, va_list args) 1070 1084 { 1071 1085 JvAssert (klass && ! klass->isArray ()); … … 1081 1095 1082 1096 static jobject 1083 _Jv_JNI_NewObject(JNIEnv *env, jclass klass, jmethodID id, ...)1097 (JNICALL _Jv_JNI_NewObject) (JNIEnv *env, jclass klass, jmethodID id, ...) 1084 1098 { 1085 1099 JvAssert (klass && ! klass->isArray ()); … … 1102 1116 1103 1117 static jobject 1104 _Jv_JNI_NewObjectA(JNIEnv *env, jclass klass, jmethodID id,1105 jvalue *args)1118 (JNICALL _Jv_JNI_NewObjectA) (JNIEnv *env, jclass klass, jmethodID id, 1119 jvalue *args) 1106 1120 { 1107 1121 JvAssert (klass && ! klass->isArray ()); … … 1121 1135 template<typename T> 1122 1136 static T 1123 _Jv_JNI_GetField(JNIEnv *env, jobject obj, jfieldID field)1137 (JNICALL _Jv_JNI_GetField) (JNIEnv *env, jobject obj, jfieldID field) 1124 1138 { 1125 1139 obj = unwrap (obj); … … 1131 1145 template<typename T> 1132 1146 static void 1133 _Jv_JNI_SetField(JNIEnv *, jobject obj, jfieldID field, T value)1147 (JNICALL _Jv_JNI_SetField) (JNIEnv *, jobject obj, jfieldID field, T value) 1134 1148 { 1135 1149 obj = unwrap (obj); … … 1143 1157 template<jboolean is_static> 1144 1158 static jfieldID 1145 _Jv_JNI_GetAnyFieldID(JNIEnv *env, jclass clazz,1146 const char *name, const char *sig)1159 (JNICALL _Jv_JNI_GetAnyFieldID) (JNIEnv *env, jclass clazz, 1160 const char *name, const char *sig) 1147 1161 { 1148 1162 try … … 1204 1218 template<typename T> 1205 1219 static T 1206 _Jv_JNI_GetStaticField(JNIEnv *env, jclass, jfieldID field)1220 (JNICALL _Jv_JNI_GetStaticField) (JNIEnv *env, jclass, jfieldID field) 1207 1221 { 1208 1222 T *ptr = (T *) field->u.addr; … … 1212 1226 template<typename T> 1213 1227 static void 1214 _Jv_JNI_SetStaticField(JNIEnv *, jclass, jfieldID field, T value)1228 (JNICALL _Jv_JNI_SetStaticField) (JNIEnv *, jclass, jfieldID field, T value) 1215 1229 { 1216 1230 value = unwrap (value); … … 1220 1234 1221 1235 static jstring 1222 _Jv_JNI_NewString(JNIEnv *env, const jchar *unichars, jsize len)1236 (JNICALL _Jv_JNI_NewString) (JNIEnv *env, const jchar *unichars, jsize len) 1223 1237 { 1224 1238 try … … 1235 1249 1236 1250 static jsize 1237 _Jv_JNI_GetStringLength(JNIEnv *, jstring string)1251 (JNICALL _Jv_JNI_GetStringLength) (JNIEnv *, jstring string) 1238 1252 { 1239 1253 return unwrap (string)->length(); … … 1241 1255 1242 1256 static const jchar * 1243 _Jv_JNI_GetStringChars(JNIEnv *, jstring string, jboolean *isCopy)1257 (JNICALL _Jv_JNI_GetStringChars) (JNIEnv *, jstring string, jboolean *isCopy) 1244 1258 { 1245 1259 string = unwrap (string); … … 1252 1266 1253 1267 static void 1254 _Jv_JNI_ReleaseStringChars(JNIEnv *, jstring string, const jchar *)1268 (JNICALL _Jv_JNI_ReleaseStringChars) (JNIEnv *, jstring string, const jchar *) 1255 1269 { 1256 1270 unmark_for_gc (unwrap (string), global_ref_table); … … 1258 1272 1259 1273 static jstring 1260 _Jv_JNI_NewStringUTF(JNIEnv *env, const char *bytes)1274 (JNICALL _Jv_JNI_NewStringUTF) (JNIEnv *env, const char *bytes) 1261 1275 { 1262 1276 try … … 1273 1287 1274 1288 static jsize 1275 _Jv_JNI_GetStringUTFLength(JNIEnv *, jstring string)1289 (JNICALL _Jv_JNI_GetStringUTFLength) (JNIEnv *, jstring string) 1276 1290 { 1277 1291 return JvGetStringUTFLength (unwrap (string)); … … 1279 1293 1280 1294 static const char * 1281 _Jv_JNI_GetStringUTFChars (JNIEnv *env, jstring string, jboolean *isCopy) 1295 (JNICALL _Jv_JNI_GetStringUTFChars) (JNIEnv *env, jstring string, 1296 jboolean *isCopy) 1282 1297 { 1283 1298 string = unwrap (string); … … 1302 1317 1303 1318 static void 1304 _Jv_JNI_ReleaseStringUTFChars(JNIEnv *, jstring, const char *utf)1319 (JNICALL _Jv_JNI_ReleaseStringUTFChars) (JNIEnv *, jstring, const char *utf) 1305 1320 { 1306 1321 _Jv_Free ((void *) utf); … … 1308 1323 1309 1324 static void 1310 _Jv_JNI_GetStringRegion (JNIEnv *env, jstring string, jsize start, jsize len, 1311 1325 (JNICALL _Jv_JNI_GetStringRegion) (JNIEnv *env, jstring string, jsize start, 1326 jsize len, jchar *buf) 1312 1327 { 1313 1328 string = unwrap (string); … … 1330 1345 1331 1346 static void 1332 _Jv_JNI_GetStringUTFRegion(JNIEnv *env, jstring str, jsize start,1333 jsize len, char *buf)1347 (JNICALL _Jv_JNI_GetStringUTFRegion) (JNIEnv *env, jstring str, jsize start, 1348 jsize len, char *buf) 1334 1349 { 1335 1350 str = unwrap (str); … … 1352 1367 1353 1368 static const jchar * 1354 _Jv_JNI_GetStringCritical(JNIEnv *, jstring str, jboolean *isCopy)1369 (JNICALL _Jv_JNI_GetStringCritical) (JNIEnv *, jstring str, jboolean *isCopy) 1355 1370 { 1356 1371 jchar *result = _Jv_GetStringChars (unwrap (str)); … … 1361 1376 1362 1377 static void 1363 _Jv_JNI_ReleaseStringCritical(JNIEnv *, jstring, const jchar *)1378 (JNICALL _Jv_JNI_ReleaseStringCritical) (JNIEnv *, jstring, const jchar *) 1364 1379 { 1365 1380 // Nothing. … … 1367 1382 1368 1383 static jsize 1369 _Jv_JNI_GetArrayLength(JNIEnv *, jarray array)1384 (JNICALL _Jv_JNI_GetArrayLength) (JNIEnv *, jarray array) 1370 1385 { 1371 1386 return unwrap (array)->length; … … 1373 1388 1374 1389 static jarray 1375 _Jv_JNI_NewObjectArray (JNIEnv *env, jsize length, jclass elementClass, 1376 1390 (JNICALL _Jv_JNI_NewObjectArray) (JNIEnv *env, jsize length, 1391 jclass elementClass, jobject init) 1377 1392 { 1378 1393 try … … 1381 1396 init = unwrap (init); 1382 1397 1398 _Jv_CheckCast (elementClass, init); 1383 1399 jarray result = JvNewObjectArray (length, elementClass, init); 1384 1400 return (jarray) wrap_value (env, result); … … 1392 1408 1393 1409 static jobject 1394 _Jv_JNI_GetObjectArrayElement (JNIEnv *env, jobjectArray array, jsize index) 1395 { 1410 (JNICALL _Jv_JNI_GetObjectArrayElement) (JNIEnv *env, jobjectArray array, 1411 jsize index) 1412 { 1413 if ((unsigned) index >= (unsigned) array->length) 1414 _Jv_ThrowBadArrayIndex (index); 1396 1415 jobject *elts = elements (unwrap (array)); 1397 1416 return wrap_value (env, elts[index]); … … 1399 1418 1400 1419 static void 1401 _Jv_JNI_SetObjectArrayElement (JNIEnv *env, jobjectArray array, jsize index, 1402 1420 (JNICALL _Jv_JNI_SetObjectArrayElement) (JNIEnv *env, jobjectArray array, 1421 jsize index, jobject value) 1403 1422 { 1404 1423 try … … 1408 1427 1409 1428 _Jv_CheckArrayStore (array, value); 1429 if ((unsigned) index >= (unsigned) array->length) 1430 _Jv_ThrowBadArrayIndex (index); 1410 1431 jobject *elts = elements (array); 1411 1432 elts[index] = value; … … 1419 1440 template<typename T, jclass K> 1420 1441 static JArray<T> * 1421 _Jv_JNI_NewPrimitiveArray(JNIEnv *env, jsize length)1442 (JNICALL _Jv_JNI_NewPrimitiveArray) (JNIEnv *env, jsize length) 1422 1443 { 1423 1444 try … … 1434 1455 template<typename T> 1435 1456 static T * 1436 _Jv_JNI_GetPrimitiveArrayElements(JNIEnv *, JArray<T> *array,1437 jboolean *isCopy)1457 (JNICALL _Jv_JNI_GetPrimitiveArrayElements) (JNIEnv *, JArray<T> *array, 1458 jboolean *isCopy) 1438 1459 { 1439 1460 array = unwrap (array); … … 1450 1471 template<typename T> 1451 1472 static void 1452 _Jv_JNI_ReleasePrimitiveArrayElements(JNIEnv *, JArray<T> *array,1453 T *, jint /* mode */)1473 (JNICALL _Jv_JNI_ReleasePrimitiveArrayElements) (JNIEnv *, JArray<T> *array, 1474 T *, jint /* mode */) 1454 1475 { 1455 1476 array = unwrap (array); … … 1462 1483 template<typename T> 1463 1484 static void 1464 _Jv_JNI_GetPrimitiveArrayRegion(JNIEnv *env, JArray<T> *array,1465 jsize start, jsize len,1485 (JNICALL _Jv_JNI_GetPrimitiveArrayRegion) (JNIEnv *env, JArray<T> *array, 1486 jsize start, jsize len, 1466 1487 T *buf) 1467 1488 { … … 1492 1513 template<typename T> 1493 1514 static void 1494 _Jv_JNI_SetPrimitiveArrayRegion(JNIEnv *env, JArray<T> *array,1495 jsize start, jsize len, T *buf)1515 (JNICALL _Jv_JNI_SetPrimitiveArrayRegion) (JNIEnv *env, JArray<T> *array, 1516 jsize start, jsize len, T *buf) 1496 1517 { 1497 1518 array = unwrap (array); … … 1519 1540 1520 1541 static void * 1521 _Jv_JNI_GetPrimitiveArrayCritical(JNIEnv *, jarray array,1522 jboolean *isCopy)1542 (JNICALL _Jv_JNI_GetPrimitiveArrayCritical) (JNIEnv *, jarray array, 1543 jboolean *isCopy) 1523 1544 { 1524 1545 array = unwrap (array); … … 1533 1554 1534 1555 static void 1535 _Jv_JNI_ReleasePrimitiveArrayCritical(JNIEnv *, jarray, void *, jint)1556 (JNICALL _Jv_JNI_ReleasePrimitiveArrayCritical) (JNIEnv *, jarray, void *, jint) 1536 1557 { 1537 1558 // Nothing. … … 1539 1560 1540 1561 static jint 1541 _Jv_JNI_MonitorEnter(JNIEnv *env, jobject obj)1562 (JNICALL _Jv_JNI_MonitorEnter) (JNIEnv *env, jobject obj) 1542 1563 { 1543 1564 try … … 1554 1575 1555 1576 static jint 1556 _Jv_JNI_MonitorExit(JNIEnv *env, jobject obj)1577 (JNICALL _Jv_JNI_MonitorExit) (JNIEnv *env, jobject obj) 1557 1578 { 1558 1579 try … … 1570 1591 // JDK 1.2 1571 1592 jobject 1572 _Jv_JNI_ToReflectedField(JNIEnv *env, jclass cls, jfieldID fieldID,1573 jboolean)1593 (JNICALL _Jv_JNI_ToReflectedField) (JNIEnv *env, jclass cls, jfieldID fieldID, 1594 jboolean) 1574 1595 { 1575 1596 try … … 1591 1612 // JDK 1.2 1592 1613 static jfieldID 1593 _Jv_JNI_FromReflectedField(JNIEnv *, jobject f)1614 (JNICALL _Jv_JNI_FromReflectedField) (JNIEnv *, jobject f) 1594 1615 { 1595 1616 using namespace java::lang::reflect; … … 1601 1622 1602 1623 jobject 1603 _Jv_JNI_ToReflectedMethod(JNIEnv *env, jclass klass, jmethodID id,1604 1624 (JNICALL _Jv_JNI_ToReflectedMethod) (JNIEnv *env, jclass klass, jmethodID id, 1625 jboolean) 1605 1626 { 1606 1627 using namespace java::lang::reflect; … … 1636 1657 1637 1658 static jmethodID 1638 _Jv_JNI_FromReflectedMethod(JNIEnv *, jobject method)1659 (JNICALL _Jv_JNI_FromReflectedMethod) (JNIEnv *, jobject method) 1639 1660 { 1640 1661 using namespace java::lang::reflect; … … 1648 1669 // JDK 1.2. 1649 1670 jweak 1650 _Jv_JNI_NewWeakGlobalRef(JNIEnv *env, jobject obj)1671 (JNICALL _Jv_JNI_NewWeakGlobalRef) (JNIEnv *env, jobject obj) 1651 1672 { 1652 1673 using namespace gnu::gcj::runtime; … … 1669 1690 1670 1691 void 1671 _Jv_JNI_DeleteWeakGlobalRef(JNIEnv *, jweak obj)1692 (JNICALL _Jv_JNI_DeleteWeakGlobalRef) (JNIEnv *, jweak obj) 1672 1693 { 1673 1694 using namespace gnu::gcj::runtime; … … 1675 1696 unmark_for_gc (ref, global_ref_table); 1676 1697 ref->clear (); 1698 } 1699 1700 1701 1702 1703 // Direct byte buffers. 1704 1705 static jobject 1706 (JNICALL _Jv_JNI_NewDirectByteBuffer) (JNIEnv *, void *, jlong) 1707 { 1708 // For now we don't support this. 1709 return NULL; 1710 } 1711 1712 static void * 1713 (JNICALL _Jv_JNI_GetDirectBufferAddress) (JNIEnv *, jobject) 1714 { 1715 // For now we don't support this. 1716 return NULL; 1717 } 1718 1719 static jlong 1720 (JNICALL _Jv_JNI_GetDirectBufferCapacity) (JNIEnv *, jobject) 1721 { 1722 // For now we don't support this. 1723 return -1; 1677 1724 } 1678 1725 … … 1795 1842 1796 1843 static jint 1797 _Jv_JNI_RegisterNatives(JNIEnv *env, jclass klass,1798 const JNINativeMethod *methods,1799 jint nMethods)1844 (JNICALL _Jv_JNI_RegisterNatives) (JNIEnv *env, jclass klass, 1845 const JNINativeMethod *methods, 1846 jint nMethods) 1800 1847 { 1801 1848 // Synchronize while we do the work. This must match … … 1849 1896 1850 1897 static jint 1851 _Jv_JNI_UnregisterNatives(JNIEnv *, jclass)1898 (JNICALL _Jv_JNI_UnregisterNatives) (JNIEnv *, jclass) 1852 1899 { 1853 1900 // FIXME -- we could implement this. … … 1962 2009 env = (JNIEnv *) _Jv_MallocUnchecked (sizeof (JNIEnv)); 1963 2010 env->p = &_Jv_JNIFunctions; 1964 env->ex = NULL;1965 2011 env->klass = klass; 1966 2012 env->locals = NULL; 2013 // We set env->ex below. 1967 2014 1968 2015 _Jv_SetCurrentJNIEnv (env); … … 1977 2024 frame->size = FRAME_SIZE; 1978 2025 frame->next = env->locals; 1979 env->locals = frame;1980 2026 1981 2027 for (int i = 0; i < frame->size; ++i) 1982 2028 frame->vec[i] = NULL; 2029 2030 env->locals = frame; 2031 env->ex = NULL; 1983 2032 1984 2033 return env; … … 1990 2039 extern "C" void * 1991 2040 _Jv_LookupJNIMethod (jclass klass, _Jv_Utf8Const *name, 1992 _Jv_Utf8Const *signature )1993 { 1994 char buf[10 + 6 * (name->length + signature->length) ];2041 _Jv_Utf8Const *signature, int args_size) 2042 { 2043 char buf[10 + 6 * (name->length + signature->length) + 12]; 1995 2044 int long_start; 1996 2045 void *function; … … 2012 2061 2013 2062 // If there was no override, then look in the symbol table. 2014 mangled_name (klass, name, signature, buf, &long_start); 2015 char c = buf[long_start]; 2016 buf[long_start] = '\0'; 2017 function = _Jv_FindSymbolInExecutable (buf); 2063 buf[0] = '_'; 2064 mangled_name (klass, name, signature, buf + 1, &long_start); 2065 char c = buf[long_start + 1]; 2066 buf[long_start + 1] = '\0'; 2067 2068 function = _Jv_FindSymbolInExecutable (buf + 1); 2069 #ifdef WIN32 2070 // On Win32, we use the "stdcall" calling convention (see JNICALL 2071 // in jni.h). 2072 // 2073 // For a function named 'fooBar' that takes 'nn' bytes as arguments, 2074 // by default, MinGW GCC exports it as 'fooBar@nn', MSVC exports it 2075 // as '_fooBar@nn' and Borland C exports it as 'fooBar'. We try to 2076 // take care of all these variations here. 2077 2078 char asz_buf[12]; /* '@' + '2147483647' (32-bit INT_MAX) + '\0' */ 2079 char long_nm_sv[11]; /* Ditto, except for the '\0'. */ 2080 2018 2081 if (function == NULL) 2019 2082 { 2020 buf[long_start] = c; 2083 // We have tried searching for the 'fooBar' form (BCC) - now 2084 // try the others. 2085 2086 // First, save the part of the long name that will be damaged 2087 // by appending '@nn'. 2088 memcpy (long_nm_sv, (buf + long_start + 1 + 1), sizeof (long_nm_sv)); 2089 2090 sprintf (asz_buf, "@%d", args_size); 2091 strcat (buf, asz_buf); 2092 2093 // Search for the '_fooBar@nn' form (MSVC). 2021 2094 function = _Jv_FindSymbolInExecutable (buf); 2095 2022 2096 if (function == NULL) 2023 { 2024 jstring str = JvNewStringUTF (name->data); 2025 throw new java::lang::UnsatisfiedLinkError (str); 2097 { 2098 // Search for the 'fooBar@nn' form (MinGW GCC). 2099 function = _Jv_FindSymbolInExecutable (buf + 1); 2100 } 2101 } 2102 #else /* WIN32 */ 2103 args_size; /* Dummy statement to avoid unused parameter warning */ 2104 #endif /* ! WIN32 */ 2105 2106 if (function == NULL) 2107 { 2108 buf[long_start + 1] = c; 2109 #ifdef WIN32 2110 // Restore the part of the long name that was damaged by 2111 // appending the '@nn'. 2112 memcpy ((buf + long_start + 1 + 1), long_nm_sv, sizeof (long_nm_sv)); 2113 #endif /* WIN32 */ 2114 function = _Jv_FindSymbolInExecutable (buf + 1); 2115 if (function == NULL) 2116 { 2117 #ifdef WIN32 2118 strcat (buf, asz_buf); 2119 function = _Jv_FindSymbolInExecutable (buf); 2120 if (function == NULL) 2121 function = _Jv_FindSymbolInExecutable (buf + 1); 2122 2123 if (function == NULL) 2124 #endif /* WIN32 */ 2125 { 2126 jstring str = JvNewStringUTF (name->data); 2127 throw new java::lang::UnsatisfiedLinkError (str); 2128 } 2026 2129 } 2027 2130 } … … 2054 2157 JvSynchronize sync (global_ref_table); 2055 2158 if (_this->function == NULL) 2056 _this->function = _Jv_LookupJNIMethod (_this->defining_class, 2057 _this->self->name, 2058 _this->self->signature); 2159 { 2160 int args_size = sizeof (JNIEnv *) + _this->args_raw_size; 2161 2162 if (_this->self->accflags & java::lang::reflect::Modifier::STATIC) 2163 args_size += sizeof (_this->defining_class); 2164 2165 _this->function = _Jv_LookupJNIMethod (_this->defining_class, 2166 _this->self->name, 2167 _this->self->signature, 2168 args_size); 2169 } 2059 2170 } 2060 2171 … … 2106 2217 // An internal helper function. 2107 2218 static jint 2108 _Jv_JNI_AttachCurrentThread (JavaVM *, jstring name, void **penv, void *args) 2219 _Jv_JNI_AttachCurrentThread (JavaVM *, jstring name, void **penv, 2220 void *args, jboolean is_daemon) 2109 2221 { 2110 2222 JavaVMAttachArgs *attach = reinterpret_cast<JavaVMAttachArgs *> (args); … … 2114 2226 { 2115 2227 // FIXME: do we really want to support 1.1? 2116 if (attach->version != JNI_VERSION_1_2 2228 if (attach->version != JNI_VERSION_1_4 2229 && attach->version != JNI_VERSION_1_2 2117 2230 && attach->version != JNI_VERSION_1_1) 2118 2231 return JNI_EVERSION; … … 2157 2270 try 2158 2271 { 2159 _Jv_AttachCurrentThread (name, group); 2272 if (is_daemon) 2273 _Jv_AttachCurrentThreadAsDaemon (name, group); 2274 else 2275 _Jv_AttachCurrentThread (name, group); 2160 2276 } 2161 2277 catch (jthrowable t) … … 2171 2287 // This is the one actually used by JNI. 2172 2288 static jint 2173 _Jv_JNI_AttachCurrentThread(JavaVM *vm, void **penv, void *args)2174 { 2175 return _Jv_JNI_AttachCurrentThread (vm, NULL, penv, args );2289 (JNICALL _Jv_JNI_AttachCurrentThread) (JavaVM *vm, void **penv, void *args) 2290 { 2291 return _Jv_JNI_AttachCurrentThread (vm, NULL, penv, args, false); 2176 2292 } 2177 2293 2178 2294 static jint 2179 _Jv_JNI_DestroyJavaVM (JavaVM *vm) 2295 (JNICALL _Jv_JNI_AttachCurrentThreadAsDaemon) (JavaVM *vm, void **penv, 2296 void *args) 2297 { 2298 return _Jv_JNI_AttachCurrentThread (vm, NULL, penv, args, true); 2299 } 2300 2301 static jint 2302 (JNICALL _Jv_JNI_DestroyJavaVM) (JavaVM *vm) 2180 2303 { 2181 2304 JvAssert (the_vm && vm == the_vm); … … 2195 2318 } 2196 2319 2197 jint r = _Jv_JNI_AttachCurrentThread (vm, 2198 main_name, 2320 jint r = _Jv_JNI_AttachCurrentThread (vm, main_name, 2199 2321 reinterpret_cast<void **> (&env), 2200 NULL );2322 NULL, false); 2201 2323 if (r < 0) 2202 2324 return r; … … 2212 2334 2213 2335 jint 2214 _Jv_JNI_DetachCurrentThread(JavaVM *)2336 (JNICALL _Jv_JNI_DetachCurrentThread) (JavaVM *) 2215 2337 { 2216 2338 jint code = _Jv_DetachCurrentThread (); … … 2219 2341 2220 2342 static jint 2221 _Jv_JNI_GetEnv(JavaVM *, void **penv, jint version)2343 (JNICALL _Jv_JNI_GetEnv) (JavaVM *, void **penv, jint version) 2222 2344 { 2223 2345 if (_Jv_ThreadCurrent () == NULL) … … 2237 2359 2238 2360 // FIXME: do we really want to support 1.1? 2239 if (version != JNI_VERSION_1_2 && version != JNI_VERSION_1_1) 2361 if (version != JNI_VERSION_1_4 && version != JNI_VERSION_1_2 2362 && version != JNI_VERSION_1_1) 2240 2363 { 2241 2364 *penv = NULL; … … 2247 2370 } 2248 2371 2249 jint 2372 JNIEXPORT jint JNICALL 2250 2373 JNI_GetDefaultJavaVMInitArgs (void *args) 2251 2374 { 2252 2375 jint version = * (jint *) args; 2253 // Here we only support 1.2 .2254 if (version != JNI_VERSION_1_2 )2376 // Here we only support 1.2 and 1.4. 2377 if (version != JNI_VERSION_1_2 && version != JNI_VERSION_1_4) 2255 2378 return JNI_EVERSION; 2256 2379 2257 2380 JavaVMInitArgs *ia = reinterpret_cast<JavaVMInitArgs *> (args); 2258 ia->version = JNI_VERSION_1_ 2;2381 ia->version = JNI_VERSION_1_4; 2259 2382 ia->nOptions = 0; 2260 2383 ia->options = NULL; … … 2264 2387 } 2265 2388 2266 jint 2389 JNIEXPORT jint JNICALL 2267 2390 JNI_CreateJavaVM (JavaVM **vm, void **penv, void *args) 2268 2391 { … … 2281 2404 { 2282 2405 jint version = * (jint *) args; 2283 // We only support 1.2 .2284 if (version != JNI_VERSION_1_2 )2406 // We only support 1.2 and 1.4. 2407 if (version != JNI_VERSION_1_2 && version != JNI_VERSION_1_4) 2285 2408 return JNI_EVERSION; 2286 2409 JavaVMInitArgs *ia = reinterpret_cast<JavaVMInitArgs *> (args); … … 2329 2452 } 2330 2453 2331 jint 2454 JNIEXPORT jint JNICALL 2332 2455 JNI_GetCreatedJavaVMs (JavaVM **vm_buffer, jsize buf_len, jsize *n_vms) 2333 2456 { … … 2370 2493 2371 2494 static jint 2372 _Jv_JNI_GetJavaVM(JNIEnv *, JavaVM **vm)2495 (JNICALL _Jv_JNI_GetJavaVM) (JNIEnv *, JavaVM **vm) 2373 2496 { 2374 2497 *vm = _Jv_GetJavaVM (); … … 2562 2685 _Jv_JNI_NewStringUTF, // NewStringUTF 2563 2686 _Jv_JNI_GetStringUTFLength, // GetStringUTFLength 2564 _Jv_JNI_GetStringUTFChars, // GetStringUTF Length2687 _Jv_JNI_GetStringUTFChars, // GetStringUTFChars 2565 2688 _Jv_JNI_ReleaseStringUTFChars, // ReleaseStringUTFChars 2566 2689 _Jv_JNI_GetArrayLength, // GetArrayLength … … 2625 2748 _Jv_JNI_DeleteWeakGlobalRef, // DeleteWeakGlobalRef 2626 2749 2627 _Jv_JNI_ExceptionCheck 2750 _Jv_JNI_ExceptionCheck, // ExceptionCheck 2751 2752 _Jv_JNI_NewDirectByteBuffer, // NewDirectByteBuffer 2753 _Jv_JNI_GetDirectBufferAddress, // GetDirectBufferAddress 2754 _Jv_JNI_GetDirectBufferCapacity // GetDirectBufferCapacity 2628 2755 }; 2629 2756 … … 2637 2764 _Jv_JNI_AttachCurrentThread, 2638 2765 _Jv_JNI_DetachCurrentThread, 2639 _Jv_JNI_GetEnv 2766 _Jv_JNI_GetEnv, 2767 _Jv_JNI_AttachCurrentThreadAsDaemon 2640 2768 }; -
Property cvs2svn:cvs-rev
changed from
Note:
See TracChangeset
for help on using the changeset viewer.