Sha256: d854ccbc293046ceb52f96e4c83808f421dbb2b385233238ae18f94a2f0870ed

Contents?: true

Size: 1.42 KB

Versions: 32

Compression:

Stored size: 1.42 KB

Contents

# frozen_string_literal: true

class Code
  class Node
    class LeftOperation < Node
      class Operator < Node
        DOT = "."
        COLON_COLON = "::"

        attr_reader :operator, :statement

        def initialize(parsed)
          @operator = parsed.delete(:operator)
          @statement = Statement.new(parsed.delete(:statement))
        end

        def call?
          operator == DOT || operator == COLON_COLON
        end
      end

      def initialize(parsed)
        @first = Statement.new(parsed.delete(:first))
        @others =
          parsed.delete(:others).map { |operator| Operator.new(operator) }

        super(parsed)
      end

      def evaluate(**args)
        first = @first.evaluate(**args)

        @others.reduce(first) do |left, right|
          if right.call?
            right.statement.evaluate(**args, object: left)
          else
            statement = right.statement.evaluate(**args)

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

      def resolve(**args)
        first = @first.resolve(**args)

        list = Object::IdentifierList.new([first])

        @others.each do |other|
          list.code_append(
            other.statement.resolve(**args, object: list.code_last)
          )
        end

        list
      end
    end
  end
end

Version data entries

32 entries across 32 versions & 1 rubygems

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