Skip to content

Commit f75cebc

Browse files
authored
add StmtTrait and AttrTrait (#359)
1 parent 102fdd9 commit f75cebc

File tree

6 files changed

+40
-17
lines changed

6 files changed

+40
-17
lines changed

src/kirin/ir/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,10 @@
2424
from kirin.ir.traits import (
2525
Pure as Pure,
2626
Trait as Trait,
27+
AttrTrait as AttrTrait,
2728
HasParent as HasParent,
2829
MaybePure as MaybePure,
30+
StmtTrait as StmtTrait,
2931
RegionTrait as RegionTrait,
3032
SymbolTable as SymbolTable,
3133
ConstantLike as ConstantLike,

src/kirin/ir/traits/__init__.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,12 @@
99
`IsolatedFromAbove`.
1010
"""
1111

12-
from .abc import Trait as Trait, RegionTrait as RegionTrait
12+
from .abc import (
13+
Trait as Trait,
14+
AttrTrait as AttrTrait,
15+
StmtTrait as StmtTrait,
16+
RegionTrait as RegionTrait,
17+
)
1318
from .basic import (
1419
Pure as Pure,
1520
HasParent as HasParent,

src/kirin/ir/traits/abc.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from dataclasses import dataclass
66

77
if TYPE_CHECKING:
8-
from kirin.ir import Block, Region, Statement # noqa: F401
8+
from kirin.ir import Block, Region, Attribute, Statement
99
from kirin.graph import Graph
1010

1111

@@ -20,11 +20,27 @@ def verify(self, node: IRNodeType):
2020
pass
2121

2222

23+
@dataclass(frozen=True)
24+
class AttrTrait(Trait["Attribute"]):
25+
"""Base class for all attribute traits."""
26+
27+
def verify(self, node: "Attribute"):
28+
pass
29+
30+
31+
@dataclass(frozen=True)
32+
class StmtTrait(Trait["Statement"], ABC):
33+
"""Base class for all statement traits."""
34+
35+
def verify(self, node: "Statement"):
36+
pass
37+
38+
2339
GraphType = TypeVar("GraphType", bound="Graph[Block]")
2440

2541

2642
@dataclass(frozen=True)
27-
class RegionTrait(Trait["Statement"], Generic[GraphType]):
43+
class RegionTrait(StmtTrait, Generic[GraphType]):
2844
"""A trait that indicates the properties of the statement's region."""
2945

3046
@abstractmethod

src/kirin/ir/traits/basic.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33

44
from kirin.ir.nodes.stmt import Statement
55

6-
from .abc import Trait
6+
from .abc import StmtTrait
77

88
if TYPE_CHECKING:
99
from kirin.ir import Statement
1010

1111

1212
@dataclass(frozen=True)
13-
class Pure(Trait["Statement"]):
13+
class Pure(StmtTrait):
1414
"""A trait that indicates that a statement is pure, i.e., it has no side
1515
effects.
1616
"""
@@ -19,7 +19,7 @@ class Pure(Trait["Statement"]):
1919

2020

2121
@dataclass(frozen=True)
22-
class MaybePure(Trait["Statement"]):
22+
class MaybePure(StmtTrait):
2323
"""A trait that indicates the statement may be pure,
2424
i.e., a call statement can be pure if the callee is pure.
2525
"""
@@ -48,7 +48,7 @@ def set_pure(cls, stmt: "Statement") -> None:
4848

4949

5050
@dataclass(frozen=True)
51-
class ConstantLike(Trait["Statement"]):
51+
class ConstantLike(StmtTrait):
5252
"""A trait that indicates that a statement is constant-like, i.e., it
5353
represents a constant value.
5454
"""
@@ -57,7 +57,7 @@ class ConstantLike(Trait["Statement"]):
5757

5858

5959
@dataclass(frozen=True)
60-
class IsTerminator(Trait["Statement"]):
60+
class IsTerminator(StmtTrait):
6161
"""A trait that indicates that a statement is a terminator, i.e., it
6262
terminates a block.
6363
"""
@@ -66,19 +66,19 @@ class IsTerminator(Trait["Statement"]):
6666

6767

6868
@dataclass(frozen=True)
69-
class NoTerminator(Trait["Statement"]):
69+
class NoTerminator(StmtTrait):
7070
"""A trait that indicates that the region of a statement has no terminator."""
7171

7272
pass
7373

7474

7575
@dataclass(frozen=True)
76-
class IsolatedFromAbove(Trait["Statement"]):
76+
class IsolatedFromAbove(StmtTrait):
7777
pass
7878

7979

8080
@dataclass(frozen=True)
81-
class HasParent(Trait["Statement"]):
81+
class HasParent(StmtTrait):
8282
"""A trait that indicates that a statement has a parent
8383
statement.
8484
"""

src/kirin/ir/traits/callable.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from typing import TYPE_CHECKING, Generic, TypeVar
33
from dataclasses import dataclass
44

5-
from kirin.ir.traits.abc import Trait
5+
from kirin.ir.traits.abc import StmtTrait
66

77
if TYPE_CHECKING:
88
from kirin.ir import Region, Statement
@@ -12,7 +12,7 @@
1212

1313

1414
@dataclass(frozen=True)
15-
class CallableStmtInterface(Trait["Statement"], ABC, Generic[StmtType]):
15+
class CallableStmtInterface(StmtTrait, ABC, Generic[StmtType]):
1616
"""A trait that indicates that a statement is a callable statement.
1717
1818
A callable statement is a statement that can be called as a function.
@@ -26,7 +26,7 @@ def get_callable_region(cls, stmt: "Statement") -> "Region":
2626

2727

2828
@dataclass(frozen=True)
29-
class HasSignature(Trait["Statement"], ABC):
29+
class HasSignature(StmtTrait, ABC):
3030
"""A trait that indicates that a statement has a function signature
3131
attribute.
3232
"""

src/kirin/ir/traits/symbol.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@
55

66
from kirin.ir.attrs.py import PyAttr
77
from kirin.ir.exception import ValidationError
8-
from kirin.ir.traits.abc import Trait
8+
from kirin.ir.traits.abc import StmtTrait
99

1010
if TYPE_CHECKING:
1111
from kirin.ir import Statement
1212

1313

1414
@dataclass(frozen=True)
15-
class SymbolOpInterface(Trait["Statement"]):
15+
class SymbolOpInterface(StmtTrait):
1616
"""A trait that indicates that a statement is a symbol operation.
1717
1818
A symbol operation is a statement that has a symbol name attribute.
@@ -34,7 +34,7 @@ def verify(self, stmt: Statement):
3434

3535

3636
@dataclass(frozen=True)
37-
class SymbolTable(Trait["Statement"]):
37+
class SymbolTable(StmtTrait):
3838
"""
3939
Statement with SymbolTable trait can only have one region with one block.
4040
"""

0 commit comments

Comments
 (0)