[Python-Dev] Parrot -- should life imitate satire?

Thomas Wouters thomas@xs4all.net
Tue, 31 Jul 2001 01:34:48 +0200


On Tue, Jul 31, 2001 at 10:51:35AM +1200, Greg Ewing wrote:
> Skip Montanaro <skip@pobox.com>:

> > The main stumbling block was that pesky "from module import *"
> > statement.  It could push an unknown quantity of stuff onto the
> > stack

> Are you *sure* about that? I'm pretty certain it can't
> be true, since the compiler has to know at all times
> how much is on the stack, so it can decide how much
> stack space is needed.

I think Skip meant it does an arbitrary number of 

load-onto-stack
store-into-namespace

operations. Skip, you'll be glad to know that's no longer true :) Since 2.0
(or when was it that we introduced 'import as' ?) import-* is not a special
case of 'IMPORT_FROM', but rather a separate opcode that doesn't touch the
stack. 'IMPORT_FROM' is now only used to push a given name from TOS onto the
stack:

>>> def eggs():
...     from stat import a, b    
>>> dis.dis(eggs)
...
          9 IMPORT_NAME              0 (stat)
         12 IMPORT_FROM              1 (a)
         15 STORE_FAST               1 (a)
         18 IMPORT_FROM              2 (b)
         21 STORE_FAST               0 (b)
         24 POP_TOP
...

>>> def spam():
...     from stat import *
>>> dis.dis(spam)
...
          6 LOAD_CONST               1 (('*',))
          9 IMPORT_NAME              0 (stat)
         12 IMPORT_STAR
...

Bloody hell, what's that LOAD_CONST doing there ? I think I found a bug ;P
Sigh... Sleep first, fix later.

-- 
Thomas Wouters <thomas@xs4all.net>

Hi! I'm a .signature virus! copy me into your .signature file to help me spread!