| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 | /** * @author Toru Nagashima <https://github.com/mysticatea> * See LICENSE file in root directory for full license. */"use strict"/** * Merge two visitors. * This function modifies `visitor1` directly to merge. * @param {Visitor} visitor1 The visitor which is assigned. * @param {Visitor} visitor2 The visitor which is assigning. * @returns {Visitor} `visitor1`. */module.exports = function mergeVisitorsInPlace(visitor1, visitor2) {    for (const key of Object.keys(visitor2)) {        const handler1 = visitor1[key]        const handler2 = visitor2[key]        if (typeof handler1 === "function") {            if (handler1._handlers) {                handler1._handlers.push(handler2)            } else {                const handlers = [handler1, handler2]                visitor1[key] = Object.assign(dispatch.bind(null, handlers), {                    _handlers: handlers,                })            }        } else {            visitor1[key] = handler2        }    }    return visitor1}/** * Dispatch all given functions with a node. * @param {function[]} handlers The function list to call. * @param {Node} node The AST node to be handled. * @returns {void} */function dispatch(handlers, node) {    for (const h of handlers) {        h(node)    }}
 |