From ee1a5de91c875fb66724dc21c02333bfebe2a812 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Tue, 1 Feb 2022 18:36:52 +0100 Subject: Add new syntax to lexer and prepare refactor --- src/bytecode/objects.c | 151 ------------------------------------------------- 1 file changed, 151 deletions(-) delete mode 100644 src/bytecode/objects.c (limited to 'src/bytecode/objects.c') diff --git a/src/bytecode/objects.c b/src/bytecode/objects.c deleted file mode 100644 index c2fb989..0000000 --- a/src/bytecode/objects.c +++ /dev/null @@ -1,151 +0,0 @@ -#include "objects.h" - -Object -make_string(StringView sv) { - Object obj = { - .type = OBJ_TYPE_STRING, - .text = NULL, - }; - array_init(obj.text, sv.n); - array_insert(obj.text, sv.start, sv.n); - return obj; -} - -Object -make_symbol(StringView sv) { - Object obj = { - .type = OBJ_TYPE_SYMBOL, - .text = NULL, - }; - array_init(obj.text, sv.n); - array_insert(obj.text, sv.start, sv.n); - return obj; -} - -Object -make_lambda(Chunk *chunk) { - Object obj = { - .type = OBJ_TYPE_LAMBDA, - }; - obj.closure = malloc(sizeof(Closure)); - obj.closure->chunk = chunk; - array_init(obj.closure->values, 0); - return obj; -} - -void -object_display(Object obj) { - switch (obj.type) { - case OBJ_TYPE_FIXNUM: { - printf("%zd", obj.fixnum); - } break; - case OBJ_TYPE_TRUE: { - printf("true"); - } break; - case OBJ_TYPE_FALSE: { - printf("false"); - } break; - case OBJ_TYPE_NIL: { - printf("()"); - } break; - case OBJ_TYPE_STRING: { - printf("\"%.*s\"", (int)array_size(obj.text), obj.text); - } break; - case OBJ_TYPE_SYMBOL: { - printf(":%.*s", (int)array_size(obj.text), obj.text); - } break; - case OBJ_TYPE_PAIR: { - // printf("("); - // display_pair(obj); - // printf(")"); - } break; - case OBJ_TYPE_LAMBDA: { - Chunk *chunk = obj.closure->chunk; - printf("#{procedure:%.*s}", - (int)array_size(chunk->name), chunk->name); - } break; - case OBJ_TYPE_ERR: { - printf("#{error}"); - } break; - } - return; -} - -void -object_free(Object *obj) { - if (IS_STRING(*obj) || IS_SYMBOL(*obj)) { - array_free(obj->text); - return; - } - if (IS_LAMBDA(*obj)) { - Closure *closure = obj->closure; - for (size_t i = 0; i < array_size(closure->values); i++) { - object_free(&closure->values[i]); - } - array_free(closure->values); - // NOTE: we are leaking memory without this, we'll need a GC - // soon... - // chunk_free(closure->chunk); - free(closure); - } -} - -bool -object_equal(Object a, Object b) { - if (a.type != b.type) { - return false; - } - switch (a.type) { - case OBJ_TYPE_TRUE: - case OBJ_TYPE_FALSE: { - return true; - } break; - case OBJ_TYPE_FIXNUM: { - return a.fixnum == b.fixnum; - } break; - case OBJ_TYPE_SYMBOL: - case OBJ_TYPE_STRING: { - if (array_size(a.text) != array_size(b.text)) { - return false; - } - for (size_t i = 0; i < array_size(a.text); i++) { - if (a.text[i] != b.text[i]) { - return false; - } - } - } break; - case OBJ_TYPE_LAMBDA: { - return a.closure == b.closure; - } break; - default: { - return false; - } break; - } - return true; -} - -Object -object_copy(Object src) { - switch (src.type) { - case OBJ_TYPE_SYMBOL: - case OBJ_TYPE_STRING: { - Object copy = src; - copy.text = NULL; - array_init(copy.text, array_size(src.text)); - array_insert(copy.text, src.text, array_size(src.text)); - return copy; - } break; - case OBJ_TYPE_LAMBDA: { - // Object copy = src; - // StringView name = (StringView){ - // .start = src.chunk->name, - // .n = array_size(src.chunk->name), - // }; - // // TODO: copy full chunk? - // // copy.chunk = chunk_init(name); - // return copy; - } break; - default: { break; } break; - } - return src; -} -- cgit v1.2.1