MCPcopy Create free account
hub / github.com/beefytech/Beef / ResolveTypeResult

Method ResolveTypeResult

IDEHelper/Compiler/BfModuleTypeUtils.cpp:9898–10282  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

9896}
9897
9898BfType* 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

Callers 2

GetCustomAttributesMethod · 0.80
ResolveTypeRefMethod · 0.80

Calls 15

CheckProtectionFunction · 0.85
FailFunction · 0.85
TypeToStringFunction · 0.85
IsAutocompleteMethod · 0.80
GetSourceDataMethod · 0.80
GetSourceClassifierMethod · 0.80
ParseAtomCompositeMethod · 0.80
ContainsNamespaceMethod · 0.80
CheckFixitMethod · 0.80
FixitCheckNamespaceMethod · 0.80
CheckNamespaceMethod · 0.80

Tested by

no test coverage detected