|
@@ -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++)
|