BCSYM_Container *AllContainersInFileIterator::Next() { BCSYM_NamedRoot *pDug; while(m_pNext) { pDug = m_pNext->DigThroughAlias()->PNamedRoot(); m_pNext = m_pNext->GetNextInSymbolList(); if (!m_fIncludeTransientSymbols && pDug->IsTransient()) { continue; } if (pDug->IsContainer() && (m_fIncludePartialContainers || !pDug->PContainer()->IsPartialTypeAndHasMainType())) { return pDug->PContainer(); } } return NULL; }
bool TypeExtensionIterator::MoveNext() { BCSYM_NamedRoot * pNamed = NULL; do { pNamed = m_childIterator.GetNext(); if (pNamed && pNamed->IsContainer()) { BCSYM_Container *pContainer = pNamed->PContainer(); // Perf: We are only interested in looking at types marked as containing extension methods. So only load the // type's children if the type says it contains extension methods. BCSYM *pContainerAfterDiggingThroughAlias = pContainer->DigThroughAlias(); if (pContainerAfterDiggingThroughAlias->IsClass()) { if (pContainerAfterDiggingThroughAlias->PClass()->ContainsExtensionMethods()) { pContainer->EnsureChildrenLoaded(); } } else if (!pContainer->GetCompilerFile() || (pContainer->GetCompilerFile()->IsMetaDataFile() && pContainer->GetCompilerFile()->ContainsExtensionMethods())) { pContainer->EnsureChildrenLoaded(); } } } while (pNamed && ! pNamed->IsTypeExtension()); if (pNamed) { m_pCurrent = pNamed->PClass(); } else { m_pCurrent = NULL; } return m_pCurrent; }