-
Notifications
You must be signed in to change notification settings - Fork 8
/
named_int_constants.py
31 lines (26 loc) · 1.1 KB
/
named_int_constants.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import enum
from puya.awst import wtypes
from puya.awst.nodes import UInt64Constant
from puya.awst_build.eb.base import ExpressionBuilder, TypeClassExpressionBuilder
from puya.awst_build.eb.var_factory import var_expression
from puya.errors import CodeError
from puya.parse import SourceLocation
class NamedIntegerConstsTypeBuilder(TypeClassExpressionBuilder):
def __init__(self, location: SourceLocation, *, enum_name: str, data: dict[str, enum.IntEnum]):
super().__init__(location=location)
self.enum_name = enum_name
self.data = data
def produces(self) -> wtypes.WType:
return wtypes.uint64_wtype
def member_access(self, name: str, location: SourceLocation) -> ExpressionBuilder:
try:
int_enum = self.data[name]
except KeyError as ex:
raise CodeError(
f"Unable to resolve constant value for {self.enum_name}.{name}", location
) from ex
return var_expression(
UInt64Constant(
value=int_enum.value, source_location=location, teal_alias=int_enum.name
)
)