| 739 | } |
| 740 | |
| 741 | any *CompileHelper::decodeHierPath(hier_path *path, bool &invalidValue, |
| 742 | DesignComponent *component, |
| 743 | CompileDesign *compileDesign, Reduce reduce, |
| 744 | ValuedComponentI *instance, PathId fileId, |
| 745 | uint32_t lineNumber, any *pexpr, |
| 746 | bool muteErrors, bool returnTypespec) { |
| 747 | UHDM::GetObjectFunctor getObjectFunctor = |
| 748 | [&](std::string_view name, const any *inst, |
| 749 | const any *pexpr) -> UHDM::any * { |
| 750 | return getObject(name, component, compileDesign, instance, pexpr); |
| 751 | }; |
| 752 | UHDM::GetObjectFunctor getValueFunctor = |
| 753 | [&](std::string_view name, const any *inst, |
| 754 | const any *pexpr) -> UHDM::any * { |
| 755 | return (expr *)getValue(name, component, compileDesign, Reduce::Yes, |
| 756 | instance, fileId, lineNumber, (any *)pexpr, false); |
| 757 | }; |
| 758 | UHDM::GetTaskFuncFunctor getTaskFuncFunctor = |
| 759 | [&](std::string_view name, const any *inst) -> UHDM::task_func * { |
| 760 | auto ret = getTaskFunc(name, component, compileDesign, instance, pexpr); |
| 761 | return ret.first; |
| 762 | }; |
| 763 | UHDM::ExprEval eval(muteErrors); |
| 764 | eval.setGetObjectFunctor(getObjectFunctor); |
| 765 | eval.setGetValueFunctor(getValueFunctor); |
| 766 | eval.setGetTaskFuncFunctor(getTaskFuncFunctor); |
| 767 | if (m_exprEvalPlaceHolder == nullptr) { |
| 768 | m_exprEvalPlaceHolder = compileDesign->getSerializer().MakeModule_inst(); |
| 769 | m_exprEvalPlaceHolder->Param_assigns( |
| 770 | compileDesign->getSerializer().MakeParam_assignVec()); |
| 771 | } else { |
| 772 | m_exprEvalPlaceHolder->Param_assigns()->erase( |
| 773 | m_exprEvalPlaceHolder->Param_assigns()->begin(), |
| 774 | m_exprEvalPlaceHolder->Param_assigns()->end()); |
| 775 | } |
| 776 | any *res = |
| 777 | eval.decodeHierPath(path, invalidValue, m_exprEvalPlaceHolder, pexpr, |
| 778 | returnTypespec ? UHDM::ExprEval::ReturnType::TYPESPEC |
| 779 | : UHDM::ExprEval::ReturnType::VALUE, |
| 780 | muteErrors); |
| 781 | |
| 782 | if (res == nullptr) { |
| 783 | if ((reduce == Reduce::Yes) && (!muteErrors)) { |
| 784 | ErrorContainer *errors = |
| 785 | compileDesign->getCompiler()->getErrorContainer(); |
| 786 | SymbolTable *symbols = compileDesign->getCompiler()->getSymbolTable(); |
| 787 | // std::string fileContent = FileUtils::getFileContent(fileName); |
| 788 | // std::string_view lineText = |
| 789 | // StringUtils::getLineInString(fileContent, lineNumber); |
| 790 | const std::string_view lineText = path->VpiFullName(); |
| 791 | Location loc(fileId, lineNumber, 0, symbols->registerSymbol(lineText)); |
| 792 | Error err(ErrorDefinition::UHDM_UNRESOLVED_HIER_PATH, loc); |
| 793 | errors->addError(err); |
| 794 | } |
| 795 | } |
| 796 | return res; |
| 797 | } |
| 798 |
no test coverage detected