libclang - >遍历AST时获取覆盖函数的函数体

时间:2014-02-24 12:28:37

标签: c++ parsing compiler-construction clang

我正在使用libclang来解析C ++代码。目标是在代码生成器中削减我需要进行往返工程的功能。我的代码适用于未被子类覆盖的函数。但是如果我派生出接口,则decl-> hasBody()函数返回false。那么如何实现覆盖函数的实现呢?

所以这是我目前的代码:

// overwritten function in a Subclass of RecursiveASTVisitor
bool FindNamedClassVisitor::VisitDecl(Decl *decl)
{
if(const CXXMethodDecl* method = dyn_cast<CXXMethodDecl>(decl))
{
    FullSourceLoc FullLocation = Context->getFullLoc(method->getLocStart());
    if (FullLocation.isValid()&& !FullLocation.isInSystemHeader())
    {
        QString name = QString::fromStdString(method->getParent()->getNameAsString()) + "::" + QString::fromStdString(method->getNameAsString());
        if(decl->hasBody())
        {
            QString impl = QString::fromStdString(decl2str(decl->getSourceRange()));

            hash.insert(name, impl);
            qDebug()<<name;
        }
        else
        {
            qDebug()<<"NO BODY: "<<name;
        }
    }
}

clang似乎忽略了派生类中的重新声明。结果是,对于这个函数,我的代码打印出“NO BODY:...”

任何建议或代码段?

非常感谢!

0 个答案:

没有答案