2016-06-20 6 views
1

Я внедрил посетителя AST с помощью Clang. С помощью этого фрагмента кода я могу получить имя вызова функции.Получить тип объявления функции с помощью AST посетителя clang

virtual bool VisitFunctionDecl(FunctionDecl *func) 

{ 

    numFunctions++; 

    string funcName = func->getNameInfo().getName().getAsString(); 

string funcType = func->getType().getAsString(); 

APIs << funcType << endl; 

    APIs << "\n" << funcName <<": "; 

    return true; 

} 

Я хочу извлечь также тип объявления функции. например, int my_func (int a, int b) {..} Я хочу извлечь тип int. Способ его реализации возвращает мне целое объявление функции, кроме имени. Вышеупомянутый фрагмент кода в funcType будет возвращать int (int a, int b)

Как это исправить? Спасибо!

ответ

1

Похоже, вы пытаетесь найти тип, а не заявленный тип функции. Используйте для этого getReturnType().

+0

Am пытается использовать getReturnType(), и, хотя в документации, которую я могу видеть, что этот метод существует в классе класс FunctionDecl компилятор дает мне эту ошибку: «Класс лязг :: FunctionDecl» не имеет ни одного члена с именем «getReturnType» –

+0

Вы были правы! Хотя, поскольку я использую llvm/clang 3.4, getReturnType() не существует, но getResultType() существует. Его же функция. –