| 3889 | } |
| 3890 | |
| 3891 | void BfCompiler::VisitAutocompleteExteriorIdentifiers() |
| 3892 | { |
| 3893 | for (auto checkNode : mResolvePassData->mExteriorAutocompleteCheckNodes) |
| 3894 | { |
| 3895 | bool isUsingDirective = false; |
| 3896 | BfIdentifierNode* checkIdentifier = NULL; |
| 3897 | if (auto usingDirective = BfNodeDynCast<BfUsingDirective>(checkNode)) |
| 3898 | { |
| 3899 | checkIdentifier = usingDirective->mNamespace; |
| 3900 | } |
| 3901 | else if (auto usingDirective = BfNodeDynCast<BfUsingModDirective>(checkNode)) |
| 3902 | { |
| 3903 | if (usingDirective->mTypeRef != NULL) |
| 3904 | { |
| 3905 | BF_ASSERT(mContext->mScratchModule->mCurTypeInstance == NULL); |
| 3906 | |
| 3907 | SetAndRestoreValue<BfTypeInstance*> prevCurTypeInstance(mContext->mScratchModule->mCurTypeInstance, NULL); |
| 3908 | SetAndRestoreValue<bool> prevIgnoreErrors(mContext->mScratchModule->mIgnoreErrors, true); |
| 3909 | mContext->mScratchModule->ResolveTypeRef(usingDirective->mTypeRef, NULL); |
| 3910 | if (mResolvePassData->mAutoComplete != NULL) |
| 3911 | mResolvePassData->mAutoComplete->CheckTypeRef(usingDirective->mTypeRef, false, isUsingDirective); |
| 3912 | continue; |
| 3913 | } |
| 3914 | } |
| 3915 | else |
| 3916 | checkIdentifier = BfNodeDynCast<BfIdentifierNode>(checkNode); |
| 3917 | |
| 3918 | if (checkIdentifier == NULL) |
| 3919 | continue; |
| 3920 | |
| 3921 | if (mResolvePassData->mAutoComplete != NULL) |
| 3922 | mResolvePassData->mAutoComplete->CheckIdentifier(checkIdentifier, false, isUsingDirective); |
| 3923 | |
| 3924 | if (auto sourceClassifier = mResolvePassData->GetSourceClassifier(checkIdentifier)) |
| 3925 | { |
| 3926 | if (isUsingDirective) |
| 3927 | { |
| 3928 | while (auto qualifiedNameNode = BfNodeDynCast<BfQualifiedNameNode>(checkIdentifier)) |
| 3929 | { |
| 3930 | sourceClassifier->SetElementType(qualifiedNameNode->mRight, BfSourceElementType_Namespace); |
| 3931 | checkIdentifier = qualifiedNameNode->mLeft; |
| 3932 | } |
| 3933 | |
| 3934 | if (checkIdentifier != NULL) |
| 3935 | sourceClassifier->SetElementType(checkIdentifier, BfSourceElementType_Namespace); |
| 3936 | } |
| 3937 | } |
| 3938 | } |
| 3939 | mResolvePassData->mExteriorAutocompleteCheckNodes.Clear(); |
| 3940 | } |
| 3941 | |
| 3942 | void BfCompiler::VisitSourceExteriorNodes() |
| 3943 | { |
nothing calls this directly
no test coverage detected