aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2024-06-23 21:03:53 +0200
committerBad Diode <bd@badd10de.dev>2024-06-23 21:03:53 +0200
commit42046a947e1ad636a1ee23be58ce0be2d8abbab2 (patch)
tree72217b0fef433f0106d31a436fc258b6366eae57 /src
parentc46596607e8ea5b37ac1bc145902b5c59dbce4e9 (diff)
downloadbdl-42046a947e1ad636a1ee23be58ce0be2d8abbab2.tar.gz
bdl-42046a947e1ad636a1ee23be58ce0be2d8abbab2.zip
Add set typechecking
Diffstat (limited to 'src')
-rw-r--r--src/main.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/main.c b/src/main.c
index ffe9e10..bfaca4e 100644
--- a/src/main.c
+++ b/src/main.c
@@ -253,6 +253,12 @@ type_inference(Analyzer *a, Node *node, TypeScope *scope) {
253 } 253 }
254 return node->type; 254 return node->type;
255 } break; 255 } break;
256 case NODE_SET: {
257 type_inference(a, node->var_name, scope);
258 type_inference(a, node->var_val, scope);
259 node->type = cstr("nil");
260 return node->type;
261 } break;
256 case NODE_IF: { 262 case NODE_IF: {
257 Type cond_type = type_inference(a, node->cond_if, scope); 263 Type cond_type = type_inference(a, node->cond_if, scope);
258 if (!str_eq(cond_type, cstr("bool"))) { 264 if (!str_eq(cond_type, cstr("bool"))) {
@@ -281,6 +287,7 @@ type_inference(Analyzer *a, Node *node, TypeScope *scope) {
281 return cstr(""); 287 return cstr("");
282 } 288 }
283 } 289 }
290 return node->type;
284 } break; 291 } break;
285 case NODE_WHILE: { 292 case NODE_WHILE: {
286 Type cond_type = type_inference(a, node->while_cond, scope); 293 Type cond_type = type_inference(a, node->while_cond, scope);
@@ -402,6 +409,22 @@ type_inference(Analyzer *a, Node *node, TypeScope *scope) {
402 node->type = type->val; 409 node->type = type->val;
403 return node->type; 410 return node->type;
404 } 411 }
412 return node->type;
413 } break;
414 case NODE_FUNCALL: {
415 // TODO: ...
416 // Str symbol = node->value.str;
417 // if (find_symbol(scope, symbol) == NULL) {
418 // eprintln(
419 // "%s:%d:%d: error: symbol '%s' doesn't exists in current "
420 // " scope ",
421 // a->file_name, node->line, node->col, symbol);
422 // return;
423 // }
424 // for (sz i = 0; i < array_size(node->elements); i++) {
425 // Node *expr = node->elements[i];
426 // analyzer_symbols(a, expr, scope);
427 // }
405 } break; 428 } break;
406 case NODE_BLOCK: { 429 case NODE_BLOCK: {
407 scope = typescope_alloc(a, scope); 430 scope = typescope_alloc(a, scope);