Я использую Clang для извлечения вызовов функций и объекта, из которого они вызывают.Я знаю, что могу использовать CALL_EXPR для поиска вызовов функций.Однако я не нашел способа связать извлеченные вызовы функций с их объектами.Мне было интересно, можете ли вы помочь мне соединить их Вот код, который я написал для этого.Это работает для некоторых случаев, но не для всех.
elif node.kind == c.CursorKind.DECL_REF_EXPR:
temp = []
if nodes[-2].kind == c.CursorKind.MEMBER_REF_EXPR:
temp.append(nodes[-2])
elif nodes[-2].kind == c.CursorKind.UNEXPOSED_EXPR:
temp.append(nodes[-2])
if nodes[-3].kind == c.CursorKind.MEMBER_REF_EXPR:
temp.append(nodes[-3])
elif nodes[-3].kind == c.CursorKind.UNEXPOSED_EXPR:
temp.append(nodes[-3])
if nodes[-2].kind == c.CursorKind.CALL_EXPR:
temp.append(nodes[-2])
elif nodes[-3].kind == c.CursorKind.CALL_EXPR:
temp.append(nodes[-3])
elif nodes[-4].kind == c.CursorKind.CALL_EXPR:
temp.append(nodes[-4])
fcall = node
mcall = node
for x in temp:
print("@@@@@ kind: ",x.kind ," spell : ",x.spelling)
if x.kind == c.CursorKind.CALL_EXPR:
fcall = x
elif x.kind == c.CursorKind.MEMBER_REF_EXPR:
mcall = x
print("fcall : ",fcall.spelling," mcall:",mcall.spelling)
if fcall.spelling == mcall.spelling:
print('++>', 'new function call detected :', fcall.spelling)
function_calls['objects'][fcall.spelling] = {
'function name' : fcall.spelling,
}
print('++>', 'new function detected for"',node.spelling,"\"object which is :" , fcall.spelling)