2004-07-23 01:21:47 -04:00
|
|
|
#define UNDERFLOW_CHECKING
|
|
|
|
|
2004-07-31 14:58:16 -04:00
|
|
|
#define UNDERFLOW(stack,bot) ((stack) < UNTAG(bot) + sizeof(ARRAY))
|
2004-07-23 01:21:47 -04:00
|
|
|
#define OVERFLOW(stack,bot) ((stack) >= UNTAG(bot) + object_size(bot))
|
|
|
|
|
|
|
|
INLINE void check_stacks(void)
|
|
|
|
{
|
|
|
|
|
|
|
|
#ifdef UNDERFLOW_CHECKING
|
|
|
|
if(OVERFLOW(env.ds,env.ds_bot))
|
2004-07-31 14:58:16 -04:00
|
|
|
general_error(ERROR_OVERFLOW,F);
|
2004-07-23 01:21:47 -04:00
|
|
|
if(OVERFLOW(env.cs,env.cs_bot))
|
2004-07-31 14:58:16 -04:00
|
|
|
general_error(ERROR_OVERFLOW,F);
|
2004-07-23 01:21:47 -04:00
|
|
|
#endif
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void reset_datastack(void);
|
|
|
|
void reset_callstack(void);
|
|
|
|
|
2004-07-16 02:26:21 -04:00
|
|
|
void primitive_drop(void);
|
|
|
|
void primitive_dup(void);
|
|
|
|
void primitive_swap(void);
|
|
|
|
void primitive_over(void);
|
|
|
|
void primitive_pick(void);
|
|
|
|
void primitive_nip(void);
|
|
|
|
void primitive_tuck(void);
|
|
|
|
void primitive_rot(void);
|
|
|
|
void primitive_to_r(void);
|
|
|
|
void primitive_from_r(void);
|
|
|
|
VECTOR* stack_to_vector(CELL top, CELL bottom);
|
|
|
|
void primitive_datastack(void);
|
|
|
|
void primitive_callstack(void);
|
|
|
|
CELL vector_to_stack(VECTOR* vector, CELL bottom);
|
|
|
|
void primitive_set_datastack(void);
|
|
|
|
void primitive_set_callstack(void);
|