patch 9.0.0547: looping over empty out_loop[] entries

Problem:    Looping over empty out_loop[] entries.
Solution:   Store the array size.
diff --git a/src/structs.h b/src/structs.h
index 19dc550..31889f6 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -2126,6 +2126,7 @@
 				    // out_loop_stack
 	short	 var_count;	    // number of variables defined in a loop
     } out_loop[MAX_LOOP_DEPTH];
+    int		out_loop_size;	    // nr of used entries in out_loop[]
 };
 
 struct partial_S
diff --git a/src/version.c b/src/version.c
index 4641a1f..2f36c39 100644
--- a/src/version.c
+++ b/src/version.c
@@ -700,6 +700,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    547,
+/**/
     546,
 /**/
     545,
diff --git a/src/vim9execute.c b/src/vim9execute.c
index 51c5420..9416cf3 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -1868,7 +1868,10 @@
 		pt->pt_outer.out_loop[depth].var_count =
 					    lvi->lvi_loop[depth].var_count;
 	    }
+	    pt->pt_outer.out_loop_size = lvi->lvi_depth;
 	}
+	else
+	    pt->pt_outer.out_loop_size = 0;
 
 	// If the function currently executing returns and the closure is still
 	// being referenced, we need to make a copy of the context (arguments
@@ -5739,14 +5742,10 @@
 	    if (partial != NULL)
 	    {
 		outer_T *outer = get_pt_outer(partial);
-		int	depth;
-		void	*ptr = outer->out_stack;
 
-		// see if any stack was set
-		for (depth = 0; ptr == NULL && depth < MAX_LOOP_DEPTH; ++depth)
-		    ptr = outer->out_loop[depth].stack;
-		if (ptr == NULL)
+		if (outer->out_stack == NULL && outer->out_loop_size == 0)
 		{
+		    // no stack was set
 		    if (current_ectx != NULL)
 		    {
 			if (current_ectx->ec_outer_ref != NULL