Skip to content

Abc

Result module-attribute

Result: TypeAlias = (
    SSAValue | tuple[SSAValue, ...] | Statement | None
)

Result of lowering a node. This is used to indicate that the node can be lowered to a SSAValue or None.

If the node is corresponding to a single statement that has a single result value, the result can also be a Statement for convenience.

If the node can be assigned to a variable syntax-wise, it returns the SSAValue. If the node cannot be assigned to a variable, it returns None.

LoweringABC dataclass

LoweringABC(dialects: DialectGroup)

Bases: ABC, Generic[ASTNodeType]

Base class for lowering.

This class is used to lower the AST nodes to IR. It contains the lowering process and the state of the lowering process.

dialects instance-attribute

dialects: DialectGroup

dialects to lower to

lower_global abstractmethod

lower_global(
    state: State[ASTNodeType], node: ASTNodeType
) -> LoweringABC.Result

Transform a given global expression to a SSAValue.

This method is overridden by the subclass to transform a given global AST expression to a value as LoweringABC.Result.

The subclass must implement this method to transform a given global AST expression to a SSAValue.

Source code in src/kirin/lowering/abc.py
86
87
88
89
90
91
92
93
94
95
96
97
98
@abstractmethod
def lower_global(
    self, state: State[ASTNodeType], node: ASTNodeType
) -> LoweringABC.Result:
    """Transform a given global expression to a SSAValue.

    This method is overridden by the subclass to transform a given global
    AST expression to a value as `LoweringABC.Result`.

    The subclass must implement this method to transform a given global
    AST expression to a SSAValue.
    """
    ...

lower_global_no_raise

lower_global_no_raise(
    state: State[ASTNodeType], node: ASTNodeType
) -> LoweringABC.Result | None

Transform a given global expression to a SSAValue.

This method can be overridden by the subclass to transform a given global AST expression to a SSAValue.

Source code in src/kirin/lowering/abc.py
100
101
102
103
104
105
106
107
108
109
110
111
def lower_global_no_raise(
    self, state: State[ASTNodeType], node: ASTNodeType
) -> LoweringABC.Result | None:
    """Transform a given global expression to a SSAValue.

    This method can be overridden by the subclass to transform a given global
    AST expression to a SSAValue.
    """
    try:
        return self.lower_global(state, node)
    except BuildError:
        return None

visit abstractmethod

visit(
    state: State[ASTNodeType], node: ASTNodeType
) -> Result

Entry point of AST visitors.

Parameters:

Name Type Description Default
state State[ASTNodeType]

lowering state

required
node ASTNodeType

AST node to be lowered

required

Returns: SSAValue: if the node can be assigned to a variable syntax-wise, what is the SSAValue. Statement: if the node is a single statement that has a single result value. This is equivalent to returning stmt.results[0]. None: If the node cannot be assigned to a variable syntax-wise. Raises: lowering.BuildError: if the node cannot be lowered.

Source code in src/kirin/lowering/abc.py
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
@abstractmethod
def visit(self, state: State[ASTNodeType], node: ASTNodeType) -> Result:
    """Entry point of AST visitors.

    Args:
        state: lowering state
        node: AST node to be lowered
    Returns:
        SSAValue: if the node can be assigned to a variable syntax-wise,
            what is the `SSAValue`.
        Statement: if the node is a single statement that has a single result value.
            This is equivalent to returning `stmt.results[0]`.
        None: If the node cannot be assigned to a variable syntax-wise.
    Raises:
        lowering.BuildError: if the node cannot be lowered.
    """
    ...