From e9591c24e41ce2ba9623ee7a1bfea085591af775 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 9 Jul 2026 15:47:18 +0000 Subject: [PATCH 1/3] chore(deps): update dependency rust to v1.97.0 --- rust-toolchain.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 100019730ba96..6401d17ecf106 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,3 +1,3 @@ [toolchain] -channel = "1.96.1" +channel = "1.97.0" profile = "default" From 17388e62e8c4ebb6fefd4430dd543b78cd668b54 Mon Sep 17 00:00:00 2001 From: Cameron Date: Thu, 9 Jul 2026 17:51:54 +0100 Subject: [PATCH 2/3] disable new clippy warnings --- Cargo.toml | 6 ++++++ crates/oxc_react_compiler/Cargo.toml | 3 +++ crates/oxc_semantic/src/multi_index_vec.rs | 2 +- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index b7a64d4bedeed..73c21ff9937fb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -112,6 +112,12 @@ unused_peekable = "warn" too_long_first_doc_paragraph = "warn" suspicious_operation_groupings = "warn" redundant_clone = "warn" +# FIXME: New warnings introduced by Rust 1.97. +byte_char_slices = "allow" +manual_assert_eq = "allow" +manual_filter = "allow" +question_mark = "allow" +useless_borrows_in_formatting = "allow" # cargo cargo = { level = "warn", priority = -1 } multiple_crate_versions = "allow" diff --git a/crates/oxc_react_compiler/Cargo.toml b/crates/oxc_react_compiler/Cargo.toml index 26b4de2bd44ff..6f292fd5ea219 100644 --- a/crates/oxc_react_compiler/Cargo.toml +++ b/crates/oxc_react_compiler/Cargo.toml @@ -70,6 +70,9 @@ collapsible_if = "allow" needless_return = "allow" unnecessary_unwrap = "allow" result_large_err = "allow" # `Result` everywhere; same trade-off as the workspace allow +for_kv_map = "allow" +question_mark = "allow" +unneeded_wildcard_pattern = "allow" # The vendored modules' doc comments reference types like `Vec` # without backticks; relax rustdoc for them rather than editing upstream code. diff --git a/crates/oxc_semantic/src/multi_index_vec.rs b/crates/oxc_semantic/src/multi_index_vec.rs index ab87af79c44cd..8776816c21985 100644 --- a/crates/oxc_semantic/src/multi_index_vec.rs +++ b/crates/oxc_semantic/src/multi_index_vec.rs @@ -96,7 +96,7 @@ macro_rules! multi_index_vec { $( let align = ::core::mem::align_of::<$fty>(); _offset = (_offset + align - 1) & !(align - 1); - #[expect(clippy::cast_ptr_alignment)] + #[allow(clippy::cast_ptr_alignment)] { // SAFETY: `_offset` is within the allocation, and properly aligned // for `$fty` because `compute_layout` aligns each field's offset, From 8a1943db1346773f9bc7b359dfafd3298e96e440 Mon Sep 17 00:00:00 2001 From: Cameron Date: Thu, 9 Jul 2026 18:20:57 +0100 Subject: [PATCH 3/3] niche changes!!! --- apps/oxlint/src-js/generated/deserialize.js | 22 +++++----- .../parser/src-js/generated/deserialize/js.js | 20 ++++----- .../src-js/generated/deserialize/js_parent.js | 20 ++++----- .../src-js/generated/deserialize/js_range.js | 20 ++++----- .../generated/deserialize/js_range_parent.js | 20 ++++----- .../parser/src-js/generated/deserialize/ts.js | 22 +++++----- .../src-js/generated/deserialize/ts_parent.js | 22 +++++----- .../src-js/generated/deserialize/ts_range.js | 22 +++++----- .../generated/deserialize/ts_range_parent.js | 22 +++++----- .../src-js/generated/lazy/constructors.js | 22 +++++----- napi/parser/src-js/generated/lazy/walk.js | 18 ++++---- .../ast_tools/src/schema/extensions/layout.rs | 41 ++++++++++++------- 12 files changed, 142 insertions(+), 129 deletions(-) diff --git a/apps/oxlint/src-js/generated/deserialize.js b/apps/oxlint/src-js/generated/deserialize.js index 81f9babd38f98..ac175c7eae789 100644 --- a/apps/oxlint/src-js/generated/deserialize.js +++ b/apps/oxlint/src-js/generated/deserialize.js @@ -6129,7 +6129,7 @@ function deserializeBoxObjectAssignmentTarget(pos) { } function deserializeOptionAssignmentTargetMaybeDefault(pos) { - return uint8[pos] === 51 ? null : deserializeAssignmentTargetMaybeDefault(pos); + return uint8[pos] === 255 ? null : deserializeAssignmentTargetMaybeDefault(pos); } function deserializeVecOptionAssignmentTargetMaybeDefault(pos) { @@ -6179,7 +6179,7 @@ function deserializeBoxAssignmentTargetPropertyProperty(pos) { } function deserializeOptionExpression(pos) { - return uint8[pos] === 51 ? null : deserializeExpression(pos); + return uint8[pos] === 255 ? null : deserializeExpression(pos); } function deserializeBoxBlockStatement(pos) { @@ -6305,11 +6305,11 @@ function deserializeOptionBoxTSTypeAnnotation(pos) { } function deserializeOptionStatement(pos) { - return uint8[pos] === 70 ? null : deserializeStatement(pos); + return uint8[pos] === 255 ? null : deserializeStatement(pos); } function deserializeOptionForStatementInit(pos) { - return uint8[pos] === 65 ? null : deserializeForStatementInit(pos); + return uint8[pos] === 255 ? null : deserializeForStatementInit(pos); } function deserializeOptionLabelIdentifier(pos) { @@ -6347,7 +6347,7 @@ function deserializeOptionBoxBlockStatement(pos) { } function deserializeOptionCatchParameter(pos) { - return uint8[pos + 16] === 4 ? null : deserializeCatchParameter(pos); + return uint8[pos + 16] === 255 ? null : deserializeCatchParameter(pos); } function deserializeBoxBindingIdentifier(pos) { @@ -6389,7 +6389,7 @@ function deserializeOptionBoxBindingRestElement(pos) { } function deserializeOptionBindingPattern(pos) { - return uint8[pos] === 4 ? null : deserializeBindingPattern(pos); + return uint8[pos] === 255 ? null : deserializeBindingPattern(pos); } function deserializeVecOptionBindingPattern(pos) { @@ -6479,7 +6479,7 @@ function deserializeOptionBoxExpression(pos) { } function deserializeOptionTSAccessibility(pos) { - return uint8[pos] === 3 ? null : deserializeTSAccessibility(pos); + return uint8[pos] === 255 ? null : deserializeTSAccessibility(pos); } function deserializeVecTSClassImplements(pos) { @@ -6631,7 +6631,7 @@ function deserializeOptionStringLiteral(pos) { } function deserializeOptionModuleExportName(pos) { - return uint8[pos] === 3 ? null : deserializeModuleExportName(pos); + return uint8[pos] === 255 ? null : deserializeModuleExportName(pos); } function deserializeF64(pos) { @@ -6705,7 +6705,7 @@ function deserializeBoxJSXSpreadAttribute(pos) { } function deserializeOptionJSXAttributeValue(pos) { - return uint8[pos] === 4 ? null : deserializeJSXAttributeValue(pos); + return uint8[pos] === 255 ? null : deserializeJSXAttributeValue(pos); } function deserializeBoxJSXExpressionContainer(pos) { @@ -6917,7 +6917,7 @@ function deserializeBoxTSQualifiedName(pos) { } function deserializeOptionTSType(pos) { - return uint8[pos] === 38 ? null : deserializeTSType(pos); + return uint8[pos] === 255 ? null : deserializeTSType(pos); } function deserializeVecTSTypeParameter(pos) { @@ -7015,7 +7015,7 @@ function deserializeBoxTSImportTypeQualifiedName(pos) { } function deserializeOptionTSMappedTypeModifierOperator(pos) { - return uint8[pos] === 3 ? null : deserializeTSMappedTypeModifierOperator(pos); + return uint8[pos] === 255 ? null : deserializeTSMappedTypeModifierOperator(pos); } function deserializeBoxTSExternalModuleReference(pos) { diff --git a/napi/parser/src-js/generated/deserialize/js.js b/napi/parser/src-js/generated/deserialize/js.js index 41569ae252242..773f39f3b2158 100644 --- a/napi/parser/src-js/generated/deserialize/js.js +++ b/napi/parser/src-js/generated/deserialize/js.js @@ -4878,7 +4878,7 @@ function deserializeBoxObjectAssignmentTarget(pos) { } function deserializeOptionAssignmentTargetMaybeDefault(pos) { - return uint8[pos] === 51 ? null : deserializeAssignmentTargetMaybeDefault(pos); + return uint8[pos] === 255 ? null : deserializeAssignmentTargetMaybeDefault(pos); } function deserializeVecOptionAssignmentTargetMaybeDefault(pos) { @@ -4928,7 +4928,7 @@ function deserializeBoxAssignmentTargetPropertyProperty(pos) { } function deserializeOptionExpression(pos) { - return uint8[pos] === 51 ? null : deserializeExpression(pos); + return uint8[pos] === 255 ? null : deserializeExpression(pos); } function deserializeBoxBlockStatement(pos) { @@ -5054,11 +5054,11 @@ function deserializeOptionBoxTSTypeAnnotation(pos) { } function deserializeOptionStatement(pos) { - return uint8[pos] === 70 ? null : deserializeStatement(pos); + return uint8[pos] === 255 ? null : deserializeStatement(pos); } function deserializeOptionForStatementInit(pos) { - return uint8[pos] === 65 ? null : deserializeForStatementInit(pos); + return uint8[pos] === 255 ? null : deserializeForStatementInit(pos); } function deserializeOptionLabelIdentifier(pos) { @@ -5096,7 +5096,7 @@ function deserializeOptionBoxBlockStatement(pos) { } function deserializeOptionCatchParameter(pos) { - return uint8[pos + 16] === 4 ? null : deserializeCatchParameter(pos); + return uint8[pos + 16] === 255 ? null : deserializeCatchParameter(pos); } function deserializeBoxBindingIdentifier(pos) { @@ -5138,7 +5138,7 @@ function deserializeOptionBoxBindingRestElement(pos) { } function deserializeOptionBindingPattern(pos) { - return uint8[pos] === 4 ? null : deserializeBindingPattern(pos); + return uint8[pos] === 255 ? null : deserializeBindingPattern(pos); } function deserializeVecOptionBindingPattern(pos) { @@ -5364,7 +5364,7 @@ function deserializeOptionStringLiteral(pos) { } function deserializeOptionModuleExportName(pos) { - return uint8[pos] === 3 ? null : deserializeModuleExportName(pos); + return uint8[pos] === 255 ? null : deserializeModuleExportName(pos); } function deserializeF64(pos) { @@ -5438,7 +5438,7 @@ function deserializeBoxJSXSpreadAttribute(pos) { } function deserializeOptionJSXAttributeValue(pos) { - return uint8[pos] === 4 ? null : deserializeJSXAttributeValue(pos); + return uint8[pos] === 255 ? null : deserializeJSXAttributeValue(pos); } function deserializeBoxJSXExpressionContainer(pos) { @@ -5650,7 +5650,7 @@ function deserializeBoxTSQualifiedName(pos) { } function deserializeOptionTSType(pos) { - return uint8[pos] === 38 ? null : deserializeTSType(pos); + return uint8[pos] === 255 ? null : deserializeTSType(pos); } function deserializeVecTSTypeParameter(pos) { @@ -5748,7 +5748,7 @@ function deserializeBoxTSImportTypeQualifiedName(pos) { } function deserializeOptionTSMappedTypeModifierOperator(pos) { - return uint8[pos] === 3 ? null : deserializeTSMappedTypeModifierOperator(pos); + return uint8[pos] === 255 ? null : deserializeTSMappedTypeModifierOperator(pos); } function deserializeBoxTSExternalModuleReference(pos) { diff --git a/napi/parser/src-js/generated/deserialize/js_parent.js b/napi/parser/src-js/generated/deserialize/js_parent.js index 832ff268aab3d..f6225e4965e26 100644 --- a/napi/parser/src-js/generated/deserialize/js_parent.js +++ b/napi/parser/src-js/generated/deserialize/js_parent.js @@ -5391,7 +5391,7 @@ function deserializeBoxObjectAssignmentTarget(pos) { } function deserializeOptionAssignmentTargetMaybeDefault(pos) { - return uint8[pos] === 51 ? null : deserializeAssignmentTargetMaybeDefault(pos); + return uint8[pos] === 255 ? null : deserializeAssignmentTargetMaybeDefault(pos); } function deserializeVecOptionAssignmentTargetMaybeDefault(pos) { @@ -5441,7 +5441,7 @@ function deserializeBoxAssignmentTargetPropertyProperty(pos) { } function deserializeOptionExpression(pos) { - return uint8[pos] === 51 ? null : deserializeExpression(pos); + return uint8[pos] === 255 ? null : deserializeExpression(pos); } function deserializeBoxBlockStatement(pos) { @@ -5567,11 +5567,11 @@ function deserializeOptionBoxTSTypeAnnotation(pos) { } function deserializeOptionStatement(pos) { - return uint8[pos] === 70 ? null : deserializeStatement(pos); + return uint8[pos] === 255 ? null : deserializeStatement(pos); } function deserializeOptionForStatementInit(pos) { - return uint8[pos] === 65 ? null : deserializeForStatementInit(pos); + return uint8[pos] === 255 ? null : deserializeForStatementInit(pos); } function deserializeOptionLabelIdentifier(pos) { @@ -5609,7 +5609,7 @@ function deserializeOptionBoxBlockStatement(pos) { } function deserializeOptionCatchParameter(pos) { - return uint8[pos + 16] === 4 ? null : deserializeCatchParameter(pos); + return uint8[pos + 16] === 255 ? null : deserializeCatchParameter(pos); } function deserializeBoxBindingIdentifier(pos) { @@ -5651,7 +5651,7 @@ function deserializeOptionBoxBindingRestElement(pos) { } function deserializeOptionBindingPattern(pos) { - return uint8[pos] === 4 ? null : deserializeBindingPattern(pos); + return uint8[pos] === 255 ? null : deserializeBindingPattern(pos); } function deserializeVecOptionBindingPattern(pos) { @@ -5877,7 +5877,7 @@ function deserializeOptionStringLiteral(pos) { } function deserializeOptionModuleExportName(pos) { - return uint8[pos] === 3 ? null : deserializeModuleExportName(pos); + return uint8[pos] === 255 ? null : deserializeModuleExportName(pos); } function deserializeF64(pos) { @@ -5951,7 +5951,7 @@ function deserializeBoxJSXSpreadAttribute(pos) { } function deserializeOptionJSXAttributeValue(pos) { - return uint8[pos] === 4 ? null : deserializeJSXAttributeValue(pos); + return uint8[pos] === 255 ? null : deserializeJSXAttributeValue(pos); } function deserializeBoxJSXExpressionContainer(pos) { @@ -6163,7 +6163,7 @@ function deserializeBoxTSQualifiedName(pos) { } function deserializeOptionTSType(pos) { - return uint8[pos] === 38 ? null : deserializeTSType(pos); + return uint8[pos] === 255 ? null : deserializeTSType(pos); } function deserializeVecTSTypeParameter(pos) { @@ -6261,7 +6261,7 @@ function deserializeBoxTSImportTypeQualifiedName(pos) { } function deserializeOptionTSMappedTypeModifierOperator(pos) { - return uint8[pos] === 3 ? null : deserializeTSMappedTypeModifierOperator(pos); + return uint8[pos] === 255 ? null : deserializeTSMappedTypeModifierOperator(pos); } function deserializeBoxTSExternalModuleReference(pos) { diff --git a/napi/parser/src-js/generated/deserialize/js_range.js b/napi/parser/src-js/generated/deserialize/js_range.js index 46a0b3d5177d0..3a376e4547e6f 100644 --- a/napi/parser/src-js/generated/deserialize/js_range.js +++ b/napi/parser/src-js/generated/deserialize/js_range.js @@ -5419,7 +5419,7 @@ function deserializeBoxObjectAssignmentTarget(pos) { } function deserializeOptionAssignmentTargetMaybeDefault(pos) { - return uint8[pos] === 51 ? null : deserializeAssignmentTargetMaybeDefault(pos); + return uint8[pos] === 255 ? null : deserializeAssignmentTargetMaybeDefault(pos); } function deserializeVecOptionAssignmentTargetMaybeDefault(pos) { @@ -5469,7 +5469,7 @@ function deserializeBoxAssignmentTargetPropertyProperty(pos) { } function deserializeOptionExpression(pos) { - return uint8[pos] === 51 ? null : deserializeExpression(pos); + return uint8[pos] === 255 ? null : deserializeExpression(pos); } function deserializeBoxBlockStatement(pos) { @@ -5595,11 +5595,11 @@ function deserializeOptionBoxTSTypeAnnotation(pos) { } function deserializeOptionStatement(pos) { - return uint8[pos] === 70 ? null : deserializeStatement(pos); + return uint8[pos] === 255 ? null : deserializeStatement(pos); } function deserializeOptionForStatementInit(pos) { - return uint8[pos] === 65 ? null : deserializeForStatementInit(pos); + return uint8[pos] === 255 ? null : deserializeForStatementInit(pos); } function deserializeOptionLabelIdentifier(pos) { @@ -5637,7 +5637,7 @@ function deserializeOptionBoxBlockStatement(pos) { } function deserializeOptionCatchParameter(pos) { - return uint8[pos + 16] === 4 ? null : deserializeCatchParameter(pos); + return uint8[pos + 16] === 255 ? null : deserializeCatchParameter(pos); } function deserializeBoxBindingIdentifier(pos) { @@ -5679,7 +5679,7 @@ function deserializeOptionBoxBindingRestElement(pos) { } function deserializeOptionBindingPattern(pos) { - return uint8[pos] === 4 ? null : deserializeBindingPattern(pos); + return uint8[pos] === 255 ? null : deserializeBindingPattern(pos); } function deserializeVecOptionBindingPattern(pos) { @@ -5905,7 +5905,7 @@ function deserializeOptionStringLiteral(pos) { } function deserializeOptionModuleExportName(pos) { - return uint8[pos] === 3 ? null : deserializeModuleExportName(pos); + return uint8[pos] === 255 ? null : deserializeModuleExportName(pos); } function deserializeF64(pos) { @@ -5979,7 +5979,7 @@ function deserializeBoxJSXSpreadAttribute(pos) { } function deserializeOptionJSXAttributeValue(pos) { - return uint8[pos] === 4 ? null : deserializeJSXAttributeValue(pos); + return uint8[pos] === 255 ? null : deserializeJSXAttributeValue(pos); } function deserializeBoxJSXExpressionContainer(pos) { @@ -6191,7 +6191,7 @@ function deserializeBoxTSQualifiedName(pos) { } function deserializeOptionTSType(pos) { - return uint8[pos] === 38 ? null : deserializeTSType(pos); + return uint8[pos] === 255 ? null : deserializeTSType(pos); } function deserializeVecTSTypeParameter(pos) { @@ -6289,7 +6289,7 @@ function deserializeBoxTSImportTypeQualifiedName(pos) { } function deserializeOptionTSMappedTypeModifierOperator(pos) { - return uint8[pos] === 3 ? null : deserializeTSMappedTypeModifierOperator(pos); + return uint8[pos] === 255 ? null : deserializeTSMappedTypeModifierOperator(pos); } function deserializeBoxTSExternalModuleReference(pos) { diff --git a/napi/parser/src-js/generated/deserialize/js_range_parent.js b/napi/parser/src-js/generated/deserialize/js_range_parent.js index 923d97653b86f..57bebb386a9f9 100644 --- a/napi/parser/src-js/generated/deserialize/js_range_parent.js +++ b/napi/parser/src-js/generated/deserialize/js_range_parent.js @@ -5931,7 +5931,7 @@ function deserializeBoxObjectAssignmentTarget(pos) { } function deserializeOptionAssignmentTargetMaybeDefault(pos) { - return uint8[pos] === 51 ? null : deserializeAssignmentTargetMaybeDefault(pos); + return uint8[pos] === 255 ? null : deserializeAssignmentTargetMaybeDefault(pos); } function deserializeVecOptionAssignmentTargetMaybeDefault(pos) { @@ -5981,7 +5981,7 @@ function deserializeBoxAssignmentTargetPropertyProperty(pos) { } function deserializeOptionExpression(pos) { - return uint8[pos] === 51 ? null : deserializeExpression(pos); + return uint8[pos] === 255 ? null : deserializeExpression(pos); } function deserializeBoxBlockStatement(pos) { @@ -6107,11 +6107,11 @@ function deserializeOptionBoxTSTypeAnnotation(pos) { } function deserializeOptionStatement(pos) { - return uint8[pos] === 70 ? null : deserializeStatement(pos); + return uint8[pos] === 255 ? null : deserializeStatement(pos); } function deserializeOptionForStatementInit(pos) { - return uint8[pos] === 65 ? null : deserializeForStatementInit(pos); + return uint8[pos] === 255 ? null : deserializeForStatementInit(pos); } function deserializeOptionLabelIdentifier(pos) { @@ -6149,7 +6149,7 @@ function deserializeOptionBoxBlockStatement(pos) { } function deserializeOptionCatchParameter(pos) { - return uint8[pos + 16] === 4 ? null : deserializeCatchParameter(pos); + return uint8[pos + 16] === 255 ? null : deserializeCatchParameter(pos); } function deserializeBoxBindingIdentifier(pos) { @@ -6191,7 +6191,7 @@ function deserializeOptionBoxBindingRestElement(pos) { } function deserializeOptionBindingPattern(pos) { - return uint8[pos] === 4 ? null : deserializeBindingPattern(pos); + return uint8[pos] === 255 ? null : deserializeBindingPattern(pos); } function deserializeVecOptionBindingPattern(pos) { @@ -6417,7 +6417,7 @@ function deserializeOptionStringLiteral(pos) { } function deserializeOptionModuleExportName(pos) { - return uint8[pos] === 3 ? null : deserializeModuleExportName(pos); + return uint8[pos] === 255 ? null : deserializeModuleExportName(pos); } function deserializeF64(pos) { @@ -6491,7 +6491,7 @@ function deserializeBoxJSXSpreadAttribute(pos) { } function deserializeOptionJSXAttributeValue(pos) { - return uint8[pos] === 4 ? null : deserializeJSXAttributeValue(pos); + return uint8[pos] === 255 ? null : deserializeJSXAttributeValue(pos); } function deserializeBoxJSXExpressionContainer(pos) { @@ -6703,7 +6703,7 @@ function deserializeBoxTSQualifiedName(pos) { } function deserializeOptionTSType(pos) { - return uint8[pos] === 38 ? null : deserializeTSType(pos); + return uint8[pos] === 255 ? null : deserializeTSType(pos); } function deserializeVecTSTypeParameter(pos) { @@ -6801,7 +6801,7 @@ function deserializeBoxTSImportTypeQualifiedName(pos) { } function deserializeOptionTSMappedTypeModifierOperator(pos) { - return uint8[pos] === 3 ? null : deserializeTSMappedTypeModifierOperator(pos); + return uint8[pos] === 255 ? null : deserializeTSMappedTypeModifierOperator(pos); } function deserializeBoxTSExternalModuleReference(pos) { diff --git a/napi/parser/src-js/generated/deserialize/ts.js b/napi/parser/src-js/generated/deserialize/ts.js index 463f8183312d6..5c414d202a969 100644 --- a/napi/parser/src-js/generated/deserialize/ts.js +++ b/napi/parser/src-js/generated/deserialize/ts.js @@ -5154,7 +5154,7 @@ function deserializeBoxObjectAssignmentTarget(pos) { } function deserializeOptionAssignmentTargetMaybeDefault(pos) { - return uint8[pos] === 51 ? null : deserializeAssignmentTargetMaybeDefault(pos); + return uint8[pos] === 255 ? null : deserializeAssignmentTargetMaybeDefault(pos); } function deserializeVecOptionAssignmentTargetMaybeDefault(pos) { @@ -5204,7 +5204,7 @@ function deserializeBoxAssignmentTargetPropertyProperty(pos) { } function deserializeOptionExpression(pos) { - return uint8[pos] === 51 ? null : deserializeExpression(pos); + return uint8[pos] === 255 ? null : deserializeExpression(pos); } function deserializeBoxBlockStatement(pos) { @@ -5330,11 +5330,11 @@ function deserializeOptionBoxTSTypeAnnotation(pos) { } function deserializeOptionStatement(pos) { - return uint8[pos] === 70 ? null : deserializeStatement(pos); + return uint8[pos] === 255 ? null : deserializeStatement(pos); } function deserializeOptionForStatementInit(pos) { - return uint8[pos] === 65 ? null : deserializeForStatementInit(pos); + return uint8[pos] === 255 ? null : deserializeForStatementInit(pos); } function deserializeOptionLabelIdentifier(pos) { @@ -5372,7 +5372,7 @@ function deserializeOptionBoxBlockStatement(pos) { } function deserializeOptionCatchParameter(pos) { - return uint8[pos + 16] === 4 ? null : deserializeCatchParameter(pos); + return uint8[pos + 16] === 255 ? null : deserializeCatchParameter(pos); } function deserializeBoxBindingIdentifier(pos) { @@ -5414,7 +5414,7 @@ function deserializeOptionBoxBindingRestElement(pos) { } function deserializeOptionBindingPattern(pos) { - return uint8[pos] === 4 ? null : deserializeBindingPattern(pos); + return uint8[pos] === 255 ? null : deserializeBindingPattern(pos); } function deserializeVecOptionBindingPattern(pos) { @@ -5504,7 +5504,7 @@ function deserializeOptionBoxExpression(pos) { } function deserializeOptionTSAccessibility(pos) { - return uint8[pos] === 3 ? null : deserializeTSAccessibility(pos); + return uint8[pos] === 255 ? null : deserializeTSAccessibility(pos); } function deserializeVecTSClassImplements(pos) { @@ -5656,7 +5656,7 @@ function deserializeOptionStringLiteral(pos) { } function deserializeOptionModuleExportName(pos) { - return uint8[pos] === 3 ? null : deserializeModuleExportName(pos); + return uint8[pos] === 255 ? null : deserializeModuleExportName(pos); } function deserializeF64(pos) { @@ -5730,7 +5730,7 @@ function deserializeBoxJSXSpreadAttribute(pos) { } function deserializeOptionJSXAttributeValue(pos) { - return uint8[pos] === 4 ? null : deserializeJSXAttributeValue(pos); + return uint8[pos] === 255 ? null : deserializeJSXAttributeValue(pos); } function deserializeBoxJSXExpressionContainer(pos) { @@ -5942,7 +5942,7 @@ function deserializeBoxTSQualifiedName(pos) { } function deserializeOptionTSType(pos) { - return uint8[pos] === 38 ? null : deserializeTSType(pos); + return uint8[pos] === 255 ? null : deserializeTSType(pos); } function deserializeVecTSTypeParameter(pos) { @@ -6040,7 +6040,7 @@ function deserializeBoxTSImportTypeQualifiedName(pos) { } function deserializeOptionTSMappedTypeModifierOperator(pos) { - return uint8[pos] === 3 ? null : deserializeTSMappedTypeModifierOperator(pos); + return uint8[pos] === 255 ? null : deserializeTSMappedTypeModifierOperator(pos); } function deserializeBoxTSExternalModuleReference(pos) { diff --git a/napi/parser/src-js/generated/deserialize/ts_parent.js b/napi/parser/src-js/generated/deserialize/ts_parent.js index f820954d328f9..9156337948cb6 100644 --- a/napi/parser/src-js/generated/deserialize/ts_parent.js +++ b/napi/parser/src-js/generated/deserialize/ts_parent.js @@ -5697,7 +5697,7 @@ function deserializeBoxObjectAssignmentTarget(pos) { } function deserializeOptionAssignmentTargetMaybeDefault(pos) { - return uint8[pos] === 51 ? null : deserializeAssignmentTargetMaybeDefault(pos); + return uint8[pos] === 255 ? null : deserializeAssignmentTargetMaybeDefault(pos); } function deserializeVecOptionAssignmentTargetMaybeDefault(pos) { @@ -5747,7 +5747,7 @@ function deserializeBoxAssignmentTargetPropertyProperty(pos) { } function deserializeOptionExpression(pos) { - return uint8[pos] === 51 ? null : deserializeExpression(pos); + return uint8[pos] === 255 ? null : deserializeExpression(pos); } function deserializeBoxBlockStatement(pos) { @@ -5873,11 +5873,11 @@ function deserializeOptionBoxTSTypeAnnotation(pos) { } function deserializeOptionStatement(pos) { - return uint8[pos] === 70 ? null : deserializeStatement(pos); + return uint8[pos] === 255 ? null : deserializeStatement(pos); } function deserializeOptionForStatementInit(pos) { - return uint8[pos] === 65 ? null : deserializeForStatementInit(pos); + return uint8[pos] === 255 ? null : deserializeForStatementInit(pos); } function deserializeOptionLabelIdentifier(pos) { @@ -5915,7 +5915,7 @@ function deserializeOptionBoxBlockStatement(pos) { } function deserializeOptionCatchParameter(pos) { - return uint8[pos + 16] === 4 ? null : deserializeCatchParameter(pos); + return uint8[pos + 16] === 255 ? null : deserializeCatchParameter(pos); } function deserializeBoxBindingIdentifier(pos) { @@ -5957,7 +5957,7 @@ function deserializeOptionBoxBindingRestElement(pos) { } function deserializeOptionBindingPattern(pos) { - return uint8[pos] === 4 ? null : deserializeBindingPattern(pos); + return uint8[pos] === 255 ? null : deserializeBindingPattern(pos); } function deserializeVecOptionBindingPattern(pos) { @@ -6047,7 +6047,7 @@ function deserializeOptionBoxExpression(pos) { } function deserializeOptionTSAccessibility(pos) { - return uint8[pos] === 3 ? null : deserializeTSAccessibility(pos); + return uint8[pos] === 255 ? null : deserializeTSAccessibility(pos); } function deserializeVecTSClassImplements(pos) { @@ -6199,7 +6199,7 @@ function deserializeOptionStringLiteral(pos) { } function deserializeOptionModuleExportName(pos) { - return uint8[pos] === 3 ? null : deserializeModuleExportName(pos); + return uint8[pos] === 255 ? null : deserializeModuleExportName(pos); } function deserializeF64(pos) { @@ -6273,7 +6273,7 @@ function deserializeBoxJSXSpreadAttribute(pos) { } function deserializeOptionJSXAttributeValue(pos) { - return uint8[pos] === 4 ? null : deserializeJSXAttributeValue(pos); + return uint8[pos] === 255 ? null : deserializeJSXAttributeValue(pos); } function deserializeBoxJSXExpressionContainer(pos) { @@ -6485,7 +6485,7 @@ function deserializeBoxTSQualifiedName(pos) { } function deserializeOptionTSType(pos) { - return uint8[pos] === 38 ? null : deserializeTSType(pos); + return uint8[pos] === 255 ? null : deserializeTSType(pos); } function deserializeVecTSTypeParameter(pos) { @@ -6583,7 +6583,7 @@ function deserializeBoxTSImportTypeQualifiedName(pos) { } function deserializeOptionTSMappedTypeModifierOperator(pos) { - return uint8[pos] === 3 ? null : deserializeTSMappedTypeModifierOperator(pos); + return uint8[pos] === 255 ? null : deserializeTSMappedTypeModifierOperator(pos); } function deserializeBoxTSExternalModuleReference(pos) { diff --git a/napi/parser/src-js/generated/deserialize/ts_range.js b/napi/parser/src-js/generated/deserialize/ts_range.js index ecf6e67622e97..8910594c36452 100644 --- a/napi/parser/src-js/generated/deserialize/ts_range.js +++ b/napi/parser/src-js/generated/deserialize/ts_range.js @@ -5723,7 +5723,7 @@ function deserializeBoxObjectAssignmentTarget(pos) { } function deserializeOptionAssignmentTargetMaybeDefault(pos) { - return uint8[pos] === 51 ? null : deserializeAssignmentTargetMaybeDefault(pos); + return uint8[pos] === 255 ? null : deserializeAssignmentTargetMaybeDefault(pos); } function deserializeVecOptionAssignmentTargetMaybeDefault(pos) { @@ -5773,7 +5773,7 @@ function deserializeBoxAssignmentTargetPropertyProperty(pos) { } function deserializeOptionExpression(pos) { - return uint8[pos] === 51 ? null : deserializeExpression(pos); + return uint8[pos] === 255 ? null : deserializeExpression(pos); } function deserializeBoxBlockStatement(pos) { @@ -5899,11 +5899,11 @@ function deserializeOptionBoxTSTypeAnnotation(pos) { } function deserializeOptionStatement(pos) { - return uint8[pos] === 70 ? null : deserializeStatement(pos); + return uint8[pos] === 255 ? null : deserializeStatement(pos); } function deserializeOptionForStatementInit(pos) { - return uint8[pos] === 65 ? null : deserializeForStatementInit(pos); + return uint8[pos] === 255 ? null : deserializeForStatementInit(pos); } function deserializeOptionLabelIdentifier(pos) { @@ -5941,7 +5941,7 @@ function deserializeOptionBoxBlockStatement(pos) { } function deserializeOptionCatchParameter(pos) { - return uint8[pos + 16] === 4 ? null : deserializeCatchParameter(pos); + return uint8[pos + 16] === 255 ? null : deserializeCatchParameter(pos); } function deserializeBoxBindingIdentifier(pos) { @@ -5983,7 +5983,7 @@ function deserializeOptionBoxBindingRestElement(pos) { } function deserializeOptionBindingPattern(pos) { - return uint8[pos] === 4 ? null : deserializeBindingPattern(pos); + return uint8[pos] === 255 ? null : deserializeBindingPattern(pos); } function deserializeVecOptionBindingPattern(pos) { @@ -6073,7 +6073,7 @@ function deserializeOptionBoxExpression(pos) { } function deserializeOptionTSAccessibility(pos) { - return uint8[pos] === 3 ? null : deserializeTSAccessibility(pos); + return uint8[pos] === 255 ? null : deserializeTSAccessibility(pos); } function deserializeVecTSClassImplements(pos) { @@ -6225,7 +6225,7 @@ function deserializeOptionStringLiteral(pos) { } function deserializeOptionModuleExportName(pos) { - return uint8[pos] === 3 ? null : deserializeModuleExportName(pos); + return uint8[pos] === 255 ? null : deserializeModuleExportName(pos); } function deserializeF64(pos) { @@ -6299,7 +6299,7 @@ function deserializeBoxJSXSpreadAttribute(pos) { } function deserializeOptionJSXAttributeValue(pos) { - return uint8[pos] === 4 ? null : deserializeJSXAttributeValue(pos); + return uint8[pos] === 255 ? null : deserializeJSXAttributeValue(pos); } function deserializeBoxJSXExpressionContainer(pos) { @@ -6511,7 +6511,7 @@ function deserializeBoxTSQualifiedName(pos) { } function deserializeOptionTSType(pos) { - return uint8[pos] === 38 ? null : deserializeTSType(pos); + return uint8[pos] === 255 ? null : deserializeTSType(pos); } function deserializeVecTSTypeParameter(pos) { @@ -6609,7 +6609,7 @@ function deserializeBoxTSImportTypeQualifiedName(pos) { } function deserializeOptionTSMappedTypeModifierOperator(pos) { - return uint8[pos] === 3 ? null : deserializeTSMappedTypeModifierOperator(pos); + return uint8[pos] === 255 ? null : deserializeTSMappedTypeModifierOperator(pos); } function deserializeBoxTSExternalModuleReference(pos) { diff --git a/napi/parser/src-js/generated/deserialize/ts_range_parent.js b/napi/parser/src-js/generated/deserialize/ts_range_parent.js index 84d2853af4e80..ded8839c98c79 100644 --- a/napi/parser/src-js/generated/deserialize/ts_range_parent.js +++ b/napi/parser/src-js/generated/deserialize/ts_range_parent.js @@ -6265,7 +6265,7 @@ function deserializeBoxObjectAssignmentTarget(pos) { } function deserializeOptionAssignmentTargetMaybeDefault(pos) { - return uint8[pos] === 51 ? null : deserializeAssignmentTargetMaybeDefault(pos); + return uint8[pos] === 255 ? null : deserializeAssignmentTargetMaybeDefault(pos); } function deserializeVecOptionAssignmentTargetMaybeDefault(pos) { @@ -6315,7 +6315,7 @@ function deserializeBoxAssignmentTargetPropertyProperty(pos) { } function deserializeOptionExpression(pos) { - return uint8[pos] === 51 ? null : deserializeExpression(pos); + return uint8[pos] === 255 ? null : deserializeExpression(pos); } function deserializeBoxBlockStatement(pos) { @@ -6441,11 +6441,11 @@ function deserializeOptionBoxTSTypeAnnotation(pos) { } function deserializeOptionStatement(pos) { - return uint8[pos] === 70 ? null : deserializeStatement(pos); + return uint8[pos] === 255 ? null : deserializeStatement(pos); } function deserializeOptionForStatementInit(pos) { - return uint8[pos] === 65 ? null : deserializeForStatementInit(pos); + return uint8[pos] === 255 ? null : deserializeForStatementInit(pos); } function deserializeOptionLabelIdentifier(pos) { @@ -6483,7 +6483,7 @@ function deserializeOptionBoxBlockStatement(pos) { } function deserializeOptionCatchParameter(pos) { - return uint8[pos + 16] === 4 ? null : deserializeCatchParameter(pos); + return uint8[pos + 16] === 255 ? null : deserializeCatchParameter(pos); } function deserializeBoxBindingIdentifier(pos) { @@ -6525,7 +6525,7 @@ function deserializeOptionBoxBindingRestElement(pos) { } function deserializeOptionBindingPattern(pos) { - return uint8[pos] === 4 ? null : deserializeBindingPattern(pos); + return uint8[pos] === 255 ? null : deserializeBindingPattern(pos); } function deserializeVecOptionBindingPattern(pos) { @@ -6615,7 +6615,7 @@ function deserializeOptionBoxExpression(pos) { } function deserializeOptionTSAccessibility(pos) { - return uint8[pos] === 3 ? null : deserializeTSAccessibility(pos); + return uint8[pos] === 255 ? null : deserializeTSAccessibility(pos); } function deserializeVecTSClassImplements(pos) { @@ -6767,7 +6767,7 @@ function deserializeOptionStringLiteral(pos) { } function deserializeOptionModuleExportName(pos) { - return uint8[pos] === 3 ? null : deserializeModuleExportName(pos); + return uint8[pos] === 255 ? null : deserializeModuleExportName(pos); } function deserializeF64(pos) { @@ -6841,7 +6841,7 @@ function deserializeBoxJSXSpreadAttribute(pos) { } function deserializeOptionJSXAttributeValue(pos) { - return uint8[pos] === 4 ? null : deserializeJSXAttributeValue(pos); + return uint8[pos] === 255 ? null : deserializeJSXAttributeValue(pos); } function deserializeBoxJSXExpressionContainer(pos) { @@ -7053,7 +7053,7 @@ function deserializeBoxTSQualifiedName(pos) { } function deserializeOptionTSType(pos) { - return uint8[pos] === 38 ? null : deserializeTSType(pos); + return uint8[pos] === 255 ? null : deserializeTSType(pos); } function deserializeVecTSTypeParameter(pos) { @@ -7151,7 +7151,7 @@ function deserializeBoxTSImportTypeQualifiedName(pos) { } function deserializeOptionTSMappedTypeModifierOperator(pos) { - return uint8[pos] === 3 ? null : deserializeTSMappedTypeModifierOperator(pos); + return uint8[pos] === 255 ? null : deserializeTSMappedTypeModifierOperator(pos); } function deserializeBoxTSExternalModuleReference(pos) { diff --git a/napi/parser/src-js/generated/lazy/constructors.js b/napi/parser/src-js/generated/lazy/constructors.js index 0148c3c60f5e3..b4dca8d76a855 100644 --- a/napi/parser/src-js/generated/lazy/constructors.js +++ b/napi/parser/src-js/generated/lazy/constructors.js @@ -12948,7 +12948,7 @@ function constructBoxObjectAssignmentTarget(pos, ast) { } function constructOptionAssignmentTargetMaybeDefault(pos, ast) { - if (ast.buffer[pos] === 51) return null; + if (ast.buffer[pos] === 255) return null; return constructAssignmentTargetMaybeDefault(pos, ast); } @@ -12992,7 +12992,7 @@ function constructBoxAssignmentTargetPropertyProperty(pos, ast) { } function constructOptionExpression(pos, ast) { - if (ast.buffer[pos] === 51) return null; + if (ast.buffer[pos] === 255) return null; return constructExpression(pos, ast); } @@ -13116,12 +13116,12 @@ function constructOptionBoxTSTypeAnnotation(pos, ast) { } function constructOptionStatement(pos, ast) { - if (ast.buffer[pos] === 70) return null; + if (ast.buffer[pos] === 255) return null; return constructStatement(pos, ast); } function constructOptionForStatementInit(pos, ast) { - if (ast.buffer[pos] === 65) return null; + if (ast.buffer[pos] === 255) return null; return constructForStatementInit(pos, ast); } @@ -13155,7 +13155,7 @@ function constructOptionBoxBlockStatement(pos, ast) { } function constructOptionCatchParameter(pos, ast) { - if (ast.buffer[pos + 16] === 4) return null; + if (ast.buffer[pos + 16] === 255) return null; return new CatchParameter(pos, ast); } @@ -13195,7 +13195,7 @@ function constructOptionBoxBindingRestElement(pos, ast) { } function constructOptionBindingPattern(pos, ast) { - if (ast.buffer[pos] === 4) return null; + if (ast.buffer[pos] === 255) return null; return constructBindingPattern(pos, ast); } @@ -13271,7 +13271,7 @@ function constructOptionBoxExpression(pos, ast) { } function constructOptionTSAccessibility(pos, ast) { - if (ast.buffer[pos] === 3) return null; + if (ast.buffer[pos] === 255) return null; return constructTSAccessibility(pos, ast); } @@ -13413,7 +13413,7 @@ function constructOptionStringLiteral(pos, ast) { } function constructOptionModuleExportName(pos, ast) { - if (ast.buffer[pos] === 3) return null; + if (ast.buffer[pos] === 255) return null; return constructModuleExportName(pos, ast); } @@ -13475,7 +13475,7 @@ function constructBoxJSXSpreadAttribute(pos, ast) { } function constructOptionJSXAttributeValue(pos, ast) { - if (ast.buffer[pos] === 4) return null; + if (ast.buffer[pos] === 255) return null; return constructJSXAttributeValue(pos, ast); } @@ -13674,7 +13674,7 @@ function constructBoxTSQualifiedName(pos, ast) { } function constructOptionTSType(pos, ast) { - if (ast.buffer[pos] === 38) return null; + if (ast.buffer[pos] === 255) return null; return constructTSType(pos, ast); } @@ -13762,7 +13762,7 @@ function constructBoxTSImportTypeQualifiedName(pos, ast) { } function constructOptionTSMappedTypeModifierOperator(pos, ast) { - if (ast.buffer[pos] === 3) return null; + if (ast.buffer[pos] === 255) return null; return constructTSMappedTypeModifierOperator(pos, ast); } diff --git a/napi/parser/src-js/generated/lazy/walk.js b/napi/parser/src-js/generated/lazy/walk.js index ee6b5761d2267..40fcf777d78c5 100644 --- a/napi/parser/src-js/generated/lazy/walk.js +++ b/napi/parser/src-js/generated/lazy/walk.js @@ -5000,7 +5000,7 @@ function walkBoxObjectAssignmentTarget(pos, ast, visitors) { } function walkOptionAssignmentTargetMaybeDefault(pos, ast, visitors) { - if (!(ast.buffer[pos] === 51)) walkAssignmentTargetMaybeDefault(pos, ast, visitors); + if (!(ast.buffer[pos] === 255)) walkAssignmentTargetMaybeDefault(pos, ast, visitors); } function walkVecOptionAssignmentTargetMaybeDefault(pos, ast, visitors) { @@ -5038,7 +5038,7 @@ function walkBoxAssignmentTargetPropertyProperty(pos, ast, visitors) { } function walkOptionExpression(pos, ast, visitors) { - if (!(ast.buffer[pos] === 51)) walkExpression(pos, ast, visitors); + if (!(ast.buffer[pos] === 255)) walkExpression(pos, ast, visitors); } function walkBoxBlockStatement(pos, ast, visitors) { @@ -5162,11 +5162,11 @@ function walkOptionBoxTSTypeAnnotation(pos, ast, visitors) { } function walkOptionStatement(pos, ast, visitors) { - if (!(ast.buffer[pos] === 70)) walkStatement(pos, ast, visitors); + if (!(ast.buffer[pos] === 255)) walkStatement(pos, ast, visitors); } function walkOptionForStatementInit(pos, ast, visitors) { - if (!(ast.buffer[pos] === 65)) walkForStatementInit(pos, ast, visitors); + if (!(ast.buffer[pos] === 255)) walkForStatementInit(pos, ast, visitors); } function walkOptionLabelIdentifier(pos, ast, visitors) { @@ -5200,7 +5200,7 @@ function walkOptionBoxBlockStatement(pos, ast, visitors) { } function walkOptionCatchParameter(pos, ast, visitors) { - if (!(ast.buffer[pos + 16] === 4)) walkCatchParameter(pos, ast, visitors); + if (!(ast.buffer[pos + 16] === 255)) walkCatchParameter(pos, ast, visitors); } function walkBoxBindingIdentifier(pos, ast, visitors) { @@ -5231,7 +5231,7 @@ function walkVecBindingProperty(pos, ast, visitors) { } function walkOptionBindingPattern(pos, ast, visitors) { - if (!(ast.buffer[pos] === 4)) walkBindingPattern(pos, ast, visitors); + if (!(ast.buffer[pos] === 255)) walkBindingPattern(pos, ast, visitors); } function walkVecOptionBindingPattern(pos, ast, visitors) { @@ -5441,7 +5441,7 @@ function walkOptionStringLiteral(pos, ast, visitors) { } function walkOptionModuleExportName(pos, ast, visitors) { - if (!(ast.buffer[pos] === 3)) walkModuleExportName(pos, ast, visitors); + if (!(ast.buffer[pos] === 255)) walkModuleExportName(pos, ast, visitors); } function walkBoxJSXOpeningElement(pos, ast, visitors) { @@ -5504,7 +5504,7 @@ function walkBoxJSXSpreadAttribute(pos, ast, visitors) { } function walkOptionJSXAttributeValue(pos, ast, visitors) { - if (!(ast.buffer[pos] === 4)) walkJSXAttributeValue(pos, ast, visitors); + if (!(ast.buffer[pos] === 255)) walkJSXAttributeValue(pos, ast, visitors); } function walkBoxJSXExpressionContainer(pos, ast, visitors) { @@ -5713,7 +5713,7 @@ function walkBoxTSQualifiedName(pos, ast, visitors) { } function walkOptionTSType(pos, ast, visitors) { - if (!(ast.buffer[pos] === 38)) walkTSType(pos, ast, visitors); + if (!(ast.buffer[pos] === 255)) walkTSType(pos, ast, visitors); } function walkVecTSTypeParameter(pos, ast, visitors) { diff --git a/tasks/ast_tools/src/schema/extensions/layout.rs b/tasks/ast_tools/src/schema/extensions/layout.rs index dd68dfa0d69fa..45122aa2153e1 100644 --- a/tasks/ast_tools/src/schema/extensions/layout.rs +++ b/tasks/ast_tools/src/schema/extensions/layout.rs @@ -100,22 +100,35 @@ impl Niche { max(self.count_start, self.count_end) } - /// Get value of the [`Niche`]. + /// Get the value rustc reserves when consuming one value from the [`Niche`]. pub fn value(&self) -> u128 { - // Prefer to consume niches at start of range over end of range - if self.count_start > 0 { - u128::from(self.count_start - 1) - } else { - let max_value = match self.size { - 1 => u128::from(u8::MAX), - 2 => u128::from(u16::MAX), - 4 => u128::from(u32::MAX), - 8 => u128::from(u64::MAX), - 16 => u128::MAX, - size => panic!("Invalid niche size: {size}"), - }; - max_value - u128::from(self.count_end) + 1 + let max_value = match self.size { + 1 => u128::from(u8::MAX), + 2 => u128::from(u16::MAX), + 4 => u128::from(u32::MAX), + 8 => u128::from(u64::MAX), + 16 => u128::MAX, + size => panic!("Invalid niche size: {size}"), + }; + let valid_start = u128::from(self.count_start); + let valid_end = max_value - u128::from(self.count_end); + let next_up = valid_end.wrapping_add(1) & max_value; + + // rust-lang/rust#155473 changed `Niche::reserve(1)` to select the invalid endpoint + // whose sign-extended integer has the smallest absolute value, preferring the value + // below `valid_start` on a tie. rustc deliberately excludes the `0..=1` valid range as + // a workaround for an `Option` miscompilation, so that range still uses `2`. + if valid_start == 0 && valid_end == 1 { + return next_up; } + + let next_down = valid_start.wrapping_sub(1) & max_value; + let sign_bit = (max_value >> 1) + 1; + let signed_abs = |value: u128| { + if value < sign_bit { value } else { ((!value) & max_value) + 1 } + }; + + if signed_abs(next_down) <= signed_abs(next_up) { next_down } else { next_up } } }