lama_byterun/runtime/virt_stack.c

35 lines
841 B
C
Raw Normal View History

#include "virt_stack.h"
2023-05-31 11:01:11 +02:00
#include <malloc.h>
2023-05-31 11:01:11 +02:00
virt_stack *vstack_create () { return malloc(sizeof(virt_stack)); }
2023-05-31 11:01:11 +02:00
void vstack_destruct (virt_stack *st) { free(st); }
2023-05-31 11:01:11 +02:00
void vstack_init (virt_stack *st) {
st->cur = RUNTIME_VSTACK_SIZE;
st->buf[st->cur] = 0;
}
2023-05-31 11:01:11 +02:00
void vstack_push (virt_stack *st, size_t value) {
if (st->cur == 0) { assert(0); }
--st->cur;
st->buf[st->cur] = value;
}
2023-05-31 11:01:11 +02:00
size_t vstack_pop (virt_stack *st) {
if (st->cur == RUNTIME_VSTACK_SIZE) { assert(0); }
size_t value = st->buf[st->cur];
++st->cur;
return value;
}
2023-05-31 11:01:11 +02:00
void *vstack_top (virt_stack *st) { return st->buf + st->cur; }
2023-05-31 11:01:11 +02:00
size_t vstack_size (virt_stack *st) { return RUNTIME_VSTACK_SIZE - st->cur; }
2023-05-31 11:01:11 +02:00
size_t vstack_kth_from_start (virt_stack *st, size_t k) {
assert(vstack_size(st) > k);
return st->buf[RUNTIME_VSTACK_SIZE - 1 - k];
}