在Clang AST中插入LabelDecl创建goto语句时如何获取IdentifierInfo
解决Clang中创建LabelDecl时IdentifierInfo对象的获取方案
以下是两种可行的IdentifierInfo获取方案,覆盖绝大多数使用场景:
自定义新标签场景:直接从
ASTContext实例获取
只要你明确要创建的标签名称,直接调用ASTContext内置方法即可,实例不存在时会自动创建,代码示例如下:// Ctx为已初始化的ASTContext实例,my_label为自定义标签名 llvm::StringRef LabelName = "my_label"; IdentifierInfo *II = Ctx.getIdentifierInfo(LabelName);复用源码已有标签场景:从现有对象提取
如果你要创建的标签对应源码中已经存在的标识符,两种方式可以直接取到已有实例:- 持有对应标识符Token时,直接调用Token内置方法:
// label_token为对应标签名的Token实例 IdentifierInfo *II = label_token.getIdentifierInfo();- 持有Preprocessor实例时从标识符表查询:
// PP为已初始化的Preprocessor实例,existing_label为已存在的标签名 llvm::StringRef LabelName = "existing_label"; IdentifierInfo *II = PP.getIdentifierTable().get(LabelName);
补充注意:拿到IdentifierInfo后即可传入
LabelDecl::Create完成实例创建,创建完成后需要将生成的LabelDecl添加到所属的DeclContext中,避免后续语义检查阶段报错。
内容的提问来源于stack exchange,提问作者Bernard Nongpoh
相关产品推荐
相关产品推荐

