Sha256: e561ba37620fb6575ed65c15cdc0e832d1db399c05012f441faa010e18e222c0

Contents?: true

Size: 1.62 KB

Versions: 32

Compression:

Stored size: 1.62 KB

Contents

# frozen_string_literal: true

class Code
  class Node
    class RightOperation < Node
      EQUAL = "="

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

        super(parsed)
      end

      def evaluate(**args)
        case @operator
        when "if"
          if @right.evaluate(**args).truthy?
            @left.evaluate(**args)
          else
            Object::Nothing.new
          end
        when "unless"
          if @right.evaluate(**args).truthy?
            Object::Nothing.new
          else
            @left.evaluate(**args)
          end
        when "while"
          left = Object::Nothing.new

          left = @left.evaluate(**args) while @right.evaluate(**args).truthy?

          left
        when "until"
          left = Object::Nothing.new

          left = @left.evaluate(**args) while @right.evaluate(**args).falsy?

          left
        when "rescue"
          begin
            @left.evaluate(**args)
          rescue Error
            @right.evaluate(**args)
          end
        when /=$/
          right = @right.evaluate(**args)
          left = @left.resolve(**args)

          left.call(
            operator: @operator,
            arguments: [Object::Argument.new(right)],
            **args
          )
        else
          right = @right.evaluate(**args)
          left = @left.evaluate(**args)

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

Version data entries

32 entries across 32 versions & 1 rubygems

Version Path
code-ruby-0.10.4 lib/code/node/right_operation.rb
code-ruby-0.10.3 lib/code/node/right_operation.rb
code-ruby-0.10.2 lib/code/node/right_operation.rb
code-ruby-0.10.1 lib/code/node/right_operation.rb
code-ruby-0.10.0 lib/code/node/right_operation.rb
code-ruby-0.9.3 lib/code/node/right_operation.rb
code-ruby-0.9.2 lib/code/node/right_operation.rb
code-ruby-0.9.1 lib/code/node/right_operation.rb
code-ruby-0.9.0 lib/code/node/right_operation.rb
code-ruby-0.8.5 lib/code/node/right_operation.rb
code-ruby-0.8.4 lib/code/node/right_operation.rb
code-ruby-0.8.3 lib/code/node/right_operation.rb
code-ruby-0.8.2 lib/code/node/right_operation.rb
code-ruby-0.8.1 lib/code/node/right_operation.rb
code-ruby-0.8.0 lib/code/node/right_operation.rb
code-ruby-0.7.8 lib/code/node/right_operation.rb
code-ruby-0.7.7 lib/code/node/right_operation.rb
code-ruby-0.7.6 lib/code/node/right_operation.rb
code-ruby-0.7.5 lib/code/node/right_operation.rb
code-ruby-0.7.4 lib/code/node/right_operation.rb