Re: [O] (Emacs 23/24 binary compatibility): defstruct, setf
Stefan Monnier monn...@iro.umontreal.ca writes: I think existing *.elc files compiled against Emacs-23.2.1 should load fine on new Emacs versions. It's indeed an incompatibility I introduced when we switched from CL's setf to gv.el's setf, because the two work in a very different way. In simple terms, the problem seems to be a 24.x style `setf' on a 23.x defstruct. NEWS has entries on gv.el and setf-s. I am not sure which of those entries amount to the above incompatibility. If we could report on incompatibiliy that would be awesome. Can the FIRST EVER setf call make (additional) version checks and report errors. Stefan
Re: [O] (Emacs 23/24 binary compatibility): defstruct, setf
Does the patch below work for you? Yes. Please install. Done, Stefan
Re: [O] (Emacs 23/24 binary compatibility): defstruct, setf
I think existing *.elc files compiled against Emacs-23.2.1 should load fine on new Emacs versions. It's indeed an incompatibility I introduced when we switched from CL's setf to gv.el's setf, because the two work in a very different way. Stefan
Re: [O] (Emacs 23/24 binary compatibility): defstruct, setf
I think existing *.elc files compiled against Emacs-23.2.1 should load fine on new Emacs versions. It's indeed an incompatibility I introduced when we switched from CL's setf to gv.el's setf, because the two work in a very different way. In simple terms, the problem seems to be a 24.x style `setf' on a 23.x defstruct. More specifically, the setf and the defstruct need to be compiled with the same version (either both cl.el, or both gv.el). If we could report on incompatibiliy that would be awesome. Can the FIRST EVER setf call make (additional) version checks and report errors. Does the patch below work for you? Stefan === modified file 'lisp/emacs-lisp/gv.el' --- lisp/emacs-lisp/gv.el 2013-08-13 02:30:52 + +++ lisp/emacs-lisp/gv.el 2013-09-04 02:56:26 + @@ -102,7 +102,11 @@ ;; Follow aliases. (setq me (cons (symbol-function head) (cdr place (if (eq me place) - (error %S is not a valid place expression place) + (error + (if (and (symbolp head) (get head 'setf-method)) + Incompatible place expression needs recompilation: %S + %S is not a valid place expression) + place) (gv-get me do))) ;;;###autoload