e576bb | 2002-10-11 | Martin Nilsson | |
|
24ddc7 | 1998-03-28 | Henrik Grubbström (Grubba) | |
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #ifndef INTERPRET_H
#define INTERPRET_H
|
442aea | 1997-01-28 | Fredrik Hübinette (Hubbe) | | #include "global.h"
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #include "program.h"
|
b2d3e4 | 2000-12-01 | Fredrik Hübinette (Hubbe) | | #include "pike_error.h"
|
b9114d | 2004-03-06 | Martin Nilsson | | #include "object.h"
|
b2630d | 2004-05-20 | Henrik Grubbström (Grubba) | | #include "pike_rusage.h"
|
ec2bab | 2000-06-24 | Fredrik Hübinette (Hubbe) | |
|
ca176b | 2006-02-27 | Martin Stjernholm | | struct catch_context
{
struct catch_context *prev;
JMP_BUF recovery;
struct svalue *save_expendible;
PIKE_OPCODE_T *next_addr;
ptrdiff_t continue_reladdr;
#ifdef PIKE_DEBUG
struct pike_frame *frame;
#endif
};
|
d97eb7 | 2011-07-10 | Henrik Grubbström (Grubba) | | struct Pike_interpreter_struct {
|
ec2bab | 2000-06-24 | Fredrik Hübinette (Hubbe) | |
|
5923b1 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | struct svalue *stack_pointer;
struct svalue *evaluator_stack;
|
17f08c | 2000-07-06 | Fredrik Hübinette (Hubbe) | | struct svalue **mark_stack_pointer;
|
5923b1 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | struct svalue **mark_stack;
struct pike_frame *frame_pointer;
|
ec2bab | 2000-06-24 | Fredrik Hübinette (Hubbe) | | JMP_BUF *recoveries;
|
f07758 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | #ifdef PIKE_THREADS
|
043131 | 2003-02-15 | Henrik Grubbström (Grubba) | | struct thread_state *thread_state;
|
f07758 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | #endif
|
5923b1 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | char *stack_top;
|
ec2bab | 2000-06-24 | Fredrik Hübinette (Hubbe) | | DO_IF_SECURITY(struct object *current_creds;)
|
ca176b | 2006-02-27 | Martin Stjernholm | | struct catch_context *catch_ctx;
LOW_JMP_BUF *catching_eval_jmpbuf;
|
669704 | 2000-11-20 | Martin Stjernholm | | int svalue_stack_margin;
int c_stack_margin;
|
ca176b | 2006-02-27 | Martin Stjernholm | | INT16 evaluator_stack_malloced;
INT16 mark_stack_malloced;
|
ec2bab | 2000-06-24 | Fredrik Hübinette (Hubbe) | | #ifdef PROFILING
|
ddf41c | 2005-07-22 | Martin Nilsson | | cpu_time_t accounted_time;
cpu_time_t unlocked_time;
|
061244 | 2001-05-16 | Fredrik Hübinette (Hubbe) | | char *stack_bottom;
|
ec2bab | 2000-06-24 | Fredrik Hübinette (Hubbe) | | #endif
|
619809 | 2003-01-08 | Martin Stjernholm | | int trace_level;
|
ec2bab | 2000-06-24 | Fredrik Hübinette (Hubbe) | | };
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
dfa5b3 | 1996-12-05 | Fredrik Hübinette (Hubbe) | | #ifndef STRUCT_FRAME_DECLARED
#define STRUCT_FRAME_DECLARED
#endif
|
421801 | 1999-01-31 | Fredrik Hübinette (Hubbe) | | struct pike_frame
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | {
|
ddf41c | 2005-07-22 | Martin Nilsson | | INT32 refs;
INT32 args;
unsigned INT16 fun;
INT16 num_locals;
INT16 num_args;
unsigned INT16 flags;
|
207f56 | 2001-05-13 | Fredrik Hübinette (Hubbe) | | INT16 ident;
|
421801 | 1999-01-31 | Fredrik Hübinette (Hubbe) | | struct pike_frame *next;
struct pike_frame *scope;
|
ddf41c | 2005-07-22 | Martin Nilsson | | PIKE_OPCODE_T *pc;
PIKE_OPCODE_T *return_addr;
struct svalue *locals;
|
9ddbf2 | 2001-05-10 | Fredrik Hübinette (Hubbe) | |
|
ddf41c | 2005-07-22 | Martin Nilsson | | |
9ddbf2 | 2001-05-10 | Fredrik Hübinette (Hubbe) | | * return value should go.
*/
struct svalue *save_sp;
|
ddf41c | 2005-07-22 | Martin Nilsson | | |
9ddbf2 | 2001-05-10 | Fredrik Hübinette (Hubbe) | | */
|
501763 | 1998-06-05 | Fredrik Hübinette (Hubbe) | | struct svalue *expendible;
|
9ddbf2 | 2001-05-10 | Fredrik Hübinette (Hubbe) | | struct svalue **save_mark_sp;
struct svalue **mark_sp_base;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | struct object *current_object;
|
fa93a5 | 2008-02-28 | Henrik Grubbström (Grubba) | | struct program *current_program;
struct inherit *context;
char *current_storage;
|
9ddbf2 | 2001-05-10 | Fredrik Hübinette (Hubbe) | |
|
92fb22 | 2001-05-13 | Fredrik Hübinette (Hubbe) | | DO_IF_SECURITY(struct object *current_creds;)
|
b2630d | 2004-05-20 | Henrik Grubbström (Grubba) | | #if defined(PROFILING)
|
ddf41c | 2005-07-22 | Martin Nilsson | | cpu_time_t children_base;
cpu_time_t start_time;
|
9ddbf2 | 2001-05-10 | Fredrik Hübinette (Hubbe) | | #endif
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | };
|
9ddbf2 | 2001-05-10 | Fredrik Hübinette (Hubbe) | | #define PIKE_FRAME_RETURN_INTERNAL 1
#define PIKE_FRAME_RETURN_POP 2
#define PIKE_FRAME_MALLOCED_LOCALS 0x8000
|
342fef | 2000-08-23 | Fredrik Hübinette (Hubbe) | | struct external_variable_context
{
struct object *o;
struct inherit *inherit;
int parent_identifier;
};
|
7df348 | 2001-07-21 | Henrik Grubbström (Grubba) | | #ifdef HAVE_COMPUTED_GOTO
extern PIKE_OPCODE_T *fcode_to_opcode;
extern struct op_2_f {
PIKE_OPCODE_T opcode;
INT32 fcode;
} *opcode_to_fcode;
#endif /* HAVE_COMPUTED_GOTO */
|
71f3a2 | 1998-11-22 | Fredrik Hübinette (Hubbe) | | #ifdef PIKE_DEBUG
|
c29940 | 2001-11-10 | Martin Stjernholm | | PMOD_EXPORT extern const char msg_stack_error[];
|
f9bafd | 2008-12-12 | Martin Stjernholm | | #define debug_check_stack() do{if(Pike_sp<Pike_interpreter.evaluator_stack)Pike_fatal("%s", msg_stack_error);}while(0)
|
5aad93 | 2002-08-15 | Marcus Comstedt | | #define check__positive(X,Y) if((X)<0) Pike_fatal Y
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #else
|
964949 | 1998-02-27 | Fredrik Hübinette (Hubbe) | | #define check__positive(X,Y)
|
fa382f | 1996-06-21 | Fredrik Hübinette (Hubbe) | | #define debug_check_stack()
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #endif
|
fa382f | 1996-06-21 | Fredrik Hübinette (Hubbe) | |
|
c91547 | 2000-12-04 | Martin Stjernholm | | #define low_stack_check(X) \
(Pike_sp - Pike_interpreter.evaluator_stack + \
Pike_interpreter.svalue_stack_margin + (X) >= Pike_stack_size)
|
c29940 | 2001-11-10 | Martin Stjernholm | | PMOD_EXPORT extern const char Pike_check_stack_errmsg[];
|
c91547 | 2000-12-04 | Martin Stjernholm | |
|
6f9590 | 2000-08-17 | Henrik Grubbström (Grubba) | | #define check_stack(X) do { \
|
c91547 | 2000-12-04 | Martin Stjernholm | | if(low_stack_check(X)) \
|
b1197a | 2000-12-28 | Henrik Grubbström (Grubba) | | ((void (*)(const char *, ...))Pike_error)( \
Pike_check_stack_errmsg, \
|
c91547 | 2000-12-04 | Martin Stjernholm | | PTRDIFF_T_TO_LONG(Pike_sp - Pike_interpreter.evaluator_stack), \
PTRDIFF_T_TO_LONG(Pike_stack_size), \
PTRDIFF_T_TO_LONG(X)); \
|
7e97c3 | 1999-01-21 | Fredrik Hübinette (Hubbe) | | }while(0)
|
c29940 | 2001-11-10 | Martin Stjernholm | | PMOD_EXPORT extern const char Pike_check_mark_stack_errmsg[];
|
c91547 | 2000-12-04 | Martin Stjernholm | |
|
7e97c3 | 1999-01-21 | Fredrik Hübinette (Hubbe) | | #define check_mark_stack(X) do { \
|
b1197a | 2000-12-28 | Henrik Grubbström (Grubba) | | if(Pike_mark_sp - Pike_interpreter.mark_stack + (X) >= Pike_stack_size) \
((void (*)(const char*, ...))Pike_error)(Pike_check_mark_stack_errmsg); \
|
7e97c3 | 1999-01-21 | Fredrik Hübinette (Hubbe) | | }while(0)
|
c29940 | 2001-11-10 | Martin Stjernholm | | PMOD_EXPORT extern const char Pike_check_c_stack_errmsg[];
|
c91547 | 2000-12-04 | Martin Stjernholm | |
|
477970 | 2009-04-01 | Martin Stjernholm | | #define low_check_c_stack(MIN_BYTES, RUN_IF_LOW) do { \
|
2059f3 | 2006-03-25 | Henrik Grubbström (Grubba) | | ptrdiff_t x_= (((char *)&x_) - Pike_interpreter.stack_top) + \
|
477970 | 2009-04-01 | Martin Stjernholm | | STACK_DIRECTION * (MIN_BYTES); \
x_*=STACK_DIRECTION; \
if(x_>0) {RUN_IF_LOW;} \
} while (0)
#define check_c_stack(MIN_BYTES) do { \
low_check_c_stack (Pike_interpreter.c_stack_margin + (MIN_BYTES), { \
low_error(Pike_check_c_stack_errmsg); \
/* Pike_fatal("C stack overflow: x_:%p &x_:%p top:%p margin:%p\n", \
x_, &x_, Pike_interpreter.stack_top, \
Pike_interpreter.c_stack_margin + (MIN_BYTES)); */ \
}); \
|
7e97c3 | 1999-01-21 | Fredrik Hübinette (Hubbe) | | }while(0)
|
477970 | 2009-04-01 | Martin Stjernholm | | #define fatal_check_c_stack(MIN_BYTES) do { \
low_check_c_stack ((MIN_BYTES), { \
((void (*)(const char*, ...))Pike_fatal)(Pike_check_c_stack_errmsg); \
}); \
|
fffb2a | 2000-09-12 | Henrik Grubbström (Grubba) | | }while(0)
|
7e97c3 | 1999-01-21 | Fredrik Hübinette (Hubbe) | |
|
938a5d | 2002-10-12 | Henrik Grubbström (Grubba) | | #ifdef PIKE_DEBUG
#define STACK_LEVEL_START(depth) \
do { \
|
e7a714 | 2002-11-23 | Martin Stjernholm | | struct svalue *save_stack_level = (Pike_sp - (depth))
|
938a5d | 2002-10-12 | Henrik Grubbström (Grubba) | |
#define STACK_LEVEL_DONE(depth) \
STACK_LEVEL_CHECK(depth); \
} while(0)
#define STACK_LEVEL_CHECK(depth) \
do { \
if (Pike_sp != save_stack_level + (depth)) { \
Pike_fatal("Unexpected stack level! " \
"Actual: %d, expected: %d\n", \
DO_NOT_WARN((int)(Pike_sp - save_stack_level)), \
(depth)); \
} \
} while(0)
#else /* !PIKE_DEBUG */
#define STACK_LEVEL_START(depth) do {
#define STACK_LEVEL_DONE(depth) } while(0)
#define STACK_LEVEL_CHECK(depth)
#endif /* PIKE_DEBUG */
|
996aa5 | 2010-11-19 | Henrik Grubbström (Grubba) | | #ifdef __CHECKER__
#define IF_CHECKER(X) X
#else
#define IF_CHECKER(X)
#endif
|
15a05f | 2002-11-23 | Martin Stjernholm | | #define pop_stack() do{ free_svalue(--Pike_sp); debug_check_stack(); }while(0)
|
2ac950 | 2001-08-14 | Fredrik Hübinette (Hubbe) | | #define pop_2_elems() do { pop_stack(); pop_stack(); }while(0)
|
2d1234 | 1997-03-10 | Fredrik Hübinette (Hubbe) | |
|
2eaa40 | 2000-08-03 | Henrik Grubbström (Grubba) | | #ifdef __ECL
#define MAYBE_CAST_TO_LONG(X) (X)
#else /* !__ECL */
#define MAYBE_CAST_TO_LONG(X) ((long)(X))
#endif /* __ECL */
|
c29940 | 2001-11-10 | Martin Stjernholm | | PMOD_EXPORT extern const char msg_pop_neg[];
|
3469ac | 2000-08-03 | Henrik Grubbström (Grubba) | | #define pop_n_elems(X) \
|
87a416 | 2003-04-27 | Martin Stjernholm | | do { \
ptrdiff_t x_=(X); \
if(x_) { \
struct svalue *_sp_; \
check__positive(x_, (msg_pop_neg, x_)); \
_sp_ = Pike_sp = Pike_sp - x_; \
debug_check_stack(); \
free_mixed_svalues(_sp_, x_); \
} \
} while (0)
|
964949 | 1998-02-27 | Fredrik Hübinette (Hubbe) | |
|
a6d61a | 2003-04-25 | Martin Stjernholm | |
#define stack_unlink(X) do { \
|
db1719 | 2003-04-27 | Martin Stjernholm | | ptrdiff_t x2_ = (X); \
if (x2_) { \
|
87a416 | 2003-04-27 | Martin Stjernholm | | struct svalue *_sp_ = --Pike_sp; \
|
db1719 | 2003-04-27 | Martin Stjernholm | | free_svalue (_sp_ - x2_); \
move_svalue (_sp_ - x2_, _sp_); \
pop_n_elems (x2_ - 1); \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | } \
}while(0)
#define stack_pop_n_elems_keep_top(X) stack_unlink(X)
|
87a416 | 2003-04-27 | Martin Stjernholm | | #define stack_pop_keep_top() do { \
struct svalue *_sp_ = --Pike_sp; \
free_svalue (_sp_ - 1); \
|
db1719 | 2003-04-27 | Martin Stjernholm | | move_svalue (_sp_ - 1, _sp_); \
|
87a416 | 2003-04-27 | Martin Stjernholm | | debug_check_stack(); \
} while (0)
|
b0d33f | 2003-04-27 | Martin Stjernholm | | #define stack_pop_2_elems_keep_top() do { \
struct svalue *_sp_ = Pike_sp = Pike_sp - 2; \
free_svalue (_sp_ - 1); \
free_svalue (_sp_); \
move_svalue (_sp_ - 1, _sp_ + 1); \
debug_check_stack(); \
} while (0)
|
a6d61a | 2003-04-25 | Martin Stjernholm | | #define stack_pop_to_no_free(X) move_svalue(X, --Pike_sp)
#define stack_pop_to(X) do { \
struct svalue *_=(X); \
free_svalue(_); \
stack_pop_to_no_free(_); \
}while(0)
#define push_program(P) do{ \
struct program *_=(P); \
|
379c89 | 2003-04-25 | Martin Stjernholm | | struct svalue *_sp_ = Pike_sp++; \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | debug_malloc_touch(_); \
_sp_->u.program=_; \
|
7a46d5 | 2011-09-24 | Henrik Grubbström (Grubba) | | SET_SVAL_TYPE(*_sp_, PIKE_T_PROGRAM); \
IF_CHECKER(SET_SVAL_SUBTYPE(*_sp_, 0)); \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | }while(0)
#define push_int(I) do{ \
INT_TYPE _=(I); \
|
379c89 | 2003-04-25 | Martin Stjernholm | | struct svalue *_sp_ = Pike_sp++; \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | _sp_->u.integer=_; \
|
7a46d5 | 2011-09-24 | Henrik Grubbström (Grubba) | | SET_SVAL_TYPE(*_sp_, PIKE_T_INT); \
SET_SVAL_SUBTYPE(*_sp_, NUMBER_NUMBER); \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | }while(0)
#define push_undefined() do{ \
struct svalue *_sp_ = Pike_sp++; \
_sp_->u.integer=0; \
|
7a46d5 | 2011-09-24 | Henrik Grubbström (Grubba) | | SET_SVAL_TYPE(*_sp_, PIKE_T_INT); \
SET_SVAL_SUBTYPE(*_sp_, NUMBER_UNDEFINED); \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | }while(0)
|
7b008b | 2005-06-20 | Henrik Grubbström (Grubba) | | #define push_obj_index(I) do{ \
int _=(I); \
struct svalue *_sp_ = Pike_sp++; \
_sp_->u.identifier=_; \
|
7a46d5 | 2011-09-24 | Henrik Grubbström (Grubba) | | SET_SVAL_TYPE(*_sp_, T_OBJ_INDEX); \
IF_CHECKER(SET_SVAL_SUBTYPE(*_sp_, 0)); \
|
7b008b | 2005-06-20 | Henrik Grubbström (Grubba) | | }while(0)
|
a6d61a | 2003-04-25 | Martin Stjernholm | | #define push_mapping(M) do{ \
struct mapping *_=(M); \
|
379c89 | 2003-04-25 | Martin Stjernholm | | struct svalue *_sp_ = Pike_sp++; \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | debug_malloc_touch(_); \
_sp_->u.mapping=_; \
|
7a46d5 | 2011-09-24 | Henrik Grubbström (Grubba) | | SET_SVAL_TYPE(*_sp_, PIKE_T_MAPPING); \
IF_CHECKER(SET_SVAL_SUBTYPE(*_sp_, 0)); \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | }while(0)
#define push_array(A) do{ \
struct array *_=(A); \
|
379c89 | 2003-04-25 | Martin Stjernholm | | struct svalue *_sp_ = Pike_sp++; \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | debug_malloc_touch(_); \
_sp_->u.array=_ ; \
|
7a46d5 | 2011-09-24 | Henrik Grubbström (Grubba) | | SET_SVAL_TYPE(*_sp_, PIKE_T_ARRAY); \
IF_CHECKER(SET_SVAL_SUBTYPE(*_sp_, 0)); \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | }while(0)
|
99a30b | 2005-05-05 | Martin Nilsson | | #define push_empty_array() ref_push_array(&empty_array)
|
a6d61a | 2003-04-25 | Martin Stjernholm | | #define push_multiset(L) do{ \
struct multiset *_=(L); \
|
379c89 | 2003-04-25 | Martin Stjernholm | | struct svalue *_sp_ = Pike_sp++; \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | debug_malloc_touch(_); \
_sp_->u.multiset=_; \
|
7a46d5 | 2011-09-24 | Henrik Grubbström (Grubba) | | SET_SVAL_TYPE(*_sp_, PIKE_T_MULTISET); \
IF_CHECKER(SET_SVAL_SUBTYPE(*_sp_, 0)); \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | }while(0)
#define push_string(S) do { \
struct pike_string *_=(S); \
|
379c89 | 2003-04-25 | Martin Stjernholm | | struct svalue *_sp_ = Pike_sp++; \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | debug_malloc_touch(_); \
|
171445 | 2003-12-23 | Henrik Grubbström (Grubba) | | DO_IF_DEBUG(if(_->size_shift & ~3) { \
Pike_fatal("Pushing string with bad shift: %d\n", \
_->size_shift); \
}); \
|
7a46d5 | 2011-09-24 | Henrik Grubbström (Grubba) | | SET_SVAL_SUBTYPE(*_sp_, 0); \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | _sp_->u.string=_; \
|
7a46d5 | 2011-09-24 | Henrik Grubbström (Grubba) | | SET_SVAL_TYPE(*_sp_, PIKE_T_STRING); \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | }while(0)
|
99a30b | 2005-05-05 | Martin Nilsson | | #define push_empty_string() ref_push_string(empty_pike_string)
|
a6d61a | 2003-04-25 | Martin Stjernholm | | #define push_type_value(S) do{ \
struct pike_type *_=(S); \
|
379c89 | 2003-04-25 | Martin Stjernholm | | struct svalue *_sp_ = Pike_sp++; \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | debug_malloc_touch(_); \
_sp_->u.type=_; \
|
7a46d5 | 2011-09-24 | Henrik Grubbström (Grubba) | | SET_SVAL_TYPE(*_sp_, PIKE_T_TYPE); \
IF_CHECKER(SET_SVAL_SUBTYPE(*_sp_, 0)); \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | }while(0)
#define push_object(O) do { \
struct object *_=(O); \
|
379c89 | 2003-04-25 | Martin Stjernholm | | struct svalue *_sp_ = Pike_sp++; \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | debug_malloc_touch(_); \
_sp_->u.object=_; \
|
7a46d5 | 2011-09-24 | Henrik Grubbström (Grubba) | | SET_SVAL_TYPE(*_sp_, PIKE_T_OBJECT); \
SET_SVAL_SUBTYPE(*_sp_, 0); \
|
f69fe5 | 2004-12-18 | Henrik Grubbström (Grubba) | | }while(0)
#define push_object_inherit(O, INH_NUM) do { \
struct object *_ = (O); \
struct svalue *_sp_ = Pike_sp++; \
int _inh_ = (INH_NUM); \
debug_malloc_touch(_); \
_sp_->u.object = _; \
|
7a46d5 | 2011-09-24 | Henrik Grubbström (Grubba) | | SET_SVAL_TYPE(*_sp_, PIKE_T_OBJECT); \
SET_SVAL_SUBTYPE(*_sp_, _inh_); \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | }while(0)
#define push_float(F) do{ \
FLOAT_TYPE _=(F); \
|
379c89 | 2003-04-25 | Martin Stjernholm | | struct svalue *_sp_ = Pike_sp++; \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | _sp_->u.float_number=_; \
|
7a46d5 | 2011-09-24 | Henrik Grubbström (Grubba) | | SET_SVAL_TYPE(*_sp_, PIKE_T_FLOAT); \
IF_CHECKER(SET_SVAL_SUBTYPE(*_sp_, 0)); \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | }while(0)
|
b1775d | 2003-12-09 | Martin Nilsson | | #define push_text(T) do { \
const char *_ = (T); \
struct svalue *_sp_ = Pike_sp++; \
|
7a46d5 | 2011-09-24 | Henrik Grubbström (Grubba) | | SET_SVAL_SUBTYPE(*_sp_, 0); \
|
b1775d | 2003-12-09 | Martin Nilsson | | _sp_->u.string=make_shared_binary_string(_,strlen(_)); \
debug_malloc_touch(_sp_->u.string); \
|
7a46d5 | 2011-09-24 | Henrik Grubbström (Grubba) | | SET_SVAL_TYPE(*_sp_, PIKE_T_STRING); \
|
b1775d | 2003-12-09 | Martin Nilsson | | }while(0)
|
0542ef | 1999-11-17 | Fredrik Hübinette (Hubbe) | |
|
a6d61a | 2003-04-25 | Martin Stjernholm | | #define push_constant_text(T) do{ \
struct svalue *_sp_ = Pike_sp++; \
|
7a46d5 | 2011-09-24 | Henrik Grubbström (Grubba) | | SET_SVAL_SUBTYPE(*_sp_, 0); \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | REF_MAKE_CONST_STRING(_sp_->u.string,T); \
|
7a46d5 | 2011-09-24 | Henrik Grubbström (Grubba) | | SET_SVAL_TYPE(*_sp_, PIKE_T_STRING); \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | }while(0)
|
aceb58 | 2005-05-27 | Martin Stjernholm | |
#define push_constant_string_code(STR, CODE) do{ \
struct pike_string *STR; \
REF_MAKE_CONST_STRING_CODE (STR, CODE); \
push_string (STR); \
}while(0)
|
a6d61a | 2003-04-25 | Martin Stjernholm | |
#define push_function(OBJ, FUN) do { \
struct object *_=(OBJ); \
|
379c89 | 2003-04-25 | Martin Stjernholm | | struct svalue *_sp_ = Pike_sp++; \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | debug_malloc_touch(_); \
_sp_->u.object=_; \
|
7a46d5 | 2011-09-24 | Henrik Grubbström (Grubba) | | SET_SVAL_SUBTYPE(*_sp_, (FUN)); \
SET_SVAL_TYPE(*_sp_, PIKE_T_FUNCTION); \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | } while (0)
#define ref_push_program(P) do{ \
struct program *_=(P); \
|
379c89 | 2003-04-25 | Martin Stjernholm | | struct svalue *_sp_ = Pike_sp++; \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | add_ref(_); \
_sp_->u.program=_; \
|
7a46d5 | 2011-09-24 | Henrik Grubbström (Grubba) | | SET_SVAL_TYPE(*_sp_, PIKE_T_PROGRAM); \
IF_CHECKER(SET_SVAL_SUBTYPE(*_sp_, 0)); \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | }while(0)
#define ref_push_mapping(M) do{ \
struct mapping *_=(M); \
|
379c89 | 2003-04-25 | Martin Stjernholm | | struct svalue *_sp_ = Pike_sp++; \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | add_ref(_); \
_sp_->u.mapping=_; \
|
7a46d5 | 2011-09-24 | Henrik Grubbström (Grubba) | | SET_SVAL_TYPE(*_sp_, PIKE_T_MAPPING); \
IF_CHECKER(SET_SVAL_SUBTYPE(*_sp_, 0)); \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | }while(0)
#define ref_push_array(A) do{ \
struct array *_=(A); \
|
379c89 | 2003-04-25 | Martin Stjernholm | | struct svalue *_sp_ = Pike_sp++; \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | add_ref(_); \
_sp_->u.array=_ ; \
|
7a46d5 | 2011-09-24 | Henrik Grubbström (Grubba) | | SET_SVAL_TYPE(*_sp_, PIKE_T_ARRAY); \
IF_CHECKER(SET_SVAL_SUBTYPE(*_sp_, 0)); \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | }while(0)
#define ref_push_multiset(L) do{ \
struct multiset *_=(L); \
|
379c89 | 2003-04-25 | Martin Stjernholm | | struct svalue *_sp_ = Pike_sp++; \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | add_ref(_); \
_sp_->u.multiset=_; \
|
7a46d5 | 2011-09-24 | Henrik Grubbström (Grubba) | | SET_SVAL_TYPE(*_sp_, PIKE_T_MULTISET); \
IF_CHECKER(SET_SVAL_SUBTYPE(*_sp_, 0)); \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | }while(0)
#define ref_push_string(S) do{ \
struct pike_string *_=(S); \
|
379c89 | 2003-04-25 | Martin Stjernholm | | struct svalue *_sp_ = Pike_sp++; \
|
171445 | 2003-12-23 | Henrik Grubbström (Grubba) | | DO_IF_DEBUG(if(_->size_shift & ~3) { \
Pike_fatal("Pushing string with bad shift: %d\n", \
_->size_shift); \
}); \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | add_ref(_); \
|
7a46d5 | 2011-09-24 | Henrik Grubbström (Grubba) | | SET_SVAL_SUBTYPE(*_sp_, 0); \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | _sp_->u.string=_; \
|
7a46d5 | 2011-09-24 | Henrik Grubbström (Grubba) | | SET_SVAL_TYPE(*_sp_, PIKE_T_STRING); \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | }while(0)
#define ref_push_type_value(S) do{ \
struct pike_type *_=(S); \
|
379c89 | 2003-04-25 | Martin Stjernholm | | struct svalue *_sp_ = Pike_sp++; \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | add_ref(_); \
_sp_->u.type=_; \
|
7a46d5 | 2011-09-24 | Henrik Grubbström (Grubba) | | SET_SVAL_TYPE(*_sp_, PIKE_T_TYPE); \
IF_CHECKER(SET_SVAL_SUBTYPE(*_sp_, 0)); \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | }while(0)
|
2d1234 | 1997-03-10 | Fredrik Hübinette (Hubbe) | |
|
a6d61a | 2003-04-25 | Martin Stjernholm | | #define ref_push_object(O) do{ \
struct object *_=(O); \
|
379c89 | 2003-04-25 | Martin Stjernholm | | struct svalue *_sp_ = Pike_sp++; \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | add_ref(_); \
_sp_->u.object=_; \
|
7a46d5 | 2011-09-24 | Henrik Grubbström (Grubba) | | SET_SVAL_TYPE(*_sp_, PIKE_T_OBJECT); \
SET_SVAL_SUBTYPE(*_sp_, 0); \
|
f69fe5 | 2004-12-18 | Henrik Grubbström (Grubba) | | }while(0)
#define ref_push_object_inherit(O, INH_NUM) do{ \
struct object *_ = (O); \
struct svalue *_sp_ = Pike_sp++; \
int _inh_ = (INH_NUM); \
add_ref(_); \
_sp_->u.object = _; \
|
7a46d5 | 2011-09-24 | Henrik Grubbström (Grubba) | | SET_SVAL_TYPE(*_sp_, PIKE_T_OBJECT); \
SET_SVAL_SUBTYPE(*_sp_, _inh_); \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | }while(0)
#define ref_push_function(OBJ, FUN) do { \
struct object *_=(OBJ); \
|
379c89 | 2003-04-25 | Martin Stjernholm | | struct svalue *_sp_ = Pike_sp++; \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | add_ref(_); \
_sp_->u.object=_; \
|
7a46d5 | 2011-09-24 | Henrik Grubbström (Grubba) | | SET_SVAL_SUBTYPE(*_sp_, (FUN)); \
SET_SVAL_TYPE(*_sp_, PIKE_T_FUNCTION); \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | } while (0)
#define push_svalue(S) do { \
const struct svalue *_=(S); \
|
379c89 | 2003-04-25 | Martin Stjernholm | | struct svalue *_sp_ = Pike_sp++; \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | assign_svalue_no_free(_sp_,_); \
}while(0)
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
a2ad15 | 2000-02-16 | Fredrik Hübinette (Hubbe) | | #define stack_dup() push_svalue(Pike_sp-1)
|
a6d61a | 2003-04-25 | Martin Stjernholm | |
#define stack_swap() do { \
struct svalue *_sp_ = Pike_sp; \
struct svalue _=_sp_[-1]; \
_sp_[-1]=_sp_[-2]; \
_sp_[-2]=_; \
} while(0)
|
3635bb | 1998-02-19 | Fredrik Hübinette (Hubbe) | |
|
b23b11 | 2001-08-15 | Fredrik Hübinette (Hubbe) | | #define push_zeroes(N) do{ \
struct svalue *s_=Pike_sp; \
ptrdiff_t num_= (N); \
for(;num_-- > 0;s_++) \
{ \
|
7a46d5 | 2011-09-24 | Henrik Grubbström (Grubba) | | SET_SVAL_TYPE(*s_, PIKE_T_INT); \
SET_SVAL_SUBTYPE(*s_, NUMBER_NUMBER); \
|
b23b11 | 2001-08-15 | Fredrik Hübinette (Hubbe) | | s_->u.integer=0; \
} \
Pike_sp=s_; \
}while(0)
#define push_undefines(N) do{ \
struct svalue *s_=Pike_sp; \
ptrdiff_t num_= (N); \
for(;num_-- > 0;s_++) \
{ \
|
7a46d5 | 2011-09-24 | Henrik Grubbström (Grubba) | | SET_SVAL_TYPE(*s_, PIKE_T_INT); \
SET_SVAL_SUBTYPE(*s_, NUMBER_UNDEFINED); \
|
b23b11 | 2001-08-15 | Fredrik Hübinette (Hubbe) | | s_->u.integer=0; \
} \
Pike_sp=s_; \
}while(0)
|
711b07 | 2001-03-08 | Fredrik Hübinette (Hubbe) | |
|
50ea68 | 2003-03-14 | Henrik Grubbström (Grubba) | | #define free_pike_frame(F) do{ struct pike_frame *f_=(F); if(!sub_ref(f_)) really_free_pike_frame(f_); }while(0)
|
421801 | 1999-01-31 | Fredrik Hübinette (Hubbe) | |
|
fa2126 | 2001-08-31 | Fredrik Hübinette (Hubbe) | |
|
50ea68 | 2003-03-14 | Henrik Grubbström (Grubba) | | #define free_pike_scope(F) do{ struct pike_frame *f_=(F); if(!sub_ref(f_)) really_free_pike_scope(f_); }while(0)
|
fa2126 | 2001-08-31 | Fredrik Hübinette (Hubbe) | |
|
35efd5 | 2007-06-17 | Martin Stjernholm | |
#define LOW_POP_PIKE_FRAME(_fp_) do { \
struct pike_frame *tmp_=_fp_->next; \
if(!sub_ref(_fp_)) \
{ \
really_free_pike_frame(_fp_); \
}else{ \
ptrdiff_t num_expendible = _fp_->expendible - _fp_->locals; \
DO_IF_DEBUG( \
if( (_fp_->locals + _fp_->num_locals > Pike_sp) || \
(Pike_sp < _fp_->expendible) || \
(num_expendible < 0) || (num_expendible > _fp_->num_locals)) \
Pike_fatal("Stack failure in POP_PIKE_FRAME %p+%d=%p %p %p!\n", \
_fp_->locals, _fp_->num_locals, \
_fp_->locals+_fp_->num_locals, \
Pike_sp,_fp_->expendible)); \
debug_malloc_touch(_fp_); \
if(num_expendible) \
{ \
struct svalue *s=(struct svalue *)xalloc(sizeof(struct svalue)* \
num_expendible); \
_fp_->num_locals = num_expendible; \
assign_svalues_no_free(s, _fp_->locals, num_expendible, \
BIT_MIXED); \
_fp_->locals=s; \
_fp_->flags|=PIKE_FRAME_MALLOCED_LOCALS; \
}else{ \
_fp_->locals=0; \
} \
_fp_->next=0; \
} \
Pike_fp=tmp_; \
} while (0)
|
421801 | 1999-01-31 | Fredrik Hübinette (Hubbe) | | #define POP_PIKE_FRAME() do { \
|
a6d61a | 2003-04-25 | Martin Stjernholm | | struct pike_frame *_fp_ = Pike_fp; \
|
b2630d | 2004-05-20 | Henrik Grubbström (Grubba) | | DO_IF_PROFILING({ \
/* Time spent in this frame + children. */ \
cpu_time_t time_passed = \
get_cpu_time() - Pike_interpreter.unlocked_time; \
/* Time spent in children to this frame. */ \
cpu_time_t time_in_children; \
/* Time spent in just this frame. */ \
cpu_time_t self_time; \
struct identifier *function; \
DO_IF_PROFILING_DEBUG({ \
fprintf(stderr, "%p}: Pop got %" PRINT_CPU_TIME \
" (%" PRINT_CPU_TIME ")" \
" %" PRINT_CPU_TIME " (%" PRINT_CPU_TIME ")\n", \
Pike_interpreter.thread_state, time_passed, \
_fp_->start_time, Pike_interpreter.accounted_time, \
_fp_->children_base); \
}); \
time_passed -= _fp_->start_time; \
DO_IF_DEBUG(if (time_passed < 0) { \
Pike_fatal("Negative time_passed: %" PRINT_CPU_TIME \
" now: %" PRINT_CPU_TIME \
" unlocked_time: %" PRINT_CPU_TIME \
" start_time: %" PRINT_CPU_TIME \
"\n", time_passed, get_cpu_time(), \
Pike_interpreter.unlocked_time, \
_fp_->start_time); \
}); \
time_in_children = \
Pike_interpreter.accounted_time - _fp_->children_base; \
DO_IF_DEBUG(if (time_in_children < 0) { \
Pike_fatal("Negative time_in_children: %" \
PRINT_CPU_TIME \
" accounted_time: %" PRINT_CPU_TIME \
" children_base: %" PRINT_CPU_TIME \
"\n", time_in_children, \
Pike_interpreter.accounted_time, \
_fp_->children_base); \
}); \
self_time = time_passed - time_in_children; \
DO_IF_DEBUG(if (self_time < 0) { \
Pike_fatal("Negative self_time: %" PRINT_CPU_TIME \
" time_passed: %" PRINT_CPU_TIME \
" time_in_children: %" PRINT_CPU_TIME \
"\n", self_time, time_passed, \
time_in_children); \
}); \
Pike_interpreter.accounted_time += self_time; \
|
fa93a5 | 2008-02-28 | Henrik Grubbström (Grubba) | | /* FIXME: Can context->prog be NULL? */ \
|
fb19ad | 2012-01-07 | Jonas Walldén | | function = _fp_->context->prog->identifiers + _fp_->ident; \
|
5ca7b5 | 2012-01-07 | Jonas Walldén | | if (!--function->recur_depth) \
function->total_time += time_passed; \
|
b2630d | 2004-05-20 | Henrik Grubbström (Grubba) | | function->self_time += self_time; \
}); \
|
35efd5 | 2007-06-17 | Martin Stjernholm | | LOW_POP_PIKE_FRAME (_fp_); \
|
421801 | 1999-01-31 | Fredrik Hübinette (Hubbe) | | }while(0)
|
3635bb | 1998-02-19 | Fredrik Hübinette (Hubbe) | |
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | enum apply_type
{
APPLY_STACK,
APPLY_SVALUE,
|
24c37f | 2001-05-24 | Fredrik Hübinette (Hubbe) | | APPLY_SVALUE_STRICT,
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | APPLY_LOW
};
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #define APPLY_MASTER(FUN,ARGS) \
do{ \
|
57d4d3 | 2000-08-23 | Henrik Grubbström (Grubba) | | static int fun_, master_cnt=0; \
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | struct object *master_ob=master(); \
if(master_cnt != master_ob->prog->id) \
{ \
fun_=find_identifier(FUN,master_ob->prog); \
master_cnt = master_ob->prog->id; \
} \
|
6deaa3 | 2006-03-17 | Henrik Grubbström (Grubba) | | if (fun_ >= 0) { \
apply_low(master_ob, fun_, ARGS); \
} else { \
Pike_error("Cannot call undefined function \"%s\" in master.\n", FUN); \
} \
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | }while(0)
#define SAFE_APPLY_MASTER(FUN,ARGS) \
do{ \
|
57d4d3 | 2000-08-23 | Henrik Grubbström (Grubba) | | static int fun_, master_cnt=0; \
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | struct object *master_ob=master(); \
if(master_cnt != master_ob->prog->id) \
{ \
fun_=find_identifier(FUN,master_ob->prog); \
master_cnt = master_ob->prog->id; \
} \
|
6deaa3 | 2006-03-17 | Henrik Grubbström (Grubba) | | safe_apply_low2(master_ob, fun_, ARGS, FUN); \
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | }while(0)
|
8fa6b5 | 2001-06-08 | Henrik Grubbström (Grubba) | | #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); \
|
b5e538 | 2001-06-11 | Henrik Grubbström (Grubba) | | if (h_ && h_->prog) { \
|
8fa6b5 | 2001-06-08 | Henrik Grubbström (Grubba) | | 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; \
} \
} \
|
b5e538 | 2001-06-11 | Henrik Grubbström (Grubba) | | if (c_ && c_->prog) { \
|
8fa6b5 | 2001-06-08 | Henrik Grubbström (Grubba) | | 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)
|
032a81 | 2001-08-18 | Fredrik Hübinette (Hubbe) | |
|
0f65e1 | 2002-09-14 | Martin Stjernholm | | #ifdef INTERNAL_PROFILING
PMOD_EXPORT extern unsigned long evaluator_callback_calls;
#endif
|
85155d | 2010-03-24 | Martin Stjernholm | | #define low_check_threads_etc() do { \
|
0f65e1 | 2002-09-14 | Martin Stjernholm | | DO_IF_INTERNAL_PROFILING (evaluator_callback_calls++); \
|
d2361e | 2003-06-30 | Martin Stjernholm | | call_callback(& evaluator_callbacks, NULL); \
|
032a81 | 2001-08-18 | Fredrik Hübinette (Hubbe) | | }while(0)
|
0a861b | 1997-09-17 | Fredrik Hübinette (Hubbe) | |
|
85155d | 2010-03-24 | Martin Stjernholm | | #define check_threads_etc() do { \
DO_IF_DEBUG (if (Pike_interpreter.trace_level > 2) \
fprintf (stderr, "- thread yield point\n")); \
low_check_threads_etc(); \
} while (0)
|
51d7d8 | 2008-11-18 | Martin Stjernholm | | extern int fast_check_threads_counter;
|
c84698 | 1997-10-13 | Fredrik Hübinette (Hubbe) | |
|
51d7d8 | 2008-11-18 | Martin Stjernholm | | #define fast_check_threads_etc(X) do { \
|
85155d | 2010-03-24 | Martin Stjernholm | | DO_IF_DEBUG (if (Pike_interpreter.trace_level > 2) \
fprintf (stderr, "- thread yield point\n")); \
|
51d7d8 | 2008-11-18 | Martin Stjernholm | | if (++fast_check_threads_counter >= (1 << (X))) { \
fast_check_threads_counter = 0; \
|
85155d | 2010-03-24 | Martin Stjernholm | | low_check_threads_etc(); \
|
51d7d8 | 2008-11-18 | Martin Stjernholm | | } \
} while(0)
|
d44249 | 2008-11-19 | Martin Stjernholm | | #define FAST_CHECK_THREADS_ON_CALL() do { \
|
85155d | 2010-03-24 | Martin Stjernholm | | DO_IF_DEBUG (if (Pike_interpreter.trace_level > 2) \
fprintf (stderr, "- thread yield point\n")); \
|
d44249 | 2008-11-19 | Martin Stjernholm | | if (++fast_check_threads_counter >= (1 << 6)) { \
fast_check_threads_counter = 0; \
|
85155d | 2010-03-24 | Martin Stjernholm | | low_check_threads_etc(); \
|
d44249 | 2008-11-19 | Martin Stjernholm | | } \
else if (objects_to_destruct) \
/* De facto pike semantics requires that freed objects are */ \
/* destructed before function calls. Otherwise done through */ \
/* evaluator_callbacks. */ \
destruct_objects_to_destruct_cb(); \
} while (0)
|
51d7d8 | 2008-11-18 | Martin Stjernholm | |
#define FAST_CHECK_THREADS_ON_BRANCH() fast_check_threads_etc (8)
|
0a861b | 1997-09-17 | Fredrik Hübinette (Hubbe) | |
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
be478c | 1997-08-30 | Henrik Grubbström (Grubba) | | void push_sp_mark(void);
|
45705c | 2000-08-09 | Henrik Grubbström (Grubba) | | ptrdiff_t pop_sp_mark(void);
|
cc2e9f | 2003-09-24 | Martin Stjernholm | | void gc_mark_stack_external (struct pike_frame *frame,
struct svalue *stack_p, struct svalue *stack);
|
d97eb7 | 2011-07-10 | Henrik Grubbström (Grubba) | | PMOD_EXPORT int low_init_interpreter(struct Pike_interpreter_struct *interpreter);
|
4ee922 | 2000-12-13 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT void init_interpreter(void);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | void lvalue_to_svalue_no_free(struct svalue *to,struct svalue *lval);
|
4ee922 | 2000-12-13 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT void assign_lvalue(struct svalue *lval,struct svalue *from);
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT union anything *get_pointer_if_this_type(struct svalue *lval, TYPE_T t);
|
be478c | 1997-08-30 | Henrik Grubbström (Grubba) | | void print_return_value(void);
void reset_evaluator(void);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | struct backlog;
|
5683de | 1995-11-06 | Fredrik Hübinette (Hubbe) | | void dump_backlog(void);
|
cc0851 | 2013-06-12 | Per Hedbor | | struct catch_context *alloc_catch_context(void);
PMOD_EXPORT void really_free_catch_context( struct catch_context *data );
PMOD_EXPORT void really_free_pike_frame( struct pike_frame *X );
void count_memory_in_catch_contexts(size_t*, size_t*);
void count_memory_in_pike_frames(size_t*, size_t*);
|
421801 | 1999-01-31 | Fredrik Hübinette (Hubbe) | |
|
142b00 | 2003-11-25 | Martin Stjernholm | | #ifdef PIKE_USE_MACHINE_CODE
|
aebaa4 | 2008-11-19 | Martin Stjernholm | | void call_check_threads_etc();
|
8434c2 | 2003-12-09 | Henrik Grubbström (Grubba) | | #if defined(OPCODE_INLINE_BRANCH) || defined(INS_F_JUMP) || \
defined(INS_F_JUMP_WITH_ARG) || defined(INS_F_JUMP_WITH_TWO_ARGS)
|
142b00 | 2003-11-25 | Martin Stjernholm | | void branch_check_threads_etc();
#endif
|
4555f3 | 2011-05-11 | Henrik Grubbström (Grubba) | | #ifdef OPCODE_INLINE_RETURN
|
55e946 | 2011-05-16 | Henrik Grubbström (Grubba) | | PIKE_OPCODE_T *inter_return_opcode_F_CATCH(PIKE_OPCODE_T *addr);
|
4555f3 | 2011-05-11 | Henrik Grubbström (Grubba) | | #endif
|
142b00 | 2003-11-25 | Martin Stjernholm | | #ifdef PIKE_DEBUG
|
b1f6a6 | 2003-03-21 | Martin Stjernholm | | void simple_debug_instr_prologue_0 (PIKE_INSTR_T instr);
void simple_debug_instr_prologue_1 (PIKE_INSTR_T instr, INT32 arg);
void simple_debug_instr_prologue_2 (PIKE_INSTR_T instr, INT32 arg1, INT32 arg2);
|
31984c | 2003-03-20 | Martin Stjernholm | | #endif
|
142b00 | 2003-11-25 | Martin Stjernholm | | #endif /* PIKE_USE_MACHINE_CODE */
|
31984c | 2003-03-20 | Martin Stjernholm | |
|
342fef | 2000-08-23 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT void find_external_context(struct external_variable_context *loc,
int arg2);
|
cc0851 | 2013-06-12 | Per Hedbor | | struct pike_frame *alloc_pike_frame(void);
|
e29cb7 | 2001-09-01 | Henrik Grubbström (Grubba) | | void really_free_pike_scope(struct pike_frame *scope);
|
f663c9 | 2003-04-03 | Henrik Grubbström (Grubba) | | int low_mega_apply(enum apply_type type, INT32 args, void *arg1, void *arg2);
|
9ddbf2 | 2001-05-10 | Fredrik Hübinette (Hubbe) | | void low_return(void);
|
2ac950 | 2001-08-14 | Fredrik Hübinette (Hubbe) | | void low_return_pop(void);
|
9ddbf2 | 2001-05-10 | Fredrik Hübinette (Hubbe) | | void unlink_previous_frame(void);
|
70fbc1 | 2011-05-02 | Per Hedbor | | int apply_low_safe_and_stupid(struct object *o, INT32 offset);
|
ba4367 | 2011-11-05 | Bill Welliver | | PMOD_EXPORT struct Pike_interpreter_struct * pike_get_interpreter_pointer();
|
e68c78 | 2006-07-05 | Martin Stjernholm | | PMOD_EXPORT void mega_apply(enum apply_type type, INT32 args, void *arg1, void *arg2);
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT void f_call_function(INT32 args);
|
669704 | 2000-11-20 | Martin Stjernholm | | PMOD_EXPORT void call_handle_error(void);
|
ef8d2a | 2008-04-14 | Henrik Grubbström (Grubba) | | PMOD_EXPORT int safe_apply_low(struct object *o,int fun,int args);
PMOD_EXPORT int safe_apply_low2(struct object *o,int fun,int args,
|
c4accf | 2006-03-17 | Henrik Grubbström (Grubba) | | const char *fun_name);
|
ef8d2a | 2008-04-14 | Henrik Grubbström (Grubba) | | PMOD_EXPORT int safe_apply(struct object *o, const char *fun ,INT32 args);
|
70fbc1 | 2011-05-02 | Per Hedbor | | int low_unsafe_apply_handler(const char *fun,
|
61863e | 2001-12-20 | Martin Stjernholm | | struct object *handler,
struct object *compat,
INT32 args);
|
70fbc1 | 2011-05-02 | Per Hedbor | | void low_safe_apply_handler(const char *fun,
|
9036e8 | 2001-08-16 | Martin Stjernholm | | struct object *handler,
struct object *compat,
INT32 args);
PMOD_EXPORT int safe_apply_handler(const char *fun,
struct object *handler,
struct object *compat,
INT32 args,
TYPE_FIELD rettypes);
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT void apply_lfun(struct object *o, int fun, int args);
PMOD_EXPORT void apply_shared(struct object *o,
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | struct pike_string *fun,
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | int args);
|
b77075 | 2002-11-14 | Marcus Comstedt | | PMOD_EXPORT void apply(struct object *o, const char *fun, int args);
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT void apply_svalue(struct svalue *s, INT32 args);
|
6026c6 | 2004-09-22 | Martin Stjernholm | | PMOD_EXPORT void safe_apply_svalue (struct svalue *s, INT32 args, int handle_errors);
|
9335ea | 2003-01-17 | Henrik Grubbström (Grubba) | | PMOD_EXPORT void apply_external(int depth, int fun, INT32 args);
|
70fbc1 | 2011-05-02 | Per Hedbor | | void slow_check_stack(void);
|
66a157 | 2001-01-12 | Martin Stjernholm | | PMOD_EXPORT void custom_check_stack(ptrdiff_t amount, const char *fmt, ...)
|
c91547 | 2000-12-04 | Martin Stjernholm | | ATTRIBUTE((format (printf, 2, 3)));
|
4ee922 | 2000-12-13 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT void cleanup_interpret(void);
|
d97eb7 | 2011-07-10 | Henrik Grubbström (Grubba) | | PMOD_EXPORT void low_cleanup_interpret(struct Pike_interpreter_struct *interpreter);
|
b660c8 | 1999-03-01 | Fredrik Hübinette (Hubbe) | | void really_clean_up_interpret(void);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
d080fb | 2000-08-07 | Henrik Grubbström (Grubba) | |
#ifdef __ECL
|
54a130 | 2004-06-02 | Martin Nilsson | | static INLINE void apply_low(struct object *o, ptrdiff_t fun, INT32 args)
|
d080fb | 2000-08-07 | Henrik Grubbström (Grubba) | | {
mega_apply(APPLY_LOW, args, (void*)o, (void*)fun);
}
|
54a130 | 2004-06-02 | Martin Nilsson | | static INLINE void strict_apply_svalue(struct svalue *sval, INT32 args)
|
d080fb | 2000-08-07 | Henrik Grubbström (Grubba) | | {
|
24c37f | 2001-05-24 | Fredrik Hübinette (Hubbe) | | mega_apply(APPLY_SVALUE_STRICT, args, (void*)sval, 0);
|
d080fb | 2000-08-07 | Henrik Grubbström (Grubba) | | }
#else /* !__ECL */
#define apply_low(O,FUN,ARGS) \
|
57d4d3 | 2000-08-23 | Henrik Grubbström (Grubba) | | mega_apply(APPLY_LOW, (ARGS), (void*)(O),(void*)(ptrdiff_t)(FUN))
|
d080fb | 2000-08-07 | Henrik Grubbström (Grubba) | |
#define strict_apply_svalue(SVAL,ARGS) \
mega_apply(APPLY_SVALUE, (ARGS), (void*)(SVAL),0)
#endif /* __ECL */
|
114b16 | 2003-01-18 | Henrik Grubbström (Grubba) | | #define apply_current(FUN, ARGS) \
apply_low(Pike_fp->current_object, \
|
fa93a5 | 2008-02-28 | Henrik Grubbström (Grubba) | | (FUN) + Pike_fp->context->identifier_level, \
|
114b16 | 2003-01-18 | Henrik Grubbström (Grubba) | | (ARGS))
|
493198 | 2008-04-14 | Henrik Grubbström (Grubba) | | #define safe_apply_current(FUN, ARGS) \
safe_apply_low(Pike_fp->current_object, \
(FUN) + Pike_fp->context->identifier_level, \
(ARGS))
|
964896 | 2008-04-20 | Henrik Grubbström (Grubba) | | #define safe_apply_current2(FUN, ARGS, FUNNAME) \
safe_apply_low2(Pike_fp->current_object, \
(FUN) + Pike_fp->context->identifier_level, \
(ARGS), (FUNNAME))
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT extern int d_flag;
PMOD_EXPORT extern int Pike_stack_size;
|
70fbc1 | 2011-05-02 | Per Hedbor | | struct callback;
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT extern struct callback_list evaluator_callbacks;
|
e13200 | 1998-11-19 | Fredrik Hübinette (Hubbe) | |
|
b28dd1 | 2000-07-06 | Fredrik Hübinette (Hubbe) | |
|
d97eb7 | 2011-07-10 | Henrik Grubbström (Grubba) | | PMOD_EXPORT extern struct Pike_interpreter_struct *Pike_interpreter_pointer;
#define Pike_interpreter (*Pike_interpreter_pointer)
|
5923b1 | 2000-07-06 | Fredrik Hübinette (Hubbe) | |
#define Pike_sp Pike_interpreter.stack_pointer
#define Pike_fp Pike_interpreter.frame_pointer
|
17f08c | 2000-07-06 | Fredrik Hübinette (Hubbe) | | #define Pike_mark_sp Pike_interpreter.mark_stack_pointer
|
e13200 | 1998-11-19 | Fredrik Hübinette (Hubbe) | |
|
a2ad15 | 2000-02-16 | Fredrik Hübinette (Hubbe) | |
|
60d987 | 2000-03-23 | Fredrik Hübinette (Hubbe) | | #define CURRENT_STORAGE (dmalloc_touch(struct pike_frame *,Pike_fp)->current_storage)
|
24c37f | 2001-05-24 | Fredrik Hübinette (Hubbe) | |
#define PIKE_STACK_MMAPPED
struct Pike_stack
{
struct svalue *top;
int flags;
struct Pike_stack *previous;
struct svalue *save_ptr;
struct svalue stack[1];
};
#define PIKE_STACK_REQUIRE_BEGIN(num, base) do { \
|
406144 | 2001-05-25 | Henrik Grubbström (Grubba) | | struct Pike_stack *old_stack_; \
|
24c37f | 2001-05-24 | Fredrik Hübinette (Hubbe) | | if(Pike_interpreter.current_stack->top - Pike_sp < num) \
{ \
|
406144 | 2001-05-25 | Henrik Grubbström (Grubba) | | old_stack_=Pike_interpreter.current_stack; \
old_stack_->save_ptr=Pike_sp; \
|
24c37f | 2001-05-24 | Fredrik Hübinette (Hubbe) | | Pike_interpreter.current_stack=allocate_array(MAXIMUM(num, 8192)); \
|
406144 | 2001-05-25 | Henrik Grubbström (Grubba) | | while(old_sp > base) *(Pike_sp++) = *--old_stack_->save_ptr; \
|
24c37f | 2001-05-24 | Fredrik Hübinette (Hubbe) | | }
#define PIKE_STACK_REQUIRE_END() \
while(Pike_sp > Pike_interpreter.current_stack->stack) \
|
406144 | 2001-05-25 | Henrik Grubbström (Grubba) | | *(old_stack_->save_ptr++) = *--Pike_sp; \
|
24c37f | 2001-05-24 | Fredrik Hübinette (Hubbe) | | Pike_interpreter.current_stack=Pike_interpreter.current_stack->previous; \
}while(0)
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #endif
|