IRコードを静的にスキャンして実行せずに、特定の中間表現のコールグラフを生成するコードを作成しています。IRコード自体はそれほど複雑ではなく、関数呼び出しシーケンスがどのように見えるかをよく理解しているので、必要なのは呼び出しをトレースすることだけです。私は現在それを明白な方法でやっています:
- 私たちがどこにいるかを追跡する
- 関数呼び出しに遭遇した場合は、その場所に分岐し、実行して戻ってきます
- 分岐している間、発信者と着信者の間にエッジを置きます
私は自分が到達しているところに満足していますが、ここで車輪の再発明をしたり、コーナーケースに直面したりしないようにしたいと思います。これを効率的に行う、受け入れられている優れたアルゴリズム(および/またはデザインパターン)があるかどうか疑問に思っていますか?
更新: IRコードは、自作のJavaに似た言語からのバイトコードの逆アセンブルであり、Jasmine仕様のように見えます。