clang:自定义属性在 AST 中不可见
clang: custom attributes not visible in AST
我按照官方手册中的描述在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];
}
和 AttrDocs.td 的文档。重建 clang 后,它显然知道该属性,因为我在使用它时没有收到未知属性警告。我什至可以使用 libtooling 访问新属性 class,但即使我将行 let ASTNode = 1
添加到属性定义。
还有什么我需要考虑的或者可能是什么问题吗?
不幸的是,这是我的错,缺少的步骤在手册中的 "Boilerplate" 部分进行了描述:我只需要通过添加一个新案例来实现 SemaDeclAttr.cpp 中属性的语义处理:
case AttributeList::AT_MyAttr:
handleSimpleAttribute<MyAttrAttr>(S, D, Attr);
break;
现在可以正常使用了。
我按照官方手册中的描述在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];
}
和 AttrDocs.td 的文档。重建 clang 后,它显然知道该属性,因为我在使用它时没有收到未知属性警告。我什至可以使用 libtooling 访问新属性 class,但即使我将行 let ASTNode = 1
添加到属性定义。
还有什么我需要考虑的或者可能是什么问题吗?
不幸的是,这是我的错,缺少的步骤在手册中的 "Boilerplate" 部分进行了描述:我只需要通过添加一个新案例来实现 SemaDeclAttr.cpp 中属性的语义处理:
case AttributeList::AT_MyAttr:
handleSimpleAttribute<MyAttrAttr>(S, D, Attr);
break;
现在可以正常使用了。