Author: Richard Plangger <planri...@gmail.com> Branch: jitlog-exact-source-lines Changeset: r85956:7467ad8d230f Date: 2016-08-01 16:41 +0200 http://bitbucket.org/pypy/pypy/changeset/7467ad8d230f/
Log: use offset2lineno as proposed by cfbolz diff --git a/pypy/module/pypyjit/interp_jit.py b/pypy/module/pypyjit/interp_jit.py --- a/pypy/module/pypyjit/interp_jit.py +++ b/pypy/module/pypyjit/interp_jit.py @@ -42,6 +42,22 @@ from rpython.rlib import rvmprof return rvmprof.get_unique_id(bytecode) +@jit.elidable +def offset2lineno(bytecode, stopat): + # see dis.findlinestarts for an explanation. This function is copied from + # rpython/tool/error.py + # lnotab is a list of [byte inc, line inc, ...] + # even position denote byte increments, odd line increments... + tab = bytecode.co_lnotab + line = bytecode.co_firstlineno + addr = 0 + for i in range(0, len(tab), 2): + addr = addr + ord(tab[i]) + if addr > stopat: + break + line = line + ord(tab[i+1]) + return line + @jl.returns(jl.MP_FILENAME, jl.MP_LINENO, jl.MP_SCOPE, jl.MP_INDEX, jl.MP_OPCODE) def get_location(next_instr, is_being_profiled, bytecode): @@ -53,7 +69,8 @@ name = bytecode.co_name if not name: name = "" - return (bytecode.co_filename, bytecode.co_firstlineno, + line = offset2lineno(bytecode, next_instr) + return (bytecode.co_filename, line, name, intmask(next_instr), opname) def should_unroll_one_iteration(next_instr, is_being_profiled, bytecode): _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit