aboutsummaryrefslogtreecommitdiff
path: root/src/parser.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2022-12-22 11:53:13 +0000
committergingerBill <bill@gingerbill.org>2022-12-22 11:53:13 +0000
commite98f1a28e68e82753728f58b3465793192b74f9d (patch)
tree529e4dde0e4854d414233c5756efb3892dcb8b28 /src/parser.cpp
parentb9a2426e577e15ae861ce73b7c5a86a0df496e65 (diff)
Change `tav` to be a pointer internally
Diffstat (limited to 'src/parser.cpp')
-rw-r--r--src/parser.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/parser.cpp b/src/parser.cpp
index 436498c51..42d8f62cf 100644
--- a/src/parser.cpp
+++ b/src/parser.cpp
@@ -71,6 +71,7 @@ gb_internal Ast *alloc_ast_node(AstFile *f, AstKind kind) {
Ast *node = cast(Ast *)gb_alloc(a, size);
node->kind = kind;
node->file_id = f ? f->id : 0;
+ node->tav_ = gb_alloc_item(a, TypeAndValue);
global_total_node_memory_allocated.fetch_add(size);
@@ -106,6 +107,9 @@ gb_internal Ast *clone_ast(Ast *node) {
AstFile *f = node->thread_safe_file();
Ast *n = alloc_ast_node(f, node->kind);
gb_memmove(n, node, ast_node_size(node->kind));
+ TypeAndValue *new_tav = gb_alloc_item(ast_allocator(f), TypeAndValue);
+ *new_tav = *node->tav_;
+ n->tav_ = new_tav;
switch (n->kind) {
default: GB_PANIC("Unhandled Ast %.*s", LIT(ast_strings[n->kind])); break;
@@ -650,8 +654,8 @@ gb_internal String string_value_from_token(AstFile *f, Token const &token) {
gb_internal Ast *ast_basic_lit(AstFile *f, Token basic_lit) {
Ast *result = alloc_ast_node(f, Ast_BasicLit);
result->BasicLit.token = basic_lit;
- result->tav.mode = Addressing_Constant;
- result->tav.value = exact_value_from_token(f, basic_lit);
+ result->tav().mode = Addressing_Constant;
+ result->tav().value = exact_value_from_token(f, basic_lit);
return result;
}