Mercurial > hg > truffle
comparison src/share/vm/prims/jvm.cpp @ 1144:9b9c1ee9b3f6
Merge
author | iveresov |
---|---|
date | Wed, 06 Jan 2010 22:21:39 -0800 |
parents | 933a3e806ce6 4ce7240d622c |
children | e392695de029 |
comparison
equal
deleted
inserted
replaced
1129:a5a6adfca6ec | 1144:9b9c1ee9b3f6 |
---|---|
78 | 78 |
79 methodOop last_caller = NULL; | 79 methodOop last_caller = NULL; |
80 | 80 |
81 while (!vfst.at_end()) { | 81 while (!vfst.at_end()) { |
82 methodOop m = vfst.method(); | 82 methodOop m = vfst.method(); |
83 if (!vfst.method()->method_holder()->klass_part()->is_subclass_of(SystemDictionary::classloader_klass())&& | 83 if (!vfst.method()->method_holder()->klass_part()->is_subclass_of(SystemDictionary::ClassLoader_klass())&& |
84 !vfst.method()->method_holder()->klass_part()->is_subclass_of(access_controller_klass) && | 84 !vfst.method()->method_holder()->klass_part()->is_subclass_of(access_controller_klass) && |
85 !vfst.method()->method_holder()->klass_part()->is_subclass_of(privileged_action_klass)) { | 85 !vfst.method()->method_holder()->klass_part()->is_subclass_of(privileged_action_klass)) { |
86 break; | 86 break; |
87 } | 87 } |
88 last_caller = m; | 88 last_caller = m; |
255 HandleMark hm(THREAD); | 255 HandleMark hm(THREAD); |
256 Handle key_str = java_lang_String::create_from_platform_dependent_str(key, CHECK); | 256 Handle key_str = java_lang_String::create_from_platform_dependent_str(key, CHECK); |
257 Handle value_str = java_lang_String::create_from_platform_dependent_str((value != NULL ? value : ""), CHECK); | 257 Handle value_str = java_lang_String::create_from_platform_dependent_str((value != NULL ? value : ""), CHECK); |
258 JavaCalls::call_virtual(&r, | 258 JavaCalls::call_virtual(&r, |
259 props, | 259 props, |
260 KlassHandle(THREAD, SystemDictionary::properties_klass()), | 260 KlassHandle(THREAD, SystemDictionary::Properties_klass()), |
261 vmSymbolHandles::put_name(), | 261 vmSymbolHandles::put_name(), |
262 vmSymbolHandles::object_object_object_signature(), | 262 vmSymbolHandles::object_object_object_signature(), |
263 key_str, | 263 key_str, |
264 value_str, | 264 value_str, |
265 THREAD); | 265 THREAD); |
493 // Just checking that the cloneable flag is set correct | 493 // Just checking that the cloneable flag is set correct |
494 if (obj->is_javaArray()) { | 494 if (obj->is_javaArray()) { |
495 guarantee(klass->is_cloneable(), "all arrays are cloneable"); | 495 guarantee(klass->is_cloneable(), "all arrays are cloneable"); |
496 } else { | 496 } else { |
497 guarantee(obj->is_instance(), "should be instanceOop"); | 497 guarantee(obj->is_instance(), "should be instanceOop"); |
498 bool cloneable = klass->is_subtype_of(SystemDictionary::cloneable_klass()); | 498 bool cloneable = klass->is_subtype_of(SystemDictionary::Cloneable_klass()); |
499 guarantee(cloneable == klass->is_cloneable(), "incorrect cloneable flag"); | 499 guarantee(cloneable == klass->is_cloneable(), "incorrect cloneable flag"); |
500 } | 500 } |
501 #endif | 501 #endif |
502 | 502 |
503 // Check if class of obj supports the Cloneable interface. | 503 // Check if class of obj supports the Cloneable interface. |
906 oop mirror = JNIHandles::resolve_non_null(cls); | 906 oop mirror = JNIHandles::resolve_non_null(cls); |
907 | 907 |
908 // Special handling for primitive objects | 908 // Special handling for primitive objects |
909 if (java_lang_Class::is_primitive(mirror)) { | 909 if (java_lang_Class::is_primitive(mirror)) { |
910 // Primitive objects does not have any interfaces | 910 // Primitive objects does not have any interfaces |
911 objArrayOop r = oopFactory::new_objArray(SystemDictionary::class_klass(), 0, CHECK_NULL); | 911 objArrayOop r = oopFactory::new_objArray(SystemDictionary::Class_klass(), 0, CHECK_NULL); |
912 return (jobjectArray) JNIHandles::make_local(env, r); | 912 return (jobjectArray) JNIHandles::make_local(env, r); |
913 } | 913 } |
914 | 914 |
915 KlassHandle klass(thread, java_lang_Class::as_klassOop(mirror)); | 915 KlassHandle klass(thread, java_lang_Class::as_klassOop(mirror)); |
916 // Figure size of result array | 916 // Figure size of result array |
921 assert(klass->oop_is_objArray() || klass->oop_is_typeArray(), "Illegal mirror klass"); | 921 assert(klass->oop_is_objArray() || klass->oop_is_typeArray(), "Illegal mirror klass"); |
922 size = 2; | 922 size = 2; |
923 } | 923 } |
924 | 924 |
925 // Allocate result array | 925 // Allocate result array |
926 objArrayOop r = oopFactory::new_objArray(SystemDictionary::class_klass(), size, CHECK_NULL); | 926 objArrayOop r = oopFactory::new_objArray(SystemDictionary::Class_klass(), size, CHECK_NULL); |
927 objArrayHandle result (THREAD, r); | 927 objArrayHandle result (THREAD, r); |
928 // Fill in result | 928 // Fill in result |
929 if (klass->oop_is_instance()) { | 929 if (klass->oop_is_instance()) { |
930 // Regular instance klass, fill in all local interfaces | 930 // Regular instance klass, fill in all local interfaces |
931 for (int index = 0; index < size; index++) { | 931 for (int index = 0; index < size; index++) { |
932 klassOop k = klassOop(instanceKlass::cast(klass())->local_interfaces()->obj_at(index)); | 932 klassOop k = klassOop(instanceKlass::cast(klass())->local_interfaces()->obj_at(index)); |
933 result->obj_at_put(index, Klass::cast(k)->java_mirror()); | 933 result->obj_at_put(index, Klass::cast(k)->java_mirror()); |
934 } | 934 } |
935 } else { | 935 } else { |
936 // All arrays implement java.lang.Cloneable and java.io.Serializable | 936 // All arrays implement java.lang.Cloneable and java.io.Serializable |
937 result->obj_at_put(0, Klass::cast(SystemDictionary::cloneable_klass())->java_mirror()); | 937 result->obj_at_put(0, Klass::cast(SystemDictionary::Cloneable_klass())->java_mirror()); |
938 result->obj_at_put(1, Klass::cast(SystemDictionary::serializable_klass())->java_mirror()); | 938 result->obj_at_put(1, Klass::cast(SystemDictionary::Serializable_klass())->java_mirror()); |
939 } | 939 } |
940 return (jobjectArray) JNIHandles::make_local(env, result()); | 940 return (jobjectArray) JNIHandles::make_local(env, result()); |
941 JVM_END | 941 JVM_END |
942 | 942 |
943 | 943 |
1096 | 1096 |
1097 if (HAS_PENDING_EXCEPTION) { | 1097 if (HAS_PENDING_EXCEPTION) { |
1098 pending_exception = Handle(THREAD, PENDING_EXCEPTION); | 1098 pending_exception = Handle(THREAD, PENDING_EXCEPTION); |
1099 CLEAR_PENDING_EXCEPTION; | 1099 CLEAR_PENDING_EXCEPTION; |
1100 | 1100 |
1101 if ( pending_exception->is_a(SystemDictionary::exception_klass()) && | 1101 if ( pending_exception->is_a(SystemDictionary::Exception_klass()) && |
1102 !pending_exception->is_a(SystemDictionary::runtime_exception_klass())) { | 1102 !pending_exception->is_a(SystemDictionary::RuntimeException_klass())) { |
1103 // Throw a java.security.PrivilegedActionException(Exception e) exception | 1103 // Throw a java.security.PrivilegedActionException(Exception e) exception |
1104 JavaCallArguments args(pending_exception); | 1104 JavaCallArguments args(pending_exception); |
1105 THROW_ARG_0(vmSymbolHandles::java_security_PrivilegedActionException(), | 1105 THROW_ARG_0(vmSymbolHandles::java_security_PrivilegedActionException(), |
1106 vmSymbolHandles::exception_void_signature(), | 1106 vmSymbolHandles::exception_void_signature(), |
1107 &args); | 1107 &args); |
1188 return JNIHandles::make_local(env, result); | 1188 return JNIHandles::make_local(env, result); |
1189 } | 1189 } |
1190 | 1190 |
1191 // the resource area must be registered in case of a gc | 1191 // the resource area must be registered in case of a gc |
1192 RegisterArrayForGC ragc(thread, local_array); | 1192 RegisterArrayForGC ragc(thread, local_array); |
1193 objArrayOop context = oopFactory::new_objArray(SystemDictionary::protectionDomain_klass(), | 1193 objArrayOop context = oopFactory::new_objArray(SystemDictionary::ProtectionDomain_klass(), |
1194 local_array->length(), CHECK_NULL); | 1194 local_array->length(), CHECK_NULL); |
1195 objArrayHandle h_context(thread, context); | 1195 objArrayHandle h_context(thread, context); |
1196 for (int index = 0; index < local_array->length(); index++) { | 1196 for (int index = 0; index < local_array->length(); index++) { |
1197 h_context->obj_at_put(index, local_array->at(index)); | 1197 h_context->obj_at_put(index, local_array->at(index)); |
1198 } | 1198 } |
1249 // ofClass is a reference to a java_lang_Class object. The mirror object | 1249 // ofClass is a reference to a java_lang_Class object. The mirror object |
1250 // of an instanceKlass | 1250 // of an instanceKlass |
1251 | 1251 |
1252 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) || | 1252 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) || |
1253 ! Klass::cast(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass)))->oop_is_instance()) { | 1253 ! Klass::cast(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass)))->oop_is_instance()) { |
1254 oop result = oopFactory::new_objArray(SystemDictionary::class_klass(), 0, CHECK_NULL); | 1254 oop result = oopFactory::new_objArray(SystemDictionary::Class_klass(), 0, CHECK_NULL); |
1255 return (jobjectArray)JNIHandles::make_local(env, result); | 1255 return (jobjectArray)JNIHandles::make_local(env, result); |
1256 } | 1256 } |
1257 | 1257 |
1258 instanceKlassHandle k(thread, java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass))); | 1258 instanceKlassHandle k(thread, java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass))); |
1259 | 1259 |
1260 if (k->inner_classes()->length() == 0) { | 1260 if (k->inner_classes()->length() == 0) { |
1261 // Neither an inner nor outer class | 1261 // Neither an inner nor outer class |
1262 oop result = oopFactory::new_objArray(SystemDictionary::class_klass(), 0, CHECK_NULL); | 1262 oop result = oopFactory::new_objArray(SystemDictionary::Class_klass(), 0, CHECK_NULL); |
1263 return (jobjectArray)JNIHandles::make_local(env, result); | 1263 return (jobjectArray)JNIHandles::make_local(env, result); |
1264 } | 1264 } |
1265 | 1265 |
1266 // find inner class info | 1266 // find inner class info |
1267 typeArrayHandle icls(thread, k->inner_classes()); | 1267 typeArrayHandle icls(thread, k->inner_classes()); |
1268 constantPoolHandle cp(thread, k->constants()); | 1268 constantPoolHandle cp(thread, k->constants()); |
1269 int length = icls->length(); | 1269 int length = icls->length(); |
1270 | 1270 |
1271 // Allocate temp. result array | 1271 // Allocate temp. result array |
1272 objArrayOop r = oopFactory::new_objArray(SystemDictionary::class_klass(), length/4, CHECK_NULL); | 1272 objArrayOop r = oopFactory::new_objArray(SystemDictionary::Class_klass(), length/4, CHECK_NULL); |
1273 objArrayHandle result (THREAD, r); | 1273 objArrayHandle result (THREAD, r); |
1274 int members = 0; | 1274 int members = 0; |
1275 | 1275 |
1276 for(int i = 0; i < length; i += 4) { | 1276 for(int i = 0; i < length; i += 4) { |
1277 int ioff = icls->ushort_at(i + inner_class_info_index); | 1277 int ioff = icls->ushort_at(i + inner_class_info_index); |
1297 } | 1297 } |
1298 } | 1298 } |
1299 | 1299 |
1300 if (members != length) { | 1300 if (members != length) { |
1301 // Return array of right length | 1301 // Return array of right length |
1302 objArrayOop res = oopFactory::new_objArray(SystemDictionary::class_klass(), members, CHECK_NULL); | 1302 objArrayOop res = oopFactory::new_objArray(SystemDictionary::Class_klass(), members, CHECK_NULL); |
1303 for(int i = 0; i < members; i++) { | 1303 for(int i = 0; i < members; i++) { |
1304 res->obj_at_put(i, result->obj_at(i)); | 1304 res->obj_at_put(i, result->obj_at(i)); |
1305 } | 1305 } |
1306 return (jobjectArray)JNIHandles::make_local(env, res); | 1306 return (jobjectArray)JNIHandles::make_local(env, res); |
1307 } | 1307 } |
1468 | 1468 |
1469 oop reflected = JNIHandles::resolve_non_null(method); | 1469 oop reflected = JNIHandles::resolve_non_null(method); |
1470 oop mirror = NULL; | 1470 oop mirror = NULL; |
1471 int slot = 0; | 1471 int slot = 0; |
1472 | 1472 |
1473 if (reflected->klass() == SystemDictionary::reflect_constructor_klass()) { | 1473 if (reflected->klass() == SystemDictionary::reflect_Constructor_klass()) { |
1474 mirror = java_lang_reflect_Constructor::clazz(reflected); | 1474 mirror = java_lang_reflect_Constructor::clazz(reflected); |
1475 slot = java_lang_reflect_Constructor::slot(reflected); | 1475 slot = java_lang_reflect_Constructor::slot(reflected); |
1476 } else { | 1476 } else { |
1477 assert(reflected->klass() == SystemDictionary::reflect_method_klass(), | 1477 assert(reflected->klass() == SystemDictionary::reflect_Method_klass(), |
1478 "wrong type"); | 1478 "wrong type"); |
1479 mirror = java_lang_reflect_Method::clazz(reflected); | 1479 mirror = java_lang_reflect_Method::clazz(reflected); |
1480 slot = java_lang_reflect_Method::slot(reflected); | 1480 slot = java_lang_reflect_Method::slot(reflected); |
1481 } | 1481 } |
1482 klassOop k = java_lang_Class::as_klassOop(mirror); | 1482 klassOop k = java_lang_Class::as_klassOop(mirror); |
1528 | 1528 |
1529 // Exclude primitive types and array types | 1529 // Exclude primitive types and array types |
1530 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) || | 1530 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) || |
1531 Klass::cast(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass)))->oop_is_javaArray()) { | 1531 Klass::cast(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass)))->oop_is_javaArray()) { |
1532 // Return empty array | 1532 // Return empty array |
1533 oop res = oopFactory::new_objArray(SystemDictionary::reflect_field_klass(), 0, CHECK_NULL); | 1533 oop res = oopFactory::new_objArray(SystemDictionary::reflect_Field_klass(), 0, CHECK_NULL); |
1534 return (jobjectArray) JNIHandles::make_local(env, res); | 1534 return (jobjectArray) JNIHandles::make_local(env, res); |
1535 } | 1535 } |
1536 | 1536 |
1537 instanceKlassHandle k(THREAD, java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass))); | 1537 instanceKlassHandle k(THREAD, java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass))); |
1538 constantPoolHandle cp(THREAD, k->constants()); | 1538 constantPoolHandle cp(THREAD, k->constants()); |
1556 if (mods & JVM_ACC_PUBLIC) ++num_fields; | 1556 if (mods & JVM_ACC_PUBLIC) ++num_fields; |
1557 } | 1557 } |
1558 } else { | 1558 } else { |
1559 num_fields = fields_len / instanceKlass::next_offset; | 1559 num_fields = fields_len / instanceKlass::next_offset; |
1560 | 1560 |
1561 if (k() == SystemDictionary::throwable_klass()) { | 1561 if (k() == SystemDictionary::Throwable_klass()) { |
1562 num_fields--; | 1562 num_fields--; |
1563 skip_backtrace = true; | 1563 skip_backtrace = true; |
1564 } | 1564 } |
1565 } | 1565 } |
1566 | 1566 |
1567 objArrayOop r = oopFactory::new_objArray(SystemDictionary::reflect_field_klass(), num_fields, CHECK_NULL); | 1567 objArrayOop r = oopFactory::new_objArray(SystemDictionary::reflect_Field_klass(), num_fields, CHECK_NULL); |
1568 objArrayHandle result (THREAD, r); | 1568 objArrayHandle result (THREAD, r); |
1569 | 1569 |
1570 int out_idx = 0; | 1570 int out_idx = 0; |
1571 fieldDescriptor fd; | 1571 fieldDescriptor fd; |
1572 for (int i = 0; i < fields_len; i += instanceKlass::next_offset) { | 1572 for (int i = 0; i < fields_len; i += instanceKlass::next_offset) { |
1596 | 1596 |
1597 // Exclude primitive types and array types | 1597 // Exclude primitive types and array types |
1598 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) | 1598 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) |
1599 || Klass::cast(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass)))->oop_is_javaArray()) { | 1599 || Klass::cast(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass)))->oop_is_javaArray()) { |
1600 // Return empty array | 1600 // Return empty array |
1601 oop res = oopFactory::new_objArray(SystemDictionary::reflect_method_klass(), 0, CHECK_NULL); | 1601 oop res = oopFactory::new_objArray(SystemDictionary::reflect_Method_klass(), 0, CHECK_NULL); |
1602 return (jobjectArray) JNIHandles::make_local(env, res); | 1602 return (jobjectArray) JNIHandles::make_local(env, res); |
1603 } | 1603 } |
1604 | 1604 |
1605 instanceKlassHandle k(THREAD, java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass))); | 1605 instanceKlassHandle k(THREAD, java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass))); |
1606 | 1606 |
1620 } | 1620 } |
1621 } | 1621 } |
1622 } | 1622 } |
1623 | 1623 |
1624 // Allocate result | 1624 // Allocate result |
1625 objArrayOop r = oopFactory::new_objArray(SystemDictionary::reflect_method_klass(), num_methods, CHECK_NULL); | 1625 objArrayOop r = oopFactory::new_objArray(SystemDictionary::reflect_Method_klass(), num_methods, CHECK_NULL); |
1626 objArrayHandle result (THREAD, r); | 1626 objArrayHandle result (THREAD, r); |
1627 | 1627 |
1628 int out_idx = 0; | 1628 int out_idx = 0; |
1629 for (i = 0; i < methods_length; i++) { | 1629 for (i = 0; i < methods_length; i++) { |
1630 methodHandle method(THREAD, (methodOop) methods->obj_at(i)); | 1630 methodHandle method(THREAD, (methodOop) methods->obj_at(i)); |
1648 | 1648 |
1649 // Exclude primitive types and array types | 1649 // Exclude primitive types and array types |
1650 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) | 1650 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) |
1651 || Klass::cast(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass)))->oop_is_javaArray()) { | 1651 || Klass::cast(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass)))->oop_is_javaArray()) { |
1652 // Return empty array | 1652 // Return empty array |
1653 oop res = oopFactory::new_objArray(SystemDictionary::reflect_constructor_klass(), 0 , CHECK_NULL); | 1653 oop res = oopFactory::new_objArray(SystemDictionary::reflect_Constructor_klass(), 0 , CHECK_NULL); |
1654 return (jobjectArray) JNIHandles::make_local(env, res); | 1654 return (jobjectArray) JNIHandles::make_local(env, res); |
1655 } | 1655 } |
1656 | 1656 |
1657 instanceKlassHandle k(THREAD, java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass))); | 1657 instanceKlassHandle k(THREAD, java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass))); |
1658 | 1658 |
1672 } | 1672 } |
1673 } | 1673 } |
1674 } | 1674 } |
1675 | 1675 |
1676 // Allocate result | 1676 // Allocate result |
1677 objArrayOop r = oopFactory::new_objArray(SystemDictionary::reflect_constructor_klass(), num_constructors, CHECK_NULL); | 1677 objArrayOop r = oopFactory::new_objArray(SystemDictionary::reflect_Constructor_klass(), num_constructors, CHECK_NULL); |
1678 objArrayHandle result(THREAD, r); | 1678 objArrayHandle result(THREAD, r); |
1679 | 1679 |
1680 int out_idx = 0; | 1680 int out_idx = 0; |
1681 for (i = 0; i < methods_length; i++) { | 1681 for (i = 0; i < methods_length; i++) { |
1682 methodHandle method(THREAD, (methodOop) methods->obj_at(i)); | 1682 methodHandle method(THREAD, (methodOop) methods->obj_at(i)); |
1885 } | 1885 } |
1886 int klass_ref = cp->uncached_klass_ref_index_at(index); | 1886 int klass_ref = cp->uncached_klass_ref_index_at(index); |
1887 symbolHandle klass_name (THREAD, cp->klass_name_at(klass_ref)); | 1887 symbolHandle klass_name (THREAD, cp->klass_name_at(klass_ref)); |
1888 symbolHandle member_name(THREAD, cp->uncached_name_ref_at(index)); | 1888 symbolHandle member_name(THREAD, cp->uncached_name_ref_at(index)); |
1889 symbolHandle member_sig (THREAD, cp->uncached_signature_ref_at(index)); | 1889 symbolHandle member_sig (THREAD, cp->uncached_signature_ref_at(index)); |
1890 objArrayOop dest_o = oopFactory::new_objArray(SystemDictionary::string_klass(), 3, CHECK_NULL); | 1890 objArrayOop dest_o = oopFactory::new_objArray(SystemDictionary::String_klass(), 3, CHECK_NULL); |
1891 objArrayHandle dest(THREAD, dest_o); | 1891 objArrayHandle dest(THREAD, dest_o); |
1892 Handle str = java_lang_String::create_from_symbol(klass_name, CHECK_NULL); | 1892 Handle str = java_lang_String::create_from_symbol(klass_name, CHECK_NULL); |
1893 dest->obj_at_put(0, str()); | 1893 dest->obj_at_put(0, str()); |
1894 str = java_lang_String::create_from_symbol(member_name, CHECK_NULL); | 1894 str = java_lang_String::create_from_symbol(member_name, CHECK_NULL); |
1895 dest->obj_at_put(1, str()); | 1895 dest->obj_at_put(1, str()); |
2573 HandleMark hm(THREAD); | 2573 HandleMark hm(THREAD); |
2574 Handle obj(THREAD, thread->threadObj()); | 2574 Handle obj(THREAD, thread->threadObj()); |
2575 JavaValue result(T_VOID); | 2575 JavaValue result(T_VOID); |
2576 JavaCalls::call_virtual(&result, | 2576 JavaCalls::call_virtual(&result, |
2577 obj, | 2577 obj, |
2578 KlassHandle(THREAD, SystemDictionary::thread_klass()), | 2578 KlassHandle(THREAD, SystemDictionary::Thread_klass()), |
2579 vmSymbolHandles::run_method_name(), | 2579 vmSymbolHandles::run_method_name(), |
2580 vmSymbolHandles::void_method_signature(), | 2580 vmSymbolHandles::void_method_signature(), |
2581 THREAD); | 2581 THREAD); |
2582 } | 2582 } |
2583 | 2583 |
2671 // NOTE (from JDK 1.2): this is done solely to prevent stopped | 2671 // NOTE (from JDK 1.2): this is done solely to prevent stopped |
2672 // threads from being restarted. | 2672 // threads from being restarted. |
2673 // Fix for 4314342, 4145910, perhaps others: it now doesn't have | 2673 // Fix for 4314342, 4145910, perhaps others: it now doesn't have |
2674 // any effect on the "liveness" of a thread; see | 2674 // any effect on the "liveness" of a thread; see |
2675 // JVM_IsThreadAlive, below. | 2675 // JVM_IsThreadAlive, below. |
2676 if (java_throwable->is_a(SystemDictionary::threaddeath_klass())) { | 2676 if (java_throwable->is_a(SystemDictionary::ThreadDeath_klass())) { |
2677 java_lang_Thread::set_stillborn(java_thread); | 2677 java_lang_Thread::set_stillborn(java_thread); |
2678 } | 2678 } |
2679 THROW_OOP(java_throwable); | 2679 THROW_OOP(java_throwable); |
2680 } else { | 2680 } else { |
2681 // Enques a VM_Operation to stop all threads and then deliver the exception... | 2681 // Enques a VM_Operation to stop all threads and then deliver the exception... |
3026 } | 3026 } |
3027 } | 3027 } |
3028 } | 3028 } |
3029 | 3029 |
3030 // Create result array of type [Ljava/lang/Class; | 3030 // Create result array of type [Ljava/lang/Class; |
3031 objArrayOop result = oopFactory::new_objArray(SystemDictionary::class_klass(), depth, CHECK_NULL); | 3031 objArrayOop result = oopFactory::new_objArray(SystemDictionary::Class_klass(), depth, CHECK_NULL); |
3032 // Fill in mirrors corresponding to method holders | 3032 // Fill in mirrors corresponding to method holders |
3033 int index = 0; | 3033 int index = 0; |
3034 while (first != NULL) { | 3034 while (first != NULL) { |
3035 result->obj_at_put(index++, Klass::cast(first->klass())->java_mirror()); | 3035 result->obj_at_put(index++, Klass::cast(first->klass())->java_mirror()); |
3036 first = first->next; | 3036 first = first->next; |
4322 ResourceMark rm(THREAD); | 4322 ResourceMark rm(THREAD); |
4323 ThreadsListEnumerator tle(THREAD, false, false); | 4323 ThreadsListEnumerator tle(THREAD, false, false); |
4324 JvmtiVMObjectAllocEventCollector oam; | 4324 JvmtiVMObjectAllocEventCollector oam; |
4325 | 4325 |
4326 int num_threads = tle.num_threads(); | 4326 int num_threads = tle.num_threads(); |
4327 objArrayOop r = oopFactory::new_objArray(SystemDictionary::thread_klass(), num_threads, CHECK_NULL); | 4327 objArrayOop r = oopFactory::new_objArray(SystemDictionary::Thread_klass(), num_threads, CHECK_NULL); |
4328 objArrayHandle threads_ah(THREAD, r); | 4328 objArrayHandle threads_ah(THREAD, r); |
4329 | 4329 |
4330 for (int i = 0; i < num_threads; i++) { | 4330 for (int i = 0; i < num_threads; i++) { |
4331 Handle h = tle.get_threadObj(i); | 4331 Handle h = tle.get_threadObj(i); |
4332 threads_ah->obj_at_put(i, h()); | 4332 threads_ah->obj_at_put(i, h()); |
4356 THROW_(vmSymbols::java_lang_IllegalArgumentException(), 0); | 4356 THROW_(vmSymbols::java_lang_IllegalArgumentException(), 0); |
4357 } | 4357 } |
4358 | 4358 |
4359 // check if threads is not an array of objects of Thread class | 4359 // check if threads is not an array of objects of Thread class |
4360 klassOop k = objArrayKlass::cast(ah->klass())->element_klass(); | 4360 klassOop k = objArrayKlass::cast(ah->klass())->element_klass(); |
4361 if (k != SystemDictionary::thread_klass()) { | 4361 if (k != SystemDictionary::Thread_klass()) { |
4362 THROW_(vmSymbols::java_lang_IllegalArgumentException(), 0); | 4362 THROW_(vmSymbols::java_lang_IllegalArgumentException(), 0); |
4363 } | 4363 } |
4364 | 4364 |
4365 ResourceMark rm(THREAD); | 4365 ResourceMark rm(THREAD); |
4366 | 4366 |
4416 instanceKlassHandle ik_h(THREAD, k); | 4416 instanceKlassHandle ik_h(THREAD, k); |
4417 int encl_method_class_idx = ik_h->enclosing_method_class_index(); | 4417 int encl_method_class_idx = ik_h->enclosing_method_class_index(); |
4418 if (encl_method_class_idx == 0) { | 4418 if (encl_method_class_idx == 0) { |
4419 return NULL; | 4419 return NULL; |
4420 } | 4420 } |
4421 objArrayOop dest_o = oopFactory::new_objArray(SystemDictionary::object_klass(), 3, CHECK_NULL); | 4421 objArrayOop dest_o = oopFactory::new_objArray(SystemDictionary::Object_klass(), 3, CHECK_NULL); |
4422 objArrayHandle dest(THREAD, dest_o); | 4422 objArrayHandle dest(THREAD, dest_o); |
4423 klassOop enc_k = ik_h->constants()->klass_at(encl_method_class_idx, CHECK_NULL); | 4423 klassOop enc_k = ik_h->constants()->klass_at(encl_method_class_idx, CHECK_NULL); |
4424 dest->obj_at_put(0, Klass::cast(enc_k)->java_mirror()); | 4424 dest->obj_at_put(0, Klass::cast(enc_k)->java_mirror()); |
4425 int encl_method_method_idx = ik_h->enclosing_method_method_index(); | 4425 int encl_method_method_idx = ik_h->enclosing_method_method_index(); |
4426 if (encl_method_method_idx != 0) { | 4426 if (encl_method_method_idx != 0) { |
4530 case JAVA_THREAD_STATE_NEW : { | 4530 case JAVA_THREAD_STATE_NEW : { |
4531 assert(values_h->length() == 1 && | 4531 assert(values_h->length() == 1 && |
4532 values_h->int_at(0) == java_lang_Thread::NEW, | 4532 values_h->int_at(0) == java_lang_Thread::NEW, |
4533 "Invalid threadStatus value"); | 4533 "Invalid threadStatus value"); |
4534 | 4534 |
4535 objArrayOop r = oopFactory::new_objArray(SystemDictionary::string_klass(), | 4535 objArrayOop r = oopFactory::new_objArray(SystemDictionary::String_klass(), |
4536 1, /* only 1 substate */ | 4536 1, /* only 1 substate */ |
4537 CHECK_NULL); | 4537 CHECK_NULL); |
4538 names_h = objArrayHandle(THREAD, r); | 4538 names_h = objArrayHandle(THREAD, r); |
4539 Handle name = java_lang_String::create_from_str("NEW", CHECK_NULL); | 4539 Handle name = java_lang_String::create_from_str("NEW", CHECK_NULL); |
4540 names_h->obj_at_put(0, name()); | 4540 names_h->obj_at_put(0, name()); |
4543 case JAVA_THREAD_STATE_RUNNABLE : { | 4543 case JAVA_THREAD_STATE_RUNNABLE : { |
4544 assert(values_h->length() == 1 && | 4544 assert(values_h->length() == 1 && |
4545 values_h->int_at(0) == java_lang_Thread::RUNNABLE, | 4545 values_h->int_at(0) == java_lang_Thread::RUNNABLE, |
4546 "Invalid threadStatus value"); | 4546 "Invalid threadStatus value"); |
4547 | 4547 |
4548 objArrayOop r = oopFactory::new_objArray(SystemDictionary::string_klass(), | 4548 objArrayOop r = oopFactory::new_objArray(SystemDictionary::String_klass(), |
4549 1, /* only 1 substate */ | 4549 1, /* only 1 substate */ |
4550 CHECK_NULL); | 4550 CHECK_NULL); |
4551 names_h = objArrayHandle(THREAD, r); | 4551 names_h = objArrayHandle(THREAD, r); |
4552 Handle name = java_lang_String::create_from_str("RUNNABLE", CHECK_NULL); | 4552 Handle name = java_lang_String::create_from_str("RUNNABLE", CHECK_NULL); |
4553 names_h->obj_at_put(0, name()); | 4553 names_h->obj_at_put(0, name()); |
4556 case JAVA_THREAD_STATE_BLOCKED : { | 4556 case JAVA_THREAD_STATE_BLOCKED : { |
4557 assert(values_h->length() == 1 && | 4557 assert(values_h->length() == 1 && |
4558 values_h->int_at(0) == java_lang_Thread::BLOCKED_ON_MONITOR_ENTER, | 4558 values_h->int_at(0) == java_lang_Thread::BLOCKED_ON_MONITOR_ENTER, |
4559 "Invalid threadStatus value"); | 4559 "Invalid threadStatus value"); |
4560 | 4560 |
4561 objArrayOop r = oopFactory::new_objArray(SystemDictionary::string_klass(), | 4561 objArrayOop r = oopFactory::new_objArray(SystemDictionary::String_klass(), |
4562 1, /* only 1 substate */ | 4562 1, /* only 1 substate */ |
4563 CHECK_NULL); | 4563 CHECK_NULL); |
4564 names_h = objArrayHandle(THREAD, r); | 4564 names_h = objArrayHandle(THREAD, r); |
4565 Handle name = java_lang_String::create_from_str("BLOCKED", CHECK_NULL); | 4565 Handle name = java_lang_String::create_from_str("BLOCKED", CHECK_NULL); |
4566 names_h->obj_at_put(0, name()); | 4566 names_h->obj_at_put(0, name()); |
4569 case JAVA_THREAD_STATE_WAITING : { | 4569 case JAVA_THREAD_STATE_WAITING : { |
4570 assert(values_h->length() == 2 && | 4570 assert(values_h->length() == 2 && |
4571 values_h->int_at(0) == java_lang_Thread::IN_OBJECT_WAIT && | 4571 values_h->int_at(0) == java_lang_Thread::IN_OBJECT_WAIT && |
4572 values_h->int_at(1) == java_lang_Thread::PARKED, | 4572 values_h->int_at(1) == java_lang_Thread::PARKED, |
4573 "Invalid threadStatus value"); | 4573 "Invalid threadStatus value"); |
4574 objArrayOop r = oopFactory::new_objArray(SystemDictionary::string_klass(), | 4574 objArrayOop r = oopFactory::new_objArray(SystemDictionary::String_klass(), |
4575 2, /* number of substates */ | 4575 2, /* number of substates */ |
4576 CHECK_NULL); | 4576 CHECK_NULL); |
4577 names_h = objArrayHandle(THREAD, r); | 4577 names_h = objArrayHandle(THREAD, r); |
4578 Handle name0 = java_lang_String::create_from_str("WAITING.OBJECT_WAIT", | 4578 Handle name0 = java_lang_String::create_from_str("WAITING.OBJECT_WAIT", |
4579 CHECK_NULL); | 4579 CHECK_NULL); |
4587 assert(values_h->length() == 3 && | 4587 assert(values_h->length() == 3 && |
4588 values_h->int_at(0) == java_lang_Thread::SLEEPING && | 4588 values_h->int_at(0) == java_lang_Thread::SLEEPING && |
4589 values_h->int_at(1) == java_lang_Thread::IN_OBJECT_WAIT_TIMED && | 4589 values_h->int_at(1) == java_lang_Thread::IN_OBJECT_WAIT_TIMED && |
4590 values_h->int_at(2) == java_lang_Thread::PARKED_TIMED, | 4590 values_h->int_at(2) == java_lang_Thread::PARKED_TIMED, |
4591 "Invalid threadStatus value"); | 4591 "Invalid threadStatus value"); |
4592 objArrayOop r = oopFactory::new_objArray(SystemDictionary::string_klass(), | 4592 objArrayOop r = oopFactory::new_objArray(SystemDictionary::String_klass(), |
4593 3, /* number of substates */ | 4593 3, /* number of substates */ |
4594 CHECK_NULL); | 4594 CHECK_NULL); |
4595 names_h = objArrayHandle(THREAD, r); | 4595 names_h = objArrayHandle(THREAD, r); |
4596 Handle name0 = java_lang_String::create_from_str("TIMED_WAITING.SLEEPING", | 4596 Handle name0 = java_lang_String::create_from_str("TIMED_WAITING.SLEEPING", |
4597 CHECK_NULL); | 4597 CHECK_NULL); |
4606 } | 4606 } |
4607 case JAVA_THREAD_STATE_TERMINATED : { | 4607 case JAVA_THREAD_STATE_TERMINATED : { |
4608 assert(values_h->length() == 1 && | 4608 assert(values_h->length() == 1 && |
4609 values_h->int_at(0) == java_lang_Thread::TERMINATED, | 4609 values_h->int_at(0) == java_lang_Thread::TERMINATED, |
4610 "Invalid threadStatus value"); | 4610 "Invalid threadStatus value"); |
4611 objArrayOop r = oopFactory::new_objArray(SystemDictionary::string_klass(), | 4611 objArrayOop r = oopFactory::new_objArray(SystemDictionary::String_klass(), |
4612 1, /* only 1 substate */ | 4612 1, /* only 1 substate */ |
4613 CHECK_NULL); | 4613 CHECK_NULL); |
4614 names_h = objArrayHandle(THREAD, r); | 4614 names_h = objArrayHandle(THREAD, r); |
4615 Handle name = java_lang_String::create_from_str("TERMINATED", CHECK_NULL); | 4615 Handle name = java_lang_String::create_from_str("TERMINATED", CHECK_NULL); |
4616 names_h->obj_at_put(0, name()); | 4616 names_h->obj_at_put(0, name()); |
4641 #else // KERNEL | 4641 #else // KERNEL |
4642 info->is_kernel_jvm = 0; // false; | 4642 info->is_kernel_jvm = 0; // false; |
4643 #endif // KERNEL | 4643 #endif // KERNEL |
4644 } | 4644 } |
4645 JVM_END | 4645 JVM_END |
4646 |