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)))))))