# File lib/http/native_parser.rb, line 266
    def parse!(str)
      scanner = StringScanner.new(str)
      begin
        while (!scanner.eos?)
          start_pos = scanner.pos
          send("parse_#{@state}""parse_#{@state}", scanner)
          if (scanner.pos == start_pos)
            # if we didn't move forward, we've run out of useful string so throw it back.
            return str
          end
        end
      ensure
        # clear out whatever we managed to scan.
        str[0, scanner.pos] = ""
      end
    end