Function: nrepl-bdecode
nrepl-bdecode is a byte-compiled function defined in nrepl-client.el.
Signature
(nrepl-bdecode STRING-Q &optional RESPONSE-Q)
Documentation
Decode STRING-Q and place the results into RESPONSE-Q.
STRING-Q is either a queue of strings or a string. RESPONSE-Q is a queue of server requests (nREPL dicts). STRING-Q and RESPONSE-Q are modified by side effects.
Return a cons (STRING-Q . RESPONSE-Q) where STRING-Q is the original queue containing the remainder of the input strings which could not be decoded. RESPONSE-Q is the original queue with successfully decoded messages enqueued and with slot STUB containing a nested stack of an incompletely decoded message or nil if the strings were completely decoded.
Source Code
;; Defined in ~/.emacs.d/elpa/cider-20260414.1619/nrepl-client.el
(defun nrepl-bdecode (string-q &optional response-q)
"Decode STRING-Q and place the results into RESPONSE-Q.
STRING-Q is either a queue of strings or a string. RESPONSE-Q is a queue of
server requests (nREPL dicts). STRING-Q and RESPONSE-Q are modified by side
effects.
Return a cons (STRING-Q . RESPONSE-Q) where STRING-Q is the original queue
containing the remainder of the input strings which could not be
decoded. RESPONSE-Q is the original queue with successfully decoded messages
enqueued and with slot STUB containing a nested stack of an incompletely
decoded message or nil if the strings were completely decoded."
(with-current-buffer (get-buffer-create " *nrepl-decoding*")
;; Don't needlessly call `fundamental-mode', to prevent needlessly firing
;; hooks. This fixes an issue with evil-mode where the cursor loses its
;; correct color.
(nrepl--ensure-fundamental-mode)
(erase-buffer)
(if (queue-p string-q)
(while (queue-head string-q)
(insert (queue-dequeue string-q)))
(insert string-q)
(setq string-q (queue-create)))
(goto-char 1)
(unless response-q
(setq response-q (nrepl-response-queue)))
(let ((istack (nrepl--bdecode-message
(nrepl-response-queue-stub response-q))))
(while (and (eq (car istack) :end)
(not (eobp)))
(queue-enqueue response-q (cadr istack))
(setq istack (nrepl--bdecode-message)))
(unless (eobp)
(queue-enqueue string-q (buffer-substring (point) (point-max))))
(if (not (eq (car istack) :end))
(setf (nrepl-response-queue-stub response-q) (cdr istack))
(queue-enqueue response-q (cadr istack))
(setf (nrepl-response-queue-stub response-q) nil))
(erase-buffer)
(cons string-q response-q))))