Pārlūkot izejas kodu

Fixed comptime reflection issue with interface methods

Brian Fiete 4 gadi atpakaļ
vecāks
revīzija
c0ae4bb8f7
1 mainītis faili ar 11 papildinājumiem un 8 dzēšanām
  1. 11 8
      IDEHelper/Compiler/BfModule.cpp

+ 11 - 8
IDEHelper/Compiler/BfModule.cpp

@@ -6680,16 +6680,19 @@ BfIRValue BfModule::CreateTypeData(BfType* type, Dictionary<int, int>& usedStrin
 			auto interfaceData = mBfIRBuilder->CreateConstAgg_Value(mBfIRBuilder->MapTypeInst(reflectInterfaceDataType->ToTypeInstance(), BfIRPopulateType_Full), interfaceDataVals);
 			interfaces.push_back(interfaceData);
 
-			for (int methodIdx = 0; methodIdx < (int)interface.mInterfaceType->mMethodInstanceGroups.size(); methodIdx++)
+			if (!mIsComptimeModule)
 			{
-				auto ifaceMethodGroup = &interface.mInterfaceType->mMethodInstanceGroups[methodIdx];
-				if (ifaceMethodGroup->mExplicitlyReflected)
+				for (int methodIdx = 0; methodIdx < (int)interface.mInterfaceType->mMethodInstanceGroups.size(); methodIdx++)
 				{
-					wantsIfaceMethods = true;
-					int tableIdx = interface.mStartInterfaceTableIdx + methodIdx;
-					while (tableIdx >= wantsIfaceMethod.size())
-						wantsIfaceMethod.Add(false);
-					wantsIfaceMethod[tableIdx] = true;
+					auto ifaceMethodGroup = &interface.mInterfaceType->mMethodInstanceGroups[methodIdx];
+					if (ifaceMethodGroup->mExplicitlyReflected)
+					{
+						wantsIfaceMethods = true;
+						int tableIdx = interface.mStartInterfaceTableIdx + methodIdx;
+						while (tableIdx >= wantsIfaceMethod.size())
+							wantsIfaceMethod.Add(false);
+						wantsIfaceMethod[tableIdx] = true;
+					}
 				}
 			}
 		}