[Python-Dev] Anonymous + varargs: possible serious breakage -- please confirm!
Jeremy Hylton
jeremy@alum.mit.edu
Thu, 25 Jan 2001 10:20:45 -0500 (EST)
>>>>> "TW" == Thomas Wouters <thomas@xs4all.net> writes:
TW> On Wed, Jan 24, 2001 at 12:33:43PM -0800, Ka-Ping Yee wrote:
>> Please try:
>> >>> def f(a, (b, c), *d):
>> ... x = 1 ... print a, b, c, d, x ...
>> >>> f(1, (2, 3), 4)
>> 1 2 3 Traceback (most recent call last): File "<stdin>", line 1,
>> in ? File "<stdin>", line 3, in f UnboundLocalError: local
>> variable 'd' referenced before assignment
>> >>>
>> In Python 1.5.2, this prints "1 2 3 (4,)" as expected.
>> I only have 1.5.2 and 2.1a1 to test. I hope this problem isn't
>> present in 2.0...
TW> It isn't present in 2.0. This is probably related to Jeremy's
TW> changes in the call mechanism or the compiler track, though
TW> Jeremy himself is the best person to claim that for sure :)
The bug is in the compiler. It creates varnames while it is parsing
the argument list. While I got the handling of the anonymous tuples
right, I forgot to insert *varargs or **kwargs in varnames *before*
the names defined in the tuple.
I will fix it real soon now.
>> Note that test_inspect was the only test to fail! It might be
>> the only test that checks anonymous and *varargs at the same
>> time. (Yet another reason to put inspect in the core...)
TW> Well, this is not an inspect-specific test, so it shouldn't *be*
TW> in test_inspect, it should be in test_extcall :)
It should probably be in test_grammar. The ext call mechanism is only
invoked when the caller uses a form like 'f(*arg)'. Perhaps the name
"ext call" isn't very clear.
Jeremy