src/share/vm/oops/generateOopMap.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 6893268 Sdiff src/share/vm/oops

src/share/vm/oops/generateOopMap.cpp

Print this page
rev 1021 : 6858164: invokedynamic code needs some cleanup (post-6655638)
Note: The bug ID for this change set was erroneously used to call for review of 6815692.
Summary: Fix several crashers, remove needless paths for boxed-style bootstrap method call, refactor & simplify APIs for rewriter constantPoolOop, remove sun.dyn.CallSiteImpl
Reviewed-by: ?
rev 1026 : imported patch indy.compiler.inline.patch


1814     // for the monitors to be properly matched.
1815     _monitor_safe = false;
1816 
1817     // Since there are no successors to the *return bytecode, it
1818     // isn't necessary to set _monitor_top to bad_monitors.
1819 
1820     if (TraceMonitorMismatch) {
1821       report_monitor_mismatch("non-empty monitor stack at return");
1822     }
1823   }
1824 }
1825 
1826 void GenerateOopMap::do_jsr(int targ_bci) {
1827   push(CellTypeState::make_addr(targ_bci));
1828 }
1829 
1830 
1831 
1832 void GenerateOopMap::do_ldc(int idx, int bci) {
1833   constantPoolOop cp = method()->constants();
1834   constantTag tag    = cp->tag_at(idx);
1835 
1836   CellTypeState cts = (tag.is_string() || tag.is_unresolved_string() ||
1837                        tag.is_klass()  || tag.is_unresolved_klass())
1838                     ? CellTypeState::make_line_ref(bci) : valCTS;
1839   ppush1(cts);
1840 }
1841 
1842 void GenerateOopMap::do_multianewarray(int dims, int bci) {
1843   assert(dims >= 1, "sanity check");
1844   for(int i = dims -1; i >=0; i--) {
1845     ppop1(valCTS);
1846   }
1847   ppush1(CellTypeState::make_line_ref(bci));
1848 }
1849 
1850 void GenerateOopMap::do_astore(int idx) {
1851   CellTypeState r_or_p = pop();
1852   if (!r_or_p.is_address() && !r_or_p.is_reference()) {
1853     // We actually expected ref or pc, but we only report that we expected a ref. It does not
1854     // really matter (at least for now)
1855     verify_error("wrong type on stack (found: %c, expected: {pr})", r_or_p.to_char());
1856     return;
1857   }
1858   set_var(idx, r_or_p);




1814     // for the monitors to be properly matched.
1815     _monitor_safe = false;
1816 
1817     // Since there are no successors to the *return bytecode, it
1818     // isn't necessary to set _monitor_top to bad_monitors.
1819 
1820     if (TraceMonitorMismatch) {
1821       report_monitor_mismatch("non-empty monitor stack at return");
1822     }
1823   }
1824 }
1825 
1826 void GenerateOopMap::do_jsr(int targ_bci) {
1827   push(CellTypeState::make_addr(targ_bci));
1828 }
1829 
1830 
1831 
1832 void GenerateOopMap::do_ldc(int idx, int bci) {
1833   constantPoolOop cp  = method()->constants();
1834   CellTypeState   cts = cp->is_pointer_entry(idx) ? CellTypeState::make_line_ref(bci) : valCTS;




1835   ppush1(cts);
1836 }
1837 
1838 void GenerateOopMap::do_multianewarray(int dims, int bci) {
1839   assert(dims >= 1, "sanity check");
1840   for(int i = dims -1; i >=0; i--) {
1841     ppop1(valCTS);
1842   }
1843   ppush1(CellTypeState::make_line_ref(bci));
1844 }
1845 
1846 void GenerateOopMap::do_astore(int idx) {
1847   CellTypeState r_or_p = pop();
1848   if (!r_or_p.is_address() && !r_or_p.is_reference()) {
1849     // We actually expected ref or pc, but we only report that we expected a ref. It does not
1850     // really matter (at least for now)
1851     verify_error("wrong type on stack (found: %c, expected: {pr})", r_or_p.to_char());
1852     return;
1853   }
1854   set_var(idx, r_or_p);


src/share/vm/oops/generateOopMap.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File