/*******************************************************************\

Module:

Author: Daniel Kroening, kroening@kroening.com

\*******************************************************************/

#include "format_constant.h"
#include "arith_tools.h"

/*******************************************************************\

Function: format_constant

  Inputs:

 Outputs:

 Purpose:

\*******************************************************************/

std::string format_constant(const exprt &expr)
{
  if(expr.is_constant())
  {
    if(expr.type().id()=="natural" ||
       expr.type().id()=="integer" ||
       expr.type().id()=="unsignedbv" ||
       expr.type().id()=="signedbv")
    {
      mp_integer i;
      if(to_integer(expr, i)) return "(number conversion failed)";

      return integer2string(i);
    }
  }
  else if(expr.id()=="string-constant")
    return expr.get_string("value");

  return "(format-constant failed: "+expr.id_string()+")";
}

