Skip to content

Chain

Chain dataclass

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

Bases: RewriteRule


              flowchart TD
              kirin.rewrite.chain.Chain[Chain]
              kirin.rewrite.abc.RewriteRule[RewriteRule]

                              kirin.rewrite.abc.RewriteRule --> kirin.rewrite.chain.Chain
                


              click kirin.rewrite.chain.Chain href "" "kirin.rewrite.chain.Chain"
              click kirin.rewrite.abc.RewriteRule href "" "kirin.rewrite.abc.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)