|
@@ -831,7 +831,7 @@ qi_value_t *qi_make_file(qi_state_t *state, FILE *file, char *mode) {
|
|
|
qi_value_t *qi_make_list(qi_state_t *state, qi_list_t *list) {
|
|
|
qi_value_t *value = qi_make_value(QI_LIST);
|
|
|
value->lock = qi_lock_create();
|
|
|
- value->value.list = list;
|
|
|
+ value->value.list = !list? qi_list_make(): list;
|
|
|
|
|
|
GC_register_finalizer(value, qi_value_finalizer, (void *)state, NULL, NULL);
|
|
|
|
|
@@ -1449,7 +1449,13 @@ qi_value_t *qi_find(qi_state_t *state, char *name) {
|
|
|
|
|
|
qi_value_t *qi_get(qi_state_t *state, char *name) {
|
|
|
qi_value_t *value;
|
|
|
- if (strcmp(name, "STDIN") == 0)
|
|
|
+ if (strcmp(name, "nil") == 0)
|
|
|
+ return state->nil;
|
|
|
+ else if (strcmp(name, "true") == 0)
|
|
|
+ return state->_true;
|
|
|
+ else if (strcmp(name, "false") == 0)
|
|
|
+ return state->_false;
|
|
|
+ else if (strcmp(name, "STDIN") == 0)
|
|
|
return state->_stdin;
|
|
|
else if (strcmp(name, "STDERR") == 0)
|
|
|
return state->_stderr;
|
|
@@ -1503,7 +1509,7 @@ void qi_decl(qi_state_t *state, char *name, qi_value_t *value) {
|
|
|
_qi_decl(state, name, value, false);
|
|
|
}
|
|
|
|
|
|
-qi_value_t *_qi_set(qi_state_t *state, bool is_pre, bool is_constant,
|
|
|
+qi_value_t *_qi_set(qi_state_t *state, bool is_pf, bool is_constant,
|
|
|
char *name, qi_value_t *value) {
|
|
|
qi_ssize_t scopes_count = qi_list_length(state->scopes);
|
|
|
|
|
@@ -1531,7 +1537,7 @@ qi_value_t *_qi_set(qi_state_t *state, bool is_pre, bool is_constant,
|
|
|
|
|
|
qi_lock_release(scope->lock);
|
|
|
|
|
|
- return !is_pre && old ? old : value;
|
|
|
+ return !is_pf && old ? old : value;
|
|
|
}
|
|
|
|
|
|
qi_lock_release(scope->lock);
|
|
@@ -2123,7 +2129,7 @@ leave:
|
|
|
return NULL;
|
|
|
}
|
|
|
|
|
|
-qi_value_t *qi_index_set(qi_state_t *state, bool is_pre, qi_value_t *value,
|
|
|
+qi_value_t *qi_index_set(qi_state_t *state, bool is_pf, qi_value_t *value,
|
|
|
qi_value_t *index, qi_value_t *newvalue) {
|
|
|
qi_value_t *meta;
|
|
|
bool fail = false;
|
|
@@ -2138,12 +2144,12 @@ qi_value_t *qi_index_set(qi_state_t *state, bool is_pre, qi_value_t *value,
|
|
|
if (qi_table_has(qi_get_metatable(value), index->value.string)) {
|
|
|
qi_value_t *old;
|
|
|
|
|
|
- if (!is_pre)
|
|
|
+ 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);
|
|
|
|
|
|
- return !is_pre && old ? old : newvalue;
|
|
|
+ return !is_pf && old ? old : newvalue;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -2153,7 +2159,7 @@ qi_value_t *qi_index_set(qi_state_t *state, bool is_pre, qi_value_t *value,
|
|
|
qi_value_t *old;
|
|
|
|
|
|
LOCKED(value, {
|
|
|
- if (!is_pre)
|
|
|
+ if (!is_pf)
|
|
|
old = qi_list_index(value->value.list,
|
|
|
(qi_ssize_t)(index->value.number));
|
|
|
|
|
@@ -2165,7 +2171,7 @@ qi_value_t *qi_index_set(qi_state_t *state, bool is_pre, qi_value_t *value,
|
|
|
qi_throw_format(state, "list index out of range: %s",
|
|
|
qi_repr(state, index, true));
|
|
|
|
|
|
- return !is_pre && old ? old : newvalue;
|
|
|
+ return !is_pf && old ? old : newvalue;
|
|
|
}
|
|
|
break;
|
|
|
|
|
@@ -2174,13 +2180,13 @@ qi_value_t *qi_index_set(qi_state_t *state, bool is_pre, qi_value_t *value,
|
|
|
qi_value_t *old;
|
|
|
|
|
|
LOCKED(value, {
|
|
|
- if (!is_pre)
|
|
|
+ if (!is_pf)
|
|
|
old = qi_table_get(value->value.table.table, index->value.string);
|
|
|
|
|
|
qi_table_set(value->value.table.table, index->value.string, newvalue);
|
|
|
});
|
|
|
|
|
|
- return !is_pre && old ? old : newvalue;
|
|
|
+ return !is_pf && old ? old : newvalue;
|
|
|
}
|
|
|
break;
|
|
|
|