| 72 | } |
| 73 | |
| 74 | bool CompilePackage::compile(Reduce reduce) { |
| 75 | if (!m_package) return false; |
| 76 | UHDM::Serializer& s = m_compileDesign->getSerializer(); |
| 77 | UHDM::package* pack = any_cast<UHDM::package*>(m_package->getUhdmInstance()); |
| 78 | const FileContent* fC = m_package->m_fileContents[0]; |
| 79 | NodeId packId = m_package->m_nodeIds[0]; |
| 80 | m_helper.setElabMode(reduce == Reduce::Yes); |
| 81 | if (pack == nullptr) { |
| 82 | pack = s.MakePackage(); |
| 83 | pack->VpiName(m_package->getName()); |
| 84 | m_package->setUhdmInstance(pack); |
| 85 | } |
| 86 | fC->populateCoreMembers(packId, packId, pack); |
| 87 | m_package->m_exprBuilder.seterrorReporting(m_errors, m_symbols); |
| 88 | m_package->m_exprBuilder.setDesign( |
| 89 | m_compileDesign->getCompiler()->getDesign()); |
| 90 | if (reduce == Reduce::Yes) { |
| 91 | Location loc(fC->getFileId(packId), fC->Line(packId), fC->Column(packId), |
| 92 | m_symbols->getId(m_package->getName())); |
| 93 | Error err(ErrorDefinition::COMP_COMPILE_PACKAGE, loc); |
| 94 | |
| 95 | ErrorContainer* errors = |
| 96 | new ErrorContainer(m_symbols, m_errors->getLogListener()); |
| 97 | errors->registerCmdLine( |
| 98 | m_compileDesign->getCompiler()->getCommandLineParser()); |
| 99 | errors->addError(err); |
| 100 | errors->printMessage( |
| 101 | err, |
| 102 | m_compileDesign->getCompiler()->getCommandLineParser()->muteStdout()); |
| 103 | delete errors; |
| 104 | } |
| 105 | collectObjects_(CollectType::FUNCTION, reduce); |
| 106 | collectObjects_(CollectType::DEFINITION, reduce); |
| 107 | m_helper.evalScheduledExprs(m_package, m_compileDesign); |
| 108 | collectObjects_(CollectType::OTHER, reduce); |
| 109 | |
| 110 | do { |
| 111 | VObject current = fC->Object(packId); |
| 112 | packId = current.m_child; |
| 113 | } while (packId && (fC->Type(packId) != VObjectType::paAttribute_instance)); |
| 114 | if (packId) { |
| 115 | if (UHDM::VectorOfattribute* attributes = m_helper.compileAttributes( |
| 116 | m_package, fC, packId, m_compileDesign, nullptr)) { |
| 117 | m_package->Attributes(attributes); |
| 118 | } |
| 119 | } |
| 120 | |
| 121 | return true; |
| 122 | } |
| 123 | |
| 124 | bool CompilePackage::collectObjects_(CollectType collectType, Reduce reduce) { |
| 125 | std::vector<VObjectType> stopPoints = { |
no test coverage detected