From 3cda06c15a8dea02a9e8d7c9909ef4528b0ecb4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?= <grubba@grubba.org> Date: Sat, 8 Mar 1997 18:09:30 +0100 Subject: [PATCH] Extended pop() to actually use the value provided. Rev: lib/modules/Stack.pmod:1.2 --- lib/modules/Stack.pmod | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/lib/modules/Stack.pmod b/lib/modules/Stack.pmod index 92dfb2546e..aeb471a65b 100644 --- a/lib/modules/Stack.pmod +++ b/lib/modules/Stack.pmod @@ -10,14 +10,31 @@ class stack { arr[ptr++]=val; } - mixed pop(mixed val) + mixed pop(void|int val) { mixed foo; - if(--ptr < 0) - error("Stack underflow\n"); + + if (val) { + if (ptr <= 0) { + error("Stack underflow\n"); + } + + if (ptr < val) { + val = ptr; + } + ptr -= val; + foo = arr[ptr..ptr + val - 1]; + + for (int i=0; i < val; i++) { + arr[ptr + i] = 0; /* Don't waste references */ + } + } else { + if(--ptr < 0) + error("Stack underflow\n"); - foo=arr[ptr]; - arr[ptr]=0; /* Don't waste references */ + foo=arr[ptr]; + arr[ptr]=0; /* Don't waste references */ + } return foo; } -- GitLab