1 struct _EnvironmentNode;
2 typedef struct _EnvironmentNode _EnvironmentNode;
3 struct _EnvironmentNode {
6 _EnvironmentNode* next;
10 _EnvironmentNode* top;
13 struct Environment_get_Result;
14 typedef struct Environment_get_Result Environment_get_Result;
15 struct Environment_get_Result {
20 void Environment_initialize(Environment* self) {
24 void Environment_deinitialize(Environment* self) {
25 while(self->top != NULL) {
26 _EnvironmentNode* en = self->top;
28 Object_deinitialize(&(en->value));
33 Environment* Environment_construct() {
34 Environment* result = malloc(sizeof(Environment));
35 Environment_initialize(result);
39 void Environment_destruct(Environment* self) {
40 Environment_deinitialize(self);
44 Environment_get_Result Environment_get(Environment* self, char* symbol) {
45 for(_EnvironmentNode* current = self->top; current != NULL; current = current->next) {
46 if(strcmp(current->symbol, symbol) == 0) {
47 return (Environment_get_Result) { true, current->value };
50 return (Environment_get_Result) { false, BUILTIN_NIL };
53 void Environment_set(Environment* self, char* symbol, Object value) {
54 assert(!(Environment_get(self, symbol).found));
56 _EnvironmentNode* en = malloc(sizeof(_EnvironmentNode));