[Python-bugs-list] [ python-Bugs-430991 ] wrong co_lnotab

noreply@sourceforge.net noreply@sourceforge.net
Thu, 07 Jun 2001 03:44:33 -0700


Bugs item #430991, was updated on 2001-06-07 03:44
You can respond by visiting: 
http://sourceforge.net/tracker/?func=detail&atid=105470&aid=430991&group_id=5470

Category: Parser/Compiler
Group: None
Status: Open
Resolution: None
Priority: 5
Submitted By: Armin Rigo (arigo)
Assigned to: Nobody/Anonymous (nobody)
Summary: wrong co_lnotab

Initial Comment:
The compiler produces a buggy co_lnotab in code objects
if a single source line produces more than 255 bytes of
bytecode. This can lead to tracebacks pointing to wrong
source lines in "python -O".

For example, to emit the information "266 bytes of
bytecode, next line is 5 source code lines below", it
writes in co_lnotab

  255 5 11 0

althought it should write

  255 0 11 5

Because of this an exception occurring in the last 11
bytes of code will be incorrectly reported 5 lines
below. The problem is even more confusing if the number
of lines to skip is itself larger than 255 (see
attached example file).

Fix: in compile.c correct the function com_set_lineno
by replacing the inner while loop with the following :

while (incr_addr > 255) {
    com_add_lnotab(c, 255, 0);
    incr_addr -= 255;
}
while (incr_line > 255) {
    com_add_lnotab(c, incr_addr, 255);
    incr_line -= 255;
    incr_addr = 0;
}
if (incr_line > 0 || incr_addr > 0) {
    com_add_lnotab(c, incr_addr, incr_line);
}


----------------------------------------------------------------------

You can respond by visiting: 
http://sourceforge.net/tracker/?func=detail&atid=105470&aid=430991&group_id=5470