#ifndef OBJECT_H #define OBJECT_H #define MAX_TOK_LEN 4 // 11 #define MAX_TOK_CNT 128 // 128 #define MAX_ENV_ELM 15 // 50 enum errorCode { BAD_LIST_OF_SYMBOL_STRINGS, TYPE_LIST_NOT_CAUGHT, NULL_ENV, BUILT_IN_NOT_FOUND, NULL_PARSE }; typedef enum Type { TYPE_NUMBER, TYPE_BOOL, TYPE_LIST, TYPE_FUNC, TYPE_SYMBOL, TYPE_LAMBDA, TYPE_ERROR // Currently unused } Type; typedef struct Object Object; struct Lambda; struct Object { Type type; Object *forward; union { int number; Object *list; char name[MAX_TOK_LEN]; Object (*func)(Object, Object); struct Lambda *lambda; // Maybe better as not a pointer enum errorCode err; }; }; // Maybe better as pointers struct Lambda { Object params; Object body; }; char* stringObj(char *dest, const Object *obj); void printList(const Object *list); void printObj(const Object *obj); Object *tail(const Object *listObj); void addToList(Object *dest, Object src); void deleteList(const Object *dest); int listLength(const Object *listObj); Object *itemAt(const Object *listObj, int n); void copyList(Object *dest, const Object *src); Object listObject(); Object numberObject(int num); Object lambdaObject(); Object errorObject(); #endif