Skip to main content
Tolk supports enums, similar to TypeScript and C++ enums. In the TVM (virtual machine) all enums are integers. From the compiler’s point of view, it’s a distinct type.

Enum members

Values can be specified manually. Otherwise, auto-calculated as +1.

Enums are distinct types, not integers

Color.Red is Color, not int, although it holds the value 0 at runtime.
Since enums are types, they can be:
  • used as variable and parameters,
  • extended with methods for an enum,
  • used in struct fields, unions, generics, and other type contexts:

match for enums is exhaustive

Pattern matching on enums requires coverage of all cases:
Alternatively, use else to handle remaining values:
Operator == compares values directly:

Enums are integers under the hood

At the TVM level, every enum is represented as int. Casting between the enum and int is allowed:
  • Color.Blue as int evaluates to 2
  • 2 as Color evaluates to Color.Blue
During deserialization with fromCell(), the compiler performs checks to ensure that encoded integers correspond to valid enum values.

Enums are allowed in throw and assert

Stack layout and serialization

Every enum is backed by TVM INT. Serialized as (u)intN where N is:
  • specified manually: enum Role: int8 { ... }
  • or calculated automatically to fit all values
For details, follow TVM representation and Serialization.