Incidentally, what does the "no_free" in object_index_no_free() refer to then? That the target svalue is not freed before overwriting?
Exactly. So it is the correct version to use when the svalue you are overwriting is not initialized (uninitialized C variable, new stack entry etc).