The Witchcraft Compiler Collection
WCC
 All Data Structures Files Functions Variables Typedefs Macros
longjmp.h
Go to the documentation of this file.
1 
8 /* Copyright (C) 2009-2015 Francesco Nidito
9  *
10  * Permission is hereby granted, free of charge, to any person obtaining a copy
11  * of this software and associated documentation files (the "Software"), to deal
12  * in the Software without restriction, including without limitation the rights to
13  * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
14  * of the Software, and to permit persons to whom the Software is furnished to do
15  * so, subject to the following conditions:
16  *
17  * The above copyright notice and this permission notice shall be included in all
18  * copies or substantial portions of the Software.
19  *
20  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26  * SOFTWARE.
27  */
28 
29 #ifndef _TRY_THROW_CATCH_H_
30 #define _TRY_THROW_CATCH_H_
31 
32 #include <stdio.h>
33 #include <setjmp.h>
34 
35 /* For the full documentation and explanation of the code below, please refer to
36  * /~nids/docs/longjump_try_trow_catch.html
37  */
38 
39 #define TRY do { jmp_buf ex_buf__; switch( setjmp(ex_buf__) ) { case 0: while(1) {
40 #define CATCH(x) break; case x:
41 #define FINALLY break; } default: {
42 #define ETRY break; } } }while(0)
43 #define THROW(x) longjmp(ex_buf__, x)
44 
45 #endif