bugfixes
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Sat, 9 Oct 2021 18:16:03 +0000 (13:16 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Sat, 9 Oct 2021 18:16:03 +0000 (13:16 -0500)
bin/onyx
src/builtins.c
src/checker.c

index d8cf6602c1e1278d16450d073d5e634693a853d3..255ab06d05481b1533820de3fd57c869b4d0db6e 100755 (executable)
Binary files a/bin/onyx and b/bin/onyx differ
index 7be8a78276b1d005b49daef756017d3a3ae2b0d6..511effa60c3a4c58d0e67e82d4a7761519b5e66d 100644 (file)
@@ -3,33 +3,33 @@
 #include "errors.h"
 #include "utils.h"
 
-AstBasicType basic_type_void      = { Ast_Kind_Basic_Type, 0, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_Void]  };
-AstBasicType basic_type_bool      = { Ast_Kind_Basic_Type, 0, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_Bool]  };
-AstBasicType basic_type_i8        = { Ast_Kind_Basic_Type, 0, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_I8]    };
-AstBasicType basic_type_u8        = { Ast_Kind_Basic_Type, 0, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_U8]    };
-AstBasicType basic_type_i16       = { Ast_Kind_Basic_Type, 0, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_I16]   };
-AstBasicType basic_type_u16       = { Ast_Kind_Basic_Type, 0, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_U16]   };
-AstBasicType basic_type_i32       = { Ast_Kind_Basic_Type, 0, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_I32]   };
-AstBasicType basic_type_u32       = { Ast_Kind_Basic_Type, 0, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_U32]   };
-AstBasicType basic_type_i64       = { Ast_Kind_Basic_Type, 0, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_I64]   };
-AstBasicType basic_type_u64       = { Ast_Kind_Basic_Type, 0, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_U64]   };
-AstBasicType basic_type_f32       = { Ast_Kind_Basic_Type, 0, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_F32]   };
-AstBasicType basic_type_f64       = { Ast_Kind_Basic_Type, 0, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_F64]   };
-AstBasicType basic_type_rawptr    = { Ast_Kind_Basic_Type, 0, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_Rawptr] };
-AstBasicType basic_type_type_expr = { Ast_Kind_Basic_Type, 0, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_Type_Index] };
+AstBasicType basic_type_void      = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_Void]  };
+AstBasicType basic_type_bool      = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_Bool]  };
+AstBasicType basic_type_i8        = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_I8]    };
+AstBasicType basic_type_u8        = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_U8]    };
+AstBasicType basic_type_i16       = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_I16]   };
+AstBasicType basic_type_u16       = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_U16]   };
+AstBasicType basic_type_i32       = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_I32]   };
+AstBasicType basic_type_u32       = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_U32]   };
+AstBasicType basic_type_i64       = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_I64]   };
+AstBasicType basic_type_u64       = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_U64]   };
+AstBasicType basic_type_f32       = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_F32]   };
+AstBasicType basic_type_f64       = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_F64]   };
+AstBasicType basic_type_rawptr    = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_Rawptr] };
+AstBasicType basic_type_type_expr = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_Type_Index] };
 
 // NOTE: Types used for numeric literals
 AstBasicType basic_type_int_unsized   = { Ast_Kind_Basic_Type, 0, NULL, NULL, 0,   NULL, NULL, &basic_types[Basic_Kind_Int_Unsized] };
 AstBasicType basic_type_float_unsized = { Ast_Kind_Basic_Type, 0, NULL, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_Float_Unsized] };
 
 static OnyxToken simd_token = { Token_Type_Symbol, 0, "", { 0 } };
-AstBasicType basic_type_i8x16 = { Ast_Kind_Basic_Type, 0, &simd_token, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_I8X16] };
-AstBasicType basic_type_i16x8 = { Ast_Kind_Basic_Type, 0, &simd_token, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_I16X8] };
-AstBasicType basic_type_i32x4 = { Ast_Kind_Basic_Type, 0, &simd_token, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_I32X4] };
-AstBasicType basic_type_i64x2 = { Ast_Kind_Basic_Type, 0, &simd_token, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_I64X2] };
-AstBasicType basic_type_f32x4 = { Ast_Kind_Basic_Type, 0, &simd_token, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_F32X4] };
-AstBasicType basic_type_f64x2 = { Ast_Kind_Basic_Type, 0, &simd_token, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_F64X2] };
-AstBasicType basic_type_v128  = { Ast_Kind_Basic_Type, 0, &simd_token, NULL, 0,  NULL, NULL, &basic_types[Basic_Kind_V128]  };
+AstBasicType basic_type_i8x16 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, &simd_token, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_I8X16] };
+AstBasicType basic_type_i16x8 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, &simd_token, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_I16X8] };
+AstBasicType basic_type_i32x4 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, &simd_token, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_I32X4] };
+AstBasicType basic_type_i64x2 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, &simd_token, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_I64X2] };
+AstBasicType basic_type_f32x4 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, &simd_token, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_F32X4] };
+AstBasicType basic_type_f64x2 = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, &simd_token, NULL, 0, NULL, NULL, &basic_types[Basic_Kind_F64X2] };
+AstBasicType basic_type_v128  = { Ast_Kind_Basic_Type, Ast_Flag_Comptime, &simd_token, NULL, 0,  NULL, NULL, &basic_types[Basic_Kind_V128]  };
 
 // HACK
 // :AutoReturnType
index dd01dec5caa12f5fe20b79f7c765ad877c16e5ca..74b8b612dbcd52964211c1557ab17374b2ea3a8c 100644 (file)
@@ -2045,10 +2045,6 @@ CheckStatus check_memres(AstMemRes* memres) {
     if (memres->initial_value != NULL) {
         CHECK(expression, &memres->initial_value);
 
-        if ((memres->initial_value->flags & Ast_Flag_Comptime) == 0) {
-            ERROR(memres->initial_value->token->pos, "Top level expressions must be compile time known.");
-        }
-
         if (memres->type != NULL) {
             Type* memres_type = memres->type;
             if (!unify_node_and_type(&memres->initial_value, memres_type)) {
@@ -2065,6 +2061,10 @@ CheckStatus check_memres(AstMemRes* memres) {
             }
             memres->type = memres->initial_value->type;
         }
+
+        if ((memres->initial_value->flags & Ast_Flag_Comptime) == 0) {
+            ERROR(memres->initial_value->token->pos, "Top level expressions must be compile time known.");
+        }
     }
 
     return Check_Success;