| 9896 | } |
| 9897 | |
| 9898 | BfType* BfModule::ResolveTypeResult(BfTypeReference* typeRef, BfType* resolvedTypeRef, BfPopulateType populateType, BfResolveTypeRefFlags resolveFlags) |
| 9899 | { |
| 9900 | if ((mCompiler->mIsResolveOnly) && (!IsInSpecializedSection())) |
| 9901 | { |
| 9902 | bool isGetDefinition = false; |
| 9903 | BfAutoComplete* autoComplete = NULL; |
| 9904 | if (mCompiler->IsAutocomplete()) |
| 9905 | { |
| 9906 | autoComplete = mCompiler->mResolvePassData->mAutoComplete; |
| 9907 | isGetDefinition = autoComplete->mIsGetDefinition || (autoComplete->mResolveType == BfResolveType_GetResultString); |
| 9908 | } |
| 9909 | |
| 9910 | BfSourceData* typeRefSource = NULL; |
| 9911 | if (typeRef->IsTemporary()) |
| 9912 | { |
| 9913 | BfTypeReference* checkTypeRef = typeRef; |
| 9914 | if (auto genericTypeRef = BfNodeDynCast<BfGenericInstanceTypeRef>(checkTypeRef)) |
| 9915 | checkTypeRef = genericTypeRef->mElementType; |
| 9916 | if (auto namedTypeRef = BfNodeDynCast<BfNamedTypeReference>(checkTypeRef)) |
| 9917 | typeRefSource = namedTypeRef->mNameNode->GetSourceData(); |
| 9918 | } |
| 9919 | else |
| 9920 | typeRefSource = typeRef->GetSourceData(); |
| 9921 | |
| 9922 | BfSourceClassifier* sourceClassifier = NULL; |
| 9923 | if ((mCompiler->mResolvePassData->mIsClassifying) && (typeRefSource != NULL)) |
| 9924 | { |
| 9925 | auto parser = typeRefSource->ToParser(); |
| 9926 | if (parser != NULL) |
| 9927 | sourceClassifier = mCompiler->mResolvePassData->GetSourceClassifier(parser); |
| 9928 | } |
| 9929 | |
| 9930 | bool wantsFileNamespaceInfo = ((sourceClassifier != NULL) || (isGetDefinition) || (mCompiler->mResolvePassData->mGetSymbolReferenceKind == BfGetSymbolReferenceKind_Namespace)); |
| 9931 | |
| 9932 | bool wantsAllNamespaceInfo = (mCompiler->mResolvePassData->mGetSymbolReferenceKind == BfGetSymbolReferenceKind_Namespace) && (mCompiler->mResolvePassData->mParsers.IsEmpty()); |
| 9933 | |
| 9934 | if (wantsFileNamespaceInfo || wantsAllNamespaceInfo) |
| 9935 | { |
| 9936 | //TODO: By only breaking out for "mIgnoreErrors", we classified elements (below) even when a resolvedTypeRef was not found! |
| 9937 | //Why did we have this mIgnoreErrors check in there? |
| 9938 | // if ((resolvedTypeRef == NULL) && (mIgnoreErrors)) |
| 9939 | if (resolvedTypeRef == NULL) |
| 9940 | { |
| 9941 | return NULL; |
| 9942 | } |
| 9943 | |
| 9944 | BfTypeInstance* resolvedTypeInstance = NULL; |
| 9945 | if (resolvedTypeRef != NULL) |
| 9946 | resolvedTypeInstance = resolvedTypeRef->ToTypeInstance(); |
| 9947 | |
| 9948 | bool isNamespace = false; |
| 9949 | auto checkTypeRef = typeRef; |
| 9950 | if (auto genericTypeRef = BfNodeDynCast<BfGenericInstanceTypeRef>(checkTypeRef)) |
| 9951 | checkTypeRef = genericTypeRef->mElementType; |
| 9952 | auto headTypeRef = checkTypeRef; |
| 9953 | if (auto elementedTypeRef = BfNodeDynCast<BfElementedTypeRef>(checkTypeRef)) |
| 9954 | checkTypeRef = elementedTypeRef->mElementType; |
| 9955 |
no test coverage detected