From c9b26338e7707144484567d1a8895c8a480de70c Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 9 Nov 2026 00:32:10 +0000 Subject: [PATCH] fix: don't emit duplicate entries for First/Last ranges in prop.c The ", Last>" branch of MakeCLib extended the range but then fell through and also pushed a one-point entry for the last code point, which also kept the next block from merging. Regenerated prop.c: 2462 -> 2440 entries, same lookup results. Co-Authored-By: Claude Opus 5.5 --- UnicodeCLib/prop.c | 34 ++++++---------------------------- util/MakeCLib.lean | 1 + 2 files changed, 7 insertions(+), 28 deletions(-) diff --git a/UnicodeCLib/prop.c b/UnicodeCLib/prop.c index d634ad5e2..3548e13ab 100644 --- a/UnicodeCLib/prop.c +++ b/UnicodeCLib/prop.c @@ -1,7 +1,7 @@ /* THIS IS A GENERATED FILE - DO NOT EDIT */ #include "basic.h" -#define TABLE_SIZE 2462 +#define TABLE_SIZE 2440 static const unicode_data_t table[TABLE_SIZE]; @@ -1271,10 +1271,8 @@ static const unicode_data_t table[] = { {UINT32_C(12977),UINT32_C(12991),UINT64_C(1024)}, {UINT32_C(12992),UINT32_C(13311),UINT64_C(2097152)}, {UINT32_C(13312),UINT32_C(19903),UINT64_C(16)}, -{UINT32_C(19903),UINT32_C(19903),UINT64_C(16)}, {UINT32_C(19904),UINT32_C(19967),UINT64_C(2097152)}, -{UINT32_C(19968),UINT32_C(40959),UINT64_C(16)}, -{UINT32_C(40959),UINT32_C(40980),UINT64_C(16)}, +{UINT32_C(19968),UINT32_C(40980),UINT64_C(16)}, {UINT32_C(40981),UINT32_C(40981),UINT64_C(8)}, {UINT32_C(40982),UINT32_C(42124),UINT64_C(16)}, {UINT32_C(42128),UINT32_C(42182),UINT64_C(2097152)}, @@ -1466,15 +1464,10 @@ static const unicode_data_t table[] = { {UINT32_C(44013),UINT32_C(44013),UINT64_C(32)}, {UINT32_C(44016),UINT32_C(44025),UINT64_C(256)}, {UINT32_C(44032),UINT32_C(55203),UINT64_C(16)}, -{UINT32_C(55203),UINT32_C(55203),UINT64_C(16)}, {UINT32_C(55216),UINT32_C(55238),UINT64_C(16)}, {UINT32_C(55243),UINT32_C(55291),UINT64_C(16)}, -{UINT32_C(55296),UINT32_C(56191),UINT64_C(134217728)}, -{UINT32_C(56191),UINT32_C(56319),UINT64_C(134217728)}, -{UINT32_C(56319),UINT32_C(57343),UINT64_C(134217728)}, -{UINT32_C(57343),UINT32_C(57343),UINT64_C(134217728)}, +{UINT32_C(55296),UINT32_C(57343),UINT64_C(134217728)}, {UINT32_C(57344),UINT32_C(63743),UINT64_C(268435456)}, -{UINT32_C(63743),UINT32_C(63743),UINT64_C(268435456)}, {UINT32_C(63744),UINT32_C(64109),UINT64_C(16)}, {UINT32_C(64112),UINT32_C(64217),UINT64_C(16)}, {UINT32_C(64256),UINT32_C(64262),UINT64_C(2)}, @@ -2167,13 +2160,10 @@ static const unicode_data_t table[] = { {UINT32_C(94192),UINT32_C(94193),UINT64_C(17179869248)}, {UINT32_C(94194),UINT32_C(94195),UINT64_C(8)}, {UINT32_C(94196),UINT32_C(94198),UINT64_C(512)}, -{UINT32_C(94208),UINT32_C(100351),UINT64_C(16)}, -{UINT32_C(100351),UINT32_C(101594),UINT64_C(16)}, +{UINT32_C(94208),UINT32_C(101594),UINT64_C(16)}, {UINT32_C(101631),UINT32_C(101664),UINT64_C(16)}, -{UINT32_C(101664),UINT32_C(101664),UINT64_C(16)}, {UINT32_C(101760),UINT32_C(101874),UINT64_C(16)}, {UINT32_C(101888),UINT32_C(102801),UINT64_C(16)}, -{UINT32_C(102801),UINT32_C(102801),UINT64_C(16)}, {UINT32_C(102816),UINT32_C(102866),UINT64_C(16)}, {UINT32_C(110576),UINT32_C(110579),UINT64_C(8)}, {UINT32_C(110581),UINT32_C(110587),UINT64_C(8)}, @@ -2477,29 +2467,17 @@ static const unicode_data_t table[] = { {UINT32_C(130032),UINT32_C(130041),UINT64_C(256)}, {UINT32_C(130042),UINT32_C(130042),UINT64_C(2097152)}, {UINT32_C(131072),UINT32_C(173791),UINT64_C(16)}, -{UINT32_C(173791),UINT32_C(173791),UINT64_C(16)}, -{UINT32_C(173824),UINT32_C(177983),UINT64_C(16)}, -{UINT32_C(177983),UINT32_C(178206),UINT64_C(16)}, -{UINT32_C(178206),UINT32_C(178206),UINT64_C(16)}, +{UINT32_C(173824),UINT32_C(178206),UINT64_C(16)}, {UINT32_C(178208),UINT32_C(183981),UINT64_C(16)}, -{UINT32_C(183981),UINT32_C(183981),UINT64_C(16)}, {UINT32_C(183984),UINT32_C(191456),UINT64_C(16)}, -{UINT32_C(191456),UINT32_C(191456),UINT64_C(16)}, {UINT32_C(191472),UINT32_C(192093),UINT64_C(16)}, -{UINT32_C(192093),UINT32_C(192093),UINT64_C(16)}, {UINT32_C(194560),UINT32_C(195101),UINT64_C(16)}, {UINT32_C(196608),UINT32_C(201546),UINT64_C(16)}, -{UINT32_C(201546),UINT32_C(201546),UINT64_C(16)}, -{UINT32_C(201552),UINT32_C(205743),UINT64_C(16)}, -{UINT32_C(205743),UINT32_C(210041),UINT64_C(16)}, -{UINT32_C(210041),UINT32_C(210041),UINT64_C(16)}, +{UINT32_C(201552),UINT32_C(210041),UINT64_C(16)}, {UINT32_C(249856),UINT32_C(261183),UINT64_C(16)}, -{UINT32_C(261183),UINT32_C(261183),UINT64_C(16)}, {UINT32_C(917505),UINT32_C(917505),UINT64_C(67108864)}, {UINT32_C(917536),UINT32_C(917631),UINT64_C(67108864)}, {UINT32_C(917760),UINT32_C(917999),UINT64_C(32)}, {UINT32_C(983040),UINT32_C(1048573),UINT64_C(268435456)}, -{UINT32_C(1048573),UINT32_C(1048573),UINT64_C(268435456)}, {UINT32_C(1048576),UINT32_C(1114109),UINT64_C(268435456)}, -{UINT32_C(1114109),UINT32_C(1114109),UINT64_C(268435456)}, }; diff --git a/util/MakeCLib.lean b/util/MakeCLib.lean index 4bf8973d0..9ecc23656 100644 --- a/util/MakeCLib.lean +++ b/util/MakeCLib.lean @@ -31,6 +31,7 @@ def propTable : Array (UInt32 × UInt32 × UInt64) := Id.run do let (c₀, c₁, d₀) := t.back! if data.name.takeEnd 7 == ", Last>" then t := t.pop.push (c₀, c, d) + continue else if c = c₁ + 1 then if d = d₀ then t := t.pop.push (c₀, c, d)