From 7ad32a2a907150e3ce71e89f126ca2a530550158 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Wed, 22 Dec 2021 18:07:53 +0100 Subject: Add builtin object type --- src/parser.h | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'src/parser.h') 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 { OBJ_TYPE_IF, OBJ_TYPE_DEF, OBJ_TYPE_SET, + OBJ_TYPE_BUILTIN, } ObjectType; +typedef enum Builtin { + BUILTIN_ADD, + BUILTIN_SUB, + BUILTIN_MUL, + BUILTIN_DIV, + BUILTIN_MOD, + BUILTIN_EQ, + BUILTIN_LT, + BUILTIN_GT, + BUILTIN_LE, + BUILTIN_GE, + BUILTIN_NOT, + BUILTIN_AND, + BUILTIN_OR, + BUILTIN_IS_NIL, + BUILTIN_IS_ZERO, + BUILTIN_IS_FIXNUM, + BUILTIN_IS_BOOL, + BUILTIN_IS_PRINT, + BUILTIN_IS_CONS, + BUILTIN_IS_CAR, + BUILTIN_IS_CDR, +} Builtin; + typedef struct Object { ObjectType type; union { @@ -62,6 +87,11 @@ typedef struct Object { struct Object *var_name; struct Object *var_expr; }; + + // OBJ_TYPE_BUILTIN + struct { + Builtin builtin; + }; }; bool visited; @@ -125,6 +155,7 @@ void free_objects(void); #define IS_SYMBOL(VAL) ((VAL)->type == OBJ_TYPE_SYMBOL) #define IS_PAIR(VAL) ((VAL)->type == OBJ_TYPE_PAIR) #define IS_LAMBDA(VAL) ((VAL)->type == OBJ_TYPE_LAMBDA) +#define IS_BUILTIN(VAL) ((VAL)->type == OBJ_TYPE_BUILTIN) // Debug. #define OBJ_PRINT(OBJ) object_display(OBJ); printf("\n"); -- cgit v1.2.1