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