[pypy-svn] r73571 - in pypy/branch/cpython-extension/pypy/module/cpyext: . test

afa at codespeak.net afa at codespeak.net
Thu Apr 8 22:29:22 CEST 2010


Author: afa
Date: Thu Apr  8 22:29:19 2010
New Revision: 73571

Modified:
   pypy/branch/cpython-extension/pypy/module/cpyext/__init__.py
   pypy/branch/cpython-extension/pypy/module/cpyext/api.py
   pypy/branch/cpython-extension/pypy/module/cpyext/test/test_bufferobject.py
Log:
allow cpyext to call C init_xxx() functions on startup.
Fix test_bufferobject


Modified: pypy/branch/cpython-extension/pypy/module/cpyext/__init__.py
==============================================================================
--- pypy/branch/cpython-extension/pypy/module/cpyext/__init__.py	(original)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/__init__.py	Thu Apr  8 22:29:19 2010
@@ -30,11 +30,10 @@
                           space.wrap(state.api_lib))
         else:
             state.init_r2w_from_w2r()
-        
-        #XXX: segfaults
-        #for func in api.INIT_FUNCTIONS:
-        #    func()
-        #    state.check_and_raise_exception()
+
+        for func in api.INIT_FUNCTIONS:
+            func()
+            state.check_and_raise_exception()
 
 # import these modules to register api functions by side-effect
 import pypy.module.cpyext.pyobject

Modified: pypy/branch/cpython-extension/pypy/module/cpyext/api.py
==============================================================================
--- pypy/branch/cpython-extension/pypy/module/cpyext/api.py	(original)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/api.py	Thu Apr  8 22:29:19 2010
@@ -229,7 +229,7 @@
     'PyArg_ParseTuple', 'PyArg_UnpackTuple', 'PyArg_ParseTupleAndKeywords',
     'PyString_FromFormat', 'PyString_FromFormatV', 'PyModule_AddObject', 
     'Py_BuildValue', 'PyTuple_Pack', 'PyErr_Format',
-    'PyBuffer_FromMemory', 'PyBuffer_Type',
+    'PyBuffer_FromMemory', 'PyBuffer_Type', 'init_bufferobject',
 ]
 TYPES = {}
 GLOBALS = { # this needs to include all prebuilt pto, otherwise segfaults occur
@@ -474,11 +474,9 @@
             '\n'.join(functions))
 
     eci = build_eci(True, export_symbols, code)
-    eci = eci.convert_sources_to_files()
-    modulename = platform.platform.compile(
-        [], eci,
-        outputfilename=str(udir / "module_cache" / "pypyapi"),
-        standalone=False)
+    eci = eci.compile_shared_lib(
+        outputfilename=str(udir / "module_cache" / "pypyapi"))
+    modulename = py.path.local(eci.libraries[-1])
 
     bootstrap_types(space)
 

Modified: pypy/branch/cpython-extension/pypy/module/cpyext/test/test_bufferobject.py
==============================================================================
--- pypy/branch/cpython-extension/pypy/module/cpyext/test/test_bufferobject.py	(original)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/test/test_bufferobject.py	Thu Apr  8 22:29:19 2010
@@ -13,7 +13,7 @@
                  cbuf[0] = 'a';
                  cbuf[1] = 'b';
                  cbuf[2] = 'c';
-                 cbuf[3] = '\0';
+                 cbuf[3] = '\\0';
                  return PyBuffer_FromMemory(cbuf, 4);
              """),
             ("free_buffer", "METH_NOARGS",
@@ -22,8 +22,8 @@
                  Py_RETURN_NONE;
              """)
             ], prologue = """
-            char* cbuf = NULL;
+            static char* cbuf = NULL;
             """)
-        w_buffer = module.get_FromMemory()
-        assert False, w_buffer
+        buffer = module.get_FromMemory()
+        assert str(buffer) == 'abc\0'
         module.free_buffer()



More information about the Pypy-commit mailing list