diff --git a/src/core/f-modify.c b/src/core/f-modify.c index 95fbff4fec..3dbe548a15 100644 --- a/src/core/f-modify.c +++ b/src/core/f-modify.c @@ -157,9 +157,15 @@ else Trap_Arg(src_val); } else if (IS_CHAR(src_val)) { - src_ser = BUF_FORM; - RESET_TAIL(src_ser); - src_ser = Append_Byte(src_ser, VAL_CHAR(src_val)); // unicode ok too + if (VAL_CHAR(src_val) < 256) { + src_ser = BUF_FORM; + *SERIES_DATA(src_ser) = (REBYTE)VAL_CHAR(src_val); + } + else { + src_ser = BUF_UTF8; + *(REBUNI*)SERIES_DATA(src_ser) = (REBUNI)VAL_CHAR(src_val); + } + SERIES_TAIL(src_ser) = 1; } else if (IS_BLOCK(src_val)) { src_ser = Form_Tight_Block(src_val); diff --git a/src/tests/units/series-test.r3 b/src/tests/units/series-test.r3 index 3c3a4f7cdb..12302488a3 100644 --- a/src/tests/units/series-test.r3 +++ b/src/tests/units/series-test.r3 @@ -179,6 +179,14 @@ Rebol [ ===end-group=== + +===start-group=== "APPEND string!" + --test-- "APPEND string! char!" + --assert "a" = append "" #"a" + --assert "←" = append "" #"^(2190)" ; wide char +===end-group=== + + ;@@ https://github.com/Oldes/Rebol-issues/issues/1791 ===start-group=== "APPEND binary!" --test-- "APPEND binary! binary!"