#ifndef _OBJECT_H_ #define _OBJECT_H_ #define TRUE 1 #define FALSE 0 /* NIL - as 0, empty list, undefined value */ enum ctype { INT, CHAR, LIST, T, NIL }; typedef enum ctype ctype; typedef void* ptovalue; struct _object { ctype type; ptovalue value; // char* (*return_type); }; typedef struct _object object; struct _list { object car; struct _list *cdr; }; typedef struct _list list; #define RETURN_TYPE(obj) ( (obj.type == LIST) ? "list" : \ (obj.type == INT) ? "int" : \ (obj.type == CHAR) ? "char" : \ (obj.type == T) ? "T" : "NIL" ) #define RETURN_VALUE(obj) ( (obj.type == LIST) ? *(list*) obj.value : \ (obj.type == INT) ? *(int*) obj.value : \ (obj.type == CHAR) ? *(char*) obj.value : \ (obj.type == T) ? TRUE : FALSE ) #endif /* _OBJECT_H_ */