| 550 | } |
| 551 | |
| 552 | bool DesignElaboration::elaborateModule_(std::string_view moduleName, |
| 553 | const FileContent* fC, |
| 554 | bool onlyTopLevel) { |
| 555 | const FileContent::NameIdMap& nameIds = fC->getObjectLookup(); |
| 556 | const std::string_view libName = fC->getLibrary()->getName(); |
| 557 | Config* config = getInstConfig(moduleName); |
| 558 | if (config == nullptr) config = getCellConfig(moduleName); |
| 559 | Design* design = m_compileDesign->getCompiler()->getDesign(); |
| 560 | if (!m_moduleInstFactory) m_moduleInstFactory = new ModuleInstanceFactory(); |
| 561 | for (const auto& nameId : nameIds) { |
| 562 | if ((fC->Type(nameId.second) == VObjectType::paModule_declaration) && |
| 563 | (moduleName == StrCat(libName, "@", nameId.first))) { |
| 564 | DesignComponent* def = design->getComponentDefinition(moduleName); |
| 565 | if (onlyTopLevel) { |
| 566 | ModuleInstance* instance = m_moduleInstFactory->newModuleInstance( |
| 567 | def, fC, nameId.second, nullptr, moduleName, moduleName); |
| 568 | design->addTopLevelModuleInstance(instance); |
| 569 | } else { |
| 570 | ModuleInstance* instance = design->findInstance(moduleName); |
| 571 | for (uint32_t i = 0; i < def->getFileContents().size(); i++) { |
| 572 | std::vector<ModuleInstance*> parentSubInstances; |
| 573 | NodeId id = def->getNodeIds()[i]; |
| 574 | elaborateInstance_(def->getFileContents()[i], id, InvalidNodeId, |
| 575 | m_moduleInstFactory, instance, config, |
| 576 | parentSubInstances); |
| 577 | if (instance) |
| 578 | bindAllInstances_(instance, m_moduleInstFactory, config); |
| 579 | } |
| 580 | } |
| 581 | break; |
| 582 | } |
| 583 | } |
| 584 | return true; |
| 585 | } |
| 586 | |
| 587 | void DesignElaboration::recurseInstanceLoop_( |
| 588 | std::vector<int32_t>& from, std::vector<int32_t>& to, |
nothing calls this directly
no test coverage detected