ASTで一般化された属性を見つけることができませんでしたが(ASTを作成する前または作成する前に削除されているようですが)、回避策が見つかりました。
__attribute__((annotate("something")))
私は合理的な構文を得ることができ、マクロおよびASTに表示され、注釈付き:
#define INTERESTING __attribute__((annotate("interesting")))
class Foo
{
public:
INTERESTING void foo();
void bar();
};
属性次の形式でannotate
打ち鳴らす属性があり
メソッドノードの子になり、display_nameは注釈文字列になります。可能ASTダンプ:
<CursorKind.TRANSLATION_UNIT>
"test.h"
{
__builtin_va_list <CursorKind.TYPEDEF_DECL>
"__builtin_va_list"
type_info <CursorKind.CLASS_DECL>
"type_info"
Foo <CursorKind.CLASS_DECL>
"Foo"
{
<CursorKind.CXX_ACCESS_SPEC_DECL>
""
foo <CursorKind.CXX_METHOD>
"foo()"
{
<CursorKind.ANNOTATE_ATTR>
"interesting"
}
bar <CursorKind.CXX_METHOD>
"bar()"
}
}
それはあまりにもvoid foo INTERESTING();
と同じ出力を生成します。
コードをプロトタイプ化するためにPythonバインディングでこれを実行しようとしましたが、アトリビュートはASTでは全く表示されませんでした(未露光のアトリビュートではありません)。追加したときに、ASTダンプに 'noreturn'属性が表示されました。 –