clang:查找QualType的SourceRange / SourceLocation

时间:2016-12-05 09:20:26

标签: clang abstract-syntax-tree

在迭代AST时遇到VarDecl对象。它们有一个类型," QualType"。 现在我想在这些QualTypes的原始源中找到位置。 我已经听说过TypeLocBuilder可以用于此,但无论我尝试它总是抛出一个断言,如`T == LastTy&& "类型不匹配推送的最后一种类型!"'。 所以问题是:我如何使用TypeLocBuilder呢?如果它没有用,那还有什么选择呢?

TypeLoc buildTypeLoc(ASTContext *const c, const QualType qt)
{
       TypeLocBuilder tlb;
       return tlb.getTypeLocInContext(*c, qt);
}

SourceRange getQualTypeSourceRange(ASTContext *const c, const QualType qt)
{
      return buildTypeLoc(c, qt).getSourceRange();
}

for(clang::ASTUnit::top_level_iterator dit = au -> top_level_begin(); dit != au -> top_level_end(); dit++) {
        if (isa<VarDecl>(*dit)) {
                const VarDecl *vd = static_cast<const VarDecl *>(*dit);

                SourceRange sr = getQualTypeSourceRange(&au -> getASTContext(), vd -> getType());
        }
}

0 个答案:

没有答案