From 842f70e98339e3f47bb51c6100d8ab2cf43b1f74 Mon Sep 17 00:00:00 2001 From: Benjamin Vedder Date: Mon, 19 Dec 2022 00:20:54 +0100 Subject: [PATCH] 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 --- src/eval_cps.c | 8 +- src/qq_expand.c | 2 +- src/symrepr.c | 212 +++++++++++++----------------------------------- 3 files changed, 61 insertions(+), 161 deletions(-) diff --git a/src/eval_cps.c b/src/eval_cps.c index 95ebdcfc..6dd5defa 100644 --- a/src/eval_cps.c +++ b/src/eval_cps.c @@ -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); diff --git a/src/qq_expand.c b/src/qq_expand.c index c1ba1096..34b6e214 100644 --- a/src/qq_expand.c +++ b/src/qq_expand.c @@ -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; diff --git a/src/symrepr.c b/src/symrepr.c index eb7d071f..80eb06d3 100644 --- a/src/symrepr.c +++ b/src/symrepr.c @@ -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; }