Sha256: 07872b660f1471c2fe8bcbd6c9214599c9f90789093b2164525d1a4b8f6be6de

Contents?: true

Size: 1.55 KB

Versions: 5

Compression:

Stored size: 1.55 KB

Contents

module ToSource
  class Emitter
    # emitter for super node
    class Super < self

      handle(Rubinius::AST::Super)

    private

      delegate(:block)

      # Perform dispatch
      #
      # @return [undefined]
      #
      # @api private
      #
      def dispatch
        emit('super')
        emit_arguments
        emit_block
      end

      # Emit arguments
      #
      # @return [undefined]
      #
      # @api private
      #
      def emit_arguments
        emit('(')
        emitter = visit(node.arguments)
        emit_block_pass(emitter)
        emit(')')
      end

      # Test for block presence
      #
      # @return [true]
      #   if block is present
      #
      # @return [false]
      #   otherwise
      #
      # @api private
      #
      def block?
        !!block
      end

      # Test for block pass
      #
      # @return [true]
      #   if block pass is present
      #
      # @return [false]
      #   otherwise
      #
      # @api private
      #
      def block_pass?
        block.kind_of?(Rubinius::AST::BlockPass19)
      end

      # Emit block pass
      #
      # @param [Class:Emitter] emitter
      #
      # @return [undefined]
      #
      # @api private
      #
      def emit_block_pass(emitter)
        return unless block? and block_pass?
        emit(', ') if emitter.any?
        visit(block)
      end

      # Emit block
      #
      # @return [undefined]
      #
      # @api private
      #
      def emit_block
        return unless block? and !block_pass?
        visit(block)
      end

    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
to_source-0.2.20 lib/to_source/emitter/super.rb
to_source-0.2.19 lib/to_source/emitter/super.rb
to_source-0.2.18 lib/to_source/emitter/super.rb
to_source-0.2.17 lib/to_source/emitter/super.rb
to_source-0.2.16 lib/to_source/emitter/super.rb