浏览代码

Fixed reification of elemented underlying types

Brian Fiete 3 年之前
父节点
当前提交
ae46452f9e
共有 2 个文件被更改,包括 16 次插入3 次删除
  1. 0 3
      IDEHelper/Compiler/BfIRBuilder.cpp
  2. 16 0
      IDEHelper/Compiler/BfModuleTypeUtils.cpp

+ 0 - 3
IDEHelper/Compiler/BfIRBuilder.cpp

@@ -2717,9 +2717,6 @@ void BfIRBuilder::CreateTypeDeclaration(BfType* type, bool forceDbgDefine)
 	if ((typeInstance != NULL) && (typeInstance->mModule != NULL))
 		populateModule = typeInstance->mModule;
 
-	//TODO: Temporary
-	populateModule = mModule;
-
 	bool wantDIData = DbgHasInfo() && (!type->IsUnspecializedType());
 			
 	// Types that don't have a proper 'defining module' need to be defined in every module they are used	

+ 16 - 0
IDEHelper/Compiler/BfModuleTypeUtils.cpp

@@ -1257,6 +1257,22 @@ void BfModule::PopulateType(BfType* resolvedTypeRef, BfPopulateType populateType
 				}
 			}
 		}
+		else		
+		{
+			// If we're a type like "A*", make sure we reify "A" if necessary
+			auto checkUnderlying = resolvedTypeRef->GetUnderlyingType();
+			while (checkUnderlying != NULL)
+			{
+				auto checkTypeInst = checkUnderlying->ToTypeInstance();
+				if (checkTypeInst != NULL)
+				{
+					if (!checkTypeInst->mIsReified)
+						PopulateType(checkTypeInst, BfPopulateType_BaseType);
+					break;
+				}
+				checkUnderlying = checkUnderlying->GetUnderlyingType();
+			}
+		}
 	}
 
 	if (!resolvedTypeRef->IsIncomplete())