0

解析後に C++ ファイルを解析するgcc プラグインを作成しています。プラグインはクラスをウォークスルーし、それらに関する情報を生成します。プラグインは機能しています。これがクラスをウォークスルーする方法です。

    cp_binding_level* level(NAMESPACE_LEVEL(nameSpace));
    for (decl = level->names; decl != 0; decl = TREE_CHAIN(decl)) {
        tree type(TREE_TYPE(decl));
        tree_code dc(TREE_CODE(decl));
        tree_code tc;
        if (dc == TYPE_DECL&& tc == RECORD_TYPE &&
            !DECL_IS_BUILTIN (decl) && DECL_ARTIFICIAL (decl)) {
                //Now we know this is a class
                //Do something
        }
     }

彼が分析できるクラスと分析できないクラスを選択したいと思います。私の最初のアイデアは、クラスを解析するときに読み取る何らかの注釈を追加し、それを分析するかどうかを決定することです。

私は C++ で何らかの注釈を使用したことがないので、これが可能かどうかはわかりません。もしそうなら、どのようにそれらを使用し、プラグイン内で注釈を取得することをお勧めしますか? そうでない場合、必要なことを行う良い方法はありますか?

4

1 に答える 1

1

それは可能で、それほど難しくなく、GCC プラグインを使用して行うのはかなり一般的なことです。

まず、新しい属性を登録する必要があります。GCC は、そのPLUGIN_ATTRIBUTESための都合のよい時間としてコールバックを提供します。その後、コールバック関数を呼び出しregister_attributeて属性を登録できます。これはマニュアルに記載されており、リンク先の場所から 1 リンク離れています。

この関数を使用して、属性が適用されたときに呼び出される別のコールバックを登録します。この関数が何をすべきかを本当に理解するには、いくつかの GCC ヘッダー ファイルまたはソースを読む必要があります。ただし、クラスに適用されているかどうかを簡単に追跡できます。適用されている場合は、後で処理するためにこれをメモします。

于 2015-04-22T18:00:39.563 に答える