Переглянути джерело

Fixed invalid enum const type finalization with non-enum-case const

Brian Fiete 4 роки тому
батько
коміт
1efd403472
1 змінених файлів з 7 додано та 6 видалено
  1. 7 6
      IDEHelper/Compiler/BfModuleTypeUtils.cpp

+ 7 - 6
IDEHelper/Compiler/BfModuleTypeUtils.cpp

@@ -3800,12 +3800,13 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy
 				for (auto& fieldInstanceRef : typeInstance->mFieldInstances)
 				for (auto& fieldInstanceRef : typeInstance->mFieldInstances)
 				{
 				{
 					auto fieldInstance = &fieldInstanceRef;
 					auto fieldInstance = &fieldInstanceRef;
-					if (fieldInstance->mConstIdx != -1)
-					{
-						auto constant = typeInstance->mConstHolder->GetConstantById(fieldInstance->mConstIdx);
-						BfIRValue newConstant = typeInstance->mConstHolder->CreateConst(typeCode, constant->mUInt64);
-						fieldInstance->mConstIdx = newConstant.mId;
-					}
+					if (fieldInstance->mConstIdx == -1)
+						continue;
+					if (!fieldInstance->GetFieldDef()->IsEnumCaseEntry())
+						continue;
+					auto constant = typeInstance->mConstHolder->GetConstantById(fieldInstance->mConstIdx);
+					BfIRValue newConstant = typeInstance->mConstHolder->CreateConst(typeCode, constant->mUInt64);
+					fieldInstance->mConstIdx = newConstant.mId;					
 				}
 				}
 			}
 			}