XCSG解説集 — 手続き間フロー
XCSG が関数間の呼び出しと、パラメータ、戻り値、グローバル変数を通じて移動するデータをどのように表すかを説明します。
こちらで解説集の索引をご覧下さい。
この記事では、XCSG における手続き間フローに関連する側面を扱います。手続き間フローは、関数間の呼び出し、またはグローバル変数へのアクセスによって生じます。まず、XCSG が手続き間の制御フロー、すなわちコールグラフと関数内のコールサイトをどのように表すかを説明します。次に、パラメータ、戻り値、グローバル変数を介した手続き間データフローに関する概念を説明します。

- XCSG.Function: 関数を表す XCSG.Node です。
- XCSG.Call: 関数
aが関数bを呼び出すとき、2 つの XCSG.Function ノードを結ぶ XCSG.Edgea->bです。 - XCSG.CallSite: 呼び出しが行われる位置であるコールサイトを表す XCSG.DataFlow_Node です。このノードは、対応する実行文を表す XCSG.ControlFlow_Node の中に必ず含まれます。
- XCSG.InvokedFunction: XCSG.CallSite ノードを、そのコールサイトで呼び出される関数を表す XCSG.Function ノードに結ぶ XCSG.Edge です。
クエリの例:
var forwardCallTree = universe.edges(XCSG.Call).forward(<function>)このクエリは、与えられた <function> を根とする前方コールツリーを推移的に計算します。同様に、forward を reverse に置き換えると、<function> の逆方向コールツリーを計算します。
次に、手続き間でのデータフローの転送に関連するタグを見てみましょう。
- XCSG.Parameter: 関数定義で宣言された仮引数を表す XCSG.DataFlow_Node です。
- XCSG.ParameterPass: コールサイトで渡される実引数を表す XCSG.DataFlow_Node です。
- XCSG.PassedTo: XCSG.ParameterPass ノードを、対応する XCSG.Parameter ノードに結ぶ XCSG.DataFlow_Edge です。
- XCSG.GlobalVariable: グローバル変数を表す XCSG.DataFlow_Node です。
- XCSG.ReturnValue: 関数が返す値を表す XCSG.DataFlow_Node です。このノードは、その値を返す return 文に対応する XCSG.ControlFlow_Node の中に含まれます。
- XCSG.InterproceduralDataFlow: パラメータ経由、戻り値経由、またはグローバル変数の読み書き経由の、手続き間データフローを表す XCSG.DataFlow_Edge です。
ご質問、または修正のご希望はありますか?
ありがとうございます。
このページについての内容を受け取りました。
