Rouslan Korneychuk wrote:

> I found the answer in Python's source code. When you execute a code
> object, PyFrame_New is called which gets 'bultins' from 'globals', but
> inside PyFrame_New (defined on line 596 of Objects/frameobject.c) is the
> following (line 613):
> 
>    builtins = PyDict_GetItem(globals, builtin_object);
> 
> Unlike PyObject_GetItem, PyDict_GetItem is specialized for dict objects.
> Your ChainedDict class uses ChainMaps's storage and leaves dict's
> storage empty, so PyDict_GetItem doesn't find anything.
[...]
> Interestingly: it looks like it could be fixed easily enough. Unless
> there are other places where globals is assumed to be a dict object, it
> would just be a matter of doing the same check and fallback in
> PyFrame_New that is done in LOAD_GLOBAL (technically, you could just use
> PyObject_GetItem; obviously, this is an optimization).


Thanks for the reply Rouslan.

Perhaps I should report this as a bug.




-- 
Steven

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

Reply via email to