aboutsummaryrefslogtreecommitdiffstats
path: root/src/bytecode/objects.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/bytecode/objects.h')
-rwxr-xr-xsrc/bytecode/objects.h80
1 files changed, 0 insertions, 80 deletions
diff --git a/src/bytecode/objects.h b/src/bytecode/objects.h
deleted file mode 100755
index a9a7d0f..0000000
--- a/src/bytecode/objects.h
+++ /dev/null
@@ -1,80 +0,0 @@
1#ifndef BDL_OBJECTS_H
2#define BDL_OBJECTS_H
3
4#include "string_view.h"
5#include "darray.h"
6#include "chunk.h"
7
8typedef enum ObjectType {
9 OBJ_TYPE_NIL,
10 OBJ_TYPE_TRUE,
11 OBJ_TYPE_FALSE,
12 OBJ_TYPE_FIXNUM,
13 OBJ_TYPE_SYMBOL,
14 OBJ_TYPE_STRING,
15 OBJ_TYPE_PAIR,
16 OBJ_TYPE_LAMBDA,
17 OBJ_TYPE_ERR,
18} ObjectType;
19
20typedef struct Object Object;
21
22typedef struct Closure {
23 // Non-owning reference to a chunk.
24 Chunk *chunk;
25 // Captured values for this closure.
26 Object *values;
27} Closure;
28
29// typdef struct ConsCell {
30// struct Object *car;
31// struct Object *cdr;
32// } ConsCell;
33
34typedef struct Object {
35 ObjectType type;
36 bool marked;
37 union {
38 // OBJ_TYPE_FIXNUM
39 ssize_t fixnum;
40
41 // OBJ_TYPE_STRING
42 // OBJ_TYPE_SYMBOL
43 char *text;
44
45 // OBJ_TYPE_PAIR
46 // ConsCell *cons_cell;
47
48 // OBJ_TYPE_LAMBDA
49 Closure *closure;
50 };
51} Object;
52
53Object make_string(StringView sv);
54Object make_symbol(StringView sv);
55Object make_lambda(Chunk *chunk);
56void object_display(Object obj);
57void object_free(Object *obj);
58bool object_equal(Object a, Object b);
59Object object_copy(Object src);
60
61// Value initialization.
62#define NIL_VAL ((Object){.type = OBJ_TYPE_NIL})
63#define TRUE_VAL ((Object){.type = OBJ_TYPE_TRUE})
64#define FALSE_VAL ((Object){.type = OBJ_TYPE_FALSE})
65#define FIXNUM_VAL(VAL) ((Object){.type = OBJ_TYPE_FIXNUM, .fixnum = VAL})
66#define BOOL_VAL(VAL) ((VAL) ? TRUE_VAL : FALSE_VAL)
67
68// Value extraction.
69#define AS_FIXNUM(VAL) ((VAL).fixnum)
70
71// Type checking.
72#define IS_NIL(VAL) ((VAL).type == OBJ_TYPE_NIL)
73#define IS_TRUE(VAL) ((VAL).type != OBJ_TYPE_FALSE)
74#define IS_FALSE(VAL) ((VAL).type == OBJ_TYPE_FALSE)
75#define IS_FIXNUM(VAL) ((VAL).type == OBJ_TYPE_FIXNUM)
76#define IS_STRING(VAL) ((VAL).type == OBJ_TYPE_STRING)
77#define IS_SYMBOL(VAL) ((VAL).type == OBJ_TYPE_SYMBOL)
78#define IS_LAMBDA(VAL) ((VAL).type == OBJ_TYPE_LAMBDA)
79
80#endif // BDL_OBJECTS_H