diff options
Diffstat (limited to 'src/bytecode/chunk.h')
-rw-r--r-- | src/bytecode/chunk.h | 35 |
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 | ||
18 | void add_code(Chunk chunk, u8 byte, size_t line, size_t col); | 18 | Chunk * chunk_init(void); |
19 | size_t add_constant(Chunk chunk, Object obj); | 19 | void add_code(Chunk *chunk, u8 byte, size_t line, size_t col); |
20 | size_t add_constant(Chunk *chunk, Object obj); | ||
21 | void chunk_free(Chunk *chunk); | ||
22 | |||
23 | Chunk * | ||
24 | chunk_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 | |||
32 | void | ||
33 | chunk_free(Chunk *chunk) { | ||
34 | array_free(chunk->code); | ||
35 | array_free(chunk->constants); | ||
36 | array_free(chunk->lines); | ||
37 | free(chunk); | ||
38 | } | ||
20 | 39 | ||
21 | void | 40 | void |
22 | add_code(Chunk chunk, u8 byte, size_t line, size_t col) { | 41 | add_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 | ||
28 | size_t | 47 | size_t |
29 | add_constant(Chunk chunk, Object obj) { | 48 | add_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 | ||