Возможно ли расширение Python C для эффективного получения информации о сайте вызова? - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь жениться CPython и. NET DLR. В последнем есть механизм быстрой динамической диспетчеризации c, основанный на фактических типах параметров на сайте вызовов, которыми я бы хотел воспользоваться. Например, предположим, у меня есть перегруженная функция в C#, которую я хочу вызвать из Python:

void Foo(int arg) {}
void Foo(string arg) {}

Затем в Python у меня есть такой скрипт:

Foo(42)      # line 1
Foo("Hello") # line 2

Так что в моем C расширении я реализую tp_call для Foo. Чтобы иметь возможность использовать кэш быстрой отправки, предоставляемый DLR, мне нужно получить некоторое значение, которое можно получить быстро и однозначно идентифицировать сайт вызова (например, сообщает my tp_call, какая строка сценария вызывается). Доступно ли что-нибудь подобное?

PyFrameObject, возвращаемое PyEval_GetFrame, похоже, может сработать, но оно плохо документировано, поэтому неясно, какие поля из него можно использовать. Является ли PyFrame_GetLineNumber единственным поддерживаемым доступным значением?

...