#include "Scope.h" #include #include #include #include Scope *scope_create(const Scope *parent) { Scope *const scope = malloc(sizeof(Scope)); if (scope == NULL) { perror("scope_create"); return NULL; } scope->used = 0; scope->parent = parent; return scope; } int scope_insert(Scope *scope, const char *word, int value) { if (scope->used >= SCOPE_WORD_MAX) { fprintf(stderr, "scope full\n"); return 1; } const XXH32_hash_t hash = XXH32(word, strlen(word), 0); for (int i = 0; i < scope->used; i++) if (scope->words_hash[i] == hash) { fprintf(stderr, "shadowed word\n"); return 1; } scope->words[scope->used] = word; scope->values[scope->used] = value; scope->words_hash[scope->used] = hash; fprintf(stderr, "inserted %s = %d in scope\n", scope->words[scope->used], scope->values[scope->used]); scope->used += 1; return 0; }