aboutsummaryrefslogtreecommitdiffstats
path: root/src/treewalk/objects.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/treewalk/objects.h')
-rw-r--r--src/treewalk/objects.h75
1 files changed, 0 insertions, 75 deletions
diff --git a/src/treewalk/objects.h b/src/treewalk/objects.h
deleted file mode 100644
index ed623eb..0000000
--- a/src/treewalk/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
6typedef 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
18struct Environment;
19
20typedef 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.
56Object * make_fixnum(ssize_t num);
57Object * make_procedure(Object *(*proc)(struct Environment *, Object *args));
58Object * make_pair(Object *car, Object *cdr);
59Object * make_symbol(StringView sv);
60Object * make_string(void);
61void append_string(Object *obj, const StringView sv);
62
63// Object representation.
64void display(Object *root);
65void display_pair(Object *root);
66
67// Object comparison.
68bool 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