h2def.py: Tudo por causa de 1 dígito…

Continuando minha saga de bindings python para bibliotecas gobject, um dos problemas que tive nos bindings da ConIC e estou tendo no OSSO-Addressbook é que o h2def.py não estava gerando as definições de objeto para cada classe existente nelas. Ou seja, eu tinha que fazer tudo na mão.

Fuçando (de novo…) o código do h2defs.py, quando ele vai procurar definições de objetos ele usa procura logo estruturas (structs) que possam “parecer” com GObjects, adicionando a uma lista maybeobjects, e em seguida procura pelas estruturas de classe desses objetos (NomeDoObjetoClass). Caso encontre as estruturas de classe, o objeto é considerado um gobject e é adicionado na lista final.

Para achar as estruturas, ele usa 2 expressões regulares, uma para estruturas do tipo

struct _NomeDoObjeto{

    ObjetoPai *parent;

    ...

e outra para estruturas do tipo:

typedef struct {

    ObjetoPai *parent;

    ...

} NomeDoObjeto;

Ao achar uma ocorrência do padrão, maybeobjects recebia uma tupla com o nome do objeto e o nome do pai, que no segundo caso estava em ordem inversa do primeiro (primeiro o pai e depois o objeto).

O problema é que na hora de adicionar o seguindo tipo a maybeobjects, acontecia o seguinte:

maybeobjects.append((m.group(2), m.group(2))

Ou seja, o nome do objeto estava sendo adicionado duas vezes, ao invés do par correto. Bastou mudar para

maybeobjects.append((m.group(2), m.group(1))

E tudo fucionou…


Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s