class Keisan::AST::LogicalOr

Public Class Methods

symbol() click to toggle source
# File lib/keisan/ast/logical_or.rb, line 4
def self.symbol
  :"||"
end

Public Instance Methods

blank_value() click to toggle source
# File lib/keisan/ast/logical_or.rb, line 8
def blank_value
  false
end
evaluate(context = nil) click to toggle source
# File lib/keisan/ast/logical_or.rb, line 12
def evaluate(context = nil)
  short_circuit_do(:evaluate, context)
end
simplify(context = nil) click to toggle source
# File lib/keisan/ast/logical_or.rb, line 16
def simplify(context = nil)
  short_circuit_do(:simplify, context)
end
value(context = nil) click to toggle source
# File lib/keisan/ast/logical_or.rb, line 20
def value(context = nil)
  context ||= Context.new
  children[0].value(context) || children[1].value(context)
end

Private Instance Methods

short_circuit_do(method, context) click to toggle source
# File lib/keisan/ast/logical_or.rb, line 27
def short_circuit_do(method, context)
  context ||= Context.new
  lhs = children[0].send(method, context).to_node
  case lhs
  when AST::Boolean
    lhs.true? ? AST::Boolean.new(true) : children[1].send(method, context)
  else
    lhs.or(children[1].send(method, context))
  end
end