8139203.01 Cdiff src/share/vm/prims/jvm.cpp (original) (raw)

src/share/vm/prims/jvm.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 8139203.01 Cdiff src/share/vm/prims/jvm.cpp Print this page


*** 1020,1041 **** }

KlassHandle klass(thread, java_lang_Class::as_Klass(mirror));
// Figure size of result array
int size;

! if (klass->oop_is_instance()) { size = InstanceKlass::cast(klass())->local_interfaces()->length(); } else { ! assert(klass->oop_is_objArray() || klass->oop_is_typeArray(), "Illegal mirror klass"); size = 2; }

// Allocate result array
objArrayOop r = oopFactory::new_objArray(SystemDictionary::Class_klass(), size, CHECK_NULL);
objArrayHandle result (THREAD, r);
// Fill in result

! if (klass->oop_is_instance()) { // Regular instance klass, fill in all local interfaces for (int index = 0; index < size; index++) { Klass* k = InstanceKlass::cast(klass())->local_interfaces()->at(index); result->obj_at_put(index, k->java_mirror()); } --- 1020,1041 ---- }

KlassHandle klass(thread, java_lang_Class::as_Klass(mirror));
// Figure size of result array
int size;

! if (klass->is_instance_klass()) { size = InstanceKlass::cast(klass())->local_interfaces()->length(); } else { ! assert(klass->is_objArray_klass() || klass->is_typeArray_klass(), "Illegal mirror klass"); size = 2; }

// Allocate result array
objArrayOop r = oopFactory::new_objArray(SystemDictionary::Class_klass(), size, CHECK_NULL);
objArrayHandle result (THREAD, r);
// Fill in result

! if (klass->is_instance_klass()) { // Regular instance klass, fill in all local interfaces for (int index = 0; index < size; index++) { Klass* k = InstanceKlass::cast(klass())->local_interfaces()->at(index); result->obj_at_put(index, k->java_mirror()); }


*** 1054,1064 **** if (java_lang_Class::is_primitive(mirror)) { return JNI_FALSE; } Klass* k = java_lang_Class::as_Klass(mirror); jboolean result = k->is_interface(); ! assert(!result || k->oop_is_instance(), "all interfaces are instance types"); // The compiler intrinsic for isInterface tests the // Klass::_access_flags bits in the same way. return result; JVM_END --- 1054,1064 ---- if (java_lang_Class::is_primitive(mirror)) { return JNI_FALSE; } Klass* k = java_lang_Class::as_Klass(mirror); jboolean result = k->is_interface(); ! assert(!result || k->is_instance_klass(), "all interfaces are instance types"); // The compiler intrinsic for isInterface tests the // Klass::_access_flags bits in the same way. return result; JVM_END


*** 1095,1105 **** if (!java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) { // This call is ignored for primitive types and arrays. // Signers are only set once, ClassLoader.java, and thus shouldn't // be called with an array. Only the bootstrap loader creates arrays. Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); ! if (k->oop_is_instance()) { java_lang_Class::set_signers(k->java_mirror(), objArrayOop(JNIHandles::resolve(signers))); } } JVM_END
--- 1095,1105 ---- if (!java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) { // This call is ignored for primitive types and arrays. // Signers are only set once, ClassLoader.java, and thus shouldn't // be called with an array. Only the bootstrap loader creates arrays. Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); ! if (k->is_instance_klass()) { java_lang_Class::set_signers(k->java_mirror(), objArrayOop(JNIHandles::resolve(signers))); } } JVM_END

*** 1354,1364 ****

JVM_QUICK_ENTRY(jboolean, JVM_IsArrayClass(JNIEnv env, jclass cls)) JVMWrapper("JVM_IsArrayClass"); Klass k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); ! return (k != NULL) && k->oop_is_array() ? true : false; JVM_END

JVM_QUICK_ENTRY(jboolean, JVM_IsPrimitiveClass(JNIEnv *env, jclass cls)) JVMWrapper("JVM_IsPrimitiveClass"); --- 1354,1364 ----

JVM_QUICK_ENTRY(jboolean, JVM_IsArrayClass(JNIEnv env, jclass cls)) JVMWrapper("JVM_IsArrayClass"); Klass k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); ! return (k != NULL) && k->is_array_klass() ? true : false; JVM_END

JVM_QUICK_ENTRY(jboolean, JVM_IsPrimitiveClass(JNIEnv *env, jclass cls)) JVMWrapper("JVM_IsPrimitiveClass");


*** 1387,1397 **** JvmtiVMObjectAllocEventCollector oam; // ofClass is a reference to a java_lang_Class object. The mirror object // of an InstanceKlass

if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) ||

! ! java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->oop_is_instance()) { oop result = oopFactory::new_objArray(SystemDictionary::Class_klass(), 0, CHECK_NULL); return (jobjectArray)JNIHandles::make_local(env, result); }

instanceKlassHandle k(thread, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)));

--- 1387,1397 ---- JvmtiVMObjectAllocEventCollector oam; // ofClass is a reference to a java_lang_Class object. The mirror object // of an InstanceKlass

if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) ||

! ! java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->is_instance_klass()) { oop result = oopFactory::new_objArray(SystemDictionary::Class_klass(), 0, CHECK_NULL); return (jobjectArray)JNIHandles::make_local(env, result); }

instanceKlassHandle k(thread, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)));

*** 1451,1461 ****

JVM_ENTRY(jclass, JVM_GetDeclaringClass(JNIEnv *env, jclass ofClass)) { // ofClass is a reference to a java_lang_Class object. if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) || ! ! java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->oop_is_instance()) { return NULL; }

bool inner_is_member = false;
Klass* outer_klass

--- 1451,1461 ----

JVM_ENTRY(jclass, JVM_GetDeclaringClass(JNIEnv *env, jclass ofClass)) { // ofClass is a reference to a java_lang_Class object. if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) || ! ! java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->is_instance_klass()) { return NULL; }

bool inner_is_member = false;
Klass* outer_klass

*** 1469,1479 ****

JVM_ENTRY(jstring, JVM_GetSimpleBinaryName(JNIEnv *env, jclass cls)) { oop mirror = JNIHandles::resolve_non_null(cls); if (java_lang_Class::is_primitive(mirror) || ! !java_lang_Class::as_Klass(mirror)->oop_is_instance()) { return NULL; } instanceKlassHandle k(THREAD, InstanceKlass::cast(java_lang_Class::as_Klass(mirror))); int ooff = 0, noff = 0; if (InstanceKlass::find_inner_classes_attr(k, &ooff, &noff, THREAD)) { --- 1469,1479 ----

JVM_ENTRY(jstring, JVM_GetSimpleBinaryName(JNIEnv *env, jclass cls)) { oop mirror = JNIHandles::resolve_non_null(cls); if (java_lang_Class::is_primitive(mirror) || ! !java_lang_Class::as_Klass(mirror)->is_instance_klass()) { return NULL; } instanceKlassHandle k(THREAD, InstanceKlass::cast(java_lang_Class::as_Klass(mirror))); int ooff = 0, noff = 0; if (InstanceKlass::find_inner_classes_attr(k, &ooff, &noff, THREAD)) {


*** 1494,1504 **** JvmtiVMObjectAllocEventCollector oam; ResourceMark rm(THREAD); // Return null for arrays and primatives if (!java_lang_Class::is_primitive(JNIHandles::resolve(cls))) { Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls)); ! if (k->oop_is_instance()) { Symbol* sym = InstanceKlass::cast(k)->generic_signature(); if (sym == NULL) return NULL; Handle str = java_lang_String::create_from_symbol(sym, CHECK_NULL); return (jstring) JNIHandles::make_local(env, str()); } --- 1494,1504 ---- JvmtiVMObjectAllocEventCollector oam; ResourceMark rm(THREAD); // Return null for arrays and primatives if (!java_lang_Class::is_primitive(JNIHandles::resolve(cls))) { Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls)); ! if (k->is_instance_klass()) { Symbol* sym = InstanceKlass::cast(k)->generic_signature(); if (sym == NULL) return NULL; Handle str = java_lang_String::create_from_symbol(sym, CHECK_NULL); return (jstring) JNIHandles::make_local(env, str()); }


*** 1512,1522 **** JVMWrapper("JVM_GetClassAnnotations");

// Return null for arrays and primitives
if (!java_lang_Class::is_primitive(JNIHandles::resolve(cls))) {
  Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls));

! if (k->oop_is_instance()) { typeArrayOop a = Annotations::make_java_array(InstanceKlass::cast(k)->class_annotations(), CHECK_NULL); return (jbyteArray) JNIHandles::make_local(env, a); } } return NULL; --- 1512,1522 ---- JVMWrapper("JVM_GetClassAnnotations");

// Return null for arrays and primitives
if (!java_lang_Class::is_primitive(JNIHandles::resolve(cls))) {
  Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls));

! if (k->is_instance_klass()) { typeArrayOop a = Annotations::make_java_array(InstanceKlass::cast(k)->class_annotations(), CHECK_NULL); return (jbyteArray) JNIHandles::make_local(env, a); } } return NULL;


*** 1582,1592 **** JVMWrapper("JVM_GetClassTypeAnnotations"); ResourceMark rm(THREAD); // Return null for arrays and primitives if (!java_lang_Class::is_primitive(JNIHandles::resolve(cls))) { Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls)); ! if (k->oop_is_instance()) { AnnotationArray* type_annotations = InstanceKlass::cast(k)->class_type_annotations(); if (type_annotations != NULL) { typeArrayOop a = Annotations::make_java_array(type_annotations, CHECK_NULL); return (jbyteArray) JNIHandles::make_local(env, a); } --- 1582,1592 ---- JVMWrapper("JVM_GetClassTypeAnnotations"); ResourceMark rm(THREAD); // Return null for arrays and primitives if (!java_lang_Class::is_primitive(JNIHandles::resolve(cls))) { Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls)); ! if (k->is_instance_klass()) { AnnotationArray* type_annotations = InstanceKlass::cast(k)->class_type_annotations(); if (type_annotations != NULL) { typeArrayOop a = Annotations::make_java_array(type_annotations, CHECK_NULL); return (jbyteArray) JNIHandles::make_local(env, a); }


*** 1691,1701 **** JVMWrapper("JVM_GetClassDeclaredFields"); JvmtiVMObjectAllocEventCollector oam;
// Exclude primitive types and array types if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) || ! java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->oop_is_array()) { // Return empty array oop res = oopFactory::new_objArray(SystemDictionary::reflect_Field_klass(), 0, CHECK_NULL); return (jobjectArray) JNIHandles::make_local(env, res); }
--- 1691,1701 ---- JVMWrapper("JVM_GetClassDeclaredFields"); JvmtiVMObjectAllocEventCollector oam;
// Exclude primitive types and array types if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) || ! java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->is_array_klass()) { // Return empty array oop res = oopFactory::new_objArray(SystemDictionary::reflect_Field_klass(), 0, CHECK_NULL); return (jobjectArray) JNIHandles::make_local(env, res); }

*** 1765,1775 ****
JvmtiVMObjectAllocEventCollector oam;
// Exclude primitive types and array types if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) ! || java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->oop_is_array()) { // Return empty array oop res = oopFactory::new_objArray(klass, 0, CHECK_NULL); return (jobjectArray) JNIHandles::make_local(env, res); }
--- 1765,1775 ----
JvmtiVMObjectAllocEventCollector oam;
// Exclude primitive types and array types if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) ! || java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->is_array_klass()) { // Return empty array oop res = oopFactory::new_objArray(klass, 0, CHECK_NULL); return (jobjectArray) JNIHandles::make_local(env, res); }

*** 1866,1876 **** JvmtiVMObjectAllocEventCollector oam;

// Return null for primitives and arrays
if (!java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) {
  Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));

! if (k->oop_is_instance()) { instanceKlassHandle k_h(THREAD, k); Handle jcp = sun_reflect_ConstantPool::create(CHECK_NULL); sun_reflect_ConstantPool::set_cp(jcp(), k_h->constants()); return JNIHandles::make_local(jcp()); } --- 1866,1876 ---- JvmtiVMObjectAllocEventCollector oam;

// Return null for primitives and arrays
if (!java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) {
  Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));

! if (k->is_instance_klass()) { instanceKlassHandle k_h(THREAD, k); Handle jcp = sun_reflect_ConstantPool::create(CHECK_NULL); sun_reflect_ConstantPool::set_cp(jcp(), k_h->constants()); return JNIHandles::make_local(jcp()); }


*** 2134,2145 **** oop r = JNIHandles::resolve(cls); assert(! java_lang_Class::is_primitive(r), "primitive classes not allowed"); if (java_lang_Class::is_primitive(r)) return false;

Klass* k = java_lang_Class::as_Klass(r);

! assert(k->oop_is_instance(), "must be an instance klass"); ! if (! k->oop_is_instance()) return false;

ResourceMark rm(THREAD);
const char* name = k->name()->as_C_string();
bool system_class = k->class_loader() == NULL;
return JavaAssertions::enabled(name, system_class);

--- 2134,2145 ---- oop r = JNIHandles::resolve(cls); assert(! java_lang_Class::is_primitive(r), "primitive classes not allowed"); if (java_lang_Class::is_primitive(r)) return false;

Klass* k = java_lang_Class::as_Klass(r);

! assert(k->is_instance_klass(), "must be an instance klass"); ! if (!k->is_instance_klass()) return false;

ResourceMark rm(THREAD);
const char* name = k->name()->as_C_string();
bool system_class = k->class_loader() == NULL;
return JavaAssertions::enabled(name, system_class);

*** 2180,2190 **** JVMWrapper("JVM_GetClassCPTypes"); Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); // types will have length zero if this is not an InstanceKlass // (length is determined by call to JVM_GetClassCPEntriesCount) ! if (k->oop_is_instance()) { ConstantPool* cp = InstanceKlass::cast(k)->constants(); for (int index = cp->length() - 1; index >= 0; index--) { constantTag tag = cp->tag_at(index); types[index] = (tag.is_unresolved_klass()) ? JVM_CONSTANT_Class : tag.value(); } --- 2180,2190 ---- JVMWrapper("JVM_GetClassCPTypes"); Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); // types will have length zero if this is not an InstanceKlass // (length is determined by call to JVM_GetClassCPEntriesCount) ! if (k->is_instance_klass()) { ConstantPool* cp = InstanceKlass::cast(k)->constants(); for (int index = cp->length() - 1; index >= 0; index--) { constantTag tag = cp->tag_at(index); types[index] = (tag.is_unresolved_klass()) ? JVM_CONSTANT_Class : tag.value(); }


*** 2194,2226 ****

JVM_QUICK_ENTRY(jint, JVM_GetClassCPEntriesCount(JNIEnv env, jclass cls)) JVMWrapper("JVM_GetClassCPEntriesCount"); Klass k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); ! if (!k->oop_is_instance()) ! return 0; ! return InstanceKlass::cast(k)->constants()->length(); JVM_END

JVM_QUICK_ENTRY(jint, JVM_GetClassFieldsCount(JNIEnv env, jclass cls)) JVMWrapper("JVM_GetClassFieldsCount"); Klass k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); ! if (!k->oop_is_instance()) ! return 0; ! return InstanceKlass::cast(k)->java_fields_count(); JVM_END

JVM_QUICK_ENTRY(jint, JVM_GetClassMethodsCount(JNIEnv env, jclass cls)) JVMWrapper("JVM_GetClassMethodsCount"); Klass k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); ! if (!k->oop_is_instance()) ! return 0; ! return InstanceKlass::cast(k)->methods()->length(); JVM_END

// The following methods, used for the verifier, are never called with // array klasses, so a direct cast to InstanceKlass is safe. --- 2194,2220 ----

JVM_QUICK_ENTRY(jint, JVM_GetClassCPEntriesCount(JNIEnv env, jclass cls)) JVMWrapper("JVM_GetClassCPEntriesCount"); Klass k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); ! return (!k->is_instance_klass()) ? 0 : InstanceKlass::cast(k)->constants()->length(); JVM_END

JVM_QUICK_ENTRY(jint, JVM_GetClassFieldsCount(JNIEnv env, jclass cls)) JVMWrapper("JVM_GetClassFieldsCount"); Klass k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); ! return (!k->is_instance_klass()) ? 0 : InstanceKlass::cast(k)->java_fields_count(); JVM_END

JVM_QUICK_ENTRY(jint, JVM_GetClassMethodsCount(JNIEnv env, jclass cls)) JVMWrapper("JVM_GetClassMethodsCount"); Klass k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); ! return (!k->is_instance_klass()) ? 0 : InstanceKlass::cast(k)->methods()->length(); JVM_END

// The following methods, used for the verifier, are never called with // array klasses, so a direct cast to InstanceKlass is safe.


*** 3474,3484 **** // if there is no security manager in 3-arg Class.forName(). Klass* klass = SystemDictionary::resolve_or_fail(name, loader, protection_domain, throwError != 0, CHECK_NULL);
KlassHandle klass_handle(THREAD, klass); // Check if we should initialize the class ! if (init && klass_handle->oop_is_instance()) { klass_handle->initialize(CHECK_NULL); } return (jclass) JNIHandles::make_local(env, klass_handle->java_mirror()); }
--- 3468,3478 ---- // if there is no security manager in 3-arg Class.forName(). Klass* klass = SystemDictionary::resolve_or_fail(name, loader, protection_domain, throwError != 0, CHECK_NULL);
KlassHandle klass_handle(THREAD, klass); // Check if we should initialize the class ! if (init && klass_handle->is_instance_klass()) { klass_handle->initialize(CHECK_NULL); } return (jclass) JNIHandles::make_local(env, klass_handle->java_mirror()); }

*** 3622,3632 **** // Special handling for primitive objects if (java_lang_Class::is_primitive(mirror())) { return NULL; } Klass* k = java_lang_Class::as_Klass(mirror()); ! if (!k->oop_is_instance()) { return NULL; } instanceKlassHandle ik_h(THREAD, k); int encl_method_class_idx = ik_h->enclosing_method_class_index(); if (encl_method_class_idx == 0) { --- 3616,3626 ---- // Special handling for primitive objects if (java_lang_Class::is_primitive(mirror())) { return NULL; } Klass* k = java_lang_Class::as_Klass(mirror()); ! if (!k->is_instance_klass()) { return NULL; } instanceKlassHandle ik_h(THREAD, k); int encl_method_class_idx = ik_h->enclosing_method_class_index(); if (encl_method_class_idx == 0) {

src/share/vm/prims/jvm.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File