Динамически определять виртуальный метод с помощью плагина GCC API - PullRequest
0 голосов
/ 06 октября 2019

Мне трудно создать плагин GCC (8.3.0).

Я пытаюсь определить виртуальный метод для пользовательского класса, используя некоторую информациюпредоставлено [[c ++ 11 :: attribute]]. Пока что я пытался сделать - прежде чем перейти к более сложным вещам - определить виртуальную функцию, которая дает следующие определения и код:

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 какthis:

{
    "a": "value",
    "beta": "value",
    "d": "value"
}

Я могу зарегистрировать атрибуты и собрать информацию о пользовательском классе и его полях, но я не знаю, как внедрить объявление виртуального метода втип, ни как определить его тело. Я искал документацию по плагинам GCC (которая крайне плохая) и онлайн, но мне не повезло.

EDIT

Хорошо, поэтому мне удалось определить метод для данного класса, используя build_method_type_directly и add_method, но я не знаю, как определить тело метода. Любая помощь?

...