old_contents: #
  #   Pyrex - Errors
  #
  
  import sys
  from Pyrex.Utils import open_new_file
  
  
  class PyrexError(Exception):
      pass
  
  class PyrexWarning(Exception):
      pass
  
  class CompileError(PyrexError):
      
      def __init__(self, position = None, message = ""):
          self.position = position
          self.message = message
          if position:
              pos_str = "%s:%d:%d: " % position
          else:
              pos_str = ""
          Exception.__init__(self, pos_str + message)
  
  class CompileWarning(PyrexWarning):
      
      def __init__(self, position = None, message = ""):
          self.position = position
          self.message = message
          if position:
              pos_str = "%s:%d:%d: " % position
          else:
              pos_str = ""
          Exception.__init__(self, pos_str + message)
  
  
  class InternalError(Exception):
      # If this is ever raised, there is a bug in the compiler.
      
      def __init__(self, message):
          Exception.__init__(self, "Internal compiler error: %s"
              % message)
              
  
  listing_file = None
  num_errors = 0
  echo_file = None
  
  def open_listing_file(path, echo_to_stderr = 1):
      # Begin a new error listing. If path is None, no file
      # is opened, the error counter is just reset.
      global listing_file, num_errors, echo_file
      if path is not None:
          listing_file = open_new_file(path)
      else:
          listing_file = None
      if echo_to_stderr:
          echo_file = sys.stderr
      else:
          echo_file = None
      num_errors = 0
  
  def close_listing_file():
      global listing_file
      if listing_file:
          listing_file.close()
          listing_file = None
  
  def error(position, message):
      #print "Errors.error:", repr(position), repr(message) ###
      global num_errors
      err = CompileError(position, message)
      line = "%s\n" % err
      if listing_file:
          listing_file.write(line)
      if echo_file:
          echo_file.write(line)
      num_errors = num_errors + 1
      return err
  
  def warning(position, message):
      warn = CompileWarning(position, message)
      line = "%s\n" % warn
      if listing_file:
          listing_file.write(line)
      if echo_file:
          echo_file.write(line)
      return warn
  
new_contents: #
  #   Pyrex - Errors
  #
  
  import sys
  from Pyrex.Utils import open_new_file
  
  
  class PyrexError(Exception):
      pass
  
  class PyrexWarning(Exception):
      pass
  
  class CompileError(PyrexError):
      
      def __init__(self, position = None, message = ""):
          self.position = position
          self.message = message
          if position:
              pos_str = "%s:%d:%d: " % position
          else:
              pos_str = ""
          Exception.__init__(self, pos_str + message)
  
  class CompileWarning(PyrexWarning):
      
      def __init__(self, position = None, message = ""):
          self.position = position
          self.message = message
          if position:
              pos_str = "%s:%d:%d: " % position
          else:
              pos_str = ""
          Exception.__init__(self, pos_str + message)
  
  
  class InternalError(Exception):
      # If this is ever raised, there is a bug in the compiler.
      
      def __init__(self, message):
          Exception.__init__(self, "Internal compiler error: %s"
              % message)
              
  
  listing_file = None
  num_errors = 0
  echo_file = None
  
  def open_listing_file(path, echo_to_stderr = 1):
      # Begin a new error listing. If path is None, no file
      # is opened, the error counter is just reset.
      global listing_file, num_errors, echo_file
      if path is not None:
          listing_file = open_new_file(path)
      else:
          listing_file = None
      if echo_to_stderr:
          echo_file = sys.stderr
      else:
          echo_file = None
      num_errors = 0
  
  def close_listing_file():
      global listing_file
      if listing_file:
          listing_file.close()
          listing_file = None
  
  def error(position, message):
      #print "Errors.error:", repr(position), repr(message) ###
      global num_errors
      err = CompileError(position, message)
      line = "%s\n" % err
      if listing_file:
          listing_file.write(line)
      if echo_file:
          echo_file.write(line)
      num_errors = num_errors + 1
      return err
  
  def warning(position, message):
      warn = CompileWarning(position, message)
      line = "warning: %s\n" % warn
      if listing_file:
          listing_file.write(line)
      if echo_file:
          echo_file.write(line)
      return warn
  
subject: Print "warning: " before warnings, so they look different than errors.