我正在使用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)