txlyre 1 天之前
父节点
当前提交
5e4cd87542
共有 1 个文件被更改,包括 12 次插入5 次删除
  1. 12 5
      qirt.c

+ 12 - 5
qirt.c

@@ -2412,9 +2412,9 @@ qi_value_t *qi_add(qi_state_t *state, qi_value_t *a, qi_value_t *b) {
     if (!*a->value.string && !*b->value.string)
       return state->empty_string;
     else if (!*a->value.string)
-      return qi_make_string(state, b->value.string);
+      return b;
     else if (!*b->value.string)
-      return qi_make_string(state, a->value.string);
+      return a;
 
     char *string =
         qi_malloc(strlen(a->value.string) + strlen(b->value.string) + 1);
@@ -2426,9 +2426,9 @@ qi_value_t *qi_add(qi_state_t *state, qi_value_t *a, qi_value_t *b) {
     if (a->value.bytes->size == 0 && b->value.bytes->size == 0)
       return state->empty_bytes;
     else if (a->value.bytes->size == 0)
-      return qi_make_bytes(state, b->value.bytes->data, b->value.bytes->size);
+      return b;
     else if (b->value.bytes->size == 0)
-      return qi_make_bytes(state, a->value.bytes->data, a->value.bytes->size);
+      return a;
 
     qi_size_t size = a->value.bytes->size + b->value.bytes->size;
     unsigned char *bytes = qi_malloc(size);
@@ -2445,13 +2445,20 @@ qi_value_t *qi_add(qi_state_t *state, qi_value_t *a, qi_value_t *b) {
     else if (a == state->empty_tuple)
       return b;
     else if (b == state->empty_tuple)
-      return b;
+      return a;
 
     qi_list_t *newlist = qi_list_make();
 
     if (a->type == QI_LIST) {
       qi_mutex_lock(a->mutex);
       qi_mutex_lock(b->mutex);
+
+      if (!a->value.list->length && !b->value.list->length) {
+        qi_mutex_unlock(a->mutex);
+        qi_mutex_unlock(b->mutex);
+
+        return qi_make_list(state, newlist);
+      }
     }
 
     for (qi_size_t i = 0; i < qi_list_length(a->value.list); i++)