aboutsummaryrefslogtreecommitdiffstats
path: root/src/eval.c
diff options
context:
space:
mode:
authorPaul Eggert2017-01-22 00:18:40 -0800
committerPaul Eggert2017-01-22 00:25:35 -0800
commit0a49f158f1598fb92989f3cbdc238a7e5f1bd8a3 (patch)
tree34ff3896930886b9a072423fdb310d482bec283a /src/eval.c
parentade0652cc2a7103cd910accda8165ff8ee7c719f (diff)
downloademacs-0a49f158f1598fb92989f3cbdc238a7e5f1bd8a3.tar.gz
emacs-0a49f158f1598fb92989f3cbdc238a7e5f1bd8a3.zip
Improve uses of CHECK_LIST etc.
* src/eval.c (FletX): Report an error for invalid constructs like ‘(let* (a . 0))’, so that ‘let*’ is more consistent with ‘let’. (lambda_arity): Use plain CHECK_CONS. * src/fns.c (CHECK_LIST_END): Move from here to lisp.h. (Fcopy_alist): Remove unnecessary CHECK_LIST call, since concat does that for us. (Fnthcdr, Fmember, Fmemql, Fdelete, Fnreverse): Use CHECK_LIST_END, not CHECK_LIST_CONS. This hoists a runtime check out of the loop. (Fmemq): Simplify and use CHECK_LIST_END instead of CHECK_LIST. (Fassq, Fassoc, Frassq, Frassoc): Simplify and use CHECK_LIST_END instead of CAR. (assq_no_quit, assoc_no_quit): Simplify and assume proper list. (Fnconc): Use plain CHECK_CONS, and do-while instead of while loop. * src/fontset.c (Fnew_fontset): * src/frame.c (Fmodify_frame_parameters): Use CHECK_LIST_END at end, rather than CHECK_LIST at start, for a more-complete check. * src/gfilenotify.c (Fgfile_add_watch): Omit unnecessary CHECK_LIST, since Fmember does that for us. * src/lisp.h (lisp_h_CHECK_LIST_CONS, CHECK_LIST_CONS): Remove; no longer used. (CHECK_LIST_END): New inline function.
Diffstat (limited to 'src/eval.c')
-rw-r--r--src/eval.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/src/eval.c b/src/eval.c
index c05c8d8f8de..01e3db44082 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -856,9 +856,7 @@ usage: (let* VARLIST BODY...) */)
856 856
857 lexenv = Vinternal_interpreter_environment; 857 lexenv = Vinternal_interpreter_environment;
858 858
859 varlist = XCAR (args); 859 for (varlist = XCAR (args); CONSP (varlist); varlist = XCDR (varlist))
860 CHECK_LIST (varlist);
861 while (CONSP (varlist))
862 { 860 {
863 QUIT; 861 QUIT;
864 862
@@ -894,9 +892,8 @@ usage: (let* VARLIST BODY...) */)
894 } 892 }
895 else 893 else
896 specbind (var, val); 894 specbind (var, val);
897
898 varlist = XCDR (varlist);
899 } 895 }
896 CHECK_LIST_END (varlist, XCAR (args));
900 897
901 val = Fprogn (XCDR (args)); 898 val = Fprogn (XCDR (args));
902 return unbind_to (count, val); 899 return unbind_to (count, val);
@@ -3098,7 +3095,7 @@ lambda_arity (Lisp_Object fun)
3098 if (EQ (XCAR (fun), Qclosure)) 3095 if (EQ (XCAR (fun), Qclosure))
3099 { 3096 {
3100 fun = XCDR (fun); /* Drop `closure'. */ 3097 fun = XCDR (fun); /* Drop `closure'. */
3101 CHECK_LIST_CONS (fun, fun); 3098 CHECK_CONS (fun);
3102 } 3099 }
3103 syms_left = XCDR (fun); 3100 syms_left = XCDR (fun);
3104 if (CONSP (syms_left)) 3101 if (CONSP (syms_left))