class Keisan::AST::Assignment

Attributes

compound_operator[R]
local[R]

Public Class Methods

new(children = [], parsing_operators = [], local: false, compound_operator: nil) click to toggle source
Calls superclass method
# File lib/keisan/ast/assignment.rb, line 11
def initialize(children = [], parsing_operators = [], local: false, compound_operator: nil)
  super(children, parsing_operators)
  @local = local
  @compound_operator = compound_operator
end
symbol() click to toggle source
# File lib/keisan/ast/assignment.rb, line 17
def self.symbol
  :"="
end

Public Instance Methods

evaluate(context = nil) click to toggle source
# File lib/keisan/ast/assignment.rb, line 25
def evaluate(context = nil)
  context ||= Context.new

  lhs = children.first
  rhs = children.last

  if is_variable_definition?
    evaluate_variable_assignment(context, lhs, rhs)
  elsif is_function_definition?
    evaluate_function_assignment(context, lhs, rhs)
  elsif is_list_assignment?
    evaluate_list_assignment(context, lhs, rhs)
  else
    # Try cell assignment
    evaluate_cell_assignment(context, lhs, rhs)
  end
end
evaluate_assignments(context = nil) click to toggle source
# File lib/keisan/ast/assignment.rb, line 47
def evaluate_assignments(context = nil)
  evaluate(context)
end
is_function_definition?() click to toggle source
# File lib/keisan/ast/assignment.rb, line 73
def is_function_definition?
  children.first.is_a?(Function)
end
is_list_assignment?() click to toggle source
# File lib/keisan/ast/assignment.rb, line 77
def is_list_assignment?
  children.first.is_a?(List)
end
is_variable_definition?() click to toggle source
# File lib/keisan/ast/assignment.rb, line 69
def is_variable_definition?
  children.first.is_a?(Variable)
end
simplify(context = nil) click to toggle source
# File lib/keisan/ast/assignment.rb, line 43
def simplify(context = nil)
  evaluate(context)
end
symbol() click to toggle source
# File lib/keisan/ast/assignment.rb, line 21
def symbol
  :"#{compound_operator}="
end
unbound_functions(context = nil) click to toggle source
Calls superclass method
# File lib/keisan/ast/assignment.rb, line 60
def unbound_functions(context = nil)
  functions = super(context)
  if is_function_definition?
    functions.delete(children.first.name)
  else
    functions
  end
end
unbound_variables(context = nil) click to toggle source
Calls superclass method
# File lib/keisan/ast/assignment.rb, line 51
def unbound_variables(context = nil)
  variables = super(context)
  if is_variable_definition?
    variables.delete(children.first.name)
  else
    variables
  end
end

Private Instance Methods

evaluate_cell_assignment(context, lhs, rhs) click to toggle source
# File lib/keisan/ast/assignment.rb, line 96
def evaluate_cell_assignment(context, lhs, rhs)
  CellAssignment.new(self, context, lhs, rhs).evaluate
end
evaluate_function_assignment(context, lhs, rhs) click to toggle source
# File lib/keisan/ast/assignment.rb, line 87
def evaluate_function_assignment(context, lhs, rhs)
  raise Exceptions::InvalidExpression.new("Cannot do compound assignment on functions") if compound_operator
  FunctionAssignment.new(context, lhs, rhs, local).evaluate
end
evaluate_list_assignment(context, lhs, rhs) click to toggle source
# File lib/keisan/ast/assignment.rb, line 92
def evaluate_list_assignment(context, lhs, rhs)
  ListAssignment.new(self, context, lhs, rhs).evaluate
end
evaluate_variable_assignment(context, lhs, rhs) click to toggle source
# File lib/keisan/ast/assignment.rb, line 83
def evaluate_variable_assignment(context, lhs, rhs)
  VariableAssignment.new(self, context, lhs, rhs).evaluate
end