On 8/3/2010 8:48 AM, Antoine Pitrou wrote:
On Tue, 3 Aug 2010 22:25:01 +1000
Nick Coghlan<ncogh...@gmail.com>  wrote:
On Tue, Aug 3, 2010 at 1:40 PM, Eli Bendersky<eli...@gmail.com>  wrote:
The first print out correctly specifies the line "def foo" is in. However,
the second one points to the line with "@dummydecorator" instead of "def
bar". [Python 2.6]

The side-effects of this behavior can be easily seen in the output of
modules like trace and profile. Would you say it's normal, or could this be
considered a bug?

Since the decorator is as much a part of the function definition as
the def line is, I would say that it is correct (the name says
"firstlineno", not "deflineno").

That's debatable. Since writing:

@b
def a():
     ...

is equivalent to:

def a():
     ...
a = b(a)

The difference is that 'a=b(a)' is a standalone statement which could moved down with other statements interposed, while '@b' is neither a statement nor expression but a def statement prefix, and is documented as such.

A dynamic difference between the constructs, as least with CPython, is that the decorator form does just one namespace binding instead of two.

and in the latter case co_firstlineno points to the "def a()" line.

Furthermore, co_firstlineno is an attribute of the code object, not the
function object, so it shouldn't ideally depend on whether a decorator
was applied or not.

Perhaps. A practical consideration is that it is easier to search forward from the first '@' line to the 'def' line than the reverse.

--
Terry Jan Reedy

_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to