+bool c_symbol_equal(char* left, char* right)
+{
+ return strcmp(left, right) == 0;
+}
+
+Object* c_evaluate_symbol(Environment* env, Object* s)
+{
+ if(env == NULL)
+ {
+ fprintf(stderr, "ERROR: symbol %s not found.", s->instance.symbol);
+ exit(1);
+ }
+
+ if(c_symbol_equal(env->key, s->instance.symbol))
+ {
+ return env->value;
+ }
+
+ return c_evaluate_symbol(env->next, s);
+}
+
+Object* c_evaluate(Environment** env, Object* o)
+{
+ switch(o->type)
+ {
+ case STRING:
+ return o;
+
+ case SYMBOL:
+ return c_evaluate_symbol(*env, o);
+
+ default:
+ break;
+ }
+
+ char typeName[MAX_TYPE_STRING_LENGTH];
+ typeToString(o->type, typeName);
+ fprintf(stderr, "ERROR: Could not evaluate type %s.", typeName);
+ exit(1);
+}
+