class Keisan::AST::UnaryLogicalNot

Public Class Methods

symbol() click to toggle source
# File lib/keisan/ast/unary_logical_not.rb, line 8
def self.symbol
  :"!"
end

Public Instance Methods

evaluate(context = nil) click to toggle source
Calls superclass method
# File lib/keisan/ast/unary_logical_not.rb, line 12
def evaluate(context = nil)
  context ||= Context.new
  node = child.evaluate(context).to_node
  case node
  when AST::Boolean
    AST::Boolean.new(!node.value)
  else
    if node.is_constant?
      raise Keisan::Exceptions::InvalidFunctionError.new("Cannot take unary logical not of non-boolean constant")
    else
      super
    end
  end
end
simplify(context = nil) click to toggle source
Calls superclass method
# File lib/keisan/ast/unary_logical_not.rb, line 27
def simplify(context = nil)
  context ||= Context.new
  node = child.simplify(context).to_node
  case node
  when AST::Boolean
    AST::Boolean.new(!node.value)
  else
    super
  end
end
value(context = nil) click to toggle source
# File lib/keisan/ast/unary_logical_not.rb, line 4
def value(context = nil)
  return !child.value(context)
end