Я пишу компилятор для простого императивного языка. Этот язык допускает определения инкапсулированных функций (например, Python). Эти функции (их тела) играют роль областей действия, что означает, что если переменная x
объявлена внутри функции foo
, то она не видна за ее пределами, но x
видна внутри функций, которые определены после x
, внутри foo
. То же самое относится и к функциям, и, конечно, разрешено дублирование переменных и функций.
Существует ли стандартный / рекомендуемый способ, предоставляемый LLVM C ++ API, для отслеживания того, какие переменные / функции видны при генерировании LLVM IR для моего языка в любой данный момент (например, «стек областей»)?
Прямо сейчас, я отслеживаю их с моим собственным классом регистратора.