ww: reject case-fold package and source collisions
This commit is contained in:
@@ -1052,6 +1052,396 @@ type sepchild = struct {
|
||||
context: i32,
|
||||
};
|
||||
|
||||
type sepfoldrange = struct {
|
||||
lo: u32,
|
||||
hi: u32,
|
||||
stride: u32,
|
||||
delta: i32,
|
||||
};
|
||||
|
||||
// Unicode 15.0 simple-fold minima generated from Go 1.26.5's byte-pinned
|
||||
// tables. The folded spelling is request-only collision state.
|
||||
let sepfoldranges: [210]sepfoldrange = [
|
||||
sepfoldrange { lo = 0x000041u32, hi = 0x00005au32, stride = 1u32, delta = 32i32 },
|
||||
sepfoldrange { lo = 0x0000e0u32, hi = 0x0000f6u32, stride = 1u32, delta = -32i32 },
|
||||
sepfoldrange { lo = 0x0000f8u32, hi = 0x0000feu32, stride = 1u32, delta = -32i32 },
|
||||
sepfoldrange { lo = 0x000101u32, hi = 0x00012fu32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x000133u32, hi = 0x000137u32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x00013au32, hi = 0x000148u32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x00014bu32, hi = 0x000177u32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x000178u32, hi = 0x000178u32, stride = 1u32, delta = -121i32 },
|
||||
sepfoldrange { lo = 0x00017au32, hi = 0x00017eu32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x00017fu32, hi = 0x00017fu32, stride = 1u32, delta = -268i32 },
|
||||
sepfoldrange { lo = 0x000183u32, hi = 0x000185u32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x000188u32, hi = 0x000188u32, stride = 1u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x00018cu32, hi = 0x00018cu32, stride = 1u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x000192u32, hi = 0x000192u32, stride = 1u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x000199u32, hi = 0x000199u32, stride = 1u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x0001a1u32, hi = 0x0001a5u32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x0001a8u32, hi = 0x0001a8u32, stride = 1u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x0001adu32, hi = 0x0001adu32, stride = 1u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x0001b0u32, hi = 0x0001b0u32, stride = 1u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x0001b4u32, hi = 0x0001b6u32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x0001b9u32, hi = 0x0001b9u32, stride = 1u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x0001bdu32, hi = 0x0001bdu32, stride = 1u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x0001c5u32, hi = 0x0001c5u32, stride = 1u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x0001c6u32, hi = 0x0001c6u32, stride = 1u32, delta = -2i32 },
|
||||
sepfoldrange { lo = 0x0001c8u32, hi = 0x0001c8u32, stride = 1u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x0001c9u32, hi = 0x0001c9u32, stride = 1u32, delta = -2i32 },
|
||||
sepfoldrange { lo = 0x0001cbu32, hi = 0x0001cbu32, stride = 1u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x0001ccu32, hi = 0x0001ccu32, stride = 1u32, delta = -2i32 },
|
||||
sepfoldrange { lo = 0x0001ceu32, hi = 0x0001dcu32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x0001ddu32, hi = 0x0001ddu32, stride = 1u32, delta = -79i32 },
|
||||
sepfoldrange { lo = 0x0001dfu32, hi = 0x0001efu32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x0001f2u32, hi = 0x0001f2u32, stride = 1u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x0001f3u32, hi = 0x0001f3u32, stride = 1u32, delta = -2i32 },
|
||||
sepfoldrange { lo = 0x0001f5u32, hi = 0x0001f5u32, stride = 1u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x0001f6u32, hi = 0x0001f6u32, stride = 1u32, delta = -97i32 },
|
||||
sepfoldrange { lo = 0x0001f7u32, hi = 0x0001f7u32, stride = 1u32, delta = -56i32 },
|
||||
sepfoldrange { lo = 0x0001f9u32, hi = 0x00021fu32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x000220u32, hi = 0x000220u32, stride = 1u32, delta = -130i32 },
|
||||
sepfoldrange { lo = 0x000223u32, hi = 0x000233u32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x00023cu32, hi = 0x00023cu32, stride = 1u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x00023du32, hi = 0x00023du32, stride = 1u32, delta = -163i32 },
|
||||
sepfoldrange { lo = 0x000242u32, hi = 0x000242u32, stride = 1u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x000243u32, hi = 0x000243u32, stride = 1u32, delta = -195i32 },
|
||||
sepfoldrange { lo = 0x000247u32, hi = 0x00024fu32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x000253u32, hi = 0x000253u32, stride = 1u32, delta = -210i32 },
|
||||
sepfoldrange { lo = 0x000254u32, hi = 0x000254u32, stride = 1u32, delta = -206i32 },
|
||||
sepfoldrange { lo = 0x000256u32, hi = 0x000257u32, stride = 1u32, delta = -205i32 },
|
||||
sepfoldrange { lo = 0x000259u32, hi = 0x000259u32, stride = 1u32, delta = -202i32 },
|
||||
sepfoldrange { lo = 0x00025bu32, hi = 0x00025bu32, stride = 1u32, delta = -203i32 },
|
||||
sepfoldrange { lo = 0x000260u32, hi = 0x000260u32, stride = 1u32, delta = -205i32 },
|
||||
sepfoldrange { lo = 0x000263u32, hi = 0x000263u32, stride = 1u32, delta = -207i32 },
|
||||
sepfoldrange { lo = 0x000268u32, hi = 0x000268u32, stride = 1u32, delta = -209i32 },
|
||||
sepfoldrange { lo = 0x000269u32, hi = 0x000269u32, stride = 1u32, delta = -211i32 },
|
||||
sepfoldrange { lo = 0x00026fu32, hi = 0x00026fu32, stride = 1u32, delta = -211i32 },
|
||||
sepfoldrange { lo = 0x000272u32, hi = 0x000272u32, stride = 1u32, delta = -213i32 },
|
||||
sepfoldrange { lo = 0x000275u32, hi = 0x000275u32, stride = 1u32, delta = -214i32 },
|
||||
sepfoldrange { lo = 0x000280u32, hi = 0x000280u32, stride = 1u32, delta = -218i32 },
|
||||
sepfoldrange { lo = 0x000283u32, hi = 0x000283u32, stride = 1u32, delta = -218i32 },
|
||||
sepfoldrange { lo = 0x000288u32, hi = 0x000288u32, stride = 1u32, delta = -218i32 },
|
||||
sepfoldrange { lo = 0x000289u32, hi = 0x000289u32, stride = 1u32, delta = -69i32 },
|
||||
sepfoldrange { lo = 0x00028au32, hi = 0x00028bu32, stride = 1u32, delta = -217i32 },
|
||||
sepfoldrange { lo = 0x00028cu32, hi = 0x00028cu32, stride = 1u32, delta = -71i32 },
|
||||
sepfoldrange { lo = 0x000292u32, hi = 0x000292u32, stride = 1u32, delta = -219i32 },
|
||||
sepfoldrange { lo = 0x000371u32, hi = 0x000373u32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x000377u32, hi = 0x000377u32, stride = 1u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x000399u32, hi = 0x000399u32, stride = 1u32, delta = -84i32 },
|
||||
sepfoldrange { lo = 0x00039cu32, hi = 0x00039cu32, stride = 1u32, delta = -743i32 },
|
||||
sepfoldrange { lo = 0x0003acu32, hi = 0x0003acu32, stride = 1u32, delta = -38i32 },
|
||||
sepfoldrange { lo = 0x0003adu32, hi = 0x0003afu32, stride = 1u32, delta = -37i32 },
|
||||
sepfoldrange { lo = 0x0003b1u32, hi = 0x0003b8u32, stride = 1u32, delta = -32i32 },
|
||||
sepfoldrange { lo = 0x0003b9u32, hi = 0x0003b9u32, stride = 1u32, delta = -116i32 },
|
||||
sepfoldrange { lo = 0x0003bau32, hi = 0x0003bbu32, stride = 1u32, delta = -32i32 },
|
||||
sepfoldrange { lo = 0x0003bcu32, hi = 0x0003bcu32, stride = 1u32, delta = -775i32 },
|
||||
sepfoldrange { lo = 0x0003bdu32, hi = 0x0003c1u32, stride = 1u32, delta = -32i32 },
|
||||
sepfoldrange { lo = 0x0003c2u32, hi = 0x0003c2u32, stride = 1u32, delta = -31i32 },
|
||||
sepfoldrange { lo = 0x0003c3u32, hi = 0x0003cbu32, stride = 1u32, delta = -32i32 },
|
||||
sepfoldrange { lo = 0x0003ccu32, hi = 0x0003ccu32, stride = 1u32, delta = -64i32 },
|
||||
sepfoldrange { lo = 0x0003cdu32, hi = 0x0003ceu32, stride = 1u32, delta = -63i32 },
|
||||
sepfoldrange { lo = 0x0003d0u32, hi = 0x0003d0u32, stride = 1u32, delta = -62i32 },
|
||||
sepfoldrange { lo = 0x0003d1u32, hi = 0x0003d1u32, stride = 1u32, delta = -57i32 },
|
||||
sepfoldrange { lo = 0x0003d5u32, hi = 0x0003d5u32, stride = 1u32, delta = -47i32 },
|
||||
sepfoldrange { lo = 0x0003d6u32, hi = 0x0003d6u32, stride = 1u32, delta = -54i32 },
|
||||
sepfoldrange { lo = 0x0003d7u32, hi = 0x0003d7u32, stride = 1u32, delta = -8i32 },
|
||||
sepfoldrange { lo = 0x0003d9u32, hi = 0x0003efu32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x0003f0u32, hi = 0x0003f0u32, stride = 1u32, delta = -86i32 },
|
||||
sepfoldrange { lo = 0x0003f1u32, hi = 0x0003f1u32, stride = 1u32, delta = -80i32 },
|
||||
sepfoldrange { lo = 0x0003f3u32, hi = 0x0003f3u32, stride = 1u32, delta = -116i32 },
|
||||
sepfoldrange { lo = 0x0003f4u32, hi = 0x0003f4u32, stride = 1u32, delta = -92i32 },
|
||||
sepfoldrange { lo = 0x0003f5u32, hi = 0x0003f5u32, stride = 1u32, delta = -96i32 },
|
||||
sepfoldrange { lo = 0x0003f8u32, hi = 0x0003f8u32, stride = 1u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x0003f9u32, hi = 0x0003f9u32, stride = 1u32, delta = -7i32 },
|
||||
sepfoldrange { lo = 0x0003fbu32, hi = 0x0003fbu32, stride = 1u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x0003fdu32, hi = 0x0003ffu32, stride = 1u32, delta = -130i32 },
|
||||
sepfoldrange { lo = 0x000430u32, hi = 0x00044fu32, stride = 1u32, delta = -32i32 },
|
||||
sepfoldrange { lo = 0x000450u32, hi = 0x00045fu32, stride = 1u32, delta = -80i32 },
|
||||
sepfoldrange { lo = 0x000461u32, hi = 0x000481u32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x00048bu32, hi = 0x0004bfu32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x0004c2u32, hi = 0x0004ceu32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x0004cfu32, hi = 0x0004cfu32, stride = 1u32, delta = -15i32 },
|
||||
sepfoldrange { lo = 0x0004d1u32, hi = 0x00052fu32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x000561u32, hi = 0x000586u32, stride = 1u32, delta = -48i32 },
|
||||
sepfoldrange { lo = 0x0013f8u32, hi = 0x0013fdu32, stride = 1u32, delta = -8i32 },
|
||||
sepfoldrange { lo = 0x001c80u32, hi = 0x001c80u32, stride = 1u32, delta = -6254i32 },
|
||||
sepfoldrange { lo = 0x001c81u32, hi = 0x001c81u32, stride = 1u32, delta = -6253i32 },
|
||||
sepfoldrange { lo = 0x001c82u32, hi = 0x001c82u32, stride = 1u32, delta = -6244i32 },
|
||||
sepfoldrange { lo = 0x001c83u32, hi = 0x001c84u32, stride = 1u32, delta = -6242i32 },
|
||||
sepfoldrange { lo = 0x001c85u32, hi = 0x001c85u32, stride = 1u32, delta = -6243i32 },
|
||||
sepfoldrange { lo = 0x001c86u32, hi = 0x001c86u32, stride = 1u32, delta = -6236i32 },
|
||||
sepfoldrange { lo = 0x001c87u32, hi = 0x001c87u32, stride = 1u32, delta = -6181i32 },
|
||||
sepfoldrange { lo = 0x001c90u32, hi = 0x001cbau32, stride = 1u32, delta = -3008i32 },
|
||||
sepfoldrange { lo = 0x001cbdu32, hi = 0x001cbfu32, stride = 1u32, delta = -3008i32 },
|
||||
sepfoldrange { lo = 0x001e01u32, hi = 0x001e95u32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x001e9bu32, hi = 0x001e9bu32, stride = 1u32, delta = -59i32 },
|
||||
sepfoldrange { lo = 0x001e9eu32, hi = 0x001e9eu32, stride = 1u32, delta = -7615i32 },
|
||||
sepfoldrange { lo = 0x001ea1u32, hi = 0x001effu32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x001f08u32, hi = 0x001f0fu32, stride = 1u32, delta = -8i32 },
|
||||
sepfoldrange { lo = 0x001f18u32, hi = 0x001f1du32, stride = 1u32, delta = -8i32 },
|
||||
sepfoldrange { lo = 0x001f28u32, hi = 0x001f2fu32, stride = 1u32, delta = -8i32 },
|
||||
sepfoldrange { lo = 0x001f38u32, hi = 0x001f3fu32, stride = 1u32, delta = -8i32 },
|
||||
sepfoldrange { lo = 0x001f48u32, hi = 0x001f4du32, stride = 1u32, delta = -8i32 },
|
||||
sepfoldrange { lo = 0x001f59u32, hi = 0x001f5fu32, stride = 2u32, delta = -8i32 },
|
||||
sepfoldrange { lo = 0x001f68u32, hi = 0x001f6fu32, stride = 1u32, delta = -8i32 },
|
||||
sepfoldrange { lo = 0x001f88u32, hi = 0x001f8fu32, stride = 1u32, delta = -8i32 },
|
||||
sepfoldrange { lo = 0x001f98u32, hi = 0x001f9fu32, stride = 1u32, delta = -8i32 },
|
||||
sepfoldrange { lo = 0x001fa8u32, hi = 0x001fafu32, stride = 1u32, delta = -8i32 },
|
||||
sepfoldrange { lo = 0x001fb8u32, hi = 0x001fb9u32, stride = 1u32, delta = -8i32 },
|
||||
sepfoldrange { lo = 0x001fbau32, hi = 0x001fbbu32, stride = 1u32, delta = -74i32 },
|
||||
sepfoldrange { lo = 0x001fbcu32, hi = 0x001fbcu32, stride = 1u32, delta = -9i32 },
|
||||
sepfoldrange { lo = 0x001fbeu32, hi = 0x001fbeu32, stride = 1u32, delta = -7289i32 },
|
||||
sepfoldrange { lo = 0x001fc8u32, hi = 0x001fcbu32, stride = 1u32, delta = -86i32 },
|
||||
sepfoldrange { lo = 0x001fccu32, hi = 0x001fccu32, stride = 1u32, delta = -9i32 },
|
||||
sepfoldrange { lo = 0x001fd8u32, hi = 0x001fd9u32, stride = 1u32, delta = -8i32 },
|
||||
sepfoldrange { lo = 0x001fdau32, hi = 0x001fdbu32, stride = 1u32, delta = -100i32 },
|
||||
sepfoldrange { lo = 0x001fe8u32, hi = 0x001fe9u32, stride = 1u32, delta = -8i32 },
|
||||
sepfoldrange { lo = 0x001feau32, hi = 0x001febu32, stride = 1u32, delta = -112i32 },
|
||||
sepfoldrange { lo = 0x001fecu32, hi = 0x001fecu32, stride = 1u32, delta = -7i32 },
|
||||
sepfoldrange { lo = 0x001ff8u32, hi = 0x001ff9u32, stride = 1u32, delta = -128i32 },
|
||||
sepfoldrange { lo = 0x001ffau32, hi = 0x001ffbu32, stride = 1u32, delta = -126i32 },
|
||||
sepfoldrange { lo = 0x001ffcu32, hi = 0x001ffcu32, stride = 1u32, delta = -9i32 },
|
||||
sepfoldrange { lo = 0x002126u32, hi = 0x002126u32, stride = 1u32, delta = -7549i32 },
|
||||
sepfoldrange { lo = 0x00212au32, hi = 0x00212au32, stride = 1u32, delta = -8383i32 },
|
||||
sepfoldrange { lo = 0x00212bu32, hi = 0x00212bu32, stride = 1u32, delta = -8294i32 },
|
||||
sepfoldrange { lo = 0x00214eu32, hi = 0x00214eu32, stride = 1u32, delta = -28i32 },
|
||||
sepfoldrange { lo = 0x002170u32, hi = 0x00217fu32, stride = 1u32, delta = -16i32 },
|
||||
sepfoldrange { lo = 0x002184u32, hi = 0x002184u32, stride = 1u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x0024d0u32, hi = 0x0024e9u32, stride = 1u32, delta = -26i32 },
|
||||
sepfoldrange { lo = 0x002c30u32, hi = 0x002c5fu32, stride = 1u32, delta = -48i32 },
|
||||
sepfoldrange { lo = 0x002c61u32, hi = 0x002c61u32, stride = 1u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x002c62u32, hi = 0x002c62u32, stride = 1u32, delta = -10743i32 },
|
||||
sepfoldrange { lo = 0x002c63u32, hi = 0x002c63u32, stride = 1u32, delta = -3814i32 },
|
||||
sepfoldrange { lo = 0x002c64u32, hi = 0x002c64u32, stride = 1u32, delta = -10727i32 },
|
||||
sepfoldrange { lo = 0x002c65u32, hi = 0x002c65u32, stride = 1u32, delta = -10795i32 },
|
||||
sepfoldrange { lo = 0x002c66u32, hi = 0x002c66u32, stride = 1u32, delta = -10792i32 },
|
||||
sepfoldrange { lo = 0x002c68u32, hi = 0x002c6cu32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x002c6du32, hi = 0x002c6du32, stride = 1u32, delta = -10780i32 },
|
||||
sepfoldrange { lo = 0x002c6eu32, hi = 0x002c6eu32, stride = 1u32, delta = -10749i32 },
|
||||
sepfoldrange { lo = 0x002c6fu32, hi = 0x002c6fu32, stride = 1u32, delta = -10783i32 },
|
||||
sepfoldrange { lo = 0x002c70u32, hi = 0x002c70u32, stride = 1u32, delta = -10782i32 },
|
||||
sepfoldrange { lo = 0x002c73u32, hi = 0x002c73u32, stride = 1u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x002c76u32, hi = 0x002c76u32, stride = 1u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x002c7eu32, hi = 0x002c7fu32, stride = 1u32, delta = -10815i32 },
|
||||
sepfoldrange { lo = 0x002c81u32, hi = 0x002ce3u32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x002cecu32, hi = 0x002ceeu32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x002cf3u32, hi = 0x002cf3u32, stride = 1u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x002d00u32, hi = 0x002d25u32, stride = 1u32, delta = -7264i32 },
|
||||
sepfoldrange { lo = 0x002d27u32, hi = 0x002d27u32, stride = 1u32, delta = -7264i32 },
|
||||
sepfoldrange { lo = 0x002d2du32, hi = 0x002d2du32, stride = 1u32, delta = -7264i32 },
|
||||
sepfoldrange { lo = 0x00a641u32, hi = 0x00a649u32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x00a64au32, hi = 0x00a64au32, stride = 1u32, delta = -35266i32 },
|
||||
sepfoldrange { lo = 0x00a64bu32, hi = 0x00a64bu32, stride = 1u32, delta = -35267i32 },
|
||||
sepfoldrange { lo = 0x00a64du32, hi = 0x00a66du32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x00a681u32, hi = 0x00a69bu32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x00a723u32, hi = 0x00a72fu32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x00a733u32, hi = 0x00a76fu32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x00a77au32, hi = 0x00a77cu32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x00a77du32, hi = 0x00a77du32, stride = 1u32, delta = -35332i32 },
|
||||
sepfoldrange { lo = 0x00a77fu32, hi = 0x00a787u32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x00a78cu32, hi = 0x00a78cu32, stride = 1u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x00a78du32, hi = 0x00a78du32, stride = 1u32, delta = -42280i32 },
|
||||
sepfoldrange { lo = 0x00a791u32, hi = 0x00a793u32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x00a797u32, hi = 0x00a7a9u32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x00a7aau32, hi = 0x00a7aau32, stride = 1u32, delta = -42308i32 },
|
||||
sepfoldrange { lo = 0x00a7abu32, hi = 0x00a7abu32, stride = 1u32, delta = -42319i32 },
|
||||
sepfoldrange { lo = 0x00a7acu32, hi = 0x00a7acu32, stride = 1u32, delta = -42315i32 },
|
||||
sepfoldrange { lo = 0x00a7adu32, hi = 0x00a7adu32, stride = 1u32, delta = -42305i32 },
|
||||
sepfoldrange { lo = 0x00a7aeu32, hi = 0x00a7aeu32, stride = 1u32, delta = -42308i32 },
|
||||
sepfoldrange { lo = 0x00a7b0u32, hi = 0x00a7b0u32, stride = 1u32, delta = -42258i32 },
|
||||
sepfoldrange { lo = 0x00a7b1u32, hi = 0x00a7b1u32, stride = 1u32, delta = -42282i32 },
|
||||
sepfoldrange { lo = 0x00a7b2u32, hi = 0x00a7b2u32, stride = 1u32, delta = -42261i32 },
|
||||
sepfoldrange { lo = 0x00a7b5u32, hi = 0x00a7c3u32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x00a7c4u32, hi = 0x00a7c4u32, stride = 1u32, delta = -48i32 },
|
||||
sepfoldrange { lo = 0x00a7c5u32, hi = 0x00a7c5u32, stride = 1u32, delta = -42307i32 },
|
||||
sepfoldrange { lo = 0x00a7c6u32, hi = 0x00a7c6u32, stride = 1u32, delta = -35384i32 },
|
||||
sepfoldrange { lo = 0x00a7c8u32, hi = 0x00a7cau32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x00a7d1u32, hi = 0x00a7d1u32, stride = 1u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x00a7d7u32, hi = 0x00a7d9u32, stride = 2u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x00a7f6u32, hi = 0x00a7f6u32, stride = 1u32, delta = -1i32 },
|
||||
sepfoldrange { lo = 0x00ab53u32, hi = 0x00ab53u32, stride = 1u32, delta = -928i32 },
|
||||
sepfoldrange { lo = 0x00ab70u32, hi = 0x00abbfu32, stride = 1u32, delta = -38864i32 },
|
||||
sepfoldrange { lo = 0x00ff41u32, hi = 0x00ff5au32, stride = 1u32, delta = -32i32 },
|
||||
sepfoldrange { lo = 0x010428u32, hi = 0x01044fu32, stride = 1u32, delta = -40i32 },
|
||||
sepfoldrange { lo = 0x0104d8u32, hi = 0x0104fbu32, stride = 1u32, delta = -40i32 },
|
||||
sepfoldrange { lo = 0x010597u32, hi = 0x0105a1u32, stride = 1u32, delta = -39i32 },
|
||||
sepfoldrange { lo = 0x0105a3u32, hi = 0x0105b1u32, stride = 1u32, delta = -39i32 },
|
||||
sepfoldrange { lo = 0x0105b3u32, hi = 0x0105b9u32, stride = 1u32, delta = -39i32 },
|
||||
sepfoldrange { lo = 0x0105bbu32, hi = 0x0105bcu32, stride = 1u32, delta = -39i32 },
|
||||
sepfoldrange { lo = 0x010cc0u32, hi = 0x010cf2u32, stride = 1u32, delta = -64i32 },
|
||||
sepfoldrange { lo = 0x0118c0u32, hi = 0x0118dfu32, stride = 1u32, delta = -32i32 },
|
||||
sepfoldrange { lo = 0x016e60u32, hi = 0x016e7fu32, stride = 1u32, delta = -32i32 },
|
||||
sepfoldrange { lo = 0x01e922u32, hi = 0x01e943u32, stride = 1u32, delta = -34i32 },
|
||||
];
|
||||
|
||||
// Go 1.26.5 strconv.IsPrint tables for byte-stable %q-style diagnostics.
|
||||
let sepprint16: [424]u16 = [
|
||||
0x0020u16, 0x007eu16, 0x00a1u16, 0x0377u16, 0x037au16, 0x037fu16, 0x0384u16, 0x0556u16,
|
||||
0x0559u16, 0x058au16, 0x058du16, 0x05c7u16, 0x05d0u16, 0x05eau16, 0x05efu16, 0x05f4u16,
|
||||
0x0606u16, 0x070du16, 0x0710u16, 0x074au16, 0x074du16, 0x07b1u16, 0x07c0u16, 0x07fau16,
|
||||
0x07fdu16, 0x082du16, 0x0830u16, 0x085bu16, 0x085eu16, 0x086au16, 0x0870u16, 0x088eu16,
|
||||
0x0898u16, 0x098cu16, 0x098fu16, 0x0990u16, 0x0993u16, 0x09b2u16, 0x09b6u16, 0x09b9u16,
|
||||
0x09bcu16, 0x09c4u16, 0x09c7u16, 0x09c8u16, 0x09cbu16, 0x09ceu16, 0x09d7u16, 0x09d7u16,
|
||||
0x09dcu16, 0x09e3u16, 0x09e6u16, 0x09feu16, 0x0a01u16, 0x0a0au16, 0x0a0fu16, 0x0a10u16,
|
||||
0x0a13u16, 0x0a39u16, 0x0a3cu16, 0x0a42u16, 0x0a47u16, 0x0a48u16, 0x0a4bu16, 0x0a4du16,
|
||||
0x0a51u16, 0x0a51u16, 0x0a59u16, 0x0a5eu16, 0x0a66u16, 0x0a76u16, 0x0a81u16, 0x0ab9u16,
|
||||
0x0abcu16, 0x0acdu16, 0x0ad0u16, 0x0ad0u16, 0x0ae0u16, 0x0ae3u16, 0x0ae6u16, 0x0af1u16,
|
||||
0x0af9u16, 0x0b0cu16, 0x0b0fu16, 0x0b10u16, 0x0b13u16, 0x0b39u16, 0x0b3cu16, 0x0b44u16,
|
||||
0x0b47u16, 0x0b48u16, 0x0b4bu16, 0x0b4du16, 0x0b55u16, 0x0b57u16, 0x0b5cu16, 0x0b63u16,
|
||||
0x0b66u16, 0x0b77u16, 0x0b82u16, 0x0b8au16, 0x0b8eu16, 0x0b95u16, 0x0b99u16, 0x0b9fu16,
|
||||
0x0ba3u16, 0x0ba4u16, 0x0ba8u16, 0x0baau16, 0x0baeu16, 0x0bb9u16, 0x0bbeu16, 0x0bc2u16,
|
||||
0x0bc6u16, 0x0bcdu16, 0x0bd0u16, 0x0bd0u16, 0x0bd7u16, 0x0bd7u16, 0x0be6u16, 0x0bfau16,
|
||||
0x0c00u16, 0x0c39u16, 0x0c3cu16, 0x0c4du16, 0x0c55u16, 0x0c5au16, 0x0c5du16, 0x0c5du16,
|
||||
0x0c60u16, 0x0c63u16, 0x0c66u16, 0x0c6fu16, 0x0c77u16, 0x0cb9u16, 0x0cbcu16, 0x0ccdu16,
|
||||
0x0cd5u16, 0x0cd6u16, 0x0cddu16, 0x0ce3u16, 0x0ce6u16, 0x0cf3u16, 0x0d00u16, 0x0d4fu16,
|
||||
0x0d54u16, 0x0d63u16, 0x0d66u16, 0x0d96u16, 0x0d9au16, 0x0dbdu16, 0x0dc0u16, 0x0dc6u16,
|
||||
0x0dcau16, 0x0dcau16, 0x0dcfu16, 0x0ddfu16, 0x0de6u16, 0x0defu16, 0x0df2u16, 0x0df4u16,
|
||||
0x0e01u16, 0x0e3au16, 0x0e3fu16, 0x0e5bu16, 0x0e81u16, 0x0ebdu16, 0x0ec0u16, 0x0ed9u16,
|
||||
0x0edcu16, 0x0edfu16, 0x0f00u16, 0x0f6cu16, 0x0f71u16, 0x0fdau16, 0x1000u16, 0x10c7u16,
|
||||
0x10cdu16, 0x10cdu16, 0x10d0u16, 0x124du16, 0x1250u16, 0x125du16, 0x1260u16, 0x128du16,
|
||||
0x1290u16, 0x12b5u16, 0x12b8u16, 0x12c5u16, 0x12c8u16, 0x1315u16, 0x1318u16, 0x135au16,
|
||||
0x135du16, 0x137cu16, 0x1380u16, 0x1399u16, 0x13a0u16, 0x13f5u16, 0x13f8u16, 0x13fdu16,
|
||||
0x1400u16, 0x169cu16, 0x16a0u16, 0x16f8u16, 0x1700u16, 0x1715u16, 0x171fu16, 0x1736u16,
|
||||
0x1740u16, 0x1753u16, 0x1760u16, 0x1773u16, 0x1780u16, 0x17ddu16, 0x17e0u16, 0x17e9u16,
|
||||
0x17f0u16, 0x17f9u16, 0x1800u16, 0x1819u16, 0x1820u16, 0x1878u16, 0x1880u16, 0x18aau16,
|
||||
0x18b0u16, 0x18f5u16, 0x1900u16, 0x192bu16, 0x1930u16, 0x193bu16, 0x1940u16, 0x1940u16,
|
||||
0x1944u16, 0x196du16, 0x1970u16, 0x1974u16, 0x1980u16, 0x19abu16, 0x19b0u16, 0x19c9u16,
|
||||
0x19d0u16, 0x19dau16, 0x19deu16, 0x1a1bu16, 0x1a1eu16, 0x1a7cu16, 0x1a7fu16, 0x1a89u16,
|
||||
0x1a90u16, 0x1a99u16, 0x1aa0u16, 0x1aadu16, 0x1ab0u16, 0x1aceu16, 0x1b00u16, 0x1b4cu16,
|
||||
0x1b50u16, 0x1bf3u16, 0x1bfcu16, 0x1c37u16, 0x1c3bu16, 0x1c49u16, 0x1c4du16, 0x1c88u16,
|
||||
0x1c90u16, 0x1cbau16, 0x1cbdu16, 0x1cc7u16, 0x1cd0u16, 0x1cfau16, 0x1d00u16, 0x1f15u16,
|
||||
0x1f18u16, 0x1f1du16, 0x1f20u16, 0x1f45u16, 0x1f48u16, 0x1f4du16, 0x1f50u16, 0x1f7du16,
|
||||
0x1f80u16, 0x1fd3u16, 0x1fd6u16, 0x1fefu16, 0x1ff2u16, 0x1ffeu16, 0x2010u16, 0x2027u16,
|
||||
0x2030u16, 0x205eu16, 0x2070u16, 0x2071u16, 0x2074u16, 0x209cu16, 0x20a0u16, 0x20c0u16,
|
||||
0x20d0u16, 0x20f0u16, 0x2100u16, 0x218bu16, 0x2190u16, 0x2426u16, 0x2440u16, 0x244au16,
|
||||
0x2460u16, 0x2b73u16, 0x2b76u16, 0x2cf3u16, 0x2cf9u16, 0x2d27u16, 0x2d2du16, 0x2d2du16,
|
||||
0x2d30u16, 0x2d67u16, 0x2d6fu16, 0x2d70u16, 0x2d7fu16, 0x2d96u16, 0x2da0u16, 0x2e5du16,
|
||||
0x2e80u16, 0x2ef3u16, 0x2f00u16, 0x2fd5u16, 0x2ff0u16, 0x2ffbu16, 0x3001u16, 0x3096u16,
|
||||
0x3099u16, 0x30ffu16, 0x3105u16, 0x31e3u16, 0x31f0u16, 0xa48cu16, 0xa490u16, 0xa4c6u16,
|
||||
0xa4d0u16, 0xa62bu16, 0xa640u16, 0xa6f7u16, 0xa700u16, 0xa7cau16, 0xa7d0u16, 0xa7d9u16,
|
||||
0xa7f2u16, 0xa82cu16, 0xa830u16, 0xa839u16, 0xa840u16, 0xa877u16, 0xa880u16, 0xa8c5u16,
|
||||
0xa8ceu16, 0xa8d9u16, 0xa8e0u16, 0xa953u16, 0xa95fu16, 0xa97cu16, 0xa980u16, 0xa9d9u16,
|
||||
0xa9deu16, 0xaa36u16, 0xaa40u16, 0xaa4du16, 0xaa50u16, 0xaa59u16, 0xaa5cu16, 0xaac2u16,
|
||||
0xaadbu16, 0xaaf6u16, 0xab01u16, 0xab06u16, 0xab09u16, 0xab0eu16, 0xab11u16, 0xab16u16,
|
||||
0xab20u16, 0xab6bu16, 0xab70u16, 0xabedu16, 0xabf0u16, 0xabf9u16, 0xac00u16, 0xd7a3u16,
|
||||
0xd7b0u16, 0xd7c6u16, 0xd7cbu16, 0xd7fbu16, 0xf900u16, 0xfa6du16, 0xfa70u16, 0xfad9u16,
|
||||
0xfb00u16, 0xfb06u16, 0xfb13u16, 0xfb17u16, 0xfb1du16, 0xfbc2u16, 0xfbd3u16, 0xfd8fu16,
|
||||
0xfd92u16, 0xfdc7u16, 0xfdcfu16, 0xfdcfu16, 0xfdf0u16, 0xfe19u16, 0xfe20u16, 0xfe6bu16,
|
||||
0xfe70u16, 0xfefcu16, 0xff01u16, 0xffbeu16, 0xffc2u16, 0xffc7u16, 0xffcau16, 0xffcfu16,
|
||||
0xffd2u16, 0xffd7u16, 0xffdau16, 0xffdcu16, 0xffe0u16, 0xffeeu16, 0xfffcu16, 0xfffdu16,
|
||||
];
|
||||
|
||||
let sepnotprint16: [133]u16 = [
|
||||
0x00adu16, 0x038bu16, 0x038du16, 0x03a2u16, 0x0530u16, 0x0590u16, 0x061cu16, 0x06ddu16,
|
||||
0x083fu16, 0x085fu16, 0x08e2u16, 0x0984u16, 0x09a9u16, 0x09b1u16, 0x09deu16, 0x0a04u16,
|
||||
0x0a29u16, 0x0a31u16, 0x0a34u16, 0x0a37u16, 0x0a3du16, 0x0a5du16, 0x0a84u16, 0x0a8eu16,
|
||||
0x0a92u16, 0x0aa9u16, 0x0ab1u16, 0x0ab4u16, 0x0ac6u16, 0x0acau16, 0x0b00u16, 0x0b04u16,
|
||||
0x0b29u16, 0x0b31u16, 0x0b34u16, 0x0b5eu16, 0x0b84u16, 0x0b91u16, 0x0b9bu16, 0x0b9du16,
|
||||
0x0bc9u16, 0x0c0du16, 0x0c11u16, 0x0c29u16, 0x0c45u16, 0x0c49u16, 0x0c57u16, 0x0c8du16,
|
||||
0x0c91u16, 0x0ca9u16, 0x0cb4u16, 0x0cc5u16, 0x0cc9u16, 0x0cdfu16, 0x0cf0u16, 0x0d0du16,
|
||||
0x0d11u16, 0x0d45u16, 0x0d49u16, 0x0d80u16, 0x0d84u16, 0x0db2u16, 0x0dbcu16, 0x0dd5u16,
|
||||
0x0dd7u16, 0x0e83u16, 0x0e85u16, 0x0e8bu16, 0x0ea4u16, 0x0ea6u16, 0x0ec5u16, 0x0ec7u16,
|
||||
0x0ecfu16, 0x0f48u16, 0x0f98u16, 0x0fbdu16, 0x0fcdu16, 0x10c6u16, 0x1249u16, 0x1257u16,
|
||||
0x1259u16, 0x1289u16, 0x12b1u16, 0x12bfu16, 0x12c1u16, 0x12d7u16, 0x1311u16, 0x1680u16,
|
||||
0x176du16, 0x1771u16, 0x180eu16, 0x191fu16, 0x1a5fu16, 0x1b7fu16, 0x1f58u16, 0x1f5au16,
|
||||
0x1f5cu16, 0x1f5eu16, 0x1fb5u16, 0x1fc5u16, 0x1fdcu16, 0x1ff5u16, 0x208fu16, 0x2b96u16,
|
||||
0x2d26u16, 0x2da7u16, 0x2dafu16, 0x2db7u16, 0x2dbfu16, 0x2dc7u16, 0x2dcfu16, 0x2dd7u16,
|
||||
0x2ddfu16, 0x2e9au16, 0x3040u16, 0x3130u16, 0x318fu16, 0x321fu16, 0xa7d2u16, 0xa7d4u16,
|
||||
0xa9ceu16, 0xa9ffu16, 0xab27u16, 0xab2fu16, 0xfb37u16, 0xfb3du16, 0xfb3fu16, 0xfb42u16,
|
||||
0xfb45u16, 0xfe53u16, 0xfe67u16, 0xfe75u16, 0xffe7u16,
|
||||
];
|
||||
|
||||
let sepprint32: [508]u32 = [
|
||||
0x010000u32, 0x01004du32, 0x010050u32, 0x01005du32, 0x010080u32, 0x0100fau32, 0x010100u32, 0x010102u32,
|
||||
0x010107u32, 0x010133u32, 0x010137u32, 0x01019cu32, 0x0101a0u32, 0x0101a0u32, 0x0101d0u32, 0x0101fdu32,
|
||||
0x010280u32, 0x01029cu32, 0x0102a0u32, 0x0102d0u32, 0x0102e0u32, 0x0102fbu32, 0x010300u32, 0x010323u32,
|
||||
0x01032du32, 0x01034au32, 0x010350u32, 0x01037au32, 0x010380u32, 0x0103c3u32, 0x0103c8u32, 0x0103d5u32,
|
||||
0x010400u32, 0x01049du32, 0x0104a0u32, 0x0104a9u32, 0x0104b0u32, 0x0104d3u32, 0x0104d8u32, 0x0104fbu32,
|
||||
0x010500u32, 0x010527u32, 0x010530u32, 0x010563u32, 0x01056fu32, 0x0105bcu32, 0x010600u32, 0x010736u32,
|
||||
0x010740u32, 0x010755u32, 0x010760u32, 0x010767u32, 0x010780u32, 0x0107bau32, 0x010800u32, 0x010805u32,
|
||||
0x010808u32, 0x010838u32, 0x01083cu32, 0x01083cu32, 0x01083fu32, 0x01089eu32, 0x0108a7u32, 0x0108afu32,
|
||||
0x0108e0u32, 0x0108f5u32, 0x0108fbu32, 0x01091bu32, 0x01091fu32, 0x010939u32, 0x01093fu32, 0x01093fu32,
|
||||
0x010980u32, 0x0109b7u32, 0x0109bcu32, 0x0109cfu32, 0x0109d2u32, 0x010a06u32, 0x010a0cu32, 0x010a35u32,
|
||||
0x010a38u32, 0x010a3au32, 0x010a3fu32, 0x010a48u32, 0x010a50u32, 0x010a58u32, 0x010a60u32, 0x010a9fu32,
|
||||
0x010ac0u32, 0x010ae6u32, 0x010aebu32, 0x010af6u32, 0x010b00u32, 0x010b35u32, 0x010b39u32, 0x010b55u32,
|
||||
0x010b58u32, 0x010b72u32, 0x010b78u32, 0x010b91u32, 0x010b99u32, 0x010b9cu32, 0x010ba9u32, 0x010bafu32,
|
||||
0x010c00u32, 0x010c48u32, 0x010c80u32, 0x010cb2u32, 0x010cc0u32, 0x010cf2u32, 0x010cfau32, 0x010d27u32,
|
||||
0x010d30u32, 0x010d39u32, 0x010e60u32, 0x010eadu32, 0x010eb0u32, 0x010eb1u32, 0x010efdu32, 0x010f27u32,
|
||||
0x010f30u32, 0x010f59u32, 0x010f70u32, 0x010f89u32, 0x010fb0u32, 0x010fcbu32, 0x010fe0u32, 0x010ff6u32,
|
||||
0x011000u32, 0x01104du32, 0x011052u32, 0x011075u32, 0x01107fu32, 0x0110c2u32, 0x0110d0u32, 0x0110e8u32,
|
||||
0x0110f0u32, 0x0110f9u32, 0x011100u32, 0x011147u32, 0x011150u32, 0x011176u32, 0x011180u32, 0x0111f4u32,
|
||||
0x011200u32, 0x011241u32, 0x011280u32, 0x0112a9u32, 0x0112b0u32, 0x0112eau32, 0x0112f0u32, 0x0112f9u32,
|
||||
0x011300u32, 0x01130cu32, 0x01130fu32, 0x011310u32, 0x011313u32, 0x011344u32, 0x011347u32, 0x011348u32,
|
||||
0x01134bu32, 0x01134du32, 0x011350u32, 0x011350u32, 0x011357u32, 0x011357u32, 0x01135du32, 0x011363u32,
|
||||
0x011366u32, 0x01136cu32, 0x011370u32, 0x011374u32, 0x011400u32, 0x011461u32, 0x011480u32, 0x0114c7u32,
|
||||
0x0114d0u32, 0x0114d9u32, 0x011580u32, 0x0115b5u32, 0x0115b8u32, 0x0115ddu32, 0x011600u32, 0x011644u32,
|
||||
0x011650u32, 0x011659u32, 0x011660u32, 0x01166cu32, 0x011680u32, 0x0116b9u32, 0x0116c0u32, 0x0116c9u32,
|
||||
0x011700u32, 0x01171au32, 0x01171du32, 0x01172bu32, 0x011730u32, 0x011746u32, 0x011800u32, 0x01183bu32,
|
||||
0x0118a0u32, 0x0118f2u32, 0x0118ffu32, 0x011906u32, 0x011909u32, 0x011909u32, 0x01190cu32, 0x011938u32,
|
||||
0x01193bu32, 0x011946u32, 0x011950u32, 0x011959u32, 0x0119a0u32, 0x0119a7u32, 0x0119aau32, 0x0119d7u32,
|
||||
0x0119dau32, 0x0119e4u32, 0x011a00u32, 0x011a47u32, 0x011a50u32, 0x011aa2u32, 0x011ab0u32, 0x011af8u32,
|
||||
0x011b00u32, 0x011b09u32, 0x011c00u32, 0x011c45u32, 0x011c50u32, 0x011c6cu32, 0x011c70u32, 0x011c8fu32,
|
||||
0x011c92u32, 0x011cb6u32, 0x011d00u32, 0x011d36u32, 0x011d3au32, 0x011d47u32, 0x011d50u32, 0x011d59u32,
|
||||
0x011d60u32, 0x011d98u32, 0x011da0u32, 0x011da9u32, 0x011ee0u32, 0x011ef8u32, 0x011f00u32, 0x011f3au32,
|
||||
0x011f3eu32, 0x011f59u32, 0x011fb0u32, 0x011fb0u32, 0x011fc0u32, 0x011ff1u32, 0x011fffu32, 0x012399u32,
|
||||
0x012400u32, 0x012474u32, 0x012480u32, 0x012543u32, 0x012f90u32, 0x012ff2u32, 0x013000u32, 0x01342fu32,
|
||||
0x013440u32, 0x013455u32, 0x014400u32, 0x014646u32, 0x016800u32, 0x016a38u32, 0x016a40u32, 0x016a69u32,
|
||||
0x016a6eu32, 0x016ac9u32, 0x016ad0u32, 0x016aedu32, 0x016af0u32, 0x016af5u32, 0x016b00u32, 0x016b45u32,
|
||||
0x016b50u32, 0x016b77u32, 0x016b7du32, 0x016b8fu32, 0x016e40u32, 0x016e9au32, 0x016f00u32, 0x016f4au32,
|
||||
0x016f4fu32, 0x016f87u32, 0x016f8fu32, 0x016f9fu32, 0x016fe0u32, 0x016fe4u32, 0x016ff0u32, 0x016ff1u32,
|
||||
0x017000u32, 0x0187f7u32, 0x018800u32, 0x018cd5u32, 0x018d00u32, 0x018d08u32, 0x01aff0u32, 0x01b122u32,
|
||||
0x01b132u32, 0x01b132u32, 0x01b150u32, 0x01b152u32, 0x01b155u32, 0x01b155u32, 0x01b164u32, 0x01b167u32,
|
||||
0x01b170u32, 0x01b2fbu32, 0x01bc00u32, 0x01bc6au32, 0x01bc70u32, 0x01bc7cu32, 0x01bc80u32, 0x01bc88u32,
|
||||
0x01bc90u32, 0x01bc99u32, 0x01bc9cu32, 0x01bc9fu32, 0x01cf00u32, 0x01cf2du32, 0x01cf30u32, 0x01cf46u32,
|
||||
0x01cf50u32, 0x01cfc3u32, 0x01d000u32, 0x01d0f5u32, 0x01d100u32, 0x01d126u32, 0x01d129u32, 0x01d172u32,
|
||||
0x01d17bu32, 0x01d1eau32, 0x01d200u32, 0x01d245u32, 0x01d2c0u32, 0x01d2d3u32, 0x01d2e0u32, 0x01d2f3u32,
|
||||
0x01d300u32, 0x01d356u32, 0x01d360u32, 0x01d378u32, 0x01d400u32, 0x01d49fu32, 0x01d4a2u32, 0x01d4a2u32,
|
||||
0x01d4a5u32, 0x01d4a6u32, 0x01d4a9u32, 0x01d50au32, 0x01d50du32, 0x01d546u32, 0x01d54au32, 0x01d6a5u32,
|
||||
0x01d6a8u32, 0x01d7cbu32, 0x01d7ceu32, 0x01da8bu32, 0x01da9bu32, 0x01daafu32, 0x01df00u32, 0x01df1eu32,
|
||||
0x01df25u32, 0x01df2au32, 0x01e000u32, 0x01e018u32, 0x01e01bu32, 0x01e02au32, 0x01e030u32, 0x01e06du32,
|
||||
0x01e08fu32, 0x01e08fu32, 0x01e100u32, 0x01e12cu32, 0x01e130u32, 0x01e13du32, 0x01e140u32, 0x01e149u32,
|
||||
0x01e14eu32, 0x01e14fu32, 0x01e290u32, 0x01e2aeu32, 0x01e2c0u32, 0x01e2f9u32, 0x01e2ffu32, 0x01e2ffu32,
|
||||
0x01e4d0u32, 0x01e4f9u32, 0x01e7e0u32, 0x01e8c4u32, 0x01e8c7u32, 0x01e8d6u32, 0x01e900u32, 0x01e94bu32,
|
||||
0x01e950u32, 0x01e959u32, 0x01e95eu32, 0x01e95fu32, 0x01ec71u32, 0x01ecb4u32, 0x01ed01u32, 0x01ed3du32,
|
||||
0x01ee00u32, 0x01ee24u32, 0x01ee27u32, 0x01ee3bu32, 0x01ee42u32, 0x01ee42u32, 0x01ee47u32, 0x01ee54u32,
|
||||
0x01ee57u32, 0x01ee64u32, 0x01ee67u32, 0x01ee9bu32, 0x01eea1u32, 0x01eebbu32, 0x01eef0u32, 0x01eef1u32,
|
||||
0x01f000u32, 0x01f02bu32, 0x01f030u32, 0x01f093u32, 0x01f0a0u32, 0x01f0aeu32, 0x01f0b1u32, 0x01f0f5u32,
|
||||
0x01f100u32, 0x01f1adu32, 0x01f1e6u32, 0x01f202u32, 0x01f210u32, 0x01f23bu32, 0x01f240u32, 0x01f248u32,
|
||||
0x01f250u32, 0x01f251u32, 0x01f260u32, 0x01f265u32, 0x01f300u32, 0x01f6d7u32, 0x01f6dcu32, 0x01f6ecu32,
|
||||
0x01f6f0u32, 0x01f6fcu32, 0x01f700u32, 0x01f776u32, 0x01f77bu32, 0x01f7d9u32, 0x01f7e0u32, 0x01f7ebu32,
|
||||
0x01f7f0u32, 0x01f7f0u32, 0x01f800u32, 0x01f80bu32, 0x01f810u32, 0x01f847u32, 0x01f850u32, 0x01f859u32,
|
||||
0x01f860u32, 0x01f887u32, 0x01f890u32, 0x01f8adu32, 0x01f8b0u32, 0x01f8b1u32, 0x01f900u32, 0x01fa53u32,
|
||||
0x01fa60u32, 0x01fa6du32, 0x01fa70u32, 0x01fa7cu32, 0x01fa80u32, 0x01fa88u32, 0x01fa90u32, 0x01fac5u32,
|
||||
0x01faceu32, 0x01fadbu32, 0x01fae0u32, 0x01fae8u32, 0x01faf0u32, 0x01faf8u32, 0x01fb00u32, 0x01fbcau32,
|
||||
0x01fbf0u32, 0x01fbf9u32, 0x020000u32, 0x02a6dfu32, 0x02a700u32, 0x02b739u32, 0x02b740u32, 0x02b81du32,
|
||||
0x02b820u32, 0x02cea1u32, 0x02ceb0u32, 0x02ebe0u32, 0x02f800u32, 0x02fa1du32, 0x030000u32, 0x03134au32,
|
||||
0x031350u32, 0x0323afu32, 0x0e0100u32, 0x0e01efu32,
|
||||
];
|
||||
|
||||
let sepnotprint32: [112]u16 = [
|
||||
0x000cu16, 0x0027u16, 0x003bu16, 0x003eu16, 0x018fu16, 0x039eu16, 0x057bu16,
|
||||
0x058bu16, 0x0593u16, 0x0596u16, 0x05a2u16, 0x05b2u16, 0x05bau16, 0x0786u16, 0x07b1u16,
|
||||
0x0809u16, 0x0836u16, 0x0856u16, 0x08f3u16, 0x0a04u16, 0x0a14u16, 0x0a18u16, 0x0e7fu16,
|
||||
0x0eaau16, 0x10bdu16, 0x1135u16, 0x11e0u16, 0x1212u16, 0x1287u16, 0x1289u16, 0x128eu16,
|
||||
0x129eu16, 0x1304u16, 0x1329u16, 0x1331u16, 0x1334u16, 0x133au16, 0x145cu16, 0x1914u16,
|
||||
0x1917u16, 0x1936u16, 0x1c09u16, 0x1c37u16, 0x1ca8u16, 0x1d07u16, 0x1d0au16, 0x1d3bu16,
|
||||
0x1d3eu16, 0x1d66u16, 0x1d69u16, 0x1d8fu16, 0x1d92u16, 0x1f11u16, 0x246fu16, 0x6a5fu16,
|
||||
0x6abfu16, 0x6b5au16, 0x6b62u16, 0xaff4u16, 0xaffcu16, 0xafffu16, 0xd455u16, 0xd49du16,
|
||||
0xd4adu16, 0xd4bau16, 0xd4bcu16, 0xd4c4u16, 0xd506u16, 0xd515u16, 0xd51du16, 0xd53au16,
|
||||
0xd53fu16, 0xd545u16, 0xd551u16, 0xdaa0u16, 0xe007u16, 0xe022u16, 0xe025u16, 0xe7e7u16,
|
||||
0xe7ecu16, 0xe7efu16, 0xe7ffu16, 0xee04u16, 0xee20u16, 0xee23u16, 0xee28u16, 0xee33u16,
|
||||
0xee38u16, 0xee3au16, 0xee48u16, 0xee4au16, 0xee4cu16, 0xee50u16, 0xee53u16, 0xee58u16,
|
||||
0xee5au16, 0xee5cu16, 0xee5eu16, 0xee60u16, 0xee63u16, 0xee6bu16, 0xee73u16, 0xee78u16,
|
||||
0xee7du16, 0xee7fu16, 0xee8au16, 0xeea4u16, 0xeeaau16, 0xf0c0u16, 0xf0d0u16, 0xfabeu16,
|
||||
0xfb93u16,
|
||||
];
|
||||
|
||||
type sepfoldentry = struct {
|
||||
scope: *u8, // canonical directory; nil for package identities
|
||||
key: *u8, // request-only Go simple-fold key
|
||||
exact: *u8, // exact canonical identity or selected basename
|
||||
};
|
||||
|
||||
type seppkg = struct {
|
||||
path: *u8, // compiler/import identity derived from importbase
|
||||
importbase: *u8, // canonical ordinary directory import identity
|
||||
@@ -1103,6 +1493,10 @@ type sepgraph = struct {
|
||||
ncontext: i32,
|
||||
supportcontext: i32,
|
||||
identityfailed: bool,
|
||||
packagefolds: []sepfoldentry,
|
||||
npackagefolds: i32,
|
||||
filefolds: []sepfoldentry,
|
||||
nfilefolds: i32,
|
||||
};
|
||||
|
||||
type sepproduct = struct {
|
||||
@@ -1187,6 +1581,11 @@ fn sepallocchildren(cap: i32) ([]sepchild | nomem) = {
|
||||
return value;
|
||||
};
|
||||
|
||||
fn sepallocfoldentries(cap: i32) ([]sepfoldentry | nomem) = {
|
||||
let value: []sepfoldentry = alloc([], cap: u64)?;
|
||||
return value;
|
||||
};
|
||||
|
||||
fn sepdupstr(s: str) (str | nomem) = {
|
||||
let out: str;
|
||||
out.ptr = nil;
|
||||
@@ -1229,6 +1628,7 @@ fn sepallocptrs(cap: i32) ([]*u8 | nomem) = {
|
||||
};
|
||||
|
||||
fn sepallocgraph(pkg: []seppkg, context: []sepcontext) (*sepgraph | nomem) = {
|
||||
let emptyfolds: []sepfoldentry;
|
||||
let value: *sepgraph = alloc(sepgraph{
|
||||
pkg = pkg,
|
||||
n = 0,
|
||||
@@ -1236,6 +1636,10 @@ fn sepallocgraph(pkg: []seppkg, context: []sepcontext) (*sepgraph | nomem) = {
|
||||
ncontext = 0,
|
||||
supportcontext = -1,
|
||||
identityfailed = false,
|
||||
packagefolds = emptyfolds,
|
||||
npackagefolds = 0,
|
||||
filefolds = emptyfolds,
|
||||
nfilefolds = 0,
|
||||
})?;
|
||||
return value;
|
||||
};
|
||||
@@ -1295,6 +1699,28 @@ fn sepreservepackages(g: *sepgraph, need: i32) bool = {
|
||||
return true;
|
||||
};
|
||||
|
||||
fn sepreservefoldentries(entries: *[]sepfoldentry, used: i32,
|
||||
need: i32) bool = {
|
||||
if (need <= entries.len) { return true; };
|
||||
let cap: i32 = sepgrowcap(entries.len, need);
|
||||
if (cap < 0) { return false; };
|
||||
let allocation: ([]sepfoldentry | nomem) = sepallocfoldentries(cap);
|
||||
let next: []sepfoldentry;
|
||||
match (allocation) {
|
||||
case let value: []sepfoldentry => next = value;
|
||||
case nomem => { sepfailnomem(); return false; };
|
||||
};
|
||||
next.len = cap;
|
||||
let i: i32 = 0;
|
||||
for (i < used) { next[i] = (*entries)[i]; i += 1; };
|
||||
if (entries.ptr != nil) {
|
||||
os.free(entries.ptr: *void,
|
||||
(entries.cap: u64) * (size(sepfoldentry): u64));
|
||||
};
|
||||
*entries = next;
|
||||
return true;
|
||||
};
|
||||
|
||||
fn sepreservecontexts(g: *sepgraph, need: i32) bool = {
|
||||
if (need <= g.context.len) { return true; };
|
||||
let cap: i32 = sepgrowcap(g.context.len, need);
|
||||
@@ -1571,6 +1997,369 @@ fn sepdupcstr(src: *u8, n: u64) *u8 = {
|
||||
return out.ptr;
|
||||
};
|
||||
|
||||
// Decode filesystem-name bytes exactly like Go's UTF-8 range operation.
|
||||
// Each malformed byte is one U+FFFD rune, while diagnostics retain the
|
||||
// original byte spelling and quote malformed bytes as \xNN.
|
||||
fn seputf8width(value: *u8, len: u64, index: u64) i32 = {
|
||||
let c: u8 = value[index];
|
||||
if (c < 128u8) { return 1; };
|
||||
if (c >= 194u8 && c <= 223u8 && index + 1u64 < len
|
||||
&& value[index + 1u64] >= 128u8
|
||||
&& value[index + 1u64] <= 191u8) {
|
||||
return 2;
|
||||
};
|
||||
if (index + 2u64 < len && value[index + 2u64] >= 128u8
|
||||
&& value[index + 2u64] <= 191u8) {
|
||||
let c1: u8 = value[index + 1u64];
|
||||
if ((c == 224u8 && c1 >= 160u8 && c1 <= 191u8)
|
||||
|| (c >= 225u8 && c <= 236u8
|
||||
&& c1 >= 128u8 && c1 <= 191u8)
|
||||
|| (c == 237u8 && c1 >= 128u8 && c1 <= 159u8)
|
||||
|| (c >= 238u8 && c <= 239u8
|
||||
&& c1 >= 128u8 && c1 <= 191u8)) {
|
||||
return 3;
|
||||
};
|
||||
};
|
||||
if (index + 3u64 < len && value[index + 2u64] >= 128u8
|
||||
&& value[index + 2u64] <= 191u8
|
||||
&& value[index + 3u64] >= 128u8
|
||||
&& value[index + 3u64] <= 191u8) {
|
||||
let c1: u8 = value[index + 1u64];
|
||||
if ((c == 240u8 && c1 >= 144u8 && c1 <= 191u8)
|
||||
|| (c >= 241u8 && c <= 243u8
|
||||
&& c1 >= 128u8 && c1 <= 191u8)
|
||||
|| (c == 244u8 && c1 >= 128u8 && c1 <= 143u8)) {
|
||||
return 4;
|
||||
};
|
||||
};
|
||||
return 1;
|
||||
};
|
||||
|
||||
fn seputf8rune(value: *u8, index: u64, width: i32) u32 = {
|
||||
let c0: u32 = value[index]: u32;
|
||||
if (width == 1) {
|
||||
if (c0 >= 128u32) { return 0xfffdu32; };
|
||||
return c0;
|
||||
};
|
||||
let c1: u32 = value[index + 1u64]: u32;
|
||||
if (width == 2) {
|
||||
return ((c0 & 31u32) << 6u32) | (c1 & 63u32);
|
||||
};
|
||||
let c2: u32 = value[index + 2u64]: u32;
|
||||
if (width == 3) {
|
||||
return ((c0 & 15u32) << 12u32)
|
||||
| ((c1 & 63u32) << 6u32) | (c2 & 63u32);
|
||||
};
|
||||
let c3: u32 = value[index + 3u64]: u32;
|
||||
return ((c0 & 7u32) << 18u32) | ((c1 & 63u32) << 12u32)
|
||||
| ((c2 & 63u32) << 6u32) | (c3 & 63u32);
|
||||
};
|
||||
|
||||
fn sepfoldrune(r: u32) u32 = {
|
||||
let low: i32 = 0;
|
||||
let high: i32 = sepfoldranges.len;
|
||||
for (low < high) {
|
||||
let middle: i32 = low + (high - low) / 2;
|
||||
if (sepfoldranges[middle].lo <= r) { low = middle + 1; }
|
||||
else { high = middle; };
|
||||
};
|
||||
if (low > 0) {
|
||||
let range: *sepfoldrange = &sepfoldranges[low - 1];
|
||||
if (r <= range.hi && (r - range.lo) % range.stride == 0u32) {
|
||||
if (range.delta < 0) { return r - ((-range.delta): u32); };
|
||||
return r + (range.delta: u32);
|
||||
};
|
||||
};
|
||||
return r;
|
||||
};
|
||||
|
||||
fn seputf8encodedwidth(r: u32) i32 = {
|
||||
if (r <= 0x7fu32) { return 1; };
|
||||
if (r <= 0x7ffu32) { return 2; };
|
||||
if (r <= 0xffffu32) { return 3; };
|
||||
return 4;
|
||||
};
|
||||
|
||||
fn seputf8encode(out: *u8, offset: u64, r: u32) u64 = {
|
||||
if (r <= 0x7fu32) {
|
||||
out[offset] = r: u8;
|
||||
offset += 1u64;
|
||||
} else { if (r <= 0x7ffu32) {
|
||||
out[offset] = (0xc0u32 | (r >> 6u32)): u8;
|
||||
out[offset + 1u64] = (0x80u32 | (r & 0x3fu32)): u8;
|
||||
offset += 2u64;
|
||||
} else { if (r <= 0xffffu32) {
|
||||
out[offset] = (0xe0u32 | (r >> 12u32)): u8;
|
||||
out[offset + 1u64] = (0x80u32 | ((r >> 6u32) & 0x3fu32)): u8;
|
||||
out[offset + 2u64] = (0x80u32 | (r & 0x3fu32)): u8;
|
||||
offset += 3u64;
|
||||
} else {
|
||||
out[offset] = (0xf0u32 | (r >> 18u32)): u8;
|
||||
out[offset + 1u64] = (0x80u32 | ((r >> 12u32) & 0x3fu32)): u8;
|
||||
out[offset + 2u64] = (0x80u32 | ((r >> 6u32) & 0x3fu32)): u8;
|
||||
out[offset + 3u64] = (0x80u32 | (r & 0x3fu32)): u8;
|
||||
offset += 4u64;
|
||||
}; }; };
|
||||
return offset;
|
||||
};
|
||||
|
||||
fn septofold(value: *u8) *u8 = {
|
||||
let len: u64 = cstrlen(value);
|
||||
let total: u64 = 0u64;
|
||||
let i: u64 = 0u64;
|
||||
for (i < len) {
|
||||
let width: i32 = seputf8width(value, len, i);
|
||||
let r: u32 = sepfoldrune(seputf8rune(value, i, width));
|
||||
if (!sepaddbytes(&total, seputf8encodedwidth(r): u64)) {
|
||||
return nil;
|
||||
};
|
||||
i += width: u64;
|
||||
};
|
||||
if (!sepaddbytes(&total, 1u64)) { return nil; };
|
||||
let bytes: []u8;
|
||||
if (!sepmakebytes(total, &bytes)) { return nil; };
|
||||
let offset: u64 = 0u64;
|
||||
i = 0u64;
|
||||
for (i < len) {
|
||||
let width: i32 = seputf8width(value, len, i);
|
||||
let r: u32 = sepfoldrune(seputf8rune(value, i, width));
|
||||
offset = seputf8encode(bytes.ptr, offset, r);
|
||||
i += width: u64;
|
||||
};
|
||||
bytes[offset] = 0u8;
|
||||
return bytes.ptr;
|
||||
};
|
||||
|
||||
fn sepbsearch16(values: []u16, target: u16) i32 = {
|
||||
let low: i32 = 0;
|
||||
let high: i32 = values.len;
|
||||
for (low < high) {
|
||||
let middle: i32 = low + (high - low) / 2;
|
||||
if (values[middle] < target) { low = middle + 1; }
|
||||
else { high = middle; };
|
||||
};
|
||||
return low;
|
||||
};
|
||||
|
||||
fn sepbsearch32(values: []u32, target: u32) i32 = {
|
||||
let low: i32 = 0;
|
||||
let high: i32 = values.len;
|
||||
for (low < high) {
|
||||
let middle: i32 = low + (high - low) / 2;
|
||||
if (values[middle] < target) { low = middle + 1; }
|
||||
else { high = middle; };
|
||||
};
|
||||
return low;
|
||||
};
|
||||
|
||||
fn sepisprint(r: u32) bool = {
|
||||
if (r <= 0xffu32) {
|
||||
if (r >= 0x20u32 && r <= 0x7eu32) { return true; };
|
||||
if (r >= 0xa1u32 && r <= 0xffu32) { return r != 0xadu32; };
|
||||
return false;
|
||||
};
|
||||
if (r < 0x10000u32) {
|
||||
let rr: u16 = r: u16;
|
||||
let i: i32 = sepbsearch16(sepprint16, rr);
|
||||
if (i >= sepprint16.len) { return false; };
|
||||
let start: i32 = i;
|
||||
if (start % 2 != 0) { start -= 1; };
|
||||
if (start + 1 >= sepprint16.len || rr < sepprint16[start]
|
||||
|| sepprint16[start + 1] < rr) { return false; };
|
||||
let excluded: i32 = sepbsearch16(sepnotprint16, rr);
|
||||
return excluded >= sepnotprint16.len
|
||||
|| sepnotprint16[excluded] != rr;
|
||||
};
|
||||
let i: i32 = sepbsearch32(sepprint32, r);
|
||||
if (i >= sepprint32.len) { return false; };
|
||||
let start: i32 = i;
|
||||
if (start % 2 != 0) { start -= 1; };
|
||||
if (start + 1 >= sepprint32.len || r < sepprint32[start]
|
||||
|| sepprint32[start + 1] < r) { return false; };
|
||||
if (r >= 0x20000u32) { return true; };
|
||||
let rr: u16 = (r - 0x10000u32): u16;
|
||||
let excluded: i32 = sepbsearch16(sepnotprint32, rr);
|
||||
return excluded >= sepnotprint32.len || sepnotprint32[excluded] != rr;
|
||||
};
|
||||
|
||||
fn sepputhexbyte(value: u8) void = {
|
||||
let digits: str = "0123456789abcdef";
|
||||
let encoded: [2]u8;
|
||||
let high: i32 = (value / 16u8): i32;
|
||||
let low: i32 = (value % 16u8): i32;
|
||||
encoded[0] = digits[high];
|
||||
encoded[1] = digits[low];
|
||||
os.write(2, &encoded[0], 2u64);
|
||||
};
|
||||
|
||||
fn sepputhexrune(value: u32, digits: i32) void = {
|
||||
let alphabet: str = "0123456789abcdef";
|
||||
let encoded: [8]u8;
|
||||
let i: i32 = digits - 1;
|
||||
for (i >= 0) {
|
||||
let shift: u32 = (i: u32) * 4u32;
|
||||
let digit: i32 = ((value >> shift) & 15u32): i32;
|
||||
encoded[digits - 1 - i] = alphabet[digit];
|
||||
i -= 1;
|
||||
};
|
||||
os.write(2, &encoded[0], digits: u64);
|
||||
};
|
||||
|
||||
fn sepputquoted(value: *u8) void = {
|
||||
cerr("\"");
|
||||
let len: u64 = cstrlen(value);
|
||||
let i: u64 = 0u64;
|
||||
for (i < len) {
|
||||
let c: u8 = value[i];
|
||||
let width: i32 = seputf8width(value, len, i);
|
||||
if (c >= 128u8 && width == 1) {
|
||||
cerr("\\x"); sepputhexbyte(c); i += 1u64; continue;
|
||||
};
|
||||
if (width > 1) {
|
||||
let r: u32 = seputf8rune(value, i, width);
|
||||
if (sepisprint(r)) {
|
||||
os.write(2, value + i, width: u64);
|
||||
} else { if (r < 0x10000u32) {
|
||||
cerr("\\u"); sepputhexrune(r, 4);
|
||||
} else {
|
||||
cerr("\\U"); sepputhexrune(r, 8);
|
||||
}; };
|
||||
i += width: u64;
|
||||
continue;
|
||||
};
|
||||
if (c == '"') { cerr("\\\""); }
|
||||
else { if (c == '\\') { cerr("\\\\"); }
|
||||
else { if (c == 7u8) { cerr("\\a"); }
|
||||
else { if (c == 8u8) { cerr("\\b"); }
|
||||
else { if (c == 12u8) { cerr("\\f"); }
|
||||
else { if (c == '\n') { cerr("\\n"); }
|
||||
else { if (c == '\r') { cerr("\\r"); }
|
||||
else { if (c == '\t') { cerr("\\t"); }
|
||||
else { if (c == 11u8) { cerr("\\v"); }
|
||||
else { if (c < 32u8 || c == 127u8) {
|
||||
cerr("\\x"); sepputhexbyte(c);
|
||||
} else { os.write(2, value + i, 1u64); };
|
||||
};};};};};};};};};
|
||||
i += 1u64;
|
||||
};
|
||||
cerr("\"");
|
||||
};
|
||||
|
||||
fn sepdiagfoldcollision(kind: str, a: *u8, b: *u8) void = {
|
||||
let first: *u8 = a;
|
||||
let second: *u8 = b;
|
||||
if (strings.compare(pathstr(first), pathstr(second)) > 0) {
|
||||
first = b; second = a;
|
||||
};
|
||||
cerr("ww: case-insensitive "); cerr(kind); cerr(" collision: ");
|
||||
sepputquoted(first); cerr(" and "); sepputquoted(second); cerr("\n");
|
||||
};
|
||||
|
||||
fn sepregisterpackagefold(g: *sepgraph, exact: *u8) bool = {
|
||||
let key: *u8 = septofold(exact);
|
||||
if (key == nil) { return false; };
|
||||
let low: i32 = 0;
|
||||
let high: i32 = g.npackagefolds;
|
||||
for (low < high) {
|
||||
let middle: i32 = low + (high - low) / 2;
|
||||
let cmp: i32 = strings.compare(pathstr(g.packagefolds[middle].key),
|
||||
pathstr(key)): i32;
|
||||
if (cmp < 0) { low = middle + 1; } else { high = middle; };
|
||||
};
|
||||
if (low < g.npackagefolds
|
||||
&& cstreq(g.packagefolds[low].key, key)) {
|
||||
os.free(key: *void, cstrlen(key) + 1u64);
|
||||
if (cstreq(g.packagefolds[low].exact, exact)) { return true; };
|
||||
g.identityfailed = true;
|
||||
sepdiagfoldcollision("import", g.packagefolds[low].exact, exact);
|
||||
return false;
|
||||
};
|
||||
let spelling: *u8 = sepdupcstr(exact, cstrlen(exact));
|
||||
if (spelling == nil) {
|
||||
os.free(key: *void, cstrlen(key) + 1u64);
|
||||
return false;
|
||||
};
|
||||
if (g.npackagefolds == SEP_COUNT_MAX
|
||||
|| !sepreservefoldentries(&g.packagefolds, g.npackagefolds,
|
||||
g.npackagefolds + 1)) {
|
||||
if (g.npackagefolds == SEP_COUNT_MAX) { sepfailsize(); };
|
||||
os.free(key: *void, cstrlen(key) + 1u64);
|
||||
os.free(spelling: *void, cstrlen(spelling) + 1u64);
|
||||
return false;
|
||||
};
|
||||
let i: i32 = g.npackagefolds;
|
||||
for (i > low) {
|
||||
g.packagefolds[i] = g.packagefolds[i - 1];
|
||||
i -= 1;
|
||||
};
|
||||
g.packagefolds[low].scope = nil;
|
||||
g.packagefolds[low].key = key;
|
||||
g.packagefolds[low].exact = spelling;
|
||||
g.npackagefolds += 1;
|
||||
return true;
|
||||
};
|
||||
|
||||
fn sepfilefoldcmp(entry: *sepfoldentry, scope: *u8, key: *u8) i32 = {
|
||||
let cmp: i32 = strings.compare(pathstr(entry.scope), pathstr(scope)): i32;
|
||||
if (cmp != 0) { return cmp; };
|
||||
return strings.compare(pathstr(entry.key), pathstr(key)): i32;
|
||||
};
|
||||
|
||||
fn sepregisterfilefold(g: *sepgraph, scope: *u8, source: *u8) bool = {
|
||||
let total: u64 = cstrlen(source);
|
||||
let base: u64 = total;
|
||||
for (base > 0u64 && source[base - 1u64] != '/': u8) { base -= 1u64; };
|
||||
let exact: *u8 = source + base;
|
||||
let key: *u8 = septofold(exact);
|
||||
if (key == nil) { return false; };
|
||||
let low: i32 = 0;
|
||||
let high: i32 = g.nfilefolds;
|
||||
for (low < high) {
|
||||
let middle: i32 = low + (high - low) / 2;
|
||||
let cmp: i32 = sepfilefoldcmp(&g.filefolds[middle], scope, key);
|
||||
if (cmp < 0) { low = middle + 1; } else { high = middle; };
|
||||
};
|
||||
if (low < g.nfilefolds
|
||||
&& sepfilefoldcmp(&g.filefolds[low], scope, key) == 0) {
|
||||
os.free(key: *void, cstrlen(key) + 1u64);
|
||||
if (cstreq(g.filefolds[low].exact, exact)) { return true; };
|
||||
g.identityfailed = true;
|
||||
sepdiagfoldcollision("file name", g.filefolds[low].exact, exact);
|
||||
return false;
|
||||
};
|
||||
let ownedscope: *u8 = sepdupcstr(scope, cstrlen(scope));
|
||||
let spelling: *u8 = sepdupcstr(exact, cstrlen(exact));
|
||||
if (ownedscope == nil || spelling == nil) {
|
||||
os.free(key: *void, cstrlen(key) + 1u64);
|
||||
if (ownedscope != nil) {
|
||||
os.free(ownedscope: *void, cstrlen(ownedscope) + 1u64);
|
||||
};
|
||||
if (spelling != nil) {
|
||||
os.free(spelling: *void, cstrlen(spelling) + 1u64);
|
||||
};
|
||||
return false;
|
||||
};
|
||||
if (g.nfilefolds == SEP_COUNT_MAX
|
||||
|| !sepreservefoldentries(&g.filefolds, g.nfilefolds,
|
||||
g.nfilefolds + 1)) {
|
||||
if (g.nfilefolds == SEP_COUNT_MAX) { sepfailsize(); };
|
||||
os.free(key: *void, cstrlen(key) + 1u64);
|
||||
os.free(ownedscope: *void, cstrlen(ownedscope) + 1u64);
|
||||
os.free(spelling: *void, cstrlen(spelling) + 1u64);
|
||||
return false;
|
||||
};
|
||||
let i: i32 = g.nfilefolds;
|
||||
for (i > low) {
|
||||
g.filefolds[i] = g.filefolds[i - 1];
|
||||
i -= 1;
|
||||
};
|
||||
g.filefolds[low].scope = ownedscope;
|
||||
g.filefolds[low].key = key;
|
||||
g.filefolds[low].exact = spelling;
|
||||
g.nfilefolds += 1;
|
||||
return true;
|
||||
};
|
||||
|
||||
fn sepappendlit(stem: *u8, suffix: str) *u8 = {
|
||||
let need: u64 = 0u64;
|
||||
if (!sepaddbytes(&need, cstrlen(stem))
|
||||
@@ -1974,10 +2763,14 @@ fn sepbindimportbase(g: *sepgraph, pi: i32, base: *u8) i32 = {
|
||||
let p: *seppkg = &g.pkg[pi];
|
||||
if (p.importbase != nil) {
|
||||
if (cstreq(p.importbase, base)) { return 0; };
|
||||
if (p.role != SEP_ROLE_TEST_SUPPORT
|
||||
&& !sepregisterpackagefold(g, base)) { return -1; };
|
||||
g.identityfailed = true;
|
||||
sepdiagdiridentities(p.entry, p.importbase, base);
|
||||
return -1;
|
||||
};
|
||||
if (p.role != SEP_ROLE_TEST_SUPPORT
|
||||
&& !sepregisterpackagefold(g, base)) { return -1; };
|
||||
let candidate: *u8 = sepvariantpath(p.variant, base);
|
||||
if (candidate == nil) { return -1; };
|
||||
let i: i32 = 0;
|
||||
@@ -2042,6 +2835,13 @@ fn sepfindoraddvariant(g: *sepgraph, path: *u8, entry: *u8,
|
||||
cerr(pathstr(entry)); cerr("\n");
|
||||
return -1;
|
||||
};
|
||||
if (isdir != 0 && path[0u64] != 0u8
|
||||
&& role != SEP_ROLE_TEST_SUPPORT
|
||||
&& (reservedimportpath(path) || sepimportbasevalid(path))
|
||||
&& !sepregisterpackagefold(g, path)) {
|
||||
os.free(canon: *void, cstrlen(canon) + 1u64);
|
||||
return -1;
|
||||
};
|
||||
let incoming: *u8 = nil;
|
||||
if (isdir != 0 && path[0u64] != 0u8) {
|
||||
incoming = sepvariantpath(variant, path);
|
||||
@@ -2291,6 +3091,36 @@ fn sepgraphfree(g: *sepgraph) void = {
|
||||
(g.pkg.cap: u64) * (size(seppkg): u64));
|
||||
};
|
||||
i = 0;
|
||||
for (i < g.npackagefolds) {
|
||||
if (g.packagefolds[i].scope != nil) {
|
||||
os.free(g.packagefolds[i].scope: *void,
|
||||
cstrlen(g.packagefolds[i].scope) + 1u64);
|
||||
};
|
||||
os.free(g.packagefolds[i].key: *void,
|
||||
cstrlen(g.packagefolds[i].key) + 1u64);
|
||||
os.free(g.packagefolds[i].exact: *void,
|
||||
cstrlen(g.packagefolds[i].exact) + 1u64);
|
||||
i += 1;
|
||||
};
|
||||
if (g.packagefolds.ptr != nil) {
|
||||
os.free(g.packagefolds.ptr: *void,
|
||||
(g.packagefolds.cap: u64) * (size(sepfoldentry): u64));
|
||||
};
|
||||
i = 0;
|
||||
for (i < g.nfilefolds) {
|
||||
os.free(g.filefolds[i].scope: *void,
|
||||
cstrlen(g.filefolds[i].scope) + 1u64);
|
||||
os.free(g.filefolds[i].key: *void,
|
||||
cstrlen(g.filefolds[i].key) + 1u64);
|
||||
os.free(g.filefolds[i].exact: *void,
|
||||
cstrlen(g.filefolds[i].exact) + 1u64);
|
||||
i += 1;
|
||||
};
|
||||
if (g.filefolds.ptr != nil) {
|
||||
os.free(g.filefolds.ptr: *void,
|
||||
(g.filefolds.cap: u64) * (size(sepfoldentry): u64));
|
||||
};
|
||||
i = 0;
|
||||
for (i < g.ncontext) {
|
||||
if (g.context[i].root != nil) {
|
||||
os.free(g.context[i].root: *void,
|
||||
@@ -3840,6 +4670,12 @@ fn seppreparepkgcontext(g: *sepgraph, pi: i32, context: i32,
|
||||
cerr(": directory contains no WW package sources\n");
|
||||
rc = -1;
|
||||
}; }; };
|
||||
let i: i32 = 0;
|
||||
for (i < g.pkg[pi].nsources && rc == 0) {
|
||||
if (!sepregisterfilefold(g, g.pkg[pi].canon,
|
||||
g.pkg[pi].sources[i])) { rc = -1; };
|
||||
i += 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
if (g.pkg[pi].isdir != 0) {
|
||||
@@ -6517,6 +7353,7 @@ fn buildonesepimpl(selfdir: *u8, src: *u8, entryisdir: i32,
|
||||
};
|
||||
producti += 1;
|
||||
};
|
||||
if (g.identityfailed) { return 1; };
|
||||
if (haverunnabletests) {
|
||||
producti = 0;
|
||||
for (producti < nproducts) {
|
||||
|
||||
Reference in New Issue
Block a user