Skip to content

Chain

Chain dataclass

Chain(
    rule: RewriteRule | Iterable[RewriteRule],
    *others: RewriteRule
)

Bases: RewriteRule

Chain multiple rewrites together.

The chain will apply each rewrite in order until one of the rewrites terminates.

Source code in src/kirin/rewrite/chain.py
17
18
19
20
21
22
23
24
def __init__(self, rule: RewriteRule | Iterable[RewriteRule], *others: RewriteRule):
    if isinstance(rule, RewriteRule):
        self.rules = [rule, *others]
    else:
        assert (
            others == ()
        ), "Cannot pass multiple positional arguments if the first argument is an iterable"
        self.rules = list(rule)