[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master 848c90e: Minor fixes for arity ranges in emacs modu
From: |
Paul Eggert |
Subject: |
[Emacs-diffs] master 848c90e: Minor fixes for arity ranges in emacs modules |
Date: |
Sat, 20 May 2017 16:44:01 -0400 (EDT) |
branch: master
commit 848c90e3d43ed7baebab5f2d02d0a9601c6a142b
Author: Paul Eggert <address@hidden>
Commit: Paul Eggert <address@hidden>
Minor fixes for arity ranges in emacs modules
* src/emacs-module.c (module_make_function):
Check that arities fit into fixnums, for func-arity’s benefit.
(funcall_module): Avoid unnecessary conversion to EMACS_INT.
(module_function_arity): Allow arities greater than SHRT_MAX.
---
src/emacs-module.c | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/src/emacs-module.c b/src/emacs-module.c
index 99be4a7..5ab6913 100644
--- a/src/emacs-module.c
+++ b/src/emacs-module.c
@@ -358,8 +358,9 @@ module_make_function (emacs_env *env, ptrdiff_t min_arity,
ptrdiff_t max_arity,
if (! (0 <= min_arity
&& (max_arity < 0
- ? max_arity == emacs_variadic_function
- : min_arity <= max_arity)))
+ ? (min_arity <= MOST_POSITIVE_FIXNUM
+ && max_arity == emacs_variadic_function)
+ : min_arity <= max_arity && max_arity <= MOST_POSITIVE_FIXNUM)))
xsignal2 (Qinvalid_arity, make_number (min_arity), make_number
(max_arity));
struct Lisp_Module_Function *envptr = allocate_module_function ();
@@ -646,12 +647,11 @@ Lisp_Object
funcall_module (const struct Lisp_Module_Function *const envptr,
ptrdiff_t nargs, Lisp_Object *arglist)
{
- EMACS_INT len = nargs;
eassume (0 <= envptr->min_arity);
- if (! (envptr->min_arity <= len
- && len <= (envptr->max_arity < 0 ? PTRDIFF_MAX : envptr->max_arity)))
+ if (! (envptr->min_arity <= nargs
+ && (envptr->max_arity < 0 || nargs <= envptr->max_arity)))
xsignal2 (Qwrong_number_of_arguments, module_format_fun_env (envptr),
- make_number (len));
+ make_number (nargs));
emacs_env pub;
struct emacs_env_private priv;
@@ -663,12 +663,12 @@ funcall_module (const struct Lisp_Module_Function *const
envptr,
args = (emacs_value *) arglist;
else
{
- args = SAFE_ALLOCA (len * sizeof *args);
- for (ptrdiff_t i = 0; i < len; i++)
+ args = SAFE_ALLOCA (nargs * sizeof *args);
+ for (ptrdiff_t i = 0; i < nargs; i++)
args[i] = lisp_to_value (arglist[i]);
}
- emacs_value ret = envptr->subr (&pub, len, args, envptr->data);
+ emacs_value ret = envptr->subr (&pub, nargs, args, envptr->data);
SAFE_FREE ();
eassert (&priv == pub.private_members);
@@ -700,8 +700,8 @@ funcall_module (const struct Lisp_Module_Function *const
envptr,
Lisp_Object
module_function_arity (const struct Lisp_Module_Function *const function)
{
- const short minargs = function->min_arity;
- const short maxargs = function->max_arity;
+ ptrdiff_t minargs = function->min_arity;
+ ptrdiff_t maxargs = function->max_arity;
return Fcons (make_number (minargs),
maxargs == MANY ? Qmany : make_number (maxargs));
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] master 848c90e: Minor fixes for arity ranges in emacs modules,
Paul Eggert <=