From be51143ac507023bba66454aad35a75aa88f1233 Mon Sep 17 00:00:00 2001 From: Delyan Angelov Date: Fri, 1 Dec 2023 18:26:27 +0200 Subject: [PATCH] strings: fix using array_push_many inside write_string + gc, not using array_push_many_noscan (part 1) --- vlib/builtin/array_d_gcboehm_opt.v | 2 +- vlib/strings/builder.c.v | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/vlib/builtin/array_d_gcboehm_opt.v b/vlib/builtin/array_d_gcboehm_opt.v index 56902cf517..d9981528d3 100644 --- a/vlib/builtin/array_d_gcboehm_opt.v +++ b/vlib/builtin/array_d_gcboehm_opt.v @@ -255,7 +255,7 @@ fn (mut a array) push_noscan(val voidptr) { // push_many implements the functionality for pushing another array. // `val` is array.data and user facing usage is `a << [1,2,3]` @[unsafe] -fn (mut a3 array) push_many_noscan(val voidptr, size int) { +pub fn (mut a3 array) push_many_noscan(val voidptr, size int) { if size <= 0 || val == unsafe { nil } { return } diff --git a/vlib/strings/builder.c.v b/vlib/strings/builder.c.v index ef3823aa79..f7403ca913 100644 --- a/vlib/strings/builder.c.v +++ b/vlib/strings/builder.c.v @@ -134,7 +134,11 @@ pub fn (mut b Builder) write_string(s string) { if s.len == 0 { return } - unsafe { b.push_many(s.str, s.len) } + $if gcboehm ? { + unsafe { b.push_many_noscan(s.str, s.len) } + } $else { + unsafe { b.push_many(s.str, s.len) } + } // for c in s { // b.buf << c // }