# File lib/json/pure/parser.rb, line 71
      def initialize(source, opts = {})
        opts ||= {}
        if defined?(::Encoding)
          if source.encoding == ::Encoding::ASCII_8BIT
            b = source[0, 4].bytes.to_a
            source = case
                     when b.size >= 4 && b[0] == 0 && b[1] == 0 && b[2] == 0
                       source.dup.force_encoding(::Encoding::UTF_32BE).encode!(::Encoding::UTF_8)
                     when b.size >= 4 && b[0] == 0 && b[2] == 0
                       source.dup.force_encoding(::Encoding::UTF_16BE).encode!(::Encoding::UTF_8)
                     when b.size >= 4 && b[1] == 0 && b[2] == 0 && b[3] == 0
                       source.dup.force_encoding(::Encoding::UTF_32LE).encode!(::Encoding::UTF_8)

                     when b.size >= 4 && b[1] == 0 && b[3] == 0
                       source.dup.force_encoding(::Encoding::UTF_16LE).encode!(::Encoding::UTF_8)
                     else
                       source.dup
                     end
          else
            source = source.encode(::Encoding::UTF_8)
          end
          source.force_encoding(::Encoding::ASCII_8BIT)
        else
          b = source
          source = case
                   when b.size >= 4 && b[0] == 0 && b[1] == 0 && b[2] == 0
                     JSON.iconv('utf-8', 'utf-32be', b)
                   when b.size >= 4 && b[0] == 0 && b[2] == 0
                     JSON.iconv('utf-8', 'utf-16be', b)
                   when b.size >= 4 && b[1] == 0 && b[2] == 0 && b[3] == 0
                     JSON.iconv('utf-8', 'utf-32le', b)
                   when b.size >= 4 && b[1] == 0 && b[3] == 0
                     JSON.iconv('utf-8', 'utf-16le', b)
                   else
                     b
                   end
        end
        super source
        if !opts.key?(:max_nesting) # defaults to 19
          @max_nesting = 19
        elsif opts[:max_nesting]
          @max_nesting = opts[:max_nesting]
        else
          @max_nesting = 0
        end
        @allow_nan        = !!opts[:allow_nan]
        @symbolize_names  = !!opts[:symbolize_names]
        @create_additions = opts.key?(:create_additions) ? !!opts[:create_additions] : true
        @create_id        = opts[:create_id] || JSON.create_id
        @object_class     = opts[:object_class] || Hash
        @array_class      = opts[:array_class] || Array
        @match_string     = opts[:match_string]
      end