Merge commit '1f0c09151c8ae7bc5c0f7d7adcc5fb5483ff14a9'

This commit is contained in:
Benjamin Vedder 2022-02-16 13:14:47 +01:00
commit 3bdf0e92aa
3 changed files with 31 additions and 6 deletions

View File

@ -23,6 +23,12 @@
extern int lbm_variables_init(lbm_value *variable_storage, int variable_storage_size); extern int lbm_variables_init(lbm_value *variable_storage, int variable_storage_size);
extern lbm_value *lbm_get_variable_table(void); extern lbm_value *lbm_get_variable_table(void);
extern lbm_value lbm_get_variable_by_index(int i);
extern const char *lbm_get_variable_name_by_index(int index);
/* internal use by evaluator (mostly)*/
extern lbm_value lbm_get_var(lbm_uint index); extern lbm_value lbm_get_var(lbm_uint index);
extern lbm_value lbm_set_var(lbm_uint index, lbm_value value); extern lbm_value lbm_set_var(lbm_uint index, lbm_value value);
#endif #endif

View File

@ -416,6 +416,14 @@ int main(int argc, char **argv) {
curr = lbm_cdr(curr); curr = lbm_cdr(curr);
printf(" %s\r\n",output); printf(" %s\r\n",output);
} }
printf("Variables:\r\n");
for (int i = 0; i < lbm_get_num_variables(); i ++) {
const char *name = lbm_get_variable_name_by_index(i);
lbm_print_value(output,1024, lbm_get_variable_by_index(i));
printf(" %s = %s\r\n", name ? name : "error", output);
}
}else if (n >= 5 && strncmp(str, ":load", 5) == 0) { }else if (n >= 5 && strncmp(str, ":load", 5) == 0) {
char *file_str = load_file(&str[5]); char *file_str = load_file(&str[5]);
if (file_str) { if (file_str) {
@ -524,7 +532,7 @@ int main(int argc, char **argv) {
} else if (strncmp(str, ":step", 5) == 0) { } else if (strncmp(str, ":step", 5) == 0) {
int num = atoi(str + 5); int num = atoi(str + 5);
lbm_step_n_eval((uint32_t)num); lbm_step_n_eval((uint32_t)num);
} else if (strncmp(str, ":array", 6) == 0) { } else if (strncmp(str, ":array", 6) == 0) {
lbm_pause_eval_with_gc(30); lbm_pause_eval_with_gc(30);
@ -541,7 +549,7 @@ int main(int argc, char **argv) {
lbm_define("i-arr", arr_val); lbm_define("i-arr", arr_val);
lbm_continue_eval(); lbm_continue_eval();
} else { } else {
/* Get exclusive access to the heap */ /* Get exclusive access to the heap */
lbm_pause_eval(); lbm_pause_eval();

View File

@ -40,10 +40,13 @@ lbm_value *lbm_get_variable_table(void) {
return variable_table; return variable_table;
} }
lbm_value lbm_get_var(lbm_uint index) { lbm_value lbm_get_var(lbm_uint sym_val) {
int i = (int)index - VARIABLE_SYMBOLS_START; int i = (int)sym_val - VARIABLE_SYMBOLS_START;
return lbm_get_variable_by_index(i);
}
lbm_value lbm_get_variable_by_index(int i) {
if (variable_table && if (variable_table &&
i >= 0 && i >= 0 &&
i < variable_table_size) { i < variable_table_size) {
@ -53,10 +56,18 @@ lbm_value lbm_get_var(lbm_uint index) {
} }
} }
const char *lbm_get_variable_name_by_index(int index) {
if (index < 0 ||
index >= lbm_get_num_variables()) return NULL;
lbm_uint sym_id = (lbm_uint)index + VARIABLE_SYMBOLS_START;
return lbm_get_name_by_symbol(sym_id);
}
lbm_value lbm_set_var(lbm_uint index, lbm_value value) { lbm_value lbm_set_var(lbm_uint index, lbm_value value) {
int i = (int)index - VARIABLE_SYMBOLS_START; int i = (int)index - VARIABLE_SYMBOLS_START;
if (variable_table && if (variable_table &&
i >= 0 && i >= 0 &&
i < variable_table_size) { i < variable_table_size) {