Fixed call argument value snapshotting.
Since
fd5e523f (0.9.7), njs has evaluated all call argument expressions
before emitting the frame and PUT_ARG instructions. This fixed await
expressions in call arguments and preserved argument side effects before
callee validation, but left PUT_ARG reading argument values only after later
argument expressions had already run.
As a result, an earlier argument backed by a mutable variable slot could
observe a later mutation of the same slot. For example, f(a, a = 2) passed
2 as both arguments instead of preserving the first value as 1. The same
issue applied to later argument effects such as getters.
The fix is to preserve affected argument values in temporary registers where
appropriate.
This fixes #1059 issue on Github.