]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/net/soap-client.el (soap-type-of): Optimize for Emacs≥26
authorStefan Monnier <monnier@iro.umontreal.ca>
Wed, 18 Jul 2018 02:22:15 +0000 (22:22 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Wed, 18 Jul 2018 02:22:41 +0000 (22:22 -0400)
lisp/net/soap-client.el

index 17f83082f8dba4378b753083529609cfe91bfe39..f5de05dc3d706804dccae9e959f7c928ff0eeef9 100644 (file)
@@ -685,14 +685,17 @@ This is a specialization of `soap-decode-type' for
         (anyType (soap-decode-any-type node))
         (Array (soap-decode-array node))))))
 
-(defun soap-type-of (element)
-  "Return the type of ELEMENT."
-  ;; Support Emacs < 26 byte-code running in Emacs >= 26 sessions
-  ;; (Bug#31742).
-  (let ((type (type-of element)))
-    (if (eq type 'vector)
-        (aref element 0) ; For Emacs 25 and earlier.
-      type)))
+(defalias 'soap-type-of
+  (if (eq 'soap-xs-basic-type (type-of (make-soap-xs-basic-type)))
+      ;; `type-of' in Emacs ≥ 26 already does what we need.
+      #'type-of
+    ;; For Emacs < 26, use our own function.
+    (lambda (element)
+      "Return the type of ELEMENT."
+      (if (vectorp element)
+          (aref element 0)            ;Assume this vector is actually a struct!
+        ;; This should never happen.
+        (type-of element)))))
 
 ;; Register methods for `soap-xs-basic-type'
 (let ((tag (soap-type-of (make-soap-xs-basic-type))))
@@ -2881,6 +2884,8 @@ reference multiRef parts which are external to RESPONSE-NODE."
 
 ;;;; SOAP type encoding
 
+;; FIXME: Use `cl-defmethod' (but this requires Emacs-25).
+
 (defun soap-encode-attributes (value type)
   "Encode XML attributes for VALUE according to TYPE.
 This is a generic function which determines the attribute encoder