| 5448 | } |
| 5449 | |
| 5450 | bool CompileHelper::elaborationSystemTask(DesignComponent* component, |
| 5451 | const FileContent* fC, NodeId id, |
| 5452 | CompileDesign* compileDesign) { |
| 5453 | NodeId taskNameId = fC->Child(id); |
| 5454 | NodeId NumberOrArgList = fC->Sibling(taskNameId); |
| 5455 | NodeId ArgList = NumberOrArgList; |
| 5456 | if (fC->Type(ArgList) != VObjectType::paList_of_arguments) { |
| 5457 | ArgList = fC->Sibling(ArgList); |
| 5458 | } |
| 5459 | NodeId Expression = fC->Child(ArgList); |
| 5460 | NodeId Primary = fC->Child(Expression); |
| 5461 | NodeId Primary_literal = fC->Child(Primary); |
| 5462 | NodeId StringId = fC->Child(Primary_literal); |
| 5463 | std::string_view text = fC->SymName(StringId); |
| 5464 | std::string_view name = fC->SymName(taskNameId); |
| 5465 | Serializer& s = compileDesign->getSerializer(); |
| 5466 | UHDM::sys_task_call* scall = s.MakeSys_task_call(); |
| 5467 | fC->populateCoreMembers(id, id, scall); |
| 5468 | scall->VpiName(name); |
| 5469 | VectorOfany* args = s.MakeAnyVec(); |
| 5470 | scall->Tf_call_args(args); |
| 5471 | constant* c = s.MakeConstant(); |
| 5472 | args->push_back(c); |
| 5473 | c->VpiValue(std::string("STRING:") + std::string(text)); |
| 5474 | c->VpiDecompile(text); |
| 5475 | c->VpiConstType(vpiStringConst); |
| 5476 | component->addElabSysCall(scall); |
| 5477 | Location loc(fC->getFileId(id), fC->Line(id), fC->Column(id), |
| 5478 | m_symbols->registerSymbol(text)); |
| 5479 | if (name == "fatal") { |
| 5480 | Error err(ErrorDefinition::ELAB_SYSTEM_FATAL, loc); |
| 5481 | m_errors->addError(err); |
| 5482 | } else if (name == "error") { |
| 5483 | Error err(ErrorDefinition::ELAB_SYSTEM_ERROR, loc); |
| 5484 | m_errors->addError(err); |
| 5485 | } |
| 5486 | if (name == "warning") { |
| 5487 | Error err(ErrorDefinition::ELAB_SYSTEM_WARNING, loc); |
| 5488 | m_errors->addError(err); |
| 5489 | } |
| 5490 | if (name == "info") { |
| 5491 | Error err(ErrorDefinition::ELAB_SYSTEM_INFO, loc); |
| 5492 | m_errors->addError(err); |
| 5493 | } |
| 5494 | return true; |
| 5495 | } |
| 5496 | |
| 5497 | } // namespace SURELOG |
no test coverage detected