1588 |
1588 |
1589 // rewrite constant pool references in the methods: |
1589 // rewrite constant pool references in the methods: |
1590 for (int i = methods->length() - 1; i >= 0; i--) { |
1590 for (int i = methods->length() - 1; i >= 0; i--) { |
1591 methodHandle method(THREAD, methods->at(i)); |
1591 methodHandle method(THREAD, methods->at(i)); |
1592 methodHandle new_method; |
1592 methodHandle new_method; |
1593 rewrite_cp_refs_in_method(method, &new_method, CHECK_false); |
1593 rewrite_cp_refs_in_method(method, &new_method, THREAD); |
1594 if (!new_method.is_null()) { |
1594 if (!new_method.is_null()) { |
1595 // the method has been replaced so save the new method version |
1595 // the method has been replaced so save the new method version |
|
1596 // even in the case of an exception. original method is on the |
|
1597 // deallocation list. |
1596 methods->at_put(i, new_method()); |
1598 methods->at_put(i, new_method()); |
|
1599 } |
|
1600 if (HAS_PENDING_EXCEPTION) { |
|
1601 Symbol* ex_name = PENDING_EXCEPTION->klass()->name(); |
|
1602 // RC_TRACE_WITH_THREAD macro has an embedded ResourceMark |
|
1603 RC_TRACE_WITH_THREAD(0x00000002, THREAD, |
|
1604 ("rewrite_cp_refs_in_method exception: '%s'", ex_name->as_C_string())); |
|
1605 // Need to clear pending exception here as the super caller sets |
|
1606 // the JVMTI_ERROR_INTERNAL if the returned value is false. |
|
1607 CLEAR_PENDING_EXCEPTION; |
|
1608 return false; |
1597 } |
1609 } |
1598 } |
1610 } |
1599 |
1611 |
1600 return true; |
1612 return true; |
1601 } |
1613 } |
1672 methodHandle m; |
1684 methodHandle m; |
1673 { |
1685 { |
1674 Pause_No_Safepoint_Verifier pnsv(&nsv); |
1686 Pause_No_Safepoint_Verifier pnsv(&nsv); |
1675 |
1687 |
1676 // ldc is 2 bytes and ldc_w is 3 bytes |
1688 // ldc is 2 bytes and ldc_w is 3 bytes |
1677 m = rc.insert_space_at(bci, 3, inst_buffer, THREAD); |
1689 m = rc.insert_space_at(bci, 3, inst_buffer, CHECK); |
1678 if (m.is_null() || HAS_PENDING_EXCEPTION) { |
|
1679 guarantee(false, "insert_space_at() failed"); |
|
1680 } |
|
1681 } |
1690 } |
1682 |
1691 |
1683 // return the new method so that the caller can update |
1692 // return the new method so that the caller can update |
1684 // the containing class |
1693 // the containing class |
1685 *new_method_p = method = m; |
1694 *new_method_p = method = m; |