Jim*_*bei 6 c++ attributes clang abstract-syntax-tree libtooling
我按照官方手册中的说明在clang中实现了自定义属性:http : //clang.llvm.org/docs/InternalsManual.html#how-to-add-an-attribute
所以我在Attr.td中添加了以下代码:
def MyAttr: InheritableAttr {
let Spellings = [GNU<"my_attr">, CXX11<"me", "my_attr">, GCC<"my_attr">, Declspec<"my_attr">];
let Subjects = SubjectList<[Var, Function, CXXRecord]>;
let Documentation = [MyAttrDocs];
}
Run Code Online (Sandbox Code Playgroud)
以及文档AttrDocs.td。重建clang后,它显然知道属性,因为使用它时我没有收到未知的属性警告。我什至可以使用libtooling访问新的属性类,但是即使将行添加let ASTNode = 1到属性定义中,该属性也不会显示在AST中。
还有什么我需要考虑的吗,或者可能是什么问题?
不幸的是,这是我的错,缺少的步骤在手册中的“样板”部分中进行了描述:我只需要通过添加一个新案例来实现SemaDeclAttr.cpp中属性的语义处理:
case AttributeList::AT_MyAttr:
handleSimpleAttribute<MyAttrAttr>(S, D, Attr);
break;
Run Code Online (Sandbox Code Playgroud)
所以现在可以正常工作了。