/* exception.h - decls for exceptions
 *
 ****************************************************************
 * Copyright (C) 2005 Canonical Limited
 * 		Author Robert Collins <robert.collins@canonical.com>
 * 
 * See the file "COPYING" for further information about
 * the copyright and warranty status of this work.
 */


#ifndef INCLUDE__BUGS__EXCEPTION_H
#define INCLUDE__BUGS__EXCEPTION_H


#include "hackerlab/machine/types.h"
#include "cexcept/talloc_except.h"

/* code is not well defined yet.
 * -1 is reserved for panics
 */
struct exception {
  int code;
  char *msg;
};
/* to extend this, use talloc to identify 
 * types at runtime in your catch block
 */

define_exception_type(struct exception *);

/* global exception context. This is not thread safe:
 * to make it so define it as a macro that uses
 * TLS
 */
extern struct exception_context the_exception_context[1];

static inline struct exception *
exception(int code, char const *msg)
{
  struct exception * foo = talloc(NULL,struct exception);
  foo->code=code;
  foo->msg=talloc_strdup (foo,msg);
  return foo;
}

#endif  /* INCLUDE__BUGS__EXCEPTION_H */


syntax highlighted by Code2HTML, v. 0.9.1