使用Python中的Clang提取c ++函数调用及其调用的对象

时间:2018-11-20 03:32:47

标签: python clang llvm libclang

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

0 个答案:

没有答案