Subject: bug#31742: 26.1.50; excorporate.elc byte-compiled in Emacs 25.x fails in Emacs 26.1

From: Noam Postavsky <[email-masked]>
Date: Fri, 08 Jun 2018 08:19:45 -0400

Thomas Fitzsimmons <[email-masked]> writes:

> Noam Postavsky <[email-masked]> writes:
>
>> Thomas Fitzsimmons <[email-masked]> writes:
>>
>>> (defun soap-resolve-references (element wsdl)
>>
>>>   (let ((resolver (get (aref element 0) 'soap-resolve-references)))
>>
>> Ah, then it should work to replace the (aref element 0) with (type-of
>> element) as long as cl-old-struct-compat-mode is enabled.
>
> Yes, I retested with that change and it does work.  I guess I should
> submit a patch to change all those occurrences in soap-client.

I just noticed soap-client is also an ELPA package; then there is the
additional complication that type-of will give the wrong answer in Emacs
versions 25 and older.  So you would need something like

    (let ((type (type-of element)))
      (if (eq type 'vector)
          (aref element 0) ; For Emacs 25 and earlier.
        type))

> I'm hoping cl-old-struct-compat-mode will continue to be enabled by
> default for a long time.

I was going to say, it's currently not enabled by default, but it looks
like it gets enabled automagically when you load code from the old
cl-defstruct:

    (defun cl-struct-define (name docstring parent type named slots children-sym
                                  tag print)
      (unless type
        ;; Legacy defstruct, using tagged vectors.  Enable backward compatibility.
        (cl-old-struct-compat-mode 1))