changeset 56087:3d12da599e18

(Ftry_completion, Fall_completions, Ftest_completion): Avoid calling specbind when completion-regexp-list is empty.
author Andreas Schwab <schwab@suse.de>
date Sun, 13 Jun 2004 22:20:55 +0000
parents c5c08e52e9d6
children a7a676c680d4
files src/minibuf.c
diffstat 1 files changed, 44 insertions(+), 41 deletions(-) [+]
line wrap: on
line diff
--- a/src/minibuf.c	Sun Jun 13 22:14:41 2004 +0000
+++ b/src/minibuf.c	Sun Jun 13 22:20:55 2004 +0000
@@ -1285,20 +1285,21 @@
 	  XSETFASTINT (zero, 0);
 
 	  /* Ignore this element if it fails to match all the regexps.  */
-	  {
-	    int count = SPECPDL_INDEX ();
-	    specbind (Qcase_fold_search, completion_ignore_case ? Qt : Qnil);
-	    for (regexps = Vcompletion_regexp_list; CONSP (regexps);
-		 regexps = XCDR (regexps))
-	      {
-		tem = Fstring_match (XCAR (regexps), eltstring, zero);
-		if (NILP (tem))
-		  break;
-	      }
-	    unbind_to (count, Qnil);
-	    if (CONSP (regexps))
-	      continue;
-	  }
+	  if (CONSP (Vcompletion_regexp_list))
+	    {
+	      int count = SPECPDL_INDEX ();
+	      specbind (Qcase_fold_search, completion_ignore_case ? Qt : Qnil);
+	      for (regexps = Vcompletion_regexp_list; CONSP (regexps);
+		   regexps = XCDR (regexps))
+		{
+		  tem = Fstring_match (XCAR (regexps), eltstring, zero);
+		  if (NILP (tem))
+		    break;
+		}
+	      unbind_to (count, Qnil);
+	      if (CONSP (regexps))
+		continue;
+	    }
 
 	  /* Ignore this element if there is a predicate
 	     and the predicate doesn't like it. */
@@ -1536,20 +1537,21 @@
 	  XSETFASTINT (zero, 0);
 
 	  /* Ignore this element if it fails to match all the regexps.  */
-	  {
-	    int count = SPECPDL_INDEX ();
-	    specbind (Qcase_fold_search, completion_ignore_case ? Qt : Qnil);
-	    for (regexps = Vcompletion_regexp_list; CONSP (regexps);
-		 regexps = XCDR (regexps))
-	      {
-		tem = Fstring_match (XCAR (regexps), eltstring, zero);
-		if (NILP (tem))
-		  break;
-	      }
-	    unbind_to (count, Qnil);
-	    if (CONSP (regexps))
-	      continue;
-	  }
+	  if (CONSP (Vcompletion_regexp_list))
+	    {
+	      int count = SPECPDL_INDEX ();
+	      specbind (Qcase_fold_search, completion_ignore_case ? Qt : Qnil);
+	      for (regexps = Vcompletion_regexp_list; CONSP (regexps);
+		   regexps = XCDR (regexps))
+		{
+		  tem = Fstring_match (XCAR (regexps), eltstring, zero);
+		  if (NILP (tem))
+		    break;
+		}
+	      unbind_to (count, Qnil);
+	      if (CONSP (regexps))
+		continue;
+	    }
 
 	  /* Ignore this element if there is a predicate
 	     and the predicate doesn't like it. */
@@ -1784,19 +1786,20 @@
     return call3 (alist, string, predicate, Qlambda);
 
   /* Reject this element if it fails to match all the regexps.  */
-  {
-    int count = SPECPDL_INDEX ();
-    specbind (Qcase_fold_search, completion_ignore_case ? Qt : Qnil);
-    for (regexps = Vcompletion_regexp_list; CONSP (regexps);
-	 regexps = XCDR (regexps))
-      {
-	if (NILP (Fstring_match (XCAR (regexps),
-				 SYMBOLP (tem) ? string : tem,
-				 Qnil)))
-	  return unbind_to (count, Qnil);
-      }
-    unbind_to (count, Qnil);
-  }
+  if (CONSP (Vcompletion_regexp_list))
+    {
+      int count = SPECPDL_INDEX ();
+      specbind (Qcase_fold_search, completion_ignore_case ? Qt : Qnil);
+      for (regexps = Vcompletion_regexp_list; CONSP (regexps);
+	   regexps = XCDR (regexps))
+	{
+	  if (NILP (Fstring_match (XCAR (regexps),
+				   SYMBOLP (tem) ? string : tem,
+				   Qnil)))
+	    return unbind_to (count, Qnil);
+	}
+      unbind_to (count, Qnil);
+    }
 
   /* Finally, check the predicate.  */
   if (!NILP (predicate))