Commit 0c70ca9a authored by Benjamin Peterson's avatar Benjamin Peterson

merge 3.5 (#24328)

parents 07739f35 e20056c8
...@@ -177,6 +177,14 @@ class MultiPhaseExtensionModuleTests(abc.LoaderTests): ...@@ -177,6 +177,14 @@ class MultiPhaseExtensionModuleTests(abc.LoaderTests):
self.assertEqual(module.__name__, 'pkg.' + self.name) self.assertEqual(module.__name__, 'pkg.' + self.name)
self.assertEqual(module.str_const, 'something different') self.assertEqual(module.str_const, 'something different')
def test_load_short_name(self):
'''Test loading module with a one-character name'''
module = self.load_module_by_name('x')
self.assertIsInstance(module, types.ModuleType)
self.assertEqual(module.__name__, 'x')
self.assertEqual(module.str_const, 'something different')
assert 'x' not in sys.modules
def test_load_twice(self): def test_load_twice(self):
'''Test that 2 loads result in 2 module objects''' '''Test that 2 loads result in 2 module objects'''
module1 = self.load_module_by_name(self.name) module1 = self.load_module_by_name(self.name)
......
...@@ -22,6 +22,8 @@ Release date: 2015-07-05 ...@@ -22,6 +22,8 @@ Release date: 2015-07-05
Core and Builtins Core and Builtins
----------------- -----------------
- Issue #24328: Fix importing one character extension modules.
- Issue #11205: In dictionary displays, evaluate the key before the value. - Issue #11205: In dictionary displays, evaluate the key before the value.
- Issue #24285: Fixed regression that prevented importing extension modules - Issue #24285: Fixed regression that prevented importing extension modules
......
...@@ -321,6 +321,14 @@ PyInitU_eckzbwbhc6jpgzcx415x(PyObject *spec) ...@@ -321,6 +321,14 @@ PyInitU_eckzbwbhc6jpgzcx415x(PyObject *spec)
return PyModuleDef_Init(&def_nonascii_kana); return PyModuleDef_Init(&def_nonascii_kana);
} }
/*** Module with a single-character name ***/
PyMODINIT_FUNC
PyInit_x(PyObject *spec)
{
return PyModuleDef_Init(&main_def);
}
/**** Testing NULL slots ****/ /**** Testing NULL slots ****/
static PyModuleDef null_slots_def = TEST_MODULE_DEF( static PyModuleDef null_slots_def = TEST_MODULE_DEF(
......
...@@ -34,10 +34,11 @@ static const char *nonascii_prefix = "PyInitU"; ...@@ -34,10 +34,11 @@ static const char *nonascii_prefix = "PyInitU";
*/ */
static PyObject * static PyObject *
get_encoded_name(PyObject *name, const char **hook_prefix) { get_encoded_name(PyObject *name, const char **hook_prefix) {
char *buf;
PyObject *tmp; PyObject *tmp;
PyObject *encoded = NULL; PyObject *encoded = NULL;
Py_ssize_t name_len, lastdot, i; PyObject *modname = NULL;
Py_ssize_t name_len, lastdot;
_Py_IDENTIFIER(replace);
/* Get the short name (substring after last dot) */ /* Get the short name (substring after last dot) */
name_len = PyUnicode_GetLength(name); name_len = PyUnicode_GetLength(name);
...@@ -71,16 +72,14 @@ get_encoded_name(PyObject *name, const char **hook_prefix) { ...@@ -71,16 +72,14 @@ get_encoded_name(PyObject *name, const char **hook_prefix) {
} }
} }
buf = PyBytes_AS_STRING(encoded); /* Replace '-' by '_' */
assert(Py_REFCNT(encoded) == 1); modname = _PyObject_CallMethodId(encoded, &PyId_replace, "cc", '-', '_');
for (i = 0; i < PyBytes_GET_SIZE(encoded) + 1; i++) { if (modname == NULL)
if (buf[i] == '-') { goto error;
buf[i] = '_';
}
}
Py_DECREF(name); Py_DECREF(name);
return encoded; Py_DECREF(encoded);
return modname;
error: error:
Py_DECREF(name); Py_DECREF(name);
Py_XDECREF(encoded); Py_XDECREF(encoded);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment