Class: Code::Node::Equal

Inherits:
Code::Node show all
Defined in:
lib/code/node/equal.rb

Instance Method Summary collapse

Constructor Details

#initialize(parsed) ⇒ Equal

Returns a new instance of Equal.



4
5
6
7
8
9
# File 'lib/code/node/equal.rb', line 4

def initialize(parsed)
  @operator = parsed.delete(:operator)
  @left = parsed.delete(:left)
  @right = Node::Statement.new(parsed.delete(:right))
  super(parsed)
end

Instance Method Details

#evaluate(**args) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/code/node/equal.rb', line 11

def evaluate(**args)
  right = @right.evaluate(**args)
  left = ::Code::Object::String.new(@left)
  context = args.fetch(:context)

  if @operator == ""
    context[left] = right
  else
    if context[left].nil?
      raise ::Code::Error::Undefined.new("#{left} is not defined")
    end

    context[left] = context.fetch(left).call(
      operator: @operator,
      arguments: [::Code::Object::Argument.new(right)],
      **args
    )
  end

  args[:context][left]
end