Mercurial > hg > graal-compiler
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) { |