diff options
Diffstat (limited to 'src/parser.h')
-rw-r--r-- | src/parser.h | 31 |
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 | ||
29 | typedef 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 | |||
28 | typedef struct Object { | 53 | typedef 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"); |