From 415c9639e7098cec10f572da23026fe7551c0f05 Mon Sep 17 00:00:00 2001 From: Christoffer Lerno Date: Tue, 16 Dec 2025 20:17:54 +0100 Subject: [PATCH] - Deprecated `DString.append_chars`, use `DString.append_string` - Deprecated `DString.append_string` for DStrings, use `DString.append_dstring` instead. - Added `DString.append_char_buffer`. --- lib/std/core/dstring.c3 | 42 ++++++++++++++++------ releasenotes.md | 3 ++ test/test_suite/macros/ref_macro_method.c3 | 2 +- test/unit/stdlib/core/dstring.c3 | 4 +-- 4 files changed, 38 insertions(+), 13 deletions(-) diff --git a/lib/std/core/dstring.c3 b/lib/std/core/dstring.c3 index b1b7594de..926dde548 100644 --- a/lib/std/core/dstring.c3 +++ b/lib/std/core/dstring.c3 @@ -95,7 +95,7 @@ fn void DString.replace(&self, String needle, String replacement) match++; if (match == needle_len) { - self.append_chars(replacement); + self.append_string(replacement); match = 0; continue; } @@ -103,12 +103,12 @@ fn void DString.replace(&self, String needle, String replacement) } if (match > 0) { - self.append_chars(str[i - match:match]); + self.append_string(str[i - match:match]); match = 0; } self.append_char(c); } - if (match > 0) self.append_chars(str[^match:match]); + if (match > 0) self.append_string(str[^match:match]); }; } @@ -305,13 +305,18 @@ fn bool DString.less(self, DString other_string) return true; } -fn void DString.append_chars(&self, String str) +fn void DString.append_chars(&self, String str) @deprecated("Use append_string") +{ + self.append_char_buffer(str); +} + +fn void DString.append_char_buffer(&self, char[] str) { usz other_len = str.len; if (!other_len) return; if (!*self) { - *self = temp(str); + *self = temp((String)str); return; } self.reserve(other_len); @@ -325,7 +330,24 @@ fn Char32[] DString.copy_utf32(&self, Allocator allocator) return self.str_view().to_utf32(allocator) @inline!!; } -fn void DString.append_string(&self, DString str) +<* + @require $typeof(str) == String || $typeof(str) == DString : "Expected string or DString" +*> +macro void DString.append_string(&self, str) +{ + $if $typeof(str) == String: + self.append_char_buffer(str); + $else + self.append_string_deprecated(str); + $endif +} + +macro void DString.append_string_deprecated(&self, DString str) @deprecated("Use .append_dstring()") +{ + self.append_dstring(str); +} + +fn void DString.append_dstring(&self, DString str) { StringData* other = str.data(); if (!other) return; @@ -340,7 +362,7 @@ fn void DString.clear(self) fn usz? DString.write(&self, char[] buffer) @dynamic { - self.append_chars((String)buffer); + self.append_char_buffer(buffer); return buffer.len; } @@ -400,9 +422,9 @@ macro void DString.append(&self, value) $case ichar: self.append_char(value); $case DString: - self.append_string(value); + self.append_dstring(value); $case String: - self.append_chars(value); + self.append_string(value); $case Char32: self.append_char32(value); $default: @@ -410,7 +432,7 @@ macro void DString.append(&self, value) $case $defined((Char32)value): self.append_char32((Char32)value); $case $defined((String)value): - self.append_chars((String)value); + self.append_string((String)value); $default: $error "Unsupported type for append – use appendf instead."; $endswitch diff --git a/releasenotes.md b/releasenotes.md index 8d81705df..ebf0cbebc 100644 --- a/releasenotes.md +++ b/releasenotes.md @@ -35,6 +35,9 @@ - Add `poly1305` one-time Message Authentication Code and associated tests. #2639 - Add `Elf32_Shdr` and `Elf64_Shdr` to `std::os::linux`. - Add `any.to` and `any.as`. +- Deprecated `DString.append_chars`, use `DString.append_string` +- Deprecated `DString.append_string` for DStrings, use `DString.append_dstring` instead. +- Added `DString.append_char_buffer`. ## 0.7.8 Change list diff --git a/test/test_suite/macros/ref_macro_method.c3 b/test/test_suite/macros/ref_macro_method.c3 index a1cb8662b..6679d9fca 100644 --- a/test/test_suite/macros/ref_macro_method.c3 +++ b/test/test_suite/macros/ref_macro_method.c3 @@ -20,7 +20,7 @@ fn void main() ms.dyn[i].tinit(); } - ms.dyn[0].append_chars("sad"); + ms.dyn[0].append_string("sad"); ms.dyn[0].append("sad"); }; } \ No newline at end of file diff --git a/test/unit/stdlib/core/dstring.c3 b/test/unit/stdlib/core/dstring.c3 index e45dc465a..d1b09df32 100644 --- a/test/unit/stdlib/core/dstring.c3 +++ b/test/unit/stdlib/core/dstring.c3 @@ -96,7 +96,7 @@ fn void test_append() assert(s == "éèà", "got '%s'; want 'éèà'", s); str.clear(); - str.append_chars("foo"); + str.append_string("foo"); s = str.str_view(); assert(s == "foo", "got '%s'; want 'foo'", s); str.clear(); @@ -113,7 +113,7 @@ fn void test_append() assert(s == "xxxyyy", "got '%s'; want 'xxxyyy'", s); str3.clear(); - str3.append_string(str2); + str3.append_dstring(str2); s = str3.str_view(); assert(s == "yyy", "got '%s'; want 'yyy'", s); }