我按照官方手册中的描述在 clang 中实现了一个自定义属性:http://clang.llvm.org/docs/InternalsManual.html#how-to-add-an-attribute 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];
}
以及文档AttrDocs.td。重建 clang 后,它显然知道该属性,因为我在使用它时没有收到未知属性警告。我什至可以访问新的属性类库工具,但即使我添加了该行,该属性也不会显示在 AST 中let ASTNode = 1
到属性定义。
我还需要考虑其他事情或者可能存在什么问题吗?
不幸的是,这是我的错,手册中的“Boilerplate”部分描述了缺少的步骤:我只需通过添加新案例来实现 SemaDeclAttr.cpp 中属性的语义处理:
case AttributeList::AT_MyAttr:
handleSimpleAttribute<MyAttrAttr>(S, D, Attr);
break;
所以现在效果很好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)