From d04aea3c5875cd2859d6ab961256b11189c49839 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Thu, 28 Oct 2021 10:40:22 +0200 Subject: Prepare for closure capture --- src/bytecode/objects.h | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) (limited to 'src/bytecode/objects.h') diff --git a/src/bytecode/objects.h b/src/bytecode/objects.h index 6c286b5..a9a7d0f 100755 --- a/src/bytecode/objects.h +++ b/src/bytecode/objects.h @@ -17,6 +17,20 @@ typedef enum ObjectType { OBJ_TYPE_ERR, } ObjectType; +typedef struct Object Object; + +typedef struct Closure { + // Non-owning reference to a chunk. + Chunk *chunk; + // Captured values for this closure. + Object *values; +} Closure; + +// typdef struct ConsCell { +// struct Object *car; +// struct Object *cdr; +// } ConsCell; + typedef struct Object { ObjectType type; bool marked; @@ -29,26 +43,18 @@ typedef struct Object { char *text; // OBJ_TYPE_PAIR - // struct { - // struct Object *car; - // struct Object *cdr; - // }; + // ConsCell *cons_cell; // OBJ_TYPE_LAMBDA - Chunk *chunk; - // struct { - // struct Object *params; - // struct Object *body; - // struct Environment *env; - // }; + Closure *closure; }; } Object; Object make_string(StringView sv); Object make_symbol(StringView sv); -Object make_lambda(StringView name); +Object make_lambda(Chunk *chunk); void object_display(Object obj); -void object_free(Object obj); +void object_free(Object *obj); bool object_equal(Object a, Object b); Object object_copy(Object src); -- cgit v1.2.1