Subject: Re: bug#16353: 24.3.50; cl-position fails in 23.4.1

From: [email-masked] (João Távora)
Date: Tue, 07 Jan 2014 09:21:48 +0000

Stefan Monnier <[email-masked]> writes:

>>>>> This is GNU Emacs 23.4.1 (x86_64-pc-linux-gnu, GTK+ Version 2.24.10)
>>>>> of 2012-09-08 on trouble, modified by Debian
>>>>> Using that emacs and cl-lib-0.3.el this fails
>>>>> /usr/bin/emacs --batch -Q -l cl-lib.el \
>>>>> --eval "(princ (cl-position 2 '(1 2 3)))"
>>>> Namespace clash. cl-seq.el used to contain an internal function called
>>>> "cl-position". It was renamed to cl--position in 24.3.
>>> Indeed, thanks.  We need to adjust elpa's cl-lib.el accordingly (not
>>> sure how best to do that, tho).
>> Can it be done so that it I can still use cl-position in emacs 23.4.1?
>
> That would be best, yes.
>
>> Maybe by including in cl-lib-0.4 some byte-recompilation of the
>> cl-seq.el functions that Glenn mentions:
>
> Could be.

Can it be done without including the full definitions, e.g. via some
bytecode-changing trick? I'm asking because I could include this
workaround

> It'd be good to first get a list of the all conflicting functions.

Here's what I found

using cl-position:

   (defun remove* (cl-item cl-seq &rest cl-keys)
   (defun delete* (cl-item cl-seq &rest cl-keys)
   (defun cl-delete-duplicates (cl-seq cl-keys cl-copy)
   (defun cl-delete-duplicates (cl-seq cl-keys cl-copy)
   (defun cl-delete-duplicates (cl-seq cl-keys cl-copy)
   (defun substitute (cl-new cl-old cl-seq &rest cl-keys)
   (defun position (cl-item cl-seq &rest cl-keys)
   (defun search (cl-seq1 cl-seq2 &rest cl-keys)

these are all in cl-seq.el. using cl-adoing:
    
   (defun adjoin (cl-item cl-list &rest cl-keys)    in cl.el

using cl-delete-duplicates:

   (defun remove-duplicates (cl-seq &rest cl-keys) in cl-seq.el
   (defun delete-duplicates (cl-seq &rest cl-keys) in cl-seq.el

There are more internal functions prefixed with "cl-", but I don't think
they clash with aliases exported by cl-lib.

There's cl-macroexpand and cl-macroexpand-all, but I think these were
exported functions even back in 23.4.1.

João