From 62dfa477103f5aa00db9f5e1bf282075d6ce4b53 Mon Sep 17 00:00:00 2001 From: upstream Date: Wed, 2 Sep 2026 10:25:31 +0200 Subject: [PATCH] Upstream sharkdp/numbat state of the touched files before c69ba1b277 --- examples/tests/strings.nbt | 8 -------- numbat/src/ffi/strings.rs | 13 +++---------- 2 files changed, 3 insertions(+), 18 deletions(-) diff --git a/examples/tests/strings.nbt b/examples/tests/strings.nbt index be01dec..2678dee 100644 --- a/examples/tests/strings.nbt +++ b/examples/tests/strings.nbt @@ -1,19 +1,11 @@ assert_eq(str_length(""), 0) assert_eq(str_length("foo"), 3) -# Length and slicing operate on Unicode code points, not on UTF-8 bytes -assert_eq(str_length("café"), 4) -assert_eq(str_length("❤"), 1) - assert_eq(str_slice(0, 5, "hello world"), "hello") assert_eq(str_slice(6, 11, "hello world"), "world") assert_eq(str_slice(0, 0, "hello world"), "") assert_eq(str_slice(0, 100, "hello world"), "") -assert_eq(str_slice(0, 4, "café"), "café") -assert_eq(str_slice(3, 4, "café"), "é") -assert_eq(str_slice(0, 3, "café"), "caf") - assert_eq(chr(65), "A") assert_eq(chr(97), "a") assert_eq(chr(0x2764), "❤") diff --git a/numbat/src/ffi/strings.rs b/numbat/src/ffi/strings.rs index 1ec031c..a810080 100644 --- a/numbat/src/ffi/strings.rs +++ b/numbat/src/ffi/strings.rs @@ -12,7 +12,7 @@ pub fn str_length( mut args: Args, _return_type: &TypeScheme, ) -> Result> { - let len = string_arg!(args).chars().count(); + let len = string_arg!(args).len(); return_scalar!(len as f64) } @@ -41,16 +41,9 @@ pub fn str_slice( let end = quantity_arg!(args).unsafe_value().to_f64() as usize; let input = string_arg!(args); - // Indices refer to code points, not bytes; out-of-range requests yield an - // empty string as before. - let characters = input.chars().collect::>(); - let output = if start <= end && end <= characters.len() { - characters[start..end].iter().collect::() - } else { - String::new() - }; + let output = input.get(start..end).unwrap_or_default(); - return_string!(from = &output) + return_string!(borrowed = output) } pub fn chr(