[Python-Dev] Accessing globals without dict lookup

Guido van Rossum guido@python.org
Mon, 11 Feb 2002 09:42:54 -0500


> On Mon, 11 Feb 2002, Ka-Ping Yee wrote:
> >         This simplifies things further:
> >
> >             PyObject* cell_get(PyGlobalCell* c)
> >             {
> >                 return c->cell_cellptr->cell_objptr;
> >             }
> 
> I forgot to mention that this would also add loopback cellptrs for
> the two cells pointed to by __builtin__.abs and __builtin__.max.
> 
> But hey... in that case the cellptr is always two steps away from
> the object.  So why not just use PyObject**s instead of cells?
> 
>     dict -> ptr -> ptr -> object
> 
> (Or, if we want to maintain backward compatibility with existing
> dictionaries, let a cell be an object, so we can check its type,
> and have it contain just one pointer instead of two?)
> 
> Am i out to lunch?

I think so.  Think of max in the example used for your diagram (thanks
for that BTW!).  The first cell for it contains 3; the second cell for
it contains the built-in function 'max'.  A double dereference would
get the wrong value.

Or did I misread your suggestion?

--Guido van Rossum (home page: http://www.python.org/~guido/)