aboutsummaryrefslogtreecommitdiffstats
path: root/src/parser.h
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2021-12-22 18:07:53 +0100
committerBad Diode <bd@badd10de.dev>2021-12-22 18:07:53 +0100
commit7ad32a2a907150e3ce71e89f126ca2a530550158 (patch)
tree2c5db028cd7e5b5244db3d43f7561d7a8327f07a /src/parser.h
parentfd65adf81f6c3e7e94755a83e22f7e0a19f8bd99 (diff)
downloadbdl-7ad32a2a907150e3ce71e89f126ca2a530550158.tar.gz
bdl-7ad32a2a907150e3ce71e89f126ca2a530550158.zip
Add builtin object type
Diffstat (limited to 'src/parser.h')
-rw-r--r--src/parser.h31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/parser.h b/src/parser.h
index 60a307c..41f1fc1 100644
--- a/src/parser.h
+++ b/src/parser.h
@@ -23,8 +23,33 @@ typedef enum ObjectType {
23 OBJ_TYPE_IF, 23 OBJ_TYPE_IF,
24 OBJ_TYPE_DEF, 24 OBJ_TYPE_DEF,
25 OBJ_TYPE_SET, 25 OBJ_TYPE_SET,
26 OBJ_TYPE_BUILTIN,
26} ObjectType; 27} ObjectType;
27 28
29typedef enum Builtin {
30 BUILTIN_ADD,
31 BUILTIN_SUB,
32 BUILTIN_MUL,
33 BUILTIN_DIV,
34 BUILTIN_MOD,
35 BUILTIN_EQ,
36 BUILTIN_LT,
37 BUILTIN_GT,
38 BUILTIN_LE,
39 BUILTIN_GE,
40 BUILTIN_NOT,
41 BUILTIN_AND,
42 BUILTIN_OR,
43 BUILTIN_IS_NIL,
44 BUILTIN_IS_ZERO,
45 BUILTIN_IS_FIXNUM,
46 BUILTIN_IS_BOOL,
47 BUILTIN_IS_PRINT,
48 BUILTIN_IS_CONS,
49 BUILTIN_IS_CAR,
50 BUILTIN_IS_CDR,
51} Builtin;
52
28typedef struct Object { 53typedef struct Object {
29 ObjectType type; 54 ObjectType type;
30 union { 55 union {
@@ -62,6 +87,11 @@ typedef struct Object {
62 struct Object *var_name; 87 struct Object *var_name;
63 struct Object *var_expr; 88 struct Object *var_expr;
64 }; 89 };
90
91 // OBJ_TYPE_BUILTIN
92 struct {
93 Builtin builtin;
94 };
65 }; 95 };
66 96
67 bool visited; 97 bool visited;
@@ -125,6 +155,7 @@ void free_objects(void);
125#define IS_SYMBOL(VAL) ((VAL)->type == OBJ_TYPE_SYMBOL) 155#define IS_SYMBOL(VAL) ((VAL)->type == OBJ_TYPE_SYMBOL)
126#define IS_PAIR(VAL) ((VAL)->type == OBJ_TYPE_PAIR) 156#define IS_PAIR(VAL) ((VAL)->type == OBJ_TYPE_PAIR)
127#define IS_LAMBDA(VAL) ((VAL)->type == OBJ_TYPE_LAMBDA) 157#define IS_LAMBDA(VAL) ((VAL)->type == OBJ_TYPE_LAMBDA)
158#define IS_BUILTIN(VAL) ((VAL)->type == OBJ_TYPE_BUILTIN)
128 159
129// Debug. 160// Debug.
130#define OBJ_PRINT(OBJ) object_display(OBJ); printf("\n"); 161#define OBJ_PRINT(OBJ) object_display(OBJ); printf("\n");