aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2021-10-25 12:37:25 +0200
committerBad Diode <bd@badd10de.dev>2021-10-25 12:37:25 +0200
commitb9644b4ccda5abee01fd0704ddc42b08b68e5b5d (patch)
treeed7d94f6f6ca242574234305c8574797cc6d22b0
parente2c284b57641b5feec9a8d04313b0cd6d556e860 (diff)
downloadbdl-b9644b4ccda5abee01fd0704ddc42b08b68e5b5d.tar.gz
bdl-b9644b4ccda5abee01fd0704ddc42b08b68e5b5d.zip
Change chunk to store a name
-rw-r--r--src/bytecode/chunk.c5
-rwxr-xr-xsrc/bytecode/chunk.h6
-rwxr-xr-xsrc/bytecode/compiler.h2
-rwxr-xr-xsrc/bytecode/debug.h7
-rwxr-xr-xsrc/bytecode/lexer.c6
-rwxr-xr-xsrc/bytecode/main.c2
-rw-r--r--src/bytecode/objects.c4
-rwxr-xr-xsrc/bytecode/objects.h3
-rwxr-xr-xsrc/bytecode/string_view.c4
-rwxr-xr-xsrc/bytecode/string_view.h2
10 files changed, 24 insertions, 17 deletions
diff --git a/src/bytecode/chunk.c b/src/bytecode/chunk.c
index 3dc2421..8b87d0d 100644
--- a/src/bytecode/chunk.c
+++ b/src/bytecode/chunk.c
@@ -2,11 +2,13 @@
2#include "objects.h" 2#include "objects.h"
3 3
4Chunk * 4Chunk *
5chunk_init(void) { 5chunk_init(StringView name) {
6 Chunk *chunk = malloc(sizeof(Chunk)); 6 Chunk *chunk = malloc(sizeof(Chunk));
7 array_init(chunk->code, 0); 7 array_init(chunk->code, 0);
8 array_init(chunk->constants, 0); 8 array_init(chunk->constants, 0);
9 array_init(chunk->lines, 0); 9 array_init(chunk->lines, 0);
10 array_init(chunk->name, name.n);
11 array_insert(chunk->name, name.start, name.n);
10 return chunk; 12 return chunk;
11} 13}
12 14
@@ -19,6 +21,7 @@ chunk_free(Chunk *chunk) {
19 } 21 }
20 array_free(chunk->constants); 22 array_free(chunk->constants);
21 array_free(chunk->lines); 23 array_free(chunk->lines);
24 array_free(chunk->name);
22 free(chunk); 25 free(chunk);
23} 26}
24 27
diff --git a/src/bytecode/chunk.h b/src/bytecode/chunk.h
index 3e1c005..1e88ea0 100755
--- a/src/bytecode/chunk.h
+++ b/src/bytecode/chunk.h
@@ -2,6 +2,7 @@
2#define BDL_CHUNK_H 2#define BDL_CHUNK_H
3 3
4#include "darray.h" 4#include "darray.h"
5#include "string_view.h"
5 6
6typedef struct Object Object; 7typedef struct Object Object;
7 8
@@ -14,9 +15,12 @@ typedef struct Chunk {
14 u8 *code; 15 u8 *code;
15 Object *constants; 16 Object *constants;
16 LineInfo *lines; 17 LineInfo *lines;
18 char *name;
17} Chunk; 19} Chunk;
18 20
19Chunk * chunk_init(void); 21#define NEW_CHUNK(NAME) chunk_init((StringView){(NAME), sizeof(NAME)})
22
23Chunk * chunk_init(StringView name);
20void add_code(Chunk *chunk, u8 byte, size_t line, size_t col); 24void add_code(Chunk *chunk, u8 byte, size_t line, size_t col);
21size_t add_constant(Chunk *chunk, Object obj); 25size_t add_constant(Chunk *chunk, Object obj);
22void chunk_free(Chunk *chunk); 26void chunk_free(Chunk *chunk);
diff --git a/src/bytecode/compiler.h b/src/bytecode/compiler.h
index d7d7920..3b68868 100755
--- a/src/bytecode/compiler.h
+++ b/src/bytecode/compiler.h
@@ -418,7 +418,7 @@ parse_tree(Chunk *chunk, Compiler *compiler) {
418Chunk * 418Chunk *
419compile(Token *tokens) { 419compile(Token *tokens) {
420 Chunk *chunk = NULL; 420 Chunk *chunk = NULL;
421 chunk = chunk_init(); 421 chunk = NEW_CHUNK("main");
422 Compiler compiler = (Compiler){ 422 Compiler compiler = (Compiler){
423 .tokens = tokens, 423 .tokens = tokens,
424 .current = 0, 424 .current = 0,
diff --git a/src/bytecode/debug.h b/src/bytecode/debug.h
index 7673703..534ff80 100755
--- a/src/bytecode/debug.h
+++ b/src/bytecode/debug.h
@@ -4,7 +4,7 @@
4#include "chunk.h" 4#include "chunk.h"
5#include "objects.h" 5#include "objects.h"
6 6
7void disassemble_chunk(Chunk *chunk, const char *name); 7void disassemble_chunk(Chunk *chunk);
8size_t disassemble_instruction(Chunk *chunk, size_t offset); 8size_t disassemble_instruction(Chunk *chunk, size_t offset);
9 9
10static const char* ops_str[] = { 10static const char* ops_str[] = {
@@ -41,8 +41,8 @@ static const char* ops_str[] = {
41}; 41};
42 42
43void 43void
44disassemble_chunk(Chunk *chunk, const char *name) { 44disassemble_chunk(Chunk *chunk) {
45 printf("== %s ==\n", name); 45 printf("===== %.*s =====\n", (int)array_size(chunk->name), chunk->name);
46 printf("code:\n"); 46 printf("code:\n");
47 size_t offset = 0; 47 size_t offset = 0;
48 while (offset < array_size(chunk->code)) { 48 while (offset < array_size(chunk->code)) {
@@ -56,6 +56,7 @@ disassemble_chunk(Chunk *chunk, const char *name) {
56 printf("\n"); 56 printf("\n");
57 offset++; 57 offset++;
58 } 58 }
59 printf("\n");
59} 60}
60 61
61size_t 62size_t
diff --git a/src/bytecode/lexer.c b/src/bytecode/lexer.c
index c16673b..a80c845 100755
--- a/src/bytecode/lexer.c
+++ b/src/bytecode/lexer.c
@@ -43,15 +43,15 @@ print_token(Token tok) {
43 switch (tok.type) { 43 switch (tok.type) {
44 case TOKEN_FIXNUM: { 44 case TOKEN_FIXNUM: {
45 printf(" -> "); 45 printf(" -> ");
46 sv_write(&tok.value, stdout); 46 sv_write(&tok.value);
47 } break; 47 } break;
48 case TOKEN_SYMBOL: { 48 case TOKEN_SYMBOL: {
49 printf(" -> "); 49 printf(" -> ");
50 sv_write(&tok.value, stdout); 50 sv_write(&tok.value);
51 } break; 51 } break;
52 case TOKEN_STRING: { 52 case TOKEN_STRING: {
53 printf(" -> "); 53 printf(" -> ");
54 sv_write(&tok.value, stdout); 54 sv_write(&tok.value);
55 } break; 55 } break;
56 default: { 56 default: {
57 } break; 57 } break;
diff --git a/src/bytecode/main.c b/src/bytecode/main.c
index f938e36..d1fbac2 100755
--- a/src/bytecode/main.c
+++ b/src/bytecode/main.c
@@ -53,7 +53,7 @@ process_source(const StringView *source) {
53 } 53 }
54 54
55#ifdef DEBUG 55#ifdef DEBUG
56 disassemble_chunk(chunk, "current chunk"); 56 disassemble_chunk(chunk);
57#endif 57#endif
58 58
59 // Interpret chunk. 59 // Interpret chunk.
diff --git a/src/bytecode/objects.c b/src/bytecode/objects.c
index 515a19d..14dc057 100644
--- a/src/bytecode/objects.c
+++ b/src/bytecode/objects.c
@@ -23,10 +23,10 @@ make_symbol(StringView sv) {
23} 23}
24 24
25Object 25Object
26make_lambda(void) { 26make_lambda(StringView name) {
27 Object obj = { 27 Object obj = {
28 .type = OBJ_TYPE_LAMBDA, 28 .type = OBJ_TYPE_LAMBDA,
29 .chunk = chunk_init(), 29 .chunk = chunk_init(name),
30 }; 30 };
31 return obj; 31 return obj;
32} 32}
diff --git a/src/bytecode/objects.h b/src/bytecode/objects.h
index 72f7420..419a7f8 100755
--- a/src/bytecode/objects.h
+++ b/src/bytecode/objects.h
@@ -50,7 +50,7 @@ typedef struct Object {
50 50
51Object make_string(StringView sv); 51Object make_string(StringView sv);
52Object make_symbol(StringView sv); 52Object make_symbol(StringView sv);
53Object make_lambda(void); 53Object make_lambda(StringView name);
54void object_display(Object obj); 54void object_display(Object obj);
55void object_free(Object obj); 55void object_free(Object obj);
56bool object_equal(Object a, Object b); 56bool object_equal(Object a, Object b);
@@ -74,5 +74,4 @@ Object object_copy(Object src);
74#define IS_SYMBOL(VAL) ((VAL).type == OBJ_TYPE_SYMBOL) 74#define IS_SYMBOL(VAL) ((VAL).type == OBJ_TYPE_SYMBOL)
75#define IS_LAMBDA(VAL) ((VAL).type == OBJ_TYPE_LAMBDA) 75#define IS_LAMBDA(VAL) ((VAL).type == OBJ_TYPE_LAMBDA)
76 76
77
78#endif // BDL_OBJECTS_H 77#endif // BDL_OBJECTS_H
diff --git a/src/bytecode/string_view.c b/src/bytecode/string_view.c
index 39fabe9..8247bd4 100755
--- a/src/bytecode/string_view.c
+++ b/src/bytecode/string_view.c
@@ -33,8 +33,8 @@ sv_equal(const StringView *a, const StringView *b) {
33} 33}
34 34
35void 35void
36sv_write(const StringView *sv, FILE *file) { 36sv_write(const StringView *sv) {
37 for (size_t i = 0; i < sv->n; i++) { 37 for (size_t i = 0; i < sv->n; i++) {
38 putc(sv->start[i], file); 38 putchar(sv->start[i]);
39 } 39 }
40} 40}
diff --git a/src/bytecode/string_view.h b/src/bytecode/string_view.h
index 42273ab..64c8d8e 100755
--- a/src/bytecode/string_view.h
+++ b/src/bytecode/string_view.h
@@ -16,6 +16,6 @@ char sv_peek(const StringView *sv);
16bool sv_equal(const StringView *a, const StringView *b); 16bool sv_equal(const StringView *a, const StringView *b);
17 17
18// Write a character to the given output stream. 18// Write a character to the given output stream.
19void sv_write(const StringView *sv, FILE *file); 19void sv_write(const StringView *sv);
20 20
21#endif // BDL_STRINGVIEW_H 21#endif // BDL_STRINGVIEW_H