Извлечение вызовов функций c ++ и объекта, который они вызвали с помощью Clang в Python - PullRequest
0 голосов
/ 20 ноября 2018

Я использую 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)
...