Enums.txt

An enumerated type or enum is a finite set of constants (called enum fields) under a common prefix (enum name).

Enumerated types have a few advantages over ordinary constants. They don't pollute the global namespace and are the first-class citizens in the type system. Parameters with an enumerated type are limited on allowed values range which in turn helps to avoid errors caused by an invalid id usage.

Enums.txt is a text file that defines a list of the enumerated types available in the edit mode.

File Format

Each enumerated type is defined with the following syntax:

enum <enum name> <enum fields> end

enum name - any combination of letters, digits and _ enum fields - one or many lines with the format: <enum field name> [= <enum field value>] where enum field name - any combination of letters, digits and _ enum field value - a number or a string literal enclosed in double quotes. if not present, the compiler assigns a new value automatically.

enum Town
  LS = 0
  SF = 1
  LV = 2
end

Enum fields can be separated with line breaks (see the example above) or with a comma:

enum Town
  LS = 0, SF = 1, LV = 2
end

It is possible to define many enumerated types in one file. Each enum must have an unique name.

No comments or any extra syntax are allowed in the enums file.

Enum fields

Each enum field gets a value either implicitly or explicitly. Explicit values are getting assigned when a combination of the equal sign and the value follows the field name. Sanny Builder allows integer numbers and string literals to be used as enum values:

enum Town
  LS = 0
  SF = 1
  LV = 2
end

Town.LS is equal to 0, Town.SF is equal to 1 and Town.LV is equal to 2.

enum TicTacToe
   Player1 = "X"
   Player2 = "O"
end

TicTacToe.Player1 is equal to X and TicTacToe.Player2 is equal to O.

Implicit values are getting assigned automatically starting from 0 for the first field, 1 for the second field, 2 for the third and so on:

enum Town
  LS
  SF
  LV
end

Town.LS is equal to 0, Town.SF is equal to 1 and Town.LV is equal to 2.

For a mix of implicit and explicit values the following rules take place:

  • a field following an explicit value gets assigned to that value incremented by 1

enum E
  A = 10
  B
  C = 100
  D
  E
end

E.A = 10, E.B = 11, E.C = 100, E.D = 101, E.E = 102

  • a field following an explicit string value gets its value after the field name:

enum Month
  Jan = "January"
  Feb = "February"
  March
end

Month.Jan = "January", Month.Feb = "February", Month.March = "March"

An enum can't have a mix of both integer and string values. The first explicit value takes control of what type of values this enum gets:

enum Int
  X, Y // X = 0, Y = 1,
end

enum String
  X, Y = "Y" // X = "X", Y = "Y"
end

Last updated