Declarations
Table of contents · Next
Variable declarations have the following syntax:
<name> :[:] [type] [= expression];
The square brackets ([]) indicate something optional.
All of the following statements
declare an new variable x which is an integer, and has a value of 0:
x : int;
x : int = 0;
x := 0;
Note that in the first of those statements, although no expression
is specified, it defaults to 0.
If you wanted x to be a floating-point number, you could use:
x : float;
x : float = 0;
x := 0.0;
Note that 0 can be used as both a float and an integer, but
when no type is specified, it defaults to an int, whereas 0.0
defaults to a float.
Here are all of toc's basic builtin types and their ranges of values:
- int - A 64-bit signed integer (always), -9223372036854775808 to 9223372036854775807
- i8 - An 8-bit signed integer, -128 to 128
- i16 - 16-bit signed integer, -32768 to 32767
- i32 - 32-bit signed integer, -2147483648 to 2147483647
- i64 - 64-bit signed integer (same as int, but more explicit about the size), -9223372036854775808 to 9223372036854775807
- u8 - An 8-bit unsigned integer, 0 to 255
- u16 - 16-bit unsigned integer, 0 to 65535
- u32 - 32-bit unsigned integer, 0 to 4294967295
- u64 - 64-bit unsigned integer, 0 to 18446744073709551615
- float - A 32-bit floating-point number, -3.40282347e+38 to 3.40282347e+38
- f32 - A 32-bit floating-point number (same as float, but more explicit about the size)
- f64 - A 64-bit floating-point number, -1.7976931348623157e+308 to 1.7976931348623157e+308
- bool - A boolean value, either false or true.
- char - A character (usually either -128 to 127 or 0 to 255).
To make declarations constant, use :: instead of :. e.g.
x ::= 5+3;
y :: float = 5.123;
Here, "constant" means constant at compile time, not read-only as it does in C. One interesting thing about toc is that normal functions can run at compile time, so pretty much any expression is a valid initializer for a constant, e.g. doing x ::= some_function(); runs some_function at compile time, not at run time.