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);
|