Динамическое определение виртуального метода с помощью 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, но я не знаю, как определить тело метода. Любая помощь?

0 ответов

Другие вопросы по тегам