# File voodoo/compiler.rb, line 40
    def compile
      section = :code
      errors = []
      while true
        begin
          statement = @parser.parse_top_level

          break if statement == nil
          next if statement.empty?

          case statement[0]
          when :section
            section = statement[1]
          else
            @generator.add section, statement
          end

        rescue Parser::MultipleErrors => e
          errors.concat e.errors

        rescue Parser::ParseError => e
          errors << e
        end

        if errors.length >= 100
          # Too many errors, give up.
          raise Error.new(errors)
        end
      end

      if errors.empty?
        @generator.write @output
      else
        raise Error.new(errors)
      end
    end