# File lib/sexp_processor.rb, line 172
  def rewrite(exp)
    exp.map! { |sub| Array === sub ? rewrite(sub) : sub }

    type = exp.first
    begin
      meth = @rewriters[type]
      exp  = self.send(meth, exp) if meth
      old_type, type = type, exp.first
    end until old_type == type

    exp
  end