commit 21e272fe4f336827611c4005a56829a0ab02f3f8 (HEAD, refs/remotes/origin/master) Author: Gerd Möllmann Date: Tue Jan 23 06:47:40 2024 +0100 ; Fix DOHASH diff --git a/src/lisp.h b/src/lisp.h index efdb3886141..54d2f4d3dd1 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -2600,7 +2600,9 @@ hash_from_key (struct Lisp_Hash_Table *h, Lisp_Object key) mutate TABLE in any other way. */ #define DOHASH(TABLE, IDXVAR) \ for (ptrdiff_t IDXVAR = 0; IDXVAR < (TABLE)->table_size; IDXVAR++) \ - if (!hash_unused_entry_key_p (HASH_KEY (TABLE, IDXVAR))) + if (hash_unused_entry_key_p (HASH_KEY (TABLE, IDXVAR))) \ + ; \ + else void hash_table_thaw (Lisp_Object hash_table); commit 54abf10dfeeb890fa46c43f13e6c7468a0d945e4 Author: Po Lu Date: Tue Jan 23 10:30:51 2024 +0800 Correct crash when executing IP within twilight zone * src/sfnt.c (sfnt_address_zp2, sfnt_address_zp1) (sfnt_address_zp0): Don't save into X or Y if the zone is set to the twilight zone and they are NULL. diff --git a/src/sfnt.c b/src/sfnt.c index 36a7fbf3ea0..41dba8b486e 100644 --- a/src/sfnt.c +++ b/src/sfnt.c @@ -8563,8 +8563,12 @@ sfnt_address_zp2 (struct sfnt_interpreter *interpreter, if (number >= interpreter->twilight_zone_size) TRAP ("address to ZP2 (twilight zone) out of bounds"); + if (!x || !y) + goto next; + *x = interpreter->twilight_x[number]; *y = interpreter->twilight_y[number]; + next: if (!x_org || !y_org) return; @@ -8614,8 +8618,12 @@ sfnt_address_zp1 (struct sfnt_interpreter *interpreter, if (number >= interpreter->twilight_zone_size) TRAP ("address to ZP1 (twilight zone) out of bounds"); + if (!x || !y) + goto next; + *x = interpreter->twilight_x[number]; *y = interpreter->twilight_y[number]; + next: if (!x_org || !y_org) return; @@ -8665,8 +8673,12 @@ sfnt_address_zp0 (struct sfnt_interpreter *interpreter, if (number >= interpreter->twilight_zone_size) TRAP ("address to ZP0 (twilight zone) out of bounds"); + if (!x || !y) + goto next; + *x = interpreter->twilight_x[number]; *y = interpreter->twilight_y[number]; + next: if (!x_org || !y_org) return; commit a3d10046d9945148c20aa1db4e6ba8ba1bc5eb3e Author: Po Lu Date: Tue Jan 23 09:41:41 2024 +0800 * src/sfnt.c (sfnt_mul_f26dot6_fixed): Correct typo in last change. diff --git a/src/sfnt.c b/src/sfnt.c index ce7765e8f3e..36a7fbf3ea0 100644 --- a/src/sfnt.c +++ b/src/sfnt.c @@ -6554,7 +6554,7 @@ sfnt_mul_f2dot14 (sfnt_f2dot14 a, int32_t b) static sfnt_f26dot6 sfnt_mul_f26dot6_fixed (sfnt_f26dot6 x, sfnt_fixed y) { - return sfnt_mul_fixed (x, y); + return sfnt_mul_fixed_round (x, y); } /* Return the floor of the specified 26.6 fixed point value X. */ commit f821ac29e0cf69316d6c721bafe9b749b47a6db3 Author: Stefan Monnier Date: Mon Jan 22 15:06:24 2024 -0500 * src/regex-emacs.c (forall_firstchar_1): Improve corner case Fixes a "FORALL_FIRSTCHAR: Broken assumption2!!" warning with: "^\\(# *\\)\\([^ ]+?\\) *: *\\(.*?\\(?:\n\\1[ \t]+.*?\\)*\\)[[:space:]]*$" diff --git a/src/regex-emacs.c b/src/regex-emacs.c index dfc6c1fd691..0ec0c6eb63f 100644 --- a/src/regex-emacs.c +++ b/src/regex-emacs.c @@ -2923,8 +2923,18 @@ forall_firstchar_1 (re_char *p, re_char *pend, forward over a subsequent `jump`. Recognize this pattern since that subsequent `jump` is the one that jumps to the loop-entry. */ - newp2 = ((re_opcode_t) *newp2 == jump) - ? extract_address (newp2 + 1) : newp2; + if ((re_opcode_t) *newp2 == jump) + { + re_char *p3 = extract_address (newp2 + 1); + /* Only recognize this pattern if one of the two destinations + is going forward, otherwise we'll fall into the pessimistic + "Both destinations go backward" below. + This is important if the `jump` at newp2 is the end of an + outer loop while the `on_failure_jump` is the end of an + inner loop. */ + if (p3 > p_orig || newp1 > p_orig) + newp2 = p3; + } do_twoway_jump: /* We have to check that both destinations are safe. commit 797c688f4ab33a196477fd85f83f7438d113dc7d Author: Stefan Monnier Date: Mon Jan 22 09:48:48 2024 -0500 * src/pdumper.c (dump_object_needs_dumping_p): Simplify (hash_table_contents): Use DOHASH. diff --git a/src/pdumper.c b/src/pdumper.c index 8d030585c83..bff11ada02c 100644 --- a/src/pdumper.c +++ b/src/pdumper.c @@ -1331,13 +1331,7 @@ dump_queue_dequeue (struct dump_queue *dump_queue, dump_off basis) static bool dump_object_needs_dumping_p (Lisp_Object object) { - /* Some objects, like symbols, are self-representing because they - have invariant bit patterns, but sometimes these objects have - associated data too, and these data-carrying objects need to be - included in the dump despite all references to them being - bitwise-invariant. */ - return (!dump_object_self_representing_p (object) - || dump_object_emacs_ptr (object)); + return !(FIXNUMP (object)); } static void @@ -2651,7 +2645,6 @@ dump_vectorlike_generic (struct dump_context *ctx, static Lisp_Object * hash_table_contents (struct Lisp_Hash_Table *h) { - ptrdiff_t old_size = HASH_TABLE_SIZE (h); ptrdiff_t size = h->count; Lisp_Object *key_and_value = hash_table_alloc_bytes (2 * size * sizeof *key_and_value); @@ -2660,14 +2653,10 @@ hash_table_contents (struct Lisp_Hash_Table *h) /* Make sure key_and_value ends up in the same order; charset.c relies on it by expecting hash table indices to stay constant across the dump. */ - for (ptrdiff_t i = 0; i < old_size; i++) + DOHASH (h, i) { - Lisp_Object key = HASH_KEY (h, i); - if (!hash_unused_entry_key_p (key)) - { - key_and_value[n++] = key; - key_and_value[n++] = HASH_VALUE (h, i); - } + key_and_value[n++] = HASH_KEY (h, i); + key_and_value[n++] = HASH_VALUE (h, i); } return key_and_value; commit 269d3515608e4e91cdd03f90bac9c2a9d5e3d094 Author: Andrea Corallo Date: Mon Jan 22 08:49:17 2024 +0100 Revert "* Update a comp test (bug#68523)" * test/src/comp-tests.el (comp-tests-ret-type-spec-71): Reverts commit c5031a52c5c6ad74fab27d3754700e7457717516 to compensate for 50201e03b9c. diff --git a/test/src/comp-tests.el b/test/src/comp-tests.el index f479d175c43..0aa9e76fa2d 100644 --- a/test/src/comp-tests.el +++ b/test/src/comp-tests.el @@ -1421,7 +1421,7 @@ Return a list of results." (if (= x 0.0) x (error ""))) - '(or (member 0.0 -0.0) (integer 0 0))) + '(or (member -0.0 0.0) (integer 0 0))) ;; 72 ((defun comp-tests-ret-type-spec-f (x) commit e780f98944fbb14a22a2b1e15d0e7cb435f55550 Author: Michael Albinus Date: Mon Jan 22 09:20:46 2024 +0100 * lisp/leim/quail/indian.el (tamil-input): Use `quail' as parent group. diff --git a/lisp/leim/quail/indian.el b/lisp/leim/quail/indian.el index c1348081d58..9ea23ec087c 100644 --- a/lisp/leim/quail/indian.el +++ b/lisp/leim/quail/indian.el @@ -476,7 +476,7 @@ Full key sequences are listed below:" (defgroup tamil-input nil "Translation rules for the Tamil input method." :prefix "tamil-" - :group 'leim) + :group 'quail) (defcustom tamil-translation-rules ;; Vowels.