cirilisp/util.h

57 lines
874 B
C
Raw Normal View History

#pragma once
#define TYPE(x) ((x).type)
#define CONS(x) ((x).value.consCell)
#define CAR(x) (((x).value.consCell)->car)
#define CDR(x) (((x).value.consCell)->cdr)
#define NUM(x) ((x).value.number)
#define SYM(x) ((x).value.symbol)
#define ERR(x) ((x).value.err)
typedef enum
{
nilObject,
consObject,
numberObject,
symbolObject,
errorObject
} dataType;
typedef enum
{
improperListError,
typeError,
unrecognizedSymbolError,
notApplicableError,
divisionByZeroError,
argumentNumberError,
syntaxError
} error;
typedef struct object object;
typedef struct cons cons;
struct object
{
dataType type;
union
{
error err;
char *symbol;
long long int number;
cons *consCell;
} value;
};
struct cons
{
object car;
object cdr;
};
int properList(object list);
int listLength(object list);
void deleteObject(object input);
object copyObject(object input);