1 /**************************************************************************/ 2 /* */ 3 /* OCaml */ 4 /* */ 5 /* Xavier Leroy, projet Cristal, INRIA Rocquencourt */ 6 /* */ 7 /* Copyright 1996 Institut National de Recherche en Informatique et */ 8 /* en Automatique. */ 9 /* */ 10 /* All rights reserved. This file is distributed under the terms of */ 11 /* the GNU Lesser General Public License version 2.1, with the */ 12 /* special exception on linking described in the file LICENSE. */ 13 /* */ 14 /**************************************************************************/ 15 16 #ifndef CAML_FAIL_H 17 #define CAML_FAIL_H 18 19 #ifdef CAML_INTERNALS 20 #include <setjmp.h> 21 #endif /* CAML_INTERNALS */ 22 23 #ifndef CAML_NAME_SPACE 24 #include "compatibility.h" 25 #endif 26 #include "misc.h" 27 #include "mlvalues.h" 28 29 #ifdef CAML_INTERNALS 30 #define OUT_OF_MEMORY_EXN 0 /* "Out_of_memory" */ 31 #define SYS_ERROR_EXN 1 /* "Sys_error" */ 32 #define FAILURE_EXN 2 /* "Failure" */ 33 #define INVALID_EXN 3 /* "Invalid_argument" */ 34 #define END_OF_FILE_EXN 4 /* "End_of_file" */ 35 #define ZERO_DIVIDE_EXN 5 /* "Division_by_zero" */ 36 #define NOT_FOUND_EXN 6 /* "Not_found" */ 37 #define MATCH_FAILURE_EXN 7 /* "Match_failure" */ 38 #define STACK_OVERFLOW_EXN 8 /* "Stack_overflow" */ 39 #define SYS_BLOCKED_IO 9 /* "Sys_blocked_io" */ 40 #define ASSERT_FAILURE_EXN 10 /* "Assert_failure" */ 41 #define UNDEFINED_RECURSIVE_MODULE_EXN 11 /* "Undefined_recursive_module" */ 42 43 #ifdef POSIX_SIGNALS 44 struct longjmp_buffer { 45 sigjmp_buf buf; 46 }; 47 #else 48 struct longjmp_buffer { 49 jmp_buf buf; 50 }; 51 #define sigsetjmp(buf,save) setjmp(buf) 52 #define siglongjmp(buf,val) longjmp(buf,val) 53 #endif 54 55 CAMLextern struct longjmp_buffer * caml_external_raise; 56 extern value caml_exn_bucket; 57 int caml_is_special_exception(value exn); 58 59 #endif /* CAML_INTERNALS */ 60 61 #ifdef __cplusplus 62 extern "C" { 63 #endif 64 65 CAMLnoreturn_start 66 CAMLextern void caml_raise (value bucket) 67 CAMLnoreturn_end; 68 69 CAMLnoreturn_start 70 CAMLextern void caml_raise_constant (value tag) 71 CAMLnoreturn_end; 72 73 CAMLnoreturn_start 74 CAMLextern void caml_raise_with_arg (value tag, value arg) 75 CAMLnoreturn_end; 76 77 CAMLnoreturn_start 78 CAMLextern void caml_raise_with_args (value tag, int nargs, value arg[]) 79 CAMLnoreturn_end; 80 81 CAMLnoreturn_start 82 CAMLextern void caml_raise_with_string (value tag, char const * msg) 83 CAMLnoreturn_end; 84 85 CAMLnoreturn_start 86 CAMLextern void caml_failwith (char const *msg) 87 CAMLnoreturn_end; 88 89 CAMLnoreturn_start 90 CAMLextern void caml_failwith_value (value msg) 91 CAMLnoreturn_end; 92 93 CAMLnoreturn_start 94 CAMLextern void caml_invalid_argument (char const *msg) 95 CAMLnoreturn_end; 96 97 CAMLnoreturn_start 98 CAMLextern void caml_invalid_argument_value (value msg) 99 CAMLnoreturn_end; 100 101 CAMLnoreturn_start 102 CAMLextern void caml_raise_out_of_memory (void) 103 CAMLnoreturn_end; 104 105 CAMLnoreturn_start 106 CAMLextern void caml_raise_stack_overflow (void) 107 CAMLnoreturn_end; 108 109 CAMLnoreturn_start 110 CAMLextern void caml_raise_sys_error (value) 111 CAMLnoreturn_end; 112 113 CAMLnoreturn_start 114 CAMLextern void caml_raise_end_of_file (void) 115 CAMLnoreturn_end; 116 117 CAMLnoreturn_start 118 CAMLextern void caml_raise_zero_divide (void) 119 CAMLnoreturn_end; 120 121 CAMLnoreturn_start 122 CAMLextern void caml_raise_not_found (void) 123 CAMLnoreturn_end; 124 125 CAMLnoreturn_start 126 CAMLextern void caml_array_bound_error (void) 127 CAMLnoreturn_end; 128 129 CAMLnoreturn_start 130 CAMLextern void caml_raise_sys_blocked_io (void) 131 CAMLnoreturn_end; 132 133 #ifdef __cplusplus 134 } 135 #endif 136 137 #endif /* CAML_FAIL_H */ 138