compound assignment
This commit is contained in:
@@ -100,7 +100,7 @@
|
||||
- `while condition : i = i + 1 { ... }` - execute the update after each completed iteration
|
||||
- the condition and update may be parenthesized independently for visual clarity
|
||||
- update targets must already be declared and mutable; loops do not introduce implicit induction variables
|
||||
- compound assignment (`+=`) remains deferred
|
||||
- update clauses support ordinary and compound assignment
|
||||
- ranges (implemented; see section below)
|
||||
- for loops (implemented; operates on ranges, arrays, slices, and pointers-to-arrays). examples:
|
||||
- `for items |item| { ... }` - capture just the `item` value in the array/slice (uses copy semantics, i.e. gets a `T`)
|
||||
@@ -112,7 +112,18 @@
|
||||
- `for 0..(len) |i| { ... }` or equivalently `for 0..=(len - 1) |i| { ... }` - calculating range bounds, expressions must be parenthesized
|
||||
- for all conditionals/guards, parentheses are optional but allowed for visual clarity
|
||||
|
||||
6. compound assignment: `+=`, `-=`, `*=`, `/=`
|
||||
6. compound assignment: `+=`, `-=`, `*=`, `/=` (implemented)
|
||||
- added the binary arithmetic operators `-`, `*`, `/` (previously only `+` existed); `*`/`/`
|
||||
bind tighter than `+`/`-`, and prefix `-` (negation) is unchanged
|
||||
- compound assignments preserve the target, operator, and right-hand side explicitly through
|
||||
parsing and checking; lowering computes the target address once, then loads, applies the
|
||||
operation, and stores through that address
|
||||
- side-effecting index, field-base, and dereference expressions are evaluated once in
|
||||
left-to-right order
|
||||
- integer arithmetic traps on overflow (`Sub_Checked`/`Mul_Checked` via the LLVM
|
||||
`.with.overflow` intrinsics) and integer `/` traps on divide-by-zero and `INT_MIN / -1`;
|
||||
floats follow IEEE (`fadd`/`fsub`/`fmul`/`fdiv`, no trap)
|
||||
- constant folding (global initializers) covers `-`, `*`, `/` alongside `+`
|
||||
|
||||
7. enums (native and c interop) (see below)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user