From 84bc0ad1de28532407d6af2c3c9ba1a045bdf083 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Mon, 27 Jun 2022 15:39:50 -0700 Subject: [PATCH] In 'for' loop, check base types for enumerator interfaces --- IDEHelper/Compiler/BfStmtEvaluator.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/IDEHelper/Compiler/BfStmtEvaluator.cpp b/IDEHelper/Compiler/BfStmtEvaluator.cpp index ee63ba54..fe35fafc 100644 --- a/IDEHelper/Compiler/BfStmtEvaluator.cpp +++ b/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))