From e2c284b57641b5feec9a8d04313b0cd6d556e860 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Sun, 24 Oct 2021 18:26:42 +0200 Subject: Add lambda type and minor file cleanup --- src/bytecode/chunk.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/bytecode/chunk.c (limited to 'src/bytecode/chunk.c') diff --git a/src/bytecode/chunk.c b/src/bytecode/chunk.c new file mode 100644 index 0000000..3dc2421 --- /dev/null +++ b/src/bytecode/chunk.c @@ -0,0 +1,43 @@ +#include "chunk.h" +#include "objects.h" + +Chunk * +chunk_init(void) { + Chunk *chunk = malloc(sizeof(Chunk)); + array_init(chunk->code, 0); + array_init(chunk->constants, 0); + array_init(chunk->lines, 0); + return chunk; +} + +void +chunk_free(Chunk *chunk) { + array_free(chunk->code); + for (size_t i = 0; i < array_size(chunk->constants); i++) { + Object obj = chunk->constants[i]; + object_free(obj); + } + array_free(chunk->constants); + array_free(chunk->lines); + free(chunk); +} + +void +add_code(Chunk *chunk, u8 byte, size_t line, size_t col) { + array_push(chunk->code, byte); + LineInfo info = (LineInfo){line, col}; + array_push(chunk->lines, info); +} + +size_t +add_constant(Chunk *chunk, Object obj) { + size_t pos = array_size(chunk->constants); + for (size_t i = 0; i < pos; i++) { + if (object_equal(obj, chunk->constants[i])) { + return i; + } + } + array_push(chunk->constants, obj); + return pos; +} + -- cgit v1.2.1