Skip to content

Commit 4475252

Browse files
committed
FIX: optimized (and fixed regression) when appending char on string
1 parent 360256f commit 4475252

File tree

2 files changed

+17
-3
lines changed

2 files changed

+17
-3
lines changed

src/core/f-modify.c

+9-3
Original file line numberDiff line numberDiff line change
@@ -157,9 +157,15 @@
157157
else Trap_Arg(src_val);
158158
}
159159
else if (IS_CHAR(src_val)) {
160-
src_ser = BUF_FORM;
161-
RESET_TAIL(src_ser);
162-
src_ser = Append_Byte(src_ser, VAL_CHAR(src_val)); // unicode ok too
160+
if (VAL_CHAR(src_val) < 256) {
161+
src_ser = BUF_FORM;
162+
*SERIES_DATA(src_ser) = (REBYTE)VAL_CHAR(src_val);
163+
}
164+
else {
165+
src_ser = BUF_UTF8;
166+
*(REBUNI*)SERIES_DATA(src_ser) = (REBUNI)VAL_CHAR(src_val);
167+
}
168+
SERIES_TAIL(src_ser) = 1;
163169
}
164170
else if (IS_BLOCK(src_val)) {
165171
src_ser = Form_Tight_Block(src_val);

src/tests/units/series-test.r3

+8
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,14 @@ Rebol [
179179

180180
===end-group===
181181

182+
183+
===start-group=== "APPEND string!"
184+
--test-- "APPEND string! char!"
185+
--assert "a" = append "" #"a"
186+
--assert "←" = append "" #"^(2190)" ; wide char
187+
===end-group===
188+
189+
182190
;@@ https://github.com/Oldes/Rebol-issues/issues/1791
183191
===start-group=== "APPEND binary!"
184192
--test-- "APPEND binary! binary!"

0 commit comments

Comments
 (0)