equal
deleted
inserted
replaced
351 // assertions |
351 // assertions |
352 #ifdef ASSERT |
352 #ifdef ASSERT |
353 assert(h_exception.not_null(), "NULL exceptions should be handled by athrow"); |
353 assert(h_exception.not_null(), "NULL exceptions should be handled by athrow"); |
354 assert(h_exception->is_oop(), "just checking"); |
354 assert(h_exception->is_oop(), "just checking"); |
355 // Check that exception is a subclass of Throwable, otherwise we have a VerifyError |
355 // Check that exception is a subclass of Throwable, otherwise we have a VerifyError |
356 if (!(h_exception->is_a(SystemDictionary::throwable_klass()))) { |
356 if (!(h_exception->is_a(SystemDictionary::Throwable_klass()))) { |
357 if (ExitVMOnVerifyError) vm_exit(-1); |
357 if (ExitVMOnVerifyError) vm_exit(-1); |
358 ShouldNotReachHere(); |
358 ShouldNotReachHere(); |
359 } |
359 } |
360 #endif |
360 #endif |
361 |
361 |
583 |
583 |
584 assert(!HAS_PENDING_EXCEPTION, "no pending exception"); |
584 assert(!HAS_PENDING_EXCEPTION, "no pending exception"); |
585 Handle exception(thread, thread->vm_result()); |
585 Handle exception(thread, thread->vm_result()); |
586 assert(exception() != NULL, "vm result should be set"); |
586 assert(exception() != NULL, "vm result should be set"); |
587 thread->set_vm_result(NULL); // clear vm result before continuing (may cause memory leaks and assert failures) |
587 thread->set_vm_result(NULL); // clear vm result before continuing (may cause memory leaks and assert failures) |
588 if (!exception->is_a(SystemDictionary::threaddeath_klass())) { |
588 if (!exception->is_a(SystemDictionary::ThreadDeath_klass())) { |
589 exception = get_preinitialized_exception( |
589 exception = get_preinitialized_exception( |
590 SystemDictionary::IllegalMonitorStateException_klass(), |
590 SystemDictionary::IllegalMonitorStateException_klass(), |
591 CATCH); |
591 CATCH); |
592 } |
592 } |
593 thread->set_vm_result(exception()); |
593 thread->set_vm_result(exception()); |
658 if (TraceItables && Verbose) { |
658 if (TraceItables && Verbose) { |
659 ResourceMark rm(thread); |
659 ResourceMark rm(thread); |
660 tty->print_cr("Resolving: klass: %s to method: %s", info.resolved_klass()->name()->as_C_string(), info.resolved_method()->name()->as_C_string()); |
660 tty->print_cr("Resolving: klass: %s to method: %s", info.resolved_klass()->name()->as_C_string(), info.resolved_method()->name()->as_C_string()); |
661 } |
661 } |
662 if (info.resolved_method()->method_holder() == |
662 if (info.resolved_method()->method_holder() == |
663 SystemDictionary::object_klass()) { |
663 SystemDictionary::Object_klass()) { |
664 // NOTE: THIS IS A FIX FOR A CORNER CASE in the JVM spec |
664 // NOTE: THIS IS A FIX FOR A CORNER CASE in the JVM spec |
665 // (see also cpCacheOop.cpp for details) |
665 // (see also cpCacheOop.cpp for details) |
666 methodHandle rm = info.resolved_method(); |
666 methodHandle rm = info.resolved_method(); |
667 assert(rm->is_final() || info.has_vtable_index(), |
667 assert(rm->is_final() || info.has_vtable_index(), |
668 "should have been set already"); |
668 "should have been set already"); |