MCPcopy Create free account
hub / github.com/chipsalliance/Surelog / decodeHierPath

Method decodeHierPath

src/DesignCompile/CompileExpression.cpp:741–797  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

739}
740
741any *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

Callers 1

swapForSpecifiedVarMethod · 0.80

Calls 5

getErrorContainerMethod · 0.45
getCompilerMethod · 0.45
getSymbolTableMethod · 0.45
registerSymbolMethod · 0.45
addErrorMethod · 0.45

Tested by

no test coverage detected