Declarations

In toc, 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. This is not true in C, and there will eventually probably be an option to leave x uninitialized.

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 builtin types and their ranges of values:

At the moment, it is not technically guaranteed that f32/float is actually 32-bit and that f64 is actually 64-bit; they are platform dependent. Perhaps someday there will be a version of toc which does not compile to C, where that could be guaranteed.

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.