summary refs log tree commit diff
path: root/src/stack.c
blob: 3a1f6975415ad13a3ef9a4da3ec7e1b34043acfe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "3cl.h"

#include <stdlib.h>


static inline void resize(struct CCLStack *stack)
{
    stack->length *= 2;
    stack->stack = realloc(stack->stack, stack->length * sizeof(*stack->stack));
}

void ccl_stack_push(struct CCLStack *stack, CCLNum num)
{
    if (stack->cur + 1 == stack->length)
        resize(stack);
    stack->stack[++stack->cur] = num;
}

CCLNum ccl_stack_pop(struct CCLStack *stack, CCLNum num)
{
    return stack->stack[stack->cur--];
}