patch 8.2.0179: still a few places where range() does not work

Problem:    Still a few places where range() does not work.
Solution:   Fix using range() causing problems.
diff --git a/src/popupwin.c b/src/popupwin.c
index 47e9238..8a3f500 100644
--- a/src/popupwin.c
+++ b/src/popupwin.c
@@ -97,6 +97,8 @@
 	    for (i = 0; i < 4; ++i)
 		array[i] = 1;
 	    if (list != NULL)
+	    {
+		range_list_materialize(list);
 		for (i = 0, li = list->lv_first; i < 4 && i < list->lv_len;
 							 ++i, li = li->li_next)
 		{
@@ -104,6 +106,7 @@
 		    if (nr >= 0)
 			array[i] = nr > max_val ? max_val : nr;
 		}
+	    }
 	}
     }
 }
@@ -476,6 +479,9 @@
 	wp->w_popup_prop_id = dict_get_number(d, (char_u *)"textpropid");
 }
 
+/*
+ * Handle "moved" and "mousemoved" arguments.
+ */
     static void
 handle_moved_argument(win_T *wp, dictitem_T *di, int mousemoved)
 {
@@ -506,11 +512,13 @@
 	     || di->di_tv.vval.v_list->lv_len == 3))
     {
 	list_T	    *l = di->di_tv.vval.v_list;
-	listitem_T  *li = l->lv_first;
+	listitem_T  *li;
 	int	    mincol;
 	int	    maxcol;
 
-	if (di->di_tv.vval.v_list->lv_len == 3)
+	range_list_materialize(l);
+	li = l->lv_first;
+	if (l->lv_len == 3)
 	{
 	    varnumber_T nr = tv_get_number(&l->lv_first->li_tv);
 
@@ -748,6 +756,7 @@
 	    listitem_T	*li;
 	    int		i;
 
+	    range_list_materialize(list);
 	    for (i = 0, li = list->lv_first; i < 4 && i < list->lv_len;
 						     ++i, li = li->li_next)
 	    {
@@ -780,6 +789,8 @@
 	    int		i;
 
 	    if (list != NULL)
+	    {
+		range_list_materialize(list);
 		for (i = 0, li = list->lv_first; i < 8 && i < list->lv_len;
 							 ++i, li = li->li_next)
 		{
@@ -787,6 +798,7 @@
 		    if (*str != NUL)
 			wp->w_border_char[i] = mb_ptr2char(str);
 		}
+	    }
 	    if (list->lv_len == 1)
 		for (i = 1; i < 8; ++i)
 		    wp->w_border_char[i] = wp->w_border_char[0];
@@ -833,6 +845,8 @@
 		    ok = FALSE;
 		    break;
 		}
+		else
+		    range_list_materialize(li->li_tv.vval.v_list);
 	    }
 	}
 	if (ok)