aboutsummaryrefslogtreecommitdiffstats
path: root/src/eval.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/eval.c')
-rw-r--r--src/eval.c48
1 files changed, 21 insertions, 27 deletions
diff --git a/src/eval.c b/src/eval.c
index c64a40b955d..28478956e35 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -951,16 +951,15 @@ usage: (let VARLIST BODY...) */)
951 (Lisp_Object args) 951 (Lisp_Object args)
952{ 952{
953 Lisp_Object *temps, tem, lexenv; 953 Lisp_Object *temps, tem, lexenv;
954 Lisp_Object elt, varlist; 954 Lisp_Object elt;
955 ptrdiff_t count = SPECPDL_INDEX (); 955 ptrdiff_t count = SPECPDL_INDEX ();
956 ptrdiff_t argnum; 956 ptrdiff_t argnum;
957 USE_SAFE_ALLOCA; 957 USE_SAFE_ALLOCA;
958 958
959 varlist = XCAR (args); 959 Lisp_Object varlist = XCAR (args);
960 CHECK_LIST (varlist);
961 960
962 /* Make space to hold the values to give the bound variables. */ 961 /* Make space to hold the values to give the bound variables. */
963 EMACS_INT varlist_len = XFIXNAT (Flength (varlist)); 962 EMACS_INT varlist_len = list_length (varlist);
964 SAFE_ALLOCA_LISP (temps, varlist_len); 963 SAFE_ALLOCA_LISP (temps, varlist_len);
965 ptrdiff_t nvars = varlist_len; 964 ptrdiff_t nvars = varlist_len;
966 965
@@ -2263,14 +2262,15 @@ eval_sub (Lisp_Object form)
2263 if (SUBRP (fun)) 2262 if (SUBRP (fun))
2264 { 2263 {
2265 Lisp_Object args_left = original_args; 2264 Lisp_Object args_left = original_args;
2266 Lisp_Object numargs = Flength (args_left); 2265 ptrdiff_t numargs = list_length (args_left);
2267 2266
2268 check_cons_list (); 2267 check_cons_list ();
2269 2268
2270 if (XFIXNUM (numargs) < XSUBR (fun)->min_args 2269 if (numargs < XSUBR (fun)->min_args
2271 || (XSUBR (fun)->max_args >= 0 2270 || (XSUBR (fun)->max_args >= 0
2272 && XSUBR (fun)->max_args < XFIXNUM (numargs))) 2271 && XSUBR (fun)->max_args < numargs))
2273 xsignal2 (Qwrong_number_of_arguments, original_fun, numargs); 2272 xsignal2 (Qwrong_number_of_arguments, original_fun,
2273 make_fixnum (numargs));
2274 2274
2275 else if (XSUBR (fun)->max_args == UNEVALLED) 2275 else if (XSUBR (fun)->max_args == UNEVALLED)
2276 val = (XSUBR (fun)->function.aUNEVALLED) (args_left); 2276 val = (XSUBR (fun)->function.aUNEVALLED) (args_left);
@@ -2281,9 +2281,9 @@ eval_sub (Lisp_Object form)
2281 ptrdiff_t argnum = 0; 2281 ptrdiff_t argnum = 0;
2282 USE_SAFE_ALLOCA; 2282 USE_SAFE_ALLOCA;
2283 2283
2284 SAFE_ALLOCA_LISP (vals, XFIXNUM (numargs)); 2284 SAFE_ALLOCA_LISP (vals, numargs);
2285 2285
2286 while (CONSP (args_left) && argnum < XFIXNUM (numargs)) 2286 while (CONSP (args_left) && argnum < numargs)
2287 { 2287 {
2288 Lisp_Object arg = XCAR (args_left); 2288 Lisp_Object arg = XCAR (args_left);
2289 args_left = XCDR (args_left); 2289 args_left = XCDR (args_left);
@@ -2313,7 +2313,7 @@ eval_sub (Lisp_Object form)
2313 args_left = Fcdr (args_left); 2313 args_left = Fcdr (args_left);
2314 } 2314 }
2315 2315
2316 set_backtrace_args (specpdl + count, argvals, XFIXNUM (numargs)); 2316 set_backtrace_args (specpdl + count, argvals, numargs);
2317 2317
2318 switch (i) 2318 switch (i)
2319 { 2319 {
@@ -2417,16 +2417,13 @@ Thus, (apply \\='+ 1 2 \\='(3 4)) returns 10.
2417usage: (apply FUNCTION &rest ARGUMENTS) */) 2417usage: (apply FUNCTION &rest ARGUMENTS) */)
2418 (ptrdiff_t nargs, Lisp_Object *args) 2418 (ptrdiff_t nargs, Lisp_Object *args)
2419{ 2419{
2420 ptrdiff_t i, numargs, funcall_nargs; 2420 ptrdiff_t i, funcall_nargs;
2421 register Lisp_Object *funcall_args = NULL; 2421 Lisp_Object *funcall_args = NULL;
2422 register Lisp_Object spread_arg = args[nargs - 1]; 2422 Lisp_Object spread_arg = args[nargs - 1];
2423 Lisp_Object fun = args[0]; 2423 Lisp_Object fun = args[0];
2424 Lisp_Object retval;
2425 USE_SAFE_ALLOCA; 2424 USE_SAFE_ALLOCA;
2426 2425
2427 CHECK_LIST (spread_arg); 2426 ptrdiff_t numargs = list_length (spread_arg);
2428
2429 numargs = XFIXNUM (Flength (spread_arg));
2430 2427
2431 if (numargs == 0) 2428 if (numargs == 0)
2432 return Ffuncall (nargs - 1, args); 2429 return Ffuncall (nargs - 1, args);
@@ -2476,7 +2473,7 @@ usage: (apply FUNCTION &rest ARGUMENTS) */)
2476 spread_arg = XCDR (spread_arg); 2473 spread_arg = XCDR (spread_arg);
2477 } 2474 }
2478 2475
2479 retval = Ffuncall (funcall_nargs, funcall_args); 2476 Lisp_Object retval = Ffuncall (funcall_nargs, funcall_args);
2480 2477
2481 SAFE_FREE (); 2478 SAFE_FREE ();
2482 return retval; 2479 return retval;
@@ -2974,25 +2971,22 @@ funcall_subr (struct Lisp_Subr *subr, ptrdiff_t numargs, Lisp_Object *args)
2974static Lisp_Object 2971static Lisp_Object
2975apply_lambda (Lisp_Object fun, Lisp_Object args, ptrdiff_t count) 2972apply_lambda (Lisp_Object fun, Lisp_Object args, ptrdiff_t count)
2976{ 2973{
2977 Lisp_Object args_left;
2978 ptrdiff_t i;
2979 EMACS_INT numargs;
2980 Lisp_Object *arg_vector; 2974 Lisp_Object *arg_vector;
2981 Lisp_Object tem; 2975 Lisp_Object tem;
2982 USE_SAFE_ALLOCA; 2976 USE_SAFE_ALLOCA;
2983 2977
2984 numargs = XFIXNAT (Flength (args)); 2978 ptrdiff_t numargs = list_length (args);
2985 SAFE_ALLOCA_LISP (arg_vector, numargs); 2979 SAFE_ALLOCA_LISP (arg_vector, numargs);
2986 args_left = args; 2980 Lisp_Object args_left = args;
2987 2981
2988 for (i = 0; i < numargs; ) 2982 for (ptrdiff_t i = 0; i < numargs; i++)
2989 { 2983 {
2990 tem = Fcar (args_left), args_left = Fcdr (args_left); 2984 tem = Fcar (args_left), args_left = Fcdr (args_left);
2991 tem = eval_sub (tem); 2985 tem = eval_sub (tem);
2992 arg_vector[i++] = tem; 2986 arg_vector[i] = tem;
2993 } 2987 }
2994 2988
2995 set_backtrace_args (specpdl + count, arg_vector, i); 2989 set_backtrace_args (specpdl + count, arg_vector, numargs);
2996 tem = funcall_lambda (fun, numargs, arg_vector); 2990 tem = funcall_lambda (fun, numargs, arg_vector);
2997 2991
2998 check_cons_list (); 2992 check_cons_list ();