Hi,
I am not sure if this is the right newsgroup, so if not don't hesitate
to tell me.

I am developed a Python to C compiler, so that Byte Code files
automatically can be translated into C Extension Modules. (And it works
pretty well --> http://www.coremountains.com/products/bytecoat/)

While developing, I found something strange concerning the YIELD_VALUE
OpCode.

Since Python Version 2.5 it behaves the following:
        1. pop yield value from stack and return it to
                a former gen_send_ex() call from Objects/genobject.c

        2. push the yield value on the stack in gen_send_ex() and return        
        it

        3. when the generator is executed again, the yield value is
                'poped' from the stack again with the POP_TOP opcode

Now I found that a little strange:
        1. why is the value removed from the stack, than pushed on the 
                stack to remove it finally again? the combination of 
                YIELD_VALUE and TOP_POP seems hard coded in compile.c
                which means that a TOP_POP follows every YIELD_VALUE 
                TOP_POP

        2. If the semantic of the YIELD_VALUE OpCode has changed, why
                is this reached by using another function? Such thing 
                should be done in the OpCode.

                (e.a.: instead of retval = POP() 
                        --> retval = TOP(); Py_INCREF(retval); )


I am a little confused about this.

Best,
Andreas

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to