class RubyNext::Language::Rewriters::Predicates::Processor

Attributes

predicates[R]

Public Class Methods

new(predicates) click to toggle source
Calls superclass method
# File lib/ruby-next/language/rewriters/pattern_matching.rb, line 68
def initialize(predicates)
  @predicates = predicates
  super()
end

Public Instance Methods

on_and(node) click to toggle source
# File lib/ruby-next/language/rewriters/pattern_matching.rb, line 82
def on_and(node)
  left, right = *node.children

  if truthy(left)
    process(right)
  elsif truthy(right)
    process(left)
  else
    node.updated(
      :and,
      [
        process(left),
        process(right)
      ]
    )
  end
end
on_lvasgn(node) click to toggle source
# File lib/ruby-next/language/rewriters/pattern_matching.rb, line 73
def on_lvasgn(node)
  lvar, val = *node.children
  if predicates.store[lvar] == false
    process(val)
  else
    node
  end
end

Private Instance Methods

truthy(node) click to toggle source
# File lib/ruby-next/language/rewriters/pattern_matching.rb, line 102
def truthy(node)
  return false unless node.is_a?(::Parser::AST::Node)
  return true if node.type == :true
  return false if node.children.empty?

  node.children.all? { |child| truthy(child) }
end