Re: RFC: prototype of C extensions using the Python limited API
Matthieu Longo via Gdb <[email protected]> Thu, 28 May 2026 17:31:55 +0100
| Newsgroups | gmane.comp.gdb.devel |
|---|---|
| Message-ID | <[email protected]> |
--------------0LE9j70VfLPc9pe0pym091sh Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 28/05/2026 17:24, Matthieu Longo via Gdb wrote: > Hi Tom, > > As I previously told you (at least, I believe so but I am not 100% sure), I finished migrating all > the Python C extensions some time ago. I had discovered some issues with a case of inheritance > causing unexpected crashes. > To facilitate the debugging, I decided to implement a prototype outside of GDB, and managed to make > it work. I finally got the prototype reviewed by Victor Stinner, a Python core developer, to double- > check whether my design was working as expected. > > Please find attached my last iteration. I also provided an archive which should be more convenient > for you if you want to compile and test it. > > Could you please review it so that we validate this new approach before I migrate all my previous > patches to it ? > > PS: > - a README is provided with all the needed instruction inside. > - this patch contains code from outside GDB's repository, and should not be merged inside GDB's > repository. > > Regards, > Matthieu With the archive, hopefully not inlined. --------------0LE9j70VfLPc9pe0pym091sh Content-Type: application/x-gzip; name="prototype.tar.gz" Content-Disposition: attachment; filename="prototype.tar.gz" Content-Transfer-Encoding: base64 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 --------------0LE9j70VfLPc9pe0pym091sh--