Sealang ist ein verbesserter Satz von Python-Anbindungen für libclang.

Die Upstream-Maintainer von libclang waren nicht besonders auf Patches reagiert, die Probleme wie die Kompatibilität mit Python 3 ansprechen, und die erheblichen Lücken in der API (wie das Extrahieren von Literalen und Operatoren).

Dieses Paket ist ein Fork der offiziellen Python-Bindungen für libclang, gepatcht, um diese Probleme zu beheben.

Wie es funktioniert

Sealang ist ein ziemlich fieser Hack. libclang ist ein Satz von C Bindungen zu einer C++ API; Python ctypes werden dann verwendet, um die C API zu umhüllen. Während jedoch die C++-API recht umfangreich ist, ist libclang weniger umfangreich.

Sealang überbrückt diese Lücke, indem es C-Wrapper um die C++-Aufrufe die die nützlichen Funktionen bereitstellen. Diese Bibliothek von C-Funktionen wird für die Auslieferung als Python C-Modul verpackt - dieses C-Modul enthält keine offengelegten Python-Objekte oder -Methoden, aber da es sich um ein Modul ist, werden die zugrunde liegenden kompilierten sealang.so Datei leicht zu finden. ctypes werden dann verwendet, um die sealang Wrapper-Funktionen;

Intern reproduziert Sealang einige kleinere Teile der libclang API; dies sind Methoden (wie die Methoden zur Erzeugung und Manipulation von Zeichenketten) die nicht als Symbole für die Verwendung durch Dritte verfügbar sind.

All diese Funktionen sind potenziell ein Kandidat für die Weitergabe an an libclang zu übergeben.

Beziehung zu Clang

Dieses Projekt zielt darauf ab, das zu spiegeln, was derzeit in den Python Bindungen an libclang verfügbar sind. Die Versionsnummer für dieses Projekt ergibt sich von der Version und der SVN-Revision des offiziellen Clang-Repositorys.

Alle Änderungen, die Upstream an libclang vorgenommen werden, werden hier gespiegelt; alle Änderungen, die hier gemacht werden, werden, wenn möglich, in den Upstream von libclang übertragen.

Entwicklungsstand

Dieses Projekt war ein Experiment, das zur Unterstützung von Seasnake. Da Seasnake aufgegeben wurde, wurde auch dieses Projekt eingestellt.

How to help