txlyre 16 часов назад
Родитель
Сommit
9ca80a44dd
1 измененных файлов с 15 добавлено и 0 удалено
  1. 15 0
      qirt.c

+ 15 - 0
qirt.c

@@ -2841,6 +2841,21 @@ qi_value_t *qi_mul(qi_state_t *state, qi_value_t *a, qi_value_t *b) {
 
 
   if (a->type == QI_NUMBER && b->type == QI_NUMBER)
   if (a->type == QI_NUMBER && b->type == QI_NUMBER)
     return qi_make_number(state, a->value.number * b->value.number);
     return qi_make_number(state, a->value.number * b->value.number);
+  else if (a->type == QI_STRING && b->type == QI_NUMBER) {
+    qi_size_t n = (qi_size_t)fabs(b->value.number);
+
+    if (n < 1)
+      return state->empty_string;
+    else if (n == 1)
+      return a;
+
+    qi_buffer_t *buffer = qi_buffer_make();
+
+    for (qi_size_t i = 0; i < n; i++)
+      qi_buffer_append_str(buffer, a->value.string);
+
+    return qi_make_string(state, qi_buffer_read(buffer));
+  }
 
 
 leave:
 leave:
   qi_throw_format(state, "unsupported operand types for *: %s and %s",
   qi_throw_format(state, "unsupported operand types for *: %s and %s",