|
@@ -2086,24 +2086,22 @@ qi_value_t *qi_index_set(qi_state_t *state, qi_bool is_pf, qi_value_t *value,
|
|
|
qi_value_t *meta;
|
|
|
qi_bool fail = false;
|
|
|
|
|
|
- if ((meta = qi_call_meta(state, &fail, value, "__index_set", 3, value, index,
|
|
|
- newvalue)))
|
|
|
- return meta;
|
|
|
- else if (fail)
|
|
|
- goto leave;
|
|
|
- else if (value->type == QI_TABLE && qi_has_metatable(value) &&
|
|
|
- index->type == QI_STRING) {
|
|
|
- if (qi_table_has(qi_get_metatable(value), index->value.string)) {
|
|
|
- qi_value_t *old;
|
|
|
+ if (value->type == QI_TABLE && qi_has_metatable(value) &&
|
|
|
+ index->type == QI_STRING && qi_table_has(qi_get_metatable(value), index->value.string)) {
|
|
|
+ qi_value_t *old;
|
|
|
|
|
|
- if (!is_pf)
|
|
|
- old = qi_table_get(qi_get_metatable(value), index->value.string);
|
|
|
+ if (!is_pf)
|
|
|
+ old = qi_table_get(qi_get_metatable(value), index->value.string);
|
|
|
|
|
|
- qi_table_set(qi_get_metatable(value), index->value.string, newvalue);
|
|
|
+ qi_table_set(qi_get_metatable(value), index->value.string, newvalue);
|
|
|
|
|
|
- return !is_pf && old ? old : newvalue;
|
|
|
- }
|
|
|
- }
|
|
|
+ return !is_pf && old ? old : newvalue;
|
|
|
+ } else if ((meta = qi_call_meta(state, &fail, value, "__index_set", 3, value, index,
|
|
|
+ newvalue)))
|
|
|
+ return meta;
|
|
|
+
|
|
|
+ if (fail)
|
|
|
+ goto leave;
|
|
|
|
|
|
switch (value->type) {
|
|
|
case QI_LIST:
|
|
@@ -2218,6 +2216,9 @@ qi_value_t *qi_call_debug(qi_state_t *state, qi_value_t *value,
|
|
|
}
|
|
|
|
|
|
qi_bool _qi_equals(qi_state_t *state, qi_value_t *a, qi_value_t *b) {
|
|
|
+ if (a == b)
|
|
|
+ return true;
|
|
|
+
|
|
|
qi_value_t *meta;
|
|
|
if ((meta = qi_call_meta(state, NULL, a, "__equals", 2, a, b))) {
|
|
|
if (meta->type != QI_BOOLEAN)
|