class Gem::RequestSet::Lockfile::Parser

def parse_GEM # :nodoc:

:nodoc:
def parse_GEM # :nodoc:
  sources = []
  while [:entry, 'remote'] == peek.first(2) do
    get :entry, 'remote'
    data = get(:text).value
    skip :newline
    sources << Gem::Source.new(data)
  end
  sources << Gem::Source.new(Gem::DEFAULT_HOST) if sources.empty?
  get :entry, 'specs'
  skip :newline
  set = Gem::Resolver::LockSet.new sources
  last_specs = nil
  while not @tokens.empty? and :text == peek.type do
    token = get :text
    name = token.value
    column = token.column
    case peek[0]
    when :newline then
      last_specs.each do |spec|
        spec.add_dependency Gem::Dependency.new name if column == 6
      end
    when :l_paren then
      get :l_paren
      token = get [:text, :requirement]
      type = token.type
      data = token.value
      if type == :text and column == 4
        version, platform = data.split '-', 2
        platform =
          platform ? Gem::Platform.new(platform) : Gem::Platform::RUBY
        last_specs = set.add name, version, platform
      else
        dependency = parse_dependency name, data
        last_specs.each do |spec|
          spec.add_dependency dependency
        end
      end
      get :r_paren
    else
      raise "BUG: unknown token #{peek}"
    end
    skip :newline
  end
  @set.sets << set
end