#include"vartable.h" #include"utils.h" #include #include VarTable *vartable_new(VarTable *parent) { VarTable *ret = malloc(sizeof(*ret)); ret->parent = parent; ret->count = 0; ret->names = NULL; ret->data = NULL; return ret; } VarTableEntry *vartable_get(VarTable *this, const char *name) { for(size_t v = 0; v < this->count; v++) { if(!strcmp(name, this->names[v])) return this->data[v]; } return NULL; } VarTableEntry *vartable_find(VarTable *this, const char *name) { VarTable *tbl = this; while(tbl) { VarTableEntry *entry = vartable_get(tbl, name); if(entry) { return entry; } tbl = tbl->parent; } return NULL; } VarTableEntry *vartable_set(VarTable *this, const char *name, VarTableEntry *e) { this->names = realloc(this->names, sizeof(*this->names) * (this->count + 1)); this->data = realloc(this->data, sizeof(*this->data) * (this->count + 1)); this->names[this->count] = name; this->data[this->count] = e; this->count++; return e; }