summaryrefslogtreecommitdiff
path: root/src/fns.c
diff options
context:
space:
mode:
authorMattias EngdegÄrd <mattiase@acm.org>2022-08-30 16:44:51 +0200
committerMattias EngdegÄrd <mattiase@acm.org>2022-08-30 16:48:25 +0200
commite1e60e51bf324aaa2137075827c4d08a331a7bef (patch)
tree7eb07197b4db9009b310ca85736076f0a97ac57d /src/fns.c
parent5cf7b1ada96c2e209580d086d15b1bbe5b345657 (diff)
downloademacs-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.c20
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;