Я не уверен, как подойти к пересылке данных из плагина cfe на llvm pass?
У меня есть плагин внешнего интерфейса clang, который собирает данные отражений и сохраняет их в вектор.У меня также есть проход llvm, который JIT компилирует определенные функции пользовательского кода и оценивает их во время компиляции.Теперь я хочу передать агрегированные данные отражения на этап LLVM, чтобы он мог использовать их в качестве аргументов для скомпилированной функции JIT.
У меня есть некоторые идеи, но я не совсем уверен, что они хорошиили даже возможно:
- Можно ли поместить и плагин внешнего интерфейса clang, и пропуск llvm в один динамический общий объект, загрузить его с помощью следующей команды и использовать глобальную переменную в общем объекте для совместного использованияданные?
clang -Xclang -load -Xclang reflectionPlugin.so -Xclang -add-plugin -Xclang reflectionAction main.cpp
Сбросить все данные в фактическую глобальную переменную LLVM IR и извлечь их во время прохода llvm
Я думаю, что я мог бы сериализовать данные и десериализовать их в проходе llvmно я не уверен, что это тоже хороший подход?
Существуют ли другие / лучшие решения?
Я хочу, чтобы пользователь мог писать метапрограммыкак часть кодовой базы.Подобно тому, что Джонатан Блоу делает на своем языке программирования Jai.Вот презентация, где он немного продемонстрировал это: https://www.youtube.com/watch?v=gWv_vUgbmug