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

Module: Goto Programs with Functions

Author: Daniel Kroening

Date: June 2003

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

#ifndef CPROVER_GOTO_FUNCTIONS_H
#define CPROVER_GOTO_FUNCTIONS_H

#include <iostream>

#include <std_types.h>

#include "goto_program.h"

class goto_functiont
{
public:
  goto_programt body;
  code_typet type;
  bool body_available;

  bool is_inlined() const
  {
    return type.get_bool("#inlined");
  }
  
  goto_functiont():body_available(false)
  {
  }
};

class goto_functionst
{
public:
  typedef std::map<irep_idt, goto_functiont> function_mapt;
  function_mapt function_map;
  
  void clear()
  {
    function_map.clear();
  }
  
  void output(
    const namespacet &ns,
    std::ostream &out);
};

#endif
