Squashed 'lispBM/lispBM/' changes from cf1214d8..dd848f86

dd848f86 small readability refactor
3853cb02 removing a dead-store in qq_expand.c
8f26a7b0 Refactoring symrepr.c for readability and code-reuse

git-subtree-dir: lispBM/lispBM
git-subtree-split: dd848f86f03698c9f34097d0e37d14841e8fcfb3
This commit is contained in:
Benjamin Vedder 2022-12-19 00:20:54 +01:00
parent 64aeaa0429
commit 842f70e983
3 changed files with 61 additions and 161 deletions

View File

@ -3042,11 +3042,10 @@ static void evaluation_step(void){
if (decoded_k < NUM_CONTINUATIONS) {
continuations[decoded_k](ctx);
return;
} else {
error_ctx(ENC_SYM_FATAL_ERROR);
return;
}
return;
}
lbm_uint exp_type = lbm_type_of(ctx->curr_exp);
@ -3056,10 +3055,7 @@ static void evaluation_step(void){
if (eval_symbol(ctx, &s)) {
ctx->app_cont = true;
ctx->r = s;
return;
}
if (dynamic_load_callback) {
} else if (dynamic_load_callback) {
dynamic_load(ctx);
} else {
error_ctx(ENC_SYM_NOT_FOUND);

View File

@ -131,7 +131,7 @@ lbm_value append(lbm_value front, lbm_value back) {
*/
lbm_value qq_expand_list(lbm_value l) {
lbm_value res = ENC_SYM_NIL;
lbm_value res;
lbm_value car_val;
lbm_value cdr_val;

View File

@ -285,18 +285,10 @@ int lbm_get_symbol_by_name(char *name, lbm_uint* id) {
return 0;
}
int lbm_add_symbol(char *name, lbm_uint* id) {
size_t n = 0;
n = strlen(name) + 1;
static bool store_symbol_name(char *name, lbm_uint *res) {
size_t n = strlen(name) + 1;
if (n == 1) return 0; // failure if empty symbol
lbm_uint *m = lbm_memory_allocate(3);
if (m == NULL) {
return 0;
}
char *symbol_name_storage = NULL;
lbm_uint alloc_size;
if (n % sizeof(lbm_uint) == 0) {
@ -307,17 +299,23 @@ int lbm_add_symbol(char *name, lbm_uint* id) {
symbol_name_storage = (char *)lbm_memory_allocate(alloc_size);
if (symbol_name_storage == NULL) {
lbm_memory_free(m);
return 0;
}
if (symbol_name_storage == NULL) return false;
symbol_table_size_list += 3;
symbol_table_size_strings += alloc_size;
strcpy(symbol_name_storage, name);
m[NAME] = (lbm_uint)symbol_name_storage;
*res = (lbm_uint)symbol_name_storage;
return true;
}
static bool add_symbol_to_symtab(lbm_uint name, lbm_uint id) {
lbm_uint *m = lbm_memory_allocate(3);
if (m == NULL) return false;
symbol_table_size_list += 3;
m[NAME] = name;
if (symlist == NULL) {
m[NEXT] = (lbm_uint) NULL;
@ -326,8 +324,33 @@ int lbm_add_symbol(char *name, lbm_uint* id) {
m[NEXT] = (lbm_uint) symlist;
symlist = m;
}
m[ID] = next_symbol_id++;
*id = m[ID];
m[ID] =id;
return true;
}
int lbm_add_symbol(char *name, lbm_uint* id) {
lbm_uint symbol_name_storage;
if (!store_symbol_name(name, &symbol_name_storage)) return 0;
if (!add_symbol_to_symtab(symbol_name_storage, next_symbol_id)) {
lbm_memory_free((lbm_uint*)symbol_name_storage);
return 0;
}
*id = next_symbol_id ++;
return 1;
}
int lbm_add_symbol_const(char *name, lbm_uint* id) {
if (!add_symbol_to_symtab((lbm_uint)name, next_symbol_id)) {
return 0;
}
*id = next_symbol_id ++;
return 1;
}
@ -340,179 +363,60 @@ int lbm_str_to_symbol(char *name, lbm_uint *sym_id) {
}
int lbm_add_variable_symbol(char *name, lbm_uint* id) {
if (strlen(name) == 0) return 0; // failure if empty symbol
if (next_variable_symbol_id >= VARIABLE_SYMBOLS_END) return 0;
size_t n = 0;
lbm_uint symbol_name_storage;
if (!store_symbol_name(name, &symbol_name_storage)) return 0;
n = strlen(name) + 1;
if (n == 1) return 0; // failure if empty symbol
lbm_uint *m = lbm_memory_allocate(3);
if (m == NULL) {
if (!add_symbol_to_symtab(symbol_name_storage, next_variable_symbol_id)) {
lbm_memory_free((lbm_uint*)symbol_name_storage);
return 0;
}
char *symbol_name_storage = NULL;
lbm_uint alloc_size;
if (n % sizeof(lbm_uint) == 0) {
alloc_size = n/(sizeof(lbm_uint));
} else {
alloc_size = (n/(sizeof(lbm_uint))) + 1;
}
*id = next_variable_symbol_id ++;
symbol_name_storage = (char *)lbm_memory_allocate(alloc_size);
if (symbol_name_storage == NULL) {
lbm_memory_free(m);
return 0;
}
symbol_table_size_list += 3;
symbol_table_size_strings += alloc_size;
strcpy(symbol_name_storage, name);
m[NAME] = (lbm_uint)symbol_name_storage;
if (symlist == NULL) {
m[NEXT] = (lbm_uint) NULL;
symlist = m;
} else {
m[NEXT] = (lbm_uint) symlist;
symlist = m;
}
m[ID] = next_variable_symbol_id++;
*id = m[ID];
return 1;
}
int lbm_add_variable_symbol_const(char *name, lbm_uint* id) {
if (strlen(name) == 0) return 0; // failure if empty symbol
if (next_variable_symbol_id >= VARIABLE_SYMBOLS_END) return 0;
size_t n = 0;
n = strlen(name) + 1;
if (n == 1) return 0; // failure if empty symbol
lbm_uint *m = lbm_memory_allocate(3);
if (m == NULL) {
if (!add_symbol_to_symtab((lbm_uint)name, next_variable_symbol_id)) {
return 0;
}
symbol_table_size_list += 3;
*id = next_variable_symbol_id ++;
m[NAME] = (lbm_uint)name;
if (symlist == NULL) {
m[NEXT] = (lbm_uint) NULL;
symlist = m;
} else {
m[NEXT] = (lbm_uint) symlist;
symlist = m;
}
m[ID] = next_variable_symbol_id++;
*id = m[ID];
return 1;
}
int lbm_add_symbol_const(char *name, lbm_uint* id) {
if (strlen(name) == 0) return 0; // failure if empty symbol
lbm_uint *m = lbm_memory_allocate(3);
if (m == NULL) {
return 0;
}
symbol_table_size_list += 3;
m[NAME] = (lbm_uint)name;
if (symlist == NULL) {
m[NEXT] = (lbm_uint) NULL;
symlist = m;
} else {
m[NEXT] = (lbm_uint) symlist;
symlist = m;
}
m[ID] = next_symbol_id++;
*id = m[ID];
return 1;
}
int lbm_add_extension_symbol(char *name, lbm_uint* id) {
size_t n = 0;
n = strlen(name) + 1;
if (n == 1) return 0; // failure if empty symbol
if (next_extension_symbol_id >= EXTENSION_SYMBOLS_END) return 0;
lbm_uint symbol_name_storage;
if (!store_symbol_name(name, &symbol_name_storage)) return 0;
lbm_uint *m = lbm_memory_allocate(3);
if (m == NULL) {
if (!add_symbol_to_symtab(symbol_name_storage, next_extension_symbol_id)) {
lbm_memory_free((lbm_uint*)symbol_name_storage);
return 0;
}
char *symbol_name_storage = NULL;
lbm_uint alloc_size;
if (n % sizeof(lbm_uint) == 0) {
alloc_size = n/(sizeof(lbm_uint));
} else {
alloc_size = (n/(sizeof(lbm_uint))) + 1;
}
*id = next_extension_symbol_id ++;
symbol_name_storage = (char *)lbm_memory_allocate(alloc_size);
if (symbol_name_storage == NULL) {
lbm_memory_free(m);
return 0;
}
symbol_table_size_list += 3;
symbol_table_size_strings += alloc_size;
strcpy(symbol_name_storage, name);
m[NAME] = (lbm_uint)symbol_name_storage;
if (symlist == NULL) {
m[NEXT] = (lbm_uint) NULL;
symlist = m;
} else {
m[NEXT] = (lbm_uint) symlist;
symlist = m;
}
m[ID] = next_extension_symbol_id++;
*id = m[ID];
return 1;
}
int lbm_add_extension_symbol_const(char *name, lbm_uint* id) {
if (strlen(name) == 0) return 0; // failure if empty symbol
if (next_extension_symbol_id >= EXTENSION_SYMBOLS_END) return 0;
lbm_uint *m = lbm_memory_allocate(3);
if (m == NULL) {
if (!add_symbol_to_symtab((lbm_uint)name, next_extension_symbol_id)) {
return 0;
}
symbol_table_size_list += 3;
*id = next_extension_symbol_id ++;
m[NAME] = (lbm_uint)name;
if (symlist == NULL) {
m[NEXT] = (lbm_uint) NULL;
symlist = m;
} else {
m[NEXT] = (lbm_uint) symlist;
symlist = m;
}
m[ID] = next_extension_symbol_id++;
*id = m[ID];
return 1;
}