On Tue, Jul 5, 2016 at 3:27 PM, eryk sun <eryk...@gmail.com> wrote: > ChainMap implements the MutableMapping abstract base class. But > CPython needs globals to be a dict. In the current implementation, > LOAD_GLOBAL calls _PyDict_LoadGlobal, and STORE_GLOBAL calls > PyDict_SetItem. They don't fall back on the abstract object APIs.
Sorry, I was replying from memory, but partly mixed up 2.x and 3.x. In CPython 3.6, LOAD_GLOBAL does fall back on PyObject_GetItem, but STORE_GLOBAL still does not. The latter is short enough to quote: TARGET(STORE_GLOBAL) { PyObject *name = GETITEM(names, oparg); PyObject *v = POP(); int err; err = PyDict_SetItem(f->f_globals, name, v); Py_DECREF(v); if (err != 0) goto error; DISPATCH(); } -- https://mail.python.org/mailman/listinfo/python-list