[Python-checkins] r88746 - in python/branches/py3k: Doc/c-api/module.rst Include/moduleobject.h Objects/moduleobject.c

victor.stinner python-checkins at python.org
Fri Mar 4 13:57:07 CET 2011


Author: victor.stinner
Date: Fri Mar  4 13:57:07 2011
New Revision: 88746

Log:
Issue #3080: Add PyModule_NewObject() function

Modified:
   python/branches/py3k/Doc/c-api/module.rst
   python/branches/py3k/Include/moduleobject.h
   python/branches/py3k/Objects/moduleobject.c

Modified: python/branches/py3k/Doc/c-api/module.rst
==============================================================================
--- python/branches/py3k/Doc/c-api/module.rst	(original)
+++ python/branches/py3k/Doc/c-api/module.rst	Fri Mar  4 13:57:07 2011
@@ -29,7 +29,7 @@
    :c:data:`PyModule_Type`.
 
 
-.. c:function:: PyObject* PyModule_New(const char *name)
+.. c:function:: PyObject* PyModule_NewObject(PyObject *name)
 
    .. index::
       single: __name__ (module attribute)
@@ -40,6 +40,14 @@
    Only the module's :attr:`__doc__` and :attr:`__name__` attributes are filled in;
    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)
 

Modified: python/branches/py3k/Include/moduleobject.h
==============================================================================
--- python/branches/py3k/Include/moduleobject.h	(original)
+++ python/branches/py3k/Include/moduleobject.h	Fri Mar  4 13:57:07 2011
@@ -12,6 +12,9 @@
 #define PyModule_Check(op) PyObject_TypeCheck(op, &PyModule_Type)
 #define PyModule_CheckExact(op) (Py_TYPE(op) == &PyModule_Type)
 
+PyAPI_FUNC(PyObject *) PyModule_NewObject(
+    PyObject *name
+    );
 PyAPI_FUNC(PyObject *) PyModule_New(
     const char *name            /* UTF-8 encoded string */
     );

Modified: python/branches/py3k/Objects/moduleobject.c
==============================================================================
--- python/branches/py3k/Objects/moduleobject.c	(original)
+++ python/branches/py3k/Objects/moduleobject.c	Fri Mar  4 13:57:07 2011
@@ -27,36 +27,45 @@
 
 
 PyObject *
-PyModule_New(const char *name)
+PyModule_NewObject(PyObject *name)
 {
     PyModuleObject *m;
-    PyObject *nameobj;
     m = PyObject_GC_New(PyModuleObject, &PyModule_Type);
     if (m == NULL)
         return NULL;
     m->md_def = NULL;
     m->md_state = NULL;
-    nameobj = PyUnicode_FromString(name);
     m->md_dict = PyDict_New();
-    if (m->md_dict == NULL || nameobj == NULL)
+    if (m->md_dict == NULL)
         goto fail;
-    if (PyDict_SetItemString(m->md_dict, "__name__", nameobj) != 0)
+    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)
         goto fail;
-    Py_DECREF(nameobj);
     PyObject_GC_Track(m);
     return (PyObject *)m;
 
  fail:
-    Py_XDECREF(nameobj);
     Py_DECREF(m);
     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 *
 PyModule_Create2(struct PyModuleDef* module, int module_api_version)
 {
     PyObject *d, *v, *n;


More information about the Python-checkins mailing list