If the symbol node is interpolated like this :"#{foo}" the instruction
sequence should be putstring followed by intern. In this case it was
a putobject causing the test_yjit tests to fail. Note that yjit is
not required to reproduce - the instructions are putstring and intern for yjit and non-yjit with the original parser.
To fix I moved pm_interpolated_node_compile out of the else, and
entirely removed the conditional. pm_interpolated_node_compile knows
how / when to use putstring over putobject already. The intern is
then added by removing the conditional.
Fix interpolated sybmol node instructions
If the symbol node is interpolated like this
:"#{foo}"
the instructionsequence should be
putstring
followed byintern
. In this case it wasa
putobject
causing thetest_yjit
tests to fail. Note that yjit isnot required to reproduce - the instructions are
putstring
andintern
for yjit and non-yjit with the original parser.To fix I moved
pm_interpolated_node_compile
out of the else, andentirely removed the conditional.
pm_interpolated_node_compile
knowshow / when to use
putstring
overputobject
already. Theintern
isthen added by removing the conditional.
Before:
After:
Fixes the test
TestYJIT#test_compile_dynamic_symbol
. Related to ruby/prism#2935