]> granicus.if.org Git - postgresql/blob - src/pl/plpython/plpython.h
c2f6bba6f45a22d662c447cbdae9c275abc50e56
[postgresql] / src / pl / plpython / plpython.h
1 /* $Header: /cvsroot/pgsql/src/pl/plpython/Attic/plpython.h,v 1.6 2002/03/06 06:10:48 momjian Exp $ */
2
3 #ifndef PLPYTHON_H
4 #define PLPYTHON_H
5
6 #define DEBUG_EXC 0
7 #define DEBUG_LEVEL 0
8
9 #define DECLARE_N_EXC(N) int rv_##N; sigjmp_buf buf_##N
10 #define TRAP_N_EXC(N) ((rv_##N = sigsetjmp(Warn_restart, 1)) != 0)
11
12 #if !DEBUG_EXC
13 #define RESTORE_N_EXC(N) memcpy(&Warn_restart, &(buf_##N), sizeof(sigjmp_buf))
14 #define SAVE_N_EXC(N) memcpy(&(buf_##N), &Warn_restart, sizeof(sigjmp_buf))
15 #define RERAISE_N_EXC(N) siglongjmp(Warn_restart, rv_##N)
16 #define RAISE_EXC(V) siglongjmp(Warn_restart, (V))
17 #else
18 #define RESTORE_N_EXC(N) do { \
19    elog(WARNING, "exception (%d,%d) restore at %s:%d",\
20                 PLy_call_level, exc_save_calls, __FUNCTION__, (__LINE__));\
21    exc_save_calls -= 1; \
22    memcpy(&Warn_restart, &(buf_##N), sizeof(sigjmp_buf)); } while (0)
23 #define SAVE_N_EXC(N) do { \
24    exc_save_calls += 1; \
25    elog(WARNING, "exception (%d,%d) save at %s:%d", \
26                 PLy_call_level, exc_save_calls, __FUNCTION__, (__LINE__)); \
27    memcpy(&(buf_##N), &Warn_restart, sizeof(sigjmp_buf)); } while (0)
28 #define RERAISE_N_EXC(N) do { \
29    elog(WARNING, "exception (%d,%d) reraise at %s:%d", \
30    PLy_call_level, exc_save_calls, __FUNCTION__, (__LINE__)); \
31    siglongjmp(Warn_restart, rv_##N); } while (0)
32 #define RAISE_EXC(V) do { \
33    elog(WARNING, "exception (%d,%d) raise at %s:%d", \
34    PLy_call_level, exc_save_calls, __FUNCTION__, (__LINE__)); \
35    siglongjmp(Warn_restart, (V)); } while (0)
36 #endif
37
38 #define DECLARE_EXC() DECLARE_N_EXC(save_restart)
39 #define SAVE_EXC() SAVE_N_EXC(save_restart)
40 #define RERAISE_EXC() RERAISE_N_EXC(save_restart)
41 #define RESTORE_EXC() RESTORE_N_EXC(save_restart)
42 #define TRAP_EXC() TRAP_N_EXC(save_restart)
43
44 #if DEBUG_LEVEL
45 #define CALL_LEVEL_INC() do { PLy_call_level += 1; \
46         elog(DEBUG3, "Level: %d", PLy_call_level); } while (0)
47 #define CALL_LEVEL_DEC() do { elog(DEBUG3, "Level: %d", PLy_call_level); \
48         PLy_call_level -= 1; } while (0)
49 #else
50 #define CALL_LEVEL_INC() do { PLy_call_level += 1; } while (0)
51 #define CALL_LEVEL_DEC() do { PLy_call_level -= 1; } while (0)
52 #endif
53
54 /* temporary debugging macros
55  */
56 #if DEBUG_LEVEL
57 #define enter() elog(DEBUG3, "Enter(%d): %s", func_enter_calls++,__FUNCTION__)
58 #define leave() elog(DEBUG3, "Leave(%d): %s", func_leave_calls++,__FUNCTION__)
59 #define mark() elog(DEBUG3, "Mark: %s:%d", __FUNCTION__, __LINE__);
60 #define refc(O) elog(DEBUG3, "Ref<%p>:<%d>:%s:%d", (O), (((O) == NULL) ? -1 : (O)->ob_refcnt), __FUNCTION__, __LINE__)
61 #else
62 #define enter()
63 #define leave()
64 #define mark()
65 #define refc(O)
66 #endif
67
68 #endif   /* PLPYTHON_H */