1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-20 11:33:09 -08:00

(Ftry_completion, Fall_completions, Ftest_completion):

Avoid calling specbind when completion-regexp-list is empty.
This commit is contained in:
Andreas Schwab 2004-06-13 22:20:55 +00:00
parent 7ae8ad948e
commit 774437897d

View 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))