Browse Source

Make structs with the same fields but with different tags distinct types

gingerBill 6 years ago
parent
commit
2d26278a65
2 changed files with 6 additions and 1 deletions
  1. 0 1
      examples/demo/demo.odin
  2. 6 0
      src/types.cpp

+ 0 - 1
examples/demo/demo.odin

@@ -955,7 +955,6 @@ struct_field_tags :: proc() {
 		z: bool, // no tag
 	}
 
-	f: Foo;
 	ti := runtime.type_info_base(type_info_of(Foo));
 	s := ti.variant.(runtime.Type_Info_Struct);
 	fmt.println("Foo :: struct {");

+ 6 - 0
src/types.cpp

@@ -1712,6 +1712,12 @@ bool are_types_identical(Type *x, Type *y) {
 					if (xf_is_using ^ yf_is_using) {
 						return false;
 					}
+					if (x->Struct.tags.count != y->Struct.tags.count) {
+						return false;
+					}
+					if (x->Struct.tags.count > 0 && x->Struct.tags[i] != y->Struct.tags[i]) {
+						return false;
+					}
 				}
 				return true;
 			}