Я понимаю, что Ruby 1.8 AST просматривается во время выполнения с использованием большого оператора switch, и многие вещи, такие как вызов метода в классе или родительском модуле, требуют, чтобы интерпретатор просматривал дерево вверх и вниз по мере его продвижения. Есть ли простой способ доступа к этому AST в расширении Ruby C? Включает ли он API расширения Ruby или требует непосредственного взлома внутренних структур данных?





Хорошей отправной точкой, вероятно, является чтение исходного кода библиотеки ParseTree, которая позволяет вам получить доступ к AST из ruby и возиться с ним.
Спасибо за чаевые. Вы правы - ParseTree, похоже, единственный код, в котором происходят какие-либо манипуляции с AST, за исключением того, что он фактически написан на RubyInline.
Итак, это странная смесь кода Ruby и C. Тем не менее, очень интересное чтение.
Другая ссылка, конечно же, - eval.c из самого Ruby.
Чтобы сообразить, потребуется немного прочитать и то, и другое.
Привет! из интереса, что ты пишешь? :)