copy() {
    // Cast as the type parameters will be the same after attaching.
    const destination =
      /** @type {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>} */ (
        new Processor()
      )
    let index = -1

    while (++index < this.attachers.length) {
      const attacher = this.attachers[index]
      destination.use(...attacher)
    }

    destination.data(extend(true, {}, this.namespace))

    return destination
  }
Copy a processor.

@deprecated
  This is a private internal method and should not be used.
@returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}
  New *unfrozen* processor ({@linkcode Processor}) that is
  configured to work the same as its ancestor.
  When the descendant processor is configured in the future it does not
  affect the ancestral processor.