Stefan Monnier writes: >> Just out of curiosity, where is this restriction set? > > The code I sent was broken (in the list case where we need to set the > MAP, the code does (setq map ..) where `map' is an internal variable, > IOW it sets the wrong thing) so the restriction didn't actually appear. > > It should look a bit more like: > > (put 'map--raw-place 'gv-expander #'funcall) > [...] > (declare > (gv-expander > (lambda (do) > (gv-letplace (mgetter msetter) map > (macroexp-let2* nil > ;; Eval them once and for all in the right order. > ((key key) (default default)) > `(map--dispatch ,mgetter > :list ,(gv-get `(alist-get ,key (map--raw-place ,mgetter ,msetter) > ,default) > do) > :hash-table ,(funcall do `(gethash ,key ,mgetter ,default) > (lambda (v) `(puthash ,key ,v ,mgetter))) > :array ,(funcall do `(aref ,mgetter ,key) > (lambda (v) `(aset ,mgetter ,key ,v))))))))) > > And this "raw-place" should probably be added to gv.el. You lost me :-) Could you explain a bit more? Nico -- Nicolas Petton http://nicolas-petton.fr