Chris Lattner | 5337521 | 2003-08-25 22:35:36 +0000 | [diff] [blame] | 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 | |
Chris Lattner | c2c70fa | 2003-08-27 04:50:12 +0000 | [diff] [blame] | 11 | struct llvm_exception { |
Chris Lattner | 5337521 | 2003-08-25 22:35:36 +0000 | [diff] [blame] | 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 | // |
Chris Lattner | c2c70fa | 2003-08-27 04:50:12 +0000 | [diff] [blame] | 16 | void (*ExceptionDestructor)(llvm_exception *); |
Chris Lattner | 5337521 | 2003-08-25 22:35:36 +0000 | [diff] [blame] | 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. |
Chris Lattner | c2c70fa | 2003-08-27 04:50:12 +0000 | [diff] [blame] | 27 | llvm_exception *Next; |
Chris Lattner | 5337521 | 2003-08-25 22:35:36 +0000 | [diff] [blame] | 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; |
Chris Lattner | c2c70fa | 2003-08-27 04:50:12 +0000 | [diff] [blame] | 34 | }; |
Chris Lattner | 5337521 | 2003-08-25 22:35:36 +0000 | [diff] [blame] | 35 | |
| 36 | enum { |
| 37 | ErrorException = 0, |
| 38 | LongjmpException = 1, |
| 39 | CXXException = 2, |
| 40 | }; |
| 41 | |
| 42 | // Language independent exception handling API... |
| 43 | // |
| 44 | extern "C" { |
Chris Lattner | 7a37fa7 | 2003-08-27 22:58:51 +0000 | [diff] [blame^] | 45 | bool __llvm_eh_has_uncaught_exception() throw(); |
| 46 | void *__llvm_eh_current_uncaught_exception_type(unsigned HandlerType) throw(); |
Chris Lattner | 5337521 | 2003-08-25 22:35:36 +0000 | [diff] [blame] | 47 | } |
| 48 | |
| 49 | #endif |