diff options
Diffstat (limited to 'src/bootstrap/objects.h')
-rw-r--r-- | src/bootstrap/objects.h | 75 |
1 files changed, 0 insertions, 75 deletions
diff --git a/src/bootstrap/objects.h b/src/bootstrap/objects.h deleted file mode 100644 index ed623eb..0000000 --- a/src/bootstrap/objects.h +++ /dev/null | |||
@@ -1,75 +0,0 @@ | |||
1 | #ifndef BDL_OBJECTS_H | ||
2 | #define BDL_OBJECTS_H | ||
3 | |||
4 | #include "string_view.h" | ||
5 | |||
6 | typedef enum ObjectType { | ||
7 | OBJ_TYPE_FIXNUM, | ||
8 | OBJ_TYPE_BOOL, | ||
9 | OBJ_TYPE_NIL, | ||
10 | OBJ_TYPE_SYMBOL, | ||
11 | OBJ_TYPE_STRING, | ||
12 | OBJ_TYPE_PAIR, | ||
13 | OBJ_TYPE_PROCEDURE, | ||
14 | OBJ_TYPE_LAMBDA, | ||
15 | OBJ_TYPE_ERR, | ||
16 | } ObjectType; | ||
17 | |||
18 | struct Environment; | ||
19 | |||
20 | typedef struct Object { | ||
21 | ObjectType type; | ||
22 | bool marked; | ||
23 | union { | ||
24 | // OBJ_TYPE_FIXNUM | ||
25 | ssize_t fixnum; | ||
26 | |||
27 | // OBJ_TYPE_STRING | ||
28 | struct { | ||
29 | char *string; | ||
30 | }; | ||
31 | |||
32 | // OBJ_TYPE_PAIR | ||
33 | struct { | ||
34 | struct Object *car; | ||
35 | struct Object *cdr; | ||
36 | }; | ||
37 | |||
38 | // OBJ_TYPE_SYMBOL | ||
39 | struct { | ||
40 | char *symbol; | ||
41 | }; | ||
42 | |||
43 | // OBJ_TYPE_PROCEDURE | ||
44 | struct Object *(*proc)(struct Environment *env, struct Object *args); | ||
45 | |||
46 | // OBJ_TYPE_LAMBDA | ||
47 | struct { | ||
48 | struct Object *params; | ||
49 | struct Object *body; | ||
50 | struct Environment *env; | ||
51 | }; | ||
52 | }; | ||
53 | } Object; | ||
54 | |||
55 | // Object constructors. | ||
56 | Object * make_fixnum(ssize_t num); | ||
57 | Object * make_procedure(Object *(*proc)(struct Environment *, Object *args)); | ||
58 | Object * make_pair(Object *car, Object *cdr); | ||
59 | Object * make_symbol(StringView sv); | ||
60 | Object * make_string(void); | ||
61 | void append_string(Object *obj, const StringView sv); | ||
62 | |||
63 | // Object representation. | ||
64 | void display(Object *root); | ||
65 | void display_pair(Object *root); | ||
66 | |||
67 | // Object comparison. | ||
68 | bool obj_eq(const Object *a, const Object* b); | ||
69 | |||
70 | // Utility macros. | ||
71 | #define DEBUG_OBJ(MSG,OBJ) printf((MSG)); display(OBJ); printf("\n"); | ||
72 | #define PRINT_OBJ(OBJ) display(OBJ); printf("\n"); | ||
73 | #define MAKE_SYM(STR) make_symbol((StringView){(STR), sizeof(STR) - 1}) | ||
74 | |||
75 | #endif // BDL_OBJECTS_H | ||