Sha256: 2c4dbd5ef4cb8dc401d6a02ecbd3bc672029d8eedd0c900cb70fd0ee56f9e86c

Contents?: true

Size: 962 Bytes

Versions: 12

Compression:

Stored size: 962 Bytes

Contents

module Parser
  module Source

    # General idea for Map subclasses: only store what's
    # absolutely necessary; don't duplicate the info contained in
    # ASTs; if it can be extracted from source given only the other
    # stored information, don't store it.
    #
    class Map
      attr_reader :expression

      def initialize(expression)
        @expression = expression

        freeze
      end

      def line
        @expression.line
      end

      def column
        @expression.column
      end

      def with_expression(expression_l)
        with { |map| map.update_expression(expression_l) }
      end

      def to_hash
        Hash[instance_variables.map do |ivar|
          [ ivar[1..-1].to_sym, instance_variable_get(ivar) ]
        end]
      end

      protected

      def with(&block)
        dup.tap(&block).freeze
      end

      def update_expression(expression_l)
        @expression = expression_l
      end
    end

  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
parser-2.0.0.pre2 lib/parser/source/map.rb
parser-2.0.0.pre1 lib/parser/source/map.rb
parser-2.0.0.beta10 lib/parser/source/map.rb
parser-2.0.0.beta9 lib/parser/source/map.rb
parser-2.0.0.beta8 lib/parser/source/map.rb
parser-2.0.0.beta7 lib/parser/source/map.rb
parser-2.0.0.beta6 lib/parser/source/map.rb
parser-2.0.0.beta5 lib/parser/source/map.rb
parser-2.0.0.beta4 lib/parser/source/map.rb
parser-2.0.0.beta3 lib/parser/source/map.rb
parser-2.0.0.beta2 lib/parser/source/map.rb
parser-2.0.0.beta1 lib/parser/source/map.rb