| 4502 | } |
| 4503 | |
| 4504 | int COFF::MapImport(CvCompileUnit* compileUnit, int id) |
| 4505 | { |
| 4506 | BF_ASSERT((id & 0x80000000) != 0); |
| 4507 | |
| 4508 | int scopeIdx = (id & 0x7FFF0000) >> 20; |
| 4509 | int itemId = (id & 0x0000FFFF); |
| 4510 | |
| 4511 | if (mModuleNameSet.IsEmpty()) |
| 4512 | { |
| 4513 | for (auto moduleInfo : mCvModuleInfo) |
| 4514 | { |
| 4515 | String name = moduleInfo->mModuleName; |
| 4516 | name = ToUpper(name); |
| 4517 | |
| 4518 | CvModuleInfoNameEntry entry; |
| 4519 | entry.mModuleInfo = moduleInfo; |
| 4520 | mModuleNameSet.Add(entry); |
| 4521 | } |
| 4522 | } |
| 4523 | |
| 4524 | if (scopeIdx < (int)compileUnit->mImports.size()) |
| 4525 | { |
| 4526 | auto& importSection = compileUnit->mImports[scopeIdx]; |
| 4527 | if (itemId < (int)importSection.mImports.size()) |
| 4528 | { |
| 4529 | auto importId = importSection.mImports[itemId]; |
| 4530 | |
| 4531 | if (importSection.mScopeCompileUnit == NULL) |
| 4532 | { |
| 4533 | CvModuleInfo* moduleInfo = NULL; |
| 4534 | size_t nameHash = CvModuleInfoNameEntry::GetHashCode(importSection.mScopeName); |
| 4535 | |
| 4536 | for (auto& nameEntry : mModuleNameSet.SelectHashes(nameHash)) |
| 4537 | { |
| 4538 | String checkModuleName = nameEntry.mModuleInfo->mModuleName; |
| 4539 | checkModuleName.Replace("\\", "/"); |
| 4540 | checkModuleName = ToUpper(checkModuleName); |
| 4541 | |
| 4542 | String checkScopeName = importSection.mScopeName; |
| 4543 | checkScopeName.Replace("\\", "/"); |
| 4544 | checkScopeName = ToUpper(checkScopeName); |
| 4545 | |
| 4546 | bool matches = false; |
| 4547 | if (checkModuleName == checkScopeName) |
| 4548 | matches = true; |
| 4549 | else if (checkScopeName.EndsWith("/" + checkModuleName)) |
| 4550 | matches = true; |
| 4551 | |
| 4552 | if (matches) |
| 4553 | { |
| 4554 | ParseCompileUnit(nameEntry.mModuleInfo->mIdx); |
| 4555 | |
| 4556 | auto externCompileUnit = nameEntry.mModuleInfo->mCompileUnit; |
| 4557 | if (externCompileUnit->mExportMap.IsEmpty()) |
| 4558 | { |
| 4559 | for (auto& exportEntry : externCompileUnit->mExports) |
| 4560 | externCompileUnit->mExportMap[exportEntry.mLocalId] = exportEntry.mGlobalId; |
| 4561 | } |
nothing calls this directly
no test coverage detected