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

From: Noam Postavsky <[email-masked]>
Date: Thu, 7 Jun 2018 13:36:15 -0400

On 7 June 2018 at 10:06, Thomas Fitzsimmons <[email-masked]> wrote:

> Yes, but the error that produces the backtrace happens much later
> via a different entry point, M-x exco-calendar-show-day:
>
> Debugger entered--Lisp error: (wrong-type-argument soap-binding ("http://schemas.microsoft.com/exchange/services/2006/messages" . "ExchangeServiceBinding"))
>   signal(wrong-type-argument (soap-binding ("http://schemas.microsoft.com/exchange/services/2006/messages" . "ExchangeServiceBinding")))
>   soap-find-operation(#s(soap-port :name "ExchangeServicePort" :namespace-tag nil :service-url "https://redacted/ews/exchange.asmx" :binding ("http://schemas.microsoft.com/exchange/services/2006/messages" . "ExchangeServiceBinding")) "FindItem")

> The initial problem in exco--bind-wsdl (via the M-x excorporate entry
> point) does not throw an error.  Basically, in the failure case, parsing
> of the WSDL XML is incomplete, and the later error is due to that.

Right, if I just evaluate the following in 26.1 without any 25.1
bytecode I get a similar error:

(let ((port (make-soap-port
         :name "ExchangeServicePort"
         :namespace-tag nil
         :service-url "https://redacted/ews/exchange.asmx"
         :binding
'("http://schemas.microsoft.com/exchange/services/2006/messages"
            . "ExchangeServiceBinding"))))
  (soap-find-operation port "FindItem"))

I don't quite understand how it's supposed to work successfully
though. Is there a way to see it working without having to run a
server on the other end (i.e., can you give some elisp forms to
evaluate that make the above work)?

I'm guessing the problem is with some old and new structs not matching
according to `equal' and/or `sxhash', which cl-old-struct-compat-mode
doesn't do anything about.