class irept
{
public:
  virtual bool is_nil() const;
  virtual bool is_not_nil() const;

  const irep_data_string &id();
  void id(const irep_data_string &_data);

  const irept &find(const irep_name_string &name) const;
  irept &add(const irep_name_string &name);
  const irep_data_string &get(const irep_name_string &name) const;

  void set(const irep_name_string &name, const irep_data_string &value);
  void set(const irep_name_string &name, const long value);
  void set(const irep_name_string &name, const irept &irep);

  void remove(const irep_name_string &name);

  void move_to_sub(irept &irep);
  void move_to_named_sub(const irep_name_string &name, irept &irep);

  void swap(irept &irep);

  void make_nil();

  const subt &get_sub();
  const named_subt &get_named_sub();
  const named_subt &get_comments();
  ...
};
