1184 if (transitive_interfaces()->at(i) == k) {
1185 return true;
1186 }
1187 }
1188 return false;
1189 }
1190
1191 bool InstanceKlass::is_same_or_direct_interface(Klass *k) const {
1192 // Verify direct super interface
1193 if (this == k) return true;
1194 assert(k->is_interface(), "should be an interface class");
1195 for (int i = 0; i < local_interfaces()->length(); i++) {
1196 if (local_interfaces()->at(i) == k) {
1197 return true;
1198 }
1199 }
1200 return false;
1201 }
1202
1203 objArrayOop InstanceKlass::allocate_objArray(int n, int length, TRAPS) {
1204 if (length < 0) {
1205 THROW_MSG_0(vmSymbols::java_lang_NegativeArraySizeException(), err_msg("%d", length));
1206 }
1207 if (length > arrayOopDesc::max_array_length(T_OBJECT)) {
1208 report_java_out_of_memory("Requested array size exceeds VM limit");
1209 JvmtiExport::post_array_size_exhausted();
1210 THROW_OOP_0(Universe::out_of_memory_error_array_size());
1211 }
1212 int size = objArrayOopDesc::object_size(length);
1213 Klass* ak = array_klass(n, CHECK_NULL);
1214 objArrayOop o = (objArrayOop)Universe::heap()->array_allocate(ak, size, length,
1215 /* do_zero */ true, CHECK_NULL);
1216 return o;
1217 }
1218
1219 instanceOop InstanceKlass::register_finalizer(instanceOop i, TRAPS) {
1220 if (TraceFinalizerRegistration) {
1221 tty->print("Registered ");
1222 i->print_value_on(tty);
1223 tty->print_cr(" (" INTPTR_FORMAT ") as finalizable", p2i(i));
1224 }
1225 instanceHandle h_i(THREAD, i);
1226 // Pass the handle as argument, JavaCalls::call expects oop as jobjects
1227 JavaValue result(T_VOID);
1228 JavaCallArguments args(h_i);
1229 methodHandle mh (THREAD, Universe::finalizer_register_method());
1230 JavaCalls::call(&result, mh, &args, CHECK_NULL);
1231 return h_i();
|
1184 if (transitive_interfaces()->at(i) == k) {
1185 return true;
1186 }
1187 }
1188 return false;
1189 }
1190
1191 bool InstanceKlass::is_same_or_direct_interface(Klass *k) const {
1192 // Verify direct super interface
1193 if (this == k) return true;
1194 assert(k->is_interface(), "should be an interface class");
1195 for (int i = 0; i < local_interfaces()->length(); i++) {
1196 if (local_interfaces()->at(i) == k) {
1197 return true;
1198 }
1199 }
1200 return false;
1201 }
1202
1203 objArrayOop InstanceKlass::allocate_objArray(int n, int length, TRAPS) {
1204 check_array_allocation_length(length, arrayOopDesc::max_array_length(T_OBJECT), CHECK_NULL);
1205 int size = objArrayOopDesc::object_size(length);
1206 Klass* ak = array_klass(n, CHECK_NULL);
1207 objArrayOop o = (objArrayOop)Universe::heap()->array_allocate(ak, size, length,
1208 /* do_zero */ true, CHECK_NULL);
1209 return o;
1210 }
1211
1212 instanceOop InstanceKlass::register_finalizer(instanceOop i, TRAPS) {
1213 if (TraceFinalizerRegistration) {
1214 tty->print("Registered ");
1215 i->print_value_on(tty);
1216 tty->print_cr(" (" INTPTR_FORMAT ") as finalizable", p2i(i));
1217 }
1218 instanceHandle h_i(THREAD, i);
1219 // Pass the handle as argument, JavaCalls::call expects oop as jobjects
1220 JavaValue result(T_VOID);
1221 JavaCallArguments args(h_i);
1222 methodHandle mh (THREAD, Universe::finalizer_register_method());
1223 JavaCalls::call(&result, mh, &args, CHECK_NULL);
1224 return h_i();
|