Skip to main content
Tolk supports enums, similar to TypeScript and C++ enums. In the TVM, all enums are represented as integers. At the compiler level, an enum is a distinct type.

Enum members

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

Enum types

Enums are distinct types, not integers. Color.Red has type Color, not int, although it holds the value 0 at runtime.
Since enums are types, they can be:
  • used as variables and parameters,
  • extended with methods,
  • used in struct fields, unions, generics, and other type contexts.

Exhaustive pattern matching

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

Integer representation

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 validates that encoded integers correspond to valid enum values.

Usage in throw and assert

Enums are allowed in throw and assert:

Stack layout and serialization

Every enum is backed by TVM INT and serialized as (u)intN, where N is:
  • specified manually, for example: enum Role: int8 { ... };
  • or calculated automatically to fit all values.