Files
five/compiler
CharlesKWON 111ab8a6f0 perf(gengo): unary-minus literal fold + x:=x+y → LocalAdd peephole
Two more leaf-level code-gen cleanups now that the const folder is in.

 - UnaryExpr MINUS over a LITERAL (INT/DOUBLE) emits the negated value
   directly, so `-42` becomes PushInt(-42) instead of PushInt(42) +
   Negate(). Guarded: MinInt64 passes through to the VM so the
   coerce-to-double path stays authoritative. Variables fall through
   to the normal Negate path — the LiteralExpr type assertion is the
   gate, so runtime-typed `-x` keeps its semantics.

 - `x := x + <expr>` / `x := x - <expr>` detected when the LHS ident
   resolves to the same local as the self-reference on the RHS,
   emits the same LocalAdd / Negate+LocalAdd shape that x += y already
   used. Non-matching locals (shadowing, module statics) fall through.

Verification
 - go test ./...              ALL PASS
 - FiveSql2 test_sql1999      43/43
 - tests/compat_harbour       56/56

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 08:26:59 +09:00
..