patch 8.2.0061: the execute stack can grow big and never shrinks

Problem:    The execute stack can grow big and never shrinks.
Solution:   Reduce the size in gargage collect.
diff --git a/src/eval.c b/src/eval.c
index c03372d..739c73c 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -3857,6 +3857,30 @@
 	garbage_collect_at_exit = FALSE;
     }
 
+    // The execution stack can grow big, limit the size.
+    if (exestack.ga_maxlen - exestack.ga_len > 500)
+    {
+	size_t	new_len;
+	char_u	*pp;
+	int	n;
+
+	// Keep 150% of the current size, with a minimum of the growth size.
+	n = exestack.ga_len / 2;
+	if (n < exestack.ga_growsize)
+	    n = exestack.ga_growsize;
+
+	// Don't make it bigger though.
+	if (exestack.ga_len + n < exestack.ga_maxlen)
+	{
+	    new_len = exestack.ga_itemsize * (exestack.ga_len + n);
+	    pp = vim_realloc(exestack.ga_data, new_len);
+	    if (pp == NULL)
+		return FAIL;
+	    exestack.ga_maxlen = exestack.ga_len + n;
+	    exestack.ga_data = pp;
+	}
+    }
+
     // We advance by two because we add one for items referenced through
     // previous_funccal.
     copyID = get_copyID();