]> git.eshelyaron.com Git - emacs.git/commitdiff
(Ftry_completion, Fall_completions, Ftest_completion):
authorAndreas Schwab <schwab@suse.de>
Sun, 13 Jun 2004 22:20:55 +0000 (22:20 +0000)
committerAndreas Schwab <schwab@suse.de>
Sun, 13 Jun 2004 22:20:55 +0000 (22:20 +0000)
Avoid calling specbind when completion-regexp-list is empty.

src/minibuf.c

index c33a133860018039fd6015698cc74d0c12fe42f2..ee37142a4a673d707b6a030135c767eb7b806a94 100644 (file)
@@ -1285,20 +1285,21 @@ is used to further constrain the set of candidates.  */)
          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 @@ are ignored unless STRING itself starts with a space.  */)
          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 @@ the values STRING, PREDICATE and `lambda'.  */)
     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))