В своем последнем проекте я создаю основу для отладки.Одна из задач, которые я выполняю, - предоставить среду, которая позволит программисту определять обработчики, которые будут выполняться для обработки соответствующего исключения.Одним из доступных инструментов является проверка серии типов и значений, которые объект принял за время своего существования вплоть до исключения.Что бы скопировать все, что оценивается по праву присваивания, в мою среду, индекс lhseg a = 3
, это запись 3 в адрес памяти a, а также my_environment ["a"] (очевидно, областиусложнит структуру my_environment, но это другое дело).
Есть несколько способов сделать это.
функция, переданная в sys.settrace, может анализировать, что происходит с помощью инструментакак PLY или что-то еще, определить его назначение, разделить токены, взять 0-ю строку в качестве lhs. Она выполнит строку и затем скопирует значение в мою среду.
Я мог бы сам разобрать исходный код и вставитьвсе назначения в моем окружении после назначения в исходном исходном коде.
Я мог бы преобразовать каждый файл в AST и изменить узлы назначения на то, что мне нужно для этого сделать.
Или яможет просто взломать любую низкоуровневую функцию или что-то, что отвечает за генерацию кода для присваивания в его поведениея плюс мой.
Я хочу сделать последний выбор, так как он единственный, который делает то, что мне нужно, без необходимости разбора или других сложных вещей.Требуется ли для этого запись в C-части интерпретатора или я могу оставить ее на Python?