Как я могу получить модификатор `const` функции CFFI в Python? - PullRequest
0 голосов
/ 03 июля 2018

Я пишу оболочку Python для сгенерированного кода C, который содержит функции, которые используют аргументы указателя в качестве выходных данных. Я хочу проанализировать эти функции, сгенерированные с использованием CFFI, чтобы определить, вводят ли они наши выходные аргументы. Входные аргументы помечены const, но, похоже, CFFI отбрасывает эту информацию.

Рассмотрим следующий пример

from cffi import FFI
ffibuilder = FFI()

ffibuilder.set_source("_example",
   r"""
        int add(const int a, const int b) {
            return a+b;
        }
    """)

ffibuilder.cdef("""
        int add(const int a, const int b);
""")

if __name__ == "__main__":
    ffibuilder.compile(verbose=True)
    import _example
    ff = _example.lib.add
    ff_t = _example.ffi.typeof(ff)
    print(ff_t)

Который печатает <ctype 'int(*)(int, int)'>, в то время как вводы определены в коде const.

1 Ответ

0 голосов
/ 03 июля 2018

Извините, не возможно. Эта информация уже отбрасывается при переводе проанализированного кода во внутренний ctype CFFI.

Посмотрите на модуль pycparser (тот, который CFFI использует внутри); он преобразует исходный код C в дерево разбора. Оттуда вы можете получить всю эту информацию более непосредственно.

...