diff --git a/src/filepath.c b/src/filepath.c
index d4592eb..e4798d2 100644
--- a/src/filepath.c
+++ b/src/filepath.c
@@ -1373,10 +1373,11 @@
 }
 
 /*
- * Evaluate "expr" (= "context") for readdir().
+ * Common code for readdir_checkitem() and readdirex_checkitem().
+ * Either "name" or "dict" is NULL.
  */
     static int
-readdir_checkitem(void *context, void *item)
+checkitem_common(void *context, char_u *name, dict_T *dict)
 {
     typval_T	*expr = (typval_T *)context;
     typval_T	save_val;
@@ -1384,27 +1385,55 @@
     typval_T	argv[2];
     int		retval = 0;
     int		error = FALSE;
-    char_u	*name = (char_u*)item;
 
     prepare_vimvar(VV_VAL, &save_val);
-    set_vim_var_string(VV_VAL, name, -1);
-    argv[0].v_type = VAR_STRING;
-    argv[0].vval.v_string = name;
+    if (name != NULL)
+    {
+	set_vim_var_string(VV_VAL, name, -1);
+	argv[0].v_type = VAR_STRING;
+	argv[0].vval.v_string = name;
+    }
+    else
+    {
+	set_vim_var_dict(VV_VAL, dict);
+	argv[0].v_type = VAR_DICT;
+	argv[0].vval.v_dict = dict;
+    }
 
     if (eval_expr_typval(expr, argv, 1, &rettv) == FAIL)
 	goto theend;
 
+    // We want to use -1, but also true/false should be allowed.
+    if (rettv.v_type == VAR_SPECIAL || rettv.v_type == VAR_BOOL)
+    {
+	rettv.v_type = VAR_NUMBER;
+	rettv.vval.v_number = rettv.vval.v_number == VVAL_TRUE;
+    }
     retval = tv_get_number_chk(&rettv, &error);
     if (error)
 	retval = -1;
     clear_tv(&rettv);
 
 theend:
-    set_vim_var_string(VV_VAL, NULL, 0);
+    if (name != NULL)
+	set_vim_var_string(VV_VAL, NULL, 0);
+    else
+	set_vim_var_dict(VV_VAL, NULL);
     restore_vimvar(VV_VAL, &save_val);
     return retval;
 }
 
+/*
+ * Evaluate "expr" (= "context") for readdir().
+ */
+    static int
+readdir_checkitem(void *context, void *item)
+{
+    char_u	*name = (char_u *)item;
+
+    return checkitem_common(context, name, NULL);
+}
+
     static int
 readdirex_dict_arg(typval_T *tv, int *cmp)
 {
@@ -1477,37 +1506,9 @@
     static int
 readdirex_checkitem(void *context, void *item)
 {
-    typval_T	*expr = (typval_T *)context;
-    typval_T	save_val;
-    typval_T	rettv;
-    typval_T	argv[2];
-    int		retval = 0;
-    int		error = FALSE;
     dict_T	*dict = (dict_T*)item;
 
-    prepare_vimvar(VV_VAL, &save_val);
-    set_vim_var_dict(VV_VAL, dict);
-    argv[0].v_type = VAR_DICT;
-    argv[0].vval.v_dict = dict;
-
-    if (eval_expr_typval(expr, argv, 1, &rettv) == FAIL)
-	goto theend;
-
-    // We want to use -1, but also true/false should be allowed.
-    if (rettv.v_type == VAR_SPECIAL || rettv.v_type == VAR_BOOL)
-    {
-	rettv.v_type = VAR_NUMBER;
-	rettv.vval.v_number = rettv.vval.v_number == VVAL_TRUE;
-    }
-    retval = tv_get_number_chk(&rettv, &error);
-    if (error)
-	retval = -1;
-    clear_tv(&rettv);
-
-theend:
-    set_vim_var_dict(VV_VAL, NULL);
-    restore_vimvar(VV_VAL, &save_val);
-    return retval;
+    return checkitem_common(context, NULL, dict);
 }
 
 /*
