O Sealang é um conjunto aprimorado de ligações Python para o libclang.

Os mantenedores da libclang não têm sido especialmente receptivos aos patches que tratam de problemas como a compatibilidade com o Python 3, e as omissões significativas na API (como a extração de literais e operadores).

Este pacote é uma bifurcação dos bindings oficiais do Python para a libclang, corrigido para corrigir esses problemas.

Como funciona

O Sealang é um hack um tanto desagradável. O libclang é um conjunto de ligações C para uma API C++. API C++; os ctypes do Python são usados para envolver a API C. No entanto, embora a API C++ é bastante rica, a libclang é menos.

A Sealang preenche essa lacuna fornecendo invólucros C em torno das chamadas C++ que fornecem a funcionalidade útil. Essa biblioteca de funções em C é como um módulo Python C para fins de entrega - esse módulo C não contém objetos ou métodos Python expostos, mas, por ser um módulo o módulo subjacente compilado sealang.so é fácil de encontrar. Os ctypes são então usados para expor os sealang funções de wrapper;

Internamente, o Sealang reproduz algumas partes menores da API libclang; esses são métodos (como os métodos de criação e manipulação de strings) que não são expostos como símbolos para uso de terceiros.

Toda essa funcionalidade é potencialmente uma candidata a ser passada para o upstream para a libclang.

Relação com o Clang

Este projeto tem como objetivo espelhar o que está atualmente disponível nas ligações Python para a libclang. O número da versão deste projeto é extraído da versão e da revisão SVN do repositório oficial do clang.

Quaisquer alterações feitas no libclang serão espelhadas aqui; quaisquer alterações feitas aqui serão, sempre que possível, enviadas para libclang.

Status de desenvolvimento

Esse projeto foi um experimento desenvolvido para dar suporte ao Seasnake. Como o Seasnake foi abandonado, este projeto também foi.

Como ajudar