class Bade::Optimizer

Public Class Methods

new(root_node) click to toggle source

@param [Bade::AST::Node] root_node

# File lib/bade/optimizer.rb, line 8
def initialize(root_node)
  @root_node = root_node

  @new_root = Marshal.load(Marshal.dump(root_node))
end

Public Instance Methods

iterate(node) { |subnode, previous, node| ... } click to toggle source

@param [Bade::AST::Node] node

# File lib/bade/optimizer.rb, line 45
def iterate(node)
  previous = nil

  node.children.delete_if do |subnode|
    returned = yield subnode, previous, node

    previous = subnode unless returned

    returned
  end
end
optimize() click to toggle source

@return [Bade::Node]

# File lib/bade/optimizer.rb, line 16
def optimize
  optimize_static_texts

  @root_node
end
optimize_static_texts() click to toggle source
# File lib/bade/optimizer.rb, line 22
def optimize_static_texts
  traverse(@root_node) do |tr_node|
    iterate(tr_node) do |node, previous_node, _parent|
      if previous_node && previous_node.type == :static_text && node.type == :static_text
        previous_node.value += node.value
        true
      end
    end
  end
end
traverse(node) { |node| ... } click to toggle source

@param [Bade::AST::Node] node

# File lib/bade/optimizer.rb, line 35
def traverse(node, &block)
  yield node

  node.children.each do |subnode|
    traverse(subnode, &block)
  end
end