How do functions get access to builtins?
Steven D'Aprano
steve+comp.lang.python at pearwood.info
Thu Jan 24 06:31:06 EST 2013
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
More information about the Python-list
mailing list