diff options
Diffstat (limited to 'src/bootstrap/objects.c')
-rw-r--r-- | src/bootstrap/objects.c | 66 |
1 files changed, 2 insertions, 64 deletions
diff --git a/src/bootstrap/objects.c b/src/bootstrap/objects.c index 09076db..359329b 100644 --- a/src/bootstrap/objects.c +++ b/src/bootstrap/objects.c | |||
@@ -1,70 +1,10 @@ | |||
1 | typedef enum ObjectType { | 1 | #include "gc.h" |
2 | OBJ_TYPE_FIXNUM, | 2 | #include "objects.h" |
3 | OBJ_TYPE_BOOL, | ||
4 | OBJ_TYPE_NIL, | ||
5 | OBJ_TYPE_SYMBOL, | ||
6 | OBJ_TYPE_STRING, | ||
7 | OBJ_TYPE_PAIR, | ||
8 | OBJ_TYPE_PROCEDURE, | ||
9 | OBJ_TYPE_LAMBDA, | ||
10 | OBJ_TYPE_ERR, | ||
11 | } ObjectType; | ||
12 | |||
13 | struct Environment; | ||
14 | |||
15 | typedef struct Object { | ||
16 | ObjectType type; | ||
17 | bool marked; | ||
18 | union { | ||
19 | // OBJ_TYPE_FIXNUM | ||
20 | ssize_t fixnum; | ||
21 | |||
22 | // OBJ_TYPE_STRING | ||
23 | struct { | ||
24 | char *string; | ||
25 | size_t string_n; | ||
26 | }; | ||
27 | |||
28 | // OBJ_TYPE_PAIR | ||
29 | struct { | ||
30 | struct Object *car; | ||
31 | struct Object *cdr; | ||
32 | }; | ||
33 | |||
34 | // OBJ_TYPE_SYMBOL | ||
35 | struct { | ||
36 | char *symbol; | ||
37 | size_t symbol_n; | ||
38 | }; | ||
39 | |||
40 | // OBJ_TYPE_PROCEDURE | ||
41 | struct Object *(*proc)(struct Environment *env, struct Object *args); | ||
42 | |||
43 | // OBJ_TYPE_LAMBDA | ||
44 | struct { | ||
45 | struct Object *params; | ||
46 | struct Object *body; | ||
47 | struct Environment *env; | ||
48 | }; | ||
49 | }; | ||
50 | } Object; | ||
51 | |||
52 | // | ||
53 | // Singletons. | ||
54 | // | ||
55 | |||
56 | static Object *obj_nil; | ||
57 | static Object *obj_true; | ||
58 | static Object *obj_false; | ||
59 | static Object *obj_err; | ||
60 | static Object *obj_quote; | ||
61 | 3 | ||
62 | // | 4 | // |
63 | // Constructors. | 5 | // Constructors. |
64 | // | 6 | // |
65 | 7 | ||
66 | Object * alloc_object(ObjectType); | ||
67 | |||
68 | Object * | 8 | Object * |
69 | make_fixnum(ssize_t num) { | 9 | make_fixnum(ssize_t num) { |
70 | Object *obj = alloc_object(OBJ_TYPE_FIXNUM); | 10 | Object *obj = alloc_object(OBJ_TYPE_FIXNUM); |
@@ -116,8 +56,6 @@ append_string(Object *obj, const StringView sv) { | |||
116 | obj->string_n += sv.n; | 56 | obj->string_n += sv.n; |
117 | } | 57 | } |
118 | 58 | ||
119 | void display(Object *root); | ||
120 | |||
121 | void | 59 | void |
122 | display_pair(Object *root) { | 60 | display_pair(Object *root) { |
123 | display(root->car); | 61 | display(root->car); |