From 44dddecc0921e3be1a331c4947bbfd32cb1fe06b Mon Sep 17 00:00:00 2001 From: Delyan Angelov Date: Fri, 28 Jan 2022 20:41:50 +0200 Subject: [PATCH] builtin: use a pure V version of string.to_wide() on != windows (#13314) --- vlib/builtin/utf8.c.v | 9 ++++++++- vlib/builtin/utf8_test.v | 28 ++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/vlib/builtin/utf8.c.v b/vlib/builtin/utf8.c.v index f2ead3aaf..d4fb9fea6 100644 --- a/vlib/builtin/utf8.c.v +++ b/vlib/builtin/utf8.c.v @@ -17,7 +17,14 @@ pub fn (_str string) to_wide() &u16 { return wstr } } $else { - return 0 + srunes := _str.runes() + unsafe { + mut result := &u16(vcalloc_noscan((srunes.len + 1) * 2)) + for i, r in srunes { + result[i] = u16(r) + } + return result + } } } diff --git a/vlib/builtin/utf8_test.v b/vlib/builtin/utf8_test.v index 46983f1c1..769b4818c 100644 --- a/vlib/builtin/utf8_test.v +++ b/vlib/builtin/utf8_test.v @@ -26,3 +26,31 @@ fn test_utf8_wide_char() { assert val[2].hex() == '94' } } + +fn test_to_wide_latin() { + s := 'abc 123' + w := s.to_wide() + unsafe { + assert w[0] == 97 + assert w[1] == 98 + assert w[2] == 99 + assert w[3] == 32 + assert w[4] == 49 + assert w[5] == 50 + assert w[6] == 51 + assert w[7] == 0 + } +} + +fn test_to_wide_cyrillic() { + s := 'Проба' + w := s.to_wide() + unsafe { + assert w[0] == 1055 + assert w[1] == 1088 + assert w[2] == 1086 + assert w[3] == 1073 + assert w[4] == 1072 + assert w[5] == 0 + } +} -- 2.30.2