pike.git/
src/
interpret.h
Branch:
Tag:
Non-build tags
All tags
No tags
2001-06-08
2001-06-08 21:31:15 by Henrik Grubbström (Grubba) <grubba@grubba.org>
8fa6b51dbaf22573892f46061ed5b261150bfa7c (
30
lines) (+
29
/-
1
)
[
Show
|
Annotate
]
Branch:
7.9
Added macro SAFE_APPLY_HANDLER().
Rev: src/interpret.h:1.88
5:
\*/ /*
-
* $Id: interpret.h,v 1.
87
2001/06/08
16
:
25
:
48
grubba Exp $
+
* $Id: interpret.h,v 1.
88
2001/06/08
21
:
31
:
15
grubba Exp $
*/ #ifndef INTERPRET_H #define INTERPRET_H
269:
safe_apply_low(master_ob, fun_, ARGS); \ }while(0)
+
#define SAFE_APPLY_HANDLER(FUN, HANDLER, COMPAT, ARGS) do { \
+
static int h_fun_=-1, h_id_=0; \
+
static int c_fun_=-1, c_fun_id_=0; \
+
struct object *h_=(HANDLER), *c_=(COMPAT); \
+
if (h_) { \
+
if (h_->prog->id != h_id_) { \
+
h_fun_ = find_identifier(fun, h_->prog); \
+
h_id_ = h_->prog->id; \
+
} \
+
if (h_fun_ != -1) { \
+
safe_apply_low(h_, h_fun_, ARGS); \
+
break; \
+
} \
+
} \
+
if (c_) { \
+
if (c_->prog->id != c_id_) { \
+
c_fun_ = find_identifier(fun, c_->prog); \
+
c_id_ = c_->prog->id; \
+
} \
+
if (c_fun_ != -1) { \
+
safe_apply_low(c_, c_fun_, ARGS); \
+
break; \
+
} \
+
} \
+
SAFE_APPLY_MASTER(FUN, ARGS); \
+
} while(0)
+
#define check_threads_etc() \ call_callback(& evaluator_callbacks, (void *)0)