mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
merge 3.5 (#24328)
This commit is contained in:
commit
0c70ca9aac
4 changed files with 27 additions and 10 deletions
|
@ -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
|
||||||
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)
|
||||||
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";
|
||||||
*/
|
*/
|
||||||
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) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue