comparison src/share/vm/oops/instanceKlass.cpp @ 6985:80e866b1d053

Merge
author coleenp
date Fri, 16 Nov 2012 09:19:12 -0500
parents bd7a7ce2e264 070d523b96a7
children 2cb439954abf f34d701e952e
comparison
equal deleted inserted replaced
6974:6b6ddf8c4329 6985:80e866b1d053
725 this_oop->set_init_thread(self); 725 this_oop->set_init_thread(self);
726 } 726 }
727 727
728 // Step 7 728 // Step 7
729 Klass* super_klass = this_oop->super(); 729 Klass* super_klass = this_oop->super();
730 if (super_klass != NULL && !this_oop->is_interface() && Klass::cast(super_klass)->should_be_initialized()) { 730 if (super_klass != NULL && !this_oop->is_interface() && super_klass->should_be_initialized()) {
731 Klass::cast(super_klass)->initialize(THREAD); 731 super_klass->initialize(THREAD);
732 732
733 if (HAS_PENDING_EXCEPTION) { 733 if (HAS_PENDING_EXCEPTION) {
734 Handle e(THREAD, PENDING_EXCEPTION); 734 Handle e(THREAD, PENDING_EXCEPTION);
735 CLEAR_PENDING_EXCEPTION; 735 CLEAR_PENDING_EXCEPTION;
736 { 736 {
922 return secondaries; 922 return secondaries;
923 } 923 }
924 } 924 }
925 925
926 bool InstanceKlass::compute_is_subtype_of(Klass* k) { 926 bool InstanceKlass::compute_is_subtype_of(Klass* k) {
927 if (Klass::cast(k)->is_interface()) { 927 if (k->is_interface()) {
928 return implements_interface(k); 928 return implements_interface(k);
929 } else { 929 } else {
930 return Klass::compute_is_subtype_of(k); 930 return Klass::compute_is_subtype_of(k);
931 } 931 }
932 } 932 }
933 933
934 bool InstanceKlass::implements_interface(Klass* k) const { 934 bool InstanceKlass::implements_interface(Klass* k) const {
935 if (this == k) return true; 935 if (this == k) return true;
936 assert(Klass::cast(k)->is_interface(), "should be an interface class"); 936 assert(k->is_interface(), "should be an interface class");
937 for (int i = 0; i < transitive_interfaces()->length(); i++) { 937 for (int i = 0; i < transitive_interfaces()->length(); i++) {
938 if (transitive_interfaces()->at(i) == k) { 938 if (transitive_interfaces()->at(i) == k) {
939 return true; 939 return true;
940 } 940 }
941 } 941 }
1105 1105
1106 Klass* InstanceKlass::find_interface_field(Symbol* name, Symbol* sig, fieldDescriptor* fd) const { 1106 Klass* InstanceKlass::find_interface_field(Symbol* name, Symbol* sig, fieldDescriptor* fd) const {
1107 const int n = local_interfaces()->length(); 1107 const int n = local_interfaces()->length();
1108 for (int i = 0; i < n; i++) { 1108 for (int i = 0; i < n; i++) {
1109 Klass* intf1 = local_interfaces()->at(i); 1109 Klass* intf1 = local_interfaces()->at(i);
1110 assert(Klass::cast(intf1)->is_interface(), "just checking type"); 1110 assert(intf1->is_interface(), "just checking type");
1111 // search for field in current interface 1111 // search for field in current interface
1112 if (InstanceKlass::cast(intf1)->find_local_field(name, sig, fd)) { 1112 if (InstanceKlass::cast(intf1)->find_local_field(name, sig, fd)) {
1113 assert(fd->is_static(), "interface field must be static"); 1113 assert(fd->is_static(), "interface field must be static");
1114 return intf1; 1114 return intf1;
1115 } 1115 }
1176 Klass* klass = const_cast<InstanceKlass*>(this); 1176 Klass* klass = const_cast<InstanceKlass*>(this);
1177 while (klass != NULL) { 1177 while (klass != NULL) {
1178 if (InstanceKlass::cast(klass)->find_local_field_from_offset(offset, is_static, fd)) { 1178 if (InstanceKlass::cast(klass)->find_local_field_from_offset(offset, is_static, fd)) {
1179 return true; 1179 return true;
1180 } 1180 }
1181 klass = Klass::cast(klass)->super(); 1181 klass = klass->super();
1182 } 1182 }
1183 return false; 1183 return false;
1184 } 1184 }
1185 1185
1186 1186
2364 2364
2365 // different verisons of is_same_class_package 2365 // different verisons of is_same_class_package
2366 bool InstanceKlass::is_same_class_package(Klass* class2) { 2366 bool InstanceKlass::is_same_class_package(Klass* class2) {
2367 Klass* class1 = this; 2367 Klass* class1 = this;
2368 oop classloader1 = InstanceKlass::cast(class1)->class_loader(); 2368 oop classloader1 = InstanceKlass::cast(class1)->class_loader();
2369 Symbol* classname1 = Klass::cast(class1)->name(); 2369 Symbol* classname1 = class1->name();
2370 2370
2371 if (Klass::cast(class2)->oop_is_objArray()) { 2371 if (class2->oop_is_objArray()) {
2372 class2 = ObjArrayKlass::cast(class2)->bottom_klass(); 2372 class2 = ObjArrayKlass::cast(class2)->bottom_klass();
2373 } 2373 }
2374 oop classloader2; 2374 oop classloader2;
2375 if (Klass::cast(class2)->oop_is_instance()) { 2375 if (class2->oop_is_instance()) {
2376 classloader2 = InstanceKlass::cast(class2)->class_loader(); 2376 classloader2 = InstanceKlass::cast(class2)->class_loader();
2377 } else { 2377 } else {
2378 assert(Klass::cast(class2)->oop_is_typeArray(), "should be type array"); 2378 assert(class2->oop_is_typeArray(), "should be type array");
2379 classloader2 = NULL; 2379 classloader2 = NULL;
2380 } 2380 }
2381 Symbol* classname2 = Klass::cast(class2)->name(); 2381 Symbol* classname2 = class2->name();
2382 2382
2383 return InstanceKlass::is_same_class_package(classloader1, classname1, 2383 return InstanceKlass::is_same_class_package(classloader1, classname1,
2384 classloader2, classname2); 2384 classloader2, classname2);
2385 } 2385 }
2386 2386
2387 bool InstanceKlass::is_same_class_package(oop classloader2, Symbol* classname2) { 2387 bool InstanceKlass::is_same_class_package(oop classloader2, Symbol* classname2) {
2388 Klass* class1 = this; 2388 Klass* class1 = this;
2389 oop classloader1 = InstanceKlass::cast(class1)->class_loader(); 2389 oop classloader1 = InstanceKlass::cast(class1)->class_loader();
2390 Symbol* classname1 = Klass::cast(class1)->name(); 2390 Symbol* classname1 = class1->name();
2391 2391
2392 return InstanceKlass::is_same_class_package(classloader1, classname1, 2392 return InstanceKlass::is_same_class_package(classloader1, classname1,
2393 classloader2, classname2); 2393 classloader2, classname2);
2394 } 2394 }
2395 2395
2476 2476
2477 // tell if two classes have the same enclosing class (at package level) 2477 // tell if two classes have the same enclosing class (at package level)
2478 bool InstanceKlass::is_same_package_member_impl(instanceKlassHandle class1, 2478 bool InstanceKlass::is_same_package_member_impl(instanceKlassHandle class1,
2479 Klass* class2_oop, TRAPS) { 2479 Klass* class2_oop, TRAPS) {
2480 if (class2_oop == class1()) return true; 2480 if (class2_oop == class1()) return true;
2481 if (!Klass::cast(class2_oop)->oop_is_instance()) return false; 2481 if (!class2_oop->oop_is_instance()) return false;
2482 instanceKlassHandle class2(THREAD, class2_oop); 2482 instanceKlassHandle class2(THREAD, class2_oop);
2483 2483
2484 // must be in same package before we try anything else 2484 // must be in same package before we try anything else
2485 if (!class1->is_same_class_package(class2->class_loader(), class2->name())) 2485 if (!class1->is_same_class_package(class2->class_loader(), class2->name()))
2486 return false; 2486 return false;
3009 // Verify implementor fields 3009 // Verify implementor fields
3010 Klass* im = implementor(); 3010 Klass* im = implementor();
3011 if (im != NULL) { 3011 if (im != NULL) {
3012 guarantee(is_interface(), "only interfaces should have implementor set"); 3012 guarantee(is_interface(), "only interfaces should have implementor set");
3013 guarantee(im->is_klass(), "should be klass"); 3013 guarantee(im->is_klass(), "should be klass");
3014 guarantee(!Klass::cast(im)->is_interface() || im == this, 3014 guarantee(!im->is_interface() || im == this,
3015 "implementors cannot be interfaces"); 3015 "implementors cannot be interfaces");
3016 } 3016 }
3017 3017
3018 // Verify local interfaces 3018 // Verify local interfaces
3019 if (local_interfaces()) { 3019 if (local_interfaces()) {
3020 Array<Klass*>* local_interfaces = this->local_interfaces(); 3020 Array<Klass*>* local_interfaces = this->local_interfaces();
3021 for (int j = 0; j < local_interfaces->length(); j++) { 3021 for (int j = 0; j < local_interfaces->length(); j++) {
3022 Klass* e = local_interfaces->at(j); 3022 Klass* e = local_interfaces->at(j);
3023 guarantee(e->is_klass() && Klass::cast(e)->is_interface(), "invalid local interface"); 3023 guarantee(e->is_klass() && e->is_interface(), "invalid local interface");
3024 } 3024 }
3025 } 3025 }
3026 3026
3027 // Verify transitive interfaces 3027 // Verify transitive interfaces
3028 if (transitive_interfaces() != NULL) { 3028 if (transitive_interfaces() != NULL) {
3029 Array<Klass*>* transitive_interfaces = this->transitive_interfaces(); 3029 Array<Klass*>* transitive_interfaces = this->transitive_interfaces();
3030 for (int j = 0; j < transitive_interfaces->length(); j++) { 3030 for (int j = 0; j < transitive_interfaces->length(); j++) {
3031 Klass* e = transitive_interfaces->at(j); 3031 Klass* e = transitive_interfaces->at(j);
3032 guarantee(e->is_klass() && Klass::cast(e)->is_interface(), "invalid transitive interface"); 3032 guarantee(e->is_klass() && e->is_interface(), "invalid transitive interface");
3033 } 3033 }
3034 } 3034 }
3035 3035
3036 // Verify methods 3036 // Verify methods
3037 if (methods() != NULL) { 3037 if (methods() != NULL) {