You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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);
    
  • 复用源码已有标签场景:从现有对象提取
    如果你要创建的标签对应源码中已经存在的标识符,两种方式可以直接取到已有实例:

    1. 持有对应标识符Token时,直接调用Token内置方法:
    // label_token为对应标签名的Token实例
    IdentifierInfo *II = label_token.getIdentifierInfo();
    
    1. 持有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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 13:18:03