From 5989dbdfcfb42aeb6abcb19289f797d9e260f145 Mon Sep 17 00:00:00 2001 From: Nicolas Williams Date: Fri, 29 Nov 2013 15:49:11 -0600 Subject: Add string multiplication by number --- builtin.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'builtin.c') diff --git a/builtin.c b/builtin.c index 0d920abd..1e38482d 100644 --- a/builtin.c +++ b/builtin.c @@ -138,6 +138,19 @@ static jv f_multiply(jv input, jv a, jv b) { jv_free(input); if (jv_get_kind(a) == JV_KIND_NUMBER && jv_get_kind(b) == JV_KIND_NUMBER) { return jv_number(jv_number_value(a) * jv_number_value(b)); + } else if (jv_get_kind(a) == JV_KIND_STRING && jv_get_kind(b) == JV_KIND_NUMBER) { + int n; + size_t alen = jv_string_length_bytes(jv_copy(a)); + jv res = a; + + for (n = jv_number_value(b) - 1; n > 0; n--) + res = jv_string_append_buf(res, jv_string_value(a), alen); + + if (n < 0) { + jv_free(a); + return jv_null(); + } + return res; } else { return type_error2(a, b, "cannot be multiplied"); } -- cgit v1.2.3