From 2a368cf53c27bc2f2892867b1c74fb4a12133b51 Mon Sep 17 00:00:00 2001 From: Turiiya <34311583+ttytm@users.noreply.github.com> Date: Wed, 10 Jul 2024 14:26:51 +0200 Subject: [PATCH] builtin, strings: improve consistency and behavior regarding explicit mutability (#21566) --- vlib/builtin/rune.v | 5 +++-- vlib/builtin/utf8.v | 8 ++++---- vlib/strings/builder.c.v | 4 ++-- .../valgrind/buffer_passed_in_fn_that_uses_tos_on_it.v | 2 +- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/vlib/builtin/rune.v b/vlib/builtin/rune.v index fa1ef5a5ce..a4907108d5 100644 --- a/vlib/builtin/rune.v +++ b/vlib/builtin/rune.v @@ -51,7 +51,7 @@ pub fn (c rune) repeat(count int) string { return c.str() } mut buffer := [5]u8{} - res := unsafe { utf32_to_str_no_malloc(u32(c), &buffer[0]) } + res := unsafe { utf32_to_str_no_malloc(u32(c), mut &buffer[0]) } return res.repeat(count) } @@ -59,7 +59,8 @@ pub fn (c rune) repeat(count int) string { @[manualfree] pub fn (c rune) bytes() []u8 { mut res := []u8{cap: 5} - res.len = unsafe { utf32_decode_to_buffer(u32(c), &u8(res.data)) } + mut buf := &u8(res.data) + res.len = unsafe { utf32_decode_to_buffer(u32(c), mut buf) } return res } diff --git a/vlib/builtin/utf8.v b/vlib/builtin/utf8.v index 4fef35616a..f585fe4297 100644 --- a/vlib/builtin/utf8.v +++ b/vlib/builtin/utf8.v @@ -12,7 +12,7 @@ pub fn utf8_char_len(b u8) int { pub fn utf32_to_str(code u32) string { unsafe { mut buffer := malloc_noscan(5) - res := utf32_to_str_no_malloc(code, buffer) + res := utf32_to_str_no_malloc(code, mut buffer) if res.len == 0 { // the buffer was not used at all free(buffer) @@ -22,9 +22,9 @@ pub fn utf32_to_str(code u32) string { } @[manualfree; unsafe] -pub fn utf32_to_str_no_malloc(code u32, buf &u8) string { +pub fn utf32_to_str_no_malloc(code u32, mut buf &u8) string { unsafe { - len := utf32_decode_to_buffer(code, buf) + len := utf32_decode_to_buffer(code, mut buf) if len == 0 { return '' } @@ -34,7 +34,7 @@ pub fn utf32_to_str_no_malloc(code u32, buf &u8) string { } @[manualfree; unsafe] -pub fn utf32_decode_to_buffer(code u32, buf &u8) int { +pub fn utf32_decode_to_buffer(code u32, mut buf &u8) int { unsafe { icode := int(code) // Prevents doing casts everywhere mut buffer := &u8(buf) diff --git a/vlib/strings/builder.c.v b/vlib/strings/builder.c.v index 84f1af1f56..24b6c645c0 100644 --- a/vlib/strings/builder.c.v +++ b/vlib/strings/builder.c.v @@ -40,7 +40,7 @@ pub fn (mut b Builder) write_ptr(ptr &u8, len int) { @[manualfree] pub fn (mut b Builder) write_rune(r rune) { mut buffer := [5]u8{} - res := unsafe { utf32_to_str_no_malloc(u32(r), &buffer[0]) } + res := unsafe { utf32_to_str_no_malloc(u32(r), mut &buffer[0]) } if res.len == 0 { return } @@ -51,7 +51,7 @@ pub fn (mut b Builder) write_rune(r rune) { pub fn (mut b Builder) write_runes(runes []rune) { mut buffer := [5]u8{} for r in runes { - res := unsafe { utf32_to_str_no_malloc(u32(r), &buffer[0]) } + res := unsafe { utf32_to_str_no_malloc(u32(r), mut &buffer[0]) } if res.len == 0 { continue } diff --git a/vlib/v/slow_tests/valgrind/buffer_passed_in_fn_that_uses_tos_on_it.v b/vlib/v/slow_tests/valgrind/buffer_passed_in_fn_that_uses_tos_on_it.v index 24b5344fd5..52787f7288 100644 --- a/vlib/v/slow_tests/valgrind/buffer_passed_in_fn_that_uses_tos_on_it.v +++ b/vlib/v/slow_tests/valgrind/buffer_passed_in_fn_that_uses_tos_on_it.v @@ -1,7 +1,7 @@ fn main() { unsafe { mut buffer := malloc_noscan(5) - s := utf32_to_str_no_malloc(77, buffer) + s := utf32_to_str_no_malloc(77, mut buffer) println(s) } }