Как я могу получить доступ к Ruby AST из кода уровня C? - PullRequest
2 голосов
/ 18 августа 2008

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

Ответы [ 2 ]

1 голос
/ 18 августа 2008

Хорошей отправной точкой, вероятно, является чтение исходного кода библиотеки ParseTree , которая позволяет получить доступ к AST и связываться с ним из ruby.

0 голосов
/ 18 августа 2008

Спасибо за совет. Вы правы - ParseTree, похоже, является единственным кодом, когда происходит какая-либо манипуляция с AST, за исключением того, что он фактически написан на RubyInline.

Итак, это странная смесь между Ruby и C-кодом. Хотя очень интересное чтение.

Другая ссылка, конечно, eval.c от самого Ruby.

Для того, чтобы обдумать это, потребуется немало времени, чтобы прочитать оба.

...