add little bit more safety when using types in expressions
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Sat, 16 Jan 2021 19:29:24 +0000 (13:29 -0600)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Sat, 16 Jan 2021 19:29:24 +0000 (13:29 -0600)
onyx.exe
src/onyxastnodes.c
src/onyxsymres.c

index 1f1fd9c0ddaaf32a2c6d87db9558c406fa920f05..56828a13b16cdfeb13578536daadaa748e06d502 100644 (file)
Binary files a/onyx.exe and b/onyx.exe differ
index 8d53e8ff96e812088dcc13716b2abf9d43264145..51a12a114de18aca41f7fa4d2e6fbaf60ad24f57 100644 (file)
@@ -472,6 +472,10 @@ Type* resolve_expression_type(AstTyped* node) {
         node->type = resolve_expression_type(((AstArgument *) node)->value);
     }
 
+    if (node_is_type((AstNode *) node)) {
+        return NULL;
+    }
+
     if (node->type == NULL)
         node->type = type_build_from_ast(semstate.allocator, node->type_node);
 
index e44c4b9706be6a5fe90606a960a2adaab942a429..c61fc523c85c44d05a700af9334bb0552b95f456 100644 (file)
@@ -353,6 +353,11 @@ static void symres_array_literal(AstArrayLiteral* al) {
 }
 
 static void symres_expression(AstTyped** expr) {
+    if (node_is_type((AstNode *) *expr)) {
+        *((AstType **) expr) = symres_type((AstType *) *expr);
+        return;
+    }
+
     switch ((*expr)->kind) {
         case Ast_Kind_Symbol:
             *expr = (AstTyped *) symbol_resolve(semstate.curr_scope, ((AstNode *) *expr)->token);