I'm the maintainer of the PyCXX C++ extension interface to Python C API. PyCXX source code is a SVN repo at: https://svn.code.sf.net/p/cxx/code/trunk/CXX
I have been working to get PyCXX to build and run against PyPy C API. I am happy to have PyPy specific code in PyCXX where necessary. Using PyPy 0.6.0 on macOS I managed to build a .so that crashed when imported. The reason is that the PyPy's C API does not allow tuples to be created. The pattern in CPython is like this: explicit Tuple (const Sequence& s) { sequence_index_type limit( sequence_index_type( s.length() ) ); set(PyTuple_New (limit), true); validate(); for(sequence_index_type i=0; i < limit; i++) { if(PyTuple_SetItem (ptr(), i, new_reference_to(s[i])) == -1) { ifPyErrorThrowCxxException(); } } } The PyTuple_SetItem() always fails. Its a must have to create tuples. How do you expect a tuple to be created? I have a build of the tip from the PyPy HG repo. This has regressed from the 0.6.0 release: g++ -c -g -Wall -fPIC -fexceptions -frtti -I. -ISrc -I/home/barry/tmpdir/usession-default-barry/build/pypy-qqq/include -DNDEBUG -oobj/simple.obj Demo/Python2/simple.cxx In file included from ./CXX/Objects.hxx:40, from Demo/Python2/simple.cxx:15: ./CXX/Python2/Objects.hxx: In member function ‘void Py::MapBase<T>::delItem(const string&)’: ./CXX/Python2/Objects.hxx:3041:17: error: there are no arguments to ‘PyMapping_DelItemString’ that depend on a template parameter, so a declaration of ‘PyMapping_DelItemString’ must be available [-fpermissive] if (PyMapping_DelItemString (ptr(), const_cast<char*>(s.c_str())) == -1) ^~~~~~~~~~~~~~~~~~~~~~~ ./CXX/Python2/Objects.hxx:3041:17: note: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated) ./CXX/Python2/Objects.hxx: In member function ‘void Py::MapBase<T>::delItem(const Py::Object&)’: ./CXX/Python2/Objects.hxx:3049:17: error: there are no arguments to ‘PyMapping_DelItem’ that depend on a template parameter, so a declaration of ‘PyMapping_DelItem’ must be available [-fpermissive] if (PyMapping_DelItem (ptr(), *s) == -1) ^~~~~~~~~~~~~~~~~ It seems that PyMapping_DelItem and PyMapping_DelString have been removed since 0.6.0. Can they be restored? Oh and where does the magic "44" come from that I had to use in the <extension>.pypy-44.so file name? Barry _______________________________________________ pypy-dev mailing list pypy-dev@python.org https://mail.python.org/mailman/listinfo/pypy-dev