diff --git a/lang/main.c b/lang/main.c index 00bcf26..7847baa 100644 --- a/lang/main.c +++ b/lang/main.c @@ -10,27 +10,31 @@ #define SYMBOL_LEN 32 #define SYMBOLS_MAX 32 +typedef int symbol; + typedef struct { char name[SYMBOL_LEN]; -} symbol; + symbol sym; +} symbol_mapping; -symbol symbols[SYMBOLS_MAX] = {0}; +symbol_mapping symbols[SYMBOLS_MAX] = {0}; mtx_t symbols_lock; -int find_symbol(char *name) { +symbol find_symbol(char *name) { mtx_lock(&symbols_lock); for(int i = 0; i < SYMBOLS_MAX; ++i) { - symbol *curr_sym = &symbols[i]; + symbol_mapping *curr_sym = &symbols[i]; char *curr_name = curr_sym->name; if(curr_name[0] == 0) { strncpy(curr_name, name, SYMBOL_LEN); + curr_sym->sym = i; mtx_unlock(&symbols_lock); - return i; + return curr_sym->sym; } else { int cmp = strncmp(curr_name, name, SYMBOL_LEN); if(cmp == 0) { mtx_unlock(&symbols_lock); - return i; + return curr_sym->sym; } } } @@ -50,7 +54,7 @@ typedef struct object *(object_call)(struct object*, int, argstack*); typedef struct { - int symbol; + symbol symbol; object_call *call; } call_mapping;