Source code for hdlConvertorAst.translate.common.add_call_operator_for_call_without_parenthesis

from hdlConvertorAst.hdlAst import HdlOp, HdlValueId, HdlFunctionDef, HdlOpType
from hdlConvertorAst.to.hdl_ast_modifier import HdlAstModifier
from hdlConvertorAst.translate.verilog_to_basic_hdl_sim_model.utils import hdl_call


[docs]class AddCallOperatorForCallWithoutParenthesis(HdlAstModifier): """ Verilog function call does not need to have () and it can be called just by its id. To simplify handling we decorete each such a call with a call operator in this transformation. """
[docs] def __init__(self): HdlAstModifier.__init__(self) self._parentExpr = None
[docs] def visit_iHdlExpr(self, o): """ :type o: iHdlExpr :return: iHdlExpr """ if isinstance(o, HdlOp): prev_par_expr = self._parentExpr self._parentExpr = o try: self.visit_HdlOp(o) finally: self._parentExpr = prev_par_expr else: if isinstance(o, HdlValueId) and\ isinstance(o.obj, HdlFunctionDef) and \ ( not isinstance(self._parentExpr, HdlOp) or \ self._parentExpr.fn != HdlOpType.CALL or \ self._parentExpr.ops[0] is not o ): # wrap function id in a call operator if parent is not a call operator return hdl_call(o, []) return o