Я пытаюсь жениться 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
единственным поддерживаемым доступным значением?