Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #20619

Re: #line in python

From Duncan Booth <duncan.booth@invalid.invalid>
Newsgroups comp.lang.python
Subject Re: #line in python
Date 2012-02-20 11:27 +0000
Message-ID <Xns9FFF74792B724duncanbooth@127.0.0.1> (permalink)
References <mailman.5949.1329613948.27778.python-list@python.org>

Show all headers | View raw


Ross Boylan <ross@biostat.ucsf.edu> wrote:

> As an extension or alternate, could there be a decorator like
> @source_line(lineno, filename)
> for classes and methods that could do the conversion on the fly?  I
> don't know if there's a way to go from the function (or class) object
> the decorator receives to the AST.
> 
No [easy] way to go from bytecodes back to AST, but I see no reason why you 
can't create a new code object with your filename and line numbers and then 
create a new function using your modified code object.

If you don't have a 1:1 correspondence of lines then you'll need to pick 
out all the existing line numbers from the code object co_lnotab and modify 
them: see dis.py findlinestarts() for how to do this.

Classes would be harder: the decorator doesn't run until after the class 
body has executed, so you can't change the line numbers that way until it's 
too late. The only thing I can think would be to put all of the generated 
code inside a function and fix up that function with a decorator that scans 
the bytecode to find all contained classes and fix them up.

Or you could generate a .pyc file and then fix up line numbers in the whole 
file: see 
http://nedbatchelder.com/blog/200804/the_structure_of_pyc_files.html for 
some code that shows you what's in a .pyc

-- 
Duncan Booth http://kupuguy.blogspot.com

Back to comp.lang.python | Previous | NextPrevious in thread | Find similar | Unroll thread


Thread

#line in python Ross Boylan <ross@biostat.ucsf.edu> - 2012-02-18 16:54 -0800
  Re: #line in python Duncan Booth <duncan.booth@invalid.invalid> - 2012-02-20 11:27 +0000

csiph-web