assertEqual(result, ['Top level assignment', 'Lower level reference'])
# Check population of magic variables
assertEqual(__name__, '__main__')
-_loader = __loader__ if isinstance(__loader__, type) else type(__loader__)
+from importlib.machinery import BuiltinImporter
+_loader = __loader__ if __loader__ is BuiltinImporter else type(__loader__)
print('__loader__==%a' % _loader)
print('__file__==%a' % __file__)
assertEqual(__cached__, None)
{
PyInterpreterState *interp;
PyThreadState *tstate;
- PyObject *loader;
+ PyObject *loader_type, *loader;
/* Get current thread state and interpreter pointer */
tstate = PyThreadState_GET();
interp = tstate->interp;
- loader = PyObject_GetAttrString(interp->importlib, loader_name);
+ loader_type = PyObject_GetAttrString(interp->importlib, loader_name);
+ if (loader_type == NULL) {
+ return -1;
+ }
+ loader = PyObject_CallFunction(loader_type, "ss", "__main__", filename);
if (loader == NULL ||
(PyDict_SetItemString(d, "__loader__", loader) < 0)) {
return -1;