removed: non-multi-pointer math
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Thu, 23 Mar 2023 16:28:49 +0000 (11:28 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Thu, 23 Mar 2023 16:28:49 +0000 (11:28 -0500)
compiler/include/types.h
compiler/src/checker.c
compiler/src/types.c

index dfde30231ad334d695b81036a1313cd81f245d2f..7581780cf5a296ec4a74cd7423f57c4c49cd3c9d 100644 (file)
@@ -45,13 +45,14 @@ enum BasicFlag {
     Basic_Flag_Unsigned         = BH_BIT(2),
     Basic_Flag_Float            = BH_BIT(3),
     Basic_Flag_Pointer          = BH_BIT(4),
+    Basic_Flag_Multi_Pointer    = BH_BIT(7),
 
     Basic_Flag_SIMD             = BH_BIT(5),
 
     Basic_Flag_Type_Index       = BH_BIT(6),
 
     Basic_Flag_Numeric          = Basic_Flag_Integer | Basic_Flag_Float,
-    Basic_Flag_Ordered          = Basic_Flag_Integer | Basic_Flag_Float | Basic_Flag_Pointer,
+    Basic_Flag_Ordered          = Basic_Flag_Integer | Basic_Flag_Float | Basic_Flag_Pointer | Basic_Flag_Multi_Pointer,
     Basic_Flag_Equality         = Basic_Flag_Ordered | Basic_Flag_Type_Index | Basic_Flag_Boolean,
     Basic_Flag_Constant_Type    = Basic_Flag_Boolean | Basic_Flag_Numeric | Basic_Flag_Pointer,
     Basic_Flag_Numeric_Ordered  = Basic_Flag_Numeric | Basic_Flag_Ordered,
index fea13d0b4eaf37cb49797e95e5a8ec0b36474d14..01b56267dcad39693907d1cd2c416d62a194bf40 100644 (file)
@@ -1027,8 +1027,8 @@ CheckStatus check_binaryop_assignment(AstBinaryOp** pbinop) {
 
 static b32 binary_op_is_allowed(BinaryOp operation, Type* type) {
     static const u8 binop_allowed[Binary_Op_Count] = {
-        /* Add */             Basic_Flag_Numeric | Basic_Flag_Pointer,
-        /* Minus */           Basic_Flag_Numeric | Basic_Flag_Pointer,
+        /* Add */             Basic_Flag_Numeric | Basic_Flag_Multi_Pointer,
+        /* Minus */           Basic_Flag_Numeric | Basic_Flag_Multi_Pointer,
         /* Multiply */        Basic_Flag_Numeric,
         /* Divide */          Basic_Flag_Numeric,
         /* Modulus */         Basic_Flag_Integer,
@@ -1072,8 +1072,8 @@ static b32 binary_op_is_allowed(BinaryOp operation, Type* type) {
     enum BasicFlag effective_flags = 0;
     switch (type->kind) {
         case Type_Kind_Basic:        effective_flags = type->Basic.flags;  break;
-        case Type_Kind_Pointer: // nocheckin REMOVE THIS
-        case Type_Kind_MultiPointer: effective_flags = Basic_Flag_Pointer; break;
+        case Type_Kind_Pointer:      effective_flags = Basic_Flag_Pointer; break;
+        case Type_Kind_MultiPointer: effective_flags = Basic_Flag_Multi_Pointer; break;
         case Type_Kind_Enum:         effective_flags = Basic_Flag_Integer; break;
         case Type_Kind_Function:     effective_flags = Basic_Flag_Equality; break;
     }
@@ -1291,12 +1291,9 @@ CheckStatus check_binaryop(AstBinaryOp** pbinop) {
     }
 
     // NOTE: Handle basic pointer math.
-    if (type_is_multi_pointer(binop->left->type) || type_is_pointer(binop->left->type)) {
+    if (type_is_multi_pointer(binop->left->type)) {
         if (binop->operation != Binary_Op_Add && binop->operation != Binary_Op_Minus) goto bad_binaryop;
 
-        if (type_is_pointer(binop->left->type))
-            onyx_report_warning(binop->token->pos, "Doing pointer math on non-multi-pointer!");
-
         resolve_expression_type(binop->right);
         if (!type_is_integer(binop->right->type)) goto bad_binaryop;
 
index 7dd126a61e6befd6f91671aa590fab9fd737c032..ba0c25ef35bb1456d2e8e140d1f1589010157023 100644 (file)
@@ -871,6 +871,7 @@ Type* type_make_multi_pointer(bh_allocator alloc, Type* to) {
     } else {
         Type* ptr_type = type_create(Type_Kind_MultiPointer, alloc, 0);
         ptr_type->MultiPointer.base.flags |= Basic_Flag_Pointer;
+        ptr_type->MultiPointer.base.flags |= Basic_Flag_Multi_Pointer;
         ptr_type->MultiPointer.base.size = POINTER_SIZE;
         ptr_type->MultiPointer.elem = to;