Solaris 動的トレースガイド

翻訳演算子

D 演算子 xlate は、入力式を定義済みの翻訳出力構造へ翻訳するときに使用します。xlate 演算子の使用形式は、次のとおりです。

xlate < output-type > ( input-expression )

たとえば、先ほど定義した FILE 構造体のトランスレータを呼び出し、file_fd メンバーにアクセスしたい場合は、次のような式を作成します。

xlate <struct file_info *>(f)->file_fd;

fFILE * 型の D 変数です。xlate 式そのものには、output-type で定義された型が割り当てられます。トランスレータの定義後は、このトランスレータを使って、入力式を出力構造型またはこの構造型のポインタへ翻訳できます。

入力式を構造体に翻訳する場合は、演算子「.」を使って、特定の出力メンバーを間接参照するか、翻訳済みの構造体全体を別の D 変数に割り当てて、すべてのメンバーの値のコピーを作成するかします。単一のメンバーを間接参照する場合、D コンパイラは、そのメンバーの式に対応するコードしか生成しません。翻訳済みの構造体に & 演算子を適用して、そのアドレスを取得することはできません。というのも、コピーが作成されるか、いずれかのメンバーが参照されるまで、データオブジェクト自体が存在しないからです。

入力式を構造体のポインタに翻訳する場合は、演算子「->」を使って、出力の特定メンバーを間接参照するか、単項演算子「*」を使ってポインタを間接参照するかします。後者の場合、式を構造体に翻訳した場合と同じ結果が得られます。単一のメンバーを間接参照する場合、D コンパイラは、そのメンバーの式に対応するコードしか生成しません。翻訳済みのポインタを別の D 変数に割り当てることはできません。というのも、コピーが作成されるか、いずれかのメンバーが参照されるまで、データオブジェクト自体が存在しないからです。存在しないデータオブジェクトにアドレスを指定することはできません。

トランスレータ宣言では、1 つ以上の出力型のメンバーの式を省略できます。たとえば、xlate 式を使って、翻訳式が定義されていないメンバーにアクセスしようとすると、D コンパイラからエラーメッセージが返され、プログラムのコンパイルが中止されます。構造体の割り当てによって出力型全体をコピーした場合、翻訳式が定義されていないメンバーはゼロで初期化されます。

xlate 操作に適したトランスレータを見つけ出すため、D コンパイラは、使用可能なトランスレータを次の順番でチェックします。

これらの規則に基づいて一致するトランスレータが見つからない場合は、D コンパイラからエラーメッセージが出力され、プログラムのコンパイルが失敗します。