summaryrefslogtreecommitdiff
path: root/docs/00.md
diff options
context:
space:
mode:
authorLeo Tenenbaum <pommicket@gmail.com>2019-12-07 18:21:03 -0500
committerLeo Tenenbaum <pommicket@gmail.com>2019-12-07 18:21:03 -0500
commit390f1e368cfdc5011e9eb9af76d2fb44cd8dc0b2 (patch)
treed299c8e4360a68038f575c16d8083275cb1046f0 /docs/00.md
parent9c44be7b25d61450808e918c14b8dfff49a78a8a (diff)
fixed something weird going on with the tokenizer that might be a bug in clang
Diffstat (limited to 'docs/00.md')
-rw-r--r--docs/00.md25
1 files changed, 17 insertions, 8 deletions
diff --git a/docs/00.md b/docs/00.md
index e4e8d41..4998684 100644
--- a/docs/00.md
+++ b/docs/00.md
@@ -1,8 +1,8 @@
-## Declarations in toc
+## Declarations
-Declarations have the following syntax:
+In toc, declarations have the following syntax:
```
-<name> : [type] [= expression];
+<name> :[:] [type] [= expression];
```
The square brackets (`[]`) indicate something optional.
@@ -41,10 +41,19 @@ Here are all of toc's builtin types and their ranges of values:
- `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,
-- `f32`
-- `f64`
-- `bool`
-- `char`
+- `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. The specific values are technically platform-dependent, but usually there are 256 of them.
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.