From f31b39775ff42e1babab66d7b80a2517e45b2f61 Mon Sep 17 00:00:00 2001 From: Damian Gryski Date: Tue, 26 May 2026 12:02:14 -0700 Subject: [PATCH] reflect: add string <-> []rune conversions --- src/internal/reflectlite/value.go | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/internal/reflectlite/value.go b/src/internal/reflectlite/value.go index e75485985..c3df0992d 100644 --- a/src/internal/reflectlite/value.go +++ b/src/internal/reflectlite/value.go @@ -1694,12 +1694,28 @@ func cvtUintString(src Value, t *RawType) Value { panic("cvtUintString: unimplemented") } -func cvtStringRunes(src Value, t *RawType) Value { - panic("cvsStringRunes: unimplemented") +//go:linkname stringToRunes runtime.stringToRunes +func stringToRunes(s string) []rune + +func cvtStringRunes(v Value, t *RawType) Value { + b := stringToRunes(*(*string)(v.value)) + return Value{ + typecode: t, + value: unsafe.Pointer(&b), + flags: v.flags, + } } -func cvtRunesString(src Value, t *RawType) Value { - panic("cvsRunesString: unimplemented") +//go:linkname stringFromRunes runtime.stringFromRunes +func stringFromRunes(r []rune) string + +func cvtRunesString(v Value, t *RawType) Value { + s := stringFromRunes(*(*[]rune)(v.value)) + return Value{ + typecode: t, + value: unsafe.Pointer(&s), + flags: v.flags, + } } //go:linkname slicePanic runtime.slicePanic