Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

getting parameter information from FunctionDecl class in clang

How to get parameter information as a string from FunctionDecl class in clang . I'm trying but getting confused by so many inheritances. Also they compiler is saying that getReturnType() is not a member of FunctionDecl but doxygen documentation says otherwise . Please help. http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html

using namespace std;
using namespace clang;
using namespace clang::driver;
using namespace clang::tooling;
using namespace llvm;

.......
class ExampleVisitor : public RecursiveASTVisitor<ExampleVisitor> 
{
    ......
    virtual bool VisitFunctionDecl(FunctionDecl *func) 
    {
            numFunctions++;
            string funcName = func->getNameInfo().getName().getAsString();
            string retName = func->getReturnType().getAsString();
            ...
            return true;
    }

}

Errors:-

‘class clang::FunctionDecl’ has no member named ‘getReturnType’

like image 462
Sourav Mukherjee Avatar asked Jun 23 '14 10:06

Sourav Mukherjee


Video Answer


2 Answers

Depending if you need a qualified or unqualified name, you can stringify your return type and parameter names as follows

std::string retType = F->getReturnType().getAsString();
std::string arg0;
if(F->getNumParams() > 0)
  arg0 = F->parameters()[0]->getQualifiedNameAsString();

Check out the getAsString() method provided.


Edit: after your comments I figured out that you don't have the latest Clang source code. Please check it out before retrying. Good luck!

like image 66
Marco A. Avatar answered Oct 26 '22 23:10

Marco A.


try this,

getResultType() 

rather than

getReturnType()

llvm 3.4 has no member getReturnType() but identical function whose name is getResultType() exists.

like image 42
user1553539 Avatar answered Oct 26 '22 21:10

user1553539