diff options
Diffstat (limited to 'src/semantic.c')
-rw-r--r-- | src/semantic.c | 9 |
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 | ||
6 | typedef enum { | 7 | typedef 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 |