aboutsummaryrefslogtreecommitdiffstats
path: root/src/bytecode/compiler.h
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2021-10-25 14:32:18 +0200
committerBad Diode <bd@badd10de.dev>2021-10-25 14:32:18 +0200
commitad8c598e84bd1e5469e2487cc3e4d0ea784d0ff3 (patch)
tree0d2439abaf88f22009ad0cbe41d9ab0ac3cc0a05 /src/bytecode/compiler.h
parentb9644b4ccda5abee01fd0704ddc42b08b68e5b5d (diff)
downloadbdl-ad8c598e84bd1e5469e2487cc3e4d0ea784d0ff3.tar.gz
bdl-ad8c598e84bd1e5469e2487cc3e4d0ea784d0ff3.zip
Add callframe support for the VM
Diffstat (limited to 'src/bytecode/compiler.h')
-rwxr-xr-xsrc/bytecode/compiler.h13
1 files changed, 6 insertions, 7 deletions
diff --git a/src/bytecode/compiler.h b/src/bytecode/compiler.h
index 3b68868..4130269 100755
--- a/src/bytecode/compiler.h
+++ b/src/bytecode/compiler.h
@@ -14,7 +14,7 @@ Token next_token(Compiler *compiler);
14Token peek_token(const Compiler *compiler); 14Token peek_token(const Compiler *compiler);
15bool has_next_token(const Compiler *compiler); 15bool has_next_token(const Compiler *compiler);
16 16
17Chunk * compile(Token *tokens); 17Object compile(Token *tokens);
18 18
19Token 19Token
20peek_token(const Compiler *compiler) { 20peek_token(const Compiler *compiler) {
@@ -415,20 +415,19 @@ parse_tree(Chunk *chunk, Compiler *compiler) {
415 return; 415 return;
416} 416}
417 417
418Chunk * 418Object
419compile(Token *tokens) { 419compile(Token *tokens) {
420 Chunk *chunk = NULL; 420 Object main = make_lambda((StringView){"main", sizeof("main")});
421 chunk = NEW_CHUNK("main");
422 Compiler compiler = (Compiler){ 421 Compiler compiler = (Compiler){
423 .tokens = tokens, 422 .tokens = tokens,
424 .current = 0, 423 .current = 0,
425 }; 424 };
426 Token start_tok = peek_token(&compiler); 425 Token start_tok = peek_token(&compiler);
427 while (has_next_token(&compiler) && peek_token(&compiler).type != TOKEN_EOF) { 426 while (has_next_token(&compiler) && peek_token(&compiler).type != TOKEN_EOF) {
428 parse_tree(chunk, &compiler); 427 parse_tree(main.chunk, &compiler);
429 } 428 }
430 add_code(chunk, OP_RETURN, start_tok.line, start_tok.column); 429 add_code(main.chunk, OP_RETURN, start_tok.line, start_tok.column);
431 return chunk; 430 return main;
432} 431}
433 432
434#endif // BDL_COMPILER_H 433#endif // BDL_COMPILER_H