plxvm/src/stack.h

35 lines
816 B
C

#ifndef _STACK_H
#define _STACK_H
#include "types.h"
typedef struct {
number_t *data;
index_t size;
index_t sp;
} stack_t;
/*
Check for possible stack underflow (should normally not happen, in contrast to stack overflow)
*/
#if STACKUNDERFLOWCHECK>0
#define STACKUNDERFLOW(DS,N,R) if (SEMPTYN(DS,N)) { R->error=ESTACK; return 0; };
#else
#define STACKUNDERFLOW(DS,N,R)
#endif
#define SEMPTY(S) S->sp==0
#define SFULL(S) S->sp==S->size
#define SEMPTYN(S,n) S->sp<n
#define SFULLN(S,n) (S->sp+n)>S->size
#define POP(S) S->data[--S->sp]
#define PUSH(S,x) S->data[S->sp++]=x
#define NTH(S,n) S->data[S->sp-n]
stack_t * StackAllocate(int size);
void StackCopy(stack_t *src, stack_t *dst);
void StackInit(stack_t *S,int size,number_t *data);
void StackReset(stack_t *S);
#endif