Sha256: eb70d9c71ad1a1f09a3740fe15ade25ae6cfd5f16164266bf925ff780b95f6b9

Contents?: true

Size: 1.18 KB

Versions: 21

Compression:

Stored size: 1.18 KB

Contents

class Code
  class Node
    class Call < Node
      class Block < Node
        def initialize(parsed)
          @parameters =
            parsed
              .delete(:parameters) { [] }
              .map { |parameter| Node::FunctionParameter.new(parameter) }

          @body = Node::Code.new(parsed.delete(:body))

          super(parsed)
        end

        def evaluate(**args)
          ::Code::Object::Argument.new(
            ::Code::Object::Function.new(parameters: @parameters, body: @body)
          )
        end
      end

      def initialize(parsed)
        @name = parsed.delete(:name)
        @arguments =
          parsed
            .delete(:arguments) { [] }
            .map { |argument| Node::CallArgument.new(argument) }

        if parsed.key?(:block)
          @block = Node::Call::Block.new(parsed.delete(:block))
        end

        super(parsed)
      end

      def evaluate(**args)
        arguments = @arguments.map { |argument| argument.evaluate(**args) }
        arguments << @block.evaluate(**args) if @block

        name = ::Code::Object::String.new(@name)

        args.fetch(:object).call(operator: name, arguments: arguments, **args)
      end
    end
  end
end

Version data entries

21 entries across 21 versions & 3 rubygems

Version Path
template-ruby-0.5.6 lib/code/node/call.rb
language-ruby-0.5.6 lib/code/node/call.rb
code-ruby-0.5.6 lib/code/node/call.rb
template-ruby-0.5.5 lib/code/node/call.rb
language-ruby-0.5.5 lib/code/node/call.rb
code-ruby-0.5.5 lib/code/node/call.rb
template-ruby-0.5.4 lib/code/node/call.rb
language-ruby-0.5.4 lib/code/node/call.rb
code-ruby-0.5.4 lib/code/node/call.rb
template-ruby-0.5.3 lib/code/node/call.rb
language-ruby-0.5.3 lib/code/node/call.rb
code-ruby-0.5.3 lib/code/node/call.rb
template-ruby-0.5.2 lib/code/node/call.rb
language-ruby-0.5.2 lib/code/node/call.rb
code-ruby-0.5.2 lib/code/node/call.rb
language-ruby-0.5.1 lib/code/node/call.rb
template-ruby-0.5.1 lib/code/node/call.rb
code-ruby-0.5.1 lib/code/node/call.rb
template-ruby-0.5.0 lib/code/node/call.rb
language-ruby-0.5.0 lib/code/node/call.rb