summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Fitzsimmons <fitzsim@fitzsim.org>2018-06-08 22:41:28 -0400
committerThomas Fitzsimmons <fitzsim@fitzsim.org>2018-06-11 21:39:06 -0400
commit642c11fdd179c9b7de32c4c83bf17b073dcdd527 (patch)
tree3febc0dabc7c31df6147fc5f365a0c265117f992
parent9c6f35a6b2071669b88a3fd72456cced5fd55bff (diff)
downloademacs-642c11fdd179c9b7de32c4c83bf17b073dcdd527.tar.gz
soap-client: Add byte-code compatibility function (Bug#31742)
* lisp/net/soap-client.el: Bump version to 3.1.4. (soap-type-of): New function. (soap-resolve-references, soap-decode-type) (soap-encode-attributes, soap-encode-value): Replace aref calls with calls to soap-type-of. * lisp/net/soap-inspect.el (soap-sample-value, soap-inspect): Replace aref calls with calls to soap-type-of. Co-authored-by: Noam Postavsky <npostavs@gmail.com> Backport: (cherry picked from commit 1feb2e221349f26ec26bc684e0cce2acecbed3ca)
-rw-r--r--lisp/net/soap-client.el48
-rw-r--r--lisp/net/soap-inspect.el44
2 files changed, 51 insertions, 41 deletions
diff --git a/lisp/net/soap-client.el b/lisp/net/soap-client.el
index 3996da0b554..17f83082f8d 100644
--- a/lisp/net/soap-client.el
+++ b/lisp/net/soap-client.el
@@ -5,7 +5,7 @@
;; Author: Alexandru Harsanyi <AlexHarsanyi@gmail.com>
;; Author: Thomas Fitzsimmons <fitzsim@fitzsim.org>
;; Created: December, 2009
-;; Version: 3.1.3
+;; Version: 3.1.4
;; Keywords: soap, web-services, comm, hypermedia
;; Package: soap-client
;; Homepage: https://github.com/alex-hhh/emacs-soap-client
@@ -685,8 +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)))
+
;; Register methods for `soap-xs-basic-type'
-(let ((tag (aref (make-soap-xs-basic-type) 0)))
+(let ((tag (soap-type-of (make-soap-xs-basic-type))))
(put tag 'soap-attribute-encoder #'soap-encode-xs-basic-type-attributes)
(put tag 'soap-encoder #'soap-encode-xs-basic-type)
(put tag 'soap-decoder #'soap-decode-xs-basic-type))
@@ -915,7 +924,7 @@ This is a specialization of `soap-decode-type' for
(soap-decode-type type node)))
;; Register methods for `soap-xs-element'
-(let ((tag (aref (make-soap-xs-element) 0)))
+(let ((tag (soap-type-of (make-soap-xs-element))))
(put tag 'soap-resolve-references #'soap-resolve-references-for-xs-element)
(put tag 'soap-attribute-encoder #'soap-encode-xs-element-attributes)
(put tag 'soap-encoder #'soap-encode-xs-element)
@@ -1011,7 +1020,7 @@ See also `soap-wsdl-resolve-references'."
(setf (soap-xs-attribute-reference attribute)
(soap-wsdl-get reference wsdl predicate)))))
-(put (aref (make-soap-xs-attribute) 0)
+(put (soap-type-of (make-soap-xs-attribute))
'soap-resolve-references #'soap-resolve-references-for-xs-attribute)
(defun soap-resolve-references-for-xs-attribute-group (attribute-group wsdl)
@@ -1036,7 +1045,7 @@ See also `soap-wsdl-resolve-references'."
(setf (soap-xs-attribute-group-attribute-groups attribute-group)
(soap-xs-attribute-group-attribute-groups resolved))))))
-(put (aref (make-soap-xs-attribute-group) 0)
+(put (soap-type-of (make-soap-xs-attribute-group))
'soap-resolve-references #'soap-resolve-references-for-xs-attribute-group)
;;;;; soap-xs-simple-type
@@ -1374,7 +1383,7 @@ This is a specialization of `soap-decode-type' for
(soap-validate-xs-simple-type value type))))
;; Register methods for `soap-xs-simple-type'
-(let ((tag (aref (make-soap-xs-simple-type) 0)))
+(let ((tag (soap-type-of (make-soap-xs-simple-type))))
(put tag 'soap-resolve-references
#'soap-resolve-references-for-xs-simple-type)
(put tag 'soap-attribute-encoder #'soap-encode-xs-simple-type-attributes)
@@ -1927,7 +1936,7 @@ This is a specialization of `soap-decode-type' for
(soap-xs-complex-type-indicator type)))))
;; Register methods for `soap-xs-complex-type'
-(let ((tag (aref (make-soap-xs-complex-type) 0)))
+(let ((tag (soap-type-of (make-soap-xs-complex-type))))
(put tag 'soap-resolve-references
#'soap-resolve-references-for-xs-complex-type)
(put tag 'soap-attribute-encoder #'soap-encode-xs-complex-type-attributes)
@@ -2147,7 +2156,7 @@ This is a generic function which invokes a specific resolver
function depending on the type of the ELEMENT.
If ELEMENT has no resolver function, it is silently ignored."
- (let ((resolver (get (aref element 0) 'soap-resolve-references)))
+ (let ((resolver (get (soap-type-of element) 'soap-resolve-references)))
(when resolver
(funcall resolver element wsdl))))
@@ -2272,13 +2281,13 @@ See also `soap-wsdl-resolve-references'."
;; Install resolvers for our types
(progn
- (put (aref (make-soap-message) 0) 'soap-resolve-references
+ (put (soap-type-of (make-soap-message)) 'soap-resolve-references
'soap-resolve-references-for-message)
- (put (aref (make-soap-operation) 0) 'soap-resolve-references
+ (put (soap-type-of (make-soap-operation)) 'soap-resolve-references
'soap-resolve-references-for-operation)
- (put (aref (make-soap-binding) 0) 'soap-resolve-references
+ (put (soap-type-of (make-soap-binding)) 'soap-resolve-references
'soap-resolve-references-for-binding)
- (put (aref (make-soap-port) 0) 'soap-resolve-references
+ (put (soap-type-of (make-soap-port)) 'soap-resolve-references
'soap-resolve-references-for-port))
(defun soap-wsdl-resolve-references (wsdl)
@@ -2685,16 +2694,17 @@ decode function to perform the actual decoding."
(cond ((listp type)
(catch 'done
(dolist (union-member type)
- (let* ((decoder (get (aref union-member 0)
+ (let* ((decoder (get (soap-type-of union-member)
'soap-decoder))
(result (ignore-errors
(funcall decoder
union-member node))))
(when result (throw 'done result))))))
(t
- (let ((decoder (get (aref type 0) 'soap-decoder)))
+ (let ((decoder (get (soap-type-of type) 'soap-decoder)))
(cl-assert decoder nil
- "no soap-decoder for %s type" (aref type 0))
+ "no soap-decoder for %s type"
+ (soap-type-of type))
(funcall decoder type node))))))))))
(defun soap-decode-any-type (node)
@@ -2878,9 +2888,9 @@ for the type and calls that specialized function to do the work.
Attributes are inserted in the current buffer at the current
position."
- (let ((attribute-encoder (get (aref type 0) 'soap-attribute-encoder)))
+ (let ((attribute-encoder (get (soap-type-of type) 'soap-attribute-encoder)))
(cl-assert attribute-encoder nil
- "no soap-attribute-encoder for %s type" (aref type 0))
+ "no soap-attribute-encoder for %s type" (soap-type-of type))
(funcall attribute-encoder value type)))
(defun soap-encode-value (value type)
@@ -2892,8 +2902,8 @@ TYPE is one of the soap-*-type structures which defines how VALUE
is to be encoded. This is a generic function which finds an
encoder function based on TYPE and calls that encoder to do the
work."
- (let ((encoder (get (aref type 0) 'soap-encoder)))
- (cl-assert encoder nil "no soap-encoder for %s type" (aref type 0))
+ (let ((encoder (get (soap-type-of type) 'soap-encoder)))
+ (cl-assert encoder nil "no soap-encoder for %s type" (soap-type-of type))
(funcall encoder value type))
(when (soap-element-namespace-tag type)
(add-to-list 'soap-encoded-namespaces (soap-element-namespace-tag type))))
diff --git a/lisp/net/soap-inspect.el b/lisp/net/soap-inspect.el
index 050be453db3..252b1f35ff5 100644
--- a/lisp/net/soap-inspect.el
+++ b/lisp/net/soap-inspect.el
@@ -49,10 +49,10 @@ for encoding it using TYPE when making SOAP requests.
This is a generic function, depending on TYPE a specific function
will be called."
- (let ((sample-value (get (aref type 0) 'soap-sample-value)))
+ (let ((sample-value (get (soap-type-of type) 'soap-sample-value)))
(if sample-value
(funcall sample-value type)
- (error "Cannot provide sample value for type %s" (aref type 0)))))
+ (error "Cannot provide sample value for type %s" (soap-type-of type)))))
(defun soap-sample-value-for-xs-basic-type (type)
"Provide a sample value for TYPE, an xs-basic-type.
@@ -174,31 +174,31 @@ This is a specialization of `soap-sample-value' for
(progn
;; Install soap-sample-value methods for our types
- (put (aref (make-soap-xs-basic-type) 0)
+ (put (soap-type-of (make-soap-xs-basic-type))
'soap-sample-value
'soap-sample-value-for-xs-basic-type)
- (put (aref (make-soap-xs-element) 0)
+ (put (soap-type-of (make-soap-xs-element))
'soap-sample-value
'soap-sample-value-for-xs-element)
- (put (aref (make-soap-xs-attribute) 0)
+ (put (soap-type-of (make-soap-xs-attribute))
'soap-sample-value
'soap-sample-value-for-xs-attribute)
- (put (aref (make-soap-xs-attribute) 0)
+ (put (soap-type-of (make-soap-xs-attribute))
'soap-sample-value
'soap-sample-value-for-xs-attribute-group)
- (put (aref (make-soap-xs-simple-type) 0)
+ (put (soap-type-of (make-soap-xs-simple-type))
'soap-sample-value
'soap-sample-value-for-xs-simple-type)
- (put (aref (make-soap-xs-complex-type) 0)
+ (put (soap-type-of (make-soap-xs-complex-type))
'soap-sample-value
'soap-sample-value-for-xs-complex-type)
- (put (aref (make-soap-message) 0)
+ (put (soap-type-of (make-soap-message))
'soap-sample-value
'soap-sample-value-for-message))
@@ -222,7 +222,7 @@ Used to implement the BACK button.")
The buffer is populated with information about ELEMENT with links
to its sub elements. If ELEMENT is the WSDL document itself, the
entire WSDL can be inspected."
- (let ((inspect (get (aref element 0) 'soap-inspect)))
+ (let ((inspect (get (soap-type-of element) 'soap-inspect)))
(unless inspect
(error "Soap-inspect: no inspector for element"))
@@ -507,39 +507,39 @@ TYPE is a `soap-xs-complex-type'"
(progn
;; Install the soap-inspect methods for our types
- (put (aref (make-soap-xs-basic-type) 0) 'soap-inspect
+ (put (soap-type-of (make-soap-xs-basic-type)) 'soap-inspect
'soap-inspect-xs-basic-type)
- (put (aref (make-soap-xs-element) 0) 'soap-inspect
+ (put (soap-type-of (make-soap-xs-element)) 'soap-inspect
'soap-inspect-xs-element)
- (put (aref (make-soap-xs-simple-type) 0) 'soap-inspect
+ (put (soap-type-of (make-soap-xs-simple-type)) 'soap-inspect
'soap-inspect-xs-simple-type)
- (put (aref (make-soap-xs-complex-type) 0) 'soap-inspect
+ (put (soap-type-of (make-soap-xs-complex-type)) 'soap-inspect
'soap-inspect-xs-complex-type)
- (put (aref (make-soap-xs-attribute) 0) 'soap-inspect
+ (put (soap-type-of (make-soap-xs-attribute)) 'soap-inspect
'soap-inspect-xs-attribute)
- (put (aref (make-soap-xs-attribute-group) 0) 'soap-inspect
+ (put (soap-type-of (make-soap-xs-attribute-group)) 'soap-inspect
'soap-inspect-xs-attribute-group)
- (put (aref (make-soap-message) 0) 'soap-inspect
+ (put (soap-type-of (make-soap-message)) 'soap-inspect
'soap-inspect-message)
- (put (aref (make-soap-operation) 0) 'soap-inspect
+ (put (soap-type-of (make-soap-operation)) 'soap-inspect
'soap-inspect-operation)
- (put (aref (make-soap-port-type) 0) 'soap-inspect
+ (put (soap-type-of (make-soap-port-type)) 'soap-inspect
'soap-inspect-port-type)
- (put (aref (make-soap-binding) 0) 'soap-inspect
+ (put (soap-type-of (make-soap-binding)) 'soap-inspect
'soap-inspect-binding)
- (put (aref (make-soap-port) 0) 'soap-inspect
+ (put (soap-type-of (make-soap-port)) 'soap-inspect
'soap-inspect-port)
- (put (aref (soap-make-wsdl "origin") 0) 'soap-inspect
+ (put (soap-type-of (soap-make-wsdl "origin")) 'soap-inspect
'soap-inspect-wsdl))
(provide 'soap-inspect)