Many functions in emacs contain the sequence { count = SPECPDL_INDEX (); record_unwind_protect val = Fprogn (args); return unbind_to (count, val); } like the function attached below, Can you explain me the logic of specpdl please ? DEFUN ("save-current-buffer", Fsave_current_buffer, Ssave_current_buffer, 0, UNEVALLED, 0, .... (Lisp_Object args) { Lisp_Object val; int count = SPECPDL_INDEX (); record_unwind_protect (set_buffer_if_live, Fcurrent_buffer ()); val = Fprogn (args); return unbind_to (count, val); }