// // Environment. // typedef struct EnvSymbol { Object *symbol; Object *value; } EnvSymbol; typedef struct Environment { struct Environment *parent; EnvSymbol *memory; size_t size; size_t capacity; } Environment; #define ENV_SIZE 256 static EnvSymbol environment[ENV_SIZE]; static size_t env_n = 0; Object * env_find_symbol(Object *symbol) { for (size_t i = 0; i < env_n; i++) { if (symbol_eq(environment[i].symbol, symbol)) { return environment[i].value; } } return obj_nil; } Environment * env_create(Environment *parent) { // TODO: calloc env and assign parent. return NULL; } void env_add_symbol(EnvSymbol symbol, Environment *env) { // TODO: If empty allocate enough for one object. // TODO: If full double the capacity and realloc. // TODO: Put the symbol on the next slot available. }