< prev index next >

src/share/vm/oops/method.cpp

Print this page

        

*** 171,181 **** } return buf; } ! int Method::fast_exception_handler_bci_for(methodHandle mh, KlassHandle ex_klass, int throw_bci, TRAPS) { // exception table holds quadruple entries of the form (beg_bci, end_bci, handler_bci, klass_index) // access exception table ExceptionTable table(mh()); int length = table.length(); // iterate through all entries sequentially --- 171,181 ---- } return buf; } ! int Method::fast_exception_handler_bci_for(methodHandle mh, Klass* ex_klass, int throw_bci, TRAPS) { // exception table holds quadruple entries of the form (beg_bci, end_bci, handler_bci, klass_index) // access exception table ExceptionTable table(mh()); int length = table.length(); // iterate through all entries sequentially
*** 190,209 **** // exception handler bci range covers throw_bci => investigate further int handler_bci = table.handler_pc(i); int klass_index = table.catch_type_index(i); if (klass_index == 0) { return handler_bci; ! } else if (ex_klass.is_null()) { return handler_bci; } else { // we know the exception class => get the constraint class // this may require loading of the constraint class; if verification // fails or some other exception occurs, return handler_bci Klass* k = pool->klass_at(klass_index, CHECK_(handler_bci)); ! KlassHandle klass = KlassHandle(THREAD, k); ! assert(klass.not_null(), "klass not loaded"); ! if (ex_klass->is_subtype_of(klass())) { return handler_bci; } } } } --- 190,208 ---- // exception handler bci range covers throw_bci => investigate further int handler_bci = table.handler_pc(i); int klass_index = table.catch_type_index(i); if (klass_index == 0) { return handler_bci; ! } else if (ex_klass == NULL) { return handler_bci; } else { // we know the exception class => get the constraint class // this may require loading of the constraint class; if verification // fails or some other exception occurs, return handler_bci Klass* k = pool->klass_at(klass_index, CHECK_(handler_bci)); ! assert(k != NULL, "klass not loaded"); ! if (ex_klass->is_subtype_of(k)) { return handler_bci; } } } }
*** 1270,1280 **** Symbol* signature, TRAPS) { ResourceMark rm; methodHandle empty; ! KlassHandle holder = SystemDictionary::MethodHandle_klass(); Symbol* name = MethodHandles::signature_polymorphic_intrinsic_name(iid); assert(iid == MethodHandles::signature_polymorphic_name_id(name), ""); if (TraceMethodHandles) { tty->print_cr("make_method_handle_intrinsic MH.%s%s", name->as_C_string(), signature->as_C_string()); } --- 1269,1279 ---- Symbol* signature, TRAPS) { ResourceMark rm; methodHandle empty; ! InstanceKlass* holder = SystemDictionary::MethodHandle_klass(); Symbol* name = MethodHandles::signature_polymorphic_intrinsic_name(iid); assert(iid == MethodHandles::signature_polymorphic_name_id(name), ""); if (TraceMethodHandles) { tty->print_cr("make_method_handle_intrinsic MH.%s%s", name->as_C_string(), signature->as_C_string()); }
*** 1288,1298 **** constantPoolHandle cp; { ConstantPool* cp_oop = ConstantPool::allocate(loader_data, cp_length, CHECK_(empty)); cp = constantPoolHandle(THREAD, cp_oop); } ! cp->set_pool_holder(InstanceKlass::cast(holder())); cp->symbol_at_put(_imcp_invoke_name, name); cp->symbol_at_put(_imcp_invoke_signature, signature); cp->set_has_preresolution(); // decide on access bits: public or not? --- 1287,1297 ---- constantPoolHandle cp; { ConstantPool* cp_oop = ConstantPool::allocate(loader_data, cp_length, CHECK_(empty)); cp = constantPoolHandle(THREAD, cp_oop); } ! cp->set_pool_holder(holder); cp->symbol_at_put(_imcp_invoke_name, name); cp->symbol_at_put(_imcp_invoke_signature, signature); cp->set_has_preresolution(); // decide on access bits: public or not?
< prev index next >