From 5c2563a5472cd5580e7af570aa320ac581ad1985 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Mon, 4 Mar 2019 00:00:39 -0800 Subject: Simplify list creation in C code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- src/coding.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'src/coding.c') diff --git a/src/coding.c b/src/coding.c index e470757f92e..a216460fc2c 100644 --- a/src/coding.c +++ b/src/coding.c @@ -8720,20 +8720,20 @@ detect_coding_system (const unsigned char *src, { detect_info.found = CATEGORY_MASK_RAW_TEXT; id = CODING_SYSTEM_ID (Qno_conversion); - val = list1 (make_fixnum (id)); + val = list1i (id); } else if (! detect_info.rejected && ! detect_info.found) { detect_info.found = CATEGORY_MASK_ANY; id = coding_categories[coding_category_undecided].id; - val = list1 (make_fixnum (id)); + val = list1i (id); } else if (highest) { if (detect_info.found) { detect_info.found = 1 << category; - val = list1 (make_fixnum (this->id)); + val = list1i (this->id); } else for (i = 0; i < coding_category_raw_text; i++) @@ -8741,7 +8741,7 @@ detect_coding_system (const unsigned char *src, { detect_info.found = 1 << coding_priorities[i]; id = coding_categories[coding_priorities[i]].id; - val = list1 (make_fixnum (id)); + val = list1i (id); break; } } @@ -8758,7 +8758,7 @@ detect_coding_system (const unsigned char *src, found |= 1 << category; id = coding_categories[category].id; if (id >= 0) - val = list1 (make_fixnum (id)); + val = list1i (id); } } for (i = coding_category_raw_text - 1; i >= 0; i--) @@ -8783,7 +8783,7 @@ detect_coding_system (const unsigned char *src, this = coding_categories + coding_category_utf_8_sig; else this = coding_categories + coding_category_utf_8_nosig; - val = list1 (make_fixnum (this->id)); + val = list1i (this->id); } } else if (base_category == coding_category_utf_16_auto) @@ -8800,13 +8800,13 @@ detect_coding_system (const unsigned char *src, this = coding_categories + coding_category_utf_16_be_nosig; else this = coding_categories + coding_category_utf_16_le_nosig; - val = list1 (make_fixnum (this->id)); + val = list1i (this->id); } } else { detect_info.found = 1 << XFIXNUM (CODING_ATTR_CATEGORY (attrs)); - val = list1 (make_fixnum (coding.id)); + val = list1i (coding.id); } /* Then, detect eol-format if necessary. */ @@ -9749,7 +9749,7 @@ DEFUN ("set-terminal-coding-system-internal", Fset_terminal_coding_system_intern tset_charset_list (term, (terminal_coding->common_flags & CODING_REQUIRE_ENCODING_MASK ? coding_charset_list (terminal_coding) - : list1 (make_fixnum (charset_ascii)))); + : list1i (charset_ascii))); return Qnil; } @@ -10856,7 +10856,7 @@ syms_of_coding (void) /* Error signaled when there's a problem with detecting a coding system. */ DEFSYM (Qcoding_system_error, "coding-system-error"); Fput (Qcoding_system_error, Qerror_conditions, - listn (CONSTYPE_PURE, 2, Qcoding_system_error, Qerror)); + pure_list (Qcoding_system_error, Qerror)); Fput (Qcoding_system_error, Qerror_message, build_pure_c_string ("Invalid coding system")); @@ -11298,7 +11298,7 @@ internal character representation. */); /* This is already set. plist[7] = args[coding_arg_ascii_compatible_p] = Qt; */ plist[8] = intern_c_string (":charset-list"); - plist[9] = args[coding_arg_charset_list] = Fcons (Qascii, Qnil); + plist[9] = args[coding_arg_charset_list] = list1 (Qascii); plist[11] = args[coding_arg_for_unibyte] = Qnil; plist[13] = build_pure_c_string ("No conversion on encoding, " "automatic conversion on decoding."); -- cgit v1.2.1