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

From: Alex Harsanyi <[email-masked]>
Date: Sat, 9 Jun 2018 08:01:31 +0800

On Fri, Jun 8, 2018 at 10:18 PM, Thomas Fitzsimmons <[email-masked]> wrote:
> (CCing Alex Harsanyi.)
>
> Noam Postavsky <[email-masked]> writes:
>
>> 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))
>
> OK, I had that on my list to investigate before patching soap-client,
> the compatibility range of type-of, but you've done it for me, thanks.
> A soap-type-of compatibility function probably makes sense to replace
> the (aref ... 0) occurrences in soap-client and soap-inspect.
>
>>> I'm hoping cl-old-struct-compat-mode will continue to be enabled by
>>> default for a long time.
>>

The `(aref element 0)` trick is the only one that `soap-client` uses.  All
other struct usage is via accessor functions, the rest of the code does not
assume they are vectors.  It seems to me that `cl-old-struct-compat-mode` is
not needed.

Thomas, will you prepare the patch for soap-client?

Thanks,
Alex.