mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
Issue #3080: Add PyModule_NewObject() function
This commit is contained in:
parent
3a9559b844
commit
0639b56672
3 changed files with 28 additions and 8 deletions
|
@ -29,7 +29,7 @@ There are only a few functions special to module objects.
|
||||||
:c:data:`PyModule_Type`.
|
:c:data:`PyModule_Type`.
|
||||||
|
|
||||||
|
|
||||||
.. c:function:: PyObject* PyModule_New(const char *name)
|
.. c:function:: PyObject* PyModule_NewObject(PyObject *name)
|
||||||
|
|
||||||
.. index::
|
.. index::
|
||||||
single: __name__ (module attribute)
|
single: __name__ (module attribute)
|
||||||
|
@ -40,6 +40,14 @@ There are only a few functions special to module objects.
|
||||||
Only the module's :attr:`__doc__` and :attr:`__name__` attributes are filled in;
|
Only the module's :attr:`__doc__` and :attr:`__name__` attributes are filled in;
|
||||||
the caller is responsible for providing a :attr:`__file__` attribute.
|
the caller is responsible for providing a :attr:`__file__` attribute.
|
||||||
|
|
||||||
|
.. versionadded:: 3.3
|
||||||
|
|
||||||
|
|
||||||
|
.. c:function:: PyObject* PyModule_New(const char *name)
|
||||||
|
|
||||||
|
Similar to :c:func:`PyImport_NewObject`, but the name is an UTF-8 encoded
|
||||||
|
string instead of a Unicode object.
|
||||||
|
|
||||||
|
|
||||||
.. c:function:: PyObject* PyModule_GetDict(PyObject *module)
|
.. c:function:: PyObject* PyModule_GetDict(PyObject *module)
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,9 @@ PyAPI_DATA(PyTypeObject) PyModule_Type;
|
||||||
#define PyModule_Check(op) PyObject_TypeCheck(op, &PyModule_Type)
|
#define PyModule_Check(op) PyObject_TypeCheck(op, &PyModule_Type)
|
||||||
#define PyModule_CheckExact(op) (Py_TYPE(op) == &PyModule_Type)
|
#define PyModule_CheckExact(op) (Py_TYPE(op) == &PyModule_Type)
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyModule_NewObject(
|
||||||
|
PyObject *name
|
||||||
|
);
|
||||||
PyAPI_FUNC(PyObject *) PyModule_New(
|
PyAPI_FUNC(PyObject *) PyModule_New(
|
||||||
const char *name /* UTF-8 encoded string */
|
const char *name /* UTF-8 encoded string */
|
||||||
);
|
);
|
||||||
|
|
|
@ -27,35 +27,44 @@ static PyTypeObject moduledef_type = {
|
||||||
|
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
PyModule_New(const char *name)
|
PyModule_NewObject(PyObject *name)
|
||||||
{
|
{
|
||||||
PyModuleObject *m;
|
PyModuleObject *m;
|
||||||
PyObject *nameobj;
|
|
||||||
m = PyObject_GC_New(PyModuleObject, &PyModule_Type);
|
m = PyObject_GC_New(PyModuleObject, &PyModule_Type);
|
||||||
if (m == NULL)
|
if (m == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
m->md_def = NULL;
|
m->md_def = NULL;
|
||||||
m->md_state = NULL;
|
m->md_state = NULL;
|
||||||
nameobj = PyUnicode_FromString(name);
|
|
||||||
m->md_dict = PyDict_New();
|
m->md_dict = PyDict_New();
|
||||||
if (m->md_dict == NULL || nameobj == NULL)
|
if (m->md_dict == NULL)
|
||||||
goto fail;
|
goto fail;
|
||||||
if (PyDict_SetItemString(m->md_dict, "__name__", nameobj) != 0)
|
if (PyDict_SetItemString(m->md_dict, "__name__", name) != 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
if (PyDict_SetItemString(m->md_dict, "__doc__", Py_None) != 0)
|
if (PyDict_SetItemString(m->md_dict, "__doc__", Py_None) != 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
if (PyDict_SetItemString(m->md_dict, "__package__", Py_None) != 0)
|
if (PyDict_SetItemString(m->md_dict, "__package__", Py_None) != 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
Py_DECREF(nameobj);
|
|
||||||
PyObject_GC_Track(m);
|
PyObject_GC_Track(m);
|
||||||
return (PyObject *)m;
|
return (PyObject *)m;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
Py_XDECREF(nameobj);
|
|
||||||
Py_DECREF(m);
|
Py_DECREF(m);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PyObject *
|
||||||
|
PyModule_New(const char *name)
|
||||||
|
{
|
||||||
|
PyObject *nameobj, *module;
|
||||||
|
nameobj = PyUnicode_FromString(name);
|
||||||
|
if (nameobj == NULL)
|
||||||
|
return NULL;
|
||||||
|
module = PyModule_NewObject(nameobj);
|
||||||
|
Py_DECREF(nameobj);
|
||||||
|
return module;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
PyModule_Create2(struct PyModuleDef* module, int module_api_version)
|
PyModule_Create2(struct PyModuleDef* module, int module_api_version)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue