Browse Source

In 'for' loop, check base types for enumerator interfaces

Brian Fiete 3 years ago
parent
commit
84bc0ad1de
1 changed files with 7 additions and 2 deletions
  1. 7 2
      IDEHelper/Compiler/BfStmtEvaluator.cpp

+ 7 - 2
IDEHelper/Compiler/BfStmtEvaluator.cpp

@@ -6343,6 +6343,7 @@ void BfModule::Visit(BfForEachStatement* forEachStmt)
 		if (targetTypeInstance != NULL)
 		{
 			PopulateType(targetTypeInstance, BfPopulateType_DataAndMethods);
+
 			auto getEnumeratorMethod = GetMethodByName(targetTypeInstance, "GetEnumerator", 0, true);
 			if (!getEnumeratorMethod)
 			{
@@ -6410,9 +6411,10 @@ void BfModule::Visit(BfForEachStatement* forEachStmt)
 			};
 
 			auto enumeratorTypeInst = itr.mType->ToTypeInstance();
-
-			if (enumeratorTypeInst != NULL)
+			while (enumeratorTypeInst != NULL)
 			{
+				PopulateType(enumeratorTypeInst, Beefy::BfPopulateType_Interfaces_All);
+
 				for (auto& interfaceRef : enumeratorTypeInst->mInterfaces)
 				{
 					BfTypeInstance* interface = interfaceRef.mInterfaceType;
@@ -6432,7 +6434,10 @@ void BfModule::Visit(BfForEachStatement* forEachStmt)
 								varType = CreateRefType(varType);
 						}
 					}
+					break;
 				}
+
+				enumeratorTypeInst = enumeratorTypeInst->mBaseType;
 			}
 
 			if ((genericItrInterface == NULL) && (genericParamInst != NULL))