aboutsummaryrefslogtreecommitdiffstats
path: root/src/semantic.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/semantic.c')
-rw-r--r--src/semantic.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/semantic.c b/src/semantic.c
index 7158052..1b40723 100644
--- a/src/semantic.c
+++ b/src/semantic.c
@@ -2,6 +2,7 @@
2#define SEMANTIC_C 2#define SEMANTIC_C
3 3
4#include "badlib.h" 4#include "badlib.h"
5#include "parser.c"
5 6
6typedef enum { 7typedef enum {
7 SYM_UNKNOWN, 8 SYM_UNKNOWN,
@@ -514,6 +515,10 @@ type_inference(Analyzer *a, Node *node, Scope *scope) {
514 a->storage); 515 a->storage);
515 node->var_name->type = type; 516 node->var_name->type = type;
516 } 517 }
518 symbol = str_concat(cstr("."), symbol, a->storage);
519 symbol = str_concat(symbol, str_from_int(scope->id, a->storage),
520 a->storage);
521 node->unique_name = symbol;
517 return node->type; 522 return node->type;
518 } break; 523 } break;
519 case NODE_SET: { 524 case NODE_SET: {
@@ -843,7 +848,7 @@ type_inference(Analyzer *a, Node *node, Scope *scope) {
843 node->type = cstr("str"); 848 node->type = cstr("str");
844 return node->type; 849 return node->type;
845 } break; 850 } break;
846 case NODE_ARR_TYPE: 851 case NODE_ARR_TYPE:
847 case NODE_TYPE: { 852 case NODE_TYPE: {
848 SymbolMap *type = find_type(scope, node->value.str); 853 SymbolMap *type = find_type(scope, node->value.str);
849 if (!type) { 854 if (!type) {
@@ -1235,4 +1240,4 @@ symbolic_analysis(Analyzer *a, Parser *parser) {
1235 } 1240 }
1236} 1241}
1237 1242
1238#endif // SEMANTIC_C 1243#endif // SEMANTIC_C