aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorGravatar zinc <zinc@downsta.ir> 2026-10-14 16:51:03 +0330
committerGravatar zinc <zinc@downsta.ir> 2026-10-14 16:51:03 +0330
commit82f8b735f966be69f9892350fb0a719f3fc436f1 (patch)
tree5a6d7d3f226febfcbe5280f6da7796ef2ff2c6b2 /docs
parentlexer: a block comment that is never closed is 'unterminated comment' (append... (diff)
as: the type after as is read greedily in both compilers; x as int * y is a syntax error (appendix b.2.12 settled, no compiler change)
Diffstat (limited to 'docs')
-rw-r--r--docs/SPEC.md4
1 files changed, 2 insertions, 2 deletions
diff --git a/docs/SPEC.md b/docs/SPEC.md
index cc94451..30d547d 100644
--- a/docs/SPEC.md
+++ b/docs/SPEC.md
@@ -361,7 +361,7 @@ a = b = 7 // assigns both, value 7
```
`&&` and `||` are lower than `|`. this matches c.
-3.2.3 `as` is a postfix operator: it applies to the operand to its left and binds tighter than every binary operator, so `a + b as T` is `a + (b as T)`. a type after `as` takes following stars: `x as int * y` parses `int*` then fails. parenthesise.
+3.2.3 `as` is a postfix operator: it applies to the operand to its left and binds tighter than every binary operator, so `a + b as T` is `a + (b as T)`. the type after `as` is read greedily, stars included (`x as char**`), in both compilers: `x as int * y` reads `int*` and then is a syntax error; write `(x as int) * y`.
3.2.4 the condition of `?:` is a `binary` expression (so `a = b ? c : d` is `a = (b ? c : d)`), the middle operand and the last operand are full `expr` (assignments allowed). `a ? b : c = 5` therefore parses as `a ? b : (c = 5)`: with `a` 1 the assignment does not run.
@@ -1115,7 +1115,7 @@ each item gives a minimal program, the expected behavior (per this spec) and the
9. fixed (5.12.7): `include std;` inside a function body gave `return outside a function`; it is now error: include is top level only.
10. a syntax error hides errors in the statements skipped by recovery: `int a = ; int b = 3 +;` reports only the first error (8.2). by design, but easy to miss.
11. fixed (1.2.2): an unterminated `/* ...` comment was accepted silently; it is error: unterminated comment. (an unterminated string literal is still only reported as a later syntax error.)
-12. `x as int * y` parses `int*` as the type (3.2.3).
+12. settled (3.2.3): `x as int * y` parses `int*` as the type. this is the rule (the type is read greedily, as zc0 does too), so the program is a syntax error.
13. prototypes need parameter names: `int f(int);` => `expected a name, found ')'`.
14. `len(s)` on a `char*` returns word 0 of the string when `typecheck` is off.
15. duplicate `case` labels are not diagnosed (4.7.2).