aboutsummaryrefslogtreecommitdiffstats
path: root/src/bytecode
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2021-10-22 15:35:28 +0200
committerBad Diode <bd@badd10de.dev>2021-10-22 15:35:28 +0200
commit9bb350e99370009a18df3c3b8f512d2c11168978 (patch)
tree26e1c1c9318f3f56d2de507cc5268b4deb10f1b7 /src/bytecode
parent9ce9a7f510e6ba407c2e14d3eae4d603b38edde7 (diff)
downloadbdl-9bb350e99370009a18df3c3b8f512d2c11168978.tar.gz
bdl-9bb350e99370009a18df3c3b8f512d2c11168978.zip
Add visitor to compiler
Diffstat (limited to 'src/bytecode')
-rw-r--r--src/bytecode/compiler.h19
-rw-r--r--src/bytecode/errors.h1
2 files changed, 20 insertions, 0 deletions
diff --git a/src/bytecode/compiler.h b/src/bytecode/compiler.h
index 283d7a6..6991a86 100644
--- a/src/bytecode/compiler.h
+++ b/src/bytecode/compiler.h
@@ -16,10 +16,29 @@ bool has_next_token(const Visitor *visitor);
16 16
17Chunk * compile(Token *tokens); 17Chunk * compile(Token *tokens);
18 18
19Token
20peek_token(const Visitor *visitor) {
21 return visitor->tokens[visitor->current];
22}
23
24Token
25next_token(Visitor *visitor) {
26 return visitor->tokens[visitor->current++];
27}
28
29bool
30has_next_token(const Visitor *visitor) {
31 return visitor->current < array_size(visitor->tokens);
32}
33
19Chunk * 34Chunk *
20compile(Token *tokens) { 35compile(Token *tokens) {
21 Chunk *chunk = NULL; 36 Chunk *chunk = NULL;
22 chunk = chunk_init(); 37 chunk = chunk_init();
38 // error_push((Error){
39 // .type = ERR_TYPE_COMPILER,
40 // .value = ERR_UNKNOWN,
41 // });
23 size_t const_a = add_constant(chunk, 7); 42 size_t const_a = add_constant(chunk, 7);
24 add_code(chunk, OP_CONSTANT, 1, 1); 43 add_code(chunk, OP_CONSTANT, 1, 1);
25 add_code(chunk, const_a, 1, 1); 44 add_code(chunk, const_a, 1, 1);
diff --git a/src/bytecode/errors.h b/src/bytecode/errors.h
index c54d1f4..7b3446e 100644
--- a/src/bytecode/errors.h
+++ b/src/bytecode/errors.h
@@ -5,6 +5,7 @@ typedef enum ErrorType {
5 ERR_TYPE_OK, 5 ERR_TYPE_OK,
6 ERR_TYPE_LEXER, 6 ERR_TYPE_LEXER,
7 ERR_TYPE_PARSER, 7 ERR_TYPE_PARSER,
8 ERR_TYPE_COMPILER,
8 ERR_TYPE_RUNTIME, 9 ERR_TYPE_RUNTIME,
9} ErrorType; 10} ErrorType;
10 11