Я пишу некоторый код для генерации графиков вызовов для определенного промежуточного представления без его выполнения путем статического сканирования кода IR .Сам код IR не слишком сложен, и я хорошо понимаю, как выглядят последовательности вызовов функций, поэтому все, что мне нужно сделать, это отследить вызовы.В настоящее время я делаю это очевидным образом:
- Следите за тем, где мы находимся
- Если мы сталкиваемся с вызовом функции, выполняем переход к этому месту, выполняем и возвращаемся
- Во время ветвления вставьте грань между вызывающим и вызываемым
Я удовлетворен тем, к чему стремлюсь, но хочу убедиться, что я не изобретаю колесо здесь, и сталкиваюсь с угловыми случаями.Мне интересно, есть ли какие-либо приемлемые хорошие алгоритмы (и / или шаблоны проектирования), которые делают это эффективно?
ОБНОВЛЕНИЕ: ИК-код представляет собой дизассемблирование байт-кода из самодельного Java-подобного языка и выглядит как спецификация Jasmine .