aboutsummaryrefslogtreecommitdiffstats
path: root/src/bytecode/chunk.h
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2021-10-22 11:24:09 +0200
committerBad Diode <bd@badd10de.dev>2021-10-22 11:24:09 +0200
commitab7d7c155fb1bec5eed8f97462fbb656ea27dbb5 (patch)
treec0ab41a9078a67aa1fa9aa25a69942329200ea32 /src/bytecode/chunk.h
parentf4113cbcdc192b23f9b6e5e14b0a3e4afac35272 (diff)
downloadbdl-ab7d7c155fb1bec5eed8f97462fbb656ea27dbb5.tar.gz
bdl-ab7d7c155fb1bec5eed8f97462fbb656ea27dbb5.zip
Add VM structure and fix AdressSanitizer bugs
Diffstat (limited to 'src/bytecode/chunk.h')
-rw-r--r--src/bytecode/chunk.h35
1 files changed, 27 insertions, 8 deletions
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 {
15 LineInfo *lines; 15 LineInfo *lines;
16} Chunk; 16} Chunk;
17 17
18void add_code(Chunk chunk, u8 byte, size_t line, size_t col); 18Chunk * chunk_init(void);
19size_t add_constant(Chunk chunk, Object obj); 19void add_code(Chunk *chunk, u8 byte, size_t line, size_t col);
20size_t add_constant(Chunk *chunk, Object obj);
21void chunk_free(Chunk *chunk);
22
23Chunk *
24chunk_init(void) {
25 Chunk *chunk = malloc(sizeof(Chunk));
26 array_init(chunk->code, 0);
27 array_init(chunk->constants, 0);
28 array_init(chunk->lines, 0);
29 return chunk;
30}
31
32void
33chunk_free(Chunk *chunk) {
34 array_free(chunk->code);
35 array_free(chunk->constants);
36 array_free(chunk->lines);
37 free(chunk);
38}
20 39
21void 40void
22add_code(Chunk chunk, u8 byte, size_t line, size_t col) { 41add_code(Chunk *chunk, u8 byte, size_t line, size_t col) {
23 array_push(chunk.code, byte); 42 array_push(chunk->code, byte);
24 LineInfo info = (LineInfo){line, col}; 43 LineInfo info = (LineInfo){line, col};
25 array_push(chunk.lines, info); 44 array_push(chunk->lines, info);
26} 45}
27 46
28size_t 47size_t
29add_constant(Chunk chunk, Object obj) { 48add_constant(Chunk *chunk, Object obj) {
30 size_t pos = array_size(chunk.constants); 49 size_t pos = array_size(chunk->constants);
31 array_push(chunk.constants, obj); 50 array_push(chunk->constants, obj);
32 return pos; 51 return pos;
33} 52}
34 53