Динамическое определение виртуального метода с помощью API плагина GCC
Мне сложно создать плагин GCC (8.3.0).
Я пытаюсь определить виртуальный метод для определенного пользователем класса, используя некоторую информацию, предоставленную [[C++11::attributes]]. Пока что я пытался сделать - прежде чем переходить к более сложным вещам - определить виртуальную функцию, которая дает следующие определения и код:
class Base
{
virtual void toJson() = 0;
}
class [[ns::object]] UserClass : public Base
{
[[ns::field]]
int a;
[[ns::field("beta")]]
int b;
int c;
[[ns::field]]
int d;
}
int main()
{
Base * obj = new UserClass;
obj->toJson();
return 0;
}
записывает поддельный json в stdout
нравится:
{
"a": "value",
"beta": "value",
"d": "value"
}
Я могу регистрировать атрибуты и собирать информацию об определяемом пользователем классе и его полях, но я понятия не имею, как ввести объявление виртуального метода в тип и как определить его тело. Я искал в документации плагина GCC (которая крайне скудна) и в Интернете, но мне не повезло.
РЕДАКТИРОВАТЬ
Хорошо, поэтому мне удалось определить метод для данного класса, используя build_method_type_directly
а также add_method
, но я не знаю, как определить тело метода. Любая помощь?