On 10/24/13 8:20 PM, Christian Tismer wrote:
I looked into the old CVS sources. The code is different, but has the same
principle:

/* Get the __import__ function from the builtins */ if
(PyDict_Check(builtins)) { import = PyObject_GetItem(builtins,
import_str); if (import == NULL) PyErr_SetObject(PyExc_KeyError,
import_str); } else import = PyObject_GetAttr(builtins, import_str);
if (import == NULL) goto err; tup = Py_BuildValue("(O(s))", import,
name);

Richard's version uses a slightly different way, but also grabs __import__
from the builtins of the interpreter.

It worries me a bit that this is only done for __import__ and not for the other builtins; it suggests to me that there is a reason for grabbing __import__

And the problem is that I am giving that function back, which is your
hook, right?

The immediate issue is that pickle is failing to save globals because of the value of __import__. That is probably fixable, but I'm trying to figure out when the saved globals is used -- what happens when a pickle created when the debugger is running is unpickled when the debugger isn't running? What happens in the reverse case?

Thanks,

John

_______________________________________________
Stackless mailing list
[email protected]
http://www.stackless.com/mailman/listinfo/stackless

Reply via email to