[pypy-commit] pypy default: Implement PyModule_New().

mjacob pypy.commits at gmail.com
Wed Mar 22 04:01:21 EDT 2017


Author: Manuel Jacob <me at manueljacob.de>
Branch: 
Changeset: r90784:af67b08ae873
Date: 2017-03-22 08:53 +0100
http://bitbucket.org/pypy/pypy/changeset/af67b08ae873/

Log:	Implement PyModule_New().

diff --git a/pypy/module/cpyext/modsupport.py b/pypy/module/cpyext/modsupport.py
--- a/pypy/module/cpyext/modsupport.py
+++ b/pypy/module/cpyext/modsupport.py
@@ -10,6 +10,14 @@
 from pypy.module.cpyext.state import State
 from pypy.interpreter.error import oefmt
 
+ at cpython_api([rffi.CCHARP], PyObject)
+def PyModule_New(space, name):
+    """
+    Return a new module object with the __name__ attribute set to name.
+    Only the module's __doc__ and __name__ attributes are filled in;
+    the caller is responsible for providing a __file__ attribute."""
+    return Module(space, space.newtext(rffi.charp2str(name)))
+
 #@cpython_api([rffi.CCHARP], PyObject)
 def PyImport_AddModule(space, name):
     """Return the module object corresponding to a module name.  The name argument
diff --git a/pypy/module/cpyext/stubs.py b/pypy/module/cpyext/stubs.py
--- a/pypy/module/cpyext/stubs.py
+++ b/pypy/module/cpyext/stubs.py
@@ -1365,13 +1365,6 @@
     """
     raise NotImplementedError
 
- at cpython_api([rffi.CCHARP], PyObject)
-def PyModule_New(space, name):
-    """Return a new module object with the __name__ attribute set to name.  Only
-    the module's __doc__ and __name__ attributes are filled in; the caller is
-    responsible for providing a __file__ attribute."""
-    raise NotImplementedError
-
 @cpython_api([PyObject], rffi.CCHARP)
 def PyModule_GetFilename(space, module):
     """Return the name of the file from which module was loaded using module's
diff --git a/pypy/module/cpyext/test/test_module.py b/pypy/module/cpyext/test/test_module.py
--- a/pypy/module/cpyext/test/test_module.py
+++ b/pypy/module/cpyext/test/test_module.py
@@ -1,8 +1,15 @@
+from pypy.module.cpyext.modsupport import PyModule_New
 from pypy.module.cpyext.test.test_api import BaseApiTest
 from rpython.rtyper.lltypesystem import rffi
 
 
 class TestModuleObject(BaseApiTest):
+    def test_module_new(self, space):
+        with rffi.scoped_str2charp('testname') as buf:
+            w_mod = PyModule_New(space, buf)
+        assert space.eq_w(space.getattr(w_mod, space.newtext('__name__')),
+                          space.newtext('testname'))
+
     def test_module_getname(self, space, api):
         w_sys = space.wrap(space.sys)
         p = api.PyModule_GetName(w_sys)


More information about the pypy-commit mailing list