On Nov 26, 2006, at 1:10 PM, Brett Cannon wrote:

On 11/24/06, Tony Lownds <[EMAIL PROTECTED]> wrote:
> Obviously signature objects would grow support for annotations, but I
> still need the information to be carried on the code object to
> incorporate into signature objects.
>

Signature objects still need a way to know the nested parameters, right?

They already handle them.


I see, through the bytecode inspection that inspect.py does.

How about a co_argnames attribute? eg for

def f((x, y), z): pass

f.func_code.co_argnames would be (('x', 'y'), 'z')

That's fine, but the compiler would need to change if it were to use this. Plus I am still hoping to make nested parameters disappear in Py3K (I won't be pushing for it any sooner than PyCon, though).


Yes, it is the compiler that would implement this. I have it implemented as follows.

>>> def f(a, (b, c), d=1, *e, f, g=1, **h): pass
...
>>> f.func_code.co_argnames
('a', ('b', 'c'), 'd', '*e', 'f', 'g', '**h')

However since inspect.py doesn't need this and neither does my code, I'll drop it.

I need to implement something like this to properly build
func_annotations
inside MAKE_FUNCTION.


I don't quite follow. Don't you already have support in MAKE_FUNCTION when the object is created?


The support available is the code object and anything pushed onto the stack. Just looking at the code object, the information is simply not available outside of reverse- engineering co_code (as inspect does).
I ended up pushing a tuple of argument names onto the stack.

eg, for

def f((x:1, y))->3: pass

the bytecode is...

  1           0 LOAD_CONST               0 (1)
              3 LOAD_CONST               1 (3)
              6 LOAD_CONST               2 (('x', 'return'))
9 LOAD_CONST 3 (<code object f at 0xb7ecd848, file "<str>", line 1>)
             12 EXTENDED_ARG             3
             15 MAKE_FUNCTION        196608
             18 STORE_NAME               0 (f)
             21 LOAD_CONST               4 (None)
             24 RETURN_VALUE

(the argument is so big because I need to pass the # of annotations in the argument of MAKE_FUNCTION so
that the stack effect can be easily calculated)

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

Reply via email to