aboutsummaryrefslogtreecommitdiffstats
path: root/src/bytecode/chunk.h
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2021-10-24 18:26:42 +0200
committerBad Diode <bd@badd10de.dev>2021-10-24 18:26:42 +0200
commite2c284b57641b5feec9a8d04313b0cd6d556e860 (patch)
tree3edf7d008f0d68b57727c234a22a0123fe91e383 /src/bytecode/chunk.h
parent35f93683d56d8b7f57c3f27fa7085847e2ad4598 (diff)
downloadbdl-e2c284b57641b5feec9a8d04313b0cd6d556e860.tar.gz
bdl-e2c284b57641b5feec9a8d04313b0cd6d556e860.zip
Add lambda type and minor file cleanup
Diffstat (limited to 'src/bytecode/chunk.h')
-rwxr-xr-xsrc/bytecode/chunk.h43
1 files changed, 2 insertions, 41 deletions
diff --git a/src/bytecode/chunk.h b/src/bytecode/chunk.h
index 5fbc000..3e1c005 100755
--- a/src/bytecode/chunk.h
+++ b/src/bytecode/chunk.h
@@ -1,9 +1,10 @@
1#ifndef BDL_CHUNK_H 1#ifndef BDL_CHUNK_H
2#define BDL_CHUNK_H 2#define BDL_CHUNK_H
3 3
4#include "objects.h"
5#include "darray.h" 4#include "darray.h"
6 5
6typedef struct Object Object;
7
7typedef struct LineInfo { 8typedef struct LineInfo {
8 size_t line; 9 size_t line;
9 size_t col; 10 size_t col;
@@ -20,44 +21,4 @@ void add_code(Chunk *chunk, u8 byte, size_t line, size_t col);
20size_t add_constant(Chunk *chunk, Object obj); 21size_t add_constant(Chunk *chunk, Object obj);
21void chunk_free(Chunk *chunk); 22void chunk_free(Chunk *chunk);
22 23
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 for (size_t i = 0; i < array_size(chunk->constants); i++) {
36 Object obj = chunk->constants[i];
37 object_free(obj);
38 }
39 array_free(chunk->constants);
40 array_free(chunk->lines);
41 free(chunk);
42}
43
44void
45add_code(Chunk *chunk, u8 byte, size_t line, size_t col) {
46 array_push(chunk->code, byte);
47 LineInfo info = (LineInfo){line, col};
48 array_push(chunk->lines, info);
49}
50
51size_t
52add_constant(Chunk *chunk, Object obj) {
53 size_t pos = array_size(chunk->constants);
54 for (size_t i = 0; i < pos; i++) {
55 if (object_equal(obj, chunk->constants[i])) {
56 return i;
57 }
58 }
59 array_push(chunk->constants, obj);
60 return pos;
61}
62
63#endif // BDL_CHUNK_H 24#endif // BDL_CHUNK_H