class Riml::Compiler::Visitor
Base abstract visitor
Attributes
propagate_up_tree[W]
Public Class Methods
new(options={})
click to toggle source
# File lib/riml/compiler.rb, line 28 def initialize(options={}) @propagate_up_tree = options[:propagate_up_tree] end
Public Instance Methods
visit(node)
click to toggle source
# File lib/riml/compiler.rb, line 32 def visit(node) output = compile(node) if node.force_newline && output[-1, 1] != "\n" output << "\n" end propagate_up_tree(node, output) end
Protected Instance Methods
current_compiler(node)
click to toggle source
# File lib/riml/compiler.rb, line 63 def current_compiler(node) root_node(node).current_compiler end
propagate_up_tree(node, output)
click to toggle source
# File lib/riml/compiler.rb, line 42 def propagate_up_tree(node, output) unless @propagate_up_tree == false || node.parent_node.nil? node.parent_node.compiled_output << output.to_s end end
root_node(node)
click to toggle source
# File lib/riml/compiler.rb, line 56 def root_node(node) @root_node ||= begin node = node.parent until node.parent.nil? node end end
visitor_for_node(node, params={})
click to toggle source
# File lib/riml/compiler.rb, line 48 def visitor_for_node(node, params={}) class_name = "#{node.class.name.split('::').last}Visitor" Compiler.const_get(class_name).new(params) rescue NameError error = CompileError.new("unexpected construct: #{class_name}", node) raise error end