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