diff options
author | Mattias EngdegÄrd <mattiase@acm.org> | 2022-08-30 16:44:51 +0200 |
---|---|---|
committer | Mattias EngdegÄrd <mattiase@acm.org> | 2022-08-30 16:48:25 +0200 |
commit | e1e60e51bf324aaa2137075827c4d08a331a7bef (patch) | |
tree | 7eb07197b4db9009b310ca85736076f0a97ac57d /src/fns.c | |
parent | 5cf7b1ada96c2e209580d086d15b1bbe5b345657 (diff) | |
download | emacs-e1e60e51bf324aaa2137075827c4d08a331a7bef.tar.gz |
Accept bignum arguments in `take` and `ntake`
* src/fns.c (Ftake, Fntake): Accept any integer as first argument, for
completeness.
* test/src/fns-tests.el (fns--take-ntake): Add test cases.
Diffstat (limited to 'src/fns.c')
-rw-r--r-- | src/fns.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/fns.c b/src/fns.c index 7e78bba3a04..07102256fed 100644 --- a/src/fns.c +++ b/src/fns.c @@ -1563,7 +1563,15 @@ If N is zero or negative, return nil. If N is greater or equal to the length of LIST, return LIST (or a copy). */) (Lisp_Object n, Lisp_Object list) { - CHECK_FIXNUM (n); + if (BIGNUMP (n)) + { + if (mpz_sgn (*xbignum_val (n)) < 0) + return Qnil; + CHECK_LIST (list); + return list; + } + if (!FIXNUMP (n)) + wrong_type_argument (Qintegerp, n); EMACS_INT m = XFIXNUM (n); if (m <= 0) return Qnil; @@ -1594,7 +1602,15 @@ If N is greater or equal to the length of LIST, return LIST unmodified. Otherwise, return LIST after truncating it. */) (Lisp_Object n, Lisp_Object list) { - CHECK_FIXNUM (n); + if (BIGNUMP (n)) + { + if (mpz_sgn (*xbignum_val (n)) < 0) + return Qnil; + CHECK_LIST (list); + return list; + } + if (!FIXNUMP (n)) + wrong_type_argument (Qintegerp, n); EMACS_INT m = XFIXNUM (n); if (m <= 0) return Qnil; |