In some of the recent meetings we have discussed the ABI contract for pike functions. Since apply already cleans up the stack (the top is the return value, and the rest is discarded), it would make sense to change the contract so that C functions don't have to care what is on the stack beside the return value.
However, the drawback is that you can no longer just call these functions (typically f_*) from other C-code if you intend to use anthing more than the top of the stack. E.g.
f_a(); f_b(); f_aggregate(2);
You would have to save the stack position and do a stack_pop_n_elems_keep_top() after each call.
Do we still think this change is a good one?