| 125 | } |
| 126 | |
| 127 | bool CompileHelper::importPackage(DesignComponent* scope, Design* design, |
| 128 | const FileContent* fC, NodeId id, |
| 129 | CompileDesign* compileDesign, |
| 130 | bool inPackage) { |
| 131 | Serializer& s = compileDesign->getSerializer(); |
| 132 | FileCNodeId fnid(fC, id); |
| 133 | scope->addObject(VObjectType::paPackage_import_item, fnid); |
| 134 | |
| 135 | NodeId nameId = fC->Child(id); |
| 136 | const std::string_view pack_name = fC->SymName(nameId); |
| 137 | std::string object_name; |
| 138 | if (NodeId objId = fC->Sibling(nameId)) { |
| 139 | if (fC->Type(objId) == VObjectType::slStringConst) { |
| 140 | object_name = fC->SymName(objId); |
| 141 | } |
| 142 | } |
| 143 | Package* def = design->getPackage(pack_name); |
| 144 | if (def) { |
| 145 | if (def == scope) // skip |
| 146 | return true; |
| 147 | scope->addAccessPackage(def); |
| 148 | auto& classSet = def->getObjects(VObjectType::paClass_declaration); |
| 149 | for (const auto& cls : classSet) { |
| 150 | const FileContent* packageFile = cls.fC; |
| 151 | NodeId classDef = packageFile->Sibling(cls.nodeId); |
| 152 | const std::string_view name = packageFile->SymName(classDef); |
| 153 | if (!object_name.empty()) { |
| 154 | if (name != object_name) continue; |
| 155 | } |
| 156 | std::string fullName = StrCat(def->getName(), "::", name); |
| 157 | DesignComponent* comp = packageFile->getComponentDefinition(fullName); |
| 158 | FileCNodeId fnid(packageFile, classDef); |
| 159 | scope->addNamedObject(name, fnid, comp); |
| 160 | scope->insertDataType(name, (ClassDefinition*)comp); |
| 161 | } |
| 162 | // Typespecs |
| 163 | auto& typeSet = def->getDataTypeMap(); |
| 164 | for (auto& type : typeSet) { |
| 165 | if (!object_name.empty()) { |
| 166 | if (type.first != object_name) continue; |
| 167 | } |
| 168 | scope->insertDataType(type.first, type.second); |
| 169 | } |
| 170 | // Variables |
| 171 | auto& variableSet = def->getVariables(); |
| 172 | for (auto& var : variableSet) { |
| 173 | if (!object_name.empty()) { |
| 174 | if (var.first != object_name) continue; |
| 175 | } |
| 176 | scope->addVariable(var.second); |
| 177 | Value* val = def->getValue(var.first); |
| 178 | if (val) { |
| 179 | scope->setValue(var.first, m_exprBuilder.clone(val), m_exprBuilder); |
| 180 | } |
| 181 | } |
| 182 | // Nets |
| 183 | auto& netSet = def->getSignals(); |
| 184 | for (auto& net : netSet) { |
no test coverage detected