diff options
author | dan <[email protected]> | 2023-05-25 11:00:58 -0400 |
---|---|---|
committer | dan <[email protected]> | 2023-05-25 11:00:58 -0400 |
commit | 40e23d550506659f7a33057bbbc23cb1cf0632f1 (patch) | |
tree | c7c7a53e78f7186b352c9e6a43113d6679257231 /stack.c | |
parent | 7463bbc06285690b5b644362d115aa9e82ac6cb4 (diff) | |
download | forth-40e23d550506659f7a33057bbbc23cb1cf0632f1.tar.gz forth-40e23d550506659f7a33057bbbc23cb1cf0632f1.tar.bz2 forth-40e23d550506659f7a33057bbbc23cb1cf0632f1.zip |
refactor: split optable and stack into sep files
Diffstat (limited to 'stack.c')
-rw-r--r-- | stack.c | 40 |
1 files changed, 40 insertions, 0 deletions
@@ -0,0 +1,40 @@ +#include "stack.h" + +stack* newstack() { + stack* s = (stack*)malloc(sizeof(stack)); + s->size = 0; + s->maxsize = 1024; + s->start = (stackitem*)malloc(sizeof(stackitem) * s->maxsize); + return s; +} + +stackitem pop(stack* s) { + if (s->size > 0) { + s->size = s->size - 1; + stackitem si = s->start[s->size]; + return si; + } else { + // tried to pop empty stack + return 0; + } +} + +stackitem peek(stack* s) { + if (s->size > 0) { + return s->start[s->size - 1]; + } else { + // tried to pop empty stack + return 0; + } +} + +void push(stack *s, stackitem si) { +// fprintf(stderr, "pushing %d", si); + if (s->size >= s->maxsize) { + fprintf(stderr, "Error Stack Overflow"); + exit(1); + } else { + s->start[s->size] = si; + s->size = s->size + 1; + } +} |