Function: js--pitem-add-child
js--pitem-add-child is a byte-compiled function defined in js.el.gz.
Signature
(js--pitem-add-child PITEM CHILD)
Documentation
Copy js--pitem PITEM, and push CHILD onto its list of children.
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/js.el.gz
(defun js--pitem-add-child (pitem child)
"Copy `js--pitem' PITEM, and push CHILD onto its list of children."
(cl-assert (integerp (js--pitem-h-begin child)))
(cl-assert (if (consp (js--pitem-name child))
(cl-loop for part in (js--pitem-name child)
always (stringp part))
t))
;; This trick works because we know (based on our defstructs) that
;; the child list is always the first element, and so the second
;; element and beyond can be shared when we make our "copy".
(cons
(let ((name (js--pitem-name child))
(type (js--pitem-type child)))
(cond ((cdr-safe name) ; true if a list of at least two elements
;; Use slow path because we need class lookup
(js--splice-into-items (car pitem) child name))
((and (consp type)
(plist-get type :prototype))
;; Use slow path because we need class merging. We know
;; name is a list here because down in
;; `js--ensure-cache', we made sure to only add
;; class entries with lists for :name
(cl-assert (consp name))
(js--splice-into-items (car pitem) child name))
(t
;; Fast path
(cons child (car pitem)))))
(cdr pitem)))