blob: 632e28318f65ebc78792928a740dba03dc12853b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
#ifndef _TYPES
#define _TYPES
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
#include "memory.h"
typedef enum _LispType {
LISP_TYPE_SYMBOL,
LISP_TYPE_LIST,
LISP_TYPE_STRING,
LISP_TYPE_NUMBER,
LISP_TYPE_NIL,
LISP_TYPE_TRUE,
LISP_TYPE_FALSE,
LISP_TYPE_ERROR
} LispType;
typedef struct _List {
void *ptr;
struct _List *next;
} List;
List *list_make(void *ptr);
List *list_push(List *list, void *ptr);
List *list_reverse(List *list);
typedef struct _LispObject {
LispType type;
int is_decimal_point;
union {
char *string;
char *symbol;
char *error;
long long *number_natural;
double *number_float;
struct _LispObject (*function)(struct _LispObject*);
List *list;
void *ptr;
} value;
} LISP_OBJECT;
void lisp_object_free(LISP_OBJECT *lisp_obj);
void lisp_object_list_push(LISP_OBJECT *lisp_list_obj, void *ptr);
LISP_OBJECT *lisp_object_make();
LISP_OBJECT *lisp_object_make_list();
LISP_OBJECT *lisp_object_make_number_natural(long long number);
LISP_OBJECT *lisp_object_make_number_float(double number);
LISP_OBJECT *lisp_object_make_string(char *str);
LISP_OBJECT *lisp_object_make_symbol(char *str);
LISP_OBJECT *lisp_object_make_error(char *str);
LISP_OBJECT *lisp_object_make_nil();
LISP_OBJECT *lisp_object_make_true();
LISP_OBJECT *lisp_object_make_false();
int lisp_object_print(LISP_OBJECT *obj, int indent);
#endif
|