* Fix ShortCircuit jump optimization corrupting assignments
The short-circuit jump optimizer threaded a logical jump past an
opposite-type logical jump (offset++). That target pops the value on
fall-through (Executor::ins_logical_jump), so skipping it left a stray
value on the stack, which corrupts a following stack-addressed assignment:
var x := ( a && b ) || ( c && d );
left x uninitialized whenever the first clause was false (i.e. the
deciding clause is not the first operand). The same chain works as an
if() condition or when declaration and assignment are split
( var x; x := ... ).
Only thread same-type logical jumps; keep targeting opposite-type ones so
their fall-through pop still runs.
Adds testsuite/escript/opt/shortcircuit7 exercising the value / assignment
context (companion to shortcircuit6's if()-condition tests).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* removed other unsafe jump merges
additional test
* adapted testdata
* core changes xml
---------
Co-authored-by: Oleksii Rebreniuk <oleksii.rebreniuk@shopit.se>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>