diff --git a/lib/include/stack.h b/lib/include/stack.h new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/lib/include/stack.pre.pike b/lib/include/stack.pre.pike new file mode 100644 index 0000000000000000000000000000000000000000..480e715e94f49d43b597e3cf3feba3b04f65df65 --- /dev/null +++ b/lib/include/stack.pre.pike @@ -0,0 +1,28 @@ +#define error(X) throw( ({ (X), backtrace()[0..sizeof(backtrace())-2] }) ) + +class stack { + int ptr; + mixed *arr=allocate(32); + + void push(mixed val) + { + if(ptr==sizeof(arr)) arr+=allocate(ptr); + arr[ptr++]=val; + } + + mixed pop(mixed val) + { + mixed foo; + if(--ptr < 0) + error("Stack underflow\n"); + + foo=arr[ptr]; + arr[ptr]=0; /* Don't waste references */ + return foo; + } +}; + +void create() +{ + master()->add_precompiled_program("/precompiled/stack",stack); +}