Sha256: 836850075df52ac75a4f31d3b126c3be279a1cf79460aa80f041b3f4aceed1e8

Contents?: true

Size: 1.58 KB

Versions: 5

Compression:

Stored size: 1.58 KB

Contents

module ToSource
  class Emitter

    # Emitter for define singleton nodes
    class DefineSingleton < self

      handle(Rubinius::AST::DefineSingleton)

    private

      delegate(:receiver, :body)

      # Perform dispatch
      #
      # @return [undefined]
      #
      # @api private
      #
      def dispatch
        emit('def ')
        visit(receiver)
        emit('.')
        visit(body)
      end
    end

    # Base class for define emitters
    class Define < self

    private

      delegate(:name, :body)

      # Perform dispatch
      #
      # @return [undefined]
      #
      # @api private
      #
      def shared_dispatch
        emit(name)
        emit_arguments
        indented do
          visit(body)
        end
        emit_end
      end

      # Emit arguments
      #
      # @return [undefined]
      #
      # @api private
      #
      def emit_arguments
        run(FormalArguments::Method)
      end

      # Emitter for singeton level defines
      class Singleton < self

        handle(Rubinius::AST::DefineSingletonScope)

      private
  
        # Perform dispatch
        #
        # @return [undefined]
        #
        # @api private
        #
        def dispatch
          shared_dispatch
        end

      end

      # Emitter for instance level defines
      class Instance < self

        handle(Rubinius::AST::Define)

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

      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/define.rb
to_source-0.2.19 lib/to_source/emitter/define.rb
to_source-0.2.18 lib/to_source/emitter/define.rb
to_source-0.2.17 lib/to_source/emitter/define.rb
to_source-0.2.16 lib/to_source/emitter/define.rb