aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2024-06-21 13:04:49 +0200
committerBad Diode <bd@badd10de.dev>2024-06-21 13:04:49 +0200
commiteea63b71c0a21287c78c456b9674400d0bb45fc2 (patch)
tree9b35ec21837462e49e05ac01f3638632b5c682b8 /src
parentd7fce26ee176c3b62c769b26781edf39105cf8d1 (diff)
downloadbdl-eea63b71c0a21287c78c456b9674400d0bb45fc2.tar.gz
bdl-eea63b71c0a21287c78c456b9674400d0bb45fc2.zip
Add scope pointer to AST nodes
Diffstat (limited to 'src')
-rw-r--r--src/main.c4
-rw-r--r--src/parser.c1
2 files changed, 4 insertions, 1 deletions
diff --git a/src/main.c b/src/main.c
index 182a597..a16b0e6 100644
--- a/src/main.c
+++ b/src/main.c
@@ -86,7 +86,7 @@ analyzer_symbols(Analyzer *a, Node *node, Scope *scope) {
86 if (!node) { 86 if (!node) {
87 return; 87 return;
88 } 88 }
89 assert(node); 89 node->scope = scope;
90 switch (node->kind) { 90 switch (node->kind) {
91 case NODE_FUN: { 91 case NODE_FUN: {
92 if (scope->depth != 0) { 92 if (scope->depth != 0) {
@@ -104,6 +104,7 @@ analyzer_symbols(Analyzer *a, Node *node, Scope *scope) {
104 } 104 }
105 105
106 scope = scope_alloc(a, scope); 106 scope = scope_alloc(a, scope);
107 node->scope = scope;
107 for (sz i = 0; i < array_size(node->func_params); i++) { 108 for (sz i = 0; i < array_size(node->func_params); i++) {
108 Node *param = node->func_params[i]; 109 Node *param = node->func_params[i];
109 symmap_insert(&scope->symbols, param->param_name->value.str, 110 symmap_insert(&scope->symbols, param->param_name->value.str,
@@ -143,6 +144,7 @@ analyzer_symbols(Analyzer *a, Node *node, Scope *scope) {
143 // case NODE_STRUCT_LIT: 144 // case NODE_STRUCT_LIT:
144 case NODE_BLOCK: { 145 case NODE_BLOCK: {
145 Scope *next = scope_alloc(a, scope); 146 Scope *next = scope_alloc(a, scope);
147 node->scope = scope;
146 for (sz i = 0; i < array_size(node->elements); i++) { 148 for (sz i = 0; i < array_size(node->elements); i++) {
147 Node *expr = node->elements[i]; 149 Node *expr = node->elements[i];
148 analyzer_symbols(a, expr, next); 150 analyzer_symbols(a, expr, next);
diff --git a/src/parser.c b/src/parser.c
index 5928f7b..04692b3 100644
--- a/src/parser.c
+++ b/src/parser.c
@@ -192,6 +192,7 @@ typedef struct Node {
192 }; 192 };
193 }; 193 };
194 bool is_ptr; 194 bool is_ptr;
195 struct Scope* scope;
195} Node; 196} Node;
196 197
197// 198//