Class: Ibex::Runtime::CST::SyntaxRewriter
- Inherits:
-
Object
- Object
- Ibex::Runtime::CST::SyntaxRewriter
- Defined in:
- lib/ibex/runtime/cst/rewriter.rb
Overview
Bottom-up syntax rewriter with kind-name dispatch.
Instance Method Summary collapse
Instance Method Details
#rewrite(root) ⇒ Object
15 16 17 18 19 20 21 |
# File 'lib/ibex/runtime/cst/rewriter.rb', line 15 def rewrite(root) green = visit(root) return root if green.equal?(root.green) raise TypeError, "a syntax root must remain a GreenNode" unless green.is_a?(GreenNode) Editing.red_root(root, green) end |
#visit(element) ⇒ Object
24 25 26 27 28 29 30 |
# File 'lib/ibex/runtime/cst/rewriter.rb', line 24 def visit(element) rewritten = element.is_a?(SyntaxNode) ? visit_children(element) : element.green method = :"visit_#{method_name(element.kind_name)}" return rewritten unless respond_to?(method, true) Editing.green_element(__send__(method, rewritten_view(element, rewritten))) end |