Remove Cisms. We love C++
[oota-llvm.git] / runtime / GCCLibraries / libexception / Exception.h
1 //===- exception.h - Generic language-independent exceptions ----*- C++ -*-===//
2 //
3 // This file defines the the shared data structures used by all language
4 // specific exception handling runtime libraries.
5 //
6 //===----------------------------------------------------------------------===//
7
8 #ifndef EXCEPTION_H
9 #define EXCEPTION_H
10
11 struct llvm_exception {
12   // ExceptionDestructor - This call-back function is used to destroy the
13   // current exception, without requiring the caller to know what the concrete
14   // exception type is.
15   //
16   void (*ExceptionDestructor)(llvm_exception *);
17   
18   // ExceptionType - This field identifies what runtime library this exception
19   // came from.  Currently defined values are:
20   //     0 - Error
21   //     1 - longjmp exception (see longjmp-exception.c)
22   //     2 - C++ exception (see c++-exception.c)
23   //
24   unsigned ExceptionType;
25
26   // Next - This points to the next exception in the current stack.
27   llvm_exception *Next;
28
29   // HandlerCount - This is a count of the number of handlers which have
30   // currently caught this exception.  If the handler is caught and this number
31   // falls to zero, the exception is destroyed.
32   //
33   unsigned HandlerCount;
34 };
35
36 enum {
37   ErrorException   = 0,
38   LongjmpException = 1,
39   CXXException     = 2,
40 };
41
42 // Language independent exception handling API...
43 //
44 extern "C" {
45   bool __llvm_eh_has_uncaught_exception(void);
46   void *__llvm_eh_current_uncaught_exception_type(unsigned HandlerType);
47 }
48
49 #endif