Skip to content

Commit 6306ac8

Browse files
itchynywtlangford
authored andcommitted
Reduce allocation on string multiplication
1 parent 9163e09 commit 6306ac8

File tree

1 file changed

+9
-11
lines changed

1 file changed

+9
-11
lines changed

Diff for: src/builtin.c

+9-11
Original file line numberDiff line numberDiff line change
@@ -320,19 +320,17 @@ static jv f_multiply(jq_state *jq, jv input, jv a, jv b) {
320320
str = b;
321321
num = a;
322322
}
323-
int n;
324-
size_t alen = jv_string_length_bytes(jv_copy(str));
325-
jv res = jv_copy(str);
326-
327-
for (n = jv_number_value(num) - 1; n > 0; n--)
328-
res = jv_string_append_buf(res, jv_string_value(str), alen);
329-
323+
jv res = jv_null();
324+
int n = jv_number_value(num);
325+
if (n > 0) {
326+
size_t alen = jv_string_length_bytes(jv_copy(str));
327+
res = jv_string_empty(alen * n);
328+
for (; n > 0; n--) {
329+
res = jv_string_append_buf(res, jv_string_value(str), alen);
330+
}
331+
}
330332
jv_free(str);
331333
jv_free(num);
332-
if (n < 0) {
333-
jv_free(res);
334-
return jv_null();
335-
}
336334
return res;
337335
} else if (ak == JV_KIND_OBJECT && bk == JV_KIND_OBJECT) {
338336
return jv_object_merge_recursive(a, b);

0 commit comments

Comments
 (0)