Browse Source

Begin work on nested declarations

gingerBill 7 tháng trước cách đây
mục cha
commit
4eba3698aa
1 tập tin đã thay đổi với 15 bổ sung0 xóa
  1. 15 0
      src/types.cpp

+ 15 - 0
src/types.cpp

@@ -4919,6 +4919,12 @@ gb_internal u64 type_hash_canonical_type(Type *type) {
 	return hash;
 }
 
+gb_internal String type_to_canonical_string(gbAllocator allocator, Type *type) {
+	gbString w = gb_string_make(allocator, "");
+	w = write_type_to_canonical_string(w, type);
+	return make_string(cast(u8 const *)w, gb_string_length(w));
+}
+
 // NOTE(bill): This exists so that we deterministically hash a type by serializing it to a canonical string
 gb_internal gbString write_type_to_canonical_string(gbString w, Type *type) {
 	if (type == nullptr) {
@@ -5101,6 +5107,15 @@ gb_internal gbString write_type_to_canonical_string(gbString w, Type *type) {
 	case Type_Named:
 		if (type->Named.type_name != nullptr) {
 			Entity *e = type->Named.type_name;
+
+			if ((e->scope->flags & (ScopeFlag_File | ScopeFlag_Pkg)) == 0 ||
+			    e->flags & EntityFlag_NotExported) {
+				if (e->scope->flags & ScopeFlag_Proc) {
+					GB_PANIC("NESTED IN PROC\n");
+				} else if (e->scope->flags & ScopeFlag_File) {
+					GB_PANIC("PRIVATE TO FILE\n");
+				}
+			}
 			if (e->pkg != nullptr) {
 				w = gb_string_append_length(w, e->pkg->name.text, e->pkg->name.len);
 				w = gb_string_appendc(w, ".");