From 57aa6cf5795bc79ef43988ee5d8739c04c71bb8a Mon Sep 17 00:00:00 2001 From: Torben Ewert Date: Sat, 20 Jan 2024 16:07:47 +0100 Subject: [PATCH] fix: allow unicode symbols in string bracket access --- lib/pinc_backend/Pinc_Interpreter.ml | 8 +++++--- test/test.t/data.pi | 7 ++++++- test/test.t/run.t | 3 +++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/lib/pinc_backend/Pinc_Interpreter.ml b/lib/pinc_backend/Pinc_Interpreter.ml index 3f26654..4f7b6c8 100644 --- a/lib/pinc_backend/Pinc_Interpreter.ml +++ b/lib/pinc_backend/Pinc_Interpreter.ml @@ -1102,12 +1102,14 @@ and eval_binary_bracket_access ~state left right = | String a, Int b -> let output = try - String.get_utf_8_uchar a b - |> Uchar.utf_decode_uchar + a + |> CCUtf8_string.of_string_exn + |> CCUtf8_string.to_list + |> Fun.flip List.nth b |> Value.of_char ~value_loc: (Location.merge ~s:left.expression_loc ~e:right.expression_loc ()) - with Invalid_argument _ -> + with Failure _ | Invalid_argument _ -> Value.null ~value_loc:(Location.merge ~s:left.expression_loc ~e:right.expression_loc ()) () diff --git a/test/test.t/data.pi b/test/test.t/data.pi index 75bd675..bd663d5 100644 --- a/test/test.t/data.pi +++ b/test/test.t/data.pi @@ -9,11 +9,16 @@ site Docs( ) { let floats? = [1_000.462, 1., 1.4332, .5, 1e10, 1e+2, 1e-5, 1.e-2, 0.1e-1]; - let fruits = " apples,oranges,bannanas "; + let fruits = " ⌘,apples,oranges,bannanas "; + + let unicode = "⌘2"; <> {fruits |> Base.String.trim |> Base.String.split(',')} + {unicode[0]} + {unicode[1]} + {floats[0]} } diff --git a/test/test.t/run.t b/test/test.t/run.t index 0387d1d..4bf0fa8 100644 --- a/test/test.t/run.t +++ b/test/test.t/run.t @@ -1,6 +1,9 @@ $ print . Docs + ⌘ apples oranges bannanas + ⌘ + 2 1000.462