Class: BinaryOperationNode

Inherits:
Node
  • Object
show all
Defined in:
lib/nodes/basenodes.rb

Instance Attribute Summary collapse

Attributes inherited from Node

#value

Instance Method Summary collapse

Methods inherited from Node

#to_s

Constructor Details

#initialize(lhs, op, rhs) ⇒ BinaryOperationNode

Returns a new instance of BinaryOperationNode.



103
104
105
106
# File 'lib/nodes/basenodes.rb', line 103

def initialize(lhs, op, rhs)
  super(op)
  @lhs, @op, @rhs = lhs, op, rhs
end

Instance Attribute Details

#lhsObject

Returns the value of attribute lhs.



101
102
103
# File 'lib/nodes/basenodes.rb', line 101

def lhs
  @lhs
end

#opObject

Returns the value of attribute op.



101
102
103
# File 'lib/nodes/basenodes.rb', line 101

def op
  @op
end

#rhsObject

Returns the value of attribute rhs.



101
102
103
# File 'lib/nodes/basenodes.rb', line 101

def rhs
  @rhs
end

Instance Method Details

#evaluateObject



108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/nodes/basenodes.rb', line 108

def evaluate
  if @rhs.evaluate.is_a?(ArrayNode) && @op == '+'
    return @value = @rhs.evaluate + @lhs.evaluate
  elsif @lhs.evaluate.is_a?(Array) && @op == '+'
    return @value = @lhs.evaluate.append(@rhs.evaluate)
  end

  if @rhs.evaluate.is_a?(ArrayNode) && @op == '-'
    return @value = @rhs.evaluate - @lhs.evaluate
  elsif @lhs.evaluate.is_a?(Array) && @op == '-'
    return @lhs.evaluate.reject { |v| v.evaluate == @rhs.evaluate }
  end

  if @rhs.evaluate.is_a?(ArrayNode) or @rhs.evaluate.is_a?(Array) and @lhs.evaluate.is_a?(Numeric)
    raise SyntaxError, "You can't subtract an array from a number! #{@lhs.evaluate} #{@op} #{@rhs.name}"
  end

  if @op == '/'
    @value = @lhs.evaluate.to_f.send(@op, @rhs.evaluate)
  else
    @value = @lhs.evaluate.send(@op, @rhs.evaluate)
  end
end