stek.cpp

Stek


/*
  License GPL V3.
  Ahmed Sadikhov, ahmed.sadikhov@gmail.com
  program to implement stek.
  Later debagger code will be added here also.
*/

#include "esrin.h"

struct stek fnstk, obstk, dovrstk, secstk, glbstk, valstk, adrstk;


void init_stek(){

  fnstk.top = NULL;
  obstk.top = NULL;
  dovrstk.top = NULL;
  secstk.top = NULL;
  glbstk.top = NULL;
  valstk.top = NULL;
  adrstk.top = NULL;

};

void push_to_stek(struct stek *stk, void *dptr){

  struct stek_el *tmp = (struct stek_el *)malloc(sizeof(struct stek_el));
  tmp->dptr = dptr;
  tmp->prev = stk->top;
  stk->top = tmp;
}

void *pop_from_stek(struct stek *stk){

  struct stek_el *tmp;
  void *dptr;

  if (stk->top == NULL)
    return NULL; /* stek boshdu  */
  
  dptr = stk->top->dptr;
  tmp = stk->top;
  stk->top = stk->top->prev;
  tmp->prev = NULL;
  free(tmp);

  return dptr;
}


#define stktop(stk) pop_from_stek(stk)