10

公式マニュアルで説明されているように、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へのドキュメント。クランを再構築した後、使用時に不明な属性の警告が表示されないため、明らかに属性を認識しています。libtoolingを使用して新しい属性クラスにアクセスすることもできますがlet ASTNode = 1、属性定義に行を追加しても、属性は AST に表示されません。

他に検討する必要があるものはありますか、それとも何が問題なのですか?

4

1 に答える 1

9

残念ながら、これは私のせいでした。不足している手順は、マニュアルの「ボイラープレート」セクションに記載されています。新しいケースを追加して、SemaDeclAttr.cpp の属性のセマンティック処理を実装する必要がありました。

case AttributeList::AT_MyAttr:
handleSimpleAttribute<MyAttrAttr>(S, D, Attr);
break;

だから今はうまくいきます。

于 2016-07-27T11:10:44.530 に答える