diff options
| author | Paul Eggert | 2017-01-22 00:18:40 -0800 |
|---|---|---|
| committer | Paul Eggert | 2017-01-22 00:25:35 -0800 |
| commit | 0a49f158f1598fb92989f3cbdc238a7e5f1bd8a3 (patch) | |
| tree | 34ff3896930886b9a072423fdb310d482bec283a /src/eval.c | |
| parent | ade0652cc2a7103cd910accda8165ff8ee7c719f (diff) | |
| download | emacs-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.c | 9 |
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)) |