6 struct EnvironmentNode;
7 typedef struct EnvironmentNode EnvironmentNode;
8 struct EnvironmentNode {
11 EnvironmentNode* next;
16 EnvironmentNode* root;
19 Environment* Environment_create(Environment* parent) {
20 Environment* result = malloc(sizeof(Environment));
21 result->parent = parent;
26 EnvironmentGetResult Environment_get(Environment* self, Symbol* key) {
27 if(self == NULL) return (EnvironmentGetResult) { false, NULL };
29 for(EnvironmentNode* search = self->root; search != NULL; search = search->next) {
30 if(search->key == key) return (EnvironmentGetResult) { true, search->value };
33 return Environment_get(self->parent, key);
36 bool Environment_set(Environment* self, Symbol* key, Object* value) {
39 for(EnvironmentNode* search = self->root; search != NULL; search = search->next) {
40 if(search->key == key) return false;
43 EnvironmentNode* node = malloc(sizeof(EnvironmentNode));
46 node->next = self->root;