diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/fns.c | 20 |
1 files changed, 11 insertions, 9 deletions
| @@ -1521,7 +1521,7 @@ union double_and_words | |||
| 1521 | EMACS_UINT word[WORDS_PER_DOUBLE]; | 1521 | EMACS_UINT word[WORDS_PER_DOUBLE]; |
| 1522 | }; | 1522 | }; |
| 1523 | 1523 | ||
| 1524 | /* Return true if X and Y are the same floating-point value. | 1524 | /* Return true if the floats X and Y have the same value. |
| 1525 | This looks at X's and Y's representation, since (unlike '==') | 1525 | This looks at X's and Y's representation, since (unlike '==') |
| 1526 | it returns true if X and Y are the same NaN. */ | 1526 | it returns true if X and Y are the same NaN. */ |
| 1527 | static bool | 1527 | static bool |
| @@ -1567,32 +1567,32 @@ DEFUN ("memql", Fmemql, Smemql, 2, 2, 0, | |||
| 1567 | The value is actually the tail of LIST whose car is ELT. */) | 1567 | The value is actually the tail of LIST whose car is ELT. */) |
| 1568 | (Lisp_Object elt, Lisp_Object list) | 1568 | (Lisp_Object elt, Lisp_Object list) |
| 1569 | { | 1569 | { |
| 1570 | Lisp_Object tail = list; | ||
| 1571 | |||
| 1570 | if (FLOATP (elt)) | 1572 | if (FLOATP (elt)) |
| 1571 | { | 1573 | { |
| 1572 | Lisp_Object tail = list; | ||
| 1573 | FOR_EACH_TAIL (tail) | 1574 | FOR_EACH_TAIL (tail) |
| 1574 | { | 1575 | { |
| 1575 | Lisp_Object tem = XCAR (tail); | 1576 | Lisp_Object tem = XCAR (tail); |
| 1576 | if (FLOATP (tem) && same_float (elt, tem)) | 1577 | if (FLOATP (tem) && same_float (elt, tem)) |
| 1577 | return tail; | 1578 | return tail; |
| 1578 | } | 1579 | } |
| 1579 | CHECK_LIST_END (tail, list); | ||
| 1580 | return Qnil; | ||
| 1581 | } | 1580 | } |
| 1582 | else if (BIGNUMP (elt)) | 1581 | else if (BIGNUMP (elt)) |
| 1583 | { | 1582 | { |
| 1584 | Lisp_Object tail = list; | ||
| 1585 | FOR_EACH_TAIL (tail) | 1583 | FOR_EACH_TAIL (tail) |
| 1586 | { | 1584 | { |
| 1587 | Lisp_Object tem = XCAR (tail); | 1585 | Lisp_Object tem = XCAR (tail); |
| 1588 | if (equal_no_quit (elt, tem)) | 1586 | if (BIGNUMP (tem) |
| 1587 | && mpz_cmp (XBIGNUM (elt)->value, XBIGNUM (tem)->value) == 0) | ||
| 1589 | return tail; | 1588 | return tail; |
| 1590 | } | 1589 | } |
| 1591 | CHECK_LIST_END (tail, list); | ||
| 1592 | return Qnil; | ||
| 1593 | } | 1590 | } |
| 1594 | else | 1591 | else |
| 1595 | return Fmemq (elt, list); | 1592 | return Fmemq (elt, list); |
| 1593 | |||
| 1594 | CHECK_LIST_END (tail, list); | ||
| 1595 | return Qnil; | ||
| 1596 | } | 1596 | } |
| 1597 | 1597 | ||
| 1598 | DEFUN ("assq", Fassq, Sassq, 2, 2, 0, | 1598 | DEFUN ("assq", Fassq, Sassq, 2, 2, 0, |
| @@ -2301,7 +2301,9 @@ This differs from numeric comparison: (eql 0.0 -0.0) returns nil and | |||
| 2301 | if (FLOATP (obj1)) | 2301 | if (FLOATP (obj1)) |
| 2302 | return FLOATP (obj2) && same_float (obj1, obj2) ? Qt : Qnil; | 2302 | return FLOATP (obj2) && same_float (obj1, obj2) ? Qt : Qnil; |
| 2303 | else if (BIGNUMP (obj1)) | 2303 | else if (BIGNUMP (obj1)) |
| 2304 | return equal_no_quit (obj1, obj2) ? Qt : Qnil; | 2304 | return ((BIGNUMP (obj2) |
| 2305 | && mpz_cmp (XBIGNUM (obj1)->value, XBIGNUM (obj2)->value) == 0) | ||
| 2306 | ? Qt : Qnil); | ||
| 2305 | else | 2307 | else |
| 2306 | return EQ (obj1, obj2) ? Qt : Qnil; | 2308 | return EQ (obj1, obj2) ? Qt : Qnil; |
| 2307 | } | 2309 | } |