mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-14 07:30:32 +02:00
Optimize scm_ilength and 'length+'.
* libguile/list.c (scm_ilength): Test for SCM_NULL_OR_NIL_P only after testing scm_is_pair. Conform to GNU coding standards. * libguile/srfi-1.c (scm_srfi1_length_plus): Ditto.
This commit is contained in:
parent
4afca1a066
commit
fc8a90043b
2 changed files with 31 additions and 22 deletions
|
@ -620,20 +620,28 @@ SCM_DEFINE (scm_srfi1_length_plus, "length+", 1, 0, 0,
|
|||
|
||||
do
|
||||
{
|
||||
if (SCM_NULL_OR_NIL_P (hare))
|
||||
return scm_from_size_t (i);
|
||||
if (!scm_is_pair (hare))
|
||||
scm_wrong_type_arg_msg (FUNC_NAME, 1, lst, "proper or circular list");
|
||||
{
|
||||
if (SCM_NULL_OR_NIL_P (hare))
|
||||
return scm_from_size_t (i);
|
||||
else
|
||||
scm_wrong_type_arg_msg (FUNC_NAME, 1, lst,
|
||||
"proper or circular list");
|
||||
}
|
||||
hare = SCM_CDR (hare);
|
||||
i++;
|
||||
if (SCM_NULL_OR_NIL_P (hare))
|
||||
return scm_from_size_t (i);
|
||||
if (!scm_is_pair (hare))
|
||||
scm_wrong_type_arg_msg (FUNC_NAME, 1, lst, "proper or circular list");
|
||||
{
|
||||
if (SCM_NULL_OR_NIL_P (hare))
|
||||
return scm_from_size_t (i);
|
||||
else
|
||||
scm_wrong_type_arg_msg (FUNC_NAME, 1, lst,
|
||||
"proper or circular list");
|
||||
}
|
||||
hare = SCM_CDR (hare);
|
||||
i++;
|
||||
/* For every two steps the hare takes, the tortoise takes one. */
|
||||
tortoise = SCM_CDR(tortoise);
|
||||
tortoise = SCM_CDR (tortoise);
|
||||
}
|
||||
while (!scm_is_eq (hare, tortoise));
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue