Clang python Bindings: как получить подпись указателя функции из курсора CALL_EXPRPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Clang python Bindings: как получить подпись указателя функции из курсора CALL_EXPR

Сообщение Anonymous »

Мне нужно найти подписи каждого выражения вызова указателя функции в исходном файле «.c», используя API clang в Python.
Я не знаю, есть ли в clang способ определить, является ли CALL_EXPR вызовом указателя функции или обычным вызовом функции, пока это единственный обходной путь, который у меня есть.

Код: Выделить всё

c: Cursor
if c.kind == CursorKind.CALL_EXPR:
if not (c.referenced and c.referenced.kind == CursorKind.FUNCTION_DECL):
# funtion pointer
# ...
Еще одна неприятная проблема заключается в том, что я хочу знать сигнатуру функции, которую представляет этот указатель функции, но clang, похоже, не предоставляет простого интерфейса для получения типа возвращаемого значения. Но, к счастью, он предоставляет список аргументов для указателя функции.

Код: Выделить всё

# the return type is invalid
result_type: Type = c.result_type

# the argument list is correct
arg_list = str(', ').join([arg.type.get_canonical().spelling for arg in c.get_arguments()])
print(f'{arg_list}')
Я не хочу углубляться в этот CALL_EXPR, потому что выражение, возвращающее этот указатель на функцию, может быть очень сложным, может быть простой переменной указателя на функцию, приведением типа или даже выражение ?:.
Я просто хочу знать, есть ли простой способ получить конкретную сигнатуру этого указателя на функцию.

Подробнее здесь: https://stackoverflow.com/questions/792 ... r-from-the
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»