It appears that check_newvar was called with &e1, but then new_var was mistakenly called with e, which caused the parser to generate garbage opcodes, leading to crashes.
Wow, you nailed it. I'm impressed because it was hard to find. I cross-checked with Tasmota bytecode compilation and it does not introduce any regression.
It appears that
check_newvar
was called with&e1
, but thennew_var
was mistakenly called withe
, which caused the parser to generate garbage opcodes, leading to crashes.Added test case to verify this behavior.