[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

AltStyle によって変換されたページ (->オリジナル) /