From 043a96a6b7cf55f7ef58fb5ebf8ad87b7d50b571 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Mon, 18 Oct 2021 12:31:20 +0200 Subject: Add header files for all modules --- src/bootstrap/objects.h | 77 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 src/bootstrap/objects.h (limited to 'src/bootstrap/objects.h') diff --git a/src/bootstrap/objects.h b/src/bootstrap/objects.h new file mode 100644 index 0000000..56821eb --- /dev/null +++ b/src/bootstrap/objects.h @@ -0,0 +1,77 @@ +#ifndef BDL_OBJECTS_H +#define BDL_OBJECTS_H + +#include "string_view.h" + +typedef enum ObjectType { + OBJ_TYPE_FIXNUM, + OBJ_TYPE_BOOL, + OBJ_TYPE_NIL, + OBJ_TYPE_SYMBOL, + OBJ_TYPE_STRING, + OBJ_TYPE_PAIR, + OBJ_TYPE_PROCEDURE, + OBJ_TYPE_LAMBDA, + OBJ_TYPE_ERR, +} ObjectType; + +struct Environment; + +typedef struct Object { + ObjectType type; + bool marked; + union { + // OBJ_TYPE_FIXNUM + ssize_t fixnum; + + // OBJ_TYPE_STRING + struct { + char *string; + size_t string_n; + }; + + // OBJ_TYPE_PAIR + struct { + struct Object *car; + struct Object *cdr; + }; + + // OBJ_TYPE_SYMBOL + struct { + char *symbol; + size_t symbol_n; + }; + + // OBJ_TYPE_PROCEDURE + struct Object *(*proc)(struct Environment *env, struct Object *args); + + // OBJ_TYPE_LAMBDA + struct { + struct Object *params; + struct Object *body; + struct Environment *env; + }; + }; +} Object; + +// Object constructors. +Object * make_fixnum(ssize_t num); +Object * make_procedure(Object *(*proc)(struct Environment *, struct Object *args)); +Object * make_pair(Object *car, Object *cdr); +Object * make_symbol(StringView sv); +Object * make_string(void); +void append_string(Object *obj, const StringView sv); + +// Object representation. +void display(Object *root); +void display_pair(Object *root); + +// Object comparison. +bool obj_eq(Object *a, Object* b); + +// Utility macros. +#define DEBUG_OBJ(MSG,OBJ) printf((MSG)); display(OBJ); printf("\n"); +#define PRINT_OBJ(OBJ) display(OBJ); printf("\n"); +#define MAKE_SYM(STR) make_symbol((StringView){(STR), sizeof(STR) - 1}) + +#endif // BDL_OBJECTS_H -- cgit v1.2.1