pebblisp/src/object.h

65 lines
1.3 KiB
C
Raw Normal View History

2020-05-05 13:42:28 -04:00
#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