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

Method GetSymbolReferences

IDEHelper/Compiler/BfCompiler.cpp:5117–5566  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5115}
5116
5117void BfCompiler::GetSymbolReferences()
5118{
5119 BfLogSysM("GetSymbolReferences\n");
5120
5121 if (mInInvalidState)
5122 return; // Don't even try
5123
5124 auto context = mContext;
5125 if (context->mBfObjectType == NULL)
5126 return; // Not initialized yet
5127 auto module = context->mScratchModule;
5128
5129 if (mResolvePassData->mAutoComplete != NULL)
5130 mResolvePassData->mAutoComplete->SetModule(module);
5131
5132 BfTypeDef* typeDef = NULL;
5133 HashSet<BfTypeInstance*> rebuildTypeInstList;
5134 if (!mResolvePassData->mQueuedSymbolReferenceNamespace.IsEmpty())
5135 {
5136 if (!mSystem->ParseAtomComposite(mResolvePassData->mQueuedSymbolReferenceNamespace, mResolvePassData->mSymbolReferenceNamespace))
5137 return;
5138
5139 for (auto type : mContext->mResolvedTypes)
5140 {
5141 auto typeInst = type->ToTypeInstance();
5142 if (typeInst == NULL)
5143 continue;
5144
5145 for (auto& lookupKV : typeInst->mLookupResults)
5146 {
5147 auto typeDef = lookupKV.mValue.mTypeDef;
5148 if ((typeDef != NULL) && (typeDef->mNamespace.StartsWith(mResolvePassData->mSymbolReferenceNamespace)))
5149 {
5150 AddToRebuildTypeList(typeInst, rebuildTypeInstList);
5151 }
5152 }
5153 }
5154
5155 for (auto parser : mSystem->mParsers)
5156 {
5157 BfNamespaceVisitor namespaceVisitor;
5158 namespaceVisitor.mResolvePassData = mResolvePassData;
5159 namespaceVisitor.mSystem = mSystem;
5160 namespaceVisitor.Visit(parser->mRootNode);
5161 }
5162 }
5163 else
5164 {
5165 const char* strPtr = mResolvePassData->mQueuedReplaceTypeDef.c_str();
5166 typeDef = mSystem->FindTypeDefEx(strPtr);
5167 if ((typeDef == NULL) || (typeDef->mTypeDeclaration == NULL))
5168 return;
5169
5170 typeDef = typeDef->GetLatest();
5171 mResolvePassData->mSymbolReferenceTypeDef = typeDef;
5172 auto replaceType = module->ResolveTypeDef(typeDef, BfPopulateType_IdentityNoRemapAlias);
5173 module->PopulateType(replaceType);
5174 auto replaceTypeInst = replaceType->ToTypeInstance();

Calls 15

SetModuleMethod · 0.80
ParseAtomCompositeMethod · 0.80
FindTypeDefExMethod · 0.80
GetLatestMethod · 0.80
HandleTypeReferenceMethod · 0.80
PopulateMemberSetsMethod · 0.80
TryGetWithMethod · 0.80
HandleFieldReferenceMethod · 0.80
IsFromParserMethod · 0.80
IsExtensionMethod · 0.80

Tested by

no test coverage detected