On Sat, Jun 6, 2009 at 12:48 AM, Lennart Borgman wrote: > > Sigh, and my suggestion was of course unnecessary stupid. What is > needed is of course to record values and frame+buffer localness and > dito values and reset them. Nothing less than this will ever work > correctly, or? > > And does not this apply to all uses of specbind + unbind_to? > > Can it be sufficient to just change specbind and unbind_to? Is there > anything else that will be affected by changes in the specbind stack? > Since info about buffer+frame is alwas needed should specbinding be > changed to the below form? > > struct specbinding >  { >    Lisp_Object symbol; >    Lisp_Object old_value; >    Lisp_Object old_buffer_value; >    Lisp_Object old_frame_value; >    specbinding_func func; >    Lisp_Object unused;         /* Dividing by 16 is faster than by 12 */ >    Lisp_Object unused; >    Lisp_Object unused; >  }; Here is a bit modified suggestion and some code where I try to implement it. Please notice that I have not tested the code. It is very possible that I have misunderstood something so please look at the code. struct specbinding { Lisp_Object symbol; Lisp_Object old_value; specbinding_func func; // total 8 fields Lisp_Object need_test_local; Lisp_Object old_buffer; Lisp_Object old_buffer_value; Lisp_Object old_frame; Lisp_Object old_frame_value; //Lisp_Object unused; /* Dividing by 16 is faster than by 12 */ };