diff options
author | Guido van Rossum <guido@python.org> | 1997-10-06 20:19:59 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1997-10-06 20:19:59 (GMT) |
commit | a11ccccd249c201df0224c84bbaacdb31496aa5b (patch) | |
tree | d5a3ed51586cbe829775209fa49f469935332782 /Lib/dos-8x3/tracebac.py | |
parent | d57548023fa61918e545c0c808625df4f43e6ad4 (diff) | |
download | cpython-a11ccccd249c201df0224c84bbaacdb31496aa5b.zip cpython-a11ccccd249c201df0224c84bbaacdb31496aa5b.tar.gz cpython-a11ccccd249c201df0224c84bbaacdb31496aa5b.tar.bz2 |
The usual (and some new modules).
Diffstat (limited to 'Lib/dos-8x3/tracebac.py')
-rwxr-xr-x | Lib/dos-8x3/tracebac.py | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/Lib/dos-8x3/tracebac.py b/Lib/dos-8x3/tracebac.py index 968a9cb..d508e03 100755 --- a/Lib/dos-8x3/tracebac.py +++ b/Lib/dos-8x3/tracebac.py @@ -37,7 +37,7 @@ def print_tb(tb, limit=None, file=None): n = 0 while tb is not None and (limit is None or n < limit): f = tb.tb_frame - lineno = tb.tb_lineno + lineno = tb_lineno(tb) co = f.f_code filename = co.co_filename name = co.co_name @@ -59,7 +59,7 @@ def extract_tb(tb, limit = None): n = 0 while tb is not None and (limit is None or n < limit): f = tb.tb_frame - lineno = tb.tb_lineno + lineno = tb_lineno(tb) co = f.f_code filename = co.co_filename name = co.co_name @@ -169,7 +169,7 @@ def extract_stack(f=None, limit = None): list = [] n = 0 while f is not None and (limit is None or n < limit): - lineno = f.f_lineno + lineno = f.f_lineno # XXX Too bad if -O is used co = f.f_code filename = co.co_filename name = co.co_name @@ -181,3 +181,21 @@ def extract_stack(f=None, limit = None): n = n+1 list.reverse() return list + +# Calculate the correct line number of the traceback given in tb (even +# with -O on). +# Coded by Marc-Andre Lemburg from the example of PyCode_Addr2Line() +# in compile.c. + +def tb_lineno(tb): + c = tb.tb_frame.f_code + tab = c.co_lnotab + line = c.co_firstlineno + stopat = tb.tb_lasti + 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 |