Skip to content

If statement

woke.ast.ir.yul.if_statement module #

If class #

Bases: YulStatementAbc

TBD

Source code in woke/ast/ir/yul/if_statement.py
class If(YulStatementAbc):
    """
    TBD
    """

    _parent: Block
    _body: Block
    _condition: Union[FunctionCall, Identifier, Literal]

    def __init__(self, init: IrInitTuple, if_statement: YulIf, parent: YulAbc):
        super().__init__(init, if_statement, parent)
        self._body = Block(init, if_statement.body, self)
        if isinstance(if_statement.condition, YulFunctionCall):
            self._condition = FunctionCall(init, if_statement.condition, self)
        elif isinstance(if_statement.condition, YulIdentifier):
            self._condition = Identifier(init, if_statement.condition, self)
        elif isinstance(if_statement.condition, YulLiteral):
            self._condition = Literal(init, if_statement.condition, self)
        else:
            assert False, f"Unexpected type: {type(if_statement.condition)}"

    def __iter__(self) -> Iterator[YulAbc]:
        yield self
        yield from self._condition
        yield from self._body

    @property
    def parent(self) -> Block:
        return self._parent

    @property
    def body(self) -> Block:
        return self._body

    @property
    def condition(self) -> Union[FunctionCall, Identifier, Literal]:
        return self._condition