diff options
| author | Paul Eggert | 2019-03-04 00:00:39 -0800 |
|---|---|---|
| committer | Paul Eggert | 2019-03-04 00:05:04 -0800 |
| commit | 5c2563a5472cd5580e7af570aa320ac581ad1985 (patch) | |
| tree | fbf88ede49dc0ba527d3925dfc274c230b8cf95f /src/lisp.h | |
| parent | d6b3e5bbc5e14c32f3faad9f1481ec16807ac2fe (diff) | |
| download | emacs-5c2563a5472cd5580e7af570aa320ac581ad1985.tar.gz emacs-5c2563a5472cd5580e7af570aa320ac581ad1985.zip | |
Simplify list creation in C code
The main new thing here is that C code can now say
‘list (a, b, c, d, e, f)’ instead of
‘listn (CONSTYPE_HEAP, 6, a, b, c, d, e, f)’,
thus relieving callers of the responsibility of counting
arguments (plus, the code feels more like Lisp). The old
list1 ... list5 functions remain, as they’re probably a bit
faster for small lists.
* src/alloc.c (cons_listn, pure_listn): New functions.
(listn): Omit enum argument.
All callers changed to use either new ‘list’ or ‘pure_list’ macros.
* src/charset.c (Fdefine_charset_internal):
* src/coding.c (detect_coding_system)
(Fset_terminal_coding_system_internal):
* src/frame.c (frame_size_history_add, adjust_frame_size):
* src/gtkutil.c (xg_frame_set_char_size):
* src/keyboard.c (command_loop_1):
* src/nsfns.m (frame_geometry):
* src/widget.c (set_frame_size):
* src/xfaces.c (Fcolor_distance):
* src/xfns.c (frame_geometry):
* src/xterm.c (x_set_window_size_1):
* src/xwidget.c (Fxwidget_size_request):
Prefer list1i, list2i, etc. to open-coding them.
* src/charset.c (Fset_charset_priority):
* src/nsterm.m (append2):
* src/window.c (window_list):
* src/xfaces.c (Fx_list_fonts):
Use nconc2 instead of open-coding it.
* src/eval.c (eval_sub, backtrace_frame_apply):
* src/kqueue.c (kqueue_generate_event):
* src/nsterm.m (performDragOperation:):
* src/pdumper.c (Fpdumper_stats):
* src/w32.c (init_environment):
Prefer list1, list2, etc. to open-coding them.
* src/font.c (font_list_entities):
Parenthesize to avoid expanding new ‘list’ macro.
* src/gtkutil.c (GETSETUP): Rename from MAKE_FLOAT_PAGE_SETUP
to get lines to fit. Move outside the ‘list’ call, since it’s
now a macro.
* src/keymap.c (Fmake_keymap): Simplify.
* src/lisp.h (list, pure_list): New macros.
(list1i): New function.
Diffstat (limited to 'src/lisp.h')
| -rw-r--r-- | src/lisp.h | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/lisp.h b/src/lisp.h index 2a3eaf38122..4391e173741 100644 --- a/src/lisp.h +++ b/src/lisp.h | |||
| @@ -3782,8 +3782,12 @@ extern Lisp_Object list3 (Lisp_Object, Lisp_Object, Lisp_Object); | |||
| 3782 | extern Lisp_Object list4 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object); | 3782 | extern Lisp_Object list4 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object); |
| 3783 | extern Lisp_Object list5 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, | 3783 | extern Lisp_Object list5 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, |
| 3784 | Lisp_Object); | 3784 | Lisp_Object); |
| 3785 | enum constype {CONSTYPE_HEAP, CONSTYPE_PURE}; | 3785 | extern Lisp_Object listn (ptrdiff_t, Lisp_Object, ...); |
| 3786 | extern Lisp_Object listn (enum constype, ptrdiff_t, Lisp_Object, ...); | 3786 | extern Lisp_Object pure_listn (ptrdiff_t, Lisp_Object, ...); |
| 3787 | #define list(...) \ | ||
| 3788 | listn (ARRAYELTS (((Lisp_Object []) {__VA_ARGS__})), __VA_ARGS__) | ||
| 3789 | #define pure_list(...) \ | ||
| 3790 | pure_listn (ARRAYELTS (((Lisp_Object []) {__VA_ARGS__})), __VA_ARGS__) | ||
| 3787 | 3791 | ||
| 3788 | enum gc_root_type { | 3792 | enum gc_root_type { |
| 3789 | GC_ROOT_STATICPRO, | 3793 | GC_ROOT_STATICPRO, |
| @@ -3800,7 +3804,13 @@ struct gc_root_visitor { | |||
| 3800 | }; | 3804 | }; |
| 3801 | extern void visit_static_gc_roots (struct gc_root_visitor visitor); | 3805 | extern void visit_static_gc_roots (struct gc_root_visitor visitor); |
| 3802 | 3806 | ||
| 3803 | /* Build a frequently used 2/3/4-integer lists. */ | 3807 | /* Build a frequently used 1/2/3/4-integer lists. */ |
| 3808 | |||
| 3809 | INLINE Lisp_Object | ||
| 3810 | list1i (EMACS_INT x) | ||
| 3811 | { | ||
| 3812 | return list1 (make_fixnum (x)); | ||
| 3813 | } | ||
| 3804 | 3814 | ||
| 3805 | INLINE Lisp_Object | 3815 | INLINE Lisp_Object |
| 3806 | list2i (EMACS_INT x, EMACS_INT y) | 3816 | list2i (EMACS_INT x, EMACS_INT y) |