summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/c-api/module.rst11
-rw-r--r--Doc/library/importlib.rst2
-rw-r--r--Doc/reference/import.rst4
-rw-r--r--Doc/whatsnew/3.4.rst5
-rw-r--r--Lib/ctypes/test/__init__.py2
-rw-r--r--Lib/doctest.py2
-rw-r--r--Lib/importlib/_bootstrap.py2
-rw-r--r--Lib/inspect.py2
-rw-r--r--Lib/test/test_descr.py4
-rw-r--r--Lib/test/test_importlib/test_api.py14
-rw-r--r--Lib/test/test_module.py28
-rw-r--r--Misc/NEWS3
-rw-r--r--Objects/moduleobject.c39
-rw-r--r--Python/importlib.h363
-rw-r--r--Python/pythonrun.c3
15 files changed, 264 insertions, 220 deletions
diff --git a/Doc/c-api/module.rst b/Doc/c-api/module.rst
index 65ff8fa..95a0169 100644
--- a/Doc/c-api/module.rst
+++ b/Doc/c-api/module.rst
@@ -35,13 +35,20 @@ There are only a few functions special to module objects.
single: __name__ (module attribute)
single: __doc__ (module attribute)
single: __file__ (module attribute)
+ single: __package__ (module attribute)
+ single: __loader__ (module attribute)
Return a new module object with the :attr:`__name__` attribute set to *name*.
- Only the module's :attr:`__doc__` and :attr:`__name__` attributes are filled in;
- the caller is responsible for providing a :attr:`__file__` attribute.
+ The module's :attr:`__name__`, :attr:`__doc__`, :attr:`__package__`, and
+ :attr:`__loader__` attributes are filled in (all but :attr:`__name__` are set
+ to ``None``); the caller is responsible for providing a :attr:`__file__`
+ attribute.
.. versionadded:: 3.3
+ .. versionchanged:: 3.4
+ :attr:`__package__` and :attr:`__loader__` are set to ``None``.
+
.. c:function:: PyObject* PyModule_New(const char *name)
diff --git a/Doc/library/importlib.rst b/Doc/library/importlib.rst
index aeeb3fd..9cb03be 100644
--- a/Doc/library/importlib.rst
+++ b/Doc/library/importlib.rst
@@ -827,7 +827,7 @@ an :term:`importer`.
decorator as it subsumes this functionality.
.. versionchanged:: 3.4
- Set ``__loader__`` if set to ``None`` as well if the attribute does not
+ Set ``__loader__`` if set to ``None``, as if the attribute does not
exist.
diff --git a/Doc/reference/import.rst b/Doc/reference/import.rst
index 4ad4490..9c52435 100644
--- a/Doc/reference/import.rst
+++ b/Doc/reference/import.rst
@@ -423,8 +423,8 @@ Here are the exact rules used:
* If the module has a ``__file__`` attribute, this is used as part of the
module's repr.
- * If the module has no ``__file__`` but does have a ``__loader__``, then the
- loader's repr is used as part of the module's repr.
+ * If the module has no ``__file__`` but does have a ``__loader__`` that is not
+ ``None``, then the loader's repr is used as part of the module's repr.
* Otherwise, just use the module's ``__name__`` in the repr.
diff --git a/Doc/whatsnew/3.4.rst b/Doc/whatsnew/3.4.rst
index ca515f6..9774241 100644
--- a/Doc/whatsnew/3.4.rst
+++ b/Doc/whatsnew/3.4.rst
@@ -231,3 +231,8 @@ that may require changes to your code.
:exc:`NotImplementedError` blindly. This will only affect code calling
:func:`super` and falling through all the way to the ABCs. For compatibility,
catch both :exc:`NotImplementedError` or the appropriate exception as needed.
+
+* The module type now initializes the :attr:`__package__` and :attr:`__loader__`
+ attributes to ``None`` by default. To determine if these attributes were set
+ in a backwards-compatible fashion, use e.g.
+ ``getattr(module, '__loader__', None) is not None``. \ No newline at end of file
diff --git a/Lib/ctypes/test/__init__.py b/Lib/ctypes/test/__init__.py
index cc5fe02..7c72210 100644
--- a/Lib/ctypes/test/__init__.py
+++ b/Lib/ctypes/test/__init__.py
@@ -37,7 +37,7 @@ def requires(resource, msg=None):
def find_package_modules(package, mask):
import fnmatch
- if (hasattr(package, "__loader__") and
+ if (package.__loader__ is not None and
hasattr(package.__loader__, '_files')):
path = package.__name__.replace(".", os.path.sep)
mask = os.path.join(path, mask)
diff --git a/Lib/doctest.py b/Lib/doctest.py
index 16a732d..1b8a9d4 100644
--- a/Lib/doctest.py
+++ b/Lib/doctest.py
@@ -215,7 +215,7 @@ def _load_testfile(filename, package, module_relative, encoding):
if module_relative:
package = _normalize_module(package, 3)
filename = _module_relative_path(package, filename)
- if hasattr(package, '__loader__'):
+ if getattr(package, '__loader__', None) is not None:
if hasattr(package.__loader__, 'get_data'):
file_contents = package.__loader__.get_data(filename)
file_contents = file_contents.decode(encoding)
diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py
index 1a046c5..155403e 100644
--- a/Lib/importlib/_bootstrap.py
+++ b/Lib/importlib/_bootstrap.py
@@ -1726,7 +1726,7 @@ def _setup(sys_module, _imp_module):
module_type = type(sys)
for name, module in sys.modules.items():
if isinstance(module, module_type):
- if not hasattr(module, '__loader__'):
+ if getattr(module, '__loader__', None) is None:
if name in sys.builtin_module_names:
module.__loader__ = BuiltinImporter
elif _imp.is_frozen(name):
diff --git a/Lib/inspect.py b/Lib/inspect.py
index e60a235..22b9e84 100644
--- a/Lib/inspect.py
+++ b/Lib/inspect.py
@@ -476,7 +476,7 @@ def getsourcefile(object):
if os.path.exists(filename):
return filename
# only return a non-existent filename if the module has a PEP 302 loader
- if hasattr(getmodule(object, filename), '__loader__'):
+ if getattr(getmodule(object, filename), '__loader__', None) is not None:
return filename
# or it is in the linecache
if filename in linecache.cache:
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
index d38d1f4..8cb3155 100644
--- a/Lib/test/test_descr.py
+++ b/Lib/test/test_descr.py
@@ -2250,7 +2250,9 @@ order (MRO) for bases """
minstance = M("m")
minstance.b = 2
minstance.a = 1
- names = [x for x in dir(minstance) if x not in ["__name__", "__doc__"]]
+ default_attributes = ['__name__', '__doc__', '__package__',
+ '__loader__']
+ names = [x for x in dir(minstance) if x not in default_attributes]
self.assertEqual(names, ['a', 'b'])
class M2(M):
diff --git a/Lib/test/test_importlib/test_api.py b/Lib/test/test_importlib/test_api.py
index ac88b2b..297d6cb 100644
--- a/Lib/test/test_importlib/test_api.py
+++ b/Lib/test/test_importlib/test_api.py
@@ -197,14 +197,12 @@ class StartupTests(unittest.TestCase):
# Issue #17098: all modules should have __loader__ defined.
for name, module in sys.modules.items():
if isinstance(module, types.ModuleType):
- if name in sys.builtin_module_names:
- self.assertIn(module.__loader__,
- (importlib.machinery.BuiltinImporter,
- importlib._bootstrap.BuiltinImporter))
- elif imp.is_frozen(name):
- self.assertIn(module.__loader__,
- (importlib.machinery.FrozenImporter,
- importlib._bootstrap.FrozenImporter))
+ self.assertTrue(hasattr(module, '__loader__'),
+ '{!r} lacks a __loader__ attribute'.format(name))
+ if importlib.machinery.BuiltinImporter.find_module(name):
+ self.assertIsNot(module.__loader__, None)
+ elif importlib.machinery.FrozenImporter.find_module(name):
+ self.assertIsNot(module.__loader__, None)
if __name__ == '__main__':
diff --git a/Lib/test/test_module.py b/Lib/test/test_module.py
index e5a2525..b34b30f 100644
--- a/Lib/test/test_module.py
+++ b/Lib/test/test_module.py
@@ -33,7 +33,10 @@ class ModuleTests(unittest.TestCase):
foo = ModuleType("foo")
self.assertEqual(foo.__name__, "foo")
self.assertEqual(foo.__doc__, None)
- self.assertEqual(foo.__dict__, {"__name__": "foo", "__doc__": None})
+ self.assertIs(foo.__loader__, None)
+ self.assertIs(foo.__package__, None)
+ self.assertEqual(foo.__dict__, {"__name__": "foo", "__doc__": None,
+ "__loader__": None, "__package__": None})
def test_ascii_docstring(self):
# ASCII docstring
@@ -41,7 +44,8 @@ class ModuleTests(unittest.TestCase):
self.assertEqual(foo.__name__, "foo")
self.assertEqual(foo.__doc__, "foodoc")
self.assertEqual(foo.__dict__,
- {"__name__": "foo", "__doc__": "foodoc"})
+ {"__name__": "foo", "__doc__": "foodoc",
+ "__loader__": None, "__package__": None})
def test_unicode_docstring(self):
# Unicode docstring
@@ -49,7 +53,8 @@ class ModuleTests(unittest.TestCase):
self.assertEqual(foo.__name__, "foo")
self.assertEqual(foo.__doc__, "foodoc\u1234")
self.assertEqual(foo.__dict__,
- {"__name__": "foo", "__doc__": "foodoc\u1234"})
+ {"__name__": "foo", "__doc__": "foodoc\u1234",
+ "__loader__": None, "__package__": None})
def test_reinit(self):
# Reinitialization should not replace the __dict__
@@ -61,7 +66,8 @@ class ModuleTests(unittest.TestCase):
self.assertEqual(foo.__doc__, "foodoc")
self.assertEqual(foo.bar, 42)
self.assertEqual(foo.__dict__,
- {"__name__": "foo", "__doc__": "foodoc", "bar": 42})
+ {"__name__": "foo", "__doc__": "foodoc", "bar": 42,
+ "__loader__": None, "__package__": None})
self.assertTrue(foo.__dict__ is d)
@unittest.expectedFailure
@@ -110,13 +116,19 @@ a = A(destroyed)"""
m.__file__ = '/tmp/foo.py'
self.assertEqual(repr(m), "<module '?' from '/tmp/foo.py'>")
+ def test_module_repr_with_loader_as_None(self):
+ m = ModuleType('foo')
+ assert m.__loader__ is None
+ self.assertEqual(repr(m), "<module 'foo'>")
+
def test_module_repr_with_bare_loader_but_no_name(self):
m = ModuleType('foo')
del m.__name__
# Yes, a class not an instance.
m.__loader__ = BareLoader
+ loader_repr = repr(BareLoader)
self.assertEqual(
- repr(m), "<module '?' (<class 'test.test_module.BareLoader'>)>")
+ repr(m), "<module '?' ({})>".format(loader_repr))
def test_module_repr_with_full_loader_but_no_name(self):
# m.__loader__.module_repr() will fail because the module has no
@@ -126,15 +138,17 @@ a = A(destroyed)"""
del m.__name__
# Yes, a class not an instance.
m.__loader__ = FullLoader
+ loader_repr = repr(FullLoader)
self.assertEqual(
- repr(m), "<module '?' (<class 'test.test_module.FullLoader'>)>")
+ repr(m), "<module '?' ({})>".format(loader_repr))
def test_module_repr_with_bare_loader(self):
m = ModuleType('foo')
# Yes, a class not an instance.
m.__loader__ = BareLoader
+ module_repr = repr(BareLoader)
self.assertEqual(
- repr(m), "<module 'foo' (<class 'test.test_module.BareLoader'>)>")
+ repr(m), "<module 'foo' ({})>".format(module_repr))
def test_module_repr_with_full_loader(self):
m = ModuleType('foo')
diff --git a/Misc/NEWS b/Misc/NEWS
index 524c84b..8d4c276 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,9 @@ What's New in Python 3.4.0 Alpha 1?
Core and Builtins
-----------------
+- Issue #17115,17116: Module initialization now includes setting __package__ and
+ __loader__ attributes to None.
+
- Issue #17853: Ensure locals of a class that shadow free variables always win
over the closures.
diff --git a/Objects/moduleobject.c b/Objects/moduleobject.c
index 2f2bd36..5970901 100644
--- a/Objects/moduleobject.c
+++ b/Objects/moduleobject.c
@@ -26,6 +26,27 @@ static PyTypeObject moduledef_type = {
};
+static int
+module_init_dict(PyObject *md_dict, PyObject *name, PyObject *doc)
+{
+ if (md_dict == NULL)
+ return -1;
+ if (doc == NULL)
+ doc = Py_None;
+
+ if (PyDict_SetItemString(md_dict, "__name__", name) != 0)
+ return -1;
+ if (PyDict_SetItemString(md_dict, "__doc__", doc) != 0)
+ return -1;
+ if (PyDict_SetItemString(md_dict, "__package__", Py_None) != 0)
+ return -1;
+ if (PyDict_SetItemString(md_dict, "__loader__", Py_None) != 0)
+ return -1;
+
+ return 0;
+}
+
+
PyObject *
PyModule_NewObject(PyObject *name)
{
@@ -36,13 +57,7 @@ PyModule_NewObject(PyObject *name)
m->md_def = NULL;
m->md_state = NULL;
m->md_dict = PyDict_New();
- if (m->md_dict == NULL)
- goto fail;
- if (PyDict_SetItemString(m->md_dict, "__name__", name) != 0)
- goto fail;
- if (PyDict_SetItemString(m->md_dict, "__doc__", Py_None) != 0)
- goto fail;
- if (PyDict_SetItemString(m->md_dict, "__package__", Py_None) != 0)
+ if (module_init_dict(m->md_dict, name, NULL) != 0)
goto fail;
PyObject_GC_Track(m);
return (PyObject *)m;
@@ -347,9 +362,7 @@ module_init(PyModuleObject *m, PyObject *args, PyObject *kwds)
return -1;
m->md_dict = dict;
}
- if (PyDict_SetItemString(dict, "__name__", name) < 0)
- return -1;
- if (PyDict_SetItemString(dict, "__doc__", doc) < 0)
+ if (module_init_dict(dict, name, doc) < 0)
return -1;
return 0;
}
@@ -380,7 +393,7 @@ module_repr(PyModuleObject *m)
if (m->md_dict != NULL) {
loader = PyDict_GetItemString(m->md_dict, "__loader__");
}
- if (loader != NULL) {
+ if (loader != NULL && loader != Py_None) {
repr = PyObject_CallMethod(loader, "module_repr", "(O)",
(PyObject *)m, NULL);
if (repr == NULL) {
@@ -404,10 +417,10 @@ module_repr(PyModuleObject *m)
filename = PyModule_GetFilenameObject((PyObject *)m);
if (filename == NULL) {
PyErr_Clear();
- /* There's no m.__file__, so if there was an __loader__, use that in
+ /* There's no m.__file__, so if there was a __loader__, use that in
* the repr, otherwise, the only thing you can use is m.__name__
*/
- if (loader == NULL) {
+ if (loader == NULL || loader == Py_None) {
repr = PyUnicode_FromFormat("<module %R>", name);
}
else {
diff --git a/Python/importlib.h b/Python/importlib.h
index ed5bcf5..b3cd548 100644
--- a/Python/importlib.h
+++ b/Python/importlib.h
@@ -3354,189 +3354,190 @@ const unsigned char _Py_M__importlib[] = {
115,26,0,0,0,0,11,12,1,15,2,24,1,12,1,18,
1,6,3,12,1,23,1,6,1,4,4,35,3,40,2,114,
77,1,0,0,99,2,0,0,0,0,0,0,0,16,0,0,
- 0,13,0,0,0,67,0,0,0,115,228,2,0,0,124,1,
+ 0,13,0,0,0,67,0,0,0,115,237,2,0,0,124,1,
0,97,0,0,124,0,0,97,1,0,116,1,0,106,2,0,
106,3,0,114,33,0,116,4,0,97,5,0,110,6,0,116,
6,0,97,5,0,116,7,0,116,1,0,131,1,0,125,2,
- 0,120,119,0,116,1,0,106,8,0,106,9,0,131,0,0,
- 68,93,102,0,92,2,0,125,3,0,125,4,0,116,10,0,
+ 0,120,128,0,116,1,0,106,8,0,106,9,0,131,0,0,
+ 68,93,111,0,92,2,0,125,3,0,125,4,0,116,10,0,
124,4,0,124,2,0,131,2,0,114,67,0,116,11,0,124,
- 4,0,100,1,0,131,2,0,115,169,0,124,3,0,116,1,
- 0,106,12,0,107,6,0,114,136,0,116,13,0,124,4,0,
- 95,14,0,113,166,0,116,0,0,106,15,0,124,3,0,131,
- 1,0,114,166,0,116,16,0,124,4,0,95,14,0,113,166,
- 0,113,169,0,113,67,0,113,67,0,87,116,1,0,106,8,
- 0,116,17,0,25,125,5,0,120,76,0,100,27,0,68,93,
- 68,0,125,6,0,124,6,0,116,1,0,106,8,0,107,7,
- 0,114,232,0,116,13,0,106,18,0,124,6,0,131,1,0,
- 125,7,0,110,13,0,116,1,0,106,8,0,124,6,0,25,
- 125,7,0,116,19,0,124,5,0,124,6,0,124,7,0,131,
- 3,0,1,113,193,0,87,100,6,0,100,7,0,103,1,0,
- 102,2,0,100,8,0,100,9,0,100,7,0,103,2,0,102,
- 2,0,102,2,0,125,8,0,120,149,0,124,8,0,68,93,
- 129,0,92,2,0,125,9,0,125,10,0,116,20,0,100,10,
- 0,100,11,0,132,0,0,124,10,0,68,131,1,0,131,1,
- 0,115,92,1,116,21,0,130,1,0,124,10,0,100,12,0,
- 25,125,11,0,124,9,0,116,1,0,106,8,0,107,6,0,
- 114,134,1,116,1,0,106,8,0,124,9,0,25,125,12,0,
- 80,113,49,1,121,20,0,116,13,0,106,18,0,124,9,0,
- 131,1,0,125,12,0,80,87,113,49,1,4,116,22,0,107,
- 10,0,114,177,1,1,1,1,119,49,1,89,113,49,1,88,
- 113,49,1,87,116,22,0,100,13,0,131,1,0,130,1,0,
- 121,19,0,116,13,0,106,18,0,100,14,0,131,1,0,125,
- 13,0,87,110,24,0,4,116,22,0,107,10,0,114,239,1,
- 1,1,1,100,15,0,125,13,0,89,110,1,0,88,116,13,
- 0,106,18,0,100,16,0,131,1,0,125,14,0,124,9,0,
- 100,8,0,107,2,0,114,45,2,116,13,0,106,18,0,100,
- 17,0,131,1,0,125,15,0,116,19,0,124,5,0,100,18,
- 0,124,15,0,131,3,0,1,110,0,0,116,19,0,124,5,
- 0,100,19,0,124,12,0,131,3,0,1,116,19,0,124,5,
- 0,100,14,0,124,13,0,131,3,0,1,116,19,0,124,5,
- 0,100,16,0,124,14,0,131,3,0,1,116,19,0,124,5,
- 0,100,20,0,124,11,0,131,3,0,1,116,19,0,124,5,
- 0,100,21,0,100,22,0,106,23,0,124,10,0,131,1,0,
- 131,3,0,1,116,19,0,124,5,0,100,23,0,116,24,0,
- 131,0,0,131,3,0,1,116,25,0,106,26,0,116,0,0,
- 106,27,0,131,0,0,131,1,0,1,124,9,0,100,8,0,
- 107,2,0,114,224,2,116,28,0,106,29,0,100,24,0,131,
- 1,0,1,100,25,0,116,25,0,107,6,0,114,224,2,100,
- 26,0,116,30,0,95,31,0,113,224,2,110,0,0,100,15,
- 0,83,40,28,0,0,0,117,250,0,0,0,83,101,116,117,
- 112,32,105,109,112,111,114,116,108,105,98,32,98,121,32,105,
- 109,112,111,114,116,105,110,103,32,110,101,101,100,101,100,32,
- 98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,115,
- 32,97,110,100,32,105,110,106,101,99,116,105,110,103,32,116,
- 104,101,109,10,32,32,32,32,105,110,116,111,32,116,104,101,
- 32,103,108,111,98,97,108,32,110,97,109,101,115,112,97,99,
- 101,46,10,10,32,32,32,32,65,115,32,115,121,115,32,105,
- 115,32,110,101,101,100,101,100,32,102,111,114,32,115,121,115,
- 46,109,111,100,117,108,101,115,32,97,99,99,101,115,115,32,
- 97,110,100,32,95,105,109,112,32,105,115,32,110,101,101,100,
- 101,100,32,116,111,32,108,111,97,100,32,98,117,105,108,116,
- 45,105,110,10,32,32,32,32,109,111,100,117,108,101,115,44,
- 32,116,104,111,115,101,32,116,119,111,32,109,111,100,117,108,
- 101,115,32,109,117,115,116,32,98,101,32,101,120,112,108,105,
- 99,105,116,108,121,32,112,97,115,115,101,100,32,105,110,46,
- 10,10,32,32,32,32,114,149,0,0,0,114,48,0,0,0,
- 114,170,0,0,0,244,8,0,0,0,98,117,105,108,116,105,
- 110,115,114,186,0,0,0,116,5,0,0,0,112,111,115,105,
- 120,245,1,0,0,0,47,244,2,0,0,0,110,116,245,1,
- 0,0,0,92,99,1,0,0,0,0,0,0,0,2,0,0,
- 0,3,0,0,0,115,0,0,0,115,33,0,0,0,124,0,
- 0,93,23,0,125,1,0,116,0,0,124,1,0,131,1,0,
- 100,0,0,107,2,0,86,1,113,3,0,100,1,0,83,40,
- 2,0,0,0,114,29,0,0,0,78,40,1,0,0,0,114,
- 31,0,0,0,40,2,0,0,0,114,22,0,0,0,114,118,
- 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
- 0,0,114,2,1,0,0,210,6,0,0,115,2,0,0,0,
- 6,0,117,25,0,0,0,95,115,101,116,117,112,46,60,108,
- 111,99,97,108,115,62,46,60,103,101,110,101,120,112,114,62,
- 114,71,0,0,0,117,30,0,0,0,105,109,112,111,114,116,
- 108,105,98,32,114,101,113,117,105,114,101,115,32,112,111,115,
- 105,120,32,111,114,32,110,116,114,72,0,0,0,78,114,95,
- 0,0,0,116,6,0,0,0,119,105,110,114,101,103,114,206,
- 0,0,0,114,3,0,0,0,114,25,0,0,0,114,21,0,
- 0,0,114,30,0,0,0,114,6,0,0,0,117,4,0,0,
- 0,46,112,121,119,117,6,0,0,0,95,100,46,112,121,100,
- 84,40,4,0,0,0,117,3,0,0,0,95,105,111,117,9,
- 0,0,0,95,119,97,114,110,105,110,103,115,117,8,0,0,
- 0,98,117,105,108,116,105,110,115,117,7,0,0,0,109,97,
- 114,115,104,97,108,40,32,0,0,0,114,97,0,0,0,114,
- 7,0,0,0,114,105,0,0,0,114,106,0,0,0,114,108,
- 0,0,0,114,75,1,0,0,114,107,0,0,0,114,65,0,
- 0,0,114,152,0,0,0,244,5,0,0,0,105,116,101,109,
- 115,114,187,0,0,0,114,59,0,0,0,114,163,0,0,0,
- 114,194,0,0,0,114,149,0,0,0,114,166,0,0,0,114,
- 202,0,0,0,114,56,0,0,0,114,198,0,0,0,114,60,
- 0,0,0,244,3,0,0,0,97,108,108,114,89,0,0,0,
- 114,154,0,0,0,114,26,0,0,0,114,11,0,0,0,114,
- 4,1,0,0,114,192,0,0,0,114,74,1,0,0,114,122,
- 0,0,0,114,251,0,0,0,114,205,0,0,0,114,209,0,
- 0,0,40,16,0,0,0,244,10,0,0,0,115,121,115,95,
- 109,111,100,117,108,101,244,11,0,0,0,95,105,109,112,95,
- 109,111,100,117,108,101,116,11,0,0,0,109,111,100,117,108,
- 101,95,116,121,112,101,114,66,0,0,0,114,145,0,0,0,
- 116,11,0,0,0,115,101,108,102,95,109,111,100,117,108,101,
- 116,12,0,0,0,98,117,105,108,116,105,110,95,110,97,109,
- 101,116,14,0,0,0,98,117,105,108,116,105,110,95,109,111,
- 100,117,108,101,116,10,0,0,0,111,115,95,100,101,116,97,
- 105,108,115,116,10,0,0,0,98,117,105,108,116,105,110,95,
- 111,115,114,21,0,0,0,114,25,0,0,0,116,9,0,0,
- 0,111,115,95,109,111,100,117,108,101,116,13,0,0,0,116,
- 104,114,101,97,100,95,109,111,100,117,108,101,116,14,0,0,
- 0,119,101,97,107,114,101,102,95,109,111,100,117,108,101,116,
- 13,0,0,0,119,105,110,114,101,103,95,109,111,100,117,108,
- 101,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
- 244,6,0,0,0,95,115,101,116,117,112,173,6,0,0,115,
- 102,0,0,0,0,9,6,1,6,2,12,1,9,2,6,2,
- 12,1,28,1,15,1,15,1,15,1,12,1,15,1,22,2,
- 13,1,13,1,15,1,18,2,13,1,20,2,33,1,19,2,
- 31,1,10,1,15,1,13,1,4,2,3,1,15,1,5,1,
- 13,1,12,2,12,2,3,1,19,1,13,2,11,1,15,2,
- 12,1,15,1,19,2,16,1,16,1,16,1,16,1,25,2,
- 19,1,19,1,12,1,13,1,12,1,114,86,1,0,0,99,
- 2,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,
- 67,0,0,0,115,136,0,0,0,116,0,0,124,0,0,124,
- 1,0,131,2,0,1,116,1,0,131,0,0,125,2,0,116,
- 2,0,106,3,0,106,4,0,116,5,0,106,6,0,124,2,
- 0,140,0,0,103,1,0,131,1,0,1,116,2,0,106,7,
- 0,106,8,0,116,9,0,131,1,0,1,116,2,0,106,7,
- 0,106,8,0,116,10,0,131,1,0,1,116,11,0,106,12,
- 0,100,1,0,107,2,0,114,116,0,116,2,0,106,7,0,
- 106,8,0,116,13,0,131,1,0,1,110,0,0,116,2,0,
- 106,7,0,106,8,0,116,14,0,131,1,0,1,100,2,0,
- 83,40,3,0,0,0,117,50,0,0,0,73,110,115,116,97,
- 108,108,32,105,109,112,111,114,116,108,105,98,32,97,115,32,
- 116,104,101,32,105,109,112,108,101,109,101,110,116,97,116,105,
- 111,110,32,111,102,32,105,109,112,111,114,116,46,114,80,1,
- 0,0,78,40,15,0,0,0,114,86,1,0,0,114,215,0,
- 0,0,114,7,0,0,0,114,26,1,0,0,114,192,0,0,
- 0,114,33,1,0,0,114,47,1,0,0,114,55,1,0,0,
- 114,251,0,0,0,114,194,0,0,0,114,202,0,0,0,114,
- 3,0,0,0,114,56,0,0,0,114,205,0,0,0,114,21,
- 1,0,0,40,3,0,0,0,114,84,1,0,0,114,85,1,
- 0,0,116,17,0,0,0,115,117,112,112,111,114,116,101,100,
- 95,108,111,97,100,101,114,115,114,4,0,0,0,114,4,0,
- 0,0,114,5,0,0,0,244,8,0,0,0,95,105,110,115,
- 116,97,108,108,249,6,0,0,115,16,0,0,0,0,2,13,
- 1,9,1,28,1,16,1,16,1,15,1,19,1,114,87,1,
- 0,0,40,3,0,0,0,117,3,0,0,0,119,105,110,114,
- 1,0,0,0,114,2,0,0,0,40,77,0,0,0,114,58,
- 0,0,0,114,10,0,0,0,114,11,0,0,0,114,17,0,
- 0,0,114,19,0,0,0,114,28,0,0,0,114,38,0,0,
- 0,114,43,0,0,0,114,44,0,0,0,114,45,0,0,0,
- 114,54,0,0,0,114,64,0,0,0,114,65,0,0,0,244,
- 8,0,0,0,95,95,99,111,100,101,95,95,114,188,0,0,
- 0,114,67,0,0,0,114,92,0,0,0,114,81,0,0,0,
- 114,88,0,0,0,114,68,0,0,0,114,70,0,0,0,114,
- 91,0,0,0,114,96,0,0,0,114,99,0,0,0,114,102,
- 0,0,0,114,15,0,0,0,114,181,0,0,0,114,14,0,
- 0,0,114,18,0,0,0,116,17,0,0,0,95,82,65,87,
- 95,77,65,71,73,67,95,78,85,77,66,69,82,114,113,0,
- 0,0,114,122,0,0,0,114,107,0,0,0,114,108,0,0,
- 0,114,120,0,0,0,114,123,0,0,0,114,131,0,0,0,
- 114,133,0,0,0,114,141,0,0,0,114,148,0,0,0,114,
- 151,0,0,0,114,159,0,0,0,114,162,0,0,0,114,165,
- 0,0,0,114,168,0,0,0,114,176,0,0,0,114,185,0,
- 0,0,114,190,0,0,0,114,193,0,0,0,114,194,0,0,
- 0,114,202,0,0,0,114,205,0,0,0,114,218,0,0,0,
- 114,224,0,0,0,114,244,0,0,0,114,248,0,0,0,114,
- 254,0,0,0,114,4,1,0,0,114,255,0,0,0,114,5,
- 1,0,0,114,20,1,0,0,114,21,1,0,0,114,33,1,
- 0,0,114,48,1,0,0,114,54,1,0,0,114,56,1,0,
- 0,114,59,1,0,0,114,60,1,0,0,114,63,1,0,0,
- 114,64,1,0,0,114,65,1,0,0,114,71,1,0,0,114,
- 73,1,0,0,114,215,0,0,0,114,77,1,0,0,114,86,
- 1,0,0,114,87,1,0,0,114,4,0,0,0,114,4,0,
- 0,0,114,4,0,0,0,114,5,0,0,0,244,8,0,0,
- 0,60,109,111,100,117,108,101,62,8,0,0,0,115,140,0,
- 0,0,6,21,6,3,12,13,12,10,12,9,12,6,12,12,
- 12,10,12,6,12,7,15,22,12,8,15,3,12,12,6,2,
- 6,3,22,4,19,68,19,23,12,19,12,20,12,109,22,1,
- 18,2,6,2,9,2,9,1,9,2,15,27,12,23,12,21,
- 12,12,18,8,12,13,12,11,12,55,12,18,12,11,12,11,
- 12,13,21,55,21,12,18,12,19,57,19,54,19,50,19,34,
- 22,132,19,29,25,43,25,19,6,3,19,45,19,55,19,18,
- 19,91,19,128,19,13,12,9,12,17,12,17,6,2,12,50,
- 12,13,18,24,12,34,12,15,12,11,24,36,12,76,
+ 4,0,100,1,0,100,2,0,131,3,0,100,2,0,107,8,
+ 0,114,178,0,124,3,0,116,1,0,106,12,0,107,6,0,
+ 114,145,0,116,13,0,124,4,0,95,14,0,113,175,0,116,
+ 0,0,106,15,0,124,3,0,131,1,0,114,175,0,116,16,
+ 0,124,4,0,95,14,0,113,175,0,113,178,0,113,67,0,
+ 113,67,0,87,116,1,0,106,8,0,116,17,0,25,125,5,
+ 0,120,76,0,100,27,0,68,93,68,0,125,6,0,124,6,
+ 0,116,1,0,106,8,0,107,7,0,114,241,0,116,13,0,
+ 106,18,0,124,6,0,131,1,0,125,7,0,110,13,0,116,
+ 1,0,106,8,0,124,6,0,25,125,7,0,116,19,0,124,
+ 5,0,124,6,0,124,7,0,131,3,0,1,113,202,0,87,
+ 100,7,0,100,8,0,103,1,0,102,2,0,100,9,0,100,
+ 10,0,100,8,0,103,2,0,102,2,0,102,2,0,125,8,
+ 0,120,149,0,124,8,0,68,93,129,0,92,2,0,125,9,
+ 0,125,10,0,116,20,0,100,11,0,100,12,0,132,0,0,
+ 124,10,0,68,131,1,0,131,1,0,115,101,1,116,21,0,
+ 130,1,0,124,10,0,100,13,0,25,125,11,0,124,9,0,
+ 116,1,0,106,8,0,107,6,0,114,143,1,116,1,0,106,
+ 8,0,124,9,0,25,125,12,0,80,113,58,1,121,20,0,
+ 116,13,0,106,18,0,124,9,0,131,1,0,125,12,0,80,
+ 87,113,58,1,4,116,22,0,107,10,0,114,186,1,1,1,
+ 1,119,58,1,89,113,58,1,88,113,58,1,87,116,22,0,
+ 100,14,0,131,1,0,130,1,0,121,19,0,116,13,0,106,
+ 18,0,100,15,0,131,1,0,125,13,0,87,110,24,0,4,
+ 116,22,0,107,10,0,114,248,1,1,1,1,100,2,0,125,
+ 13,0,89,110,1,0,88,116,13,0,106,18,0,100,16,0,
+ 131,1,0,125,14,0,124,9,0,100,9,0,107,2,0,114,
+ 54,2,116,13,0,106,18,0,100,17,0,131,1,0,125,15,
+ 0,116,19,0,124,5,0,100,18,0,124,15,0,131,3,0,
+ 1,110,0,0,116,19,0,124,5,0,100,19,0,124,12,0,
+ 131,3,0,1,116,19,0,124,5,0,100,15,0,124,13,0,
+ 131,3,0,1,116,19,0,124,5,0,100,16,0,124,14,0,
+ 131,3,0,1,116,19,0,124,5,0,100,20,0,124,11,0,
+ 131,3,0,1,116,19,0,124,5,0,100,21,0,100,22,0,
+ 106,23,0,124,10,0,131,1,0,131,3,0,1,116,19,0,
+ 124,5,0,100,23,0,116,24,0,131,0,0,131,3,0,1,
+ 116,25,0,106,26,0,116,0,0,106,27,0,131,0,0,131,
+ 1,0,1,124,9,0,100,9,0,107,2,0,114,233,2,116,
+ 28,0,106,29,0,100,24,0,131,1,0,1,100,25,0,116,
+ 25,0,107,6,0,114,233,2,100,26,0,116,30,0,95,31,
+ 0,113,233,2,110,0,0,100,2,0,83,40,28,0,0,0,
+ 117,250,0,0,0,83,101,116,117,112,32,105,109,112,111,114,
+ 116,108,105,98,32,98,121,32,105,109,112,111,114,116,105,110,
+ 103,32,110,101,101,100,101,100,32,98,117,105,108,116,45,105,
+ 110,32,109,111,100,117,108,101,115,32,97,110,100,32,105,110,
+ 106,101,99,116,105,110,103,32,116,104,101,109,10,32,32,32,
+ 32,105,110,116,111,32,116,104,101,32,103,108,111,98,97,108,
+ 32,110,97,109,101,115,112,97,99,101,46,10,10,32,32,32,
+ 32,65,115,32,115,121,115,32,105,115,32,110,101,101,100,101,
+ 100,32,102,111,114,32,115,121,115,46,109,111,100,117,108,101,
+ 115,32,97,99,99,101,115,115,32,97,110,100,32,95,105,109,
+ 112,32,105,115,32,110,101,101,100,101,100,32,116,111,32,108,
+ 111,97,100,32,98,117,105,108,116,45,105,110,10,32,32,32,
+ 32,109,111,100,117,108,101,115,44,32,116,104,111,115,101,32,
+ 116,119,111,32,109,111,100,117,108,101,115,32,109,117,115,116,
+ 32,98,101,32,101,120,112,108,105,99,105,116,108,121,32,112,
+ 97,115,115,101,100,32,105,110,46,10,10,32,32,32,32,114,
+ 149,0,0,0,78,114,48,0,0,0,114,170,0,0,0,244,
+ 8,0,0,0,98,117,105,108,116,105,110,115,114,186,0,0,
+ 0,116,5,0,0,0,112,111,115,105,120,245,1,0,0,0,
+ 47,244,2,0,0,0,110,116,245,1,0,0,0,92,99,1,
+ 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,115,
+ 0,0,0,115,33,0,0,0,124,0,0,93,23,0,125,1,
+ 0,116,0,0,124,1,0,131,1,0,100,0,0,107,2,0,
+ 86,1,113,3,0,100,1,0,83,40,2,0,0,0,114,29,
+ 0,0,0,78,40,1,0,0,0,114,31,0,0,0,40,2,
+ 0,0,0,114,22,0,0,0,114,118,0,0,0,114,4,0,
+ 0,0,114,4,0,0,0,114,5,0,0,0,114,2,1,0,
+ 0,210,6,0,0,115,2,0,0,0,6,0,117,25,0,0,
+ 0,95,115,101,116,117,112,46,60,108,111,99,97,108,115,62,
+ 46,60,103,101,110,101,120,112,114,62,114,71,0,0,0,117,
+ 30,0,0,0,105,109,112,111,114,116,108,105,98,32,114,101,
+ 113,117,105,114,101,115,32,112,111,115,105,120,32,111,114,32,
+ 110,116,114,72,0,0,0,114,95,0,0,0,116,6,0,0,
+ 0,119,105,110,114,101,103,114,206,0,0,0,114,3,0,0,
+ 0,114,25,0,0,0,114,21,0,0,0,114,30,0,0,0,
+ 114,6,0,0,0,117,4,0,0,0,46,112,121,119,117,6,
+ 0,0,0,95,100,46,112,121,100,84,40,4,0,0,0,117,
+ 3,0,0,0,95,105,111,117,9,0,0,0,95,119,97,114,
+ 110,105,110,103,115,117,8,0,0,0,98,117,105,108,116,105,
+ 110,115,117,7,0,0,0,109,97,114,115,104,97,108,40,32,
+ 0,0,0,114,97,0,0,0,114,7,0,0,0,114,105,0,
+ 0,0,114,106,0,0,0,114,108,0,0,0,114,75,1,0,
+ 0,114,107,0,0,0,114,65,0,0,0,114,152,0,0,0,
+ 244,5,0,0,0,105,116,101,109,115,114,187,0,0,0,114,
+ 61,0,0,0,114,163,0,0,0,114,194,0,0,0,114,149,
+ 0,0,0,114,166,0,0,0,114,202,0,0,0,114,56,0,
+ 0,0,114,198,0,0,0,114,60,0,0,0,244,3,0,0,
+ 0,97,108,108,114,89,0,0,0,114,154,0,0,0,114,26,
+ 0,0,0,114,11,0,0,0,114,4,1,0,0,114,192,0,
+ 0,0,114,74,1,0,0,114,122,0,0,0,114,251,0,0,
+ 0,114,205,0,0,0,114,209,0,0,0,40,16,0,0,0,
+ 244,10,0,0,0,115,121,115,95,109,111,100,117,108,101,244,
+ 11,0,0,0,95,105,109,112,95,109,111,100,117,108,101,116,
+ 11,0,0,0,109,111,100,117,108,101,95,116,121,112,101,114,
+ 66,0,0,0,114,145,0,0,0,116,11,0,0,0,115,101,
+ 108,102,95,109,111,100,117,108,101,116,12,0,0,0,98,117,
+ 105,108,116,105,110,95,110,97,109,101,116,14,0,0,0,98,
+ 117,105,108,116,105,110,95,109,111,100,117,108,101,116,10,0,
+ 0,0,111,115,95,100,101,116,97,105,108,115,116,10,0,0,
+ 0,98,117,105,108,116,105,110,95,111,115,114,21,0,0,0,
+ 114,25,0,0,0,116,9,0,0,0,111,115,95,109,111,100,
+ 117,108,101,116,13,0,0,0,116,104,114,101,97,100,95,109,
+ 111,100,117,108,101,116,14,0,0,0,119,101,97,107,114,101,
+ 102,95,109,111,100,117,108,101,116,13,0,0,0,119,105,110,
+ 114,101,103,95,109,111,100,117,108,101,114,4,0,0,0,114,
+ 4,0,0,0,114,5,0,0,0,244,6,0,0,0,95,115,
+ 101,116,117,112,173,6,0,0,115,102,0,0,0,0,9,6,
+ 1,6,2,12,1,9,2,6,2,12,1,28,1,15,1,24,
+ 1,15,1,12,1,15,1,22,2,13,1,13,1,15,1,18,
+ 2,13,1,20,2,33,1,19,2,31,1,10,1,15,1,13,
+ 1,4,2,3,1,15,1,5,1,13,1,12,2,12,2,3,
+ 1,19,1,13,2,11,1,15,2,12,1,15,1,19,2,16,
+ 1,16,1,16,1,16,1,25,2,19,1,19,1,12,1,13,
+ 1,12,1,114,86,1,0,0,99,2,0,0,0,0,0,0,
+ 0,3,0,0,0,3,0,0,0,67,0,0,0,115,136,0,
+ 0,0,116,0,0,124,0,0,124,1,0,131,2,0,1,116,
+ 1,0,131,0,0,125,2,0,116,2,0,106,3,0,106,4,
+ 0,116,5,0,106,6,0,124,2,0,140,0,0,103,1,0,
+ 131,1,0,1,116,2,0,106,7,0,106,8,0,116,9,0,
+ 131,1,0,1,116,2,0,106,7,0,106,8,0,116,10,0,
+ 131,1,0,1,116,11,0,106,12,0,100,1,0,107,2,0,
+ 114,116,0,116,2,0,106,7,0,106,8,0,116,13,0,131,
+ 1,0,1,110,0,0,116,2,0,106,7,0,106,8,0,116,
+ 14,0,131,1,0,1,100,2,0,83,40,3,0,0,0,117,
+ 50,0,0,0,73,110,115,116,97,108,108,32,105,109,112,111,
+ 114,116,108,105,98,32,97,115,32,116,104,101,32,105,109,112,
+ 108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,105,
+ 109,112,111,114,116,46,114,80,1,0,0,78,40,15,0,0,
+ 0,114,86,1,0,0,114,215,0,0,0,114,7,0,0,0,
+ 114,26,1,0,0,114,192,0,0,0,114,33,1,0,0,114,
+ 47,1,0,0,114,55,1,0,0,114,251,0,0,0,114,194,
+ 0,0,0,114,202,0,0,0,114,3,0,0,0,114,56,0,
+ 0,0,114,205,0,0,0,114,21,1,0,0,40,3,0,0,
+ 0,114,84,1,0,0,114,85,1,0,0,116,17,0,0,0,
+ 115,117,112,112,111,114,116,101,100,95,108,111,97,100,101,114,
+ 115,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
+ 244,8,0,0,0,95,105,110,115,116,97,108,108,249,6,0,
+ 0,115,16,0,0,0,0,2,13,1,9,1,28,1,16,1,
+ 16,1,15,1,19,1,114,87,1,0,0,40,3,0,0,0,
+ 117,3,0,0,0,119,105,110,114,1,0,0,0,114,2,0,
+ 0,0,40,77,0,0,0,114,58,0,0,0,114,10,0,0,
+ 0,114,11,0,0,0,114,17,0,0,0,114,19,0,0,0,
+ 114,28,0,0,0,114,38,0,0,0,114,43,0,0,0,114,
+ 44,0,0,0,114,45,0,0,0,114,54,0,0,0,114,64,
+ 0,0,0,114,65,0,0,0,244,8,0,0,0,95,95,99,
+ 111,100,101,95,95,114,188,0,0,0,114,67,0,0,0,114,
+ 92,0,0,0,114,81,0,0,0,114,88,0,0,0,114,68,
+ 0,0,0,114,70,0,0,0,114,91,0,0,0,114,96,0,
+ 0,0,114,99,0,0,0,114,102,0,0,0,114,15,0,0,
+ 0,114,181,0,0,0,114,14,0,0,0,114,18,0,0,0,
+ 116,17,0,0,0,95,82,65,87,95,77,65,71,73,67,95,
+ 78,85,77,66,69,82,114,113,0,0,0,114,122,0,0,0,
+ 114,107,0,0,0,114,108,0,0,0,114,120,0,0,0,114,
+ 123,0,0,0,114,131,0,0,0,114,133,0,0,0,114,141,
+ 0,0,0,114,148,0,0,0,114,151,0,0,0,114,159,0,
+ 0,0,114,162,0,0,0,114,165,0,0,0,114,168,0,0,
+ 0,114,176,0,0,0,114,185,0,0,0,114,190,0,0,0,
+ 114,193,0,0,0,114,194,0,0,0,114,202,0,0,0,114,
+ 205,0,0,0,114,218,0,0,0,114,224,0,0,0,114,244,
+ 0,0,0,114,248,0,0,0,114,254,0,0,0,114,4,1,
+ 0,0,114,255,0,0,0,114,5,1,0,0,114,20,1,0,
+ 0,114,21,1,0,0,114,33,1,0,0,114,48,1,0,0,
+ 114,54,1,0,0,114,56,1,0,0,114,59,1,0,0,114,
+ 60,1,0,0,114,63,1,0,0,114,64,1,0,0,114,65,
+ 1,0,0,114,71,1,0,0,114,73,1,0,0,114,215,0,
+ 0,0,114,77,1,0,0,114,86,1,0,0,114,87,1,0,
+ 0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,
+ 114,5,0,0,0,244,8,0,0,0,60,109,111,100,117,108,
+ 101,62,8,0,0,0,115,140,0,0,0,6,21,6,3,12,
+ 13,12,10,12,9,12,6,12,12,12,10,12,6,12,7,15,
+ 22,12,8,15,3,12,12,6,2,6,3,22,4,19,68,19,
+ 23,12,19,12,20,12,109,22,1,18,2,6,2,9,2,9,
+ 1,9,2,15,27,12,23,12,21,12,12,18,8,12,13,12,
+ 11,12,55,12,18,12,11,12,11,12,13,21,55,21,12,18,
+ 12,19,57,19,54,19,50,19,34,22,132,19,29,25,43,25,
+ 19,6,3,19,45,19,55,19,18,19,91,19,128,19,13,12,
+ 9,12,17,12,17,6,2,12,50,12,13,18,24,12,34,12,
+ 15,12,11,24,36,12,76,
};
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index b92a8bd..40f6ab4 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -866,7 +866,8 @@ initmain(PyInterpreterState *interp)
* be set if __main__ gets further initialized later in the startup
* process.
*/
- if (PyDict_GetItemString(d, "__loader__") == NULL) {
+ PyObject *loader = PyDict_GetItemString(d, "__loader__");
+ if (loader == NULL || loader == Py_None) {
PyObject *loader = PyObject_GetAttrString(interp->importlib,
"BuiltinImporter");
if (loader == NULL) {