nctref/src/vartable.c

44 lines
1001 B
C
Raw Normal View History

2023-08-27 19:48:06 +03:00
#include"vartable.h"
#include"utils.h"
#include<stdlib.h>
#include<string.h>
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;
}