在迭代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());
}
}