Function: parseedn-reduce-branch
parseedn-reduce-branch is a byte-compiled function defined in
parseedn.el.
Signature
(parseedn-reduce-branch STACK OPENING-TOKEN CHILDREN OPTIONS)
Documentation
Reduce STACK with an sequence containing a collection of other elisp values.
Ignores discard tokens.
OPENING-TOKEN is a lex token representing an opening paren, bracket or
brace.
CHILDREN is a collection elisp values to be reduced into an elisp
sequence.
OPTIONS is an association list. See parseclj-parse for more information
on available options.
Source Code
;; Defined in ~/.emacs.d/elpa/parseedn-20231203.1909/parseedn.el
(defun parseedn-reduce-branch (stack opening-token children options)
"Reduce STACK with an sequence containing a collection of other elisp values.
Ignores discard tokens.
OPENING-TOKEN is a lex token representing an opening paren, bracket or
brace.
CHILDREN is a collection elisp values to be reduced into an elisp
sequence.
OPTIONS is an association list. See `parseclj-parse' for more information
on available options."
(let ((tag-readers (parseclj-alist-merge parseedn-default-tag-readers (alist-get :tag-readers options)))
(token-type (parseclj-lex-token-type opening-token)))
(if (eq token-type :discard)
stack
(cond
((eq :root token-type) (cons children stack))
((eq :lparen token-type) (cons children stack))
((eq :lbracket token-type) (cons (apply #'vector children) stack))
((eq :set token-type) (cons (list 'edn-set children) stack))
((eq :lbrace token-type) (let* ((kvs (seq-partition children 2))
(prefixed-map? (eq :map-prefix (parseclj-lex-token-type (car stack)))))
(if prefixed-map?
(cons (parseedn--build-prefixed-map (car stack) kvs) (cdr stack))
(cons (parseedn--build-non-prefixed-map kvs) stack))))
((eq :tag token-type) (let* ((tag (intern (substring (alist-get :form opening-token) 1)))
(reader (alist-get tag tag-readers))
(default-reader (alist-get :default tag-readers parseedn-default-data-reader-fn)))
(cons
(cond
((functionp reader)
(funcall reader (car children)))
((functionp default-reader)
(funcall default-reader tag (car children)))
(t (user-error "No reader for tag #%S in %S" tag (map-keys tag-readers))))
stack)))))))