]> granicus.if.org Git - python/commitdiff
Actually initialize __main__.__loader__ with loader instances, not the corresponding...
authorNick Coghlan <ncoghlan@gmail.com>
Sun, 15 Jul 2012 09:10:39 +0000 (19:10 +1000)
committerNick Coghlan <ncoghlan@gmail.com>
Sun, 15 Jul 2012 09:10:39 +0000 (19:10 +1000)
Lib/test/test_cmd_line_script.py
Python/pythonrun.c

index 849abe24772e31e2ded10fd19ad88c827426bb38..8b6083e84f9802bf4fe37c65b06fe99fd423f677 100644 (file)
@@ -37,7 +37,8 @@ f()
 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)
index 970834e0bbd20e987119d5670ce8bc8240cb168c..8130cc52893d11c8a32bedc195610c7b2021efb7 100644 (file)
@@ -1355,11 +1355,15 @@ set_main_loader(PyObject *d, const char *filename, const char *loader_name)
 {
     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;