From ab7d7c155fb1bec5eed8f97462fbb656ea27dbb5 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Fri, 22 Oct 2021 11:24:09 +0200 Subject: Add VM structure and fix AdressSanitizer bugs --- src/bytecode/chunk.h | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) (limited to 'src/bytecode/chunk.h') diff --git a/src/bytecode/chunk.h b/src/bytecode/chunk.h index 6157057..e3c7383 100644 --- a/src/bytecode/chunk.h +++ b/src/bytecode/chunk.h @@ -15,20 +15,39 @@ typedef struct Chunk { LineInfo *lines; } Chunk; -void add_code(Chunk chunk, u8 byte, size_t line, size_t col); -size_t add_constant(Chunk chunk, Object obj); +Chunk * chunk_init(void); +void add_code(Chunk *chunk, u8 byte, size_t line, size_t col); +size_t add_constant(Chunk *chunk, Object obj); +void chunk_free(Chunk *chunk); + +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); + 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); +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); + array_push(chunk->lines, info); } size_t -add_constant(Chunk chunk, Object obj) { - size_t pos = array_size(chunk.constants); - array_push(chunk.constants, obj); +add_constant(Chunk *chunk, Object obj) { + size_t pos = array_size(chunk->constants); + array_push(chunk->constants, obj); return pos; } -- cgit v1.2.1